Index: LATMOS-Accounts-Web/root/html/about/index.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/about/index.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/about/index.tt	(revision 861)
@@ -0,0 +1,13 @@
+<div class="objectform">
+<h2>LATMOS::Accounts::Web</h2>
+
+<p>(c) LATMOS / CNRS / IPSL</p>
+
+<p>Auteur: Olivier Thauvin</p>
+
+<h3>Contributeurs</h3>
+
+<p>Remerciement particuliers Ã  tout ceux qui ont participÃ© Ã  ce projet:</p>
+
+<p>Philippe Weill, Yann Delcambre</p>
+</div>
Index: LATMOS-Accounts-Web/root/html/ajax/displayattr.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/ajax/displayattr.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/ajax/displayattr.tt	(revision 861)
@@ -0,0 +1,1 @@
+[% value | html %]
Index: LATMOS-Accounts-Web/root/html/ajax/objexist.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/ajax/objexist.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/ajax/objexist.tt	(revision 861)
@@ -1,6 +1,6 @@
 [% IF exists %]
-<img src="[% c.uri_for('/static', 'images', 'dialog-cancel.png') %]">
+<img class="attr" src="[% c.uri_for('/static', 'images', 'dialog-cancel.png') %]">
 ([% exists %])
 [% ELSE %]
-<img src="[% c.uri_for('/static', 'images', 'dialog-ok-apply.png') %]">
+<img class="attr" src="[% c.uri_for('/static', 'images', 'dialog-ok-apply.png') %]">
 [% END %]
Index: LATMOS-Accounts-Web/root/html/ajax/select_freeip_select.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/ajax/select_freeip_select.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/ajax/select_freeip_select.tt	(revision 861)
@@ -0,0 +1,12 @@
+<!-- $Id: select_freeip_select.tt 2887 2010-08-06 02:35:04Z nanardon $ -->
+<select name="newip">
+<option value="any">IP alÃ©atoire</option>
+<option value="first">PremiÃšre</option>
+
+<optgroup label="IPs">
+[% FOREACH ip = c.model('Accounts').db.get_object('netzone',
+c.req.param('zone')).get_attributes('freeIP') %]
+<option value="[% ip | html %]">[% ip | html %]</option>
+[% END %]
+</optgroup>
+</select>
Index: LATMOS-Accounts-Web/root/html/create/default.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/create/default.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/create/default.tt	(revision 861)
@@ -0,0 +1,28 @@
+<!-- $Id: default.tt 3256 2010-09-07 14:07:59Z nanardon $ -->
+<div id="objectform" class="objectform">
+<form action="[% c.uri_for('/create', form.otype) %]" method="POST">
+<table border="0">
+
+<input type="hidden" name="step" value="[% ochelper.step | html %]">
+[% IF ochelper.name.ask %]
+<tr><td>Nom de l'objet:</td>
+<td><input id="_name" type="text" name="_name" value="[% ochelper.name.content | html %]">
+[% c.prototype.observe_field( '_name', {
+    update => '_name_span',
+    url => c.uri_for('/ajax', 'objexist', form.otype),
+    frequency => 1,
+    with   => "'val=' + element.value",
+}) %]
+<span id="_name_span"></span>
+</td></tr>
+[% END %]
+[% FOREACH attr = ochelper.ask %]
+<tr><td>[% form.attr_label(attr) %]</td>
+<td>[% form.attr_field(attr) %]</td></tr>
+[% END %]
+
+<tr><td colspan="2"><input type="submit"></td></tr>
+</table>
+
+</form>
+</div>
Index: LATMOS-Accounts-Web/root/html/departments/default.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/departments/default.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/departments/default.tt	(revision 861)
@@ -1,3 +1,3 @@
-<!-- $Id: default.tt 432 2009-05-17 13:19:38Z nanardon $ -->
+<!-- $Id: default.tt 2800 2010-08-01 12:02:51Z nanardon $ -->
 [% IF NOT department %]
 No department [% departmentname | html %] found.
Index: LATMOS-Accounts-Web/root/html/departments/menu.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/departments/menu.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/departments/menu.tt	(revision 861)
@@ -1,3 +1,3 @@
-<!-- $Id: user_menu.tt 443 2009-05-18 03:52:21Z nanardon $ -->
+<!-- $Id: menu.tt 2800 2010-08-01 12:02:51Z nanardon $ -->
 <div>
     <table border="0">
Index: LATMOS-Accounts-Web/root/html/groups/dpmt.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/groups/dpmt.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/groups/dpmt.tt	(revision 861)
@@ -0,0 +1,76 @@
+<!-- $Id: dpmt.tt 3122 2010-08-27 12:00:39Z nanardon $ -->
+[% IF NOT group %]
+No group [% groupname | html %] found.
+[% ELSE %]
+
+<div class="objectform" id="objectform">
+[% INCLUDE 'groups/menu.tt' %]
+
+<div id="oform">
+
+<div style="margin: 2em; border: outset;">
+<form action="[% c.uri_for(groupname, 'dpmt') %]">
+<input id="inactive" type="checkbox" name="inactive" value="1" [% "checked" IF c.req.param('inactive') %]">
+<label for="inactive">Inclure les comptes inactifs</label><br>
+<input id="mail" type="checkbox" name="mail" value="1" [% "checked" IF c.req.param('mail') %]">
+<label for="mail">Afficher les mails</label><br>
+
+[% FOREACH co = c.model('Accounts').db.attributes_summary('user', 'company').sort %]
+[% IF loop.first %]
+SociÃ©tÃ©:
+<select name="company">
+<option value="">--</option>
+[% END %]
+<option value="[% co | html %]" [% 'selected="selected"' IF co ==
+c.req.param('company') %]>[% co | html %]</option>
+[% IF loop.last %]
+</select>
+<br>
+[% END %]
+[% END %]
+
+<input type="submit">
+</form>
+[% IF odpmt.get_attributes('managedBy') %]
+[% ou = c.model('Accounts').db.get_object('user',
+odpmt.get_attributes('managedBy')) %]
+<p>Gestionnaire:
+    <a href="[% c.uri_for('/users', ou.id) %]">
+    [% ou.get_attributes('displayName') | html %]
+</a>
+</p>
+<p>[% user.size %] personnes dans ce dÃ©partement, [% guser.size %]
+associÃ©s.</p>
+[% END %]
+
+<hr>
+
+[% FOREACH u = user %]
+[% ou = c.model('Accounts').db.get_object('user', u) %]
+<a href="[% c.uri_for('/users', u) %]">[% ou.get_attributes('displayName') | html %]</a>
+[% IF c.req.param('mail') %]
+&lt;[% ou.get_attributes('mail') | html %]&gt;
+[% END %]
+<br>
+[% END %]
+
+<p>AssociÃ©s au dÃ©partement</p>
+
+[% FOREACH u = guser %]
+[% ou = c.model('Accounts').db.get_object('user', u) %]
+<a href="[% c.uri_for('/users', u) %]">[% ou.get_attributes('displayName') | html %]</a>
+(<a href="[% c.uri_for('/groups', ou.get_attributes('department'), 'dpmt') %]">[%
+ou.get_attributes('department') %]</a>)
+[% IF c.req.param('mail') %]
+&lt;[% ou.get_attributes('mail') | html %]&gt;
+[% END %]
+<br>
+[% END %]
+</div>
+
+</div>
+</div>
+[% END %]
+
+
+
Index: LATMOS-Accounts-Web/root/html/groups/index.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/groups/index.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/groups/index.tt	(revision 861)
@@ -10,15 +10,18 @@
 <table border="0">
 <tr><td colspan="2">[% groupslist.size %] groupes</td></tr>
