CRM-13852 remove default value as the key always exists so it will never be applied...
[civicrm-core.git] / CRM / Activity / Page / AJAX.php
index 2cc9e18e91615acbb29a6ef8ba78db2b5907e2e9..659259e516adaf1c350f25c0817d61315acdbfb9 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.3                                                |
+ | CiviCRM version 4.4                                                |
  +--------------------------------------------------------------------+
  | Copyright CiviCRM LLC (c) 2004-2013                                |
  +--------------------------------------------------------------------+
@@ -75,47 +75,47 @@ class CRM_Activity_Page_AJAX {
     $sortMapper = array(
       0 => 'sort_name', 1 => 'phone', 2 => 'email',
     );
+
     $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';
-    
+
     $params = $_POST;
     if ($sort && $sortOrder) {
       $sortSQL = $sort .' '.$sortOrder;
     }
-    
+
     // get the activities related to given case
     $globalGroupInfo = array();
-    
+
     // get the total row count
     $relGlobalTotalCount = CRM_Case_BAO_Case::getGlobalContacts($globalGroupInfo, NULL, FALSE, TRUE, NULL, NULL);
     // limit the rows
-    $relGlobal = CRM_Case_BAO_Case::getGlobalContacts($globalGroupInfo, $sortSQL, $showLinks = TRUE, FALSE, $offset, $rowCount);    
-    
+    $relGlobal = CRM_Case_BAO_Case::getGlobalContacts($globalGroupInfo, $sortSQL, $showLinks = TRUE, FALSE, $offset, $rowCount);
+
     $iFilteredTotal = $iTotal = $relGlobalTotalCount;
     $selectorElements = array('sort_name', 'phone', 'email');
-    
+
     echo CRM_Utils_JSON::encodeDataTableSelector($relGlobal, $sEcho, $iTotal, $iFilteredTotal, $selectorElements);
     CRM_Utils_System::civiExit();
-  }  
-  
+  }
+
   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'
     );
+
     $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';
-    
+
     $params = $_POST;
     if ($sort && $sortOrder) {
       $sortSQL = $sort .' '.$sortOrder;
@@ -126,9 +126,9 @@ class CRM_Activity_Page_AJAX {
       CRM_Contact_BAO_Relationship::CURRENT,
       0, 0, 0, NULL, NULL, FALSE
     );
+
     $caseRelationships = CRM_Case_BAO_Case::getCaseRoles($contactID, $caseID);
-      
+
     // Now build 'Other Relationships' array by removing relationships that are already listed under Case Roles
     // so they don't show up twice.
     $clientRelationships = array();
@@ -137,47 +137,46 @@ class CRM_Activity_Page_AJAX {
         $clientRelationships[] = $r;
       }
     }
-    
+
     // sort clientRelationships array using jquery call params
     foreach ($clientRelationships as $key => $row) {
-      $sortArray[$key]  = $row[$sort]; 
+      $sortArray[$key]  = $row[$sort];
     }
-    $sort_type = "SORT_".strtoupper($sortOrder);
-    $sort_function = "array_multisort(\$sortArray, ".$sort_type.", \$clientRelationships);";
-    eval($sort_function);
-    
+    $sort_type = "SORT_" . strtoupper($sortOrder);
+    array_multisort($sortArray, constant($sort_type), $clientRelationships);
+
     //limit the rows
     $allClientRelationships = $clientRelationships;
     $clientRelationships = array_slice($allClientRelationships, $offset, $rowCount, TRUE);
-    
+
     // 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',
        'action=view&reset=1&cid='.$clientRelationships[$key]['cid']).'>'.$clientRelationships[$key]['name'].'</a>';
     }
-    
+
     $iFilteredTotal = $iTotal = $params['total'] = count($allClientRelationships);
     $selectorElements = array('relation', 'name', 'phone', 'email');
-    
+
     echo CRM_Utils_JSON::encodeDataTableSelector($clientRelationships, $sEcho, $iTotal, $iFilteredTotal, $selectorElements);
     CRM_Utils_System::civiExit();
