pas mal de debug p/r au SU et exit.php
authorx2000habouzit <x2000habouzit>
Wed, 11 Feb 2004 20:00:35 +0000 (20:00 +0000)
committerx2000habouzit <x2000habouzit>
Wed, 11 Feb 2004 20:00:35 +0000 (20:00 +0000)
ajout de admin/utilisateurs.php (et croyez moi, il y a encore du boulot sur cette page)

12 files changed:
etat_migration
htdocs/admin/utilisateurs.php [new file with mode: 0644]
htdocs/css/default.css
htdocs/exit.php
include/db_connectpolyedu.inc.php [new file with mode: 0644]
include/xorg.misc.inc.php [new file with mode: 0644]
include/xorg.page.inc.php
plugins/insert.getNbIns.php
plugins/insert.mkStats.php
templates/admin/utilisateurs.head.tpl [new file with mode: 0644]
templates/admin/utilisateurs.tpl [new file with mode: 0644]
templates/skin/default.tpl

index 17f4d4a..65749d6 100644 (file)
@@ -24,14 +24,16 @@ Etat  | Ancien nom                                                            | Nouveau nom
          | admin/evenements.php                                          | 
          | admin/homonymes.php                                           | 
          | admin/ins_confirmees.php                              | 
-         | admin/marketing.php                                           | 
-         | admin/marketing_promo.php                             | 
-         | admin/marketing_volontaire.php                        | 
          | admin/pg.php                                                          | 
-         | admin/relance.php                                             | 
          | admin/utilisateurs.php                                        | 
-         | admin/utilisateurs_identification.php         | 
-         | admin/utilisateurs_marketing.php              | 
+------+-[ marketing ]-----------------------------+----------------
+         | admin/marketing.php                                           | marketing/
+         | admin/marketing_promo.php                             | marketing/
+         | admin/marketing_volontaire.php                        | marketing/
+         | admin/relance.php                                             | marketing/ 
+         | admin/utilisateurs_identification.php         | marketing/
+         | admin/utilisateurs_marketing.php              | marketing/
+         | marketing.php                                                         | marketing/index
 ------+-[ docs ]----------------------------------+----------------
          | docs/FROM.php                                                         | docs/from.php
          | en-cours.php                                                          | docs/en-cours.php
@@ -81,7 +83,6 @@ Etat  | Ancien nom                                                              | Nouveau nom
          | emploi_public.php                                             | 
          | evenements.php                                                        | 
          | index.coupure.php                                             | 
-         | marketing.php                                                         | 
          | mescontacts.php                                                       | 
          | mescontacts_pdf.php                                           | 
          | pg.confirm.php                                                        | 
