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 * \file htdocs/includes/triggers/interface_modLdap_Ldapsynchro.class.php
\ingroup core * \ingroup core
\brief Fichier de gestion des triggers LDAP * \brief Fichier de gestion des triggers LDAP
\version $Id$ * \version $Id$
*/ */
require_once (DOL_DOCUMENT_ROOT."/lib/ldap.class.php"); require_once (DOL_DOCUMENT_ROOT."/lib/ldap.class.php");
/** /**
\class InterfaceLdapsynchro * \class InterfaceLdapsynchro
\brief Classe des fonctions triggers des actions de synchro LDAP * \brief Classe des fonctions triggers des actions de synchro LDAP
*/ */
class InterfaceLdapsynchro class InterfaceLdapsynchro
{ {
var $db; var $db;

View File

@ -1167,13 +1167,13 @@ class User extends CommonObject
/** /**
* \brief Change le mot de passe d'un utilisateur * \brief Change le mot de passe d'un utilisateur
* \param user Object user de l'utilisateur qui fait la modification * \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 password Nouveau mot de passe en clair (a generer si non communique)
* \param changelater 1=Change password only after clicking on confirm email * \param changelater 1=Change password only after clicking on confirm email
* \param notrigger 1=Ne declenche pas les triggers * \param notrigger 1=Ne declenche pas les triggers
* \param nosyncmember Do not synchronize linked member * \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) 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 * \param group id du groupe
*/ */
function SetInGroup($group) 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 * \param group id du groupe
*/ */
function RemoveFromGroup($group) function RemoveFromGroup($group)

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* 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> * Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
* *
* This program is free software; you can redistribute it and/or modify * 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") 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') if ($_POST["action"] == 'add')
{ {
@ -104,30 +104,62 @@ if ($_POST["action"] == 'add')
} }
} }
// Add user into group
if ($_POST["action"] == 'adduser') if ($_POST["action"] == 'adduser')
{ {
if($caneditperms){ if($caneditperms)
{
if ($_POST["user"]) if ($_POST["user"])
{ {
$edituser = new User($db, $_POST["user"]); $editgroup = new UserGroup($db);
$edituser->SetInGroup($_GET["id"]); $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{ }else{
$message = '<div class="error">'.$langs->trans('ErrorForbidden').'</div>'; $message = '<div class="error">'.$langs->trans('ErrorForbidden').'</div>';
} }
} }
// Remove user from group
if ($_GET["action"] == 'removeuser') if ($_GET["action"] == 'removeuser')
{ {
if($caneditperms){ if($caneditperms)
{
if ($_GET["user"]) if ($_GET["user"])
{ {
$editgroup = new UserGroup($db);
$editgroup->fetch($_GET["id"]);
$editgroup->oldcopy=dol_clone($editgroup);
$edituser = new User($db, $_GET["user"]); $edituser = new User($db, $_GET["user"]);
$edituser->RemoveFromGroup($_GET["id"]); $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{ }else{
$message = '<div class="error">'.$langs->trans('ErrorForbidden').'</div>'; $message = '<div class="error">'.$langs->trans('ErrorForbidden').'</div>';

View File

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