- Ajout de la gestion des droits (A étendre et debugger)
authorBenjamin Renard <brenard@easter-eggs.com>
Fri, 8 Feb 2008 17:39:24 +0000 (17:39 +0000)
committerBenjamin Renard <brenard@easter-eggs.com>
Fri, 8 Feb 2008 17:39:24 +0000 (17:39 +0000)
- Propagation des possibilités de l'interface

33 files changed:
trunk/conf/LSobjects/config.LSobjects.LSeecompany.php
trunk/conf/LSobjects/config.LSobjects.LSeegroup.php
trunk/conf/LSobjects/config.LSobjects.LSeepeople.php
trunk/conf/config.LSobjects.php
trunk/conf/config.error_code.php
trunk/conf/config.inc.php
trunk/includes/class/class.LSattr_html.php
trunk/includes/class/class.LSattr_ldap.php
trunk/includes/class/class.LSattribute.php
trunk/includes/class/class.LSform.php
trunk/includes/class/class.LSformElement_select.php
trunk/includes/class/class.LSformElement_text.php
trunk/includes/class/class.LSformElement_textarea.php
trunk/includes/class/class.LSldapObject.php
trunk/includes/class/class.LSsession.php
trunk/includes/functions.php
trunk/includes/js/LSdefault.js
trunk/includes/js/LSform.js
trunk/includes/js/LSview.js [new file with mode: 0644]
trunk/index.php
trunk/index_ajax.php
trunk/modify.php [new file with mode: 0644]
trunk/templates/accueil.tpl [new file with mode: 0644]
trunk/templates/base.tpl
trunk/templates/css/LSform.css
trunk/templates/css/base.css
trunk/templates/empty.tpl [new file with mode: 0644]
trunk/templates/images/edit.png [new file with mode: 0644]
trunk/templates/images/view.png [new file with mode: 0644]
trunk/templates/modify.tpl [new file with mode: 0644]
trunk/templates/view.tpl [new file with mode: 0644]
trunk/templates/viewList.tpl [new file with mode: 0644]
trunk/view.php [new file with mode: 0644]