-<tr><th>Nom</th><th>Description</th></tr>
+<tr><th>Nom</th><th>Description</th><th></th></tr>
 [% FOREACH groupname = groupslist %]
 [% group = db.get_object('group', groupname) %]
 <tr>
-    <td>[% group.id | html %]</td>
-    <td>[% group.get_c_field('description') | truncate(30) | html %]
-    <a href="[% c.uri_for('/groups', groupname) %]">
-        <img src="[% c.uri_for('/static', 'icons', 'arrow-right.png') %]"
+    <td><a href="[% c.uri_for('/groups', groupname) %]">
+        <img src="[% c.uri_for('/static', 'icons', 'icon_edit.png') %]"
             height="16" width="16"
             alt="[% "edit " _ groupname | html %]">
-    </a></td>
+    </a> [% group.id | html %]</td>
+    <td>
+    <span title="[% group.get_c_field('description') | html %]">
+    [% group.get_c_field('description') | truncate(30) | html %]
+    </span>
+    </td>
 </tr>
 [% END %]
Index: LATMOS-Accounts-Web/root/html/groups/menu.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/groups/menu.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/groups/menu.tt	(revision 861)
@@ -1,16 +1,24 @@
 <!-- $Id$ -->
-<div id="omenu">
+<div id="oinfo">
     [% INCLUDE 'includes/obj_prev_next.tt' objtype='group' objname=groupname %]
-    <table border="0">
-    <tr><td>
+
+    <div>
     <img src="[% c.uri_for('/static', 'icons', 'user-group-properties.png') %]"
     alt="[% "Groupe " _ groupname %]">
-    </td>
-    <td>   
-    [% groupname | html %]<br>
+    </div>
+
+    <div>   
+    <p id="oname">[% groupname | html %]</p>
     [% group.get_c_field('description') | html %]
-    </table>
-    <div style="clear: both;"></div>
+    </div>
+
+</div>
+<div style="clear: both;"></div>
+<div id="omenu">
         <a href="[% c.uri_for(groupname) %]"><span [% 'id="oactive"' IF subform == '' %]>SystÃšme</span></a>
         <a href="[% c.uri_for(groupname, 'users') %]"><span [% 'id="oactive"' IF subform == 'users' %]>Utilisateurs</span></a>
+[% IF group.get_attributes('sutype') == 'dpmt' %]
+        <a href="[% c.uri_for(groupname, 'dpmt') %]"><span [% 'id="oactive"' IF subform == 'dpmt' %]>DÃ©partement</span></a>
+[% END %]
 </div>
+<div style="clear: both;"></div>
Index: LATMOS-Accounts-Web/root/html/groups/users.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/groups/users.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/groups/users.tt	(revision 861)
@@ -4,5 +4,6 @@
 [% ELSE %]
     
-[% modallow = c.model('Accounts').db.check_acl(group, 'memberUID', 'w') %]
+[% modallow = c.model('Accounts').db.check_acl(group, 'memberUID', 'w') AND
+NOT group.attribute('memberUID').ro %]
 
 <div class="objectform" id="objectform">
@@ -19,20 +20,32 @@
 <b>Membres primaire:</b><br>
 [% END %]
-<a href="[% c.uri_for('/users', uid) %]">[% uid | html %]</a><br>
+<a href="[% c.uri_for('/users', uid) %]">[% uid | html %]</a>
+[% ouser = c.model('Accounts').db.get_object('user', uid) %]
+[% INCLUDE user_flag ouser=ouser %]
+<br>
 [% END %]
 
 [% FOREACH uid = group.get_c_field('member').sort %]
+[% ouser = c.model('Accounts').db.get_object('user', uid) %]
 [% IF loop.first %]
 <b>Membres</b><br>
 [% END %]
 [% IF modallow %]
-<form action="[% c.uri_for(groupname, subform) %]" method="POST">
+[% IF ouser.get_attributes('department') == group.id OR
+      ouser.get_attributes('contratType') == group.id %]
+<img src="[% c.uri_for('/static', 'icons', 'changes-prevent.png') %]"
+    width="24" height="24" title="Ce groupe est gÃ©rÃ© via un autre attribut">
+[% ELSE %]
+<form action="[% c.uri_for(groupname, subform) %]" method="POST" style="display: inline">
 <input type="hidden" name="deluser" value="[% uid | html %]">
 <input type="image" src="[% c.uri_for('/static', 'icons', 'user-group-delete.png') %]" width="24" height="24">
+</form>
 [% END %]
-<a href="[% c.uri_for('/users', uid) %]">[% uid | html %]
-([% c.model('Accounts').db.get_object('user', uid).get_attributes('displayName') | html %])</a><br>
+[% END %]
+<a href="[% c.uri_for('/users', uid, 'statut') %]">[% uid | html %]
+([% ouser.get_attributes('displayName') | html %])</a>
+[% INCLUDE user_flag ouser=ouser %]
+<br>
 [% IF modallow %]
-</form>
 [% END %]
 [% IF loop.last %]
Index: LATMOS-Accounts-Web/root/html/includes/form.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/includes/form.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/includes/form.tt	(revision 861)
@@ -1,4 +1,4 @@
 <!-- $Id$ -->
-<div id="oform">
+<div id="oform" class="oform">
 [% attributes = form.attributes() %]
 [% IF attributes.0 %]
@@ -13,5 +13,7 @@
 <tr><th>[% form.attr_label(attr) %]</th><td>[% form.attr_field(attr) %]</td>
 [% IF loop.last %]
+[% IF form.write_attributes %]
 <tr><td colspan=2>[% form.submit %]</td></tr>
+[% END %]
 </table>
 </form>
Index: LATMOS-Accounts-Web/root/html/includes/header.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/includes/header.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/includes/header.tt	(revision 861)
@@ -2,5 +2,5 @@
 <html>
 <head>
