Minor bugfixes and coding style improvements
authorRaphaël Barrois <raphael.barrois@polytechnique.org>
Sat, 27 Jun 2009 22:56:21 +0000 (00:56 +0200)
committerRaphaël Barrois <raphael.barrois@polytechnique.org>
Sat, 27 Jun 2009 22:57:24 +0000 (00:57 +0200)
Signed-off-by: Raphaël Barrois <raphael.barrois@polytechnique.org>
include/emails.inc.php
modules/axletter.php
modules/axletter/axletter.inc.php
upgrade/0.10.1/02_axletter.sql

index 4b40e0d..9905a73 100644 (file)
@@ -74,18 +74,18 @@ function isvalid_email_redirection($email)
         !preg_match("/@(polytechnique\.(org|edu)|melix\.(org|net)|m4x\.org)$/", $email);
 }
 
-// function idsFromMails() {{{1
-/** Converts an array of emails to an array of email => uid
- * @param $emails : array of emails
- * @return array of ($email => $uid)
- */
-function idsFromMails($emails)
+// function ids_from_mails() {{{1
+// Converts an array of emails to an array of email => uid
+function ids_from_mails(array $emails)
 {
     global $globals;
     $domain_mails = array();
     $alias_mails  = array();
     $other_mails  = array();
-    /* Find type of email address */
+
+    // Determine the type of the email adresses. It can eiher be a domain
+    // email (@polytechnique.org), an alias email (@melix.net) or any other
+    // email (potentially used as a redirection by one user)
     foreach ($emails as $email) {
         if (strpos($email, '@') === false) {
             $user = $email;
@@ -106,23 +106,22 @@ function idsFromMails($emails)
         }
     }
     $uids = array();
-    /* domain users */
+
+    // Look up user ids for addresses in domain
     if (count($domain_mails)) {
         $domain_users = array();
-        foreach (array_keys($domain_mails) as $user) {
-            $domain_users[] = XDB::escape($user);
-        }
+        $domain_users = array_map('XDB::escape', array_keys($domain_mails));
         $list = implode(',', $domain_users);
         $res = XDB::query("SELECT   alias, id
-            FROM   aliases
-            WHERE   alias IN ($list)");
+                             FROM   aliases
+                            WHERE   alias IN ($list)");
         foreach ($res->fetchAllRow() as $row) {
             list ($alias, $id) = $row;
             $uids[$domain_mails[$alias]] = $id;
         }
     }
 
-    /* Alias users */
+    // Look up user ids for addresses in our alias domain
     if (count($alias_mails)) {
         $alias_users = array();
         foreach (array_keys($alias_mails) as $user) {
@@ -130,27 +129,25 @@ function idsFromMails($emails)
         }
         $list = implode(',', $alias_users);
         $res = XDB::query("SELECT   v.alias, a.id
-            FROM   virtual             AS v
-            INNER JOIN   virtual_redirect    AS r USING(vid)
-            INNER JOIN   aliases             AS a ON (a.type = 'a_vie'
-            AND r.redirect = CONCAT(a.alias, '@{$globals->mail->domain2}'))
-            WHERE   v.alias IN ($list)");
+                             FROM   virtual             AS v
+                       INNER JOIN   virtual_redirect    AS r USING(vid)
+                       INNER JOIN   aliases             AS a ON (a.type = 'a_vie'
+                                    AND r.redirect = CONCAT(a.alias, '@{$globals->mail->domain2}'))
+                            WHERE   v.alias IN ($list)");
         foreach ($res->fetchAllRow() as $row) {
             list ($alias, $id) = $row;
             $uids[$alias_mails[$alias]] = $id;
         }
     }
 
-    /* Other mails */
+    // Look up user ids for other addresses in the email redirection list
     if (count($other_mails)) {
         $other_users = array();
-        foreach (array_keys($other_mails) as $user) {
-            $other_users[] = XDB::escape($user);
-        }
+        $other_users = array_map('XDB::escape', $other_mails);
         $list = implode(',', $other_users);
         $res = XDB::query("SELECT   email, uid
-            FROM   emails
-            WHERE   email IN ($list)");
+                             FROM   emails
+                            WHERE   email IN ($list)");
         foreach ($res->fetchAllRow() as $row) {
             list ($email, $uid) = $row;
             $uids[$other_mails[$email]] = $uid;
index f1bd6e6..b1f3a86 100644 (file)
@@ -91,7 +91,7 @@ class AXLetterModule extends PLModule
         $promo_min  = Post::i('promo_min');
         $promo_max  = Post::i('promo_max');
         $subset_to  = preg_split("/[ ,;\:\n\r]+/", Post::v('subset_to'), -1, PREG_SPLIT_NO_EMPTY);
-        $subset     = ( count($subset_to) > 0);
+        $subset     = (count($subset_to) > 0);
         $echeance   = Post::has('echeance_date') ?
               preg_replace('/^(\d\d\d\d)(\d\d)(\d\d)$/', '\1-\2-\3', Post::v('echeance_date')) . ' ' . Post::v('echeance_time')
             : Post::v('echeance');
@@ -102,8 +102,8 @@ class AXLetterModule extends PLModule
             $res = XDB::query("SELECT * FROM axletter WHERE FIND_IN_SET('new', bits)");
             if ($res->numRows()) {
                 extract($res->fetchOneAssoc(), EXTR_OVERWRITE);
-                $subset_to = preg_split("/\n/", $subset);
-                $subset = (count($subset_to > 0));
+                $subset_to = explode("\n", $subset);
+                $subset = (count($subset_to) > 0);
                 $saved = true;
             } else  {
                 XDB::execute("INSERT INTO axletter SET id = NULL");
index 3c6cf3d..27b1d46 100644 (file)
@@ -60,7 +60,7 @@ class AXLetter extends MassMailer
         if ($this->_date == '0000-00-00') {
             $this->_date = 0;
         }
-        $this->_subset_to = preg_split("/\n/", $this->_subset_to);
+        $this->_subset_to = explode("\n", $this->_subset_to);
         $this->_subset = (count($this->_subset_to) > 0);
     }
 
@@ -203,12 +203,9 @@ class AXLetter extends MassMailer
         }
         if ($this->_subset) {
             require_once("emails.inc.php");
-            print_r($this->_subset_to);
-            $ids = idsFromMails($this->_subset_to);
-            print_r($ids);
+            $ids = ids_from_mails($this->_subset_to);
             $ids_list = implode(',', $ids);
             $where[] = "ni.user_id IN ($ids_list)";
-            // TODO : force use of the adresses given by AX, not "canonical" ones ?
         }
         return implode(' AND ', $where);
     }
index d675b54..524200e 100644 (file)
@@ -1,4 +1,3 @@
-ALTER TABLE axletter ADD subset TEXT CHARACTER SET ASCII COLLATE ascii_general_ci NULL DEFAULT NULL AFTER promo_max
+ALTER TABLE axletter ADD subset TEXT NULL DEFAULT NULL AFTER promo_max;
 
 -- vim:set syntax=mysql:
-