On Xnet %grp/site redirects to the group's website
[platal.git] / include / massmailer.inc.php
index d9ad35e..fd5093d 100644 (file)
@@ -59,7 +59,7 @@ abstract class MassMailer
             return $this->_head; 
         } else {
             $head = $this->_head;
-            $head = str_replace('<cher>',   $sexe ? 'Chère' : 'Cher', $head);
+            $head = str_replace('<cher>',   $sexe ? 'Chère' : 'Cher', $head);
             $head = str_replace('<prenom>', $prenom, $head);
             $head = str_replace('<nom>',    $nom,    $head);
             return format_text($head, $type, 2, 64);
@@ -73,7 +73,7 @@ abstract class MassMailer
             return true;
         } else {
             $css = file_get_contents(dirname(__FILE__) . '/../htdocs/css/' . $this->_css);
-            return preg_replace('@/\*.*?\*/@s', '', $css);
+            return preg_replace('@/\*.*?\*/@us', '', $css);
         }
     }
 
@@ -100,9 +100,12 @@ abstract class MassMailer
         $this->assignData($page);
     }
 
-    public function sendTo($prenom, $nom, $login, $sexe, $html)
+    public function sendTo($prenom, $nom, $login, $sexe, $html, $hash = 0)
     {
         global $globals;
+        if (strpos($login, '@') === false) {
+            $login = "$login@{$globals->mail->domain}";
+        }
 
         $mailer = new PlMailer($this->_tpl);
         $this->assignData($mailer);
@@ -111,38 +114,45 @@ abstract class MassMailer
         $mailer->assign('nom',     $nom);
         $mailer->assign('sexe',    $sexe);
         $mailer->assign('prefix',  null);
-        $mailer->addTo("\"$prenom $nom\" <$login@{$globals->mail->domain}>");
+        $mailer->assign('hash',    $hash);
+        $mailer->addTo("\"$prenom $nom\" <$login>");
         $mailer->send($html);
     }
 
+    protected function getAllRecipients()
+    {
+        global $globals;
+        return  "SELECT  u.user_id, CONCAT(a.alias, '@{$globals->mail->domain}'),
+                         u.prenom, IF(u.nom_usage='', u.nom, u.nom_usage),
+                         FIND_IN_SET('femme', u.flags),
+                         q.core_mail_fmt AS pref, 0 AS hash
+                   FROM  {$this->subscriptionTable()}  AS ni
+             INNER JOIN  auth_user_md5   AS u  USING(user_id)
+             INNER JOIN  auth_user_quick AS q  ON(q.user_id = u.user_id)
+             INNER JOIN  aliases         AS a  ON(u.user_id=a.id AND FIND_IN_SET('bestalias',a.flags))
+              LEFT JOIN  emails          AS e  ON(e.uid=u.user_id AND e.flags='active')
+                  WHERE  ni.last < {?} AND ({$this->subscriptionWhere()}) AND e.email IS NOT NULL
+               GROUP BY  u.user_id";
+    }
+
     public function sendToAll()
     {
         $this->setSent();
-        $query = "SELECT  u.user_id, a.alias,
-                          u.prenom, IF(u.nom_usage='', u.nom, u.nom_usage),
-                          FIND_IN_SET('femme', u.flags),
-                          q.core_mail_fmt AS pref
-                    FROM  {$this->subscriptionTable()}  AS ni
-              INNER JOIN  auth_user_md5   AS u  USING(user_id)
-              INNER JOIN  auth_user_quick AS q  ON(q.user_id = u.user_id)
-              INNER JOIN  aliases         AS a  ON(u.user_id=a.id AND FIND_IN_SET('bestalias',a.flags))
-               LEFT JOIN  emails          AS e  ON(e.uid=u.user_id AND e.flags='active')
-                   WHERE  ni.last < {?} AND ({$this->subscriptionWhere()}) AND e.email IS NOT NULL
-                GROUP BY  u.user_id
-                   LIMIT  60";
+        $query = $this->getAllRecipients() . " LIMIT {?}";
         while (true) {
-            $res = XDB::iterRow($query, $this->_id);
+            $res = XDB::iterRow($query, $this->_id, 60);
             if (!$res->total()) {
-                exit;
+                return;
             }
             $sent = array();
-            while (list($uid, $bestalias, $prenom, $nom, $sexe, $fmt) = $res->next()) {
-                $sent[] = "user_id='$uid'";
-                $this->sendTo($prenom, $nom, $bestalias, $sexe, $fmt=='html');
+            while (list($uid, $bestalias, $prenom, $nom, $sexe, $fmt, $hash) = $res->next()) {
+                $sent[] = "(user_id='$uid'" . (!$uid ? " AND email='$bestalias')": ')');
+                $this->sendTo($prenom, $nom, $bestalias, $sexe, $fmt=='html', $hash);
             }
             XDB::execute("UPDATE  {$this->subscriptionTable()}
                              SET  last = {?}
                            WHERE " . implode(' OR ', $sent), $this->_id);
+            
             sleep(60);
         }
     }
@@ -247,5 +257,5 @@ function enriched_to_text($input,$html=false,$just=false,$indent=0,$width=68)
 
 // }}}
 
-// vim:set et sw=4 sts=4 sws=4:
+// vim:set et sw=4 sts=4 sws=4 enc=utf-8:
 ?>