/** * Send the message to a specific contact. * * @param string $from * The name and email of the sender. * @param int $fromID * @param int $toID * The contact id of the recipient. * @param string $subject * The subject of the message. * @param $text_message * @param $html_message * @param string $emailAddress * Use this 'to' email address instead of the default Primary address. * @param int $activityID * The activity ID that tracks the message. * @param null $attachments * @param null $cc * @param null $bcc * * @return bool * TRUE if successful else FALSE. */ public static function sendMessage($from, $fromID, $toID, &$subject, &$text_message, &$html_message, $emailAddress, $activityID, $attachments = NULL, $cc = NULL, $bcc = NULL) { list($toDisplayName, $toEmail, $toDoNotEmail) = CRM_Contact_BAO_Contact::getContactDetails($toID); if ($emailAddress) { $toEmail = trim($emailAddress); } // make sure both email addresses are valid // and that the recipient wants to receive email if (empty($toEmail) or $toDoNotEmail) { return FALSE; } if (!trim($toDisplayName)) { $toDisplayName = $toEmail; } $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name'); $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts); // create the params array $mailParams = array('groupName' => 'Activity Email Sender', 'from' => $from, 'toName' => $toDisplayName, 'toEmail' => $toEmail, 'subject' => $subject, 'cc' => $cc, 'bcc' => $bcc, 'text' => $text_message, 'html' => $html_message, 'attachments' => $attachments); if (!CRM_Utils_Mail::send($mailParams)) { return FALSE; } // add activity target record for every mail that is send $activityTargetParams = array('activity_id' => $activityID, 'contact_id' => $toID, 'record_type_id' => $targetID); CRM_Activity_BAO_ActivityContact::create($activityTargetParams); return TRUE; }
/** * Takes an associative array and creates a friend object. * * @param array $params * (reference ) an assoc array of name/value pairs. * * @return void */ public static function create(&$params) { $transaction = new CRM_Core_Transaction(); $mailParams = array(); //create contact corresponding to each friend foreach ($params['friend'] as $key => $details) { if ($details["first_name"]) { $contactParams[$key] = array('first_name' => $details["first_name"], 'last_name' => $details["last_name"], 'contact_source' => ts('Tell a Friend') . ": {$params['title']}", 'email-Primary' => $details["email"]); $displayName = $details["first_name"] . " " . $details["last_name"]; $mailParams['email'][$displayName] = $details["email"]; } } $frndParams = array(); $frndParams['entity_id'] = $params['entity_id']; $frndParams['entity_table'] = $params['entity_table']; self::getValues($frndParams); $activityTypeId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue', 'Tell a Friend', 'value', 'name'); //create activity $activityParams = array('source_contact_id' => $params['source_contact_id'], 'source_record_id' => NULL, 'activity_type_id' => $activityTypeId, 'title' => $params['title'], 'activity_date_time' => date("YmdHis"), 'subject' => ts('Tell a Friend') . ": {$params['title']}", 'details' => $params['suggested_message'], 'status_id' => 2, 'is_test' => $params['is_test'], 'campaign_id' => CRM_Utils_Array::value('campaign_id', $params)); //activity creation $activity = CRM_Activity_BAO_Activity::create($activityParams); $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name'); $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts); //friend contacts creation foreach ($contactParams as $key => $value) { //create contact only if it does not exits in db $value['email'] = $value['email-Primary']; $value['check_permission'] = FALSE; $contact = CRM_Core_BAO_UFGroup::findContact($value, NULL, 'Individual'); if (!$contact) { $contact = self::add($value); } // attempt to save activity targets $targetParams = array('activity_id' => $activity->id, 'contact_id' => $contact, 'record_type_id' => $targetID); // See if it already exists $activityContact = new CRM_Activity_DAO_ActivityContact(); $activityContact->activity_id = $activity->id; $activityContact->contact_id = $contact; $activityContact->find(TRUE); if (empty($activityContact->id)) { $resultTarget = CRM_Activity_BAO_ActivityContact::create($targetParams); } } $transaction->commit(); //process sending of mails $mailParams['title'] = CRM_Utils_Array::value('title', $params); $mailParams['general_link'] = CRM_Utils_Array::value('general_link', $frndParams); $mailParams['message'] = CRM_Utils_Array::value('suggested_message', $params); // get domain $domainDetails = CRM_Core_BAO_Domain::getNameAndEmail(); list($username, $mailParams['domain']) = explode('@', $domainDetails[1]); $default = array(); $findProperties = array('id' => $params['entity_id']); if ($params['entity_table'] == 'civicrm_contribution_page') { $returnProperties = array('receipt_from_email', 'is_email_receipt'); CRM_Core_DAO::commonRetrieve('CRM_Contribute_DAO_ContributionPage', $findProperties, $default, $returnProperties); //if is_email_receipt is set then take receipt_from_email //as from_email if (!empty($default['is_email_receipt']) && !empty($default['receipt_from_email'])) { $mailParams['email_from'] = $default['receipt_from_email']; } $urlPath = 'civicrm/contribute/transact'; $mailParams['module'] = 'contribute'; } elseif ($params['entity_table'] == 'civicrm_event') { $returnProperties = array('confirm_from_email', 'is_email_confirm'); CRM_Core_DAO::commonRetrieve('CRM_Event_DAO_Event', $findProperties, $default, $returnProperties); $mailParams['email_from'] = $domainDetails['1']; //if is_email_confirm is set then take confirm_from_email //as from_email if (!empty($default['is_email_confirm']) && !empty($default['confirm_from_email'])) { $mailParams['email_from'] = $default['confirm_from_email']; } $urlPath = 'civicrm/event/info'; $mailParams['module'] = 'event'; } elseif ($params['entity_table'] == 'civicrm_pcp') { $mailParams['email_from'] = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Email', $params['source_contact_id'], 'email', 'contact_id'); $urlPath = 'civicrm/pcp/info'; $mailParams['module'] = 'contribute'; } $mailParams['page_url'] = CRM_Utils_System::url($urlPath, "reset=1&id={$params['entity_id']}", TRUE, NULL, FALSE, TRUE); //send mail self::sendMail($params['source_contact_id'], $mailParams); }
/** * @param array $params * * @return array */ public static function _convertToCaseActivity($params) { if (!$params['activityID'] || !$params['caseID']) { return array('error_msg' => 'required params missing.'); } $otherActivity = new CRM_Activity_DAO_Activity(); $otherActivity->id = $params['activityID']; if (!$otherActivity->find(TRUE)) { return array('error_msg' => 'activity record is missing.'); } $actDateTime = CRM_Utils_Date::isoToMysql($otherActivity->activity_date_time); // Create new activity record. $mainActivity = new CRM_Activity_DAO_Activity(); $mainActVals = array(); CRM_Core_DAO::storeValues($otherActivity, $mainActVals); // Get new activity subject. if (!empty($params['newSubject'])) { $mainActVals['subject'] = $params['newSubject']; } $mainActivity->copyValues($mainActVals); $mainActivity->id = NULL; $mainActivity->activity_date_time = $actDateTime; // Make sure this is current revision. $mainActivity->is_current_revision = TRUE; // Drop all relations. $mainActivity->parent_id = $mainActivity->original_id = NULL; $mainActivity->save(); $mainActivityId = $mainActivity->id; CRM_Activity_BAO_Activity::logActivityAction($mainActivity); $mainActivity->free(); // Mark previous activity as deleted. If it was a non-case activity // then just change the subject. if (in_array($params['mode'], array('move', 'file'))) { $caseActivity = new CRM_Case_DAO_CaseActivity(); $caseActivity->case_id = $params['caseID']; $caseActivity->activity_id = $otherActivity->id; if ($params['mode'] == 'move' || $caseActivity->find(TRUE)) { $otherActivity->is_deleted = 1; } else { $otherActivity->subject = ts('(Filed on case %1)', array(1 => $params['caseID'])) . ' ' . $otherActivity->subject; } $otherActivity->activity_date_time = $actDateTime; $otherActivity->save(); $caseActivity->free(); } $otherActivity->free(); $targetContacts = array(); if (!empty($params['targetContactIds'])) { $targetContacts = array_unique(explode(',', $params['targetContactIds'])); } $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name'); $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts); $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts); $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts); $sourceContactID = CRM_Activity_BAO_Activity::getSourceContactID($params['activityID']); $src_params = array('activity_id' => $mainActivityId, 'contact_id' => $sourceContactID, 'record_type_id' => $sourceID); CRM_Activity_BAO_ActivityContact::create($src_params); foreach ($targetContacts as $key => $value) { $targ_params = array('activity_id' => $mainActivityId, 'contact_id' => $value, 'record_type_id' => $targetID); CRM_Activity_BAO_ActivityContact::create($targ_params); } // typically this will be empty, since assignees on another case may be completely different $assigneeContacts = array(); if (!empty($params['assigneeContactIds'])) { $assigneeContacts = array_unique(explode(',', $params['assigneeContactIds'])); } foreach ($assigneeContacts as $key => $value) { $assigneeParams = array('activity_id' => $mainActivityId, 'contact_id' => $value, 'record_type_id' => $assigneeID); CRM_Activity_BAO_ActivityContact::create($assigneeParams); } // Attach newly created activity to case. $caseActivity = new CRM_Case_DAO_CaseActivity(); $caseActivity->case_id = $params['caseID']; $caseActivity->activity_id = $mainActivityId; $caseActivity->save(); $error_msg = $caseActivity->_lastError; $caseActivity->free(); $params['mainActivityId'] = $mainActivityId; CRM_Activity_BAO_Activity::copyExtendedActivityData($params); return array('error_msg' => $error_msg, 'newId' => $mainActivity->id); }
/** * @param CRM_Core_Form $form * @param $html_message * @param $contactIds * * @throws CRM_Core_Exception */ public static function createActivities($form, $html_message, $contactIds) { //Added for CRM-12682: Add activity subject and campaign fields $formValues = $form->controller->exportValues($form->getName()); $session = CRM_Core_Session::singleton(); $userID = $session->get('userID'); $activityTypeID = CRM_Core_OptionGroup::getValue('activity_type', 'Print PDF Letter', 'name'); $activityParams = array('subject' => $formValues['subject'], 'campaign_id' => CRM_Utils_Array::value('campaign_id', $formValues), 'source_contact_id' => $userID, 'activity_type_id' => $activityTypeID, 'activity_date_time' => date('YmdHis'), 'details' => $html_message); if (!empty($form->_activityId)) { $activityParams += array('id' => $form->_activityId); } if ($form->_cid) { $activity = CRM_Activity_BAO_Activity::create($activityParams); if (!empty($form->_caseId)) { $caseActivityParams = array('activity_id' => $activity->id, 'case_id' => $form->_caseId); CRM_Case_BAO_Case::processCaseActivity($caseActivityParams); } } else { // create Print PDF activity for each selected contact. CRM-6886 $activityIds = array(); foreach ($contactIds as $contactId) { $activityID = CRM_Activity_BAO_Activity::create($activityParams); $activityIds[$contactId] = $activityID->id; } } $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name'); $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts); //@todo why are we using $form->_contactIds here & contactIds above - need comment foreach ($form->_contactIds as $contactId) { $activityTargetParams = array('activity_id' => empty($activity->id) ? $activityIds[$contactId] : $activity->id, 'contact_id' => $contactId, 'record_type_id' => $targetID); CRM_Activity_BAO_ActivityContact::create($activityTargetParams); } }
/** * Handle the different actions, should probably be handles at base class level ... * * @param type $match * @param type $btx */ public function executeCancellation($match, $btx) { $config = $this->_plugin_config; $contribution_id = $match->getParameter('contribution_id'); $mandate_id = $match->getParameter('mandate_id'); $status_cancelled = banking_helper_optionvalue_by_groupname_and_name('contribution_status', 'Cancelled'); // set the status to 'Cancelled' $query = array('version' => 3, 'id' => $contribution_id); $query['contribution_status_id'] = $status_cancelled; $query['cancel_date'] = date('Ymdhis', strtotime($btx->value_date)); $query = array_merge($query, $this->getPropagationSet($btx, $match, 'contribution', $config->cancellation_value_propagation)); // add propagated values if (empty($query['cancel_reason'])) { // add default values $query['cancel_reason'] = $config->cancellation_default_reason; } if ($config->cancellation_cancel_reason) { $query['cancel_reason'] = $match->getParameter('cancel_reason'); } $result = civicrm_api('Contribution', 'create', $query); if (isset($result['is_error']) && $result['is_error']) { error_log("org.project60.sepa: matcher_sepa: Couldn't modify contribution, error was: " . $result['error_message']); CRM_Core_Session::setStatus(ts("Couldn't modify contribution."), ts('Error'), 'error'); } else { // now for the mandate... $contribution = civicrm_api('Contribution', 'getsingle', array('version' => 3, 'id' => $contribution_id)); if (!empty($contribution['is_error'])) { error_log("org.project60.sepa: matcher_sepa: Couldn't load contribution, error was: " . $result['error_message']); CRM_Core_Session::setStatus(ts("Couldn't modify contribution."), ts('Error'), 'error'); } else { if ('OOFF' == $contribution['contribution_payment_instrument'] && !empty($config->cancellation_update_mandate_status_OOFF)) { // everything seems fine, adjust the mandate's status $query = array('version' => 3, 'id' => $mandate_id); $query['status'] = $config->cancellation_update_mandate_status_OOFF; $query = array_merge($query, $this->getPropagationSet($btx, $match, 'mandate')); // add propagated values $result = civicrm_api('SepaMandate', 'create', $query); if (!empty($result['is_error'])) { error_log("org.project60.sepa: matcher_sepa: Couldn't modify mandate, error was: " . $result['error_message']); CRM_Core_Session::setStatus(ts("Couldn't modify mandate."), ts('Error'), 'error'); } } elseif ('RCUR' == $contribution['contribution_payment_instrument'] && !empty($config->cancellation_update_mandate_status_RCUR)) { // everything seems fine, adjust the mandate's status $query = array('version' => 3, 'id' => $mandate_id); $query['status'] = $config->cancellation_update_mandate_status_RCUR; $query = array_merge($query, $this->getPropagationSet($btx, $match, 'mandate')); // add propagated values $result = civicrm_api('SepaMandate', 'create', $query); if (!empty($result['is_error'])) { error_log("org.project60.sepa: matcher_sepa: Couldn't modify mandate, error was: " . $result['error_message']); CRM_Core_Session::setStatus(ts("Couldn't modify mandate."), ts('Error'), 'error'); } } } } // create activity if wanted if ($config->cancellation_create_activity) { // gather some information to put in the text $smarty_vars = array(); $smarty_vars['contribution'] = $contribution; $smarty_vars['cancel_fee'] = $match->getParameter('cancel_fee'); $smarty_vars['cancel_reason'] = $match->getParameter('cancel_reason'); // load the mandate $mandate = civicrm_api('SepaMandate', 'getsingle', array('id' => $mandate_id, 'version' => 3)); $smarty_vars['mandate'] = $mandate; // load the contact $contact = civicrm_api('Contact', 'getsingle', array('id' => $contribution['contact_id'], 'version' => 3)); $smarty_vars['contact'] = $contact; // count the cancelled contributions connected to this mandate $cancelled_contribution_count = 0; $current_contribution_date = date('Ymdhis', strtotime($contribution['receive_date'])); if ($mandate['type'] == 'RCUR') { $query = "SELECT contribution_status_id\n FROM civicrm_contribution\n WHERE contribution_recur_id = {$mandate['entity_id']}\n AND receive_date <= '{$current_contribution_date}'\n ORDER BY receive_date DESC;"; $status_list = CRM_Core_DAO::executeQuery($query); while ($status_list->fetch()) { if ($status_list->contribution_status_id == $status_cancelled) { $cancelled_contribution_count += 1; } else { break; } } } $smarty_vars['cancelled_contribution_count'] = $cancelled_contribution_count; // look up contact if not set $user_id = CRM_Core_Session::singleton()->get('userID'); if (empty($config->cancellation_create_activity_assignee_id)) { $assignedTo = $user_id; } else { $assignedTo = (int) $config->cancellation_create_activity_assignee_id; } // compile the text $smarty = CRM_Banking_Helpers_Smarty::singleton(); $smarty->pushScope($smarty_vars); if (empty($config->cancellation_create_activity_text)) { $details = $smarty->fetch('CRM/Banking/PluginImpl/Matcher/SepaMandate.activity.tpl'); } else { $details = $smarty->fetch("string:" . $config->cancellation_create_activity_text); } $smarty->popScope(); $activity_parameters = array('version' => 3, 'activity_type_id' => $config->cancellation_create_activity_type_id, 'subject' => $config->cancellation_create_activity_subject, 'status_id' => 1, 'activity_date_time' => date('YmdHis'), 'source_contact_id' => $user_id, 'target_contact_id' => $contact['id'], 'details' => $details); $activity = CRM_Activity_BAO_Activity::create($activity_parameters); $assignment_parameters = array('activity_id' => $activity->id, 'contact_id' => $assignedTo, 'record_type_id' => 1); $assignment = CRM_Activity_BAO_ActivityContact::create($assignment_parameters); } $newStatus = banking_helper_optionvalueid_by_groupname_and_name('civicrm_banking.bank_tx_status', 'Processed'); $btx->setStatus($newStatus); parent::execute($match, $btx); return true; }
static function sendInviteEmail($message_template, $contact_id, $emailParams = array(), $teampcpId, $activityId) { $mailParams = array(); $contactParams = array(); if (isset($emailParams['tplParams'])) { $mailParams['tplParams'] = $emailParams['tplParams']; } //create contact corresponding to each friend foreach ($emailParams['friend'] as $key => $details) { if ($details["first_name"]) { $displayName = $details["first_name"] . " " . $details["last_name"]; $contactParams[$key] = array('first_name' => $details["first_name"], 'last_name' => $details["last_name"], 'contact_source' => ts('PCP Team Invite'), 'email-Primary' => $details["email"], 'display_name' => $displayName); $mailParams['email'][$displayName] = $contactParams[$key]; } } if (empty($mailParams)) { return NULL; } $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name'); $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts); //friend contacts creation foreach ($contactParams as $key => $value) { //create contact only if it does not exits in db $value['email'] = $value['email-Primary']; $value['check_permission'] = FALSE; $contact = CRM_Core_BAO_UFGroup::findContact($value, NULL, 'Individual'); if (!$contact) { $contact = CRM_Contact_BAO_Contact::createProfileContact($value, CRM_Core_DAO::$_nullArray); } // attempt to save activity targets $targetParams = array('activity_id' => $activityId, 'contact_id' => $contact, 'record_type_id' => $targetID); // See if it already exists $activityContact = new CRM_Activity_DAO_ActivityContact(); $activityContact->activity_id = $activityId; $activityContact->contact_id = $contact; $activityContact->find(TRUE); if (empty($activityContact->id)) { CRM_Activity_BAO_ActivityContact::create($targetParams); } } $mailParams['valueName'] = $message_template; return self::sendMail($contact_id, $mailParams); }