Broken marketing becomes a validation
authorx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Sun, 21 Jan 2007 14:40:25 +0000 (14:40 +0000)
committerx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Sun, 21 Jan 2007 14:40:25 +0000 (14:40 +0000)
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1375 839d8a87-29fc-0310-9880-83ba4fa771e5

ChangeLog
include/emails.inc.php
include/validations/broken.inc.php [new file with mode: 0644]
include/xorg.misc.inc.php
modules/marketing.php
templates/marketing/broken.tpl
upgrade/0.9.13/03_medals.sql

index c0e948b..b6bdb99 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -27,6 +27,9 @@ New:
         - Use Banana to power mail moderation                              -FRU
         - Use Banana to browse mail archives                               -FRU
 
+    * Marketing:
+        - Marketing on broken redirections becomes a validation            -FRU
+
     * Newsletter:
         - New skin                                                         -mYk
 
index c87bfc8..1e01343 100644 (file)
@@ -262,24 +262,7 @@ class Redirect
         $this->emails[] = new Email(array($email, 'active', '', '0000-00-00', '0000-00-00', 0));
 
         // security stuff
-        $res = XDB::query("SELECT state, description
-                             FROM emails_watch
-                            WHERE state != 'safe' AND email = {?}", $email);
-        if ($res->numRows()) {
-            $row = $res->fetchOneAssoc();
-            $message = "L'email $email vient d'être ajouté aux redirections de ". S::v('forlife')
-                     . ". Cette adresse est surveillée avec l'état *" . $row['state']
-                     . "* et la description :\n" . $row['description'];
-            $message = wordwrap($message);
-            $mailer = new PlMailer();
-            $mailer->setFrom("webmaster@polytechnique.org");
-            $mailer->addTo("hotliners@staff.polytechnique.org");
-            $mailer->setSubject("ALERTE LORS DE L'AJOUT DE REDIRECTION de "
-                . S::v('prenom') . ' ' . S::v('nom') . '(' . S::v('promo') . ')');
-            $mailer->setTxtBody($message
-                . "\n\nInformations de connexion :\n" . var_export($_SERVER, true));
-            $mailer->send();
-        } 
+        check_email($email, "Ajout d'une adresse surveillée aux redirections de " . $this->uid);
         return SUCCESS;
     }
 
