Fix Tests
[civicrm-core.git] / CRM / Activity / BAO / Activity.php
index e990994d56c9dfadde0201f0b571f3e2ecc812dd..4d4a75d3b6e426511c05d05638f79947edd28b8a 100644 (file)
@@ -679,6 +679,21 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity {
       $activityIDs = explode(',', $activityIDs);
     }
 
+    // CRM-20441 Check if user has access to the activities.
+    // This is a temporary fix we need to figure out the rules around
+    // the right permissions to access Activities.
+    // This attpemts to reduce fatal errors in 4.7.19 RC.
+    if (!empty($activityIDs)) {
+      foreach ($activityIDs as $key => $activityId) {
+        try {
+          civicrm_api3('Activity', 'get', array('id' => $activityId, 'check_permissions' => 1));
+        }
+        catch (Exception $e) {
+          unset($activityIDs[$key]);
+        }
+      }
+    }
+
     // fetch all active activity types
     $activityTypes = CRM_Core_OptionGroup::values('activity_type');
 
@@ -730,15 +745,15 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity {
       $activityParams['activity_type_id'] = array('IN' => array_keys($activityTypes));
     }
 
+    $excludeActivityIDs = array();
     if (!empty($params['activity_type_exclude_id'])) {
       if (is_array($params['activity_type_exclude_id'])) {
         foreach ($params['activity_type_exclude_id'] as $idx => $value) {
-          $params['activity_type_exclude_id'][$idx] = CRM_Utils_Type::escape($value, 'Positive');
+          $excludeActivityIDs[$idx] = CRM_Utils_Type::escape($value, 'Positive');
         }
-        $activityParams['activity_type_id'] = array('NOT IN' => $params['activity_type_exclude_id']);
       }
       else {
-        $activityParams['activity_type_id'] = array('!=' => CRM_Utils_Type::escape($params['activity_type_exclude_id'], 'Positive'));
+        $excludeActivityIDs[] = CRM_Utils_Type::escape($params['activity_type_exclude_id'], 'Positive');
       }
     }
 
@@ -747,6 +762,10 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity {
     ) {
       $activityParams['options']['limit'] = $params['rowCount'];
     }
+    // set limit = 0 if we need to fetch the activity count
+    elseif ($getCount) {
+      $activityParams['options']['limit'] = 0;
+    }
 
     if (!empty($params['sort'])) {
       if (is_a($params['sort'], 'CRM_Utils_Sort')) {
@@ -797,8 +816,10 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity {
     );
 
     foreach ($result['values'] as $id => $activity) {
-      // skip case activities if CiviCase is not enabled
-      if (!empty($activity['case_id']) && !in_array('CiviCase', $enabledComponents)) {
+      // skip case activities if CiviCase is not enabled OR those actvities which are
+      if ((!empty($activity['case_id']) && !in_array('CiviCase', $enabledComponents)) ||
+       (count($excludeActivityIDs) && in_array($activity['activity_type_id'], $excludeActivityIDs))
+      ) {
         continue;
       }
 
@@ -936,7 +957,8 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity {
     $cc = NULL,
     $bcc = NULL,
     $contactIds = NULL,
-    $additionalDetails = NULL
+    $additionalDetails = NULL,
+    $contributionIds = NULL
   ) {
     // get the contact details of logged in contact, which we set as from email
     if ($userID == NULL) {
@@ -1043,11 +1065,30 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity {
       $escapeSmarty = TRUE;
     }
 
+    $contributionDetails = array();
+    if (!empty($contributionIds)) {
+      $contributionDetails = CRM_Contribute_BAO_Contribution::replaceContributionTokens(
+        $contributionIds,
+        $subject,
+        $subjectToken,
+        $text,
+        $html,
+        $messageToken,
+        $escapeSmarty
+      );
+    }
+
     $sent = $notSent = array();
     foreach ($contactDetails as $values) {
       $contactId = $values['contact_id'];
       $emailAddress = $values['email'];
 
+      if (!empty($contributionDetails)) {
+        $subject = $contributionDetails[$contactId]['subject'];
+        $text = $contributionDetails[$contactId]['text'];
+        $html = $contributionDetails[$contactId]['html'];
+      }
+
       if (!empty($details) && is_array($details["{$contactId}"])) {
         // unset email from details since it always returns primary email address
         unset($details["{$contactId}"]['email']);
@@ -1452,6 +1493,8 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity {
   }
 
   /**
+   * @deprecated - use the api instead.
+   *
    * Get the Activities of a target contact.
    *
    * @param int $contactId
@@ -1461,6 +1504,7 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity {
    *   array of activity fields
    */
   public static function getContactActivity($contactId) {
+    // @todo remove this function entirely.
     $activities = array();
     $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name');
     $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);