Migration de routage-mail.php
authorx2000bedo <x2000bedo>
Fri, 13 Aug 2004 00:02:57 +0000 (00:02 +0000)
committerx2000bedo <x2000bedo>
Fri, 13 Aug 2004 00:02:57 +0000 (00:02 +0000)
Il y avait du boulot ! C'était assez "bordelique". J'espère ne pas avoir fait de boulettes.

etat_migration
htdocs/routage-mail.php [new file with mode: 0644]
include/email.classes.inc.php [new file with mode: 0644]
templates/routage-mail.tpl [new file with mode: 0644]

index cda4337..1065000 100644 (file)
@@ -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 (file)
index 0000000..61dca73
--- /dev/null
@@ -0,0 +1,40 @@
+<?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();
+?>
diff --git a/include/email.classes.inc.php b/include/email.classes.inc.php
new file mode 100644 (file)
index 0000000..dab9f3f
--- /dev/null
@@ -0,0 +1,156 @@
+<?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');
+        }
+    }
+}
+?>
diff --git a/templates/routage-mail.tpl b/templates/routage-mail.tpl
new file mode 100644 (file)
index 0000000..36468ab
--- /dev/null
@@ -0,0 +1,98 @@
+{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>&nbsp;</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&amp;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="" />
+  &nbsp;&nbsp;
+  <input type="submit" value="ajouter" name="emailop">
+</form>
+{/dynamic}