--- /dev/null
+<?php
+require("auto.prepend.inc.php");
+new_skinned_page('routage-mail.tpl',AUTH_COOKIE);
+require("email.classes.inc.php");
+
+$redirect = new Redirect();
+
+if (!$no_update_bd && isset($_REQUEST['emailop'])) {
+ if ($_REQUEST['emailop']=="retirer" && isset($_REQUEST['num'])) {
+ $page->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();
+?>
--- /dev/null
+<?php
+require("xorg.misc.inc.php");
+require("mtic.inc.php");
+define("SUCCESS", 1);
+define("ERROR_INACTIVE_REDIRECTION", 2);
+define("ERROR_INVALID_EMAIL", 3);
+define("ERROR_LOOP_EMAIL", 4);
+define("ERROR_DUPLICATE_EMAIL", 5);
+
+class Email {
+ var $flag_active = 'active';
+ var $flag_rewrite = 'rewrite';
+ var $flag_m4x = 'm4x';
+ var $num;
+ var $email;
+ var $active;
+ var $rewrite;
+ var $m4x;
+ var $mtic;
+
+ function Email($row) {
+ list($this->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');
+ }
+ }
+}
+?>
--- /dev/null
+{dynamic}
+{if $no_update_bd}
+<p class="normal">
+ Le site est en mode de consultation seulement, tu ne peux pas modifier tes adresses
+ de redirections.
+</p>
+{/if}
+{if $retour == $smarty.const.ERROR_INACTIVE_REDIRECTION}
+ <p class="erreur">
+ Tu ne peux pas avoir aucune adresse de redirection active, sinon ton adresse
+ {$smarty.session.username}@polytechnique.org ne fonctionnerait plus.
+ </p>
+{/if}
+{if $retour == $smarty.const.ERROR_INVALID_EMAIL}
+ <p class="erreur">
+ Erreur: l'email n'est pas valide.
+ </p>
+{/if}
+{if $retour == $smarty.const.ERROR_LOOP_EMAIL}
+ <p class="erreur">
+ 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.
+ </p>
+{/if}
+{if $retour == $smarty.const.ERROR_DUPLICATE_EMAIL}
+ <p class="erreur">
+ L'adresse {$smarty.request.email} fait déjà partie de tes adresses de redirection,
+ il est impossible de la mettre en double.
+ </p>
+{/if}
+{if $mtic == 1}
+ <p class="normal">
+ 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.
+ </p>
+{/if}
+<form action="{$smarty.server.PHP_SELF}" method="post" name="redirect">
+ <div class="rubrique">
+ Tes adresses de redirection
+ </div>
+ <p class="normal">
+ Tu configures ici les adresses emails vers lesquelles tes adresses {if $grx neq ""}<strong>{$grx}</strong>, <strong>{$domaine}org</strong>, {/if}{if $alias neq ""}<strong>{$alias}@polytechnique.org</strong>, <strong>{$alias}@m4x.org</strong>,{/if}<strong>{$smarty.session.username}@polytechnique.org</strong> et <strong>{$smarty.session.username}@m4x.org</strong> sont redirigées.
+ </p>
+ <p class="normal">
+ 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.
+ </p>
+ <p class="normal">
+ 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.
+ </p>
+ <div class="center">
+ <table class="bicol" summary="Adresses de redirection">
+ <tr>
+ <th>Email</th>
+ <th>Actif</th>
+ <th>Réécriture</th>
+ <th> </th>
+ </tr>
+ {section name=i loop=$emails}
+ <tr class="{cycle values="pair,impair"}">
+ <td><strong>{$emails[i]->email}</strong></td>
+ <td><input type="checkbox" name="emails_actifs[]" value="{$emails[i]->num}" {if
+ $emails[i]->active}checked{/if} /></td>
+ <td>
+ <select name="emails_rewrite[{$emails[i]->num}]">
+ <option value="poly" {if $emails[i]->rewrite == 1 and $emails[i]->m4x == 0}selected{/if}>
+ polytechnique.org
+ </option>
+ <option value="m4x" {if $emails[i]->m4x == 1}selected{/if}>
+ m4x.org
+ </option>
+ <option value="no" {if $emails[i]->rewrite == 0}selected{/if}>
+ aucune
+ </option>
+ </select>
+ </td>
+ <td><a href={$smarty.server.PHP_SELF}?emailop=retirer&num={$emails[i]->num}>retirer</a></td>
+ </tr>
+ {/section}
+ </table>
+ <br />
+ <input type="submit" value="Mettre à jour les emails actifs" name="emailop">
+ </div>
+ <p class="normal">
+ Tu peux ajouter à cette liste une adresse email en la tapant ici et en cliquant sur Ajouter.
+ </p>
+ <input type="text" size="35" maxlength="60" name="email" value="" />
+
+ <input type="submit" value="ajouter" name="emailop">
+</form>
+{/dynamic}