Merge pull request #6091 from davecivicrm/CRM-16747
[civicrm-core.git] / CRM / Contact / BAO / GroupContactCache.php
index 32eef80a54d9422f4fac1aa810c311575790f1d1..a1cf6d594e87940aa3b09b1a5c1415bf47c97f06 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
+ * @copyright CiviCRM LLC (c) 2004-2015
  * $Id$
  *
  */
@@ -43,7 +43,7 @@ class CRM_Contact_BAO_GroupContactCache extends CRM_Contact_DAO_GroupContactCach
    * @param $groupIDs
    *   Of group that we are checking against.
    *
-   * @return boolean
+   * @return bool
    *   TRUE if we did not regenerate, FALSE if we did
    */
   public static function check($groupIDs) {
@@ -65,7 +65,6 @@ class CRM_Contact_BAO_GroupContactCache extends CRM_Contact_DAO_GroupContactCach
    *
    * @return string
    *   the sql query which lists the groups that need to be refreshed
-   * @static
    */
   public static function groupRefreshedClause($groupIDClause = NULL, $includeHiddenGroups = FALSE) {
     $smartGroupCacheTimeout = self::smartGroupCacheTimeout();
@@ -105,7 +104,6 @@ AND     ( g.cache_date IS NULL OR
    *
    * @return string
    *   the sql query which lists the groups that need to be refreshed
-   * @static
    */
   public static function shouldGroupBeRefreshed($groupID, $includeHiddenGroups = FALSE) {
     $query = self::groupRefreshedClause("g.id = %1", $includeHiddenGroups);
@@ -119,12 +117,12 @@ AND     ( g.cache_date IS NULL OR
    * Check to see if we have cache entries for this group
    * if not, regenerate, else return
    *
-   * @param int /array $groupID groupID of group that we are checking against
+   * @param int /array $groupIDs groupIDs of group that we are checking against
    *                           if empty, all groups are checked
    * @param int $limit
    *   Limits the number of groups we evaluate.
    *
-   * @return boolean
+   * @return bool
    *   TRUE if we did not regenerate, FALSE if we did
    */
   public static function loadAll($groupIDs = NULL, $limit = 0) {
@@ -246,7 +244,7 @@ AND    g.refresh_date IS NULL
   }
 
   /**
-   * Change the cache_date
+   * Change the cache_date.
    *
    * @param array $groupID
    * @param bool $processed
@@ -275,7 +273,7 @@ WHERE  id IN ( $groupIDs )
   }
 
   /**
-   * Removes all the cache entries pertaining to a specific group
+   * Removes all the cache entries pertaining to a specific group.
    * If no groupID is passed in, removes cache entries for all groups
    * Has an optimization to bypass repeated invocations of this function.
    * Note that this function is an advisory, i.e. the removal respects the
@@ -288,7 +286,6 @@ WHERE  id IN ( $groupIDs )
    *   run the function exactly once for all groups.
    *
    * @return void
-   * @static
    */
   public static function remove($groupID = NULL, $onceOnly = TRUE) {
     static $invoked = FALSE;
@@ -397,7 +394,7 @@ WHERE  id = %1
   }
 
   /**
-   * Removes one or more contacts from the smart group cache
+   * Removes one or more contacts from the smart group cache.
    * @param int|array $cid
    * @param int $groupId
    * @return bool
@@ -422,7 +419,7 @@ WHERE  id = %1
   }
 
   /**
-   * Load the smart group cache for a saved search
+   * Load the smart group cache for a saved search.
    *
    * @param object $group
    *   The smart group that needs to be loaded.
@@ -437,8 +434,7 @@ WHERE  id = %1
     }
 
     // grab a lock so other processes dont compete and do the same query
-    $lockName = "civicrm.group.{$groupID}";
-    $lock = new CRM_Core_Lock($lockName);
+    $lock = Civi\Core\Container::singleton()->get('lockManager')->acquire("data.core.group.{$groupID}");
     if (!$lock->isAcquired()) {
       // this can cause inconsistent results since we dont know if the other process
       // will fill up the cache before our calling routine needs it.
@@ -471,7 +467,6 @@ WHERE  id = %1
         CRM_Contact_BAO_ProximityQuery::fixInputParams($ssParams);
       }
 
-
       $returnProperties = array();
       if (CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_SavedSearch', $savedSearchID, 'mapping_id')) {
         $fv = CRM_Contact_BAO_SavedSearch::getFormValues($savedSearchID);
@@ -484,8 +479,7 @@ WHERE  id = %1
         // we split it up and store custom class
         // so temp tables are not destroyed if they are used
         // hence customClass is defined above at top of function
-        $customClass =
-          CRM_Contact_BAO_SearchCustom::customClass($ssParams['customSearchID'], $savedSearchID);
+        $customClass = CRM_Contact_BAO_SearchCustom::customClass($ssParams['customSearchID'], $savedSearchID);
         $searchSQL = $customClass->contactIDs();
         $searchSQL = str_replace('ORDER BY contact_a.id ASC', '', $searchSQL);
         $idName = 'contact_id';
@@ -493,8 +487,8 @@ WHERE  id = %1
       else {
         $formValues = CRM_Contact_BAO_SavedSearch::getFormValues($savedSearchID);
 
-        $query =
-          new CRM_Contact_BAO_Query(
+        $query
+          new CRM_Contact_BAO_Query(
             $ssParams, $returnProperties, NULL,
             FALSE, FALSE, 1,
             TRUE, TRUE,
@@ -504,8 +498,8 @@ WHERE  id = %1
           );
         $query->_useDistinct = FALSE;
         $query->_useGroupBy = FALSE;
-        $searchSQL =
-          $query->searchQuery(
+        $searchSQL
+          $query->searchQuery(
             0, 0, NULL,
             FALSE, FALSE,
             FALSE, TRUE,
@@ -548,7 +542,7 @@ WHERE  civicrm_group_contact.status = 'Added'
         "INSERT IGNORE INTO civicrm_group_contact_cache (contact_id, group_id)
         SELECT DISTINCT $idName, group_id FROM $tempTable
       ");
-      CRM_Core_DAO::executeQuery(" DROP TABLE $tempTable");
+      CRM_Core_DAO::executeQuery(" DROP TEMPORARY TABLE $tempTable");
     }
 
     self::updateCacheTime($groupIDs, $processed);
@@ -605,7 +599,7 @@ AND  civicrm_group_contact.group_id = $groupID ";
   }
 
   /**
-   * Get all the smart groups that this contact belongs to
+   * Get all the smart groups that this contact belongs to.
    * Note that this could potentially be a super slow function since
    * it ensure that all contact groups are loaded in the cache
    *
@@ -618,7 +612,7 @@ AND  civicrm_group_contact.group_id = $groupID ";
    */
   public static function contactGroup($contactID, $showHidden = FALSE) {
     if (empty($contactID)) {
-      return;
+      return NULL;
     }
 
     if (is_array($contactID)) {
@@ -657,12 +651,12 @@ ORDER BY   gc.contact_id, g.children
       }
       $prevContactID = $dao->contact_id;
       if (!array_key_exists($dao->contact_id, $contactGroup)) {
-        $contactGroup[$dao->contact_id] =
-          array('group' => array(), 'groupTitle' => array());
+        $contactGroup[$dao->contact_id]
+          array('group' => array(), 'groupTitle' => array());
       }
 
-      $contactGroup[$dao->contact_id]['group'][] =
-        array(
+      $contactGroup[$dao->contact_id]['group'][]
+        array(
           'id' => $dao->group_id,
           'title' => $dao->title,
           'description' => $dao->description,