From 0d693e2f641e885a87670fddd91ed6725560d79c Mon Sep 17 00:00:00 2001 From: x2003bruneau Date: Sun, 21 Jan 2007 14:40:25 +0000 Subject: [PATCH] Broken marketing becomes a validation git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1375 839d8a87-29fc-0310-9880-83ba4fa771e5 --- ChangeLog | 3 + include/emails.inc.php | 19 +---- include/validations/broken.inc.php | 138 +++++++++++++++++++++++++++++++++++++ include/xorg.misc.inc.php | 12 ++++ modules/marketing.php | 44 +++++++----- templates/marketing/broken.tpl | 30 ++++++-- upgrade/0.9.13/03_medals.sql | 1 + 7 files changed, 207 insertions(+), 40 deletions(-) create mode 100644 include/validations/broken.inc.php diff --git a/ChangeLog b/ChangeLog index c0e948b..b6bdb99 100644 --- a/ChangeLog +++ b/ChangeLog @@ -27,6 +27,9 @@ New: - Use Banana to power mail moderation -FRU - Use Banana to browse mail archives -FRU + * Marketing: + - Marketing on broken redirections becomes a validation -FRU + * Newsletter: - New skin -mYk diff --git a/include/emails.inc.php b/include/emails.inc.php index c87bfc8..1e01343 100644 --- a/include/emails.inc.php +++ b/include/emails.inc.php @@ -262,24 +262,7 @@ class Redirect $this->emails[] = new Email(array($email, 'active', '', '0000-00-00', '0000-00-00', 0)); // security stuff - $res = XDB::query("SELECT state, description - FROM emails_watch - WHERE state != 'safe' AND email = {?}", $email); - if ($res->numRows()) { - $row = $res->fetchOneAssoc(); - $message = "L'email $email vient d'être ajouté aux redirections de ". S::v('forlife') - . ". Cette adresse est surveillée avec l'état *" . $row['state'] - . "* et la description :\n" . $row['description']; - $message = wordwrap($message); - $mailer = new PlMailer(); - $mailer->setFrom("webmaster@polytechnique.org"); - $mailer->addTo("hotliners@staff.polytechnique.org"); - $mailer->setSubject("ALERTE LORS DE L'AJOUT DE REDIRECTION de " - . S::v('prenom') . ' ' . S::v('nom') . '(' . S::v('promo') . ')'); - $mailer->setTxtBody($message - . "\n\nInformations de connexion :\n" . var_export($_SERVER, true)); - $mailer->send(); - } + check_email($email, "Ajout d'une adresse surveillée aux redirections de " . $this->uid); return SUCCESS; } diff --git a/include/validations/broken.inc.php b/include/validations/broken.inc.php new file mode 100644 index 0000000..951a8b7 --- /dev/null +++ b/include/validations/broken.inc.php @@ -0,0 +1,138 @@ +Validate($sender, false, 'broken'); + $this->m_email = $email; + $this->m_comment = trim($comment); + $this->m_forlife = $user['forlife']; + $this->m_bestalias = $user['bestalias']; + $this->m_prenom = $user['prenom']; + $this->m_nom = $user['nom']; + $this->m_promo = $user['promo']; + $this->m_sexe = $user['sexe']; + $this->old_email = $user['email']; + } + + // }}} + // {{{ function formu() + + function formu() + { + return 'include/form.valid.broken.tpl'; + } + + // }}} + // {{{ function _mail_subj + + function _mail_subj() + { + return "[Polytechnique.org] Récupération de {$this->m_prenom} {$this->m_nom} ({$this->m_promo})"; + } + + // }}} + // {{{ function _mail_body + + function _mail_body($isok) + { + if ($isok) { + return " Un mail de contact vient d'être envoyé " + ." à {$this->m_prenom} {$this->m_nom} ({$this->m_promo}) pour confirmer sa volonté de" + ." mettre à jour sa redirection Polytechnique.org!\n\n" + ."Merci de ta participation !\n"; + } else { + return " Nous n'avons pas jugé bon d'envoyer de mail de contact à {$this->m_prenom} {$this->m_nom} ({$this->m_promo})."; + } + } + + // }}} + // {{{ function commit() + + function commit() + { + global $globals; + $email = $this->m_bestalias . '@' . $globals->mail->domain; + if ($this->old_email) { + $subject = "Ton adresse $email semble ne plus fonctionner"; + $reason = "Nous avons été informés que ton adresse $email ne fonctionne plus correctement par un camarade"; + } else { + $res = XDB::iterRow("SELECT email + FROM emails AS e + INNER JOIN aliases AS a ON (a.id = e.uid) + WHERE a.alias = {?} AND e.flags = 'panne'", $this->m_forlife); + $redirect = array(); + while (list($red) = $res->next()) { + list(, $redirect[]) = explode('@', $red); + } + $subject = "Ton adresse $email ne fonctionne plus"; + $reason = "Ton adresse $email ne fonctionne plus "; + if (!count($redirect)) { + $reason .= '.'; + } elseif (count($redirect) == 1) { + $reason .= ' car sa redirection vers ' . $redirect[0] . ' est hors-service depuis plusiers mois.'; + } else { + $reason .= ' cas ses redirections vers ' . implode(', ', $redirect) + . ' sont hors-services depuis plusieurs mois.'; + } + } + $body = ($this->m_sexe ? 'Chère ' : 'Cher ') . $this->m_prenom . ",\n\n" + . $reason . "\n\n" + . "L'adresse {$this->m_email} nous a été communiquée, veux-tu que cette adresse devienne ta nouvelle " + . "adresse devienne ta nouvelle adresse de redirection ? Si oui, envoie nous des informations qui " + . "nous permettrons de nous assurer de ton identité (par exemple ta date de naissance et ta promotion)\n" + . "-- \nTrès Cordialement,\nL'Equipe de Polytechnique.org\n"; + $body = wordwrap($body, 78); + $mailer = new PlMailer(); + $mailer->setFrom('"Association Polytechnique.org" '); + $mailer->addTo($this->m_email); + $mailer->setSubject($subject); + $mailer->setTxtBody($body); + return $mailer->send(); + } + + // }}} +} + +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker: +?> diff --git a/include/xorg.misc.inc.php b/include/xorg.misc.inc.php index 37525b8..f4077d2 100644 --- a/include/xorg.misc.inc.php +++ b/include/xorg.misc.inc.php @@ -127,6 +127,18 @@ function check_ip($level) return $res->numRows(); } +function check_email($email, $message) +{ + $res = XDB::query("SELECT state, description + FROM emails_watch + WHERE state != 'safe' AND email = {?}", $email); + if ($res->numRows()) { + send_warning_mail($message); + return true; + } + return false; +} + function send_warning_mail($title) { $mailer = new PlMailer(); diff --git a/modules/marketing.php b/modules/marketing.php index 0235efa..4757136 100644 --- a/modules/marketing.php +++ b/modules/marketing.php @@ -174,30 +174,39 @@ class MarketingModule extends PLModule pl_redirect('emails/redirect'); } - $res = Xdb::query("SELECT u.nom, u.prenom, u.promo, a.alias AS forlife + $res = Xdb::query("SELECT u.nom, u.prenom, u.promo, FIND_IN_SET('femme', u.flags) AS sexe, + a.alias AS forlife, b.alias AS bestalias, e.email, e.last FROM auth_user_md5 AS u - INNER JOIN aliases AS a ON a.id = u.user_id - WHERE a.alias = {?}", $forlife); + INNER JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie') + INNER JOIN aliases AS b ON (b.id = u.user_id AND FIND_IN_SET('bestalias', b.flags)) + LEFT JOIN emails AS e ON (e.flags = 'active' AND e.uid = u.user_id) + WHERE a.alias = {?} + ORDER BY e.panne_level, e.last", $forlife); if (!$res->numRows()) { return PL_NOT_FOUND; } $user = $res->fetchOneAssoc(); $page->assign('user', $user); - $email = trim(Post::v('mail')); - if (Post::has('valide') && strlen($email) > 0) { - $mailer = new PlMailer(); - $mailer->setFrom(S::v('bestalias') . '@polytechnique.org'); - $mailer->addTo('resetpass@polytechnique.org'); - $mailer->setSubject("Proposition d'adresse mail pour " . $user['forlife']); - - $message = S::v('nom') . ' ' . S::v('prenom') . ' (X' . S::v('promo') . ') ' - . 'propose l\'adresse suivante pour un camarade qui n\'a plus de ' - . 'redirections actives :' . "\n\n" - . '* ' . $user['forlife'] . ' => ' . $email . "\n"; - $mailer->setTxtBody(wordwrap($message, 78)); - $mailer->send(); - $page->assign('sent', true); + $email = null; + if (Post::has('mail')) { + require_once 'emails.inc.php'; + $email = valide_email(Post::v('mail')); + } + if (Post::has('valide') && isvalid_email_redirection($email)) { + // security stuff + check_email($email, "Proposition d'une adresse surveillee pour " . $user['forlife'] . " par " . S::v('forlife')); + if ($user['email'] && !trim(Post::v('comment'))) { + $page->trig("Il faut que tu ajoutes un commentaire à ta proposition pour justifier le " + ."besoin de changer la redirection de " . $user['prenom']); + } else { + require_once 'validations.inc.php'; + $valid = new BrokenReq(S::i('uid'), $user, $email, trim(Post::v('comment'))); + $valid->submit(); + $page->assign('sent', true); + } + } elseif ($email) { + $page->trig("L'adresse proposée n'est pas une adresse acceptable pour une redirection"); } } @@ -250,6 +259,7 @@ class MarketingModule extends PLModule $page->assign('already', true); } else { $page->assign('ok', true); + check_email($email, "Une adresse surveillée est proposée au marketing par " . S::v('forlife')); XDB::execute( "INSERT INTO register_marketing (uid,sender,email,date,last,nb,type,hash) VALUES ({?}, {?}, {?}, NOW(), 0, 0, {?}, '')", diff --git a/templates/marketing/broken.tpl b/templates/marketing/broken.tpl index 0780526..016afcc 100644 --- a/templates/marketing/broken.tpl +++ b/templates/marketing/broken.tpl @@ -33,29 +33,49 @@ Recherche d'adresses pour {$user.nom} {$user.prenom} (X{$user.promo}) +{if !$user.email}