index d0b5f02..a63b2cf 100644 (file)
 
 $GLOBALS['LSobjects']['LSeecompany'] = array (
   'objectclass' => array(
-    'lscompany',
+    'lscompany'
   ),
   'rdn' => 'o',
   'container_dn' => 'ou=companies',
   'select_display_attrs' => '%{dc}',
+  'label' => _('Sociétés'),
   'attrs' => array (
     'o' => array (
       'label' => _('Nom'),
@@ -36,9 +37,10 @@ $GLOBALS['LSobjects']['LSeecompany'] = array (
       'check_data' => array (
         'alphanumeric'
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'view' => 1,
+      'rights' => array(
+        'user' => 'r',
+        'admin' => 'w'
       ),
       'form' => array (
         'test' => 1
@@ -49,10 +51,11 @@ $GLOBALS['LSobjects']['LSeecompany'] = array (
       'ldap_type' => 'ascii',
       'html_type' => 'text',
       'required' => 1,
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'user' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1
       )
index 668dd26..3fe24d3 100644 (file)
 
 $GLOBALS['LSobjects']['LSeegroup'] = array (
   'objectclass' => array(
-    'lsgroup',
     'posixGroup'
   ),
   'rdn' => 'cn',
   'container_dn' => 'ou=groups',
   'select_display_attrs' => '%{cn}',
+  'label' => _('Groupes'),
   'attrs' => array (
     'cn' => array (
       'label' => _('Nom'),
@@ -35,7 +35,9 @@ $GLOBALS['LSobjects']['LSeegroup'] = array (
       'html_type' => 'text',
       'required' => 1,
       'check_data' => array (
-        'alphanumeric'
+        'alphanumeric' => array(
+          'msg' => _('Le nom ne doit comporter que des lettres et des chiffres.')
+        ),
       ),
       'validation' => array (
         array (
@@ -43,9 +45,10 @@ $GLOBALS['LSobjects']['LSeegroup'] = array (
           'result' => 0
         )
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'view' => 1,
+      'rights' => array(
+        'user' => 'r',
+        'admin' => 'w'
       ),
       'form' => array (
         'test' => 1
@@ -62,9 +65,10 @@ $GLOBALS['LSobjects']['LSeegroup'] = array (
           'result' => 0
         )
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'view' => 1,
+      'rights' => array(
+        'user' => 'r',
+        'admin' => 'w'
       ),
       'form' => array (
         'test' => 1
@@ -75,15 +79,16 @@ $GLOBALS['LSobjects']['LSeegroup'] = array (
       'ldap_type' => 'ascii',
       'html_type' => 'select_list',
       'required' => 0,
+      'multiple' => 1,
       'validation' => array (
         array (
           'basedn' => '%{val}',
           'result' => 1
         )
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'view' => 1,
+      'rights' => array(
+        'admin' => 'w'
       ),
       'form' => array (
         'test' => 1
@@ -91,10 +96,10 @@ $GLOBALS['LSobjects']['LSeegroup'] = array (
       'possible_values' => array(
         'aucun' => _('-- Selectionner --'),
         'OTHER_OBJECT' => array(
-          'object_type' => 'LSeepeople',                                                                       // Nom de l'objet à lister
-          'display_attribute' => '%{cn} (%{uidNumber})',                       // Spécifie le attributs à lister pour le choix,
-                                                                                                         // si non définie => utilisation du 'select_display_attrs'
-                                                                                                         // de la définition de l'objet
+          'object_type' => 'LSeepeople',                      // Nom de l'objet à lister
+          'display_attribute' => '%{cn} (%{uidNumber})',      // Spécifie le attributs à lister pour le choix,
+                                                              // si non définie => utilisation du 'select_display_attrs'
+                                                              // de la définition de l'objet
                                               
           'value_attribute' => '%{dn}',                       // Spécifie le attributs dont la valeur sera retournée par
         )
index 3511743..948c4e4 100644 (file)
@@ -23,7 +23,6 @@
 $GLOBALS['LSobjects']['LSeepeople'] = array (
   'objectclass' => array(
     'top',
-    'lspeople',
     'posixAccount',
     'sambaSamAccount',
   ),
@@ -32,7 +31,8 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
   'before_save' => 'valid',
   'after_save' => 'valid',
   'select_display_attrs' => '%{cn}',
-       // Attributes
+  'label' => _('Utilisateurs'),
+  // Attributes
   'attrs' => array (
     'uid' => array (
       'label' => _('Identifiant'),
@@ -51,10 +51,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
           'msg' => _('Cet identifiant est déjà utilisé.')
         )
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'r',
+        'user' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 0,
         'add' => 1
@@ -78,10 +80,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
           'msg' => _('Cet uid est déjà utilisé.')
         )
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 0,
       )
@@ -93,10 +96,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
       'required' => 1,
       'default_value' => 'titi',
       'validation' => 'valid',
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'w',
+        'user' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
         'add' => 1
@@ -113,10 +118,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
           'msg' => _('Le prenom ne doit comporter que des lettres et des chiffres.')
         ),
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'w',
+        'users' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
         'add' => 1
@@ -130,8 +137,10 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
       'required' => 1,
       'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
         'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+        'user' => 'r',                    // définition des droits de tout les utilisateurs
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
         'add' => 1
@@ -141,7 +150,7 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
       'label' => _('Groupe principal'),
       'ldap_type' => 'numeric',
       'html_type' => 'select_list',
-                       'multiple' => true,
+      'multiple' => false,
       'required' => 1,
       'validation' => array (
         array (
@@ -151,10 +160,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
           'result' => 1
         )
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
         'add' => 1
@@ -167,14 +177,14 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
                                                              // de la définition de l'objet
                                               
           'value_attribute' => 'gidNumber',   // Spécifie le attributs dont la valeur sera retournée par
-          'filter' =>                         // le formulaire spécifie les filtres de recherche pour
+          /*'filter' =>                         // le formulaire spécifie les filtres de recherche pour
             array (                           // l'établissement de la liste d'objets :
               array(                          // Premier filtre
                 'filter' => 'cn=*a*',
                 //'basedn' => 'o=company',
                 'scope' => 'sub',
               )
-            )
+            )*/
         )
       )
     ),
@@ -184,10 +194,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
       'html_type' => 'select_list',
       'required' => 1,
       'default_value' => '/bin/false',
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
         'add' => 1
@@ -203,9 +214,8 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
       'html_type' => 'text',
       'required' => 1,
       'generate_function' => 'generate_sambaSID',
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'r',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'admin' => 'r'
       ),
       'form' => array (
         //'test' => 0,
@@ -217,11 +227,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
       'html_type' => 'text',
       'required' => 1,
       'default_value' => '/home/%{uid}',
-                       'generate_function' => 'generate_homeDirectory',
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'r',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'generate_function' => 'generate_homeDirectory',
+      'rights' => array(
+        'self' => 'r'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
       )
@@ -236,10 +246,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
           'msg' => _("L'adresse e-mail entrée n'est pas valide.")
         ),
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'r',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'r',
+        'user' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
         'add' => 1
@@ -251,10 +263,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
       'html_type' => 'select_list',
       'required' => 1,
       'default_value' => 'M.',
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'w',
+        'user' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
         'add' => 1
@@ -269,16 +283,17 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
       'label' => _('Mail indésirable'),
       'ldap_type' => 'ascii',
       'html_type' => 'text',
-                       'multiple' => true,
+      'multiple' => true,
       'check_data' => array (
         'email' => array(
           'msg' => _("L'adresse e-mail entrée n'est pas valide.")
         ),
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'w',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
       )
@@ -293,27 +308,30 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
           'msg' => _("L'adresse e-mail entrée n'est pas valide.")
         ),
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'w',
+        'admin' => 'w',
+        'user' => 'r'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
       ),
       'possible_values' => array(
-        '%{uid}@autoreponse.example.fr' => 'Oui',
-        '' => 'Non'
+        '' => 'Non',
+        '%{uid}@autoreponse.example.fr' => 'Oui'
       )
     ),
     'vacationInfo' => array (
       'label' => _('Message en reponse'),
       'ldap_type' => 'ascii',
       'html_type' => 'textarea',
-                       'multiple' => true,
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'multiple' => true,
+      'rights' => array(
+        'self' => 'w',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
       )
@@ -327,10 +345,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
           'msg' => _("L'adresse e-mail entrée n'est pas valide.")
         ),
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'w',
+        'user' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
       )
@@ -344,10 +364,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
           'msg' => _("Le quota de l'adresse mail entrée n'est pas valide.")
         ),
       ),
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'r',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
       )
@@ -356,10 +377,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
       'label' => _('Description'),
       'ldap_type' => 'ascii',
       'html_type' => 'text',
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'rights' => array(
+        'self' => 'w',
+        'user' => 'r',
+        'admin' => 'w'
       ),
+      'view' => 1,
       'form' => array (
         'test' => 1,
       )
@@ -368,15 +391,15 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
       'label' => _('Mot de passe'),
       'ldap_type' => 'password',
       'html_type' => 'password',
-                       'required' => 1,
-      'rights' => array(                  // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                    // définition des droits de l'utilisateur sur lui même
-        'users' => 'r'                    // définition des droits de tout les utilisateurs
+      'required' => 1,
+      'rights' => array(
+        'self' => 'w',
+        'admin' => 'w'
+      ),
+      'dependAttrs' => array(
+        'sambaLMPassword',
+        'sambaNTPassword'
       ),
-                       'dependAttrs' => array(
-                               'sambaLMPassword',
-                               'sambaNTPassword'
-                       ),
       'form' => array (
         'test' => 1,
         'add' => 1
@@ -386,24 +409,16 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
       'label' => _('Mot de passe Samba (LM)'),
       'ldap_type' => 'ascii',
       'html_type' => 'password',
-                       'required' => 1,
-      'generate_function' => 'generate_sambaLMPassword',
-      'rights' => array(                 // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                   // définition des droits de l'utilisateur sur lui même
-        'users' => ''                    // définition des droits de tout les utilisateurs
-      )
-               ),
+      'required' => 1,
+      'generate_function' => 'generate_sambaLMPassword'
+    ),
     'sambaNTPassword' => array (
       'label' => _('Mot de passe Samba (NT)'),
       'ldap_type' => 'ascii',
       'html_type' => 'password',
-                       'required' => 1,
-      'generate_function' => 'generate_sambaNTPassword',
-      'rights' => array(                 // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut)
-        'self' => 'w',                   // définition des droits de l'utilisateur sur lui même
-        'users' => ''                    // définition des droits de tout les utilisateurs
-      )
+      'required' => 1,
+      'generate_function' => 'generate_sambaNTPassword'
     )
-       )
+  )
 );
 ?>
index 63b7937..7de6bea 100644 (file)
 
 define('LS_OBJECTS_DIR', LS_CONF_DIR . 'LSobjects/');
 
-$GLOBALS['LSobjects']['loads'] = array (
-       'LSeepeople', 'LSeegroup'
+$GLOBALS['LSobjects_loads'] = array (
+       'LSeepeople',
+       'LSeegroup',
+       'LSeecompany'
 );
 
 ?>
index eea4720..f45b6ea 100644 (file)
@@ -100,10 +100,10 @@ $GLOBALS['LSerror_code'] = array (
     'msg' => _("LSldapObject : Sans DN, l'objet n'a put être modifié."),
     'level' => 'c'
   ),
-       34 => array (
-               'msg' => _("LSldapObject : L'attribut %{attr_depend} dépendant de l'attribut %{attr} n'existe pas."),
-               'level' => 'w'
-       ),
+  34 => array (
+    'msg' => _("LSldapObject : L'attribut %{attr_depend} dépendant de l'attribut %{attr} n'existe pas."),
+    'level' => 'w'
+  ),
   
   // LSldapObject
   41 => array (
@@ -130,11 +130,11 @@ $GLOBALS['LSerror_code'] = array (
     'msg' => _("LSattribute : La valeur de l'attribut %{attr} ne peut pas être générée."),
     'level' => 'c'
   ),
-       47 => array (
+  47 => array (
     'msg' => _("LSattribute : La valeur de l'attribut %{attr} n'a pas put être générée."),
     'level' => 'c'
   ),
-       48 => array (
+  48 => array (
     'msg' => _("LSattribute : La génération de l'attribut %{attr} n'a pas retourné une valeur correcte."),
     'level' => 'c'
   ),
@@ -153,40 +153,40 @@ $GLOBALS['LSerror_code'] = array (
     'level' => 'c'
   ),
 
-       // LSform
-       201 => array(
-               'msg' => _("LSform : Erreur durant la recupération des valeurs du formulaire."),
-               'level' => 'c'
-       ),
-       202 => array(
-               'msg' => _("LSform : Erreur durant la récupération de la valeur du formulaire du champ '%{element}'."),
-               'level' => 'c'
-       ),
-       203 => array(
-               'msg' => _("LSform : Les données du champ %{element} ne sont pas valides."),
-               'level' => 'c'
-       ),
-       204 => array(
-               'msg' => _("LSform : Le champ %{element} n'existe pas."),
-               'level' => 'c'
-       ),
-       205 => array(
-               'msg' => _("LSfom : Type de champ inconnu (%{type})."),
-               'level' => 'c'
-       ),
-       206 => array(
-               'msg' => _("LSform : Erreur durant la création de l'élement '%{element}'."),
-               'level' => 'c'
-       ),
-       207 => array(
-               'msg' => _("LSform : Aucune valeur de rentrée pour le champs '%{element}'."),
-               'level' => 'c'
-       ),
+  // LSform
+  201 => array(
+    'msg' => _("LSform : Erreur durant la recupération des valeurs du formulaire."),
+    'level' => 'c'
+  ),
+  202 => array(
+    'msg' => _("LSform : Erreur durant la récupération de la valeur du formulaire du champ '%{element}'."),
+    'level' => 'c'
+  ),
+  203 => array(
+    'msg' => _("LSform : Les données du champ %{element} ne sont pas valides."),
+    'level' => 'c'
+  ),
+  204 => array(
+    'msg' => _("LSform : Le champ %{element} n'existe pas."),
+    'level' => 'c'
+  ),
+  205 => array(
+    'msg' => _("LSfom : Type de champ inconnu (%{type})."),
+    'level' => 'c'
+  ),
+  206 => array(
+    'msg' => _("LSform : Erreur durant la création de l'élement '%{element}'."),
+    'level' => 'c'
+  ),
+  207 => array(
+    'msg' => _("LSform : Aucune valeur de rentrée pour le champs '%{element}'."),
+    'level' => 'c'
+  ),
 
-       301 => array(
-               'msg' => _("LSformRule : Aucune regex n'a été fournis pour la validation des données."),
-               'level' => 'w'
-       ),
+  301 => array(
+    'msg' => _("LSformRule : Aucune regex n'a été fournis pour la validation des données."),
+    'level' => 'w'
+  ),
   
   // functions
   901 => array (
@@ -194,46 +194,50 @@ $GLOBALS['LSerror_code'] = array (
     'level' => 'c'
   ),
 
-       // LSsession
-       1001 => array (
-               'msg' => _("LSsession : La constante %{const} n'est pas définie."),
-               'level' => 'c'
-       ),
-       1002 => array (
-               'msg' => _("LSsession : Le support %{addon} n'est pas assuré. Vérifier la compatibilité du système et la configuration de l'addon"),
-               'level' => 'c'
-       ),
-       1003 => array (
-               'msg' => _("LSsession : Données de configuration du serveur LDAP invalide. Impossible d'établir une connexion."),
-               'level' => 'c'
-       ),
-       1004 => array (
-               'msg' => _("LSsession : Impossible de charger l'objets de type %{type} : type inconnu."),
-               'level' => 'c'
-       ),
-       1005 => array (
-               'msg' => _("LSsession : Impossible d'effecture l'authentification : Type d'objet d'authentification inconnu (%{type})."),
-               'level' => 'c'
-       ),
-       1006 => array (
-               'msg' => _("LSsession : Identifiant ou mot de passe incorrect."),
-               'level' => 'c'
-       ),
-       1007 => array (
-               'msg' => _("LSsession : Impossible de vous identifier : Duplication d'authentité."),
-               'level' => 'c'
-       ),
-       1008 => array (
-               'msg' => _("LSsession : Impossible d'inclure le moteur de rendu Smarty."),
-               'level' => 'c'
-       ),
-       1009 => array (
-               'msg' => _("LSsession : Impossible de se connecter au Serveur LDAP."),
-               'level' => 'c'
-       ),
-       1010 => array (
-               'msg' => _("LSsession : Impossible de charger la classe des objets d'authentification."),
-               'level' => 'c'
-       )
+  // LSsession
+  1001 => array (
+    'msg' => _("LSsession : La constante %{const} n'est pas définie."),
+    'level' => 'c'
+  ),
+  1002 => array (
+    'msg' => _("LSsession : Le support %{addon} n'est pas assuré. Vérifier la compatibilité du système et la configuration de l'addon"),
+    'level' => 'c'
+  ),
+  1003 => array (
+    'msg' => _("LSsession : Données de configuration du serveur LDAP invalide. Impossible d'établir une connexion."),
+    'level' => 'c'
+  ),
+  1004 => array (
+    'msg' => _("LSsession : Impossible de charger l'objets de type %{type} : type inconnu."),
+    'level' => 'c'
+  ),
+  1005 => array (
+    'msg' => _("LSsession : Impossible d'effecture l'authentification : Type d'objet d'authentification inconnu (%{type})."),
+    'level' => 'c'
+  ),
+  1006 => array (
+    'msg' => _("LSsession : Identifiant ou mot de passe incorrect."),
+    'level' => 'c'
+  ),
+  1007 => array (
+    'msg' => _("LSsession : Impossible de vous identifier : Duplication d'authentité."),
+    'level' => 'c'
+  ),
+  1008 => array (
+    'msg' => _("LSsession : Impossible d'inclure le moteur de rendu Smarty."),
+    'level' => 'c'
+  ),
+  1009 => array (
+    'msg' => _("LSsession : Impossible de se connecter au Serveur LDAP."),
+    'level' => 'c'
+  ),
+  1010 => array (
+    'msg' => _("LSsession : Impossible de charger la classe des objets d'authentification."),
+    'level' => 'c'
+  ),
+  1011 => array (
+    'msg' => _("LSsession : Vous n'êtes pas authorisé à effectuer cette action."),
+    'level' => 'c'
+  )
 );
 ?>
index 29b3682..969c138 100644 (file)
 $GLOBALS['LSconfig'] = array(
   'NetLDAP' => '/usr/share/php/Net/LDAP.php',
   'Smarty' => '/var/www/tmp/Smarty-2.6.18/libs/Smarty.class.php',
-       'lang' => 'fr_FR.UTF8',
-       'ldap_servers' => array (
-               array (
-                       'name' => 'Ldap 1',
-                       'ldap_config'=> array(
-             'host'     => '127.0.0.1',
-             'port'     => 389,
-             'version'  => 3,
-             'starttls' => false,
-             'binddn'   => 'uid=toto,ou=people,o=ls',
-             'bindpw'   => 'toto',
-             'basedn'   => 'o=ls',
-             'options'  => array(),
-             'filter'   => '(objectClass=*)',
-             'scope'    => 'sub'
-       ),
-                       'authobject' => 'LSeepeople',
-                       'authobject_pwdattr' => 'userPassword'
-               ),
-               array (
-                       'name' => 'Ldap 2',
-                       'ldap_config'=> array(
-             'host'     => '127.0.0.1',
-             'port'     => 389,
-             'version'  => 3,
-             'starttls' => false,
-             'binddn'   => 'uid=toto,ou=people,o=com',
-             'bindpw'   => 'toto',
-             'basedn'   => 'o=com',
-             'options'  => array(),
-             'filter'   => '(objectClass=*)',
-             'scope'    => 'sub'
-       ),
-                       'subdnobject' => 'LSeecompany',
-                       'authobject' => 'LSeepeople',
-                       'authobject_pwdattr' => 'userPassword'
-               )
-       )
+  'lang' => 'fr_FR.UTF8',
+  'cacheLSrights' => true,
+  'ldap_servers' => array (
+    array (
+      'name' => 'Ldap 1',
+      'ldap_config'=> array(
+            'host'     => '127.0.0.1',
+            'port'     => 389,
+            'version'  => 3,
+            'starttls' => false,
+        'binddn'   => 'uid=toto,ou=people,o=ls',
+        'bindpw'   => 'toto',
+        'basedn'   => 'o=ls',
+        'options'  => array(),
+        'filter'   => '(objectClass=*)',
+        'scope'    => 'sub'
+        ),
+        'LSadmins' => array (
+          'o=ost' => array (
+            'uid=toto,ou=people,o=ls' => NULL,
+            'cn=adminldap,ou=groups,o=ost' => array (
+              'attr' => 'uniqueMember',
+              'LSobject' => 'LSeegroup'
+            )
+          )
+        ),
+        'cacheLSrights' => false,
+      'authobject' => 'LSeepeople',
+      'authobject_pwdattr' => 'userPassword'
+    ),
+    array (
+      'name' => 'Ldap 2',
+      'ldap_config'=> array(
+        'host'     => '127.0.0.1',
+        'port'     => 389,
+        'version'  => 3,
+        'starttls' => false,
+        'binddn'   => 'uid=toto,ou=people,o=com',
+        'bindpw'   => 'toto',
+        'basedn'   => 'o=com',
+        'options'  => array(),
+        'filter'   => '(objectClass=*)',
+        'scope'    => 'sub'
+      ),
+      'subdnobject' => 'LSeecompany',
+      'authobject' => 'LSeepeople',
+      'authobject_pwdattr' => 'userPassword'
+    )
+  )
 );
 
 //Debug
-$GLOBALS['LSdebug']['active'] = true;
+$GLOBALS['LSdebug']['active'] = false;
 
 // Définitions des locales
 $textdomain = 'ldapsaisie';
@@ -83,9 +94,9 @@ define('LS_JS_DIR', LS_INCLUDE_DIR .'js/');
 
 // Javascript
 $GLOBALS['defaultJSscipts']=array(
-       'mootools.js',
-       'LSdefault.js',
-       'Debugger.js'
+  'mootools.js',
+  'LSdefault.js',
+  'Debugger.js'
 );
 
 ?>
index d3872dd..394e39d 100644 (file)
@@ -40,7 +40,7 @@ class LSattr_html {
    *
    * @param[in] $name string Nom de l'attribut ldap
    * @param[in] $config array Configuration de l'objet
-        * @param[in] &$attribute LSattribute L'objet LSattribut parent
+   * @param[in] &$attribute LSattribute L'objet LSattribut parent
    *
    * @retval boolean Retourne true.
    */   
@@ -51,36 +51,43 @@ class LSattr_html {
     return true;
   }
   
-       /**
-        * Retourne le label de l'attribut
-        *
-        * Retourne le label de l'attribut ou son nom si aucun label n'est défini
-        * dans la configuration.
-        *
-        * @retval string Le label de l'attribut.
-        */
+  /**
+   * Retourne le label de l'attribut
+   *
+   * Retourne le label de l'attribut ou son nom si aucun label n'est défini
+   * dans la configuration.
+   *
+   * @retval string Le label de l'attribut.
+   */
   function getLabel() {
-               if ( $this -> config['label'] != '' ) {
-                       return $this -> config['label'];
-               }
-               else {
-                       return $this -> name;
-               }
+    if ( $this -> config['label'] != '' ) {
+      return $this -> config['label'];
+    }
+    else {
+      return $this -> name;
+    }
   }
   
-       /**
-        * Ajoute l'attribut au formualaire passer en paramètre
-        *
-        * @param[in] &$form LSform Le formulaire
-        * @param[in] $idForm L'identifiant du formulaire
-        * @param[in] $data Valeur du champs du formulaire
-        *
-        * @retval LSformElement L'element du formulaire ajouté
-        */
+  /**
+   * Ajoute l'attribut au formualaire passer en paramètre
+   *
+   * @param[in] &$form LSform Le formulaire
+   * @param[in] $idForm L'identifiant du formulaire
+   * @param[in] $data Valeur du champs du formulaire
+   *
+   * @retval LSformElement L'element du formulaire ajouté
+   */
   function addToForm (&$form,$idForm,$data=NULL) {
     $GLOBALS['LSerror'] -> addErrorCode(101,$this -> name);
   }
+
+  function __sleep() {
+    return ( array_keys( get_object_vars( &$this ) ) );
+  }
   
+  function __wakeup() {
+    return true;
+  }
 }
 
 ?>
index 9c1938d..fa19e84 100644 (file)
@@ -40,7 +40,7 @@ class LSattr_ldap {
    *
    * @param[in] $name string Nom de l'attribut ldap
    * @param[in] $config array Configuration de l'objet
-        * @param[in] &$attribute LSattribute L'objet LSattribut parent
+   * @param[in] &$attribute LSattribute L'objet LSattribut parent
    *
    * @retval boolean Retourne true.
    */
@@ -50,29 +50,36 @@ class LSattr_ldap {
     return true;
   }
 
-       /**
-        * Retourne la valeur de l'attribut après traitement lié à son type ldap
-        *
-        * @param[in] $data mixed La valeur de l'attribut
-        *
-        * @retval mixed La valeur traitée de l'attribut
-        */
+  /**
+   * Retourne la valeur de l'attribut après traitement lié à son type ldap
+   *
+   * @param[in] $data mixed La valeur de l'attribut
+   *
+   * @retval mixed La valeur traitée de l'attribut
+   */
   function getUpdateData($data) {
     return $data;
   }
  
-       /**
-        * Retourne la valeur d'affichage de l'attribut après traitement lié à son type ldap
-        *
-        * @param[in] $data mixed La valeur de l'attribut
-        *
-        * @retval mixed La valeur d'affichage de l'attribut
-        */
+  /**
+   * Retourne la valeur d'affichage de l'attribut après traitement lié à son type ldap
+   *
+   * @param[in] $data mixed La valeur de l'attribut
+   *
+   * @retval mixed La valeur d'affichage de l'attribut
+   */
 
   function getDisplayValue($data) {
     return $data;
   }
   
+  function __sleep() {
+    return ( array_keys( get_object_vars( &$this ) ) );
+  }
+  
+  function __wakeup() {
+    return true;
+  }
 }
 
 ?>
index d9b6155..b9fa1b9 100644 (file)
@@ -40,7 +40,8 @@ class LSattribute {
   var $data;
   var $updateData=false;
   var $is_validate=false;
-       var $_finalUpdateData=false;
+  var $_finalUpdateData=false;
+  var $_myRights=NULL;
   
   /**
    * Constructeur
@@ -56,15 +57,15 @@ class LSattribute {
    * @param[in] &$ldapObject LSldapObject L'objet ldap parent
    *
    * @retval boolean Retourne true si la création a réussi, false sinon.
-   */  
+   */ 
   function LSattribute ($name,$config,&$ldapObject) {
     $this -> name = $name;
     $this -> config = $config;
-               $this -> ldapObject = $ldapObject;
+    $this -> ldapObject = $ldapObject;
     $html_type = "LSattr_html_".$config['html_type'];
     $ldap_type = "LSattr_ldap_".$config['ldap_type'];
-               $GLOBALS['LSsession'] -> loadLSclass($html_type);
-               $GLOBALS['LSsession'] -> loadLSclass($ldap_type);
+    $GLOBALS['LSsession'] -> loadLSclass($html_type);
+    $GLOBALS['LSsession'] -> loadLSclass($ldap_type);
     if((class_exists($html_type))&&(class_exists($ldap_type))) {
       $this -> html = new $html_type($name,$config,$this);
       $this -> ldap = new $ldap_type($name,$config,$this);
@@ -85,7 +86,7 @@ class LSattribute {
    * @retval string Le label de l'attribut
    *
    * @see LSattr_html::getLabel()
-   */  
+   */ 
 
   function getLabel() {
     return $this -> html -> getLabel();
@@ -119,21 +120,21 @@ class LSattribute {
   
   /**
    * Retourne la valeur de l'attribut
-        *
-        * Retourne la valeur nouvelle si elle existe, sinon la valeur passé.
+   *
+   * Retourne la valeur nouvelle si elle existe, sinon la valeur passé.
    *
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval mixed La valeur de l'attribut
    */
   function getValue() {
-               $updateData=$this -> getUpdateData();
-               if (empty($updateData)) {
-           return $this -> data;
-               }
-               else {
-                       return $updateData;
-               }
+    $updateData=$this -> getUpdateData();
+    if (empty($updateData)) {
+      return $this -> data;
+    }
+    else {
+      return $updateData;
+    }
   }
   
   /**
@@ -188,6 +189,9 @@ class LSattribute {
    */
   function addToForm(&$form,$idForm,&$obj=NULL) {
     if(isset($this -> config['form'][$idForm])) {
+      if($this -> myRights() == 'n') {
+        return true;
+      }
       if($this -> data !='') {
         $data=$this -> getFormVal();
       }
@@ -196,36 +200,96 @@ class LSattribute {
       }
       
       $element = $this -> html -> addToForm($form,$idForm,$data);
-                       if(!$element) {
-                               $GLOBALS['LSerror'] -> addErrorCode(206,$this -> name);
-                       }
+      if(!$element) {
+        $GLOBALS['LSerror'] -> addErrorCode(206,$this -> name);
+      }
 
       if($this -> config['required']==1) {
         $form -> setRequired($this -> name);
       }
 
-      if($this -> config['form'][$idForm]==0) {
+      if (($this -> config['form'][$idForm]==0) || ($this -> myRights() == 'r')) {
         $element -> freeze();
       }
-      
-      if(isset($this -> config['check_data'])) {
-        if(is_array($this -> config['check_data'])) {
-          foreach ($this -> config['check_data'] as $rule => $rule_infos) {
-            if((!$form -> isRuleRegistered($rule))&&($rule!='')) {
-              $GLOBALS['LSerror'] -> addErrorCode(43,array('attr' => $this->name,'rule' => $rule));
-              return;
+      else {
+        if(isset($this -> config['check_data'])) {
+          if(is_array($this -> config['check_data'])) {
+            foreach ($this -> config['check_data'] as $rule => $rule_infos) {
+              if((!$form -> isRuleRegistered($rule))&&($rule!='')) {
+                $GLOBALS['LSerror'] -> addErrorCode(43,array('attr' => $this->name,'rule' => $rule));
+                return;
+              }
+              if(!isset($rule_infos['msg']))
+                $rule_infos['msg']=getFData(_('La valeur du champs %{label} est invalide.'),$this -> config['label']);
+              if(!isset($rule_infos['param']))
+                $rule_infos['param']=NULL;
+              $form -> addRule($this -> name,$rule,array('msg' => $rule_infos['msg'], 'param' => $rule_infos['param']));
             }
-            if(!isset($rule_infos['msg']))
-              $rule_infos['msg']=getFData(_('La valeur du champs %{label} est invalide.'),$this -> config['label']);
-            if(!isset($rule_infos['param']))
-              $rule_infos['param']=NULL;
-            $form -> addRule($this -> name,$rule,array('msg' => $rule_infos['msg'], 'param' => $rule_infos['param']));
+          }
+          else {
+            $GLOBALS['LSerror'] -> addErrorCode(44,$this->name);
           }
         }
+      } 
+    }
+    return true;
+  }
+
+  function myRights() {
+    // cache
+    if ($this -> _myRights != NULL) {
+      return $this -> _myRights;
+    }
+    $return='n';
+    switch ($this -> ldapObject -> whoami()) {
+      case 'admin':
+        if($this -> config['rights']['admin']=='w') {
+          $return='w';
+        }
         else {
-          $GLOBALS['LSerror'] -> addErrorCode(44,$this->name);
+          $return='r';
+        }
+        break;
+      case 'self':
+        if (($this -> config['rights']['self'] == 'w') || ($this -> config['rights']['self'] == 'r')) {
+          $return=$this -> config['self'];
+        }
+        break;
+      default:    //user
+        if (($this -> config['rights']['user'] == 'w') || ($this -> config['rights']['user'] == 'r')) {
+            $return=$this -> config['user'];
         }
+        break;
+    }
+    $this -> _myRights = $return;
+    return $return;
+  }
+
+  /**
+   * Ajoute l'attribut au formualaire de vue
+   *
+   * Cette méthode ajoute l'attribut au formulaire $form de vue si il doit l'être
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @param[in] object $form Le formulaire dans lequel doit être ajouté l'attribut
+   *
+   * @retval boolean true si l'ajout a fonctionner ou qu'il n'est pas nécessaire, false sinon
+   */
+  function addToView(&$form) {
+    if((isset($this -> config['view'])) && ($this -> myRights() != 'n')) {
+      if($this -> data !='') {
+        $data=$this -> getFormVal();
+      }
+      else {
+        $data='';
       }
+      $element = $this -> html -> addToForm($form,'view',$data);
+      if(!$element) {
+        $GLOBALS['LSerror'] -> addErrorCode(206,$this -> name);
+      }
+      $element -> freeze();
+      return true;
     }
     return true;
   }
@@ -256,9 +320,9 @@ class LSattribute {
    * @retval string La valeur a afficher dans le formulaire.
    */
   function getFormVal() {
-               $data=$this -> getDisplayValue();
-               if(!is_array($data))
-                       $data=array($data);
+    $data=$this -> getDisplayValue();
+    if(!is_array($data))
+      $data=array($data);
     return $data;
   }
   
@@ -274,8 +338,7 @@ class LSattribute {
   function setUpdateData($data) {
     if($this -> getFormVal() != $data) {
       $this -> updateData=$data;
-                       debug($this -> name.' is updated (o = '.$this -> getFormVal().' | n = '.$data.')');
-               }
+    }
   }
   
   /**
@@ -333,41 +396,41 @@ class LSattribute {
     return (function_exists($this -> config['generate_function']));
   }
 
-       /**
-        * Génere la valeur de l'attribut à partir de la fonction de génération
-        *
-        * @author Benjamin Renard <brenard@easter-eggs.com>
-        *
-        * @retval boolean true si la valeur à put être générée, false sinon
-        */
-       function generateValue() {
-               if ( ! $this -> canBeGenerated() ) {
-                       return;
-               }
-               $value=call_user_func($this -> config['generate_function'],$this -> ldapObject);
-               if (!empty($value)) {
-                       //$this -> setValue($value); // pas nécéssaire ??
-                       $this -> updateData=$value;
-                       return true;
-               }
-               return;
-       }
+  /**
+   * Génere la valeur de l'attribut à partir de la fonction de génération
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @retval boolean true si la valeur à put être générée, false sinon
+   */
+  function generateValue() {
+    if ( ! $this -> canBeGenerated() ) {
+      return;
+    }
+    $value=call_user_func($this -> config['generate_function'],$this -> ldapObject);
+    if (!empty($value)) {
+      //$this -> setValue($value); // pas nécéssaire ??
+      $this -> updateData=$value;
+      return true;
+    }
+    return;
+  }
   
   /**
    * Retourne la valeur de l'attribut pour son enregistrement dans l'annuaire
-        * si l'attribut à été modifié.
+   * si l'attribut à été modifié.
    *
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval mixed La valeur de l'attribut pour son enregistrement dans l'annuaire
    */
   function getUpdateData() {
-               if (!$this -> isUpdate()) {
-                       return;
-               }
-               if ( $this -> _finalUpdateData ) {
-                       return  $this -> _finalUpdateData;
-               }
+    if (!$this -> isUpdate()) {
+      return;
+    }
+    if ( $this -> _finalUpdateData ) {
+      return  $this -> _finalUpdateData;
+    }
     $data=$this -> updateData;
     if ($this -> config['onSave']) {
       if (is_array($this -> config['onSave'])) {
@@ -395,7 +458,7 @@ class LSattribute {
     else {
       $result = $this -> ldap -> getUpdateData($data);
     }
-               $this -> _finalUpdateData = $result;
+    $this -> _finalUpdateData = $result;
     return $result;
   }
  
@@ -419,7 +482,15 @@ class LSattribute {
    */
   function getDependsAttrs() {
     return $this -> config['dependAttrs'];
-  } 
+  }
+  
+  function __sleep() {
+    return ( array_keys( get_object_vars( &$this ) ) );
+  }
+  
+  function __wakeup() {
+    return true;
+  }
 }
 
 ?>
index 586a7ff..45a2111 100644 (file)
@@ -36,14 +36,14 @@ class LSform {
   var $elements = array();
   var $_rules = array();
 
-       var $_postData = array();
+  var $_postData = array();
  
-       var $_elementsErrors = array();
-       var $_isValidate = false;
+  var $_elementsErrors = array();
+  var $_isValidate = false;
 
-       var $_notUpdate = array();
+  var $_notUpdate = array();
 
-       /**
+  /**
    * Constructeur
    *
    * Cette methode construit l'objet et définis la configuration.
@@ -54,12 +54,12 @@ class LSform {
    * @param[in] $submit string La valeur du bouton submit
    *
    * @retval void
-   */  
+   */ 
   function LSform (&$ldapObject,$idForm,$submit="Envoyer"){
     $this -> idForm = $idForm;
     $this -> submit = $submit;
-               $this -> ldapObject = $ldapObject;
-               $GLOBALS['LSsession'] -> loadLSclass('LSformElement');
+    $this -> ldapObject = $ldapObject;
+    $GLOBALS['LSsession'] -> loadLSclass('LSformElement');
   }
   
   /**
@@ -68,29 +68,64 @@ class LSform {
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval void
-   */  
+   */ 
   function display(){
-               $GLOBALS['LSsession'] -> addJSscript('LSform.js');
-               $GLOBALS['LSsession'] -> addCssFile('LSform.css');
-               $GLOBALS['Smarty'] -> assign('LSform_action',$_SERVER['PHP_SELF']);
-               $LSform_header = "\t<input type='hidden' name='validate' value='LSform'/>\n\t<input type='hidden' name='idForm' id='LSform_idform' value='".$this -> idForm."'/>\n\t<input type='hidden' name='LSform_objecttype' id='LSform_objecttype'  value='".$this -> ldapObject -> getType()."'/>\n";
-               $GLOBALS['Smarty'] -> assign('LSform_header',$LSform_header);
-               $fields = array();
-               foreach($this -> elements as $element) {
-                       $field = array();
-                       $field = $element -> getDisplay();
-                       if (isset($this -> _elementsErrors[$element -> name])) {
-                               $field['errors']= $this -> _elementsErrors[$element -> name];
-                       }
-                       $fields[] = $field;
-               }
-               $GLOBALS['Smarty'] -> assign('LSform_fields',$fields);
-               if($this -> can_validate) {
-                       $GLOBALS['Smarty'] -> assign('LSform_submittxt',$this -> submit);
-               }
+    if ($this -> idForm == 'view') {
+      $GLOBALS['LSsession'] -> addJSscript('LSview.js');
+    }
+    else {
+      $GLOBALS['LSsession'] -> addJSscript('LSform.js');
+    }
+    $GLOBALS['LSsession'] -> addCssFile('LSform.css');
+    $GLOBALS['Smarty'] -> assign('LSform_action',$_SERVER['PHP_SELF']);
+    $LSform_header = "\t<input type='hidden' name='validate' value='LSform'/>\n
+    \t<input type='hidden' name='idForm' id='LSform_idform' value='".$this -> idForm."'/>\n
+    \t<input type='hidden' name='LSform_objecttype' id='LSform_objecttype'  value='".$this -> ldapObject -> getType()."'/>\n
+    \t<input type='hidden' name='LSform_objectdn' id='LSform_objectdn'  value='".$this -> ldapObject -> getValue('dn')."'/>";
+    $GLOBALS['Smarty'] -> assign('LSform_header',$LSform_header);
+    $LSform_object = array(
+      'type' => $this -> ldapObject -> getType(),
+      'dn' => $this -> ldapObject -> getDn()
+    );
+    $GLOBALS['Smarty'] -> assign('LSform_object',$LSform_object);
+    $fields = array();
+    foreach($this -> elements as $element) {
+      $field = array();
+      $field = $element -> getDisplay();
+      if (isset($this -> _elementsErrors[$element -> name])) {
+        $field['errors']= $this -> _elementsErrors[$element -> name];
+      }
+      $fields[] = $field;
+    }
+    $GLOBALS['Smarty'] -> assign('LSform_fields',$fields);
+    if($this -> can_validate) {
+      $GLOBALS['Smarty'] -> assign('LSform_submittxt',$this -> submit);
+    }
   }
   
   /**
+   * Affiche la vue
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @retval void
+   */ 
+  function displayView(){
+    $GLOBALS['LSsession'] -> addCssFile('LSform.css');
+    $LSform_object = array(
+      'type' => $this -> ldapObject -> getType(),
+      'dn' => $this -> ldapObject -> getDn()
+    );
+    $GLOBALS['Smarty'] -> assign('LSform_object',$LSform_object);
+    $fields = array();
+    foreach($this -> elements as $element) {
+      $field = $element -> getDisplay();
+      $fields[] = $field;
+    }
+    $GLOBALS['Smarty'] -> assign('LSform_fields',$fields);
+  }  
+  
+  /**
    * Défini l'erreur sur un champ
    *
    * @author Benjamin Renard <brenard@easter-eggs.com>
@@ -101,7 +136,7 @@ class LSform {
    *                 du champs concerné.
    *
    * @retval void
-   */  
+   */ 
   function setElementError($attr,$msg=NULL) {
     if($msg!='') {
       $msg_error=getFData($msg,$attr->getLabel());
@@ -118,264 +153,265 @@ class LSform {
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval boolean true si le formulaire a été validé et que les données ont été validées, false sinon
-   */  
+   */ 
   function validate(){
     if(!$this -> can_validate)
       return;
     if ($this -> isSubmit()) {
-                       if (!$this -> getPostData()) {
-                               $GLOBALS['LSerror'] -> addErrorCode(201);
-                               return;
-                       }
+      if (!$this -> getPostData()) {
+        $GLOBALS['LSerror'] -> addErrorCode(201);
+        return;
+      }
       //Validation des données ici !!! ///
-                       if (!$this -> checkData()) {
-                               $this -> setValuesFromPostData();
-                               return;
-                       }
-                       debug("les données sont checkées");
-                       $this -> _isValidate = true;
-                       return true;
-               }
-               return false;
+      if (!$this -> checkData()) {
+        $this -> setValuesFromPostData();
+        return;
+      }
+      debug("les données sont checkées");
+      $this -> _isValidate = true;
+      return true;
+    }
+    return false;
   }
 
-       /**
-        * Vérifier les données du formulaire à partir des régles définis sur les champs
-        *
-        * @author Benjamin Renard <brenard@easter-eggs.com>
-        *
-        * @retval boolean true si toutes la saisie est OK, false sinon
-        */
-       function checkData() {
-               $retval=true;
-               foreach ($this -> _postData as $element => $values) {
-                       if(!is_array($values)) {
-                               $values=array($values);
-                       }
-                       if ($this -> elements[$element] -> isRequired()) {
-                               if (!$this -> checkRequired($values)) {
-                                       $this -> setElementError($this -> elements[$element],_("Champ obligatoire"));
-                                       $retval=false;
-                               }
-                       }
+  /**
+   * Vérifier les données du formulaire à partir des régles définis sur les champs
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @retval boolean true si toutes la saisie est OK, false sinon
+   */
+  function checkData() {
+    $retval=true;
+    foreach ($this -> _postData as $element => $values) {
+      if(!is_array($values)) {
+        $values=array($values);
+      }
+      if ($this -> elements[$element] -> isRequired()) {
+        if (!$this -> checkRequired($values)) {
+          $this -> setElementError($this -> elements[$element],_("Champ obligatoire"));
+          $retval=false;
+        }
+      }
 
-                       foreach($values as $value) {
-                               if (empty($value)) {
-                                       continue;
-                               }
-                               if (!is_array($this -> _rules[$element]))
-                                       continue;
-                               $GLOBALS['LSsession'] -> loadLSclass('LSformRule');
-                               foreach($this -> _rules[$element] as $rule) {
-                                       $ruleType="LSformRule_".$rule['name'];
-                                       $GLOBALS['LSsession'] -> loadLSclass($ruleType);
-                                       if (! call_user_func(array( $ruleType,'validate') , $value, $rule['options'])) {
-                                               $retval=false;
-                                               $this -> setElementError($this -> elements[$element],$rule['options']['msg']);
-                                       }
-                               }
-                       }
-               }
-               return $retval;
-       }
+      foreach($values as $value) {
+        if (empty($value)) {
+          continue;
+        }
+        if (!is_array($this -> _rules[$element]))
+          continue;
+        $GLOBALS['LSsession'] -> loadLSclass('LSformRule');
+        foreach($this -> _rules[$element] as $rule) {
+          $ruleType="LSformRule_".$rule['name'];
+          $GLOBALS['LSsession'] -> loadLSclass($ruleType);
+          if (! call_user_func(array( $ruleType,'validate') , $value, $rule['options'])) {
+            $retval=false;
+            $this -> setElementError($this -> elements[$element],$rule['options']['msg']);
+          }
+        }
+      }
+    }
+    return $retval;
+  }
 
-       /**
-        * Vérifie si au moins une valeur est présente dans le tableau
-        *
-        * @author Benjamin Renard <brenard@easter-eggs.com>
-        *
-        * @param[in] $data array tableau de valeurs
-        *
-        * @retval boolean true si au moins une valeur est présente, false sinon
-        */
-       function checkRequired($data) {
-               foreach($data as $val) {
-                       if (!empty($val))
-                               return true;
-               }
-               return;
-       }
+  /**
+   * Vérifie si au moins une valeur est présente dans le tableau
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @param[in] $data array tableau de valeurs
+   *
+   * @retval boolean true si au moins une valeur est présente, false sinon
+   */
+  function checkRequired($data) {
+    foreach($data as $val) {
+      if (!empty($val))
+        return true;
+    }
+    return;
+  }
 
   /**
-        * Verifie si la saisie du formulaire est présente en POST
-        *
-        * @author Benjamin Renard <brenard@easter-eggs.com>
-        *
-        * @retval boolean true si la saisie du formulaire est présente en POST, false sinon
-        */
+   * Verifie si la saisie du formulaire est présente en POST
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @retval boolean true si la saisie du formulaire est présente en POST, false sinon
+   */
   function isSubmit() {
     if( (isset($_POST['validate']) && ($_POST['validate']=='LSform')) && (isset($_POST['idForm']) && ($_POST['idForm'] == $this -> idForm)) )
       return true;
-               return;
+    return;
   }
 
-       /**
-        * Récupère les valeurs postées dans le formulaire
-        *
-        * @author Benjamin Renard <brenard@easter-eggs.com>
-        *
-        * @retval boolean true si les valeurs ont bien été récupérées, false sinon.
-        */
-       function getPostData() {
-               foreach($this -> elements as $element_name => $element) {
-                       if( !($element -> getPostData($this -> _postData)) ) {
-                               $GLOBALS['LSerror'] -> addErrorCode(202,$element_name);
-                               return;
-                       }
-               }
-               return true;
-       }
+  /**
+   * Récupère les valeurs postées dans le formulaire
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @retval boolean true si les valeurs ont bien été récupérées, false sinon.
+   */
+  function getPostData() {
+    foreach($this -> elements as $element_name => $element) {
+      if( !($element -> getPostData($this -> _postData)) ) {
+        $GLOBALS['LSerror'] -> addErrorCode(202,$element_name);
+        return;
+      }
+    }
+    return true;
+  }
 
-       /*
-        * Ajoute un élément au formulaire
-        
-        * Ajoute un élément au formulaire et définis les informations le concernant.
-        *
-        * @param[in] $type string Le type de l'élément
-        * @param[in] $name string Le nom de l'élément
-        * @param[in] $label string Le label de l'élément
-        * @param[in] $param mixed Paramètres supplémentaires
-        *
-        * @retval LSformElement
-        */
-       function addElement($type,$name,$label,$params=array()) {
-               $elementType='LSformElement_'.$type;
-               $GLOBALS['LSsession'] -> loadLSclass($elementType);
-               if (!class_exists($elementType)) {
-                       $GLOBALS['LSerror'] -> addErrorCode(205,array('type' => $type));        
-                       return;
-               }
-               $element=$this -> elements[$name] = new $elementType($this,$name,$label,$params);
-               if ($element) {
-                       return $element;
-               }
-               else {
-                       unset ($this -> elements[$name]);
-                       $GLOBALS['LSerror'] -> addErrorCode(206,array('element' => $name));
-                       return;
-               }
-       }
+  /*
+   * Ajoute un élément au formulaire
+   * 
+   * Ajoute un élément au formulaire et définis les informations le concernant.
+   *
+   * @param[in] $type string Le type de l'élément
+   * @param[in] $name string Le nom de l'élément
+   * @param[in] $label string Le label de l'élément
+   * @param[in] $param mixed Paramètres supplémentaires
+   *
+   * @retval LSformElement
+   */
+  function addElement($type,$name,$label,$params=array()) {
+    $elementType='LSformElement_'.$type;
+    $GLOBALS['LSsession'] -> loadLSclass($elementType);
+    if (!class_exists($elementType)) {
+      $GLOBALS['LSerror'] -> addErrorCode(205,array('type' => $type));  
+      return;
+    }
+    $element=$this -> elements[$name] = new $elementType($this,$name,$label,$params);
+    if ($element) {
+      return $element;
+    }
+    else {
+      unset ($this -> elements[$name]);
+      $GLOBALS['LSerror'] -> addErrorCode(206,array('element' => $name));
+      return;
+    }
+  }
 
-       /*
-        * Ajoute une règle sur un élément du formulaire
-        *
-        * @author Benjamin Renard <brenard@easter-eggs.com>
-        *
-        * @param[in] $element string Le nom de l'élément conserné
-        * @param[in] $rule string Le nom de la règle à ajouter
-        * @param[in] $options array Options (facultative)
-        *
-        * @retval boolean
-        */
-       function addRule($element, $rule, $options=array()) {
-               if ( isset($this ->elements[$element]) ) {
-                       if ($this -> isRuleRegistered($rule)) {
-                               $this -> _rules[$element][]=array(
-                                                                       'name' => $rule,
-                                                                       'options' => $options
-                                                                       );
-                               return true;
-                       }
-                       else {
-                               $GLOBALS['LSerror'] -> addErrorCode(43,array('attr' => $element,'rule'=>$rule));                        
-                               return;
-                       }
-               }
-               else {  
-                       $GLOBALS['LSerror'] -> addErrorCode(204,array('element' => $element));
-                       return;
-               }
-       }
+  /*
+   * Ajoute une règle sur un élément du formulaire
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @param[in] $element string Le nom de l'élément conserné
+   * @param[in] $rule string Le nom de la règle à ajouter
+   * @param[in] $options array Options (facultative)
+   *
+   * @retval boolean
+   */
+  function addRule($element, $rule, $options=array()) {
+    if ( isset($this ->elements[$element]) ) {
+      if ($this -> isRuleRegistered($rule)) {
+        $this -> _rules[$element][]=array(
+                  'name' => $rule,
+                  'options' => $options
+                  );
+        return true;
+      }
+      else {
+        $GLOBALS['LSerror'] -> addErrorCode(43,array('attr' => $element,'rule'=>$rule));      
+        return;
+      }
+    }
+    else {  
+      $GLOBALS['LSerror'] -> addErrorCode(204,array('element' => $element));
+      return;
+    }
+  }
 
 
 
 
-       /*
-        * Définis comme requis un élément
-        *
-        * @author Benjamin Renard <brenard@easter-eggs.com>
-        *
-        * @param[in] $element string Le nom de l'élément conserné
-        *
-        * @retval boolean
-        */
-       function setRequired($element) {
-               if (isset( $this -> elements[$element] ) )
-                       return $this -> elements[$element] -> setRequired();
-               else
-                       return;
-       }
+  /*
+   * Définis comme requis un élément
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @param[in] $element string Le nom de l'élément conserné
+   *
+   * @retval boolean
+   */
+  function setRequired($element) {
+    if (isset( $this -> elements[$element] ) )
+      return $this -> elements[$element] -> setRequired();
+    else
+      return;
+  }
 
-       /*
-        * Détermine la valider de la règle
-        *
-        * Devra déterminer si la règle passez en paramètre est correcte
-        *
-        * @author Benjamin Renard <brenard@easter-eggs.com>
-        *
-        * @param[in] $element string Le nom de l'élément conserné
-        */
-       function isRuleRegistered($rule) {
-               $GLOBALS['LSsession'] -> loadLSclass('LSformRule');
-               $GLOBALS['LSsession'] -> loadLSclass('LSformRule_'.$rule);
-               return class_exists('LSformRule_'.$rule);
-       }
+  /*
+   * Détermine la valider de la règle
+   *
+   * Devra déterminer si la règle passez en paramètre est correcte
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @param[in] $element string Le nom de l'élément conserné
+   */
+  function isRuleRegistered($rule) {
+    $GLOBALS['LSsession'] -> loadLSclass('LSformRule');
+    $GLOBALS['LSsession'] -> loadLSclass('LSformRule_'.$rule);
+    return class_exists('LSformRule_'.$rule);
+  }
 
-       /**
-        * Retourne les valeurs validés du formulaire
-        *
-        * @retval mixed Les valeurs validés du formulaire, ou false si elles ne le sont pas
-        */
-       function exportValues() {
-               if ($this -> _isValidate) {
-                       return $this -> _postData;
-               }
-               else {
-                       return;
-               }
-       }
+  /**
+   * Retourne les valeurs validés du formulaire
+   *
+   * @retval mixed Les valeurs validés du formulaire, ou false si elles ne le sont pas
+   */
+  function exportValues() {
+    if ($this -> _isValidate) {
+      return $this -> _postData;
+    }
+    else {
+      return;
+    }
+  }
 
-       /**
-        * Retourn un élement du formulaire
-        *
-        * @param[in] string $element Nom de l'élement voulu
-        *
-        * @retval LSformElement L'élement du formulaire voulu
-        */
-       function getElement($element) {
-               return $this -> elements[$element];
-       }
+  /**
+   * Retourn un élement du formulaire
+   *
+   * @param[in] string $element Nom de l'élement voulu
+   *
+   * @retval LSformElement L'élement du formulaire voulu
+   */
+  function getElement($element) {
+    return $this -> elements[$element];
+  }
 
-       /**
-        * Défini les valeurs des élements à partir des valeurs postées
-        *
-        * @retval boolean True si les valeurs ont été définies, false sinon.
-        */
-       function setValuesFromPostData() {
-               if (empty($this -> _postData)) {
-                       return;
-               }
-               foreach($this -> _postData as $element => $values) {
-                       $this -> elements[$element] -> setValue($values);
-               }
-               return true;
-       }
+  /**
+   * Défini les valeurs des élements à partir des valeurs postées
+   *
+   * @retval boolean True si les valeurs ont été définies, false sinon.
+   */
+  function setValuesFromPostData() {
+    if (empty($this -> _postData)) {
+      return;
+    }
+    foreach($this -> _postData as $element => $values) {
+      $this -> elements[$element] -> setValue($values);
+    }
+    return true;
+  }
 
-       /**
-        * Retourne le code HTML d'un champ vide.
-        * 
-        * @param[in] string Le nom du champ du formulaire
-        *
-        * @retval string Le code HTML du champ vide.
-        */
-       function getEmptyField($element) {
-               $element = $this -> getElement($element);
-               if ($element) {
-                       return $element -> getEmptyField();                     
-               }
-               else
-                       return;
-       }
+  /**
+   * Retourne le code HTML d'un champ vide.
+   * 
+   * @param[in] string Le nom du champ du formulaire
+   *
+   * @retval string Le code HTML du champ vide.
+   */
+  function getEmptyField($element) {
+    $element = $this -> getElement($element);
+    if ($element) {      
+      return $element -> getEmptyField();     
+    }
+    else {
+      return;
+    }
+  }
 
 }
 
index 6b3a965..65895b9 100644 (file)
@@ -40,42 +40,37 @@ class LSformElement_select extends LSformElement {
   * @retval array
   */
   function getDisplay(){
-               $return = $this -> getLabelInfos();
-               // value
-               if (!$this -> isFreeze()) {
-                       if ($this -> params['multiple']==0) {
-                               $multiple_tag='';
-                       }
-                       else {
-                               $multiple_tag='multiple';
-                       }
-                               
-                       $return['html'] = "<select name='".$this -> name."' $multiple_tag class='LSform'>\n";
-                       foreach ($this -> params['text_possible_values'] as $choice_value => $choice_text) {
-                               if (in_array($choice_value, $this -> values)) {
-                                       $selected=' selected';
-                               }
-                               else {
-                                       $selected='';
-                               }
-                               $return['html'].="<option value=\"".$choice_value."\"$selected>$choice_text</option>\n";
-                       }
-                       $return['html'].="</select>\n";
-               }
-               else {
-                       $return['html']="<ul class='LSform'>\n";
-                       foreach ($params['possible_values'] as $choice_value => $choice_text) {
-                               if (in_array($choice_value, $this -> value)) {
-                                       $return['html'].="<li class='LSform'><strong>$choice_text</strong></li>";
-                               }
-                               else {
-                                       $return['html'].="<li class='LSform'>$choice_text</li>";
-                               }
-                       }
-                       $return['html'].="</ul>\n";
-               }
-               return $return;
-       }
+    $return = $this -> getLabelInfos();
+    // value
+    if (!$this -> isFreeze()) {
+      if ($this -> params['multiple']==0) {
+        $multiple_tag='';
+      }
+      else {
+        $multiple_tag='multiple';
+      }
+        
+      $return['html'] = "<select name='".$this -> name."' $multiple_tag class='LSform'>\n";
+      foreach ($this -> params['text_possible_values'] as $choice_value => $choice_text) {
+        if (in_array($choice_value, $this -> values)) {
+          $selected=' selected';
+        }
+        else {
+          $selected='';
+        }
+        $return['html'].="<option value=\"".$choice_value."\"$selected>$choice_text</option>\n";
+      }
+      $return['html'].="</select>\n";
+    }
+    else {
+      $return['html']="<ul class='LSform'>\n";
+      foreach ($this -> values as $value) {
+        $return['html'].="<li class='LSform'>".$this -> params['text_possible_values'][$value]."</strong></li>";
+      }
+      $return['html'].="</ul>\n";
+    }
+    return $return;
+  }
 
 }
 
index 3460022..5d89cd5 100644 (file)
@@ -40,46 +40,46 @@ class LSformElement_text extends LSformElement {
   * @retval array
   */
   function getDisplay(){
-               $return = $this -> getLabelInfos();
-               // value
-               if (!$this -> isFreeze()) {
-                       $return['html'] = "<ul class='LSform'>\n";
-                       if (empty($this -> values)) {
-                               $return['html'] .= "<li>".$this -> getEmptyField()."</li>\n";
-                       }
-                       else {
-                               $multiple = $this -> getMultipleData();
-                               foreach ($this -> values as $value) {
-                                       $id = "LSform_".$this -> name."_".rand();
-                                       $return['html'] .= "<li><input type='text' name='".$this -> name."[]' value=\"".$value."\" id='".$id."'>".$multiple."</li>\n";
-                               }
-                       }
-                       $return['html'] .= "</ul>\n";
-               }
-               else {
-                       $return['html'] = "<ul class='LSform'>\n";
-                       if (empty($this -> values)) {
-                               $return['html'] .= "<li>"._('Aucunes valeur definie')."</li>\n";
-                       }
-                       else {
-                               foreach ($this -> values as $value) {
-                                       $return['html'] .= "<li>".$value."</li>\n";
-                               }
-                       }
-                       $return['html'] .= "</ul>\n";
-               }
-               return $return;
+    $return = $this -> getLabelInfos();
+    // value
+    if (!$this -> isFreeze()) {
+      $return['html'] = "<ul class='LSform'>\n";
+      if (empty($this -> values)) {
+        $return['html'] .= "<li>".$this -> getEmptyField()."</li>\n";
+      }
+      else {
+        foreach ($this -> values as $value) {
+          $multiple = $this -> getMultipleData();
+          $id = "LSform_".$this -> name."_".rand();
+          $return['html'] .= "<li><input type='text' name='".$this -> name."[]' value=\"".$value."\" id='".$id."'>".$multiple."</li>\n";
+        }
+      }
+      $return['html'] .= "</ul>\n";
+    }
+    else {
+      $return['html'] = "<ul class='LSform'>\n";
+      if (empty($this -> values)) {
+        $return['html'] .= "<li>"._('Aucunes valeur definie')."</li>\n";
+      }
+      else {
+        foreach ($this -> values as $value) {
+          $return['html'] .= "<li>".$value."</li>\n";
+        }
+      }
+      $return['html'] .= "</ul>\n";
+    }
+    return $return;
   }
 
  /*
-       * Retourne le code HTML d'un champ vide
-       *
-       * @retval string Code HTML d'un champ vide.
-       */
-       function getEmptyField() {
-               $multiple = $this -> getMultipleData();
-               return "<input type='text' name='".$this -> name."[]' id='LSform_".$this -> name."_".rand()."'>".$multiple;
-       }
+  * Retourne le code HTML d'un champ vide
+  *
+  * @retval string Code HTML d'un champ vide.
+  */
+  function getEmptyField() {
+    $multiple = $this -> getMultipleData();
+    return "<input type='text' name='".$this -> name."[]' id='LSform_".$this -> name."_".rand()."'>".$multiple;
+  }
 }
 
 ?>
index fc0d0e6..d082c5b 100644 (file)
@@ -40,45 +40,43 @@ class LSformElement_textarea extends LSformElement {
   * @retval array
   */
   function getDisplay(){
-               $return = $this -> getLabelInfos();
-               // value
-               if (!$this -> isFreeze()) {
-                       $return['html'] = "<ul class='LSform'>\n";
-                       if (empty($this -> values)) {
-                               $return['html'] = "<li>".$this -> getEmptyField()."</li>\n";
-                       }
-                       else {
-                               $multiple = $this -> getMultipleData();
-                               foreach($this -> values as $value) {
-                                       $id = "LSform_".$this -> name."_".rand();
-                                       $return['html'].="<li><textarea name='".$this -> name."[]' id='".$id."'>".$value."</textarea>\n".$multiple."</li>";
-                               }
-                       }
-                       $return['html'] .= "</ul>\n";
-               }
-               else {
-                       $return['html'] = "<ul class='LSform'>\n";
-                       if (empty($this -> values)) {
-                               $return['html'].="<li>"._('Aucunes valeur definie')."</li>\n";
-                       }
-                       else {
-                               foreach ($this -> values as $value) {
-                                       $return['html'].="<li>".$value."</li>\n";
-                               }
-                       }
-                       $return['html'] .= "</ul>\n";
-               }       
-               return $return;
+    $return = $this -> getLabelInfos();
+    // value
+    $return['html'] = "<ul class='LSform'>\n";
+    if (!$this -> isFreeze()) {
+      if (empty($this -> values)) {
+        $return['html'] .= "<li class='LSform'>".$this -> getEmptyField()."</li>\n";
+      }
+      else {
+        foreach($this -> values as $value) {
+          $multiple = $this -> getMultipleData();
+          $id = "LSform_".$this -> name."_".rand();
+          $return['html'].="<li class='LSform'><textarea name='".$this -> name."[]' id='".$id."' class='LSform'>".$value."</textarea>\n".$multiple."</li>";
+        }
+      }
+    }
+    else {
+      if (empty($this -> values)) {
+        $return['html'].="<li class='LSform'>"._('Aucunes valeur definie')."</li>\n";
+      }
+      else {
+        foreach ($this -> values as $value) {
+          $return['html'].="<li class='LSform'>".$value."</li>\n";
+        }
+      }
+    }
+    $return['html'] .= "</ul>\n"; 
+    return $return;
   }
 
  /*
-       * Retourne le code HTML d'un champ vide
-       *
-       * @retval string Code HTML d'un champ vide.
-       */
-       function getEmptyField() {
-               $multiple = $this -> getMultipleData();
-               return "<textarea name='".$this -> name."[]' id='LSform".$this -> name."_".rand()."'></textarea>\n".$multiple;
+  * Retourne le code HTML d'un champ vide
+  *
+  * @retval string Code HTML d'un champ vide.
+  */
+  function getEmptyField() {
+    $multiple = $this -> getMultipleData();
+    return "<textarea name='".$this -> name."[]' id='LSform".$this -> name."_".rand()."' class='LSform'></textarea>\n".$multiple;
   }
 
 }
index 2a94a80..399be38 100644 (file)
@@ -30,14 +30,16 @@ $GLOBALS['LSsession'] -> loadLSclass('LSattribute');
  * @author Benjamin Renard <brenard@easter-eggs.com>
  */
 class LSldapObject { 
-       
-       var $config;
-       var $type_name;
-       var $attrs;
+  
+  var $config;
+  var $type_name;
+  var $attrs;
   var $forms;
+  var $view;
   var $dn=false;
   var $other_values=array();
   var $submitError=true;
+  var $_whoami=NULL;
   
   /**
    * Constructeur
@@ -51,27 +53,27 @@ class LSldapObject {
    * @param[in] $config array La configuration de l'objet
    *
    * @retval boolean true si l'objet a été construit, false sinon.
-   */  
-       function LSldapObject($type_name,$config='auto') {
-               $this -> type_name = $type_name;
+   */ 
+  function LSldapObject($type_name,$config='auto') {
+    $this -> type_name = $type_name;
     $this -> config = $config;
     if($config=='auto') {
-           if(isset($GLOBALS['LSobjects'][$type_name])) {
-             $this -> config = $GLOBALS['LSobjects'][$type_name];
-                       }
-           else {
-             $GLOBALS['LSerror'] -> addErrorCode(21);
-             return;
-           }
+      if(isset($GLOBALS['LSobjects'][$type_name])) {
+        $this -> config = $GLOBALS['LSobjects'][$type_name];
+      }
+      else {
+        $GLOBALS['LSerror'] -> addErrorCode(21);
+        return;
+      }
     }
-               foreach($this -> config['attrs'] as $attr_name => $attr_config) {
-                       if(!$this -> attrs[$attr_name]=new LSattribute($attr_name,$attr_config,$this)) {
+    foreach($this -> config['attrs'] as $attr_name => $attr_config) {
+      if(!$this -> attrs[$attr_name]=new LSattribute($attr_name,$attr_config,$this)) {
         return;
       }
-               }
+    }
     return true;
-       }
-       
+  }
+  
   /**
    * Charge les données de l'objet
    *
@@ -83,15 +85,15 @@ class LSldapObject {
    * @param[in] $dn string Le DN de l'objet.
    *
    * @retval boolean true si la chargement a réussi, false sinon.
-   */  
+   */ 
   function loadData($dn) {
-    $this -> dn = $dn;
-    $data = $GLOBALS['LSldap'] -> getAttrs($dn);
-    foreach($this -> attrs as $attr_name => $attr) {
-      if(!$this -> attrs[$attr_name] -> loadData($data[$attr_name]))
-        return;
-    }
-    return true;
+      $this -> dn = $dn;
+      $data = $GLOBALS['LSldap'] -> getAttrs($dn);
+      foreach($this -> attrs as $attr_name => $attr) {
+        if(!$this -> attrs[$attr_name] -> loadData($data[$attr_name]))
+          return;
+      }
+      return true;
   }
   
   /**
@@ -100,7 +102,7 @@ class LSldapObject {
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval boolean true si la rechargement a réussi, false sinon.
-   */  
+   */ 
   function reloadData() {
     $data = $GLOBALS['LSldap'] -> getAttrs($this -> dn);
     foreach($this -> attrs as $attr_name => $attr) {
@@ -116,10 +118,10 @@ class LSldapObject {
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval string Format d'affichage de l'objet.
-   */  
-       function getDisplayAttributes() {
-               return $this -> config['select_display_attrs'];
-       }
+   */ 
+  function getDisplayAttributes() {
+    return $this -> config['select_display_attrs'];
+  }
   
   /**
    * Retourne la valeur descriptive d'affichage de l'objet
@@ -132,7 +134,7 @@ class LSldapObject {
    * @param[in] $spe [<i>optionnel</i>] string Format d'affichage de l'objet
    *
    * @retval string Valeur descriptive d'affichage de l'objet
-   */  
+   */ 
   function getDisplayValue($spe='') {
     if ($spe=='') {
       $spe = $this -> getDisplayAttributes();
@@ -151,7 +153,7 @@ class LSldapObject {
    * @param[in] $format string Format de la chaine
    *
    * @retval string Valeur d'une chaine formatée
-   */  
+   */ 
   function getFData($format) {
     $format=getFData($format,$this,'getValue');
     return $format;
@@ -169,9 +171,9 @@ class LSldapObject {
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval LSform Le formulaire crée
-   */  
+   */ 
   function getForm($idForm,$config=array()) {
-               $GLOBALS['LSsession'] -> loadLSclass('LSform');
+    $GLOBALS['LSsession'] -> loadLSclass('LSform');
     $LSform = new LSform($this,$idForm);
     $this -> forms[$idForm] = array($LSform,$config);
     foreach($this -> attrs as $attr_name => $attr) {
@@ -183,6 +185,29 @@ class LSldapObject {
   }
   
   /**
+   * Construit un formulaire de l'objet
+   * 
+   * Cette méthode construit un formulaire LSform à partir de la configuration de l'objet
+   * et de chaque attribut.
+   *
+   * @param[in] $idForm [<b>required</b>] Identifiant du formulaire a créer
+   * @param[in] $config Configuration spécifique pour le formulaire
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @retval LSform Le formulaire crée
+   */ 
+  function getView() {
+    $GLOBALS['LSsession'] -> loadLSclass('LSform');
+    $this -> view = new LSform($this,'view');
+    foreach($this -> attrs as $attr_name => $attr) {
+      $this -> attrs[$attr_name] -> addToView($this -> view);
+    }
+    $this -> view -> can_validate = false;
+    return $this -> view;
+  }  
+  
+  /**
    * Rafraichis le formulaire de l'objet
    * 
    * Cette méthode recharge les données d'un formulaire LSform.
@@ -192,7 +217,7 @@ class LSldapObject {
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval boolean true sile formulaire a été rafraichis, false sinon
-   */  
+   */ 
   function refreshForm($idForm) {
     $LSform = $this -> forms[$idForm][0];
     foreach($this -> attrs as $attr_name => $attr) {
@@ -216,7 +241,7 @@ class LSldapObject {
    *
    * @see validateAttrsData()
    * @see submitChange()
-   */  
+   */ 
   function updateData($idForm=NULL) {
     if($idForm!=NULL) {
       if(isset($this -> forms[$idForm]))
@@ -246,7 +271,7 @@ class LSldapObject {
       }
     }
     if($this -> validateAttrsData($idForm)) {
-                       debug("les données sont validées");
+      debug("les données sont validées");
       if(isset($this -> config['before_save'])) {
         if(function_exists($this -> config['before_save'])) {
           if(!$this -> config['before_save']($this)) {
@@ -260,7 +285,7 @@ class LSldapObject {
         }
       }
       if ($this -> submitChange($idForm)) {
-                               debug('Les modifications sont submitées');
+        debug('Les modifications sont submitées');
         $this -> submitError = false;
         $this -> reloadData();
         $this -> refreshForm($idForm);
@@ -286,37 +311,37 @@ class LSldapObject {
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval boolean true si les données sont valides, false sinon
-   */  
+   */ 
   function validateAttrsData($idForm) {
     $LSform=$this -> forms[$idForm][0];
     foreach($this -> attrs as $attr) {
-                       if (!$attr -> isValidate()) {
-                               if($attr -> isUpdate()) {
-                                       if (!$this -> validateAttrData($LSform, $attr)) {
-                                               return;
-                                       }
-                               }
-                               else if( ($attr -> getValue() == '') && ($attr -> isRequired()) ) {     
-                                       if ( $attr -> canBeGenerated()) {
-                                               if ($attr -> generateValue()) {
-                                                       if (!$this -> validateAttrData($LSform, $attr)) {
-                                                               $GLOBALS['LSerror'] -> addErrorCode(48,$attr -> getLabel());
-                                                               return;
-                                                       }
-                                               }
-                                               else {
-                                                       $GLOBALS['LSerror'] -> addErrorCode(47,$attr -> getLabel());
-                                                       return;
-                                               }
-                                       }
-                                       else {
-                                               $GLOBALS['LSerror'] -> addErrorCode(46,$attr -> getLabel());
-                                               return;
-                                       }
+      if (!$attr -> isValidate()) {
+        if($attr -> isUpdate()) {
+          if (!$this -> validateAttrData($LSform, $attr)) {
+            return;
+          }
+        }
+        else if( ($attr -> getValue() == '') && ($attr -> isRequired()) ) { 
+          if ( $attr -> canBeGenerated()) {
+            if ($attr -> generateValue()) {
+              if (!$this -> validateAttrData($LSform, $attr)) {
+                $GLOBALS['LSerror'] -> addErrorCode(48,$attr -> getLabel());
+                return;
+              }
+            }
+            else {
+              $GLOBALS['LSerror'] -> addErrorCode(47,$attr -> getLabel());
+              return;
+            }
+          }
+          else {
+            $GLOBALS['LSerror'] -> addErrorCode(46,$attr -> getLabel());
+            return;
+          }
 
-                               }
-       }
-               }
+        }
+      }
+    }
     return true;
   }
 
@@ -330,109 +355,109 @@ class LSldapObject {
    *
    * @retval boolean true si les données sont valides, false sinon
    */
-       function validateAttrData(&$LSform,&$attr) {
-               $vconfig=$attr -> getValidateConfig();
+  function validateAttrData(&$LSform,&$attr) {
+    $vconfig=$attr -> getValidateConfig();
 
-               $data=$attr -> getUpdateData();
-               if(!is_array($data)) {
-                       $data=array($data);
-               }
+    $data=$attr -> getUpdateData();
+    if(!is_array($data)) {
+      $data=array($data);
+    }
 
-               // Validation des valeurs de l'attribut
+    // Validation des valeurs de l'attribut
     if(is_array($vconfig)) {
-                       foreach($vconfig as $test) {
-                               // Définition du basedn par défaut
-                               if (!isset($test['basedn'])) {
-                                       $test['basedn']=$GLOBALS['LSsession']->topDn;
-                               }
+      foreach($vconfig as $test) {
+        // Définition du basedn par défaut
+        if (!isset($test['basedn'])) {
+          $test['basedn']=$GLOBALS['LSsession']->topDn;
+        }
 
-                               // Définition du message d'erreur
-                               if (!empty($test['msg'])) {
-                                       $msg_error=getFData($test['msg'],$this,'getValue');
-                               }
-                               else {
-                                       $msg_error=getFData(_("L'attribut %{attr} n'est pas valide."),$attr -> getLabel());
-                               }
-                               foreach($data as $val) {
-                                       // validation par check LDAP
-                                       if((isset($test['filter'])||isset($test['basedn']))&&(isset($test['result']))) {
-                                               $sparams=(isset($test['scope']))?array('scope' => $test['scope']):array();
-                                               $this -> other_values['val']=$val;
-                                               $sfilter_user=(isset($test['basedn']))?getFData($test['filter'],$this,'getValue'):NULL;
-                                               if(isset($test['object_type'])) {
-                                                       $test_obj = new $test['object_type']();
-                                                       $sfilter=$test_obj->getObjectFilter();
-                                                       $sfilter='(&'.$sfilter;
-                                                       if($sfilter_user[0]=='(') {
-                                                               $sfilter=$sfilter.$sfilter_user.')';
-                                                       }
-                                                       else {
-                                                               $sfilter=$sfilter.'('.$sfilter_user.'))';
-                                                       }
-                                               }
-                                               else {
-                                                       $sfilter=$sfilter_user;
-                                               }
-                                               $sbasedn=(isset($test['basedn']))?getFData($test['basedn'],$this,'getValue'):NULL;
-                                               $ret=$GLOBALS['LSldap'] -> getNumberResult ($sfilter,$sbasedn,$sparams);
-                                               if($test['result']==0) {
-                                                       if($ret!=0) {
-                                                               $LSform -> setElementError($attr,$msg_error);
-                                                               return;
-                                                       }
-                                               }
-                                               else {
-                                                       if($ret<=0) {
-                                                               $LSform -> setElementError($attr,$msg_error);
-                                                               return;
-                                                       }
-                                               }
-                                       }
-                                       // Validation par fonction externe
-                                       else if(isset($test['function'])) {
-                                               if (function_exists($test['function'])) {
-                                                       if(!$test['function']($this)) {
-                                                               $LSform -> setElementError($attr,$msg_error);
-                                                       return;
-                                                       }
-                                               }
-                                               else {
-                                                       $GLOBALS['LSerror'] -> addErrorCode(24,array('attr' => $attr->name,'obj' => $this->type_name,'func' => $test['function']));
-                                                       return;
-                                               }
-                                       }
-                                       else {
-                                               $GLOBALS['LSerror'] -> addErrorCode(25,array('attr' => $attr->name,'obj' => $this->type_name));
-                                               return;
-                                       }
-                               }
-                       }
-               }
-               // Génération des valeurs des attributs dépendants
-               $dependsAttrs=$attr->getDependsAttrs();
-               if (!empty($dependsAttrs)) {
-                       foreach($dependsAttrs as $dependAttr) {
-                               if(!isset($this -> attrs[$dependAttr])){
-                                       $GLOBALS['LSerror'] -> addErrorCode(34,array('attr_depend' => $dependAttr, 'attr' => $attr -> getLabel()));
-                                       continue;
-                               }
-                               if($this -> attrs[$dependAttr] -> canBeGenerated()) {
-                                       if (!$this -> attrs[$dependAttr] -> generateValue()) {
-                                               $GLOBALS['LSerror'] -> addErrorCode(47,$this -> attrs[$dependAttr] -> getLabel());
-                                               return;
-                                       }
-                               }
-                               else {
-                                       $GLOBALS['LSerror'] -> addErrorCode(46,$this -> attrs[$dependAttr] -> getLabel());
-                                       return;
-                               }
-                       }
-               }
+        // Définition du message d'erreur
+        if (!empty($test['msg'])) {
+          $msg_error=getFData($test['msg'],$this,'getValue');
+        }
+        else {
+          $msg_error=getFData(_("L'attribut %{attr} n'est pas valide."),$attr -> getLabel());
+        }
+        foreach($data as $val) {
+          // validation par check LDAP
+          if((isset($test['filter'])||isset($test['basedn']))&&(isset($test['result']))) {
+            $sparams=(isset($test['scope']))?array('scope' => $test['scope']):array();
+            $this -> other_values['val']=$val;
+            $sfilter_user=(isset($test['basedn']))?getFData($test['filter'],$this,'getValue'):NULL;
+            if(isset($test['object_type'])) {
+              $test_obj = new $test['object_type']();
+              $sfilter=$test_obj->getObjectFilter();
+              $sfilter='(&'.$sfilter;
+              if($sfilter_user[0]=='(') {
+                $sfilter=$sfilter.$sfilter_user.')';
+              }
+              else {
+                $sfilter=$sfilter.'('.$sfilter_user.'))';
+              }
+            }
+            else {
+              $sfilter=$sfilter_user;
+            }
+            $sbasedn=(isset($test['basedn']))?getFData($test['basedn'],$this,'getValue'):NULL;
+            $ret=$GLOBALS['LSldap'] -> getNumberResult ($sfilter,$sbasedn,$sparams);
+            if($test['result']==0) {
+              if($ret!=0) {
+                $LSform -> setElementError($attr,$msg_error);
+                return;
+              }
+            }
+            else {
+              if($ret<=0) {
+                $LSform -> setElementError($attr,$msg_error);
+                return;
+              }
+            }
+          }
+          // Validation par fonction externe
+          else if(isset($test['function'])) {
+            if (function_exists($test['function'])) {
+              if(!$test['function']($this)) {
+                $LSform -> setElementError($attr,$msg_error);
+              return;
+              }
+            }
+            else {
+              $GLOBALS['LSerror'] -> addErrorCode(24,array('attr' => $attr->name,'obj' => $this->type_name,'func' => $test['function']));
+              return;
+            }
+          }
+          else {
+            $GLOBALS['LSerror'] -> addErrorCode(25,array('attr' => $attr->name,'obj' => $this->type_name));
+            return;
+          }
+        }
+      }
+    }
+    // Génération des valeurs des attributs dépendants
+    $dependsAttrs=$attr->getDependsAttrs();
+    if (!empty($dependsAttrs)) {
+      foreach($dependsAttrs as $dependAttr) {
+        if(!isset($this -> attrs[$dependAttr])){
+          $GLOBALS['LSerror'] -> addErrorCode(34,array('attr_depend' => $dependAttr, 'attr' => $attr -> getLabel()));
+          continue;
+        }
+        if($this -> attrs[$dependAttr] -> canBeGenerated()) {
+          if (!$this -> attrs[$dependAttr] -> generateValue()) {
+            $GLOBALS['LSerror'] -> addErrorCode(47,$this -> attrs[$dependAttr] -> getLabel());
+            return;
+          }
+        }
+        else {
+          $GLOBALS['LSerror'] -> addErrorCode(46,$this -> attrs[$dependAttr] -> getLabel());
+          return;
+        }
+      }
+    }
 
-               $attr -> validate();
+    $attr -> validate();
     unset($this -> other_values['val']);
-               return true;
-       }
+    return true;
+  }
 
   /**
    * Met à jour les données modifiés dans l'annuaire
@@ -442,7 +467,7 @@ class LSldapObject {
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval boolean true si la mise à jour a réussi, false sinon
-   */  
+   */ 
   function submitChange($idForm) {
     $submitData=array();
     foreach($this -> attrs as $attr) {
@@ -453,12 +478,12 @@ class LSldapObject {
     if(!empty($submitData)) {
       $dn=$this -> getDn();
       if($dn) {
-                               debug($submitData);
+        debug($submitData);
         return $GLOBALS['LSldap'] -> update($this -> type_name,$dn, $submitData);
       }
       else {
         $GLOBALS['LSerror'] -> addErrorCode(33);
-                               return;
+        return;
       }
     }
   }
@@ -473,7 +498,7 @@ class LSldapObject {
    * @retval array Tableau : 
    *                  - [0] : le premier paramètre
    *                  - [1] : les paramètres suivants
-   */  
+   */ 
   function getDnInfos($dn) {
     $infos=ldap_explode_dn($dn,0);
     if(!$infos)
@@ -490,94 +515,12 @@ class LSldapObject {
   }
   
   /**
-   * Fait la somme de DN
-   *
-   * Retourne un DN qui correspond au point de séparation des DN si les DN 
-   * ne sont pas dans la meme dans la meme branche ou le dn le plus long sinon.
-   *
-   * @param[in] $dn Un premier DN.
-   * @param[in] $dn Un deuxième DN.
-   *
-   * @author Benjamin Renard <brenard@easter-eggs.com>
-   *
-   * @retval string Un DN (ou false si les DN ne sont pas valide)
-   */  
-  function sumDn($dn1,$dn2) {
-    $infos1=ldap_explode_dn($dn1,0);
-    if(!$infos1)
-      return;
-    $infos2=ldap_explode_dn($dn2,0);
-    if(!$infos2)
-      return;
-    if($infos2['count']>$infos1['count']) {
-      $tmp=$infos1;
-      $infos1=$infos2;
-      $infos2=$tmp;
-    }
-    $infos1=array_reverse($infos1);
-    $infos2=array_reverse($infos2);
-    
-    $first=true;
-    $basedn='';
-    for($i=0;$i<$infos1['count'];$i++) {
-      if(($infos1[$i]==$infos2[$i])||(!isset($infos2[$i]))) {
-        if($first) {
-          $basedn=$infos1[$i];
-          $first=false;
-        }
-        else
-          $basedn=$infos1[$i].','.$basedn;
-      }
-      else {
-        return $basedn;
-      }
-    }
-    return $basedn;
-  }
-  
-  /**
-   * Vérifie la compatibilite des DN
-   *
-   * Vérifie que les DNs sont dans la même branche de l'annuaire.
-   *
-   * @param[in] $dn Un premier DN.
-   * @param[in] $dn Un deuxième DN.
-   *
-   * @author Benjamin Renard <brenard@easter-eggs.com>
-   *
-   * @retval boolean true si les DN sont compatibles, false sinon.
-   */  
-  function isCompatibleDNs($dn1,$dn2) {
-    $infos1=ldap_explode_dn($dn1,0);
-    if(!$infos1)
-      return;
-    $infos2=ldap_explode_dn($dn2,0);
-    if(!$infos2)
-      return;
-    if($infos2['count']>$infos1['count']) {
-      $tmp=$infos1;
-      $infos1=$infos2;
-      $infos2=$tmp;
-    }
-    $infos1=array_reverse($infos1);
-    $infos2=array_reverse($infos2);
-    
-    for($i=0;$i<$infos1['count'];$i++) {
-      if(($infos1[$i]==$infos2[$i])||(!isset($infos2[$i])))
-        continue;
-      else
-        return false;
-    }
-    return true;
-  }
-  
-  /**
    * Retourne le filtre correpondants aux objetcClass de l'objet
    *
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval string le filtre ldap correspondant au type de l'objet
-   */  
+   */ 
   function getObjectFilter() {
     if(!isset($this -> config['objectclass'])) return;
     foreach ($this -> config['objectclass'] as $class)
@@ -598,7 +541,7 @@ class LSldapObject {
    * @param[in] $params array Paramètres de recherche au format Net_LDAP::search()
    *
    * @retval array Tableau d'objet correspondant au resultat de la recherche
-   */  
+   */ 
   function listObjects($filter='',$basedn=NULL,$params=array()) {
     $retInfos=array();
     $attrs=false;
@@ -787,10 +730,10 @@ class LSldapObject {
     return $retInfos;
   }
  
-       function searchObject($name,$basedn=NULL) {
-               $filter = $this -> config['rdn'].'='.$name;     
-         return $this -> listObjects($filter,$basedn); 
-       }
+  function searchObject($name,$basedn=NULL) {
+    $filter = $this -> config['rdn'].'='.$name; 
+    return $this -> listObjects($filter,$basedn); 
+  }
 
   /**
    * Retourne une valeur de l'objet
@@ -808,14 +751,14 @@ class LSldapObject {
    * @param[in] $val string Le nom de la valeur demandée
    *
    * @retval mixed la valeur demandé ou ' ' si celle-ci est inconnue.
-   */  
+   */ 
   function getValue($val) {
     if(($val=='dn')||($val=='%{dn}')) {
       return $this -> dn;
     }
-               else if(($val=='rdn')||($val=='%{rdn}')) {
-                       return $this -> attrs[ $this -> config['rdn'] ] -> getValue();
-               }
+    else if(($val=='rdn')||($val=='%{rdn}')) {
+      return $this -> attrs[ $this -> config['rdn'] ] -> getValue();
+    }
     else if(isset($this ->  attrs[$val])){
       if (method_exists($this ->  attrs[$val],'getValue'))
         return $this -> attrs[$val] -> getValue();
@@ -830,38 +773,38 @@ class LSldapObject {
     }
   }
  
-       /**
-        * Retourn une liste d'option pour un select d'un objet du même type
-        
-        * @author Benjamin Renard <brenard@easter-eggs.com>
-        *
-        * @retval string HTML code
-        */
-       function getSelectOptions() {
-               $list = $this -> listObjects();
-               $display='';
-               foreach($list as $object) {
-                       $display.="<option value=\"".$object -> getDn()."\">".$object -> getDisplayValue()."</option>\n"; 
-               }
-               return $display;
-       }
+  /**
+   * Retourn une liste d'option pour un select d'un objet du même type
+   * 
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @retval string HTML code
+   */
+  function getSelectOptions() {
+    $list = $this -> listObjects();
+    $display='';
+    foreach($list as $object) {
+      $display.="<option value=\"".$object -> getDn()."\">".$object -> getDisplayValue()."</option>\n"; 
+    }
+    return $display;
+  }
 
-       /**
-        * Retourn un tableau pour un select d'un objet du même type
-        
-        * @author Benjamin Renard <brenard@easter-eggs.com>
-        *
-        * @retval array['dn','display']
-        */
-       function getSelectArray() {
-               $list = $this -> listObjects();
-               $return=array();
-               foreach($list as $object) {
-                       $return['dn'][] = $object -> getDn();
-                       $return['display'][] = $object -> getDisplayValue();
-               }
-               return $return;
-       }
+  /**
+   * Retourn un tableau pour un select d'un objet du même type
+   * 
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @retval array['dn','display']
+   */
+  function getSelectArray() {
+    $list = $this -> listObjects();
+    $return=array();
+    foreach($list as $object) {
+      $return['dn'][] = $object -> getDn();
+      $return['display'][] = $object -> getDisplayValue();
+    }
+    return $return;
+  }
 
   /**
    * Retourne le DN de l'objet
@@ -872,7 +815,7 @@ class LSldapObject {
    * @author Benjamin Renard <brenard@easter-eggs.com>
    *
    * @retval string Le DN de l'objet
-   */    
+   */   
   function getDn() {
     if($this -> dn) {
       return $this -> dn;
@@ -896,14 +839,32 @@ class LSldapObject {
     }
   }
 
-       /**
-        * Retourne le type de l'objet
-        *
-        * @retval string Le type de l'objet ($this -> type_name)
-        */
-       function getType() {
-               return $this -> type_name;
-       }
+  /**
+   * Retourne le type de l'objet
+   *
+   * @retval string Le type de l'objet ($this -> type_name)
+   */
+  function getType() {
+    return $this -> type_name;
+  }
+  
+  function whoami() {
+    if (!$this -> _whoami)
+      $this -> _whoami = $GLOBALS['LSsession'] -> whoami($this -> dn);
+    return $this -> _whoami;
+  }
+  
+  function getLabel() {
+    return $this -> config['label'];
+  }
+
+  function __sleep() {
+    return ( array_keys( get_object_vars( &$this ) ) );
+  }
+  
+  function __wakeup() {
+    return true;
+  }
 
 }
 
index 0138f30..9a89f00 100644 (file)
@@ -31,15 +31,20 @@ define('LS_DEFAULT_CONF_DIR','conf');
  */
 class LSsession {
 
-       var $confDir = NULL;
-       var $ldapServer = NULL;
-       var $topDn = NULL;
-       var $LSuserObject = NULL;
-       var $dn = NULL;
-       var $rdn = NULL;
-       var $JSscripts = array();
-       var $CssFiles = array();
-       var $template = NULL;
+  var $confDir = NULL;
+  var $ldapServer = NULL;
+  var $ldapServerId = NULL;
+  var $topDn = NULL;
+  var $LSuserObject = NULL;
+  var $dn = NULL;
+  var $rdn = NULL;
+  var $JSscripts = array();
+  var $CssFiles = array();
+  var $template = NULL;
+  var $LSrights = array (
+    'topDn_admin' => array ()
+  );
+  var $LSaccess = array();
 
   /**
    * Constructeur
@@ -49,463 +54,623 @@ class LSsession {
    * @retval void
    */
   function LSsession ($configDir=LS_DEFAULT_CONF_DIR) {
-               $this -> confDir = $configDir;
-               if ($this -> loadConfig()) {
-                       $this -> startLSerror();
-               }
-               else {
-                       return;
-               }
+    $this -> confDir = $configDir;
+    if ($this -> loadConfig()) {
+      $this -> startLSerror();
+    }
+    else {
+      return;
+    }
   }
 
  /*
-       * Chargement de la configuration
-       *
-       * Chargement des fichiers de configuration et création de l'objet Smarty.
-       *
-       * @author Benjamin Renard <brenard@easter-eggs.com>
-       *
-       * @retval true si tout c'est bien passé, false sinon
-       */
-       function loadConfig() {
-               if (loadDir($this -> confDir, '^config\..*\.php$')) {
-                       if ( @include_once $GLOBALS['LSconfig']['Smarty'] ) {
-                               $GLOBALS['Smarty'] = new Smarty();
-                               return true;
-                       }
-                       else {
-                               $GLOBALS['LSerror'] -> addErrorCode(1008);
-                               return;
-                       }
-                       return true;
-               }
-               else {
-                       return;
-               }
-       }
+  * Chargement de la configuration
+  *
+  * Chargement des fichiers de configuration et création de l'objet Smarty.
+  *
+  * @author Benjamin Renard <brenard@easter-eggs.com>
+  *
+  * @retval true si tout c'est bien passé, false sinon
+  */
+  function loadConfig() {
+    if (loadDir($this -> confDir, '^config\..*\.php$')) {
+      if ( @include_once $GLOBALS['LSconfig']['Smarty'] ) {
+        $GLOBALS['Smarty'] = new Smarty();
+        return true;
+      }
+      else {
+        $GLOBALS['LSerror'] -> addErrorCode(1008);
+        return;
+      }
+      return true;
+    }
+    else {
+      return;
+    }
+  }
 
  /*
-       * Initialisation de la gestion des erreurs
-       *
-       * Création de l'objet LSerror
-       *
-       * @author Benjamin Renard <brenard@easter-eggs.com
-       *
-       * @retval boolean true si l'initialisation a réussi, false sinon.
-       */
-       function startLSerror() {
-               if(!$this -> loadLSclass('LSerror'))
-                       return;
-               $GLOBALS['LSerror'] = new LSerror();
-               return true;
-       }
+  * Initialisation de la gestion des erreurs
+  *
+  * Création de l'objet LSerror
+  *
+  * @author Benjamin Renard <brenard@easter-eggs.com
+  *
+  * @retval boolean true si l'initialisation a réussi, false sinon.
+  */
+  function startLSerror() {
+    if(!$this -> loadLSclass('LSerror'))
+      return;
+    $GLOBALS['LSerror'] = new LSerror();
+    return true;
+  }
 
  /*
-       * Chargement d'une classe d'LdapSaisie
-       *
-       * @param[in] $class Nom de la classe à charger (Exemple : LSeepeople)
-       * @param[in] $type (Optionnel) Type de classe à charger (Exemple : LSobjects)
-       *
-       * @author Benjamin Renard <brenard@easter-eggs.com
-       
-       * @retval boolean true si le chargement a réussi, false sinon.
-       */
-       function loadLSclass($class,$type='') {
-               if (class_exists($class))
-                       return true;
-               if($type!='')
-                       $type=$type.'.';
-               return @include_once LS_CLASS_DIR .'class.'.$type.$class.'.php';
-       }
+  * Chargement d'une classe d'LdapSaisie
+  *
+  * @param[in] $class Nom de la classe à charger (Exemple : LSeepeople)
+  * @param[in] $type (Optionnel) Type de classe à charger (Exemple : LSobjects)
+  *
+  * @author Benjamin Renard <brenard@easter-eggs.com
+  * 
+  * @retval boolean true si le chargement a réussi, false sinon.
+  */
+  function loadLSclass($class,$type='') {
+    if (class_exists($class))
+      return true;
+    if($type!='')
+      $type=$type.'.';
+    return @include_once LS_CLASS_DIR .'class.'.$type.$class.'.php';
+  }
 
  /*
-       * Chargement d'un object LdapSaisie
-       *
-       * @param[in] $object Nom de l'objet à charger
-       *
-       * @retval boolean true si le chargement a réussi, false sinon.
-       */
-       function loadLSobject($object) {
-               if (!$this -> loadLSclass($object,'LSobjects'))
-                       return;
-               if (!require_once( LS_OBJECTS_DIR . 'config.LSobjects.'.$object.'.php' ))
-                       return;
-               return true;
-       }
+  * Chargement d'un object LdapSaisie
+  *
+  * @param[in] $object Nom de l'objet à charger
+  *
+  * @retval boolean true si le chargement a réussi, false sinon.
+  */
+  function loadLSobject($object) {
+    if (!$this -> loadLSclass($object,'LSobjects'))
+      return;
+    if (!require_once( LS_OBJECTS_DIR . 'config.LSobjects.'.$object.'.php' ))
+      return;
+    return true;
+  }
 
  /*
-       * Chargement des objects LdapSaisie
-       *
-       * Chargement des LSobjects contenue dans la variable
-       * $GLOBALS['LSobjects']['loads']
-       *
-       * @retval boolean true si le chargement a réussi, false sinon.
-       */
-       function loadLSobjects() {
-
-               $this -> loadLSclass('LSldapObject');
-
-               if(!is_array($GLOBALS['LSobjects']['loads'])) {
-                       $GLOBALS['LSerror'] -> addErrorCode(1001,"LSobjects['loads']");
-                       return;
-               }
-
-               foreach ($GLOBALS['LSobjects']['loads'] as $object) {
-                       if ( !$this -> loadLSobject($object) )
-                               return;
-               }
-               return true;
-       }
+  * Chargement des objects LdapSaisie
+  *
+  * Chargement des LSobjects contenue dans la variable
+  * $GLOBALS['LSobjects_loads']
+  *
+  * @retval boolean true si le chargement a réussi, false sinon.
+  */
+  function loadLSobjects() {
+
+    $this -> loadLSclass('LSldapObject');
+
+    if(!is_array($GLOBALS['LSobjects_loads'])) {
+      $GLOBALS['LSerror'] -> addErrorCode(1001,"LSobjects['loads']");
+      return;
+    }
+
+    foreach ($GLOBALS['LSobjects_loads'] as $object) {
+      if ( !$this -> loadLSobject($object) )
+        return;
+    }
+    return true;
+  }
 
  /*
-       * Chargement d'un addons d'LdapSaisie
-       *
-       * @param[in] $addon Nom de l'addon à charger (Exemple : samba)
-       *
-       * @author Benjamin Renard <brenard@easter-eggs.com
-       
-       * @retval boolean true si le chargement a réussi, false sinon.
-       */
-       function loadLSaddon($addon) {
-               return require_once LS_ADDONS_DIR .'LSaddons.'.$addon.'.php';
-       }
+  * Chargement d'un addons d'LdapSaisie
+  *
+  * @param[in] $addon Nom de l'addon à charger (Exemple : samba)
+  *
+  * @author Benjamin Renard <brenard@easter-eggs.com
+  * 
+  * @retval boolean true si le chargement a réussi, false sinon.
+  */
+  function loadLSaddon($addon) {
+    return require_once LS_ADDONS_DIR .'LSaddons.'.$addon.'.php';
+  }
 
  /*
-       * Chargement des addons LdapSaisie
-       *
-       * Chargement des LSaddons contenue dans la variable
-       * $GLOBALS['LSaddons']['loads']
-       *
-       * @retval boolean true si le chargement a réussi, false sinon.
-       */
-       function loadLSaddons() {
-               if(!is_array($GLOBALS['LSaddons']['loads'])) {
-                       $GLOBALS['LSerror'] -> addErrorCode(1001,"LSaddons['loads']");
-                       return;
-               }
-
-               foreach ($GLOBALS['LSaddons']['loads'] as $addon) {
-                       $this -> loadLSaddon($addon);
-                       if (!call_user_func('LSaddon_'. $addon .'_support')) {
-                               $GLOBALS['LSerror'] -> addErrorCode(1002,$addon);
-                       }
-               }
-               return true;
-       }
+  * Chargement des addons LdapSaisie
+  *
+  * Chargement des LSaddons contenue dans la variable
+  * $GLOBALS['LSaddons']['loads']
+  *
+  * @retval boolean true si le chargement a réussi, false sinon.
+  */
+  function loadLSaddons() {
+    if(!is_array($GLOBALS['LSaddons']['loads'])) {
+      $GLOBALS['LSerror'] -> addErrorCode(1001,"LSaddons['loads']");
+      return;
+    }
+
+    foreach ($GLOBALS['LSaddons']['loads'] as $addon) {
+      $this -> loadLSaddon($addon);
+      if (!call_user_func('LSaddon_'. $addon .'_support')) {
+        $GLOBALS['LSerror'] -> addErrorCode(1002,$addon);
+      }
+    }
+    return true;
+  }
 
  /*
   * Initialisation de la session LdapSaisie
-       *
-       * Initialisation d'une LSsession :
-       * - Authentification et activation du mécanisme de session de LdapSaisie
-       * - ou Chargement des paramètres de la session à partir de la variable 
-       *   $_SESSION['LSsession'].
-       * - ou Destruction de la session en cas de $_GET['LSsession_logout'].
-       *
-       * @retval boolean True si l'initialisation à réussi (utilisateur authentifié), false sinon.
-       */
-       function startLSsession() {
-                       $this -> loadLSobjects();
-                       $this -> loadLSaddons();
-                       session_start();
-
-                       // Déconnexion
-                       if (isset($_GET['LSsession_logout'])) {
-                               session_destroy();
-                               unset($_SESSION['LSsession']);
-                       }
-
-                       if(isset($_SESSION['LSsession'])) {
-                               // Session existante
-                               $this -> confDir = $_SESSION['LSsession'] -> confDir;
-                               $this -> ldapServer = $_SESSION['LSsession'] -> ldapServer;
-                               $this -> topDn = $_SESSION['LSsession'] -> topDn;
-                               $this -> LSuserObject = $_SESSION['LSsession'] -> LSuserObject;
-                               $this -> dn = $_SESSION['LSsession'] -> dn;
-                               $this -> rdn = $_SESSION['LSsession'] -> rdn;
-                               $GLOBALS['Smarty'] -> assign('LSsession_username',$this -> LSuserObject -> getDisplayValue());
-                               return $this -> LSldapConnect();
-                       }
-                       else {
-                               // Session inexistante
-
-                               if (isset($_POST['LSsession_user'])) {
-                                       if (isset($_POST['LSsession_ldapserver'])) {
-                                               $this -> setLdapServer($_POST['LSsession_ldapserver']);
-                                       }
-                                       else {
-                                               $this -> setLdapServer(0);
-                                       }
-
-                                       // Connexion au serveur LDAP
-               if ($this -> LSldapConnect()) {
-                                               // topDn
-                                               if ( $_POST['LSsession_topDn'] != '' ){
-                                                       $this -> topDn = $_POST['LSsession_topDn'];
-                                               }
-                                               else {
-                                                       $this -> topDn = $this -> ldapServer['ldap_config']['basedn'];
-                                               }
-
-                                               if ( $this -> loadLSobject($this -> ldapServer['authobject']) ) {
-                                                       $authobject = new $this -> ldapServer['authobject']();
-                                                       $result = $authobject -> searchObject($_POST['LSsession_user'],$_POST['LSsession_topDn']);
-                                                       $nbresult=count($result);
-                                                       if ($nbresult==0) {
-                                                               // identifiant incorrect
-                                                               debug('identifiant incorrect');
-                                                               $GLOBALS['LSerror'] -> addErrorCode(1006);
-                                                       }
-                                                       else if ($nbresult>1) {
-                                                               // duplication d'authentité
-                                                               $GLOBALS['LSerror'] -> addErrorCode(1007);
-                                                       }
-                                                       else {
-                                                               if ( $this -> checkUserPwd($result[0],$_POST['LSsession_pwd']) ) {
-                                                                       // Authentification réussi
-                                                                       $this -> LSuserObject = $result[0];
-                                                                       $this -> dn = $result[0]->getValue('dn');
-                                                                       $this -> rdn = $_POST['LSsession_user'];
-                                                                       $this -> topDn = $_POST['LSsession_topDn'];
-                                                                       $GLOBALS['Smarty'] -> assign('LSsession_username',$this -> LSuserObject -> getDisplayValue());
-                                                                       $_SESSION['LSsession']=$this;
-                                                                       return true;
-                                                               }
-                                                               else {
-                                                                       $GLOBALS['LSerror'] -> addErrorCode(1006);
-                                                                       debug('mdp incorrect');
-                                                               }
-                                                       }
-                                               }
-                                               else {
-                                                       $GLOBALS['LSerror'] -> addErrorCode(1010);
-                                               }
-                                       }
-                                       else {
-                                               $GLOBALS['LSerror'] -> addErrorCode(1009);
-                                       }
-                               }
-                               $this -> displayLoginForm();
-                               return;
-                       }
-       }
+  *
+  * Initialisation d'une LSsession :
+  * - Authentification et activation du mécanisme de session de LdapSaisie
+  * - ou Chargement des paramètres de la session à partir de la variable 
+  *   $_SESSION['LSsession'].
+  * - ou Destruction de la session en cas de $_GET['LSsession_logout'].
+  *
+  * @retval boolean True si l'initialisation à réussi (utilisateur authentifié), false sinon.
+  */
+  function startLSsession() {
+      $this -> loadLSobjects();
+      $this -> loadLSaddons();
+      session_start();
+
+      // Déconnexion
+      if (isset($_GET['LSsession_logout'])) {
+        session_destroy();
+        unset($_SESSION['LSsession']);
+      }
+
+      if(isset($_SESSION['LSsession'])) {
+        // Session existante
+        $this -> confDir      = $_SESSION['LSsession'] -> confDir;
+        $this -> topDn        = $_SESSION['LSsession'] -> topDn;
+        //$this -> LSuserObject = $_SESSION['LSsession'] -> LSuserObject;
+        $this -> dn           = $_SESSION['LSsession'] -> dn;
+        $this -> rdn          = $_SESSION['LSsession'] -> rdn;
+        $this -> ldapServerId = $_SESSION['LSsession'] -> ldapServerId;
+        if ( ($GLOBALS['LSconfig']['cacheLSrights']) || ($this -> ldapServer['cacheLSrights']) ) {
+          $this -> ldapServer = $_SESSION['LSsession'] -> ldapServer;
+          $this -> LSrights   = $_SESSION['LSsession'] -> LSrights;
+          $this -> LSaccess   = $_SESSION['LSsession'] -> LSaccess;
+          if (!$this -> LSldapConnect())
+            return;
+        }
+        else {
+          $this -> setLdapServer($this -> ldapServerId);
+          if (!$this -> LSldapConnect())
+            return;
+          $this -> loadLSrights();
+          $this -> loadLSaccess();
+        }
+        $this -> LSuserObject = new $this -> ldapServer['authobject']();
+        $this -> LSuserObject -> loadData($this -> dn);
+        $GLOBALS['Smarty'] -> assign('LSsession_username',$this -> LSuserObject -> getDisplayValue());
+        return true;
+        
+      }
+      else {
+        // Session inexistante
+
+        if (isset($_POST['LSsession_user'])) {
+          if (isset($_POST['LSsession_ldapserver'])) {
+            $this -> setLdapServer($_POST['LSsession_ldapserver']);
+          }
+          else {
+            $this -> setLdapServer(0);
+          }
+
+          // Connexion au serveur LDAP
+              if ($this -> LSldapConnect()) {
+            // topDn
+            if ( $_POST['LSsession_topDn'] != '' ){
+              $this -> topDn = $_POST['LSsession_topDn'];
+            }
+            else {
+              $this -> topDn = $this -> ldapServer['ldap_config']['basedn'];
+            }
+
+            if ( $this -> loadLSobject($this -> ldapServer['authobject']) ) {
+              $authobject = new $this -> ldapServer['authobject']();
+              $result = $authobject -> searchObject($_POST['LSsession_user'],$this -> topDn);
+              $nbresult=count($result);
+              if ($nbresult==0) {
+                // identifiant incorrect
+                debug('identifiant incorrect');
+                $GLOBALS['LSerror'] -> addErrorCode(1006);
+              }
+              else if ($nbresult>1) {
+                // duplication d'authentité
+                $GLOBALS['LSerror'] -> addErrorCode(1007);
+              }
+              else {
+                if ( $this -> checkUserPwd($result[0],$_POST['LSsession_pwd']) ) {
+                  // Authentification réussi
+                  $this -> LSuserObject = $result[0];
+                  $this -> dn = $result[0]->getValue('dn');
+                  $this -> rdn = $_POST['LSsession_user'];
+                  $this -> loadLSrights();
+                  $this -> loadLSaccess();
+                  $GLOBALS['Smarty'] -> assign('LSsession_username',$this -> LSuserObject -> getDisplayValue());
+                  $_SESSION['LSsession']=$this;
+                  return true;
+                }
+                else {
+                  $GLOBALS['LSerror'] -> addErrorCode(1006);
+                  debug('mdp incorrect');
+                }
+              }
+            }
+            else {
+              $GLOBALS['LSerror'] -> addErrorCode(1010);
+            }
+          }
+          else {
+            $GLOBALS['LSerror'] -> addErrorCode(1009);
+          }
+        }
+        $this -> displayLoginForm();
+        return;
+      }
+  }
 
  /*
-       * Définition du serveur Ldap de la session
-       *
-       * Définition du serveur Ldap de la session à partir de son ID dans 
-       * le tableau $GLOBALS['LSconfig']['ldap_servers'].
-       *
-       * @param[in] integer Index du serveur Ldap
-       *
-       * @retval boolean True sinon false.
-       */
-       function setLdapServer($id) {
-               if ( isset($GLOBALS['LSconfig']['ldap_servers'][$id]) ) {
-                       $this -> ldapServer=$GLOBALS['LSconfig']['ldap_servers'][$id];
-                       return true;
-               }
-               else {
-                       return;
-               }
-       }
+  * Définition du serveur Ldap de la session
+  *
+  * Définition du serveur Ldap de la session à partir de son ID dans 
+  * le tableau $GLOBALS['LSconfig']['ldap_servers'].
+  *
+  * @param[in] integer Index du serveur Ldap
+  *
+  * @retval boolean True sinon false.
+  */
+  function setLdapServer($id) {
+    if ( isset($GLOBALS['LSconfig']['ldap_servers'][$id]) ) {
+      $this -> ldapServerId = $id;
+      $this -> ldapServer=$GLOBALS['LSconfig']['ldap_servers'][$id];
+      return true;
+    }
+    else {
+      return;
+    }
+  }
 
  /*
-       * Connexion au serveur Ldap
-       *
-       * @retval boolean True sinon false.
-       */
-       function LSldapConnect() {
-               if ($this -> ldapServer) {
-                       include_once($GLOBALS['LSconfig']['NetLDAP']);
-                       if (!$this -> loadLSclass('LSldap'))
-                               return;
-                               $GLOBALS['LSldap'] = new LSldap($this -> ldapServer['ldap_config']);
-                               if ($GLOBALS['LSldap'] -> isConnected())
-                                       return true;
-                               else
-                                       return;
-                       return $GLOBALS['LSldap'] = new LSldap($this -> ldapServer['ldap_config']);
-               }
-               else {
-                       $GLOBALS['LSerror'] -> addErrorCode(1003);
-                       return;
-               }
-       }
-
-
-       function getSubDnLdapServer() {
-               if ( isset($this ->ldapServer['subdnobject']) ) {
-                       if( $this -> loadLSobject($this ->ldapServer['subdnobject']) ) {
-                               if ($subdnobject = new $this ->ldapServer['subdnobject']()) {
+  * Connexion au serveur Ldap
+  *
+  * @retval boolean True sinon false.
+  */
+  function LSldapConnect() {
+    if ($this -> ldapServer) {
+      include_once($GLOBALS['LSconfig']['NetLDAP']);
+      if (!$this -> loadLSclass('LSldap'))
+        return;
+        $GLOBALS['LSldap'] = new LSldap($this -> ldapServer['ldap_config']);
+        if ($GLOBALS['LSldap'] -> isConnected())
+          return true;
+        else
+          return;
+      return $GLOBALS['LSldap'] = new LSldap($this -> ldapServer['ldap_config']);
+    }
+    else {
+      $GLOBALS['LSerror'] -> addErrorCode(1003);
+      return;
+    }
+  }
+
+
+  function getSubDnLdapServer() {
+    if ( isset($this ->ldapServer['subdnobject']) ) {
+      if( $this -> loadLSobject($this ->ldapServer['subdnobject']) ) {
+        if ($subdnobject = new $this ->ldapServer['subdnobject']()) {
           return $subdnobject -> getSelectArray();
         }
         else {
-               return;
-                               }
-                       }
+          return;
+        }
+      }
       else {
-               $GLOBALS['LSerror'] -> addErrorCode(1004,$this ->ldapServer['subdnobject']);
-                               return;
-       }
-               }
-               else {
-                       return;
-               }
-       }
+        $GLOBALS['LSerror'] -> addErrorCode(1004,$this ->ldapServer['subdnobject']);
+        return;
+      }
+    }
+    else {
+      return;
+    }
+  }
 
  /*
-       * Retourne les options d'une liste déroulante pour le choix du topDn
-       * de connexion au serveur Ldap
-       *
-       * Liste les subdnobject ($this ->ldapServer['subdnobject'])
-       *
-       * @retval string Les options (<option>) pour la sélection du topDn.
-       */
-       function getSubDnLdapServerOptions() {
-               if ( isset($this ->ldapServer['subdnobject']) ) {
-                       
-                       if( $this -> loadLSobject($this ->ldapServer['subdnobject']) ) {
-                               if ($subdnobject = new $this ->ldapServer['subdnobject']()) {
+  * Retourne les options d'une liste déroulante pour le choix du topDn
+  * de connexion au serveur Ldap
+  *
+  * Liste les subdnobject ($this ->ldapServer['subdnobject'])
+  *
+  * @retval string Les options (<option>) pour la sélection du topDn.
+  */
+  function getSubDnLdapServerOptions() {
+    if ( isset($this ->ldapServer['subdnobject']) ) {
+      
+      if( $this -> loadLSobject($this ->ldapServer['subdnobject']) ) {
+        if ($subdnobject = new $this ->ldapServer['subdnobject']()) {
           return $subdnobject -> getSelectOptions();
         }
         else {
-               return;
-                               }
-                       }
+          return;
+        }
+      }
       else {
-               $GLOBALS['LSerror'] -> addErrorCode(1004,$this ->ldapServer['subdnobject']);
-                               return;
-       }
-               }
-               else {
-                       return;
-               }
-       }
+        $GLOBALS['LSerror'] -> addErrorCode(1004,$this ->ldapServer['subdnobject']);
+        return;
+      }
+    }
+    else {
+      return;
+    }
+  }
 
  /*
-       * Test un couple LSobject/pwd
-       *
-       * Test un bind sur le serveur avec le dn de l'objet et le mot de passe fourni.
-       *
-       * @param[in] LSobject L'object "user" pour l'authentification
-       * @param[in] string Le mot de passe à tester
-       *
-       * @retval boolean True si l'authentification à réussi, false sinon.
-       */
-       function checkUserPwd($object,$pwd) {
-               return $GLOBALS['LSldap'] -> checkBind($object -> getValue('dn'),$pwd);
-       }
+  * Test un couple LSobject/pwd
+  *
+  * Test un bind sur le serveur avec le dn de l'objet et le mot de passe fourni.
+  *
+  * @param[in] LSobject L'object "user" pour l'authentification
+  * @param[in] string Le mot de passe à tester
+  *
+  * @retval boolean True si l'authentification à réussi, false sinon.
+  */
+  function checkUserPwd($object,$pwd) {
+    return $GLOBALS['LSldap'] -> checkBind($object -> getValue('dn'),$pwd);
+  }
 
  /*
-       * Affiche le formulaire de login
-       *
-       * Défini les informations pour le template Smarty du formulaire de login.
-       *
-       * @retval void
-       */
-       function displayLoginForm() {
-               $GLOBALS['Smarty'] -> assign('pagetitle',_('Connexion'));
-               $GLOBALS['Smarty'] -> assign('loginform_action',$_SERVER['PHP_SELF']);
-               if (count($GLOBALS['LSconfig']['ldap_servers'])==1) {
-                       $GLOBALS['Smarty'] -> assign('loginform_ldapserver_style','style="display: none"');
-               }
-               $GLOBALS['Smarty'] -> assign('loginform_label_ldapserver',_('Serveur LDAP'));
-               $ldapservers_name=array();
-               $ldapservers_index=array();
-               foreach($GLOBALS['LSconfig']['ldap_servers'] as $id => $infos) {
-                       $ldapservers_index[]=$id;
-                       $ldapservers_name[]=$infos['name'];
-               }
-               $GLOBALS['Smarty'] -> assign('loginform_ldapservers_name',$ldapservers_name);
-               $GLOBALS['Smarty'] -> assign('loginform_ldapservers_index',$ldapservers_index);
-
-               $this -> setLdapServer(0);
-               if ( $this -> LSldapConnect() ) {
-                       $topDn_array = $this -> getSubDnLdapServer();
-                       if ( $topDn_array ) {
-                               $GLOBALS['Smarty'] -> assign('loginform_topdn_name',$topDn_array['display']);
-                               $GLOBALS['Smarty'] -> assign('loginform_topdn_index',$topDn_array['dn']);
-                       }
-               }
-
-               $GLOBALS['Smarty'] -> assign('loginform_label_level',_('Niveau'));
-               $GLOBALS['Smarty'] -> assign('loginform_label_user',_('Identifiant'));
-               $GLOBALS['Smarty'] -> assign('loginform_label_pwd',_('Mot de passe'));
-               $GLOBALS['Smarty'] -> assign('loginform_label_submit',_('Connexion'));
-
-               $this -> addJSscript('LSsession_login.js');
-       }
+  * Affiche le formulaire de login
+  *
+  * Défini les informations pour le template Smarty du formulaire de login.
+  *
+  * @retval void
+  */
+  function displayLoginForm() {
+    $GLOBALS['Smarty'] -> assign('pagetitle',_('Connexion'));
+    $GLOBALS['Smarty'] -> assign('loginform_action',$_SERVER['PHP_SELF']);
+    if (count($GLOBALS['LSconfig']['ldap_servers'])==1) {
+      $GLOBALS['Smarty'] -> assign('loginform_ldapserver_style','style="display: none"');
+    }
+    $GLOBALS['Smarty'] -> assign('loginform_label_ldapserver',_('Serveur LDAP'));
+    $ldapservers_name=array();
+    $ldapservers_index=array();
+    foreach($GLOBALS['LSconfig']['ldap_servers'] as $id => $infos) {
+      $ldapservers_index[]=$id;
+      $ldapservers_name[]=$infos['name'];
+    }
+    $GLOBALS['Smarty'] -> assign('loginform_ldapservers_name',$ldapservers_name);
+    $GLOBALS['Smarty'] -> assign('loginform_ldapservers_index',$ldapservers_index);
+
+    $this -> setLdapServer(0);
+    if ( $this -> LSldapConnect() ) {
+      $topDn_array = $this -> getSubDnLdapServer();
+      if ( $topDn_array ) {
+        $GLOBALS['Smarty'] -> assign('loginform_topdn_name',$topDn_array['display']);
+        $GLOBALS['Smarty'] -> assign('loginform_topdn_index',$topDn_array['dn']);
+      }
+    }
+
+    $GLOBALS['Smarty'] -> assign('loginform_label_level',_('Niveau'));
+    $GLOBALS['Smarty'] -> assign('loginform_label_user',_('Identifiant'));
+    $GLOBALS['Smarty'] -> assign('loginform_label_pwd',_('Mot de passe'));
+    $GLOBALS['Smarty'] -> assign('loginform_label_submit',_('Connexion'));
+
+    $this -> addJSscript('LSsession_login.js');
+  }
 
  /*
-       * Défini le template Smarty à utiliser
-       *
-       * Remarque : les fichiers de templates doivent se trouver dans le dossier 
-       * templates/.
-       *
-       * @param[in] string Le nom du fichier de template
-       *
-       * @retval void
-       */
-       function setTemplate($template) {
-               $this -> template = $template;
-       }
+  * Défini le template Smarty à utiliser
+  *
+  * Remarque : les fichiers de templates doivent se trouver dans le dossier 
+  * templates/.
+  *
+  * @param[in] string Le nom du fichier de template
+  *
+  * @retval void
+  */
+  function setTemplate($template) {
+    $this -> template = $template;
+  }
 
  /*
-       * Ajoute un script JS au chargement de la page
-       *
-       * Remarque : les scripts doivents être dans le dossier LS_JS_DIR.
-       *
-       * @param[in] $script Le nom du fichier de script à charger.
-       *
-       * @retval void
-       */
-       function addJSscript($script) {
-               $this -> JSscripts[]=$script;
-       }
+  * Ajoute un script JS au chargement de la page
+  *
+  * Remarque : les scripts doivents être dans le dossier LS_JS_DIR.
+  *
+  * @param[in] $script Le nom du fichier de script à charger.
+  *
+  * @retval void
+  */
+  function addJSscript($script) {
+    $this -> JSscripts[]=$script;
+  }
 
  /*
-       * Ajoute une feuille de style au chargement de la page
-       *
-       * Remarque : les scripts doivents être dans le dossiers templates/css/.
-       *
-       * @param[in] $script Le nom du fichier css à charger.
-       *
-       * @retval void
-       */
-       function addCssFile($file) {
-               $this -> CssFiles[]=$file;
-       }
+  * Ajoute une feuille de style au chargement de la page
+  *
+  * Remarque : les scripts doivents être dans le dossiers templates/css/.
+  *
+  * @param[in] $script Le nom du fichier css à charger.
+  *
+  * @retval void
+  */
+  function addCssFile($file) {
+    $this -> CssFiles[]=$file;
+  }
 
  /*
-       * Affiche le template Smarty
-       *
-       * Charge les dépendances et affiche le template Smarty
-       *
-       * @retval void
-       */
-       function displayTemplate() {
-               // JS
-               $JSscript_txt='';
-               foreach ($GLOBALS['defaultJSscipts'] as $script) {
-                       $JSscript_txt.="<script src='".LS_JS_DIR.$script."' type='text/javascript'></script>\n";
-               }
-               foreach ($this -> JSscripts as $script) {
-                       $JSscript_txt.="<script src='".LS_JS_DIR.$script."' type='text/javascript'></script>\n";
-               }
-               $GLOBALS['Smarty'] -> assign('LSsession_js',$JSscript_txt);
-
-               // Css
-               $Css_txt="<link rel='stylesheet' type='text/css' href='templates/css/LSdefault.css' media='screen' />\n";
-               foreach ($this -> CssFiles as $file) {
-                       $Css_txt.="<link rel='stylesheet' type='text/css' href='templates/css/$file' media='screen' />\n";
-               }
-               $GLOBALS['Smarty'] -> assign('LSsession_css',$Css_txt);
-
-               $GLOBALS['LSerror'] -> display();
-               debug_print();
-               $GLOBALS['Smarty'] -> display($this -> template);
-       }
+  * Affiche le template Smarty
+  *
+  * Charge les dépendances et affiche le template Smarty
+  *
+  * @retval void
+  */
+  function displayTemplate() {
+    // JS
+    $JSscript_txt='';
+    foreach ($GLOBALS['defaultJSscipts'] as $script) {
+      $JSscript_txt.="<script src='".LS_JS_DIR.$script."' type='text/javascript'></script>\n";
+    }
+    foreach ($this -> JSscripts as $script) {
+      $JSscript_txt.="<script src='".LS_JS_DIR.$script."' type='text/javascript'></script>\n";
+    }
+    $GLOBALS['Smarty'] -> assign('LSsession_js',$JSscript_txt);
+
+    // Css
+    $Css_txt="<link rel='stylesheet' type='text/css' href='templates/css/LSdefault.css' media='screen' />\n";
+    foreach ($this -> CssFiles as $file) {
+      $Css_txt.="<link rel='stylesheet' type='text/css' href='templates/css/$file' media='screen' />\n";
+    }
+    $GLOBALS['Smarty'] -> assign('LSsession_css',$Css_txt);
+
+    $GLOBALS['Smarty'] -> assign('LSaccess',$this -> LSaccess);
+
+    $GLOBALS['LSerror'] -> display();
+    debug_print();
+    if (!$this -> template)
+      $this -> setTemplate('empty.tpl');
+    $GLOBALS['Smarty'] -> display($this -> template);
+  }
+  
+  /**
+   * Charge les droits LS de l'utilisateur
+   * 
+   * @retval boolean True si le chargement à réussi, false sinon.
+   **/
+  function loadLSrights() {
+    if (is_array($this -> ldapServer['LSadmins'])) {
+      foreach ($this -> ldapServer['LSadmins'] as $topDn => $adminsInfos) {
+        if (is_array($adminsInfos)) {
+          foreach($adminsInfos as $dn => $conf) {
+            if ((isset($conf['attr'])) && (isset($conf['LSobject']))) {
+              if( $this -> loadLSobject($conf['LSobject']) ) {
+                if ($object = new $conf['LSobject']()) {
+                  if ($object -> loadData($dn)) {
+                    $listDns=$object -> getValue($conf['attr']);
+                    if (is_array($listDns)) {
+                      if (in_array($this -> dn,$listDns)) {
+                        $this -> LSrights['topDn_admin'][] = $topDn;
+                      }
+                    }
+                  }
+                  else {
+                    debug('Impossible de chargé le dn : '.$dn);
+                  }
+                }
+                else {
+                  debug('Impossible de créer l\'objet de type : '.$conf['LSobject']);
+                }
+              }
+              else {
+                $GLOBALS['LSerror'] -> addErrorCode(1004,$conf['LSobject']);
+              }
+            }
+            else {
+              if ($this -> dn == $dn) {
+                $this -> LSrights['topDn_admin'][] = $topDn;
+              }
+            }
+          }
+        }
+        else {
+          if ( $this -> dn == $adminsInfos ) {
+            $this -> LSrights['topDn_admin'][] = $topDn;
+          }
+        }
+      }
+      debug($this -> LSrights['topDn_admin']);
+      return true;
+    }
+    else {
+      return;
+    }
+  }
+  
+  function loadLSaccess() {
+    $LSaccess = array(
+      'SELF' => array(
+        'label' => _('Mon compte'),
+        'DNs' => $this -> dn
+      )
+    );
+    foreach ($GLOBALS['LSobjects'] as $objecttype => $objectconf) {
+      $objectdn = $objectconf['container_dn'].','.$this -> topDn;
+      if ($this -> isAdmin($objectdn) ) {
+        $LSaccess[$objecttype] = array (
+          'label' => $objectconf['label'],
+          'Dns' => 'All'
+        );
+      }
+    }
+    $this -> LSaccess = $LSaccess;
+  }
+  
+  function isAdmin($dn) {
+    foreach($this -> LSrights['topDn_admin'] as $topDn_admin) {
+      if($dn == $topDn_admin) {
+        return true;
+      }
+      else if ( isCompatibleDNs($dn,$topDn_admin) ) {
+        return true;
+      }
+    }
+    return;
+  }
+  
+  function whoami($dn) {
+    if ($this -> isAdmin($dn)) {
+      return 'admin';
+    }
+    
+    if ($this -> dn == $dn) {
+      return 'self';
+    }
+    
+    return 'user';
+  }
+  
+  function canAccess($LSobject,$dn=NULL,$right=NULL) {
+    if (!$this -> loadLSobject($LSobject))
+      return;
+    if ($dn) {
+      $whoami = $this -> whoami($dn);
+    }
+    else {
+      $whoami = 'user';
+    }
+    if (is_array($GLOBALS['LSobjects'][$LSobject]['attrs'])) {
+      if (($right=='r')||($right=='w')) {
+        foreach ($GLOBALS['LSobjects'][$LSobject]['attrs'] as $attr_name => $attr_config) {
+          if ($attr_config['rights'][$whoami]==$right) {
+            return true;
+          }
+        }
+      }
+      else {
+        foreach ($GLOBALS['LSobjects'][$LSobject]['attrs'] as $attr_name => $attr_config) {
+          if ( ($attr_config['rights'][$whoami]=='r') || ($attr_config['rights'][$whoami]=='w') ) {
+            return true;
+          }
+        }
+      }
+    }
+    return;
+  }
+  
+  function canEdit($LSobject,$dn=NULL) {
+    return $this -> canAccess($LSobject,$dn,'w');
+  }
+  
+  function __sleep() {
+    return ( array_keys( get_object_vars( &$this ) ) );
+  }
+  
+  function __wakeup() {
+    return true;
+  }
 }
 
 ?>
index 3a1780d..c424f00 100644 (file)
@@ -87,17 +87,17 @@ function getFData($format,$data,$meth=NULL) {
 }
 
 function loadDir($dir,$regexpr='^.*\.php$') {
-       if ($handle = opendir($dir)) {
-               while (false !== ($file = readdir($handle))) {
-                       if (ereg($regexpr,$file)) {
-                               require_once($dir.'/'.$file);
-                       }
-               }
-       }
-       else {
-               die(_('Dossier introuvable ('.$dir.').'));
-       }
-       return true;
+  if ($handle = opendir($dir)) {
+    while (false !== ($file = readdir($handle))) {
+      if (ereg($regexpr,$file)) {
+        require_once($dir.'/'.$file);
+      }
+    }
+  }
+  else {
+    die(_('Dossier introuvable ('.$dir.').'));
+  }
+  return true;
 }
 
 
@@ -111,26 +111,113 @@ function return_data($data) {
 }
 
 function debug($data,$get=true) {
-       if ($get) {
-               if (is_array($data)) {
-                       $GLOBALS['LSdebug']['fields'][]=$data;
-               }
-               else {
-                       $GLOBALS['LSdebug']['fields'][]="[$data]";
-               }
-       }
-       return true;
+  if ($get) {
+    if (is_array($data)) {
+      $GLOBALS['LSdebug']['fields'][]=$data;
+    }
+    else {
+      $GLOBALS['LSdebug']['fields'][]="[$data]";
+    }
+  }
+  return true;
 }
 
 function debug_print() {
-       if (( $GLOBALS['LSdebug']['fields'] ) && ( $GLOBALS['LSdebug']['active'] )) {
-               $txt='<ul>';
-               foreach($GLOBALS['LSdebug']['fields'] as $debug) {
-                       $txt.='<li>'.$debug.'</li>';
-               }
-               $txt.='</ul>';
-               $GLOBALS['Smarty'] -> assign('LSdebug',$txt);
-       }
+  if (( $GLOBALS['LSdebug']['fields'] ) && ( $GLOBALS['LSdebug']['active'] )) {
+    $txt='<ul>';
+    foreach($GLOBALS['LSdebug']['fields'] as $debug) {
+      if (is_array($debug)) {
+        $txt.='<li><pre>'.print_r($debug,true).'</pre></li>';
+      }
+      else {
+        $txt.='<li>'.$debug.'</li>';
+      }
+    }
+    $txt.='</ul>';
+    $GLOBALS['Smarty'] -> assign('LSdebug',$txt);
+  }
 }
 
+  /**
+   * Vérifie la compatibilite des DN
+   *
+   * Vérifie que les DNs sont dans la même branche de l'annuaire.
+   *
+   * @param[in] $dn Un premier DN.
+   * @param[in] $dn Un deuxième DN.
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @retval boolean true si les DN sont compatibles, false sinon.
+   */ 
+  function isCompatibleDNs($dn1,$dn2) {
+    $infos1=ldap_explode_dn($dn1,0);
+    if(!$infos1)
+      return;
+    $infos2=ldap_explode_dn($dn2,0);
+    if(!$infos2)
+      return;
+    if($infos2['count']>$infos1['count']) {
+      $tmp=$infos1;
+      $infos1=$infos2;
+      $infos2=$tmp;
+    }
+    $infos1=array_reverse($infos1);
+    $infos2=array_reverse($infos2);
+    
+    for($i=0;$i<$infos1['count'];$i++) {
+      if(($infos1[$i]==$infos2[$i])||(!isset($infos2[$i])))
+        continue;
+      else
+        return false;
+    }
+    return true;
+  }
+
+  /**
+   * Fait la somme de DN
+   *
+   * Retourne un DN qui correspond au point de séparation des DN si les DN 
+   * ne sont pas dans la meme dans la meme branche ou le dn le plus long sinon.
+   *
+   * @param[in] $dn Un premier DN.
+   * @param[in] $dn Un deuxième DN.
+   *
+   * @author Benjamin Renard <brenard@easter-eggs.com>
+   *
+   * @retval string Un DN (ou false si les DN ne sont pas valide)
+   */ 
+  function sumDn($dn1,$dn2) {
+    $infos1=ldap_explode_dn($dn1,0);
+    if(!$infos1)
+      return;
+    $infos2=ldap_explode_dn($dn2,0);
+    if(!$infos2)
+      return;
+    if($infos2['count']>$infos1['count']) {
+      $tmp=$infos1;
+      $infos1=$infos2;
+      $infos2=$tmp;
+    }
+    $infos1=array_reverse($infos1);
+    $infos2=array_reverse($infos2);
+    
+    $first=true;
+    $basedn='';
+    for($i=0;$i<$infos1['count'];$i++) {
+      if(($infos1[$i]==$infos2[$i])||(!isset($infos2[$i]))) {
+        if($first) {
+          $basedn=$infos1[$i];
+          $first=false;
+        }
+        else
+          $basedn=$infos1[$i].','.$basedn;
+      }
+      else {
+        return $basedn;
+      }
+    }
+    return $basedn;
+  }
+
 ?>
index 1741669..cb6531e 100644 (file)
@@ -1,54 +1,55 @@
 var LSdefault = new Class({
     initialize: function(){
-                       LSdebug('toto');
-                       this.LSdebug = $('LSdebug');
-                       this.LSdebugInfos = $('LSdebug_infos');
-                       this.LSdebug.setOpacity(0);
-                       if (this.LSdebugInfos.innerHTML != '') {
-                               this.displayDebugBox();
-                       }
-
-                       this.LSdebugHidden = $('LSdebug_hidden');
-                       this.LSdebugHidden.addEvent('click',this.onLSdebugHiddenClick.bind(this));
-                       this.LSerror = $('LSerror');
-                       this.LSerror.setOpacity(0);
-                       if (this.LSerror.innerHTML != '') {
-                               this.displayLSerror();
-                       }
+      LSdebug('toto');
+      this.LSdebug = $('LSdebug');
+      this.LSdebugInfos = $('LSdebug_infos');
+      this.LSdebug.setOpacity(0);
+      if (this.LSdebugInfos.innerHTML != '') {
+        this.displayDebugBox();
+      }
+
+      this.LSdebugHidden = $('LSdebug_hidden');
+      this.LSdebugHidden.addEvent('click',this.onLSdebugHiddenClick.bindWithEvent(this));
+      this.LSerror = $('LSerror');
+      this.LSerror.setOpacity(0);
+      if (this.LSerror.innerHTML != '') {
+        this.displayLSerror();
+      }
     },
 
-               onLSdebugHiddenClick: function(){
-                       new Fx.Style(this.LSdebug,'opacity',{duration:500}).start(1,0);
-               },
+    onLSdebugHiddenClick: function(event){
+      new Event(event).stop();
+      new Fx.Style(this.LSdebug,'opacity',{duration:500}).start(1,0);
+    },
 
-               displayDebugBox: function() {
-                       new Fx.Style(this.LSdebug,'opacity',{duration:500}).start(0,0.8);
-               },
+    displayDebugBox: function() {
+      new Fx.Style(this.LSdebug,'opacity',{duration:500}).start(0,0.8);
+    },
 
-               displayError: function(html) {
-                       this.LSerror.empty();
-                       this.LSerror.setHTML(html);
-                       this.displayLSerror();
-               },
+    displayError: function(html) {
+      this.LSerror.empty();
+      this.LSerror.setHTML(html);
+      this.displayLSerror();
+    },
 
-               displayLSerror: function() {
-                       new Fx.Style(this.LSerror,'opacity',{duration:500}).start(0,0.8);
-                       (function(){new Fx.Style(this.LSerror,'opacity',{duration:500}).start(0.8,0);}).delay(5000, this);
-               },
+    displayLSerror: function() {
+      new Fx.Style(this.LSerror,'opacity',{duration:500}).start(0,0.8);
+      (function(){new Fx.Style(this.LSerror,'opacity',{duration:500}).start(0.8,0);}).delay(5000, this);
+    },
 
-               loadingImgDisplay: function(el) {
-                       this.loading_img = new Element('img');
-                       this.loading_img.src='templates/images/ajax-loader.gif';
-                       this.loading_img.injectAfter(el);
-               },
+    loadingImgDisplay: function(el) {
+      this.loading_img = new Element('img');
+      this.loading_img.src='templates/images/ajax-loader.gif';
+      this.loading_img.injectAfter(el);
+    },
 
-               loadingImgHide: function() {
-                       this.loading_img.remove();
-               }
+    loadingImgHide: function() {
+      this.loading_img.remove();
+    }
 
 });
 window.addEvent(window.ie ? 'load' : 'domready', function() {
-       varLSdefault = new LSdefault();
+  varLSdefault = new LSdefault();
 });
 
 LSdebug_active = 1;
index 89dcbfe..b669039 100644 (file)
@@ -1,70 +1,68 @@
 var LSform = new Class({
     initialize: function(){
-                       this.objecttype = $('LSform_objecttype').value;
-                       this.idform = $('LSform_idform').value;
+      $$('img.LSform-add-field-btn').each(function(el) {
+        el.addEvent('click',this.onAddFieldBtnClick.bind(this,el));
+      }, this);
 
-                       $$('img.LSform-add-field-btn').each(function(el) {
-                               el.addEvent('click',this.onAddFieldBtnClick.bind(this,el));
-                       }, this);
-
-                       $$('img.LSform-remove-field-btn').each(function(el) {
-                               el.addEvent('click',this.onRemoveFieldBtnClick.bind(this,el));
-                       }, this);
+      $$('img.LSform-remove-field-btn').each(function(el) {
+        el.addEvent('click',this.onRemoveFieldBtnClick.bind(this,el));
+      }, this);
     },
 
-               onAddFieldBtnClick: function(img){
-                       
-                       var getAttrName = /LSform_add_field_btn_(.*)_.*/
-                       var attrName = getAttrName.exec(img.id)[1];
-                       LSdebug(attrName);
+    onAddFieldBtnClick: function(img){
+      
+      var getAttrName = /LSform_add_field_btn_(.*)_.*/
+      var attrName = getAttrName.exec(img.id)[1];
+      LSdebug(attrName);
 
-                       var data = {
-                               template:       'LSform',
-                               action:                 'onAddFieldBtnClick',
-                               attribute:      attrName,
-                               objecttype:     this.objecttype,
-                               idform:                 this.idform,
-                               img:                            img.id
-                       };
-                       LSdebug(data);
-                       varLSdefault.loadingImgDisplay(img);
-                       new Ajax('index_ajax.php',  {data: data, onComplete: this.onAddFieldBtnClickComplete.bind(this)}).request();
-               },
+      var data = {
+        template:   'LSform',
+        action:     'onAddFieldBtnClick',
+        attribute:  attrName,
+        objecttype: $('LSform_objecttype').value,
+        objectdn:         $('LSform_objectdn').value,
+        idform:     $('LSform_idform').value,
+        img:        img.id
+      };
+      LSdebug(data);
+      varLSdefault.loadingImgDisplay(img);
+      new Ajax('index_ajax.php',  {data: data, onComplete: this.onAddFieldBtnClickComplete.bind(this)}).request();
+    },
 
-               onAddFieldBtnClickComplete: function(responseText, responseXML) {
-                       varLSdefault.loadingImgHide();
-                       var data = Json.evaluate(responseText);
-                       LSdebug(data);
-                       if ( data ) {
-                               if ( typeof(data.LSerror) != "undefined" ) {
-                 varLSdefault.displayError(data.LSerror);
-               return;
-               }       
-               else {  
-                                               var li = new Element('li');
-                                               var img = $(data.img);
-                                               li.setHTML(data.html);
-                                               li.injectAfter(img.getParent());
-                                               li.getElements('img[class=LSform-add-field-btn]').each(function(el) {
-                                                       el.addEvent('click',this.onAddFieldBtnClick.bind(this,el));
-                                               }, this);
-                                               li.getElements('img[class=LSform-remove-field-btn]').each(function(el) {
-                                                       el.addEvent('click',this.onRemoveFieldBtnClick.bind(this,el));
-                                               }, this);
-                                       }
-                       }
-               },
+    onAddFieldBtnClickComplete: function(responseText, responseXML) {
+      varLSdefault.loadingImgHide();
+      var data = Json.evaluate(responseText);
+      LSdebug(data);
+      if ( data ) {
+        if ( typeof(data.LSerror) != "undefined" ) {
+            varLSdefault.displayError(data.LSerror);
+            return;
+          } 
+          else {  
+            var li = new Element('li');
+            var img = $(data.img);
+            li.setHTML(data.html);
+            li.injectAfter(img.getParent());
+            li.getElements('img[class=LSform-add-field-btn]').each(function(el) {
+              el.addEvent('click',this.onAddFieldBtnClick.bind(this,el));
+            }, this);
+            li.getElements('img[class=LSform-remove-field-btn]').each(function(el) {
+              el.addEvent('click',this.onRemoveFieldBtnClick.bind(this,el));
+            }, this);
+          }
+      }
+    },
 
-               onRemoveFieldBtnClick: function(img) {
-                       if (img.getParent().getParent().getChildren().length == 1) {
-                               img.getPrevious().getPrevious().value='';
-                       }
-                       else {
-                               img.getParent().remove();
-                       }
-               }
+    onRemoveFieldBtnClick: function(img) {
+      if (img.getParent().getParent().getChildren().length == 1) {
+        img.getPrevious().getPrevious().value='';
+      }
+      else {
+        img.getParent().remove();
+      }
+    }
 
 });
 window.addEvent(window.ie ? 'load' : 'domready', function() {
-       varLSform = new LSform();
+  varLSform = new LSform();
 });
diff --git a/trunk/includes/js/LSview.js b/trunk/includes/js/LSview.js
new file mode 100644 (file)
index 0000000..642fa9c
--- /dev/null
@@ -0,0 +1,31 @@
+var LSview = new Class({
+    initialize: function(){
+      $$('td.LSobject-list-names').each(function(el) {
+        el.addEvent('click',this.onTdLSobjectListNamesClick.bind(this,el));
+      }, this);
+      $$('td.LSobject-list-names').each(function(el) {
+        el.addEvent('mouseenter',this.onTdLSobjectListNamesOver.bind(this,el));
+      }, this);
+      $$('td.LSobject-list-names').each(function(el) {
+        el.addEvent('mouseleave',this.onTdLSobjectListNamesOut.bind(this,el));
+      }, this);
+    },
+
+    onTdLSobjectListNamesClick: function(td) {
+      window.location=td.getFirst().href;
+    },
+
+    onTdLSobjectListNamesOver: function(td){
+      td.imgEdit = new Element('img');
+      td.imgEdit.src = 'templates/images/view.png';
+      td.imgEdit.injectInside(td);
+    },
+    
+    onTdLSobjectListNamesOut: function(td) {
+      td.imgEdit.remove();
+    }
+
+});
+window.addEvent(window.ie ? 'load' : 'domready', function() {
+  varLSview = new LSview();
+});
index 0f72ba8..a76c94d 100644 (file)
@@ -27,32 +27,14 @@ $GLOBALS['LSsession'] = new LSsession();
 
 if($LSsession -> startLSsession()) {
 
-       // Définition du Titre de la page
-       $GLOBALS['Smarty'] -> assign('pagetitle',_('Mon compte'));
+  // Définition du Titre de la page
+  $GLOBALS['Smarty'] -> assign('pagetitle',_('Accueil'));
 
-       // ---- les objets LDAP
-       // Création d'un LSeepeople
-       $eepeople = new LSeepeople();
-       
-       // Chargement des données de l'objet depuis l'annuaire et à partir de son DN
-       $eepeople-> loadData($GLOBALS['LSsession']->dn);
-       
-       // Création d'un formulaire à partir pour notre objet LDAP
-       $form=$eepeople -> getForm('test');
-       
-       // Gestion de sa validation
-       if ($form->validate()) {
-         // MàJ des données de l'objet LDAP
-         $eepeople -> updateData('test');
-       }
-       // Affichage du formulaire
-       $form -> display();
-
-       // Template
-       $GLOBALS['LSsession'] -> setTemplate('base.tpl');
+  // Template
+  $GLOBALS['LSsession'] -> setTemplate('accueil.tpl');
 }
 else {
-       $GLOBALS['LSsession'] -> setTemplate('login.tpl');
+  $GLOBALS['LSsession'] -> setTemplate('login.tpl');
 }
 
 // Affichage des retours d'erreurs
index 8c88439..53f1ea9 100644 (file)
@@ -7,62 +7,63 @@ $GLOBALS['LSsession'] = new LSsession();
 $GLOBALS['LSsession'] -> loadLSobjects();
 
 if ($_REQUEST['template'] != 'login') {
-       if ( !$GLOBALS['LSsession'] -> startLSsession() ) {
-               echo json_encode(array('LSerror' => 'LSsession : Impossible d\'initialiser la LSsession.' ));
-       }
+  if ( !$GLOBALS['LSsession'] -> startLSsession() ) {
+    echo json_encode(array('LSerror' => 'LSsession : Impossible d\'initialiser la LSsession.' ));
+  }
 }
 switch($_REQUEST['template']) {
-       case 'login':
-               switch($_REQUEST['action']) {
-                       case 'onLdapServerChanged':
-                               if ( isset($_REQUEST['server']) ) {
-                                       $GLOBALS['LSsession'] -> setLdapServer($_REQUEST['server']);
-                                       if ( $GLOBALS['LSsession'] -> LSldapConnect() ) {
-                                               $list = $GLOBALS['LSsession'] -> getSubDnLdapServerOptions();
-                                               if (is_string($list)) {
-                                                       $list="<select name='LSsession_topDn' id='LSsession_topDn'>".$list."</select>";
-                                                       $data = array('list_topDn' => $list);
-                                               }
-                                               else if (is_array($list)){
-                                                       $data = array('LSerror' => $GLOBALS['LSerror']->getErrors());
-                                               }
-                                               else {
-                                                       $data = null;
-                                               }
-                                       }
-                                       else {
-                                               $data = array('LSerror' => $GLOBALS['LSerror']->getErrors());
-                                       }
-                               }
-                               else {
-                                       $data=NULL;
-                               }
-                       break;
-               }
-       break;
-       case 'LSform':
-               switch($_REQUEST['action']) {
-                       case 'onAddFieldBtnClick':
-                               if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['idform'])) && (isset($_REQUEST['img'])) ) {
-                                       $object = new $_REQUEST['objecttype']();
-                                       $form = $object -> getForm($_REQUEST['idform']);
-                                       $emptyField=$form -> getEmptyField($_REQUEST['attribute']);
-                                       if ( $emptyField ) {
-                                               $data = array(
-                                                       'html' => $form -> getEmptyField($_REQUEST['attribute']),
-                                                       'img' => $_REQUEST['img'],
-                                               );
-                                       }
-                                       else {
-                                               $data = array('LSerror' => $GLOBALS['LSerror']->getErrors());
-                                       }
-                               }
-                               else {
-                                       $data=NULL;
-                               }
-                       break;
-               }
-       break;
+  case 'login':
+    switch($_REQUEST['action']) {
+      case 'onLdapServerChanged':
+        if ( isset($_REQUEST['server']) ) {
+          $GLOBALS['LSsession'] -> setLdapServer($_REQUEST['server']);
+          if ( $GLOBALS['LSsession'] -> LSldapConnect() ) {
+            $list = $GLOBALS['LSsession'] -> getSubDnLdapServerOptions();
+            if (is_string($list)) {
+              $list="<select name='LSsession_topDn' id='LSsession_topDn'>".$list."</select>";
+              $data = array('list_topDn' => $list);
+            }
+            else if (is_array($list)){
+              $data = array('LSerror' => $GLOBALS['LSerror']->getErrors());
+            }
+            else {
+              $data = null;
+            }
+          }
+          else {
+            $data = array('LSerror' => $GLOBALS['LSerror']->getErrors());
+          }
+        }
+        else {
+          $data=NULL;
+        }
+      break;
+    }
+  break;
+  case 'LSform':
+    switch($_REQUEST['action']) {
+      case 'onAddFieldBtnClick':
+        if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['objectdn'])) && (isset($_REQUEST['idform'])) && (isset($_REQUEST['img'])) ) {
+          $object = new $_REQUEST['objecttype']();
+          $object -> loadData($_REQUEST['objectdn']);
+          $form = $object -> getForm($_REQUEST['idform']);
+          $emptyField=$form -> getEmptyField($_REQUEST['attribute']);
+          if ( $emptyField ) {
+            $data = array(
+              'html' => $form -> getEmptyField($_REQUEST['attribute']),
+              'img' => $_REQUEST['img'],
+            );
+          }
+          else {
+            $data = array('LSerror' => $GLOBALS['LSerror']->getErrors());
+          }
+        }
+        else {
+          $data=NULL;
+        }
+      break;
+    }
+  break;
 }
 
 echo json_encode($data);
diff --git a/trunk/modify.php b/trunk/modify.php
new file mode 100644 (file)
index 0000000..3c682a6
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+/*******************************************************************************
+ * Copyright (C) 2007 Easter-eggs
+ * http://ldapsaisie.labs.libre-entreprise.org
+ *
+ * Author: See AUTHORS file in top-level directory.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+******************************************************************************/
+
+require_once 'includes/functions.php';
+require_once 'includes/class/class.LSsession.php';
+
+$GLOBALS['LSsession'] = new LSsession();
+
+if($LSsession -> startLSsession()) {
+
+  // Définition du Titre de la page
+  $GLOBALS['Smarty'] -> assign('pagetitle',_('Modifier'));
+
+  // Création d'un LSobject
+  if (class_exists($_GET['LSobject'])) {
+    debug('me : '.$GLOBALS['LSsession'] -> whoami($_GET['dn']));
+    if ( $GLOBALS['LSsession'] -> whoami($_GET['dn']) != 'user' ) {
+      $object = new $_GET['LSobject']();
+      if ($object -> loadData($_GET['dn'])) {
+        $form = $object -> getForm('test');
+        if ($form->validate()) {
+          // MàJ des données de l'objet LDAP
+          $object -> updateData('test');
+        }
+        $form -> display();
+      }
+      else debug('erreur durant le chargement du dn');
+    }
+    else {
+      $GLOBALS['LSerror'] -> addErrorCode(1011);
+    }
+  }
+  else {
+    $GLOBALS['LSerror'] -> addErrorCode(21);
+  }
+
+  // Template
+  $GLOBALS['LSsession'] -> setTemplate('modify.tpl');
+}
+else {
+  $GLOBALS['LSsession'] -> setTemplate('login.tpl');
+}
+
+// Affichage des retours d'erreurs
+$GLOBALS['LSsession'] -> displayTemplate();
+?>
diff --git a/trunk/templates/accueil.tpl b/trunk/templates/accueil.tpl
new file mode 100644 (file)
index 0000000..258cbbc
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title>
+    <link rel="stylesheet" type="text/css" href="templates/css/base.css" media="screen" title="Normal" />
+    {$LSsession_css}
+    {$LSsession_js}
+  </head>
+<body>
+<div id='LSerror'>
+{$LSerrors}
+</div>
+<div id='LSdebug'>
+  <a href='#' id='LSdebug_hidden'>X</a> 
+  <div id='LSdebug_infos'>{if $LSdebug != ''}{$LSdebug}{/if}</div>
+</div>
+
+<div id='main'>
+
+  <div id='left'>
+    <img src='templates/images/logo.png' alt='Logo' id='logo'/>
+    <ul class='menu'>
+    {foreach from=$LSaccess item=item key=LSobject}
+      <li class='menu'><a href='view.php?LSobject={$LSobject}' class='menu'>{$item.label}</a></li>
+    {/foreach}
+    </ul>
+  </div>
+  
+  <div id='right'>
+    <p id='status'>Connecté en tant que <span id='user_name'>{$LSsession_username}</span></b> <a href='index.php?LSsession_logout'><img src='templates/images/logout.png' alt='Logout' title='Logout' /></a></p>
+    
+    {if $pagetitle != ''}<h1>{$pagetitle}</h1>{/if}
+    
+  </div>
+  <hr class='spacer' />
+</div>
+</body>
+</html>
index 0aa89cf..8dbeeb0 100644 (file)
@@ -1,49 +1,49 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-       <head>
-               <title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title>
-               <link rel="stylesheet" type="text/css" href="templates/css/base.css" media="screen" title="Normal" />
-               {$LSsession_css}
-               {$LSsession_js}
-       </head>
+  <head>
+    <title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title>
+    <link rel="stylesheet" type="text/css" href="templates/css/base.css" media="screen" title="Normal" />
+    {$LSsession_css}
+    {$LSsession_js}
+  </head>
 <body>
 <div id='LSerror'>
 {$LSerrors}
 </div>
 <div id='LSdebug'>
-       <a href='#' id='LSdebug_hidden'>X</a> 
-       <div id='LSdebug_infos'>{if $LSdebug != ''}{$LSdebug}{/if}</div>
+  <a href='#' id='LSdebug_hidden'>X</a> 
+  <div id='LSdebug_infos'>{if $LSdebug != ''}{$LSdebug}{/if}</div>
 </div>
 
 <div id='main'>
-       <div id='left'>
-               <img src='templates/images/logo.png' alt='Logo' id='logo'/>
-               <ul class='menu'>
-                       <li class='menu'><a href='index.php' class='menu'>Mon compte</a></li>
-                       <li class='menu'><a href='mon_compte.php' class='menu'>Utilisateurs</a></li>
-                       <li class='menu'><a href='mon_compte.php' class='menu'>Groupes</a></li>
-               </ul>
-       </div>
-       <div id='right'>
-               <p id='status'>Connecté en tant que <span id='user_name'>{$LSsession_username}</span></b> <a href='index.php?LSsession_logout'><img src='templates/images/logout.png' alt='Logout' title='Logout' /></a></p>
-               <h1>Mon compte</h1>
-               <form action='{$LSform_action}' method='post' class='LSform'>
-               {$LSform_header}
-               <dl class='LSform'>
-                       {foreach from=$LSform_fields item=field}
-                       <dt class='LSform'>{$field.label}</dt>
-                       <dd class='LSform'>{$field.html}{if $field.add != ''} <span class='LSform-addfield'>+ Ajouter un champ</span>{/if}</dd>
-                       {if $field.errors != ''}
-                               {foreach from=$field.errors item=error}
-                               <dd class='LSform LSform-errors'>{$error}</dd>
-                               {/foreach}
-                       {/if}
-                       {/foreach}
-                       <dd class='LSform'><input type='submit' value='{$LSform_submittxt}' class='LSform' /></dd>
-               </dl>
-       </div>
-       <hr class='spacer' />
+  <div id='left'>
+    <img src='templates/images/logo.png' alt='Logo' id='logo'/>
+    <ul class='menu'>
+    {foreach from=$LSaccess item=item key=LSobject}
+      <li class='menu'><a href='view.php?LSobject={$LSobject}' class='menu'>{$item.label}</a></li>
+    {/foreach}
+    </ul>
+  </div>
+  <div id='right'>
+    <p id='status'>Connecté en tant que <span id='user_name'>{$LSsession_username}</span></b> <a href='index.php?LSsession_logout'><img src='templates/images/logout.png' alt='Logout' title='Logout' /></a></p>
+    {if $pagetitle != ''}<h1>{$pagetitle}</h1>{/if}
+    <form action='{$LSform_action}' method='post' class='LSform'>
+    {$LSform_header}
+    <dl class='LSform'>
+      {foreach from=$LSform_fields item=field}
+      <dt class='LSform'>{$field.label}</dt>
+      <dd class='LSform'>{$field.html}{if $field.add != ''} <span class='LSform-addfield'>+ Ajouter un champ</span>{/if}</dd>
+      {if $field.errors != ''}
+        {foreach from=$field.errors item=error}
+        <dd class='LSform LSform-errors'>{$error}</dd>
+        {/foreach}
+      {/if}
+      {/foreach}
+      <dd class='LSform'><input type='submit' value='{$LSform_submittxt}' class='LSform' /></dd>
+    </dl>
+  </div>
+  <hr class='spacer' />
 </div>
 </body>
 </html>
index 9f58be3..0487ff1 100644 (file)
@@ -1,51 +1,65 @@
-form.LSform {
-       margin-left:                                                            2em;
+p.LSform-view-actions {
+  text-align:                 right;
+  font-size:                  0.8em;
+  margin:                     0.2em;
+  margin-right:               3em;
+  color:                      #0072b8;
+}
+
+a.LSform-view-actions {
+  text-decoration:            none;
+  color:                      #0072b8;
+}
+
+a.LSform-view-actions:hover {
+  text-decoration:            underline;
 }
 
 dl.LSform {
-       margin:                                                                                 0;
-       padding:                                                                                0;
+  margin:                     0;
+  margin-left:                2em;
+  padding:                    0;
 }
 
 .LSform dt {
-       position:                                                                               relative;
-       left:                                                                                           0.2em;
-       top:                                                                                            1.2em;
-       width:                                                                                  12em;
-       font-weight:                                                            bold;
-       font-size:                                                                      0.9em;
-       color:                                                                                  #0072b8;
+  position:                   relative;
+  left:                       0.2em;
+  top:                        1.2em;
+  width:                      12em;
+  font-weight:                bold;
+  font-size:                  0.9em;
+  color:                      #0072b8;
 }
 
 dd.LSform {
-       margin-left:                                                            13em;
-       padding:                                                                                0;
+  margin-left:                13em;
+  padding:                    0;
 }
 
 .LSform input, .LSform select, .LSform textarea {
-       border:                                                                                 1px inset #ccc;
-       width:                                                                                  20em;
-       background-color:                                               #b5e4f6;
+  border:                     1px inset #ccc;
+  width:                      20em;
+  background-color:           #b5e4f6;
 }
 
 input[type='submit'].LSform {
-       border:                                                                                 1px outset #ccc;
-       margin-top:                                                                     1em;
-       margin-left:                                                            6em;
-       width:                                                                                  8em;
+  border:                     1px outset #ccc;
+  margin-top:                 1em;
+  margin-left:                6em;
+  width:                      8em;
 }
 
 ul.LSform {
-       list-style-type:                                                none;
-       padding:                                                                                0;
-       margin:                                                                                 0;
+  list-style-type:            none;
+  padding:                    0;
+  margin:                     0;
 }
 
 .LSform-errors {
-       color:                                                                                  #fff;
-       background-color:                                               #f59a67;
+  color:                      #fff;
+  background-color:           #f59a67;
 }
 
 img.LSform-add-field-btn, img.LSform-remove-field-btn {
-       cursor:                                                                                 pointer;
+  cursor:                     pointer;
 }
index b3d1fd1..72236f5 100644 (file)
 body {
-       font-family:                            sans-serif;
-       margin:                                                 0;
-       padding:                                                0;
+  font-family:        sans-serif;
+  margin:             0;
+  padding:            0;
 }
 
 img {
-       vertical-align:                 bottom;
+  vertical-align:     bottom;
 }
 
 a:hover {
-       text-decoration:                underline;
+  text-decoration:    underline;
 }
 
 h1 {
-       margin:                                                 0.5em;
-       border-bottom:                  1px solid #0072b8;
-       color:                                                  #0072b8;
+  margin:             0.5em;
+  border-bottom:      1px solid #0072b8;
+  color:              #0072b8;
 }
 
 a img {
-       border:                                                 none;
+  border:             none;
 }
 
 hr {
-       visibility:                                     hidden;
-       clear:                                                  both;
-       height:                                                 0px;
+  visibility:         hidden;
+  clear:              both;
+  height:             0px;
 }
 
 #main {
-       width:                                                  1000px;
-       margin:                                                 auto;
-       border:                                                 1px solid #52bce5;
-       background:                                     #fff url(../images/fd_menu.png) repeat-y scroll left top;
+  width:              1000px;
+  margin:             auto;
+  border:             1px solid #52bce5;
+  background:         #fff url(../images/fd_menu.png) repeat-y scroll left top;
 }
 
 #left {
-       float:                                                  left;
-       width:                                                  160px;
+  float:              left;
+  width:              160px;
 }
 
 #right {
-       margin:                                                 0;
-       float:                                                  left;
-       width:                                                  840px;
+  margin:             0;
+  float:              left;
+  width:              840px;
 }
 
 #logo {
-       margin:                                                 auto;
-       width:                                                  142px;
-       margin-left:                            9px;
+  margin:             auto;
+  width:              142px;
+  margin-left:        9px;
 }
 
 #status {
-       margin:                                                 0;
-       padding:                                                0;
-       font-size:                                      0.7em;
-       color:                                                  #fff;
-       text-align:                                     right;
-       background-color:   #52bce5;
-       padding:                                                0.3em;
+  margin:             0;
+  padding:            0;
+  font-size:          0.7em;
+  color:              #fff;
+  text-align:         right;
+  background-color:   #52bce5;
+  padding:            0.3em;
 }
 
 #user_name {
-       font-weight:                            bold;
+  font-weight:        bold;
 }
 
 ul.menu {
-       list-style-image:               url(../images/puce.png);
+  list-style-image:   url(../images/puce.png);
 }
 
 li.menu {
-       color:                                                  #fff;
+  color:              #fff;
 }
 
 a.menu {
-       color:                                                  #fff;
-       text-decoration:                none;
+  color:              #fff;
+  text-decoration:    none;
+}
+
+table.LSobject-list {
+  margin-left:        1em;
+  border:             1px solid #52bce5;
+  width:              30em;
+  border-collapse:    collapse;
+}
+
+td.LSobject-list {
+  border:             1px solid #52bce5;
+  padding:            0.1em;
+}
+
+th.LSobject-list {
+  background-color:   #52bce5;
+  color:              #fff;
+}
+
+a.LSobject-list {
+  color:              #000;
+  text-decoration:    none;
+}
+
+a.LSobject-list-actions {
+  color:              #0072b8;
+  text-decoration:    none;
+}
+
+a.LSobject-list-actions:hover {
+  text-decoration:    underline;
+}
+
+td.LSobject-list-actions {
+  width:              7em;
+}
+
+p.LSobject-list-page {
+  text-align:         center;
+  margin:             0.5em;
+  width:              30em;
+}
+
+a.LSobject-list-page {
+  color:              #52bce5;
+  text-decoration:    none;
+}
+
+a.LSobject-list-page:hover {
+  color:              #0072b8;
+}
+
+strong.LSobject-list-page {
+  color:              #0072b8;
 }
diff --git a/trunk/templates/empty.tpl b/trunk/templates/empty.tpl
new file mode 100644 (file)
index 0000000..5d6e0d7
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title>
+    <link rel="stylesheet" type="text/css" href="templates/css/base.css" media="screen" title="Normal" />
+    {$LSsession_css}
+    {$LSsession_js}
+  </head>
+<body>
+<div id='LSerror'>
+{$LSerrors}
+</div>
+<div id='LSdebug'>
+  <a href='#' id='LSdebug_hidden'>X</a> 
+  <div id='LSdebug_infos'>{if $LSdebug != ''}{$LSdebug}{/if}</div>
+</div>
+
+<div id='main'>
+  <div id='left'>
+    <img src='templates/images/logo.png' alt='Logo' id='logo'/>
+    <ul class='menu'>
+    {foreach from=$LSaccess item=item key=LSobject}
+      <li class='menu'><a href='view.php?LSobject={$LSobject}' class='menu'>{$item.label}</a></li>
+    {/foreach}
+    </ul>
+  </div>
+  <div id='right'>
+    <p id='status'>Connecté en tant que <span id='user_name'>{$LSsession_username}</span></b> <a href='index.php?LSsession_logout'><img src='templates/images/logout.png' alt='Logout' title='Logout' /></a></p>
+  </div>
+  <hr class='spacer' />
+</div>
+</body>
+</html>
diff --git a/trunk/templates/images/edit.png b/trunk/templates/images/edit.png
new file mode 100644 (file)
index 0000000..8dd48c4
Binary files /dev/null and b/trunk/templates/images/edit.png differ
diff --git a/trunk/templates/images/view.png b/trunk/templates/images/view.png
new file mode 100644 (file)
index 0000000..d072d3c
Binary files /dev/null and b/trunk/templates/images/view.png differ
diff --git a/trunk/templates/modify.tpl b/trunk/templates/modify.tpl
new file mode 100644 (file)
index 0000000..79b2431
--- /dev/null
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title>
+    <link rel="stylesheet" type="text/css" href="templates/css/base.css" media="screen" title="Normal" />
+    {$LSsession_css}
+    {$LSsession_js}
+  </head>
+<body>
+<div id='LSerror'>
+{$LSerrors}
+</div>
+<div id='LSdebug'>
+  <a href='#' id='LSdebug_hidden'>X</a> 
+  <div id='LSdebug_infos'>{if $LSdebug != ''}{$LSdebug}{/if}</div>
+</div>
+
+<div id='main'>
+  <div id='left'>
+    <img src='templates/images/logo.png' alt='Logo' id='logo'/>
+    <ul class='menu'>
+    {foreach from=$LSaccess item=item key=LSobject}
+      <li class='menu'><a href='view.php?LSobject={$LSobject}' class='menu'>{$item.label}</a></li>
+    {/foreach}
+    </ul>
+  </div>
+  <div id='right'>
+    <p id='status'>Connecté en tant que <span id='user_name'>{$LSsession_username}</span></b> <a href='index.php?LSsession_logout'><img src='templates/images/logout.png' alt='Logout' title='Logout' /></a></p>
+    
+    {if $pagetitle != ''}<h1>{$pagetitle}</h1>{/if}
+    <p class='LSform-view-actions'><a href='view.php?LSobject={$LSform_object.type}&amp;dn={$LSform_object.dn}' class='LSform-view-actions'>Voir</a></p>
+    
+    <form action='{$LSform_action}' method='post' class='LSform'>
+    {$LSform_header}
+    <dl class='LSform'>
+      {foreach from=$LSform_fields item=field}
+      <dt class='LSform'>{$field.label}</dt>
+      <dd class='LSform'>{$field.html}{if $field.add != ''} <span class='LSform-addfield'>+ Ajouter un champ</span>{/if}</dd>
+      {if $field.errors != ''}
+        {foreach from=$field.errors item=error}
+        <dd class='LSform LSform-errors'>{$error}</dd>
+        {/foreach}
+      {/if}
+      {/foreach}
+      <dd class='LSform'><input type='submit' value='{$LSform_submittxt}' class='LSform' /></dd>
+    </dl>
+    </form>
+  </div>
+  <hr class='spacer' />
+</div>
+</body>
+</html>
diff --git a/trunk/templates/view.tpl b/trunk/templates/view.tpl
new file mode 100644 (file)
index 0000000..196c3e6
--- /dev/null
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title>
+    <link rel="stylesheet" type="text/css" href="templates/css/base.css" media="screen" title="Normal" />
+    {$LSsession_css}
+    {$LSsession_js}
+  </head>
+<body>
+<div id='LSerror'>
+{$LSerrors}
+</div>
+<div id='LSdebug'>
+  <a href='#' id='LSdebug_hidden'>X</a> 
+  <div id='LSdebug_infos'>{if $LSdebug != ''}{$LSdebug}{/if}</div>
+</div>
+
+<div id='main'>
+  <div id='left'>
+    <img src='templates/images/logo.png' alt='Logo' id='logo'/>
+    <ul class='menu'>
+    {foreach from=$LSaccess item=item key=LSobject_type}
+      <li class='menu'><a href='view.php?LSobject={$LSobject_type}' class='menu'>{$item.label}</a></li>
+    {/foreach}
+    </ul>
+  </div>
+  <div id='right'>
+    <p id='status'>Connecté en tant que <span id='user_name'>{$LSsession_username}</span></b> <a href='index.php?LSsession_logout'><img src='templates/images/logout.png' alt='Logout' title='Logout' /></a></p>
+    {if $pagetitle != ''}<h1>{$pagetitle}</h1>{/if}
+    {if $LSform_canEdit == 'true'}<p class='LSform-view-actions'><a href='modify.php?LSobject={$LSform_object.type}&amp;dn={$LSform_object.dn}' class='LSform-view-actions'>Modifier</a></p>{/if}
+    <dl class='LSform'>
+      {foreach from=$LSform_fields item=field}
+      <dt class='LSform'>{$field.label}</dt>
+      <dd class='LSform'>{$field.html}</dd>
+      {/foreach}
+    </dl>
+  </div>
+  <hr class='spacer' />
+</div>
+</body>
+</html>
diff --git a/trunk/templates/viewList.tpl b/trunk/templates/viewList.tpl
new file mode 100644 (file)
index 0000000..1ba48bd
--- /dev/null
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title>
+    <link rel="stylesheet" type="text/css" href="templates/css/base.css" media="screen" title="Normal" />
+    {$LSsession_css}
+    {$LSsession_js}
+  </head>
+<body>
+<div id='LSerror'>
+{$LSerrors}
+</div>
+<div id='LSdebug'>
+  <a href='#' id='LSdebug_hidden'>X</a> 
+  <div id='LSdebug_infos'>{if $LSdebug != ''}{$LSdebug}{/if}</div>
+</div>
+
+<div id='main'>
+  <div id='left'>
+    <img src='templates/images/logo.png' alt='Logo' id='logo'/>
+    <ul class='menu'>
+    {foreach from=$LSaccess item=item key=LSobject_type}
+      <li class='menu'><a href='view.php?LSobject={$LSobject_type}' class='menu'>{$item.label}</a></li>
+    {/foreach}
+    </ul>
+  </div>
+  <div id='right'>
+    <p id='status'>Connecté en tant que <span id='user_name'>{$LSsession_username}</span></b> <a href='index.php?LSsession_logout'><img src='templates/images/logout.png' alt='Logout' title='Logout' /></a></p>
+    {if $pagetitle != ''}<h1>{$pagetitle}</h1>{/if}
+    <table class='LSobject-list'>
+      <tr class='LSobject-list'>
+        <th class='LSobject-list'>{$LSobject_list_objectname}</th>
+        <th class='LSobject-list'>{$_Actions}</th>
+      </tr>
+    {foreach from=$LSobject_list item=object}
+        <tr class='LSobject-list'>
+            <td class='LSobject-list LSobject-list-names'><a href='view.php?LSobject={$LSobject_list_objecttype}&amp;dn={$object.dn}'  class='LSobject-list'>{$object.displayValue}</a> </td>
+            <td class='LSobject-list LSobject-list-actions'>{if $object.canEdit}<a href='modify.php?LSobject={$LSobject_list_objecttype}&amp;dn={$object.dn}'  class='LSobject-list-actions'><img src='templates/images/edit.png' alt='{$_Modifier}' title='{$_Modifier}'/></a>{/if}</td>
+        </tr>
+    {/foreach}
+    </table>
+    {if $LSobject_list_nbpage}
+      <p class='LSobject-list-page'>
+      {section name=listpage loop=$LSobject_list_nbpage step=1}
+        {if $LSobject_list_currentpage == $smarty.section.listpage.index}
+          <strong class='LSobject-list-page'>{$LSobject_list_currentpage}</strong> 
+        {else}
+          <a href='view.php?LSobject={$LSobject_list_objecttype}&amp;page={$smarty.section.listpage.index}'  class='LSobject-list-page'>{$smarty.section.listpage.index}</a> 
+        {/if}
+      {/section}
+      </p>
+    {/if}
+  </div>
+  <hr class='spacer' />
+</div>
+</body>
+</html>
diff --git a/trunk/view.php b/trunk/view.php
new file mode 100644 (file)
index 0000000..01c54d2
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+/*******************************************************************************
+ * Copyright (C) 2007 Easter-eggs
+ * http://ldapsaisie.labs.libre-entreprise.org
+ *
+ * Author: See AUTHORS file in top-level directory.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+******************************************************************************/
+
+define('NB_LSOBJECT_LIST',20);
+
+require_once 'includes/functions.php';
+require_once 'includes/class/class.LSsession.php';
+
+$GLOBALS['LSsession'] = new LSsession();
+
+if($LSsession -> startLSsession()) {
+  $LSobject = $_GET['LSobject'];
+  
+  if ( $LSobject == 'SELF' ) {
+    if ($GLOBALS['LSsession'] -> canAccess($GLOBALS['LSsession']-> LSuserObject -> getType(),$GLOBALS['LSsession']-> LSuserObject -> getValue('dn'))) {
+      if ( $GLOBALS['LSsession'] -> canEdit($GLOBALS['LSsession']-> LSuserObject -> getType(),$GLOBALS['LSsession']-> LSuserObject -> getValue('dn'))) {
+        $GLOBALS['Smarty'] -> assign('LSform_canEdit',true);
+      }
+      $GLOBALS['Smarty'] -> assign('pagetitle',_('Mon compte'));
+      $form = $GLOBALS['LSsession']-> LSuserObject -> getView();
+      $form -> displayView();
+      $GLOBALS['LSsession'] -> setTemplate('view.tpl');
+    }
+    else {
+      $GLOBALS['LSerror'] -> addErrorCode(1004,$_GET['LSobject']);
+    }
+  }
+  else {
+    if ( $GLOBALS['LSsession'] -> loadLSobject($_GET['LSobject']) ) {
+      if ( isset($_GET['dn']) ) {
+        if ($GLOBALS['LSsession'] -> canAccess($_GET['LSobject'],$_GET['dn'])) {
+          if ( $GLOBALS['LSsession'] -> canEdit($_GET['LSobject'],$_GET['dn']) ) {
+            $GLOBALS['Smarty'] -> assign('LSform_canEdit','true');
+          }
+          $object = new $_GET['LSobject']();
+          $object -> loadData($_GET['dn']);
+          $view = $object -> getView();
+          $view -> displayView();
+          $GLOBALS['LSsession'] -> setTemplate('view.tpl');
+        }
+        else {
+          $GLOBALS['LSerror'] -> addErrorCode(1011);
+        }
+      }
+      else {
+        $objectList=array();
+        $object = new $_GET['LSobject']();
+        $GLOBALS['Smarty']->assign('pagetitle',$object -> getLabel());
+        $GLOBALS['Smarty']->assign('LSobject_list_objectname',$object -> getLabel());
+        $list=$object -> listObjects();
+        $nbObjects=count($list);
+        if ($nbObjects > NB_LSOBJECT_LIST) {
+          if (isset($_GET['page'])) {
+            $list = array_slice($list, ($_GET['page']) * NB_LSOBJECT_LIST, NB_LSOBJECT_LIST);
+            $GLOBALS['Smarty']->assign('LSobject_list_currentpage',$_GET['page']);
+            $GLOBALS['Smarty']->assign('LSobject_list_nbpage',ceil($nbObjects / NB_LSOBJECT_LIST));
+          }
+          else {
+            $list = array_slice($list, 0, NB_LSOBJECT_LIST);
+            $GLOBALS['Smarty']->assign('LSobject_list_currentpage',0);
+            $GLOBALS['Smarty']->assign('LSobject_list_nbpage',ceil($nbObjects / NB_LSOBJECT_LIST));
+          }
+        }
+        foreach($list as $thisObject) {
+          if ($GLOBALS['LSsession'] -> canAccess($_GET['LSobject'],$thisObject->getValue('dn'))) {
+            $objectList[]=array(
+              'dn' => $thisObject->getValue('dn'),
+              'displayValue' => $thisObject->getDisplayValue(),
+              'canEdit' => $GLOBALS['LSsession'] -> canEdit($_GET['LSobject'],$thisObject->getValue('dn'))
+            );
+          }
+          else {
+            debug($thisObject->getValue('dn'));
+          }
+        }
+        $GLOBALS['LSsession'] -> addJSscript('LSview.js');
+        
+        $GLOBALS['Smarty']->assign('_Actions',_('Actions'));
+        $GLOBALS['Smarty']->assign('_Modifier',_('Modifier'));
+        $GLOBALS['Smarty']->assign('LSobject_list',$objectList);
+        $GLOBALS['Smarty']->assign('LSobject_list_objecttype',$_GET['LSobject']);
+        $GLOBALS['LSsession'] -> setTemplate('viewList.tpl');
+      }
+    }
+    else {
+      $GLOBALS['LSerror'] -> addErrorCode(1004,$_GET['LSobject']);
+    }
+  }
+}
+else {
+  $GLOBALS['LSsession'] -> setTemplate('login.tpl');
+}
+
+// Affichage des retours d'erreurs
+$GLOBALS['LSsession'] -> displayTemplate();
+?>