INFRA-132 - Misc
[civicrm-core.git] / CRM / Contact / BAO / Group.php
index 0ff3c40a6b6170de1b204c186d601691f7dfc9a0..e645f4c096084d1fa269881d54fd92becdcbfe1d 100644 (file)
@@ -23,7 +23,7 @@
   | GNU Affero General Public License or the licensing of CiviCRM,     |
   | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
   +--------------------------------------------------------------------+
-*/
+ */
 
 /**
  *
@@ -54,7 +54,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *   (reference ) an assoc array to hold the flattened values.
    *
    * @return CRM_Contact_BAO_Group
-   * @static
    */
   public static function retrieve(&$params, &$defaults) {
     $group = new CRM_Contact_DAO_Group();
@@ -73,9 +72,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *
    * @param int $id
    *   Group id.
-   *
-   * @return NULL
-   * @static
    */
   public static function discard($id) {
     CRM_Utils_Hook::pre('delete', 'Group', $id, CRM_Core_DAO::$_nullArray);
@@ -207,7 +203,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *
    * @return array
    *   this array contains the list of members for this group id
-   * @static
    */
   public static function &getMember($groupID, $useCache = TRUE) {
     $params = array(array('group', 'IN', array($groupID => 1), 0, 0));
@@ -241,7 +236,7 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    * @todo other BAO functions that use returnProperties (e.g. Query Objects) receive the array flipped & filled with 1s and
    * add in essential fields (e.g. id). This should follow a regular pattern like the others
    */
-  static function getGroups(
+  public static function getGroups(
     $params = NULL,
     $returnProperties = NULL,
     $sort = NULL,
@@ -312,7 +307,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *
    * @return string
    *   the permission that the user has (or NULL)
-   * @static
    */
   public static function checkPermission($id) {
     $allGroups = CRM_Core_PseudoConstant::allGroup();
@@ -351,7 +345,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *
    * @return CRM_Contact_BAO_Group|NULL
    *   The new group BAO (if created)
-   * @static
    */
   public static function &create(&$params) {
 
@@ -522,8 +515,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
         $this->where_tables = serialize($whereTables);
       }
     }
-
-    return;
   }
 
   /**
@@ -534,7 +525,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *
    * @return CRM_Contact_BAO_Group|NULL
    *   The new group BAO (if created)
-   * @static
    */
   public static function createSmartGroup(&$params) {
     if (!empty($params['formValues'])) {
@@ -565,7 +555,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *
    * @return CRM_Core_DAO|null
    *   DAO object on success, NULL otherwise
-   * @static
    */
   public static function setIsActive($id, $isActive) {
     return CRM_Core_DAO::setFieldValue('CRM_Contact_DAO_Group', $id, 'is_active', $isActive);
@@ -579,7 +568,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    * @param bool $excludeHidden exclude hidden groups.
    *
    * @return string
-   * @static
    */
   public static function groupTypeCondition($groupType = NULL, $excludeHidden = TRUE) {
     $value = NULL;
@@ -653,7 +641,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *
    * @return array
    *   ( smartGroupId, ssId ) smart group id and saved search id
-   * @static
    */
   public static function createHiddenSmartGroup($params) {
     $ssId = CRM_Utils_Array::value('saved_search_id', $params);
@@ -974,13 +961,15 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
       }
     }
 
-    // Get group counts
+    // Get group counts - executes one query for regular groups and another for smart groups
     foreach ($groupsToCount as $table => $groups) {
-      $where = "group_id IN (" . implode(',', $groups) . ")";
+      $where = "g.group_id IN (" . implode(',', $groups) . ")";
       if ($table == 'civicrm_group_contact') {
-        $where .= " AND status = 'Added'";
+        $where .= " AND g.status = 'Added'";
       }
-      $dao = CRM_Core_DAO::executeQuery("SELECT group_id, COUNT(id) as `count` FROM $table WHERE $where GROUP BY group_id");
+      // Exclude deleted contacts
+      $where .= " and c.id = g.contact_id AND c.is_deleted = 0";
+      $dao = CRM_Core_DAO::executeQuery("SELECT g.group_id, COUNT(g.id) as `count` FROM $table g, civicrm_contact c WHERE $where GROUP BY g.group_id");
       while ($dao->fetch()) {
         $values[$dao->group_id]['count'] = $dao->count;
       }
@@ -1001,7 +990,7 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *
    * @return array
    */
-  static function getGroupsHierarchy(
+  public static function getGroupsHierarchy(
     $groupIDs,
     $parents = NULL,
     $spacer = '<span class="child-indent"></span>',
@@ -1231,7 +1220,6 @@ WHERE {$whereClause}";
 
     $clauses[] = self::getPermissionClause();
 
-
     return implode(' AND ', $clauses);
   }
 
@@ -1293,4 +1281,5 @@ WHERE {$whereClause}";
 
     return CRM_Utils_PagerAToZ::getAToZBar($dao, $this->_sortByCharacter, TRUE);
   }
+
 }