X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FActivity%2FBAO%2FActivity.php;h=5f859b3c5d6820cca66e3a3c2a73b39e49134e0f;hb=760ac501ee46794a29a8bbc8979991b06eae3aa8;hp=1811b2e206a390b3107018a19139fb130206ab66;hpb=199acc885eeed5e7c02669b69804a942be05d20b;p=civicrm-core.git diff --git a/CRM/Activity/BAO/Activity.php b/CRM/Activity/BAO/Activity.php index 1811b2e206..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"; } @@ -2041,57 +2055,22 @@ WHERE activity.id IN ($activityIds)"; * @param string $activityType * For Membership Signup or Renewal. * @param int $targetContactID + * @param array $params + * Activity params to override. * * @return bool|NULL */ public static function addActivity( &$activity, $activityType = 'Membership Signup', - $targetContactID = NULL + $targetContactID = NULL, + $params = array() ) { + $date = date('YmdHis'); if ($activity->__table == 'civicrm_membership') { - $membershipType = CRM_Member_PseudoConstant::membershipType($activity->membership_type_id); - - if (!$membershipType) { - $membershipType = ts('Membership'); - } - - $subject = "{$membershipType}"; - - if (!empty($activity->source) && $activity->source != 'null') { - $subject .= " - {$activity->source}"; - } - - if ($activity->owner_membership_id) { - $query = " -SELECT display_name - FROM civicrm_contact, civicrm_membership - WHERE civicrm_contact.id = civicrm_membership.contact_id - AND civicrm_membership.id = $activity->owner_membership_id -"; - $displayName = CRM_Core_DAO::singleValueQuery($query); - $subject .= " (by {$displayName})"; - } - - $subject .= " - Status: " . CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipStatus', $activity->status_id, 'label'); - // CRM-72097 changed from start date to today - $date = date('YmdHis'); $component = 'Membership'; } elseif ($activity->__table == 'civicrm_participant') { - $event = CRM_Event_BAO_Event::getEvents(1, $activity->event_id, TRUE, FALSE); - - $roles = CRM_Event_PseudoConstant::participantRole(); - $status = CRM_Event_PseudoConstant::participantStatus(); - - $subject = $event[$activity->event_id]; - if (!empty($roles[$activity->role_id])) { - $subject .= ' - ' . $roles[$activity->role_id]; - } - if (!empty($status[$activity->status_id])) { - $subject .= ' - ' . $status[$activity->status_id]; - } - $date = date('YmdHis'); if ($activityType != 'Email') { $activityType = 'Event Registration'; } @@ -2102,27 +2081,38 @@ SELECT display_name if ($activity->contribution_status_id != 1) { return NULL; } + $activityType = $component = 'Contribution'; - $subject = NULL; - - $subject .= CRM_Utils_Money::format($activity->total_amount, $activity->currency); - if (!empty($activity->source) && $activity->source != 'null') { - $subject .= " - {$activity->source}"; + // retrieve existing activity based on source_record_id and activity_type + if (empty($params['id'])) { + $params['id'] = CRM_Utils_Array::value('id', civicrm_api3('Activity', 'Get', array( + 'source_record_id' => $activity->id, + 'activity_type_id' => $activityType, + ))); } + if (!empty($params['id'])) { + // CRM-13237 : if activity record found, update it with campaign id of contribution + $params['campaign_id'] = $activity->campaign_id; + } + $date = CRM_Utils_Date::isoToMysql($activity->receive_date); - $activityType = $component = 'Contribution'; } + $activityParams = array( 'source_contact_id' => $activity->contact_id, 'source_record_id' => $activity->id, 'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', $activityType), - 'subject' => $subject, 'activity_date_time' => $date, 'is_test' => $activity->is_test, 'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', 'Completed'), 'skipRecentView' => TRUE, 'campaign_id' => $activity->campaign_id, ); + $activityParams = array_merge($activityParams, $params); + + if (empty($activityParams['subject'])) { + $activityParams['subject'] = self::getActivitySubject($activity); + } if (!empty($activity->activity_id)) { $activityParams['id'] = $activity->activity_id; @@ -2150,6 +2140,61 @@ SELECT display_name } } + /** + * Get activity subject on basis of component object. + * + * @param object $entityObj + * particular component object. + * + * @return string + */ + public static function getActivitySubject($entityObj) { + switch ($entityObj->__table) { + case 'civicrm_membership': + $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}"; + } + + if ($entityObj->owner_membership_id) { + list($displayName) = CRM_Contact_BAO_Contact::getDisplayAndImage(CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $entityObj->owner_membership_id, 'contact_id')); + $subject .= sprintf(' (by %s)', $displayName); + } + + $subject .= " - Status: " . CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipStatus', $entityObj->status_id, 'label'); + return $subject; + + case 'civicrm_participant': + $event = CRM_Event_BAO_Event::getEvents(1, $entityObj->event_id, TRUE, FALSE); + $roles = CRM_Event_PseudoConstant::participantRole(); + $status = CRM_Event_PseudoConstant::participantStatus(); + $subject = $event[$entityObj->event_id]; + + if (!empty($roles[$entityObj->role_id])) { + $subject .= ' - ' . $roles[$entityObj->role_id]; + } + if (!empty($status[$entityObj->status_id])) { + $subject .= ' - ' . $status[$entityObj->status_id]; + } + + return $subject; + + case 'civicrm_contribution': + $subject = CRM_Utils_Money::format($entityObj->total_amount, $entityObj->currency); + if (!CRM_Utils_System::isNull($entityObj->source)) { + $subject .= " - {$entityObj->source}"; + } + + return $subject; + } + } + /** * Get Parent activity for currently viewed activity. * @@ -2391,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. * @@ -2757,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 {