|
|
@ -1396,6 +1396,10 @@ class rcube_ldap extends rcube_addressbook |
|
|
|
*/ |
|
|
|
protected function add_autovalues(&$attrs) |
|
|
|
{ |
|
|
|
if (empty($this->prop['autovalues'])) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
$attrvals = array(); |
|
|
|
foreach ($attrs as $k => $v) { |
|
|
|
$attrvals['{'.$k.'}'] = is_array($v) ? $v[0] : $v; |
|
|
@ -1406,7 +1410,16 @@ class rcube_ldap extends rcube_addressbook |
|
|
|
if (strpos($templ, '(') !== false) { |
|
|
|
// replace {attr} placeholders with (escaped!) attribute values to be safely eval'd
|
|
|
|
$code = preg_replace('/\{\w+\}/', '', strtr($templ, array_map('addslashes', $attrvals))); |
|
|
|
$attrs[$lf] = eval("return ($code);"); |
|
|
|
$fn = create_function('', "return ($code);"); |
|
|
|
if (!$fn) { |
|
|
|
rcube::raise_error(array( |
|
|
|
'code' => 505, 'type' => 'php', |
|
|
|
'file' => __FILE__, 'line' => __LINE__, |
|
|
|
'message' => "Expression parse error on: ($code)"), true, false); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
$attrs[$lf] = $fn(); |
|
|
|
} |
|
|
|
else { |
|
|
|
// replace {attr} placeholders with concrete attribute values
|
|
|
|