-  }  
-  
-  
+  }
+
+
   static function getCaseRoles() {
     $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'
     );
+
     $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';
-    
+
     $params = $_POST;
     if ($sort && $sortOrder) {
       $sortSQL = $sort .' '.$sortOrder;
@@ -187,14 +186,14 @@ class CRM_Activity_Page_AJAX {
     $caseTypeName = CRM_Case_BAO_Case::getCaseType($caseID, 'name');
     $xmlProcessor = new CRM_Case_XMLProcessor_Process();
     $caseRoles    = $xmlProcessor->get($caseTypeName, 'CaseRoles');
-    
+
     $hasAccessToAllCases = CRM_Core_Permission::check('access all cases and activities');
-    
+
     $managerRoleId = $xmlProcessor->getCaseManagerRoleId($caseTypeName);
     if (!empty($managerRoleId)) {
       $caseRoles[$managerRoleId] = $caseRoles[$managerRoleId] . '<br />' . '(' . ts('Case Manager') . ')';
     }
-    
+
     foreach ($caseRelationships as $key => $value) {
       //calculate roles that don't have relationships
       if (CRM_Utils_Array::value($value['relation_type'], $caseRoles)) {
@@ -205,7 +204,7 @@ class CRM_Activity_Page_AJAX {
       // mark orginal case relationships record to use on setting edit links below
       $caseRelationships[$key]['source'] = 'caseRel';
     }
-    
+
     $caseRoles['client'] = CRM_Case_BAO_Case::getContactNames($caseID);
 
     // move/transform caseRoles array data to caseRelationships
@@ -239,10 +238,8 @@ class CRM_Activity_Page_AJAX {
       $sortArray[$key]  = $row[$sort];
     }
 
-    $sort_type = "SORT_".strtoupper($sortOrder);
-
-    $sort_function = "array_multisort(\$sortArray, ".$sort_type.", \$caseRelationships);";
-    eval($sort_function);
+    $sort_type = "SORT_" . strtoupper($sortOrder);
+    array_multisort($sortArray, constant($sort_type), $caseRelationships);
 
     //limit rows display
     $allCaseRelationships = $caseRelationships;
@@ -254,25 +251,25 @@ class CRM_Activity_Page_AJAX {
     foreach ($caseRelationships as $key => $row) {
       // view user links
       if ($caseRelationships[$key]['cid']) {
-      $caseRelationships[$key]['name'] = '<a href='.CRM_Utils_System::url('civicrm/contact/view',
+        $caseRelationships[$key]['name'] = '<a href='.CRM_Utils_System::url('civicrm/contact/view',
           'action=view&reset=1&cid='.$caseRelationships[$key]['cid']).'>'.$caseRelationships[$key]['name'].'</a>';
       }
       // email column links/icon
       if ($caseRelationships[$key]['email']) {
-      $caseRelationships[$key]['email'] = '<a href="'.CRM_Utils_System::url('civicrm/contact/view/activity', 'action=reset=1&action=add&atype=3&cid='.$caseRelationships[$key]['cid']).'" title="compose and send an email"><div class="icon email-icon" title="compose and send an email"></div>
+        $caseRelationships[$key]['email'] = '<a href="'.CRM_Utils_System::url('civicrm/contact/view/activity', 'action=reset=1&action=add&atype=3&cid='.$caseRelationships[$key]['cid']).'" title="compose and send an email"><div class="icon email-icon" title="compose and send an email"></div>
              </a>';
       }
       // edit links
       if ($hasAccessToAllCases) {
         switch($caseRelationships[$key]['source']){
         case 'caseRel':
-          $caseRelationships[$key]['actions'] = 
-            '<a href="#" title="edit case role" onclick="createRelationship( '.$caseRelationships[$key]['relation_type'].', '.$caseRelationships[$key]['cid'].', '.$caseRelationships[$key]['rel_id'].', '.$idx.', \''.$caseRelationships[$key]['relation'].'\' );return false;"><div class="icon edit-icon" ></div></a>&nbsp;&nbsp;<a href="'.CRM_Utils_System::url('civicrm/contact/view/rel', 'action=delete&reset=1&cid='. $caseRelationships[$key]['client_id'].'&id='.$caseRelationships[$key]['rel_id'].'&caseID='.$caseID.'').'" onclick = "if (confirm(\'Are you sure you want to remove this person from their case role?\') ) this.href+=\'&confirmed=1\'; else return false;"><div class="icon delete-icon" title="remove contact from case role"></div></a>';
+          $caseRelationships[$key]['actions'] =
+            '<a href="#" title="edit case role" onclick="createRelationship( '.$caseRelationships[$key]['relation_type'].', '.$caseRelationships[$key]['cid'].', '.$caseRelationships[$key]['rel_id'].', '.$idx.', \''.$caseRelationships[$key]['relation'].'\' );return false;"><div class="icon edit-icon" ></div></a>&nbsp;&nbsp;<a href="#" class="case-role-delete" case_id="'.$caseID.'" rel_type="'.$caseRelationships[$key]['relation_type'].'"><div class="icon delete-icon" title="remove contact from case role"></div></a>';
           break;
-          
+
         case 'caseRoles':
-          $caseRelationships[$key]['actions'] = 
-            '<a href="#" title="edit case role" onclick="createRelationship( '.$caseRelationships[$key]['relation_type'].', null, null, '.$idx.',  \''.$caseRelationships[$key]['relation'].'\');return false;"><div class="icon edit-icon"></div></a>';
+          $caseRelationships[$key]['actions'] =
+            '<a href="#" title="edit case role" onclick="createRelationship('.$caseRelationships[$key]['relation_type'].', null, null, '.$idx.',  \''.$caseRelationships[$key]['relation'].'\');return false;"><div class="icon edit-icon"></div></a>';
           break;
         }
       } else {
@@ -282,11 +279,11 @@ class CRM_Activity_Page_AJAX {
     }
     $iFilteredTotal = $iTotal = $params['total'] = count($allCaseRelationships);
     $selectorElements = array('relation', 'name', 'phone', 'email', 'actions');
-    
+
     echo CRM_Utils_JSON::encodeDataTableSelector($caseRelationships, $sEcho, $iTotal, $iFilteredTotal, $selectorElements);
     CRM_Utils_System::civiExit();
-  }    
-  
+  }
+
   static function convertToCaseActivity() {
     $params = array('caseID', 'activityID', 'contactID', 'newSubject', 'targetContactIds', 'mode');
     foreach ($params as $param) {
@@ -335,8 +332,8 @@ class CRM_Activity_Page_AJAX {
     $mainActivity->free();
 
     /* Mark previous activity as deleted. If it was a non-case activity
-         * then just change the subject.
-         */
+     * then just change the subject.
+     */
 
     if (in_array($params['mode'], array(
       'move', 'file'))) {
@@ -348,7 +345,8 @@ class CRM_Activity_Page_AJAX {
       }
       else {
         $otherActivity->subject = ts('(Filed on case %1)', array(
-          1 => $params['caseID'])) . ' ' . $otherActivity->subject;
+            1 => $params['caseID']
+          )) . ' ' . $otherActivity->subject;
       }
       $otherActivity->activity_date_time = $actDateTime;
       $otherActivity->save();
@@ -361,12 +359,27 @@ class CRM_Activity_Page_AJAX {
     if (!empty($params['targetContactIds'])) {
       $targetContacts = array_unique(explode(',', $params['targetContactIds']));
     }
+
+    $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name');
+    $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+    $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
+    $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
+
+    $sourceContactID = CRM_Activity_BAO_Activity::getSourceContactID($params['activityID']);
+    $src_params = array(
+      'activity_id' => $mainActivityId,
+      'contact_id' => $sourceContactID,
+      'record_type_id' => $sourceID
+    );
+    CRM_Activity_BAO_ActivityContact::create($src_params);
+
     foreach ($targetContacts as $key => $value) {
       $targ_params = array(
         'activity_id' => $mainActivityId,
-        'target_contact_id' => $value,
+        'contact_id' => $value,
+        'record_type_id' => $targetID
       );
-      CRM_Activity_BAO_Activity::createActivityTarget($targ_params);
+      CRM_Activity_BAO_ActivityContact::create($targ_params);
     }
 
     // typically this will be empty, since assignees on another case may be completely different
@@ -377,9 +390,10 @@ class CRM_Activity_Page_AJAX {
     foreach ($assigneeContacts as $key => $value) {
       $assigneeParams = array(
         'activity_id' => $mainActivityId,
-        'assignee_contact_id' => $value,
+        'contact_id' => $value,
+        'record_type_id' => $assigneeID
       );
-      CRM_Activity_BAO_Activity::createActivityAssignment($assigneeParams);
+      CRM_Activity_BAO_ActivityContact::create($assigneeParams);
     }
 
     //attach newly created activity to case.
@@ -401,14 +415,18 @@ class CRM_Activity_Page_AJAX {
     $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',
+      0 => 'activity_type',
+      1 => 'subject',
+      2 => 'source_contact_name',
+      3 => '',
+      4 => 'activity_date_time',
+      5 => 'status_id',
     );
 
-    $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;
+    $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';
 
     $params = $_POST;
@@ -429,23 +447,45 @@ class CRM_Activity_Page_AJAX {
     $session = CRM_Core_Session::singleton();
     $userID = $session->get('userID');
     if ($userID) {
-      $activityFilter = 
-        array('activity_type_filter_id' => CRM_Utils_Array::value('activity_type_id', $params),
-              'activity_type_exclude_filter_id' => CRM_Utils_Array::value('activity_type_exclude_id', $params));
-              CRM_Core_BAO_Setting::setItem($activityFilter,
-                                            CRM_Core_BAO_Setting::PERSONAL_PREFERENCES_NAME,
-                                            'activity_tab_filter',
-                                            NULL,
-                                            $userID,
-                                            $userID
-                                    );
+      //flush cache before setting filter to account for global cache (memcache)
+      $domainID = CRM_Core_Config::domainID();
+      $cacheKey = CRM_Core_BAO_Setting::inCache(
+        CRM_Core_BAO_Setting::PERSONAL_PREFERENCES_NAME,
+        'activity_tab_filter',
+        NULL,
+        $userID,
+        TRUE,
+        $domainID,
+        TRUE
+      );
+      if ( $cacheKey ) {
+        CRM_Core_BAO_Setting::flushCache($cacheKey);
+      }
+
+      $activityFilter = array(
+        'activity_type_filter_id' =>
+          ( CRM_Utils_Array::value('activity_type_id', $params) ) ?
+            CRM_Utils_Type::escape(CRM_Utils_Array::value('activity_type_id', $params), 'Integer') : '',
+        'activity_type_exclude_filter_id' =>
+          ( CRM_Utils_Array::value('activity_type_exclude_id', $params) ) ?
+            CRM_Utils_Type::escape(CRM_Utils_Array::value('activity_type_exclude_id', $params), 'Integer') : '',
+      );
+
+      CRM_Core_BAO_Setting::setItem(
+        $activityFilter,
+        CRM_Core_BAO_Setting::PERSONAL_PREFERENCES_NAME,
+        'activity_tab_filter',
+        NULL,
+        $userID,
+        $userID
+      );
     }
-    
+
     $iFilteredTotal = $iTotal = $params['total'];
     $selectorElements = array(
       'activity_type', 'subject', 'source_contact',
       'target_contact', 'assignee_contact',
-      'activity_date', 'status', 'openstats','links', 'class',
+      'activity_date', 'status','links', 'class',
     );
 
     echo CRM_Utils_JSON::encodeDataTableSelector($activities, $sEcho, $iTotal, $iFilteredTotal, $selectorElements);