Adapts bin scripts to new mail chain.
authorStéphane Jacob <sj@m4x.org>
Sun, 27 Feb 2011 13:14:08 +0000 (14:14 +0100)
committerStéphane Jacob <sj@m4x.org>
Sun, 27 Feb 2011 22:19:02 +0000 (23:19 +0100)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
bin/cron/checkdb.php
bin/cron/emails.check.php
bin/cron/google_apps.php
bin/cron/homonyms.php
bin/cron/profile_modification.php
bin/cron/registrations.php
bin/lists.rpc.py
include/emails.inc.php

index 999bf9c..120420b 100755 (executable)
@@ -105,42 +105,45 @@ if (PEAR::isError($opts)) {
 }
 
 /* Checks rewriting on deleted aliases. */
-check("SELECT  a.alias, e.email, e.rewrite AS broken
-         FROM  aliases AS a
-   INNER JOIN  emails  AS e ON (a.uid = e.uid AND rewrite != '')
-    LEFT JOIN  aliases AS b ON (b.uid = a.uid AND rewrite LIKE CONCAT(b.alias, '@%') AND b.type != 'homonyme')
-        WHERE  a.type = 'a_vie' AND b.type IS NULL",
+check("SELECT  s1.email, r.redirect, r.rewrite AS broken
+         FROM  email_redirect_account AS r
+   INNER JOIN  email_source_account   AS s1 ON (r.uid = s1.uid AND s1.type = 'forlife')
+    LEFT JOIN  email_source_account   AS s2 ON (r.uid = s2.uid AND r.rewrite LIKE CONCAT(s2.email, '@%'))
+        WHERE  r.rewrite != '' AND s2.uid IS NULL",
       "Personnes qui ont des rewrite sur un alias perdu.");
 
 /* Lists unsound emails that remain unprocessed by the administrators. */
-check("SELECT  a1.alias, a2.alias, e1.email, e2.flags
-         FROM  emails      AS e1
-   INNER JOIN  emails      AS e2 ON (e1.email = e2.email AND e1.uid != e2.uid AND
-                                     (e1.uid < e2.uid OR NOT FIND_IN_SET('active', e2.flags)))
-   INNER JOIN  email_watch AS w  ON (w.email = e1.email AND w.state = 'pending')
-   INNER JOIN  aliases     AS a1 ON (a1.uid = e1.uid AND a1.type = 'a_vie')
-   INNER JOIN  aliases     AS a2 ON (a2.uid = e2.uid AND a2.type = 'a_vie')
-        WHERE  FIND_IN_SET('active', e1.flags)
-     ORDER BY  a1.alias",
+check("SELECT  s1.email, s2.email, w.email
+         FROM  email_watch            AS w
+   INNER JOIN  email_redirect_account AS r1 ON (w.email = r1.redirect)
+    LEFT JOIN  email_redirect_account AS r2 ON (w.email = r2.redirect AND r1.uid != r2.uid)
+   INNER JOIN  email_source_account   AS s1 ON (s1.uid = r1.uid AND s1.type = 'forlife')
+    LEFT JOIN  email_source_account   AS s2 ON (s2.uid = r2.uid AND s2.type = 'forlife')
+        WHERE  w.state = 'pending'
+     GROUP BY  w.email
+     ORDER BY  w.email",
       "Donne la liste des emails douteux actuellement non traites par les administrateurs.");
 
 /* Lists dangerous and unsound emails. */
-info("SELECT  a1.alias, a2.alias, e1.email, e2.flags, w.state
-        FROM  emails      AS e1
-  INNER JOIN  emails      AS e2 ON (e1.email = e2.email AND e1.uid != e2.uid AND
-                                    (e1.uid < e2.uid OR NOT FIND_IN_SET('active', e2.flags)))
-  INNER JOIN  email_watch AS w  ON (w.email = e1.email AND w.state != 'safe')
-  INNER JOIN  aliases     AS a1 ON (a1.uid = e1.uid AND a1.type = 'a_vie')
-  INNER JOIN  aliases     AS a2 ON (a2.uid = e2.uid AND a2.type = 'a_vie')
-       WHERE  FIND_IN_SET('active', e1.flags)
-    ORDER BY  a1.alias",
+info("SELECT  s1.email, s2.email, w.email, w.state
+        FROM  email_watch            AS w
+  INNER JOIN  email_redirect_account AS r1 ON (w.email = r1.redirect)
+   LEFT JOIN  email_redirect_account AS r2 ON (w.email = r2.redirect AND r1.uid != r2.uid)
+  INNER JOIN  email_source_account   AS s1 ON (s1.uid = r1.uid AND s1.type = 'forlife')
+   LEFT JOIN  email_source_account   AS s2 ON (s2.uid = r2.uid AND s2.type = 'forlife')
+       WHERE  w.state != 'safe'
+    GROUP BY  w.email
+    ORDER BY  w.email",
      "Donne la liste des emails dangereux ou douteux.");
 
 /* Lists homonyms who have an alias equals to their loginbis for more than a month. */
-check("SELECT  a.alias AS username, b.alias AS loginbis, b.expire
-         FROM  aliases AS a
-   INNER JOIN  aliases AS b ON (a.uid=b.uid AND b.type != 'homonyme' and b.expire < NOW())
-        WHERE  a.type = 'a_vie'",
+check("SELECT  e.email AS homonym, f.email AS forlife, e.expire
+         FROM  email_source_account  AS e
+   INNER JOIN  homonyms_list         AS l ON (e.uid = l.uid)
+   INNER JOIN  homonyms_list         AS h ON (l.hrmid = h.hrmid)
+   INNER JOIN  email_source_account  AS f ON (h.uid = f.uid AND f.type = 'forlife')
+        WHERE  e.expire < NOW()
+     ORDER BY  homonym, forlife",
       "Donne la liste des homonymes qui ont un alias égal à leur loginbis depuis plus d'un mois, il est temps de supprimer leur alias.");
 
 // Counts empty profile fields that should never be empty.
index 846ef2d..8bab8ab 100755 (executable)
@@ -47,17 +47,15 @@ if (PEAR::isError($opts)) {
 /*
  * Check duplicated addresses
  */
-$it = Xdb::iterRow("SELECT  al1.alias, al2.alias, e1.email
-                      FROM  emails      AS e1
-                INNER JOIN  emails      AS e2  ON (e1.email = e2.email AND e1.uid != e2.uid
-                                                   AND (e1.uid < e2.uid OR NOT FIND_IN_SET('active', e2.flags)))
-                INNER JOIN  aliases     AS al1 ON (al1.uid = e1.uid AND al1.type = 'a_vie')
-                INNER JOIN  aliases     AS al2 ON (al2.uid = e2.uid AND al2.type = 'a_vie')
-                INNER JOIN  accounts    AS a1  ON (al1.uid = a1.uid)
-                INNER JOIN  accounts    AS a2  ON (al2.uid = a2.uid)
-                 LEFT JOIN  email_watch AS w   ON (e1.email = w.email)
-                     WHERE  FIND_IN_SET('active', e1.flags) AND w.email IS NULL
-                  ORDER BY  al1.alias");
+$it = Xdb::iterRow("SELECT  s1.email, s2.email, r1.redirect
+                      FROM  email_redirect_account AS r1
+                INNER JOIN  email_redirect_account AS r2 ON (r1.redirect = r2.redirect AND r1.uid != r2.uid)
+                INNER JOIN  email_source_account   AS s1 ON (s1.uid = r1.uid AND s1.type = 'forlife')
+                INNER JOIN  email_source_account   AS s2 ON (s2.uid = r2.uid AND s2.type = 'forlife')
+                 LEFT JOIN  email_watch            AS w  ON (r1.redirect = w.email)
+                     WHERE  w.email IS NULL
+                  GROUP BY  r1.redirect
+                  ORDER BY  r1.redirect, s1.email");
 
 $insert   = array();
 $conflits = array();
@@ -84,29 +82,28 @@ if (count($conflits) > 0) {
  * Check dead emails
  */
 if ($panne_level > 0) {
-    $res = Xdb::query("SELECT  e.email, a.hruid
-                         FROM  emails   AS e
-                   INNER JOIN  accounts AS a ON (a.uid = e.uid)
-                        WHERE  e.panne_level = {?} AND e.flags = 'active'
-                     ORDER BY  a.hruid",
-                      $panne_level);
+    $res = XDB::fetchAllAssoc("SELECT  r.redirect, a.hruid
+                                 FROM  email_redirect_account AS r
+                           INNER JOIN  accounts               AS a ON (a.uid = r.uid)
+                                WHERE  r.broken_level = {?} AND r.flags != 'broken'
+                             ORDER BY  a.hruid",
+                              $panne_level);
 
-    if ($res->numRows()) {
-        $result = $res->fetchAllAssoc();
+    if ($res) {
         echo "Nouvelles adresses en panne detectees :\n";
-        foreach ($result as $assoc) {
-            echo '* ' . $assoc['email'] . ' pour ' . $assoc['hruid'] . "\n";
+        foreach ($res as $assoc) {
+            echo '* ' . $assoc['redirect'] . ' pour ' . $assoc['hruid'] . "\n";
         }
         echo "\n\n";
 
-        Xdb::execute("UPDATE  emails
-                         SET  flags = 'panne'
-                       WHERE  panne_level = 3 AND flags = 'active'");
+        Xdb::execute("UPDATE  email_redirect_account
+                         SET  flags = 'broken'
+                       WHERE  broken_level = 3");
     }
 
-    Xdb::execute('UPDATE  emails
-                     SET  panne_level = {?}
-                   WHERE  panne_level > {?}',
+    Xdb::execute('UPDATE  email_redirect_account
+                     SET  broken_level = {?}
+                   WHERE  broken_level > {?}',
                  $panne_level, $panne_level);
 }
 
@@ -115,19 +112,18 @@ if ($panne_level > 0) {
  * inactive redirection.
  */
 if ($opt_verbose) {
-    $res = XDB::query("SELECT  a.hruid, ei.email
-                         FROM  accounts      AS a
-                    LEFT JOIN  emails        AS ea ON (ea.uid = a.uid AND ea.flags = 'active')
-                   INNER JOIN  emails        AS ei ON (ei.uid = a.uid AND ei.flags = '')
-                   INNER JOIN  email_options AS eo ON (eo.uid = a.uid)
-                        WHERE  NOT FIND_IN_SET('googleapps', eo.storage) AND ea.email IS NULL
-                     GROUP BY  a.uid");
+    $res = XDB::fetchAllAssoc("SELECT  a.hruid, r2.redirect
+                                 FROM  accounts               AS a
+                            LEFT JOIN  email_redirect_account AS r1 ON (a.uid = r1.uid AND r1.flags = 'active')
+                           INNER JOIN  email_redirect_account AS r2 ON (a.uid = r2.uid AND r2.flags = 'inactive'
+                                                                        AND r2.type != 'imap' AND r2.type != 'homonym')
+                                WHERE  r1.uid IS NULL
+                             GROUP BY  a.uid");
 
-    if ($res->numRows()) {
-        $result = $res->fetchAllAssoc();
+    if ($res) {
         echo "Camarades n'ayant plus d'adresses actives, mais ayant une adresse inactive :\n";
-        foreach ($result as $user) {
-            echo '* ' . $user['email'] . ' pour ' . $user['hruid'] . "\n";
+        foreach ($res as $user) {
+            echo '* ' . $user['redirect'] . ' pour ' . $user['hruid'] . "\n";
         }
     }
     echo "\n";
index 66138b8..9b6f78d 100755 (executable)
@@ -32,10 +32,10 @@ if (!$globals->mailstorage->googleapps_domain) {
 
 /* Updates the l_userid parameter for newer user accounts. */
 $res = XDB::iterator(
-    "SELECT  g.g_account_name, a.uid
+    "SELECT  g.g_account_name, s.uid
        FROM  gapps_accounts AS g
-  LEFT JOIN  aliases as a ON (a.alias = g.g_account_name AND a.type = 'a_vie')
-      WHERE  (g.l_userid IS NULL OR g.l_userid <= 0) AND a.uid IS NOT NULL");
+  LEFT JOIN  email_source_account AS s ON (s.email = g.g_account_name AND s.type = 'forlife')
+      WHERE  (g.l_userid IS NULL OR g.l_userid <= 0) AND s.uid IS NOT NULL");
 while ($account = $res->next()) {
     XDB::execute(
         "UPDATE  gapps_accounts
@@ -48,8 +48,8 @@ while ($account = $res->next()) {
 $res = XDB::iterator(
     "SELECT  g.g_account_name
        FROM  gapps_accounts AS g
-  LEFT JOIN  aliases as a ON (a.alias = g.g_account_name AND a.type = 'a_vie')
-      WHERE  (g.l_userid IS NULL OR g.l_userid <= 0) AND a.uid IS NULL");
+  LEFT JOIN  email_source_account AS s ON (s.email = g.g_account_name AND s.type = 'forlife')
+      WHERE  (g.l_userid IS NULL OR g.l_userid <= 0) AND s.uid IS NULL");
 while ($account = $res->next()) {
     if (!preg_match("/^admin-/", $account['g_account_name'])) {
         printf("Warning: GApps account '%s' has no local uid.\n", $account['g_account_name']);
@@ -58,10 +58,10 @@ while ($account = $res->next()) {
 
 /* Updates the l_userid parameter for newer nicknames. */
 $res = XDB::iterator(
-    "SELECT  g.g_account_name, a.uid
+    "SELECT  g.g_account_name, s.uid
        FROM  gapps_nicknames AS g
-  LEFT JOIN  aliases AS a ON (a.alias = g.g_account_name AND a.type = 'a_vie')
-      WHERE  (g.l_userid IS NULL or g.l_userid <= 0) AND a.uid IS NOT NULL
+  LEFT JOIN  email_source_account AS s ON (s.email = g.g_account_name AND s.type = 'forlife')
+      WHERE  (g.l_userid IS NULL or g.l_userid <= 0) AND s.uid IS NOT NULL
    GROUP BY  g_account_name");
 while ($nickname = $res->next()) {
     XDB::execute(
@@ -75,8 +75,8 @@ while ($nickname = $res->next()) {
 $res = XDB::iterator(
     "SELECT  g.g_account_name
        FROM  gapps_nicknames AS g
-  LEFT JOIN  aliases as a ON (a.alias = g.g_account_name AND a.type = 'a_vie')
-      WHERE  (g.l_userid IS NULL OR g.l_userid <= 0) AND a.uid IS NULL");
+  LEFT JOIN  email_source_account AS s ON (s.email = g.g_account_name AND s.type = 'forlife')
+      WHERE  (g.l_userid IS NULL OR g.l_userid <= 0) AND s.uid IS NULL");
 while ($nickname = $res->next()) {
     if (!preg_match("/^admin-/", $nickname['g_account_name'])) {
         printf("Warning: Nickname '%s' has no local uid.\n", $nickname['g_account_name']);
@@ -86,11 +86,11 @@ while ($nickname = $res->next()) {
 /* Checks that all nicknames have been synchronized to GoogleApps. Creates the
    missing ones. */
 $res = XDB::iterator(
-    "SELECT  g.l_userid AS id, f.alias AS username, a.alias AS nickname
+    "SELECT  g.l_userid AS id, s1.email AS username, s2.email AS nickname
        FROM  gapps_accounts AS g
- INNER JOIN  aliases AS f ON (f.uid = g.l_userid AND f.type = 'a_vie')
- INNER JOIN  aliases AS a ON (a.uid = g.l_userid AND a.type = 'alias')
-  LEFT JOIN  gapps_nicknames AS n ON (n.l_userid = g.l_userid AND n.g_nickname = a.alias)
+ INNER JOIN  email_source_account AS s1 ON (s1.uid = g.l_userid AND s1.type = 'forlife')
+ INNER JOIN  email_source_account AS s2 ON (s2.uid = g.l_userid AND s2.type = 'alias')
+  LEFT JOIN  gapps_nicknames AS n ON (n.l_userid = g.l_userid AND n.g_nickname = s2.email)
       WHERE  g.g_status = 'active' AND n.g_nickname IS NULL AND g.l_userid IS NOT NULL");
 while ($nickname = $res->next()) {
     // Checks that the requested nickname doesn't look like a regular forlife;
@@ -111,8 +111,8 @@ while ($nickname = $res->next()) {
 $res = XDB::iterator(
     "SELECT  g.l_userid AS id, g.g_nickname AS nickname
        FROM  gapps_nicknames AS g
-  LEFT JOIN  aliases AS a ON (a.uid = g.l_userid AND a.type = 'alias' AND a.alias = g.g_nickname)
-      WHERE  g.l_userid IS NOT NULL AND a.alias IS NULL");
+  LEFT JOIN  email_source_account AS s ON (s.uid = g.l_userid AND s.type = 'forlife' AND s.email = g.g_nickname)
+      WHERE  g.l_userid IS NOT NULL AND s.email IS NULL");
 while ($nickname = $res->next()) {
     XDB::execute(
         "INSERT  INTO gapps_queue
index 567fbd8..068d3b2 100755 (executable)
  */
 require 'connect.db.inc.php';
 
-$resRobot = XDB::iterator("SELECT  uid, alias, expire
-                             FROM  aliases
-                            WHERE  (expire = NOW() + INTERVAL 7 DAY OR expire <= NOW())
-                                   AND type = 'alias'");
+$resRobot = XDB::iterator("SELECT  uid, email, expire
+                             FROM  email_source_account
+                            WHERE  (expire = NOW() + INTERVAL 7 DAY OR expire <= NOW())");
 while ($old = $resRobot->next()) {
     $res = XDB::query('SELECT  a.hruid
-                         FROM  homonyms AS h
-                   INNER JOIN  accounts AS a ON (h.uid = a.uid)
-                        WHERE  homonyme_id = {?}',
-                      $old['id']);
+                         FROM  homonyms_list AS h
+                   INNER JOIN  accounts      AS a ON (h.uid = a.uid)
+                        WHERE  hrmid = {?}',
+                      'h.' . $old['email'] . '.polytechnique.org');
     $hruids = $res->fetchColumn();
 
-    $homonym = User::getSilent($old['id']);
-    $req = new HomonymeReq($homonym, $old['alias'], $hruids, $old['expire'] > date("Y-m-d"));
+    $homonym = User::getSilent($old['uid']);
+    $req = new HomonymeReq($homonym, $old['email'], $hruids, $old['expire'] > date("Y-m-d"));
     $req->submit();
 }
 
index ec240cb..7101c42 100755 (executable)
@@ -24,13 +24,13 @@ require_once 'connect.db.inc.php';
 require_once 'plmailer.php';
 global $globals;
 
-$res = XDB::iterator('SELECT  p.hrpid, pm.pid, a.full_name, pm.field, pm.oldText, pm.newText, p.sex, pd.yourself, al.alias
+$res = XDB::iterator('SELECT  p.hrpid, pm.pid, a.full_name, pm.field, pm.oldText, pm.newText, p.sex, pd.yourself, s.email
                         FROM  profile_modifications AS pm
                   INNER JOIN  accounts              AS a  ON (pm.uid = a.uid)
                   INNER JOIN  profiles              AS p  ON (pm.pid = p.pid)
                   INNER JOIN  profile_display       AS pd ON (pm.pid = pd.pid)
                   INNER JOIN  account_profiles      AS ap ON (pm.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                  INNER JOIN  aliases               AS al ON (ap.uid = al.uid AND FIND_IN_SET(\'bestalias\', al.flags))
+                  INNER JOIN  email_source_account  AS s  ON (a.uid = s.uid AND FIND_IN_SET(\'bestalias\', s.flags))
                        WHERE  pm.type = \'third_party\' AND pm.field != \'deathdate\'
                     ORDER BY  pm.pid, pm.field, pm.timestamp');
 
@@ -41,7 +41,7 @@ if ($res->total() > 0) {
     $pid = $values['pid'];
     $sex = ($values['sex'] == 'female') ? 1 : 0;
     $yourself = $values['yourself'];
-    $alias = $values['alias'];
+    $alias = $values['email'];
     $hrpid = $values['hrpid'];
     $modifications = array();
     $modifications[] = array(
index bf20e87..91cb1ac 100755 (executable)
@@ -5,11 +5,11 @@ require 'connect.db.inc.php';
 
 $message = '';
 
-$res = XDB::iterRow("SELECT  a.registration_date, a.hruid, e.email
-                       FROM  accounts AS a
-                 INNER JOIN  account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms))
-                 INNER JOIN  profile_display  AS pd ON (ap.pid = pd.pid)
-                  LEFT JOIN  emails           AS e  ON (a.uid = e.uid AND NOT FIND_IN_SET('filter', e.flags))
+$res = XDB::iterRow("SELECT  a.registration_date, a.hruid, s.email
+                       FROM  accounts             AS a
+                 INNER JOIN  account_profiles     AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms))
+                 INNER JOIN  profile_display      AS pd ON (ap.pid = pd.pid)
+                  LEFT JOIN  email_source_account AS s  ON (a.uid = s.uid)
                       WHERE  a.registration_date > {?}
                    GROUP BY  a.hruid
                    ORDER BY  pd.promo",
index e006547..43814aa 100755 (executable)
@@ -127,12 +127,12 @@ class BasicAuthXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
             self.end_headers()
 
     def getUser(self, uid, md5, vhost):
-        res = mysql_fetchone ("""SELECT  a.full_name, IF(aa.alias IS NULL, a.email, CONCAT(aa.alias, '@%s')),
+        res = mysql_fetchone ("""SELECT  a.full_name, IF(s.email IS NULL, a.email, CONCAT(s.email, '@%s')),
                                          IF (a.is_admin, 'admin',
                                                          IF(FIND_IN_SET('lists', at.perms) OR FIND_IN_SET('lists', a.user_perms), 'lists', NULL))
                                    FROM  accounts AS a
                              INNER JOIN  account_types AS at ON (at.type = a.type)
-                              LEFT JOIN  aliases  AS aa ON (a.uid = aa.uid AND aa.type = 'a_vie')
+                              LEFT JOIN  email_source_account AS s ON (s.uid = a.uid AND s.type = 'forlife')
                                   WHERE  a.uid = '%s' AND a.password = '%s' AND a.state = 'active'
                                   LIMIT  1""" \
                               % (PLATAL_DOMAIN, uid, md5))
@@ -202,9 +202,8 @@ def to_forlife(email):
     if ( fqdn == PLATAL_DOMAIN ) or ( fqdn == PLATAL_DOMAIN2 ):
         res = mysql_fetchone("""SELECT  CONCAT(f.alias, '@%s'), a.full_name
                                   FROM  accounts AS a
-                            INNER JOIN  aliases  AS f  ON (f.uid = a.uid AND f.type = 'a_vie')
-                            INNER JOIN  aliases  AS aa ON (aa.uid = a.uid AND aa.alias = '%s'
-                                                           AND a.type != 'homonyme')
+                            INNER JOIN  email_source_account AS s1 ON (a.uid = s1.uid AND s1.type = 'forlife')
+                            INNER JOIN  email_source_account AS s2 ON (a.uid = s2.uid AND s2.email = '%s')
                                  WHERE  a.state = 'active'
                                  LIMIT  1""" \
                               % (PLATAL_DOMAIN, mbox))
index 35621e2..ccd3890 100644 (file)
@@ -158,7 +158,7 @@ function mark_broken_email($email, $admin = false)
                            WHERE  redirect = {?}', $email);
         } elseif ($admin) {
             XDB::execute('UPDATE  email_redirect_account
-                             SET  last = CURDATE(), broken_level = IF(broken_level > 1, 3, 2)
+                             SET  last = CURDATE(), broken_level = broken_level + 1
                            WHERE  redirect = {?} AND DATE_ADD(last, INTERVAL 14 DAY) < CURDATE()',
                          $email);
         } else {