Fix: LDAP Synchro of user-group works when we change group content.

This commit is contained in:
Laurent Destailleur 2010-01-16 19:56:05 +00:00
parent 9d6a69f6f3
commit 526cb8396c
4 changed files with 112 additions and 51 deletions

View File

@ -17,20 +17,18 @@
*/
/**
\file htdocs/includes/triggers/interface_modLdap_Ldapsynchro.class.php
\ingroup core
\brief Fichier de gestion des triggers LDAP
\version $Id$
*/
* \file htdocs/includes/triggers/interface_modLdap_Ldapsynchro.class.php
* \ingroup core
* \brief Fichier de gestion des triggers LDAP
* \version $Id$
*/
require_once (DOL_DOCUMENT_ROOT."/lib/ldap.class.php");
/**
\class InterfaceLdapsynchro
\brief Classe des fonctions triggers des actions de synchro LDAP
*/
* \class InterfaceLdapsynchro
* \brief Classe des fonctions triggers des actions de synchro LDAP
*/
class InterfaceLdapsynchro
{
var $db;
@ -137,7 +135,7 @@ class InterfaceLdapsynchro
$oldinfo=$object->oldcopy->_load_ldap_info();
$olddn=$object->oldcopy->_load_ldap_dn($oldinfo);
// Verify if entry exist
$container=$object->oldcopy->_load_ldap_dn($oldinfo,1);
$search = "(".$object->oldcopy->_load_ldap_dn($oldinfo,2).")";
@ -214,7 +212,7 @@ class InterfaceLdapsynchro
$oldinfo=$object->oldcopy->_load_ldap_info();
$olddn=$object->oldcopy->_load_ldap_dn($oldinfo);
// Verify if entry exist
$container=$object->oldcopy->_load_ldap_dn($oldinfo,1);
$search = "(".$object->oldcopy->_load_ldap_dn($oldinfo,2).")";
@ -284,7 +282,7 @@ class InterfaceLdapsynchro
$oldinfo=$object->oldcopy->_load_ldap_info();
$olddn=$object->oldcopy->_load_ldap_dn($oldinfo);
// Verify if entry exist
$container=$object->oldcopy->_load_ldap_dn($oldinfo,1);
$search = "(".$object->oldcopy->_load_ldap_dn($oldinfo,2).")";
@ -407,7 +405,7 @@ class InterfaceLdapsynchro
$oldinfo=$object->oldcopy->_load_ldap_info();
$olddn=$object->oldcopy->_load_ldap_dn($oldinfo);
// Verify if entry exist
$container=$object->oldcopy->_load_ldap_dn($oldinfo,1);
$search = "(".$object->oldcopy->_load_ldap_dn($oldinfo,2).")";

View File

@ -1167,13 +1167,13 @@ class User extends CommonObject
/**
* \brief Change le mot de passe d'un utilisateur
* \param user Object user de l'utilisateur qui fait la modification
* \param password Nouveau mot de passe en clair (a generer si non communique)
* \brief Change le mot de passe d'un utilisateur
* \param user Object user de l'utilisateur qui fait la modification
* \param password Nouveau mot de passe en clair (a generer si non communique)
* \param changelater 1=Change password only after clicking on confirm email
* \param notrigger 1=Ne declenche pas les triggers
* \param nosyncmember Do not synchronize linked member
* \return string If OK return clear password, 0 if no change, < 0 if error
* \return string If OK return clear password, 0 if no change, < 0 if error
*/
function setPassword($user, $password='', $changelater=0, $notrigger=0, $nosyncmember=0)
{
@ -1440,7 +1440,7 @@ class User extends CommonObject
/**
* \brief Ajoute l'utilisateur dans un groupe
* \brief Add user into a group
* \param group id du groupe
*/
function SetInGroup($group)
@ -1459,7 +1459,7 @@ class User extends CommonObject
}
/**
* \brief Retire l'utilisateur d'un groupe
* \brief Remove a user from a group
* \param group id du groupe
*/
function RemoveFromGroup($group)

View File

@ -1,6 +1,6 @@
<?php
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2005-2006 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2010 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
*
* This program is free software; you can redistribute it and/or modify
@ -43,7 +43,7 @@ $action=isset($_GET["action"])?$_GET["action"]:$_POST["action"];
/**
* Action suppression groupe
* Action remove group
*/
if ($_REQUEST["action"] == 'confirm_delete' && $_REQUEST["confirm"] == "yes")
{
@ -61,7 +61,7 @@ if ($_REQUEST["action"] == 'confirm_delete' && $_REQUEST["confirm"] == "yes")
}
/**
* Action ajout groupe
* Action add group
*/
if ($_POST["action"] == 'add')
{
@ -104,30 +104,62 @@ if ($_POST["action"] == 'add')
}
}
// Add user into group
if ($_POST["action"] == 'adduser')
{
if($caneditperms){
if($caneditperms)
{
if ($_POST["user"])
{
$edituser = new User($db, $_POST["user"]);
$edituser->SetInGroup($_GET["id"]);
$editgroup = new UserGroup($db);
$editgroup->fetch($_GET["id"]);
$editgroup->oldcopy=dol_clone($editgroup);
Header("Location: fiche.php?id=".$_GET["id"]);
$edituser = new User($db, $_POST["user"]);
$result=$edituser->SetInGroup($_GET["id"]);
// We reload members (list has changed)
$editgroup->members=$editgroup->listUsersForGroup();
// We update group to force triggers that update groups content
$result=$editgroup->update();
if ($result > 0)
{
header("Location: fiche.php?id=".$_GET["id"]);
exit;
}
}
}else{
$message = '<div class="error">'.$langs->trans('ErrorForbidden').'</div>';
}
}
// Remove user from group
if ($_GET["action"] == 'removeuser')
{
if($caneditperms){
if($caneditperms)
{
if ($_GET["user"])
{
$editgroup = new UserGroup($db);
$editgroup->fetch($_GET["id"]);
$editgroup->oldcopy=dol_clone($editgroup);
$edituser = new User($db, $_GET["user"]);
$edituser->RemoveFromGroup($_GET["id"]);
Header("Location: fiche.php?id=".$_GET["id"]);
// We reload members (list has changed)
$editgroup->members=$editgroup->listUsersForGroup();
// We update group to force triggers that update groups content
$result=$editgroup->update();
if ($result > 0)
{
header("Location: fiche.php?id=".$_GET["id"]);
exit;
}
}
}else{
$message = '<div class="error">'.$langs->trans('ErrorForbidden').'</div>';

View File

@ -1,6 +1,6 @@
<?php
/* Copyright (c) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (c) 2005 Laurent Destailleur <eldy@users.sourceforge.net>
/* Copyright (c) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (c) 2005-2010 Laurent Destailleur <eldy@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -95,6 +95,8 @@ class UserGroup extends CommonObject
$this->datec = $obj->datec;
$this->datem = $obj->datem;
$this->members=$this->listUsersForGroup();
// Sav current LDAP Current DN
//$this->ldap_dn = $this->_load_ldap_dn($this->_load_ldap_info(),0);
}
@ -111,7 +113,7 @@ class UserGroup extends CommonObject
/**
* \brief Return array of groups for a particular user
* \brief Return array of groups objects for a particular user
* \param usertosearch
* \return array of groups objects
*/
@ -119,7 +121,7 @@ class UserGroup extends CommonObject
{
$ret=array();
$sql = "SELECT g.rowid, g.nom, g.note, g.datec, tms as datem";
$sql = "SELECT g.rowid, g.nom, g.note, g.datec, g.tms as datem";
$sql.= " FROM ".MAIN_DB_PREFIX."usergroup as g,";
$sql.= " ".MAIN_DB_PREFIX."usergroup_user as ug";
$sql.= " WHERE ug.fk_usergroup = g.rowid";
@ -152,6 +154,39 @@ class UserGroup extends CommonObject
return $ret;
}
/**
* \brief Return array of users id for group
* \return array of users id
*/
function listUsersForGroup()
{
$ret=array();
$sql = "SELECT u.rowid, u.login, u.name, u.firstname";
$sql.= " FROM ".MAIN_DB_PREFIX."user as u,";
$sql.= " ".MAIN_DB_PREFIX."usergroup_user as ug";
$sql.= " WHERE ug.fk_user = u.rowid";
$sql.= " AND ug.fk_usergroup = ".$this->id;
dol_syslog("UserGroup::listUsersForGroup sql=".$sql,LOG_DEBUG);
$result = $this->db->query($sql);
if ($result)
{
while ($obj = $this->db->fetch_object($result))
{
$ret[]=$obj->rowid;
}
$this->db->free($result);
}
else
{
$this->error=$this->db->lasterror();
dol_syslog("UserGroup::listUsersForGroup ".$this->error, LOG_ERR);
return -1;
}
return $ret;
}
/**
* \brief Ajoute un droit a l'utilisateur
* \param rid id du droit a ajouter
@ -483,9 +518,9 @@ class UserGroup extends CommonObject
/**
* \brief Mise a jour en base d'un utilisateur
* \param notrigger 0=non, 1=oui
* \return int <0 si KO, >=0 si OK
* \brief Update group into database
* \param notrigger 0=trigers enabled, 1=trigers disabled
* \return int <0 if KO, >=0 if OK
*/
function update($notrigger=0)
{
@ -502,27 +537,23 @@ class UserGroup extends CommonObject
$resql = $this->db->query($sql);
if ($resql)
{
if ($this->db->affected_rows($resql))
if (!$error && ! $notrigger)
{
if (!$error && ! $notrigger)
{
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('GROUP_MODIFY',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
}
return 1;
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('GROUP_MODIFY',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
}
return 0;
if (! $error) return 1;
else return -$error;
}
else
{
dol_print_error($this->db);
return -2;
return -1;
}
}