]> git.agnieray.net Git - galette.git/blob - galette/lib/Galette/Filters/MembersList.php
Continue conversion
[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-2021 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-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
35 */
36
37 namespace Galette\Filters;
38
39 use Analog\Analog;
40 use Galette\Core\Pagination;
41 use Galette\Entity\Group;
42 use Galette\Repository\Members;
43
44 /**
45 * Members list filters and paginator
46 *
47 * @name MembersList
48 * @category Filters
49 * @package Galette
50 *
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
55 *
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
65 */
66
67 class MembersList extends Pagination
68 {
69 //filters
70 private $_filter_str;
71 private $_field_filter;
72 private $_membership_filter;
73 private $_filter_account;
74 private $_email_filter;
75 private $_group_filter;
76
77 private $_selected;
78 private $_unreachable;
79
80 protected $query;
81
82 protected $memberslist_fields = array(
83 'filter_str',
84 'field_filter',
85 'membership_filter',
86 'filter_account',
87 'email_filter',
88 'group_filter',
89 'selected',
90 'unreachable',
91 'query'
92 );
93
94 /**
95 * Default constructor
96 */
97 public function __construct()
98 {
99 $this->reinit();
100 }
101
102 /**
103 * Returns the field we want to default set order to
104 *
105 * @return string field name
106 */
107 protected function getDefaultOrder()
108 {
109 return 'nom_adh';
110 }
111
112 /**
113 * Reinit default parameters
114 *
115 * @return void
116 */
117 public function reinit()
118 {
119 global $preferences;
120
121 parent::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();
129 }
130
131 /**
132 * Global getter method
133 *
134 * @param string $name name of the property we want to retrive
135 *
136 * @return object the called property
137 */
138 public function __get($name)
139 {
140 if (in_array($name, $this->pagination_fields)) {
141 return parent::__get($name);
142 } else {
143 if (in_array($name, $this->memberslist_fields)) {
144 if ($name === 'query') {
145 return $this->$name;
146 } else {
147 $name = '_' . $name;
148 return $this->$name;
149 }
150 } else {
151 Analog::log(
152 '[MembersList] Unable to get property `' . $name . '`',
153 Analog::WARNING
154 );
155 }
156 }
157 }
158
159 /**
160 * Global isset method
161 * Required for twig to access properties via __get
162 *
163 * @param string $name name of the property we want to retrive
164 *
165 * @return object the called property
166 */
167 public function __isset($name)
168 {
169 if (in_array($name, $this->pagination_fields)) {
170 return true;
171 } elseif (in_array($name, $this->memberslist_fields)) {
172 return true;
173 }
174
175 return false;
176 }
177
178 /**
179 * Global setter method
180 *
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
183 *
184 * @return void
185 */
186 public function __set($name, $value)
187 {
188 if (in_array($name, $this->pagination_fields)) {
189 parent::__set($name, $value);
190 } else {
191 Analog::log(
192 '[MembersList] Setting property `' . $name . '`',
193 Analog::DEBUG
194 );
195
196 switch ($name) {
197 case 'selected':
198 case 'unreachable':
199 if (is_array($value)) {
200 $name = '_' . $name;
201 $this->$name = $value;
202 } elseif ($value !== null) {
203 Analog::log(
204 '[MembersList] Value for property `' . $name .
205 '` should be an array (' . gettype($value) . ' given)',
206 Analog::WARNING
207 );
208 }
209 break;
210 case 'filter_str':
211 $name = '_' . $name;
212 $this->$name = $value;
213 break;
214 case 'field_filter':
215 case 'membership_filter':
216 case 'filter_account':
217 if (is_numeric($value)) {
218 $name = '_' . $name;
219 $this->$name = $value;
220 } elseif ($value !== null) {
221 Analog::log(
222 '[MembersList] Value for property `' . $name .
223 '` should be an integer (' . gettype($value) . ' given)',
224 Analog::WARNING
225 );
226 }
227 break;
228 case 'email_filter':
229 switch ($value) {
230 case Members::FILTER_DC_EMAIL:
231 case Members::FILTER_W_EMAIL:
232 case Members::FILTER_WO_EMAIL:
233 $this->_email_filter = $value;
234 break;
235 default:
236 Analog::log(
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)',
241 Analog::WARNING
242 );
243 break;
244 }
245 break;
246 case 'group_filter':
247 if (is_numeric($value) && $value > 0) {
248 //check group existence
249 $g = new Group();
250 $res = $g->load($value);
251 if ($res === true) {
252 $this->_group_filter = $value;
253 } else {
254 Analog::log(
255 'Group #' . $value . ' does not exists!',
256 Analog::WARNING
257 );
258 }
259 } elseif ($value !== null && $value !== '0') {
260 Analog::log(
261 '[MembersList] Value for group filter should be an '
262 . 'integer (' . gettype($value) . ' given)',
263 Analog::WARNING
264 );
265 }
266 break;
267 case 'query':
268 $this->$name = $value;
269 break;
270 default:
271 Analog::log(
272 '[MembersList] Unable to set proprety `' . $name . '`',
273 Analog::WARNING
274 );
275 break;
276 }
277 }
278 }
279
280 /**
281 * Set commons filters for templates
282 *
283 * @param Preferences $prefs Preferences instance
284 * @param mixed $view Template reference
285 *
286 * @return void
287 */
288 public function setViewCommonsFilters($prefs, $view)
289 {
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")
298 );
299
300 if ($prefs->pref_show_id) {
301 $filter_options[Members::FILTER_ID] = _T("Member ID");
302 }
303
304 $view->getEnvironment()->addGlobal(
305 'field_filter_options',
306 $filter_options
307 );
308
309 $view->getEnvironment()->addGlobal(
310 'membership_filter_options',
311 array(
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")
320 )
321 );
322
323 $view->getEnvironment()->addGlobal(
324 'filter_accounts_options',
325 array(
326 Members::ALL_ACCOUNTS => _T("All accounts"),
327 Members::ACTIVE_ACCOUNT => _T("Active accounts"),
328 Members::INACTIVE_ACCOUNT => _T("Inactive accounts")
329 )
330 );
331 }
332 }