3 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
6 * Members list filters and paginator
10 * Copyright © 2009-2021 The Galette Team
12 * This file is part of Galette (http://galette.tuxfamily.org).
14 * Galette is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation, either version 3 of the License, or
17 * (at your option) any later version.
19 * Galette is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * You should have received a copy of the GNU General Public License
25 * along with Galette. If not, see <http://www.gnu.org/licenses/>.
30 * @author Johan Cwiklinski <johan@x-tnd.be>
31 * @copyright 2009-2021 The Galette Team
32 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
33 * @link http://galette.tuxfamily.org
34 * @since march, 3rd 2009
37 namespace Galette\Filters
;
40 use Galette\Core\Pagination
;
41 use Galette\Entity\Group
;
42 use Galette\Repository\Members
;
45 * Members list filters and paginator
51 * @author Johan Cwiklinski <johan@x-tnd.be>
52 * @copyright 2009-2021 The Galette Team
53 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
54 * @link http://galette.tuxfamily.org
56 * @property string $filter_str
57 * @property string $field_filter
58 * @property string $membership_filter
59 * @property integer $filter_account
60 * @property string $email_filter
61 * @property integer $group_filter
62 * @property array $selected
63 * @property array $unreachable
64 * @property string $query
67 class MembersList
extends Pagination
71 private $_field_filter;
72 private $_membership_filter;
73 private $_filter_account;
74 private $_email_filter;
75 private $_group_filter;
78 private $_unreachable;
82 protected $memberslist_fields = array(
97 public function __construct()
103 * Returns the field we want to default set order to
105 * @return string field name
107 protected function getDefaultOrder()
113 * Reinit default parameters
117 public function reinit()
122 $this->_filter_str
= null;
123 $this->_field_filter
= null;
124 $this->_membership_filter
= null;
125 $this->_filter_account
= $preferences->pref_filter_account
;
126 $this->_email_filter
= Members
::FILTER_DC_EMAIL
;
127 $this->_group_filter
= null;
128 $this->_selected
= array();
132 * Global getter method
134 * @param string $name name of the property we want to retrive
136 * @return object the called property
138 public function __get($name)
140 if (in_array($name, $this->pagination_fields
)) {
141 return parent
::__get($name);
143 if (in_array($name, $this->memberslist_fields
)) {
144 if ($name === 'query') {
152 '[MembersList] Unable to get property `' . $name . '`',
160 * Global isset method
161 * Required for twig to access properties via __get
163 * @param string $name name of the property we want to retrive
165 * @return object the called property
167 public function __isset($name)
169 if (in_array($name, $this->pagination_fields
)) {
171 } elseif (in_array($name, $this->memberslist_fields
)) {
179 * Global setter method
181 * @param string $name name of the property we want to assign a value to
182 * @param object $value a relevant value for the property
186 public function __set($name, $value)
188 if (in_array($name, $this->pagination_fields
)) {
189 parent
::__set($name, $value);
192 '[MembersList] Setting property `' . $name . '`',
199 if (is_array($value)) {
201 $this->$name = $value;
202 } elseif ($value !== null) {
204 '[MembersList] Value for property `' . $name .
205 '` should be an array (' . gettype($value) . ' given)',
212 $this->$name = $value;
215 case 'membership_filter':
216 case 'filter_account':
217 if (is_numeric($value)) {
219 $this->$name = $value;
220 } elseif ($value !== null) {
222 '[MembersList] Value for property `' . $name .
223 '` should be an integer (' . gettype($value) . ' given)',
230 case Members
::FILTER_DC_EMAIL
:
231 case Members
::FILTER_W_EMAIL
:
232 case Members
::FILTER_WO_EMAIL
:
233 $this->_email_filter
= $value;
237 '[MembersList] Value for email filter should be either ' .
238 Members
::FILTER_DC_EMAIL
. ', ' .
239 Members
::FILTER_W_EMAIL
. ' or ' .
240 Members
::FILTER_WO_EMAIL
. ' (' . $value . ' given)',
247 if (is_numeric($value) && $value > 0) {
248 //check group existence
250 $res = $g->load($value);
252 $this->_group_filter
= $value;
255 'Group #' . $value . ' does not exists!',
259 } elseif ($value !== null && $value !== '0') {
261 '[MembersList] Value for group filter should be an '
262 . 'integer (' . gettype($value) . ' given)',
268 $this->$name = $value;
272 '[MembersList] Unable to set proprety `' . $name . '`',
281 * Set commons filters for templates
283 * @param Preferences $prefs Preferences instance
284 * @param mixed $view Template reference
288 public function setViewCommonsFilters($prefs, $view)
290 $filter_options = array(
291 Members
::FILTER_NAME
=> _T("Name"),
292 Members
::FILTER_NUMBER
=> _T("Member number"),
293 Members
::FILTER_COMPANY_NAME
=> _T("Company name"),
294 Members
::FILTER_ADDRESS
=> _T("Address"),
295 Members
::FILTER_MAIL
=> _T("Email,URL,IM"),
296 Members
::FILTER_JOB
=> _T("Job"),
297 Members
::FILTER_INFOS
=> _T("Infos")
300 if ($prefs->pref_show_id
) {
301 $filter_options[Members
::FILTER_ID
] = _T("Member ID");
304 $view->getEnvironment()->addGlobal(
305 'field_filter_options',
309 $view->getEnvironment()->addGlobal(
310 'membership_filter_options',
312 Members
::MEMBERSHIP_ALL
=> _T("All members"),
313 Members
::MEMBERSHIP_UP2DATE
=> _T("Up to date members"),
314 Members
::MEMBERSHIP_NEARLY
=> _T("Close expiries"),
315 Members
::MEMBERSHIP_LATE
=> _T("Latecomers"),
316 Members
::MEMBERSHIP_NEVER
=> _T("Never contributed"),
317 Members
::MEMBERSHIP_STAFF
=> _T("Staff members"),
318 Members
::MEMBERSHIP_ADMIN
=> _T("Administrators"),
319 Members
::MEMBERSHIP_NONE
=> _T("Non members")
323 $view->getEnvironment()->addGlobal(
324 'filter_accounts_options',
326 Members
::ALL_ACCOUNTS
=> _T("All accounts"),
327 Members
::ACTIVE_ACCOUNT
=> _T("Active accounts"),
328 Members
::INACTIVE_ACCOUNT
=> _T("Inactive accounts")