public function testRolesCache() { $includedRole = $this->service->addRole('INCLUDED ROLE'); $role = $this->service->addRole('CACHE ROLE', $includedRole); // Nothing is in the cache, we should get an exception. try { core_kernel_users_Cache::retrieveIncludedRoles($role); $this->assertTrue(false, 'An exception should be raised when trying to retrieve included roles that are not yet in the cache memory.'); } catch (core_kernel_users_CacheException $e) { $this->assertTrue(true); } $includedRoles = $this->service->getIncludedRoles($role); $this->assertEquals(count($includedRoles), 1); $this->assertTrue(array_key_exists($includedRole->getUri(), $includedRoles)); // try to put included roles in the cache. try { core_kernel_users_Cache::cacheIncludedRoles($role, $includedRoles); // now try to retrieve it. $includedRolesFromCache = core_kernel_users_Cache::retrieveIncludedRoles($role); $this->assertTrue(is_array($includedRolesFromCache)); $this->assertEquals(count($includedRolesFromCache), 1); $this->assertTrue(array_key_exists($includedRole->getUri(), $includedRolesFromCache)); // and remove it ! $this->assertTrue(core_kernel_users_Cache::removeIncludedRoles($role)); $this->assertFalse(core_kernel_users_Cache::areIncludedRolesInCache($role)); } catch (core_kernel_users_CacheException $e) { $this->assertTrue(false, 'An exception occured while writing included roles in the cache memory.'); } // try to flush users cache. try { core_kernel_users_Cache::flush(); } catch (core_kernel_users_CacheException $e) { $this->assertTrue(false, 'An error occured while flushing the users cache.'); } $includedRole->delete(); $role->delete(); }
/** * Edit a group instance * @return void */ public function editRole() { $clazz = $this->getCurrentClass(); $role = $this->getCurrentInstance(); $formContainer = new tao_actions_form_Role($clazz, $role); $myForm = $formContainer->getForm(); if ($myForm->isSubmited()) { if ($myForm->isValid()) { $formValues = $myForm->getValues(); $roleService = tao_models_classes_RoleService::singleton(); $includedRolesProperty = new core_kernel_classes_Property(PROPERTY_ROLE_INCLUDESROLE); // We have to make the difference between the old list // of included roles and the new ones. $oldIncludedRolesUris = $role->getPropertyValues($includedRolesProperty); $newIncludedRolesUris = $formValues[PROPERTY_ROLE_INCLUDESROLE]; $removeIncludedRolesUris = array_diff($oldIncludedRolesUris, $newIncludedRolesUris); $addIncludedRolesUris = array_diff($newIncludedRolesUris, $oldIncludedRolesUris); // Make the changes according to the detected differences. foreach ($removeIncludedRolesUris as $rU) { $r = new core_kernel_classes_Resource($rU); $roleService->unincludeRole($role, $r); } foreach ($addIncludedRolesUris as $aU) { $r = new core_kernel_classes_Resource($aU); $roleService->includeRole($role, $r); } // Let's deal with other properties the usual way. unset($formValues[$includedRolesProperty->getUri()]); $binder = new tao_models_classes_dataBinding_GenerisFormDataBinder($role); $role = $binder->bind($myForm->getValues()); core_kernel_users_Cache::removeIncludedRoles($role); // flush cache for this role. $this->setData('selectNode', tao_helpers_Uri::encode($role->getUri())); $this->setData('message', __('Role saved')); $this->setData('reload', true); } } $this->setData('uri', tao_helpers_Uri::encode($role->getUri())); $this->setData('classUri', tao_helpers_Uri::encode($clazz->getUri())); $this->setData('formTitle', 'Edit Role'); $this->setData('myForm', $myForm->render()); $this->setView('roles/form.tpl'); }
/** * Uninclude a Role from antother Role. * * @access public * @author Jerome Bogaerts, <*****@*****.**> * @param core_kernel_classes_Resource role The Role from which you want to uninclude a Role. * @param core_kernel_classes_Resource roleToUninclude The Role to uninclude. */ public function unincludeRole(core_kernel_classes_Resource $role, core_kernel_classes_Resource $roleToUninclude) { $includesRoleProperty = new core_kernel_classes_Property(PROPERTY_ROLE_INCLUDESROLE); $role->removePropertyValues($includesRoleProperty, array('like' => false, 'pattern' => $roleToUninclude->getUri())); // invalidate cache for the role. if (GENERIS_CACHE_USERS_ROLES == true) { core_kernel_users_Cache::removeIncludedRoles($role); // For each roles that have $role for included role, // remove the cache entry. foreach ($this->getAllRoles() as $r) { $includedRoles = $this->getIncludedRoles($r); if (array_key_exists($role->getUri(), $includedRoles)) { core_kernel_users_Cache::removeIncludedRoles($r); } } } }