CRM-16905 - Sort by count cannot be done with sql
authorColeman Watts <coleman@civicrm.org>
Fri, 24 Jul 2015 20:15:49 +0000 (16:15 -0400)
committerColeman Watts <coleman@civicrm.org>
Fri, 24 Jul 2015 20:15:49 +0000 (16:15 -0400)
CRM/Contact/BAO/Group.php

index 7c268b630a2f9ac7faf9f9e2234c3807485290cf..d63caf2650e435a4039446257731094dc970dd0c 100644 (file)
@@ -795,6 +795,11 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
     $orderBy = ' ORDER BY groups.title asc';
     if (!empty($params['sort'])) {
       $orderBy = ' ORDER BY ' . CRM_Utils_Type::escape($params['sort'], 'String');
+
+      // CRM-16905 - Sort by count cannot be done with sql
+      if (strpos($params['sort'], 'count') === 0) {
+        $orderBy = $limit = '';
+      }
     }
 
     $select = $from = $where = "";
@@ -976,6 +981,17 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
       }
     }
 
+    // CRM-16905 - Sort by count cannot be done with sql
+    if (!empty($params['sort']) && strpos($params['sort'], 'count') === 0) {
+      usort($values, function($a, $b) {
+        return $a['count'] - $b['count'];
+      });
+      if (strpos($params['sort'], 'desc')) {
+        $values = array_reverse($values, TRUE);
+      }
+      return array_slice($values, $params['offset'], $params['rowCount']);
+    }
+
     return $values;
   }