Moving to GitHub.
[platal.git] / include / marketing.inc.php
index 18a8edc..d314831 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2008 Polytechnique.org                              *
+ *  Copyright (C) 2003-2014 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -36,19 +36,21 @@ class Marketing
     private $data;
     private $from;
     private $sender;
+    private $personal_notes;
 
     private $hash = '';
 
-    public function __construct($uid, $email, $type, $data, $from, $sender = null)
+    public function __construct($uid, $email, $type, $data, $from, $sender = null, $personal_notes = null)
     {
         $this->user         = $this->getUser($uid, $email);
         $this->sender_mail  = $this->getFrom($from, $sender);
-        $this->engine      =& $this->getEngine($type, $data, $from == 'user' ? $sender : null);
+        $this->engine      =& $this->getEngine($type, $data, $from == 'user' ? $sender : null, $personal_notes);
 
         $this->type   = $type;
         $this->data   = $data;
         $this->from   = $from;
         $this->sender = $sender;
+        $this->personal_notes = $personal_notes;
     }
 
     private function getUser($uid, $email)
@@ -65,8 +67,8 @@ class Marketing
             'sexe'           => $user->isFemale(),
             'mail'           => $email,
             'to'             => '"' . $user->fullName() . '" <' . $email . '>',
-            'forlife_email'  => $user->login() . '@' . $globals->mail->domain,
-            'forlife_email2' => $user->login() . '@' . $globals->mail->domain2,
+            'forlife_email'  => $user->hruid . "@" . $user->mainEmailDomain(),
+            'forlife_email2' => $user->hruid . "@" . $user->alternateEmailDomain()
         );
     }
 
@@ -75,18 +77,18 @@ class Marketing
         global $globals;
 
         if ($from == 'staff' || !($user = User::getSilent($sender))) {
-            return '"L\'équipe de Polytechnique.org" <register@' . $globals->mail->domain . '>';
+            return "\"L'équipe de Polytechnique.org\" <register@" . $globals->mail->domain . '>';
         }
         return '"' . $user->fullName() . '" <' . $user->bestEmail() . '>';
     }
 
-    private function &getEngine($type, $data, $from)
+    private function &getEngine($type, $data, $from, $personal_notes)
     {
         $class = $type . 'Marketing';
         if (!class_exists($class, false)) {
             $class= 'DefaultMarketing';
         }
-        $engine = new $class($data, $from);
+        $engine = new $class($data, $from, $personal_notes);
         if (!$engine instanceof MarketingEngine) {
             $engine = null;
         }
@@ -113,9 +115,8 @@ class Marketing
             $text = $this->engine->getText($this->user);
         }
         $sender = substr($this->sender_mail, 1, strpos($this->sender_mail, '"', 2)-1);
-        $text = str_replace(array("%%hash%%", "%%sender%%"),
-            array($this->hash, $this->sender_mail),
-            $text);
+        $text = str_replace(array('%%hash%%', '%%sender%%', '%%personal_notes%%'),
+                            array($this->hash, "Cordialement,\n-- \n" . $this->sender_mail, ''), $text);
         $mailer = new PlMailer();
         $mailer->setFrom($this->sender_mail);
         $mailer->addTo($this->user['mail']);
@@ -128,15 +129,15 @@ class Marketing
     public function add($valid = true)
     {
         XDB::execute('INSERT IGNORE INTO  register_marketing
-                                          (uid, sender, email, date, last, nb, type, hash, message, message_data)
-                                  VALUES  ({?}, {?}, {?}, NOW(), 0, 0, {?}, {?}, {?}, {?})',
+                                          (uid, sender, email, date, last, nb, type, hash, message, message_data, personal_notes)
+                                  VALUES  ({?}, {?}, {?}, NOW(), 0, 0, {?}, {?}, {?}, {?}, {?})',
                     $this->user['id'], $this->sender, $this->user['mail'], $this->from, $this->hash,
-                    $this->type, $this->data);
+                    $this->type, $this->data, $this->personal_notes);
         $this->engine->process($this->user);
         if ($valid) {
-            require_once 'validations.inc.php';
-            $valid = new MarkReq(User::getSilent($this->sender), $this->user['user'], $this->user['mail'],
-                                 $this->from == 'user', $this->type, $this->data);
+            $sender = User::getSilent($this->sender);
+            $valid = new MarkReq($sender, $this->user['user'], $this->user['mail'],
+                                 $this->from == 'user', $this->type, $this->data, $this->personal_notes);
             $valid->submit();
         }
         return true;
