Fix: LDAP Synchro of user-group works when we change group content.
This commit is contained in:
parent
9d6a69f6f3
commit
526cb8396c
@ -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).")";
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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>';
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user