CRM-12525
authorDonald A. Lobo <lobo@civicrm.org>
Sun, 5 May 2013 16:16:46 +0000 (09:16 -0700)
committerDonald A. Lobo <lobo@civicrm.org>
Sun, 5 May 2013 16:16:46 +0000 (09:16 -0700)
----------------------------------------
* CRM-12525: Hidden smart groups show in Groups view
  http://issues.civicrm.org/jira/browse/CRM-12525

CRM/Contact/BAO/GroupContactCache.php

index e9a734560715234da1b7aed895bd2044946cab2e..562f9614fdb06dec99b79b6e6400c5ce40a9f3a6 100644 (file)
@@ -96,8 +96,8 @@ class CRM_Contact_BAO_GroupContactCache extends CRM_Contact_DAO_GroupContactCach
     $query = "
 SELECT  g.id
 FROM    civicrm_group g
-WHERE   ( g.saved_search_id IS NOT NULL OR
-          g.children IS NOT NULL )
+WHERE   ( g.saved_search_id IS NOT NULL OR g.children IS NOT NULL )
+AND     ( g.is_hidden = 0 OR g.is_hidden IS NULL )
 AND     ( g.cache_date IS NULL OR
           ( TIMESTAMPDIFF(MINUTE, g.cache_date, $now) >= $smartGroupCacheTimeout ) OR
           ( $now >= g.refresh_date )
@@ -447,7 +447,17 @@ AND  civicrm_group_contact.group_id = $groupID ";
     return 5;
   }
 
-  static function contactGroup($contactID) {
+  /**
+   * 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
+   *
+   * @param int     $contactID
+   * @param boolean $showHidden - hidden groups are shown only if this flag is set
+   *
+   * @return array an array of groups that this contact belongs to
+   */
+  static function contactGroup($contactID, $showHidden = FALSE) {
     if (empty($contactID)) {
       return;
     }
@@ -461,12 +471,18 @@ AND  civicrm_group_contact.group_id = $groupID ";
 
     self::loadAll();
 
+    $hiddenClause = '';
+    if (!$showHidden) {
+      $hiddenClause = ' AND (g.is_hidden = 0 OR g.is_hidden IS NULL) ';
+    }
+
     $contactIDString = CRM_Core_DAO::escapeString(implode(', ', $contactIDs));
     $sql = "
 SELECT     gc.group_id, gc.contact_id, g.title, g.children, g.description
 FROM       civicrm_group_contact_cache gc
 INNER JOIN civicrm_group g ON g.id = gc.group_id
 WHERE      gc.contact_id IN ($contactIDString)
+           $hiddenClause
 ORDER BY   gc.contact_id, g.children
 ";