X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FBAO%2FCache.php;h=dab56685d80cc2f0dcce0361c038b8208643c2e0;hb=225584c91fea180fc9e06c9171f08b7f222ebac1;hp=85edce55a70ca38360fc3da7ece8612eabb9c02d;hpb=347185d7709adf00659d042b2fa98b93f03f2672;p=civicrm-core.git diff --git a/CRM/Core/BAO/Cache.php b/CRM/Core/BAO/Cache.php index 85edce55a7..dab56685d8 100644 --- a/CRM/Core/BAO/Cache.php +++ b/CRM/Core/BAO/Cache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.6 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2014 | + | Copyright CiviCRM LLC (c) 2004-2015 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,14 +23,6 @@ | GNU Affero General Public License or the licensing of CiviCRM, | | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ -*/ - -/** - * - * @package CRM - * @copyright CiviCRM LLC (c) 2004-2014 - * $Id$ - * */ /** @@ -52,17 +44,19 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { static $_cache = NULL; /** - * Retrieve an item from the DB cache + * Retrieve an item from the DB cache. * - * @param string $group (required) The group name of the item - * @param string $path (required) The path under which this item is stored - * @param int $componentID The optional component ID (so componenets can share the same name space) + * @param string $group + * (required) The group name of the item. + * @param string $path + * (required) The path under which this item is stored. + * @param int $componentID + * The optional component ID (so componenets can share the same name space). * - * @return object The data if present in cache, else null - * @static - * @access public + * @return object + * The data if present in cache, else null */ - static function &getItem($group, $path, $componentID = NULL) { + public static function &getItem($group, $path, $componentID = NULL) { if (self::$_cache === NULL) { self::$_cache = array(); } @@ -74,8 +68,8 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { if (!self::$_cache[$argString]) { $dao = new CRM_Core_DAO_Cache(); - $dao->group_name = $group; - $dao->path = $path; + $dao->group_name = $group; + $dao->path = $path; $dao->component_id = $componentID; $data = NULL; @@ -91,16 +85,17 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { } /** - * Retrieve all items in a group + * Retrieve all items in a group. * - * @param string $group (required) The group name of the item - * @param int $componentID The optional component ID (so componenets can share the same name space) + * @param string $group + * (required) The group name of the item. + * @param int $componentID + * The optional component ID (so componenets can share the same name space). * - * @return object The data if present in cache, else null - * @static - * @access public + * @return object + * The data if present in cache, else null */ - static function &getItems($group, $componentID = NULL) { + public static function &getItems($group, $componentID = NULL) { if (self::$_cache === NULL) { self::$_cache = array(); } @@ -112,11 +107,11 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { if (!self::$_cache[$argString]) { $dao = new CRM_Core_DAO_Cache(); - $dao->group_name = $group; + $dao->group_name = $group; $dao->component_id = $componentID; $dao->find(); - $result = array(); // array($path => $data) + $result = array(); while ($dao->fetch()) { $result[$dao->path] = unserialize($dao->data); } @@ -131,26 +126,26 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { } /** - * Store an item in the DB cache + * Store an item in the DB cache. * - * @param object $data (required) A reference to the data that will be serialized and stored - * @param string $group (required) The group name of the item - * @param string $path (required) The path under which this item is stored - * @param int $componentID The optional component ID (so componenets can share the same name space) - * - * @return void - * @static - * @access public + * @param object $data + * (required) A reference to the data that will be serialized and stored. + * @param string $group + * (required) The group name of the item. + * @param string $path + * (required) The path under which this item is stored. + * @param int $componentID + * The optional component ID (so componenets can share the same name space). */ - static function setItem(&$data, $group, $path, $componentID = NULL) { + public static function setItem(&$data, $group, $path, $componentID = NULL) { if (self::$_cache === NULL) { self::$_cache = array(); } $dao = new CRM_Core_DAO_Cache(); - $dao->group_name = $group; - $dao->path = $path; + $dao->group_name = $group; + $dao->path = $path; $dao->component_id = $componentID; // get a lock so that multiple ajax requests on the same page @@ -185,18 +180,15 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { } /** - * Delete all the cache elements that belong to a group OR - * delete the entire cache if group is not specified + * Delete all the cache elements that belong to a group OR delete the entire cache if group is not specified. * - * @param string $group The group name of the entries to be deleted - * @param string $path path of the item that needs to be deleted - * @param bool|\booleab $clearAll clear all caches - * - * @return void - * @static - * @access public + * @param string $group + * The group name of the entries to be deleted. + * @param string $path + * Path of the item that needs to be deleted. + * @param bool $clearAll clear all caches */ - static function deleteGroup($group = NULL, $path = NULL, $clearAll = TRUE) { + public static function deleteGroup($group = NULL, $path = NULL, $clearAll = TRUE) { $dao = new CRM_Core_DAO_Cache(); if (!empty($group)) { @@ -222,66 +214,65 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { * The next two functions are internal functions used to store and retrieve session from * the database cache. This keeps the session to a limited size and allows us to * create separate session scopes for each form in a tab - * */ /** * This function takes entries from the session array and stores it in the cache. + * * It also deletes the entries from the $_SESSION object (for a smaller session size) * - * @param array $names Array of session values that should be persisted + * @param array $names + * Array of session values that should be persisted. * This is either a form name + qfKey or just a form name * (in the case of profile) - * @param boolean $resetSession Should session state be reset on completion of DB store? - * - * @return void - * @static - * @access private + * @param bool $resetSession + * Should session state be reset on completion of DB store?. */ - static function storeSessionToCache($names, $resetSession = TRUE) { + public static function storeSessionToCache($names, $resetSession = TRUE) { foreach ($names as $key => $sessionName) { if (is_array($sessionName)) { - $value = null; + $value = NULL; if (!empty($_SESSION[$sessionName[0]][$sessionName[1]])) { $value = $_SESSION[$sessionName[0]][$sessionName[1]]; } self::setItem($value, 'CiviCRM Session', "{$sessionName[0]}_{$sessionName[1]}"); - if ($resetSession) { - $_SESSION[$sessionName[0]][$sessionName[1]] = NULL; - unset($_SESSION[$sessionName[0]][$sessionName[1]]); - } + if ($resetSession) { + $_SESSION[$sessionName[0]][$sessionName[1]] = NULL; + unset($_SESSION[$sessionName[0]][$sessionName[1]]); } + } else { - $value = null; + $value = NULL; if (!empty($_SESSION[$sessionName])) { $value = $_SESSION[$sessionName]; } self::setItem($value, 'CiviCRM Session', $sessionName); - if ($resetSession) { - $_SESSION[$sessionName] = NULL; - unset($_SESSION[$sessionName]); - } + if ($resetSession) { + $_SESSION[$sessionName] = NULL; + unset($_SESSION[$sessionName]); } } + } self::cleanup(); } /* Retrieve the session values from the cache and populate the $_SESSION array - * - * @param array $names Array of session values that should be persisted - * This is either a form name + qfKey or just a form name - * (in the case of profile) - * - * @return void - * @static - * @access private - */ + * + * @param array $names + * Array of session values that should be persisted. + * This is either a form name + qfKey or just a form name + * (in the case of profile) + * + * @return void + */ /** + * Restore session from cache. + * * @param string $names */ - static function restoreSessionFromCache($names) { + public static function restoreSessionFromCache($names) { foreach ($names as $key => $sessionName) { if (is_array($sessionName)) { $value = self::getItem('CiviCRM Session', @@ -303,18 +294,16 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { } /** - * Do periodic cleanup of the CiviCRM session table. Also delete all session cache entries - * which are a couple of days old. This keeps the session cache to a manageable size + * Do periodic cleanup of the CiviCRM session table. + * + * Also delete all session cache entries which are a couple of days old. + * This keeps the session cache to a manageable size * * @param bool $session * @param bool $table * @param bool $prevNext - * - * @return void - * @static - * @access private */ - static function cleanup($session = false, $table = false, $prevNext = false) { + public static function cleanup($session = FALSE, $table = FALSE, $prevNext = FALSE) { // clean up the session cache every $cacheCleanUpNumber probabilistically $cleanUpNumber = 757; @@ -323,66 +312,46 @@ class CRM_Core_BAO_Cache extends CRM_Core_DAO_Cache { $timeIntervalMins = 30; if (mt_rand(1, 100000) % $cleanUpNumber == 0) { - $session = $table = $prevNext = true; + $session = $table = $prevNext = TRUE; } - if ( ! $session && ! $table && ! $prevNext ) { + if (!$session && !$table && !$prevNext) { return; } - if ( $prevNext ) { + if ($prevNext) { // delete all PrevNext caches CRM_Core_BAO_PrevNextCache::cleanupCache(); } - if ( $table ) { - // also delete all the action temp tables - // that were created the same interval ago - $dao = new CRM_Core_DAO(); - $query = " -SELECT TABLE_NAME as tableName -FROM INFORMATION_SCHEMA.TABLES -WHERE TABLE_SCHEMA = %1 -AND ( TABLE_NAME LIKE 'civicrm_task_action_temp_%' - OR TABLE_NAME LIKE 'civicrm_export_temp_%' - OR TABLE_NAME LIKE 'civicrm_import_job_%' ) -AND CREATE_TIME < date_sub( NOW( ), INTERVAL $timeIntervalDays day ) -"; - - $params = array(1 => array($dao->database(), 'String')); - $tableDAO = CRM_Core_DAO::executeQuery($query, $params); - $tables = array(); - while ($tableDAO->fetch()) { - $tables[] = $tableDAO->tableName; - } - if (!empty($tables)) { - $table = implode(',', $tables); - // drop leftover temporary tables - CRM_Core_DAO::executeQuery("DROP TABLE $table"); - } + if ($table) { + CRM_Core_Config::clearTempTables($timeIntervalDays . ' day'); } - if ( $session ) { + if ($session) { // first delete all sessions which are related to any potential transaction // page $transactionPages = array( - 'CRM_Contribute_Controller_Contribution', - 'CRM_Event_Controller_Registration', - ); + 'CRM_Contribute_Controller_Contribution', + 'CRM_Event_Controller_Registration', + ); $params = array( - 1 => array(date('Y-m-d H:i:s', time() - $timeIntervalMins * 60), 'String'), + 1 => array( + date('Y-m-d H:i:s', time() - $timeIntervalMins * 60), + 'String', + ), ); foreach ($transactionPages as $trPage) { $params[] = array("%${trPage}%", 'String'); - $where[] = 'path LIKE %' . sizeof($params); + $where[] = 'path LIKE %' . count($params); } $sql = " DELETE FROM civicrm_cache WHERE group_name = 'CiviCRM Session' AND created_date <= %1 -AND (" . implode(' OR ', $where) . ")"; +AND (" . implode(' OR ', $where) . ")"; CRM_Core_DAO::executeQuery($sql, $params); $sql = " @@ -393,5 +362,5 @@ AND created_date < date_sub( NOW( ), INTERVAL $timeIntervalDays DAY ) CRM_Core_DAO::executeQuery($sql); } } -} +}