Merge branch 'master' of git://github.com/civicrm/civicrm-core into codingstandards-12
[civicrm-core.git] / CRM / Contact / BAO / Group.php
index f991b47a8919d96cfdb1aa0b3c93d13dd7083e31..b0cea18aa89201e1df4a0b3d5a27b268d5818a04 100644 (file)
@@ -53,8 +53,7 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    * @param array $defaults
    *   (reference ) an assoc array to hold the flattened values.
    *
-   * @return CRM_Contact_BAO_Group object
-   * @static
+   * @return CRM_Contact_BAO_Group
    */
   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,14 +226,13 @@ 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
-   *   of group objects.
+   *   Array of group objects.
    *
    *
    * @todo other BAO functions that use returnProperties (e.g. Query Objects) receive the array flipped & filled with 1s and
@@ -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,10 +344,9 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    * Create a new group
    *
    * @param array $params
-   *   Associative array of parameters.
    *
-   * @return object|NULL      The new group BAO (if created)
-   * @static
+   * @return CRM_Contact_BAO_Group|NULL
+   *   The new group BAO (if created)
    */
   public static function &create(&$params) {
 
@@ -533,8 +527,8 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    * @param array $params
    *   Associative array of parameters.
    *
-   * @return object|NULL      The new group BAO (if created)
-   * @static
+   * @return CRM_Contact_BAO_Group|NULL
+   *   The new group BAO (if created)
    */
   public static function createSmartGroup(&$params) {
     if (!empty($params['formValues'])) {
@@ -563,9 +557,8 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    * @param bool $isActive
    *   Value we want to set the is_active field.
    *
-   * @return Object
-   *   DAO object on sucess, NULL otherwise
-   * @static
+   * @return CRM_Core_DAO|null
+   *   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);
@@ -576,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;
@@ -653,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);
@@ -724,8 +715,8 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
    *
    * @return array
    *   associated array of group list
-   *  -rp = rowcount
-   *  -page= offset
+   *   -rp = rowcount
+   *   -page= offset
    * @todo there seems little reason for the small number of functions that call this to pass in
    * params that then need to be translated in this function since they are coding them when calling
    */
@@ -974,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;
       }