X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FActivity%2FBAO%2FActivity.php;h=5f859b3c5d6820cca66e3a3c2a73b39e49134e0f;hb=760ac501ee46794a29a8bbc8979991b06eae3aa8;hp=9784aff36342340ac8cd38877873a3d0862b9190;hpb=3f9833ece31a1bb20b6b0a30a88eb48511f54c2d;p=civicrm-core.git diff --git a/CRM/Activity/BAO/Activity.php b/CRM/Activity/BAO/Activity.php index 9784aff363..5f859b3c5d 100644 --- a/CRM/Activity/BAO/Activity.php +++ b/CRM/Activity/BAO/Activity.php @@ -1234,7 +1234,21 @@ LEFT JOIN civicrm_case_activity ON ( civicrm_case_activity.activity_id = tbl.a "civicrm_activity.is_test= 0", ); - if ($input['context'] != 'activity') { + if (isset($input['activity_date_relative']) || + (!empty($input['activity_date_low']) || !empty($input['activity_date_high'])) + ) { + list($from, $to) = CRM_Utils_Date::getFromTo( + CRM_Utils_Array::value('activity_date_relative', $input, 0), + CRM_Utils_Array::value('activity_date_low', $input), + CRM_Utils_Array::value('activity_date_high', $input) + ); + $commonClauses[] = sprintf('civicrm_activity.activity_date_time BETWEEN "%s" AND "%s" ', $from, $to); + } + + if (!empty($input['activity_status_id'])) { + $commonClauses[] = sprintf("civicrm_activity.status_id IN (%s)", $input['activity_status_id']); + } + elseif ($input['context'] != 'activity') { $commonClauses[] = "civicrm_activity.status_id = 1"; } @@ -2107,6 +2121,7 @@ WHERE activity.id IN ($activityIds)"; $id = CRM_Core_Session::getLoggedInContactID(); if ($id) { $activityParams['source_contact_id'] = $id; + $activityParams['target_contact_id'][] = $activity->contact_id; } // CRM-14945 @@ -2115,7 +2130,7 @@ WHERE activity.id IN ($activityIds)"; } //CRM-4027 if ($targetContactID) { - $activityParams['target_contact_id'] = $targetContactID; + $activityParams['target_contact_id'][] = $targetContactID; } // @todo - use api - remove lots of wrangling above. Remove deprecated fatal & let form layer // deal with any exceptions. @@ -2139,6 +2154,10 @@ WHERE activity.id IN ($activityIds)"; $membershipType = CRM_Member_PseudoConstant::membershipType($entityObj->membership_type_id); $subject = $membershipType ? $membershipType : ts('Membership'); + if (is_array($subject)) { + $subject = implode(", ", $subject); + } + if (!CRM_Utils_System::isNull($entityObj->source)) { $subject .= " - {$entityObj->source}"; } @@ -2417,6 +2436,51 @@ AND cl.modified_id = c.id return $result; } + /** + * Return list of activity statuses that are considered "completed". + * + * Note: activity status options use the "grouping" field to distinguish complete from incomplete statuses. + * + * @return array + */ + public static function getCompletedStatuses() { + if (!isset(Civi::$statics[__CLASS__][__FUNCTION__])) { + $statuses = civicrm_api3('OptionValue', 'get', array( + 'option_group_id' => "activity_status", + 'filter' => 1, + 'return' => array('value'), + 'sequential' => 1, + 'options' => array('limit' => 0), + )); + Civi::$statics[__CLASS__][__FUNCTION__] = CRM_Utils_Array::collect('value', $statuses['values']); + } + return Civi::$statics[__CLASS__][__FUNCTION__]; + } + + /** + * Check if status_id is completed. + * + * Note: activity status options use the "grouping" field to distinguish complete from incomplete statuses. + * + * @param int $statusId + * + * @return bool + */ + public static function isCompleted($statusId) { + return in_array($statusId, self::getCompletedStatuses()); + } + + /** + * Check if activity is overdue. + * + * @param array $activity + * + * @return bool + */ + public static function isOverdue($activity) { + return !self::isCompleted($activity['status_id']) && CRM_Utils_Date::overdue($activity['activity_date_time']); + } + /** * Get the exportable fields for Activities. * @@ -2783,9 +2847,7 @@ INNER JOIN civicrm_option_group grp ON ( grp.id = val.option_group_id AND grp.n $activity['DT_RowId'] = $activityId; // Add class to this row if overdue. $activity['DT_RowClass'] = "crm-entity status-id-{$values['status_id']}"; - if (CRM_Utils_Date::overdue(CRM_Utils_Array::value('activity_date_time', $values)) - && CRM_Utils_Array::value('status_id', $values) == 1 - ) { + if (self::isOverdue($values)) { $activity['DT_RowClass'] .= ' status-overdue'; } else {