From c811d955db652ccc3c7b3af5fb7d0eebfb9b328f Mon Sep 17 00:00:00 2001 From: x2000habouzit Date: Wed, 11 Feb 2004 20:00:35 +0000 Subject: [PATCH] pas mal de debug p/r au SU et exit.php ajout de admin/utilisateurs.php (et croyez moi, il y a encore du boulot sur cette page) --- etat_migration | 15 +- htdocs/admin/utilisateurs.php | 343 ++++++++++++++++++++++++++++++++++ htdocs/css/default.css | 9 +- htdocs/exit.php | 9 +- include/db_connectpolyedu.inc.php | 28 +++ include/xorg.misc.inc.php | 84 +++++++++ include/xorg.page.inc.php | 2 + plugins/insert.getNbIns.php | 3 +- plugins/insert.mkStats.php | 6 +- templates/admin/utilisateurs.head.tpl | 37 ++++ templates/admin/utilisateurs.tpl | 325 ++++++++++++++++++++++++++++++++ templates/skin/default.tpl | 10 +- 12 files changed, 848 insertions(+), 23 deletions(-) create mode 100644 htdocs/admin/utilisateurs.php create mode 100644 include/db_connectpolyedu.inc.php create mode 100644 include/xorg.misc.inc.php create mode 100644 templates/admin/utilisateurs.head.tpl create mode 100644 templates/admin/utilisateurs.tpl diff --git a/etat_migration b/etat_migration index 17f4d4a..65749d6 100644 --- a/etat_migration +++ b/etat_migration @@ -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 index 0000000..dcc64fd --- /dev/null +++ b/htdocs/admin/utilisateurs.php @@ -0,0 +1,343 @@ +Erreur: $msg

"; } +function my_msg($msg) { global $succes; $succes[] = "

O.K.: $msg

"; } + + +/* + * 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("Failed: $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é !
"); + $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ê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']}
"; + $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(); +?> diff --git a/htdocs/css/default.css b/htdocs/css/default.css index 5896c6f..2390a74 100644 --- a/htdocs/css/default.css +++ b/htdocs/css/default.css @@ -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 $ */ diff --git a/htdocs/exit.php b/htdocs/exit.php index 62c6e27..a631030 100644 --- a/htdocs/exit.php +++ b/htdocs/exit.php @@ -1,10 +1,5 @@ display(); +header("Location: login.php"); ?> diff --git a/include/db_connectpolyedu.inc.php b/include/db_connectpolyedu.inc.php new file mode 100644 index 0000000..6a623ca --- /dev/null +++ b/include/db_connectpolyedu.inc.php @@ -0,0 +1,28 @@ + diff --git a/include/xorg.misc.inc.php b/include/xorg.misc.inc.php new file mode 100644 index 0000000..8350763 --- /dev/null +++ b/include/xorg.misc.inc.php @@ -0,0 +1,84 @@ +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( '`(? diff --git a/include/xorg.page.inc.php b/include/xorg.page.inc.php index 80947c1..0eb9dee 100644 --- a/include/xorg.page.inc.php +++ b/include/xorg.page.inc.php @@ -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); diff --git a/plugins/insert.getNbIns.php b/plugins/insert.getNbIns.php index 92782de..bad6913 100644 --- a/plugins/insert.getNbIns.php +++ b/plugins/insert.getNbIns.php @@ -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"; diff --git a/plugins/insert.mkStats.php b/plugins/insert.mkStats.php index 87a6d72..f8d4b2f 100644 --- a/plugins/insert.mkStats.php +++ b/plugins/insert.mkStats.php @@ -1,7 +1,8 @@ + + + +{/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 index 0000000..bbf1914 --- /dev/null +++ b/templates/admin/utilisateurs.tpl @@ -0,0 +1,325 @@ +{* $Id: utilisateurs.tpl,v 1.1 2004-02-11 20:00:38 x2000habouzit Exp $ *} + +{if $smarty.session.suid} +

+Attention, déjà en SUID !!! +

+{/if} + +
+ Gestion des utilisateurs +
+ +{dynamic} + +{if $smarty.post.u_kill_conf} +
+
+ + Confirmer la suppression de {$smarty.request.login}   + +
+
+{/if} + +{/dynamic} + +
+ + + + + + + + + + +
+ Administrer +
+ +
+    + + +
+
+ +{dynamic on="0`$smarty.request.select`"} + +

+ Derniére connexion le {$lastlogin|date_format:"%d %B %Y, %T"} + depuis {$mr.host} +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{if $db_edu} + {foreach item=alias from=$alias_edu} + + + {if $alias.alias} + + + {else} + + + {/if} + + {/foreach} + {if $edu_err} + + + + + + {/if} + + + + + + + + + + + +{else}{* db_edu *} + + + +{/if} + {foreach item=mail from=$xorgmails} + + + + + + + + {/foreach} + + + + + + + + + + +
+ Password + + Perms +
+ + + + +
+ if (login!=prenom.nom)  + +   +
+ then prenom.nom= + + Action +
UID + {$mr.user_id} + + + + +
+ Matricule + + {$mr.matricule} + + +
+ Date de naissance + + + +   +
+ Promo + + + +   +
+ Nom + + + + [Voir fiche] +
+ Prénom + + + + [Trombino] +
+ Alias e-mail + + @m4x.org + +   +
Alias polyedu + {if !$alias.email} +
Attention, email indéfini ! + {assign var="edu_err" value=1} + {/if} + {if $alias.email neq "`$mr.username`@m4x.org"} +
Attention, email mal défini ! + {assign var="edu_err" value=1} + {/if} + {if $alias.email && !$alias.act} +
Attention, email inactif ! + {assign var="edu_err" value=1} + {/if} +
+ + + + + + + + + + + Erreur : entrée dans la table x mais pas dans la table alias + +
+ + + + + + +
+
+ Alias polyedu + + Un problème existe !!! + +
+ + + + + + +
+
+ Ajouter un alias polyedu + + + + +
+ Polyedu non joignable +
+ e-mail forward {$mail.num} ({$mail.flags}) + + + + + + + + +
+ Ajouter un email + + + + + +
+ +

+{$email_panne} +

+{/dynamic} +{* vim:set et sw=2 sts=2 sws=2: *} diff --git a/templates/skin/default.tpl b/templates/skin/default.tpl index bb8b74c..0407227 100644 --- a/templates/skin/default.tpl +++ b/templates/skin/default.tpl @@ -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 $ *} @@ -16,8 +16,12 @@ {if $smarty.session.suid} - - +
{$smarty.session.suid}exit + {dynamic} + {$smarty.session.suid} ({$smarty.session.username}) + {/dynamic} + [exit] +
{/if} -- 2.1.4