]> git.agnieray.net Git - galette.git/commitdiff
Use specific filters
authorJohan Cwiklinski <johan@x-tnd.be>
Tue, 14 Nov 2023 06:52:42 +0000 (07:52 +0100)
committerJohan Cwiklinski <johan@x-tnd.be>
Sat, 18 Nov 2023 10:24:24 +0000 (11:24 +0100)
Fix mailing filters reset; closes #1742

galette/lib/Galette/Controllers/Crud/MailingsController.php
galette/lib/Galette/Controllers/Crud/MembersController.php

index 1a174ad5a0f4fda6e45d61259383ff6b5e8bbf02..fd3a8e67998b40e92eaa1ea30692d7e6376f58d0 100644 (file)
@@ -90,7 +90,9 @@ class MailingsController extends CrudController
                 $m->removeAttachments(true);
             }
             $this->session->mailing = null;
+            unset($this->session->mailing);
             $this->session->redirect_mailing = null;
+            unset($this->session->redirect_mailing);
         }
 
         $params = array();
@@ -110,10 +112,8 @@ class MailingsController extends CrudController
                 ->withStatus(301)
                 ->withHeader('Location', $this->routeparser->urlFor('slash'));
         } else {
-            if (isset($this->session->filter_mailing)) {
-                $filters = $this->session->filter_mailing;
-            } elseif (isset($this->session->filter_members)) {
-                $filters = $this->session->filter_members;
+            if (isset($this->session->filter_members_sendmail)) {
+                $filters = $this->session->filter_members_sendmail;
             } else {
                 $filters = new MembersList();
             }
@@ -235,12 +235,11 @@ class MailingsController extends CrudController
                 $m->removeAttachments(true);
             }
             $this->session->mailing = null;
+            unset($this->session->mailing);
             $this->session->redirect_mailing = null;
-            if (isset($this->session->filter_mailing)) {
-                $filters = $this->session->filter_mailing;
-                $filters->selected = [];
-                $this->session->filter_mailing = $filters;
-            }
+            unset($this->session->redirect_mailing);
+            $this->session->filter_members_sendmail = null;
+            unset($this->session->filter_members_sendmail);
 
             return $response
                 ->withStatus(301)
@@ -257,7 +256,7 @@ class MailingsController extends CrudController
             $error_detected[] = _T("Trying to load mailing while email is disabled in preferences.");
             $goto = $this->routeparser->urlFor('slash');
         } else {
-            $filters = $this->session->filter_members ?? new MembersList();
+            $filters = $this->session->filter_members_sendmail ?? new MembersList();
 
             if (
                 $this->session->mailing !== null
@@ -390,8 +389,7 @@ class MailingsController extends CrudController
                     );
                     $mailing->current_step = Mailing::STEP_SENT;
                     //cleanup
-                    $filters->selected = null;
-                    $this->session->filter_members = $filters;
+                    $this->session->filter_members_sendmail = null;
                     $this->session->mailing = null;
                     $this->session->redirect_mailing = null;
                     $success_detected[] = _T("Mailing has been successfully sent!");
index fd424bbdf00dda4fe1b03b4af6600d9d8136c6ba..d9b1fcaf3f7d1dabb1e46f7f4b2d39936bf3e871 100644 (file)
@@ -341,7 +341,7 @@ class MembersController extends CrudController
         $value = null,
         $type = null
     ): Response {
-        $varname = 'public_filter_' . $type;
+        $varname = $this->getFilterName(['prefix' => 'public', 'suffix' => $type]);
         if (isset($this->session->$varname)) {
             $filters = $this->session->$varname;
         } else {
@@ -398,7 +398,7 @@ class MembersController extends CrudController
     {
         $post = $request->getParsedBody();
 
-        $varname = 'public_filter_' . $type;
+        $varname = $this->getFilterName(['prefix' => 'public', 'suffix' => $type]);
         if (isset($this->session->$varname)) {
             $filters = $this->session->$varname;
         } else {
@@ -434,8 +434,8 @@ class MembersController extends CrudController
      */
     public function list(Request $request, Response $response, $option = null, $value = null): Response
     {
-        if (isset($this->session->filter_members)) {
-            $filters = $this->session->filter_members;
+        if (isset($this->session->{$this->getFilterName()})) {
+            $filters = $this->session->{$this->getFilterName()};
         } else {
             $filters = new MembersList();
         }
@@ -467,7 +467,7 @@ class MembersController extends CrudController
         $filters->setViewPagination($this->routeparser, $this->view, false);
         $filters->setViewCommonsFilters($this->preferences, $this->view);
 
-        $this->session->filter_members = $filters;
+        $this->session->{$this->getFilterName()} = $filters;
 
         // display page
         $this->view->render(
@@ -498,14 +498,14 @@ class MembersController extends CrudController
     public function filter(Request $request, Response $response): Response
     {
         $post = $request->getParsedBody();
-        $filters = $this->session->filter_members ?? new MembersList();
+        $filters = $this->session->{$this->getFilterName()} ?? new MembersList();
 
         //reinitialize filters
         if (isset($post['clear_filter'])) {
             $filters = new MembersList();
         } elseif (isset($post['clear_adv_filter'])) {
-            $this->session->filter_members = null;
-            unset($this->session->filter_members);
+            $this->session->{$this->getFilterName()} = null;
+            unset($this->session->{$this->getFilterName()});
 
             return $response
                 ->withStatus(301)
@@ -635,7 +635,7 @@ class MembersController extends CrudController
                 );
         }
 
-        $this->session->filter_members = $filters;
+        $this->session->{$this->getFilterName()} = $filters;
 
         return $response
             ->withStatus(301)
@@ -652,8 +652,8 @@ class MembersController extends CrudController
      */
     public function advancedSearch(Request $request, Response $response): Response
     {
-        if (isset($this->session->filter_members)) {
-            $filters = $this->session->filter_members;
+        if (isset($this->session->{$this->getFilterName()})) {
+            $filters = $this->session->{$this->getFilterName()};
             if (!$filters instanceof AdvancedMembersList) {
                 $filters = new AdvancedMembersList($filters);
             }
@@ -737,7 +737,7 @@ class MembersController extends CrudController
     {
         $post = $request->getParsedBody();
 
-        $filters = $this->session->ajax_members_filters ?? new MembersList();
+        $filters = $this->session->{$this->getFilterName(['prefix' => 'ajax'])} ?? new MembersList();
 
         if ($option == 'page') {
             $filters->current_page = (int)$value;
@@ -770,7 +770,7 @@ class MembersController extends CrudController
         //assign pagination variables to the template and add pagination links
         $filters->setViewPagination($this->routeparser, $this->view, false);
 
-        $this->session->ajax_members_filters = $filters;
+        $this->session->{$this->getFilterName(['prefix' => 'ajax'])} = $filters;
 
         $selected_members = null;
         $unreachables_members = null;
@@ -869,61 +869,35 @@ class MembersController extends CrudController
         $post = $request->getParsedBody();
 
         if (isset($post['entries_sel'])) {
-            if (isset($this->session->filter_members)) {
-                $filters = $this->session->filter_members;
+            if (isset($this->session->{$this->getFilterName()})) {
+                $filters = $this->session->{$this->getFilterName()};
             } else {
                 $filters = new MembersList();
             }
 
             $filters->selected = $post['entries_sel'];
-            $this->session->filter_members = $filters;
-
-            if (isset($post['cards'])) {
-                return $response
-                    ->withStatus(301)
-                    ->withHeader('Location', $this->routeparser->urlFor('pdf-members-cards'));
-            }
-
-            if (isset($post['labels'])) {
-                return $response
-                    ->withStatus(301)
-                    ->withHeader('Location', $this->routeparser->urlFor('pdf-members-labels'));
-            }
-
-            if (isset($post['sendmail'])) {
-                return $response
-                    ->withStatus(301)
-                    ->withHeader('Location', $this->routeparser->urlFor('mailing') . '?mailing_new=new');
-            }
-
-            if (isset($post['attendance_sheet'])) {
-                return $response
-                    ->withStatus(301)
-                    ->withHeader('Location', $this->routeparser->urlFor('attendance_sheet_details'));
-            }
-
-            if (isset($post['csv'])) {
-                return $response
-                    ->withStatus(301)
-                    ->withHeader('Location', $this->routeparser->urlFor('csv-memberslist'));
-            }
-
-            if (isset($post['delete'])) {
-                return $response
-                    ->withStatus(301)
-                    ->withHeader('Location', $this->routeparser->urlFor('removeMembers'));
-            }
-
-            if (isset($post['masschange'])) {
-                return $response
-                    ->withStatus(301)
-                    ->withHeader('Location', $this->routeparser->urlFor('masschangeMembers'));
-            }
-
-            if (isset($post['masscontributions'])) {
-                return $response
-                    ->withStatus(301)
-                    ->withHeader('Location', $this->routeparser->urlFor('massAddContributionsChooseType'));
+            $knowns = [
+                'cards' => 'pdf-members-cards',
+                'labels' => 'pdf-members-labels',
+                'sendmail' => 'mailing',
+                'attendance_sheet' => 'attendance_sheet_details',
+                'csv' => 'csv-memberslist',
+                'delete' => 'removeMembers',
+                'masschange' => 'masschangeMembers',
+                'masscontributions' => 'massAddContributionsChooseType'
+            ];
+
+            foreach ($knowns as $known => $redirect_url) {
+                if (isset($post[$known])) {
+                    $this->session->{$this->getFilterName(['suffix' => $known])} = $filters;
+                    $redirect_url = $this->routeparser->urlFor($redirect_url);
+                    if ($known === 'sendmail') {
+                        $redirect_url .= '?mailing_new=new';
+                    }
+                    return $response
+                        ->withStatus(301)
+                        ->withHeader('Location', $redirect_url);
+                }
             }
 
             throw new \RuntimeException('Does not know what to batch :(');
@@ -947,7 +921,7 @@ class MembersController extends CrudController
      *
      * @param Request  $request  PSR Request
      * @param Response $response PSR Response
-     * @param integer  $id       Member id/array of members id
+     * @param ?integer $id       Member id/array of members id
      * @param string   $action   null or 'add'
      *
      * @return Response
@@ -1117,7 +1091,7 @@ class MembersController extends CrudController
      */
     public function massChange(Request $request, Response $response): Response
     {
-        $filters = $this->session->filter_members;
+        $filters = $this->session->{$this->getFilterName(['suffix' => 'masschange'])} ?? new MembersList();
 
         $data = [
             'id'            => $filters->selected,
@@ -1222,7 +1196,7 @@ class MembersController extends CrudController
             }
         }
 
-        $filters = $this->session->filter_members;
+        $filters = $this->session->{$this->getFilterName(['suffix' => 'masschange'])};
         $data = [
             'id'            => $filters->selected,
             'redirect_uri'  => $this->routeparser->urlFor('members')
@@ -1744,7 +1718,8 @@ class MembersController extends CrudController
             );
         } else {
             //batch members removal
-            $filters = $this->session->filter_members;
+            $filters = $this->session->{$this->getFilterName(['suffix' => 'delete'])};
+            $this->session->{$this->getFilterName(['suffix' => 'delete'])} = $filters;
             return str_replace(
                 '%count',
                 count($filters->selected),
@@ -1763,8 +1738,8 @@ class MembersController extends CrudController
      */
     protected function doDelete(array $args, array $post)
     {
-        if (isset($this->session->filter_members)) {
-            $filters = $this->session->filter_members;
+        if (isset($this->session->{$this->getFilterName(['suffix' => 'delete'])})) {
+            $filters = $this->session->{$this->getFilterName(['suffix' => 'delete'])};
         } else {
             $filters = new MembersList();
         }
@@ -1813,8 +1788,8 @@ class MembersController extends CrudController
     {
         $navigate = array();
 
-        if (isset($this->session->filter_members)) {
-            $filters = $this->session->filter_members;
+        if (isset($this->session->{$this->getFilterName()})) {
+            $filters = $this->session->{$this->getFilterName()};
         } else {
             $filters = new MembersList();
         }
@@ -1867,6 +1842,16 @@ class MembersController extends CrudController
      */
     public function getFilterName(array $args = null): string
     {
-        return 'filter_members';
+        $filter_name = 'filter_members';
+
+        if (isset($args['prefix'])) {
+            $filter_name = $args['prefix'] . '_' . $filter_name;
+        }
+
+        if (isset($args['suffix'])) {
+            $filter_name .= '_' . $args['suffix'];
+        }
+
+        return $filter_name;
     }
 }