First WIP for AJAX cleanup.
authorMattias Michaux <mattias.michaux@gmail.com>
Mon, 25 Apr 2016 15:16:49 +0000 (17:16 +0200)
committerMattias Michaux <mattias.michaux@gmail.com>
Fri, 29 Apr 2016 05:42:04 +0000 (07:42 +0200)
CRM/Activity/Page/AJAX.php
CRM/Core/Page/AJAX.php
CRM/Custom/Page/AJAX.php
CRM/Group/Page/AJAX.php
CRM/Mailing/Page/AJAX.php
CRM/Utils/Type.php

index 4035106c844339f70ea3b5bac458c11d41b7b785..783f262c47f7eda74cbec26afd3156f3c6f26ba8 100644 (file)
  */
 class CRM_Activity_Page_AJAX {
   public static function getCaseActivity() {
+    // Should those params be passed through the getSanitizedParams method?
     $caseID = CRM_Utils_Type::escape($_GET['caseID'], 'Integer');
     $contactID = CRM_Utils_Type::escape($_GET['cid'], 'Integer');
     $userID = CRM_Utils_Type::escape($_GET['userID'], 'Integer');
     $context = CRM_Utils_Type::escape(CRM_Utils_Array::value('context', $_GET), 'String');
 
-    $sortMapper = array();
-    foreach ($_GET['columns'] as $key => $value) {
-      $sortMapper[$key] = $value['data'];
-    };
-
-    $offset = isset($_GET['start']) ? CRM_Utils_Type::escape($_GET['start'], 'Integer') : 0;
-    $rowCount = isset($_GET['length']) ? CRM_Utils_Type::escape($_GET['length'], 'Integer') : 25;
-    $sort = isset($_GET['order'][0]['column']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_GET['order'][0]['column'], 'Integer'), $sortMapper) : NULL;
-    $sortOrder = isset($_GET['order'][0]['dir']) ? CRM_Utils_Type::escape($_GET['order'][0]['dir'], 'String') : 'asc';
+    $optionalParameters = array(
+      'source_contact_id' => 'Integer',
+      'status_id' => 'Integer',
+      'activity_deleted' => 'Boolean',
+      'activity_type_id' => 'Integer',
+      'activity_date_low' => 'String',
+      'activity_date_high' => 'String',
+    );
 
-    $params = $_GET;
-    if ($sort && $sortOrder) {
-      $params['sortBy'] = $sort . ' ' . $sortOrder;
-    }
-    $params['page'] = ($offset / $rowCount) + 1;
-    $params['rp'] = $rowCount;
+    $params = CRM_Core_Page_AJAX::defaultSortAndPagerParams();
+    $params += CRM_Core_Page_AJAX::getSanitizedParams(array(), $optionalParameters);
 
     // get the activities related to given case
     $activities = CRM_Case_BAO_Case::getCaseActivity($caseID, $params, $contactID, $context, $userID);
@@ -66,31 +62,15 @@ class CRM_Activity_Page_AJAX {
   }
 
   public static function getCaseGlobalRelationships() {
-    $sortMapper = array();
-    foreach ($_GET['columns'] as $key => $value) {
-      $sortMapper[$key] = $value['data'];
-    };
-
-    $offset = isset($_GET['start']) ? CRM_Utils_Type::escape($_GET['start'], 'Integer') : 0;
-    $rowCount = isset($_GET['length']) ? CRM_Utils_Type::escape($_GET['length'], 'Integer') : 25;
-    $sort = isset($_GET['order'][0]['column']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_GET['order'][0]['column'], 'Integer'), $sortMapper) : NULL;
-    $sortOrder = isset($_GET['order'][0]['dir']) ? CRM_Utils_Type::escape($_GET['order'][0]['dir'], 'String') : 'asc';
-
-    $params = $_GET;
-
-    // CRM-14466 initialize variable to avoid php notice.
-    $sortSQL = "";
-    if ($sort && $sortOrder) {
-      $sortSQL = $sort . ' ' . $sortOrder;
-    }
+    $params = CRM_Core_Page_AJAX::defaultSortAndPagerParams();
 
     // get the activities related to given case
     $globalGroupInfo = array();
 
     // get the total row count
-    $relGlobalTotalCount = CRM_Case_BAO_Case::getGlobalContacts($globalGroupInfo, NULL, FALSE, TRUE, NULL, NULL);
+    CRM_Case_BAO_Case::getGlobalContacts($globalGroupInfo, NULL, FALSE, TRUE, NULL, NULL);
     // limit the rows
-    $relGlobal = CRM_Case_BAO_Case::getGlobalContacts($globalGroupInfo, $sortSQL, $showLinks = TRUE, FALSE, $offset, $rowCount);
+    $relGlobal = CRM_Case_BAO_Case::getGlobalContacts($globalGroupInfo, $params['sortBy'], $showLinks = TRUE, FALSE, $params['offset'], $params['rp']);
 
     $relationships = array();
     // after sort we can update username fields to be a url
@@ -103,12 +83,10 @@ class CRM_Activity_Page_AJAX {
       array_push($relationships, $relationship);
     }
 
-    $params['total'] = count($relationships);
-
     $globalRelationshipsDT = array();
     $globalRelationshipsDT['data'] = $relationships;
-    $globalRelationshipsDT['recordsTotal'] = $params['total'];
-    $globalRelationshipsDT['recordsFiltered'] = $params['total'];
+    $globalRelationshipsDT['recordsTotal'] = count($relationships);
+    $globalRelationshipsDT['recordsFiltered'] = count($relationships);
 
     CRM_Utils_JSON::output($globalRelationshipsDT);
   }
