Handles canceled payment transactions.
[platal.git] / bin / cron / emails.check.php
index 3febc77..426a2d6 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/php5 -q
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  Copyright (C) 2003-2014 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -24,8 +24,8 @@
  */
 $panne_level = 3;
 
-require('./connect.db.inc.php');
-require("Console/Getopt.php");
+require './connect.db.inc.php';
+require 'Console/Getopt.php';
 
 /*
  * Parse the command-line options.
@@ -47,19 +47,15 @@ if (PEAR::isError($opts)) {
 /*
  * Check duplicated addresses
  */
-$sql = "SELECT  a1.alias, a2.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)))
-     LEFT JOIN  email_watch  AS w  ON (e1.email = w.email)
-    INNER JOIN  aliases       AS a1 ON (a1.id = e1.uid AND a1.type = 'a_vie')
-    INNER JOIN  aliases       AS a2 ON (a2.id = e2.uid AND a2.type = 'a_vie')
-    INNER JOIN  auth_user_md5 AS u1 ON (a1.id = u1.user_id)
-    INNER JOIN  auth_user_md5 AS u2 ON (a2.id = u2.user_id)
-         WHERE  FIND_IN_SET('active', e1.flags) AND u1.nom != u2.nom_usage AND u2.nom != u1.nom_usage AND w.email IS NULL
-      ORDER BY  a1.alias";
-
-$it = Xdb::iterRow($sql);
+$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();
@@ -86,29 +82,29 @@ if (count($conflits) > 0) {
  * Check dead emails
  */
 if ($panne_level > 0) {
-    $sql = "SELECT  e.email, u.hruid
-              FROM  emails        AS e
-        INNER JOIN  auth_user_md5 AS u ON u.user_id = e.uid
-             WHERE  e.panne_level = $panne_level AND e.flags = 'active'
-          ORDER BY  u.hruid";
-    $res = Xdb::query($sql);
-
-    if ($res->numRows()) {
-        $result = $res->fetchAllAssoc();
+    $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) {
         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 = $panne_level
-                   WHERE  panne_level > $panne_level");
+    Xdb::execute('UPDATE  email_redirect_account
+                     SET  broken_level = {?}
+                   WHERE  broken_level > {?}',
+                 $panne_level, $panne_level);
 }
 
 /*
@@ -116,22 +112,32 @@ if ($panne_level > 0) {
  * inactive redirection.
  */
 if ($opt_verbose) {
-    $res = XDB::query("SELECT  u.hruid, ei.email
-                         FROM  auth_user_md5   AS u
-                    LEFT JOIN  emails          AS ea ON (ea.uid = u.user_id AND ea.flags='active')
-                   INNER JOIN  emails          AS ei ON (ei.uid = u.user_id AND ei.flags='')
-                        WHERE  FIND_IN_SET('googleapps', u.mail_storage) = 0 AND ea.email IS NULL
-                     GROUP BY  u.user_id");
-
-    if ($res->numRows()) {
-        $result = $res->fetchAllAssoc();
+    $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) {
         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";
 }
 
-// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+/*
+ * Updates imap settings for users with no active redirection. Their emails
+ * must go to imap and bounce.
+ */
+XDB::execute("UPDATE  email_redirect_account AS r
+           LEFT JOIN  email_redirect_account AS a ON (r.uid = a.uid AND a.flags = 'active' AND a.type != 'imap')
+                 SET  r.action = 'imap_and_bounce'
+               WHERE  r.type = 'imap' AND a.redirect IS NULL");
+
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8:
 ?>