/** * Process the form after the input has been submitted and validated. * * * @param CRM_Core_Form $form * * @return void */ public static function postProcess(&$form) { // check and ensure that $thisValues = $form->controller->exportValues($form->getName()); $fromSmsProviderId = $thisValues['sms_provider_id']; // process message template if (!empty($thisValues['saveTemplate']) || !empty($thisValues['updateTemplate'])) { $messageTemplate = array('msg_text' => $thisValues['sms_text_message'], 'is_active' => TRUE); if (!empty($thisValues['saveTemplate'])) { $messageTemplate['msg_title'] = $thisValues['saveTemplateName']; CRM_Core_BAO_MessageTemplate::add($messageTemplate); } if (!empty($thisValues['template']) && !empty($thisValues['updateTemplate'])) { $messageTemplate['id'] = $thisValues['template']; unset($messageTemplate['msg_title']); CRM_Core_BAO_MessageTemplate::add($messageTemplate); } } // format contact details array to handle multiple sms from same contact $formattedContactDetails = array(); $tempPhones = array(); foreach ($form->_contactIds as $key => $contactId) { $phone = $form->_toContactPhone[$key]; if ($phone) { $phoneKey = "{$contactId}::{$phone}"; if (!in_array($phoneKey, $tempPhones)) { $tempPhones[] = $phoneKey; if (!empty($form->_contactDetails[$contactId])) { $formattedContactDetails[] = $form->_contactDetails[$contactId]; } } } } // $smsParams carries all the arguments provided on form (or via hooks), to the provider->send() method // this gives flexibity to the users / implementors to add their own args via hooks specific to their sms providers $smsParams = $thisValues; unset($smsParams['sms_text_message']); $smsParams['provider_id'] = $fromSmsProviderId; $contactIds = array_keys($form->_contactDetails); $allContactIds = array_keys($form->_allContactDetails); list($sent, $activityId, $countSuccess) = CRM_Activity_BAO_Activity::sendSMS($formattedContactDetails, $thisValues, $smsParams, $contactIds); if ($countSuccess > 0) { CRM_Core_Session::setStatus(ts('One message was sent successfully.', array('plural' => '%count messages were sent successfully.', 'count' => $countSuccess)), ts('Message Sent', array('plural' => 'Messages Sent', 'count' => $countSuccess)), 'success'); } if (is_array($sent)) { // At least one PEAR_Error object was generated. // Display the error messages to the user. $status = '<ul>'; foreach ($sent as $errMsg) { $status .= '<li>' . $errMsg . '</li>'; } $status .= '</ul>'; CRM_Core_Session::setStatus($status, ts('One Message Not Sent', array('count' => count($sent), 'plural' => '%count Messages Not Sent')), 'info'); } else { //Display the name and number of contacts for those sms is not sent. $smsNotSent = array_diff_assoc($allContactIds, $contactIds); if (!empty($smsNotSent)) { $not_sent = array(); foreach ($smsNotSent as $index => $contactId) { $displayName = $form->_allContactDetails[$contactId]['display_name']; $phone = $form->_allContactDetails[$contactId]['phone']; $contactViewUrl = CRM_Utils_System::url('civicrm/contact/view', "reset=1&cid={$contactId}"); $not_sent[] = "<a href='{$contactViewUrl}' title='{$phone}'>{$displayName}</a>"; } $status = '(' . ts('because no phone number on file or communication preferences specify DO NOT SMS or Contact is deceased'); if (CRM_Utils_System::getClassName($form) == 'CRM_Activity_Form_Task_SMS') { $status .= ' ' . ts("or the contact is not part of the activity '%1'", array(1 => self::RECIEVED_SMS_ACTIVITY_SUBJECT)); } $status .= ')<ul><li>' . implode('</li><li>', $not_sent) . '</li></ul>'; CRM_Core_Session::setStatus($status, ts('One Message Not Sent', array('count' => count($smsNotSent), 'plural' => '%count Messages Not Sent')), 'info'); } } }
/** * process the form after the input has been submitted and validated * * @access public * * @return None */ static function postProcess(&$form) { // check and ensure that $thisValues = $form->controller->exportValues($form->getName()); $fromSmsProviderId = $thisValues['sms_provider_id']; // process message template if (CRM_Utils_Array::value('saveTemplate', $thisValues) || CRM_Utils_Array::value('updateTemplate', $thisValues)) { $messageTemplate = array('msg_text' => $thisValues['text_message'], 'is_active' => TRUE); if (CRM_Utils_Array::value('saveTemplate', $thisValues)) { $messageTemplate['msg_title'] = $thisValues['saveTemplateName']; CRM_Core_BAO_MessageTemplates::add($messageTemplate); } if (CRM_Utils_Array::value('template', $thisValues) && CRM_Utils_Array::value('updateTemplate', $thisValues)) { $messageTemplate['id'] = $thisValues['template']; unset($messageTemplate['msg_title']); CRM_Core_BAO_MessageTemplates::add($messageTemplate); } } // format contact details array to handle multiple sms from same contact $formattedContactDetails = array(); $tempPhones = array(); foreach ($form->_contactIds as $key => $contactId) { $phone = $form->_toContactPhone[$key]; if ($phone) { $phoneKey = "{$contactId}::{$phone}"; if (!in_array($phoneKey, $tempPhones)) { $tempPhones[] = $phoneKey; if (CRM_Utils_Array::value($contactId, $form->_contactDetails)) { $formattedContactDetails[] = $form->_contactDetails[$contactId]; } } } } // $smsParams carries all the arguments provided on form (or via hooks), to the provider->send() method // this gives flexibity to the users / implementors to add their own args via hooks specific to their sms providers $smsParams = $thisValues; unset($smsParams['text_message']); $smsParams['provider_id'] = $fromSmsProviderId; list($sent, $activityId) = CRM_Activity_BAO_Activity::sendSMS($formattedContactDetails, $thisValues, $smsParams, array_keys($form->_contactDetails)); if ($sent) { $status = array('', ts('Your message has been sent.')); } //Display the name and number of contacts for those sms is not sent. $smsNotSent = array_diff_assoc($form->_allContactDetails, $form->_contactDetails); if (!empty($smsNotSent)) { $extraMess = CRM_Utils_System::getClassName($form) == 'CRM_Activity_Form_Task_SMS' ? " or the contact is not a target contact to activity of '" . self::RECIEVED_SMS_ACTIVITY_SUBJECT . "' as subject " : ""; $statusDisplay = ts("SMS not sent to contact(s) (No phone no. on file or communication preferences specify DO NOT SMS or Contact is deceased {$extraMess}): %1", array(1 => count($smsNotSent))) . '<br />' . ts('Details') . ': '; foreach ($smsNotSent as $contactId => $values) { $displayName = $values['display_name']; $phone = $values['phone']; $contactViewUrl = CRM_Utils_System::url('civicrm/contact/view', "reset=1&cid={$contactId}"); $statusDisplay .= "<a href='{$contactViewUrl}'>{$displayName}</a>, "; } $status[] = $statusDisplay; } if (!empty($status)) { CRM_Core_Session::setStatus($status); } }