]> git.agnieray.net Git - galette.git/blob - galette/lib/Galette/Filters/MembersList.php
Merge branch 'hotfix/0.7.2.6' into develop
[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-2012 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-2012 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 Galette\Common\KLogger as KLogger;
41 use Galette\Core\Pagination as Pagination;
42 use Galette\Entity\Group as Group;
43 use Galette\Repository\Members as 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-2012 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 $_account_status_filter;
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 'account_status_filter',
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 parent::reinit();
111 $this->_filter_str = null;
112 $this->_field_filter = null;
113 $this->_membership_filter = null;
114 $this->_account_status_filter = null;
115 $this->_email_filter = Members::FILTER_DC_EMAIL;
116 $this->_group_filter = null;
117 $this->_selected = array();
118 }
119
120 /**
121 * Global getter method
122 *
123 * @param string $name name of the property we want to retrive
124 *
125 * @return object the called property
126 */
127 public function __get($name)
128 {
129 global $log;
130
131 $log->log(
132 '[MembersList] Getting property `' . $name . '`',
133 KLogger::DEBUG
134 );
135
136 if ( in_array($name, $this->pagination_fields) ) {
137 return parent::__get($name);
138 } else {
139 if (in_array($name, $this->memberslist_fields)) {
140 if ( $name === 'query' ) {
141 return $this->$name;
142 } else {
143 $name = '_' . $name;
144 return $this->$name;
145 }
146 } else {
147 $log->log(
148 '[MembersList] Unable to get proprety `' .$name . '`',
149 KLogger::WARN
150 );
151 }
152 }
153 }
154
155 /**
156 * Global setter method
157 *
158 * @param string $name name of the property we want to assign a value to
159 * @param object $value a relevant value for the property
160 *
161 * @return void
162 */
163 public function __set($name, $value)
164 {
165 global $log;
166
167 if ( in_array($name, $this->pagination_fields) ) {
168 parent::__set($name, $value);
169 } else {
170 $log->log(
171 '[MembersList] Setting property `' . $name . '`',
172 KLogger::DEBUG
173 );
174
175 switch($name) {
176 case 'selected':
177 case 'unreachable':
178 if (is_array($value)) {
179 $name = '_' . $name;
180 $this->$name = $value;
181 } else {
182 $log->log(
183 '[MembersList] Value for property `' . $name .
184 '` should be an array (' . gettype($value) . ' given)',
185 KLogger::WARN
186 );
187 }
188 break;
189 case 'filter_str':
190 $name = '_' . $name;
191 $this->$name = $value;
192 break;
193 case 'field_filter':
194 case 'membership_filter':
195 case 'account_status_filter':
196 if ( is_numeric($value) ) {
197 $name = '_' . $name;
198 $this->$name = $value;
199 } else {
200 $log->log(
201 '[MembersList] Value for property `' . $name .
202 '` should be an integer (' . gettype($value) . ' given)',
203 KLogger::WARN
204 );
205 }
206 break;
207 case 'email_filter':
208 switch ($value) {
209 case Members::FILTER_DC_EMAIL:
210 case Members::FILTER_W_EMAIL:
211 case Members::FILTER_WO_EMAIL:
212 $this->_email_filter = $value;
213 break;
214 default:
215 $log->log(
216 '[MembersList] Value for email filter should be either ' .
217 Members::FILTER_DC_EMAIL . ', ' .
218 Members::FILTER_W_EMAIL . ' or ' .
219 Members::FILTER_WO_EMAIL . ' (' . $value . ' given)',
220 KLogger::WARN
221 );
222 break;
223 }
224 break;
225 case 'group_filter':
226 if ( is_numeric($value) ) {
227 //check group existence
228 $g = new Group();
229 $res = $g->load($value);
230 if ( $res === true ) {
231 $this->_group_filter = $value;
232 } else {
233 $log->log(
234 'Group #' . $value . ' does not exists!',
235 KLogger::WARN
236 );
237 }
238 } else {
239 $log->log(
240 '[MembersList] Value for group filter should be an '
241 .'integer (' . gettype($value) . ' given',
242 KLogger::WARN
243 );
244 }
245 break;
246 case 'query':
247 $this->$name = $value;
248 break;
249 default:
250 $log->log(
251 '[MembersList] Unable to set proprety `' . $name . '`',
252 KLogger::WARN
253 );
254 break;
255 }
256 }
257 }
258
259 /**
260 * Add SQL limit
261 *
262 * @param Zend_Db_Select $select Original select
263 *
264 * @return <type>
265 */
266 public function setLimit($select)
267 {
268 return $this->setLimits($select);
269 }
270
271 /**
272 * Set counter
273 *
274 * @param int $c Count
275 *
276 * @return void
277 */
278 public function setCounter($c)
279 {
280 $this->counter = (int)$c;
281 $this->countPages();
282 }
283
284 /**
285 * Set commons filters for templates
286 *
287 * @param Smarty $tpl Smarty template reference
288 *
289 * @return void
290 */
291 public function setTplCommonsFilters($tpl)
292 {
293 $tpl->assign(
294 'filter_field_options',
295 array(
296 Members::FILTER_NAME => _T("Name"),
297 Members::FILTER_COMPANY_NAME => _T("Company name"),
298 Members::FILTER_ADRESS => _T("Address"),
299 Members::FILTER_MAIL => _T("Email,URL,IM"),
300 Members::FILTER_JOB => _T("Job"),
301 Members::FILTER_INFOS => _T("Infos")
302 )
303 );
304
305 $tpl->assign(
306 'filter_membership_options',
307 array(
308 Members::MEMBERSHIP_ALL => _T("All members"),
309 Members::MEMBERSHIP_UP2DATE => _T("Up to date members"),
310 Members::MEMBERSHIP_NEARLY => _T("Close expiries"),
311 Members::MEMBERSHIP_LATE => _T("Latecomers"),
312 Members::MEMBERSHIP_NEVER => _T("Never contributed"),
313 Members::MEMBERSHIP_STAFF => _T("Staff members"),
314 Members::MEMBERSHIP_ADMIN => _T("Administrators")
315 )
316 );
317
318 $tpl->assign(
319 'filter_accounts_options',
320 array(
321 Members::ALL_ACCOUNTS => _T("All accounts"),
322 Members::ACTIVE_ACCOUNT => _T("Active accounts"),
323 Members::INACTIVE_ACCOUNT => _T("Inactive accounts")
324 )
325 );
326
327
328 }
329 }