From dc557110afa62b4612653a1eab41c023a4a2e0f1 Mon Sep 17 00:00:00 2001 From: x2003bruneau Date: Tue, 1 Aug 2006 13:12:30 +0000 Subject: [PATCH] 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 --- bin/cron/emails.check.php | 34 ++++++++++++++++++++++++++++++++++ bin/emails.broken.php | 27 ++++++++++++++++++++++----- htdocs/images/icons/error.gif | Bin 0 -> 1094 bytes include/emails.inc.php | 15 +++++++++++---- templates/admin/utilisateurs.tpl | 4 +++- templates/emails/index.tpl | 7 +++++++ templates/emails/redirect.tpl | 13 ++++++++++++- upgrade/0.9.11/07_emails.sql | 8 ++++++++ 8 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 htdocs/images/icons/error.gif create mode 100644 upgrade/0.9.11/07_emails.sql 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 0000000000000000000000000000000000000000..de6dc7b2efb994a0fcb33408493e32c5d5822128 GIT binary patch literal 1094 zcmb`GUr19?9LIm#w5>H|;r;5vVB(5VVi{-SKa>!X4D>;l2#xj!gSV?1L9U~Em!x-bzBbTR^?-d4s zerQpDjrjdzL%yLNx~CVwxD({Kn2`wQ;sQ_VRN(d`W!?n~5WN;bHo*-r%ndy|ZvM8b zYd>^pXC0^bOU=d;LjXf9(bPtCc4|DW^JR_i3YWI!6 zji+_aX}rWnw7mtwbX*P1#z}%m;t7QlENOsdCa@e&M8;=?yR-(7m4q+~aHSc*v{SB4 zCIB{H12nXkYfcA1-2_11U9KJ6EH%YYzmu48lSY#;*n9w$pH%gr9l*Q>aF|xrpD$JQ z@D=gcBR4G0F7ityEm0f20RPJMm(x!_`e3^6(J7j5nfKzQ29ydkz>8sk2`j+p3c$u^ zfQ~l+HCq5o6~MR`jGq0Yp*O3vuhAcj%}(<{AsnK#3*(=U&GQK^$cF#;{I5j_C&@(gGe91jl=&0@M!hR;oJ@m1GI&WuNx1;L5qy02} zt;yZ!aM+ryrtUK>{-&;rXIGemail, $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}
    @@ -80,6 +86,7 @@ ton homonyme et toi-m
  • {$m.email}
  • {/iterate}
+ {/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(); + -- 2.1.4