Do private filtering on DB level

This commit is contained in:
Nathan Gray 2011-02-28 23:43:34 +00:00
parent 67a34286bb
commit b2bea332b1
2 changed files with 9 additions and 5 deletions

View File

@ -474,16 +474,13 @@ class calendar_bo
} }
if ($is_private || (!$event['public'] && $filter == 'hideprivate')) if ($is_private || (!$event['public'] && $filter == 'hideprivate'))
{ {
if($params['query']) if($filter == 'hideprivate')
{ {
unset($events[$id]); unset($events[$id]);
$this->total--; $this->total--;
continue; continue;
} }
elseif($this->check_perms(EGW_ACL_FREEBUSY,$event)) $this->clear_private_infos($events[$id],$users);
{
$this->clear_private_infos($events[$id],$users);
}
} }
} }

View File

@ -342,6 +342,13 @@ class calendar_so
$to_or[] = $col.' '.$this->db->capabilities[egw_db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.$this->db->quote('%'.$params['query'].'%'); $to_or[] = $col.' '.$this->db->capabilities[egw_db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.$this->db->quote('%'.$params['query'].'%');
} }
$where[] = '('.implode(' OR ',$to_or).')'; $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($params['sql_filter']) && is_string($params['sql_filter'])) if (!empty($params['sql_filter']) && is_string($params['sql_filter']))
{ {