]> git.agnieray.net Git - galette.git/blob - galette/lib/Galette/Filters/MembersList.php
Merge branch 'release/0.9.3'
[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-2014 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-2014 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 * @version SVN: $Id$
34 * @link http://galette.tuxfamily.org
35 * @since march, 3rd 2009
36 */
37
38 namespace Galette\Filters;
39
40 use Analog\Analog;
41 use Galette\Core\Pagination;
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-2014 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
58 class MembersList extends Pagination
59 {
60 //filters
61 private $_filter_str;
62 private $_field_filter;
63 private $_membership_filter;
64 private $_filter_account;
65 private $_email_filter;
66 private $_group_filter;
67
68 private $_selected;
69 private $_unreachable;
70
71 protected $query;
72
73 protected $memberslist_fields = array(
74 'filter_str',
75 'field_filter',
76 'membership_filter',
77 'filter_account',
78 'email_filter',
79 'group_filter',
80 'selected',
81 'unreachable',
82 'query'
83 );
84
85 /**
86 * Default constructor
87 */
88 public function __construct()
89 {
90 $this->reinit();
91 }
92
93 /**
94 * Returns the field we want to default set order to
95 *
96 * @return string field name
97 */
98 protected function getDefaultOrder()
99 {
100 return 'nom_adh';
101 }
102
103 /**
104 * Reinit default parameters
105 *
106 * @return void
107 */
108 public function reinit()
109 {
110 global $preferences;
111
112 parent::reinit();
113 $this->_filter_str = null;
114 $this->_field_filter = null;
115 $this->_membership_filter = null;
116 $this->_filter_account = $preferences->pref_filter_account;
117 $this->_email_filter = Members::FILTER_DC_EMAIL;
118 $this->_group_filter = null;
119 $this->_selected = array();
120 }
121
122 /**
123 * Global getter method
124 *
125 * @param string $name name of the property we want to retrive
126 *
127 * @return object the called property
128 */
129 public function __get($name)
130 {
131
132 Analog::log(
133 '[MembersList] Getting property `' . $name . '`',
134 Analog::DEBUG
135 );
136
137 if (in_array($name, $this->pagination_fields)) {
138 return parent::__get($name);
139 } else {
140 if (in_array($name, $this->memberslist_fields)) {
141 if ($name === 'query') {
142 return $this->$name;
143 } else {
144 $name = '_' . $name;
145 return $this->$name;
146 }
147 } else {
148 Analog::log(
149 '[MembersList] Unable to get proprety `' .$name . '`',
150 Analog::WARNING
151 );
152 }
153 }
154 }
155
156 /**
157 * Global setter method
158 *
159 * @param string $name name of the property we want to assign a value to
160 * @param object $value a relevant value for the property
161 *
162 * @return void
163 */
164 public function __set($name, $value)
165 {
166 if (in_array($name, $this->pagination_fields)) {
167 parent::__set($name, $value);
168 } else {
169 Analog::log(
170 '[MembersList] Setting property `' . $name . '`',
171 Analog::DEBUG
172 );
173
174 switch ($name) {
175 case 'selected':
176 case 'unreachable':
177 if (is_array($value)) {
178 $name = '_' . $name;
179 $this->$name = $value;
180 } elseif ($value !== null) {
181 Analog::log(
182 '[MembersList] Value for property `' . $name .
183 '` should be an array (' . gettype($value) . ' given)',
184 Analog::WARNING
185 );
186 }
187 break;
188 case 'filter_str':
189 $name = '_' . $name;
190 $this->$name = $value;
191 break;
192 case 'field_filter':
193 case 'membership_filter':
194 case 'filter_account':
195 if (is_numeric($value)) {
196 $name = '_' . $name;
197 $this->$name = $value;
198 } elseif ($value !== null) {
199 Analog::log(
200 '[MembersList] Value for property `' . $name .
201 '` should be an integer (' . gettype($value) . ' given)',
202 Analog::WARNING
203 );
204 }
205 break;
206 case 'email_filter':
207 switch ($value) {
208 case Members::FILTER_DC_EMAIL:
209 case Members::FILTER_W_EMAIL:
210 case Members::FILTER_WO_EMAIL:
211 $this->_email_filter = $value;
212 break;
213 default:
214 Analog::log(
215 '[MembersList] Value for email filter should be either ' .
216 Members::FILTER_DC_EMAIL . ', ' .
217 Members::FILTER_W_EMAIL . ' or ' .
218 Members::FILTER_WO_EMAIL . ' (' . $value . ' given)',
219 Analog::WARNING
220 );
221 break;
222 }
223 break;
224 case 'group_filter':
225 if (is_numeric($value) && $value > 0) {
226 //check group existence
227 $g = new Group();
228 $res = $g->load($value);
229 if ($res === true) {
230 $this->_group_filter = $value;
231 } else {
232 Analog::log(
233 'Group #' . $value . ' does not exists!',
234 Analog::WARNING
235 );
236 }
237 } elseif ($value !== null && $value !== '0') {
238 Analog::log(
239 '[MembersList] Value for group filter should be an '
240 .'integer (' . gettype($value) . ' given)',
241 Analog::WARNING
242 );
243 }
244 break;
245 case 'query':
246 $this->$name = $value;
247 break;
248 default:
249 Analog::log(
250 '[MembersList] Unable to set proprety `' . $name . '`',
251 Analog::WARNING
252 );
253 break;
254 }
255 }
256 }
257
258 /**
259 * Set commons filters for templates
260 *
261 * @param Preferences $prefs Preferences instance
262 * @param Smarty $view Smarty template reference
263 *
264 * @return void
265 */
266 public function setViewCommonsFilters($prefs, \Smarty $view)
267 {
268 $filter_options = array(
269 Members::FILTER_NAME => _T("Name"),
270 Members::FILTER_COMPANY_NAME => _T("Company name"),
271 Members::FILTER_ADDRESS => _T("Address"),
272 Members::FILTER_MAIL => _T("Email,URL,IM"),
273 Members::FILTER_JOB => _T("Job"),
274 Members::FILTER_INFOS => _T("Infos")
275 );
276
277 if ($prefs->pref_show_id) {
278 $filter_options[Members::FILTER_NUMBER] = _T("Member number");
279 }
280
281 $view->assign(
282 'field_filter_options',
283 $filter_options
284 );
285
286 $view->assign(
287 'membership_filter_options',
288 array(
289 Members::MEMBERSHIP_ALL => _T("All members"),
290 Members::MEMBERSHIP_UP2DATE => _T("Up to date members"),
291 Members::MEMBERSHIP_NEARLY => _T("Close expiries"),
292 Members::MEMBERSHIP_LATE => _T("Latecomers"),
293 Members::MEMBERSHIP_NEVER => _T("Never contributed"),
294 Members::MEMBERSHIP_STAFF => _T("Staff members"),
295 Members::MEMBERSHIP_ADMIN => _T("Administrators"),
296 Members::MEMBERSHIP_NONE => _T("Non members")
297 )
298 );
299
300 $view->assign(
301 'filter_accounts_options',
302 array(
303 Members::ALL_ACCOUNTS => _T("All accounts"),
304 Members::ACTIVE_ACCOUNT => _T("Active accounts"),
305 Members::INACTIVE_ACCOUNT => _T("Inactive accounts")
306 )
307 );
308 }
309 }