You are here

sms.admin.inc in SMS Framework 7

Same filename and directory in other branches
  1. 6.2 sms.admin.inc
  2. 6 sms.admin.inc

The admin sms functions.

File

sms.admin.inc
View source
<?php

/**
 * @file
 * The admin sms functions.
 */

/**
 * Select default sms gateway form.
 */
function sms_admin_default_form($form, &$form_state) {
  $gateways = sms_gateways();
  foreach ($gateways as $identifier => $gateway) {
    $active = $identifier == variable_get('sms_default_gateway', 'log');
    $options[$identifier] = '';
    $form[$gateway['name']]['id'] = array(
      '#markup' => $identifier,
    );
    if (isset($gateway['configure form']) and function_exists($gateway['configure form'])) {
      $form[$gateway['name']]['configure'] = array(
        '#markup' => l(t('configure'), 'admin/smsframework/gateways/' . $identifier),
      );
    }
    else {
      $form[$gateway['name']]['configure'] = array(
        '#markup' => t('No configuration options'),
      );
    }
  }
  $form['default'] = array(
    '#type' => 'radios',
    '#options' => $options,
    '#default_value' => variable_get('sms_default_gateway', 'log'),
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Set default gateway'),
  );
  return $form;
}

/**
 * Form submission handler for sms_admin_default_form().
 *
 * @see sms_admin_default_form()
 */
function sms_admin_default_form_submit($form, &$form_state) {

  // Process form submission to set the default gateway
  if ($form_state['values']['default']) {
    drupal_set_message(t('Default gateway updated.'));
    variable_set('sms_default_gateway', $form_state['values']['default']);
  }
}

/**
 * Returns HTML for the admin default gateway form.
 *
 * @param $form
 *  An form array.
 *
 * @ingroup themeable
 */
function theme_sms_admin_default_form($variables) {
  $form = $variables['form'];
  $rows = array();
  foreach ($form as $name => $element) {
    if (is_array($element) and isset($element['id']) and is_array($element['id'])) {
      $rows[] = array(
        drupal_render($form['default'][$element['id']['#markup']]),
        check_plain($name),
        $element['configure']['#markup'],
      );
      unset($form[$name]);
    }
  }
  $header = array(
    t('Default'),
    t('Name'),
    array(
      'data' => t('Operations'),
      'colspan' => 1,
    ),
  );
  $output = '';
  $output .= theme('table', array(
    'header' => $header,
    'rows' => $rows,
  ));
  $output .= drupal_render_children($form);
  return $output;
}

/**
 * Form builder for the sms gateway configuration form.
 *
 * @param @gateway_id
 *  The ID of the sms gateway.
 *
 * @see sms_admin_gateway_form_validate()
 * @see sms_admin_gateway_form_submit()
 */
function sms_admin_gateway_form($form, &$form_state, $gateway_id) {
  $gateway = sms_gateways('gateway', $gateway_id);
  if ($gateway && function_exists($gateway['configure form'])) {
    drupal_set_title(t('@gateway configuration', array(
      '@gateway' => $gateway['name'],
    )), PASS_THROUGH);
    $form = $gateway['configure form']($gateway['configuration']);
    $form['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Save'),
    );
    $form['gateway'] = array(
      '#type' => 'value',
      '#value' => $gateway,
    );
    return $form;
  }
  drupal_not_found();
  exit;
}

/**
 * Form validation handler for sms_admin_gateway_form().
 *
 * @see sms_admin_gateway_form()
 * @see sms_admin_gateway_form_submit()
 */
function sms_admin_gateway_form_validate($form, &$form_state) {

  // Pass validation to gateway
  $function = $form_state['values']['gateway']['configure form'] . '_validate';
  if (function_exists($function)) {
    $function($form, $form_state);
  }
}

/**
 * Form submission handler for sms_admin_gateway_form().
 *
 * @see sms_admin_gateway_form()
 * @see sms_admin_gateway_form_validate()
 */
