reworked emails class a little to improve it.
authorx2000habouzit <x2000habouzit>
Sat, 4 Sep 2004 20:14:30 +0000 (20:14 +0000)
committerx2000habouzit <x2000habouzit>
Sat, 4 Sep 2004 20:14:30 +0000 (20:14 +0000)
make utilisateurs.php use it.
it will break step4.php snce mtic.inc.php does not exist anymore.
TODO: make step4 use the Redirect class if possible

htdocs/admin/utilisateurs.php
htdocs/antispam.php
include/email.classes.inc.php
include/mtic.inc.php [deleted file]
templates/admin/utilisateurs.tpl

index dc4cf00..60510a4 100644 (file)
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: utilisateurs.php,v 1.20 2004-09-04 14:40:02 x2000habouzit Exp $
+        $Id: utilisateurs.php,v 1.21 2004-09-04 20:14:30 x2000habouzit Exp $
  ***************************************************************************/
 
 require("auto.prepend.inc.php");
 new_admin_page('admin/utilisateurs.tpl', true);
-require("xorg.misc.inc.php");
+require("email.classes.inc.php");
 
 /*
  * LOGS de l'utilisateur
@@ -51,100 +51,6 @@ if(isset($_REQUEST['suid_button']) and isset($_REQUEST['login']) and !isset($_SE
  * LE RESTE
  */
 
