X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fvalidations.inc.php;h=085fffc5a83a8a25d983056a554497f871bd8528;hb=2553b7686e0678b8e27858a7c377e73ecb410aec;hp=1edb05c53f89b893af53f5661dc76a2b4016ae13;hpb=cab0809050d58f8484608e91f7555ebd69dcb451;p=platal.git diff --git a/include/validations.inc.php b/include/validations.inc.php index 1edb05c..085fffc 100644 --- a/include/validations.inc.php +++ b/include/validations.inc.php @@ -1,6 +1,6 @@ spoolroot . '/core/classes/xdb.php'; /** * Iterator class, that lists objects through the database @@ -32,19 +30,19 @@ define('SIZE_MAX', 32768); class ValidateIterator extends XOrgDBIterator { // {{{ constuctor - - function ValidateIterator () + + public function __construct () { - parent::XOrgDBIterator('SELECT data,stamp FROM requests ORDER BY stamp', MYSQL_NUM); + parent::__construct('SELECT data, DATE_FORMAT(stamp, "%Y%m%d%H%i%s") FROM requests ORDER BY stamp', MYSQL_NUM); } // }}} // {{{ function next() - function next () + public function next () { if (list($result, $stamp) = parent::next()) { - $result = unserialize($result); + $result = Validate::unserialize($result); $result->stamp = $stamp; return($result); } else { @@ -55,137 +53,146 @@ class ValidateIterator extends XOrgDBIterator // }}} } -// }}} -// {{{ class Validate - -/** classe "virtuelle" à dériver pour chaque nouvelle implémentation +/** classe "virtuelle" à dériver pour chaque nouvelle implémentation */ -class Validate +abstract class Validate { // {{{ properties - - var $uid; - var $prenom; - var $nom; - var $promo; - var $bestalias; - var $forlife; - - var $stamp; - var $unique; + + public $user; + + public $stamp; + public $unique; // enable the refuse button - var $refuse = true; - var $type; - var $comments = Array(); + public $refuse = true; + + public $type; + public $comments = Array(); // the validations rules : comments for admins - 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"; + public $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"; // }}} // {{{ constructor - + /** constructeur - * @param $_uid user id - * @param $_unique requête pouvant être multiple ou non - * @param $_type type de la donnée comme dans le champ type de x4dat.requests + * @param $_user user object + * @param $_unique requête pouvant être multiple ou non + * @param $_type type de la donnée comme dans le champ type de x4dat.requests */ - function Validate($_uid, $_unique, $_type) + public function __construct(User &$_user, $_unique, $_type) { - $this->uid = $_uid; + $this->user = &$_user; $this->stamp = date('YmdHis'); $this->unique = $_unique; $this->type = $_type; - $res = XDB::query( - "SELECT u.prenom, u.nom, u.promo, a.alias, b.alias - FROM auth_user_md5 AS u - INNER JOIN aliases AS a ON ( u.user_id=a.id AND a.type='a_vie' ) - INNER JOIN aliases AS b ON ( u.user_id=b.id AND b.type!='homonyme' AND FIND_IN_SET('bestalias', b.flags) ) - WHERE u.user_id={?}", $_uid); - list($this->prenom, $this->nom, $this->promo, $this->forlife, $this->bestalias) = $res->fetchOneRow(); } - + // }}} // {{{ function submit() - /** fonction à utiliser pour envoyer les données à la modération + /** fonction à utiliser pour envoyer les données à la modération * cette fonction supprimme les doublons sur un couple ($user,$type) si $this->unique est vrai */ - function submit () + public function submit() { if ($this->unique) { - XDB::execute('DELETE FROM requests WHERE user_id={?} AND type={?}', $this->uid, $this->type); + XDB::execute('DELETE FROM requests WHERE user_id={?} AND type={?}', $this->user->id(), $this->type); } - + $this->stamp = date('YmdHis'); XDB::execute('INSERT INTO requests (user_id, type, data, stamp) VALUES ({?}, {?}, {?}, {?})', - $this->uid, $this->type, $this, $this->stamp); + $this->user->id(), $this->type, $this, $this->stamp); + global $globals; + $globals->updateNbValid(); return true; } // }}} // {{{ function update() - function update () + protected function update() { XDB::execute('UPDATE requests SET data={?}, stamp=stamp - WHERE user_id={?} AND type={?} AND stamp={?}', - $this, $this->uid, $this->type, $this->stamp); - + WHERE user_id={?} AND type={?} AND stamp={?}', + $this, $this->user->id(), $this->type, $this->stamp); return true; } // }}} // {{{ function clean() - - /** fonction à utiliser pour nettoyer l'entrée de la requête dans la table requests - * attention, tout est supprimé si c'est un unique + + /** fonction à utiliser pour nettoyer l'entrée de la requête dans la table requests + * attention, tout est supprimé si c'est un unique */ - function clean () + public function clean() { + global $globals; + if ($this->unique) { - return XDB::execute('DELETE FROM requests WHERE user_id={?} AND type={?}', - $this->uid, $this->type); + $success = XDB::execute('DELETE FROM requests WHERE user_id={?} AND type={?}', + $this->user->id(), $this->type); } else { - return XDB::execute('DELETE FROM requests WHERE user_id={?} AND type={?} AND stamp={?}', - $this->uid, $this->type, $this->stamp); + $success = XDB::execute('DELETE FROM requests WHERE user_id={?} AND type={?} AND stamp={?}', + $this->user->id(), $this->type, $this->stamp); } + $globals->updateNbValid(); + return $success; } // }}} // {{{ function handle_formu() - - /** fonction à réaliser en cas de valistion du formulaire + + /** fonction à réaliser en cas de validation du formulaire */ - function handle_formu() + public function handle_formu() { if (Env::has('delete')) { $this->clean(); - $this->trig('requete supprimée'); + $this->trigSuccess('Requête supprimée'); return true; } + // mise à jour des informations + if (Env::has('edit')) { + if ($this->handle_editor()) { + $this->update(); + $this->trigSuccess('Requête mise à jour'); + return true; + } + return false; + } + // ajout d'un commentaire if (Env::has('hold') && Env::has('comm')) { - $this->comments[] = Array(S::v('bestalias'), Env::get('comm')); + $formid = Env::i('formid'); + foreach ($this->comments as $comment) { + if ($comment[2] === $formid) { + return true; + } + } + if (!strlen(trim(Env::v('comm')))) { + return true; + } + $this->comments[] = Array(S::user()->login(), Env::v('comm'), $formid); - // envoi d'un mail à hotliners + // envoi d'un mail à hotliners global $globals; - require_once('diogenes/diogenes.hermes.inc.php'); - $mailer = new HermesMailer; + $mailer = new PlMailer(); $mailer->setSubject("Commentaires de validation {$this->type}"); $mailer->setFrom("validation+{$this->type}@{$globals->mail->domain}"); - $mailer->addTo("hotliners@{$globals->mail->domain}"); + $mailer->addTo($globals->core->admin_email); - $body = "Validation {$this->type} pour {$this->prenom} {$this->nom}\n\n" - . S::v('bestalias')." a ajouté le commentaire :\n\n" - . Env::get('comm')."\n\n" - . "cf la discussion sur : ".$globals->baseurl."/admin/valider.php"; + $body = "Validation {$this->type} pour {$this->user->login()}\n\n" + . S::user()->login() . " a ajouté le commentaire :\n\n" + . Env::v('comm') . "\n\n" + . "cf la discussion sur : " . $globals->baseurl . "/admin/validate"; $mailer->setTxtBody(wordwrap($body)); $mailer->send(); $this->update(); - $this->trig('commentaire ajouté'); + $this->trigSuccess('Commentaire ajouté'); return true; } @@ -193,22 +200,22 @@ class Validate if ($this->commit()) { $this->sendmail(true); $this->clean(); - $this->trig('mail envoyé'); + $this->trigSuccess('Email de validation envoyé'); return true; } else { - $this->trig('erreur lors de la validation'); + $this->trigError('Erreur lors de la validation'); return false; } } if (Env::has('refuse')) { - if (Env::get('comm')) { + if (Env::v('comm')) { $this->sendmail(false); $this->clean(); - $this->trig('mail envoyé'); + $this->trigSuccess('Email de refus envoyé'); return true; } else { - $this->trig('pas de motivation pour le refus !!!'); + $this->trigError('pas de motivation pour le refus !!!'); } } @@ -218,20 +225,19 @@ class Validate // }}} // {{{ function sendmail - function sendmail($isok) + protected function sendmail($isok) { global $globals; - require_once('diogenes/diogenes.hermes.inc.php'); - $mailer = new HermesMailer; + $mailer = new PlMailer(); $mailer->setSubject($this->_mail_subj()); $mailer->setFrom("validation+{$this->type}@{$globals->mail->domain}"); - $mailer->addTo("\"{$this->prenom} {$this->nom}\" <{$this->bestalias}@{$globals->mail->domain}>"); + $mailer->addTo("\"{$this->user->fullName()}\" <{$this->user->bestEmail()}>"); $mailer->addCc("validation+{$this->type}@{$globals->mail->domain}"); - $body = "Cher(e) camarade,\n\n" + $body = ($this->user->isFemale() ? "Chère camarade,\n\n" : "Cher camarade,\n\n") . $this->_mail_body($isok) - . (Env::has('comm') ? "\n\n".Env::get('comm') : '') - . "\n\nCordialement,\nL'équipe Polytechnique.org\n"; + . (Env::has('comm') ? "\n\n".Env::v('comm') : '') + . "\n\nCordialement,\n\n-- \nL'équipe de Polytechnique.org\n"; $mailer->setTxtBody(wordwrap($body)); $mailer->send(); @@ -239,32 +245,42 @@ class Validate // }}} // {{{ function trig() - - function trig($msg) { - global $page; - $page->trig($msg); + + protected function trigError($msg) + { + Platal::page()->trigError($msg); + } + + protected function trigWarning($msg) + { + Platal::page()->trigWarning($msg); + } + + protected function trigSuccess($msg) + { + Platal::page()->trigSuccess($msg); } - + // }}} - // {{{ function get_request() + // {{{ function get_typed_request() - /** fonction statique qui renvoie la requête de l'utilisateur d'id $uidau timestamp $t - * @param $uid l'id de l'utilisateur concerné - * @param $type le type de la requête - * @param $stamp le timestamp de la requête + /** fonction statique qui renvoie la requête de l'utilisateur d'id $uidau timestamp $t + * @param $uid l'id de l'utilisateur concerné + * @param $type le type de la requête + * @param $stamp le timestamp de la requête * * XXX fonction "statique" XXX - * à utiliser uniquement pour récupérer un objet dans la BD avec Validate::get_request(...) + * à utiliser uniquement pour récupérer un objet dans la BD avec Validate::get_typed_request(...) */ - function get_request($uid, $type, $stamp = -1) + static public function get_typed_request($uid, $type, $stamp = -1) { if ($stamp == -1) { $res = XDB::query('SELECT data FROM requests WHERE user_id={?} and type={?}', $uid, $type); } else { - $res = XDB::query("SELECT data, stamp FROM requests WHERE user_id={?} AND type={?} and stamp={?}", $uid, $type, $stamp); + $res = XDB::query('SELECT data, DATE_FORMAT(stamp, "%Y%m%d%H%i%s") FROM requests WHERE user_id={?} AND type={?} and stamp={?}', $uid, $type, $stamp); } if ($result = $res->fetchOneCell()) { - $result = unserialize($result); + $result = Validate::unserialize($result); } else { $result = false; } @@ -272,46 +288,119 @@ class Validate } // }}} - // {{{ function _mail_body + // {{{ function get_request_by_id() - function _mail_body($isok) + static public function get_request_by_id($id) { + list($uid, $type, $stamp) = explode('_', $id, 3); + return Validate::get_typed_request($uid, $type, $stamp); } - + // }}} - // {{{ function _mail_subj + // {{{ function get_typed_requests() - function _mail_subj() + /** same as get_typed_request() but return an array of objects + */ + static public function get_typed_requests($uid, $type) { + $res = XDB::iterRow('SELECT data FROM requests WHERE user_id={?} and type={?}', $uid, $type); + $array = array(); + while (list($data) = $res->next()) { + $array[] = Validate::unserialize($data); + } + return $array; } - + + // }}} + // {{{ function get_typed_requests_count() + + /** same as get_typed_requests() but return the count of available requests. + */ + static public function get_typed_requests_count($uid, $type) + { + $res = XDB::query('SELECT COUNT(data) FROM requests WHERE user_id={?} and type={?}', $uid, $type); + return $res->fetchOneCell(); + } + + // }}} + // {{{ function _mail_body + + abstract protected function _mail_body($isok); + + // }}} + // {{{ function _mail_subj + + abstract protected function _mail_subj(); + // }}} // {{{ function commit() - - /** fonction à utiliser pour insérer les données dans x4dat - * XXX la fonction est "virtuelle" XXX + + /** fonction à utiliser pour insérer les données dans x4dat */ - function commit () - { } + abstract public function commit(); // }}} // {{{ function formu() - + /** nom du template qui contient le formulaire */ - function formu() - { return null; } + abstract public function formu(); // }}} -} + // {{{ function editor() + + /** nom du formulaire d'édition */ + public function editor() + { + return null; + } -// }}} -// {{{ IMPLEMENTATIONS + // }}} + // {{{ function answers() + + /** automatic answers table for this type of validation */ + public function answers() + { + static $answers_table; + if (!isset($answers_table[$this->type])) { + $r = XDB::query("SELECT id, title, answer FROM requests_answers WHERE category = {?}", $this->type); + $answers_table[$this->type] = $r->fetchAllAssoc($r); + } + return $answers_table[$this->type]; + } + + // }}} + // {{{ function id() + + public function id() + { + return $this->user->id() . '_' . $this->type . '_' . $this->stamp; + } + + // }}} + // {{{ function ruleText() + + public function ruleText() + { + return str_replace('\'', '\\\'', $this->rules); + } + + // }}} + // {{{ function unserialize() + public static function unserialize($data) + { + $obj = unserialize($data); + /* XXX: Temporary for hruid migration */ + if (!isset($obj->user) || !is_object($obj)) { + $obj->user =& User::get($obj->forlife); + } + /* XXX: End temporary block */ + return $obj; + } +} foreach (glob(dirname(__FILE__).'/validations/*.inc.php') as $file) { require_once($file); } -// }}} - -/* vim: set expandtab shiftwidth=4 tabstop=4 softtabstop=4 foldmethod=marker: */ +/* vim: set expandtab shiftwidth=4 tabstop=4 softtabstop=4 foldmethod=marker enc=utf-8: */ ?>