Improve Broken-marketing (check the presence of the email, can activate unactive...
authorx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Fri, 16 Mar 2007 23:36:35 +0000 (23:36 +0000)
committerx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Fri, 16 Mar 2007 23:36:35 +0000 (23:36 +0000)
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
include/validations/broken.inc.php
include/xorg.misc.inc.php
modules/marketing.php

index 3aa45cd..0523a96 100644 (file)
@@ -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;
     }
index 46e3916..ed0fa5b 100644 (file)
@@ -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" <register@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";
index 1031939..76d6a14 100644 (file)
@@ -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$/', '/(?<!^)Z+/', '/ER$/', '/H/');
         $convVOut  = array( 'O', '1\3', 'A\1',
                             'E\1', '\1E\3', 'O',
                             'Y', 'U', 'O\1', '9',
@@ -207,7 +207,6 @@ function soundex_fr($sIn)
     $sIn = preg_replace( '`(.)\1`', '$1', $sIn );
     // on réinterprète les voyelles
     $sIn = preg_replace( $convVIn, $convVOut, $sIn);
-    
     // on supprime les terminaisons T, D, S, X (et le L qui précède si existe) 
     $sIn = preg_replace( '`L?[TDSX]$`', '', $sIn );
     // on supprime les E, A et Y qui ne sont pas en première position
index b51a825..7225860 100644 (file)
@@ -196,7 +196,16 @@ class MarketingModule extends PLModule
         if (Post::has('valide') && isvalid_email_redirection($email)) {
             // security stuff
             check_email($email, "Proposition d'une adresse surveillee pour " . $user['forlife'] . " par " . S::v('forlife'));
-            if ($user['email'] && !trim(Post::v('comment'))) {
+            $res = XDB::query("SELECT  state
+                                 FROM  emails   AS e
+                           INNER JOIN  aliases  AS a ON (a.id = e.uid)
+                                WHERE  e.email = {?} AND a.alias = {?}", $email, $user['forlife']);
+            $state = $res->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 {