From: x2000habouzit Date: Sat, 4 Sep 2004 14:40:02 +0000 (+0000) Subject: new emails layout X-Git-Tag: xorg/old~1588 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=bc47fc070930818f51597da0b4564f6ffbf553df;p=platal.git new emails layout --- diff --git a/htdocs/admin/utilisateurs.php b/htdocs/admin/utilisateurs.php index 3c4dc4a..dc4cf00 100644 --- a/htdocs/admin/utilisateurs.php +++ b/htdocs/admin/utilisateurs.php @@ -18,7 +18,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: utilisateurs.php,v 1.19 2004-09-02 23:57:43 x2000bedo Exp $ + $Id: utilisateurs.php,v 1.20 2004-09-04 14:40:02 x2000habouzit Exp $ ***************************************************************************/ require("auto.prepend.inc.php"); @@ -64,8 +64,8 @@ foreach($_POST as $key => $val) { $errors[] = "invalid email $email"; break; } - $globals->db->query("INSERT INTO emails (uid,num,email,flags) - VALUES ({$_REQUEST['user_id']},{$_REQUEST['num']},'$email','active')"); + $globals->db->query("INSERT INTO emails (uid,email,flags) + VALUES ({$_REQUEST['user_id']},'$email','active')"); $errors[] = "Ajout de $email effectué"; break; @@ -180,9 +180,9 @@ if(isset($mr)) { $page->assign('lastlogin', $lastlogin); $page->assign('host', $host); - $sql = "SELECT email, num, flags, panne - FROM emails - WHERE num != 0 AND uid = {$mr['user_id']} order by num"; + $sql = "SELECT email, flags, panne + FROM emails + WHERE NOT FIND_IN_SET('filter',flags) AND uid = {$mr['user_id']}"; $result=$globals->db->query($sql); $xorgmails = Array(); $email_panne = Array(); @@ -190,7 +190,6 @@ if(isset($mr)) { $xorgmails[] = $l; if($l['panne']!="0000-00-00") $email_panne[] = "Adresse {$l['email']} signalée comme HS le {$l['panne']}"; - $next_num = $l['num']+1; } mysql_free_result($result); @@ -200,7 +199,6 @@ if(isset($mr)) { ORDER BY type!= 'a_vie'", 'aliases'); $page->assign_by_ref('xorgmails', $xorgmails); $page->assign_by_ref('email_panne', $email_panne); - $page->assign('next_num', $next_num); } $page->assign('errors',$errors); diff --git a/htdocs/antispam.php b/htdocs/antispam.php index d71b10f..62357b7 100644 --- a/htdocs/antispam.php +++ b/htdocs/antispam.php @@ -18,7 +18,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: antispam.php,v 1.7 2004-08-31 22:01:30 x2000habouzit Exp $ + $Id: antispam.php,v 1.8 2004-09-04 14:40:02 x2000habouzit Exp $ ***************************************************************************/ require("auto.prepend.inc.php"); @@ -27,43 +27,43 @@ new_skinned_page('antispam.tpl', AUTH_MDP); require("mtic.inc.php"); if (isset($_REQUEST['filtre']) and isset($_REQUEST['statut_filtre'])) { - // mise à jour du filtre - $result = $globals->db->query("select find_in_set('drop', flags) from emails where uid = {$_SESSION['uid']} and num = 0 and find_in_set('active', flags)"); - list($filtre) = mysql_fetch_row($result); - mysql_free_result($result); - $new_filtre = (integer)$_REQUEST['statut_filtre']; - if ($new_filtre == 0 and isset($filtre)) { - // désactive le filtre - // échange les flags active et filtre d'un seul coup (de manière atomique) - $globals->db->query("UPDATE emails SET flags=IF(num=0, REPLACE(flags,'active','filtre'), REPLACE(flags,'filtre','active')) - WHERE uid={$_SESSION['uid']} AND (find_in_set('active',flags) OR FIND_IN_SET('filtre',flags))"); - // supprime la ligne num=0 - $globals->db->query("delete from emails where uid={$_SESSION['uid']} and num = 0"); - } elseif ($new_filtre != 0) { - // active le filtre - // ajoute la ligne num=0 avec le bon pipe et un flag filtre et pas de flag active - // si le filtre n'est pas déjà actif et directement en actif si le filtre est déjà actif. - $globals->db->query("replace into emails set uid = {$_SESSION['uid']}, num = 0, - email = '\"|maildrop /var/mail/.maildrop_filters/" - .($new_filtre == 2 ? 'drop_spams':'tag_spams')." {$_SESSION['uid']}\"', - flags = '".(isset($filtre) ? 'active' : 'filtre') - .($new_filtre == 2 ? ',drop' : '')."'"); - // échange les flags active et filtre d'un seul coup (de manière atomique) si le filtre n'est pas déjà actif - if (!isset($filtre)) - $globals->db->query("UPDATE emails - SET flags=IF(FIND_IN_SET('active',flags), REPLACE(flags,'active','filtre'), REPLACE(flags,'filtre','active')) - WHERE uid={$_SESSION['uid']} AND (FIND_IN_SET('active',flags) OR FIND_IN_SET('filtre',flags))"); + + $new_filter = intval($_REQUEST['statut_filtre']); + + $res = $globals->db->query("SELECT COUNT(*) FROM emails WHERE uid={$_SESSION['uid']} AND find_in_set('filter', flags)"); + list($was_filter) = mysql_fetch_row($res); + mysql_free_result($res); + + if ($new_filter == 0 && $was_filter) { + $globals->db->query("DELETE FROM emails WHERE uid = {$_SESSION['uid']} AND find_in_set('filter', flags)"); + } + + if ($new_filter != 0) { + $pipe = $new_filter == 2 ? 'drop_spams' : 'tag_spams'; + if($was_filter) { + $globals->db->query("UPDATE emails + SET email = '\"|maildrop /var/mail/.maildrop_filters/$pipe {$_SESSION['uid']}\"' + WHERE uid = {$_SESSION['uid']} AND flags = 'filter'"); + } else { + $globals->db->query("INSERT INTO emails + SET uid = {$_SESSION['uid']}, + email = '\"|maildrop /var/mail/.maildrop_filters/$pipe {$_SESSION['uid']}\"', + flags = 'filter'"); + } } } -$result = $globals->db->query("SELECT FIND_IN_SET('drop', flags)!=0 +$result = $globals->db->query("SELECT email LIKE '%drop_spams%' FROM emails - WHERE uid = {$_SESSION['uid']} AND num = 0 AND find_in_set('active', flags)"); -list($filtre) = mysql_fetch_row($result); -$filtre += mysql_num_rows($result); + WHERE uid = {$_SESSION['uid']} AND find_in_set('filter', flags)"); +if(mysql_num_rows($result)) { + list($n) = mysql_fetch_row($result); + $page->assign('filtre',intval($n)+1); +} else { + $page->assign('filtre',0); +} mysql_free_result($result); -$page->assign('filtre',$filtre); $page->run(); ?> diff --git a/htdocs/emails.php b/htdocs/emails.php index 38b2f6a..c479a6b 100644 --- a/htdocs/emails.php +++ b/htdocs/emails.php @@ -18,7 +18,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: emails.php,v 1.5 2004-09-02 22:27:05 x2000habouzit Exp $ + $Id: emails.php,v 1.6 2004-09-04 14:40:02 x2000habouzit Exp $ ***************************************************************************/ require("auto.prepend.inc.php"); @@ -33,7 +33,7 @@ $page->mysql_assign($sql, 'aliases'); $sql = "SELECT email FROM emails - WHERE uid = {$_SESSION["uid"]} AND num != 0 AND (FIND_IN_SET('active', flags) OR FIND_IN_SET('filtre', flags))"; + WHERE uid = {$_SESSION["uid"]} AND FIND_IN_SET('active', flags)"; $page->mysql_assign($sql, 'mails', 'nb_mails'); diff --git a/htdocs/pattecassee.php b/htdocs/pattecassee.php index a24bd7e..d65d61a 100644 --- a/htdocs/pattecassee.php +++ b/htdocs/pattecassee.php @@ -18,7 +18,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: pattecassee.php,v 1.7 2004-09-02 22:27:05 x2000habouzit Exp $ + $Id: pattecassee.php,v 1.8 2004-09-04 14:40:02 x2000habouzit Exp $ ***************************************************************************/ require("auto.prepend.inc.php"); @@ -78,7 +78,7 @@ L' $page->assign('email',$email); $sel = $globals->db->query("SELECT e1.uid, e1.panne != 0 AS panne, count(e2.uid) AS nb_mails, u.nom, u.prenom, u.promo FROM emails as e1 - LEFT JOIN emails as e2 ON(e1.uid = e2.uid AND FIND_IN_SET('active', e2.flags) AND e1.num != e2.num) + LEFT JOIN emails as e2 ON(e1.uid = e2.uid AND FIND_IN_SET('active', e2.flags) AND e1.email != e2.email) INNER JOIN auth_user_md5 as u ON(e1.uid = u.user_id) WHERE e1.email ='$email' GROUP BY e1.uid"); diff --git a/htdocs/routage-mail.php b/htdocs/routage-mail.php index 9f161b8..f55ba07 100644 --- a/htdocs/routage-mail.php +++ b/htdocs/routage-mail.php @@ -18,7 +18,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: routage-mail.php,v 1.5 2004-09-02 22:27:05 x2000habouzit Exp $ + $Id: routage-mail.php,v 1.6 2004-09-04 14:40:02 x2000habouzit Exp $ ***************************************************************************/ require("auto.prepend.inc.php"); @@ -28,8 +28,8 @@ require("email.classes.inc.php"); $redirect = new Redirect($_SESSION['uid']); if (isset($_REQUEST['emailop'])) { - if ($_REQUEST['emailop']=="retirer" && isset($_REQUEST['num'])) { - $page->assign('retour', $redirect->delete_email($_REQUEST['num'])); + if ($_REQUEST['emailop']=="retirer" && isset($_REQUEST['email'])) { + $page->assign('retour', $redirect->delete_email($_REQUEST['email'])); } elseif ($_REQUEST['emailop']=="ajouter" && isset($_REQUEST['email'])) { $page->assign('retour', $redirect->add_email(trim($_REQUEST['email']))); diff --git a/include/email.classes.inc.php b/include/email.classes.inc.php index 451b308..d8dad85 100644 --- a/include/email.classes.inc.php +++ b/include/email.classes.inc.php @@ -18,7 +18,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: email.classes.inc.php,v 1.3 2004-09-02 22:27:06 x2000habouzit Exp $ + $Id: email.classes.inc.php,v 1.4 2004-09-04 14:40:03 x2000habouzit Exp $ ***************************************************************************/ require("xorg.misc.inc.php"); @@ -27,50 +27,47 @@ 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) + list($this->email,$this->active,$this->rewrite,$this->mtic) = $row; } - function set_filtre_antispam() { - $this->flag_active = 'filtre'; - $this->active = $this->filtre; + function activate($uid) { + global $globals; + if (!$this->active) { + $globals->db->query("UPDATE emails + SET flags = CONCAT_WS(',',flags,'active') + WHERE uid=$uid AND email='{$this->email}'"); + $_SESSION['log']->log("email_on",$this->email); + $this->active = true; + } } - function set($flag,$uid) { + function deactivate($uid) { global $globals; - if (!$this->{$flag}) { - $globals->db->query("update emails set flags = CONCAT_WS(',',flags,'".$this->{'flag_'.$flag}. - "') where uid=$uid and num=".$this->num); - if ($flag=='active') - $_SESSION['log']->log("email_on",$this->email); - $this->{$flag} = true; + if ($this->active) { + $flags = $this->mtic ? 'mtic' : ''; + $globals->db->query("UPDATE emails + SET flags ='$flags' + WHERE uid=$uid AND email='{$this->email}'"); + $_SESSION['log']->log("email_off",$this->email); + $this->active = false; } } - function deset($flag,$uid) { + function rewrite($rew,$uid) { global $globals; - if ($this->{$flag}) { - $globals->db->query("update emails set flags = flags & - ~(1 << (FIND_IN_SET('".$this->{'flag_'.$flag}."',flags)-1)) - where uid=$uid and num=".$this->num); - if ($flag=='active') - $_SESSION['log']->log("email_off",$this->email); - $this->{$flag} = false; - } + if($this->rewrite == $rew) return; + $globals->db->query("UPDATE emails SET rewrite='$rew' WHERE uid=$uid AND email='{$this->email}'"); + $this->rewrite = $rew; + return; } } @@ -82,67 +79,42 @@ class Redirect { function Redirect($_uid) { global $globals; $this->uid=$_uid; - $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 = $_uid"); + $result = $globals->db->query(" + SELECT email, FIND_IN_SET('active',flags), rewrite, FIND_IN_SET('mtic',flags) + FROM emails WHERE uid = $_uid AND NOT FIND_IN_SET('filter',flags)"); while ($row = mysql_fetch_row($result)) { - $num = $row[0]; - if ($num!=0) - $this->emails[$num] = new Email($row); - else - $this->flag_active = 'filtre'; + $this->emails[] = new Email($row); } - 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) + function other_active($email) { + foreach($this->emails as $mail) + if ($mail->email!=$email && $mail->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) { + function delete_email($email) { global $globals; - if (!$this->other_active($num)) + if (!$this->other_active($email)) return ERROR_INACTIVE_REDIRECTION; - $globals->db->query("delete from emails where uid={$this->uid} and num='$num'"); - $_SESSION['log']->log("email_del",$this->emails[$num]->email); - unset($this->emails[$num]); + $globals->db->query("DELETE FROM emails WHERE uid={$this->uid} AND email='$email'"); + $_SESSION['log']->log("email_del",$email); + foreach($this->emails as $i=>$mail) { + if($email==$mail->email) unset($this->emails[$i]); + } return SUCCESS; } function add_email($email) { global $globals; - $email_stripped = stripslashes($email); + $email_stripped = strtolower(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'; + $flags = 'active'; // on verifie si le domaine de email ou email est un domaine interdisant // les adresses internes depuis l'exterieur $mtic = 0; @@ -152,28 +124,24 @@ class Redirect { $page->assign('mtic',1); $mtic = 1; } - $newnum = $this->freenum(); - $globals->db->query("insert into emails (uid,num,email,flags) VALUES({$this->uid},'$newnum','$email','$flags')"); + $globals->db->query("REPLACE INTO emails (uid,email,flags) VALUES({$this->uid},'$email','$flags')"); $_SESSION['log']->log("email_add",$email); - $this->emails[$newnum] = new Email(array($newnum,$email,1,1,1,0,$mtic)); + foreach($this->emails as $mail) { + if($mail->email == $email_stripped) return SUCCESS; + } + $this->emails[] = new Email(array($email,1,'',$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',$this->uid); - else - $this->emails[$num]->deset('rewrite'); - if ($emails_rewrite[$num] == 'm4x') - $this->emails[$num]->set('m4x',$this->uid); - else - $this->emails[$num]->deset('m4x'); - if(in_array($num,$emails_actifs)) - $this->emails[$num]->set('active',$this->uid); - else - $this->emails[$num]->deset('active'); + foreach($this->emails as $i=>$mail) { + if(in_array($mail->email,$emails_actifs)) { + $this->emails[$i]->activate($this->uid); + } else { + $this->emails[$i]->deactivate($this->uid); + } + $this->emails[$i]->rewrite($emails_rewrite[$mail->email], $this->uid); } } } diff --git a/scripts/migration.sql b/scripts/migration.sql index af351b1..b33ac91 100644 --- a/scripts/migration.sql +++ b/scripts/migration.sql @@ -1,6 +1,7 @@ -- passage à diogenes ALTER TABLE `logger.sessions` ADD `auth` ENUM( 'native' ) DEFAULT 'native' NOT NULL AFTER `id`; ALTER TABLE `logger.sessions` ADD `sauth` ENUM( 'native' ) DEFAULT 'native' NOT NULL AFTER `host`; +INSERT INTO logger.actions SET text="connexion_auth_ext",description="connection via l'auth des groupes X"; -- gestion des skins ALTER TABLE `x4dat.skins` ADD COLUMN `skin_tpl` VARCHAR(32) AFTER `id`; @@ -29,7 +30,6 @@ ALTER TABLE x4dat.auth_user_md5 DROP COLUMN host; ALTER TABLE x4dat.auth_user_md5 DROP COLUMN nom_soundex; ALTER TABLE x4dat.auth_user_md5 DROP COLUMN prenom_soundex; ALTER TABLE x4dat.auth_user_md5 DROP COLUMN epouse_soundex; -INSERT INTO logger.actions SET text="connexion_auth_ext",description="connection via l'auth des groupes X"; -- drop des anciens alias --> aliases ALTER TABLE x4dat.auth_user_md5 DROP COLUMN loginbis; ALTER TABLE x4dat.auth_user_md5 DROP COLUMN username; diff --git a/templates/routage-mail.tpl b/templates/routage-mail.tpl index e5cc690..f6b143a 100644 --- a/templates/routage-mail.tpl +++ b/templates/routage-mail.tpl @@ -17,7 +17,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: routage-mail.tpl,v 1.6 2004-09-02 22:27:06 x2000habouzit Exp $ + $Id: routage-mail.tpl,v 1.7 2004-09-04 14:40:03 x2000habouzit Exp $ ***************************************************************************} {dynamic} @@ -39,12 +39,6 @@ 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 @@ -89,27 +83,30 @@ {$e->email} - active}checked="checked"{/if} /> + active}checked="checked"{/if} /> - + + {foreach from=$alias item=a} + + + {/foreach} - retirer + retirer {/foreach}
+

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

+