From 0381e1708505571313bf35f0f5b7f95ede7f6c02 Mon Sep 17 00:00:00 2001 From: x2003bruneau Date: Fri, 16 Mar 2007 23:36:35 +0000 Subject: [PATCH] Improve Broken-marketing (check the presence of the email, can activate unactive redirection...) Invalid queries do not kill the page ! (better for debug) git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1580 839d8a87-29fc-0310-9880-83ba4fa771e5 --- classes/xdb.php | 82 +++++++++++++++++++++----------------- include/validations/broken.inc.php | 34 +++++++++++++++- include/xorg.misc.inc.php | 5 +-- modules/marketing.php | 11 ++++- 4 files changed, 89 insertions(+), 43 deletions(-) diff --git a/classes/xdb.php b/classes/xdb.php index 3aa45cd..0523a96 100644 --- a/classes/xdb.php +++ b/classes/xdb.php @@ -94,7 +94,7 @@ class XDB } $res = XDB::$mysqli->query($query); - + if ($globals->debug & 1) { PlBacktrace::$bt['MySQL']->stop(@$res->num_rows ? $res->num_rows : XDB::$mysqli->affected_rows, XDB::$mysqli->error, @@ -175,67 +175,75 @@ class XOrgDBResult private $_res; - function XOrgDBResult($query) + public function __construct($query) { $this->_res = XDB::_query($query); } - function free() + public function free() { - $this->_res->free(); + if ($this->_res) { + $this->_res->free(); + } unset($this); } - function _fetchRow() + protected function _fetchRow() { - return $this->_res->fetch_row(); + return $this->_res ? $this->_res->fetch_row() : null; } - function _fetchAssoc() + protected function _fetchAssoc() { - return $this->_res->fetch_assoc(); + return $this->_res ? $this->_res->fetch_assoc() : null; } - function fetchAllRow() + public function fetchAllRow() { $result = Array(); + if (!$this->_res) { + return $result; + } while ($result[] = $this->_res->fetch_row()); array_pop($result); $this->free(); return $result; } - function fetchAllAssoc() + public function fetchAllAssoc() { $result = Array(); + if (!$this->_res) { + return $result; + } while ($result[] = $this->_res->fetch_assoc()); array_pop($result); $this->free(); return $result; } - function fetchOneAssoc() + public function fetchOneAssoc() { $tmp = $this->_fetchAssoc(); $this->free(); return $tmp; } - function fetchOneRow() + public function fetchOneRow() { $tmp = $this->_fetchRow(); $this->free(); return $tmp; } - function fetchOneCell() + public function fetchOneCell() { $tmp = $this->_fetchRow(); $this->free(); return $tmp[0]; } - function fetchColumn($key = 0) + public function fetchColumn($key = 0) { $res = Array(); if (is_numeric($key)) { @@ -251,32 +259,32 @@ class XOrgDBResult return $res; } - function fetchOneField() + public function fetchOneField() { - return $this->_res->fetch_field(); + return $this->_res ? $this->_res->fetch_field() : null; } - function fetchFields() + public function fetchFields() { $res = array(); while ($res[] = $this->fetchOneField()); return $res; } - function numRows() + public function numRows() { - return $this->_res->num_rows; + return $this->_res ? $this->_res->num_rows : 0; } - function fieldCount() + public function fieldCount() { - return $this->_res->field_count; + return $this->_res ? $this->_res->field_count : 0; } } require_once dirname(__FILE__) . '/pliterator.php'; -class XOrgDBIterator implements PlIterator +class XOrgDBIterator extends XOrgDBResult implements PlIterator { private $_result; private $_pos; @@ -285,62 +293,62 @@ class XOrgDBIterator implements PlIterator private $_fields; private $_mode = MYSQL_ASSOC; - function __construct($query, $mode = MYSQL_ASSOC) + public function __construct($query, $mode = MYSQL_ASSOC) { - $this->_result = new XOrgDBResult($query); + parent::__construct($query); $this->_pos = 0; - $this->_total = $this->_result->numRows(); + $this->_total = $this->numRows(); $this->_fpost = 0; - $this->_fields = $this->_result->fieldCount(); + $this->_fields = $this->fieldCount(); $this->_mode = $mode; } - function next() + public function next() { $this->_pos ++; if ($this->_pos > $this->_total) { - $this->_result->free(); + $this->free(); unset($this); return null; } - return $this->_mode != MYSQL_ASSOC ? $this->_result->_fetchRow() : $this->_result->_fetchAssoc(); + return $this->_mode != MYSQL_ASSOC ? $this->_fetchRow() : $this->_fetchAssoc(); } - function first() + public function first() { return $this->_pos == 1; } - function last() + public function last() { return $this->_pos == $this->_total; } - function total() + public function total() { return $this->_total; } - function nextField() + public function nextField() { $this->_fpos++; if ($this->_fpos > $this->_fields) { return null; } - return $this->_result->fetchOneField(); + return $this->fetchOneField(); } - function firstField() + public function firstField() { return $this->_fpos == 1; } - function lastField() + public function lastField() { return $this->_fpos == $this->_fields; } - function totalFields() + public function totalFields() { return $this->_fields; } diff --git a/include/validations/broken.inc.php b/include/validations/broken.inc.php index 46e3916..ed0fa5b 100644 --- a/include/validations/broken.inc.php +++ b/include/validations/broken.inc.php @@ -34,6 +34,8 @@ class BrokenReq extends Validate public $old_email; public $m_comment; + private $m_reactive = false; + public $rules = "Accepter si l'adresse mail parait correcte, et pas absurde (ou si le marketeur est de confiance). Si le demandeur marque sa propre adresse mail, refuser dans tous les cas. Si l'adresse proposée est surveillée, refuser. @@ -76,13 +78,17 @@ class BrokenReq extends Validate protected function _mail_body($isok) { - if ($isok) { + if ($isok && !$this->m_reactive) { return " Un mail de contact vient d'être envoyé " ." à {$this->m_prenom} {$this->m_nom} ({$this->m_promo}) pour confirmer sa volonté de" ." mettre à jour sa redirection Polytechnique.org!\n\n" ."Merci de ta participation !\n"; + } elseif ($isok) { + return " L'adresse de redirection {$this->m_email} de {$this->m_prenom} {$this->m_nom} ({$this->m_promo}) " + ."vient d'être réactivée. Un mail lui a été envoyé pour l'en informer.\n\n" + ."Merci de ta participation !\n"; } else { - return " Nous n'avons pas jugé bon d'envoyer de mail de contact à {$this->m_prenom} {$this->m_nom} ({$this->m_promo})."; + return " Nous n'utiliserons pas cette adresse pour contacter {$this->m_prenom} {$this->m_nom} ({$this->m_promo})."; } } @@ -93,6 +99,30 @@ class BrokenReq extends Validate { global $globals; $email = $this->m_bestalias . '@' . $globals->mail->domain; + + XDB::execute("UPDATE emails AS e + INNER JOIN aliases AS a ON (a.id = e.uid) + SET e.flags = 'active' + WHERE a.alias = {?} AND e.email = {?}", $this->m_forlife, $this->m_email); + if (XDB::affectedRows() > 0) { + $this->m_reactive = true; + $mailer = new PlMailer(); + $mailer->setFrom('"Association Polytechnique.org" '); + $mailer->addTo($email); + $mailer->setSubject("Mise à jour de ton adresse $email"); + $mailer->setTxtBody(wordwrap("Cher Camarade,\n\n" + . "Ton adresse $email étant en panne et ayant été informés que ta redirection {$this->m_email}, jusqu'à présent inactive, " + . "est fonctionnelle, nous venons de réactiver cette adresse.\n\n" + . "N'hésite pas à aller gérer toi-même tes redirections en te rendant à la page :\n" + . "https://www.polytechnique.org/emails/redirect\n" + . "Si tu as perdu ton mot de passe d'accès au site, tu peux également effectuer la procédure de récupération à l'adresse :\n" + . "https://www.polytechnique.org/recovery\n" + . "-- \nTrès Cordialement,\nL'Equipe de Polytechnique.org\n")); + $mailer->send(); + return true; + } + + $email = $this->m_bestalias . '@' . $globals->mail->domain; if ($this->old_email) { $subject = "Ton adresse $email semble ne plus fonctionner"; $reason = "Nous avons été informés que ton adresse $email ne fonctionne plus correctement par un camarade"; diff --git a/include/xorg.misc.inc.php b/include/xorg.misc.inc.php index 1031939..76d6a14 100644 --- a/include/xorg.misc.inc.php +++ b/include/xorg.misc.inc.php @@ -179,8 +179,8 @@ function soundex_fr($sIn) '/[EA][IY]([NM]?[^NM]|$)/', '/(^|[^OEUIA])(OEU|OE|EU)([^OEUIA]|$)/', '/OI/', '/(ILLE?|I)/', '/O(U|W)/', '/O[NM]($|[^EAOUIY])/', '/(SC|S|C)H/', '/([^AEIOUY1])[^AEIOUYLKTP]([UAO])([^AEIOUY])/', '/([^AEIOUY]|^)([AUO])[^AEIOUYLKTP]([^AEIOUY1])/', '/^KN/', - '/^PF/', '/(SC|S|C)H/', '/C([^AEIOUY]|$)/', - '/C/', '/Z$/', '/(?!^)Z+/', '/ER$/', '/H/'); + '/^PF/', '/C([^AEIOUY]|$)/', + '/C/', '/Z$/', '/(?numRows() ? $res->fetchOneCell() : null; + if ($state == 'panne') { + $page->trig("L'adresse que tu as fournie est l'adresse actuelle de {$user['prenom']} et est en panne."); + } elseif ($state == 'active') { + $page->trig("L'adresse que tu as fournie est l'adresse actuelle de {$user['prenom']}"); + } elseif ($user['email'] && !trim(Post::v('comment'))) { $page->trig("Il faut que tu ajoutes un commentaire à ta proposition pour justifier le " ."besoin de changer la redirection de " . $user['prenom']); } else { -- 2.1.4