diff --git a/htdocs/admin/utilisateurs.php b/htdocs/admin/utilisateurs.php
new file mode 100644 (file)
index 0000000..dcc64fd
--- /dev/null
@@ -0,0 +1,343 @@
+<?php
+require("auto.prepend.inc.php");
+new_admin_page('admin/utilisateurs.tpl', true, 'admin/utilisateurs.head.tpl');
+require("db_connectpolyedu.inc.php");
+require("xorg.misc.inc.php");
+
+$assignates = Array(
+        'add_email', 'add_polyedu_alias', 'aliasalias_edu', 'email', 'fwd', 'hashpass', 'homonyme',
+        'id_edu', 'login', 'loginbis', 'matricule', 'naissanceN', 'newpass_clair', 'nomN', 'num',
+        'oldlogin', 'olduid', 'passw', 'password1', 'perms', 'permsN', 'prenomN', 'promoN',
+        'remove_email', 'remove_polyedu_alias', 'select', 'suid_button', 'user_id', 'u_edit',
+        'u_kill', 'u_kill_conf'
+);
+foreach($assignates as $ass) $$ass=isset($_REQUEST[$ass]) ? $_REQUEST[$ass] : '';
+
+$errors = Array();
+$succes = Array();
+function my_error($msg) { global $erreur; $erreur[] = "<p class='erreur'>Erreur: $msg</p>"; }
+function my_msg($msg)   { global $succes; $succes[] = "<p class='succes'>O.K.: $msg</p>"; }
+
+
+/*
+ * SUID
+ */
+if(isset($_REQUEST['suid_button']) and isset($_REQUEST['login'])
+        and !isset($_SESSION['suid']) // pas de su imbriqués
+  ) {
+    $res = @mysql_query( "SELECT user_id,prenom,nom,promo,perms FROM auth_user_md5 WHERE username='{$_REQUEST['login']}'",$conn);
+    if(@mysql_num_rows($res) != 0) {
+        list($uid,$prenom,$nom,$promo,$perms)=mysql_fetch_row($res);
+        // on déplace le log de l'admin dans slog, et on crée un log de suid en log
+        // on loggue le démarrage de la session suid pour l'admin et l'utilisateur
+        $log_data = $_REQUEST['login']." by ".$_SESSION['username'];
+        $_SESSION['log']->log("suid_start",$log_data);
+        $_SESSION['slog'] = $_SESSION['log'];
+        $_SESSION['log'] = new DiogenesCoreLogger($uid,$_SESSION['uid']);
+        $_SESSION['log']->log("suid_start",$log_data);
+        // on modifie les variables de session suffisantes pour faire un su
+        // rem : la skin n'est pas modifiée
+        $_SESSION['suid'] = $_SESSION['uid'];
+        $_SESSION['username'] = $_REQUEST['login'];
+        $_SESSION['perms'] = $perms;
+        $_SESSION['uid'] = $uid;
+        $_SESSION['prenom'] = $prenom;
+        $_SESSION['nom'] = $nom;
+        $_SESSION['promo'] = $promo;
+    }
+    header("Location: ../");
+}
+
+if(isset($_REQUEST['password']))  $pass_clair = $_REQUEST['password'];
+
+// Check if there was a submission
+foreach($_POST as $key => $val) {
+    switch ($key) {
+    // ajout d'email
+        case "add_email":
+            if (!isvalid_email_redirection($email)) {
+                my_error("invalid email");
+                break;
+            }
+            mysql_query("INSERT INTO emails (uid,num,email,flags) VALUES ($user_id,$num,'$email','active')",$conn);
+            my_msg("Ajout de $email effectué"); 
+            break;
+
+    // supprime un email
+
+        case "remove_email":
+            mysql_query("delete from emails where uid=$user_id and email = '$email'",$conn);
+            my_msg("Suppression de $email effectué"); 
+            break;
+
+    // ajoute un alias sur polyedu
+        case "add_polyedu_alias":
+            $db_edu = connect_polyedu();
+            if($db_edu) {
+            // récupération de l'id_edu
+                $result=mysql_query("select id from x where matricule='$matricule'",$db_edu);
+                $id_edu=false;
+                if(!$result) {
+                    my_error("Erreur select dans x: ".mysql_error($db_edu));
+                } elseif (mysql_num_rows($result) == 0) {
+                    // pas d'X du matricule correspondant dans la base !
+                    // il faut l'ajouter
+                    $id_edu=0;
+                } elseif (list($id_edu) = mysql_fetch_row($result)) {
+                    // rien à faire, id_edu a la bonne valeur
+                } else {
+                    my_error("Impossible d'obtenir l'id_edu, recommence ".mysql_error($db_edu));
+                }
+                if($result) mysql_free_result($result);
+                if(is_bool($id_edu) and !$id_edu) {
+                    mysql_close($db_edu);
+                    break;
+                }
+                // ajout de l'entrée dans aliases
+                if($alias_edu == '') {
+                    $alias_edu = $login;
+                }
+                // vérification de la présence d'un alias
+                $alias_exist=false;
+                $alias_pris=false;
+                $exist_id_edu=0;
+                $result = mysql_query("select a.id, x.matricule, u.prenom, u.nom from aliases as a LEFT JOIN x USING(id) LEFT JOIN users as u ON(u.id=a.id) where a.alias = '$alias_edu'",$db_edu);
+                if(!$result) {
+                    my_error("Erreur select dans aliases, x et users: ".mysql_error($db_edu));
+                    mysql_close($db_edu);
+                    break;
+                } elseif (mysql_num_rows($result) == 0) {
+                    // pas d'alias, il faut l'ajouter
+                } elseif (list($exist_id_edu,$xmatricule_edu,$prenom_edu, $nom_edu) = mysql_fetch_row($result)) {
+                    $alias_exist=true;
+                    if(isset($xmatricule_edu) and $xmatricule_edu != $matricule) {
+                        my_error("Alias $login déjà pris par un autre X : $xmatricule_edu");
+                        $alias_pris=true;
+                    } elseif(isset($nom_edu)) {
+                        my_error("Alias $login déjà pris par un non-X : $prenom_edu $nom_edu ");
+                        $alias_pris=true;
+                    }
+                } else {
+                    my_error("Impossible d'obtenir l'alias_edu, recommence ".mysql_error($db_edu));
+                    mysql_close($db_edu);
+                    break;
+                }
+                if($result) mysql_free_result($result);
+                if($alias_pris) {
+                    mysql_close($db_edu);
+                    break;
+                }
+                if(!$alias_exist) { // l'alias n'existe pas, on l'ajoute
+                    mysql_query("insert into aliases (id,type,alias) VALUES ($id_edu,'X','$alias_edu')",$db_edu);
+                    if (mysql_errno($db_edu) != 0) {
+                        my_error("Failed: ".mysql_errno($db_edu).", ".mysql_error($db_edu));
+                        mysql_close($db_edu);
+                        break;
+                    }
+                    $exist_id_edu = ($id_edu?$id_edu:mysql_insert_id($db_edu));
+                }
+                // ajout de l'entrée dans la table X si nécessaire
+                // arrive typiquement en mode réparation
+                if ($id_edu == 0) {
+                    // il faut ajouter l'enregistrement dans la table X
+                    mysql_query("insert into x (id,matricule) values ($exist_id_edu,$matricule)",$db_edu);
+                    if (mysql_errno($db_edu) != 0) {
+                        my_error("Erreur ajout dans la table X: ".mysql_errno($db_edu).", ".mysql_error($db_edu));
+                        mysql_close($db_edu);
+                        break;
+                    }
+                    $id_edu = $exist_id_edu;
+                }
+                // on vérifie que le champ email est bien présent dans la table emails
+                $result=mysql_query("select email, flags, FIND_IN_SET('active', flags) from emails where id='$id_edu'",$db_edu);
+                if(!$result) {
+                    my_error("Erreur select dans emails: ".mysql_error($db_edu));
+                    mysql_close($db_edu);
+                    break;
+                }
+                if (list($email_edu, $flags_edu, $active_edu) = mysql_fetch_row($result)
+                        and $email_edu == ($login."@m4x.org")
+                        and $active_edu != 0) {
+                    // c'est ok
+                    my_msg("Ajout de $alias_edu sur polyedu effectué"); 
+                    mysql_free_result($result);
+                    mysql_close($db_edu);
+                    break;
+                }
+                mysql_free_result($result);
+                // pas d'email ou mauvais email pour l'X
+                // il faut supprimer l'ancien et ajouter le nouveau
+                mysql_query("delete from emails where id = $id_edu",$db_edu);
+                mysql_query("insert into emails (id,email,flags) values ($id_edu,'$login@m4x.org','active,$flags_edu')",$db_edu);
+                if (mysql_errno($db_edu) != 0) {
+                    my_error("Erreur ajout dans la table email: ".mysql_errno($db_edu).", ".mysql_error($db_edu));
+                } else {
+                    my_msg("Ajout de $alias_edu et email sur polyedu effectué"); 
+                }
+                mysql_close($db_edu);
+            } // if($db_edu)
+            else {
+                my_error("Connexion à la BD polyedu impossible");
+            } // if(!$db_edu)
+            break;
+
+    // supprime un alias sur polyedu
+        case "remove_polyedu_alias":
+            $db_edu = connect_polyedu();
+            if($db_edu) {
+                mysql_query("delete from aliases where id='$id_edu' and alias = '$alias_edu'",$db_edu);
+                if (mysql_errno($db_edu) != 0) {
+                    my_error("Failed: ".mysql_error($db_edu));
+                } else {
+                    my_msg("Suppression de $alias_edu effectué"); 
+                }
+                mysql_close($db_edu);
+            } // if($db_edu)
+            else {
+                my_error("Connexion à la BD polyedu impossible: ".mysql_error($db_edu));
+            } // if(!$db_edu)
+            break;
+
+    // Faire un suid (une partie du code se trouve tout là-haut pour affecter l'affichage du menu)
+        case "suid_button":
+            if(isset($_SESSION['suid'])) {
+                my_msg("SUID effectué, clique sur exit pour quitter."); 
+            } else {
+                my_error("login inconnu, suid non effectué.");
+            }
+            break;
+
+
+        // Editer un profil
+        case "u_edit":
+            if ($newpass_clair != "********")  {
+                $pass_md5B=md5($newpass_clair);
+            } else {
+                $pass_md5B=$passw;
+            }
+
+            $query = "UPDATE auth_user_md5 SET
+                        username='$login',
+                        naissance=$naissanceN,
+                        password='$pass_md5B',
+                        perms='$permsN',
+                        loginbis='$loginbis',
+                        prenom='$prenomN',
+                        nom='$nomN',
+                        promo=$promoN,
+                        alias='$alias'
+                      WHERE user_id=$olduid";
+
+            mysql_query($query,$conn);
+            if (mysql_errno($conn) != 0) {
+                my_error("<b>Failed:</b> $query");
+                break;
+            }
+            my_msg("\"$login\" 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['username']." (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":
+
+            $result=mysql_query("select user_id from auth_user_md5 where username='$login'",$conn);
+            if(list($user_id) = mysql_fetch_row($result)) {
+                $query = "DELETE FROM auth_user_md5 WHERE username='$login'";
+                mysql_query($query,$conn);
+                mysql_query("delete from emails where uid=$user_id",$conn);
+                mysql_query("delete from binets_ins where user_id=$user_id",$conn);
+                mysql_query("delete from groupesx_ins where guid=$user_id",$conn);
+                mysql_query("delete from photo where uid=$user_id",$conn);
+                mysql_query("delete from perte_pass where uid=$user_id",$conn);
+                mysql_query("delete from user_changes where user_id=$user_id",$conn);
+                mysql_query("delete from aliases where id=$user_id and type in ('login','epouse','alias')",$conn);
+                mysql_query("delete from listes_ins where idu=$user_id",$conn);
+                mysql_query("delete from listes_mod where idu=$user_id",$conn);
+                mysql_query("delete from forums_abo where uid=$user_id",$conn);
+                mysql_query("delete from applis_ins where uid=$user_id",$conn);
+                mysql_query("delete from contacts where uid=$user_id",$conn);
+                mysql_query("delete from contacts where contact=$user_id",$conn);
+                // on purge les entrees dans logger
+                $res=mysql_query("select id from logger.sessions where uid=$user_id",$conn);
+                while (list($session_id)=mysql_fetch_row($res)) 
+                    mysql_query("delete from logger.events where session=$session_id",$conn);
+                mysql_query("delete from logger.sessions where uid=$user_id",$conn);   
+
+                my_msg(" \"$login\" a été supprimé !<BR>");
+                $HEADER="From: ADMINISTRATION\nReply-To: webmaster@polytechnique.org\nX-Mailer: PHP/" . phpversion();
+                $MESSAGE="Intervention manuelle de l'administrateur login=".$_SESSION['username']." (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);
+            } else {
+                my_error("pas de login $login");
+            }
+            break;
+    }
+}
+
+
+$page->assign('login', $login);
+
+if (!empty($_REQUEST['select'])) {
+    $numeric_login = false;
+    $looking_field = 'username';
+    if (preg_match("/^\d*$/",$login)) {
+        $numeric_login = true;
+        $looking_field = 'user_id';
+    }
+    $r=mysql_query("select * from auth_user_md5 where $looking_field='$login' order by username",$conn);
+    if ($mr=mysql_fetch_assoc($r)){
+        if ($numeric_login) $login = $mr['username'];
+        $param=mysql_query("SELECT UNIX_TIMESTAMP(lastlogin) FROM auth_user_md5 WHERE username='$login'",$conn);
+        list($lastlogin) = mysql_fetch_row($param);
+        mysql_free_result($param);
+
+        $page->assign_by_ref('mr',$mr);
+
+        $str=false;
+        
+        $db_edu = connect_polyedu();
+        if($db_edu) {
+            $page->assign('db_edu', 1);
+            $result=mysql_query("SELECT x.id, a.alias, e.email, FIND_IN_SET('active', e.flags) AS act
+                                 FROM x LEFT JOIN aliases AS a USING(id)
+                                 LEFT JOIN emails as e ON(e.id=x.id)
+                                 WHERE x.matricule = {$mr['matricule']}",$db_edu);
+            if(!$result) {
+                $str="Erreur sur la requ&ecirc;te: ".mysql_error($db_edu);
+            } elseif(mysql_num_rows($result) == 0) {
+                $str="Pas d'entrée dans la base !";
+            } else {
+                $alias_edu = Array();
+                while($alias_edu[] = mysql_fetch_assoc($result));
+                array_pop($alias_edu);
+                $page->assign_by_ref('alias_edu', $alias_edu);
+            } // mysql_num_rows != 0
+            mysql_free_result($result);
+            mysql_close($db_edu);
+        }
+
+        $sql = "SELECT email, num, flags, panne
+                FROM emails
+                WHERE num != 0 AND uid = {$mr['user_id']} order by num";
+        $result=mysql_query($sql,$conn);
+        $xorgmails = Array();
+        $email_panne = "";
+        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']}<br />";
+            $next_num = $l['num']+1;
+        }
+        mysql_free_result($result);
+        
+        $page->assign_by_ref('xorgmails', $xorgmails);
+        $page->assign('email_panne', $email_panne);
+        $page->assign('next_num', $next_num);
+    } // if(mysql_fetch_row)
+}
+
+$page->display();
+?>
index 5896c6f..2390a74 100644 (file)
@@ -171,10 +171,13 @@ table.tinybicol td.info, table.bicol td.info {
 /*************************/
 
 #suid {
-    color: white;
-    background: red;
+    color: red;
+    background: pink;
     width: 100%;
+    font-weight: bold;
 }
+#suid td { padding: 2px; }
+#suid a { color: red; }
 
 #body {
     width: 740px;
@@ -245,4 +248,4 @@ table.tinybicol td.info, table.bicol td.info {
     vertical-align: top;
 }
 /* vim: set et ts=4 sts=4 sw=4: */
-/* $Id: default.css,v 1.14 2004-02-11 15:35:32 x2000habouzit Exp $ */
+/* $Id: default.css,v 1.15 2004-02-11 20:00:37 x2000habouzit Exp $ */
index 62c6e27..a631030 100644 (file)
@@ -1,10 +1,5 @@
 <?php
-require("auto.prepend.inc.php")
-
-# 
-# TODO : CODE à vérifier : je ne sais pas si la page va bien s'afficher au final, c'est pas sur du tout...
-# 
-
+require("auto.prepend.inc.php");
 new_skinned_page('index.tpl',AUTH_MDP);
 
 if (isset($_SESSION['suid'])) {
@@ -29,5 +24,5 @@ if (isset($_SESSION['suid'])) {
     }
 }
 
-$page->display();
+header("Location: login.php");
 ?>
diff --git a/include/db_connectpolyedu.inc.php b/include/db_connectpolyedu.inc.php
new file mode 100644 (file)
index 0000000..6a623ca
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+require("config.xorg.inc.php");
+
+
+
+/** connexion à polyedu.polytechnique.fr
+ * @return une connexion MySQL
+ * @see admin/utilisateurs.php
+ * @see step4.php
+ * @see x.php
+ */
+function connect_polyedu () {
+       global $dbuser, $dbpwd;
+       // pas pour les test
+       $dbhost = "polyedu.polytechnique.fr";
+       $db_edu = @mysql_connect($dbhost,$dbuser,$dbpwd);
+       if (!$db_edu) {
+               echo mysql_error();
+               return false;
+       } else {
+               mysql_select_db("polyedu",$db_edu);
+               return $db_edu;
+       }
+}
+
+
+
+?>
diff --git a/include/xorg.misc.inc.php b/include/xorg.misc.inc.php
new file mode 100644 (file)
index 0000000..8350763
--- /dev/null
@@ -0,0 +1,84 @@
+<?php
+/** vérifie si une adresse email (sans @) correspond à un username ou alias ou une liste...
+ * @param $email l'adresse email a verifier
+ * @return BOOL
+ */
+function isvalid_email_local($email) {
+  // ATTENTION, les requêtes sur le username et l'alias ne doivent pas être faites
+  // dans la même requête MySQL, car elles portent sur 2 index de la table avec un OR
+  // et MySQL ne sait pas utiliser les index dans ce cas
+  // (ce n'est plus vrai dans MySQL 4.x donc quand on y passera, on pourra
+  // combiner les 2 requêtes suivantes en une seule)
+  $req = mysql_query("select count(*) from auth_user_md5 where username='$email'");
+  list($nb)=mysql_fetch_row($req);
+  mysql_free_result($req);
+  if ($nb>0) return true;
+
+  $req = mysql_query("select count(*) from auth_user_md5 where alias='$email'");
+  list($nb)=mysql_fetch_row($req);
+  mysql_free_result($req);
+  if ($nb>0) return true;
+
+  // vérification des adresses types $liste et $liste-request
+  // ATTENTION, il ne faut pas accepter les adresses types owner-$liste et sm-$liste
+  $req = mysql_query("select count(*) from aliases where (alias='$email' and type='liste') or (alias='$email-request' and type='liste-request')");
+  list($nb)=mysql_fetch_row($req);
+  mysql_free_result($req);
+  if ($nb>0) return true;
+
+  // reste à vérifier si c'est pas une adresse dans /etc/aliases
+  // surement possible en utilisant postmap -q $email hash:/etc/aliases
+
+  return false;
+}
+
+/** vérifie si une adresse email convient comme adresse de redirection 
+ * @param $email l'adresse email a verifier
+ * @return BOOL
+ */
+function isvalid_email_redirection($email) {
+  return isvalid_email($email) && 
+         !preg_match("/@(polytechnique\.(org|edu)|melix\.(org|net)|m4x\.org)$/", $email);
+}
+
+/* Un soundex en français posté par Frédéric Bouchery
+Voici une adaptation en PHP de la fonction soundex2 francisée de Frédéric BROUARD (http://sqlpro.developpez.com/Soundex/).
+C'est une bonne démonstration de la force des expressions régulières compatible Perl.
+trouvé sur http://expreg.com/voirsource.php?id=40&type=Chaines%20de%20caract%E8res */
+function soundex_fr($sIn)
+{ 
+    // Si il n'y a pas de mot, on sort immédiatement 
+    if ( $sIn === '' ) return '    '; 
+    // On met tout en minuscule 
+    $sIn = strtoupper( $sIn ); 
+    // On supprime les accents 
+    $sIn = strtr( $sIn, 'ÂÄÀÇÈÉÊ˼ÎÏÔÖÙÛÜ', 'AAASEEEEEIIOOUUU' ); 
+    // On supprime tout ce qui n'est pas une lettre 
+    $sIn = preg_replace( '`[^A-Z]`', '', $sIn ); 
+    // Si la chaîne ne fait qu'un seul caractère, on sort avec. 
+    if ( strlen( $sIn ) === 1 ) return $sIn . '   '; 
+    // on remplace les consonnances primaires 
+    $convIn = array( 'GUI', 'GUE', 'GA', 'GO', 'GU', 'CA', 'CO', 'CU', 'Q', 'CC', 'CK' ); 
+    $convOut = array( 'KI', 'KE', 'KA', 'KO', 'K', 'KA', 'KO', 'KU', 'K', 'K', 'K' ); 
+    $sIn = str_replace( $convIn, $convOut, $sIn ); 
+    // on remplace les voyelles sauf le Y et sauf la première par A 
+    $sIn = preg_replace( '`(?<!^)[EIOU]`', 'A', $sIn ); 
+    // on remplace les préfixes puis on conserve la première lettre 
+    // et on fait les remplacements complémentaires 
+    $convIn = array( '`^KN`', '`^(PH|PF)`', '`^MAC`', '`^SCH`', '`^ASA`', '`(?<!^)KN`', '`(?<!^)(PH|PF)`', '`(?<!^)MAC`', '`(?<!^)SCH`', '`(?<!^)ASA`' ); 
+    $convOut = array( 'NN', 'FF', 'MCC', 'SSS', 'AZA', 'NN', 'FF', 'MCC', 'SSS', 'AZA' ); 
+    $sIn = preg_replace( $convIn, $convOut, $sIn ); 
+    // suppression des H sauf CH ou SH 
+    $sIn = preg_replace( '`(?<![CS])H`', '', $sIn ); 
+    // suppression des Y sauf précédés d'un A 
+    $sIn = preg_replace( '`(?<!A)Y`', '', $sIn ); 
+    // on supprime les terminaisons A, T, D, S 
+    $sIn = preg_replace( '`[ATDS]$`', '', $sIn ); 
+    // suppression de tous les A sauf en tête 
+    $sIn = preg_replace( '`(?!^)A`', '', $sIn ); 
+    // on supprime les lettres répétitives 
+    $sIn = preg_replace( '`(.)\1`', '$1', $sIn ); 
+    // on ne retient que 4 caractères ou on complète avec des blancs 
+    return substr( $sIn . '    ', 0, 4); 
+} 
+?>
index 80947c1..0eb9dee 100644 (file)
@@ -44,6 +44,8 @@ class XorgPage extends DiogenesCorePage {
   }
 
   function display($append_to_id="") {
+      if(isset($_SESSION['suid']))
+          $this->caching=false;
       $id = $this->make_id($append_to_id);
       if($this->_page_type == POPUP)
           parent::display('skin/'.$_SESSION['skin_popup'], $id);
index 92782de..bad6913 100644 (file)
@@ -10,8 +10,9 @@
  */
 function smarty_insert_getNbIns($params, &$smarty)
 {
+    global $conn;
     $result=mysql_query("SELECT COUNT(*) FROM auth_user_md5 AS a INNER JOIN identification AS i
-            ON a.matricule=i.matricule where i.deces = 0");
+            ON a.matricule=i.matricule where i.deces = 0",$conn);
     list($stats_count)=mysql_fetch_row($result);
     mysql_free_result($result);
     return "$stats_count";
index 87a6d72..f8d4b2f 100644 (file)
@@ -1,7 +1,8 @@
 <?php
 function nb_trk($pri,$tr) {
+    global $conn;
     $req = mysql_query("select count(rq_id) from trackers.requests left join trackers.states as st using(st_id)
-            where tr_id='$tr' and admin_id<=0 and pri='$pri' and st.texte!='fermé'");
+            where tr_id='$tr' and admin_id<=0 and pri='$pri' and st.texte!='fermé'", $conn);
     list($res) = mysql_fetch_row($req);
     mysql_free_result($req);
     return ($res?$res:"-");
@@ -27,7 +28,8 @@ function url()
  */
 function smarty_insert_mkStats($params, &$smarty)
 {
-    $req = mysql_query("select count(*) from requests");
+    global $conn;
+    $req = mysql_query("select count(*) from requests",$conn);
     list($stats_req) = mysql_fetch_row($req);
     mysql_free_result($req);
     $stats_req = ($stats_req ? $stats_req : "-");
diff --git a/templates/admin/utilisateurs.head.tpl b/templates/admin/utilisateurs.head.tpl
new file mode 100644 (file)
index 0000000..3575779
--- /dev/null
@@ -0,0 +1,37 @@
+{* $Id: utilisateurs.head.tpl,v 1.1 2004-02-11 20:00:38 x2000habouzit Exp $ *}
+
+{literal}
+<script language="javascript" type="text/javascript" src="md5.js"></script>
+<style type="text/css" media="screen,print">
+  <!-- 
+  p.succes {font-weight: bold;}
+  table.admin {width: 100%; color: #000000; background-color: #eeeeee;}
+  table.admin th.login,th.password,th.perms {border-top: 1px solid black;}
+  table.admin th.login,td.login {background-color: #f9e89b;}
+  table.admin td.loginr {background-color: #f9e89b; font-weight: bold; text-align: right;}
+  table.admin th.action,td.action {background-color: blue; color: yellow;}
+  table.admin th.password,th.perms,td.password,td.perms {background-color: #ffc0c0;}
+  table.admin th.detail {text-align: center;}
+  table.admin th.alias,td.alias { background-color: #F9E89B;}
+  table.admin th.polyedu,td.polyedu { border-top: 1px solid black; border-bottom: 1px solid black;}
+  table.admin th.alias {text-align: center;}
+  -->
+</style>
+
+<script language="javascript" type="text/javascript">
+<!--
+function doAddUser() {
+    document.add.hashpass.value = MD5(document.add.password.value);
+    document.add.password.value = "";
+    document.add.submit();
+}
+function doEditUser() {
+    document.edit.hashpass.value = MD5(document.edit.password.value);
+    document.edit.password.value = "";
+    document.edit.submit();
+}
+// -->
+</script>
+{/literal}
+
+{* vim:set et sw=2 sts=2 sws=2: *}
diff --git a/templates/admin/utilisateurs.tpl b/templates/admin/utilisateurs.tpl
new file mode 100644 (file)
index 0000000..bbf1914
--- /dev/null
@@ -0,0 +1,325 @@
+{* $Id: utilisateurs.tpl,v 1.1 2004-02-11 20:00:38 x2000habouzit Exp $ *}
+
+{if $smarty.session.suid}
+<p class="erreur">
+Attention, déjà en SUID !!!
+</p>
+{/if}
+
+<div class="rubrique">
+  Gestion des utilisateurs
+</div>
+
+{dynamic}
+
+{if $smarty.post.u_kill_conf}
+<div class="center">
+  <form name="yes" method="post" action="{$smarty.server.PHP_SELF}">
+    <input type="hidden" name="login" value="{$smarty.request.login}">
+    Confirmer la suppression de {$smarty.request.login}&nbsp;&nbsp;
+    <input type="submit" name="u_kill" value="continuer">
+  </form>
+</div>
+{/if}
+
+{/dynamic}
+
+<form name="add" method="post" action="{$smarty.server.PHP_SELF}">
+  <table class="tinybicol" border="0" cellspacing="0" cellpadding="3">
+    <tr>
+      <th>
+        Administrer
+      </th>
+    </tr>
+    <tr>
+      <td class="center">
+        <input type="text" name="login" size="40" maxlength="255" value="{$login}">
+      </td>
+    </tr>
+    <tr>
+      <td class="center">
+        <input type="submit" name="select" value=" edit "> &nbsp;&nbsp;
+        <input type="hidden" name="hashpass" value=""> 
+        <input type="submit" name="suid_button" value=" su "> 
+      </td>
+    </tr>
+  </table>
+</form>
+
+{dynamic on="0`$smarty.request.select`"}
+<table border="0" cellspacing="0" cellpadding="0" class="admin">
+  <p class="smaller">
+  Derniére connexion le <strong>{$lastlogin|date_format:"%d %B %Y, %T"}</strong>
+  depuis <strong>{$mr.host}</strong>
+  </p>
+  <form name="edit" method="post" action="{$smarty.server.PHP_SELF}">
+    <tr valign=top align=left> 
+      <th class="login">
+        Login
+      </th>
+      <input type="hidden" name="hashpass" value="">
+      <th class="password"> 
+        Password
+      </th>
+      <th class="perms"> 
+        Perms
+      </th>
+    </tr>
+    <tr> 
+      <td class="login"> 
+        <input type="hidden" name="hashpass" value="">
+        <input type="text" name="login" size=20 maxlength=50 value="{$mr.username}">
+      </td>
+      <td class="password"> 
+        <input type="text" name="newpass_clair" size=10 maxlength=10 value="********">
+        <input type="hidden" name="passw" size=32 maxlength=32 value="{$mr.password}">
+      </td>
+      <td class="perms"> 
+        <select name="permsN">
+          <option value="user" {if $mr.perms eq "user"}selected="selected"{/if}>user</option>
+          <option value="admin" {if $mr.perms eq "admin"}selected="selected"{/if}>admin</option>
+        </select>
+      </td>
+    </tr>
+    <tr> 
+      <td class="loginr"> 
+        if (login!=prenom.nom)&nbsp;
+      </td>
+      <td class="login"> 
+        <select name="homonyme">
+        {if $mr.loginbis && ($mr.loginbis neq $mr.username)}
+          <option value="1" selected="selected"> OUI </option>
+          <option value="0"> NON </option>
+        {else}
+          <option value="1"> OUI </option>
+          <option value="0" selected="selected"> NON </option>
+        {/if}
+        </select>
+        /* pour homonymes */
+      </td>
+      <th class="action">
+        &nbsp;
+      </th>
+    </tr>
+    <tr> 
+      <td class="loginr">
+        then prenom.nom=
+      </td>
+      <td class="login">
+        <input type="text" name="loginbis" size=24 maxlength=255 value="{$mr.loginbis}">
+      </td>
+      <th class="action">
+        Action
+      </th>
+    </tr>
+    <tr> 
+      <th>UID</th>
+      <td>
+        {$mr.user_id}
+        <input type="hidden" name="olduid" size=6 maxlength=6 value="{$mr.user_id}">
+        <input type="hidden" name="oldlogin" size=100 maxlength=100 value="{$mr.username}">
+      </td>
+      <td class="action">
+        <input type="submit" name="u_kill_conf" value="DELETE">
+      </td>
+    </tr>
+    <tr> 
+      <th class="detail">
+        Matricule
+      </th>
+      <td class="detail"> 
+        {$mr.matricule}
+      </td>
+      <td class="action"> 
+        <input onClick="doEditUser(); return true;" type="submit" name="u_edit" value="UPDATE">
+      </td>
+    </tr>
+    <tr> 
+      <th class="detail">
+        Date de naissance
+      </th>
+      <td class="detail"> 
+        <input type="text" name="naissanceN" size=10 maxlength=10 value="{$mr.naissance}">
+      </td>
+      <td class="action">
+        &nbsp;
+      </td>
+    </tr>
+    <tr> 
+      <th class="detail">
+        Promo
+      </th>
+      <td class="detail"> 
+        <input type="text" name="promoN" size=4 maxlength=4 value="{$mr.promo}">
+      </td>
+      <td class="action">
+        &nbsp;
+      </td>
+    </tr>
+    <tr> 
+      <th class="detail">
+        Nom
+      </th>
+      <td class="detail">
+        <input type="text" name="nomN" size=20 maxlength=255 value="{$mr.nom}">
+      </td>
+      <td class="action">
+        <a href="javascript:x()" onclick="popWin('{"x.php?x=`$mr.username`"|url}')">[Voir fiche]</a>
+      </td>
+    </tr>
+    <tr> 
+      <th class="detail">
+        Prénom
+      </th>
+      <td class="detail">
+        <input type="text" name="prenomN" size=20 maxlength=30 value="{$mr.prenom}">
+      </td>
+      <td class="action">
+        <a href="admin_trombino.php?uid={$mr.user_id}">[Trombino]</a>
+      </td>
+    </tr>
+    <tr> 
+      <th class="alias">
+        Alias e-mail
+      </th>
+      <td class="alias"> 
+        <input type="text" name="alias" size=20 maxlength=255 value="{$mr.alias}">@m4x.org
+      </td>
+      <td class="action">
+        &nbsp;
+      </td>
+    </tr>
+{if $db_edu}
+    {foreach item=alias from=$alias_edu}
+    <tr>
+      <th class="polyedu">Alias polyedu
+        {if !$alias.email}
+          <br /><span="erreur">Attention, email indéfini !</span>
+          {assign var="edu_err" value=1}
+        {/if}
+        {if $alias.email neq "`$mr.username`@m4x.org"}
+          <br /><span="erreur">Attention, email mal défini !</span>
+          {assign var="edu_err" value=1}
+        {/if}
+        {if $alias.email && !$alias.act}
+          <br /><span="erreur">Attention, email inactif !</span>
+          {assign var="edu_err" value=1}
+        {/if}
+      </th>
+      {if $alias.alias}
+      <td class="polyedu">
+        <input type="text" name="alias_edu" size=20 maxlength=255 value="{$alias.alias}" />
+      </td>
+      <td class="polyedu">  
+        <form name="rmedu" method="post" action="{$smarty.server.PHP_SELF}">
+          <input type="hidden" name="id_edu" value="{$alias.id}">
+          <input type="hidden" name="alias_edu" value="{$alias.alias}">
+          <input type="hidden" name="login" value="{$mr.username}">
+          <input type="hidden" name="select" value="edit">
+          <input type="submit" name="remove_polyedu_alias" value="Supprimer">
+        </form>
+      </td>
+      {else}
+      <td class="polyedu">
+        Erreur : entrée dans la table x mais pas dans la table alias
+      </td>
+      <td class="polyedu">
+        <form name="addedu" method="post" action="{$smarty.server.PHP_SELF}">
+          <input type="hidden" name="user_id" value="{$mr.user_id}">
+          <input type="hidden" name="matricule" value="{$mr.matricule}">
+          <input type="hidden" name="login" value="{$mr.username}">
+          <input type="hidden" name="select" value="edit">
+          <input type="hidden" name="alias_edu" value="">
+          <input type="submit" name="add_polyedu_alias" value="Réparer">
+        </form>
+      </td>
+      {/if}
+    </tr>
+    {/foreach}
+    {if $edu_err}
+    <tr> 
+      <th class="polyedu">
+        Alias polyedu
+      </th>
+      <td class="polyedu"> 
+        Un problème existe !!!
+      </td>
+      <td class="polyedu">
+        <form name="addedu" method="post" action="{$smarty.server.PHP_SELF}">
+          <input type="hidden" name="user_id" value="{$mr.user_id}">
+          <input type="hidden" name="matricule" value="{$mr.matricule}">
+          <input type="hidden" name="login" value="{$mr.username}">
+          <input type="hidden" name="select" value="edit">
+          <input type="hidden" name="alias_edu" value="">
+          <input type="submit" name="add_polyedu_alias" value="Réparer">
+        </form>
+      </td>
+    </tr>
+    {/if}
+    <form name="addedu" method="post" action="{$smarty.server.PHP_SELF}">
+      <input type="hidden" name="user_id" value="{$mr.user_id}">
+      <input type="hidden" name="matricule" value="{$mr.matricule}">
+      <input type="hidden" name="login" value="{$mr.username}">
+      <input type="hidden" name="select" value="edit">
+      <tr> 
+        <th class="polyedu">
+          Ajouter un alias polyedu
+        </th>
+        <td class="polyedu"> 
+          <input type="text" name="alias_edu" size=29 maxlength=60 value="">
+        </td>
+        <td class="polyedu">
+          <input type="submit" name="add_polyedu_alias" value="Ajouter">
+        </td>
+      </tr>
+    </form>
+{else}{* db_edu *}
+    <tr> 
+      <th class="polyedu" colspan="3">
+        Polyedu non joignable
+      </th>
+    </tr>
+{/if}
+    {foreach item=mail from=$xorgmails}
+    <form name="remove" method="post" action="{$smarty.server.PHP_SELF}">
+      <tr> 
+        <th class="detail"> 
+          e-mail forward {$mail.num} ({$mail.flags})
+        </th>
+        <td class="detail"> 
+          <input type="text" name="fwd" size=29 maxlength=255 value="{$mail.email}">
+        </td>
+        <td class="action"> 
+          <input type="hidden" name="user_id" value="{$mr.user_id}">
+          <input type="hidden" name="login" value="{$mr.username}">
+          <input type="hidden" name="email" value="{$mail.email}">
+          <input type="hidden" name="select" value="edit">
+          <input type="submit" name="remove_email" value="Supprimer">
+        </td>
+      </tr>
+    </form>
+    {/foreach}
+    <form name="add" method="post" action="{$smarty.server.PHP_SELF}">
+      <input type="hidden" name="user_id" value="{$mr.user_id}">
+      <input type="hidden" name="login" value="{$mr.username}">
+      <input type="hidden" name="select" value="edit">
+      <input type="hidden" name="num" value="{$next_num}">
+      <tr> 
+        <th class="detail">
+          Ajouter un email
+        </td>
+        <td class="detail"> 
+          <input type="text" name="email" size=29 maxlength=60 value="">
+        </td>
+        <td class="action">
+          <input type="submit" name="add_email" value="Ajouter">
+        </td>
+      </tr>
+    </form>
+  </table>
+</form>
+<p class="erreur">
+{$email_panne}
+</p>
+{/dynamic}
+{* vim:set et sw=2 sts=2 sws=2: *}
index bb8b74c..0407227 100644 (file)
@@ -1,4 +1,4 @@
-{* $Id: default.tpl,v 1.6 2004-02-04 22:47:45 x2000habouzit Exp $ *}
+{* $Id: default.tpl,v 1.7 2004-02-11 20:00:39 x2000habouzit Exp $ *}
 <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 {if $smarty.session.suid}
     <table id="suid" cellpadding="0" cellspacing="0">
     <tr>
-      <td>{$smarty.session.suid}</strong></td>
-      <td><a href="#####exit.php######">exit</a></td>
+      <td>
+        {dynamic}
+        {$smarty.session.suid} ({$smarty.session.username})
+        {/dynamic}
+        [<a href="{"exit.php"|url}">exit</a>]
+      </td>
     </tr>
     </table>
 {/if}