first reimport from platal
[platal.git] / include / validations.inc.php
CommitLineData
0337d704 1<?php
2/***************************************************************************
3 * Copyright (C) 2003-2004 Polytechnique.org *
4 * http://opensource.polytechnique.org/ *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the Free Software *
18 * Foundation, Inc., *
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
20 ***************************************************************************/
21
22// {{{ DEFINES
23
24define('SIZE_MAX', 32768);
25
26// }}}
27// {{{ class ValidateIterator
28
29/**
30 * Iterator class, that lists objects through the database
31 */
32class ValidateIterator extends XOrgDBIterator
33{
34 // {{{ constuctor
35
36 function ValidateIterator ()
37 {
38 parent::XOrgDBIterator('SELECT data,stamp FROM requests ORDER BY stamp', MYSQL_NUM);
39 }
40
41 // }}}
42 // {{{ function next()
43
44 function next ()
45 {
46 if (list($result, $stamp) = parent::next()) {
47 $result = unserialize($result);
48 $result->stamp = $stamp;
49 return($result);
50 } else {
51 return null;
52 }
53 }
54
55 // }}}
56}
57
58// }}}
59// {{{ class Validate
60
61/** classe "virtuelle" à dériver pour chaque nouvelle implémentation
62 */
63class Validate
64{
65 // {{{ properties
66
67 var $uid;
68 var $prenom;
69 var $nom;
70 var $promo;
71 var $bestalias;
72 var $forlife;
73
74 var $stamp;
75 var $unique;
76 // enable the refuse button
77 var $refuse = true;
78 var $type;
79 var $comments = Array();
80 // the validations rules : comments for admins
81 var $rules = "Mieux vaut laisser une demande de validation à un autre admin que de valider une requête illégale ou que de refuser une demande légitime";
82
83 // }}}
84 // {{{ constructor
85
86 /** constructeur
87 * @param $_uid user id
88 * @param $_unique requête pouvant être multiple ou non
89 * @param $_type type de la donnée comme dans le champ type de x4dat.requests
90 */
91 function Validate($_uid, $_unique, $_type)
92 {
93 global $globals;
94 $this->uid = $_uid;
95 $this->stamp = date('YmdHis');
96 $this->unique = $_unique;
97 $this->type = $_type;
98 $res = $globals->xdb->query(
99 "SELECT u.prenom, u.nom, u.promo, a.alias, b.alias
100 FROM auth_user_md5 AS u
101 INNER JOIN aliases AS a ON ( u.user_id=a.id AND a.type='a_vie' )
102 INNER JOIN aliases AS b ON ( u.user_id=b.id AND b.type!='homonyme' AND FIND_IN_SET('bestalias', b.flags) )
103 WHERE u.user_id={?}", $_uid);
104 list($this->prenom, $this->nom, $this->promo, $this->forlife, $this->bestalias) = $res->fetchOneRow();
105 }
106
107 // }}}
108 // {{{ function submit()
109
110 /** fonction à utiliser pour envoyer les données à la modération
111 * cette fonction supprimme les doublons sur un couple ($user,$type) si $this->unique est vrai
112 */
113 function submit ()
114 {
115 global $globals;
116 if ($this->unique) {
117 $globals->xdb->execute('DELETE FROM requests WHERE user_id={?} AND type={?}', $this->uid, $this->type);
118 }
119
120 $this->stamp = date('YmdHis');
121 $globals->xdb->execute('INSERT INTO requests (user_id, type, data, stamp) VALUES ({?}, {?}, {?}, {?})',
122 $this->uid, $this->type, $this, $this->stamp);
123
124 return true;
125 }
126
127 // }}}
128 // {{{ function update()
129
130 function update ()
131 {
132 global $globals;
133 $globals->xdb->execute('UPDATE requests SET data={?}, stamp=stamp
134 WHERE user_id={?} AND type={?} AND stamp={?}',
135 $this, $this->uid, $this->type, $this->stamp);
136
137 return true;
138 }
139
140 // }}}
141 // {{{ function clean()
142
143 /** fonction à utiliser pour nettoyer l'entrée de la requête dans la table requests
144 * attention, tout est supprimé si c'est un unique
145 */
146 function clean ()
147 {
148 global $globals;
149 if ($this->unique) {
150 return $globals->xdb->execute('DELETE FROM requests WHERE user_id={?} AND type={?}',
151 $this->uid, $this->type);
152 } else {
153 return $globals->xdb->execute('DELETE FROM requests WHERE user_id={?} AND type={?} AND stamp={?}',
154 $this->uid, $this->type, $this->stamp);
155 }
156 }
157
158 // }}}
159 // {{{ function handle_formu()
160
161 /** fonction à réaliser en cas de valistion du formulaire
162 */
163 function handle_formu()
164 {
165 if (Env::has('delete')) {
166 $this->clean();
167 $this->trig('requete supprimée');
168 return true;
169 }
170
171 // ajout d'un commentaire
172 if (Env::has('hold') && Env::has('comm')) {
173 $this->comments[] = Array(Session::get('bestalias'), Env::get('comm'));
174
175 // envoi d'un mail à hotliners
176 global $globals;
177 require_once('diogenes/diogenes.hermes.inc.php');
178 $mailer = new HermesMailer;
179 $mailer->setSubject("Commentaires de validation {$this->type}");
180 $mailer->setFrom("validation+{$this->type}@{$globals->mail->domain}");
181 $mailer->addTo("hotliners@{$globals->mail->domain}");
182
183 $body = "Validation {$this->type} pour {$this->prenom} {$this->nom}\n\n"
184 . Session::get('bestalias')." a ajouté le commentaire :\n\n"
185 . Env::get('comm')."\n\n"
186 . "cf la discussion sur : ".$globals->baseurl."/admin/valider.php";
187
188 $mailer->setTxtBody(wordwrap($body));
189 $mailer->send();
190
191 $this->update();
192 $this->trig('commentaire ajouté');
193 return true;
194 }
195
196 if (Env::has('accept')) {
197 if ($this->commit()) {
198 $this->sendmail(true);
199 $this->clean();
200 $this->trig('mail envoyé');
201 return true;
202 } else {
203 $this->trig('erreur lors de la validation');
204 return false;
205 }
206 }
207
208 if (Env::has('refuse')) {
209 if (Env::get('comm')) {
210 $this->sendmail(false);
211 $this->clean();
212 $this->trig('mail envoyé');
213 return true;
214 } else {
215 $this->trig('pas de motivation pour le refus !!!');
216 }
217 }
218
219 return false;
220 }
221
222 // }}}
223 // {{{ function sendmail
224
225 function sendmail($isok)
226 {
227 global $globals;
228 require_once('diogenes/diogenes.hermes.inc.php');
229 $mailer = new HermesMailer;
230 $mailer->setSubject($this->_mail_subj());
231 $mailer->setFrom("validation+{$this->type}@{$globals->mail->domain}");
232 $mailer->addTo("\"{$this->prenom} {$this->nom}\" <{$this->bestalias}@{$globals->mail->domain}>");
233 $mailer->addCc("validation+{$this->type}@{$globals->mail->domain}");
234
235 $body = "Cher(e) camarade,\n\n"
236 . $this->_mail_body($isok)
237 . (Env::has('comm') ? "\n\n".Env::get('comm') : '')
238 . "\n\nCordialement,\nL'équipe Polytechnique.org\n";
239
240 $mailer->setTxtBody(wordwrap($body));
241 $mailer->send();
242 }
243
244 // }}}
245 // {{{ function trig()
246
247 function trig($msg) {
248 global $page;
249 $page->trig($msg);
250 }
251
252 // }}}
253 // {{{ function get_request()
254
255 /** fonction statique qui renvoie la requête de l'utilisateur d'id $uidau timestamp $t
256 * @param $uid l'id de l'utilisateur concerné
257 * @param $type le type de la requête
258 * @param $stamp le timestamp de la requête
259 *
260 * XXX fonction "statique" XXX
261 * à utiliser uniquement pour récupérer un objet dans la BD avec Validate::get_request(...)
262 */
263 function get_request($uid, $type, $stamp = -1)
264 {
265 global $globals;
266 if ($stamp == -1) {
267 $res = $globals->xdb->query('SELECT data FROM requests WHERE user_id={?} and type={?}', $uid, $type);
268 } else {
269 $res = $globals->xdb->query("SELECT data, stamp FROM requests WHERE user_id={?} AND type={?} and stamp={?}", $uid, $type, $stamp);
270 }
271 if ($result = $res->fetchOneCell()) {
272 $result = unserialize($result);
273 } else {
274 $result = false;
275 }
276 return($result);
277 }
278
279 // }}}
280 // {{{ function _mail_body
281
282 function _mail_body($isok)
283 {
284 }
285
286 // }}}
287 // {{{ function _mail_subj
288
289 function _mail_subj()
290 {
291 }
292
293 // }}}
294 // {{{ function commit()
295
296 /** fonction à utiliser pour insérer les données dans x4dat
297 * XXX la fonction est "virtuelle" XXX
298 */
299 function commit ()
300 { }
301
302 // }}}
303 // {{{ function formu()
304
305 /** nom du template qui contient le formulaire */
306 function formu()
307 { return null; }
308
309 // }}}
310}
311
312// }}}
313// {{{ IMPLEMENTATIONS
314
315foreach (glob(dirname(__FILE__).'/validations/*.inc.php') as $file) {
316 require_once($file);
317}
318
319// }}}
320
321/* vim: set expandtab shiftwidth=4 tabstop=4 softtabstop=4 foldmethod=marker: */
322?>