-<title>[% page.title %]</title>
+<title>LATMOS::Accounts / [% page.title %]</title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <link rel="stylesheet" href="[% c.uri_for('/static', 'style.css') %]?" type="text/css">
@@ -12,4 +12,17 @@
 <script type="text/javascript" language="JavaScript" src="[% c.uri_for('/static', 'js', 'dragdrop.js') %]"></script>
 <script type="text/javascript" language="JavaScript" src="[% c.uri_for('/static', 'js', 'controls.js') %]"></script>
+<script type="text/javascript" language="JavaScript">
+function resetmenu() {
+    document.getElementById('menui').innerHTML = '[% page.title | html %]';
+}
+
+[% IF page.error %]
+window.onload = analert;
+
+function analert () {
+    alert('[% page.error | replace('\'', '\\\'') %]');
+}
+[% END %]
+</script>
 </head>
 
@@ -20,23 +33,160 @@
 [% END %]
 
+[% BLOCK user_flag %]
+[% INCLUDE object_flag object = ouser %]
+[% END %]
+
+[% BLOCK object_flag %]
+[% IF object.type == 'user' %]
+    [% IF object.get_attributes('unexported') %]
+<img src="[% c.uri_for('/static', 'icons', 'gtk-delete.png') %]"
+class="notice" title="Ce compte est dÃ©sactivÃ©" alt="disable">
+    [% ELSIF object.get_attributes('expired') %]
+<img src="[% c.uri_for('/static', 'icons', 'emblem-urgent.png') %]"
+class="notice" title="Ce compte est expirÃ© ([% object.get_attributes('expired') %])" alt="expired">
+    [% ELSIF object.get_attributes('expire') %]
+<img src="[% c.uri_for('/static', 'icons', 'appointment-new.png') %]"
+class="notice" title="Ce compte est temporaire ([% object.get_attributes('expire') %])" alt="temporary">
+    [% END %]
+[% ELSE %]
+    [% IF object.get_attributes('unexported') %]
+<img src="[% c.uri_for('/static', 'icons', 'gtk-delete.png') %]"
+class="notice" title="Cette entrÃ©e est dÃ©sactivÃ©s" alt="disable">
+    [% END %]
+[% END %]
+[% END %]
+
 <body>
 <!-- $Id$ -->
-<div id="head" class="pmenu">
-    Gestion des Utilisateurs du LATMOS
-[% IF c.user.username %]
-<span style="float:right; font-size: 0.5em;">
-Vous Ãªtes [% c.user.username | html %]
-</span>
-[% END %]
+<div id="head">
+    <div class="pmenu">
+        [% IF c.config.company %]
+        Gestion informatique - [% c.config.company | html %]
+        [% ELSE %]
+        Gestion informatique
+        [% END %]
+    [% IF c.user.username %]
+    <span style="float:right; font-size: 0.5em;">
+    Vous Ãªtes [% c.user.username | html %]
+    </span>
+    [% END %]
+    </div>
+
+    <div id="mainmenu" style="float: left">
+        <span>
+            <a href="[% c.uri_for('/users') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='Liste des utilisateurs';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="Utilisateurs" src="[% c.uri_for('/static', 'icons', 'avatar-default.png') %]"></a>
+        [% IF c.model('Accounts').db.check_acl('user', '@CREATE', 'w') %]
+            <a href="[% c.uri_for('/create', 'user') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='CrÃ©er un utilisateur';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="Ajouter un utilisateurs" src="[% c.uri_for('/static', 'icons', 'add.png') %]"></a>
+        [% END %]
+        </span>
+        <span>
+            <a href="[% c.uri_for('/groups') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='Liste des groupes';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="Groupes" src="[% c.uri_for('/static', 'icons', 'system-users.png') %]"></a>
+        [% IF c.model('Accounts').db.check_acl('group', '@CREATE', 'w') %]
+            <a href="[% c.uri_for('/create', 'group') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='CrÃ©er un groupe';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="Ajouter un groupe" src="[% c.uri_for('/static', 'icons', 'add.png') %]"></a>
+        [% END %]
+        </span>
+        <span>
+            <a href="[% c.uri_for('/sites') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='Liste des sites';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="Sites" src="[% c.uri_for('/static', 'icons', 'xfce-internet.png') %]"></a>
+        </span>
+        [% # On cache volontairement les alias si l'utilisateur ne doit pas y
+        toucher %]
+        [% IF c.model('Accounts').db.check_acl('aliases', '@CREATE', 'w') %]
+        <span>
+            <a href="[% c.uri_for('/aliases') %]"
+            onMouseOver="document.getElementById('menui').innerHTML=
+                'Alias mail sans utilisateur';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="Alias mail" src="[% c.uri_for('/static', 'icons', 'mail_forward.png') %]"></a>
+        </span>
+        [% END %]
+        <span>
+            <a href="[% c.uri_for('/nethosts') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='Liste des hÃŽtes rÃ©seau';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="HÃŽtes rÃ©seau" src="[% c.uri_for('/static', 'icons', 'video-display.png') %]"></a>
+        [% IF c.model('Accounts').db.check_acl('nethost', '@CREATE', 'w') %]
+            <a href="[% c.uri_for('/create', 'nethost') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='Ajouter un hote rÃ©seau';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="Ajouter un hÃŽte rÃ©seau" src="[% c.uri_for('/static', 'icons', 'add.png') %]"></a>
+        [% END %]
+        </span>
+        [% # On cache volontaire les zones si l'utilisateur ne doit pas y
+        toucher %]
+        [% IF c.model('Accounts').db.check_acl('netzone', '@CREATE', 'w') %]
+        <span>
+            <a href="[% c.uri_for('/netzones') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='Liste des zones rÃ©seaux';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="Gestion RÃ©seau" src="[% c.uri_for('/static', 'icons', 'network-workgroup.png') %]"></a>
+            <a href="[% c.uri_for('/create', 'netzone') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='Ajouter une zones rÃ©seau';"
+            onMouseOut="resetmenu();"
+            ><img title="Ajouter une zone" src="[% c.uri_for('/static', 'icons', 'add.png') %]"></a>
+        </span>
+        [% END %]
+        <span>
+            <a href="[% c.uri_for('/about') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='A propos...';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="A propos..." src="[% c.uri_for('/static', 'icons', 'gtk-about.png') %]"></a>
+        </span>
+    </div>
+
+    [% IF c.user.username %]
+    <div style="float: right">
+        <span>
+            <a href="[% c.uri_for('/users', c.user.username) %]"
+            onMouseOver="document.getElementById('menui').innerHTML='Mon profile';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="Mon profile" src="[% c.uri_for('/static', 'icons', 'gtk-home.png') %]"></a>
+        </span>
+        <span>
+            <a href="[% c.uri_for('/users', c.user.username, 'passwd') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='Changer mon mot de passe';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="Changer mon mot de passe" src="[% c.uri_for('/static',
+            'icons', 'dialog-password.png') %]"></a>
+        </span>
+        <span>
+            <a href="[% c.uri_for('/logout') %]"
+            onMouseOver="document.getElementById('menui').innerHTML='Se dÃ©connecter';"
+            onMouseOut="resetmenu();"
+            >
+            <img title="Se dÃ©connecter" src="[% c.uri_for('/static',
+                    'icons', 'gtk-close.png') %]"></a>
+        </span>
+    </div>
+    [% END %]
+    
+    <div style="clear: both"></div>
+
+    <p>&gt; <span id="menui">[% page.title | html %]</span></p>
 </div>
