- Ajout de la gestion des droits (A étendre et debugger)

- Propagation des possibilités de l'interface
This commit is contained in:
Benjamin Renard 2008-02-08 17:39:24 +00:00
parent 61ba918a42
commit 7d2e3baf8b
33 changed files with 2560 additions and 1706 deletions

View file

@ -22,11 +22,12 @@
$GLOBALS['LSobjects']['LSeecompany'] = array ( $GLOBALS['LSobjects']['LSeecompany'] = array (
'objectclass' => array( 'objectclass' => array(
'lscompany', 'lscompany'
), ),
'rdn' => 'o', 'rdn' => 'o',
'container_dn' => 'ou=companies', 'container_dn' => 'ou=companies',
'select_display_attrs' => '%{dc}', 'select_display_attrs' => '%{dc}',
'label' => _('Sociétés'),
'attrs' => array ( 'attrs' => array (
'o' => array ( 'o' => array (
'label' => _('Nom'), 'label' => _('Nom'),
@ -36,9 +37,10 @@ $GLOBALS['LSobjects']['LSeecompany'] = array (
'check_data' => array ( 'check_data' => array (
'alphanumeric' 'alphanumeric'
), ),
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'view' => 1,
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'rights' => array(
'users' => 'r' // définition des droits de tout les utilisateurs 'user' => 'r',
'admin' => 'w'
), ),
'form' => array ( 'form' => array (
'test' => 1 'test' => 1
@ -49,10 +51,11 @@ $GLOBALS['LSobjects']['LSeecompany'] = array (
'ldap_type' => 'ascii', 'ldap_type' => 'ascii',
'html_type' => 'text', 'html_type' => 'text',
'required' => 1, 'required' => 1,
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'user' => 'r',
'users' => 'r' // définition des droits de tout les utilisateurs 'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1 'test' => 1
) )

View file

@ -22,12 +22,12 @@
$GLOBALS['LSobjects']['LSeegroup'] = array ( $GLOBALS['LSobjects']['LSeegroup'] = array (
'objectclass' => array( 'objectclass' => array(
'lsgroup',
'posixGroup' 'posixGroup'
), ),
'rdn' => 'cn', 'rdn' => 'cn',
'container_dn' => 'ou=groups', 'container_dn' => 'ou=groups',
'select_display_attrs' => '%{cn}', 'select_display_attrs' => '%{cn}',
'label' => _('Groupes'),
'attrs' => array ( 'attrs' => array (
'cn' => array ( 'cn' => array (
'label' => _('Nom'), 'label' => _('Nom'),
@ -35,7 +35,9 @@ $GLOBALS['LSobjects']['LSeegroup'] = array (
'html_type' => 'text', 'html_type' => 'text',
'required' => 1, 'required' => 1,
'check_data' => array ( 'check_data' => array (
'alphanumeric' 'alphanumeric' => array(
'msg' => _('Le nom ne doit comporter que des lettres et des chiffres.')
),
), ),
'validation' => array ( 'validation' => array (
array ( array (
@ -43,9 +45,10 @@ $GLOBALS['LSobjects']['LSeegroup'] = array (
'result' => 0 'result' => 0
) )
), ),
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'view' => 1,
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'rights' => array(
'users' => 'r' // définition des droits de tout les utilisateurs 'user' => 'r',
'admin' => 'w'
), ),
'form' => array ( 'form' => array (
'test' => 1 'test' => 1
@ -62,9 +65,10 @@ $GLOBALS['LSobjects']['LSeegroup'] = array (
'result' => 0 'result' => 0
) )
), ),
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'view' => 1,
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'rights' => array(
'users' => 'r' // définition des droits de tout les utilisateurs 'user' => 'r',
'admin' => 'w'
), ),
'form' => array ( 'form' => array (
'test' => 1 'test' => 1
@ -75,15 +79,16 @@ $GLOBALS['LSobjects']['LSeegroup'] = array (
'ldap_type' => 'ascii', 'ldap_type' => 'ascii',
'html_type' => 'select_list', 'html_type' => 'select_list',
'required' => 0, 'required' => 0,
'multiple' => 1,
'validation' => array ( 'validation' => array (
array ( array (
'basedn' => '%{val}', 'basedn' => '%{val}',
'result' => 1 'result' => 1
) )
), ),
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'view' => 1,
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'rights' => array(
'users' => 'r' // définition des droits de tout les utilisateurs 'admin' => 'w'
), ),
'form' => array ( 'form' => array (
'test' => 1 'test' => 1
@ -91,10 +96,10 @@ $GLOBALS['LSobjects']['LSeegroup'] = array (
'possible_values' => array( 'possible_values' => array(
'aucun' => _('-- Selectionner --'), 'aucun' => _('-- Selectionner --'),
'OTHER_OBJECT' => array( 'OTHER_OBJECT' => array(
'object_type' => 'LSeepeople', // Nom de l'objet à lister 'object_type' => 'LSeepeople', // Nom de l'objet à lister
'display_attribute' => '%{cn} (%{uidNumber})', // Spécifie le attributs à lister pour le choix, 'display_attribute' => '%{cn} (%{uidNumber})', // Spécifie le attributs à lister pour le choix,
// si non définie => utilisation du 'select_display_attrs' // si non définie => utilisation du 'select_display_attrs'
// de la définition de l'objet // de la définition de l'objet
'value_attribute' => '%{dn}', // Spécifie le attributs dont la valeur sera retournée par 'value_attribute' => '%{dn}', // Spécifie le attributs dont la valeur sera retournée par
) )

View file

@ -23,7 +23,6 @@
$GLOBALS['LSobjects']['LSeepeople'] = array ( $GLOBALS['LSobjects']['LSeepeople'] = array (
'objectclass' => array( 'objectclass' => array(
'top', 'top',
'lspeople',
'posixAccount', 'posixAccount',
'sambaSamAccount', 'sambaSamAccount',
), ),
@ -32,7 +31,8 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'before_save' => 'valid', 'before_save' => 'valid',
'after_save' => 'valid', 'after_save' => 'valid',
'select_display_attrs' => '%{cn}', 'select_display_attrs' => '%{cn}',
// Attributes 'label' => _('Utilisateurs'),
// Attributes
'attrs' => array ( 'attrs' => array (
'uid' => array ( 'uid' => array (
'label' => _('Identifiant'), 'label' => _('Identifiant'),
@ -51,10 +51,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'msg' => _('Cet identifiant est déjà utilisé.') 'msg' => _('Cet identifiant est déjà utilisé.')
) )
), ),
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'r',
'users' => 'r' // définition des droits de tout les utilisateurs 'user' => 'r',
'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 0, 'test' => 0,
'add' => 1 'add' => 1
@ -78,10 +80,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'msg' => _('Cet uid est déjà utilisé.') 'msg' => _('Cet uid est déjà utilisé.')
) )
), ),
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'r',
'users' => 'r' // définition des droits de tout les utilisateurs 'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 0, 'test' => 0,
) )
@ -93,10 +96,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'required' => 1, 'required' => 1,
'default_value' => 'titi', 'default_value' => 'titi',
'validation' => 'valid', 'validation' => 'valid',
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'w',
'users' => 'r' // définition des droits de tout les utilisateurs 'user' => 'r',
'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
'add' => 1 'add' => 1
@ -113,10 +118,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'msg' => _('Le prenom ne doit comporter que des lettres et des chiffres.') '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) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'w',
'users' => 'r' // définition des droits de tout les utilisateurs 'users' => 'r',
'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
'add' => 1 'add' => 1
@ -130,8 +137,10 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'required' => 1, 'required' => 1,
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) '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 '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 ( 'form' => array (
'test' => 1, 'test' => 1,
'add' => 1 'add' => 1
@ -141,7 +150,7 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'label' => _('Groupe principal'), 'label' => _('Groupe principal'),
'ldap_type' => 'numeric', 'ldap_type' => 'numeric',
'html_type' => 'select_list', 'html_type' => 'select_list',
'multiple' => true, 'multiple' => false,
'required' => 1, 'required' => 1,
'validation' => array ( 'validation' => array (
array ( array (
@ -151,10 +160,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'result' => 1 'result' => 1
) )
), ),
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'r',
'users' => 'r' // définition des droits de tout les utilisateurs 'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
'add' => 1 'add' => 1
@ -167,14 +177,14 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
// de la définition de l'objet // de la définition de l'objet
'value_attribute' => 'gidNumber', // Spécifie le attributs dont la valeur sera retournée par '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 ( // l'établissement de la liste d'objets :
array( // Premier filtre array( // Premier filtre
'filter' => 'cn=*a*', 'filter' => 'cn=*a*',
//'basedn' => 'o=company', //'basedn' => 'o=company',
'scope' => 'sub', 'scope' => 'sub',
) )
) )*/
) )
) )
), ),
@ -184,10 +194,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'html_type' => 'select_list', 'html_type' => 'select_list',
'required' => 1, 'required' => 1,
'default_value' => '/bin/false', 'default_value' => '/bin/false',
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'r',
'users' => 'r' // définition des droits de tout les utilisateurs 'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
'add' => 1 'add' => 1
@ -203,9 +214,8 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'html_type' => 'text', 'html_type' => 'text',
'required' => 1, 'required' => 1,
'generate_function' => 'generate_sambaSID', 'generate_function' => 'generate_sambaSID',
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'r', // définition des droits de l'utilisateur sur lui même 'admin' => 'r'
'users' => 'r' // définition des droits de tout les utilisateurs
), ),
'form' => array ( 'form' => array (
//'test' => 0, //'test' => 0,
@ -217,11 +227,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'html_type' => 'text', 'html_type' => 'text',
'required' => 1, 'required' => 1,
'default_value' => '/home/%{uid}', 'default_value' => '/home/%{uid}',
'generate_function' => 'generate_homeDirectory', 'generate_function' => 'generate_homeDirectory',
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'r', // définition des droits de l'utilisateur sur lui même 'self' => 'r'
'users' => 'r' // définition des droits de tout les utilisateurs
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
) )
@ -236,10 +246,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'msg' => _("L'adresse e-mail entrée n'est pas valide.") 'msg' => _("L'adresse e-mail entrée n'est pas valide.")
), ),
), ),
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'r', // définition des droits de l'utilisateur sur lui même 'self' => 'r',
'users' => 'r' // définition des droits de tout les utilisateurs 'user' => 'r',
'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
'add' => 1 'add' => 1
@ -251,10 +263,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'html_type' => 'select_list', 'html_type' => 'select_list',
'required' => 1, 'required' => 1,
'default_value' => 'M.', 'default_value' => 'M.',
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'w',
'users' => 'r' // définition des droits de tout les utilisateurs 'user' => 'r',
'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
'add' => 1 'add' => 1
@ -269,16 +283,17 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'label' => _('Mail indésirable'), 'label' => _('Mail indésirable'),
'ldap_type' => 'ascii', 'ldap_type' => 'ascii',
'html_type' => 'text', 'html_type' => 'text',
'multiple' => true, 'multiple' => true,
'check_data' => array ( 'check_data' => array (
'email' => array( 'email' => array(
'msg' => _("L'adresse e-mail entrée n'est pas valide.") 'msg' => _("L'adresse e-mail entrée n'est pas valide.")
), ),
), ),
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'w',
'users' => 'r' // définition des droits de tout les utilisateurs 'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
) )
@ -293,27 +308,30 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'msg' => _("L'adresse e-mail entrée n'est pas valide.") 'msg' => _("L'adresse e-mail entrée n'est pas valide.")
), ),
), ),
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'w',
'users' => 'r' // définition des droits de tout les utilisateurs 'admin' => 'w',
'user' => 'r'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
), ),
'possible_values' => array( 'possible_values' => array(
'%{uid}@autoreponse.example.fr' => 'Oui', '' => 'Non',
'' => 'Non' '%{uid}@autoreponse.example.fr' => 'Oui'
) )
), ),
'vacationInfo' => array ( 'vacationInfo' => array (
'label' => _('Message en reponse'), 'label' => _('Message en reponse'),
'ldap_type' => 'ascii', 'ldap_type' => 'ascii',
'html_type' => 'textarea', 'html_type' => 'textarea',
'multiple' => true, 'multiple' => true,
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'w',
'users' => 'r' // définition des droits de tout les utilisateurs 'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
) )
@ -327,10 +345,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'msg' => _("L'adresse e-mail entrée n'est pas valide.") 'msg' => _("L'adresse e-mail entrée n'est pas valide.")
), ),
), ),
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'w',
'users' => 'r' // définition des droits de tout les utilisateurs 'user' => 'r',
'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
) )
@ -344,10 +364,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'msg' => _("Le quota de l'adresse mail entrée n'est pas valide.") '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) 'rights' => array(
'self' => 'r', // définition des droits de l'utilisateur sur lui même 'self' => 'r',
'users' => 'r' // définition des droits de tout les utilisateurs 'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
) )
@ -356,10 +377,12 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'label' => _('Description'), 'label' => _('Description'),
'ldap_type' => 'ascii', 'ldap_type' => 'ascii',
'html_type' => 'text', 'html_type' => 'text',
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'w',
'users' => 'r' // définition des droits de tout les utilisateurs 'user' => 'r',
'admin' => 'w'
), ),
'view' => 1,
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
) )
@ -368,15 +391,15 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'label' => _('Mot de passe'), 'label' => _('Mot de passe'),
'ldap_type' => 'password', 'ldap_type' => 'password',
'html_type' => 'password', 'html_type' => 'password',
'required' => 1, 'required' => 1,
'rights' => array( // Définition de droits : 'r' => lecture / 'w' => modification / '' => aucun (par defaut) 'rights' => array(
'self' => 'w', // définition des droits de l'utilisateur sur lui même 'self' => 'w',
'users' => 'r' // définition des droits de tout les utilisateurs 'admin' => 'w'
),
'dependAttrs' => array(
'sambaLMPassword',
'sambaNTPassword'
), ),
'dependAttrs' => array(
'sambaLMPassword',
'sambaNTPassword'
),
'form' => array ( 'form' => array (
'test' => 1, 'test' => 1,
'add' => 1 'add' => 1
@ -386,24 +409,16 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
'label' => _('Mot de passe Samba (LM)'), 'label' => _('Mot de passe Samba (LM)'),
'ldap_type' => 'ascii', 'ldap_type' => 'ascii',
'html_type' => 'password', 'html_type' => 'password',
'required' => 1, 'required' => 1,
'generate_function' => 'generate_sambaLMPassword', '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
)
),
'sambaNTPassword' => array ( 'sambaNTPassword' => array (
'label' => _('Mot de passe Samba (NT)'), 'label' => _('Mot de passe Samba (NT)'),
'ldap_type' => 'ascii', 'ldap_type' => 'ascii',
'html_type' => 'password', 'html_type' => 'password',
'required' => 1, 'required' => 1,
'generate_function' => 'generate_sambaNTPassword', '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
)
) )
) )
); );
?> ?>

