From ad6164039ca71baee08ccdadefbb9e0222a47d0c Mon Sep 17 00:00:00 2001 From: x2000bedo Date: Fri, 13 Aug 2004 00:02:57 +0000 Subject: [PATCH] Migration de routage-mail.php MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Il y avait du boulot ! C'était assez "bordelique". J'espère ne pas avoir fait de boulettes. --- etat_migration | 2 +- htdocs/routage-mail.php | 40 +++++++++++ include/email.classes.inc.php | 156 ++++++++++++++++++++++++++++++++++++++++++ templates/routage-mail.tpl | 98 ++++++++++++++++++++++++++ 4 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 htdocs/routage-mail.php create mode 100644 include/email.classes.inc.php create mode 100644 templates/routage-mail.tpl diff --git a/etat_migration b/etat_migration index cda4337..1065000 100644 --- a/etat_migration +++ b/etat_migration @@ -18,7 +18,7 @@ Etat | Ancien nom | Nouveau nom ------+-[ marketing ]-----------------------------+---------------- ; | admin/utilisateurs_identification.php | marketing/ ------+-[ emails ... ]----------------------------+---------------- -; | routage-mail.php | +x | routage-mail.php | ------+-[ inscription + mdp ]---------------------+---------------- ; | step4.php | ; | tmpPWD.php | diff --git a/htdocs/routage-mail.php b/htdocs/routage-mail.php new file mode 100644 index 0000000..61dca73 --- /dev/null +++ b/htdocs/routage-mail.php @@ -0,0 +1,40 @@ +assign('retour', $redirect->delete_email($_REQUEST['num'])); + } + elseif ($_REQUEST['emailop']=="ajouter" && isset($_REQUEST['email'])) { + $page->assign('retour', $redirect->add_email(trim($_REQUEST['email']))); + } + elseif (!isset($_REQUEST['emails_actifs']) || !is_array($_REQUEST['emails_actifs']) + || count($_REQUEST['emails_actifs'])==0) { + $page->assign('retour', ERROR_INACTIVE_REDIRECTION); + } + elseif (isset($_REQUEST['emails_actifs']) && is_array($_REQUEST['emails_actifs']) + && isset($_REQUEST['emails_rewrite']) && is_array($_REQUEST['emails_rewrite'])) { + $page->assign('retour', + $redirect->modify_email($_REQUEST['emails_actifs'],$_REQUEST['emails_rewrite'])); + } +} +$sql = "SELECT domain FROM groupex.aliases WHERE id=12 AND email like'".$_SESSION['username']."'"; +$res = $globals->db->query($sql); +list($grx) = mysql_fetch_row($res); +$page->assign('grx',$grx); +$page->assign('domaine',substr($grx,0,-3)); +$sql = "SELECT alias FROM auth_user_md5 WHERE user_id=".$_SESSION["uid"]; +$res = $globals->db->query($sql); +list($alias) = mysql_fetch_row($res); +$page->assign('alias',$alias); +foreach ($redirect->emails as $mail) + $emails[] = $mail; +$page->assign('emails',$emails); +$page->assign('no_update_bd',$no_update_bd); + +$page->run(); +?> diff --git a/include/email.classes.inc.php b/include/email.classes.inc.php new file mode 100644 index 0000000..dab9f3f --- /dev/null +++ b/include/email.classes.inc.php @@ -0,0 +1,156 @@ +num,$this->email,$this->active,$this->filtre,$this->rewrite,$this->m4x,$this->mtic) + = $row; + } + + function set_filtre_antispam() { + $this->flag_active = 'filtre'; + $this->active = $this->filtre; + } + + function set($flag) { + global $globals; + if (!$this->{$flag}) { + $globals->db->query("update emails set flags = CONCAT_WS(',',flags,'".$this->{'flag_'.$flag}. + "') where uid={$_SESSION['uid']} and num=".$this->num); + if ($flag=='active') + $_SESSION['log']->log("email_on",$this->email); + $this->{$flag} = true; + } + } + + function deset($flag) { + global $globals; + if ($this->{$flag}) { + $globals->db->query("update emails set flags = flags & + ~(1 << (FIND_IN_SET('".$this->{'flag_'.$flag}."',flags)-1)) + where uid={$_SESSION['uid']} and num=".$this->num); + if ($flag=='active') + $_SESSION['log']->log("email_off",$this->email); + $this->{$flag} = false; + } + } +} + +class Redirect { + var $flag_active = 'active'; + var $emails; + + function Redirect() { + global $globals; + $result = $globals->db->query("select num, email, + FIND_IN_SET('active',flags),FIND_IN_SET('filtre',flags), + FIND_IN_SET('rewrite',flags), FIND_IN_SET('m4x',flags), FIND_IN_SET('mtic',flags) + from emails where uid = {$_SESSION['uid']}"); + while ($row = mysql_fetch_row($result)) { + $num = $row[0]; + if ($num!=0) + $this->emails[$num] = new Email($row); + else + $this->flag_active = 'filtre'; + } + if ($this->flag_active == 'filtre') + foreach($this->emails as $num=>$mail) + $this->emails[$num]->set_filtre_antispam(); + } + + function other_active($num) { + foreach($this->emails as $i=>$mail) + if ($i!=$num && $this->emails[$i]->active) + return true; + return false; + } + + function duplicate($email) { + foreach($this->emails as $num=>$mail) + if ($this->emails[$num]->email==$email) + return true; + return false; + } + + function freenum() { + $anc = 0; + foreach ($this->emails as $num=>$mail) { + if ($anc<$num-1) + return $anc+1; + $anc = $num; + } + return $anc+1; + } + + function delete_email($num) { + global $globals; + if (!$this->other_active($num)) + return ERROR_INACTIVE_REDIRECTION; + $globals->db->query("delete from emails where uid={$_SESSION['uid']} and num='$num'"); + $_SESSION['log']->log("email_del",$this->emails[$num]->email); + unset($this->emails[$num]); + return SUCCESS; + } + + function add_email($email) { + global $globals; + $email_stripped = stripslashes($email); + if (!isvalid_email($email_stripped)) + return ERROR_INVALID_EMAIL; + if (!isvalid_email_redirection($email_stripped)) + return ERROR_LOOP_EMAIL; + if ($this->duplicate($email)) + return ERROR_DUPLICATE_EMAIL; + //construction des flags + $flags = $this->flag_active.',rewrite'; + // on verifie si le domaine de email ou email est un domaine interdisant + // les adresses internes depuis l'exterieur + $mtic = 0; + if (check_mtic($email_stripped)) { + $flags .= ',mtic'; + global $page; + $page->assign('mtic',1); + $mtic = 1; + } + $newnum = $this->freenum(); + $globals->db->query("insert into emails (uid,num,email,flags) VALUES({$_SESSION['uid']},'$newnum','$email','$flags')"); + $_SESSION['log']->log("email_add",$email); + $this->emails[$newnum] = new Email(array($newnum,$email,1,1,1,0,$mtic)); + return SUCCESS; + } + + function modify_email($emails_actifs,$emails_rewrite) { + global $globals; + foreach($this->emails as $num=>$mail) { + if ($emails_rewrite[$num] != 'no') + $this->emails[$num]->set('rewrite'); + else + $this->emails[$num]->deset('rewrite'); + if ($emails_rewrite[$num] == 'm4x') + $this->emails[$num]->set('m4x'); + else + $this->emails[$num]->deset('m4x'); + if(in_array($num,$emails_actifs)) + $this->emails[$num]->set('active'); + else + $this->emails[$num]->deset('active'); + } + } +} +?> diff --git a/templates/routage-mail.tpl b/templates/routage-mail.tpl new file mode 100644 index 0000000..36468ab --- /dev/null +++ b/templates/routage-mail.tpl @@ -0,0 +1,98 @@ +{dynamic} +{if $no_update_bd} +

+ Le site est en mode de consultation seulement, tu ne peux pas modifier tes adresses + de redirections. +

+{/if} +{if $retour == $smarty.const.ERROR_INACTIVE_REDIRECTION} +

+ Tu ne peux pas avoir aucune adresse de redirection active, sinon ton adresse + {$smarty.session.username}@polytechnique.org ne fonctionnerait plus. +

+{/if} +{if $retour == $smarty.const.ERROR_INVALID_EMAIL} +

+ Erreur: l'email n'est pas valide. +

+{/if} +{if $retour == $smarty.const.ERROR_LOOP_EMAIL} +

+ Erreur: {$smarty.session.username}@polytechnique.org doit renvoyer vers un email + existant valide. En particulier, il ne peut pas être renvoyé vers lui-même, + ni son équivalent en m4x.org, ni vers son équivalent polytechnique.edu. +

+{/if} +{if $retour == $smarty.const.ERROR_DUPLICATE_EMAIL} +

+ L'adresse {$smarty.request.email} fait déjà partie de tes adresses de redirection, + il est impossible de la mettre en double. +

+{/if} +{if $mtic == 1} +

+ Ton adresse de redirection {$smarty.request.email} fait partie d'un domaine refusant + que les messages internes passent par l'extérieur, ces messages seront donc retransmis en pièces jointes. +

+{/if} +
+
+ Tes adresses de redirection +
+

+ Tu configures ici les adresses emails vers lesquelles tes adresses {if $grx neq ""}{$grx}, {$domaine}org, {/if}{if $alias neq ""}{$alias}@polytechnique.org, {$alias}@m4x.org,{/if}{$smarty.session.username}@polytechnique.org et {$smarty.session.username}@m4x.org sont redirigées. +

+

+ Le routage est en place pour les adresses dont la case "Actif" est cochée. + Si tu modifies souvent ton routage, tu as tout intérêt à rentrer toutes les + adresses qui sont susceptibles de recevoir ton routage, de sorte qu'en + jouant avec les cases "Actif" tu pourras facilement mettre en place les unes + ou bien les autres. +

+

+ Enfin, la réécriture consiste à substituer à ton adresse email habituelle + (adresse wanadoo, yahoo, free, ou autre) ton adresse polytechnique.org ou + m4x.org dans l'adresse d'expédition de tes messages, lorsque tu écris + à un camarade sur son adresse polytechnique.org. +

+
+ + + + + + + + {section name=i loop=$emails} + + + + + + + {/section} +
EmailActifRéécriture 
{$emails[i]->email}active}checked{/if} /> + + num}>retirer
+
+ +
+

+ Tu peux ajouter à cette liste une adresse email en la tapant ici et en cliquant sur Ajouter. +

+ +    + +
+{/dynamic} -- 2.1.4