X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=bin%2Fcron%2Fcron_ml_moderate.php;h=268cdd358586af1dbe3b1a9648247ea0d5d0eec6;hb=257ae4081d1b5da12c4458f0642b9d2b7843abee;hp=e2b261e990cada66def5a43eae6191c4e3e5961e;hpb=dc3441fff4abd8dc0a0c74a7958747b3a2a8fc81;p=platal.git diff --git a/bin/cron/cron_ml_moderate.php b/bin/cron/cron_ml_moderate.php index e2b261e..268cdd3 100755 --- a/bin/cron/cron_ml_moderate.php +++ b/bin/cron/cron_ml_moderate.php @@ -1,7 +1,7 @@ #!/usr/bin/php5 -q lists->max_mail_per_min && time() - $handler < 60) { // take a lock on a mail - XDB::execute("UPDATE ml_moderate + XDB::execute("UPDATE email_list_moderate SET handler = {?} WHERE handler IS NULL ORDER BY ts @@ -37,12 +37,12 @@ while ($sent_mails < $globals->lists->max_mail_per_min if (XDB::affectedRows() == 0) { break; } - $query = XDB::query("SELECT nom, prenom, user_id, password, - ml, domain, mid, action, message - FROM auth_user_md5 AS u - INNER JOIN ml_moderate AS ml ON (u.user_id = ml.uid) - WHERE ml.handler = {?}", $handler); - list($nom, $prenom, $uid, $password, $list, $domain, $mid, $action, $reason) = $query->fetchOneRow(); + $query = XDB::query('SELECT a.fullname, a.uid, a.password, + ml.ml, ml.domain, ml.mid, ml.action, ml.message + FROM accounts AS a + INNER JOIN email_list_moderate AS ml ON (a.uid = ml.uid) + WHERE ml.handler = {?}', $handler); + list($fullname, $uid, $password, $list, $domain, $mid, $action, $reason) = $query->fetchOneRow(); // build the client $client = new MMList($uid, $password, $domain); @@ -55,21 +55,21 @@ while ($sent_mails < $globals->lists->max_mail_per_min case 'accept': $action = 1; /** 1 = ACCEPT **/ $subject = "Message accepté"; - $append = "a été accepté par $prenom $nom.\n"; + $append = "a été accepté par $fullname.\n"; $type = 'nonspam'; $count += count($mem) + count($own); break; case 'refuse': $action = 2; /** 2 = REJECT **/ $subject = "Message refusé"; - $append = "a été refusé par $prenom $nom avec la raison :\n\n" . $reason; + $append = "a été refusé par $fullname avec la raison :\n\n" . $reason; $type = 'nonspam'; $count += count($own) + 1; break; case 'delete': $action = 3; /** 3 = DISCARD **/ $subject = "Message supprimé"; - $append = "a été supprimé par $prenom $nom.\n\n" + $append = "a été supprimé par $fullname.\n\n" . "Rappel: il ne faut utiliser cette opération " . "que dans le cas de spams ou de virus !\n"; $type = 'spam'; @@ -77,22 +77,6 @@ while ($sent_mails < $globals->lists->max_mail_per_min break; } - if ($client->handle_request($list, $mid, $action, $reason)) { - $sent_mails += $count; - $texte = "le message suivant :\n\n" - . " Auteur: {$mail['sender']}\n" - . " Sujet : « {$mail['subj']} »\n" - . " Date : ".strftime("le %d %b %Y à %H:%M:%S", (int)$mail['stamp'])."\n\n" - . $append; - $mailer = new PlMailer(); - $mailer->addTo("$list-owner@{$domain}"); - $mailer->setFrom("$list-bounces@{$domain}"); - $mailer->addHeader('Reply-To', "$list-owner@{$domain}"); - $mailer->setSubject($subject); - $mailer->setTxtBody($texte); - $mailer->send(); - } - // if the mail was classified as Unsure, feed bogo $raw_mail = html_entity_decode($client->get_pending_mail($list, $mid, 1)); // search for the X-Spam-Flag header @@ -101,20 +85,37 @@ while ($sent_mails < $globals->lists->max_mail_per_min $end_of_headers = strpos($raw_mail, "\n\n"); } $x_spam_flag = ''; - if (preg_match('/^X-Spam-Flag: ([a-zA-Z]+), tests=bogofilter/m', substr($raw_mail, 0, $end_of_headers + 1), $matches) { + if (preg_match('/^X-Spam-Flag: ([a-zA-Z]+), tests=bogofilter/m', substr($raw_mail, 0, $end_of_headers + 1), $matches)) { $x_spam_flag = $matches[1]; } if ($x_spam_flag == 'Unsure') { $mailer = new PlMailer(); $mailer->addTo($type . '@' . $globals->mail->domain); - $mailer->setFrom('"' . $prenom . ' ' . $nom . '" mail->domain . '>'); - $mailer->setTxtBody($type . ' soumis par ' . $prenom . ' ' . $nom . ' via la modération de la liste ' . $list . '@' . $domain); + $mailer->setFrom('"' . $fullname . '" mail->domain . '>'); + $mailer->setTxtBody($type . ' soumis par ' . $fullname . ' via la modération de la liste ' . $list . '@' . $domain); $mailer->addAttachment($raw_mail, 'message/rfc822', $type . '.mail', false); $mailer->send(); } + // send feedback to the mailing list owners + if ($client->handle_request($list, $mid, $action, utf8_decode($reason))) { + $sent_mails += $count; + $texte = "Le message suivant :\n\n" + . " Auteur: {$mail['sender']}\n" + . " Sujet : « {$mail['subj']} »\n" + . " Date : ".strftime("le %d %b %Y à %H:%M:%S", (int)$mail['stamp'])."\n\n" + . $append; + $mailer = new PlMailer(); + $mailer->addTo("$list-owner@{$domain}"); + $mailer->setFrom("$list-bounces@{$domain}"); + $mailer->addHeader('Reply-To', "$list-owner@{$domain}"); + $mailer->setSubject($subject); + $mailer->setTxtBody($texte); + $mailer->send(); + } + // release the lock - XDB::execute("DELETE FROM ml_moderate WHERE handler = {?}", + XDB::execute("DELETE FROM email_list_moderate WHERE handler = {?}", $handler); sleep(60 * $count / $globals->lists->max_mail_per_min); }