/** * tear down tests */ protected function tearDown() { parent::tearDown(); Tinebase_FileSystem::getInstance()->clearStatCache(); Tinebase_FileSystem::getInstance()->clearDeletedFilesFromFilesystem(); Tinebase_Cache_PerRequest::getInstance()->reset(); }
/** * get not disabled users * */ public function testGetNotDisabledUsers() { $user1 = Tinebase_User::getInstance()->getUserByLoginName('jsmith'); $user2 = Tinebase_User::getInstance()->getUserByLoginName('pwulf'); Tinebase_User::getInstance()->setStatus($user2, 'enabled'); $container = Tinebase_Container::getInstance()->getPersonalContainer($user1, 'Calendar', $user1, Tinebase_Model_Grants::GRANT_READ); $oldGrants = Tinebase_Container::getInstance()->getGrantsOfContainer($container->getFirstRecord()->id, TRUE); $newGrants = new Tinebase_Record_RecordSet('Tinebase_Model_Grants'); $newGrants->addRecord(new Tinebase_Model_Grants(array('account_id' => $user1->accountId, 'account_type' => 'user', Tinebase_Model_Grants::GRANT_READ => true, Tinebase_Model_Grants::GRANT_ADD => true, Tinebase_Model_Grants::GRANT_EDIT => true, Tinebase_Model_Grants::GRANT_DELETE => true, Tinebase_Model_Grants::GRANT_ADMIN => true))); $newGrants->addRecord(new Tinebase_Model_Grants(array('account_id' => $user2->accountId, 'account_type' => 'user', Tinebase_Model_Grants::GRANT_READ => true, Tinebase_Model_Grants::GRANT_ADD => true, Tinebase_Model_Grants::GRANT_EDIT => true, Tinebase_Model_Grants::GRANT_DELETE => true, Tinebase_Model_Grants::GRANT_ADMIN => true))); Tinebase_Container::getInstance()->setGrants($container->getFirstRecord()->id, $newGrants, TRUE); $otherUsers = Tinebase_Container::getInstance()->getOtherUsers($user1, 'Calendar', array(Tinebase_Model_Grants::GRANT_READ)); $this->assertEquals(1, $otherUsers->filter('accountId', $user2->accountId)->count()); Tinebase_User::getInstance()->setStatus($user2, 'disabled'); Tinebase_Cache_PerRequest::getInstance()->reset(); $otherUsers = Tinebase_Container::getInstance()->getOtherUsers($user1, 'Calendar', array(Tinebase_Model_Grants::GRANT_READ)); Tinebase_User::getInstance()->setStatus($user2, 'enabled'); Tinebase_Container::getInstance()->setGrants($container->getFirstRecord()->id, $oldGrants, TRUE); $this->assertEquals(0, $otherUsers->filter('accountId', $user2->accountId)->count()); }
/** * tear down tests */ protected function tearDown() { if (Tinebase_User::getConfiguredBackend() === Tinebase_User::LDAP) { $this->_deleteUsers(); $this->_deleteGroups(); } if ($this->_transactionId) { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Rolling back test transaction'); } Tinebase_TransactionManager::getInstance()->rollBack(); } Addressbook_Controller_Contact::getInstance()->setGeoDataForContacts(true); if ($this->_originalTestUser instanceof Tinebase_Model_User) { Tinebase_Core::set(Tinebase_Core::USER, $this->_originalTestUser); } if ($this->_invalidateRolesCache) { Tinebase_Acl_Roles::getInstance()->resetClassCache(); } Tinebase_Cache_PerRequest::getInstance()->reset(); $this->_releaseDBLocks(); }
/** * reset class cache * * @param string $method * @return Tinebase_Backend_Sql_Abstract */ public function resetClassCache($method = null) { Tinebase_Cache_PerRequest::getInstance()->reset($this->_getInClassCacheIdentifier(), $method); return $this; }
/** * get describe table from metadata cache * * @param string $tableName * @param Zend_Db_Adapter_Abstract $db * @return array */ public static function getTableDescriptionFromCache($tableName, $db = NULL) { if ($db === NULL) { $db = Tinebase_Core::getDb(); } $dbConfig = $db->getConfig(); $cacheId = md5($dbConfig['host'] . $dbConfig['dbname'] . $tableName); // try to get description from in-memory caches first try { return Tinebase_Cache_PerRequest::getInstance()->load(__CLASS__, __METHOD__, $cacheId, false); } catch (Tinebase_Exception_NotFound $tenf) { // try to get description from APC if (function_exists('apc_fetch')) { // prefix with applications hash, as this hash changes if an application got updated $apcCacheId = Tinebase_Application::getInstance()->getApplicationsHash() . $cacheId; if ($result = apc_fetch($apcCacheId)) { Tinebase_Cache_PerRequest::getInstance()->save(__CLASS__, __METHOD__, $cacheId, $result, false); return $result; } } } // try to get description from persistent cache try { return Tinebase_Cache_PerRequest::getInstance()->load(__CLASS__, __METHOD__, $cacheId, Tinebase_Cache_PerRequest::VISIBILITY_SHARED); } catch (Tinebase_Exception_NotFound $tenf) { // do nothing } // read description from database $result = $db->describeTable($tableName); // if table does not exist (yet), $result is an empty array if (count($result) > 0) { // save result for next request Tinebase_Cache_PerRequest::getInstance()->save(__CLASS__, __METHOD__, $cacheId, $result, Tinebase_Cache_PerRequest::VISIBILITY_SHARED); // if APC extension is installed also store in APC if (function_exists('apc_store')) { /** @noinspection PhpUndefinedVariableInspection */ apc_store($apcCacheId, $result, 3600); } } return $result; }
/** * reset class cache * * @param string $method * @return Tinebase_Application */ public function resetClassCache($method = null) { Tinebase_Cache_PerRequest::getInstance()->reset(__CLASS__, $method); return $this; }
/** * the singleton pattern * * @return Tinebase_Cache_PerRequest */ public static function getInstance() { if (self::$_instance === NULL) { self::$_instance = new Tinebase_Cache_PerRequest(); } return self::$_instance; }
/** * returns true if a certain feature is enabled * * @param string $featureName * @return boolean */ public function featureEnabled($featureName) { $cacheId = $this->_appName; try { $features = Tinebase_Cache_PerRequest::getInstance()->load(__CLASS__, __METHOD__, $cacheId); } catch (Tinebase_Exception_NotFound $tenf) { $features = $this->get(self::ENABLED_FEATURES); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Features config of app ' . $this->_appName . ': ' . print_r($features->toArray(), true)); } Tinebase_Cache_PerRequest::getInstance()->save(__CLASS__, __METHOD__, $cacheId, $features); } if (isset($features->{$featureName})) { return $features->{$featureName}; } return false; }
/** * Tears down the fixture * This method is called after a test is executed. * * @access protected */ protected function tearDown() { parent::tearDown(); Tinebase_Cache_PerRequest::getInstance()->setPersistentCacheMethods('Tinebase_Container', array()); Tinebase_Cache_PerRequest::getInstance()->reset('Tinebase_Container'); }
/** * (non-PHPdoc) * @see Sabre\DAVACL\IPrincipalBackend::getGroupMembership() */ public function getGroupMembership($principal) { $result = array(); list($prefix, $contactId) = \Sabre\DAV\URLUtil::splitPath($principal); switch ($prefix) { case self::PREFIX_GROUPS: // @TODO implement? break; case self::PREFIX_USERS: if ($contactId !== self::SHARED) { $classCacheId = $principal; try { return Tinebase_Cache_PerRequest::getInstance()->load(__CLASS__, __FUNCTION__, $classCacheId); } catch (Tinebase_Exception_NotFound $tenf) { // continue... } $cacheId = __FUNCTION__ . sha1($classCacheId); // try to load from cache $cache = Tinebase_Core::getCache(); $result = $cache->load($cacheId); if ($result !== FALSE) { Tinebase_Cache_PerRequest::getInstance()->save(__CLASS__, __FUNCTION__, $classCacheId, $result); return $result; } $result = array(); $user = Tinebase_User::getInstance()->getUserByPropertyFromSqlBackend('contactId', $contactId); $groupIds = Tinebase_Group::getInstance()->getGroupMemberships($user); $groups = Tinebase_Group::getInstance()->getMultiple($groupIds); foreach ($groups as $group) { if ($group->list_id && $group->visibility == Tinebase_Model_Group::VISIBILITY_DISPLAYED) { $result[] = self::PREFIX_GROUPS . '/' . $group->list_id; } } if (Tinebase_Core::getUser()->hasRight('Calendar', Tinebase_Acl_Rights::RUN)) { // return users only, if they have the sync AND read grant set $otherUsers = Tinebase_Container::getInstance()->getOtherUsers($user, 'Calendar', array(Tinebase_Model_Grants::GRANT_SYNC, Tinebase_Model_Grants::GRANT_READ), false, true); foreach ($otherUsers as $u) { if ($u->contact_id && $u->visibility == Tinebase_Model_User::VISIBILITY_DISPLAYED) { $result[] = self::PREFIX_USERS . '/' . $u->contact_id . '/calendar-proxy-write'; } } // return containers only, if the user has the sync AND read grant set $sharedContainers = Tinebase_Container::getInstance()->getSharedContainer($user, 'Calendar', array(Tinebase_Model_Grants::GRANT_SYNC, Tinebase_Model_Grants::GRANT_READ), false, true); if ($sharedContainers->count() > 0) { $result[] = self::PREFIX_USERS . '/' . self::SHARED . '/calendar-proxy-write'; } } Tinebase_Cache_PerRequest::getInstance()->save(__CLASS__, __FUNCTION__, $classCacheId, $result); $cache->save($result, $cacheId, array(), 60 * 3); } break; } return $result; }