ldapsaisie/trunk/includes/class/class.LSobjects.LSeegroup.php
Benjamin Renard c78a95c1d5 - 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.
2008-07-29 13:45:02 +00:00

227 lines
6.7 KiB
PHP

<?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.
******************************************************************************/
/**
* Objet Ldap eegroup
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*/
class LSeegroup extends LSldapObject {
var $userObjectType = 'LSeepeople';
/**
* Constructeur
*
* Cette methode construit l'objet et définis la configuration.
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @param[in] $config array La configuration de l'objet
*
* @retval boolean true si l'objet a été construit, false sinon.
*
* @see LSldapObject::LSldapObject()
*/
function LSeegroup ($config='auto') {
$this -> LSldapObject('LSeegroup',$config);
}
/**
* Retourne la liste des groupes d'un utilisateur
*
* Retourne un tableau de LSeegroup correspondant aux groupes
* auxquels appartient un utilisateur
*
* @param[in] $userObject Un object user (type : $this -> userObjectType)
*
* @retval Array of LSeegroup Les groupes de l'utilisateur
**/
function listUserGroups($userObject) {
$dn = $userObject -> getDn();
$filter = $this -> getObjectFilter();
$filter = '(&'.$filter.'(uniqueMember='.$dn.'))';
return $this -> listObjects($filter);
}
/**
* Ajoute un utilisateur au groupe
*
* @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 $this -> userObjectType) {
if ($this -> attrs['uniqueMember'] instanceof LSattribute) {
$dn = $object -> getDn();
$values = $this -> attrs['uniqueMember'] -> getValue();
if (!is_array($values)) {
$updateData = array($dn);
}
else if (!in_array($dn,$values)) {
$values[]=$dn;
$updateData = $values;
}
if (isset($updateData)) {
return $GLOBALS['LSldap'] -> update($this -> getType(),$this -> getDn(), array('uniqueMember' => $updateData));
}
return true;
}
}
return;
}
/**
* Supprime un utilisateur du groupe
*
* @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 $this -> userObjectType) {
if ($this -> attrs['uniqueMember'] instanceof LSattribute) {
$dn = $object -> getDn();
$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!=$dn) {
$updateData[]=$value;
}
}
return $GLOBALS['LSldap'] -> update($this -> getType(),$this -> getDn(), array('uniqueMember' => $updateData));
}
}
}
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;
}
/**
* Met à jour les groupes d'un 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
**/
function updateUserGroups($userObject,$listDns) {
$currentGroups = $this -> listUserGroups($userObject);
$type=$this -> getType();
if(is_array($currentGroups)) {
if (is_array($listDns)) {
$dontDelete=array();
$dontAdd=array();
for ($i=0;$i<count($currentGroups);$i++) {
$dn = $currentGroups[$i] -> getDn();
if (in_array($dn, $listDns)) {
$dontDelete[$i]=true;
$dontAdd[]=$dn;
}
}
for($i=0;$i<count($currentGroups);$i++) {
if ($dontDelete[$i]) {
continue;
}
else {
if (!$currentGroups[$i] -> deleteOneMember($userObject)) {
return;
}
}
}
foreach($listDns as $dn) {
if (in_array($dn,$dontAdd)) {
continue;
}
else {
$object = new $type();
if ($object -> loadData($dn)) {
if (!$object -> addOneMember($userObject)) {
return;
}
}
else {
return;
}
}
}
return true;
}
}
else {
if(!is_array($listDns)) {
return true;
}
foreach($listDns as $dn) {
$object = new $type();
if ($object -> loadData($dn)) {
if (!$object -> addOneMember($userObject)) {
return;
}
}
else {
return;
}
}
}
}
}
?>