@@ -163,7 +164,7 @@ class Marketing
 
     static public function get($uid, $email, $recentOnly = false)
     {
-        $res = XDB::query("SELECT  uid, email, message, message_data, type, sender
+        $res = XDB::query("SELECT  uid, email, message, message_data, type, sender, personal_notes
                              FROM  register_marketing
                             WHERE  uid = {?}
                               AND  email = {?}".(
@@ -172,8 +173,8 @@ class Marketing
         if ($res->numRows() == 0) {
             return null;
         }
-        list ($uid, $email, $type, $data, $from, $sender) = $res->fetchOneRow();
-        return new Marketing($uid, $email, $type, $data, $from, $sender);
+        list ($uid, $email, $type, $data, $from, $sender, $personal_notes) = $res->fetchOneRow();
+        return new Marketing($uid, $email, $type, $data, $from, $sender, $personal_notes);
     }
 
     static public function clear($uid, $email = null)
@@ -185,23 +186,22 @@ class Marketing
         }
     }
 
-    static public function relance($uid, $nbx = -1)
+    static public function relance(PlUser $user, $nbx = -1)
     {
         global $globals;
 
         if ($nbx < 0) {
-            $res = XDB::query("SELECT COUNT(*) FROM auth_user_md5 WHERE deces=0");
-            $nbx = $res->fetchOneCell();
+            $nbx = $globals->core->NbIns;
         }
 
-        $res = XDB::query("SELECT  r.date, u.promo, u.nom, u.prenom, r.email, r.bestalias
-                             FROM  register_pending AS r
-                       INNER JOIN  auth_user_md5    AS u ON u.user_id = r.uid
-                            WHERE  hash != 'INSCRIT' AND uid = {?} AND
-                                   (TO_DAYS(relance) IS NULL OR TO_DAYS(relance) < TO_DAYS(NOW()))",
-                          $uid);
-        if (!list($date, $promo, $nom, $prenom, $email, $alias) = $res->fetchOneRow()) {
+        $res = XDB::fetchOneCell('SELECT  r.date, r.email, r.bestalias
+                                    FROM  register_pending
+                                   WHERE  r.hash = \'INSCRIT\' AND uid = {?}',
+                                   $user->id());
+        if (!$res) {
             return false;
+        } else {
+            list($date, $email, $alias) = $res;
         }
 
         $hash     = rand_url_id(12);
@@ -217,41 +217,48 @@ class Marketing
         $mymail->assign('baseurl',    $globals->baseurl);
         $mymail->assign('lins_id',    $hash);
         $mymail->assign('lemail',     $email);
-        $mymail->assign('subj',       $alias.'@'.$globals->mail->domain);
+        $mymail->assign('subj',       ucfirst($globals->mail->domain) . ' : ' . $alias);
         $mymail->send();
         XDB::execute('UPDATE  register_pending
                          SET  hash={?}, password={?}, relance=NOW()
-                       WHERE  uid={?}', $hash, $pass_encrypted, $uid);
-        return "$prenom $nom ($promo)";
+                       WHERE  uid={?}', $hash, $pass_encrypted, $user->id());
+        return $user->fullName();
     }
 }
 
 interface MarketingEngine
 {
-    public function __construct($data, $from);
+    public function __construct($data, $from, $personal_notes = null);
     public function getTitle();
     public function getText(array $user);
     public function process(array $user);
 }
 
-//
 class AnnuaireMarketing implements MarketingEngine
 {
     protected $titre;
     protected $intro;
     protected $signature;
+    protected $personal_notes;
 
-    public function __construct($data, $from)
+    public function __construct($data, $from, $personal_notes = null)
     {
         $this->titre = "Rejoins la communauté polytechnicienne sur Internet";
         $this->intro = "   Tu n'as pas de fiche dans l'annuaire des polytechniciens sur Internet. "
                      . "Pour y figurer, il te suffit de visiter cette page ou de copier cette adresse "
                      . "dans la barre de ton navigateur :";
         if ($from === null) {
-            $this->signature = "L'équipe de Polytechnique.org,\n"
-                             . "Le portail des élèves & anciens élèves de l'École polytechnique";
+            $page = new XorgPage();
+            $page->changeTpl('include/signature.mail.tpl', NO_SKIN);
+            $page->assign('mail_part', 'text');
+            $this->signature = $page->raw();
+        } else {
+            $this->signature = '%%sender%%';
+        }
+        if (is_null($personal_notes) || $personal_notes == '') {
+            $this->personal_notes = '%%personal_notes%%';
         } else {
-            $this->signature = "%%sender%%";
+            $this->personal_notes = "\n" . $personal_notes . "\n";
         }
     }
 
@@ -270,13 +277,17 @@ class AnnuaireMarketing implements MarketingEngine
         return $this->signature;
     }
 
-    protected function prepareText(PlPage &$page, array $user)
+    public function getPersonalNotes()
+    {
+        return $this->personal_notes;
+    }
+
+    protected function prepareText(PlPage $page, array $user)
     {
         $page->assign('intro', $this->getIntro());
         $page->assign('u', $user);
         $page->assign('sign', $this->getSignature());
-        $res = XDB::query("SELECT COUNT(*) FROM auth_user_md5 WHERE perms IN ('user', 'admin') AND deces = 0");
-        $page->assign('num_users', $res->fetchOneCell());
+        $page->assign('personal_notes', $this->getPersonalNotes());
     }
 
     public function getText(array $user)
@@ -296,7 +307,7 @@ class ListMarketing extends AnnuaireMarketing
 {
     private $name;
     private $domain;
-    public function __construct($data, $from)
+    public function __construct($data, $from, $personal_notes = null)
     {
         list($this->name, $this->domain) = explode('@', $data);
         if ($from && ($user = User::getSilent($from))) {
@@ -318,16 +329,16 @@ class ListMarketing extends AnnuaireMarketing
 
     public function process(array $user)
     {
-        return XDB::execute("REPLACE INTO  register_subs (uid, type, sub, domain)
-            VALUES  ({?}, 'list', {?}, {?})",
-                $user['id'], $this->name, $this->domain);
+        return XDB::execute("INSERT IGNORE INTO  register_subs (uid, type, sub, domain)
+                                         VALUES  ({?}, 'list', {?}, {?})",
+                            $user['id'], $this->name, $this->domain);
     }
 }
 
 class GroupMarketing extends AnnuaireMarketing
 {
     private $group;
-    public function __construct($data, $from)
+    public function __construct($data, $from, $personal_notes = null)
     {
         $this->group = $data;
         if ($from && ($user = User::getSilent($from))) {
@@ -348,9 +359,9 @@ class GroupMarketing extends AnnuaireMarketing
 
     public function process(array $user)
     {
-        return XDB::execute("REPLACE INTO  register_subs (uid, type, sub, domain)
-            VALUES  ({?}, 'group', {?}, '')",
-                $user['id'], $this->group);
+        return XDB::execute("INSERT IGNORE INTO  register_subs (uid, type, sub, domain)
+                                         VALUES  ({?}, 'group', {?}, '')",
+                            $user['id'], $this->group);
     }
 }
 
@@ -359,5 +370,5 @@ class DefaultMarketing extends AnnuaireMarketing
 {
 }
 
-// vim:set et sw=4 sts=4 sws=4 enc=utf-8:
+// vim:set et sw=4 sts=4 sws=4 fenc=utf-8:
 ?>