added RDN selection (task #107567)
This commit is contained in:
parent
1655f7c711
commit
b63b876aba
|
@ -719,12 +719,21 @@ class accountContainer {
|
||||||
|
|
||||||
var $module; // This is an array with all module objects
|
var $module; // This is an array with all module objects
|
||||||
|
|
||||||
/** DN of the account */
|
/** DN suffix of the account */
|
||||||
var $dn;
|
var $dn;
|
||||||
|
|
||||||
/** DN of account when it was loaded */
|
/** DN suffix of account when it was loaded */
|
||||||
var $dn_orig;
|
var $dn_orig;
|
||||||
|
|
||||||
|
/** RDN attribute of this account */
|
||||||
|
var $rdn;
|
||||||
|
|
||||||
|
/** RDN attribute of this account when it was loaded */
|
||||||
|
var $rdn_orig;
|
||||||
|
|
||||||
|
/** original LDAP attributes when account was loaded from LDAP */
|
||||||
|
var $attributes_orig;
|
||||||
|
|
||||||
/** Module order */
|
/** Module order */
|
||||||
var $order;
|
var $order;
|
||||||
|
|
||||||
|
@ -759,6 +768,8 @@ class accountContainer {
|
||||||
$result = 0;
|
$result = 0;
|
||||||
// change dn
|
// change dn
|
||||||
if ($post['suffix']!='') $this->dn = $post['suffix'];
|
if ($post['suffix']!='') $this->dn = $post['suffix'];
|
||||||
|
// change RDN
|
||||||
|
if (isset($post['rdn'])) $this->rdn = $post['rdn'];
|
||||||
|
|
||||||
// load profile
|
// load profile
|
||||||
if ($post['selectLoadProfile'] && $post['loadProfile']) {
|
if ($post['selectLoadProfile'] && $post['loadProfile']) {
|
||||||
|
@ -887,13 +898,26 @@ class accountContainer {
|
||||||
// loop through all suffixes
|
// loop through all suffixes
|
||||||
$rootsuffix = $_SESSION['config']->get_Suffix($this->type);
|
$rootsuffix = $_SESSION['config']->get_Suffix($this->type);
|
||||||
foreach ($_SESSION['ldap']->search_units($rootsuffix) as $suffix) {
|
foreach ($_SESSION['ldap']->search_units($rootsuffix) as $suffix) {
|
||||||
if ($this->dn == $suffix) $option_selected = $suffix;
|
if ($this->dn == $suffix) $options_selected = $suffix;
|
||||||
$suffixes[] = $suffix;
|
$suffixes[] = $suffix;
|
||||||
}
|
}
|
||||||
$return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Suffix') ),
|
$return[] = array(
|
||||||
1 => array ( 'kind' => 'select', 'name' => 'suffix', 'options' => $suffixes,
|
0 => array('kind' => 'text', 'text' => _('Suffix')),
|
||||||
'option_selected' => array($option_selected) ),
|
1 => array('kind' => 'select', 'name' => 'suffix', 'options' => $suffixes, 'options_selected' => array($options_selected)),
|
||||||
2 => array ('kind' => 'help', 'value' => 'suffix'));
|
2 => array ('kind' => 'help', 'value' => 'suffix'));
|
||||||
|
// RDN selection
|
||||||
|
$rdnlist = getRDNAttributes($this->type);
|
||||||
|
$rdnSelected = array();
|
||||||
|
if ($this->rdn != '') {
|
||||||
|
$rdnSelected[] = $this->rdn;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$rdnSelected[] = $rdnlist[0];
|
||||||
|
}
|
||||||
|
$return[] = array(
|
||||||
|
0 => array('kind' => 'text', 'text' => _('RDN identifier')),
|
||||||
|
1 => array('kind' => 'select', 'name' => 'rdn', 'options' => $rdnlist, 'options_selected' => $rdnSelected),
|
||||||
|
2 => array ('kind' => 'help', 'value' => '301'));
|
||||||
|
|
||||||
// Get list of profiles
|
// Get list of profiles
|
||||||
$profilelist = getAccountProfiles($this->type);
|
$profilelist = getAccountProfiles($this->type);
|
||||||
|
@ -1268,7 +1292,20 @@ class accountContainer {
|
||||||
$entry = ldap_first_entry($_SESSION['ldap']->server(), $result);
|
$entry = ldap_first_entry($_SESSION['ldap']->server(), $result);
|
||||||
$this->dn = substr($dn, strpos($dn, ',')+1);
|
$this->dn = substr($dn, strpos($dn, ',')+1);
|
||||||
$this->dn_orig = $dn;
|
$this->dn_orig = $dn;
|
||||||
|
// extract RDN
|
||||||
|
$this->rdn = split("=", substr($dn, 0, strpos($dn, ',')));
|
||||||
|
$this->rdn = $this->rdn[0];
|
||||||
|
$this->rdn_orig = $this->rdn;
|
||||||
$attr = ldap_get_attributes($_SESSION['ldap']->server(), $entry);
|
$attr = ldap_get_attributes($_SESSION['ldap']->server(), $entry);
|
||||||
|
$attrNames = array_keys($attr);
|
||||||
|
// remove 'count' entries and numerical entries
|
||||||
|
for ($i = 0; $i < sizeof($attrNames); $i++) unset($attr[$attrNames[$i]]['count']);
|
||||||
|
unset($attr['count']);
|
||||||
|
for ($i = 0; $i < count($attr); $i++) {
|
||||||
|
if (isset($attr[$i])) unset($attr[$i]);
|
||||||
|
}
|
||||||
|
// save original attributes
|
||||||
|
$this->attributes_orig = $attr;
|
||||||
|
|
||||||
foreach ($modules as $module) {
|
foreach ($modules as $module) {
|
||||||
if (!isset($this->module[$module])) {
|
if (!isset($this->module[$module])) {
|
||||||
|
@ -1340,7 +1377,10 @@ class accountContainer {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function will save an account.
|
/**
|
||||||
|
* This function will save an account to the LDAP database.
|
||||||
|
*
|
||||||
|
* @return array list of status messages if any errors occured
|
||||||
*/
|
*/
|
||||||
function save_account() {
|
function save_account() {
|
||||||
$module = array_keys ($this->module);
|
$module = array_keys ($this->module);
|
||||||
|
@ -1368,8 +1408,7 @@ class accountContainer {
|
||||||
*/
|
*/
|
||||||
// TODO how do we interact with the user and show him what has been changed
|
// TODO how do we interact with the user and show him what has been changed
|
||||||
// Complete dn with uid or cn=
|
// Complete dn with uid or cn=
|
||||||
if ($this->type=='group') $search = 'cn';
|
$search = $this->rdn;
|
||||||
else $search = 'uid';
|
|
||||||
$added = false;
|
$added = false;
|
||||||
foreach ($attributes as $DN) {
|
foreach ($attributes as $DN) {
|
||||||
if (isset($DN['modify'][$search][0]) && !$added) {
|
if (isset($DN['modify'][$search][0]) && !$added) {
|
||||||
|
@ -1407,14 +1446,17 @@ class accountContainer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// fixme *** ad update_cache after every ldap-change
|
// fixme *** ad update_cache after every ldap-change
|
||||||
|
|
||||||
print_r($attributes);
|
|
||||||
if (!$stopprocessing) {
|
if (!$stopprocessing) {
|
||||||
if ($this->dn != $this->dn_orig) {
|
if ($this->dn != $this->dn_orig) {
|
||||||
// move existing DN
|
// move existing DN
|
||||||
if ($this->dn_orig!='') {
|
if ($this->dn_orig!='') {
|
||||||
// merge attributes together
|
// merge attributes together
|
||||||
$attr = array_merge_recursive($attributes[$this->dn]['add'], $attributes[$this->dn]['notchanged'], $attributes[$this->dn]['modify']);
|
$attr = array_merge_recursive($attributes[$this->dn]['add'], $attributes[$this->dn]['notchanged'], $attributes[$this->dn]['modify']);
|
||||||
|
// add attributes which are not controlled by modules from original account
|
||||||
|
$attrNames = array_keys($this->attributes_orig);
|
||||||
|
for ($i = 0; $i < sizeof($attrNames); $i++) {
|
||||||
|
if (!isset($attr[$attrNames[$i]])) $attr[$attrNames[$i]] = $this->attributes_orig[$attrNames[$i]];
|
||||||
|
}
|
||||||
$success = ldap_add($_SESSION['ldap']->server(), $this->dn, $attr);
|
$success = ldap_add($_SESSION['ldap']->server(), $this->dn, $attr);
|
||||||
if ($success) {
|
if ($success) {
|
||||||
$_SESSION['cache']->update_cache($this->$dn, 'add', $attr);
|
$_SESSION['cache']->update_cache($this->$dn, 'add', $attr);
|
||||||
|
|
Loading…
Reference in New Issue