|
|
@ -160,7 +160,7 @@ class rcube_ldap extends rcube_addressbook
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// make sure LDAP_rdn field is required
|
|
|
|
// make sure LDAP_rdn field is required
|
|
|
|
if (!empty($this->prop['LDAP_rdn']) && !in_array($this->prop['LDAP_rdn'], $this->prop['required_fields'])) {
|
|
|
|
if (!empty($this->prop['LDAP_rdn']) && !in_array($this->prop['LDAP_rdn'], $this->prop['required_fields']) && !in_array($this->prop['LDAP_rdn'], array_keys($this->prop['autovalues']))) {
|
|
|
|
$this->prop['required_fields'][] = $this->prop['LDAP_rdn'];
|
|
|
|
$this->prop['required_fields'][] = $this->prop['LDAP_rdn'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1086,6 +1086,9 @@ class rcube_ldap extends rcube_addressbook
|
|
|
|
$newentry = $this->_map_data($save_cols);
|
|
|
|
$newentry = $this->_map_data($save_cols);
|
|
|
|
$newentry['objectClass'] = $this->prop['LDAP_Object_Classes'];
|
|
|
|
$newentry['objectClass'] = $this->prop['LDAP_Object_Classes'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// add automatically generated attributes
|
|
|
|
|
|
|
|
$this->add_autovalues($newentry);
|
|
|
|
|
|
|
|
|
|
|
|
// Verify that the required fields are set.
|
|
|
|
// Verify that the required fields are set.
|
|
|
|
$missing = null;
|
|
|
|
$missing = null;
|
|
|
|
foreach ($this->prop['required_fields'] as $fld) {
|
|
|
|
foreach ($this->prop['required_fields'] as $fld) {
|
|
|
@ -1389,6 +1392,30 @@ class rcube_ldap extends rcube_addressbook
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Generate missing attributes as configured
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param array LDAP record attributes
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
protected function add_autovalues(&$attrs)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
$attrvals = array();
|
|
|
|
|
|
|
|
foreach ($attrs as $k => $v) {
|
|
|
|
|
|
|
|
$attrvals['{'.$k.'}'] = is_array($v) ? $v[0] : $v;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach ((array)$this->prop['autovalues'] as $lf => $templ) {
|
|
|
|
|
|
|
|
if (empty($attrs[$lf])) {
|
|
|
|
|
|
|
|
// replace {attr} placeholders with concrete attribute values
|
|
|
|
|
|
|
|
$templ = preg_replace('/\{\w+\}/', '', strtr($templ, $attrvals));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (strpos($templ, '(') !== false)
|
|
|
|
|
|
|
|
$attrs[$lf] = eval("return ($templ);");
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
$attrs[$lf] = $templ;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Execute the LDAP search based on the stored credentials
|
|
|
|
* Execute the LDAP search based on the stored credentials
|
|
|
|