/** * Return array of access statuses with access levels for current user. Levels are: * 0 = no access * 1 = read * null = use whatever the default is * * The array is indexed on access status value (eg. 0, 1, 2...) not name; the values are level values. * * If the $pn_access_level parameter is set to 0 or 1, then a simple list of access status values for which the user * has that access level is returned * * @return array */ public function getAccessStatuses($pn_access_level = null) { if (!$this->getPrimaryKey()) { return null; } // get user roles $va_roles = $this->getUserRoles(); foreach ($this->getGroupRoles() as $vn_role_id => $va_role_info) { $va_roles[$vn_role_id] = $va_role_info; } $va_access_by_item_id = array(); if (is_array($va_roles)) { foreach ($va_roles as $vn_role_id => $va_role_info) { if (is_array($va_access_status_settings = $va_role_info['vars']['access_status_settings'])) { foreach ($va_access_status_settings as $vn_item_id => $vn_access) { if (!isset($va_access_by_item_id[$vn_item_id])) { $va_access_by_item_id[$vn_item_id] = $vn_access; continue; } if (is_null($vn_access)) { continue; } if ($vn_access >= (int) $va_access_by_item_id[$vn_item_id]) { $va_access_by_item_id[$vn_item_id] = $vn_access; } } } } } if (!sizeof($va_access_by_item_id)) { return array(); } $va_item_values = ca_lists::itemIDsToItemValues(array_keys($va_access_by_item_id), array('transaction' => $this->getTransaction())); if (!is_array($va_item_values) || !sizeof($va_item_values)) { return array(); } $va_ret = array(); if (is_array($va_item_values)) { foreach ($va_item_values as $vn_item_id => $vn_val) { $va_ret[$vn_val] = $va_access_by_item_id[$vn_item_id]; } } if (!is_null($pn_access_level) && in_array($pn_access_level, array(0, 1))) { $va_filtered_ret = array(); foreach ($va_ret as $vn_val => $vn_access) { if ($vn_access == $pn_access_level) { $va_filtered_ret[] = $vn_val; } } return $va_filtered_ret; } return $va_ret; }