Merge branch 'master' of git://github.com/civicrm/civicrm-core into codingstandards-12
[civicrm-core.git] / CRM / Contact / BAO / Group.php
index bc008a1d09d568332a0974501c80a93d5edefedb..b0cea18aa89201e1df4a0b3d5a27b268d5818a04 100644 (file)
@@ -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();
@@ -75,7 +74,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *   Group id.
    *
    * @return NULL
-   * @static
    */
   public static function discard($id) {
     CRM_Utils_Hook::pre('delete', 'Group', $id, CRM_Core_DAO::$_nullArray);
@@ -156,8 +154,8 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *
    * @param int $id
    *   Group id.
-   * @param enum|string $status status of members in group
-   *
+   * @param string $status
+   *   status of members in group
    * @param bool $countChildGroups
    *
    * @return int
@@ -207,7 +205,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));
@@ -229,11 +226,10 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *   Limits the set of groups returned.
    * @param array $returnProperties
    *   Which properties should be included in the returned group objects.
-   *                                       (member_count should be last element.)
-   *
-   * @param NULL $sort
-   * @param NULL $offset
-   * @param NULL $rowCount
+   *   (member_count should be last element.)
+   * @param string $sort
+   * @param int $offset
+   * @param int $rowCount
    *
    * @return array
    *   Array of group objects.
@@ -313,7 +309,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();
@@ -349,11 +344,9 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    * Create a new group
    *
    * @param array $params
-   *   Associative array of parameters.
    *
    * @return CRM_Contact_BAO_Group|NULL
    *   The new group BAO (if created)
-   * @static
    */
   public static function &create(&$params) {
 
@@ -536,7 +529,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'])) {
@@ -566,8 +558,7 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *   Value we want to set the is_active field.
    *
    * @return CRM_Core_DAO|null
-   *   DAO object on sucess, NULL otherwise
-   * @static
+   *   DAO object on success, NULL otherwise
    */
   public static function setIsActive($id, $isActive) {
     return CRM_Core_DAO::setFieldValue('CRM_Contact_DAO_Group', $id, 'is_active', $isActive);
@@ -578,10 +569,9 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *
    * @param string $groupType
    *   Type of group(Access/Mailing) OR the key of the group.
-   * @param bool|\boolen $excludeHidden exclude hidden groups.
+   * @param bool $excludeHidden exclude hidden groups.
    *
    * @return string
-   * @static
    */
   public static function groupTypeCondition($groupType = NULL, $excludeHidden = TRUE) {
     $value = NULL;
@@ -655,7 +645,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);
@@ -976,13 +965,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;
       }