function sms_admin_gateway_form_submit($form, &$form_state) {
  $gateway = $form_state['values']['gateway'];
  $values = $form_state['values'];

  // Remove unnecessary values
  unset($values['op'], $values['submit'], $values['gateway'], $values['form_token'], $values['form_id'], $values['form_build_id']);
  variable_set('sms_' . $gateway['identifier'] . '_settings', $values);
  drupal_set_message(t('The gateway settings have been saved.'));
  $form_state['redirect'] = 'admin/smsframework/gateways';
}

/**
 * Form builder for the list of sms carriers.
 *
 * @see sms_carriers_admin_form_submit()
 */
function sms_carriers_admin_form($form, &$form_state) {
  $carriers = sms_carriers();
  $form = array();
  foreach ($carriers as $id => $carrier) {
    $actions = array();
    $css_safe_id = str_replace('.', '-', $id);
    switch ($carrier['type']) {
      case SMS_CARRIER_DEFAULT:
        $storage = t('Default');
        break;
      case SMS_CARRIER_OVERRIDDEN:
        $storage = t('Overridden');
        break;
      case SMS_CARRIER_NORMAL:
        $storage = t('Normal');
        break;
    }
    $form['status']['#tree'] = TRUE;
    if (!isset($carrier['status'])) {
      $carrier['status'] = 0;
    }
    $form['status'][$css_safe_id] = array(
      '#type' => 'checkbox',
      '#title' => check_plain($carrier['name']),
      '#description' => check_plain($storage),
      '#default_value' => $carrier['status'] == 1,
    );
    $form['domain'][$css_safe_id] = array(
      '#type' => 'markup',
      '#markup' => check_plain($id),
    );
    $actions[] = l(t('Edit'), "admin/smsframework/carriers/{$id}");
    if ($carrier['type'] == SMS_CARRIER_OVERRIDDEN) {
      $actions[] = l(t('Revert'), "admin/smsframework/carriers/delete/{$id}");
    }
    elseif ($carrier['type'] == SMS_CARRIER_NORMAL) {
      $actions[] = l(t('Delete'), "admin/smsframework/carriers/delete/{$id}");
    }
    $form['actions'][$css_safe_id] = array(
      '#type' => 'markup',
      '#markup' => implode(' | ', $actions),
    );
  }
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save settings'),
  );
  return $form;
}

/**
 * Form submission handler for sms_carriers_admin_form().
 *
 * @see sms_carriers_admin_form()
 */
function sms_carriers_admin_form_submit(&$form, &$form_state) {
  $enabled_carriers = array();
  foreach ($form_state['values']['status'] as $carrier => $status) {
    if ($status) {
      $enabled_carriers[] = str_replace('-', '.', $carrier);
    }
  }
  variable_set('sms_enabled_carriers', $enabled_carriers);
  drupal_set_message(t('The configuration options have been saved.'));
}

/**
 * Form builder for the carrier edit form.
 *
 * @param $carrier
 *   An associative array defining the sms carrier.
 *
 * @see sms_carriers_edit_form_submit()
 */
function sms_carriers_edit_form($form, $form_state, $carrier = array()) {
  if (!isset($carrier['domain'])) {
    $carrier['domain'] = NULL;
  }
  if (!isset($carrier['name'])) {
    $carrier['name'] = NULL;
  }
  $form['carrier'] = array(
    '#type' => 'value',
    '#value' => $carrier['domain'],
  );
  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Name'),
    '#default_value' => $carrier['name'],
    '#required' => TRUE,
  );
  $form['domain'] = array(
    '#type' => 'textfield',
    '#title' => t('Domain'),
    '#default_value' => $carrier['domain'],
    '#required' => TRUE,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );
  return $form;
}

/**
 * Form submission handler for sms_carriers_edit_form().
 *
 * @see sms_carriers_edit_form()
 */
function sms_carriers_edit_form_validate(&$form, &$form_state) {
  $carriers = sms_carriers();
  if ($form_state['values']['domain'] != $form_state['values']['carrier']) {
    foreach ($carriers as $domain => $carrier) {
      if ($domain == $form_state['values']['domain']) {
        form_set_error('', t('Domain must be unique.'));
      }
    }
  }
}

