本文整理汇总了PHP中CRM_Case_BAO_Case::processCaseActivity方法的典型用法代码示例。如果您正苦于以下问题:PHP CRM_Case_BAO_Case::processCaseActivity方法的具体用法?PHP CRM_Case_BAO_Case::processCaseActivity怎么用?PHP CRM_Case_BAO_Case::processCaseActivity使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CRM_Case_BAO_Case
的用法示例。
在下文中一共展示了CRM_Case_BAO_Case::processCaseActivity方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: onChange
public function onChange(CRM_HRCaseUtils_Analyzer $analyzer, $objectRef)
{
if (isset($objectRef->activity_type_id)) {
// Get activity type name & status of the activity being completed
$activityTypeGroup = civicrm_api3('option_group', 'get', array('name' => 'activity_type'));
$activityType = array('value' => $objectRef->activity_type_id, 'option_group_id' => $activityTypeGroup['id']);
$activityTypeID = civicrm_api3('option_value', 'get', $activityType);
$activityTypeID = $activityTypeID['values'][$activityTypeID['id']]['name'];
$activityStatusGroup = civicrm_api3('option_group', 'get', array('name' => 'activity_status'));
$activityStatus = array('value' => $objectRef->status_id, 'option_group_id' => $activityStatusGroup['id']);
$activityStatusID = civicrm_api3('option_value', 'get', $activityStatus);
$activityStatusID = $activityStatusID['values'][$activityStatusID['id']]['name'];
// Schedule Interview Prospect activity
if ($activityTypeID == 'Open Case' && $activityStatusID == 'Completed') {
if ($analyzer->hasActivity($activityTypeID, $activityStatusID)) {
$nextActivity = 'Interview Prospect';
// Get the activity ID for Interview Prospect
$activityID = array('name' => $nextActivity, 'option_group_id' => $activityTypeGroup['id']);
$activityTypeID = civicrm_api3('option_value', 'get', $activityID);
$activityTypeID = $activityTypeID['values'][$activityTypeID['id']]['value'];
$params = self::buildParams($activityTypeID, $nextActivity, $objectRef);
}
} elseif ($activityTypeID == 'Interview Prospect' && $activityStatusID == 'Completed') {
if ($analyzer->hasActivity($activityTypeID, $activityStatusID)) {
$nextActivity = 'Background Check';
// Get the activity ID for Background Check
$activityID = array('name' => $nextActivity, 'option_group_id' => $activityTypeGroup['id']);
$activityTypeID = civicrm_api3('option_value', 'get', $activityID);
$activityTypeID = $activityTypeID['values'][$activityTypeID['id']]['value'];
$params = self::buildParams($activityTypeID, $nextActivity, $objectRef);
}
} elseif ($activityTypeID == 'Background Check' && $activityStatusID == 'Completed') {
return;
}
if (isset($params)) {
$followupActivity = CRM_Activity_BAO_Activity::createFollowupActivity($objectRef->original_id, $params);
if ($followupActivity) {
$caseParams = array('activity_id' => $followupActivity->id, 'case_id' => $objectRef->case_id);
CRM_Case_BAO_Case::processCaseActivity($caseParams);
$analyzer->flush();
}
}
}
}
示例2: postProcess
/**
* Process the user submitted custom data values.
*/
public function postProcess()
{
$params = $this->controller->exportValues($this->_name);
$transaction = new CRM_Core_Transaction();
CRM_Core_BAO_CustomValueTable::postProcess($params, 'civicrm_case', $this->_entityID, 'Case');
$session = CRM_Core_Session::singleton();
$session->pushUserContext(CRM_Utils_System::url('civicrm/contact/view/case', "reset=1&id={$this->_entityID}&cid={$this->_contactID}&action=view"));
$session = CRM_Core_Session::singleton();
$activityTypeID = CRM_Core_OptionGroup::getValue('activity_type', 'Change Custom Data', 'name');
$activityParams = array('activity_type_id' => $activityTypeID, 'source_contact_id' => $session->get('userID'), 'is_auto' => TRUE, 'subject' => $this->_customTitle . " : change data", 'status_id' => CRM_Core_OptionGroup::getValue('activity_status', 'Completed', 'name'), 'target_contact_id' => $this->_contactID, 'details' => json_encode($this->_defaults), 'activity_date_time' => date('YmdHis'));
$activity = CRM_Activity_BAO_Activity::create($activityParams);
$caseParams = array('activity_id' => $activity->id, 'case_id' => $this->_entityID);
CRM_Case_BAO_Case::processCaseActivity($caseParams);
$transaction->commit();
}
示例3: postProcess
/**
* process the form after the input has been submitted and validated
*
* @access public
* @return None
*/
static function postProcess(&$form)
{
if (count($form->_contactIds) > self::MAX_EMAILS_KILL_SWITCH) {
CRM_Core_Error::fatal(ts('Please do not use this task to send a lot of emails (greater than %1). We recommend using CiviMail instead.', array(1 => self::MAX_EMAILS_KILL_SWITCH)));
}
// check and ensure that
$formValues = $form->controller->exportValues($form->getName());
$fromEmail = $formValues['fromEmailAddress'];
$from = CRM_Utils_Array::value($fromEmail, $form->_fromEmails);
$cc = CRM_Utils_Array::value('cc_id', $formValues);
$bcc = CRM_Utils_Array::value('bcc_id', $formValues);
$subject = $formValues['subject'];
// process message template
require_once 'CRM/Core/BAO/MessageTemplates.php';
if (CRM_Utils_Array::value('saveTemplate', $formValues) || CRM_Utils_Array::value('updateTemplate', $formValues)) {
$messageTemplate = array('msg_text' => $formValues['text_message'], 'msg_html' => $formValues['html_message'], 'msg_subject' => $formValues['subject'], 'is_active' => true);
if ($formValues['saveTemplate']) {
$messageTemplate['msg_title'] = $formValues['saveTemplateName'];
CRM_Core_BAO_MessageTemplates::add($messageTemplate);
}
if ($formValues['template'] && $formValues['updateTemplate']) {
$messageTemplate['id'] = $formValues['template'];
unset($messageTemplate['msg_title']);
CRM_Core_BAO_MessageTemplates::add($messageTemplate);
}
}
$attachments = array();
CRM_Core_BAO_File::formatAttachment($formValues, $attachments, null, null);
// format contact details array to handle multiple emails from same contact
$formattedContactDetails = array();
$tempEmails = array();
foreach ($form->_contactIds as $key => $contactId) {
$email = $form->_toContactEmails[$key];
// prevent duplicate emails if same email address is selected CRM-4067
// we should allow same emails for different contacts
$emailKey = "{$contactId}::{$email}";
if (!in_array($emailKey, $tempEmails)) {
$tempEmails[] = $emailKey;
$details = $form->_contactDetails[$contactId];
$details['email'] = $email;
unset($details['email_id']);
$formattedContactDetails[] = $details;
}
}
// send the mail
require_once 'CRM/Activity/BAO/Activity.php';
list($sent, $activityId) = CRM_Activity_BAO_Activity::sendEmail($formattedContactDetails, $subject, $formValues['text_message'], $formValues['html_message'], null, null, $from, $attachments, $cc, $bcc, array_keys($form->_contactDetails));
if ($sent) {
$status = array('', ts('Your message has been sent.'));
}
//Display the name and number of contacts for those email is not sent.
$emailsNotSent = array_diff_assoc($form->_allContactDetails, $form->_contactDetails);
if (!empty($emailsNotSent)) {
$statusOnHold = '';
$statusDisplay = ts('Email not sent to contact(s) (no email address on file or communication preferences specify DO NOT EMAIL or Contact is deceased or Primary email address is On Hold): %1', array(1 => count($emailsNotSent))) . '<br />' . ts('Details') . ': ';
foreach ($emailsNotSent as $contactId => $values) {
$displayName = $values['display_name'];
$email = $values['email'];
$contactViewUrl = CRM_Utils_System::url('civicrm/contact/view', "reset=1&cid={$contactId}");
$statusDisplay .= "<a href='{$contactViewUrl}'>{$displayName}</a>, ";
// build separate status for on hold messages
if ($values['on_hold']) {
$statusOnHold .= ts('Email was not sent to %1 because primary email address (%2) is On Hold.', array(1 => "<a href='{$contactViewUrl}'>{$displayName}</a>", 2 => "<strong>{$email}</strong>")) . '<br />';
}
}
$status[] = $statusDisplay;
}
if ($form->_caseId) {
// if case-id is found in the url, create case activity record
$caseParams = array('activity_id' => $activityId, 'case_id' => $form->_caseId);
require_once 'CRM/Case/BAO/Case.php';
CRM_Case_BAO_Case::processCaseActivity($caseParams);
}
if (strlen($statusOnHold)) {
$status[] = $statusOnHold;
}
CRM_Core_Session::setStatus($status);
}
示例4: createActivity
//.........这里部分代码省略.........
$activityTypeInfo = CRM_Utils_Array::value($activityTypeName, $activityTypes);
if (!$activityTypeInfo) {
$docLink = CRM_Utils_System::docURL2("user/case-management/setup");
CRM_Core_Error::fatal(ts('Activity type %1, found in case configuration file, is not present in the database %2', array(1 => $activityTypeName, 2 => $docLink)));
return FALSE;
}
$activityTypeID = $activityTypeInfo['id'];
if (isset($activityTypeXML->status)) {
$statusName = (string) $activityTypeXML->status;
} else {
$statusName = 'Scheduled';
}
if ($this->_isMultiClient) {
$client = $params['clientID'];
} else {
$client = array(1 => $params['clientID']);
}
//set order
$orderVal = '';
if (isset($activityTypeXML->order)) {
$orderVal = (string) $activityTypeXML->order;
}
if ($activityTypeName == 'Open Case') {
$activityParams = array('activity_type_id' => $activityTypeID, 'source_contact_id' => $params['creatorID'], 'is_auto' => FALSE, 'is_current_revision' => 1, 'subject' => CRM_Utils_Array::value('subject', $params) ? $params['subject'] : $activityTypeName, 'status_id' => CRM_Core_OptionGroup::getValue('activity_status', $statusName, 'name'), 'target_contact_id' => $client, 'medium_id' => CRM_Utils_Array::value('medium_id', $params), 'location' => CRM_Utils_Array::value('location', $params), 'details' => CRM_Utils_Array::value('details', $params), 'duration' => CRM_Utils_Array::value('duration', $params), 'weight' => $orderVal);
} else {
$activityParams = array('activity_type_id' => $activityTypeID, 'source_contact_id' => $params['creatorID'], 'is_auto' => TRUE, 'is_current_revision' => 1, 'status_id' => CRM_Core_OptionGroup::getValue('activity_status', $statusName, 'name'), 'target_contact_id' => $client, 'weight' => $orderVal);
}
//parsing date to default preference format
$params['activity_date_time'] = CRM_Utils_Date::processDate($params['activity_date_time']);
if ($activityTypeName == 'Open Case') {
// we don't set activity_date_time for auto generated
// activities, but we want it to be set for open case.
$activityParams['activity_date_time'] = $params['activity_date_time'];
if (array_key_exists('custom', $params) && is_array($params['custom'])) {
$activityParams['custom'] = $params['custom'];
}
// Add parameters for attachments
$numAttachments = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'max_attachments');
for ($i = 1; $i <= $numAttachments; $i++) {
$attachName = "attachFile_{$i}";
if (isset($params[$attachName]) && !empty($params[$attachName])) {
$activityParams[$attachName] = $params[$attachName];
}
}
} else {
$activityDate = NULL;
//get date of reference activity if set.
if ($referenceActivityName = (string) $activityTypeXML->reference_activity) {
//we skip open case as reference activity.CRM-4374.
if (!empty($params['resetTimeline']) && $referenceActivityName == 'Open Case') {
$activityDate = $params['activity_date_time'];
} else {
$referenceActivityInfo = CRM_Utils_Array::value($referenceActivityName, $activityTypes);
if ($referenceActivityInfo['id']) {
$caseActivityParams = array('activity_type_id' => $referenceActivityInfo['id']);
//if reference_select is set take according activity.
if ($referenceSelect = (string) $activityTypeXML->reference_select) {
$caseActivityParams[$referenceSelect] = 1;
}
$referenceActivity = CRM_Case_BAO_Case::getCaseActivityDates($params['caseID'], $caseActivityParams, TRUE);
if (is_array($referenceActivity)) {
foreach ($referenceActivity as $aId => $details) {
$activityDate = CRM_Utils_Array::value('activity_date', $details);
break;
}
}
}
}
}
if (!$activityDate) {
$activityDate = $params['activity_date_time'];
}
list($activity_date, $activity_time) = CRM_Utils_Date::setDateDefaults($activityDate);
$activityDateTime = CRM_Utils_Date::processDate($activity_date, $activity_time);
//add reference offset to date.
if ((int) $activityTypeXML->reference_offset) {
$activityDateTime = CRM_Utils_Date::intervalAdd('day', (int) $activityTypeXML->reference_offset, $activityDateTime);
}
$activityParams['activity_date_time'] = CRM_Utils_Date::format($activityDateTime);
}
// if same activity is already there, skip and dont touch
$params['activityTypeID'] = $activityTypeID;
$params['activityTypeName'] = $activityTypeName;
if ($this->isActivityPresent($params)) {
return TRUE;
}
$activityParams['case_id'] = $params['caseID'];
if (!empty($activityParams['is_auto'])) {
$activityParams['skipRecentView'] = TRUE;
}
$activity = CRM_Activity_BAO_Activity::create($activityParams);
if (!$activity) {
CRM_Core_Error::fatal();
return FALSE;
}
// create case activity record
$caseParams = array('activity_id' => $activity->id, 'case_id' => $params['caseID']);
CRM_Case_BAO_Case::processCaseActivity($caseParams);
return TRUE;
}
示例5: endPostProcess
/**
* Function to process the form
*
* @access public
* @return None
*/
public function endPostProcess(&$form, &$params, $activity)
{
if (CRM_Utils_Array::value('start_date', $params)) {
$params['start_date'] = CRM_Utils_Date::processDate($params['start_date'], $params['start_date_time']);
}
$caseType = $form->_caseType;
if (!$caseType && $form->_caseId) {
$query = "\nSELECT cov_type.label as case_type FROM civicrm_case \nLEFT JOIN civicrm_option_group cog_type ON cog_type.name = 'case_type'\nLEFT JOIN civicrm_option_value cov_type ON \n( civicrm_case.case_type_id = cov_type.value AND cog_type.id = cov_type.option_group_id ) \nWHERE civicrm_case.id= %1";
$queryParams = array(1 => array($form->_caseId, 'Integer'));
$caseType = CRM_Core_DAO::singleValueQuery($query, $queryParams);
}
if (!$form->_currentlyViewedContactId || !$form->_currentUserId || !$form->_caseId || !$caseType) {
CRM_Core_Error::fatal('Required parameter missing for ChangeCaseType - end post processing');
}
$config =& CRM_Core_Config::singleton();
// 1. save activity subject with new start date
$currentStartDate = CRM_Utils_Date::customFormat(CRM_Core_DAO::getFieldValue('CRM_Case_DAO_Case', $form->_caseId, 'start_date'), $config->dateformatFull);
$newStartDate = CRM_Utils_Date::customFormat(CRM_Utils_Date::mysqlToIso($params['start_date']), $config->dateformatFull);
$subject = 'Change Case Start Date from ' . $currentStartDate . ' to ' . $newStartDate;
$activity->subject = $subject;
$activity->save();
// 2. initiate xml processor
$xmlProcessor = new CRM_Case_XMLProcessor_Process();
$xmlProcessorParams = array('clientID' => $form->_currentlyViewedContactId, 'creatorID' => $form->_currentUserId, 'standardTimeline' => 0, 'activity_date_time' => $params['start_date'], 'caseID' => $form->_caseId, 'caseType' => $caseType, 'activityTypeName' => 'Change Case Start Date', 'activitySetName' => 'standard_timeline', 'resetTimeline' => 1);
$xmlProcessor->run($caseType, $xmlProcessorParams);
// 2.5 Update open case activity date
// Multiple steps since revisioned
if ($form->openCaseActivityId) {
require_once 'CRM/Activity/BAO/Activity.php';
$abao = new CRM_Activity_BAO_Activity();
$oldParams = array('id' => $form->openCaseActivityId);
$oldActivityDefaults = array();
$oldActivity = $abao->retrieve($oldParams, $oldActivityDefaults);
// save the old values
require_once 'api/v2/utils.php';
$openCaseParams = array();
_civicrm_object_to_array($oldActivity, $openCaseParams);
// update existing revision
$oldParams = array('id' => $form->openCaseActivityId, 'is_current_revision' => 0);
require_once 'CRM/Activity/DAO/Activity.php';
$oldActivity = new CRM_Activity_DAO_Activity();
$oldActivity->copyValues($oldParams);
$oldActivity->save();
// change some params for the new one
unset($openCaseParams['id']);
$openCaseParams['activity_date_time'] = $params['start_date'];
$openCaseParams['target_contact_id'] = $oldActivityDefaults['target_contact'];
$openCaseParams['assignee_contact_id'] = $oldActivityDefaults['assignee_contact'];
$session =& CRM_Core_Session::singleton();
$openCaseParams['source_contact_id'] = $session->get('userID');
// original_id always refers to the first activity, so only update if null (i.e. this is the second revision)
$openCaseParams['original_id'] = $openCaseParams['original_id'] ? $openCaseParams['original_id'] : $form->openCaseActivityId;
$newActivity = CRM_Activity_BAO_Activity::create($openCaseParams);
if (is_a($newActivity, 'CRM_Core_Error')) {
CRM_Core_Error::fatal('Unable to update Open Case activity');
} else {
// Create linkage to case
$caseActivityParams = array('activity_id' => $newActivity->id, 'case_id' => $form->_caseId);
require_once "CRM/Case/BAO/Case.php";
CRM_Case_BAO_Case::processCaseActivity($caseActivityParams);
}
}
// 3.status msg
$params['statusMsg'] = ts('Case Start Date changed successfully.');
}
示例6: createCaseRoleActivity
/**
* Function to create activities when Case or Other roles assigned/modified/deleted.
*
* @param $caseId
* @param int $relationshipId relationship id
* @param int $relContactId case role assignee contactId.
*
* @param null $contactId
*
* @internal param int $caseID case id
* @return void on success creates activity and case activity
*
* @static
*/
static function createCaseRoleActivity($caseId, $relationshipId, $relContactId = NULL, $contactId = NULL)
{
if (!$caseId || !$relationshipId || empty($relationshipId)) {
return;
}
$queryParam = array();
if (is_array($relationshipId)) {
$relationshipId = implode(',', $relationshipId);
$relationshipClause = " civicrm_relationship.id IN ({$relationshipId})";
} else {
$relationshipClause = " civicrm_relationship.id = %1";
$queryParam[1] = array($relationshipId, 'Positive');
}
$query = "\n SELECT cc.display_name as clientName,\n cca.display_name as assigneeContactName,\n civicrm_relationship.case_id as caseId,\n civicrm_relationship_type.label_a_b as relation_a_b,\n civicrm_relationship_type.label_b_a as relation_b_a,\n civicrm_relationship.contact_id_b as rel_contact_id,\n civicrm_relationship.contact_id_a as assign_contact_id\n FROM civicrm_relationship_type, civicrm_relationship\n LEFT JOIN civicrm_contact cc ON cc.id = civicrm_relationship.contact_id_b\n LEFT JOIN civicrm_contact cca ON cca.id = civicrm_relationship.contact_id_a\n WHERE civicrm_relationship.relationship_type_id = civicrm_relationship_type.id AND {$relationshipClause}";
$dao = CRM_Core_DAO::executeQuery($query, $queryParam);
while ($dao->fetch()) {
//to get valid assignee contact(s).
if (isset($dao->caseId) || $dao->rel_contact_id != $contactId) {
$caseRelationship = $dao->relation_a_b;
$assigneContactName = $dao->clientName;
$assigneContactIds[$dao->rel_contact_id] = $dao->rel_contact_id;
} else {
$caseRelationship = $dao->relation_b_a;
$assigneContactName = $dao->assigneeContactName;
$assigneContactIds[$dao->assign_contact_id] = $dao->assign_contact_id;
}
}
$session = CRM_Core_Session::singleton();
$activityParams = array('source_contact_id' => $session->get('userID'), 'subject' => $caseRelationship . ' : ' . $assigneContactName, 'activity_date_time' => date('YmdHis'), 'status_id' => CRM_Core_OptionGroup::getValue('activity_status', 'Completed', 'name'));
//if $relContactId is passed, role is added or modified.
if (!empty($relContactId)) {
$activityParams['assignee_contact_id'] = $assigneContactIds;
$activityTypeID = CRM_Core_OptionGroup::getValue('activity_type', 'Assign Case Role', 'name');
} else {
$activityTypeID = CRM_Core_OptionGroup::getValue('activity_type', 'Remove Case Role', 'name');
}
$activityParams['activity_type_id'] = $activityTypeID;
$activity = CRM_Activity_BAO_Activity::create($activityParams);
//create case_activity record.
$caseParams = array('activity_id' => $activity->id, 'case_id' => $caseId);
CRM_Case_BAO_Case::processCaseActivity($caseParams);
}
示例7: create
//.........这里部分代码省略.........
if (!empty($params['id'])) {
$logMsg = "Activity (id: {$result->id} ) updated with ";
} else {
$logMsg = "Activity created for ";
}
$msgs = array();
if (isset($params['source_contact_id'])) {
$msgs[] = "source={$params['source_contact_id']}";
}
if (!empty($params['target_contact_id'])) {
if (is_array($params['target_contact_id']) && !CRM_Utils_array::crmIsEmptyArray($params['target_contact_id'])) {
$msgs[] = "target=" . implode(',', $params['target_contact_id']);
// take only first target
// will be used for recently viewed display
$t = array_slice($params['target_contact_id'], 0, 1);
$recentContactId = $t[0];
} elseif (isset($params['target_contact_id']) && !is_array($params['target_contact_id'])) {
$msgs[] = "target={$params['target_contact_id']}";
// will be used for recently viewed display
$recentContactId = $params['target_contact_id'];
}
} else {
// at worst, take source for recently viewed display
$recentContactId = CRM_Utils_Array::value('source_contact_id', $params);
}
if (isset($params['assignee_contact_id'])) {
if (is_array($params['assignee_contact_id'])) {
$msgs[] = "assignee=" . implode(',', $params['assignee_contact_id']);
} else {
$msgs[] = "assignee={$params['assignee_contact_id']}";
}
}
$logMsg .= implode(', ', $msgs);
self::logActivityAction($result, $logMsg);
if (!empty($params['custom']) && is_array($params['custom'])) {
CRM_Core_BAO_CustomValueTable::store($params['custom'], 'civicrm_activity', $result->id);
}
$transaction->commit();
if (empty($params['skipRecentView'])) {
$recentOther = array();
if (!empty($params['case_id'])) {
$caseContactID = CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseContact', $params['case_id'], 'contact_id', 'case_id');
$url = CRM_Utils_System::url('civicrm/case/activity/view', "reset=1&aid={$activity->id}&cid={$caseContactID}&caseID={$params['case_id']}&context=home");
} else {
$q = "action=view&reset=1&id={$activity->id}&atype={$activity->activity_type_id}&cid=" . CRM_Utils_Array::value('source_contact_id', $params) . "&context=home";
if ($activity->activity_type_id != CRM_Core_OptionGroup::getValue('activity_type', 'Email', 'name')) {
$url = CRM_Utils_System::url('civicrm/activity', $q);
if ($activity->activity_type_id == CRM_Core_OptionGroup::getValue('activity_type', 'Print PDF Letter', 'name')) {
$recentOther['editUrl'] = CRM_Utils_System::url('civicrm/activity/pdf/add', "action=update&reset=1&id={$activity->id}&atype={$activity->activity_type_id}&cid={$params['source_contact_id']}&context=home");
} else {
$recentOther['editUrl'] = CRM_Utils_System::url('civicrm/activity/add', "action=update&reset=1&id={$activity->id}&atype={$activity->activity_type_id}&cid=" . CRM_Utils_Array::value('source_contact_id', $params) . "&context=home");
}
if (CRM_Core_Permission::check("delete activities")) {
$recentOther['deleteUrl'] = CRM_Utils_System::url('civicrm/activity', "action=delete&reset=1&id={$activity->id}&atype={$activity->activity_type_id}&cid=" . CRM_Utils_Array::value('source_contact_id', $params) . "&context=home");
}
} else {
$url = CRM_Utils_System::url('civicrm/activity/view', $q);
if (CRM_Core_Permission::check('delete activities')) {
$recentOther['deleteUrl'] = CRM_Utils_System::url('civicrm/activity', "action=delete&reset=1&id={$activity->id}&atype={$activity->activity_type_id}&cid=" . CRM_Utils_Array::value('source_contact_id', $params) . "&context=home");
}
}
}
if (!isset($activity->parent_id)) {
$recentContactDisplay = CRM_Contact_BAO_Contact::displayName($recentContactId);
// add the recently created Activity
$activityTypes = CRM_Core_PseudoConstant::activityType(TRUE, TRUE);
$activitySubject = CRM_Core_DAO::getFieldValue('CRM_Activity_DAO_Activity', $activity->id, 'subject');
$title = "";
if (isset($activitySubject)) {
$title = $activitySubject . ' - ';
}
$title = $title . $recentContactDisplay;
if (!empty($activityTypes[$activity->activity_type_id])) {
$title .= ' (' . $activityTypes[$activity->activity_type_id] . ')';
}
CRM_Utils_Recent::add($title, $url, $activity->id, 'Activity', $recentContactId, $recentContactDisplay, $recentOther);
}
}
// reset the group contact cache since smart groups might be affected due to this
CRM_Contact_BAO_GroupContactCache::remove();
if (!empty($params['id'])) {
CRM_Utils_Hook::post('edit', 'Activity', $activity->id, $activity);
} else {
CRM_Utils_Hook::post('create', 'Activity', $activity->id, $activity);
}
// if the subject contains a ‘[case #…]’ string, file that activity on the related case (CRM-5916)
$matches = array();
if (preg_match('/\\[case #([0-9a-h]{7})\\]/', CRM_Utils_Array::value('subject', $params), $matches)) {
$key = CRM_Core_DAO::escapeString(CIVICRM_SITE_KEY);
$hash = $matches[1];
$query = "SELECT id FROM civicrm_case WHERE SUBSTR(SHA1(CONCAT('{$key}', id)), 1, 7) = '{$hash}'";
$caseParams = array('activity_id' => $activity->id, 'case_id' => CRM_Core_DAO::singleValueQuery($query));
if ($caseParams['case_id']) {
CRM_Case_BAO_Case::processCaseActivity($caseParams);
} else {
self::logActivityAction($activity, "unknown case hash encountered: {$hash}");
}
}
return $result;
}
示例8: postProcess
//.........这里部分代码省略.........
$this->endPostProcess($newActParams, $activity);
}
// copy files attached to old activity if any, to new one,
// as long as users have not selected the 'delete attachment' option.
if (empty($newActParams['is_delete_attachment'])) {
CRM_Core_BAO_File::copyEntityFile('civicrm_activity', $this->_activityId, 'civicrm_activity', $activity->id);
}
// copy back params to original var
$params = $newActParams;
}
foreach ($vvalue as $vkey => $vval) {
if ($vval['actId']) {
// add tags if exists
$tagParams = array();
if (!empty($params['tag'])) {
foreach ($params['tag'] as $tag) {
$tagParams[$tag] = 1;
}
}
//save static tags
CRM_Core_BAO_EntityTag::create($tagParams, 'civicrm_activity', $vval['actId']);
//save free tags
if (isset($params['taglist']) && !empty($params['taglist'])) {
CRM_Core_Form_Tag::postProcess($params['taglist'], $vval['actId'], 'civicrm_activity', $this);
}
}
// update existing case record if needed
$caseParams = $params;
$caseParams['id'] = $vval['case_id'];
if (!empty($caseParams['case_status_id'])) {
$caseParams['status_id'] = $caseParams['case_status_id'];
}
// unset params intended for activities only
unset($caseParams['subject'], $caseParams['details'], $caseParams['status_id'], $caseParams['custom']);
$case = CRM_Case_BAO_Case::create($caseParams);
// create case activity record
$caseParams = array('activity_id' => $vval['actId'], 'case_id' => $vval['case_id']);
CRM_Case_BAO_Case::processCaseActivity($caseParams);
}
// Insert civicrm_log record for the activity (e.g. store the
// created / edited by contact id and date for the activity)
// Note - civicrm_log is already created by CRM_Activity_BAO_Activity::create()
// send copy to selected contacts.
$mailStatus = '';
$mailToContacts = array();
//CRM-5695
//check for notification settings for assignee contacts
$selectedContacts = array('contact_check');
$activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name');
$assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
if (CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'activity_assignee_notification')) {
$selectedContacts[] = 'assignee_contact_id';
}
foreach ($vvalue as $vkey => $vval) {
foreach ($selectedContacts as $dnt => $val) {
if (array_key_exists($val, $params) && !CRM_Utils_array::crmIsEmptyArray($params[$val])) {
if ($val == 'contact_check') {
$mailStatus = ts("A copy of the activity has also been sent to selected contacts(s).");
} else {
$this->_relatedContacts = CRM_Activity_BAO_ActivityAssignment::getAssigneeNames(array($vval['actId']), TRUE, FALSE);
$mailStatus .= ' ' . ts("A copy of the activity has also been sent to assignee contacts(s).");
}
//build an associative array with unique email addresses.
foreach ($params[$val] as $key => $value) {
if ($val == 'contact_check') {
$id = $key;
} else {
$id = $value;
}
if (isset($id) && array_key_exists($id, $this->_relatedContacts) && isset($this->_relatedContacts[$id]['email'])) {
//if email already exists in array then append with ', ' another role only otherwise add it to array.
if ($contactDetails = CRM_Utils_Array::value($this->_relatedContacts[$id]['email'], $mailToContacts)) {
$caseRole = CRM_Utils_Array::value('role', $this->_relatedContacts[$id]);
$mailToContacts[$this->_relatedContacts[$id]['email']]['role'] = $contactDetails['role'] . ', ' . $caseRole;
} else {
$mailToContacts[$this->_relatedContacts[$id]['email']] = $this->_relatedContacts[$id];
}
}
}
}
}
$extraParams = array('case_id' => $vval['case_id'], 'client_id' => $this->_currentlyViewedContactId);
$result = CRM_Activity_BAO_Activity::sendToAssignee($activity, $mailToContacts, $extraParams);
if (empty($result)) {
$mailStatus = '';
}
// create follow up activity if needed
$followupStatus = '';
if (!empty($params['followup_activity_type_id'])) {
$followupActivity = CRM_Activity_BAO_Activity::createFollowupActivity($vval['actId'], $params);
if ($followupActivity) {
$caseParams = array('activity_id' => $followupActivity->id, 'case_id' => $vval['case_id']);
CRM_Case_BAO_Case::processCaseActivity($caseParams);
$followupStatus = ts("A followup activity has been scheduled.") . '<br /><br />';
}
}
$title = ts("%1 Saved", array(1 => $this->_activityTypeName));
CRM_Core_Session::setStatus($followupStatus . $mailStatus, $title, 'success');
}
}
示例9: civicrm_api3_activity_create
//.........这里部分代码省略.........
*
* @return array Array containing 'is_error' to denote success or failure and details of the created activity
*
* @example ActivityCreate.php Standard create example
* @example Activity/ContactRefCustomField.php Create example including setting a contact reference custom field
* {@example ActivityCreate.php 0}
*
*/
function civicrm_api3_activity_create($params)
{
if (!CRM_Utils_Array::value('id', $params)) {
// an update does not require any mandatory parameters
civicrm_api3_verify_one_mandatory($params, NULL, array('activity_name', 'activity_type_id', 'activity_label'));
}
$errors = array();
// check for various error and required conditions
$errors = _civicrm_api3_activity_check_params($params);
if (!empty($errors)) {
return $errors;
}
// processing for custom data
$values = array();
_civicrm_api3_custom_format_params($params, $values, 'Activity');
if (!empty($values['custom'])) {
$params['custom'] = $values['custom'];
}
$params['skipRecentView'] = TRUE;
// If this is a case activity, see if there is an existing activity
// and set it as an old revision. Also retrieve details we'll need.
$case_id = '';
$createRevision = FALSE;
$oldActivityValues = array();
if (CRM_Utils_Array::value('case_id', $params)) {
$case_id = $params['case_id'];
if (CRM_Utils_Array::value('id', $params)) {
$oldActivityParams = array('id' => $params['id']);
if (!$oldActivityValues) {
CRM_Activity_BAO_Activity::retrieve($oldActivityParams, $oldActivityValues);
}
if (empty($oldActivityValues)) {
return civicrm_api3_create_error(ts("Unable to locate existing activity."), NULL, CRM_Core_DAO::$_nullObject);
} else {
require_once 'CRM/Activity/DAO/Activity.php';
$activityDAO = new CRM_Activity_DAO_Activity();
$activityDAO->id = $params['id'];
$activityDAO->is_current_revision = 0;
if (!$activityDAO->save()) {
return civicrm_api3_create_error(ts("Unable to revision existing case activity."), NULL, $activityDAO);
}
$createRevision = TRUE;
}
}
}
$deleteActivityAssignment = FALSE;
if (isset($params['assignee_contact_id'])) {
$deleteActivityAssignment = TRUE;
}
$deleteActivityTarget = FALSE;
if (isset($params['target_contact_id'])) {
$deleteActivityTarget = TRUE;
}
$params['deleteActivityAssignment'] = CRM_Utils_Array::value('deleteActivityAssignment', $params, $deleteActivityAssignment);
$params['deleteActivityTarget'] = CRM_Utils_Array::value('deleteActivityTarget', $params, $deleteActivityTarget);
if ($case_id && $createRevision) {
// This is very similar to the copy-to-case action.
if (!CRM_Utils_Array::crmIsEmptyArray($oldActivityValues['target_contact'])) {
$oldActivityValues['targetContactIds'] = implode(',', array_unique($oldActivityValues['target_contact']));
}
if (!CRM_Utils_Array::crmIsEmptyArray($oldActivityValues['assignee_contact'])) {
$oldActivityValues['assigneeContactIds'] = implode(',', array_unique($oldActivityValues['assignee_contact']));
}
$oldActivityValues['mode'] = 'copy';
$oldActivityValues['caseID'] = $case_id;
$oldActivityValues['activityID'] = $oldActivityValues['id'];
$oldActivityValues['contactID'] = $oldActivityValues['source_contact_id'];
require_once 'CRM/Activity/Page/AJAX.php';
$copyToCase = CRM_Activity_Page_AJAX::_convertToCaseActivity($oldActivityValues);
if (empty($copyToCase['error_msg'])) {
// now fix some things that are different from copy-to-case
// then fall through to the create below to update with the passed in params
$params['id'] = $copyToCase['newId'];
$params['is_auto'] = 0;
$params['original_id'] = empty($oldActivityValues['original_id']) ? $oldActivityValues['id'] : $oldActivityValues['original_id'];
} else {
return civicrm_api3_create_error(ts("Unable to create new revision of case activity."), NULL, CRM_Core_DAO::$_nullObject);
}
}
// create activity
$activityBAO = CRM_Activity_BAO_Activity::create($params);
if (isset($activityBAO->id)) {
if ($case_id && !$createRevision) {
// If this is a brand new case activity we need to add this
$caseActivityParams = array('activity_id' => $activityBAO->id, 'case_id' => $case_id);
require_once 'CRM/Case/BAO/Case.php';
CRM_Case_BAO_Case::processCaseActivity($caseActivityParams);
}
_civicrm_api3_object_to_array($activityBAO, $activityArray[$activityBAO->id]);
return civicrm_api3_create_success($activityArray, $params, 'activity', 'get', $activityBAO);
}
}
示例10: processCaseTags
function processCaseTags()
{
require_once 'CRM/Core/BAO/EntityTag.php';
$caseId = CRM_Utils_Type::escape($_POST['case_id'], 'Integer');
$tags = CRM_Utils_Type::escape($_POST['tag'], 'String');
if (empty($caseId)) {
echo 'false';
CRM_Utils_System::civiExit();
}
$tagIds = array();
if ($tags) {
$tagIds = explode(',', $tags);
}
$params = array('entity_id' => $caseId, 'entity_table' => 'civicrm_case');
CRM_Core_BAO_EntityTag::del($params);
foreach ($tagIds as $tagid) {
$params['tag_id'] = $tagid;
CRM_Core_BAO_EntityTag::add($params);
}
$session =& CRM_Core_Session::singleton();
require_once "CRM/Activity/BAO/Activity.php";
require_once "CRM/Core/OptionGroup.php";
$activityParams = array();
$activityParams['source_contact_id'] = $session->get('userID');
$activityParams['activity_type_id'] = CRM_Core_OptionGroup::getValue('activity_type', 'Change Case Tags', 'name');
$activityParams['activity_date_time'] = date('YmdHis');
$activityParams['status_id'] = CRM_Core_OptionGroup::getValue('activity_status', 'Completed', 'name');
$activityParams['case_id'] = $caseId;
$activityParams['is_auto'] = 0;
$activityParams['subject'] = 'Change Case Tags';
$activity = CRM_Activity_BAO_Activity::create($activityParams);
require_once "CRM/Case/BAO/Case.php";
$caseParams = array('activity_id' => $activity->id, 'case_id' => $caseId);
CRM_Case_BAO_Case::processCaseActivity($caseParams);
echo 'true';
CRM_Utils_System::civiExit();
}
示例11: addClient
function addClient()
{
$caseId = CRM_Utils_Type::escape($_POST['caseID'], 'Integer');
$contactId = CRM_Utils_Type::escape($_POST['contactID'], 'Integer');
$params = array('case_id' => $caseId, 'contact_id' => $contactId);
$result = CRM_Case_BAO_Case::addCaseToContact($params);
$session = CRM_Core_Session::singleton();
$activityParams = array();
$activityParams['source_contact_id'] = $session->get('userID');
$activityParams['activity_type_id'] = CRM_Core_OptionGroup::getValue('activity_type', 'Add Client To Case', 'name');
$activityParams['activity_date_time'] = date('YmdHis');
$activityParams['status_id'] = CRM_Core_OptionGroup::getValue('activity_status', 'Completed', 'name');
$activityParams['case_id'] = $caseId;
$activityParams['is_auto'] = 0;
$activityParams['subject'] = 'Client Added To Case';
$activity = CRM_Activity_BAO_Activity::create($activityParams);
$caseParams = array('activity_id' => $activity->id, 'case_id' => $caseId);
CRM_Case_BAO_Case::processCaseActivity($caseParams);
echo json_encode(TRUE);
CRM_Utils_System::civiExit();
}
示例12: civicrm_case_activity_create
/**
* Create new activity for a case
*
* @param array( //REQUIRED:
* 'case_id' => int
* 'activity_type_id' => int
* 'source_contact_id' => int
* 'status_id' => int
* 'medium_id' => int // see civicrm option values for possibilities
*
* //OPTIONAL
* 'subject' => str
* 'activity_date_time' => date string // defaults to: date('YmdHis')
* 'details => str
*
* @return activity id
*
* NOTE: For other case activity functions (update, delete, etc) use the Activity API
*
*/
function civicrm_case_activity_create(&$params)
{
_civicrm_initialize();
//check parameters
$errors = _civicrm_case_check_params($params, 'activity');
_civicrm_case_format_params($params, 'activity');
if ($errors) {
return $errors;
}
require_once 'CRM/Activity/BAO/Activity.php';
$activity = CRM_Activity_BAO_Activity::create($params);
$caseParams = array('activity_id' => $activity->id, 'case_id' => $params['case_id']);
CRM_Case_BAO_Case::processCaseActivity($caseParams);
return civicrm_create_success($activity->id);
}
示例13: createActivity
function createActivity($activityTypeXML, &$params)
{
$activityTypeName = (string) $activityTypeXML->name;
$activityTypes =& $this->allActivityTypes();
$activityTypeInfo = CRM_Utils_Array::value($activityTypeName, $activityTypes);
if (!$activityTypeInfo) {
require_once 'CRM/Utils/System.php';
$docLink = CRM_Utils_System::docURL2("CiviCase Configuration");
CRM_Core_Error::fatal(ts('Activity type %1, found in case configuration file, is not present in the database %2', array(1 => $activityTypeName, 2 => $docLink)));
return false;
}
$activityTypeID = $activityTypeInfo['id'];
if (isset($activityTypeXML->status)) {
$statusName = (string) $activityTypeXML->status;
} else {
$statusName = 'Scheduled';
}
require_once 'CRM/Core/OptionGroup.php';
if ($activityTypeName == 'Open Case') {
$activityParams = array('activity_type_id' => $activityTypeID, 'source_contact_id' => $params['creatorID'], 'is_auto' => false, 'is_current_revision' => 1, 'subject' => CRM_Utils_Array::value('subject', $params) ? $params['subject'] : $activityTypeName, 'status_id' => CRM_Core_OptionGroup::getValue('activity_status', $statusName, 'name'), 'target_contact_id' => $params['clientID'], 'medium_id' => CRM_Utils_Array::value('medium_id', $params), 'location' => CRM_Utils_Array::value('location', $params), 'details' => CRM_Utils_Array::value('details', $params), 'duration' => CRM_Utils_Array::value('duration', $params));
} else {
$activityParams = array('activity_type_id' => $activityTypeID, 'source_contact_id' => $params['creatorID'], 'is_auto' => true, 'is_current_revision' => 1, 'status_id' => CRM_Core_OptionGroup::getValue('activity_status', $statusName, 'name'), 'target_contact_id' => $params['clientID']);
}
if ($activityTypeName == 'Open Case') {
// we don't set activity_date_time for auto generated
// activities, but we want it to be set for open case.
$activityParams['activity_date_time'] = $params['activity_date_time'];
if (array_key_exists('custom', $params) && is_array($params['custom'])) {
$activityParams['custom'] = $params['custom'];
}
} else {
$activityDate = null;
//get date of reference activity if set.
if ($referenceActivityName = (string) $activityTypeXML->reference_activity) {
//we skip open case as reference activity.CRM-4374.
if (CRM_Utils_Array::value('resetTimeline', $params) && $referenceActivityName == 'Open Case') {
$activityDate = $params['activity_date_time'];
} else {
$referenceActivityInfo = CRM_Utils_Array::value($referenceActivityName, $activityTypes);
if ($referenceActivityInfo['id']) {
$caseActivityParams = array('activity_type_id' => $referenceActivityInfo['id']);
//if reference_select is set take according activity.
if ($referenceSelect = (string) $activityTypeXML->reference_select) {
$caseActivityParams[$referenceSelect] = 1;
}
require_once 'CRM/Case/BAO/Case.php';
$referenceActivity = CRM_Case_BAO_Case::getCaseActivityDates($params['caseID'], $caseActivityParams, true);
if (is_array($referenceActivity)) {
foreach ($referenceActivity as $aId => $details) {
$activityDate = CRM_Utils_Array::value('activity_date', $details);
break;
}
}
}
}
}
if (!$activityDate) {
$activityDate = $params['activity_date_time'];
}
$datetime = new DateTime($activityDate);
$activityDateTime = CRM_Utils_Date::unformat($datetime->format('Y:m:d:H:i:s'), ':');
//add reference offset to date.
if ((int) $activityTypeXML->reference_offset) {
$activityDateTime = CRM_Utils_Date::intervalAdd('day', (int) $activityTypeXML->reference_offset, $activityDateTime);
}
$activityParams['activity_date_time'] = CRM_Utils_Date::format($activityDateTime);
}
// if same activity is already there, skip and dont touch
$params['activityTypeID'] = $activityTypeID;
$params['activityTypeName'] = $activityTypeName;
if ($this->isActivityPresent($params)) {
return true;
}
$activityParams['case_id'] = $params['caseID'];
if (CRM_Utils_Array::value('is_auto', $activityParams)) {
$activityParams['skipRecentView'] = true;
}
require_once 'CRM/Activity/BAO/Activity.php';
$activity = CRM_Activity_BAO_Activity::create($activityParams);
if (!$activity) {
CRM_Core_Error::fatal();
return false;
}
// create case activity record
$caseParams = array('activity_id' => $activity->id, 'case_id' => $params['caseID']);
require_once 'CRM/Case/BAO/Case.php';
CRM_Case_BAO_Case::processCaseActivity($caseParams);
return true;
}
示例14: postProcess
//.........这里部分代码省略.........
}
if ($activity->id) {
// add tags if exists
$tagParams = array();
if (!empty($params['tag'])) {
foreach ($params['tag'] as $tag) {
$tagParams[$tag] = 1;
}
}
//save static tags
require_once 'CRM/Core/BAO/EntityTag.php';
CRM_Core_BAO_EntityTag::create($tagParams, 'civicrm_activity', $activity->id);
//save free tags
if (isset($params['taglist']) && !empty($params['taglist'])) {
require_once 'CRM/Core/Form/Tag.php';
CRM_Core_Form_Tag::postProcess($params['taglist'], $activity->id, 'civicrm_activity', $this);
}
}
$params['assignee_contact_id'] = $assineeContacts;
// update existing case record if needed
$caseParams = $params;
$caseParams['id'] = $this->_caseId;
if (CRM_Utils_Array::value('case_type_id', $caseParams)) {
$caseParams['case_type_id'] = CRM_Case_BAO_Case::VALUE_SEPERATOR . $caseParams['case_type_id'] . CRM_Case_BAO_Case::VALUE_SEPERATOR;
}
if (CRM_Utils_Array::value('case_status_id', $caseParams)) {
$caseParams['status_id'] = $caseParams['case_status_id'];
}
// unset params intended for activities only
unset($caseParams['subject'], $caseParams['details'], $caseParams['status_id'], $caseParams['custom']);
$case = CRM_Case_BAO_Case::create($caseParams);
// create case activity record
$caseParams = array('activity_id' => $activity->id, 'case_id' => $this->_caseId);
CRM_Case_BAO_Case::processCaseActivity($caseParams);
// create activity assignee records
$assigneeParams = array('activity_id' => $activity->id);
if (!CRM_Utils_Array::crmIsEmptyArray($params['assignee_contact_id'])) {
//skip those assignee contacts which are already assigned
//while sending a copy.CRM-4509.
$activityAssigned = array_flip($params['assignee_contact_id']);
$activityId = isset($this->_activityId) ? $this->_activityId : $activity->id;
$assigneeContacts = CRM_Activity_BAO_ActivityAssignment::getAssigneeNames($activityId);
$activityAssigned = array_diff_key($activityAssigned, $assigneeContacts);
foreach ($params['assignee_contact_id'] as $key => $id) {
$assigneeParams['assignee_contact_id'] = $id;
CRM_Activity_BAO_Activity::createActivityAssignment($assigneeParams);
}
//modify assigne_contact as per newly assigned contact before sending copy. CRM-4509.
$params['assignee_contact_id'] = $activityAssigned;
}
// Insert civicrm_log record for the activity (e.g. store the
// created / edited by contact id and date for the activity)
// Note - civicrm_log is already created by CRM_Activity_BAO_Activity::create()
// send copy to selected contacts.
$mailStatus = '';
$mailToContacts = array();
//CRM-5695
//check for notification settings for assignee contacts
$selectedContacts = array('contact_check');
$config =& CRM_Core_Config::singleton();
if ($config->activityAssigneeNotification) {
$selectedContacts[] = 'assignee_contact_id';
}
foreach ($selectedContacts as $dnt => $val) {
if (array_key_exists($val, $params) && !CRM_Utils_array::crmIsEmptyArray($params[$val])) {
if ($val == 'contact_check') {
示例15: postProcess
//.........这里部分代码省略.........
// CRM-5916: prepend case id hash to CiviCase-originating emails’ subjects
if (isset($form->_caseId) && is_numeric($form->_caseId)) {
$hash = substr(sha1(CIVICRM_SITE_KEY . $form->_caseId), 0, 7);
$subject = "[case #{$hash}] {$subject}";
}
// process message template
if (!empty($formValues['saveTemplate']) || !empty($formValues['updateTemplate'])) {
$messageTemplate = array('msg_text' => $formValues['text_message'], 'msg_html' => $formValues['html_message'], 'msg_subject' => $formValues['subject'], 'is_active' => TRUE);
if (!empty($formValues['saveTemplate'])) {
$messageTemplate['msg_title'] = $formValues['saveTemplateName'];
CRM_Core_BAO_MessageTemplate::add($messageTemplate);
}
if (!empty($formValues['template']) && !empty($formValues['updateTemplate'])) {
$messageTemplate['id'] = $formValues['template'];
unset($messageTemplate['msg_title']);
CRM_Core_BAO_MessageTemplate::add($messageTemplate);
}
}
$attachments = array();
CRM_Core_BAO_File::formatAttachment($formValues, $attachments, NULL, NULL);
// format contact details array to handle multiple emails from same contact
$formattedContactDetails = array();
$tempEmails = array();
foreach ($form->_contactIds as $key => $contactId) {
// if we dont have details on this contactID, we should ignore
// potentially this is due to the contact not wanting to receive email
if (!isset($form->_contactDetails[$contactId])) {
continue;
}
$email = $form->_toContactEmails[$key];
// prevent duplicate emails if same email address is selected CRM-4067
// we should allow same emails for different contacts
$emailKey = "{$contactId}::{$email}";
if (!in_array($emailKey, $tempEmails)) {
$tempEmails[] = $emailKey;
$details = $form->_contactDetails[$contactId];
$details['email'] = $email;
unset($details['email_id']);
$formattedContactDetails[] = $details;
}
}
// send the mail
list($sent, $activityId) = CRM_Activity_BAO_Activity::sendEmail($formattedContactDetails, $subject, $formValues['text_message'], $formValues['html_message'], NULL, NULL, $from, $attachments, $cc, $bcc, array_keys($form->_toContactDetails), $additionalDetails);
$followupStatus = '';
if ($sent) {
$followupActivity = NULL;
if (!empty($formValues['followup_activity_type_id'])) {
$params['followup_activity_type_id'] = $formValues['followup_activity_type_id'];
$params['followup_activity_subject'] = $formValues['followup_activity_subject'];
$params['followup_date'] = $formValues['followup_date'];
$params['followup_date_time'] = $formValues['followup_date_time'];
$params['target_contact_id'] = $form->_contactIds;
$params['followup_assignee_contact_id'] = explode(',', $formValues['followup_assignee_contact_id']);
$followupActivity = CRM_Activity_BAO_Activity::createFollowupActivity($activityId, $params);
$followupStatus = ts('A followup activity has been scheduled.');
if (Civi::settings()->get('activity_assignee_notification')) {
if ($followupActivity) {
$mailToFollowupContacts = array();
$assignee = array($followupActivity->id);
$assigneeContacts = CRM_Activity_BAO_ActivityAssignment::getAssigneeNames($assignee, TRUE, FALSE);
foreach ($assigneeContacts as $values) {
$mailToFollowupContacts[$values['email']] = $values;
}
$sentFollowup = CRM_Activity_BAO_Activity::sendToAssignee($followupActivity, $mailToFollowupContacts);
if ($sentFollowup) {
$followupStatus .= '<br />' . ts("A copy of the follow-up activity has also been sent to follow-up assignee contacts(s).");
}
}
}
}
$count_success = count($form->_toContactDetails);
CRM_Core_Session::setStatus(ts('One message was sent successfully. ', array('plural' => '%count messages were sent successfully. ', 'count' => $count_success)) . $followupStatus, ts('Message Sent', array('plural' => 'Messages Sent', 'count' => $count_success)), 'success');
}
// Display the name and number of contacts for those email is not sent.
// php 5.4 throws out a notice since the values of these below arrays are arrays.
// the behavior is not documented in the php manual, but it does the right thing
// suppressing the notices to get things in good shape going forward
$emailsNotSent = @array_diff_assoc($form->_allContactDetails, $form->_contactDetails);
if ($emailsNotSent) {
$not_sent = array();
foreach ($emailsNotSent as $contactId => $values) {
$displayName = $values['display_name'];
$email = $values['email'];
$contactViewUrl = CRM_Utils_System::url('civicrm/contact/view', "reset=1&cid={$contactId}");
$not_sent[] = "<a href='{$contactViewUrl}' title='{$email}'>{$displayName}</a>" . ($values['on_hold'] ? '(' . ts('on hold') . ')' : '');
}
$status = '(' . ts('because no email address on file or communication preferences specify DO NOT EMAIL or Contact is deceased or Primary email address is On Hold') . ')<ul><li>' . implode('</li><li>', $not_sent) . '</li></ul>';
CRM_Core_Session::setStatus($status, ts('One Message Not Sent', array('count' => count($emailsNotSent), 'plural' => '%count Messages Not Sent')), 'info');
}
if (isset($form->_caseId)) {
// if case-id is found in the url, create case activity record
$cases = explode(',', $form->_caseId);
foreach ($cases as $key => $val) {
if (is_numeric($val)) {
$caseParams = array('activity_id' => $activityId, 'case_id' => $val);
CRM_Case_BAO_Case::processCaseActivity($caseParams);
}
}
}
}