From bc47fc070930818f51597da0b4564f6ffbf553df Mon Sep 17 00:00:00 2001
From: x2000habouzit
Date: Sat, 4 Sep 2004 14:40:02 +0000
Subject: [PATCH] new emails layout
---
htdocs/admin/utilisateurs.php | 14 ++---
htdocs/antispam.php | 64 ++++++++++----------
htdocs/emails.php | 4 +-
htdocs/pattecassee.php | 4 +-
htdocs/routage-mail.php | 6 +-
include/email.classes.inc.php | 136 ++++++++++++++++--------------------------
scripts/migration.sql | 2 +-
templates/routage-mail.tpl | 29 ++++-----
8 files changed, 111 insertions(+), 148 deletions(-)
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} />
- |
- retirer |
+ retirer |
{/foreach}
+
Tu peux ajouter à cette liste une adresse email en la tapant ici et en cliquant sur Ajouter.
+