--- a/syntax/book.php Wed Jun 22 09:36:22 2016 +0200
+++ b/syntax/book.php Wed Jun 22 18:11:51 2016 +0200
@@ -60,6 +60,7 @@
$data = array('name' => $ID,
'description' => $this->getLang('created_by_davcard'),
'id' => array(),
+ 'filter' => array(),
);
foreach($options as $option)
{
@@ -68,6 +69,10 @@
$val = trim($val);
switch($key)
{
+ case 'filter':
+ list($k, $v) = explode(':', strtolower($val), 2);
+ $data['filter'][$k] = $v;
+ break;
case 'id':
if(!in_array($val, $data['id']))
$data['id'][] = $val;
@@ -121,9 +126,10 @@
global $ID;
if($format !== 'xhtml')
return false;
-
- $R->doc .= '<div class="davcardAddressbookAddNew"><a href="#" class="davcardAddressbookAddNew">'.$this->getLang('add_new').'</a></div>';
-
+ if(in_array($ID, $data['id']))
+ {
+ $R->doc .= '<div class="davcardAddressbookAddNew"><a href="#" class="davcardAddressbookAddNew">'.$this->getLang('add_new').'</a></div>';
+ }
// FIXME: Add new is not yet permission checked and does not support
// included address books!
@@ -178,6 +184,8 @@
foreach($entries as $entry)
{
$contactdata = $this->hlp->parseVcard($entry['contactdata'], $entry['uri']);
+ if(!$this->contactFilterMatch($data['filter'], $contactdata))
+ continue;
$R->doc .= '<tr><td><a href="#" class="plugin_davcard_edit_vcard" data-davcardid="'.$id.'" data-davcarduri="'.$entry['uri'].'" data-write="'.($write ? 'true' : 'false').'">'.$entry['formattedname'].'</a></td><td>';
if(count($contactdata['addr']) > 0)
{
@@ -240,7 +248,57 @@
}
-
+ private function contactFilterMatch($filter, $contactdata)
+ {
+ if(empty($filter))
+ return true;
+
+ foreach($filter as $type => $params)
+ {
+ $params = '/'.$params.'/i';
+ switch($type)
+ {
+ case 'name':
+ if(preg_match($params, $contactdata['formattedname']) !== 1)
+ return false;
+ break;
+ case 'mail':
+ $found = false;
+ foreach($contactdata['mail'] as $dat)
+ {
+ if(preg_match($params, $dat['mail']) === 1)
+ $found = true;
+ }
+ if(!$found)
+ return false;
+ break;
+ case 'address':
+ $found = false;
+ foreach($contactdata['addr'] as $dat)
+ {
+ foreach($dat['address'] as $da)
+ {
+ if(preg_match($params, $da) === 1)
+ $found = true;
+ }
+ }
+ if(!$found)
+ return false;
+ break;
+ case 'tel':
+ $found = false;
+ foreach($contactdata['tel'] as $dat)
+ {
+ if(preg_match($params, $dat['number']) === 1)
+ $found = true;
+ }
+ if(!$found)
+ return false;
+ break;
+ }
+ }
+ return true;
+ }
}