View file

@ -22,8 +22,10 @@
define('LS_OBJECTS_DIR', LS_CONF_DIR . 'LSobjects/'); define('LS_OBJECTS_DIR', LS_CONF_DIR . 'LSobjects/');
$GLOBALS['LSobjects']['loads'] = array ( $GLOBALS['LSobjects_loads'] = array (
'LSeepeople', 'LSeegroup' 'LSeepeople',
'LSeegroup',
'LSeecompany'
); );
?> ?>

View file

@ -100,10 +100,10 @@ $GLOBALS['LSerror_code'] = array (
'msg' => _("LSldapObject : Sans DN, l'objet n'a put être modifié."), 'msg' => _("LSldapObject : Sans DN, l'objet n'a put être modifié."),
'level' => 'c' 'level' => 'c'
), ),
34 => array ( 34 => array (
'msg' => _("LSldapObject : L'attribut %{attr_depend} dépendant de l'attribut %{attr} n'existe pas."), 'msg' => _("LSldapObject : L'attribut %{attr_depend} dépendant de l'attribut %{attr} n'existe pas."),
'level' => 'w' 'level' => 'w'
), ),
// LSldapObject // LSldapObject
41 => array ( 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."), 'msg' => _("LSattribute : La valeur de l'attribut %{attr} ne peut pas être générée."),
'level' => 'c' 'level' => 'c'
), ),
47 => array ( 47 => array (
'msg' => _("LSattribute : La valeur de l'attribut %{attr} n'a pas put être générée."), 'msg' => _("LSattribute : La valeur de l'attribut %{attr} n'a pas put être générée."),
'level' => 'c' 'level' => 'c'
), ),
48 => array ( 48 => array (
'msg' => _("LSattribute : La génération de l'attribut %{attr} n'a pas retourné une valeur correcte."), 'msg' => _("LSattribute : La génération de l'attribut %{attr} n'a pas retourné une valeur correcte."),
'level' => 'c' 'level' => 'c'
), ),
@ -153,40 +153,40 @@ $GLOBALS['LSerror_code'] = array (
'level' => 'c' 'level' => 'c'
), ),
// LSform // LSform
201 => array( 201 => array(
'msg' => _("LSform : Erreur durant la recupération des valeurs du formulaire."), 'msg' => _("LSform : Erreur durant la recupération des valeurs du formulaire."),
'level' => 'c' 'level' => 'c'
), ),
202 => array( 202 => array(
'msg' => _("LSform : Erreur durant la récupération de la valeur du formulaire du champ '%{element}'."), 'msg' => _("LSform : Erreur durant la récupération de la valeur du formulaire du champ '%{element}'."),
'level' => 'c' 'level' => 'c'
), ),
203 => array( 203 => array(
'msg' => _("LSform : Les données du champ %{element} ne sont pas valides."), 'msg' => _("LSform : Les données du champ %{element} ne sont pas valides."),
'level' => 'c' 'level' => 'c'
), ),
204 => array( 204 => array(
'msg' => _("LSform : Le champ %{element} n'existe pas."), 'msg' => _("LSform : Le champ %{element} n'existe pas."),
'level' => 'c' 'level' => 'c'
), ),
205 => array( 205 => array(
'msg' => _("LSfom : Type de champ inconnu (%{type})."), 'msg' => _("LSfom : Type de champ inconnu (%{type})."),
'level' => 'c' 'level' => 'c'
), ),
206 => array( 206 => array(
'msg' => _("LSform : Erreur durant la création de l'élement '%{element}'."), 'msg' => _("LSform : Erreur durant la création de l'élement '%{element}'."),
'level' => 'c' 'level' => 'c'
), ),
207 => array( 207 => array(
'msg' => _("LSform : Aucune valeur de rentrée pour le champs '%{element}'."), 'msg' => _("LSform : Aucune valeur de rentrée pour le champs '%{element}'."),
'level' => 'c' 'level' => 'c'
), ),
301 => array( 301 => array(
'msg' => _("LSformRule : Aucune regex n'a été fournis pour la validation des données."), 'msg' => _("LSformRule : Aucune regex n'a été fournis pour la validation des données."),
'level' => 'w' 'level' => 'w'
), ),
// functions // functions
901 => array ( 901 => array (
@ -194,46 +194,50 @@ $GLOBALS['LSerror_code'] = array (
'level' => 'c' 'level' => 'c'
), ),
// LSsession // LSsession
1001 => array ( 1001 => array (
'msg' => _("LSsession : La constante %{const} n'est pas définie."), 'msg' => _("LSsession : La constante %{const} n'est pas définie."),
'level' => 'c' 'level' => 'c'
), ),
1002 => array ( 1002 => array (
'msg' => _("LSsession : Le support %{addon} n'est pas assuré. Vérifier la compatibilité du système et la configuration de l'addon"), 'msg' => _("LSsession : Le support %{addon} n'est pas assuré. Vérifier la compatibilité du système et la configuration de l'addon"),
'level' => 'c' 'level' => 'c'
), ),
1003 => array ( 1003 => array (
'msg' => _("LSsession : Données de configuration du serveur LDAP invalide. Impossible d'établir une connexion."), 'msg' => _("LSsession : Données de configuration du serveur LDAP invalide. Impossible d'établir une connexion."),
'level' => 'c' 'level' => 'c'
), ),
1004 => array ( 1004 => array (
'msg' => _("LSsession : Impossible de charger l'objets de type %{type} : type inconnu."), 'msg' => _("LSsession : Impossible de charger l'objets de type %{type} : type inconnu."),
'level' => 'c' 'level' => 'c'
), ),
1005 => array ( 1005 => array (
'msg' => _("LSsession : Impossible d'effecture l'authentification : Type d'objet d'authentification inconnu (%{type})."), 'msg' => _("LSsession : Impossible d'effecture l'authentification : Type d'objet d'authentification inconnu (%{type})."),
'level' => 'c' 'level' => 'c'
), ),
1006 => array ( 1006 => array (
'msg' => _("LSsession : Identifiant ou mot de passe incorrect."), 'msg' => _("LSsession : Identifiant ou mot de passe incorrect."),
'level' => 'c' 'level' => 'c'
), ),
1007 => array ( 1007 => array (
'msg' => _("LSsession : Impossible de vous identifier : Duplication d'authentité."), 'msg' => _("LSsession : Impossible de vous identifier : Duplication d'authentité."),
'level' => 'c' 'level' => 'c'
), ),
1008 => array ( 1008 => array (
'msg' => _("LSsession : Impossible d'inclure le moteur de rendu Smarty."), 'msg' => _("LSsession : Impossible d'inclure le moteur de rendu Smarty."),
'level' => 'c' 'level' => 'c'
), ),
1009 => array ( 1009 => array (
'msg' => _("LSsession : Impossible de se connecter au Serveur LDAP."), 'msg' => _("LSsession : Impossible de se connecter au Serveur LDAP."),
'level' => 'c' 'level' => 'c'
), ),
1010 => array ( 1010 => array (
'msg' => _("LSsession : Impossible de charger la classe des objets d'authentification."), 'msg' => _("LSsession : Impossible de charger la classe des objets d'authentification."),
'level' => 'c' 'level' => 'c'
) ),
1011 => array (
'msg' => _("LSsession : Vous n'êtes pas authorisé à effectuer cette action."),
'level' => 'c'
)
); );
?> ?>

View file

@ -24,48 +24,59 @@
$GLOBALS['LSconfig'] = array( $GLOBALS['LSconfig'] = array(
'NetLDAP' => '/usr/share/php/Net/LDAP.php', 'NetLDAP' => '/usr/share/php/Net/LDAP.php',
'Smarty' => '/var/www/tmp/Smarty-2.6.18/libs/Smarty.class.php', 'Smarty' => '/var/www/tmp/Smarty-2.6.18/libs/Smarty.class.php',
'lang' => 'fr_FR.UTF8', 'lang' => 'fr_FR.UTF8',
'ldap_servers' => array ( 'cacheLSrights' => true,
array ( 'ldap_servers' => array (
'name' => 'Ldap 1', array (
'ldap_config'=> array( 'name' => 'Ldap 1',
'host' => '127.0.0.1', 'ldap_config'=> array(
'port' => 389, 'host' => '127.0.0.1',
'version' => 3, 'port' => 389,
'starttls' => false, 'version' => 3,
'binddn' => 'uid=toto,ou=people,o=ls', 'starttls' => false,
'bindpw' => 'toto', 'binddn' => 'uid=toto,ou=people,o=ls',
'basedn' => 'o=ls', 'bindpw' => 'toto',
'options' => array(), 'basedn' => 'o=ls',
'filter' => '(objectClass=*)', 'options' => array(),
'scope' => 'sub' 'filter' => '(objectClass=*)',
), 'scope' => 'sub'
'authobject' => 'LSeepeople', ),
'authobject_pwdattr' => 'userPassword' 'LSadmins' => array (
), 'o=ost' => array (
array ( 'uid=toto,ou=people,o=ls' => NULL,
'name' => 'Ldap 2', 'cn=adminldap,ou=groups,o=ost' => array (
'ldap_config'=> array( 'attr' => 'uniqueMember',
'host' => '127.0.0.1', 'LSobject' => 'LSeegroup'
'port' => 389, )
'version' => 3, )
'starttls' => false, ),
'binddn' => 'uid=toto,ou=people,o=com', 'cacheLSrights' => false,
'bindpw' => 'toto', 'authobject' => 'LSeepeople',
'basedn' => 'o=com', 'authobject_pwdattr' => 'userPassword'
'options' => array(), ),
'filter' => '(objectClass=*)', array (
'scope' => 'sub' 'name' => 'Ldap 2',
), 'ldap_config'=> array(
'subdnobject' => 'LSeecompany', 'host' => '127.0.0.1',
'authobject' => 'LSeepeople', 'port' => 389,
'authobject_pwdattr' => 'userPassword' '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 //Debug
$GLOBALS['LSdebug']['active'] = true; $GLOBALS['LSdebug']['active'] = false;
// Définitions des locales // Définitions des locales
$textdomain = 'ldapsaisie'; $textdomain = 'ldapsaisie';
@ -83,9 +94,9 @@ define('LS_JS_DIR', LS_INCLUDE_DIR .'js/');
// Javascript // Javascript
$GLOBALS['defaultJSscipts']=array( $GLOBALS['defaultJSscipts']=array(
'mootools.js', 'mootools.js',
'LSdefault.js', 'LSdefault.js',
'Debugger.js' 'Debugger.js'
); );
?> ?>

View file

@ -40,7 +40,7 @@ class LSattr_html {
* *
* @param[in] $name string Nom de l'attribut ldap * @param[in] $name string Nom de l'attribut ldap
* @param[in] $config array Configuration de l'objet * @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. * @retval boolean Retourne true.
*/ */
@ -51,36 +51,43 @@ class LSattr_html {
return true; return true;
} }
/** /**
* Retourne 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 * Retourne le label de l'attribut ou son nom si aucun label n'est défini
* dans la configuration. * dans la configuration.
* *
* @retval string Le label de l'attribut. * @retval string Le label de l'attribut.
*/ */
function getLabel() { function getLabel() {
if ( $this -> config['label'] != '' ) { if ( $this -> config['label'] != '' ) {
return $this -> config['label']; return $this -> config['label'];
} }
else { else {
return $this -> name; return $this -> name;
} }
} }
/** /**
* Ajoute l'attribut au formualaire passer en paramètre * Ajoute l'attribut au formualaire passer en paramètre
* *
* @param[in] &$form LSform Le formulaire * @param[in] &$form LSform Le formulaire
* @param[in] $idForm L'identifiant du formulaire * @param[in] $idForm L'identifiant du formulaire
* @param[in] $data Valeur du champs du formulaire * @param[in] $data Valeur du champs du formulaire
* *
* @retval LSformElement L'element du formulaire ajouté * @retval LSformElement L'element du formulaire ajouté
*/ */
function addToForm (&$form,$idForm,$data=NULL) { function addToForm (&$form,$idForm,$data=NULL) {
$GLOBALS['LSerror'] -> addErrorCode(101,$this -> name); $GLOBALS['LSerror'] -> addErrorCode(101,$this -> name);
} }
function __sleep() {
return ( array_keys( get_object_vars( &$this ) ) );
}
function __wakeup() {
return true;
}
} }
?> ?>

View file

@ -40,7 +40,7 @@ class LSattr_ldap {
* *
* @param[in] $name string Nom de l'attribut ldap * @param[in] $name string Nom de l'attribut ldap
* @param[in] $config array Configuration de l'objet * @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. * @retval boolean Retourne true.
*/ */
@ -50,29 +50,36 @@ class LSattr_ldap {
return true; return true;
} }
/** /**
* Retourne la valeur de l'attribut après traitement lié à son type ldap * Retourne la valeur de l'attribut après traitement lié à son type ldap
* *
* @param[in] $data mixed La valeur de l'attribut * @param[in] $data mixed La valeur de l'attribut
* *
* @retval mixed La valeur traitée de l'attribut * @retval mixed La valeur traitée de l'attribut
*/ */
function getUpdateData($data) { function getUpdateData($data) {
return $data; return $data;
} }
/** /**
* Retourne la valeur d'affichage de l'attribut après traitement lié à son type ldap * Retourne la valeur d'affichage de l'attribut après traitement lié à son type ldap
* *
* @param[in] $data mixed La valeur de l'attribut * @param[in] $data mixed La valeur de l'attribut
* *
* @retval mixed La valeur d'affichage de l'attribut * @retval mixed La valeur d'affichage de l'attribut
*/ */
function getDisplayValue($data) { function getDisplayValue($data) {
return $data; return $data;
} }
function __sleep() {
return ( array_keys( get_object_vars( &$this ) ) );
}
function __wakeup() {
return true;
}
} }
?> ?>

View file

@ -40,7 +40,8 @@ class LSattribute {
var $data; var $data;
var $updateData=false; var $updateData=false;
var $is_validate=false; var $is_validate=false;
var $_finalUpdateData=false; var $_finalUpdateData=false;
var $_myRights=NULL;
/** /**
* Constructeur * Constructeur
@ -56,15 +57,15 @@ class LSattribute {
* @param[in] &$ldapObject LSldapObject L'objet ldap parent * @param[in] &$ldapObject LSldapObject L'objet ldap parent
* *
* @retval boolean Retourne true si la création a réussi, false sinon. * @retval boolean Retourne true si la création a réussi, false sinon.
*/ */
function LSattribute ($name,$config,&$ldapObject) { function LSattribute ($name,$config,&$ldapObject) {
$this -> name = $name; $this -> name = $name;
$this -> config = $config; $this -> config = $config;
$this -> ldapObject = $ldapObject; $this -> ldapObject = $ldapObject;
$html_type = "LSattr_html_".$config['html_type']; $html_type = "LSattr_html_".$config['html_type'];
$ldap_type = "LSattr_ldap_".$config['ldap_type']; $ldap_type = "LSattr_ldap_".$config['ldap_type'];
$GLOBALS['LSsession'] -> loadLSclass($html_type); $GLOBALS['LSsession'] -> loadLSclass($html_type);
$GLOBALS['LSsession'] -> loadLSclass($ldap_type); $GLOBALS['LSsession'] -> loadLSclass($ldap_type);
if((class_exists($html_type))&&(class_exists($ldap_type))) { if((class_exists($html_type))&&(class_exists($ldap_type))) {
$this -> html = new $html_type($name,$config,$this); $this -> html = new $html_type($name,$config,$this);
$this -> ldap = new $ldap_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 * @retval string Le label de l'attribut
* *
* @see LSattr_html::getLabel() * @see LSattr_html::getLabel()
*/ */
function getLabel() { function getLabel() {
return $this -> html -> getLabel(); return $this -> html -> getLabel();
@ -119,21 +120,21 @@ class LSattribute {
/** /**
* Retourne la valeur de l'attribut * 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> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval mixed La valeur de l'attribut * @retval mixed La valeur de l'attribut
*/ */
function getValue() { function getValue() {
$updateData=$this -> getUpdateData(); $updateData=$this -> getUpdateData();
if (empty($updateData)) { if (empty($updateData)) {
return $this -> data; return $this -> data;
} }
else { else {
return $updateData; return $updateData;
} }
} }
/** /**
@ -188,6 +189,9 @@ class LSattribute {
*/ */
function addToForm(&$form,$idForm,&$obj=NULL) { function addToForm(&$form,$idForm,&$obj=NULL) {
if(isset($this -> config['form'][$idForm])) { if(isset($this -> config['form'][$idForm])) {
if($this -> myRights() == 'n') {
return true;
}
if($this -> data !='') { if($this -> data !='') {
$data=$this -> getFormVal(); $data=$this -> getFormVal();
} }
@ -196,36 +200,96 @@ class LSattribute {
} }
$element = $this -> html -> addToForm($form,$idForm,$data); $element = $this -> html -> addToForm($form,$idForm,$data);
if(!$element) { if(!$element) {
$GLOBALS['LSerror'] -> addErrorCode(206,$this -> name); $GLOBALS['LSerror'] -> addErrorCode(206,$this -> name);
} }
if($this -> config['required']==1) { if($this -> config['required']==1) {
$form -> setRequired($this -> name); $form -> setRequired($this -> name);
} }
if($this -> config['form'][$idForm]==0) { if (($this -> config['form'][$idForm]==0) || ($this -> myRights() == 'r')) {
$element -> freeze(); $element -> freeze();
} }
else {
if(isset($this -> config['check_data'])) { if(isset($this -> config['check_data'])) {
if(is_array($this -> config['check_data'])) { if(is_array($this -> config['check_data'])) {
foreach ($this -> config['check_data'] as $rule => $rule_infos) { foreach ($this -> config['check_data'] as $rule => $rule_infos) {
if((!$form -> isRuleRegistered($rule))&&($rule!='')) { if((!$form -> isRuleRegistered($rule))&&($rule!='')) {
$GLOBALS['LSerror'] -> addErrorCode(43,array('attr' => $this->name,'rule' => $rule)); $GLOBALS['LSerror'] -> addErrorCode(43,array('attr' => $this->name,'rule' => $rule));
return; 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']); else {
if(!isset($rule_infos['param'])) $GLOBALS['LSerror'] -> addErrorCode(44,$this->name);
$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 {
$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; return true;
} }
@ -256,9 +320,9 @@ class LSattribute {
* @retval string La valeur a afficher dans le formulaire. * @retval string La valeur a afficher dans le formulaire.
*/ */
function getFormVal() { function getFormVal() {
$data=$this -> getDisplayValue(); $data=$this -> getDisplayValue();
if(!is_array($data)) if(!is_array($data))
$data=array($data); $data=array($data);
return $data; return $data;
} }
@ -274,8 +338,7 @@ class LSattribute {
function setUpdateData($data) { function setUpdateData($data) {
if($this -> getFormVal() != $data) { if($this -> getFormVal() != $data) {
$this -> updateData=$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'])); return (function_exists($this -> config['generate_function']));
} }
/** /**
* Génere la valeur de l'attribut à partir de la fonction de génération * Génere la valeur de l'attribut à partir de la fonction de génération
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval boolean true si la valeur à put être générée, false sinon * @retval boolean true si la valeur à put être générée, false sinon
*/ */
function generateValue() { function generateValue() {
if ( ! $this -> canBeGenerated() ) { if ( ! $this -> canBeGenerated() ) {
return; return;
} }
$value=call_user_func($this -> config['generate_function'],$this -> ldapObject); $value=call_user_func($this -> config['generate_function'],$this -> ldapObject);
if (!empty($value)) { if (!empty($value)) {
//$this -> setValue($value); // pas nécéssaire ?? //$this -> setValue($value); // pas nécéssaire ??
$this -> updateData=$value; $this -> updateData=$value;
return true; return true;
} }
return; return;
} }
/** /**
* Retourne la valeur de l'attribut pour son enregistrement dans l'annuaire * 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> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval mixed La valeur de l'attribut pour son enregistrement dans l'annuaire * @retval mixed La valeur de l'attribut pour son enregistrement dans l'annuaire
*/ */
function getUpdateData() { function getUpdateData() {
if (!$this -> isUpdate()) { if (!$this -> isUpdate()) {
return; return;
} }
if ( $this -> _finalUpdateData ) { if ( $this -> _finalUpdateData ) {
return $this -> _finalUpdateData; return $this -> _finalUpdateData;
} }
$data=$this -> updateData; $data=$this -> updateData;
if ($this -> config['onSave']) { if ($this -> config['onSave']) {
if (is_array($this -> config['onSave'])) { if (is_array($this -> config['onSave'])) {
@ -395,7 +458,7 @@ class LSattribute {
else { else {
$result = $this -> ldap -> getUpdateData($data); $result = $this -> ldap -> getUpdateData($data);
} }
$this -> _finalUpdateData = $result; $this -> _finalUpdateData = $result;
return $result; return $result;
} }
@ -419,7 +482,15 @@ class LSattribute {
*/ */
function getDependsAttrs() { function getDependsAttrs() {
return $this -> config['dependAttrs']; return $this -> config['dependAttrs'];
} }
function __sleep() {
return ( array_keys( get_object_vars( &$this ) ) );
}
function __wakeup() {
return true;
}
} }
?> ?>

View file

@ -36,14 +36,14 @@ class LSform {
var $elements = array(); var $elements = array();
var $_rules = array(); var $_rules = array();
var $_postData = array(); var $_postData = array();
var $_elementsErrors = array(); var $_elementsErrors = array();
var $_isValidate = false; var $_isValidate = false;
var $_notUpdate = array(); var $_notUpdate = array();
/** /**
* Constructeur * Constructeur
* *
* Cette methode construit l'objet et définis la configuration. * 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 * @param[in] $submit string La valeur du bouton submit
* *
* @retval void * @retval void
*/ */
function LSform (&$ldapObject,$idForm,$submit="Envoyer"){ function LSform (&$ldapObject,$idForm,$submit="Envoyer"){
$this -> idForm = $idForm; $this -> idForm = $idForm;
$this -> submit = $submit; $this -> submit = $submit;
$this -> ldapObject = $ldapObject; $this -> ldapObject = $ldapObject;
$GLOBALS['LSsession'] -> loadLSclass('LSformElement'); $GLOBALS['LSsession'] -> loadLSclass('LSformElement');
} }
/** /**
@ -68,28 +68,63 @@ class LSform {
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval void * @retval void
*/ */
function display(){ function display(){
$GLOBALS['LSsession'] -> addJSscript('LSform.js'); if ($this -> idForm == 'view') {
$GLOBALS['LSsession'] -> addCssFile('LSform.css'); $GLOBALS['LSsession'] -> addJSscript('LSview.js');
$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"; else {
$GLOBALS['Smarty'] -> assign('LSform_header',$LSform_header); $GLOBALS['LSsession'] -> addJSscript('LSform.js');
$fields = array(); }
foreach($this -> elements as $element) { $GLOBALS['LSsession'] -> addCssFile('LSform.css');
$field = array(); $GLOBALS['Smarty'] -> assign('LSform_action',$_SERVER['PHP_SELF']);
$field = $element -> getDisplay(); $LSform_header = "\t<input type='hidden' name='validate' value='LSform'/>\n
if (isset($this -> _elementsErrors[$element -> name])) { \t<input type='hidden' name='idForm' id='LSform_idform' value='".$this -> idForm."'/>\n
$field['errors']= $this -> _elementsErrors[$element -> name]; \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')."'/>";
$fields[] = $field; $GLOBALS['Smarty'] -> assign('LSform_header',$LSform_header);
} $LSform_object = array(
$GLOBALS['Smarty'] -> assign('LSform_fields',$fields); 'type' => $this -> ldapObject -> getType(),
if($this -> can_validate) { 'dn' => $this -> ldapObject -> getDn()
$GLOBALS['Smarty'] -> assign('LSform_submittxt',$this -> submit); );
} $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 * Défini l'erreur sur un champ
* *
@ -101,7 +136,7 @@ class LSform {
* du champs concerné. * du champs concerné.
* *
* @retval void * @retval void
*/ */
function setElementError($attr,$msg=NULL) { function setElementError($attr,$msg=NULL) {
if($msg!='') { if($msg!='') {
$msg_error=getFData($msg,$attr->getLabel()); $msg_error=getFData($msg,$attr->getLabel());
@ -118,264 +153,265 @@ class LSform {
* @author Benjamin Renard <brenard@easter-eggs.com> * @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 * @retval boolean true si le formulaire a été validé et que les données ont été validées, false sinon
*/ */
function validate(){ function validate(){
if(!$this -> can_validate) if(!$this -> can_validate)
return; return;
if ($this -> isSubmit()) { if ($this -> isSubmit()) {
if (!$this -> getPostData()) { if (!$this -> getPostData()) {
$GLOBALS['LSerror'] -> addErrorCode(201); $GLOBALS['LSerror'] -> addErrorCode(201);
return; return;
} }
//Validation des données ici !!! /// //Validation des données ici !!! ///
if (!$this -> checkData()) { if (!$this -> checkData()) {
$this -> setValuesFromPostData(); $this -> setValuesFromPostData();
return; return;
} }
debug("les données sont checkées"); debug("les données sont checkées");
$this -> _isValidate = true; $this -> _isValidate = true;
return true; return true;
} }
return false; return false;
} }
/** /**
* Vérifier les données du formulaire à partir des régles définis sur les champs * Vérifier les données du formulaire à partir des régles définis sur les champs
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval boolean true si toutes la saisie est OK, false sinon * @retval boolean true si toutes la saisie est OK, false sinon
*/ */
function checkData() { function checkData() {
$retval=true; $retval=true;
foreach ($this -> _postData as $element => $values) { foreach ($this -> _postData as $element => $values) {
if(!is_array($values)) { if(!is_array($values)) {
$values=array($values); $values=array($values);
} }
if ($this -> elements[$element] -> isRequired()) { if ($this -> elements[$element] -> isRequired()) {
if (!$this -> checkRequired($values)) { if (!$this -> checkRequired($values)) {
$this -> setElementError($this -> elements[$element],_("Champ obligatoire")); $this -> setElementError($this -> elements[$element],_("Champ obligatoire"));
$retval=false; $retval=false;
} }
} }
foreach($values as $value) { foreach($values as $value) {
if (empty($value)) { if (empty($value)) {
continue; continue;
} }
if (!is_array($this -> _rules[$element])) if (!is_array($this -> _rules[$element]))
continue; continue;
$GLOBALS['LSsession'] -> loadLSclass('LSformRule'); $GLOBALS['LSsession'] -> loadLSclass('LSformRule');
foreach($this -> _rules[$element] as $rule) { foreach($this -> _rules[$element] as $rule) {
$ruleType="LSformRule_".$rule['name']; $ruleType="LSformRule_".$rule['name'];
$GLOBALS['LSsession'] -> loadLSclass($ruleType); $GLOBALS['LSsession'] -> loadLSclass($ruleType);
if (! call_user_func(array( $ruleType,'validate') , $value, $rule['options'])) { if (! call_user_func(array( $ruleType,'validate') , $value, $rule['options'])) {
$retval=false; $retval=false;
$this -> setElementError($this -> elements[$element],$rule['options']['msg']); $this -> setElementError($this -> elements[$element],$rule['options']['msg']);
} }
} }
} }
} }
return $retval; 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;
}
/** /**
* Verifie si la saisie du formulaire est présente en POST * Vérifie si au moins une valeur est présente dans le tableau
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval boolean true si la saisie du formulaire est présente en POST, false sinon * @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
*/
function isSubmit() { function isSubmit() {
if( (isset($_POST['validate']) && ($_POST['validate']=='LSform')) && (isset($_POST['idForm']) && ($_POST['idForm'] == $this -> idForm)) ) if( (isset($_POST['validate']) && ($_POST['validate']=='LSform')) && (isset($_POST['idForm']) && ($_POST['idForm'] == $this -> idForm)) )
return true; return true;
return; return;
} }
/** /**
* Récupère les valeurs postées dans le formulaire * Récupère les valeurs postées dans le formulaire
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval boolean true si les valeurs ont bien été récupérées, false sinon. * @retval boolean true si les valeurs ont bien été récupérées, false sinon.
*/ */
function getPostData() { function getPostData() {
foreach($this -> elements as $element_name => $element) { foreach($this -> elements as $element_name => $element) {
if( !($element -> getPostData($this -> _postData)) ) { if( !($element -> getPostData($this -> _postData)) ) {
$GLOBALS['LSerror'] -> addErrorCode(202,$element_name); $GLOBALS['LSerror'] -> addErrorCode(202,$element_name);
return; return;
} }
} }
return true; return true;
} }
/* /*
* Ajoute un élément au formulaire * Ajoute un élément au formulaire
* *
* Ajoute un élément au formulaire et définis les informations le concernant. * 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] $type string Le type de l'élément
* @param[in] $name string Le nom 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] $label string Le label de l'élément
* @param[in] $param mixed Paramètres supplémentaires * @param[in] $param mixed Paramètres supplémentaires
* *
* @retval LSformElement * @retval LSformElement
*/ */
function addElement($type,$name,$label,$params=array()) { function addElement($type,$name,$label,$params=array()) {
$elementType='LSformElement_'.$type; $elementType='LSformElement_'.$type;
$GLOBALS['LSsession'] -> loadLSclass($elementType); $GLOBALS['LSsession'] -> loadLSclass($elementType);
if (!class_exists($elementType)) { if (!class_exists($elementType)) {
$GLOBALS['LSerror'] -> addErrorCode(205,array('type' => $type)); $GLOBALS['LSerror'] -> addErrorCode(205,array('type' => $type));
return; return;
} }
$element=$this -> elements[$name] = new $elementType($this,$name,$label,$params); $element=$this -> elements[$name] = new $elementType($this,$name,$label,$params);
if ($element) { if ($element) {
return $element; return $element;
} }
else { else {
unset ($this -> elements[$name]); unset ($this -> elements[$name]);
$GLOBALS['LSerror'] -> addErrorCode(206,array('element' => $name)); $GLOBALS['LSerror'] -> addErrorCode(206,array('element' => $name));
return; return;
} }
} }
/* /*
* Ajoute une règle sur un élément du formulaire * Ajoute une règle sur un élément du formulaire
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @param[in] $element string Le nom de l'élément conserné * @param[in] $element string Le nom de l'élément conserné
* @param[in] $rule string Le nom de la règle à ajouter * @param[in] $rule string Le nom de la règle à ajouter
* @param[in] $options array Options (facultative) * @param[in] $options array Options (facultative)
* *
* @retval boolean * @retval boolean
*/ */
function addRule($element, $rule, $options=array()) { function addRule($element, $rule, $options=array()) {
if ( isset($this ->elements[$element]) ) { if ( isset($this ->elements[$element]) ) {
if ($this -> isRuleRegistered($rule)) { if ($this -> isRuleRegistered($rule)) {
$this -> _rules[$element][]=array( $this -> _rules[$element][]=array(
'name' => $rule, 'name' => $rule,
'options' => $options 'options' => $options
); );
return true; return true;
} }
else { else {
$GLOBALS['LSerror'] -> addErrorCode(43,array('attr' => $element,'rule'=>$rule)); $GLOBALS['LSerror'] -> addErrorCode(43,array('attr' => $element,'rule'=>$rule));
return; return;
} }
} }
else { else {
$GLOBALS['LSerror'] -> addErrorCode(204,array('element' => $element)); $GLOBALS['LSerror'] -> addErrorCode(204,array('element' => $element));
return; return;
} }
} }
/* /*
* Définis comme requis un élément * Définis comme requis un élément
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @param[in] $element string Le nom de l'élément conserné * @param[in] $element string Le nom de l'élément conserné
* *
* @retval boolean * @retval boolean
*/ */
function setRequired($element) { function setRequired($element) {
if (isset( $this -> elements[$element] ) ) if (isset( $this -> elements[$element] ) )
return $this -> elements[$element] -> setRequired(); return $this -> elements[$element] -> setRequired();
else else
return; return;
} }
/* /*
* Détermine la valider de la règle * Détermine la valider de la règle
* *
* Devra déterminer si la règle passez en paramètre est correcte * Devra déterminer si la règle passez en paramètre est correcte
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @param[in] $element string Le nom de l'élément conserné * @param[in] $element string Le nom de l'élément conserné
*/ */
function isRuleRegistered($rule) { function isRuleRegistered($rule) {
$GLOBALS['LSsession'] -> loadLSclass('LSformRule'); $GLOBALS['LSsession'] -> loadLSclass('LSformRule');
$GLOBALS['LSsession'] -> loadLSclass('LSformRule_'.$rule); $GLOBALS['LSsession'] -> loadLSclass('LSformRule_'.$rule);
return class_exists('LSformRule_'.$rule); return class_exists('LSformRule_'.$rule);
} }
/** /**
* Retourne les valeurs validés du formulaire * Retourne les valeurs validés du formulaire
* *
* @retval mixed Les valeurs validés du formulaire, ou false si elles ne le sont pas * @retval mixed Les valeurs validés du formulaire, ou false si elles ne le sont pas
*/ */
function exportValues() { function exportValues() {
if ($this -> _isValidate) { if ($this -> _isValidate) {
return $this -> _postData; return $this -> _postData;
} }
else { else {
return; return;
} }
} }
/** /**
* Retourn un élement du formulaire * Retourn un élement du formulaire
* *
* @param[in] string $element Nom de l'élement voulu * @param[in] string $element Nom de l'élement voulu
* *
* @retval LSformElement L'élement du formulaire voulu * @retval LSformElement L'élement du formulaire voulu
*/ */
function getElement($element) { function getElement($element) {
return $this -> elements[$element]; return $this -> elements[$element];
} }
/** /**
* Défini les valeurs des élements à partir des valeurs postées * Défini les valeurs des élements à partir des valeurs postées
* *
* @retval boolean True si les valeurs ont été définies, false sinon. * @retval boolean True si les valeurs ont été définies, false sinon.
*/ */
function setValuesFromPostData() { function setValuesFromPostData() {
if (empty($this -> _postData)) { if (empty($this -> _postData)) {
return; return;
} }
foreach($this -> _postData as $element => $values) { foreach($this -> _postData as $element => $values) {
$this -> elements[$element] -> setValue($values); $this -> elements[$element] -> setValue($values);
} }
return true; return true;
} }
/** /**
* Retourne le code HTML d'un champ vide. * Retourne le code HTML d'un champ vide.
* *
* @param[in] string Le nom du champ du formulaire * @param[in] string Le nom du champ du formulaire
* *
* @retval string Le code HTML du champ vide. * @retval string Le code HTML du champ vide.
*/ */
function getEmptyField($element) { function getEmptyField($element) {
$element = $this -> getElement($element); $element = $this -> getElement($element);
if ($element) { if ($element) {
return $element -> getEmptyField(); return $element -> getEmptyField();
} }
else else {
return; return;
} }
}
} }

View file

@ -40,42 +40,37 @@ class LSformElement_select extends LSformElement {
* @retval array * @retval array
*/ */
function getDisplay(){ function getDisplay(){
$return = $this -> getLabelInfos(); $return = $this -> getLabelInfos();
// value // value
if (!$this -> isFreeze()) { if (!$this -> isFreeze()) {
if ($this -> params['multiple']==0) { if ($this -> params['multiple']==0) {
$multiple_tag=''; $multiple_tag='';
} }
else { else {
$multiple_tag='multiple'; $multiple_tag='multiple';
} }
$return['html'] = "<select name='".$this -> name."' $multiple_tag class='LSform'>\n"; $return['html'] = "<select name='".$this -> name."' $multiple_tag class='LSform'>\n";
foreach ($this -> params['text_possible_values'] as $choice_value => $choice_text) { foreach ($this -> params['text_possible_values'] as $choice_value => $choice_text) {
if (in_array($choice_value, $this -> values)) { if (in_array($choice_value, $this -> values)) {
$selected=' selected'; $selected=' selected';
} }
else { else {
$selected=''; $selected='';
} }
$return['html'].="<option value=\"".$choice_value."\"$selected>$choice_text</option>\n"; $return['html'].="<option value=\"".$choice_value."\"$selected>$choice_text</option>\n";
} }
$return['html'].="</select>\n"; $return['html'].="</select>\n";
} }
else { else {
$return['html']="<ul class='LSform'>\n"; $return['html']="<ul class='LSform'>\n";
foreach ($params['possible_values'] as $choice_value => $choice_text) { foreach ($this -> values as $value) {
if (in_array($choice_value, $this -> value)) { $return['html'].="<li class='LSform'>".$this -> params['text_possible_values'][$value]."</strong></li>";
$return['html'].="<li class='LSform'><strong>$choice_text</strong></li>"; }
} $return['html'].="</ul>\n";
else { }
$return['html'].="<li class='LSform'>$choice_text</li>"; return $return;
} }
}
$return['html'].="</ul>\n";
}
return $return;
}
} }

View file

@ -40,46 +40,46 @@ class LSformElement_text extends LSformElement {
* @retval array * @retval array
*/ */
function getDisplay(){ function getDisplay(){
$return = $this -> getLabelInfos(); $return = $this -> getLabelInfos();
// value // value
if (!$this -> isFreeze()) { if (!$this -> isFreeze()) {
$return['html'] = "<ul class='LSform'>\n"; $return['html'] = "<ul class='LSform'>\n";
if (empty($this -> values)) { if (empty($this -> values)) {
$return['html'] .= "<li>".$this -> getEmptyField()."</li>\n"; $return['html'] .= "<li>".$this -> getEmptyField()."</li>\n";
} }
else { else {
$multiple = $this -> getMultipleData(); foreach ($this -> values as $value) {
foreach ($this -> values as $value) { $multiple = $this -> getMultipleData();
$id = "LSform_".$this -> name."_".rand(); $id = "LSform_".$this -> name."_".rand();
$return['html'] .= "<li><input type='text' name='".$this -> name."[]' value=\"".$value."\" id='".$id."'>".$multiple."</li>\n"; $return['html'] .= "<li><input type='text' name='".$this -> name."[]' value=\"".$value."\" id='".$id."'>".$multiple."</li>\n";
} }
} }
$return['html'] .= "</ul>\n"; $return['html'] .= "</ul>\n";
} }
else { else {
$return['html'] = "<ul class='LSform'>\n"; $return['html'] = "<ul class='LSform'>\n";
if (empty($this -> values)) { if (empty($this -> values)) {
$return['html'] .= "<li>"._('Aucunes valeur definie')."</li>\n"; $return['html'] .= "<li>"._('Aucunes valeur definie')."</li>\n";
} }
else { else {
foreach ($this -> values as $value) { foreach ($this -> values as $value) {
$return['html'] .= "<li>".$value."</li>\n"; $return['html'] .= "<li>".$value."</li>\n";
} }
} }
$return['html'] .= "</ul>\n"; $return['html'] .= "</ul>\n";
} }
return $return; return $return;
} }
/* /*
* Retourne le code HTML d'un champ vide * Retourne le code HTML d'un champ vide
* *
* @retval string Code HTML d'un champ vide. * @retval string Code HTML d'un champ vide.
*/ */
function getEmptyField() { function getEmptyField() {
$multiple = $this -> getMultipleData(); $multiple = $this -> getMultipleData();
return "<input type='text' name='".$this -> name."[]' id='LSform_".$this -> name."_".rand()."'>".$multiple; return "<input type='text' name='".$this -> name."[]' id='LSform_".$this -> name."_".rand()."'>".$multiple;
} }
} }
?> ?>

View file

@ -40,45 +40,43 @@ class LSformElement_textarea extends LSformElement {
* @retval array * @retval array
*/ */
function getDisplay(){ function getDisplay(){
$return = $this -> getLabelInfos(); $return = $this -> getLabelInfos();
// value // value
if (!$this -> isFreeze()) { $return['html'] = "<ul class='LSform'>\n";
$return['html'] = "<ul class='LSform'>\n"; if (!$this -> isFreeze()) {
if (empty($this -> values)) { if (empty($this -> values)) {
$return['html'] = "<li>".$this -> getEmptyField()."</li>\n"; $return['html'] .= "<li class='LSform'>".$this -> getEmptyField()."</li>\n";
} }
else { else {
$multiple = $this -> getMultipleData(); foreach($this -> values as $value) {
foreach($this -> values as $value) { $multiple = $this -> getMultipleData();
$id = "LSform_".$this -> name."_".rand(); $id = "LSform_".$this -> name."_".rand();
$return['html'].="<li><textarea name='".$this -> name."[]' id='".$id."'>".$value."</textarea>\n".$multiple."</li>"; $return['html'].="<li class='LSform'><textarea name='".$this -> name."[]' id='".$id."' class='LSform'>".$value."</textarea>\n".$multiple."</li>";
} }
} }
$return['html'] .= "</ul>\n"; }
} else {
else { if (empty($this -> values)) {
$return['html'] = "<ul class='LSform'>\n"; $return['html'].="<li class='LSform'>"._('Aucunes valeur definie')."</li>\n";
if (empty($this -> values)) { }
$return['html'].="<li>"._('Aucunes valeur definie')."</li>\n"; else {
} foreach ($this -> values as $value) {
else { $return['html'].="<li class='LSform'>".$value."</li>\n";
foreach ($this -> values as $value) { }
$return['html'].="<li>".$value."</li>\n"; }
} }
} $return['html'] .= "</ul>\n";
$return['html'] .= "</ul>\n"; return $return;
}
return $return;
} }
/* /*
* Retourne le code HTML d'un champ vide * Retourne le code HTML d'un champ vide
* *
* @retval string Code HTML d'un champ vide. * @retval string Code HTML d'un champ vide.
*/ */
function getEmptyField() { function getEmptyField() {
$multiple = $this -> getMultipleData(); $multiple = $this -> getMultipleData();
return "<textarea name='".$this -> name."[]' id='LSform".$this -> name."_".rand()."'></textarea>\n".$multiple; return "<textarea name='".$this -> name."[]' id='LSform".$this -> name."_".rand()."' class='LSform'></textarea>\n".$multiple;
} }
} }

View file

@ -30,14 +30,16 @@ $GLOBALS['LSsession'] -> loadLSclass('LSattribute');
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
*/ */
class LSldapObject { class LSldapObject {
var $config; var $config;
var $type_name; var $type_name;
var $attrs; var $attrs;
var $forms; var $forms;
var $view;
var $dn=false; var $dn=false;
var $other_values=array(); var $other_values=array();
var $submitError=true; var $submitError=true;
var $_whoami=NULL;
/** /**
* Constructeur * Constructeur
@ -51,27 +53,27 @@ class LSldapObject {
* @param[in] $config array La configuration de l'objet * @param[in] $config array La configuration de l'objet
* *
* @retval boolean true si l'objet a été construit, false sinon. * @retval boolean true si l'objet a été construit, false sinon.
*/ */
function LSldapObject($type_name,$config='auto') { function LSldapObject($type_name,$config='auto') {
$this -> type_name = $type_name; $this -> type_name = $type_name;
$this -> config = $config; $this -> config = $config;
if($config=='auto') { if($config=='auto') {
if(isset($GLOBALS['LSobjects'][$type_name])) { if(isset($GLOBALS['LSobjects'][$type_name])) {
$this -> config = $GLOBALS['LSobjects'][$type_name]; $this -> config = $GLOBALS['LSobjects'][$type_name];
} }
else { else {
$GLOBALS['LSerror'] -> addErrorCode(21); $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)) {
return; return;
} }
} }
foreach($this -> config['attrs'] as $attr_name => $attr_config) {
if(!$this -> attrs[$attr_name]=new LSattribute($attr_name,$attr_config,$this)) {
return;
}
}
return true; return true;
} }
/** /**
* Charge les données de l'objet * Charge les données de l'objet
* *
@ -83,15 +85,15 @@ class LSldapObject {
* @param[in] $dn string Le DN de l'objet. * @param[in] $dn string Le DN de l'objet.
* *
* @retval boolean true si la chargement a réussi, false sinon. * @retval boolean true si la chargement a réussi, false sinon.
*/ */
function loadData($dn) { function loadData($dn) {
$this -> dn = $dn; $this -> dn = $dn;
$data = $GLOBALS['LSldap'] -> getAttrs($dn); $data = $GLOBALS['LSldap'] -> getAttrs($dn);
foreach($this -> attrs as $attr_name => $attr) { foreach($this -> attrs as $attr_name => $attr) {
if(!$this -> attrs[$attr_name] -> loadData($data[$attr_name])) if(!$this -> attrs[$attr_name] -> loadData($data[$attr_name]))
return; return;
} }
return true; return true;
} }
/** /**
@ -100,7 +102,7 @@ class LSldapObject {
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval boolean true si la rechargement a réussi, false sinon. * @retval boolean true si la rechargement a réussi, false sinon.
*/ */
function reloadData() { function reloadData() {
$data = $GLOBALS['LSldap'] -> getAttrs($this -> dn); $data = $GLOBALS['LSldap'] -> getAttrs($this -> dn);
foreach($this -> attrs as $attr_name => $attr) { foreach($this -> attrs as $attr_name => $attr) {
@ -116,10 +118,10 @@ class LSldapObject {
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval string Format d'affichage de l'objet. * @retval string Format d'affichage de l'objet.
*/ */
function getDisplayAttributes() { function getDisplayAttributes() {
return $this -> config['select_display_attrs']; return $this -> config['select_display_attrs'];
} }
/** /**
* Retourne la valeur descriptive d'affichage de l'objet * 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 * @param[in] $spe [<i>optionnel</i>] string Format d'affichage de l'objet
* *
* @retval string Valeur descriptive d'affichage de l'objet * @retval string Valeur descriptive d'affichage de l'objet
*/ */
function getDisplayValue($spe='') { function getDisplayValue($spe='') {
if ($spe=='') { if ($spe=='') {
$spe = $this -> getDisplayAttributes(); $spe = $this -> getDisplayAttributes();
@ -151,7 +153,7 @@ class LSldapObject {
* @param[in] $format string Format de la chaine * @param[in] $format string Format de la chaine
* *
* @retval string Valeur d'une chaine formatée * @retval string Valeur d'une chaine formatée
*/ */
function getFData($format) { function getFData($format) {
$format=getFData($format,$this,'getValue'); $format=getFData($format,$this,'getValue');
return $format; return $format;
@ -169,9 +171,9 @@ class LSldapObject {
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval LSform Le formulaire crée * @retval LSform Le formulaire crée
*/ */
function getForm($idForm,$config=array()) { function getForm($idForm,$config=array()) {
$GLOBALS['LSsession'] -> loadLSclass('LSform'); $GLOBALS['LSsession'] -> loadLSclass('LSform');
$LSform = new LSform($this,$idForm); $LSform = new LSform($this,$idForm);
$this -> forms[$idForm] = array($LSform,$config); $this -> forms[$idForm] = array($LSform,$config);
foreach($this -> attrs as $attr_name => $attr) { foreach($this -> attrs as $attr_name => $attr) {
@ -182,6 +184,29 @@ class LSldapObject {
return $LSform; return $LSform;
} }
/**
* 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 * Rafraichis le formulaire de l'objet
* *
@ -192,7 +217,7 @@ class LSldapObject {
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval boolean true sile formulaire a été rafraichis, false sinon * @retval boolean true sile formulaire a été rafraichis, false sinon
*/ */
function refreshForm($idForm) { function refreshForm($idForm) {
$LSform = $this -> forms[$idForm][0]; $LSform = $this -> forms[$idForm][0];
foreach($this -> attrs as $attr_name => $attr) { foreach($this -> attrs as $attr_name => $attr) {
@ -216,7 +241,7 @@ class LSldapObject {
* *
* @see validateAttrsData() * @see validateAttrsData()
* @see submitChange() * @see submitChange()
*/ */
function updateData($idForm=NULL) { function updateData($idForm=NULL) {
if($idForm!=NULL) { if($idForm!=NULL) {
if(isset($this -> forms[$idForm])) if(isset($this -> forms[$idForm]))
@ -246,7 +271,7 @@ class LSldapObject {
} }
} }
if($this -> validateAttrsData($idForm)) { 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(isset($this -> config['before_save'])) {
if(function_exists($this -> config['before_save'])) { if(function_exists($this -> config['before_save'])) {
if(!$this -> config['before_save']($this)) { if(!$this -> config['before_save']($this)) {
@ -260,7 +285,7 @@ class LSldapObject {
} }
} }
if ($this -> submitChange($idForm)) { if ($this -> submitChange($idForm)) {
debug('Les modifications sont submitées'); debug('Les modifications sont submitées');
$this -> submitError = false; $this -> submitError = false;
$this -> reloadData(); $this -> reloadData();
$this -> refreshForm($idForm); $this -> refreshForm($idForm);
@ -286,37 +311,37 @@ class LSldapObject {
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval boolean true si les données sont valides, false sinon * @retval boolean true si les données sont valides, false sinon
*/ */
function validateAttrsData($idForm) { function validateAttrsData($idForm) {
$LSform=$this -> forms[$idForm][0]; $LSform=$this -> forms[$idForm][0];
foreach($this -> attrs as $attr) { foreach($this -> attrs as $attr) {
if (!$attr -> isValidate()) { if (!$attr -> isValidate()) {
if($attr -> isUpdate()) { if($attr -> isUpdate()) {
if (!$this -> validateAttrData($LSform, $attr)) { if (!$this -> validateAttrData($LSform, $attr)) {
return; return;
} }
} }
else if( ($attr -> getValue() == '') && ($attr -> isRequired()) ) { else if( ($attr -> getValue() == '') && ($attr -> isRequired()) ) {
if ( $attr -> canBeGenerated()) { if ( $attr -> canBeGenerated()) {
if ($attr -> generateValue()) { if ($attr -> generateValue()) {
if (!$this -> validateAttrData($LSform, $attr)) { if (!$this -> validateAttrData($LSform, $attr)) {
$GLOBALS['LSerror'] -> addErrorCode(48,$attr -> getLabel()); $GLOBALS['LSerror'] -> addErrorCode(48,$attr -> getLabel());
return; return;
} }
} }
else { else {
$GLOBALS['LSerror'] -> addErrorCode(47,$attr -> getLabel()); $GLOBALS['LSerror'] -> addErrorCode(47,$attr -> getLabel());
return; return;
} }
} }
else { else {
$GLOBALS['LSerror'] -> addErrorCode(46,$attr -> getLabel()); $GLOBALS['LSerror'] -> addErrorCode(46,$attr -> getLabel());
return; return;
} }
} }
} }
} }
return true; return true;
} }
@ -330,109 +355,109 @@ class LSldapObject {
* *
* @retval boolean true si les données sont valides, false sinon * @retval boolean true si les données sont valides, false sinon
*/ */
function validateAttrData(&$LSform,&$attr) { function validateAttrData(&$LSform,&$attr) {
$vconfig=$attr -> getValidateConfig(); $vconfig=$attr -> getValidateConfig();
$data=$attr -> getUpdateData(); $data=$attr -> getUpdateData();
if(!is_array($data)) { if(!is_array($data)) {
$data=array($data); $data=array($data);
} }
// Validation des valeurs de l'attribut // Validation des valeurs de l'attribut
if(is_array($vconfig)) { if(is_array($vconfig)) {
foreach($vconfig as $test) { foreach($vconfig as $test) {
// Définition du basedn par défaut // Définition du basedn par défaut
if (!isset($test['basedn'])) { if (!isset($test['basedn'])) {
$test['basedn']=$GLOBALS['LSsession']->topDn; $test['basedn']=$GLOBALS['LSsession']->topDn;
} }
// Définition du message d'erreur // Définition du message d'erreur
if (!empty($test['msg'])) { if (!empty($test['msg'])) {
$msg_error=getFData($test['msg'],$this,'getValue'); $msg_error=getFData($test['msg'],$this,'getValue');
} }
else { else {
$msg_error=getFData(_("L'attribut %{attr} n'est pas valide."),$attr -> getLabel()); $msg_error=getFData(_("L'attribut %{attr} n'est pas valide."),$attr -> getLabel());
} }
foreach($data as $val) { foreach($data as $val) {
// validation par check LDAP // validation par check LDAP
if((isset($test['filter'])||isset($test['basedn']))&&(isset($test['result']))) { if((isset($test['filter'])||isset($test['basedn']))&&(isset($test['result']))) {
$sparams=(isset($test['scope']))?array('scope' => $test['scope']):array(); $sparams=(isset($test['scope']))?array('scope' => $test['scope']):array();
$this -> other_values['val']=$val; $this -> other_values['val']=$val;
$sfilter_user=(isset($test['basedn']))?getFData($test['filter'],$this,'getValue'):NULL; $sfilter_user=(isset($test['basedn']))?getFData($test['filter'],$this,'getValue'):NULL;
if(isset($test['object_type'])) { if(isset($test['object_type'])) {
$test_obj = new $test['object_type'](); $test_obj = new $test['object_type']();
$sfilter=$test_obj->getObjectFilter(); $sfilter=$test_obj->getObjectFilter();
$sfilter='(&'.$sfilter; $sfilter='(&'.$sfilter;
if($sfilter_user[0]=='(') { if($sfilter_user[0]=='(') {
$sfilter=$sfilter.$sfilter_user.')'; $sfilter=$sfilter.$sfilter_user.')';
} }
else { else {
$sfilter=$sfilter.'('.$sfilter_user.'))'; $sfilter=$sfilter.'('.$sfilter_user.'))';
} }
} }
else { else {
$sfilter=$sfilter_user; $sfilter=$sfilter_user;
} }
$sbasedn=(isset($test['basedn']))?getFData($test['basedn'],$this,'getValue'):NULL; $sbasedn=(isset($test['basedn']))?getFData($test['basedn'],$this,'getValue'):NULL;
$ret=$GLOBALS['LSldap'] -> getNumberResult ($sfilter,$sbasedn,$sparams); $ret=$GLOBALS['LSldap'] -> getNumberResult ($sfilter,$sbasedn,$sparams);
if($test['result']==0) { if($test['result']==0) {
if($ret!=0) { if($ret!=0) {
$LSform -> setElementError($attr,$msg_error); $LSform -> setElementError($attr,$msg_error);
return; return;
} }
} }
else { else {
if($ret<=0) { if($ret<=0) {
$LSform -> setElementError($attr,$msg_error); $LSform -> setElementError($attr,$msg_error);
return; return;
} }
} }
} }
// Validation par fonction externe // Validation par fonction externe
else if(isset($test['function'])) { else if(isset($test['function'])) {
if (function_exists($test['function'])) { if (function_exists($test['function'])) {
if(!$test['function']($this)) { if(!$test['function']($this)) {
$LSform -> setElementError($attr,$msg_error); $LSform -> setElementError($attr,$msg_error);
return; return;
} }
} }
else { else {
$GLOBALS['LSerror'] -> addErrorCode(24,array('attr' => $attr->name,'obj' => $this->type_name,'func' => $test['function'])); $GLOBALS['LSerror'] -> addErrorCode(24,array('attr' => $attr->name,'obj' => $this->type_name,'func' => $test['function']));
return; return;
} }
} }
else { else {
$GLOBALS['LSerror'] -> addErrorCode(25,array('attr' => $attr->name,'obj' => $this->type_name)); $GLOBALS['LSerror'] -> addErrorCode(25,array('attr' => $attr->name,'obj' => $this->type_name));
return; return;
} }
} }
} }
} }
// Génération des valeurs des attributs dépendants // Génération des valeurs des attributs dépendants
$dependsAttrs=$attr->getDependsAttrs(); $dependsAttrs=$attr->getDependsAttrs();
if (!empty($dependsAttrs)) { if (!empty($dependsAttrs)) {
foreach($dependsAttrs as $dependAttr) { foreach($dependsAttrs as $dependAttr) {
if(!isset($this -> attrs[$dependAttr])){ if(!isset($this -> attrs[$dependAttr])){
$GLOBALS['LSerror'] -> addErrorCode(34,array('attr_depend' => $dependAttr, 'attr' => $attr -> getLabel())); $GLOBALS['LSerror'] -> addErrorCode(34,array('attr_depend' => $dependAttr, 'attr' => $attr -> getLabel()));
continue; continue;
} }
if($this -> attrs[$dependAttr] -> canBeGenerated()) { if($this -> attrs[$dependAttr] -> canBeGenerated()) {
if (!$this -> attrs[$dependAttr] -> generateValue()) { if (!$this -> attrs[$dependAttr] -> generateValue()) {
$GLOBALS['LSerror'] -> addErrorCode(47,$this -> attrs[$dependAttr] -> getLabel()); $GLOBALS['LSerror'] -> addErrorCode(47,$this -> attrs[$dependAttr] -> getLabel());
return; return;
} }
} }
else { else {
$GLOBALS['LSerror'] -> addErrorCode(46,$this -> attrs[$dependAttr] -> getLabel()); $GLOBALS['LSerror'] -> addErrorCode(46,$this -> attrs[$dependAttr] -> getLabel());
return; return;
} }
} }
} }
$attr -> validate(); $attr -> validate();
unset($this -> other_values['val']); unset($this -> other_values['val']);
return true; return true;
} }
/** /**
* Met à jour les données modifiés dans l'annuaire * Met à jour les données modifiés dans l'annuaire
@ -442,7 +467,7 @@ class LSldapObject {
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval boolean true si la mise à jour a réussi, false sinon * @retval boolean true si la mise à jour a réussi, false sinon
*/ */
function submitChange($idForm) { function submitChange($idForm) {
$submitData=array(); $submitData=array();
foreach($this -> attrs as $attr) { foreach($this -> attrs as $attr) {
@ -453,12 +478,12 @@ class LSldapObject {
if(!empty($submitData)) { if(!empty($submitData)) {
$dn=$this -> getDn(); $dn=$this -> getDn();
if($dn) { if($dn) {
debug($submitData); debug($submitData);
return $GLOBALS['LSldap'] -> update($this -> type_name,$dn, $submitData); return $GLOBALS['LSldap'] -> update($this -> type_name,$dn, $submitData);
} }
else { else {
$GLOBALS['LSerror'] -> addErrorCode(33); $GLOBALS['LSerror'] -> addErrorCode(33);
return; return;
} }
} }
} }
@ -473,7 +498,7 @@ class LSldapObject {
* @retval array Tableau : * @retval array Tableau :
* - [0] : le premier paramètre * - [0] : le premier paramètre
* - [1] : les paramètres suivants * - [1] : les paramètres suivants
*/ */
function getDnInfos($dn) { function getDnInfos($dn) {
$infos=ldap_explode_dn($dn,0); $infos=ldap_explode_dn($dn,0);
if(!$infos) if(!$infos)
@ -489,95 +514,13 @@ class LSldapObject {
return array($infos[0],$basedn); return array($infos[0],$basedn);
} }
/**
* 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 * Retourne le filtre correpondants aux objetcClass de l'objet
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval string le filtre ldap correspondant au type de l'objet * @retval string le filtre ldap correspondant au type de l'objet
*/ */
function getObjectFilter() { function getObjectFilter() {
if(!isset($this -> config['objectclass'])) return; if(!isset($this -> config['objectclass'])) return;
foreach ($this -> config['objectclass'] as $class) 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() * @param[in] $params array Paramètres de recherche au format Net_LDAP::search()
* *
* @retval array Tableau d'objet correspondant au resultat de la recherche * @retval array Tableau d'objet correspondant au resultat de la recherche
*/ */
function listObjects($filter='',$basedn=NULL,$params=array()) { function listObjects($filter='',$basedn=NULL,$params=array()) {
$retInfos=array(); $retInfos=array();
$attrs=false; $attrs=false;
@ -787,10 +730,10 @@ class LSldapObject {
return $retInfos; return $retInfos;
} }
function searchObject($name,$basedn=NULL) { function searchObject($name,$basedn=NULL) {
$filter = $this -> config['rdn'].'='.$name; $filter = $this -> config['rdn'].'='.$name;
return $this -> listObjects($filter,$basedn); return $this -> listObjects($filter,$basedn);
} }
/** /**
* Retourne une valeur de l'objet * Retourne une valeur de l'objet
@ -808,14 +751,14 @@ class LSldapObject {
* @param[in] $val string Le nom de la valeur demandée * @param[in] $val string Le nom de la valeur demandée
* *
* @retval mixed la valeur demandé ou ' ' si celle-ci est inconnue. * @retval mixed la valeur demandé ou ' ' si celle-ci est inconnue.
*/ */
function getValue($val) { function getValue($val) {
if(($val=='dn')||($val=='%{dn}')) { if(($val=='dn')||($val=='%{dn}')) {
return $this -> dn; return $this -> dn;
} }
else if(($val=='rdn')||($val=='%{rdn}')) { else if(($val=='rdn')||($val=='%{rdn}')) {
return $this -> attrs[ $this -> config['rdn'] ] -> getValue(); return $this -> attrs[ $this -> config['rdn'] ] -> getValue();
} }
else if(isset($this -> attrs[$val])){ else if(isset($this -> attrs[$val])){
if (method_exists($this -> attrs[$val],'getValue')) if (method_exists($this -> attrs[$val],'getValue'))
return $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 * Retourn une liste d'option pour un select d'un objet du même type
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval string HTML code * @retval string HTML code
*/ */
function getSelectOptions() { function getSelectOptions() {
$list = $this -> listObjects(); $list = $this -> listObjects();
$display=''; $display='';
foreach($list as $object) { foreach($list as $object) {
$display.="<option value=\"".$object -> getDn()."\">".$object -> getDisplayValue()."</option>\n"; $display.="<option value=\"".$object -> getDn()."\">".$object -> getDisplayValue()."</option>\n";
} }
return $display; return $display;
} }
/** /**
* Retourn un tableau pour un select d'un objet du même type * Retourn un tableau pour un select d'un objet du même type
* *
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval array['dn','display'] * @retval array['dn','display']
*/ */
function getSelectArray() { function getSelectArray() {
$list = $this -> listObjects(); $list = $this -> listObjects();
$return=array(); $return=array();
foreach($list as $object) { foreach($list as $object) {
$return['dn'][] = $object -> getDn(); $return['dn'][] = $object -> getDn();
$return['display'][] = $object -> getDisplayValue(); $return['display'][] = $object -> getDisplayValue();
} }
return $return; return $return;
} }
/** /**
* Retourne le DN de l'objet * Retourne le DN de l'objet
@ -872,7 +815,7 @@ class LSldapObject {
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval string Le DN de l'objet * @retval string Le DN de l'objet
*/ */
function getDn() { function getDn() {
if($this -> dn) { if($this -> dn) {
return $this -> dn; return $this -> dn;
@ -896,14 +839,32 @@ class LSldapObject {
} }
} }
/** /**
* Retourne le type de l'objet * Retourne le type de l'objet
* *
* @retval string Le type de l'objet ($this -> type_name) * @retval string Le type de l'objet ($this -> type_name)
*/ */
function getType() { function getType() {
return $this -> type_name; 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;
}
} }

File diff suppressed because it is too large Load diff

View file

@ -87,17 +87,17 @@ function getFData($format,$data,$meth=NULL) {
} }
function loadDir($dir,$regexpr='^.*\.php$') { function loadDir($dir,$regexpr='^.*\.php$') {
if ($handle = opendir($dir)) { if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) { while (false !== ($file = readdir($handle))) {
if (ereg($regexpr,$file)) { if (ereg($regexpr,$file)) {
require_once($dir.'/'.$file); require_once($dir.'/'.$file);
} }
} }
} }
else { else {
die(_('Dossier introuvable ('.$dir.').')); die(_('Dossier introuvable ('.$dir.').'));
} }
return true; return true;
} }
@ -111,26 +111,113 @@ function return_data($data) {
} }
function debug($data,$get=true) { function debug($data,$get=true) {
if ($get) { if ($get) {
if (is_array($data)) { if (is_array($data)) {
$GLOBALS['LSdebug']['fields'][]=$data; $GLOBALS['LSdebug']['fields'][]=$data;
} }
else { else {
$GLOBALS['LSdebug']['fields'][]="[$data]"; $GLOBALS['LSdebug']['fields'][]="[$data]";
} }
} }
return true; return true;
} }
function debug_print() { function debug_print() {
if (( $GLOBALS['LSdebug']['fields'] ) && ( $GLOBALS['LSdebug']['active'] )) { if (( $GLOBALS['LSdebug']['fields'] ) && ( $GLOBALS['LSdebug']['active'] )) {
$txt='<ul>'; $txt='<ul>';
foreach($GLOBALS['LSdebug']['fields'] as $debug) { foreach($GLOBALS['LSdebug']['fields'] as $debug) {
$txt.='<li>'.$debug.'</li>'; if (is_array($debug)) {
} $txt.='<li><pre>'.print_r($debug,true).'</pre></li>';
$txt.='</ul>'; }
$GLOBALS['Smarty'] -> assign('LSdebug',$txt); 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;
}
?> ?>

View file

@ -1,54 +1,55 @@
var LSdefault = new Class({ var LSdefault = new Class({
initialize: function(){ initialize: function(){
LSdebug('toto'); LSdebug('toto');
this.LSdebug = $('LSdebug'); this.LSdebug = $('LSdebug');
this.LSdebugInfos = $('LSdebug_infos'); this.LSdebugInfos = $('LSdebug_infos');
this.LSdebug.setOpacity(0); this.LSdebug.setOpacity(0);
if (this.LSdebugInfos.innerHTML != '') { if (this.LSdebugInfos.innerHTML != '') {
this.displayDebugBox(); this.displayDebugBox();
} }
this.LSdebugHidden = $('LSdebug_hidden'); this.LSdebugHidden = $('LSdebug_hidden');
this.LSdebugHidden.addEvent('click',this.onLSdebugHiddenClick.bind(this)); this.LSdebugHidden.addEvent('click',this.onLSdebugHiddenClick.bindWithEvent(this));
this.LSerror = $('LSerror'); this.LSerror = $('LSerror');
this.LSerror.setOpacity(0); this.LSerror.setOpacity(0);
if (this.LSerror.innerHTML != '') { if (this.LSerror.innerHTML != '') {
this.displayLSerror(); this.displayLSerror();
} }
}, },
onLSdebugHiddenClick: function(){ onLSdebugHiddenClick: function(event){
new Fx.Style(this.LSdebug,'opacity',{duration:500}).start(1,0); new Event(event).stop();
}, new Fx.Style(this.LSdebug,'opacity',{duration:500}).start(1,0);
},
displayDebugBox: function() { displayDebugBox: function() {
new Fx.Style(this.LSdebug,'opacity',{duration:500}).start(0,0.8); new Fx.Style(this.LSdebug,'opacity',{duration:500}).start(0,0.8);
}, },
displayError: function(html) { displayError: function(html) {
this.LSerror.empty(); this.LSerror.empty();
this.LSerror.setHTML(html); this.LSerror.setHTML(html);
this.displayLSerror(); this.displayLSerror();
}, },
displayLSerror: function() { displayLSerror: function() {
new Fx.Style(this.LSerror,'opacity',{duration:500}).start(0,0.8); 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); (function(){new Fx.Style(this.LSerror,'opacity',{duration:500}).start(0.8,0);}).delay(5000, this);
}, },
loadingImgDisplay: function(el) { loadingImgDisplay: function(el) {
this.loading_img = new Element('img'); this.loading_img = new Element('img');
this.loading_img.src='templates/images/ajax-loader.gif'; this.loading_img.src='templates/images/ajax-loader.gif';
this.loading_img.injectAfter(el); this.loading_img.injectAfter(el);
}, },
loadingImgHide: function() { loadingImgHide: function() {
this.loading_img.remove(); this.loading_img.remove();
} }
}); });
window.addEvent(window.ie ? 'load' : 'domready', function() { window.addEvent(window.ie ? 'load' : 'domready', function() {
varLSdefault = new LSdefault(); varLSdefault = new LSdefault();
}); });
LSdebug_active = 1; LSdebug_active = 1;

View file

@ -1,70 +1,68 @@
var LSform = new Class({ var LSform = new Class({
initialize: function(){ initialize: function(){
this.objecttype = $('LSform_objecttype').value; $$('img.LSform-add-field-btn').each(function(el) {
this.idform = $('LSform_idform').value; el.addEvent('click',this.onAddFieldBtnClick.bind(this,el));
}, this);
$$('img.LSform-add-field-btn').each(function(el) { $$('img.LSform-remove-field-btn').each(function(el) {
el.addEvent('click',this.onAddFieldBtnClick.bind(this,el)); el.addEvent('click',this.onRemoveFieldBtnClick.bind(this,el));
}, this); }, this);
$$('img.LSform-remove-field-btn').each(function(el) {
el.addEvent('click',this.onRemoveFieldBtnClick.bind(this,el));
}, this);
}, },
onAddFieldBtnClick: function(img){ onAddFieldBtnClick: function(img){
var getAttrName = /LSform_add_field_btn_(.*)_.*/ var getAttrName = /LSform_add_field_btn_(.*)_.*/
var attrName = getAttrName.exec(img.id)[1]; var attrName = getAttrName.exec(img.id)[1];
LSdebug(attrName); LSdebug(attrName);
var data = { var data = {
template: 'LSform', template: 'LSform',
action: 'onAddFieldBtnClick', action: 'onAddFieldBtnClick',
attribute: attrName, attribute: attrName,
objecttype: this.objecttype, objecttype: $('LSform_objecttype').value,
idform: this.idform, objectdn: $('LSform_objectdn').value,
img: img.id idform: $('LSform_idform').value,
}; img: img.id
LSdebug(data); };
varLSdefault.loadingImgDisplay(img); LSdebug(data);
new Ajax('index_ajax.php', {data: data, onComplete: this.onAddFieldBtnClickComplete.bind(this)}).request(); varLSdefault.loadingImgDisplay(img);
}, new Ajax('index_ajax.php', {data: data, onComplete: this.onAddFieldBtnClickComplete.bind(this)}).request();
},
onAddFieldBtnClickComplete: function(responseText, responseXML) { onAddFieldBtnClickComplete: function(responseText, responseXML) {
varLSdefault.loadingImgHide(); varLSdefault.loadingImgHide();
var data = Json.evaluate(responseText); var data = Json.evaluate(responseText);
LSdebug(data); LSdebug(data);
if ( data ) { if ( data ) {
if ( typeof(data.LSerror) != "undefined" ) { if ( typeof(data.LSerror) != "undefined" ) {
varLSdefault.displayError(data.LSerror); varLSdefault.displayError(data.LSerror);
return; return;
} }
else { else {
var li = new Element('li'); var li = new Element('li');
var img = $(data.img); var img = $(data.img);
li.setHTML(data.html); li.setHTML(data.html);
li.injectAfter(img.getParent()); li.injectAfter(img.getParent());
li.getElements('img[class=LSform-add-field-btn]').each(function(el) { li.getElements('img[class=LSform-add-field-btn]').each(function(el) {
el.addEvent('click',this.onAddFieldBtnClick.bind(this,el)); el.addEvent('click',this.onAddFieldBtnClick.bind(this,el));
}, this); }, this);
li.getElements('img[class=LSform-remove-field-btn]').each(function(el) { li.getElements('img[class=LSform-remove-field-btn]').each(function(el) {
el.addEvent('click',this.onRemoveFieldBtnClick.bind(this,el)); el.addEvent('click',this.onRemoveFieldBtnClick.bind(this,el));
}, this); }, this);
} }
} }
}, },
onRemoveFieldBtnClick: function(img) { onRemoveFieldBtnClick: function(img) {
if (img.getParent().getParent().getChildren().length == 1) { if (img.getParent().getParent().getChildren().length == 1) {
img.getPrevious().getPrevious().value=''; img.getPrevious().getPrevious().value='';
} }
else { else {
img.getParent().remove(); img.getParent().remove();
} }
} }
}); });
window.addEvent(window.ie ? 'load' : 'domready', function() { window.addEvent(window.ie ? 'load' : 'domready', function() {
varLSform = new LSform(); varLSform = new LSform();
}); });

View file

@ -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();
});

View file

@ -27,32 +27,14 @@ $GLOBALS['LSsession'] = new LSsession();
if($LSsession -> startLSsession()) { if($LSsession -> startLSsession()) {
// Définition du Titre de la page // Définition du Titre de la page
$GLOBALS['Smarty'] -> assign('pagetitle',_('Mon compte')); $GLOBALS['Smarty'] -> assign('pagetitle',_('Accueil'));
// ---- les objets LDAP // Template
// Création d'un LSeepeople $GLOBALS['LSsession'] -> setTemplate('accueil.tpl');
$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');
} }
else { else {
$GLOBALS['LSsession'] -> setTemplate('login.tpl'); $GLOBALS['LSsession'] -> setTemplate('login.tpl');
} }
// Affichage des retours d'erreurs // Affichage des retours d'erreurs

View file

@ -7,62 +7,63 @@ $GLOBALS['LSsession'] = new LSsession();
$GLOBALS['LSsession'] -> loadLSobjects(); $GLOBALS['LSsession'] -> loadLSobjects();
if ($_REQUEST['template'] != 'login') { if ($_REQUEST['template'] != 'login') {
if ( !$GLOBALS['LSsession'] -> startLSsession() ) { if ( !$GLOBALS['LSsession'] -> startLSsession() ) {
echo json_encode(array('LSerror' => 'LSsession : Impossible d\'initialiser la LSsession.' )); echo json_encode(array('LSerror' => 'LSsession : Impossible d\'initialiser la LSsession.' ));
} }
} }
switch($_REQUEST['template']) { switch($_REQUEST['template']) {
case 'login': case 'login':
switch($_REQUEST['action']) { switch($_REQUEST['action']) {
case 'onLdapServerChanged': case 'onLdapServerChanged':
if ( isset($_REQUEST['server']) ) { if ( isset($_REQUEST['server']) ) {
$GLOBALS['LSsession'] -> setLdapServer($_REQUEST['server']); $GLOBALS['LSsession'] -> setLdapServer($_REQUEST['server']);
if ( $GLOBALS['LSsession'] -> LSldapConnect() ) { if ( $GLOBALS['LSsession'] -> LSldapConnect() ) {
$list = $GLOBALS['LSsession'] -> getSubDnLdapServerOptions(); $list = $GLOBALS['LSsession'] -> getSubDnLdapServerOptions();
if (is_string($list)) { if (is_string($list)) {
$list="<select name='LSsession_topDn' id='LSsession_topDn'>".$list."</select>"; $list="<select name='LSsession_topDn' id='LSsession_topDn'>".$list."</select>";
$data = array('list_topDn' => $list); $data = array('list_topDn' => $list);
} }
else if (is_array($list)){ else if (is_array($list)){
$data = array('LSerror' => $GLOBALS['LSerror']->getErrors()); $data = array('LSerror' => $GLOBALS['LSerror']->getErrors());
} }
else { else {
$data = null; $data = null;
} }
} }
else { else {
$data = array('LSerror' => $GLOBALS['LSerror']->getErrors()); $data = array('LSerror' => $GLOBALS['LSerror']->getErrors());
} }
} }
else { else {
$data=NULL; $data=NULL;
} }
break; break;
} }
break; break;
case 'LSform': case 'LSform':
switch($_REQUEST['action']) { switch($_REQUEST['action']) {
case 'onAddFieldBtnClick': case 'onAddFieldBtnClick':
if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['idform'])) && (isset($_REQUEST['img'])) ) { if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['objectdn'])) && (isset($_REQUEST['idform'])) && (isset($_REQUEST['img'])) ) {
$object = new $_REQUEST['objecttype'](); $object = new $_REQUEST['objecttype']();
$form = $object -> getForm($_REQUEST['idform']); $object -> loadData($_REQUEST['objectdn']);
$emptyField=$form -> getEmptyField($_REQUEST['attribute']); $form = $object -> getForm($_REQUEST['idform']);
if ( $emptyField ) { $emptyField=$form -> getEmptyField($_REQUEST['attribute']);
$data = array( if ( $emptyField ) {
'html' => $form -> getEmptyField($_REQUEST['attribute']), $data = array(
'img' => $_REQUEST['img'], 'html' => $form -> getEmptyField($_REQUEST['attribute']),
); 'img' => $_REQUEST['img'],
} );
else { }
$data = array('LSerror' => $GLOBALS['LSerror']->getErrors()); else {
} $data = array('LSerror' => $GLOBALS['LSerror']->getErrors());
} }
else { }
$data=NULL; else {
} $data=NULL;
break; }
} break;
break; }
break;
} }
echo json_encode($data); echo json_encode($data);

65
trunk/modify.php Normal file
View file

@ -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();
?>

View file

@ -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>

View file

@ -1,49 +1,49 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html> <html>
<head> <head>
<title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title> <title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title>
<link rel="stylesheet" type="text/css" href="templates/css/base.css" media="screen" title="Normal" /> <link rel="stylesheet" type="text/css" href="templates/css/base.css" media="screen" title="Normal" />
{$LSsession_css} {$LSsession_css}
{$LSsession_js} {$LSsession_js}
</head> </head>
<body> <body>
<div id='LSerror'> <div id='LSerror'>
{$LSerrors} {$LSerrors}
</div> </div>
<div id='LSdebug'> <div id='LSdebug'>
<a href='#' id='LSdebug_hidden'>X</a> <a href='#' id='LSdebug_hidden'>X</a>
<div id='LSdebug_infos'>{if $LSdebug != ''}{$LSdebug}{/if}</div> <div id='LSdebug_infos'>{if $LSdebug != ''}{$LSdebug}{/if}</div>
</div> </div>
<div id='main'> <div id='main'>
<div id='left'> <div id='left'>
<img src='templates/images/logo.png' alt='Logo' id='logo'/> <img src='templates/images/logo.png' alt='Logo' id='logo'/>
<ul class='menu'> <ul class='menu'>
<li class='menu'><a href='index.php' class='menu'>Mon compte</a></li> {foreach from=$LSaccess item=item key=LSobject}
<li class='menu'><a href='mon_compte.php' class='menu'>Utilisateurs</a></li> <li class='menu'><a href='view.php?LSobject={$LSobject}' class='menu'>{$item.label}</a></li>
<li class='menu'><a href='mon_compte.php' class='menu'>Groupes</a></li> {/foreach}
</ul> </ul>
</div> </div>
<div id='right'> <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> <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> {if $pagetitle != ''}<h1>{$pagetitle}</h1>{/if}
<form action='{$LSform_action}' method='post' class='LSform'> <form action='{$LSform_action}' method='post' class='LSform'>
{$LSform_header} {$LSform_header}
<dl class='LSform'> <dl class='LSform'>
{foreach from=$LSform_fields item=field} {foreach from=$LSform_fields item=field}
<dt class='LSform'>{$field.label}</dt> <dt class='LSform'>{$field.label}</dt>
<dd class='LSform'>{$field.html}{if $field.add != ''} <span class='LSform-addfield'>+ Ajouter un champ</span>{/if}</dd> <dd class='LSform'>{$field.html}{if $field.add != ''} <span class='LSform-addfield'>+ Ajouter un champ</span>{/if}</dd>
{if $field.errors != ''} {if $field.errors != ''}
{foreach from=$field.errors item=error} {foreach from=$field.errors item=error}
<dd class='LSform LSform-errors'>{$error}</dd> <dd class='LSform LSform-errors'>{$error}</dd>
{/foreach} {/foreach}
{/if} {/if}
{/foreach} {/foreach}
<dd class='LSform'><input type='submit' value='{$LSform_submittxt}' class='LSform' /></dd> <dd class='LSform'><input type='submit' value='{$LSform_submittxt}' class='LSform' /></dd>
</dl> </dl>
</div> </div>
<hr class='spacer' /> <hr class='spacer' />
</div> </div>
</body> </body>
</html> </html>

View file

@ -1,51 +1,65 @@
form.LSform { p.LSform-view-actions {
margin-left: 2em; 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 { dl.LSform {
margin: 0; margin: 0;
padding: 0; margin-left: 2em;
padding: 0;
} }
.LSform dt { .LSform dt {
position: relative; position: relative;
left: 0.2em; left: 0.2em;
top: 1.2em; top: 1.2em;
width: 12em; width: 12em;
font-weight: bold; font-weight: bold;
font-size: 0.9em; font-size: 0.9em;
color: #0072b8; color: #0072b8;
} }
dd.LSform { dd.LSform {
margin-left: 13em; margin-left: 13em;
padding: 0; padding: 0;
} }
.LSform input, .LSform select, .LSform textarea { .LSform input, .LSform select, .LSform textarea {
border: 1px inset #ccc; border: 1px inset #ccc;
width: 20em; width: 20em;
background-color: #b5e4f6; background-color: #b5e4f6;
} }
input[type='submit'].LSform { input[type='submit'].LSform {
border: 1px outset #ccc; border: 1px outset #ccc;
margin-top: 1em; margin-top: 1em;
margin-left: 6em; margin-left: 6em;
width: 8em; width: 8em;
} }
ul.LSform { ul.LSform {
list-style-type: none; list-style-type: none;
padding: 0; padding: 0;
margin: 0; margin: 0;
} }
.LSform-errors { .LSform-errors {
color: #fff; color: #fff;
background-color: #f59a67; background-color: #f59a67;
} }
img.LSform-add-field-btn, img.LSform-remove-field-btn { img.LSform-add-field-btn, img.LSform-remove-field-btn {
cursor: pointer; cursor: pointer;
} }

View file

@ -1,80 +1,134 @@
body { body {
font-family: sans-serif; font-family: sans-serif;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
img { img {
vertical-align: bottom; vertical-align: bottom;
} }
a:hover { a:hover {
text-decoration: underline; text-decoration: underline;
} }
h1 { h1 {
margin: 0.5em; margin: 0.5em;
border-bottom: 1px solid #0072b8; border-bottom: 1px solid #0072b8;
color: #0072b8; color: #0072b8;
} }
a img { a img {
border: none; border: none;
} }
hr { hr {
visibility: hidden; visibility: hidden;
clear: both; clear: both;
height: 0px; height: 0px;
} }
#main { #main {
width: 1000px; width: 1000px;
margin: auto; margin: auto;
border: 1px solid #52bce5; border: 1px solid #52bce5;
background: #fff url(../images/fd_menu.png) repeat-y scroll left top; background: #fff url(../images/fd_menu.png) repeat-y scroll left top;
} }
#left { #left {
float: left; float: left;
width: 160px; width: 160px;
} }
#right { #right {
margin: 0; margin: 0;
float: left; float: left;
width: 840px; width: 840px;
} }
#logo { #logo {
margin: auto; margin: auto;
width: 142px; width: 142px;
margin-left: 9px; margin-left: 9px;
} }
#status { #status {
margin: 0; margin: 0;
padding: 0; padding: 0;
font-size: 0.7em; font-size: 0.7em;
color: #fff; color: #fff;
text-align: right; text-align: right;
background-color: #52bce5; background-color: #52bce5;
padding: 0.3em; padding: 0.3em;
} }
#user_name { #user_name {
font-weight: bold; font-weight: bold;
} }
ul.menu { ul.menu {
list-style-image: url(../images/puce.png); list-style-image: url(../images/puce.png);
} }
li.menu { li.menu {
color: #fff; color: #fff;
} }
a.menu { a.menu {
color: #fff; color: #fff;
text-decoration: none; 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;
} }

34
trunk/templates/empty.tpl Normal file
View file

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 617 B

View file

@ -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>

42
trunk/templates/view.tpl Normal file
View file

@ -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>

View file

@ -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>

115
trunk/view.php Normal file
View file

@ -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();
?>