/**
 * Form submission handler for sms_carriers_edit_form().
 *
 * @see sms_carriers_edit_form()
 */
function sms_carriers_edit_form_submit(&$form, &$form_state) {
  $carrier = array();
  $carrier = array(
    'name' => $form_state['values']['name'],
    'domain' => $form_state['values']['domain'],
  );
  carrier_save($form_state['values']['carrier'], $carrier);
  drupal_set_message(t('The carrier has been saved.'));
  drupal_goto('admin/smsframework/carriers');
}

/**
 * Form builder for the carrier deletion confirmation form.
 *
 * @param $carrier
 *   An associative array defining the sms carrier.
 *
 * @see sms_carriers_delete_form_submit()
 */
function sms_carriers_delete_form($form, &$form_state, $carrier) {
  $form['domain'] = array(
    '#type' => 'value',
    '#value' => $carrier['domain'],
  );
  $form['type'] = array(
    '#type' => 'value',
    '#value' => $carrier['type'],
  );
  if ($carrier['type'] == SMS_CARRIER_OVERRIDDEN) {
    return confirm_form($form, t('Are you sure you want revert %carrier?', array(
      '%carrier' => $carrier['name'],
    )), 'admin/smsframework/carriers', t('Reverting this carrier will delete it from the database. It will be replaced with the default carrier settings. This action cannot be undone.'), t('Revert'), t('Cancel'));
  }
  if ($carrier['type'] == SMS_CARRIER_NORMAL) {
    return confirm_form($form, t('Are you sure you want delete %carrier?', array(
      '%carrier' => $carrier['name'],
    )), 'admin/smsframework/carriers', t('This carrier will be removed from the database. This action cannot be undone.'), t('Delete'), t('Cancel'));
  }
}

/**
 * Form submission handler for sms_carriers_delete_form().
 *
 * @see sms_carriers_delete_form()
 */
function sms_carriers_delete_form_submit($form, &$form_state) {
  carrier_delete($form_state['values']['domain']);

  # XXX D7 porting issue: $carrier below never gets set ??

  # --- this is ALSO a bug in the D6 verion!

  #if ($carrier['type'] == SMS_CARRIER_OVERRIDDEN) {

  #  drupal_set_message(t('The carrier has been reverted.'));

  #}

  #if ($carrier['type'] == SMS_CARRIER_NORMAL) {

  #  drupal_set_message(t('The carrier has been deleted.'));

  #}
  $form_state['redirect'] = 'admin/smsframework/carriers';
}

/**
 * Returns HTML for the sms carriers admin form.
 *
 * @param $form
 *  A form array.
 *
 * @ingroup themeable
 */
function theme_sms_carriers_admin_form($variables) {
  $form = $variables['form'];
  $header = array(
    t('Enabled'),
    t('Carrier'),
    t('Domain'),
    t('Actions'),
  );
  $rows = array();
  if (!empty($form['status'])) {
    foreach (element_children($form['status']) as $element) {
      $name = "<div class='carrier'>";
      $name .= "<strong>{$form['status'][$element]['#title']}</strong>";
      $name .= "<div class='description'>{$form['status'][$element]['#description']}</div>";
      $name .= "</div>";
      unset($form['status'][$element]['#title']);
      unset($form['status'][$element]['#description']);
      $row = [
        'status' => drupal_render($form['status'][$element]),
        'name' => $name,
        'domain' => drupal_render($form['domain'][$element]),
        'actions' => drupal_render($form['actions'][$element]),
      ];
      $rows[] = $row;
    }
  }
  $output = '';
  $output .= theme('table', array(
    'header' => $header,
    'rows' => $rows,
    'empty' => t('No carriers available.'),
    'attributes' => array(
      'class' => array(
        'sms',
      ),
      'id' => 'sms-form-table',
    ),
  ));
  $output .= drupal_render($form['submit']);
  $output .= drupal_render_children($form);
  return $output;
}

/**
 * Form callback. Overview of any bootstrap options.
 */