-<div id="mainmenu" class="pmenu">
-<div style="float: left">[% mainmenu %]</div>
-[% IF c.user.username %]
-<div style="float: right">
-    <a href="[% c.uri_for('/users', c.user.username) %]"><span>Mon profile</span></a>
-    <a href="[% c.uri_for('/users', c.user.username, 'passwd') %]"><span>Mon mot de passe</span></a>
-    <a href="[% c.uri_for('/logout') %]"><span>Se dÃ©connecter</span></a>
-</div>
-[% END %]
-<div style="clear: both"></div>
-</div>
Index: LATMOS-Accounts-Web/root/html/includes/obj_prev_next.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/includes/obj_prev_next.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/includes/obj_prev_next.tt	(revision 861)
@@ -1,17 +1,53 @@
 <!-- $Id$ -->
 
-<p style="float: right">
-[% prev_next = c.model('Accounts').object_prev_next(objtype, objname) %]
-[% IF prev_next.0 %]                                                    
-<a href="[% c.uri_for(prev_next.0, subform) %]" title="[% prev_next.0 | html
-%]">Prec.</a>
-[% ELSE %]                                                                                
-Prec.                                                                                     
-[% END %]                                                                                 
-[% IF prev_next.1 %]                                                                      
-<a href="[% c.uri_for(prev_next.1, subform) %]" title="[% prev_next.1 | html
-%]">Suiv.</a>
-[% ELSE %]                                                                                
-Suiv.                                                                                     
-[% END %]                                                                                 
-</p>  
+<div id="navigate" style="float: right">
+<p>
+[% nav = c.model('Accounts').object_navigate(objtype, objname) %]
+
+[% IF nav.ofirst %]
+<a href="[% c.uri_for(nav.ofirst, subform) %]">
+<img src="[% c.uri_for('/static', 'icons/gtk-goto-first-ltr.png') %]" title="[%
+nav.ofirst | html %]" alt="first">
+</a>
+[% END %]
+
+[% IF nav.oprev %]
+<a href="[% c.uri_for(nav.oprev, subform) %]">
+<img src="[% c.uri_for('/static', 'icons/gtk-go-back-ltr.png') %]" title="[%
+nav.oprev | html %]" alt="previous">
+</a>
+[% END %]
+
+[% IF nav.onext %]
+<a href="[% c.uri_for(nav.onext, subform) %]">
+<img src="[% c.uri_for('/static', 'icons/gtk-go-back-rtl.png') %]" title="[%
+nav.onext | html %]" alt="next">
+</a>
+[% END %]
+
+[% IF nav.olast %]
+<a href="[% c.uri_for(nav.olast, subform) %]">
+<img src="[% c.uri_for('/static', 'icons/gtk-goto-first-rtl.png') %]" title="[%
+nav.olast | html %]" alt="last">
+</a>
+[% END %]
+</p>
+
+[% IF nav.list %]
+<form action="[% c.uri_for('/ajax/goto') %]">
+<p>
+<input type="hidden" name="otype" value="[% objtype | html %]">
+<input type="hidden" name="subform" value="[% subform | html %]">
+<select name="goto">
+[% FOREACH item = nav.list %]
+<option value="[% item | html %]" [% 'selected="selected"' IF item == objname
+%]>[% item | html %]</option>
+[% END %]
+</select>
+<input type="image" alt="Go To" title="Aller Ã " src="[%
+c.uri_for('/static', 'icons', 'gtk-jump-to-rtl.png') %]">
+</p>
+</form>
+[% END %]
+
+</div> 
Index: LATMOS-Accounts-Web/root/html/nethosts/default.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/nethosts/default.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/nethosts/default.tt	(revision 861)
@@ -0,0 +1,92 @@
+<!-- $Id: default.tt 3673 2010-09-17 16:57:32Z nanardon $ -->
+[% IF NOT nethost %]
+No group [% nethostname | html %] found.
+[% ELSE %]
+    
+<div class="objectformleft" id="objectform">
+[% INCLUDE 'nethosts/menu.tt' %]
+
+[% INCLUDE 'includes/form.tt'
+    form = form
+    form_uri = c.uri_for(nethostname) %]
+
+<div class="oform">
+<table border=1>
+[% IF c.model('Accounts').db.check_acl('netzone', 'name', 'r') %]
+<tr><th>Zone de cette hÃŽte</th></tr>
+<tr><td>
+[% FOREACH z = nethost.get_attributes('netZone').sort %]
+<a href="[% c.uri_for('/netzones', z) %]">
+[% z %]</a> ([% c.model('Accounts').db.get_object('netzone', z).get_attributes('type') %])
+<br>
+[% END %]
+</td></tr>
+[% END %]
+
+<tr><td>
+[% IF c.model('Accounts').db.check_acl('nethost', 'ip', 'w') %]
+<fieldset>
+<legend>Ajouter une ip libre:</legend>
+<form action="[% c.uri_for(nethostname) %]" method="POST">
+<label  for="zone">Zone:</label> <select name="zone" id="zone">
+<option value="">--</value>
+[% FOREACH z =
+   c.model('Accounts').db.search_objects('netzone', 'type=dhcp', 'net=*').sort %]
+[% zo = c.model('Accounts').db.get_object('netzone', z) %]
+[% NEXT IF NOT zo.get_attributes('freeIPCount') %]
+<option value="[% z | html %]">[% z | html %] ([% zo.get_attributes('freeIPCount') %])</option>
+[% END %]
+</select><br>
+
+[% c.prototype.observe_field('zone', {
+    update => 'zone_span',
+    url => c.uri_for('/ajax', 'select_freeip_select'),
+    frequency => 1,
+    with => "'zone='+element.options[element.selectedIndex].value",
+} ) %]
+<span id="zone_span"></span><br>
+<input type="submit" name="addip">
+</form>
+</fieldset>
+[% END %]
+
+[% IF c.model('Accounts').db.check_acl('nethost', '@CREATE', 'w') %]
+<fieldset><legend>Renommer la machine en:</legend>
+<form action="[% c.uri_for(nethostname) %]" method="POST">
+<input type="text" name="to"><br>
+<input type="checkbox" name="addcname" id="addcname" checked="checked">
+<label for="addcname">Ajouter le nom en CNAME</label><br>
+<input type="submit" name="rename">
+</form>
+</fieldset>
+[% END %]
+
+[% IF c.model('Accounts').db.check_acl('nethost', '@DELETE', 'w') %]
+<script LANGUAGE="JavaScript">
+<!--
+function confirmSubmit()
+{
+var agree=confirm("Supprimer l'hÃŽte [% nethost.id %] ?");
+if (agree)
+    return true ;
+else
+    return false ;
+}
+// -->
+</script>
+<fieldset>
+<legend>Supprimer cet hÃŽte</legend>
+<form action="[% c.uri_for(nethostname) %]" method="POST" onsubmit="return confirmSubmit()">
+<input type="image" name="delete" value="Supprimer" title="Supprimer" alt="effacer" src="[%
+c.uri_for('/static', 'images', 'edit-delete.png') %]">
+<input type="hidden" name="delete" value="Supprimer">
+</form>
+</fieldset>
+[% END %]
+
+</td></tr>
+</table>
+</div>
+</div>
+
+[% END %]
Index: LATMOS-Accounts-Web/root/html/nethosts/index.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/nethosts/index.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/nethosts/index.tt	(revision 861)
@@ -0,0 +1,49 @@
+[% db = c.model('Accounts').db %]
+<!-- $Id -->
+<div style="float: right" id="filter">
+[% INCLUDE 'includes/filter.tt'
+   formuri = c.uri_for()
+   otype = 'nethost'
+%]
+</div>
+
+<table border="0">
+<tr><td colspan="3">
+[% IF initials %]
+Pages:
+[% FOREACH initial = initials %]
+[% IF c.req.param('start') == initial %]
+< [% initial %] >
+[% ELSE %]
+[% uparams.start = initial %]
+<a href="[% c.uri_for('/nethosts', uparams) %]">[% initial %]</a>
+[% END %]
+[% END %]
+[% END %]
+</td></tr>
+<tr><td></td><th>Nom</th><th>Description</th></tr>
+[% FOREACH nethostname = nethostlist %]
+[% nethost = db.get_object('nethost', nethostname) %]
+<tr>
+    <td>
+[% INCLUDE 'object_flag' object=nethost %]
+    </td>
+    <td>
+    <a href="[% c.uri_for('/nethosts', nethostname) %]">
+    <img src="[% c.uri_for('/static', 'icons', 'icon_edit.png') %]"
+      height="16" width="16"
+      alt="[% "edit " _ nethostname | html %]">
+    </a>[% username | html %]
+    [% nethostname | html %]
+    [% IF nethost.get_attributes('owner') %]
+    (<a href="[% c.uri_for('/users', nethost.get_attributes('owner')) %]">[% nethost.get_attributes('owner') %]</a>)
+    [% END %]
+    </td>
+    <td>
+    <span title="[% nethost.get_attributes('description') | html %]">
+    [% nethost.get_attributes('description') | truncate(20) | html %]
+    </span>
+    </td>
+</tr>
+[% END %]
+</table>
Index: LATMOS-Accounts-Web/root/html/nethosts/menu.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/nethosts/menu.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/nethosts/menu.tt	(revision 861)
@@ -0,0 +1,19 @@
+<!-- $Id: menu.tt 3654 2010-09-17 10:54:48Z nanardon $ -->
+<div id="oinfo">
+    [% INCLUDE 'includes/obj_prev_next.tt' objtype='nethost' objname=nethostname %]
+    <div>
+    [% IF NOT nethost.get_c_field('exported') %]
+    <img src="[% c.uri_for('/static', 'icons', 'gtk-delete.png') %]"
+    alt="[% "HÃŽte " _ nethostname %]" title="l'entrÃ©e est dÃ©sactivÃ©e">
+    [% ELSE %]
+    <img src="[% c.uri_for('/static', 'icons', 'preferences-desktop-wallpaper.png') %]"
+    alt="[% "Ordinateur " _ nethostname %]">
+    [% END %]
+    </div>
+
+    <div>   
+    <p id="oname">[% nethostname | html %]</p>
+    [% nethost.get_c_field('description') | html %]
+    </div>
+</div>
+<div style="clear: both;"></div>
Index: LATMOS-Accounts-Web/root/html/netzones/default.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/netzones/default.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/netzones/default.tt	(revision 861)
@@ -0,0 +1,51 @@
+<!-- $Id: default.tt 3673 2010-09-17 16:57:32Z nanardon $ -->
+[% IF NOT netzone %]
+No group [% netzonename | html %] found.
+[% ELSE %]
+    
+<div class="objectformleft" id="objectform">
+[% INCLUDE 'netzones/menu.tt' %]
+
+[% INCLUDE 'includes/form.tt'
+    form = form
+    form_uri = c.uri_for(netzonename) %]
+</div>
+
+<div class="oform">
+<table border=1>
+[% FOREACH host = netzone.get_attributes('hostsExclude').sort %]
+[% IF loop.first %]
+<tr>
+<th>Hosts excluded</th>
+</tr>
+<tr>
+<td>
+[% END %]
+[% ohost = c.model('Accounts').db.get_object('nethost', host) %]
+<a href="[% c.uri_for('/nethosts', host) %]">[% host | html %]</a><br>
+[% INCLUDE object_flag object = ohost %]
+[% IF loop.last %]
+</td>
+</tr>
+[% END %]
+[% END %]
+[% FOREACH host = netzone.get_attributes('hosts').sort %]
+[% IF loop.first %]
+<tr>
+<th>Hosts</th>
+</tr>
+<tr>
+<td>
+[% END %]
+[% ohost = c.model('Accounts').db.get_object('nethost', host) %]
+<a href="[% c.uri_for('/nethosts', host) %]">[% host | html %]</a>
+[% INCLUDE object_flag object = ohost %]
+<br>
+[% IF loop.last %]
+</td></tr>
+[% END %]
+[% END %]
+</table>
+</div>
+
+[% END %]
Index: LATMOS-Accounts-Web/root/html/netzones/index.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/netzones/index.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/netzones/index.tt	(revision 861)
@@ -0,0 +1,60 @@
+[% db = c.model('Accounts').db %]
+<!-- $Id -->
+<div style="float: right" id="filter">
+[% INCLUDE 'includes/filter.tt'
+   formuri = c.uri_for()
+   otype = 'netzone'
+%]
+</div>
+
+[% IF c.req.param('attrval') %]
+[% FOREACH netzonename = netzonelist.sort %]
+[% IF loop.first %]
+<table>
+<tr><th colspan="2">[% netztype | html %]</th></tr>
+[% END %]
+<tr>
+    <td>[% netzonename | html %]</td>
+    <td>
+    <a href="[% c.uri_for('/netzones', netzonename) %]">
+        <img src="[% c.uri_for('/static', 'icons', 'icon_edit.png') %]"
+            height="16" width="16"
+            alt="[% "edit " _ netzonename | html %]">
+    </a></td>
+</tr>
+[% IF loop.last %]
+</table>
+[% END %]
+[% END %]
+[% ELSE %]
+
+<table border="0">
+[% FOREACH netztype = [ 'dns', 'reverse', 'dhcp' ] %]
+[% netzonelist = db.search_objects('netzone', 'type=' _ netztype) %]
+[% FOREACH netzonename = netzonelist.sort %]
+[% netzone = db.get_object('netzone', netzonename) %]
+[% IF loop.first %]
+<tr><th colspan="2">[% netztype | ucfirst | html %]</th></tr>
+<tr><th>Nom</th><th>Description</th></tr>
+[% END %]
+<tr>
+    <td>
+    <a href="[% c.uri_for('/netzones', netzonename) %]">
+        <img src="[% c.uri_for('/static', 'icons', 'icon_edit.png') %]"
+            height="16" width="16"
+            alt="[% "edit " _ netzonename | html %]">
+        </a>
+        [% netzonename | html %]
+    </td>
+    <td>
+        <span title="[% netzone.get_c_field('description') | html %]">
+        [% netzone.get_c_field('description') | truncate(20) | html %]
+        </span>
+    </td>
+</tr>
+[% IF loop.last %]
+[% END %]
+[% END %]
+[% END %]
+[% END %] [%# IF %]
+</table>
Index: LATMOS-Accounts-Web/root/html/netzones/menu.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/netzones/menu.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/netzones/menu.tt	(revision 861)
@@ -0,0 +1,14 @@
+<!-- $Id: menu.tt 3103 2010-08-26 12:47:15Z nanardon $ -->
+<div id="oinfo">
+    [% INCLUDE 'includes/obj_prev_next.tt' objtype='netzone' objname=netzonename %]
+    <div>
+    <img src="[% c.uri_for('/static', 'icons', 'preferences-desktop-wallpaper.png') %]"
+    alt="[% "Ordinateur " _ hostgroupname %]">
+    </div>
+    <div>
+    <p id="oname">[% netzonename | html %]</p>
+    [% netzone.get_c_field('type') | html %]<br>
+    [% netzone.get_c_field('description') | html %]
+    </div>
+</div>
+<div style="clear: both;"></div>
Index: LATMOS-Accounts-Web/root/html/sites/default.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/sites/default.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/sites/default.tt	(revision 861)
@@ -1,3 +1,3 @@
-<!-- $Id: default.tt 432 2009-05-17 13:19:38Z nanardon $ -->
+<!-- $Id: default.tt 2800 2010-08-01 12:02:51Z nanardon $ -->
 [% IF NOT site %]
 No site [% sitename | html %] found.
Index: LATMOS-Accounts-Web/root/html/sites/menu.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/sites/menu.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/sites/menu.tt	(revision 861)
@@ -1,13 +1,15 @@
-<!-- $Id: user_menu.tt 443 2009-05-18 03:52:21Z nanardon $ -->
-<div id="omenu">
-    <table border="0">
-    <tr><td>
+<!-- $Id: menu.tt 3103 2010-08-26 12:47:15Z nanardon $ -->
+<div id="oinfo">
+
+    [% INCLUDE 'includes/obj_prev_next.tt' objtype='site' objname=sitename %]
+
+    <div>
     <img src="[% c.uri_for('/static', 'icons', 'user-properties.png') %]"
     alt="[% "User " _ sitename %]">
-    </td>
-    <td>   
-    [% sitename | html %]<br>
+    </div>
+    <div>   
+    <p id="oname">[% sitename | html %]</p>
     [% user.get_c_field('l') | html %]
-    </td></tr>
-    </table>
+    </div>
 </div>
+<div style="clear: both;"></div>
Index: LATMOS-Accounts-Web/root/html/users/address.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/users/address.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/users/address.tt	(revision 861)
@@ -20,4 +20,5 @@
 </form>
 
+[% IF address.base.check_acl(address, '@DELETE', 'w') %]
 <table border=1><tr><td align="center">
 <form action="[% c.uri_for(username, subform) %]" method="POST">
@@ -28,4 +29,5 @@
 </form>
 </td></tr></table>
+[% END %]
 
 </div>
Index: LATMOS-Accounts-Web/root/html/users/address_form.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/users/address_form.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/users/address_form.tt	(revision 861)
@@ -63,7 +63,11 @@
     <td>[% form.attr_field('co', fieldtype) %]</td>
 </tr>
+[% IF form.write_attributes %]
 <tr>
     <th></th>
-    <td>[% form.submit %]</td>
+    <td>
+    [% form.submit %]
+    </td>
 </tr>
+[% END %]
 </table>
Index: LATMOS-Accounts-Web/root/html/users/groups.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/users/groups.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/users/groups.tt	(revision 861)
@@ -20,11 +20,17 @@
 [% FOREACH g = user.get_c_field('memberOf') %]
 [% IF modallow %]
-<form action="[% c.uri_for(username, subform) %]" method="POST">
+[% IF user.get_attributes('department') == g OR 
+      user.get_attributes('contratType') == g %]
+<img src="[% c.uri_for('/static', 'icons', 'changes-prevent.png') %]"
+    width="24" height="24" title="Ce groupe est gÃ©rÃ© via un autre attribut">
+[% ELSE %]
+<form action="[% c.uri_for(username, subform) %]" method="POST" style="display: inline">
 <input type="hidden" name="delgroup" value="[% g | html %]">
 <input type="image" src="[% c.uri_for('/static', 'icons', 'user-group-delete.png') %]" width="24" height="24">
+</form>
+[% END %]
 [% END %]
 <a href="[% c.uri_for('/groups', g) %]">[% g | html %]</a><br>
 [% IF modallow %]
-</form>
 [% END %]
 [% END %]
Index: LATMOS-Accounts-Web/root/html/users/index.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/users/index.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/users/index.tt	(revision 861)
@@ -9,5 +9,5 @@
 
 <table border="0">
-<tr><td colspan="2">[% objectslist.size %] Utilisateurs<br>
+<tr><td colspan="5">
 [% IF initials %]
 Pages: 
@@ -22,18 +22,28 @@
 [% END %]
 </td></tr>
-<tr><th>Login</th><th>Nom</th></tr>
+<tr><td></td><th>Login</th><th>Nom</th><th>Description</th><th>Mail</th></tr>
 [% FOREACH username = userslist %]
 [% user = db.get_object('user', username) %]
 <tr>
-    <td>[% username | html %]</td>
+    <td>
+[% INCLUDE 'user_flag' ouser=user %]
+    </td>
+    <td><a href="[% c.uri_for('/users', username) %]">
+        <img src="[% c.uri_for('/static', 'icons', 'icon_edit.png') %]"
+            height="16" width="16"
+            alt="[% "edit " _ username | html %]">
+    </a>[% username | html %]</td>
     <td>
         [% user.get_c_field('sn') | html %]
         [% user.get_c_field('givenName') | html %]
-        [% user.get_c_field('description') | truncate(20) | html %]
-    <a href="[% c.uri_for('/users', username) %]">
-        <img src="[% c.uri_for('/static', 'icons', 'arrow-right.png') %]"
-            height="16" width="16"
-            alt="[% "edit " _ username | html %]">
-    </a></td>
+   </td>
+    <td>
+    <span title="[% user.get_c_field('description') | html %]">    
+    [% user.get_c_field('description') | truncate(20) | html %]
+    </span>
+   </td>
+    <td><span title="[% user.get_c_field('mail') | html %]">
+    [% user.get_c_field('mail') | truncate(20) | html %]</span>
+   </td>
 </tr>
 [% END %]
Index: LATMOS-Accounts-Web/root/html/users/menu.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/users/menu.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/users/menu.tt	(revision 861)
@@ -1,30 +1,40 @@
 <!-- $Id$ -->
-<div id="omenu">
-
+<div id="oinfo">
 [% INCLUDE 'includes/obj_prev_next.tt' objtype='user' objname=username %]
 
-<table border="0">
-<tr><td>
-[% IF NOT user.get_c_field('exported') OR user.get_c_field('locked') %]
-<img src="[% c.uri_for('/static', 'icons', 'view-media-artist.png') %]"
-[% ELSE %]
-<img src="[% c.uri_for('/static', 'icons', 'user-properties.png') %]"
-[% END %]
-alt="[% "User " _ username %]">
-</td>
-<td>   
-[% username | html %]<br>
-[% user.get_c_field('displayName') | html %]
-</td>
-</tr>
-</table>
+    <div>
+    [% IF NOT user.get_c_field('exported') %]
+    <img src="[% c.uri_for('/static', 'icons', 'gtk-delete.png') %]"
+    alt="[% "User " _ username %]" title="le compte est dÃ©sactivÃ©">
+    [% ELSE %]
+    <img src="[% c.uri_for('/static', 'icons', 'user-properties.png') %]"
+    alt="[% "User " _ username %]">
+    [% END %]
+    </div>
+
+    <div>
+    [% IF user.get_c_field('locked') %]
+    <img src="[% c.uri_for('/static', 'icons', 'locked.png') %]" 
+    alt="le compte est vÃ©rrouillÃ©" title="le compte est vÃ©rrouillÃ©">
+    [% END %]
+    </div>
+
+    <div>
+    <p id="oname">[% username | html %]
+        [% INCLUDE user_flag ouser = user %]</span></p>
+    [% user.get_c_field('displayName') | html %]
+    </div>
+</div>
 <div style="clear: both;"></div>
+<div id="omenu">
         <a href="[% c.uri_for(username) %]"><span [% 'id="oactive"' IF subform == '' %]>SystÃšme</span></a>
-        <a href="[% c.uri_for(username, 'status') %]"><span [% 'id="oactive"' IF subform == 'status' %]>Status</span></a>
+        <a href="[% c.uri_for(username, 'statut') %]"><span [% 'id="oactive"' IF subform == 'statut' %]>Statut</span></a>
         <a href="[% c.uri_for(username, 'groups') %]"><span [% 'id="oactive"' IF subform == 'groups' %]>Groupes</span></a>
         <a href="[% c.uri_for(username, 'address') %]"><span [% 'id="oactive"' IF subform == 'address' %]>Adresses</span></a>
         <a href="[% c.uri_for(username, 'mail') %]"><span [% 'id="oactive"' IF subform == 'mail' %]>eMail</span></a>
+        <a href="[% c.uri_for(username, 'my') %]"><span [% 'id="oactive"' IF subform == 'my' %]>My</span></a>
 [% IF c.model('Accounts').db.check_acl(user, 'userPasswd', 'r') %]
         <a href="[% c.uri_for(username, 'passwd') %]"><span [% 'id="oactive"' IF subform == 'passwd' %]>Mot de passe</span></a>
 [% END %]
 </div>
+<div style="clear:both"></div>
Index: LATMOS-Accounts-Web/root/html/users/my.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/users/my.tt	(revision 861)
+++ LATMOS-Accounts-Web/root/html/users/my.tt	(revision 861)
@@ -0,0 +1,67 @@
+<!-- $Id: my.tt 7943 2011-11-10 15:33:13Z nanardon $ -->
+[% IF NOT user %]
+No user [% username | html %] found.
+[% ELSE %]
+
+<div id="objectform" class="objectform">
+[% INCLUDE 'users/menu.tt' %]
+
+[% INCLUDE 'includes/form.tt'
+    form = form
+    form_uri = c.uri_for(username, subform) %]
+
+<div class="oform">
+<table border="1">
+<tr>
+
+[% FOREACH h = db.search_objects('nethost', 'owner=' _ username) %]
+[% IF loop.first %]
+<td>
+<p>Mes ordinateurs</p>
+<ul>
+[% END %]
+<li><a href="[% c.uri_for('/nethosts', h) %]">[% h | html %]</a></li>
+[% IF loop.last %]
+</ul>
+</td>
+</div>
+[% END %]
+[% END %]
+
+[% FOREACH h = db.search_objects('group', 'managedBy=' _ username) %]
+[% IF loop.first %]
+<td>
+<p>Mes groupes</p>
+<ul>
+[% END %]
+<li><a href="[% c.uri_for('/groups', h) %]">[% h | html %]</a></li>
+[% IF loop.last %]
+</ul>
+</td>
+</div>
+[% END %]
+[% END %]
+
+[% FOREACH h = db.search_objects('user', 'manager=' _ username) %]
+[% IF loop.first %]
+<td>
+<p>Personnels gÃ©rÃ©s</p>
+<ul>
+[% END %]
+[% ouser = db.get_object('user', h) %]
+<li>
+<a href="[% c.uri_for('/users', h) %]">[% ouser.get_attributes('displayName') | html %]</a>
+[% INCLUDE user_flag ouser = ouser %]
+</li>
+[% IF loop.last %]
+</ul>
+</td>
+</div>
+[% END %]
+[% END %]
+
+</tr>
+</table>
+</div>
+
+[% END %]
Index: LATMOS-Accounts-Web/root/html/users/passwd.tt
===================================================================
--- LATMOS-Accounts-Web/root/html/users/passwd.tt	(revision 795)
+++ LATMOS-Accounts-Web/root/html/users/passwd.tt	(revision 861)
@@ -3,20 +3,26 @@
 [% INCLUDE 'users/menu.tt' %]
 
+<script type="text/javascript">
+function check_passwd() {
+    new Ajax.Updater(
+        'perror',
+        '[% c.uri_for('/ajax', 'cracklib', username) %]',
+        { parameters: 'passwd=' + document.getElementById("passwd").value +
+            '&cpasswd=' + document.getElementById("cpasswd").value }
+    )
+}
+</script>
+
 <div id="oform">
 [% IF c.model('Accounts').db.check_acl(user, 'userPassword', 'w') %]
 <form id="fpasswd" action="[% c.uri_for(username, subform) %]" method="POST">
-[% c.prototype.observe_form('fpasswd', {
-    url => c.uri_for('/ajax', 'cracklib', username),
-    update => 'perror',
-    frequency => 1,
-}) %]
 <table border="1">
 <tr>
 <th>Nouveau mot de passe:</th>
-<td><input type="password" name="passwd"></td>
+<td><input type="password" name="passwd" id="passwd" onkeyup="check_passwd()"></td>
 </tr>
 <tr>
 <th>Confirmation:</th>
-<td><input type="password" name="cpasswd"></td>
+<td><input type="password" name="cpasswd" id="cpasswd" onkeyup="check_passwd()"></td>
 </tr>
 <tr><td colspan="2"><span id="perror">[% pmerror | html %]</span></td></tr>
Index: LATMOS-Accounts-Web/root/static/style.css
===================================================================
--- LATMOS-Accounts-Web/root/static/style.css	(revision 795)
+++ LATMOS-Accounts-Web/root/static/style.css	(revision 861)
@@ -2,21 +2,24 @@
     border: none;
     vertical-align: middle;
+    padding: 0em
 }
 
 .pmenu {
+    padding: 0.5em;
+    font-size: 2em;
+}
+
+.permdenied {
+    padding: 0.5em;
+}
+
+#head {
     background-color: #7DB4D8;
