You are here

sms_simplegateway.module in SMS simple gateway 6

Same filename and directory in other branches
  1. 7 sms_simplegateway.module

Simple gateway module for Drupal SMS Framework. Outbound+Inbound

For inbound messaging you must configure your gateway to send messages to:

  • http(s)://yourhost.example.com/sms/simplegateway/receiver

@package sms @subpackage sms_simplegateway

File

sms_simplegateway.module
View source
<?php

/**
 * @file
 * Simple gateway module for Drupal SMS Framework. Outbound+Inbound
 *
 * For inbound messaging you must configure your gateway to send messages to:
 *  - http(s)://yourhost.example.com/sms/simplegateway/receiver
 *
 * @package sms
 * @subpackage sms_simplegateway
 */

/**
 * Implement hook_gateway_info()
 *
 * @ingroup hooks
 */
function sms_simplegateway_gateway_info() {
  return array(
    'simplegateway' => array(
      'name' => 'Simple gateway',
      'send' => 'sms_simplegateway_send',
      'configure form' => 'sms_simplegateway_admin_form',
    ),
  );
}

/**
 * Implement hook_menu()
 *
 * @ingroup hooks
 */
function sms_simplegateway_menu() {
  $items = array();
  $items['sms/simplegateway/receiver'] = array(
    'title' => 'Simple gateway SMS message receiver',
    'page callback' => 'sms_simplegateway_receive_message',
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/**
 * Configuration form for gateway module
 *
 * @param $configuration
 *
 * @return
 *   Drupal form array
 */
function sms_simplegateway_admin_form($configuration) {
  $form['sms_simplegateway_send'] = array(
    '#type' => 'fieldset',
    '#title' => 'Sender (outgoing messages)',
    '#collapsible' => TRUE,
  );
  $form['sms_simplegateway_send']['sms_simplegateway_base_url'] = array(
    '#type' => 'textfield',
    '#title' => t('Base URL for sending messages'),
    '#description' => t('Eg: http://simplegateway.example.com:13031/sendsms'),
    '#size' => 60,
    '#maxlength' => 255,
    '#default_value' => $configuration['sms_simplegateway_base_url'],
  );
  $form['sms_simplegateway_send']['sms_simplegateway_method'] = array(
    '#type' => 'radios',
    '#title' => t('HTTP method'),
    '#default_value' => $configuration['sms_simplegateway_method'],
    '#options' => array(
      'GET' => 'GET',
      'POST' => 'POST',
    ),
  );
  $form['sms_simplegateway_send']['sms_simplegateway_user_field'] = array(
    '#type' => 'textfield',
    '#title' => t('Username field name'),
    '#description' => t('Optional. The argument/field name for the field that holds the username. Eg: user, username, authid.'),
    '#size' => 40,
    '#maxlength' => 255,
    '#default_value' => $configuration['sms_simplegateway_user_field'],
  );
  $form['sms_simplegateway_send']['sms_simplegateway_user_value'] = array(
    '#type' => 'textfield',
    '#title' => t('Username field value'),
    '#description' => t('Optional. Your username for this gateway account.'),
    '#size' => 40,
    '#maxlength' => 255,
    '#default_value' => $configuration['sms_simplegateway_user_value'],
  );
  $form['sms_simplegateway_send']['sms_simplegateway_pass_field'] = array(
    '#type' => 'textfield',
    '#title' => t('Password field name'),
    '#description' => t('Optional. The argument/field name for the field that holds the password. Eg: pass, password, passwd.'),
    '#size' => 40,
    '#maxlength' => 255,
    '#default_value' => $configuration['sms_simplegateway_pass_field'],
  );
  $form['sms_simplegateway_send']['sms_simplegateway_pass_value'] = array(
    '#type' => 'textfield',
    '#title' => t('Password field value'),
    '#description' => t('Optional. Your password for this gateway account.'),
    '#size' => 40,
    '#maxlength' => 255,
    '#default_value' => $configuration['sms_simplegateway_pass_value'],
  );
  $form['sms_simplegateway_send']['sms_simplegateway_sender_field'] = array(
    '#type' => 'textfield',
    '#title' => t('Sender (from) field name'),
    '#description' => t('The argument/field name for the field that holds the sender number data. Eg: from, sender'),
    '#size' => 40,
    '#maxlength' => 255,
    '#default_value' => $configuration['sms_simplegateway_sender_field'],
  );
  $form['sms_simplegateway_send']['sms_simplegateway_number_field'] = array(
    '#type' => 'textfield',
    '#title' => t('Number (to) field name'),
    '#description' => t('The argument/field name for the field that holds the number data. Eg: number, to, no'),
    '#size' => 40,
    '#maxlength' => 255,
    '#default_value' => $configuration['sms_simplegateway_number_field'],
  );
  $form['sms_simplegateway_send']['sms_simplegateway_message_field'] = array(
    '#type' => 'textfield',
    '#title' => t('Message field name'),
    '#description' => t('The argument/field name for the field that holds the message text. Eg: message, text, content'),
    '#size' => 40,
    '#maxlength' => 255,
    '#default_value' => $configuration['sms_simplegateway_message_field'],
  );
  $form['sms_simplegateway_receive'] = array(
    '#type' => 'fieldset',
    '#title' => 'Receiver (incoming messages)',
    '#collapsible' => TRUE,
  );
  $form['sms_simplegateway_receive']['sms_simplegateway_recv_url'] = array(
    '#type' => 'item',
    '#title' => 'Target URL for the message receiver',
    '#value' => url('sms/simplegateway/receiver', array(
      'absolute' => TRUE,
    )),
  );
  $form['sms_simplegateway_receive']['sms_simplegateway_recv_number_field'] = array(
    '#type' => 'textfield',
    '#title' => t('Sender (from) field name'),
    '#description' => t('The argument/field name for the field that holds the sender number. Eg: sender, from.'),
    '#size' => 40,
    '#maxlength' => 255,
    '#default_value' => $configuration['sms_simplegateway_recv_number_field'],
  );
  $form['sms_simplegateway_receive']['sms_simplegateway_recv_gwnumber_field'] = array(
    '#type' => 'textfield',
    '#title' => t('Receiver (to) field name'),
    '#description' => t('Optional. The argument/field name for the field that holds the gateway receiver number. Eg: to, inNumber, receiver.'),
    '#size' => 40,
    '#maxlength' => 255,
    '#default_value' => $configuration['sms_simplegateway_recv_gwnumber_field'],
  );
  $form['sms_simplegateway_receive']['sms_simplegateway_recv_message_field'] = array(
    '#type' => 'textfield',
    '#title' => t('Message field name'),
    '#description' => t('The argument/field name for the field that holds the message. Eg: message, text, content.'),
    '#size' => 40,
    '#maxlength' => 255,
    '#default_value' => $configuration['sms_simplegateway_recv_message_field'],
  );
  return $form;
}

/**
 * Send a message
 *
 * @param $number
 *   MSISDN of message recipient. Expected to include the country code prefix.
 * @param $message
 *   Message body text.
 * @param $options
 *   Options array from SMS Framework.
 *
 * @return
 *   Response array.
 */
function sms_simplegateway_send($number, $message, $options) {

  // Get config
  $gateway = sms_gateways('gateway', 'simplegateway');
  $config = $gateway['configuration'];

  // Prepare the URL and get the method
  $url_base = $config['sms_simplegateway_base_url'];
  $method = $config['sms_simplegateway_method'];

  // Lets specify a gw number
  $sender = '';
  if (array_key_exists('sender', $options)) {
    $sender = $options['sender'];
  }

  // Prepare required arguments
  $params = array();
  $user_field = $config['sms_simplegateway_user_field'];
  $user = $config['sms_simplegateway_user_value'];
  if (!empty($user_field)) {
    $params[$user_field] = $user;
  }
  $pass_field = $config['sms_simplegateway_pass_field'];
  $pass = $config['sms_simplegateway_pass_value'];
  if (!empty($pass_field)) {
    $params[$pass_field] = $pass;
  }
  $sender_field = $config['sms_simplegateway_sender_field'];
  if (!empty($sender_field) && !empty($sender)) {
    $params[$sender_field] = $sender;
  }
  $number_field = $config['sms_simplegateway_number_field'];
  $params[$number_field] = $number;
  $message_field = $config['sms_simplegateway_message_field'];
  $params[$message_field] = $message;

  // Prepare the query string
  // Note that we are forcing http_build_query to use '&' as a separator instead of the usual '&amp;'
  $query_string = http_build_query($params, NULL, '&');
  if ($method == 'GET') {
    $url = $url_base . '?' . $query_string;
    $http_result = drupal_http_request($url, array(), 'GET');
  }
  elseif ($method == 'POST') {
    $headers = array(
      'Content-Type' => 'application/x-www-form-urlencoded',
    );
    $http_result = drupal_http_request($url_base, $headers, 'POST', $query_string);
  }

  // Check for HTTP errors
  if ($http_result->error) {
    return array(
      'status' => FALSE,
      'message' => t('An error occured during the HTTP request: @error', array(
        '@error' => $http_result->error,
      )),
    );
  }
  if ($http_result->data) {

    // Test the HTTP return code
    if ($http_result->code >= 200 && $http_result->code <= 299) {

      // Prepare a good response array
      $result = array(
        'status' => TRUE,
        'status_code' => SMS_GW_OK,
        'gateway_status_code' => $http_result->code,
        'gateway_status_text' => $http_result->data,
      );
    }
    else {

      // We got a (possibly) bad response code
      $result = array(
        'status' => FALSE,
        'status_code' => SMS_GW_ERR_OTHER,
        'gateway_status_code' => $http_result->code,
        'gateway_status_text' => $http_result->data,
      );
    }
  }
  return $result;
}

/**
 * Receive an SMS message and pass it into the SMS Framework
 */
function sms_simplegateway_receive_message() {

  // Get config
  $gateway = sms_gateways('gateway', 'simplegateway');
  $config = $gateway['configuration'];
  $number_field = $config['sms_simplegateway_recv_number_field'];
  $gwnumber_field = $config['sms_simplegateway_recv_gwnumber_field'];
  $message_field = $config['sms_simplegateway_recv_message_field'];
  $number = $_REQUEST[$number_field];
  $message = $_REQUEST[$message_field];
  $options = array();

  // Define raw gateway response parameters
  $options['gateway_params'] = array();

  // Define message receiver if possible
  if (array_key_exists($gwnumber_field, $_REQUEST) && !empty($_REQUEST[$gwnumber_field])) {
    $options['receiver'] = $_REQUEST[$gwnumber_field];
  }
  sms_incoming($number, $message, $options);
}

Functions

Namesort descending Description
sms_simplegateway_admin_form Configuration form for gateway module
sms_simplegateway_gateway_info Implement hook_gateway_info()
sms_simplegateway_menu Implement hook_menu()
sms_simplegateway_receive_message Receive an SMS message and pass it into the SMS Framework
sms_simplegateway_send Send a message