function sms_bootstrap_admin($form, $form_state) {
  $cache_backends = variable_get('cache_backends', array());
  $configured = FALSE;
  foreach ($cache_backends as $inc) {
    if (substr($inc, -16) == 'sms_incoming.inc') {
      $configured = TRUE;
      break;
    }
  }
  $form['title']['#markup'] = '<h2>' . t('Incoming SMS bootstrap by-pass configuration') . '</h2>';
  $form['introduction']['#markup'] = '<p>' . t('For higher volume incoming SMS. Enable parsing and queuing for later processing.') . '</p>';
  if (!$configured) {
    $form['description'] = array(
      '#type' => 'fieldset',
      '#title' => t('Not enabled'),
    );
    $form['description']['description'] = array(
      '#type' => 'markup',
      '#markup' => '<p>' . t('The <em>cache_backend</em> for sms_incoming has not been set.') . '</p>' . '<p>' . t('See the smsframework module <code>bootstrap/README.txt</code> for more details.') . '</p>',
    );
    return $form;
  }
  $form['sms_bootstrap_enabled'] = array(
    '#type' => 'checkbox',
    '#default_value' => variable_get('sms_bootstrap_enabled', FALSE),
    '#title' => t('Bootstrap by-pass enabled'),
    '#description' => t('If the variable sms_bootstrap_enabled is configured in your settings.php (advised) you will not be able to change it here.'),
  );
  $form['sms_bootstrap_routes'] = array(
    '#type' => 'fieldset',
    '#title' => t('Routes'),
    '#description' => t('Routes can be defaulted by the SMS provider module, or defined in your settings.php file.'),
  );
  $form['sms_bootstrap_routes']['vardump'] = array(
    '#type' => 'markup',
    '#markup' => '<pre>' . filter_xss_admin(print_r(variable_get('sms_bootstrap_routes', array()), TRUE)) . '</pre>',
  );
  $form['sms_bootstrap_queue'] = array(
    '#type' => 'fieldset',
    '#title' => t('Queue'),
    '#description' => t('The queue used for parsed incoming SMS.'),
  );
  $queue_default = array(
    'name' => 'sms_incoming',
    'require db' => TRUE,
    'reliable' => TRUE,
  );
  $queue_config = variable_get('sms_bootstrap_queue', array());
  $queue_config += $queue_default;
  if (!empty($queue_config['inc'])) {

    // Maybe the include file isn't included. Plus if the path is wrong it will
    // give a warning here.
    include_once $queue_config['inc'];
  }

  // Now use DrupalQueue to retrieve whichever queue it would return.
  $queue = DrupalQueue::get($queue_config['name']);
  $queue_class = get_class($queue);
  $form['sms_bootstrap_queue']['vardump'] = array(
    '#type' => 'markup',
    '#markup' => '<pre>' . filter_xss_admin(print_r($queue_config, TRUE) . "\nDrupal is using the {$queue_class}") . '</pre>',
  );
  return system_settings_form($form);
}

Functions

Namesort descending Description
sms_admin_default_form Select default sms gateway form.
sms_admin_default_form_submit Form submission handler for sms_admin_default_form().
sms_admin_gateway_form Form builder for the sms gateway configuration form.
sms_admin_gateway_form_submit Form submission handler for sms_admin_gateway_form().
sms_admin_gateway_form_validate Form validation handler for sms_admin_gateway_form().
sms_bootstrap_admin Form callback. Overview of any bootstrap options.
sms_carriers_admin_form Form builder for the list of sms carriers.
sms_carriers_admin_form_submit Form submission handler for sms_carriers_admin_form().
sms_carriers_delete_form Form builder for the carrier deletion confirmation form.
sms_carriers_delete_form_submit Form submission handler for sms_carriers_delete_form().
sms_carriers_edit_form Form builder for the carrier edit form.
sms_carriers_edit_form_submit Form submission handler for sms_carriers_edit_form().
sms_carriers_edit_form_validate Form submission handler for sms_carriers_edit_form().
theme_sms_admin_default_form Returns HTML for the admin default gateway form.
theme_sms_carriers_admin_form Returns HTML for the sms carriers admin form.