* 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");
$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;
$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();
$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);
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);
* 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");
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();
?>
* 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");
$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');
* 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");
$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");
* 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");
$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'])));
* 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");
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;
}
}
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;
$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);
}
}
}
-- 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`;
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;
* 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}
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>
Ton adresse de redirection {$smarty.request.email} fait partie d'un domaine refusant
<tr class="{cycle values="pair,impair"}">
<td><strong>{$e->email}</strong></td>
<td>
- <input type="checkbox" name="emails_actifs[]" value="{$e->num}" {if $e->active}checked="checked"{/if} /></td>
+ <input type="checkbox" name="emails_actifs[]" value="{$e->email}" {if $e->active}checked="checked"{/if} /></td>
<td>
- <select name="emails_rewrite[{$e->num}]">
- <option value="poly" {if $e->rewrite == 1 and $e->m4x == 0}selected="selected"{/if}>
- polytechnique.org</option>
- <option value="m4x" {if $e->rewrite == 1 and $e->m4x == 1}selected="selected"{/if}>
- m4x.org</option>
- <option value="no" {if $e->rewrite == 0}selected="selected"{/if}>
- aucune</option>
+ <select name="emails_rewrite[{$e->email}]">
+ <option value=''>--- aucune ---</option>
+ {foreach from=$alias item=a}
+ <option {if $e->rewrite eq "`$a.alias`@polytechnique.org"}selected='selected'{/if}
+ value='{$a.alias}@polytechnique.org'>{$a.alias}@polytechnique.org</option>
+ <option {if $e->rewrite eq "`$a.alias`@m4x.org"}selected='selected'{/if}
+ value='{$a.alias}@m4x.org'>{$a.alias}@m4x.org</option>
+ {/foreach}
</select>
</td>
- <td><a href="{$smarty.server.PHP_SELF}?emailop=retirer&num={$e->num}">retirer</a></td>
+ <td><a href="{$smarty.server.PHP_SELF}?emailop=retirer&email={$e->email}">retirer</a></td>
</tr>
{/foreach}
</table>
<br />
<input type="submit" value="Mettre à jour les emails actifs" name="emailop" />
</div>
+</form>
<p>
Tu peux ajouter à cette liste une adresse email en la tapant ici et en cliquant sur Ajouter.
</p>
+<form action="{$smarty.server.PHP_SELF}" method="post">
<div>
<input type="text" size="35" maxlength="60" name="email" value="" />