]> git.agnieray.net Git - galette.git/blobdiff - galette/lib/Galette/Filters/MembersList.php
Do not override members list filters on member display or edit; closes #1803
[galette.git] / galette / lib / Galette / Filters / MembersList.php
index d1ca117562caf38d35c8483fde088f3d619d56cb..b95759dfd2ba1e09cc1639b610434dde18809dd0 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2009-2013 The Galette Team
+ * Copyright © 2009-2023 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2009-2013 The Galette Team
+ * @copyright 2009-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
- * @version   SVN: $Id$
  * @link      http://galette.tuxfamily.org
  * @since     march, 3rd 2009
  */
 
 namespace Galette\Filters;
 
-use Analog\Analog as Analog;
-use Galette\Core\Pagination as Pagination;
-use Galette\Entity\Group as Group;
-use Galette\Repository\Members as Members;
+use Analog\Analog;
+use Galette\Core\Pagination;
+use Galette\Core\Preferences;
+use Galette\Entity\Group;
+use Galette\Repository\Members;
 
 /**
  * Members list filters and paginator
@@ -50,9 +50,19 @@ use Galette\Repository\Members as Members;
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2009-2013 The Galette Team
+ * @copyright 2009-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      http://galette.tuxfamily.org
+ *
+ * @property string $filter_str
+ * @property integer $field_filter
+ * @property integer $membership_filter
+ * @property integer $filter_account
+ * @property integer $email_filter
+ * @property integer $group_filter
+ * @property array $selected
+ * @property array $unreachable
+ * @property string $query
  */
 
 class MembersList extends Pagination
@@ -61,7 +71,7 @@ class MembersList extends Pagination
     private $_filter_str;
     private $_field_filter;
     private $_membership_filter;
-    private $_account_status_filter;
+    private $_filter_account;
     private $_email_filter;
     private $_group_filter;
 
@@ -74,7 +84,7 @@ class MembersList extends Pagination
         'filter_str',
         'field_filter',
         'membership_filter',
-        'account_status_filter',
+        'filter_account',
         'email_filter',
         'group_filter',
         'selected',
