From: x2003bruneau Date: Tue, 1 Aug 2006 13:12:30 +0000 (+0000) Subject: Add a panne_level column updated by emails.broken script. X-Git-Tag: xorg/0.9.11~148 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=dc557110afa62b4612653a1eab41c023a4a2e0f1;p=platal.git Add a panne_level column updated by emails.broken script. panne_level is incremented each month the address is broken panne_level is decremented each month the address is OK when panne_level >= 3, the address flag is set to 'panne' and so the address becomes deactivated git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@767 839d8a87-29fc-0310-9880-83ba4fa771e5 --- diff --git a/bin/cron/emails.check.php b/bin/cron/emails.check.php index 3762c7b..81aec17 100755 --- a/bin/cron/emails.check.php +++ b/bin/cron/emails.check.php @@ -20,8 +20,15 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ +/* Number of consecutive month of bounce before deactivating a redirection + */ +$panne_level = 3; + require('./connect.db.inc.php'); +/* + * 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 @@ -57,6 +64,33 @@ if (count($conflits) > 0) { } } +/* + * Check dead emails + */ +if ($panne_level > 0) { + $sql = "SELECT e.email, a.alias AS forlife + FROM emails AS e + INNER JOIN aliases AS a ON a.id = e.uid AND a.type = 'a_vie' + WHERE e.panne_level = $panne_level AND e.flags = 'active' + ORDER BY a.alias"; + $res = Xdb::query($sql); + + if ($res->numRows()) { + $result = $res->fetchAllAssoc(); + echo "Nouvelles adresses en panne détectées :\n"; + foreach ($result as $assoc) { + echo '* ' . $assoc['email'] . ' pour ' . $assoc['forlife'] . "\n"; + } + echo "\n\n"; + Xdb::execute("UPDATE emails + SET flags = 'panne' + WHERE panne_level = 3 AND flags = 'active'"); + } + + Xdb::execute("UPDATE emails + SET panne_level = $panne_level + WHERE panne_level > $panne_level"); +} ?> diff --git a/bin/emails.broken.php b/bin/emails.broken.php index 21f6a2b..93155a4 100755 --- a/bin/emails.broken.php +++ b/bin/emails.broken.php @@ -19,10 +19,11 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ -ini_set('include_path', '../include:/usr/share/php'); - -require_once('../include/xorg.inc.php'); -require_once('../include/emails.inc.php'); +ini_set('include_path', '.:../include:/usr/share/php'); + +require_once('connect.db.inc.php'); +require_once('xorg.inc.php'); +require_once('emails.inc.php'); $opts = getopt('i:o:'); if (($opts['i'] && $opts['i'] == '-') || empty($opts['i'])) { @@ -38,6 +39,7 @@ if (($opts['o'] && $opts['o'] == '-') || empty($opts['o'])) { $emails = explode("\n", file_get_contents($file)); $list = array(); + foreach ($emails as $_email) { $email = valide_email($_email); if (empty($email) || $email=='@') { @@ -54,7 +56,17 @@ foreach ($emails as $_email) { GROUP BY e1.uid", $email); if ($x = $sel->fetchOneAssoc()) { if (!$x['panne']) { - XDB::execute("UPDATE emails SET panne=NOW() WHERE email = {?}", $email); + XDB::execute("UPDATE emails + SET panne=NOW(), last=NOW() + panne_level = 1 + WHERE email = {?}", + $email); + } else { + XDB::execute("UPDATE emails + SET last = CURDATE(), + panne_level = panne_level + 1 + WHERE email = {?} + AND DATE_ADD(last, INTERVAL 15 DAY) < CURDATE()", $email); } if (empty($x['nb_mails'])) { @@ -112,6 +124,11 @@ login ({$x['alias']}) et ta date de naissance !"; } } +XDB::execute("UPDATE emails + SET panne_level = panne_level - 1 + WHERE flags = 'active' AND panne_level > 1 + AND last != CURDATE()"); + $csv = "nom;prenom;promo;alias;bounce;nbmails\n"; foreach ($list as $alias=>$mails) { $sel = Xdb::query( diff --git a/htdocs/images/icons/error.gif b/htdocs/images/icons/error.gif new file mode 100644 index 0000000..de6dc7b Binary files /dev/null and b/htdocs/images/icons/error.gif differ diff --git a/include/emails.inc.php b/include/emails.inc.php index 0a7cf14..d1044c9 100644 --- a/include/emails.inc.php +++ b/include/emails.inc.php @@ -115,15 +115,19 @@ class Email var $email; var $active; + var $broken; var $rewrite; var $panne; + var $last; // }}} // {{{ constructor function Email($row) { - list($this->email, $this->active, $this->rewrite, $this->panne) = $row; + list($this->email, $flags, $this->rewrite, $this->panne, $this->last) = $row; + $this->active = ($flags == 'active'); + $this->broken = ($flags == 'panne'); } // }}} @@ -132,10 +136,13 @@ class Email function activate($uid) { if (!$this->active) { - XDB::execute("UPDATE emails SET flags = 'active' - WHERE uid={?} AND email={?}", $uid, $this->email); + XDB::execute("UPDATE emails + SET panne_level = IF(flags = 'panne', panne_level - 1, panne_level), + flags = 'active' + WHERE uid={?} AND email={?}", $uid, $this->email); $_SESSION['log']->log("email_on", $this->email.($uid!=S::v('uid') ? "(admin on $uid)" : "")); $this->active = true; + $this->broken = false; } } @@ -187,7 +194,7 @@ class Redirect { $this->uid=$_uid; $res = XDB::iterRow(" - SELECT email, flags='active', rewrite, panne + SELECT email, flags, rewrite, panne, last FROM emails WHERE uid = {?} AND flags != 'filter'", $_uid); $this->emails=Array(); while ($row = $res->next()) { diff --git a/templates/admin/utilisateurs.tpl b/templates/admin/utilisateurs.tpl index 4ceaebd..6ed30d6 100644 --- a/templates/admin/utilisateurs.tpl +++ b/templates/admin/utilisateurs.tpl @@ -283,10 +283,12 @@ Pour ceci changer ses permissions en 'disabled'. {if $mail->active}active{/if} - {if $mail->active}des{/if}activer + {if $mail->active}des{elseif $mail->broken}ré{/if}activer + {if $mail->broken}{/if} {$mail->email} + {if $mail->broken} (en panne){/if} delete diff --git a/templates/emails/index.tpl b/templates/emails/index.tpl index 3a20b33..25f1d70 100644 --- a/templates/emails/index.tpl +++ b/templates/emails/index.tpl @@ -73,6 +73,12 @@ ton homonyme et toi-m + {if $mails->total() eq 0} +

+ Tu n'as actuellement aucune adressse de redirection. Tout courrier électronique qui t'es adresses + ci-dessus génère une erreur. Modifie au plus vite ta liste de redirection.
+

+ {else} Actuellement, tout courrier électronique qui t'y est adressé, est envoyé {if $mails->total() eq 1} à l'adresse {else} aux adresses {/if} + {/if} Si tu souhaites modifier ce reroutage de ton courrier, il te suffit de te rendre ici ! diff --git a/templates/emails/redirect.tpl b/templates/emails/redirect.tpl index 70b9889..52b094b 100644 --- a/templates/emails/redirect.tpl +++ b/templates/emails/redirect.tpl @@ -83,7 +83,13 @@ {foreach from=$emails item=e} - {$e->email} + + + {if $e->broken}{/if} + {$e->email} + {if $e->broken}{icon name=error title="En panne"}{/if} + + active}checked="checked"{/if} /> @@ -111,6 +117,11 @@ +

+ Les adresses marquées {icon name=error title="En panne"} sont des adresses qui sont considérées comme étant en panne + depuis plusieurs mois. Si tu penses qu'il s'agit d'une erreur, tu peux la réactiver. Si une nouvelle panne était détectée + sur cette adresse, elle serait immédiatement redésactivée. +

Pour les Élèves (non encore diplômés)

diff --git a/upgrade/0.9.11/07_emails.sql b/upgrade/0.9.11/07_emails.sql new file mode 100644 index 0000000..9897c8a --- /dev/null +++ b/upgrade/0.9.11/07_emails.sql @@ -0,0 +1,8 @@ +alter table emails add column panne_level tinyint(1) not null default 0 after panne; +alter table emails change flags flags enum('active', 'filter', 'panne') not null default 'active'; +UPDATE emails SET last = panne WHERE last = 0 AND panne != 0; +UPDATE emails + SET panne_level = 1 + WHERE flags = 'active' + AND DATE_ADD(panne, INTERVAL 2 MONTH) > CURDATE(); +