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 @@