Avec le temps toutes les adresses de redirection de notre camarade sont devenues invalides et produisent des erreurs lorsqu'on lui envoie un mail. Nous sommes donc à la recherche d'adresses valides où nous pourrions contacter ce camarade.

+{elseif $user.last} +

+ {$user.prenom} a encore des adresses de redirection actives malgré des pannes détectées sur certaines d'entre elles. Si + tu es sûre que son adresse Polytechnique.org est en panne, tu peux proposer une nouvelle adresse mail à ajouter à ses + redirections. Merci d'ajouter un commentaire pour nous indiquer la raison de cette proposition. +

+{else} +

+ Nous n'avons actuellement enregistré aucune panne sur les adresses de redirection de {$user.prenom}. Si tu es sûr que + son adresse de redirection actuelle est en panne tu peux nous proposer une nouvelle adresse, accompagnée d'un commentaire + nous expliquant les raisons exactes de cette proposition. +

+{/if}

Les adresses emails que tu pourras nous donner ne seront pas ajoutées directement aux redirections de {$user.prenom}. + Nous allons d'abord prendre contact avec {if $user.sexe}elle{else}lui{/if} pour savoir si {if $user.sexe}elle{else}lui{/if} + accepte la mise à jour de sa redirection.

- Merci de participer à cette recherche. + Merci de ta participation active à l'amélioration de notre qualité de service.

- - - + + {if $user.email} + + + + + {/if}
Nom :{$user.nom}
Prénom :{$user.prenom}
Promo :{$user.promo}
Proposition d'adresse pour
{$user.nom} {$user.prenom} (X{$user.promo})
Adresse email : - +
Explication :
diff --git a/upgrade/0.9.13/03_medals.sql b/upgrade/0.9.13/03_medals.sql index b0a5cbb..58de90f 100644 --- a/upgrade/0.9.13/03_medals.sql +++ b/upgrade/0.9.13/03_medals.sql @@ -1,3 +1,4 @@ alter table profile_medals add column flags set('validation') not null default 'validation'; update profile_medals set flags = '' where id = 20; +alter table requests_answers change category category enum('alias','liste','usage','photo','evts','marketing','orange','homonyme','nl','paiements','medal','broken') not null; # vim:set syntax=mysql: -- 2.1.4