]> git.agnieray.net Git - galette.git/blob - galette/lib/Galette/Filters/MembersList.php
ee9ba98130c803a4ff5abba427c3d68379686f17
[galette.git] / galette / lib / Galette / Filters / MembersList.php
1 <?php
2
3 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
4
5 /**
6 * Members list filters and paginator
7 *
8 * PHP version 5
9 *
10 * Copyright © 2009-2023 The Galette Team
11 *
12 * This file is part of Galette (http://galette.tuxfamily.org).
13 *
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.
18 *
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.
23 *
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/>.
26 *
27 * @category Filters
28 * @package Galette
29 *
30 * @author Johan Cwiklinski <johan@x-tnd.be>
31 * @copyright 2009-2023 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
35 */
36
37 namespace Galette\Filters;
38
39 use Analog\Analog;
40 use Galette\Core\Pagination;
41 use Galette\Core\Preferences;
42 use Galette\Entity\Group;
43 use Galette\Repository\Members;
44
45 /**
46 * Members list filters and paginator
47 *
48 * @name MembersList
49 * @category Filters
50 * @package Galette
51 *
52 * @author Johan Cwiklinski <johan@x-tnd.be>
53 * @copyright 2009-2023 The Galette Team
54 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
55 * @link http://galette.tuxfamily.org
56 *
57 * @property string $filter_str
58 * @property integer $field_filter
59 * @property integer $membership_filter
60 * @property integer $filter_account
61 * @property integer $email_filter
62 * @property integer $group_filter
63 * @property array $selected
64 * @property array $unreachable
65 * @property string $query
66 */
67
68 class MembersList extends Pagination
69 {
70 //filters
71 private $_filter_str;
72 private $_field_filter;
73 private $_membership_filter;
74 private $_filter_account;
75 private $_email_filter;
76 private $_group_filter;
77
78 private $_selected;
79 private $_unreachable;
80
81 protected $query;
82
83 protected $memberslist_fields = array(
84 'filter_str',
85 'field_filter',
86 'membership_filter',
87 'filter_account',
88 'email_filter',
89 'group_filter',
90 'selected',
91 'unreachable',
92 'query'
93 );
94
95 /**
96 * Default constructor
97 */
98 public function __construct()
99 {
100 $this->reinit();
101 }
102
103 /**
104 * Returns the field we want to default set order to
105 *
106 * @return int|string
107 */
108 protected function getDefaultOrder()
109 {
110 return 'nom_adh';
111 }
112
113 /**
114 * Reinit default parameters
115 *
116 * @return void
117 */
118 public function reinit()
119 {
120 global $preferences;
121
122 parent::reinit();
123 $this->_filter_str = null;
124 $this->_field_filter = null;
125 $this->_membership_filter = null;
126 $this->_filter_account = $preferences->pref_filter_account;
127 $this->_email_filter = Members::FILTER_DC_EMAIL;
128 $this->_group_filter = null;
129 $this->_selected = array();
130 }
131
132 /**
133 * Global getter method
134 *
135 * @param string $name name of the property we want to retrieve
136 *
137 * @return mixed the called property
138 */
139 public function __get($name)
140 {
141 if (in_array($name, $this->pagination_fields)) {
142 return parent::__get($name);
143 } else {
144 if (in_array($name, $this->memberslist_fields)) {
145 if ($name === 'query') {
146 return $this->$name;
147 } else {
148 $name = '_' . $name;
149 return $this->$name;
150 }
151 } else {
152 Analog::log(
153 '[MembersList] Unable to get property `' . $name . '`',
154 Analog::WARNING
155 );
156 }
157 }
158 }
159
160 /**
161 * Global isset method
162 * Required for twig to access properties via __get
163 *
164 * @param string $name name of the property we want to retrieve
165 *
166 * @return bool
167 */
168 public function __isset($name)
169 {
170 if (in_array($name, $this->pagination_fields)) {
171 return true;
172 } elseif (in_array($name, $this->memberslist_fields)) {
173 return true;
174 }
175
176 return false;
177 }
178
179 /**
180 * Global setter method
181 *
182 * @param string $name name of the property we want to assign a value to
183 * @param mixed $value a relevant value for the property
184 *
185 * @return void
186 */
187 public function __set($name, $value)
188 {
189 if (in_array($name, $this->pagination_fields)) {
190 parent::__set($name, $value);
191 } else {
192 Analog::log(
193 '[MembersList] Setting property `' . $name . '`',
194 Analog::DEBUG
195 );
196
197 switch ($name) {
198 case 'selected':
199 case 'unreachable':
200 if (is_array($value)) {
201 $name = '_' . $name;
202 $this->$name = $value;
203 } elseif ($value !== null) {
204 Analog::log(
205 '[MembersList] Value for property `' . $name .
206 '` should be an array (' . gettype($value) . ' given)',
207 Analog::WARNING
208 );
209 }
210 break;
211 case 'filter_str':
212 $name = '_' . $name;
213 $this->$name = $value;
214 break;
215 case 'field_filter':
216 case 'membership_filter':
217 case 'filter_account':
218 if (is_numeric($value)) {
219 $name = '_' . $name;
220 $this->$name = $value;
221 } elseif ($value !== null) {
222 Analog::log(
223 '[MembersList] Value for property `' . $name .
224 '` should be an integer (' . gettype($value) . ' given)',
225 Analog::WARNING
226 );
227 }
228 break;
229 case 'email_filter':
230 switch ($value) {
231 case Members::FILTER_DC_EMAIL:
232 case Members::FILTER_W_EMAIL:
233 case Members::FILTER_WO_EMAIL:
234 $this->_email_filter = $value;
235 break;
236 default:
237 Analog::log(
238 '[MembersList] Value for email filter should be either ' .
239 Members::FILTER_DC_EMAIL . ', ' .
240 Members::FILTER_W_EMAIL . ' or ' .
241 Members::FILTER_WO_EMAIL . ' (' . $value . ' given)',
242 Analog::WARNING
243 );
244 break;
245 }
246 break;
247 case 'group_filter':
248 if (is_numeric($value) && $value > 0) {
249 //check group existence
250 $g = new Group();
251 $res = $g->load($value);
252 if ($res === true) {
253 $this->_group_filter = $value;
254 } else {
255 Analog::log(
256 'Group #' . $value . ' does not exists!',
257 Analog::WARNING
258 );
259 }
260 } elseif ($value !== null && $value !== '0') {
261 Analog::log(
262 '[MembersList] Value for group filter should be an '
263 . 'integer (' . gettype($value) . ' given)',
264 Analog::WARNING
265 );
266 }
267 break;
268 case 'query':
269 $this->$name = $value;
270 break;
271 default:
272 Analog::log(
273 '[MembersList] Unable to set proprety `' . $name . '`',
274 Analog::WARNING
275 );
276 break;
277 }
278 }
279 }
280
281 /**
282 * Set commons filters for templates
283 *
284 * @param Preferences $prefs Preferences instance
285 * @param mixed $view Template reference
286 *
287 * @return void
288 */
289 public function setViewCommonsFilters(Preferences $prefs, $view)
290 {
291 $filter_options = array(
292 Members::FILTER_NAME => _T("Name"),
293 Members::FILTER_NUMBER => _T("Member number"),
294 Members::FILTER_COMPANY_NAME => _T("Company name"),
295 Members::FILTER_ADDRESS => _T("Address"),
296 Members::FILTER_MAIL => _T("Email,URL,IM"),
297 Members::FILTER_JOB => _T("Job"),
298 Members::FILTER_INFOS => _T("Infos")
299 );
300
301 if ($prefs->pref_show_id) {
302 $filter_options[Members::FILTER_ID] = _T("Member ID");
303 }
304
305 $view->getEnvironment()->addGlobal(
306 'field_filter_options',
307 $filter_options
308 );
309
310 $view->getEnvironment()->addGlobal(
311 'membership_filter_options',
312 array(
313 Members::MEMBERSHIP_ALL => _T("All members"),
314 Members::MEMBERSHIP_UP2DATE => _T("Up to date members"),
315 Members::MEMBERSHIP_NEARLY => _T("Close expiries"),
316 Members::MEMBERSHIP_LATE => _T("Latecomers"),
317 Members::MEMBERSHIP_NEVER => _T("Never contributed"),
318 Members::MEMBERSHIP_STAFF => _T("Staff members"),
319 Members::MEMBERSHIP_ADMIN => _T("Administrators"),
320 Members::MEMBERSHIP_NONE => _T("Non members")
321 )
322 );
323
324 $view->getEnvironment()->addGlobal(
325 'filter_accounts_options',
326 array(
327 Members::ALL_ACCOUNTS => _T("All accounts"),
328 Members::ACTIVE_ACCOUNT => _T("Active accounts"),
329 Members::INACTIVE_ACCOUNT => _T("Inactive accounts")
330 )
331 );
332 }
333 }