use Galette\DynamicFields\Boolean;
use Slim\Http\Request;
use Slim\Http\Response;
-use Galette\Core\Authentication;
use Galette\Core\GaletteMail;
use Galette\Core\Gaptcha;
-use Galette\Core\Password;
-use Galette\Core\Picture;
use Galette\Entity\Adherent;
use Galette\Entity\Contribution;
use Galette\Entity\ContributionsTypes;
use Galette\Filters\AdvancedMembersList;
use Galette\Filters\MembersList;
use Galette\IO\File;
-use Galette\IO\MembersCsv;
use Galette\Repository\Groups;
use Galette\Repository\Members;
use Galette\Repository\PaymentTypes;
$member = $this->session->member;
$this->session->member = null;
} else {
- $deps = [
- 'dynamics' => true
- ];
- $member = new Adherent($this->zdb, null, $deps);
+ $member = new Adherent($this->zdb);
+ $member->enableDep('dynamics');
}
//mark as self membership
*/
public function show(Request $request, Response $response, int $id): Response
{
- $deps = array(
- 'picture' => true,
- 'groups' => true,
- 'dues' => true,
- 'parent' => true,
- 'children' => true,
- 'dynamics' => true
- );
- $member = new Adherent($this->zdb, $id, $deps);
+ $member = new Adherent($this->zdb);
+ $member
+ ->enableAllDeps()
+ ->load($id);
if (!$member->canShow($this->login)) {
$this->flash->addMessage(
int $pos,
string $name
): Response {
- $deps = array(
- 'picture' => false,
- 'groups' => false,
- 'dues' => false,
- 'parent' => false,
- 'children' => false,
- 'dynamics' => true
- );
- $member = new Adherent($this->zdb, $id, $deps);
+ $member = new Adherent($this->zdb);
+ $member
+ ->disableAllDeps()
+ ->enableDep('dynamics')
+ ->load($id);
$denied = null;
if (!$member->canShow($this->login)) {
$groups = new Groups($this->zdb, $this->login);
$groups_list = $groups->getList();
- //we want only visibles fields
+ //we want only visible fields
$fields = $this->members_fields;
$fc = $this->fields_config;
$fc->filterVisible($this->login, $fields);
}
//dynamic fields
- $deps = array(
- 'picture' => false,
- 'groups' => false,
- 'dues' => false,
- 'parent' => false,
- 'children' => false,
- 'dynamics' => false
- );
- $member = new Adherent($this->zdb, $this->login->login, $deps);
+ $member = new Adherent($this->zdb);
+ $member
+ ->disableAllDeps()
+ ->enableDep('dynamics')
+ ->loadFromLoginOrMail($this->login->login);
$adh_dynamics = new DynamicFieldsHandle($this->zdb, $this->login, $member);
$contrib = new Contribution($this->zdb, $this->login);
//Contributions types
$ct = new ContributionsTypes($this->zdb);
- //Payments types
+ //Payment types
$ptypes = new PaymentTypes(
$this->zdb,
$this->preferences,
*
* @param Request $request PSR Request
* @param Response $response PSR Response
- * @param string $option One of 'page' or 'order'
+ * @param string|null $option One of 'page' or 'order'
* @param string|integer $value Value of the option
*
* @return Response
{
$post = $request->getParsedBody();
- if (isset($this->session->ajax_members_filters)) {
- $filters = $this->session->ajax_members_filters;
- } else {
- $filters = new MembersList();
- }
+ $filters = $this->session->ajax_members_filters ?? new MembersList();
if ($option == 'page') {
$filters->current_page = (int)$value;
int $id = null,
string $action = 'edit'
): Response {
- $deps = array(
- 'picture' => true,
- 'groups' => true,
- 'dues' => true,
- 'parent' => true,
- 'children' => true,
- 'dynamics' => true
- );
-
//instantiate member object
- $member = new Adherent($this->zdb, $id, $deps);
+ $member = new Adherent($this->zdb);
+ $member->enableAllDeps()->load($id);
if ($this->session->member !== null) {
//retrieve from session, in add or edit
$form_elements = $fc->getMassiveFormElements($this->members_fields, $this->login);
//dynamic fields
- $deps = array(
- 'picture' => false,
- 'groups' => false,
- 'dues' => false,
- 'parent' => false,
- 'children' => false,
- 'dynamics' => true
- );
- $member = new Adherent($this->zdb, null, $deps);
+ $member = new Adherent($this->zdb);
+ $member->disableAllDeps()->enableDep('dynamics');
//Status
$statuts = new Status($this->zdb);
}
//handle dynamic fields
- $deps = array(
- 'picture' => true,
- 'groups' => true,
- 'dues' => true,
- 'parent' => true,
- 'children' => true,
- 'dynamics' => true
- );
- $member = new Adherent($this->zdb, null, $deps);
- $member->setDependencies(
- $this->preferences,
- $this->members_fields,
- $this->history
- );
+ $member = new Adherent($this->zdb);
+ $member
+ ->enableAllDeps()
+ ->setDependencies(
+ $this->preferences,
+ $this->members_fields,
+ $this->history
+ );
$dynamic_fields = $member->getDynamicFields()->getFields();
foreach ($dynamic_fields as $field) {
$mass_id = 'mass_info_field_' . $field->getId();
//try on dynamic fields
if ($dynamic_fields === null) {
//handle dynamic fields
- $deps = array(
- 'picture' => true,
- 'groups' => true,
- 'dues' => true,
- 'parent' => true,
- 'children' => true,
- 'dynamics' => true
- );
- $member = new Adherent($this->zdb, null, $deps);
- $member->setDependencies(
- $this->preferences,
- $this->members_fields,
- $this->history
- );
+ $member = new Adherent($this->zdb);
+ $member
+ ->enableAllDeps()
+ ->setDependencies(
+ $this->preferences,
+ $this->members_fields,
+ $this->history
+ );
$dynamic_fields = $member->getDynamicFields()->getFields();
}
foreach ($dynamic_fields as $field) {
$is_manager = !$this->login->isAdmin()
&& !$this->login->isStaff()
&& $this->login->isGroupManager();
- $deps = array(
- 'picture' => false,
- 'groups' => $is_manager,
- 'dues' => false,
- 'parent' => false,
- 'children' => false,
- 'dynamics' => false
- );
- $member = new Adherent($this->zdb, (int)$id, $deps);
+ $member = new Adherent($this->zdb);
+ $member->disableAllDeps();
+ if ($is_manager) {
+ $member->enableDep('groups');
+ }
+ $member->load((int)$id);
$member->setDependencies(
$this->preferences,
$this->members_fields,
}
$post = $request->getParsedBody();
- $deps = array(
- 'picture' => true,
- 'groups' => true,
- 'dues' => true,
- 'parent' => true,
- 'children' => true,
- 'dynamics' => true
- );
- $member = new Adherent($this->zdb, null, $deps);
- $member->setDependencies(
- $this->preferences,
- $this->members_fields,
- $this->history
- );
+ $member = new Adherent($this->zdb);
+ $member
+ ->enableAllDeps()
+ ->setDependencies(
+ $this->preferences,
+ $this->members_fields,
+ $this->history
+ );
$success_detected = [];
$warning_detected = [];
/**
* Loads a member from its id
*
- * @param int $id the identifiant for the member to load
+ * @param int $id the identifier for the member to load
*
* @return bool true if query succeed, false otherwise
*/
$this->loadParent();
return $this;
}
+
+ /**
+ * Reset dependencies to load
+ *
+ * @return $this
+ */
+ public function disableAllDeps(): self
+ {
+ foreach ($this->_deps as &$dep) {
+ $dep = false;
+ }
+ return $this;
+ }
+
+ /**
+ * Enable all dependencies to load
+ *
+ * @return $this
+ */
+ public function enableAllDeps(): self
+ {
+ foreach ($this->_deps as &$dep) {
+ $dep = true;
+ }
+ return $this;
+ }
+
+ /**
+ * Enable a load dependency
+ *
+ * @param string $name Dependency name
+ *
+ * @return $this
+ */
+ public function enableDep(string $name): self
+ {
+ if (!isset($this->_deps[$name])) {
+ Analog::log(
+ 'dependency ' . $name . ' does not exists!',
+ Analog::WARNING
+ );
+ } else {
+ $this->_deps[$name] = true;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Enable a load dependency
+ *
+ * @param string $name Dependency name
+ *
+ * @return $this
+ */
+ public function disableDep(string $name): self
+ {
+ if (!isset($this->_deps[$name])) {
+ Analog::log(
+ 'dependency ' . $name . ' does not exists!',
+ Analog::WARNING
+ );
+ } else {
+ $this->_deps[$name] = false;
+ }
+
+ return $this;
+ }
}
*
* PHP version 5
*
- * Copyright © 2017 The Galette Team
+ * Copyright © 2017-2021 The Galette Team
*
* This file is part of Galette (http://galette.tuxfamily.org).
*
* @package GaletteTests
*
* @author Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2017 The Galette Team
+ * @copyright 2017-2021 The Galette Team
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
* @version SVN: $Id$
* @link http://galette.tuxfamily.org
* @name Adherent
* @package GaletteTests
* @author Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2017 The Galette Team
+ * @copyright 2017-2021 The Galette Team
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
* @link http://galette.tuxfamily.org
* @since 2017-04-17
$this->array($adh->deps)->isIdenticalTo($this->default_deps);
}
+ /**
+ * Test member load dependencies
+ *
+ * @return void
+ */
+ public function testDependencies()
+ {
+ $adh = $this->adh;
+ $this->array($adh->deps)->isIdenticalTo($this->default_deps);
+
+ $adh = clone $this->adh;
+ $adh->disableAllDeps();
+ $expected = [
+ 'picture' => false,
+ 'groups' => false,
+ 'dues' => false,
+ 'parent' => false,
+ 'children' => false,
+ 'dynamics' => false
+ ];
+ $this->array($adh->deps)->isIdenticalTo($expected);
+
+ $expected = [
+ 'picture' => false,
+ 'groups' => false,
+ 'dues' => true,
+ 'parent' => false,
+ 'children' => true,
+ 'dynamics' => true
+ ];
+ $adh
+ ->enableDep('dues')
+ ->enableDep('dynamics')
+ ->enableDep('children');
+ $this->array($adh->deps)->isIdenticalTo($expected);
+
+ $expected = [
+ 'picture' => false,
+ 'groups' => false,
+ 'dues' => true,
+ 'parent' => false,
+ 'children' => false,
+ 'dynamics' => true
+ ];
+ $adh->disableDep('children');
+ $this->array($adh->deps)->isIdenticalTo($expected);
+
+ $adh->disableDep('none')->enableDep('anothernone');
+ $this->array($adh->deps)->isIdenticalTo($expected);
+
+ $expected = [
+ 'picture' => true,
+ 'groups' => true,
+ 'dues' => true,
+ 'parent' => true,
+ 'children' => true,
+ 'dynamics' => true
+ ];
+ $adh->enableAllDeps('children');
+ $this->array($adh->deps)->isIdenticalTo($expected);
+ }
+
/**
* Tests getter
*