@@ -83,60 +93,56 @@ class MembersList extends Pagination
     );
 
     /**
-    * Default constructor
-    */
+     * Default constructor
+     */
     public function __construct()
     {
         $this->reinit();
     }
 
     /**
-    * Returns the field we want to default set order to
-    *
-    * @return string field name
-    */
+     * Returns the field we want to default set order to
+     *
+     * @return int|string
+     */
     protected function getDefaultOrder()
     {
         return 'nom_adh';
     }
 
     /**
-    * Reinit default parameters
-    *
-    * @return void
-    */
+     * Reinit default parameters
+     *
+     * @return void
+     */
     public function reinit()
     {
+        global $preferences;
+
         parent::reinit();
         $this->_filter_str = null;
         $this->_field_filter = null;
         $this->_membership_filter = null;
-        $this->_account_status_filter = null;
+        $this->_filter_account = $preferences->pref_filter_account;
         $this->_email_filter = Members::FILTER_DC_EMAIL;
         $this->_group_filter = null;
         $this->_selected = array();
     }
 
     /**
-    * Global getter method
-    *
-    * @param string $name name of the property we want to retrive
-    *
-    * @return object the called property
-    */
+     * Global getter method
+     *
+     * @param string $name name of the property we want to retrieve
+     *
+     * @return mixed the called property
+     */
     public function __get($name)
     {
-
-        Analog::log(
-            '[MembersList] Getting property `' . $name . '`',
-            Analog::DEBUG
-        );
-
-        if ( in_array($name, $this->pagination_fields) ) {
+        if (in_array($name, $this->pagination_fields)) {
             return parent::__get($name);
         } else {
             if (in_array($name, $this->memberslist_fields)) {
-                if ( $name === 'query' ) {
+                if ($name === 'query') {
                     return $this->$name;
                 } else {
                     $name = '_' . $name;
@@ -144,7 +150,7 @@ class MembersList extends Pagination
                 }
             } else {
                 Analog::log(
-                    '[MembersList] Unable to get proprety `' .$name . '`',
+                    '[MembersList] Unable to get property `' . $name . '`',
                     Analog::WARNING
                 );
             }
@@ -152,17 +158,35 @@ class MembersList extends Pagination
     }
 
     /**
-    * Global setter method
-    *
-    * @param string $name  name of the property we want to assign a value to
-    * @param object $value a relevant value for the property
-    *
-    * @return void
-    */
-    public function __set($name, $value)
+     * Global isset method
+     * Required for twig to access properties via __get
+     *
+     * @param string $name name of the property we want to retrieve
+     *
+     * @return bool
+     */
+    public function __isset($name)
     {
+        if (in_array($name, $this->pagination_fields)) {
+            return true;
+        } elseif (in_array($name, $this->memberslist_fields)) {
+            return true;
+        }
+
+        return false;
+    }
 
-        if ( in_array($name, $this->pagination_fields) ) {
+    /**
+     * Global setter method
+     *
+     * @param string $name  name of the property we want to assign a value to
+     * @param mixed  $value a relevant value for the property
+     *
+     * @return void
+     */
+    public function __set($name, $value)
+    {
+        if (in_array($name, $this->pagination_fields)) {
             parent::__set($name, $value);
         } else {
             Analog::log(
@@ -170,138 +194,121 @@ class MembersList extends Pagination
                 Analog::DEBUG
             );
 
-            switch($name) {
-            case 'selected':
-            case 'unreachable':
-                if (is_array($value)) {
-                    $name = '_' . $name;
-                    $this->$name = $value;
-                } else {
-                    Analog::log(
-                        '[MembersList] Value for property `' . $name .
-                        '` should be an array (' . gettype($value) . ' given)',
-                        Analog::WARNING
-                    );
-                }
-                break;
-            case 'filter_str':
-                $name = '_' . $name;
-                $this->$name = $value;
-                break;
-            case 'field_filter':
-            case 'membership_filter':
-            case 'account_status_filter':
-                if ( is_numeric($value) ) {
+            switch ($name) {
+                case 'selected':
+                case 'unreachable':
+                    if (is_array($value)) {
+                        $name = '_' . $name;
+                        $this->$name = $value;
+                    } elseif ($value !== null) {
+                        Analog::log(
+                            '[MembersList] Value for property `' . $name .
+                            '` should be an array (' . gettype($value) . ' given)',
+                            Analog::WARNING
+                        );
+                    }
+                    break;
+                case 'filter_str':
                     $name = '_' . $name;
                     $this->$name = $value;
-                } else {
-                    Analog::log(
-                        '[MembersList] Value for property `' . $name .
-                        '` should be an integer (' . gettype($value) . ' given)',
-                        Analog::WARNING
-                    );
-                }
-                break;
-            case 'email_filter':
-                switch ($value) {
-                case Members::FILTER_DC_EMAIL:
-                case Members::FILTER_W_EMAIL:
-                case Members::FILTER_WO_EMAIL:
-                    $this->_email_filter = $value;
                     break;
-                default:
-                    Analog::log(
-                        '[MembersList] Value for email filter should be either ' .
-                        Members::FILTER_DC_EMAIL . ', ' .
-                        Members::FILTER_W_EMAIL . ' or ' .
-                        Members::FILTER_WO_EMAIL . ' (' . $value . ' given)',
-                        Analog::WARNING
-                    );
+                case 'field_filter':
+                case 'membership_filter':
+                case 'filter_account':
+                    if (is_numeric($value)) {
+                        $name = '_' . $name;
+                        $this->$name = $value;
+                    } elseif ($value !== null) {
+                        Analog::log(
+                            '[MembersList] Value for property `' . $name .
+                            '` should be an integer (' . gettype($value) . ' given)',
+                            Analog::WARNING
+                        );
+                    }
                     break;
-                }
-                break;
-            case 'group_filter':
-                if ( is_numeric($value) ) {
-                    //check group existence
-                    $g = new Group();
-                    $res = $g->load($value);
-                    if ( $res === true ) {
-                        $this->_group_filter = $value;
-                    } else {
+                case 'email_filter':
+                    switch ($value) {
+                        case Members::FILTER_DC_EMAIL:
+                        case Members::FILTER_W_EMAIL:
+                        case Members::FILTER_WO_EMAIL:
+                            $this->_email_filter = $value;
+                            break;
+                        default:
+                            Analog::log(
+                                '[MembersList] Value for email filter should be either ' .
+                                Members::FILTER_DC_EMAIL . ', ' .
+                                Members::FILTER_W_EMAIL . ' or ' .
+                                Members::FILTER_WO_EMAIL . ' (' . $value . ' given)',
+                                Analog::WARNING
+                            );
+                            break;
+                    }
+                    break;
+                case 'group_filter':
+                    if (is_numeric($value) && $value > 0) {
+                        //check group existence
+                        $g = new Group();
+                        $res = $g->load($value);
+                        if ($res === true) {
+                            $this->_group_filter = $value;
+                        } else {
+                            Analog::log(
+                                'Group #' . $value . ' does not exists!',
+                                Analog::WARNING
+                            );
+                        }
+                    } elseif ($value !== null && $value !== '0') {
                         Analog::log(
-                            'Group #' . $value . ' does not exists!',
+                            '[MembersList] Value for group filter should be an '
+                            . 'integer (' . gettype($value) . ' given)',
                             Analog::WARNING
                         );
                     }
-                } else {
+                    break;
+                case 'query':
+                    $this->$name = $value;
+                    break;
+                default:
                     Analog::log(
-                        '[MembersList] Value for group filter should be an '
-                        .'integer (' . gettype($value) . ' given',
+                        '[MembersList] Unable to set property `' . $name . '`',
                         Analog::WARNING
                     );
-                }
-                break;
-            case 'query':
-                $this->$name = $value;
-                break;
-            default:
-                Analog::log(
-                    '[MembersList] Unable to set proprety `' . $name . '`',
-                    Analog::WARNING
-                );
-                break;
+                    break;
             }
         }
     }
 
-    /**
-     * Add SQL limit
-     *
-     * @param Zend_Db_Select $select Original select
-     *
-     * @return <type>
-     */
-    public function setLimit($select)
-    {
-        return $this->setLimits($select);
-    }
-
-    /**
-     * Set counter
-     *
-     * @param int $c Count
-     *
-     * @return void
-     */
-    public function setCounter($c)
-    {
-        $this->counter = (int)$c;
-        $this->countPages();
-    }
-
     /**
      * Set commons filters for templates
      *
-     * @param Smarty $tpl Smarty template reference
+     * @param Preferences $prefs Preferences instance
+     * @param mixed       $view  Template reference
      *
      * @return void
      */
-    public function setTplCommonsFilters($tpl)
+    public function setViewCommonsFilters(Preferences $prefs, $view)
     {
-        $tpl->assign(
-            'filter_field_options',
-            array(
-                Members::FILTER_NAME            => _T("Name"),
-                Members::FILTER_COMPANY_NAME    => _T("Company name"),
-                Members::FILTER_ADRESS          => _T("Address"),
-                Members::FILTER_MAIL            => _T("Email,URL,IM"),
-                Members::FILTER_JOB             => _T("Job"),
-                Members::FILTER_INFOS           => _T("Infos")
-            )
+        $filter_options = array(
+            Members::FILTER_NAME            => _T("Name"),
+            Members::FILTER_NUMBER          => _T("Member number"),
+            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")
         );
 
-        $tpl->assign(
-            'filter_membership_options',
+        if ($prefs->pref_show_id) {
+            $filter_options[Members::FILTER_ID] = _T("Member ID");
+        }
+
+        $view->getEnvironment()->addGlobal(
+            'field_filter_options',
+            $filter_options
+        );
+
+        $view->getEnvironment()->addGlobal(
+            'membership_filter_options',
             array(
                 Members::MEMBERSHIP_ALL     => _T("All members"),
                 Members::MEMBERSHIP_UP2DATE => _T("Up to date members"),
@@ -309,11 +316,12 @@ class MembersList extends Pagination
                 Members::MEMBERSHIP_LATE    => _T("Latecomers"),
                 Members::MEMBERSHIP_NEVER   => _T("Never contributed"),
                 Members::MEMBERSHIP_STAFF   => _T("Staff members"),
-                Members::MEMBERSHIP_ADMIN   => _T("Administrators")
+                Members::MEMBERSHIP_ADMIN   => _T("Administrators"),
+                Members::MEMBERSHIP_NONE    => _T("Non members")
             )
         );
 
-        $tpl->assign(
+        $view->getEnvironment()->addGlobal(
             'filter_accounts_options',
             array(
                 Members::ALL_ACCOUNTS       => _T("All accounts"),
@@ -321,7 +329,5 @@ class MembersList extends Pagination
                 Members::INACTIVE_ACCOUNT   => _T("Inactive accounts")
             )
         );
-
-
     }
 }