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

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'].'%');
}
$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']))
{