X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FActivity%2FBAO%2FActivity.php;h=5f859b3c5d6820cca66e3a3c2a73b39e49134e0f;hb=760ac501ee46794a29a8bbc8979991b06eae3aa8;hp=26c8a69b0b7f6ff2ec7c5e4309e52cca09fb9a9f;hpb=2aa5e4ce07d2ed241dbca91213197921ea24cb50;p=civicrm-core.git diff --git a/CRM/Activity/BAO/Activity.php b/CRM/Activity/BAO/Activity.php index 26c8a69b0b..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"; } @@ -2422,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. * @@ -2788,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 {