$activity['activity_type'] = $values['activity_type'];
$activity['subject'] = $values['subject'];
+
+ $activity['source_contact_name'] = '';
if ($params['contact_id'] == $values['source_contact_id']) {
$activity['source_contact_name'] = $values['source_contact_name'];
}
$activity['source_contact_name'] = '<em>n/a</em>';
}
+ $activity['target_contact_name'] = '';
if (isset($values['mailingId']) && !empty($values['mailingId'])) {
$activity['target_contact'] = CRM_Utils_System::href($values['recipients'],
'civicrm/mailing/report/event',
$activity['target_contact_name'] = '<em>n/a</em>';
}
+ $activity['assignee_contact_name'] = '';
if (empty($values['assignee_contact_name'])) {
$activity['assignee_contact_name'] = '<em>n/a</em>';
}
$userID = CRM_Utils_Type::escape($_GET['userID'], 'Integer');
$context = CRM_Utils_Type::escape(CRM_Utils_Array::value('context', $_GET), 'String');
- $sortMapper = array(
- 0 => 'display_date',
- 1 => 'ca.subject',
- 2 => 'ca.activity_type_id',
- 3 => 'acc.sort_name',
- 4 => 'cc.sort_name',
- 5 => 'ca.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['sortname'] = $sort;
- $params['sortorder'] = $sortOrder;
+ $params['sortBy'] = $sort . ' ' . $sortOrder;
}
$params['page'] = ($offset / $rowCount) + 1;
$params['rp'] = $rowCount;
// get the activities related to given case
$activities = CRM_Case_BAO_Case::getCaseActivity($caseID, $params, $contactID, $context, $userID);
- $iFilteredTotal = $iTotal = $params['total'];
- $selectorElements = array(
- 'display_date',
- 'subject',
- 'type',
- 'with_contacts',
- 'reporter',
- '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);
}
public static function getCaseGlobalRelationships() {
- $sortMapper = array(
- 0 => 'sort_name',
- 1 => 'phone',
- 2 => 'email',
- );
+ $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 = $_GET;
- $params = $_POST;
//CRM-14466 initialize variable to avoid php notice
$sortSQL = "";
if ($sort && $sortOrder) {
// limit the rows
$relGlobal = CRM_Case_BAO_Case::getGlobalContacts($globalGroupInfo, $sortSQL, $showLinks = TRUE, FALSE, $offset, $rowCount);
- $iFilteredTotal = $iTotal = $relGlobalTotalCount;
- $selectorElements = array('sort_name', 'phone', 'email');
+ $relationships = array();
+ // after sort we can update username fields to be a url
+ foreach ($relGlobal as $key => $value) {
+ $relationship = array();
+ $relationship['sort_name'] = $value['sort_name'];
+ $relationship['phone'] = $value['phone'];
+ $relationship['email'] = $value['email'];
+
+ array_push($relationships, $relationship);
+ }
- header('Content-Type: application/json');
- echo CRM_Utils_JSON::encodeDataTableSelector($relGlobal, $sEcho, $iTotal, $iFilteredTotal, $selectorElements);
- CRM_Utils_System::civiExit();
+ $params['total'] = count($relationships);
+
+ $globalRelationshipsDT = array();
+ $globalRelationshipsDT['data'] = $relationships;
+ $globalRelationshipsDT['recordsTotal'] = $params['total'];
+ $globalRelationshipsDT['recordsFiltered'] = $params['total'];
+
+ CRM_Utils_JSON::output($globalRelationshipsDT);
}
public static function getCaseClientRelationships() {
$caseID = CRM_Utils_Type::escape($_GET['caseID'], 'Integer');
$contactID = CRM_Utils_Type::escape($_GET['cid'], 'Integer');
- $sortMapper = array(
- 0 => 'relation',
- 1 => 'name',
- 2 => 'phone',
- 3 => 'email',
- );
+ $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) : 'relation';
- $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;
- if ($sort && $sortOrder) {
- $sortSQL = $sort . ' ' . $sortOrder;
- }
+ $params = $_GET;
// Retrieve ALL client relationships
$relClient = CRM_Contact_BAO_Relationship::getRelationship($contactID,
$sort_type = "SORT_" . strtoupper($sortOrder);
array_multisort($sortArray, constant($sort_type), $clientRelationships);
- //limit the rows
- $allClientRelationships = $clientRelationships;
- $clientRelationships = array_slice($allClientRelationships, $offset, $rowCount, TRUE);
-
+ $relationships = array();
// after sort we can update username fields to be a url
foreach ($clientRelationships as $key => $value) {
- $clientRelationships[$key]['name'] = '<a href=' . CRM_Utils_System::url('civicrm/contact/view',
+ $relationship = array();
+ $relationship['relation'] = $value['relation'];
+ $relationship['name'] = '<a href=' . CRM_Utils_System::url('civicrm/contact/view',
'action=view&reset=1&cid=' . $clientRelationships[$key]['cid']) . '>' . $clientRelationships[$key]['name'] . '</a>';
+ $relationship['phone'] = $value['phone'];
+ $relationship['email'] = $value['email'];
+
+ array_push($relationships, $relationship);
}
- $iFilteredTotal = $iTotal = $params['total'] = count($allClientRelationships);
- $selectorElements = array('relation', 'name', 'phone', 'email');
+ $params['total'] = count($relationships);
- header('Content-Type: application/json');
- echo CRM_Utils_JSON::encodeDataTableSelector($clientRelationships, $sEcho, $iTotal, $iFilteredTotal, $selectorElements);
- CRM_Utils_System::civiExit();
+ $clientRelationshipsDT = array();
+ $clientRelationshipsDT['data'] = $relationships;
+ $clientRelationshipsDT['recordsTotal'] = $params['total'];
+ $clientRelationshipsDT['recordsFiltered'] = $params['total'];
+
+ CRM_Utils_JSON::output($clientRelationshipsDT);
}
$caseID = CRM_Utils_Type::escape($_GET['caseID'], 'Integer');
$contactID = CRM_Utils_Type::escape($_GET['cid'], 'Integer');
- $sortMapper = array(
- 0 => 'relation',
- 1 => 'name',
- 2 => 'phone',
- 3 => 'email',
- 4 => 'actions',
- );
+ $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) : 'relation';
- $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;
- if ($sort && $sortOrder) {
- $sortSQL = $sort . ' ' . $sortOrder;
- }
+ $params = $_GET;
$caseRelationships = CRM_Case_BAO_Case::getCaseRoles($contactID, $caseID);
$caseTypeName = CRM_Case_BAO_Case::getCaseType($caseID, 'name');
$caseRoles[$managerRoleId] = $caseRoles[$managerRoleId] . '<br />' . '(' . ts('Case Manager') . ')';
}
+ $relationships = array();
+
foreach ($caseRelationships as $key => $value) {
//calculate roles that don't have relationships
if (!empty($caseRoles[$value['relation_type']])) {
foreach ($caseRelationships as $key => $row) {
$sortArray[$key] = $row[$sort];
}
-
$sort_type = "SORT_" . strtoupper($sortOrder);
array_multisort($sortArray, constant($sort_type), $caseRelationships);
- //limit rows display
- $allCaseRelationships = $caseRelationships;
- $caseRelationships = array_slice($allCaseRelationships, $offset, $rowCount, TRUE);
+ $relationships = array();
// set user name, email and edit columns links
- // idx will count number of current row / needed by edit links
- $idx = 1;
- foreach ($caseRelationships as &$row) {
+ foreach ($caseRelationships as $key => &$row) {
// Get rid of the "<br />(Case Manager)" from label
list($typeLabel) = explode('<', $row['relation']);
// view user links
$contactType = $contactType == 'Contact' ? '' : $contactType;
switch ($row['source']) {
case 'caseRel':
- $row['actions']
- = '<a href="#editCaseRoleDialog" title="' . ts('Reassign %1', array(1 => $typeLabel)) . '" class="crm-hover-button case-miniform" data-contact_type="' . $contactType . '" data-rel_type="' . $row['relation_type'] . '" data-rel_id="' . $row['rel_id'] . '"data-key="' . CRM_Core_Key::get('civicrm/ajax/relation') . '">' .
+ $row['actions'] = '<a href="#editCaseRoleDialog" title="' . ts('Reassign %1', array(1 => $typeLabel)) . '" class="crm-hover-button case-miniform" data-contact_type="' . $contactType . '" data-rel_type="' . $row['relation_type'] . '" data-rel_id="' . $row['rel_id'] . '"data-key="' . CRM_Core_Key::get('civicrm/ajax/relation') . '">' .
'<span class="icon ui-icon-pencil"></span>' .
'</a>' .
'<a href="#deleteCaseRoleDialog" title="' . ts('Remove %1', array(1 => $typeLabel)) . '" class="crm-hover-button case-miniform" data-contact_type="' . $contactType . '" data-rel_type="' . $row['relation_type'] . '" data-key="' . CRM_Core_Key::get('civicrm/ajax/delcaserole') . '">' .
break;
case 'caseRoles':
- $row['actions']
- = '<a href="#editCaseRoleDialog" title="' . ts('Assign %1', array(1 => $typeLabel)) . '" class="crm-hover-button case-miniform" data-contact_type="' . $contactType . '" data-rel_type="' . $row['relation_type'] . '" data-key="' . CRM_Core_Key::get('civicrm/ajax/relation') . '">' .
+ $row['actions'] = '<a href="#editCaseRoleDialog" title="' . ts('Assign %1', array(1 => $typeLabel)) . '" class="crm-hover-button case-miniform" data-contact_type="' . $contactType . '" data-rel_type="' . $row['relation_type'] . '" data-key="' . CRM_Core_Key::get('civicrm/ajax/relation') . '">' .
'<span class="icon ui-icon-pencil"></span>' .
'</a>';
break;
}
}
- $idx++;
+ unset($row['cid']);
+ unset($row['relation_type']);
+ unset($row['rel_id']);
+ unset($row['client_id']);
+ unset($row['source']);
+ array_push($relationships, $row);
}
- $iFilteredTotal = $iTotal = $params['total'] = count($allCaseRelationships);
- $selectorElements = array('relation', 'name', 'phone', 'email', 'actions');
+ $params['total'] = count($relationships);
+
+ $caseRelationshipsDT = array();
+ $caseRelationshipsDT['data'] = $relationships;
+ $caseRelationshipsDT['recordsTotal'] = $params['total'];
+ $caseRelationshipsDT['recordsFiltered'] = $params['total'];
+
+ CRM_Utils_JSON::output($caseRelationshipsDT);
- header('Content-Type: application/json');
- echo CRM_Utils_JSON::encodeDataTableSelector($caseRelationships, $sEcho, $iTotal, $iFilteredTotal, $selectorElements);
- CRM_Utils_System::civiExit();
}
public static function convertToCaseActivity() {
// CRM-5081 - formatting the dates to omit seconds.
// Note the 00 in the date format string is needed otherwise later on it thinks scheduled ones are overdue.
- $select = "SELECT count(ca.id) as ismultiple, ca.id as id,
- ca.activity_type_id as type,
- ca.activity_type_id as activity_type_id,
- cc.sort_name as reporter,
- cc.id as reporter_id,
- acc.sort_name AS assignee,
- acc.id AS assignee_id,
- DATE_FORMAT(IF(ca.activity_date_time < NOW() AND ca.status_id=ov.value,
- ca.activity_date_time,
- DATE_ADD(NOW(), INTERVAL 1 YEAR)
- ), '%Y%m%d%H%i00') as overdue_date,
- DATE_FORMAT(ca.activity_date_time, '%Y%m%d%H%i00') as display_date,
- ca.status_id as status,
- ca.subject as subject,
- ca.is_deleted as deleted,
- ca.priority_id as priority,
- ca.weight as weight,
- GROUP_CONCAT(ef.file_id) as attachment_ids ";
+ $select = "
+ SELECT COUNT(ca.id) AS ismultiple,
+ ca.id AS id,
+ ca.activity_type_id AS type,
+ ca.activity_type_id AS activity_type_id,
+ tcc.sort_name AS target_contact_name,
+ tcc.id AS target_contact_id,
+ scc.sort_name AS source_contact_name,
+ scc.id AS source_contact_id,
+ acc.sort_name AS assignee_contact_name,
+ acc.id AS assignee_contact_id,
+ DATE_FORMAT(
+ IF(ca.activity_date_time < NOW() AND ca.status_id=ov.value,
+ ca.activity_date_time,
+ DATE_ADD(NOW(), INTERVAL 1 YEAR)
+ ), '%Y%m%d%H%i00') AS overdue_date,
+ DATE_FORMAT(ca.activity_date_time, '%Y%m%d%H%i00') AS display_date,
+ ca.status_id AS status,
+ ca.subject AS subject,
+ ca.is_deleted AS deleted,
+ ca.priority_id AS priority,
+ ca.weight AS weight,
+ GROUP_CONCAT(ef.file_id) AS attachment_ids ";
$from = "
- FROM civicrm_case_activity cca
- INNER JOIN civicrm_activity ca ON ca.id = cca.activity_id
- INNER JOIN civicrm_activity_contact cac ON cac.activity_id = ca.id AND cac.record_type_id = {$sourceID}
- INNER JOIN civicrm_contact cc ON cc.id = cac.contact_id
- INNER JOIN civicrm_option_group cog ON cog.name = 'activity_type'
- INNER JOIN civicrm_option_value cov ON cov.option_group_id = cog.id
- AND cov.value = ca.activity_type_id AND cov.is_active = 1
- LEFT JOIN civicrm_entity_file ef on ef.entity_table = 'civicrm_activity' AND ef.entity_id = ca.id
- LEFT OUTER JOIN civicrm_option_group og ON og.name = 'activity_status'
- LEFT OUTER JOIN civicrm_option_value ov ON ov.option_group_id=og.id AND ov.name = 'Scheduled'
- LEFT JOIN civicrm_activity_contact caa
- ON caa.activity_id = ca.id AND caa.record_type_id = {$assigneeID}
- LEFT JOIN civicrm_contact acc ON acc.id = caa.contact_id ";
-
- $where = 'WHERE cca.case_id= %1
- AND ca.is_current_revision = 1';
-
- if (!empty($params['reporter_id'])) {
- $where .= " AND cac.contact_id = " . CRM_Utils_Type::escape($params['reporter_id'], 'Integer');
+ FROM civicrm_case_activity cca
+ INNER JOIN civicrm_activity ca
+ ON ca.id = cca.activity_id
+ INNER JOIN civicrm_activity_contact cas
+ ON cas.activity_id = ca.id
+ AND cas.record_type_id = {$sourceID}
+ INNER JOIN civicrm_contact scc
+ ON scc.id = cas.contact_id
+ LEFT JOIN civicrm_activity_contact caa
+ ON caa.activity_id = ca.id
+ AND caa.record_type_id = {$assigneeID}
+ LEFT JOIN civicrm_contact acc
+ ON acc.id = caa.contact_id
+ LEFT JOIN civicrm_activity_contact cat
+ ON cat.activity_id = ca.id
+ AND cat.record_type_id = {$targetID}
+ LEFT JOIN civicrm_contact tcc
+ ON tcc.id = cat.contact_id
+ INNER JOIN civicrm_option_group cog
+ ON cog.name = 'activity_type'
+ INNER JOIN civicrm_option_value cov
+ ON cov.option_group_id = cog.id
+ AND cov.value = ca.activity_type_id
+ AND cov.is_active = 1
+ LEFT JOIN civicrm_entity_file ef
+ ON ef.entity_table = 'civicrm_activity'
+ AND ef.entity_id = ca.id
+ LEFT OUTER JOIN civicrm_option_group og
+ ON og.name = 'activity_status'
+ LEFT OUTER JOIN civicrm_option_value ov
+ ON ov.option_group_id=og.id
+ AND ov.name = 'Scheduled'";
+
+ $where = '
+ WHERE cca.case_id= %1
+ AND ca.is_current_revision = 1';
+
+ if (!empty($params['source_contact_id'])) {
+ $where .= "
+ AND cas.contact_id = " . CRM_Utils_Type::escape($params['source_contact_id'], 'Integer');
}
if (!empty($params['status_id'])) {
- $where .= " AND ca.status_id = " . CRM_Utils_Type::escape($params['status_id'], 'Integer');
+ $where .= "
+ AND ca.status_id = " . CRM_Utils_Type::escape($params['status_id'], 'Integer');
}
if (!empty($params['activity_deleted'])) {
- $where .= " AND ca.is_deleted = 1";
+ $where .= "
+ AND ca.is_deleted = 1";
}
else {
- $where .= " AND ca.is_deleted = 0";
+ $where .= "
+ AND ca.is_deleted = 0";
}
if (!empty($params['activity_type_id'])) {
- $where .= " AND ca.activity_type_id = " . CRM_Utils_Type::escape($params['activity_type_id'], 'Integer');
+ $where .= "
+ AND ca.activity_type_id = " . CRM_Utils_Type::escape($params['activity_type_id'], 'Integer');
}
if (!empty($params['activity_date_low'])) {
$fromActivityDate = CRM_Utils_Type::escape(CRM_Utils_Date::processDate($params['activity_date_low']), 'Date');
}
+ if (!empty($fromActivityDate)) {
+ $where .= "
+ AND ca.activity_date_time >= '{$fromActivityDate}'";
+ }
+
if (!empty($params['activity_date_high'])) {
$toActivityDate = CRM_Utils_Type::escape(CRM_Utils_Date::processDate($params['activity_date_high']), 'Date');
$toActivityDate = $toActivityDate ? $toActivityDate + 235959 : NULL;
}
-
- if (!empty($fromActivityDate)) {
- $where .= " AND ca.activity_date_time >= '{$fromActivityDate}'";
- }
-
if (!empty($toActivityDate)) {
- $where .= " AND ca.activity_date_time <= '{$toActivityDate}'";
- }
-
- // hack to handle to allow initial sorting to be done by query
- if (CRM_Utils_Array::value('sortname', $params) == 'undefined') {
- $params['sortname'] = NULL;
- }
-
- if (CRM_Utils_Array::value('sortorder', $params) == 'undefined') {
- $params['sortorder'] = NULL;
+ $where .= "
+ AND ca.activity_date_time <= '{$toActivityDate}'";
}
- $sortname = CRM_Utils_Array::value('sortname', $params);
- $sortorder = CRM_Utils_Array::value('sortorder', $params);
-
- $groupBy = " GROUP BY ca.id ";
+ $groupBy = "
+ GROUP BY ca.id ";
- if (!$sortname AND !$sortorder) {
+ $sortBy = CRM_Utils_Array::value('sortBy', $params);
+ if (!$sortBy) {
// CRM-5081 - added id to act like creation date
- $orderBy = " ORDER BY overdue_date ASC, display_date DESC, weight DESC";
+ $orderBy = "
+ ORDER BY overdue_date ASC, display_date DESC, weight DESC";
}
else {
- $sort = "{$sortname} {$sortorder}";
- $sort = CRM_Utils_Type::escape($sort, 'String');
- $orderBy = " ORDER BY $sort ";
- if ($sortname != 'display_date') {
- $orderBy .= ', display_date DESC';
- }
+ $sortBy = CRM_Utils_Type::escape($sortBy, 'String');
+ $orderBy = " ORDER BY $sortBy ";
}
- $page = CRM_Utils_Array::value('page', $params);
- $rp = CRM_Utils_Array::value('rp', $params);
-
if (!$page) {
$page = 1;
}
if (!$rp) {
$rp = 10;
}
-
$start = (($page - 1) * $rp);
- $query = $select . $from . $where . $groupBy . $orderBy;
+ $limit = " LIMIT $start, $rp";
+ $query = $select . $from . $where . $groupBy . $orderBy . $limit;
$params = array(1 => array($caseID, 'Integer'));
- $dao = CRM_Core_DAO::executeQuery($query, $params);
- $params['total'] = $dao->N;
- //FIXME: need to optimize/cache these queries
- $limit = " LIMIT $start, $rp";
- $query .= $limit;
-
- //EXIT;
$dao = CRM_Core_DAO::executeQuery($query, $params);
+ $page = CRM_Utils_Array::value('page', $params);
+ $rp = CRM_Utils_Array::value('rp', $params);
+
$activityTypes = CRM_Case_PseudoConstant::caseActivityType(FALSE, TRUE);
- $activityStatus = CRM_Core_PseudoConstant::activityStatus();
- $activityPriority = CRM_Core_PseudoConstant::get('CRM_Activity_DAO_Activity', 'priority_id');
+ $activityStatuses = CRM_Core_PseudoConstant::activityStatus();
$url = CRM_Utils_System::url("civicrm/case/activity",
"reset=1&cid={$contactID}&caseid={$caseID}", FALSE, NULL, FALSE
foreach ($compStatusNames as $name) {
$compStatusValues[] = CRM_Core_OptionGroup::getValue('activity_status', $name, 'name');
}
- $contactViewUrl = CRM_Utils_System::url("civicrm/contact/view",
- "reset=1&cid=", FALSE, NULL, FALSE
- );
+
+ $contactViewUrl = CRM_Utils_System::url("civicrm/contact/view", "reset=1&cid=", FALSE, NULL, FALSE);
$hasViewContact = CRM_Core_Permission::giveMeAllACLs();
$clientIds = self::retrieveContactIdsByCaseId($caseID);
$userID = $session->get('userID');
}
+ $caseActivities = array();
+
while ($dao->fetch()) {
+ $caseActivity = array();
+ $caseActivityId = $dao->id;
- $allowView = self::checkPermission($dao->id, 'view', $dao->activity_type_id, $userID);
- $allowEdit = self::checkPermission($dao->id, 'edit', $dao->activity_type_id, $userID);
- $allowDelete = self::checkPermission($dao->id, 'delete', $dao->activity_type_id, $userID);
+ $allowView = self::checkPermission($caseActivityId, 'view', $dao->activity_type_id, $userID);
+ $allowEdit = self::checkPermission($caseActivityId, 'edit', $dao->activity_type_id, $userID);
+ $allowDelete = self::checkPermission($caseActivityId, 'delete', $dao->activity_type_id, $userID);
//do not have sufficient permission
//to access given case activity record.
continue;
}
- $values[$dao->id]['id'] = $dao->id;
- $values[$dao->id]['type'] = $activityTypes[$dao->type]['label'];
+ //Add classes to the row, via DataTables syntax
+ $caseActivity['DT_RowClass'] = "crm-entity";
- $reporterName = $dao->reporter;
- if ($hasViewContact) {
- $reporterName = '<a href="' . $contactViewUrl . $dao->reporter_id . '">' . $dao->reporter . '</a>';
- }
- $values[$dao->id]['reporter'] = $reporterName;
- $targetNames = CRM_Activity_BAO_ActivityContact::getNames($dao->id, $targetID);
- $targetContactUrls = $withContacts = array();
- foreach ($targetNames as $targetId => $targetName) {
- if (!in_array($targetId, $clientIds)) {
- $withContacts[$targetId] = $targetName;
+ if (CRM_Utils_Array::crmInArray($dao->status, $compStatusValues)) {
+ $caseActivity['DT_RowClass'] .= " status-completed";
+ }
+ else {
+ if (CRM_Utils_Date::overdue($dao->display_date)) {
+ $caseActivity['DT_RowClass'] .= " status-overdue";
+ }
+ else {
+ $caseActivity['DT_RowClass'] .= " status-scheduled";
}
}
- foreach ($withContacts as $cid => $name) {
- if ($hasViewContact) {
- $name = '<a href="' . $contactViewUrl . $cid . '">' . $name . '</a>';
+
+ if (!empty($dao->priority)) {
+ if ($dao->priority == CRM_Core_OptionGroup::getValue('priority', 'Urgent', 'name')) {
+ $caseActivity['DT_RowClass'] .= " priority-urgent ";
+ }
+ elseif ($dao->priority == CRM_Core_OptionGroup::getValue('priority', 'Low', 'name')) {
+ $caseActivity['DT_RowClass'] .= " priority-low ";
}
- $targetContactUrls[] = $name;
}
- $values[$dao->id]['with_contacts'] = implode('; ', $targetContactUrls);
- $values[$dao->id]['display_date'] = CRM_Utils_Date::customFormat($dao->display_date);
- $values[$dao->id]['status'] = $activityStatus[$dao->status];
+ //Add data to the row for inline editing, via DataTable syntax
+ $caseActivity['DT_RowData'] = array();
+ $caseActivity['DT_RowData']['entity'] = 'activity';
+ $caseActivity['DT_RowData']['id'] = $caseActivityId;
- //check for view activity.
- $subject = (empty($dao->subject)) ? '(' . ts('no subject') . ')' : $dao->subject;
- if ($allowView) {
- $url = CRM_Utils_System::url('civicrm/case/activity/view', array('cid' => $contactID, 'aid' => $dao->id));
- $subject = '<a class="crm-popup medium-popup" href="' . $url . '" title="' . $viewTitle . '">' . $subject . '</a>';
- }
- $values[$dao->id]['subject'] = $subject;
+ //Activity Date and Time
+ $caseActivity['activity_date_time'] = CRM_Utils_Date::customFormat($dao->display_date);
- // add activity assignee to activity selector. CRM-4485.
- if (isset($dao->assignee)) {
- if ($dao->ismultiple == 1) {
- if ($dao->reporter_id != $dao->assignee_id) {
- $values[$dao->id]['reporter'] .= ($hasViewContact) ? ' / ' . "<a href='{$contactViewUrl}{$dao->assignee_id}'>$dao->assignee</a>" : ' / ' . $dao->assignee;
- }
- $values[$dao->id]['assignee'] = $dao->assignee;
+ //Activity Subject
+ $caseActivity['subject'] = $dao->subject;
+
+ //Activity Type
+ $caseActivity['type'] = $activityTypes[$dao->type]['label'];
+
+ //Activity Target (With)
+ $targetContact = '';
+ if (isset($dao->target_contact_id)) {
+ $targetContact = $dao->target_contact_name;
+ if ($hasViewContact) {
+ $targetContact = '<a href="' . $contactViewUrl . $dao->target_contact_id . '">' . $dao->target_contact_name . '</a>';
}
- else {
- $values[$dao->id]['reporter'] .= ' / ' . ts('(multiple)');
+ }
+ $caseActivity['target_contact_name'] = $targetContact;
+
+ //Activity Source Contact (Reporter)
+ $sourceContact = $dao->source_contact_name;
+ if ($hasViewContact) {
+ $sourceContact = '<a href="' . $contactViewUrl . $dao->source_contact_id . '">' . $dao->source_contact_name . '</a>';
+ }
+ $caseActivity['source_contact_name'] = $sourceContact;
+
+ //Activity Assignee. CRM-4485.
+ $assigneeContact = '';
+ if (isset($dao->assignee_contact_id)) {
+ $assigneeContact = $dao->assignee_contact_name;
+ if ($hasViewContact) {
+ $assigneeContact = '<a href="' . $contactViewUrl . $dao->assignee_contact_id . '">' . $dao->assignee_contact_name . '</a>';
}
}
+ $caseActivity['assignee_contact_name'] = $assigneeContact;
+
+ //Activity Status
+ $caseActivity['status_id'] = $activityStatuses[$dao->status];
+
// FIXME: Why are we not using CRM_Core_Action for these links? This is too much manual work and likely to get out-of-sync with core markup.
$url = "";
$css = 'class="action-item crm-hover-button"';
- $additionalUrl = "&id={$dao->id}";
+ if ($allowView) {
+ $url = CRM_Utils_System::url('civicrm/case/activity/view', array('cid' => $contactID, 'aid' => $caseActivityId));
+ //$subject = '<a class="crm-popup medium-popup" href="' . $url . '" title="' . $viewTitle . '">' . $subject . '</a>';
+ }
+ $additionalUrl = "&id={$caseActivityId}";
if (!$dao->deleted) {
//hide edit link of activity type email.CRM-4530.
if (!in_array($dao->type, $emailActivityTypeIDs)) {
}
elseif (!$caseDeleted) {
$url = ' <a ' . $css . ' href="' . $restoreUrl . $additionalUrl . '">' . ts('Restore') . '</a>';
- $values[$dao->id]['status'] = $values[$dao->id]['status'] . '<br /> (deleted)';
+ $caseActivity['status_id'] = $caseActivity['status_id'] . '<br /> (deleted)';
}
//check for operations.
- if (self::checkPermission($dao->id, 'Move To Case', $dao->activity_type_id)) {
- $url .= ' <a ' . $css . ' href="#" onClick="Javascript:fileOnCase( \'move\',' . $dao->id . ', ' . $caseID . ', this ); return false;">' . ts('Move To Case') . '</a> ';
+ if (self::checkPermission($caseActivityId, 'Move To Case', $dao->activity_type_id)) {
+ $url .= ' <a ' . $css . ' href="#" onClick="Javascript:fileOnCase( \'move\',' . $caseActivityId . ', ' . $caseID . ', this ); return false;">' . ts('Move To Case') . '</a> ';
}
- if (self::checkPermission($dao->id, 'Copy To Case', $dao->activity_type_id)) {
- $url .= ' <a ' . $css . ' href="#" onClick="Javascript:fileOnCase( \'copy\',' . $dao->id . ',' . $caseID . ', this ); return false;">' . ts('Copy To Case') . '</a> ';
+ if (self::checkPermission($caseActivityId, 'Copy To Case', $dao->activity_type_id)) {
+ $url .= ' <a ' . $css . ' href="#" onClick="Javascript:fileOnCase( \'copy\',' . $caseActivityId . ',' . $caseID . ', this ); return false;">' . ts('Copy To Case') . '</a> ';
}
// if there are file attachments we will return how many and, if only one, add a link to it
if (!empty($dao->attachment_ids)) {
$attachmentIDs = explode(',', $dao->attachment_ids);
- $values[$dao->id]['no_attachments'] = count($attachmentIDs);
- if ($values[$dao->id]['no_attachments'] == 1) {
+ $caseActivity['no_attachments'] = count($attachmentIDs);
+ if ($caseActivity['no_attachments'] == 1) {
// if there is only one it's easy to do a link - otherwise just flag it
$attachmentViewUrl = CRM_Utils_System::url(
"civicrm/file",
- "reset=1&eid=" . $dao->id . "&id=" . $dao->attachment_ids,
+ "reset=1&eid=" . $caseActivityId . "&id=" . $dao->attachment_ids,
FALSE,
NULL,
FALSE
}
}
- $values[$dao->id]['links'] = $url;
- $values[$dao->id]['class'] = "";
+ $caseActivity['links'] = $url;
- if (!empty($dao->priority)) {
- if ($dao->priority == CRM_Core_OptionGroup::getValue('priority', 'Urgent', 'name')) {
- $values[$dao->id]['class'] = $values[$dao->id]['class'] . "priority-urgent ";
- }
- elseif ($dao->priority == CRM_Core_OptionGroup::getValue('priority', 'Low', 'name')) {
- $values[$dao->id]['class'] = $values[$dao->id]['class'] . "priority-low ";
- }
- }
-
- if (CRM_Utils_Array::crmInArray($dao->status, $compStatusValues)) {
- $values[$dao->id]['class'] = $values[$dao->id]['class'] . " status-completed";
- }
- else {
- if (CRM_Utils_Date::overdue($dao->display_date)) {
- $values[$dao->id]['class'] = $values[$dao->id]['class'] . " status-overdue";
- }
- else {
- $values[$dao->id]['class'] = $values[$dao->id]['class'] . " status-scheduled";
- }
- }
-
- if ($allowEdit) {
- $values[$dao->id]['status'] = '<div class="crmf-status_id crm-activity-status-' . $dao->id . ' ' . $values[$dao->id]['class'] . ' crm-editable" data-type="select" data-action="create" data-refresh="true">' . $values[$dao->id]['status'] . '</div>';
- }
+ array_push($caseActivities, $caseActivity);
}
$dao->free();
- return $values;
+ $caseActivitiesDT = array();
+ $caseActivitiesDT['data'] = $caseActivities;
+ $caseActivitiesDT['recordsTotal'] = $params['total'];
+ $caseActivitiesDT['recordsFiltered'] = $params['total'];
+
+ return $caseActivitiesDT;
}
/**
+--------------------------------------------------------------------+
*}
{*this template is used for activity accordion*}
+{assign var=caseid value=$caseID}
<div class="crm-accordion-wrapper crm-case_activities-accordion crm-case-activities-block">
<div class="crm-accordion-header">
{ts}Activities{/ts}
<td class="crm-case-caseview-form-block-status_id"><label for="status_id">{$form.status_id.label}</label><br />
{$form.status_id.html}
</td>
- <td style="vertical-align: bottom;">
- {assign var=caseid value=$caseID}
- <span class="crm-button crm-icon-button">
- <span class="crm-button-icon ui-icon-check"></span>
- <input class="crm-form-submit default" name="_qf_Basic_refresh" value="{ts}Search{/ts}" type="button" data-case-id="{$caseid}" />
- </span>
- </td>
</tr>
<tr>
<td class="crm-case-caseview-form-block-activity_date_low">
- {assign var=activitylow value=activity_date_low_$caseID}
+ {assign var=activitylow value=activity_date_low_$caseID}
{$form.$activitylow.label}<br />
- {include file="CRM/common/jcalendar.tpl" elementName=$activitylow}
+ {include file="CRM/common/jcalendar.tpl" elementName=$activitylow}
</td>
<td class="crm-case-caseview-form-block-activity_date_high">
- {assign var=activityhigh value=activity_date_high_$caseID}
+ {assign var=activityhigh value=activity_date_high_$caseID}
{$form.$activityhigh.label}<br />
- {include file="CRM/common/jcalendar.tpl" elementName=$activityhigh}
+ {include file="CRM/common/jcalendar.tpl" elementName=$activityhigh}
</td>
<td class="crm-case-caseview-form-block-activity_type_filter_id">
{$form.activity_type_filter_id.label}<br />
</div><!-- /.crm-accordion-body -->
</div><!-- /.crm-accordion-wrapper -->
- <table id=case_id_{$caseid} class="nestedActivitySelector">
+ <table id="case_id_{$caseid}" class="nestedActivitySelector crm-ajax-table" data-order='[[0,"desc"]]' data-page-length="10">
<thead><tr>
- <th class='crm-case-activities-date'>{ts}Date{/ts}</th>
- <th class='crm-case-activities-subject'>{ts}Subject{/ts}</th>
- <th class='crm-case-activities-type'>{ts}Type{/ts}</th>
- <th class='crm-case-activities-with'>{ts}With{/ts}</th>
- <th class='crm-case-activities-assignee'>{ts}Reporter / Assignee{/ts}</th>
- <th class='crm-case-activities-status'>{ts}Status{/ts}</th>
- <th class='crm-case-activities-status' id="nosort"> </th>
- <th class='hiddenElement'> </th>
+ <th data-data="activity_date_time" class="crm-case-activities-date">{ts}Date{/ts}</th>
+ <th data-data="subject" cell-class="crmf-subject crm-editable" class="crm-case-activities-subject">{ts}Subject{/ts}</th>
+ <th data-data="type" class="crm-case-activities-type">{ts}Type{/ts}</th>
+ <th data-data="target_contact_name" class="crm-case-activities-with">{ts}With{/ts}</th>
+ <th data-data="source_contact_name" class="crm-case-activities-assignee">{ts}Reporter{/ts}</th>
+ <th data-data="assignee_contact_name" class="crm-case-activities-assignee">{ts}Assignee{/ts}</th>
+ <th data-data="status_id" cell-class="crmf-status_id crm-editable" cell-data-type="select" class="crm-case-activities-status">{ts}Status{/ts}</th>
+ <th data-data="links" data-orderable="false" class="crm-case-activities-status"> </th>
</tr></thead>
</table>
+ {literal}
+ <script type="text/javascript">
+ (function($) {
+ var caseId = {/literal}{$caseID}{literal};
+ CRM.$('table#case_id_' + caseId).data({
+ "ajax": {
+ "url": {/literal}'{crmURL p="civicrm/ajax/activity" h=0 q="snippet=4&caseID=$caseId&cid=$contactID&userID=$userID"}'{literal},
+ "data": function (d) {
+ d.status_id = $("select#status_id_" + caseId).val(),
+ d.reporter_id = $("select#reporter_id_" + caseId).val(),
+ d.activity_type_id = $("select#activity_type_filter_id_" + caseId).val(),
+ d.activity_date_low = $("#activity_date_low_" + caseId).val(),
+ d.activity_date_high = $("#activity_date_high_" + caseId).val()
+ d.activity_deleted = ($("#activity_deleted_1").prop('checked')) ? 1 : 0;
+ }
+ }
+ });
+ $(function($) {
+ $('#searchOptions :input').change(function(){
+ CRM.$('table#case_id_' + caseId).DataTable().draw();
+ });
+ });
+ })(CRM.$);
+ </script>
+ {/literal}
</div><!-- /.crm-accordion-body -->
</div><!-- /.crm-accordion-wrapper -->
-
-{literal}
-<script type="text/javascript">
-CRM.$(function($) {
- var CaseId = {/literal}{$caseID}{literal};
- buildCaseActivities(false);
- $('input.crm-form-submit[data-case-id=' + CaseId + ']').click(buildCaseActivities);
-
- function buildCaseActivities(filterSearch) {
- if (filterSearch) {
- oTable.fnDestroy();
- }
- var count = 0;
- var columns = '';
- var sourceUrl = {/literal}"{crmURL p='civicrm/ajax/activity' h=0 q='snippet=4&caseID='}"{literal}+CaseId;
- sourceUrl = sourceUrl + '&cid={/literal}{$contactID}{literal}';
- sourceUrl = sourceUrl + '&userID={/literal}{$userID}{literal}';
-
- $('#case_id_'+CaseId+' th').each(function( ) {
- if ($(this).attr('id') != 'nosort') {
- columns += '{"sClass": "' + $(this).attr('class') +'"},';
- }
- else {
- columns += '{ "bSortable": false },';
- }
- count++;
- });
-
- columns = columns.substring(0, columns.length - 1 );
- eval('columns =[' + columns + ']');
-
- oTable = $('#case_id_'+CaseId).dataTable({
- "bFilter" : false,
- "bAutoWidth" : false,
- "aaSorting" : [],
- "aoColumns" : columns,
- "bProcessing": true,
- "bJQueryUI": true,
- "asStripClasses" : [ "odd-row", "even-row" ],
- "sPaginationType": "full_numbers",
- "sDom" : '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
- "bServerSide": true,
- "sAjaxSource": sourceUrl,
- "iDisplayLength": 10,
- "bDestroy": true,
- "fnDrawCallback": function() {
- setSelectorClass();
- setRowIds();
- // FIXME: trigger crmLoad and crmEditable would happen automatically
- $('.crm-editable', '#case_id_'+CaseId).crmEditable();
- },
- "fnServerData": function ( sSource, aoData, fnCallback ) {
-
- if ( filterSearch ) {
- var activity_deleted = 0;
- if ( $("#activity_deleted_"+CaseId+":checked").val() == 1 ) {
- activity_deleted = 1;
- }
- aoData.push(
- {name:'status_id', value: $("select#status_id_"+CaseId).val()},
- {name:'reporter_id', value: $("select#reporter_id_"+CaseId).val()},
- {name:'activity_type_id', value: $("select#activity_type_filter_id_"+CaseId).val()},
- {name:'activity_date_low', value: $("#activity_date_low_"+CaseId).val()},
- {name:'activity_date_high', value: $("#activity_date_high_"+CaseId).val() },
- {name:'activity_deleted', value: activity_deleted }
- );
- }
- $.ajax( {
- "dataType": 'json',
- "type": "POST",
- "url": sSource,
- "data": aoData,
- "success": fnCallback
- } );
- }
- });
- }
-
- function setRowIds() {
- $("#case_id_"+CaseId+" tbody tr").each(function() {
- var link, id;
- link = $('a.action-item', this).attr('href');
- if (link) {
- id = link.match(/&id=(\d+)/);
- }
- if (id) {
- $(this)
- .addClass('crm-entity')
- .data('entity', 'activity')
- .data('id', id[1]);
- }
- });
- }
-
- function setSelectorClass() {
- $("#case_id_"+CaseId+" td:last-child").each(function() {
- $(this).parent().addClass($(this).text());
- });
- }
-});
-</script>
-{/literal}
(function($, CRM) {
function refresh(table) {
- if (table) {
- $(table).dataTable().fnDraw();
- } else {
- $('#crm-main-content-wrapper').crmSnippet('refresh');
- }
+ $('#crm-main-content-wrapper').crmSnippet('refresh');
}
function open(url, options, table) {
<div class="crm-block crm-form-block crm-case-caseview-form-block">
-{* here we are showing related cases w/ jquery dialog *}
-{if $showRelatedCases}
- {include file="CRM/Case/Form/ViewRelatedCases.tpl"}
-
-{* Main case view *}
-{else}
-
-<h3>{ts}Summary{/ts}</h3>
-<table class="report crm-entity case-summary" data-entity="case" data-id="{$caseID}" data-cid="{$contactID}">
- {if $multiClient}
- <tr class="crm-case-caseview-client">
- <td colspan="5" class="label">
- {ts}Clients:{/ts}
- {foreach from=$caseRoles.client item=client name=clients}
- <a href="{crmURL p='civicrm/contact/view' q="action=view&reset=1&cid=`$client.contact_id`"}" title="{ts}View contact record{/ts}">{$client.display_name}</a>{if not $smarty.foreach.clients.last}, {/if}
- {/foreach}
- <a href="#addClientDialog" class="crm-hover-button case-miniform" title="{ts}Add Client{/ts}" data-key="{crmKey name='civicrm/case/ajax/addclient'}">
- <span class="icon ui-icon-circle-plus"></span>
- </a>
- <div id="addClientDialog" class="hiddenElement">
- <input name="add_client_id" placeholder="{ts}- select contact -{/ts}" class="huge" />
- </div>
- {if $hasRelatedCases}
- <div class="crm-block relatedCases-link"><a class="crm-hover-button crm-popup medium-popup" href="{$relatedCaseUrl}">{$relatedCaseLabel}</a></div>
- {/if}
- </td>
- </tr>
- {/if}
- <tr>
- {if not $multiClient}
- <td>
- <table class="form-layout-compressed">
- {foreach from=$caseRoles.client item=client}
- <tr class="crm-case-caseview-display_name">
- <td class="label-left bold" style="padding: 0px; border: none;">{$client.display_name}</td>
- </tr>
- {if $client.phone}
- <tr class="crm-case-caseview-phone">
- <td class="label-left description" style="padding: 1px">{$client.phone}</td>
- </tr>
- {/if}
- {if $client.birth_date}
- <tr class="crm-case-caseview-birth_date">
- <td class="label-left description" style="padding: 1px">{ts}DOB{/ts}: {$client.birth_date|crmDate}</td>
- </tr>
- {/if}
+ {* here we are showing related cases w/ jquery dialog *}
+ {if $showRelatedCases}
+ {include file="CRM/Case/Form/ViewRelatedCases.tpl"}
+ {* Main case view *}
+ {else}
+
+ <h3>{ts}Summary{/ts}</h3>
+ <table class="report crm-entity case-summary" data-entity="case" data-id="{$caseID}" data-cid="{$contactID}">
+ {if $multiClient}
+ <tr class="crm-case-caseview-client">
+ <td colspan="5" class="label">
+ {ts}Clients:{/ts}
+ {foreach from=$caseRoles.client item=client name=clients}
+ <a href="{crmURL p='civicrm/contact/view' q="action=view&reset=1&cid=`$client.contact_id`"}" title="{ts}View contact record{/ts}">{$client.display_name}</a>{if not $smarty.foreach.clients.last}, {/if}
{/foreach}
- </table>
- {if $hasRelatedCases}
- <div class="crm-block relatedCases-link"><a class="crm-hover-button crm-popup medium-popup" href="{$relatedCaseUrl}">{$relatedCaseLabel}</a></div>
- {/if}
- </td>
+ <a href="#addClientDialog" class="crm-hover-button case-miniform" title="{ts}Add Client{/ts}" data-key="{crmKey name='civicrm/case/ajax/addclient'}">
+ <span class="icon ui-icon-circle-plus"></span>
+ </a>
+ <div id="addClientDialog" class="hiddenElement">
+ <input name="add_client_id" placeholder="{ts}- select contact -{/ts}" class="huge" />
+ </div>
+ {if $hasRelatedCases}
+ <div class="crm-block relatedCases-link"><a class="crm-hover-button crm-popup medium-popup" href="{$relatedCaseUrl}">{$relatedCaseLabel}</a></div>
+ {/if}
+ </td>
+ </tr>
{/if}
- <td class="crm-case-caseview-case_subject label">
- <span class="crm-case-summary-label">{ts}Subject{/ts}:</span> {$caseDetails.case_subject}
- </td>
- <td class="crm-case-caseview-case_type label">
- <span class="crm-case-summary-label">{ts}Type{/ts}:</span> {$caseDetails.case_type} <a class="crm-hover-button crm-popup" href="{crmURL p='civicrm/case/activity' q="action=add&reset=1&cid=`$contactId`&caseid=`$caseId`&selectedChild=activity&atype=`$changeCaseTypeId`"}" title="{ts}Change case type (creates activity record){/ts}"><span class="icon ui-icon-pencil"></span></a>
- </td>
- <td class="crm-case-caseview-case_status label">
- <span class="crm-case-summary-label">{ts}Status{/ts}:</span> {$caseDetails.case_status} <a class="crm-hover-button crm-popup" href="{crmURL p='civicrm/case/activity' q="action=add&reset=1&cid=`$contactId`&caseid=`$caseId`&selectedChild=activity&atype=`$changeCaseStatusId`"}" title="{ts}Change case status (creates activity record){/ts}"><span class="icon ui-icon-pencil"></span></a>
- </td>
- <td class="crm-case-caseview-case_start_date label">
- <span class="crm-case-summary-label">{ts}Open Date{/ts}:</span> {$caseDetails.case_start_date|crmDate} <a class="crm-hover-button crm-popup" href="{crmURL p='civicrm/case/activity' q="action=add&reset=1&cid=`$contactId`&caseid=`$caseId`&selectedChild=activity&atype=`$changeCaseStartDateId`"}" title="{ts}Change case start date (creates activity record){/ts}"><span class="icon ui-icon-pencil"></span></a>
- </td>
- <td class="crm-case-caseview-{$caseID} label">
- <span class="crm-case-summary-label">{ts}ID{/ts}:</span> {$caseID}
- </td>
- </tr>
-</table>
+ <tr>
+ {if not $multiClient}
+ <td>
+ <table class="form-layout-compressed">
+ {foreach from=$caseRoles.client item=client}
+ <tr class="crm-case-caseview-display_name">
+ <td class="label-left bold" style="padding: 0px; border: none;">{$client.display_name}</td>
+ </tr>
+ {if $client.phone}
+ <tr class="crm-case-caseview-phone">
+ <td class="label-left description" style="padding: 1px">{$client.phone}</td>
+ </tr>
+ {/if}
+ {if $client.birth_date}
+ <tr class="crm-case-caseview-birth_date">
+ <td class="label-left description" style="padding: 1px">{ts}DOB{/ts}: {$client.birth_date|crmDate}</td>
+ </tr>
+ {/if}
+ {/foreach}
+ </table>
+ {if $hasRelatedCases}
+ <div class="crm-block relatedCases-link"><a class="crm-hover-button crm-popup medium-popup" href="{$relatedCaseUrl}">{$relatedCaseLabel}</a></div>
+ {/if}
+ </td>
+ {/if}
+ <td class="crm-case-caseview-case_subject label">
+ <span class="crm-case-summary-label">{ts}Subject{/ts}:</span> {$caseDetails.case_subject}
+ </td>
+ <td class="crm-case-caseview-case_type label">
+ <span class="crm-case-summary-label">{ts}Type{/ts}:</span> {$caseDetails.case_type} <a class="crm-hover-button crm-popup" href="{crmURL p='civicrm/case/activity' q="action=add&reset=1&cid=`$contactId`&caseid=`$caseId`&selectedChild=activity&atype=`$changeCaseTypeId`"}" title="{ts}Change case type (creates activity record){/ts}"><span class="icon ui-icon-pencil"></span></a>
+ </td>
+ <td class="crm-case-caseview-case_status label">
+ <span class="crm-case-summary-label">{ts}Status{/ts}:</span> {$caseDetails.case_status} <a class="crm-hover-button crm-popup" href="{crmURL p='civicrm/case/activity' q="action=add&reset=1&cid=`$contactId`&caseid=`$caseId`&selectedChild=activity&atype=`$changeCaseStatusId`"}" title="{ts}Change case status (creates activity record){/ts}"><span class="icon ui-icon-pencil"></span></a>
+ </td>
+ <td class="crm-case-caseview-case_start_date label">
+ <span class="crm-case-summary-label">{ts}Open Date{/ts}:</span> {$caseDetails.case_start_date|crmDate} <a class="crm-hover-button crm-popup" href="{crmURL p='civicrm/case/activity' q="action=add&reset=1&cid=`$contactId`&caseid=`$caseId`&selectedChild=activity&atype=`$changeCaseStartDateId`"}" title="{ts}Change case start date (creates activity record){/ts}"><span class="icon ui-icon-pencil"></span></a>
+ </td>
+ <td class="crm-case-caseview-{$caseID} label">
+ <span class="crm-case-summary-label">{ts}ID{/ts}:</span> {$caseID}
+ </td>
+ </tr>
+ </table>
{if $hookCaseSummary}
- <div id="caseSummary">
- {foreach from=$hookCaseSummary item=val key=div_id}
- <div id="{$div_id}"><label>{$val.label}</label><div class="value">{$val.value}</div></div>
- {/foreach}
- </div>
+ <div id="caseSummary">
+ {foreach from=$hookCaseSummary item=val key=div_id}
+ <div id="{$div_id}"><label>{$val.label}</label><div class="value">{$val.value}</div></div>
+ {/foreach}
+ </div>
{/if}
-<div class="case-control-panel">
- <div>
- <p>
- {$form.add_activity_type_id.html}
- {if $hasAccessToAllCases}
- {$form.timeline_id.html}{$form._qf_CaseView_next.html}
- {$form.report_id.html}
- {/if}
- </p>
+ <div class="case-control-panel">
+ <div>
+ <p>
+ {$form.add_activity_type_id.html}
+ {if $hasAccessToAllCases}
+ {$form.timeline_id.html}{$form._qf_CaseView_next.html}
+ {$form.report_id.html}
+ {/if}
+ </p>
+ </div>
+ <div>
+ <p>
+ {if $hasAccessToAllCases}
+ <a class="crm-hover-button action-item no-popup" href="{crmURL p='civicrm/case/report/print' q="all=1&redact=0&cid=$contactID&caseID=$caseId&asn=standard_timeline"}"><span class="icon ui-icon-print"></span> {ts}Print Report{/ts}</a>
+ {/if}
+
+ {if $mergeCases}
+ <a href="#mergeCasesDialog" class="action-item no-popup crm-hover-button case-miniform"><span class="icon ui-icon-copy"></span>{ts}Merge Case{/ts}</a>
+ {$form._qf_CaseView_next_merge_case.html}
+ <span id="mergeCasesDialog" class="hiddenElement">
+ {$form.merge_case_id.html}
+ </span>
+ {/if}
+
+ {if call_user_func(array('CRM_Core_Permission','giveMeAllACLs'))}
+ <a class="action-item crm-hover-button medium-popup" href="{crmURL p='civicrm/contact/view/case/editClient' h=1 q="reset=1&action=update&id=$caseID&cid=$contactID"}"><span class="icon ui-icon-person"></span> {ts}Assign to Another Client{/ts}</a>
+ {/if}
+ </p>
+ </div>
</div>
- <div>
- <p>
- {if $hasAccessToAllCases}
- <a class="crm-hover-button action-item no-popup" href="{crmURL p='civicrm/case/report/print' q="all=1&redact=0&cid=$contactID&caseID=$caseId&asn=standard_timeline"}"><span class="icon ui-icon-print"></span> {ts}Print Report{/ts}</a>
- {/if}
- {if $mergeCases}
- <a href="#mergeCasesDialog" class="action-item no-popup crm-hover-button case-miniform"><span class="icon ui-icon-copy"></span>{ts}Merge Case{/ts}</a>
- {$form._qf_CaseView_next_merge_case.html}
- <span id="mergeCasesDialog" class="hiddenElement">
- {$form.merge_case_id.html}
- </span>
- {/if}
+ <div class="clear"></div>
+ {include file="CRM/Case/Page/CustomDataView.tpl"}
- {if call_user_func(array('CRM_Core_Permission','giveMeAllACLs'))}
- <a class="action-item crm-hover-button medium-popup" href="{crmURL p='civicrm/contact/view/case/editClient' h=1 q="reset=1&action=update&id=$caseID&cid=$contactID"}"><span class="icon ui-icon-person"></span> {ts}Assign to Another Client{/ts}</a>
+ <div class="crm-accordion-wrapper collapsed crm-case-roles-block">
+ <div class="crm-accordion-header">
+ {ts}Roles{/ts}
+ </div><!-- /.crm-accordion-header -->
+ <div class="crm-accordion-body">
+
+ {if $hasAccessToAllCases}
+ <div class="crm-submit-buttons">
+ <a class="button case-miniform" href="#addCaseRoleDialog" data-key="{crmKey name='civicrm/ajax/relation'}" rel="#caseRoles-selector-{$caseID}"><div class="icon ui-icon-circle-plus"></div>{ts}Add new role{/ts}</a>
+ </div>
+ <div id="addCaseRoleDialog" class="hiddenElement">
+ <div>{$form.role_type.label}</div>
+ <div>{$form.role_type.html}</div><br />
+ <div><label for="add_role_contact_id">{ts}Assign To{/ts}:</label></div>
+ <div><input name="add_role_contact_id" placeholder="{ts}- select contact -{/ts}" class="huge" /></div>
+ </div>
{/if}
- </p>
- </div>
-</div>
-
-<div class="clear"></div>
-{include file="CRM/Case/Page/CustomDataView.tpl"}
-
-<div class="crm-accordion-wrapper collapsed crm-case-roles-block">
- <div class="crm-accordion-header">
- {ts}Roles{/ts}
- </div><!-- /.crm-accordion-header -->
- <div class="crm-accordion-body">
-
- {if $hasAccessToAllCases}
- <div class="crm-submit-buttons">
- <a class="button case-miniform" href="#addCaseRoleDialog" data-key="{crmKey name='civicrm/ajax/relation'}" rel="#caseRoles-selector-{$caseID}"><div class="icon ui-icon-circle-plus"></div>{ts}Add new role{/ts}</a>
+
+ <div id="editCaseRoleDialog" class="hiddenElement">
+ <div><label for="edit_role_contact_id">{ts}Change To{/ts}:</label></div>
+ <div><input name="edit_role_contact_id" placeholder="{ts}- select contact -{/ts}" class="huge" /></div>
</div>
- <div id="addCaseRoleDialog" class="hiddenElement">
- <div>{$form.role_type.label}</div>
- <div>{$form.role_type.html}</div><br />
- <div><label for="add_role_contact_id">{ts}Assign To{/ts}:</label></div>
- <div><input name="add_role_contact_id" placeholder="{ts}- select contact -{/ts}" class="huge" /></div>
+
+ <table id="caseRoles-selector-{$caseID}" class="report-layout crm-ajax-table" data-page-length="10">
+ <thead>
+ <tr>
+ <th data-data="relation">{ts}Case Role{/ts}</th>
+ <th data-data="name">{ts}Name{/ts}</th>
+ <th data-data="phone">{ts}Phone{/ts}</th>
+ <th data-data="email">{ts}Email{/ts}</th>
+ {if $relId neq 'client' and $hasAccessToAllCases}
+ <th data-data="actions" data-orderable="false">{ts}Actions{/ts}</th>
+ {/if}
+ </tr>
+ </thead>
+ </table>
+ {literal}
+ <script type="text/javascript">
+ (function($) {
+ var caseId = {/literal}{$caseID}{literal};
+ CRM.$('table#caseRoles-selector-' + caseId).data({
+ "ajax": {
+ "url": {/literal}'{crmURL p="civicrm/ajax/caseroles" h=0 q="snippet=4&caseID=$caseId&cid=$contactID&userID=$userID"}'{literal}
+ }
+ });
+ })(CRM.$);
+ </script>
+ {/literal}
+
+ <div id="deleteCaseRoleDialog" class="hiddenElement">
+ {ts}Are you sure you want to delete this case role?{/ts}
</div>
- {/if}
-
- <div id="editCaseRoleDialog" class="hiddenElement">
- <div><label for="edit_role_contact_id">{ts}Change To{/ts}:</label></div>
- <div><input name="edit_role_contact_id" placeholder="{ts}- select contact -{/ts}" class="huge" /></div>
- </div>
-
- <table id="caseRoles-selector-{$caseID}" class="report-layout">
- <thead><tr>
- <th>{ts}Case Role{/ts}</th>
- <th>{ts}Name{/ts}</th>
- <th>{ts}Phone{/ts}</th>
- <th>{ts}Email{/ts}</th>
- {if $relId neq 'client' and $hasAccessToAllCases}
- <th id="nosort">{ts}Actions{/ts}</th>
- {/if}
- </tr></thead>
- </table>
-
- <div id="deleteCaseRoleDialog" class="hiddenElement">
- {ts}Are you sure you want to delete this case role?{/ts}
- </div>
-
- {literal}
- <script type="text/javascript">
- var oTable;
-
- CRM.$(function($) {
- buildCaseRoles(false);
- function buildCaseRoles(filterSearch) {
- if(filterSearch) {
- oTable.fnDestroy();
- }
- var count = 0;
- var columns = '';
- var sourceUrl = {/literal}"{crmURL p='civicrm/ajax/caseroles' h=0 q='snippet=4&caseID='}{$caseID}"{literal};
- sourceUrl = sourceUrl + '&cid={/literal}{$contactID}{literal}';
- sourceUrl = sourceUrl + '&userID={/literal}{$userID}{literal}';
-
- $('#caseRoles-selector-{/literal}{$caseID}{literal} th').each( function( ) {
- if ( $(this).attr('id') != 'nosort' ) {
- columns += '{"sClass": "' + $(this).attr('class') +'"},';
- }
- else {
- columns += '{ "bSortable": false },';
- }
- count++;
- });
-
- columns = columns.substring(0, columns.length - 1 );
- eval('columns =[' + columns + ']');
-
- oTable = $('#caseRoles-selector-{/literal}{$caseID}{literal}').dataTable({
- "bFilter" : false,
- "bAutoWidth" : false,
- "aaSorting" : [],
- "aoColumns" : columns,
- "bProcessing": true,
- "bJQueryUI": true,
- "asStripClasses" : [ "odd-row", "even-row" ],
- "sPaginationType": "full_numbers",
- "sDom" : '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
- "bServerSide": true,
- "sAjaxSource": sourceUrl,
- "iDisplayLength": 10,
- "fnDrawCallback": function() { setCaseRolesSelectorClass(); },
- "fnServerData": function ( sSource, aoData, fnCallback ) {
- $.ajax({
- "dataType": 'json',
- "type": "POST",
- "url": sSource,
- "data": aoData,
- "success": fnCallback
- });
- }
- });
- }
-
- function setCaseRolesSelectorClass( ) {
- $("#caseRoles-selector-{/literal}{$caseID}{literal} td:last-child").each( function( ) {
- $(this).parent().addClass($(this).text() );
- });
- }
- });
-</script>
-{/literal}
- </div><!-- /.crm-accordion-body -->
-</div><!-- /.crm-accordion-wrapper -->
+
+ </div><!-- /.crm-accordion-body -->
+ </div><!-- /.crm-accordion-wrapper -->
{if $hasAccessToAllCases}
<div class="crm-accordion-wrapper collapsed crm-case-other-relationships-block">
<div class="crm-submit-buttons">
{crmButton p='civicrm/contact/view/rel' q="action=add&reset=1&cid=`$contactId`&caseID=`$caseID`" icon="circle-plus"}{ts}Add client relationship{/ts}{/crmButton}
</div>
- {if $clientRelationships}
- <table id="clientRelationships-selector-{$caseID}" class="report-layout">
- <thead><tr>
- <th>{ts}Client Relationship{/ts}</th>
- <th>{ts}Name{/ts}</th>
- <th>{ts}Phone{/ts}</th>
- <th>{ts}Email{/ts}</th>
- </tr></thead>
- </table>
- {else}
- <div class="messages status no-popup">
- <div class="icon inform-icon"></div>
- {ts}None found.{/ts}
- </div>
- {/if}
- {literal}
- <script type="text/javascript">
- CRM.$(function($) {
- buildCaseClientRelationships(false);
- function buildCaseClientRelationships(filterSearch) {
- if (filterSearch) {
- oTable.fnDestroy();
- }
- var count = 0;
- var columns = '';
- var sourceUrl = {/literal}"{crmURL p='civicrm/ajax/clientrelationships' h=0 q='snippet=4&caseID='}{$caseID}"{literal};
- sourceUrl = sourceUrl + '&cid={/literal}{$contactID}{literal}';
- sourceUrl = sourceUrl + '&userID={/literal}{$userID}{literal}';
-
- $('#clientRelationships-selector-{/literal}{$caseID}{literal} th').each( function( ) {
- if ( $(this).attr('id') != 'nosort' ) {
- columns += '{"sClass": "' + $(this).attr('class') +'"},';
- }
- else {
- columns += '{ "bSortable": false },';
- }
- count++;
- });
-
- columns = columns.substring(0, columns.length - 1 );
- eval('columns =[' + columns + ']');
-
- oTable = $('#clientRelationships-selector-{/literal}{$caseID}{literal}').dataTable({
- "bFilter" : false,
- "bAutoWidth" : false,
- "aaSorting" : [],
- "aoColumns" : columns,
- "bProcessing": true,
- "bJQueryUI": true,
- "asStripClasses" : [ "odd-row", "even-row" ],
- "sPaginationType": "full_numbers",
- "sDom" : '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
- "bServerSide": true,
- "sAjaxSource": sourceUrl,
- "iDisplayLength": 10,
- "fnDrawCallback": function() { setClientRelationshipsSelectorClass(); },
- "fnServerData": function (sSource, aoData, fnCallback) {
- $.ajax( {
- "dataType": 'json',
- "type": "POST",
- "url": sSource,
- "data": aoData,
- "success": fnCallback
- });
- }
- });
- }
-
- function setClientRelationshipsSelectorClass( ) {
- $("#clientRelationships-selector-{/literal}{$caseID}{literal} td:last-child").each(function() {
- $(this).parent().addClass($(this).text());
- });
- }
- });
- </script>
- {/literal}
+ <table id="clientRelationships-selector-{$caseID}" class="report-layout crm-ajax-table" data-page-length="10">
+ <thead>
+ <tr>
+ <th data-data="relation">{ts}Client Relationship{/ts}</th>
+ <th data-data="name">{ts}Name{/ts}</th>
+ <th data-data="phone">{ts}Phone{/ts}</th>
+ <th data-data="email">{ts}Email{/ts}</th>
+ </tr>
+ </thead>
+ </table>
+ {literal}
+ <script type="text/javascript">
+ (function($) {
+ var caseId = {/literal}{$caseID}{literal};
+ CRM.$('table#clientRelationships-selector-' + caseId).data({
+ "ajax": {
+ "url": {/literal}'{crmURL p="civicrm/ajax/clientrelationships" h=0 q="snippet=4&caseID=$caseId&cid=$contactID&userID=$userID"}'{literal}
+ }
+ });
+ })(CRM.$);
+ </script>
+ {/literal}
<br />
{if !empty($globalGroupInfo.id)}
<div class="crm-submit-buttons">
<div id="addMembersToGroupDialog" class="hiddenElement">
<input name="add_member_to_group_contact_id" placeholder="{ts}- select contacts -{/ts}" class="huge" />
</div>
- <table id="globalRelationships-selector-{$caseId}" class="report-layout">
- <thead><tr>
- <th>{$globalGroupInfo.title}</th>
- <th>{ts}Phone{/ts}</th>
- <th>{ts}Email{/ts}</th>
- </tr></thead>
+ <table id="globalRelationships-selector-{$caseId}" class="report-layout crm-ajax-table" data-page-length="10">
+ <thead>
+ <tr>
+ <th data-data="sort_name">{$globalGroupInfo.title}</th>
+ <th data-data="phone">{ts}Phone{/ts}</th>
+ <th data-data="email">{ts}Email{/ts}</th>
+ </tr>
+ </thead>
</table>
+ {literal}
+ <script type="text/javascript">
+ (function($) {
+ var caseId = {/literal}{$caseID}{literal};
+ CRM.$('table#globalRelationships-selector-' + caseId).data({
+ "ajax": {
+ "url": {/literal}'{crmURL p="civicrm/ajax/globalrelationships" h=0 q="snippet=4&caseID=$caseId&cid=$contactID&userID=$userID"}'{literal}
+ }
+ });
+ })(CRM.$);
+ </script>
+ {/literal}
{/if}
- {literal}
- <script type="text/javascript">
- CRM.$(function($) {
- buildCaseGlobalRelationships(false);
- function buildCaseGlobalRelationships(filterSearch) {
- if (filterSearch) {
- oTable.fnDestroy();
- }
- var count = 0;
- var columns = '';
- var sourceUrl = {/literal}"{crmURL p='civicrm/ajax/globalrelationships' h=0 q='snippet=4&caseID='}{$caseID}"{literal};
- sourceUrl = sourceUrl + '&cid={/literal}{$contactID}{literal}';
- sourceUrl = sourceUrl + '&userID={/literal}{$userID}{literal}';
-
- $('#globalRelationships-selector-{/literal}{$caseID}{literal} th').each( function( ) {
- if ($(this).attr('id') != 'nosort') {
- columns += '{"sClass": "' + $(this).attr('class') +'"},';
- }
- else {
- columns += '{ "bSortable": false },';
- }
- count++;
- });
-
- columns = columns.substring(0, columns.length - 1 );
- eval('columns =[' + columns + ']');
-
- oTable = $('#globalRelationships-selector-{/literal}{$caseID}{literal}').dataTable({
- "bFilter" : false,
- "bAutoWidth" : false,
- "aaSorting" : [],
- "aoColumns" : columns,
- "bProcessing": true,
- "bJQueryUI": true,
- "asStripClasses" : [ "odd-row", "even-row" ],
- "sPaginationType": "full_numbers",
- "sDom" : '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
- "bServerSide": true,
- "sAjaxSource": sourceUrl,
- "iDisplayLength": 10,
- "fnDrawCallback": function() { setGlobalRelationshipsSelectorClass(); },
- "oLanguage": {
- "sEmptyTable": {/literal}'{ts escape='js' 1=$globalGroupInfo.title}The group %1 has no members.{/ts}'{literal}
- },
- "fnServerData": function ( sSource, aoData, fnCallback ) {
- $.ajax( {
- "dataType": 'json',
- "type": "POST",
- "url": sSource,
- "data": aoData,
- "success": fnCallback
- });
- }
- });
- }
-
- function setGlobalRelationshipsSelectorClass( ) {
- $("#globalRelationships-selector-{/literal}{$caseID}{literal} td:last-child").each( function( ) {
- $(this).parent().addClass($(this).text() );
- });
- }
- });
- </script>
- {/literal}
- </div><!-- /.crm-accordion-body -->
+ </div><!-- /.crm-accordion-body -->
</div><!-- /.crm-accordion-wrapper -->
{/if} {* other relationship section ends *}