diff --git a/include/validations/broken.inc.php b/include/validations/broken.inc.php
new file mode 100644 (file)
index 0000000..951a8b7
--- /dev/null
@@ -0,0 +1,138 @@
+<?php
+/***************************************************************************
+ *  Copyright (C) 2003-2007 Polytechnique.org                              *
+ *  http://opensource.polytechnique.org/                                   *
+ *                                                                         *
+ *  This program is free software; you can redistribute it and/or modify   *
+ *  it under the terms of the GNU General Public License as published by   *
+ *  the Free Software Foundation; either version 2 of the License, or      *
+ *  (at your option) any later version.                                    *
+ *                                                                         *
+ *  This program is distributed in the hope that it will be useful,        *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *  GNU General Public License for more details.                           *
+ *                                                                         *
+ *  You should have received a copy of the GNU General Public License      *
+ *  along with this program; if not, write to the Free Software            *
+ *  Foundation, Inc.,                                                      *
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
+ ***************************************************************************/
+
+
+class BrokenReq extends Validate
+{
+    // {{{ properties
+
+    var $m_forlife;
+    var $m_bestalias;
+    var $m_prenom;
+    var $m_nom;
+    var $m_promo;
+    var $m_sexe;
+    var $m_email;
+    var $old_email;
+    var $m_comment;
+
+    var $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.
+    Si le compte associé est désactivé, étudier le cas en fonction de la raison de la désactivation";
+    // }}}
+    // {{{ constructor
+
+    function BrokenReq($sender, $user, $email, $comment = null)
+    {
+        $this->Validate($sender, false, 'broken');
+        $this->m_email     = $email;
+        $this->m_comment   = trim($comment);
+        $this->m_forlife   = $user['forlife'];
+        $this->m_bestalias = $user['bestalias'];
+        $this->m_prenom    = $user['prenom'];
+        $this->m_nom       = $user['nom'];
+        $this->m_promo     = $user['promo'];
+        $this->m_sexe      = $user['sexe'];
+        $this->old_email   = $user['email'];
+    }
+
+    // }}}
+    // {{{ function formu()
+
+    function formu()
+    {
+        return 'include/form.valid.broken.tpl';
+    }
+
+    // }}}
+    // {{{ function _mail_subj
+    
+    function _mail_subj()
+    {
+        return "[Polytechnique.org] Récupération de {$this->m_prenom} {$this->m_nom} ({$this->m_promo})";
+    }
+
+    // }}}
+    // {{{ function _mail_body
+
+    function _mail_body($isok)
+    {
+        if ($isok) {
+            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";
+        } else {
+            return "  Nous n'avons pas jugé bon d'envoyer de mail de contact à {$this->m_prenom} {$this->m_nom} ({$this->m_promo}).";
+        }
+    }
+
+    // }}}
+    // {{{ function commit()
+
+    function commit()
+    {
+        global $globals;
+        $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";
+        } else {
+            $res = XDB::iterRow("SELECT  email
+                                   FROM  emails AS e
+                             INNER JOIN  aliases AS a ON (a.id = e.uid)
+                                  WHERE  a.alias = {?} AND e.flags = 'panne'", $this->m_forlife);
+            $redirect = array();
+            while (list($red) = $res->next()) {
+                list(, $redirect[]) = explode('@', $red);
+            }
+            $subject = "Ton adresse $email ne fonctionne plus";
+            $reason  = "Ton adresse $email ne fonctionne plus ";
+            if (!count($redirect)) {
+                $reason .= '.';
+            } elseif (count($redirect) == 1) {
+                $reason .= ' car sa redirection vers ' . $redirect[0] . ' est hors-service depuis plusiers mois.';
+            } else {
+                $reason .= ' cas ses redirections vers ' . implode(', ', $redirect) 
+                        . ' sont hors-services depuis plusieurs mois.';
+            }
+        }
+        $body = ($this->m_sexe ? 'Chère ' : 'Cher ') . $this->m_prenom . ",\n\n"
+              . $reason . "\n\n"
+              . "L'adresse {$this->m_email} nous a été communiquée, veux-tu que cette adresse devienne ta nouvelle "
+              . "adresse devienne ta nouvelle adresse de redirection ? Si oui, envoie nous des informations qui "
+              . "nous permettrons de nous assurer de ton identité (par exemple ta date de naissance et ta promotion)\n"
+              . "-- \nTrès Cordialement,\nL'Equipe de Polytechnique.org\n";
+        $body = wordwrap($body, 78);
+        $mailer = new PlMailer();
+        $mailer->setFrom('"Association Polytechnique.org" <register@polytechnique.org>');
+        $mailer->addTo($this->m_email);
+        $mailer->setSubject($subject);
+        $mailer->setTxtBody($body);
+        return $mailer->send();
+    }
+
+    // }}}
+}
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker:
+?>
index 37525b8..f4077d2 100644 (file)
@@ -127,6 +127,18 @@ function check_ip($level)
     return $res->numRows();
 }
 
