]> git.agnieray.net Git - galette.git/commitdiff
Add methods to manage dependencies to load on members
authorJohan Cwiklinski <johan@x-tnd.be>
Tue, 5 Oct 2021 05:16:07 +0000 (07:16 +0200)
committerJohan Cwiklinski <johan@x-tnd.be>
Sun, 17 Oct 2021 04:15:40 +0000 (06:15 +0200)
Replace array usage with new methods
Add tests

galette/lib/Galette/Controllers/Crud/MembersController.php
galette/lib/Galette/Controllers/ImagesController.php
galette/lib/Galette/Controllers/PdfController.php
galette/lib/Galette/Entity/Adherent.php
galette/lib/Galette/Entity/Group.php
galette/lib/Galette/Repository/Members.php
tests/Galette/Entity/tests/units/Adherent.php

index 50d1c084023414e3ebf25ed5aa048857e025fc08..2948160de5cdf5554d4c791f891b3846d1bf4f60 100644 (file)
@@ -40,11 +40,8 @@ use Galette\Controllers\CrudController;
 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;
@@ -55,7 +52,6 @@ use Galette\Entity\FieldsConfig;
 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;
@@ -128,10 +124,8 @@ class MembersController extends CrudController
             $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
@@ -247,15 +241,10 @@ class MembersController extends CrudController
      */
     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(
@@ -442,15 +431,11 @@ class MembersController extends CrudController
         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)) {
@@ -779,7 +764,7 @@ class MembersController extends CrudController
         $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);
@@ -792,15 +777,11 @@ class MembersController extends CrudController
         }
 
         //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);
@@ -812,7 +793,7 @@ class MembersController extends CrudController
         //Contributions types
         $ct = new ContributionsTypes($this->zdb);
 
-        //Payments types
+        //Payment types
         $ptypes = new PaymentTypes(
             $this->zdb,
             $this->preferences,
@@ -846,7 +827,7 @@ class MembersController extends CrudController
      *
      * @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
@@ -855,11 +836,7 @@ class MembersController extends CrudController
     {
         $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;
@@ -1080,17 +1057,9 @@ class MembersController extends CrudController
         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
@@ -1251,15 +1220,8 @@ class MembersController extends CrudController
         $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);
@@ -1326,20 +1288,14 @@ class MembersController extends CrudController
             }
 
             //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();
@@ -1427,20 +1383,14 @@ class MembersController extends CrudController
                     //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) {
@@ -1470,15 +1420,12 @@ class MembersController extends CrudController
                     $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,
@@ -1555,20 +1502,14 @@ class MembersController extends CrudController
         }
 
         $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 = [];
index 4c838d1905cff452d7b03aa212783c7c6cb06fda..dec824829bbb61c7280d78a7302dbdf9a6db4094 100644 (file)
@@ -118,18 +118,14 @@ class ImagesController extends AbstractController
      */
     public function photo(Request $request, Response $response, int $id): Response
     {
-        $deps = array(
-            'groups'    => false,
-            'dues'      => false
-        );
-
-        //if loggedin user is a group manager, we have to check
-        //he manages a group requested member belongs to.
-        if ($this->login->isGroupManager()) {
-            $deps['groups'] = true;
+        $adh = new Adherent($this->zdb);
+        $adh->disableDep('dues');
+        if (!$this->login->isGroupManager()) {
+            //if logged-in user is a group manager, we have to check
+            //he manages a group requested member belongs to.
+            $adh->disableDep('groups');
         }
-
-        $adh = new Adherent($this->zdb, (int)$id, $deps);
+        $adh->load($id);
 
         $picture = null;
         if (
index 8adacd40da462944eb444a528d88a8661c0ac08b..b64ea2fe290f37b1323ce2b5613f9326df266a84 100644 (file)
@@ -105,15 +105,13 @@ class PdfController extends AbstractController
         }
 
         if ($id_adh !== null && $id_adh > 0) {
-            $deps = ['dynamics' => true];
-            if ($this->login->id === $id_adh) {
-                $deps['dues'] = true;
+            $adh = new Adherent($this->zdb);
+            $adh->enableDep('dynamics');
+            if ($this->login->id != $id_adh) {
+                $adh->disableDep('dues');
             }
-            $adh = new Adherent(
-                $this->zdb,
-                $id_adh,
-                $deps
-            );
+            $adh->load($id_adh);
+
             if (!$adh->canEdit($this->login)) {
                 $this->flash->addMessage(
                     'error_detected',
index 9e1bd61bec120cd02609bbbc3cb1fd089bc2d8e4..da94a5c5f4bcb5b020381607cee7f6a24196ec63 100644 (file)
@@ -285,7 +285,7 @@ class Adherent
     /**
      * 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
      */
@@ -2148,4 +2148,72 @@ class Adherent
         $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;
+    }
 }
index 6120c298cf854150695d8730df7917a72f1a79bc..4c865622f9a6a1dd88e3936c35be5334df022e6f 100644 (file)
@@ -188,7 +188,6 @@ class Group
 
                 $results = $zdb->execute($select);
                 $members = array();
-                $adhpk = Adherent::PK;
 
                 $deps = array(
                     'picture'   => false,
@@ -471,7 +470,7 @@ class Group
     }
 
     /**
-     * Is current loggedin user manager of the group?
+     * Is current logged-in user manager of the group?
      *
      * @param Login $login Login instance
      *
@@ -483,7 +482,7 @@ class Group
             //admins as well as staff members are managers for all groups!
             return true;
         } else {
-            //let's check if current loggedin user is part of group managers
+            //let's check if current logged-in user is part of group managers
             foreach ($this->managers as $manager) {
                 if ($login->login == $manager->login) {
                     return true;
index 8b5ee09b9cde48257bfb94b8d8a255f03cffbc73..26717c621b628ca30379fce9caad39b0d8777b3d 100644 (file)
@@ -485,12 +485,12 @@ class Members
 
             $results = $zdb->execute($select);
             $members = array();
+            $deps = array(
+                'groups'    => false,
+                'dues'      => false,
+                'picture'   => $with_photos
+            );
             foreach ($results as $row) {
-                $deps = array(
-                    'groups'    => false,
-                    'dues'      => false,
-                    'picture'   => $with_photos
-                );
                 $members[] = new Adherent($zdb, $row, $deps);
             }
             return $members;
@@ -556,13 +556,13 @@ class Members
             $results = $zdb->execute($select);
 
             $members = array();
+            $deps = array(
+                'picture'   => $with_photos,
+                'groups'    => false,
+                'dues'      => $dues,
+                'parent'    => $parent
+            );
             foreach ($results as $o) {
-                $deps = array(
-                    'picture'   => $with_photos,
-                    'groups'    => false,
-                    'dues'      => $dues,
-                    'parent'    => $parent
-                );
                 if ($as_members === true) {
                     $members[] = new Adherent($zdb, $o, $deps);
                 } else {
index a2d97da8a2dc87e9fab9b5724614d73205557c07..5d8a65bc66af3b9a1168f6793f418d3b4312b210 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2017 The Galette Team
+ * Copyright © 2017-2021 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
@@ -28,7 +28,7 @@
  * @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
@@ -46,7 +46,7 @@ use Galette\GaletteTestCase;
  * @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
@@ -128,6 +128,68 @@ class Adherent extends GaletteTestCase
         $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
      *