-    padding: 0.5em;
-}
-
-.permdenied {
-    padding: 0.5em;
-}
-
-#head {
-    font-size: 2em;
+    padding-bottom: 0.2em;
+    padding-top: 0.2em;
 }
 
 #mainmenu a {
-    font-size: 80%;
+    font-size: 50px;
     overflow: hidden;
     text-decoration: none;
@@ -24,23 +27,73 @@
 
 #mainmenu span {
+    padding-left: 1em;
+    padding-right: 1em;
+    text-decoration: none;
+}
+
+#mainmenu span#actif {
     border-style: outset;
     padding-left: 1em;
     padding-right: 1em;
     text-decoration: none;
-}
-
-#mainmenu span#actif {
-    border-style: inset;
-    border-size: 1px;
-    padding-left: 1em;
-    padding-right: 1em;
-    text-decoration: none;
+    height: 32px;
 }
 
 #mainmenu a:hover {
-    border: solid;
-}
-
-div#objectform  {
+/*    border: solid;*/
+    background-color: #7DB4D8;
+}
+
+#oinfo div {
+    float: left;
+    padding: 0.5em;
+}
+
+#oname {
+    font-size: 1.2em;
+    padding: 0em;
+    margin: 0em;
+}
+
+#omenu a {
+    text-decoration: none;
+    color: black;
+}
+
+#omenu div {
+    float: left;
+    padding-top: 0.5em;
+    padding-bottom: 0.5em;
+}
+
+
+#omenu span {
+    padding-left: 1em;
+    padding-right: 1em;
+    margin: 0;
+    border: groove thin;
+    text-decoration: none;
+    float: left;
+    background-color: #DDDDD9;
+    color: black;
+}
+
+#omenu span#oactive {
+    padding-left: 1em;
+    padding-right: 1em;
+    margin: 0;
+    border: groove thin;
+    text-decoration: none;
+    float: left;
+    background-color: #7DB4D8;
+    color: black;
+}
+
+#omenu a:hover {
+    /* border: inset; */
+    text-color blue;
+}
+
+div.objectform  {
     border-style: outset;
     width: 60%;
@@ -49,5 +102,5 @@
 }
 
