]> git.agnieray.net Git - galette.git/commitdiff
Implement order, pagination and number of rows
authorJohan Cwiklinski <johan@x-tnd.be>
Sun, 30 Nov 2014 07:50:11 +0000 (08:50 +0100)
committerJohan Cwiklinski <johan@x-tnd.be>
Mon, 17 Oct 2016 20:36:33 +0000 (22:36 +0200)
galette/includes/routes/members.routes.php
galette/lib/Galette/Core/Pagination.php
galette/lib/Galette/Filters/MembersList.php
galette/templates/default/gestion_adherents.tpl

index f08bf82aa0e345e11b6b083f63d73f9c13bcdbb0..6e68c01cace260dc0dcd9f50b7f6efe97f00ce89 100644 (file)
@@ -125,19 +125,28 @@ $app->get(
 
 //members list
 $app->get(
-    '/members',
+    '/members(/:option/:value)',
     $authenticate($app),
-    function () use ($app, $login, &$session) {
-        /*if ( isset($session['filters']['members'])
-            && !isset($_POST['mailing'])
-            && !isset($_POST['mailing_new'])
-        ) {*/
+    function ($option = null, $value = null) use (
+        $app, $login, &$session
+    ) {
         if ( isset($session['filters']['members']) ) {
             $filters = unserialize($session['filters']['members']);
         } else {
             $filters = new MembersList();
         }
 
+        if ( $option !== null ) {
+            switch ( $option ) {
+            case 'page':
+                $filters->current_page = (int)$value;
+                break;
+            case 'order':
+                $filters->orderby = $value;
+                break;
+            }
+        }
+
         $members = new Members($filters);
 
         $members_list = array();
@@ -150,12 +159,14 @@ $app->get(
         $groups = new Groups();
         $groups_list = $groups->getList();
 
-        $session['filters']['members'] = serialize($filters);
-
-        $smarty = $app->view()->getInstance();
+        $view = $app->view();
+        $smarty = $view->getInstance();
 
         //assign pagination variables to the template and add pagination links
-        $filters->setSmartyPagination($smarty);
+        $filters->setSmartyPagination($app, $view, false);
+        $filters->setViewCommonsFilters($view);
+
+        $session['filters']['members'] = serialize($filters);
 
         $app->render(
             'gestion_adherents.tpl',
@@ -167,32 +178,18 @@ $app->get(
                 'filter_groups_options' => $groups_list,
                 'nb_members'            => $members->getCount(),
                 'filters'               => $filters,
-                'filter_field_options'  => array(
-                    Members::FILTER_NAME            => _T("Name"),
-                    Members::FILTER_COMPANY_NAME    => _T("Company name"),
-                    Members::FILTER_ADDRESS         => _T("Address"),
-                    Members::FILTER_MAIL            => _T("Email,URL,IM"),
-                    Members::FILTER_JOB             => _T("Job"),
-                    Members::FILTER_INFOS           => _T("Infos")
-                ),
-                'filter_membership_options' => array(
-                    0 => _T("All members"),
-                    3 => _T("Up to date members"),
-                    1 => _T("Close expiries"),
-                    2 => _T("Latecomers"),
-                    4 => _T("Never contributed"),
-                    5 => _T("Staff members"),
-                    6 => _T("Administrators")
-                ),
-                'filter_accounts_options'   => array(
-                    0 => _T("All accounts"),
-                    1 => _T("Active accounts"),
-                    2 => _T("Inactive accounts")
-                )
+                'adv_filters'           => $filters instanceof AdvancedMembersList
             )
         );
     }
-)->name('members');
+)->name(
+    'members'
+)->conditions(
+    array(
+        'option'    => '(page|order)',
+        'value'     => '\d+'
+    )
+);
 
 //members list filtering
 $app->post(
@@ -251,6 +248,10 @@ $app->post(
             ) {
                 $filters->group_filter = (int)$request->post('group_filter');
             }
+            //number of rows to show
+            if ( $request->post('nbshow') !== null ) {
+                $filters->show = $request->post('nbshow');
+            }
         }
 
         $session['filters']['members'] = serialize($filters);
index ebebb65bee05576333678b05d21a30722ca8c60d..976dea78d2ad60dd1cb021ed7d41a966aee86a65 100644 (file)
@@ -37,6 +37,7 @@
 
 namespace Galette\Core;
 
+use Slim\Slim;
 use Analog\Analog;
 
 /**
@@ -205,15 +206,15 @@ abstract class Pagination
      * Creates pagination links and assign some usefull variables to the
      * Smarty template
      *
-     * @param Smarty  $tpl        Smarty template
+     * @param Slim    $app        Application instance
+     * @param Smarty  $view       View instance
      * @param boolean $restricted Do not permit to display all
      *
      * @return void
      */
-    public function setSmartyPagination($tpl, $restricted = true)
+    public function setSmartyPagination(Slim $app, Smarty $view, $restricted = true)
     {
         $paginate = null;
-        $tabs = "\t\t\t\t\t\t";
 
         //Create pagination links
         if ( $this->current_page < 11 ) {
@@ -231,36 +232,52 @@ abstract class Pagination
         $previous = $this->current_page - 1;
 
         if ( $this->current_page != 1 ) {
-            $paginate .= "\n" . $tabs . "<li><a href=\"?page=1\" title=\"" .
-                _T("First page") . "\">&lt;&lt;</a></li>\n";
-            $paginate .= $tabs . "<li><a href=\"?page=" . $previous . "\" title=\"" .
-                preg_replace("(%i)", $previous, _T("Previous page (%i)")) .
-                "\">&lt;</a></li>\n";
+            $paginate .= $this->_getLink(
+                '&lt;&lt;',
+                $this->_getHref($app, 1),
+                preg_replace("(%i)", $next, _T("First page"))
+            );
+
+            $paginate .= $this->_getLink(
+                '&lt;',
+                $this->_getHref($app, $previous),
+                preg_replace("(%i)", $previous, _T("Previous page (%i)"))
+            );
         }
 
         for ( $i = $idepart ; $i <= $ifin ; $i++ ) {
             if ( $i == $this->current_page ) {
-                $paginate .= $tabs . "<li class=\"current\"><a href=\"#\" title=\"" .
-                    preg_replace("(%i)", $this->current_page, _T("Current page (%i)")) .
-                    "\">-&nbsp;$i&nbsp;-</a></li>\n";
+                $paginate .= $this->_getLink(
+                    "-&nbsp;$i&nbsp;-",
+                    $this->_getHref($app, $this->current_page),
+                    preg_replace(
+                        "(%i)",
+                        $this->current_page,
+                        _T("Current page (%i)")
+                    ),
+                    true
+                );
             } else {
-                $paginate .= $tabs . "<li><a href=\"?page=" . $i . "\" title=\"" .
-                    preg_replace("(%i)", $i, _T("Page %i")) . "\">" . $i . "</a></li>\n";
+                $paginate .= $this->_getLink(
+                    $i,
+                    $this->_getHref($app, $i),
+                    preg_replace("(%i)", $i, _T("Page %i"))
+                );
             }
         }
         if ($this->current_page != $this->pages ) {
-            $paginate .= $tabs . "<li><a href=\"?page=" . $next . "\" title=\"" .
-                preg_replace("(%i)", $next, _T("Next page (%i)")) . "\">&gt;</a></li>\n";
-            $paginate .= $tabs . "<li><a href=\"?page=" . $this->pages . "\" title=\"" .
-                preg_replace("(%i)", $this->pages, _T("Last page (%i)")) .
-                "\">&gt;&gt;</a></li>\n";
-        }
+            $paginate .= $this->_getLink(
+                '&gt;',
+                $this->_getHref($app, $next),
+                preg_replace("(%i)", $next, _T("Next page (%i)"))
+            );
 
-        //Now, we assign common variables to Smarty template
-        $tpl->assign('nb_pages', $this->pages);
-        $tpl->assign('page', $this->current_page);
-        $tpl->assign('numrows', $this->show);
-        $tpl->assign('pagination', $paginate);
+            $paginate .= $this->_getLink(
+                '&gt;&gt;',
+                $this->_getHref($app, $this->pages),
+                preg_replace("(%i)", $this->pages, _T("Last page (%i)"))
+            );
+        }
 
         $options = array(
             10 => "10",
@@ -273,10 +290,58 @@ abstract class Pagination
             $options[0] = _T("All");
         }
 
-        $tpl->assign(
-            'nbshow_options',
-            $options
+        //Now, we assign common variables to Smarty template
+        $view->setData(
+            array(
+                'nb_pages'          => $this->pages,
+                'page'              => $this->current_page,
+                'numrows'           => $this->show,
+                'pagination'        => $paginate,
+                'nbshow_options'    => $options
+            )
+        );
+    }
+
+    /**
+     * Get a pagination link
+     *
+     * @param string $content Links content
+     * @param string $url     URL the link to point on
+     * @param string $title   Link's title
+     * @param bool   $current Is current page
+     *
+     * @return string
+     */
+    private function _getLink($content, $url, $title, $current = false)
+    {
+        $tabs = "\t\t\t\t\t\t";
+        $link = $tabs . "<li";
+        if ( $current === true ) {
+            $link .= " class=\"current\" ";
+        }
+        $link .= "><a href=\"" . $url . "\" " .
+            "title=\"" . $title . "\">" . $content . "</a></li>\n";
+        return $link;
+    }
+
+    /**
+     * Build href
+     *
+     * @param Slim $app  Application instance
+     * @param int  $page Page
+     *
+     * @return string
+     */
+    private function _getHref($app, $page)
+    {
+        $view = $app->view();
+        $href = $app->urlFor(
+            $view->getData('cur_route'), [
+                'option'    => 'page',
+                'value'     => $page
+            ]
         );
+        return $href;
     }
 
     /**
index f1386f5c50438db130c10d51e7069814a3bb9596..31e9fd23e1dad8201f0b49dca5dd7824f9083a53 100644 (file)
@@ -38,6 +38,7 @@
 namespace Galette\Filters;
 
 use Analog\Analog;
+use Galette\Core\Smarty;
 use Galette\Core\Pagination;
 use Galette\Entity\Group;
 use Galette\Repository\Members;
@@ -287,7 +288,7 @@ class MembersList extends Pagination
      *
      * @return void
      */
-    public function setTplCommonsFilters($prefs, $tpl)
+    public function setViewCommonsFilters($prefs, Smarty $view)
     {
         $filter_options = array(
             Members::FILTER_NAME            => _T("Name"),
@@ -302,12 +303,12 @@ class MembersList extends Pagination
             $filter_options[Members::FILTER_NUMBER] = _T("Member number");
         }
 
-        $tpl->assign(
+        $view->setData(
             'filter_field_options',
             $filter_options
         );
 
-        $tpl->assign(
+        $view->setData(
             'filter_membership_options',
             array(
                 Members::MEMBERSHIP_ALL     => _T("All members"),
@@ -321,7 +322,7 @@ class MembersList extends Pagination
             )
         );
 
-        $tpl->assign(
+        $view->setData(
             'filter_accounts_options',
             array(
                 Members::ALL_ACCOUNTS       => _T("All accounts"),
index 2f16441667fc5fcc8c9103b0f70a97d2558faf77..8ff7c42ede5f17303cf1c612f9de8097d08cd8ea 100644 (file)
@@ -91,7 +91,7 @@
                     <th class="id_row">#</th>
 {/if}
                     <th class="left">
-                        <a href="gestion_adherents.php?tri={php}echo Galette\Repository\Members::ORDERBY_NAME;{/php}">
+                        <a href="{urlFor name="members" options=["option" => 'order', "value" => "Galette\Repository\Members::ORDERBY_NAME"|constant]}">
                             {_T string="Name"}
                             {if $filters->orderby eq constant('galette\Repository\Members::ORDERBY_NAME')}
                                 {if $filters->ordered eq constant('Galette\Filters\MembersList::ORDER_ASC')}
                         </a>
                     </th>
                     <th class="left">
-                        <a href="gestion_adherents.php?tri={php}echo Galette\Repository\Members::ORDERBY_NICKNAME;{/php}">
+                        <a href="{urlFor name="members" options=["option" => 'order', "value" => "Galette\Repository\Members::ORDERBY_NICKNAME"|constant]}">
                             {_T string="Nickname"}
                             {if $filters->orderby eq constant('Galette\Repository\Members::ORDERBY_NICKNAME')}
                                 {if $filters->ordered eq constant('Galette\Filters\MembersList::ORDER_ASC')}
                         </a>
                     </th>
                     <th class="left">
-                        <a href="gestion_adherents.php?tri={php}echo Galette\Repository\Members::ORDERBY_STATUS;{/php}">
+                        <a href="{urlFor name="members" options=["option" => 'order', "value" => "Galette\Repository\Members::ORDERBY_STATUS"|constant]}">
                             {_T string="Status"}
                             {if $filters->orderby eq constant('Galette\Repository\Members::ORDERBY_STATUS')}
                                 {if $filters->ordered eq constant('Galette\Filters\MembersList::ORDER_ASC')}
                     </th>
 {if $login->isAdmin() or $login->isStaff()}
                     <th class="left">
-                        <a href="gestion_adherents.php?tri={php}echo Galette\Repository\Members::ORDERBY_FEE_STATUS;{/php}">
+                        <a href="{urlFor name="members" options=["option" => 'order', "value" => "Galette\Repository\Members::ORDERBY_FEE_STATUS"|constant]}">
                             {_T string="State of dues"}
                             {if $filters->orderby eq constant('Galette\Repository\Members::ORDERBY_FEE_STATUS')}
                                 {if $filters->ordered eq constant('Galette\Filters\MembersList::ORDER_ASC')}
                         </a>
                     </th>
                     <th class="left">
-                        <a href="gestion_adherents.php?tri={php}echo Galette\Repository\Members::ORDERBY_MODIFDATE;{/php}">
+                        <a href="{urlFor name="members" options=["option" => 'order', "value" => "Galette\Repository\Members::ORDERBY_MODIFDATE"|constant]}">
                             {_T string="Modified"}
                             {if $filters->orderby eq constant('Galette\Repository\Members::ORDERBY_MODIFDATE')}
                                 {if $filters->ordered eq constant('Galette\Filters\MembersList::ORDER_ASC')}