]> git.agnieray.net Git - galette.git/commitdiff
Fix batch contributions removal
authorJohan Cwiklinski <johan@x-tnd.be>
Wed, 1 Mar 2023 17:38:16 +0000 (18:38 +0100)
committerJohan Cwiklinski <johan@x-tnd.be>
Wed, 1 Mar 2023 19:51:48 +0000 (20:51 +0100)
galette/lib/Galette/Controllers/Crud/ContributionsController.php
galette/lib/Galette/Controllers/Crud/MembersController.php
galette/lib/Galette/Controllers/CrudController.php
galette/lib/Galette/Features/BatchList.php [new file with mode: 0644]

index 07b75785d83712204198150f118cd4765e526ebb..54a03a2741b39c2fb0089cd8752162a999ef7feb 100644 (file)
@@ -36,6 +36,7 @@
 
 namespace Galette\Controllers\Crud;
 
+use Galette\Features\BatchList;
 use Galette\Filters\ContributionsList;
 use Throwable;
 use Analog\Analog;
@@ -64,6 +65,8 @@ use Galette\Repository\PaymentTypes;
 
 class ContributionsController extends CrudController
 {
+    use BatchList;
+
     // CRUD - Create
 
     /**
@@ -982,4 +985,16 @@ class ContributionsController extends CrudController
 
     // /CRUD - Delete
     // /CRUD
+
+    /**
+     * Get filter name in session
+     *
+     * @param array|null $args Route arguments
+     *
+     * @return string
+     */
+    public function getFilterName(array $args = null): string
+    {
+        return 'filter_' . $args['type'];
+    }
 }
index 6a314829a3ed5a648d266ffba56e00be033bba44..cf8f85f6512b4ff789369177745ec5c0f9c34b4f 100644 (file)
@@ -38,6 +38,7 @@ namespace Galette\Controllers\Crud;
 
 use Galette\Controllers\CrudController;
 use Galette\DynamicFields\Boolean;
+use Galette\Features\BatchList;
 use Slim\Psr7\Request;
 use Slim\Psr7\Response;
 use Galette\Core\GaletteMail;
@@ -74,6 +75,8 @@ use Analog\Analog;
 
 class MembersController extends CrudController
 {
+    use BatchList;
+
     /** @var bool */
     private $is_self_membership = false;
 
@@ -1833,29 +1836,6 @@ class MembersController extends CrudController
         );
     }
 
-
-    /**
-     * Get ID to remove
-     *
-     * In simple cases, we get the ID in the route arguments; but for
-     * batchs, it should be found elsewhere.
-     * In post values, we look for id key, as well as all entries_sel keys
-     *
-     * @param array $args Request arguments
-     * @param array $post POST values
-     *
-     * @return null|integer|integer[]
-     */
-    protected function getIdsToRemove(&$args, $post)
-    {
-        if (isset($args['id'])) {
-            return $args['id'];
-        } else {
-            $filters = $this->session->filter_members;
-            return $filters->selected;
-        }
-    }
-
     /**
      * Get confirmation removal page title
      *
@@ -1988,4 +1968,16 @@ class MembersController extends CrudController
 
         return $navigate;
     }
+
+    /**
+     * Get filter name in session
+     *
+     * @param array|null $args Route arguments
+     *
+     * @return string
+     */
+    public function getFilterName(array $args = null): string
+    {
+        return 'filter_members';
+    }
 }
index 61635ca687e837fff9735e58b8095e04df87bbc4..e96b392fc8f1a3ea909d4fbf6fd6473e83b4e927 100644 (file)
@@ -196,19 +196,10 @@ abstract class CrudController extends AbstractController
             $ids = $args['id'];
         }
 
-        //look for {sthing}_sel as multiple ids selection (members_sel, contrib_sel, and so on)
-        //@deprecated using elements/list.html.twig assumes key is named entries_sel
-        if (is_array($post) && count($post)) {
-            $selecteds = preg_grep('/.+_sel$/', array_keys($post));
-            if (count($selecteds) == 1 && !isset($args['id'])) {
-                $ids = $post[array_shift($selecteds)];
-            } elseif (count($selecteds) > 1) {
-                //maybe an error to have multiple {type}_sel in same post request.
-                Analog::log(
-                    'Several {sthing}_sel variables in same post request should be avoid.',
-                    ANalog::WARNING
-                );
-            }
+        if ($ids === null && method_exists($this, 'getFilterName')) {
+            $filter_name = $this->getFilterName($args);
+            $filters = $this->session->$filter_name;
+            $ids = $filters->selected;
         }
 
         //type
diff --git a/galette/lib/Galette/Features/BatchList.php b/galette/lib/Galette/Features/BatchList.php
new file mode 100644 (file)
index 0000000..6e93455
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Batch list feature
+ *
+ * PHP version 5
+ *
+ * Copyright © 2023 The Galette Team
+ *
+ * This file is part of Galette (http://galette.tuxfamily.org).
+ *
+ * Galette is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Galette is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Galette. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Features
+ * @package   Galette
+ *
+ * @author    Johan Cwiklinski <johan@x-tnd.be>
+ * @copyright 2023 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      https://galette.eu
+ * @since     2023-03-01
+ */
+
+namespace Galette\Features;
+
+use Galette\Entity\Adherent;
+use Galette\Entity\Social;
+use Slim\Psr7\Request;
+use Slim\Psr7\Response;
+
+/**
+ * Batch list feature
+ *
+ * @category  Features
+ * @name      BatchList
+ * @package   Galette
+ * @author    Johan Cwiklinski <johan@x-tnd.be>
+ * @copyright 2023 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      https://galette.eu
+ * @since     2023-03-01
+ */
+
+trait BatchList
+{
+    /**
+     * Get filter name in session
+     *
+     * @param array|null $args Route arguments
+     *
+     * @return string
+     */
+    abstract public function getFilterName(array $args = null): string;
+}