diff --git a/calendar/inc/class.calendar_bo.inc.php b/calendar/inc/class.calendar_bo.inc.php index ecea774d78..280f79b6a2 100644 --- a/calendar/inc/class.calendar_bo.inc.php +++ b/calendar/inc/class.calendar_bo.inc.php @@ -459,16 +459,13 @@ class calendar_bo } if (!$this->check_perms(EGW_ACL_READ,$event) || (!$event['public'] && $filter == 'hideprivate')) { - if($params['query']) + if($filter == 'hideprivate') { unset($events[$id]); $this->total--; continue; } - else - { - $this->clear_private_infos($events[$id],$users); - } + $this->clear_private_infos($events[$id],$users); } } diff --git a/calendar/inc/class.calendar_so.inc.php b/calendar/inc/class.calendar_so.inc.php index 65b7558cac..84bb0fa384 100644 --- a/calendar/inc/class.calendar_so.inc.php +++ b/calendar/inc/class.calendar_so.inc.php @@ -337,6 +337,13 @@ class calendar_so $to_or[] = $col.' '.$this->db->capabilities[egw_db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.$this->db->quote('%'.$query.'%'); } $where[] = '('.implode(' OR ',$to_or).')'; + + // Searching - restrict private to own or private grant + $private_grants = $GLOBALS['egw']->acl->get_ids_for_location($GLOBALS['egw_info']['user']['account_id'], EGW_ACL_PRIVATE, 'calendar'); + $private_filter = '(cal_public OR cal_owner = ' . $GLOBALS['egw_info']['user']['account_id']; + if($private_grants) $private_filter .= ' OR !cal_public AND cal_owner IN (' . implode(',',$private_grants) . ')'; + $private_filter .= ')'; + $where[] = $private_filter; } if (!empty($sql_filter) && is_string($sql_filter)) {