@@ -117,17 +95,7 @@ class CRM_Activity_Page_AJAX {
     $caseID = CRM_Utils_Type::escape($_GET['caseID'], 'Integer');
     $contactID = CRM_Utils_Type::escape($_GET['cid'], 'Integer');
 
-    $sortMapper = array();
-    foreach ($_GET['columns'] as $key => $value) {
-      $sortMapper[$key] = $value['data'];
-    };
-
-    $offset = isset($_GET['start']) ? CRM_Utils_Type::escape($_GET['start'], 'Integer') : 0;
-    $rowCount = isset($_GET['length']) ? CRM_Utils_Type::escape($_GET['length'], 'Integer') : 25;
-    $sort = isset($_GET['order'][0]['column']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_GET['order'][0]['column'], 'Integer'), $sortMapper) : NULL;
-    $sortOrder = isset($_GET['order'][0]['dir']) ? CRM_Utils_Type::escape($_GET['order'][0]['dir'], 'String') : 'asc';
-
-    $params = $_GET;
+    $params = CRM_Core_Page_AJAX::defaultSortAndPagerParams();
 
     // Retrieve ALL client relationships
     $relClient = CRM_Contact_BAO_Relationship::getRelationship($contactID,
@@ -148,9 +116,9 @@ class CRM_Activity_Page_AJAX {
 
     // sort clientRelationships array using jquery call params
     foreach ($clientRelationships as $key => $row) {
-      $sortArray[$key] = $row[$sort];
+      $sortArray[$key] = $row[$params['_raw_values']['sort'][0]];
     }
-    $sort_type = "SORT_" . strtoupper($sortOrder);
+    $sort_type = "SORT_" . strtoupper($params['_raw_values']['order'][0]);
     array_multisort($sortArray, constant($sort_type), $clientRelationships);
 
     $relationships = array();
@@ -166,12 +134,10 @@ class CRM_Activity_Page_AJAX {
       array_push($relationships, $relationship);
     }
 
-    $params['total'] = count($relationships);
-
     $clientRelationshipsDT = array();
     $clientRelationshipsDT['data'] = $relationships;
-    $clientRelationshipsDT['recordsTotal'] = $params['total'];
-    $clientRelationshipsDT['recordsFiltered'] = $params['total'];
+    $clientRelationshipsDT['recordsTotal'] = count($relationships);
+    $clientRelationshipsDT['recordsFiltered'] = count($relationships);
 
     CRM_Utils_JSON::output($clientRelationshipsDT);
   }
@@ -181,17 +147,7 @@ class CRM_Activity_Page_AJAX {
     $caseID = CRM_Utils_Type::escape($_GET['caseID'], 'Integer');
     $contactID = CRM_Utils_Type::escape($_GET['cid'], 'Integer');
 
-    $sortMapper = array();
-    foreach ($_GET['columns'] as $key => $value) {
-      $sortMapper[$key] = $value['data'];
-    };
-
-    $offset = isset($_GET['start']) ? CRM_Utils_Type::escape($_GET['start'], 'Integer') : 0;
-    $rowCount = isset($_GET['length']) ? CRM_Utils_Type::escape($_GET['length'], 'Integer') : 25;
-    $sort = isset($_GET['order'][0]['column']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_GET['order'][0]['column'], 'Integer'), $sortMapper) : NULL;
-    $sortOrder = isset($_GET['order'][0]['dir']) ? CRM_Utils_Type::escape($_GET['order'][0]['dir'], 'String') : 'asc';
-
-    $params = $_GET;
+    $params = CRM_Core_Page_AJAX::defaultSortAndPagerParams();
 
     $caseRelationships = CRM_Case_BAO_Case::getCaseRoles($contactID, $caseID);
     $caseTypeName = CRM_Case_BAO_Case::getCaseType($caseID, 'name');
@@ -241,9 +197,9 @@ class CRM_Activity_Page_AJAX {
 
     // sort clientRelationships array using jquery call params
     foreach ($caseRelationships as $key => $row) {
-      $sortArray[$key] = $row[$sort];
+      $sortArray[$key] = $row[$params['_raw_values']['sort'][0]];
     }
-    $sort_type = "SORT_" . strtoupper($sortOrder);
+    $sort_type = "SORT_" . strtoupper($params['_raw_values']['order'][0]);
     array_multisort($sortArray, constant($sort_type), $caseRelationships);
 
     $relationships = array();
@@ -434,29 +390,16 @@ class CRM_Activity_Page_AJAX {
   }
 
   public static function getContactActivity() {
-    $contactID = CRM_Utils_Type::escape($_GET['cid'], 'Integer');
-    $context = CRM_Utils_Type::escape(CRM_Utils_Array::value('context', $_GET), 'String');
-
-    $sortMapper = array();
-    foreach ($_GET['columns'] as $key => $value) {
-      $sortMapper[$key] = $value['data'];
-    };
-
-    $offset = isset($_GET['start']) ? CRM_Utils_Type::escape($_GET['start'], 'Integer') : 0;
-    $rowCount = isset($_GET['length']) ? CRM_Utils_Type::escape($_GET['length'], 'Integer') : 25;
-    $sort = isset($_GET['order'][0]['column']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_GET['order'][0]['column'], 'Integer'), $sortMapper) : NULL;
-    $sortOrder = isset($_GET['order'][0]['dir']) ? CRM_Utils_Type::escape($_GET['order'][0]['dir'], 'String') : 'asc';
-
-    $params = $_GET;
-    if ($sort && $sortOrder) {
-      $params['sortBy'] = $sort . ' ' . $sortOrder;
-    }
+    $requiredParameters = array(
+      'cid' => 'Integer',
+    );
 
-    $params['page'] = ($offset / $rowCount) + 1;
-    $params['rp'] = $rowCount;
+    $optionalParameters = array(
+      'context' => 'String',
+    );
 
-    $params['contact_id'] = $contactID;
-    $params['context'] = $context;
+    $params = CRM_Core_Page_AJAX::defaultSortAndPagerParams();
+    $params += CRM_Core_Page_AJAX::getSanitizedParams($requiredParameters, $optionalParameters);
 
     // get the contact activities
     $activities = CRM_Activity_BAO_Activity::getContactActivitySelector($params);
index 9777e8f5d177a2bc5ac103e347f12b59374e7ba7..cfc7e8d909be3e410a470d12e64c519ceea9b44b 100644 (file)
@@ -215,7 +215,9 @@ class CRM_Core_Page_AJAX {
   }
 
   public static function defaultSortAndPagerParams($defaultOffset = 0, $defaultRowCount = 25, $defaultSort = NULL, $defaultsortOrder = 'asc') {
-    $params = array();
+    $params = array(
+      '_raw_values' => array(),
+    );
 
     $sortMapper = array();
     foreach ($_GET['columns'] as $key => $value) {
@@ -230,12 +232,33 @@ class CRM_Core_Page_AJAX {
 
     if ($sort) {
       $params['sortBy'] = "`{$sort}` {$sortOrder}";
+
+      $params['_raw_values']['sort'][0] =  $sort;
+      $params['_raw_values']['order'][0] =  $sortOrder;
     }
 
-    $params['page'] = ($offset / $rowCount) + 1;
+    $params['offset'] = $offset;
     $params['rp'] = $rowCount;
+    $params['page'] = ($offset / $rowCount) + 1;
+
+    return $params;
+  }
+
+  public static function getSanitizedParams($requiredParams = array(), $optionalParams = array()) {
+    $params = array();
+
+    foreach ($requiredParams as $param => $type) {
+      $params[$param] = CRM_Utils_Type::escape(CRM_Utils_Array::value($param, $_GET), $type);
+    }
+
+    foreach ($optionalParams as $param => $type) {
+      if (CRM_Utils_Array::value($param, $_GET)) {
+        $params[$param] = CRM_Utils_Type::escape(CRM_Utils_Array::value($param, $_GET), $type);
+      }
+    }
 
     return $params;
+
   }
 
 }
index 59b5cf28e0d18a795d8d863971e1881b112876db..1bd938996f71f4740ad56f0416998174cafd8c88 100644 (file)
@@ -111,19 +111,11 @@ class CRM_Custom_Page_AJAX {
    *
    */
   public static function getMultiRecordFieldList() {
-    $params = $_GET;
 
-    $offset = isset($_GET['start']) ? CRM_Utils_Type::escape($_GET['start'], 'Integer') : 0;
-    $rowCount = isset($_GET['length']) ? CRM_Utils_Type::escape($_GET['length'], 'Integer') : 10;
-    $sortMapper = array();
-    foreach ($_GET['columns'] as $key => $value) {
-      $sortMapper[$key] = $value['data'];
-    };
-    $sort = isset($_GET['order'][0]['column']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_GET['order'][0]['column'], 'Integer'), $sortMapper) : NULL;
-    $sortOrder = isset($_GET['order'][0]['dir']) ? CRM_Utils_Type::escape($_GET['order'][0]['dir'], 'String') : 'asc';
+    $params = CRM_Core_Page_AJAX::defaultSortAndPagerParams(0, 10);
+    $params['cid'] = CRM_Utils_Type::escape($_GET['cid'], 'Integer');
+    $params['cgid'] = CRM_Utils_Type::escape($_GET['cgid'], 'Integer');
 
-    $params['page'] = ($offset / $rowCount) + 1;
-    $params['rp'] = $rowCount;
     $contactType = CRM_Contact_BAO_Contact::getContactType($params['cid']);
 
     $obj = new CRM_Profile_Page_MultipleRecordFieldsListing();
@@ -133,9 +125,11 @@ class CRM_Custom_Page_AJAX {
     $obj->_contactType = $contactType;
     $obj->_DTparams['offset'] = ($params['page'] - 1) * $params['rp'];
     $obj->_DTparams['rowCount'] = $params['rp'];
-    if ($sort && $sortOrder) {
-      $sort = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField', $sort, 'column_name', 'label');
-      $obj->_DTparams['sort'] = $sort . ' ' . $sortOrder;
+    if (isset($params['_raw_values']['sort'][0])) {
+      // Will this work when CiviCRM is translated, as searching happens on the label column?
+      // I can't find a place where the sort is added, but it should use the name, not the label.
+      $sort = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField', $params['_raw_values']['sort'][0], 'column_name', 'label');
+      $obj->_DTparams['sort'] = $sort . ' ' . $params['_raw_values']['order'][0];
     }
 
     list($fields, $attributes) = $obj->browse();
index 045e6119148ec7a4b5a91b780171cb5a85737421..2050348fa90b03bffabe6be09f346a31b3da6cdf 100644 (file)
@@ -50,24 +50,7 @@ class CRM_Group_Page_AJAX {
       CRM_Utils_JSON::output($groups);
     }
     else {
-
-      $sortMapper = array();
-      $columns = CRM_Utils_Array::value('columns', $params, array());
-      foreach ($columns as $key => $value) {
-        $sortMapper[$key] = $value['data'];
-      }
-
-      $offset = isset($_GET['start']) ? CRM_Utils_Type::escape($_GET['start'], 'Integer') : 0;
-      $rowCount = isset($_GET['length']) ? CRM_Utils_Type::escape($_GET['length'], 'Integer') : 25;
-      $sort = isset($_GET['order'][0]['column']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_GET['order'][0]['column'], 'Integer'), $sortMapper) : NULL;
-      $sortOrder = isset($_GET['order'][0]['dir']) ? CRM_Utils_Type::escape($_GET['order'][0]['dir'], 'String') : 'asc';
-
-      if ($sort && $sortOrder) {
-        $params['sortBy'] = $sort . ' ' . $sortOrder;
-      }
-
-      $params['page'] = ($offset / $rowCount) + 1;
-      $params['rp'] = $rowCount;
+      $params = CRM_Core_Page_AJAX::defaultSortAndPagerParams();
 
       // get group list
       $groups = CRM_Contact_BAO_Group::getGroupListSelector($params);
index 72341aca53ed1e05e3dc9345591aed5f7363a523..3e7f9746df29110823cf3876101c42f17c1ccb72 100644 (file)
@@ -61,27 +61,8 @@ class CRM_Mailing_Page_AJAX {
    * Retrieve contact mailings.
    */
   public static function getContactMailings() {
-    $contactID = CRM_Utils_Type::escape($_GET['contact_id'], 'Integer');
-
-    $sortMapper = array();
-    foreach ($_GET['columns'] as $key => $value) {
-      $sortMapper[$key] = $value['data'];
-    };
-
-    $offset = isset($_GET['start']) ? CRM_Utils_Type::escape($_GET['start'], 'Integer') : 0;
-    $rowCount = isset($_GET['length']) ? CRM_Utils_Type::escape($_GET['length'], 'Integer') : 25;
-    $sort = isset($_GET['order'][0]['column']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_GET['order'][0]['column'], 'Integer'), $sortMapper) : NULL;
-    $sortOrder = isset($_GET['order'][0]['dir']) ? CRM_Utils_Type::escape($_GET['order'][0]['dir'], 'String') : 'asc';
-
-    $params = $_GET;
-    if ($sort && $sortOrder) {
-      $params['sortBy'] = $sort . ' ' . $sortOrder;
-    }
-
-    $params['page'] = ($offset / $rowCount) + 1;
-    $params['rp'] = $rowCount;
-
-    $params['contact_id'] = $contactID;
+    $params = CRM_Core_Page_AJAX::defaultSortAndPagerParams();
+    $params += CRM_Core_Page_AJAX::getSanitizedParams(array('contact_id' => 'Integer'));
 
     // get the contact mailings
     $mailings = CRM_Mailing_BAO_Mailing::getContactMailingSelector($params);
index 25bf54ff2127ae2d486b6ec33ba952c0a9cba37a..50c242df8d59cde161c5ffe684f463736372e582 100644 (file)
@@ -258,7 +258,7 @@ class CRM_Utils_Type {
 
       case 'MysqlColumnNameLoose':
         if (CRM_Utils_Rule::mysqlColumnNameLoose($data)) {
-          return str_replace('`', '', $data);
+          return str_replace('`', '``', $data);
         }
         break;