/** * We do our best to sort in a way that makes matching easy when ids are different * @return array * * @todo finish obj to array conversion ($users) to make it easier to have non-html output * @todo sorting of same-policies-w.-different-limitations in a role is far from perfect despite our efforts */ public static function getRoles() { $roles = eZRole::fetchByOffset(0, false, true, true); // scrap original array, create a new one where policies are sorted. Can you follow the logic? foreach ($roles as $role) { $policies = array(); $users = array(); foreach ($role->attribute('policies') as $policy) { $limitations = array(); foreach ($policy->attribute('limitations') as $limitation) { $values = $limitation->attribute('values_as_array_with_names'); // We only use the "name" in each limitation. // This might cause fake-positives when comparing, f.e. different node-limitations on different folders all having the same name // But comparing what is inside the limitation is hard (eg node-ids, which we do not want to compare) $valNames = array(); foreach ($values as $item) { $valNames[] = $item["Name"]; } $limName = $limitation->attribute('identifier') . '_' . md5(serialize($valNames)); $limitations[$limName] = array('identifier' => $limitation->attribute('identifier'), 'values_as_array_with_names' => $values); } ksort($limitations); $policy = array('module_name' => $policy->attribute('module_name'), 'function_name' => $policy->attribute('function_name'), 'limitations' => array_values($limitations)); $policies[$policy['module_name'] . '_' . $policy['function_name'] . '_' . md5(serialize(array_keys($limitations)))] = $policy; } ksort($policies); foreach ($role->fetchUserByRole() as $user) { $users[$user['user_object']->attribute('name')] = $user; } ksort($users); $roles[$role->attribute('name')] = array('name' => $role->attribute('name'), 'policies' => $policies, 'user_array' => $users); } ksort($roles); return array_values($roles); }
} // Redirect to content node browse in the user tree // Assign the role for a user or group if ($Module->isCurrentAction('AssignRole')) { $selectedObjectIDArray = eZContentBrowse::result('AssignRole'); foreach ($selectedObjectIDArray as $objectID) { $role->assignToUser($objectID); } // Clear role caches. eZRole::expireCache(); // Clear all content cache. eZContentCacheManager::clearAllContentCache(); } if ($http->hasPostVariable('NewButton')) { $role = eZRole::createNew(); return $Module->redirectToView('edit', array($role->attribute('id'))); } $viewParameters = array('offset' => $offset); $tpl = eZTemplate::factory(); $roles = eZRole::fetchByOffset($offset, $limit, $asObject = true, $ignoreTemp = true); $roleCount = eZRole::roleCount(); $tempRoles = eZRole::fetchList($temporaryVersions = true); $tpl->setVariable('roles', $roles); $tpl->setVariable('role_count', $roleCount); $tpl->setVariable('temp_roles', $tempRoles); $tpl->setVariable('module', $Module); $tpl->setVariable('view_parameters', $viewParameters); $tpl->setVariable('limit', $limit); $Result = array(); $Result['content'] = $tpl->fetch('design:role/list.tpl'); $Result['path'] = array(array('url' => false, 'text' => ezpI18n::tr('kernel/role', 'Role list')));