Initial DataTables refactoring
authorJoseph Lacey <joseph@palantetech.coop>
Mon, 27 Apr 2015 03:46:11 +0000 (21:46 -0600)
committerJoseph Lacey <joseph@palantetech.coop>
Tue, 28 Apr 2015 21:00:43 +0000 (15:00 -0600)
CRM/Activity/BAO/Activity.php
CRM/Activity/Page/AJAX.php
CRM/Contact/BAO/Relationship.php
CRM/Contact/Page/AJAX.php
js/Common.js
templates/CRM/Activity/Selector/Selector.tpl
templates/CRM/Contact/Page/View/RelationshipSelector.tpl
templates/CRM/common/l10n.js.tpl

index f42e030d4484d564d63ce3fe1bd7dea8705f361b..16e0fd8a1534e690d1298989df8b5fb244432cc8 100644 (file)
@@ -2496,80 +2496,85 @@ INNER JOIN  civicrm_option_group grp ON ( grp.id = val.option_group_id AND grp.n
       $mask = CRM_Core_Action::mask($permissions);
 
       foreach ($activities as $activityId => $values) {
-        $contactActivities[$activityId]['activity_type'] = $values['activity_type'];
-        $contactActivities[$activityId]['subject'] = $values['subject'];
+        $activity = array();
+        // add class to this row if overdue
+        $activity['DT_RowClass'] = 'crm-entity';
+        if (CRM_Utils_Date::overdue(CRM_Utils_Array::value('activity_date_time', $values))
+          && CRM_Utils_Array::value('status_id', $values) == 1
+        ) {
+          $activity['DT_RowClass'] .= ' status-overdue';
+        }
+        else {
+          $activity['DT_RowClass'] .= ' status-ontime';
+        }
+
+        $activity['DT_RowData'] = array();
+        $activity['DT_RowData']['entity'] = 'activity'; 
+        $activity['DT_RowData']['id'] = $activityId; 
+
+        $activity['activity_type'] = $values['activity_type'];
+        $activity['subject'] = $values['subject'];
         if ($params['contact_id'] == $values['source_contact_id']) {
-          $contactActivities[$activityId]['source_contact'] = $values['source_contact_name'];
+          $activity['source_contact_name'] = $values['source_contact_name'];
         }
         elseif ($values['source_contact_id']) {
-          $contactActivities[$activityId]['source_contact'] = CRM_Utils_System::href($values['source_contact_name'],
+          $activity['source_contact_name'] = CRM_Utils_System::href($values['source_contact_name'],
             'civicrm/contact/view', "reset=1&cid={$values['source_contact_id']}");
         }
         else {
-          $contactActivities[$activityId]['source_contact'] = '<em>n/a</em>';
+          $activity['source_contact_name'] = '<em>n/a</em>';
         }
 
         if (isset($values['mailingId']) && !empty($values['mailingId'])) {
-          $contactActivities[$activityId]['target_contact'] = CRM_Utils_System::href($values['recipients'],
+          $activity['target_contact'] = CRM_Utils_System::href($values['recipients'],
             'civicrm/mailing/report/event',
             "mid={$values['source_record_id']}&reset=1&event=queue&cid={$params['contact_id']}&context=activitySelector");
         }
         elseif (!empty($values['recipients'])) {
-          $contactActivities[$activityId]['target_contact'] = $values['recipients'];
+          $activity['target_contact_name'] = $values['recipients'];
         }
         elseif (isset($values['target_contact_counter']) && $values['target_contact_counter']) {
-          $contactActivities[$activityId]['target_contact'] = '';
+          $activity['target_contact_name'] = '';
           foreach ($values['target_contact_name'] as $tcID => $tcName) {
-            $contactActivities[$activityId]['target_contact'] .= CRM_Utils_System::href($tcName,
+            $activity['target_contact_name'] .= CRM_Utils_System::href($tcName,
               'civicrm/contact/view', "reset=1&cid={$tcID}");
           }
 
           if ($extraCount = $values['target_contact_counter'] - 1) {
-            $contactActivities[$activityId]['target_contact'] .= ";<br />" . "(" . ts('%1 more', array(1 => $extraCount)) . ")";
+            $activity['target_contact_name'] .= ";<br />" . "(" . ts('%1 more', array(1 => $extraCount)) . ")";
           }
         }
         elseif (!$values['target_contact_name']) {
-          $contactActivities[$activityId]['target_contact'] = '<em>n/a</em>';
+          $activity['target_contact_name'] = '<em>n/a</em>';
         }
 
         if (empty($values['assignee_contact_name'])) {
-          $contactActivities[$activityId]['assignee_contact'] = '<em>n/a</em>';
+          $activity['assignee_contact_name'] = '<em>n/a</em>';
         }
         elseif (!empty($values['assignee_contact_name'])) {
           $count = 0;
-          $contactActivities[$activityId]['assignee_contact'] = '';
+          $activity['assignee_contact_name'] = '';
           foreach ($values['assignee_contact_name'] as $acID => $acName) {
             if ($acID && $count < 5) {
-              $contactActivities[$activityId]['assignee_contact'] .= CRM_Utils_System::href($acName, 'civicrm/contact/view', "reset=1&cid={$acID}");
+              $activity['assignee_contact_name'] .= CRM_Utils_System::href($acName, 'civicrm/contact/view', "reset=1&cid={$acID}");
               $count++;
               if ($count) {
-                $contactActivities[$activityId]['assignee_contact'] .= ";&nbsp;";
+                $activity['assignee_contact_name'] .= ";&nbsp;";
               }
 
               if ($count == 4) {
-                $contactActivities[$activityId]['assignee_contact'] .= "(" . ts('more') . ")";
+                $activity['assignee_contact_name'] .= "(" . ts('more') . ")";
                 break;
               }
             }
           }
         }
 
-        $contactActivities[$activityId]['activity_date'] = CRM_Utils_Date::customFormat($values['activity_date_time']);
-        $contactActivities[$activityId]['status'] = $activityStatus[$values['status_id']];
-
-        // add class to this row if overdue
-        $contactActivities[$activityId]['class'] = '';
-        if (CRM_Utils_Date::overdue(CRM_Utils_Array::value('activity_date_time', $values))
-          && CRM_Utils_Array::value('status_id', $values) == 1
-        ) {
-          $contactActivities[$activityId]['class'] = 'status-overdue';
-        }
-        else {
-          $contactActivities[$activityId]['class'] = 'status-ontime';
-        }
+        $activity['activity_date_time'] = CRM_Utils_Date::customFormat($values['activity_date_time']);
+        $activity['status_id'] = $activityStatus[$values['status_id']];
 
         // build links
-        $contactActivities[$activityId]['links'] = '';
+        $activity['links'] = '';
         $accessMailingReport = FALSE;
         if (!empty($values['mailingId'])) {
           $accessMailingReport = TRUE;
@@ -2584,7 +2589,7 @@ INNER JOIN  civicrm_option_group grp ON ( grp.id = val.option_group_id AND grp.n
 
         $actionMask = array_sum(array_keys($actionLinks)) & $mask;
 
-        $contactActivities[$activityId]['links'] = CRM_Core_Action::formLink($actionLinks,
+        $activity['links'] = CRM_Core_Action::formLink($actionLinks,
           $actionMask,
           array(
             'id' => $values['activity_id'],
@@ -2602,10 +2607,17 @@ INNER JOIN  civicrm_option_group grp ON ( grp.id = val.option_group_id AND grp.n
         if ($values['is_recurring_activity']) {
           $contactActivities[$activityId]['is_recurring_activity'] = CRM_Core_BAO_RecurringEntity::getPositionAndCount($values['activity_id'], 'civicrm_activity');
         }
+
+        array_push($contactActivities, $activity);
       }
     }
 
-    return $contactActivities;
+    $activitiesDT = array();
+    $activitiesDT['data'] = $contactActivities;
+    $activitiesDT['recordsTotal'] = $params['total'];
+    $activitiesDT['recordsFiltered'] = $params['total'];
+
+    return $activitiesDT;
   }
 
   /**
index 9c79eae36c1e2a5e20333cd78edca7b7f775b28c..9f6c7ee94fc9e90576909a7e1e436e2619b0cdba 100644 (file)
@@ -455,26 +455,20 @@ class CRM_Activity_Page_AJAX {
   }
 
   public static function getContactActivity() {
-    $contactID = CRM_Utils_Type::escape($_POST['contact_id'], 'Integer');
+    $contactID = CRM_Utils_Type::escape($_GET['cid'], 'Integer');
     $context = CRM_Utils_Type::escape(CRM_Utils_Array::value('context', $_GET), 'String');
 
-    $sortMapper = array(
-      0 => 'activity_type',
-      1 => 'subject',
-      2 => 'source_contact_name',
-      3 => '',
-      4 => '',
-      5 => 'activity_date_time',
-      6 => 'status_id',
-    );
+    $sortMapper = array();
+    foreach ($_GET['columns'] as $key => $value) {
+      $sortMapper[$key] = $value['data'];
+    };
 
-    $sEcho = CRM_Utils_Type::escape($_REQUEST['sEcho'], 'Integer');
-    $offset = isset($_REQUEST['iDisplayStart']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayStart'], 'Integer') : 0;
-    $rowCount = isset($_REQUEST['iDisplayLength']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayLength'], 'Integer') : 25;
-    $sort = isset($_REQUEST['iSortCol_0']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_REQUEST['iSortCol_0'], 'Integer'), $sortMapper) : NULL;
-    $sortOrder = isset($_REQUEST['sSortDir_0']) ? CRM_Utils_Type::escape($_REQUEST['sSortDir_0'], 'String') : 'asc';
+    $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 = $_POST;
+    $params = $_GET;
     if ($sort && $sortOrder) {
       $params['sortBy'] = $sort . ' ' . $sortOrder;
     }
@@ -530,22 +524,7 @@ class CRM_Activity_Page_AJAX {
       );
     }
 
-    $iFilteredTotal = $iTotal = $params['total'];
-    $selectorElements = array(
-      'activity_type',
-      'subject',
-      'source_contact',
-      'target_contact',
-      'assignee_contact',
-      'activity_date',
-      'status',
-      'links',
-      'class',
-    );
-
-    header('Content-Type: application/json');
-    echo CRM_Utils_JSON::encodeDataTableSelector($activities, $sEcho, $iTotal, $iFilteredTotal, $selectorElements);
-    CRM_Utils_System::civiExit();
+    CRM_Utils_JSON::output($activities);
   }
 
 }
index 83316da013289cc7726cd4e8c314fafe2020d7d1..9d3d710ba004a758b2a33790b9ad91c8665428e9 100644 (file)
@@ -1924,7 +1924,7 @@ AND cc.sort_name LIKE '%$name%'";
           $relationshipStatus, 0, 1, 0, NULL, NULL, $permissionedContacts);
       }
       else {
-        // FIX ME: we cannot directly determine total permissioned relationship, hence re-fire query
+        // FIXME: we cannot directly determine total permissioned relationship, hence re-fire query
         $permissionedRelationships = CRM_Contact_BAO_Relationship::getRelationship($params['contact_id'],
           $relationshipStatus,
           0, 0, 0,
@@ -1935,17 +1935,28 @@ AND cc.sort_name LIKE '%$name%'";
 
       // format params
       foreach ($relationships as $relationshipId => $values) {
+        $relationship = array();
+
+        $relationship['DT_RowClass'] = 'crm-entity';
+        if ($values['is_active'] == 0) {
+          $relationship['DT_RowClass'] .= ' disabled';
+        }
+
+        $relationship['DT_RowData'] = array();
+        $relationship['DT_RowData']['entity'] = 'relationship'; 
+        $relationship['DT_RowData']['id'] = $values['id']; 
+
         //Add image icon for related contacts: CRM-14919
         $icon = CRM_Contact_BAO_Contact_Utils::getImage($values['contact_type'],
           FALSE,
           $values['cid']
         );
-        $contactRelationships[$relationshipId]['name'] = $icon . ' ' . CRM_Utils_System::href(
+        $relationship['sort_name'] = $icon . ' ' . CRM_Utils_System::href(
             $values['name'],
             'civicrm/contact/view',
             "reset=1&cid={$values['cid']}");
 
-        $contactRelationships[$relationshipId]['relation'] = CRM_Utils_System::href(
+        $relationship['relation'] = CRM_Utils_System::href(
           $values['relation'],
           'civicrm/contact/view/rel',
           "action=view&reset=1&cid={$values['cid']}&id={$values['id']}&rtype={$values['rtype']}");
@@ -1954,32 +1965,38 @@ AND cc.sort_name LIKE '%$name%'";
           if (($params['contact_id'] == $values['contact_id_a'] AND $values['is_permission_a_b'] == 1) OR
             ($params['contact_id'] == $values['contact_id_b'] AND $values['is_permission_b_a'] == 1)
           ) {
-            $contactRelationships[$relationshipId]['name'] .= '<span id="permission-a-b" class="crm-marker permission-relationship"> *</span>';
+            $relationship['sort_name'] .= '<span id="permission-a-b" class="crm-marker permission-relationship"> *</span>';
           }
 
           if (($values['cid'] == $values['contact_id_a'] AND $values['is_permission_a_b'] == 1) OR
             ($values['cid'] == $values['contact_id_b'] AND $values['is_permission_b_a'] == 1)
           ) {
-            $contactRelationships[$relationshipId]['relation'] .= '<span id="permission-b-a" class="crm-marker permission-relationship"> *</span>';
+            $relationship['relation'] .= '<span id="permission-b-a" class="crm-marker permission-relationship"> *</span>';
           }
         }
 
         if (!empty($values['description'])) {
-          $contactRelationships[$relationshipId]['relation'] .= "<p class='description'>{$values['description']}</p>";
+          $relationship['relation'] .= "<p class='description'>{$values['description']}</p>";
         }
 
-        $contactRelationships[$relationshipId]['start_date'] = CRM_Utils_Date::customFormat($values['start_date']);
-        $contactRelationships[$relationshipId]['end_date'] = CRM_Utils_Date::customFormat($values['end_date']);
-        $contactRelationships[$relationshipId]['city'] = $values['city'];
-        $contactRelationships[$relationshipId]['state'] = $values['state'];
-        $contactRelationships[$relationshipId]['email'] = $values['email'];
-        $contactRelationships[$relationshipId]['phone'] = $values['phone'];
-        $contactRelationships[$relationshipId]['links'] = $values['action'];
-        $contactRelationships[$relationshipId]['id'] = $values['id'];
-        $contactRelationships[$relationshipId]['is_active'] = $values['is_active'];
+        $relationship['start_date'] = CRM_Utils_Date::customFormat($values['start_date']);
+        $relationship['end_date'] = CRM_Utils_Date::customFormat($values['end_date']);
+        $relationship['city'] = $values['city'];
+        $relationship['state'] = $values['state'];
+        $relationship['email'] = $values['email'];
+        $relationship['phone'] = $values['phone'];
+        $relationship['links'] = $values['action'];
+
+        array_push($contactRelationships, $relationship);
       }
     }
-    return $contactRelationships;
+
+    $relationshipsDT = array();
+    $relationshipsDT['data'] = $contactRelationships;
+    $relationshipsDT['recordsTotal'] = $params['total'];
+    $relationshipsDT['recordsFiltered'] = $params['total'];
+
+    return $relationshipsDT;
   }
 
 }
index 35f485a60a311eb2580e6a831df5f337df7192fd..558e8b043f594bffdcccd68ba8acc7db1c05015a 100644 (file)
@@ -804,34 +804,23 @@ LIMIT {$offset}, {$rowCount}
   public static function getContactRelationships() {
     $contactID = CRM_Utils_Type::escape($_GET['cid'], 'Integer');
     $context = CRM_Utils_Type::escape($_GET['context'], 'String');
-    $relationship_type_id = CRM_Utils_Type::escape(CRM_Utils_Array::value('relationship_type_id', $_GET), 'Integer',
-      FALSE);
+    $relationship_type_id = CRM_Utils_Type::escape(CRM_Utils_Array::value('relationship_type_id', $_GET), 'Integer', FALSE);
 
     if (!CRM_Contact_BAO_Contact_Permission::allow($contactID)) {
       return CRM_Utils_System::permissionDenied();
     }
 
-    $sortMapper = array(
-      0 => 'relation',
-      1 => 'sort_name',
-      2 => 'start_date',
-      3 => 'end_date',
-      4 => 'city',
-      5 => 'state',
-      6 => 'email',
-      7 => 'phone',
-      8 => 'links',
-      9 => '',
-      10 => '',
-    );
+    $sortMapper = array();
+    foreach ($_GET['columns'] as $key => $value) {
+      $sortMapper[$key] = $value['data'];
+    };
 
-    $sEcho = CRM_Utils_Type::escape($_REQUEST['sEcho'], 'Integer');
-    $offset = isset($_REQUEST['iDisplayStart']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayStart'], 'Integer') : 0;
-    $rowCount = isset($_REQUEST['iDisplayLength']) ? CRM_Utils_Type::escape($_REQUEST['iDisplayLength'], 'Integer') : 25;
-    $sort = isset($_REQUEST['iSortCol_0']) ? CRM_Utils_Array::value(CRM_Utils_Type::escape($_REQUEST['iSortCol_0'], 'Integer'), $sortMapper) : NULL;
-    $sortOrder = isset($_REQUEST['sSortDir_0']) ? CRM_Utils_Type::escape($_REQUEST['sSortDir_0'], 'String') : 'asc';
+    $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 = $_POST;
+    $params = $_GET;
     if ($sort && $sortOrder) {
       $params['sortBy'] = $sort . ' ' . $sortOrder;
     }
@@ -848,24 +837,7 @@ LIMIT {$offset}, {$rowCount}
     // get the contact relationships
     $relationships = CRM_Contact_BAO_Relationship::getContactRelationshipSelector($params);
 
-    $iFilteredTotal = $iTotal = $params['total'];
-    $selectorElements = array(
-      'relation',
-      'name',
-      'start_date',
-      'end_date',
-      'city',
-      'state',
-      'email',
-      'phone',
-      'links',
-      'id',
-      'is_active',
-    );
-
-    header('Content-Type: application/json');
-    echo CRM_Utils_JSON::encodeDataTableSelector($relationships, $sEcho, $iTotal, $iFilteredTotal, $selectorElements);
-    CRM_Utils_System::civiExit();
+    CRM_Utils_JSON::output($relationships);
   }
 
 }
index a488acc068b500af5ee81f127a48c0cd914ac50f..0ebd6daa2c12820b2029b3346bb21f370cbb8f90 100644 (file)
@@ -662,6 +662,34 @@ CRM.strings = CRM.strings || {};
     });
   };
 
+  $.fn.crmAjaxTable = function() {
+    return $(this).each(function() {
+      //Declare the defaults for DataTables
+      var defaults = {
+        "processing": true,
+        "serverSide": true,
+        "dom": '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
+        "pageLength": 25,
+        "drawCallback": function(settings) {
+          //Add data attributes to cells
+          $('thead th', settings.nTable).each( function( index ) {
+            $.each(this.attributes, function() {
+              if(this.name.match("^cell-")) {
+                $('tbody td:eq(' + index + ')').attr( this.name.substring(5), this.value );
+              }
+            });
+          });
+          //Reload table after draw
+          $(settings.nTable).trigger('crmLoad');
+        }
+      };
+      //Include any table specific data
+      var settings = $.extend(true, defaults, $(this).data('table'));
+      //Make the DataTables call
+      $(this).DataTable(settings);
+    });
+  };
+
   CRM.utils.formatSelect2Result = function (row) {
     var markup = '<div class="crm-select2-row">';
     if (row.image !== undefined) {
@@ -824,6 +852,8 @@ CRM.strings = CRM.strings || {};
           }
         })
         .find('input.select-row:checked').parents('tr').addClass('crm-row-selected');
+      $('table.crm-sortable', e.target).DataTable();
+      $('table.crm-ajax-table', e.target).crmAjaxTable();
       if ($("input:radio[name=radio_ts]").size() == 1) {
         $("input:radio[name=radio_ts]").prop("checked", true);
       }
index 3c1cbf48805eac63b0abd9ea1af88f21c27cd1a7..8061466bf68ed67752e1774badccfc58c3591cae 100644 (file)
@@ -30,7 +30,7 @@
     {ts}Filter by Activity Type{/ts}</a>
     </div><!-- /.crm-accordion-header -->
     <div class="crm-accordion-body">
-      <div class="no-border form-layout-compressed" id="searchOptions">
+      <div class="no-border form-layout-compressed activity-search-options">
           <div class="crm-contact-form-block-activity_type_filter_id crm-inline-edit-field">
             {$form.activity_type_filter_id.label} {$form.activity_type_filter_id.html|crmAddClass:big}
           </div>
       </div>
     </div><!-- /.crm-accordion-body -->
   </div><!-- /.crm-accordion-wrapper -->
-  <table class="contact-activity-selector-{$context}">
+  <table class="contact-activity-selector-{$context} crm-ajax-table" data-order='[[5,"desc"]]'>
     <thead>
     <tr>
-      <th class='crm-contact-activity-activity_type'>{ts}Type{/ts}</th>
-      <th class='crm-contact-activity_subject'>{ts}Subject{/ts}</th>
-      <th class='crm-contact-activity-source_contact'>{ts}Added By{/ts}</th>
-      <th class='crm-contact-activity-target_contact nosort'>{ts}With{/ts}</th>
-      <th class='crm-contact-activity-assignee_contact nosort'>{ts}Assigned{/ts}</th>
-      <th class='crm-contact-activity-activity_date'>{ts}Date{/ts}</th>
-      <th class='crm-contact-activity-activity_status'>{ts}Status{/ts}</th>
-      <th class='crm-contact-activity-links nosort'>&nbsp;</th>
-      <th class='hiddenElement'>&nbsp;</th>
+      <th data-data="activity_type" class="crm-contact-activity-activity_type">{ts}Type{/ts}</th>
+      <th data-data="subject" cell-class="crmf-subject crm-editable" cell-data-type="text" class="crm-contact-activity_subject">{ts}Subject{/ts}</th>
+      <th data-data="source_contact_name" class="crm-contact-activity-source_contact">{ts}Added By{/ts}</th>
+      <th data-data="target_contact_name" data-orderable="false" class="crm-contact-activity-target_contact">{ts}With{/ts}</th>
+      <th data-data="assignee_contact_name" data-orderable="false" class="crm-contact-activity-assignee_contact">{ts}Assigned{/ts}</th>
+      <th data-data="activity_date_time" class="crm-contact-activity-activity_date">{ts}Date{/ts}</th>
+      <th data-data="status_id" cell-class="crmf-status_id crm-editable" cell-data-type="select" cell-data-refresh="true" class="crm-contact-activity-activity_status">{ts}Status{/ts}</th>
+      <th data-data="links" data-orderable="false" class="crm-contact-activity-links">&nbsp;</th>
     </tr>
     </thead>
   </table>
-</div>
-{include file="CRM/Case/Form/ActivityToCase.tpl" contactID=$contactId}
-{literal}
-<script type="text/javascript">
-var {/literal}{$context}{literal}oTable;
-CRM.$(function($) {
-  var context = {/literal}"{$context}"{literal};
-  var filterSearchOnLoad = false;
-  if (context == 'activity') {
-    filterSearchOnLoad = true;
-  }
-  buildContactActivities{/literal}{$context}{literal}( filterSearchOnLoad );
-
-  $('.crm-activity-selector-'+ context +' #activity_type_filter_id').change( function( ) {
-    buildContactActivities{/literal}{$context}{literal}( true );
-  });
-
-  $('.crm-activity-selector-'+ context +' #activity_type_exclude_filter_id').change( function( ) {
-    buildContactActivities{/literal}{$context}{literal}( true );
-  });
-
-  function buildContactActivities{/literal}{$context}{literal}( filterSearch ) {
-    if ( filterSearch && {/literal}{$context}{literal}oTable ) {
-      {/literal}{$context}{literal}oTable.fnDestroy();
-    }
-
-    var context = {/literal}"{$context}"{literal};
-    var columns = '';
-    var sourceUrl = {/literal}'{crmURL p="civicrm/ajax/contactactivity" h=0 q="snippet=4&context=$context&cid=$contactId"}'{literal};
 
-    var ZeroRecordText = {/literal}'{ts escape="js"}No matches found{/ts}'{literal};
-    if ( $('.crm-activity-selector-'+ context +' select#activity_type_filter_id').val( ) ) {
-      ZeroRecordText += {/literal}'{ts escape="js"} for Activity Type = "{/ts}'{literal} +  $('.crm-activity-selector-'+ context +' select#activity_type_filter_id :selected').text( ) + '"';
-    }
-    else {
-      ZeroRecordText += '.';
-    }
-
-    {/literal}{$context}{literal}oTable = $('.contact-activity-selector-' + context ).dataTable({
-      "bFilter"    : false,
-      "bAutoWidth" : false,
-      "aaSorting"  : [],
-      "aoColumns"  : [
-        {sClass:'crm-contact-activity-activity_type'},
-        {sClass:'crm-contact-activity_subject'},
-        {sClass:'crm-contact-activity-source_contact'},
-        {sClass:'crm-contact-activity-target_contact', bSortable:false},
-        {sClass:'crm-contact-activity-assignee_contact', bSortable:false},
-        {sClass:'crm-contact-activity-activity_date'},
-        {sClass:'crm-contact-activity-activity_status'},
-        {sClass:'crm-contact-activity-links', bSortable:false},
-        {sClass:'hiddenElement', bSortable:false}
-      ],
-      "bProcessing": true,
-      "sPaginationType": "full_numbers",
-      "sDom"       : '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
-      "bServerSide": true,
-      "bJQueryUI": true,
-      "sAjaxSource": sourceUrl,
-      "iDisplayLength": 25,
-      "oLanguage": {
-        "sZeroRecords":  ZeroRecordText,
-        "sProcessing":   {/literal}"{ts escape='js'}Processing...{/ts}"{literal},
-        "sLengthMenu":   {/literal}"{ts escape='js'}Show _MENU_ entries{/ts}"{literal},
-        "sInfo":         {/literal}"{ts escape='js'}Showing _START_ to _END_ of _TOTAL_ entries{/ts}"{literal},
-        "sInfoEmpty":    {/literal}"{ts escape='js'}Showing 0 to 0 of 0 entries{/ts}"{literal},
-        "sInfoFiltered": {/literal}"{ts escape='js'}(filtered from _MAX_ total entries){/ts}"{literal},
-        "sSearch":       {/literal}"{ts escape='js'}Search:{/ts}"{literal},
-        "oPaginate": {
-          "sFirst":    {/literal}"{ts escape='js'}First{/ts}"{literal},
-          "sPrevious": {/literal}"{ts escape='js'}Previous{/ts}"{literal},
-          "sNext":     {/literal}"{ts escape='js'}Next{/ts}"{literal},
-          "sLast":     {/literal}"{ts escape='js'}Last{/ts}"{literal}
-        }
-      },
-      "fnDrawCallback": function() { setSelectorClass{/literal}{$context}{literal}( context ); },
-      "fnServerData": function ( sSource, aoData, fnCallback ) {
-          aoData.push( {name:'contact_id', value: {/literal}{$contactId}{literal}},
-        {name:'admin',   value: {/literal}'{$admin}'{literal}}
-        );
-
-        if ( filterSearch ) {
-          aoData.push(
-            {name:'activity_type_id', value: $('.crm-activity-selector-'+ context +' select#activity_type_filter_id').val()},
-            {name:'activity_type_exclude_id', value: $('.crm-activity-selector-'+ context +' select#activity_type_exclude_filter_id').val()}
-          );
-        }
-        $.ajax( {
-          "dataType": 'json',
-          "type": "POST",
-          "url": sSource,
-          "data": aoData,
-          "success": fnCallback,
-          // CRM-10244
-          "dataFilter": function(data, type) { return data.replace(/[\n\v\t]/g, " "); }
+  {literal}
+    <script type="text/javascript">
+      (function($) {
+        CRM.$('table.contact-activity-selector-activity').data({
+          "ajax": {
+            "url": {/literal}'{crmURL p="civicrm/ajax/contactactivity" h=0 q="snippet=4&context=$context&cid=$contactId"}'{literal},
+            "data": function (d) {
+              d.activity_type_id = $('.crm-activity-selector-activity select#activity_type_filter_id').val(),
+              d.activity_type_exclude_id = $('.crm-activity-selector-activity select#activity_type_exclude_filter_id').val()
+            }
+          }
         });
-      }
-    });
-  }
-
-  function setSelectorClass{/literal}{$context}{literal}( context ) {
-    $('.contact-activity-selector-' + context + ' td:last-child').each( function( ) {
-      $(this).parent().addClass($(this).text() );
-    });
-  }
-});
-</script>
-{/literal}
+        $(function($) {
+          $('.activity-search-options :input').change(function(){
+            CRM.$('.contact-activity-selector-activity').DataTable().draw();
+          });
+        });
+      })(CRM.$);
+    </script>
+  {/literal}
+</div>
+{include file="CRM/Case/Form/ActivityToCase.tpl" contactID=$contactId}
index dd17c8dc9e99e0447089055ff0bc85093b01d665..787a5f43d8bfdb1ad865a93ac8d4fc14234679a5 100644 (file)
 {* relationship selector *}
 
 <div class="crm-contact-relationship-{$context}">
-  <table class="crm-contact-relationship-selector-{$context}">
+  <table class="crm-contact-relationship-selector-{$context} crm-ajax-table" data-page-length='10'>
     <thead>
     <tr>
-      <th class='crm-contact-relationship-type'>{ts}Relationship{/ts}</th>
-      <th class='crm-contact-relationship-contact_name'>&nbsp;</th>
-      <th class='crm-contact-relationship-start_date'>{ts}Start{/ts}</th>
-      <th class='crm-contact-relationship-end_date'>{ts}End{/ts}</th>
-      <th class='crm-contact-relationship-city'>{ts}City{/ts}</th>
-      <th class='crm-contact-relationship-state'>{ts}State/Prov{/ts}</th>
-      <th class='crm-contact-relationship-email'>{ts}Email{/ts}</th>
-      <th class='crm-contact-relationship-phone'>{ts}Phone{/ts}</th>
-      <th class='crm-contact-relationship-links nosort'></th>
+      <th data-data="relation" class='crm-contact-relationship-type'>{ts}Relationship{/ts}</th>
+      <th data-data="sort_name" class='crm-contact-relationship-contact_name'>&nbsp;</th>
+      <th data-data="start_date" class='crm-contact-relationship-start_date'>{ts}Start{/ts}</th>
+      <th data-data="end_date" class='crm-contact-relationship-end_date'>{ts}End{/ts}</th>
+      <th data-data="city" class='crm-contact-relationship-city'>{ts}City{/ts}</th>
+      <th data-data="state" class='crm-contact-relationship-state'>{ts}State/Prov{/ts}</th>
+      <th data-data="email" class='crm-contact-relationship-email'>{ts}Email{/ts}</th>
+      <th data-data="phone" class='crm-contact-relationship-phone'>{ts}Phone{/ts}</th>
+      <th data-data="links" data-orderable="false" class='crm-contact-relationship-links'></th>
     </tr>
     </thead>
   </table>
-</div>
-
-{literal}
-<script type="text/javascript">
-  var {/literal}{$context}{literal}oTable;
-
-  CRM.$(function($) {
-    buildContactRelationships{/literal}{$context}{literal}();
-    function buildContactRelationships{/literal}{$context}{literal}() {
-      var context = {/literal}"{$context}"{literal};
-      var sourceUrl = {/literal}'{crmURL p="civicrm/ajax/contactrelationships" h=0 q="context=$context&cid=$contactId"}'{literal};
 
-      if (context == 'user') {
-        var ZeroRecordText = {/literal}'{ts escape="js"}There are no related contacts / organizations on record for you.{/ts}'{literal};
-      }
-      else if (context == 'past') {
-        var ZeroRecordText = {/literal}'{ts escape="js"}There are no past / disabled relationships for this contact.{/ts}'{literal};
-      }
-      else {
-        var ZeroRecordText = {/literal}'{ts escape="js"}There are no relationships entered for this contact.{/ts}'{literal};
-      }
-
-      {/literal}{$context}{literal}oTable = $('table.crm-contact-relationship-selector-' + context).dataTable({
-        "bFilter": false,
-        "bAutoWidth": false,
-        "aaSorting": [],
-        "aoColumns": [
-          {sClass: 'crm-contact-relationship-type'},
-          {sClass: 'crm-contact-relationship-contact_name'},
-          {sClass: 'crm-contact-relationship-start_date'},
-          {sClass: 'crm-contact-relationship-end_date'},
-          {sClass: 'crm-contact-relationship-city'},
-          {sClass: 'crm-contact-relationship-state'},
-          {sClass: 'crm-contact-relationship-email'},
-          {sClass: 'crm-contact-relationship-phone'},
-          {sClass: 'crm-contact-relationship-links', bSortable: false},
-          {sClass: 'hiddenElement', bSortable: false},
-          {sClass: 'hiddenElement', bSortable: false}
-        ],
-        "bProcessing": true,
-        "sPaginationType": "full_numbers",
-        "sDom": '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
-        "bServerSide": true,
-        "bJQueryUI": true,
-        "sAjaxSource": sourceUrl,
-        "iDisplayLength": 10,
-        "oLanguage": {
-          "sZeroRecords": ZeroRecordText,
-          "sProcessing": {/literal}"{ts escape='js'}Processing...{/ts}"{literal},
-          "sLengthMenu": {/literal}"{ts escape='js'}Show _MENU_ entries{/ts}"{literal},
-          "sInfo": {/literal}"{ts escape='js'}Showing _START_ to _END_ of _TOTAL_ entries{/ts}"{literal},
-          "sInfoEmpty": {/literal}"{ts escape='js'}Showing 0 to 0 of 0 entries{/ts}"{literal},
-          "sInfoFiltered": {/literal}"{ts escape='js'}(filtered from _MAX_ total entries){/ts}"{literal},
-          "sSearch": {/literal}"{ts escape='js'}Search:{/ts}"{literal},
-          "oPaginate": {
-            "sFirst": {/literal}"{ts escape='js'}First{/ts}"{literal},
-            "sPrevious": {/literal}"{ts escape='js'}Previous{/ts}"{literal},
-            "sNext": {/literal}"{ts escape='js'}Next{/ts}"{literal},
-            "sLast": {/literal}"{ts escape='js'}Last{/ts}"{literal}
-          }
-        },
-        "fnDrawCallback": function () {
-          {/literal}{if $context eq 'current'}{literal}
-          if ($('#tab_rel').length) {
-            CRM.tabHeader.updateCount($('#tab_rel'), currentoTable.fnSettings().fnRecordsTotal());
-          }
-          {/literal}{/if}{literal}
-        },
-        "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull) {
-          $(nRow).attr('id', 'relationship-'+ aData[9]);
-          if (aData[10] == 0) {
-            $(nRow).addClass('crm-entity disabled');
-          }
-          else {
-            $(nRow).addClass('crm-entity');
-          }
-        }
-      });
-    }
-  });
-</script>
-{/literal}
+  {literal}
+    <script type="text/javascript">
+      (function($) {
+        var context = {/literal}"{$context}"{literal};
+        CRM.$('table.crm-contact-relationship-selector-' + context).data({
+          "ajax": {/literal}'{crmURL p="civicrm/ajax/contactrelationships" h=0 q="context=$context&cid=$contactId"}'{literal},
+        });
+      })(CRM.$);
+    </script>
+  {/literal}
+</div>
index c239bc79e562b1d5e98d15371df9029b1ba0ad53..544ceb234b5c3bfb150943daa540382eafae4ca7 100644 (file)
   // Localize jQuery UI
   $.ui.dialog.prototype.options.closeText = "{ts escape='js'}Close{/ts}";
 
+  // Localize jQuery DataTables
+  // Note the first two defaults set here aren't localization related,
+  // but need to be set globally for all DataTables.
+  $.extend( $.fn.dataTable.defaults, {ldelim}
+    "searching": false,
+    "jQueryUI": true,
+    "language": {ldelim}
+      "emptyTable": "{ts escape='js'}None found.{/ts}",
+      "info":  "{ts escape='js' '1=_START_ 2=_END_ 3=_TOTAL_}Showing %1 to %2 of %3 entries{/ts}",
+      "infoEmpty": "{ts escape='js'}Showing 0 to 0 of 0 entries{/ts}",
+      "infoFiltered": "{ts escape='js' 1=_MAX_}(filtered from %1 total entries){/ts}",
+      "infoPostFix": "",
+      "thousands": {$config->monetaryThousandSeparator|json_encode},
+      "lengthMenu": "{ts escape='js' 1=_MENU_}Show %1 entries{/ts}",
+      "loadingRecords": " ",
+      "processing": " ",
+      "zeroRecords": "{ts escape='js'}None found.{/ts}",
+      "paginate": {ldelim}
+        "first": "{ts escape='js'}First{/ts}",
+        "last": "{ts escape='js'}Last{/ts}",
+        "next": "{ts escape='js'}Next{/ts}",
+        "previous": "{ts escape='js'}Previous{/ts}"
+      {rdelim}
+    {rdelim}
+  {rdelim});
+
   // Localize strings for jQuery.validate
   var messages = {ldelim}
     required: "{ts escape='js'}This field is required.{/ts}",