|
|
@ -1051,17 +1051,9 @@ class rcube_ldap extends rcube_addressbook |
|
|
|
$replacedata = array(); |
|
|
|
$deletedata = array(); |
|
|
|
|
|
|
|
// flatten composite fields in $record
|
|
|
|
if (is_array($record['address'])) { |
|
|
|
foreach ($record['address'] as $i => $struct) { |
|
|
|
foreach ($struct as $col => $val) { |
|
|
|
$record[$col][$i] = $val; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
$ldap_data = $this->_map_data($save_cols); |
|
|
|
foreach ($this->fieldmap as $col => $fld) { |
|
|
|
$val = $save_cols[$col]; |
|
|
|
$val = $ldap_data[$fld]; |
|
|
|
if ($fld) { |
|
|
|
// remove empty array values
|
|
|
|
if (is_array($val)) |
|
|
@ -1353,6 +1345,20 @@ class rcube_ldap extends rcube_addressbook |
|
|
|
*/ |
|
|
|
private function _map_data($save_cols) |
|
|
|
{ |
|
|
|
// flatten composite fields first
|
|
|
|
foreach ($this->coltypes as $col => $colprop) { |
|
|
|
if (is_array($colprop['childs']) && ($values = $this->get_col_values($col, $save_cols, false))) { |
|
|
|
foreach ($values as $subtype => $childs) { |
|
|
|
$subtype = $subtype ? ':'.$subtype : ''; |
|
|
|
foreach ($childs as $i => $child_values) { |
|
|
|
foreach ((array)$child_values as $childcol => $value) { |
|
|
|
$save_cols[$childcol.$subtype][$i] = $value; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
$ldap_data = array(); |
|
|
|
foreach ($this->fieldmap as $col => $fld) { |
|
|
|
$val = $save_cols[$col]; |
|
|
|