+function check_email($email, $message)
+{
+    $res = XDB::query("SELECT state, description
+                         FROM emails_watch
+                        WHERE state != 'safe' AND email = {?}", $email);
+    if ($res->numRows()) {
+        send_warning_mail($message);
+        return true;
+    }
+    return false;
+}
+
 function send_warning_mail($title)
 {
     $mailer = new PlMailer();
index 0235efa..4757136 100644 (file)
@@ -174,30 +174,39 @@ class MarketingModule extends PLModule
             pl_redirect('emails/redirect');
         }
 
-        $res = Xdb::query("SELECT  u.nom, u.prenom, u.promo, a.alias AS forlife
+        $res = Xdb::query("SELECT  u.nom, u.prenom, u.promo, FIND_IN_SET('femme', u.flags) AS sexe,
+                                   a.alias AS forlife, b.alias AS bestalias, e.email, e.last
                              FROM  auth_user_md5 AS u
-                       INNER JOIN  aliases       AS a ON a.id = u.user_id
-                            WHERE  a.alias = {?}", $forlife);
+                       INNER JOIN  aliases       AS a ON (a.id = u.user_id AND a.type = 'a_vie')
+                       INNER JOIN  aliases       AS b ON (b.id = u.user_id AND FIND_IN_SET('bestalias', b.flags))
+                        LEFT JOIN  emails        AS e ON (e.flags = 'active' AND e.uid = u.user_id)
+                            WHERE  a.alias = {?}
+                         ORDER BY  e.panne_level, e.last", $forlife);
         if (!$res->numRows()) {
             return PL_NOT_FOUND;
         }
         $user = $res->fetchOneAssoc();
         $page->assign('user', $user);
 
-        $email = trim(Post::v('mail'));
-        if (Post::has('valide') && strlen($email) > 0) {
-            $mailer = new PlMailer();
-            $mailer->setFrom(S::v('bestalias') . '@polytechnique.org');
-            $mailer->addTo('resetpass@polytechnique.org');
-            $mailer->setSubject("Proposition d'adresse mail pour " . $user['forlife']);
-
-            $message = S::v('nom') . ' ' . S::v('prenom') . ' (X' . S::v('promo') . ') '
-                     . 'propose l\'adresse suivante pour un camarade qui n\'a plus de '
-                     . 'redirections actives :' . "\n\n"
-                     . '* ' . $user['forlife'] . ' => ' . $email . "\n";
-            $mailer->setTxtBody(wordwrap($message, 78));
-            $mailer->send();
-            $page->assign('sent', true);
+        $email = null;
+        if (Post::has('mail')) {
+            require_once 'emails.inc.php';
+            $email = valide_email(Post::v('mail'));
+        }
+        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'))) {
+                $page->trig("Il faut que tu ajoutes un commentaire à ta proposition pour justifier le "
+                           ."besoin de changer la redirection de " . $user['prenom']);
+            } else {
+                require_once 'validations.inc.php';
+                $valid = new BrokenReq(S::i('uid'), $user, $email, trim(Post::v('comment')));
+                $valid->submit();
+                $page->assign('sent', true);
+            }
+        } elseif ($email) {
+            $page->trig("L'adresse proposée n'est pas une adresse acceptable pour une redirection");
         }
     }
 
@@ -250,6 +259,7 @@ class MarketingModule extends PLModule
                     $page->assign('already', true);
                 } else {
                     $page->assign('ok', true);
+                    check_email($email, "Une adresse surveillée est proposée au marketing par " . S::v('forlife'));
                     XDB::execute(
                             "INSERT INTO  register_marketing (uid,sender,email,date,last,nb,type,hash)
                                   VALUES  ({?}, {?}, {?}, NOW(), 0, 0, {?}, '')",
index 0780526..016afcc 100644 (file)
   Recherche d'adresses pour {$user.nom} {$user.prenom} (X{$user.promo})
 </h1>
 
+{if !$user.email}
 <p>
   Avec le temps toutes les adresses de redirection de notre camarade sont devenues invalides et produisent
   des erreurs lorsqu'on lui envoie un mail. Nous sommes donc à la recherche d'adresses valides où nous pourrions
   contacter ce camarade.
 </p>
+{elseif $user.last}
+<p>
+  {$user.prenom} a encore des adresses de redirection actives malgré des pannes détectées sur certaines d'entre elles. Si
+  tu es sûre que son adresse Polytechnique.org est en panne, tu peux proposer une nouvelle adresse mail à ajouter à ses
+  redirections. Merci d'ajouter un commentaire pour nous indiquer la raison de cette proposition.
+</p>
+{else}
+<p>
+  Nous n'avons actuellement enregistré aucune panne sur les adresses de redirection de {$user.prenom}. Si tu es sûr que
+  son adresse de redirection actuelle est en panne tu peux nous proposer une nouvelle adresse, accompagnée d'un commentaire
+  nous expliquant les raisons exactes de cette proposition.
+</p>
+{/if}
 <p>
   Les adresses emails que tu pourras nous donner ne seront pas ajoutées directement aux redirections de {$user.prenom}.
+  Nous allons d'abord prendre contact avec {if $user.sexe}elle{else}lui{/if} pour savoir si {if $user.sexe}elle{else}lui{/if}
+  accepte la mise à jour de sa redirection.
 </p>
 <p>
-  Merci de participer à cette recherche.
+  Merci de ta participation active à l'amélioration de notre qualité de service.
 </p>
 
 <form method="post" action="{$platal->path}">
   <table class="bicol" summary="Fiche camarade">
-    <tr class="impair"><td>Nom :</td><td>{$user.nom}</td></tr>
-    <tr class="pair"><td>Prénom :</td><td>{$user.prenom}</td></tr>
-    <tr class="impair"><td>Promo :</td><td>{$user.promo}</td></tr>
+    <tr><th colspan="2">Proposition d'adresse pour<br />{$user.nom} {$user.prenom} (X{$user.promo})</th></tr>
     <tr class="pair">
       <td>Adresse email :</td>
       <td>
-        <input type="text" name="mail" size="30" maxlength="50" />
+        <input type="text" name="mail" size="30" maxlength="50" value="{$smarty.post.mail}" />
       </td>
     </tr>
+    {if $user.email}
+    <tr class="impair">
+      <td>Explication :</td>
+      <td><textarea name="comment" cols="50" rows="4">{$smarty.post.comment}</textarea></td>
+    </tr>
+    {/if}
   </table>
   <div class="center">
     <input type="submit" name="valide" value="Valider" />
index b0a5cbb..58de90f 100644 (file)
@@ -1,3 +1,4 @@
 alter table profile_medals add column flags set('validation') not null default 'validation';
 update profile_medals set flags = '' where id = 20;
+alter table requests_answers change category category enum('alias','liste','usage','photo','evts','marketing','orange','homonyme','nl','paiements','medal','broken') not null;
 # vim:set syntax=mysql: