mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-12-23 00:43:48 +01:00
- LSldapObject :
-> Ajout de la possibilité de changer le RDN d'un objet -> Mise à jour automatique des relations définis avec les autres types d'objet à partir du moment que le paramètre 'rename_function' est défini dans la configuration de la relation -> Ajout des méthodes suivantes : -> beforeRename() : Executer avant le changement de DN elle permet de préparer le renomage. -> afterRename() : Executer après le changement de DN elle finalise le renomage. -> Méthode submitData() : prise en charge du changement du RDN - LSrelation : -> Correction d'une erreur dans index_ajax.php : le paramètre $relationConf['remove_function'] n'était pas utilisé - LSeegroup : -> Création d'une propriété $userObjectType pour stocké le type des objets utilisateurs -> Création de la méthode renameOneMember() pour assurer les modifications nécéssaire lors du changement de DN d'un utilisateur - LSformElement_date : Suppression du chargement du fichier js : calendar-setup inutile l'utilisation faite de jscalendar. - LSattribute : -> Ajout d'une possibilité pour générer une valeur à partir d'un format de chaine et la méthode getFData() des objets LSldapObject. Cette méthode fait référence au paramètre 'generate_value_format' de la configuration d'un attribut pour générer la valeur - LSldap : -> Ajout d'une méthode move() pour changer le DN d'un objet - LSsession : -> Ajout de la méthode changeAuthUser() pour changer l'utilisateur connecté en cour de session. (Utile lors de la modification de l'utilisateur par lui même) - functions.php : Correction d'un bug dans la fontion getFData(). - modify.php : Vérification des droits de l'utilisateur après chargement et eventuellement modification de celui-ci pour intégrer les eventuelles modifications faites par l'utilisateur.
This commit is contained in:
parent
eb64909db6
commit
c78a95c1d5
12 changed files with 236 additions and 43 deletions
|
@ -39,7 +39,8 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
|
|||
'LSobject' => 'LSeegroup',
|
||||
'list_function' => 'listUserGroups',
|
||||
'update_function' => 'updateUserGroups',
|
||||
'remove_function' => 'removeMember',
|
||||
'remove_function' => 'deleteOneMember',
|
||||
'rename_function' => 'renameOneMember',
|
||||
'rights' => array(
|
||||
'self' => 'r',
|
||||
'admin' => 'w'
|
||||
|
@ -72,8 +73,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
|
|||
),
|
||||
'view' => 1,
|
||||
'form' => array (
|
||||
'modify' => 0,
|
||||
'modify' => 1,
|
||||
'create' => 1
|
||||
),
|
||||
'dependAttrs' => array(
|
||||
'homeDirectory'
|
||||
)
|
||||
),
|
||||
'uidNumber' => array (
|
||||
|
@ -243,15 +247,11 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
|
|||
'ldap_type' => 'ascii',
|
||||
'html_type' => 'text',
|
||||
'required' => 1,
|
||||
'default_value' => '/home/%{uid}',
|
||||
'generate_function' => 'generate_homeDirectory',
|
||||
'rights' => array(
|
||||
'self' => 'r'
|
||||
),
|
||||
'view' => 1,
|
||||
'form' => array (
|
||||
'modify' => 1,
|
||||
)
|
||||
'view' => 1
|
||||
),
|
||||
'mail' => array (
|
||||
'label' => _('Adresse e-mail'),
|
||||
|
|
|
@ -116,8 +116,16 @@ $GLOBALS['LSerror_code'] = array (
|
|||
'msg' => _("LSldapObject : Erreur durant la suppression de %{objectname}."),
|
||||
'level' => 'c'
|
||||
),
|
||||
36 => array (
|
||||
'msg' => _("LSldapObject : Erreur durant les actions avant renomage."),
|
||||
'level' => 'c'
|
||||
),
|
||||
37 => array (
|
||||
'msg' => _("LSldapObject : Erreur durant les actions après renomage."),
|
||||
'level' => 'c'
|
||||
),
|
||||
|
||||
// LSldapObject
|
||||
// LSattribute
|
||||
41 => array (
|
||||
'msg' => _("LSattribute : Attribut %{attr} : Type d'attribut (ldap // html) inconnu (ldap = %{ldap} | html = %{html})."),
|
||||
'level' => 'c'
|
||||
|
|
|
@ -404,7 +404,15 @@ class LSattribute {
|
|||
* @retval boolean true si la valeur de l'attribut peut être générée, false sinon
|
||||
*/
|
||||
function canBeGenerated() {
|
||||
return (function_exists($this -> config['generate_function']));
|
||||
if (function_exists($this -> config['generate_function'])) {
|
||||
return true;
|
||||
}
|
||||
else if (isset($this -> config['generate_value_format'])) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return ;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -415,10 +423,12 @@ class LSattribute {
|
|||
* @retval boolean true si la valeur à put être générée, false sinon
|
||||
*/
|
||||
function generateValue() {
|
||||
if ( ! $this -> canBeGenerated() ) {
|
||||
return;
|
||||
if (function_exists($this -> config['generate_function'])) {
|
||||
$value=call_user_func($this -> config['generate_function'],$this -> ldapObject);
|
||||
}
|
||||
else if (isset($this -> config['generate_value_format'])) {
|
||||
$value = $this -> ldapObject -> getFData($this -> config['generate_value_format']);
|
||||
}
|
||||
$value=call_user_func($this -> config['generate_function'],$this -> ldapObject);
|
||||
if (!empty($value)) {
|
||||
//$this -> setValue($value); // pas nécéssaire ??
|
||||
$this -> updateData=array($value);
|
||||
|
|
|
@ -149,7 +149,7 @@ class LSformElement_date extends LSformElement {
|
|||
$GLOBALS['LSsession'] -> addJSscript('calendar-en.js',LS_LIB_DIR.'jscalendar/lang/');
|
||||
$codeLang = strtolower($GLOBALS['LSconfig']['lang'][0].$GLOBALS['LSconfig']['lang'][1]);
|
||||
$GLOBALS['LSsession'] -> addJSscript('calendar-'.$codeLang.'.js',LS_LIB_DIR.'jscalendar/lang/');
|
||||
$GLOBALS['LSsession'] -> addJSscript('calendar-setup.js',LS_LIB_DIR.'jscalendar/');
|
||||
//$GLOBALS['LSsession'] -> addJSscript('calendar-setup.js',LS_LIB_DIR.'jscalendar/');
|
||||
$GLOBALS['LSsession'] -> addJSscript('LSformElement_date_field.js');
|
||||
$GLOBALS['LSsession'] -> addJSscript('LSformElement_date.js');
|
||||
}
|
||||
|
|
|
@ -337,6 +337,17 @@ class LSldap {
|
|||
return $this -> cnx -> delete($dn,array('recursive' => true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Déplace un objet LDAP dans l'annuaire
|
||||
*
|
||||
* @param[in] $old string Le DN actuel
|
||||
* @param[in] $new string Le futur DN
|
||||
*
|
||||
* @retval boolean True si l'objet a été déplacé, false sinon
|
||||
*/
|
||||
function move($old,$new) {
|
||||
return (!Net_LDAP2::isError($this -> cnx -> move($old,$new)));
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -41,6 +41,7 @@ class LSldapObject {
|
|||
var $submitError=true;
|
||||
var $_whoami=NULL;
|
||||
var $_subDn_value=NULL;
|
||||
var $_relationsCache=array();
|
||||
|
||||
/**
|
||||
* Constructeur
|
||||
|
@ -447,7 +448,7 @@ class LSldapObject {
|
|||
}
|
||||
}
|
||||
else {
|
||||
if($ret<=0) {
|
||||
if($ret<0) {
|
||||
$LSform -> setElementError($attr,$msg_error);
|
||||
return;
|
||||
}
|
||||
|
@ -512,7 +513,31 @@ class LSldapObject {
|
|||
$submitData=array();
|
||||
foreach($this -> attrs as $attr) {
|
||||
if(($attr -> isUpdate())&&($attr -> isValidate())) {
|
||||
$submitData[$attr -> name] = $attr -> getUpdateData();
|
||||
if($attr -> name == $this -> config['rdn']) {
|
||||
debug('Rename');
|
||||
if (!$this -> beforeRename()) {
|
||||
$GLOBALS['LSerror'] -> addErrorCode(36);
|
||||
return;
|
||||
}
|
||||
$oldDn = $this -> getDn();
|
||||
$this -> dn = false;
|
||||
$newDn = $this -> getDn();
|
||||
if ($newDn) {
|
||||
if (!$GLOBALS['LSldap'] -> move($oldDn,$newDn)) {
|
||||
return;
|
||||
}
|
||||
if (!$this -> afterRename($oldDn,$newDn)) {
|
||||
$GLOBALS['LSerror'] -> addErrorCode(37);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$submitData[$attr -> name] = $attr -> getUpdateData();
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!empty($submitData)) {
|
||||
|
@ -977,6 +1002,77 @@ class LSldapObject {
|
|||
$subDnLdapServer = $GLOBALS['LSsession'] -> getSortSubDnLdapServer();
|
||||
return $subDnLdapServer[$this -> getSubDnValue()];
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode executant les actions nécéssaires avant le changement du DN de
|
||||
* l'objet.
|
||||
*
|
||||
* Cette méthode n'est qu'un exemple et elle doit être certainement réécrite
|
||||
* pour les objets plus complexe.
|
||||
*
|
||||
* @retval True en cas de cas ce succès, False sinon.
|
||||
*/
|
||||
function beforeRename() {
|
||||
if (is_array($this->config['relations'])) {
|
||||
foreach($this->config['relations'] as $relation_name => $relation_conf) {
|
||||
if ( isset($relation_conf['list_function']) && isset($relation_conf['rename_function']) ) {
|
||||
if ($GLOBALS['LSsession'] -> loadLSobject($relation_conf['LSobject'])) {
|
||||
$obj = new $relation_conf['LSobject']();
|
||||
if (method_exists($obj,$relation_conf['list_function'])) {
|
||||
$list = $obj -> $relation_conf['list_function']($this);
|
||||
if (is_array($list)) {
|
||||
$this -> _relationsCache[$relation_name] = $list;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode executant les actions nécéssaires après le changement du DN de
|
||||
* l'objet.
|
||||
*
|
||||
* Cette méthode n'est qu'un exemple et elle doit être certainement réécrite
|
||||
* pour les objets plus complexe.
|
||||
*
|
||||
* @param[in] $oldDn string L'ancien DN de l'objet
|
||||
* @param[in] $newDn string Le nouveau DN de l'objet
|
||||
*
|
||||
* @retval True en cas de cas ce succès, False sinon.
|
||||
*/
|
||||
function afterRename($oldDn,$newDn) {
|
||||
$error = 0;
|
||||
if($GLOBALS['LSsession'] -> dn == $oldDn) {
|
||||
$GLOBALS['LSsession'] -> changeAuthUser($this);
|
||||
}
|
||||
|
||||
foreach($this -> _relationsCache as $relation_name => $objList) {
|
||||
foreach($objList as $obj) {
|
||||
$meth = $this->config['relations'][$relation_name]['rename_function'];
|
||||
if (method_exists($obj,$meth)) {
|
||||
if (!($obj -> $meth($this,$oldDn))) {
|
||||
$error=1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$error=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return !$error;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
*/
|
||||
class LSeegroup extends LSldapObject {
|
||||
|
||||
var $userObjectType = 'LSeepeople';
|
||||
|
||||
/**
|
||||
* Constructeur
|
||||
*
|
||||
|
@ -50,7 +52,7 @@ class LSeegroup extends LSldapObject {
|
|||
* Retourne un tableau de LSeegroup correspondant aux groupes
|
||||
* auxquels appartient un utilisateur
|
||||
*
|
||||
* @param[in] $userObject Un object LSeepeople
|
||||
* @param[in] $userObject Un object user (type : $this -> userObjectType)
|
||||
*
|
||||
* @retval Array of LSeegroup Les groupes de l'utilisateur
|
||||
**/
|
||||
|
@ -64,12 +66,12 @@ class LSeegroup extends LSldapObject {
|
|||
/**
|
||||
* Ajoute un utilisateur au groupe
|
||||
*
|
||||
* @param[in] $object Un object LSeepeople : l'utilisateur à ajouter
|
||||
* @param[in] $object Un object user ($this -> userObjectType) : l'utilisateur à ajouter
|
||||
*
|
||||
* @retval boolean true si l'utilisateur à été ajouté, False sinon
|
||||
**/
|
||||
function addOneMember($object) {
|
||||
if ($object instanceof LSeepeople) {
|
||||
if ($object instanceof $this -> userObjectType) {
|
||||
if ($this -> attrs['uniqueMember'] instanceof LSattribute) {
|
||||
$dn = $object -> getDn();
|
||||
$values = $this -> attrs['uniqueMember'] -> getValue();
|
||||
|
@ -92,12 +94,12 @@ class LSeegroup extends LSldapObject {
|
|||
/**
|
||||
* Supprime un utilisateur du groupe
|
||||
*
|
||||
* @param[in] $object Un object LSeepeople : l'utilisateur à supprimer
|
||||
* @param[in] $object Un object (type : $this -> userObjectType) : l'utilisateur à supprimer
|
||||
*
|
||||
* @retval boolean true si l'utilisateur à été supprimé, False sinon
|
||||
**/
|
||||
function deleteOneMember($object) {
|
||||
if ($object instanceof LSeepeople) {
|
||||
if ($object instanceof $this -> userObjectType) {
|
||||
if ($this -> attrs['uniqueMember'] instanceof LSattribute) {
|
||||
$dn = $object -> getDn();
|
||||
$values = $this -> attrs['uniqueMember'] -> getValue();
|
||||
|
@ -113,7 +115,38 @@ class LSeegroup extends LSldapObject {
|
|||
}
|
||||
return $GLOBALS['LSldap'] -> update($this -> getType(),$this -> getDn(), array('uniqueMember' => $updateData));
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renome un utilisateur
|
||||
*
|
||||
* @param[in] $object Un object (type : $this -> userObjectType) : l'utilisateur à renomer
|
||||
* @param[in] $oldDn string L'ancien DN de l'utilisateur
|
||||
*
|
||||
* @retval boolean True en cas de succès, False sinon
|
||||
*/
|
||||
function renameOneMember($object,$oldDn) {
|
||||
if ($object instanceof $this -> userObjectType) {
|
||||
if ($this -> attrs['uniqueMember'] instanceof LSattribute) {
|
||||
$values = $this -> attrs['uniqueMember'] -> getValue();
|
||||
if ((!is_array($values)) && (!empty($values))) {
|
||||
$values = array($values);
|
||||
}
|
||||
if (is_array($values)) {
|
||||
$updateData=array();
|
||||
foreach($values as $value) {
|
||||
if ($value!=$oldDn) {
|
||||
$updateData[] = $value;
|
||||
}
|
||||
else {
|
||||
$updateData[] = $object-> getDn();
|
||||
}
|
||||
}
|
||||
return $GLOBALS['LSldap'] -> update($this -> getType(),$this -> getDn(), array('uniqueMember' => $updateData));
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
@ -122,7 +155,7 @@ class LSeegroup extends LSldapObject {
|
|||
/**
|
||||
* Met à jour les groupes d'un utilisateur
|
||||
*
|
||||
* @param[in] $userObject LSeepeople Un object LSeepeople : l'utilisateur
|
||||
* @param[in] $userObject Mixed Un object (type : $this -> userObjectType) : l'utilisateur
|
||||
* @param[in] $listDns Array(string) Un tableau des DNs des groupes de l'utilisateur
|
||||
*
|
||||
* @retval boolean true si tout c'est bien passé, False sinon
|
||||
|
|
|
@ -37,9 +37,9 @@ class LSeepeople extends LSldapObject {
|
|||
* @param[in] $config array La configuration de l'objet
|
||||
*
|
||||
* @retval boolean true si l'objet a été construit, false sinon.
|
||||
*
|
||||
* @see LSldapObject::LSldapObject()
|
||||
*/
|
||||
*
|
||||
* @see LSldapObject::LSldapObject()
|
||||
*/
|
||||
function LSeepeople ($config='auto') {
|
||||
return $this -> LSldapObject('LSeepeople',$config);
|
||||
}
|
||||
|
|
|
@ -486,6 +486,34 @@ class LSsession {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Modifie l'utilisateur connecté à la volé
|
||||
*
|
||||
* @param[in] $object Mixed L'objet Ldap du nouvel utilisateur
|
||||
* le type doit correspondre à
|
||||
* $this -> ldapServer['authobject']
|
||||
*
|
||||
* @retval boolean True en cas de succès, false sinon
|
||||
*/
|
||||
function changeAuthUser($object) {
|
||||
if ($object instanceof $this -> ldapServer['authobject']) {
|
||||
$this -> dn = $object -> getDn();
|
||||
$rdn = $object -> getValue('rdn');
|
||||
if(is_array($rdn)) {
|
||||
$rdn = $rdn[0];
|
||||
}
|
||||
$this -> rdn = $rdn;
|
||||
$this -> LSuserObject = $object;
|
||||
|
||||
if($this -> loadLSrights()) {
|
||||
$this -> loadLSaccess();
|
||||
$_SESSION['LSsession']=get_object_vars($this);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Définition du serveur Ldap de la session
|
||||
*
|
||||
|
|
|
@ -53,7 +53,11 @@ function getFData($format,$data,$meth=NULL) {
|
|||
else {
|
||||
while (ereg("%{([A-Za-z0-9]+)}",$format[$i],$ch)) {
|
||||
if (method_exists($data[$ch[1]],$meth)) {
|
||||
$format[$i]=ereg_replace($ch[0],$data[$ch[1]] -> $meth(),$format[$i]);
|
||||
$value = $data[$ch[1]] -> $meth();
|
||||
if (is_array($value)) {
|
||||
$value = $value[0];
|
||||
}
|
||||
$format[$i]=ereg_replace($ch[0],$value,$format[$i]);
|
||||
}
|
||||
else {
|
||||
$GLOBALS['LSerror'] -> addErrorCode(901,array('meth' => $meth,'obj' => $ch[1]));
|
||||
|
@ -70,7 +74,11 @@ function getFData($format,$data,$meth=NULL) {
|
|||
else {
|
||||
while (ereg("%{([A-Za-z0-9]+)}",$format[$i],$ch)) {
|
||||
if (method_exists($data,$meth)) {
|
||||
$format[$i]=ereg_replace($ch[0],$data -> $meth($ch[1]),$format[$i]);
|
||||
$value = $data -> $meth($ch[1]);
|
||||
if (is_array($value)) {
|
||||
$value = $value[0];
|
||||
}
|
||||
$format[$i]=ereg_replace($ch[0],$value,$format[$i]);
|
||||
}
|
||||
else {
|
||||
$GLOBALS['LSerror'] -> addErrorCode(901,array('meth' => $meth,'obj' => get_class($data)));
|
||||
|
|
|
@ -241,7 +241,7 @@ if (!isset($_ERRORS)) {
|
|||
$ok=false;
|
||||
foreach($list as $o) {
|
||||
if($o -> getDn() == $_REQUEST['dn']) {
|
||||
if (!$o -> deleteOneMember($object)) {
|
||||
if (!$o -> $relationConf['remove_function']($object)) {
|
||||
$GLOBALS['LSerror'] -> addErrorCode(1015,$conf['relationName']);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -45,20 +45,6 @@ if($LSsession -> startLSsession()) {
|
|||
// Création d'un LSobject
|
||||
if ($GLOBALS['LSsession'] -> loadLSobject($LSobject)) {
|
||||
if ( $GLOBALS['LSsession'] -> canEdit($LSobject,$dn) ) {
|
||||
$LSview_actions[] = array(
|
||||
'label' => _('Voir'),
|
||||
'url' =>'view.php?LSobject='.$LSobject.'&dn='.$dn,
|
||||
'action' => 'view'
|
||||
);
|
||||
|
||||
if ($GLOBALS['LSsession'] -> canRemove($LSobject,$dn)) {
|
||||
$LSview_actions[] = array(
|
||||
'label' => _('Supprimer'),
|
||||
'url' => 'remove.php?LSobject='.$LSobject.'&dn='.$dn,
|
||||
'action' => 'delete'
|
||||
);
|
||||
}
|
||||
|
||||
$object = new $LSobject();
|
||||
if ($object -> loadData($dn)) {
|
||||
// Définition du Titre de la page
|
||||
|
@ -68,10 +54,23 @@ if($LSsession -> startLSsession()) {
|
|||
// MàJ des données de l'objet LDAP
|
||||
if ($object -> updateData('modify')) {
|
||||
debug('ok');
|
||||
//header('Location: view.php?LSobject='.$LSobject.'&dn='.$object -> getDn());
|
||||
}
|
||||
}
|
||||
|
||||
$LSview_actions[] = array(
|
||||
'label' => _('Voir'),
|
||||
'url' =>'view.php?LSobject='.$LSobject.'&dn='.$object -> getDn(),
|
||||
'action' => 'view'
|
||||
);
|
||||
|
||||
if ($GLOBALS['LSsession'] -> canRemove($LSobject,$object -> getDn())) {
|
||||
$LSview_actions[] = array(
|
||||
'label' => _('Supprimer'),
|
||||
'url' => 'remove.php?LSobject='.$LSobject.'&dn='.$object -> getDn(),
|
||||
'action' => 'delete'
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$GLOBALS['LSsession'] -> addJSscript('LSsmoothbox.js');
|
||||
|
|
Loading…
Reference in a new issue