-#objectform table {
+.objectform table {
     margin-left: auto;
     margin-right: auto;
@@ -56,47 +109,86 @@
 }
 
-#omenu a {
-    text-decoration: none;
-}
-
-#omenu td {
-    padding-left: 0.5em;
-    padding-right: 0.5em;
-}
-
-#omenu table {
+div.objectformleft {
+    /* border-style: outset; */
+    width: 60%;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+.objectformleft table {
+    /*
+    margin-top: 1em;
+    margin-bottom: 1em;
+    */
+}
+
+.objectformleft #oform {
+    /*border: inset;*/
+    float: left;
+}
+
+.oform {
+    /* border: inset; */
     margin: 0.5em;
 }
 
-
-#omenu span {
-    padding-left: 1em;
-    padding-right: 1em;
-    margin: 0;
-    border: groove thin;
-    text-decoration: none;
-}
-
-#omenu span#oactive {
-    margin: 0;
-    padding-left: 1em;
-    padding-right: 1em;
-    border: outset;
-    border-bottom-style: none;
-    text-decoration: none;
-    font-weight:bold;
-}
-
-#omenu a:hover {
-    border: inset;
-}
-
-#oform {
-    border: inset;
-}
-
-table#oform {
-    margin-left: 20%;
-    margin-right: 20%;
+.oform table {
+    /* margin-left: 20%;
+    margin-right: 20%; */
+}
+
+.oform td {
+    vertical-align: top;
+}
+
+.oform p {
+    margin: 0.5em;
+    font-weight: bold;
+}
+
+.oform ul {
+    padding: 0.5em;
+}
+
+.oform li {
+    list-style-type: none;
+    padding-left: 0.2em;
+}
+
+.inputvalidate img {
+    width: 1em;
+    height:1em;
+}
+
+#navigate {
+}
+
+#navigate p {
+    margin: 0em;
+    text-align: center;
+}
+
+#navigate input {
+    width: 3em;
+    height:3em;
+    vertical-align: middle;
+}
+
+#navigate img {
+    width: 2em;
+    height:2em;
+    vertical-align: middle;
+}
+
+img.notice {
+    width: 1em;
+    height:1em;
+    vertical-align: middle;
+}
+
+img.attr {
+    width: 1.5em;
+    height:1.5em;
+    vertical-align: middle;
 }
 
