X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=bin%2Fcron%2Femails.check.php;h=fb5fdd5540eec71fbde06a85038d9f2716679ed9;hb=d82359a556779137f8a90d0312b3098a2db6f482;hp=fc9322c05df033ea1f057b96acb4d88e6ad671b8;hpb=866f133358783c8a3888309a2bca724dd1445ce4;p=platal.git diff --git a/bin/cron/emails.check.php b/bin/cron/emails.check.php index fc9322c..fb5fdd5 100755 --- a/bin/cron/emails.check.php +++ b/bin/cron/emails.check.php @@ -1,7 +1,7 @@ -#!/usr/bin/php4 -q +#!/usr/bin/php5 -q getMessage(); +} else { + $opts = $opts[0]; + foreach ($opts as $opt) { + if ($opt[0] == 'v') { + $opt_verbose = true; + } + } +} + +/* + * Check duplicated addresses + */ +$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(); @@ -44,19 +65,79 @@ while (list($alias1, $alias2, $mail) = $it->next()) { } if (count($conflits) > 0) { - echo "Nouvelles adresses en doublon détectées :\n" . join("\n", $conflits) - . "\n\nVous pouvez entrer les informations collectées à ce sujet sur la page :\n" - . "http://www.polytechnique.org/admin/doublons"; + echo "Nouvelles adresses en doublon détectées :\n" . join("\n", $conflits) + . "\n\nVous pouvez entrer les informations collectées à ce sujet sur la page :\n" + . "https://www.polytechnique.org/admin/emails/duplicated"; echo "\n\n"; - $sql = "INSERT IGNORE INTO emails_watch (email, state, detection, last) - VALUES " . join(", ", $insert); - Xdb::execute($sql); - if (mysql_errno() != 0) { - echo 'Error : ' . mysql_error() . "\n$sql"; + $sql = "INSERT IGNORE INTO email_watch (email, state, detection, last) + VALUES " . join(", ", $insert); + XDB::execute($sql); + if (XDB::errno() != 0) { + echo 'Error : ' . XDB::error() . "\n$sql"; + } +} + +/* + * Check dead emails + */ +if ($panne_level > 0) { + $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 ($res as $assoc) { + echo '* ' . $assoc['redirect'] . ' pour ' . $assoc['hruid'] . "\n"; + } + echo "\n\n"; + + Xdb::execute("UPDATE email_redirect_account + SET flags = 'broken' + WHERE broken_level = 3"); + } + + Xdb::execute('UPDATE email_redirect_account + SET broken_level = {?} + WHERE broken_level > {?}', + $panne_level, $panne_level); +} + +/* + * Retrieve the users with no active redirection, but still one working + * inactive redirection. + */ +if ($opt_verbose) { + $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 ($res as $user) { + echo '* ' . $user['redirect'] . ' pour ' . $user['hruid'] . "\n"; + } } + echo "\n"; } +/* + * 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 enc=utf-8: ?>