-$errors = Array();
-
-if(isset($_REQUEST['password']))  $pass_clair = $_REQUEST['password'];
-
-// Check if there was a submission
-foreach($_POST as $key => $val) {
-    switch ($key) {
-        case "add_fwd":
-           $email = $_REQUEST['email'];
-            if (!isvalid_email_redirection($email)) {
-                $errors[] = "invalid email $email";
-                break;
-            }
-            $globals->db->query("INSERT INTO emails (uid,email,flags) 
-                                VALUES ({$_REQUEST['user_id']},'$email','active')");
-            $errors[] = "Ajout de $email effectué";
-            break;
-
-       case "del_fwd":
-           if(empty($val)) break;
-           $globals->db->query("DELETE FROM emails WHERE uid='{$_REQUEST['user_id']}' AND email='$val'");
-           break;
-
-       case "del_alias":
-           if(empty($val)) break;
-           $globals->db->query("DELETE FROM aliases WHERE id='{$_REQUEST['user_id']}' AND alias='$val' AND type!='a_vie'");
-           $errors[] = $val." a été supprimé";
-           break;
-
-       case "add_alias":
-           $globals->db->query("INSERT INTO aliases (id,alias,type)
-                                VALUES ('{$_REQUEST['user_id']}','{$_REQUEST['email']}','alias')");
-           break;
-
-       // Editer un profil
-        case "u_edit":
-           $pass_md5B = $_REQUEST['newpass_clair'] != "********" ? md5($_REQUEST['newpass_clair']) : $_REQUEST['passw'];
-
-            $query = "UPDATE auth_user_md5 SET
-                        naissance='{$_REQUEST['naissanceN']}',
-                        password='$pass_md5B',
-                        perms='{$_REQUEST['permsN']}',
-                        prenom='{$_REQUEST['prenomN']}',
-                        nom='{$_REQUEST['nomN']}',
-                        promo='{$_REQUEST['promoN']}'
-                      WHERE user_id='{$_REQUEST['user_id']}'";
-            $globals->db->query($query);
-
-           // FIXME: recherche
-            $f = fopen("/tmp/flag_recherche","w");
-            fputs($f,"1");
-            fclose($f);
-
-            $errors[] = "updaté correctement.";
-            // envoi du mail au webmaster
-            $HEADER="From: ADMINISTRATION\nReply-To: webmaster@polytechnique.org\nX-Mailer: PHP/" . phpversion();
-            $MESSAGE="Intervention manuelle de l'administrateur login=".$_SESSION['forlife']." (UID=".$_SESSION['uid'].")\n\nOpérations effectuées\n\n\"".$query."\"\n\nCe rapport a été généré par le script d'administration";
-            mail("web@polytechnique.org","INTERVENTION ADMIN",$MESSAGE,$HEADER);
-            break;
-
-    // DELETE FROM auth_user_md5
-        case "u_kill":
-
-           $user_id = $_REQUEST['user_id'];
-
-           $query = "DELETE FROM auth_user_md5 WHERE user_id='$user_id'";
-           $globals->db->query($query);
-           $globals->db->query("delete from emails where uid=$user_id");
-           $globals->db->query("delete from binets_ins where user_id=$user_id");
-           $globals->db->query("delete from groupesx_ins where guid=$user_id");
-           $globals->db->query("delete from photo where uid=$user_id");
-           $globals->db->query("delete from perte_pass where uid=$user_id");
-           $globals->db->query("delete from user_changes where user_id=$user_id");
-           $globals->db->query("delete from aliases where id=$user_id and type in ('login','epouse','alias')");
-           $globals->db->query("delete from listes_ins where idu=$user_id");
-           $globals->db->query("delete from listes_mod where idu=$user_id");
-           $globals->db->query("delete from applis_ins where uid=$user_id");
-           $globals->db->query("delete from contacts where uid=$user_id");
-           $globals->db->query("delete from contacts where contact=$user_id");
-           // on purge les entrees dans logger
-           $res=$globals->db->query("select id from logger.sessions where uid=$user_id");
-           while (list($session_id)=mysql_fetch_row($res))
-               $globals->db->query("delete from logger.events where session=$session_id");
-           $globals->db->query("delete from logger.sessions where uid=$user_id");      
-
-           $errors[] = "'$user_id' a été supprimé !";
-           $HEADER="From: ADMINISTRATION\nReply-To: webmaster@polytechnique.org\nX-Mailer: PHP/" . phpversion();
-           $MESSAGE="Intervention manuelle de l'administrateur login=".$_SESSION['forlife']." (UID=".$_SESSION['uid'].")\n\nOpérations effectuées\n\n\"".$query."\"\n\nCe rapport a été généré par le script d'administration";
-           mail("web@polytechnique.org","INTERVENTION ADMIN",$MESSAGE,$HEADER);
-            break;
-    }
-}
-
-
 if (!empty($_REQUEST['login'])) {
     $login = $_REQUEST['login'];
     $r=$globals->db->query("SELECT  *
@@ -161,8 +67,104 @@ if (!empty($_REQUEST['user_id'])) {
     if($tmp = mysql_fetch_assoc($r)) $mr=$tmp;
     mysql_free_result($r);
 }
-    
+
 if(isset($mr)) {
+    $redirect = new Redirect($mr['user_id']);
+
+    $errors = Array();
+
+    if(isset($_REQUEST['password']))  $pass_clair = $_REQUEST['password'];
+
+    // Check if there was a submission
+    foreach($_POST as $key => $val) {
+       switch ($key) {
+           case "add_fwd":
+               $email = $_REQUEST['email'];
+               if (!isvalid_email_redirection($email)) {
+                   $errors[] = "invalid email $email";
+                   break;
+               }
+               $redirect->add_email(trim($email));
+               $errors[] = "Ajout de $email effectué";
+               break;
+
+           case "del_fwd":
+               if(empty($val)) break;
+               $redirect->delete_email($val);
+               break;
+
+           case "del_alias":
+               if(empty($val)) break;
+               $globals->db->query("DELETE FROM aliases WHERE id='{$_REQUEST['user_id']}' AND alias='$val' AND type!='a_vie'");
+               $errors[] = $val." a été supprimé";
+               break;
+
+           case "add_alias":
+               $globals->db->query("INSERT INTO aliases (id,alias,type)
+                                    VALUES ('{$_REQUEST['user_id']}','{$_REQUEST['email']}','alias')");
+               break;
+
+           // Editer un profil
+           case "u_edit":
+               $pass_md5B = $_REQUEST['newpass_clair'] != "********" ? md5($_REQUEST['newpass_clair']) : $_REQUEST['passw'];
+
+               $query = "UPDATE auth_user_md5 SET
+                           naissance='{$_REQUEST['naissanceN']}',
+                           password='$pass_md5B',
+                           perms='{$_REQUEST['permsN']}',
+                           prenom='{$_REQUEST['prenomN']}',
+                           nom='{$_REQUEST['nomN']}',
+                           promo='{$_REQUEST['promoN']}'
+                         WHERE user_id='{$_REQUEST['user_id']}'";
+               $globals->db->query($query);
+
+               // FIXME: recherche
+               $f = fopen("/tmp/flag_recherche","w");
+               fputs($f,"1");
+               fclose($f);
+
+               $errors[] = "updaté correctement.";
+               // envoi du mail au webmaster
+               $HEADER="From: ADMINISTRATION\nReply-To: webmaster@polytechnique.org\nX-Mailer: PHP/" . phpversion();
+               $MESSAGE="Intervention manuelle de l'administrateur login=".$_SESSION['forlife']." (UID=".$_SESSION['uid'].")\n\nOpérations effectuées\n\n\"".$query."\"\n\nCe rapport a été généré par le script d'administration";
+               mail("web@polytechnique.org","INTERVENTION ADMIN",$MESSAGE,$HEADER);
+               break;
+
+       // DELETE FROM auth_user_md5
+           case "u_kill":
+
+               $user_id = $_REQUEST['user_id'];
+
+               $query = "DELETE FROM auth_user_md5 WHERE user_id='$user_id'";
+               $globals->db->query($query);
+               $globals->db->query("delete from emails where uid=$user_id");
+               $globals->db->query("delete from binets_ins where user_id=$user_id");
+               $globals->db->query("delete from groupesx_ins where guid=$user_id");
+               $globals->db->query("delete from photo where uid=$user_id");
+               $globals->db->query("delete from perte_pass where uid=$user_id");
+               $globals->db->query("delete from user_changes where user_id=$user_id");
+               $globals->db->query("delete from aliases where id=$user_id and type in ('login','epouse','alias')");
+               $globals->db->query("delete from listes_ins where idu=$user_id");
+               $globals->db->query("delete from listes_mod where idu=$user_id");
+               $globals->db->query("delete from applis_ins where uid=$user_id");
+               $globals->db->query("delete from contacts where uid=$user_id");
+               $globals->db->query("delete from contacts where contact=$user_id");
+               // on purge les entrees dans logger
+               $res=$globals->db->query("select id from logger.sessions where uid=$user_id");
+               while (list($session_id)=mysql_fetch_row($res))
+                   $globals->db->query("delete from logger.events where session=$session_id");
+               $globals->db->query("delete from logger.sessions where uid=$user_id");  
+
+               $errors[] = "'$user_id' a été supprimé !";
+               $HEADER="From: ADMINISTRATION\nReply-To: webmaster@polytechnique.org\nX-Mailer: PHP/" . phpversion();
+               $MESSAGE="Intervention manuelle de l'administrateur login=".$_SESSION['forlife']." (UID=".$_SESSION['uid'].")\n\nOpérations effectuées\n\n\"".$query."\"\n\nCe rapport a été généré par le script d'administration";
+               mail("web@polytechnique.org","INTERVENTION ADMIN",$MESSAGE,$HEADER);
+               break;
+       }
+    }
+
+
+    
     $r=$globals->db->query("SELECT alias FROM aliases WHERE ( id = {$mr['user_id']} AND type='a_vie' )");
     list($forlife) = mysql_fetch_row($r);
     mysql_free_result($r);
@@ -180,27 +182,15 @@ if(isset($mr)) {
     $page->assign('lastlogin', $lastlogin);
     $page->assign('host', $host);
 
-    $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();
-    while($l = mysql_fetch_assoc($result)) {
-       $xorgmails[] = $l;
-       if($l['panne']!="0000-00-00")
-           $email_panne[] = "Adresse {$l['email']} signalée comme HS le {$l['panne']}";
-    }
-    mysql_free_result($result);
-
     $page->mysql_assign("SELECT  alias, type='a_vie' AS for_life
                           FROM  aliases
                          WHERE  id = {$mr["user_id"]}
                       ORDER BY  type!= 'a_vie'", 'aliases');
     $page->assign_by_ref('xorgmails', $xorgmails);
-    $page->assign_by_ref('email_panne', $email_panne);
+    $page->assign_by_ref('email_panne', $email_panne);    
+    $page->assign('emails',$redirect->emails);
+    $page->assign('errors',$errors);
 }
 
-$page->assign('errors',$errors);
 $page->run();
 ?>
index 62357b7..c598e75 100644 (file)
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: antispam.php,v 1.8 2004-09-04 14:40:02 x2000habouzit Exp $
+        $Id: antispam.php,v 1.9 2004-09-04 20:14:30 x2000habouzit Exp $
  ***************************************************************************/
 
 require("auto.prepend.inc.php");
 new_skinned_page('antispam.tpl', AUTH_MDP);
 
-require("mtic.inc.php");
-
 if (isset($_REQUEST['filtre']) and isset($_REQUEST['statut_filtre'])) {
     
     $new_filter = intval($_REQUEST['statut_filtre']);
index d8dad85..c8a47b4 100644 (file)
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: email.classes.inc.php,v 1.4 2004-09-04 14:40:03 x2000habouzit Exp $
+        $Id: email.classes.inc.php,v 1.5 2004-09-04 20:14:30 x2000habouzit Exp $
  ***************************************************************************/
 
-require("xorg.misc.inc.php");
-require("mtic.inc.php");
+require_once("xorg.misc.inc.php");
 define("SUCCESS", 1);
 define("ERROR_INACTIVE_REDIRECTION", 2);
 define("ERROR_INVALID_EMAIL", 3);
 define("ERROR_LOOP_EMAIL", 4);
 
+define("MTIC_DOMAINS", "/etc/postfix/forward-domaines.conf");
+
+function check_mtic($email) {
+    list($local,$domain) = explode("@",$email);
+    // lecture du fichier de configuration
+    $tab = file(MTIC_DOMAINS);
+    foreach ($tab as $ligne) {
+       if ($ligne{0} == '#') continue;           // on saute les commentaires
+       // pour chaque ligne, on regarde si la première partie qui correspond au domaine du destinataire
+       // matche le domaine de l'email donnée
+       list($regexp) = explode(':',$ligne);
+       if (eregi($regexp,$domain)) return true;  // c'est le cas, on revoie true
+    }
+    return false;
+}
+
 class Email {
     var $email;
     var $active;
     var $rewrite;
     var $mtic;
+    var $panne;
 
     function Email($row) {
-        list($this->email,$this->active,$this->rewrite,$this->mtic)
+        list($this->email,$this->active,$this->rewrite,$this->mtic,$this->panne)
         = $row;
     }
 
@@ -80,7 +96,7 @@ class Redirect {
         global $globals;
        $this->uid=$_uid;
         $result = $globals->db->query("
-           SELECT email, FIND_IN_SET('active',flags), rewrite, FIND_IN_SET('mtic',flags) 
+           SELECT email, FIND_IN_SET('active',flags), rewrite, FIND_IN_SET('mtic',flags),panne
              FROM emails WHERE uid = $_uid AND NOT FIND_IN_SET('filter',flags)");
         while ($row = mysql_fetch_row($result)) {
            $this->emails[] = new Email($row);
@@ -129,7 +145,7 @@ class Redirect {
        foreach($this->emails as $mail) {
            if($mail->email == $email_stripped) return SUCCESS;
        }
-        $this->emails[] = new Email(array($email,1,'',$mtic));
+        $this->emails[] = new Email(array($email,1,'',$mtic,'0000-00-00'));
         return SUCCESS;
     }
 
diff --git a/include/mtic.inc.php b/include/mtic.inc.php
deleted file mode 100644 (file)
index dddf1f6..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-/***************************************************************************
- *  Copyright (C) 2003-2004 Polytechnique.org                              *
- *  http://opensource.polytechnique.org/                                   *
- *                                                                         *
- *  This program is free software; you can redistribute it and/or modify   *
- *  it under the terms of the GNU General Public License as published by   *
- *  the Free Software Foundation; either version 2 of the License, or      *
- *  (at your option) any later version.                                    *
- *                                                                         *
- *  This program is distributed in the hope that it will be useful,        *
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
- *  GNU General Public License for more details.                           *
- *                                                                         *
- *  You should have received a copy of the GNU General Public License      *
- *  along with this program; if not, write to the Free Software            *
- *  Foundation, Inc.,                                                      *
- *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
- ***************************************************************************
-        $Id: mtic.inc.php,v 1.2 2004-08-31 11:16:48 x2000habouzit Exp $
- ***************************************************************************/
-
-$mtic_domains = "/etc/postfix/forward-domaines.conf";
-$mtic_mailforward = '"|/home/listes/mailforward ';
-
-
-
-/** nettoyage du champ email s'il contient la redirection
- * @param $email email
- * @return le email épuré
- * @see utilisée nulle part
- */
-function clean_mtic($email) {
-       global $mtic_mailforward;
-       $len = strlen($mtic_mailforward);
-       if (strncmp($mtic_mailforward,$email,$len) == 0) {
-               // on vire le debut (mtic_mailforward) et le dernier caractere
-               $email = substr($email,$len, -1);
-       }
-       return $email;
-}
-
-
-
-/** on regarde l'adresse et on ajoute la redirection si necessaire
- * @param $email email
- * @return true || false
- * @see emails.php
- * @see step4.php
- */
-function check_mtic($email) {
-       global $mtic_domains,$mtic_mailforward;
-       list($local,$domain) = explode("@",$email);
-       // lecture du fichier de configuration
-       $tab = file($mtic_domains);
-       foreach ($tab as $ligne) {
-               if ($ligne{0} != '#') { // on saute les commentaires
-                       // pour chaque ligne, on regarde si la première partie
-                       // qui correspond au domaine du destinataire
-                       // matche le domaine de l'email donnée
-                       $a = explode(':',$ligne);
-                       $regexp = $a[0];
-                       if (eregi($regexp,$domain)) {
-                               // c'est le cas, on revoie true
-                               return true;
-                       }
-               }
-       }
-       return false;
-}
-
-
-
-?>
index 2fb93ca..46e105a 100644 (file)
@@ -17,7 +17,7 @@
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: utilisateurs.tpl,v 1.13 2004-09-02 23:06:11 x2000habouzit Exp $
+        $Id: utilisateurs.tpl,v 1.14 2004-09-04 20:14:31 x2000habouzit Exp $
  ***************************************************************************}
 
 
@@ -225,16 +225,17 @@ function del_fwd(fwd) {
         Redirections
       </th>
     </tr>
-    {foreach item=mail from=$xorgmails}
+    {foreach item=mail from=$emails}
     <tr>
       <td class="titre">
-        n°{$mail.num} ({$mail.flags})
+        {if $mail->active}active{/if}
+        {if $mail->mtic}(mtic){/if}
       </td>
       <td>
-        {$mail.email}
+        {$mail->email}
       </td>
       <td class="action">
-        <a href="javascript:del_fwd('{$mail.email}')">delete</a>
+        <a href="javascript:del_fwd('{$mail->email}')">delete</a>
       </td>
     </tr>
     {/foreach}
@@ -248,19 +249,20 @@ function del_fwd(fwd) {
       <td class="action">
         <input type="hidden" name="user_id" value="{$mr.user_id}" />
         <input type="hidden" name="del_fwd" value="" />
-        <input type="hidden" name="num" value="{$next_num}" />
         <input type="submit" name="add_fwd" value="Ajouter" />
       </td>
     </tr>
   </table>
 </form>
 
+{foreach from=$emails item=mail}
+{if $email->panne && $email->panne neq "0000-00-00"}
 <p class="erreur">
-{foreach from=$email_panne item=e}
-{$p}<br />
-{/foreach}
+Panne pour l'email "{$mail->email}" le {$mail->panne|date_format:"%d %b %Y"}
 </p>
 {/if}
+{/foreach}
+{/if}
 {/if}
 
 {/dynamic}