fix error where 4.6 change was not merged correctly to master.
[civicrm-core.git] / CRM / Core / BAO / Cache.php
index 85edce55a70ca38360fc3da7ece8612eabb9c02d..dab56685d80cc2f0dcce0361c038b8208643c2e0 100644 (file)
@@ -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.                                    |
  |                                                                    |
  | 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);
     }
   }
-}
 
+}