diff --git a/calendar/inc/class.calendar_activesync.inc.php b/calendar/inc/class.calendar_activesync.inc.php index 06fedb3961..f7127bce8d 100644 --- a/calendar/inc/class.calendar_activesync.inc.php +++ b/calendar/inc/class.calendar_activesync.inc.php @@ -17,8 +17,8 @@ */ if (isset($_SERVER['SCRIPT_FILENAME']) && $_SERVER['SCRIPT_FILENAME'] == __FILE__) { - interface activesync_plugin_write {}; - interface activesync_plugin_meeting_requests {}; + interface activesync_plugin_write {} + interface activesync_plugin_meeting_requests {} } /** @@ -1576,14 +1576,12 @@ END:VTIMEZONE function settings($hook_data) { $cals = array(); - if (!$hook_data['setup']) + if (!$hook_data['setup'] && is_numeric($hook_data['account_id'])) { - if (!isset($this->calendar)) $this->calendar = new calendar_boupdate(); - - foreach ($this->calendar->list_cals() as $entry) + foreach (calendar_bo::list_calendars($hook_data['account_id']) as $entry) { $account_id = $entry['grantor']; - if ($account_id != $GLOBALS['egw_info']['user']['account_id']) + if ($account_id != $hook_data['account_id']) // skip current user { $cals[$account_id] = $entry['name']; } diff --git a/calendar/inc/class.calendar_bo.inc.php b/calendar/inc/class.calendar_bo.inc.php index eb6403d85c..770d3cde1e 100644 --- a/calendar/inc/class.calendar_bo.inc.php +++ b/calendar/inc/class.calendar_bo.inc.php @@ -1650,7 +1650,7 @@ class calendar_bo /** * This is called only by list_cals(). It was moved here to remove fatal error in php5 beta4 */ - function _list_cals_add($id,&$users,&$groups) + private static function _list_cals_add($id,&$users,&$groups) { $name = common::grab_owner_name($id); if (!($egw_name = $GLOBALS['egw']->accounts->id2name($id))) @@ -1680,28 +1680,41 @@ class calendar_bo */ function list_cals() { + return self::list_calendars($GLOBALS['egw_info']['user']['account_id'], $this->grants); + } + + /** + * generate list of user- / group-calendars or a given user + * + * @param int $user account_id of user to generate list for + * @param array $grants=null calendar grants from user, or null to query them from acl class + */ + public static function list_calendars($user, array $grants=null) + { + if (is_null($grants)) $grants = $GLOBALS['egw']->acl->get_grants('calendar', true, $user); + $users = $groups = array(); - foreach($this->grants as $id => $rights) + foreach(array_keys($grants) as $id) { - $this->_list_cals_add($id,$users,$groups); + self::_list_cals_add($id,$users,$groups); } - if (($memberships = $GLOBALS['egw']->accounts->membership($GLOBALS['egw_info']['user']['account_id']))) + if (($memberships = $GLOBALS['egw']->accounts->membership($user))) { foreach($memberships as $group_info) { - $this->_list_cals_add($group_info['account_id'],$users,$groups); + self::_list_cals_add($group_info['account_id'],$users,$groups); - if ($account_perms = $GLOBALS['egw']->acl->get_ids_for_location($group_info['account_id'],EGW_ACL_READ,'calendar')) + if (($account_perms = $GLOBALS['egw']->acl->get_ids_for_location($group_info['account_id'],EGW_ACL_READ,'calendar'))) { foreach($account_perms as $id) { - $this->_list_cals_add($id,$users,$groups); + self::_list_cals_add($id,$users,$groups); } } } } - usort($users,array($this,'name_cmp')); - usort($groups,array($this,'name_cmp')); + usort($users, array(__CLASS__, 'name_cmp')); + usort($groups, array(__CLASS__, 'name_cmp')); return array_merge($users, $groups); // users first and then groups, both alphabeticaly } @@ -1713,7 +1726,7 @@ class calendar_bo * @param array $b * @return int */ - function name_cmp(array $a, array $b) + public static function name_cmp(array $a, array $b) { return strnatcasecmp($a['name'], $b['name']); } diff --git a/calendar/inc/class.calendar_groupdav.inc.php b/calendar/inc/class.calendar_groupdav.inc.php index d5b524eae3..0d6089eb16 100644 --- a/calendar/inc/class.calendar_groupdav.inc.php +++ b/calendar/inc/class.calendar_groupdav.inc.php @@ -1536,21 +1536,19 @@ class calendar_groupdav extends groupdav_handler */ static function get_settings($hook_data) { - $calendars = array(); - if (!isset($hook_data['setup'])) + $calendars = array( + 'A' => lang('All'), + 'G' => lang('Primary Group'), + ); + if (!isset($hook_data['setup']) && in_array($hook_data['type'], array('user', 'group'))) { - $user = $GLOBALS['egw_info']['user']['account_id']; - $cal_bo = new calendar_bo(); - foreach ($cal_bo->list_cals() as $entry) + $user = $hook_data['account_id']; + foreach (calendar_bo::list_calendars($user) as $entry) { $calendars[$entry['grantor']] = $entry['name']; } unset($calendars[$user]); } - $calendars = array( - 'A' => lang('All'), - 'G' => lang('Primary Group'), - ) + $calendars; $settings = array(); $settings['calendar-home-set'] = array( diff --git a/phpgwapi/inc/class.groupdav_principals.inc.php b/phpgwapi/inc/class.groupdav_principals.inc.php index a526472f74..f8d3484e9f 100644 --- a/phpgwapi/inc/class.groupdav_principals.inc.php +++ b/phpgwapi/inc/class.groupdav_principals.inc.php @@ -1233,13 +1233,14 @@ class groupdav_principals extends groupdav_handler /** * Get all resources (we cache the resources here, to only query them once per request) * + * @param int $user=null account_if of user, or null for current user * @return array of array with values for res_id, cat_id and name (no other values1) */ - public static function get_resources() + public static function get_resources($user=null) { if (!isset(self::$all_resources)) { - if (!isset(self::$resources)) self::$resources = new resources_bo(); + if (!isset(self::$resources)) self::$resources = new resources_bo($user); self::$all_resources = array(); $query = array( diff --git a/resources/inc/class.bo_acl.inc.php b/resources/inc/class.bo_acl.inc.php index 03632aeb4e..adcfc65c94 100755 --- a/resources/inc/class.bo_acl.inc.php +++ b/resources/inc/class.bo_acl.inc.php @@ -37,15 +37,16 @@ class bo_acl /** * Constructor * + * @param int $user=null account_id of user whos rights to return, or null for current user * @param boolean $session */ - function __construct($session=False) + function __construct($session=False, $user=null) { define('EGW_ACL_CAT_ADMIN',64); define('EGW_ACL_DIRECT_BOOKING',128); define('EGW_ACL_CALREAD',256); - $this->egw_cats = new categories('','resources'); + $this->egw_cats = new categories($user, 'resources'); $this->debug = False; //all this is only needed when called from uiacl. diff --git a/resources/inc/class.resources_bo.inc.php b/resources/inc/class.resources_bo.inc.php index c2ea4a4709..1d10821177 100755 --- a/resources/inc/class.resources_bo.inc.php +++ b/resources/inc/class.resources_bo.inc.php @@ -66,10 +66,15 @@ class resources_bo 'accessory_of' => 'Accessory of' ); - function __construct() + /** + * Constructor + * + * @param int $user=null account_id of user to use for acl, default current user + */ + function __construct($user=null) { $this->so = new resources_so(); - $this->acl =& CreateObject('resources.bo_acl'); + $this->acl = CreateObject('resources.bo_acl', $user); $this->cats = $this->acl->egw_cats; $this->cal_right_transform = array( @@ -139,7 +144,7 @@ class resources_bo { $filter['deleted'] = null; } - + if ($query['filter']) { if (($children = $this->acl->get_cats(EGW_ACL_READ,$query['filter']))) @@ -393,7 +398,7 @@ class resources_bo $this->so->save(); } } - + $res_id = $this->so->save($resource); // History & notifications