diff --git a/CRM/SmsConversation/BAO/Question.php b/CRM/SmsConversation/BAO/Question.php index 8467e39..74c4a22 100644 --- a/CRM/SmsConversation/BAO/Question.php +++ b/CRM/SmsConversation/BAO/Question.php @@ -86,7 +86,14 @@ static function ask($questionId, $contactId, $convContact) { } $convContact = $convContactUpdated['values'][$convContactUpdated['id']]; - if (CRM_SmsConversation_Processor::sendSMS($contactId, $question['text'], $convContact['source_contact_id'])) { + $params = array( + 'contact_id' => $contactId, + 'source_contact_id' => CRM_Utils_Array::value('source_contact_id', $convContact), + 'text' => CRM_Utils_Array::value('text', $question), + 'sms_provider_id' => CRM_Utils_Array::value('sms_provider_id', $convContact), + ); + + if (CRM_SmsConversation_Processor::sendSMS($params)) { // If there are no actions for the question, we end the conversation $convActions = CRM_SmsConversation_BAO_Action::getAction($questionId); diff --git a/CRM/SmsConversation/DAO/Action.php b/CRM/SmsConversation/DAO/Action.php index 198c55b..b60e49f 100644 --- a/CRM/SmsConversation/DAO/Action.php +++ b/CRM/SmsConversation/DAO/Action.php @@ -30,7 +30,7 @@ * * Generated from xml/schema/CRM/SmsConversation/Action.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e5468bcef2843e5a26d16dffcdd4cdd1) + * (GenCodeChecksum:a390c55a232823276d1e393f38661e92) */ require_once 'CRM/Core/DAO.php'; require_once 'CRM/Utils/Type.php'; @@ -122,7 +122,7 @@ static function &fields() { 'question_id' => array( 'name' => 'question_id', 'type' => CRM_Utils_Type::T_INT, - 'title' => 'Question ID', + 'title' => ts('Question ID') , 'description' => 'FK to sms_conversation_question.id', 'table_name' => 'civicrm_sms_conversation_action', 'entity' => 'Action', diff --git a/CRM/SmsConversation/DAO/Contact.php b/CRM/SmsConversation/DAO/Contact.php index 2f5b13d..fab89ee 100644 --- a/CRM/SmsConversation/DAO/Contact.php +++ b/CRM/SmsConversation/DAO/Contact.php @@ -30,7 +30,7 @@ * * Generated from xml/schema/CRM/SmsConversation/Contact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:900b55f7a9ae47b8962ab3a9278006ec) + * (GenCodeChecksum:92803d3f9c3bb58d0ae2be61e5109563) */ require_once 'CRM/Core/DAO.php'; require_once 'CRM/Utils/Type.php'; @@ -86,6 +86,12 @@ class CRM_SmsConversation_DAO_Contact extends CRM_Core_DAO { * @var int unsigned */ public $source_contact_id; + /** + * FK to civicrm_sms_provider.id + * + * @var int unsigned + */ + public $sms_provider_id; /** * Record of all questions, answers * @@ -118,6 +124,7 @@ static function getReferenceColumns() { Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName() , 'conversation_id', 'civicrm_sms_conversation', 'id'); Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName() , 'current_question_id', 'civicrm_sms_conversation_question', 'id'); Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName() , 'source_contact_id', 'civicrm_contact', 'id'); + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName() , 'sms_provider_id', 'civicrm_sms_provider', 'id'); CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); } return Civi::$statics[__CLASS__]['links']; @@ -196,6 +203,16 @@ static function &fields() { 'localizable' => 0, 'FKClassName' => 'CRM_Contact_DAO_Contact', ) , + 'sms_provider_id' => array( + 'name' => 'sms_provider_id', + 'type' => CRM_Utils_Type::T_INT, + 'description' => 'FK to civicrm_sms_provider.id', + 'table_name' => 'civicrm_sms_conversation_contact', + 'entity' => 'Contact', + 'bao' => 'CRM_SmsConversation_DAO_Contact', + 'localizable' => 0, + 'FKClassName' => 'CRM_SMS_DAO_Provider', + ) , 'conversation_record' => array( 'name' => 'conversation_record', 'type' => CRM_Utils_Type::T_LONGTEXT, diff --git a/CRM/SmsConversation/Form/Schedule.php b/CRM/SmsConversation/Form/Schedule.php index b34689b..6db2033 100644 --- a/CRM/SmsConversation/Form/Schedule.php +++ b/CRM/SmsConversation/Form/Schedule.php @@ -40,6 +40,14 @@ public function buildQuickForm() { ), )); + // Add "From" field to indicate SMS provider. + $providers = CRM_SMS_BAO_Provider::getProviders(NULL, array("is_active" => 1), TRUE, 'is_default desc'); + $providerSelect = array(); + foreach ($providers as $provider) { + $providerSelect[$provider['id']] = $provider['title']; + } + $this->add('select', 'sms_provider_id', ts('From'), $providerSelect, TRUE); + // export form elements parent::buildQuickForm(); } @@ -60,6 +68,7 @@ public function postProcess() { $params['scheduled_date'] = CRM_Utils_Date::processDate($values['scheduled_date'], $values['scheduled_date_time']); $params['source_contact_id'] = $session->get('userID'); $params['process_now'] = TRUE; // Start the conversation immediately + $params['sms_provider_id'] = $values['sms_provider_id']; // Create new conversation for contact try { $status = civicrm_api3('SmsConversationContact', 'schedule', $params); diff --git a/CRM/SmsConversation/Form/ScheduleMultiple.php b/CRM/SmsConversation/Form/ScheduleMultiple.php index 5fbe610..73292a1 100644 --- a/CRM/SmsConversation/Form/ScheduleMultiple.php +++ b/CRM/SmsConversation/Form/ScheduleMultiple.php @@ -63,6 +63,14 @@ public function buildQuickForm() { CRM_Core_Session::setStatus('No selected contacts had valid mobile phones.'); } + // Add "From" field to indicate SMS provider. + $providers = CRM_SMS_BAO_Provider::getProviders(NULL, array("is_active" => 1), TRUE, 'is_default desc'); + $providerSelect = array(); + foreach ($providers as $provider) { + $providerSelect[$provider['id']] = $provider['title']; + } + $this->add('select', 'sms_provider_id', ts('From'), $providerSelect, TRUE); + } @@ -76,6 +84,7 @@ public function postProcess() { $params['conversation_id'] = $values['conversation_id']; $params['scheduled_date'] = CRM_Utils_Date::processDate($values['scheduled_date'], $values['scheduled_date_time']); $params['source_contact_id'] = $session->get('userID'); + $params['sms_provider_id'] = $values['sms_provider_id']; $result = civicrm_api3('SmsConversationContact', 'create', $params); } diff --git a/CRM/SmsConversation/Processor.php b/CRM/SmsConversation/Processor.php index c4ade92..3b12380 100644 --- a/CRM/SmsConversation/Processor.php +++ b/CRM/SmsConversation/Processor.php @@ -99,12 +99,8 @@ function inbound() { * * @return bool */ - static function sendSMS($contactId, $text, $sourceContactId = NULL) { - $result = civicrm_api3('Contact', 'sms', array( - 'contact_id' => $contactId, - 'source_contact_id' => $sourceContactId, - 'text' => $text, - )); + static function sendSMS($params) { + $result = civicrm_api3('Contact', 'sms', $params); if (!empty($result['is_error'])) { return FALSE; diff --git a/CRM/SmsConversation/Upgrader.php b/CRM/SmsConversation/Upgrader.php index 9dc702b..6f7d66b 100644 --- a/CRM/SmsConversation/Upgrader.php +++ b/CRM/SmsConversation/Upgrader.php @@ -16,4 +16,17 @@ public function upgrade_4700() { return TRUE; } + /** + * Add column civicrm_sms_conversation_contact.sms_provider_id + */ + public function upgrade_4701() { + // Set is_active to required, default 1 + $this->ctx->log->info('Applying update 4701'); + CRM_Core_DAO::executeQuery("ALTER TABLE `civicrm_sms_conversation_contact` ADD `sms_provider_id` INT( 10 ) UNSIGNED NULL COMMENT 'FK to civicrm_sms_provider.id' AFTER `source_contact_id`"); + CRM_Core_DAO::executeQuery("SELECT @default_sms_provider_id := id FROM civicrm_sms_provider WHERE is_active AND is_default order by ID limit 1"); + CRM_Core_DAO::executeQuery("UPDATE civicrm_sms_conversation_contact SET sms_provider_id = @default_sms_provider_id"); + CRM_Core_DAO::executeQuery("ALTER TABLE `civicrm_sms_conversation_contact` ADD FOREIGN KEY (`sms_provider_id`) REFERENCES `civicrm_sms_provider`(`id`) ON DELETE SET NULL ON UPDATE RESTRICT"); + return TRUE; + } + } diff --git a/api/v3/Contact/Sms.php b/api/v3/Contact/Sms.php index fcc1b3b..2d617cf 100644 --- a/api/v3/Contact/Sms.php +++ b/api/v3/Contact/Sms.php @@ -50,12 +50,20 @@ function civicrm_api3_contact_sms($params) { return civicrm_api3_create_error('You should include either a contact_id or group_id in your params'); } - // use the default SMS provider - $providers=CRM_SMS_BAO_Provider::getProviders(NULL, array('is_default' => 1)); - if (empty($providers)) { - throw new CRM_Core_Exception('No SMS providers found - Cannot send SMS. Please enable at least one!'); + // Use the specified SMS provider if it's active, otherwise use the default. + if ($smsProviderId = CRM_Utils_Array::value('sms_provider_id', $params)) { + $providers = CRM_SMS_BAO_Provider::getProviders(NULL, array('is_active' => 1, 'id' => $smsProviderId)); + if (empty($providers)) { + $provider = $providers[0]; + } + } + if (empty($provider)) { + $providers=CRM_SMS_BAO_Provider::getProviders(NULL, array('is_default' => 1)); + if (empty($providers)) { + throw new CRM_Core_Exception('No SMS providers found - Cannot send SMS. Please enable at least one!'); + } + $provider = $providers[0]; } - $provider = $providers[0]; $provider['provider_id'] = $provider['id']; //this should be set somehow when not set (or maybe we need to change the underlying BAO to not require it?) diff --git a/api/v3/Job/ProcessSmsConversations.php b/api/v3/Job/ProcessSmsConversations.php index d4762fa..28035d9 100644 --- a/api/v3/Job/ProcessSmsConversations.php +++ b/api/v3/Job/ProcessSmsConversations.php @@ -1,9 +1,7 @@ + + + + diff --git a/templates/CRM/SmsConversation/Form/ScheduleMultiple.tpl b/templates/CRM/SmsConversation/Form/ScheduleMultiple.tpl index 74b940c..6840a3b 100644 --- a/templates/CRM/SmsConversation/Form/ScheduleMultiple.tpl +++ b/templates/CRM/SmsConversation/Form/ScheduleMultiple.tpl @@ -1,5 +1,9 @@
{$form.sms_provider_id.label}{$form.sms_provider_id.html}
{$form.conversation_id.label} {$form.conversation_id.html}
+ + + + diff --git a/xml/schema/SmsConversation/Contact.xml b/xml/schema/SmsConversation/Contact.xml index c8f7da2..46a2565 100644 --- a/xml/schema/SmsConversation/Contact.xml +++ b/xml/schema/SmsConversation/Contact.xml @@ -89,6 +89,20 @@ CASCADE + + sms_provider_id + int unsigned + FK to civicrm_sms_provider.id + 4.7 + + + sms_provider_id +
{$form.sms_provider_id.label}{$form.sms_provider_id.html}
{$form.conversation_id.label} {$form.conversation_id.html}
civicrm_sms_provider
+ id + 4.7 + SET NULL + + conversation_record Record of conversation