sms_valid.admin.inc in SMS Framework 6.2
Same filename and directory in other branches
SMS Framework core module: Admin settings form functions
@package sms @subpackage sms_valid
File
modules/sms_valid/sms_valid.admin.incView source
<?php
/**
* @file
* SMS Framework core module: Admin settings form functions
*
* @package sms
* @subpackage sms_valid
*/
/**
* Validation settings form
*
* @param $prefix
* Default country code. This should not be used.
*
* @ingroup forms
*/
function sms_valid_admin_settings_form(&$form_state, $prefix = 64) {
$use_rulesets = variable_get('sms_valid_use_rulesets', FALSE);
$use_global_ruleset = variable_get('sms_valid_use_global_ruleset', FALSE);
// Mode selector
if ($use_rulesets) {
$mode = $use_global_ruleset ? 2 : 1;
}
else {
$mode = 0;
}
$form['mode'] = array(
'#type' => 'radios',
'#title' => 'Number validation',
'#default_value' => $mode,
'#options' => array(
0 => 'No rulesets. Only use validation hooks implemented by gateway or other modules. [default]',
1 => 'Use prefix-based validation rulesets.',
2 => 'Use one ruleset for all numbers.',
),
'#description' => t('Note that this will revert to the default option when the SMS Validation module is disabled.'),
);
// Global ruleset section
$form['global'] = array(
'#type' => 'fieldset',
'#title' => 'Global ruleset selection',
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['global']['note'] = array(
'#type' => 'item',
'#value' => 'Identifies the ruleset that will be used for all numbers if the "Use one ruleset" option is selected.',
);
$form['global']['global_ruleset'] = array(
'#type' => 'select',
'#title' => t('Ruleset to use as the global ruleset'),
'#options' => sms_valid_get_rulesets_for_form(),
'#default_value' => variable_get('sms_valid_global_ruleset', $prefix),
);
// Local number ruleset section
$form['local'] = array(
'#type' => 'fieldset',
'#title' => 'Local number detection and handling',
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['local']['note'] = array(
'#type' => 'item',
'#value' => 'You can this this to tell the number validation function that any number with this prefix should be considered a local number. The prefix will be stripped away and the number will be validated against the selected ruleset.',
);
$form['local']['local_number_prefix'] = array(
'#type' => 'textfield',
'#title' => t('Prefix that identifies a local number'),
'#size' => 8,
'#maxlength' => 20,
'#default_value' => variable_get('sms_valid_local_number_prefix', 0),
'#description' => 'Set to blank to disable local number identification.',
'#disabled' => $use_global_ruleset ? TRUE : FALSE,
);
$form['local']['local_number_ruleset'] = array(
'#type' => 'select',
'#title' => t('Default ruleset to try for local numbers'),
'#options' => sms_valid_get_rulesets_for_form(),
'#default_value' => variable_get('sms_valid_local_number_ruleset', $prefix),
'#description' => 'This identifies the default ruleset that will be used for local numbers.',
'#disabled' => $use_global_ruleset ? TRUE : FALSE,
);
// Last resort ruleset section
$form['last'] = array(
'#type' => 'fieldset',
'#title' => 'Last resort for undetected ruleset prefixes',
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['last']['note'] = array(
'#type' => 'item',
'#value' => 'If the number validation function cannot find a ruleset to use (ie. it cannot find a prefix match) you can tell it to try a last resort ruleset.<br /><strong>WARNING!</strong> Please be very careful when using this option to ensure that you do not have unexpected behavior in your rulesets.',
);
$form['last']['last_resort_enabled'] = array(
'#type' => 'checkbox',
'#title' => t('Use last resort ruleset'),
'#default_value' => variable_get('sms_valid_last_resort_enabled', FALSE),
'#disabled' => $use_global_ruleset ? TRUE : FALSE,
);
$form['last']['last_resort_ruleset'] = array(
'#type' => 'select',
'#title' => t('Ruleset to try if the ruleset prefix cannot be identified from the number'),
'#options' => sms_valid_get_rulesets_for_form(),
'#default_value' => variable_get('sms_valid_last_resort_ruleset', $prefix),
'#description' => 'This only works if you have selected the checkbox above.',
'#disabled' => $use_global_ruleset ? TRUE : FALSE,
);
$form['defaults_save'] = array(
'#type' => 'submit',
'#value' => t('Save settings'),
);
return $form;
}
/**
* @see sms_valid_admin_settings_form()
*/
function sms_valid_admin_settings_form_submit(&$form, $form_state) {
$mode = $form_state['values']['mode'];
$use_rulesets = $mode ? TRUE : FALSE;
$use_global_ruleset = $mode == 2 ? TRUE : FALSE;
$global_ruleset = $form_state['values']['global_ruleset'];
$local_number_prefix = $form_state['values']['local_number_prefix'];
$local_number_ruleset = $form_state['values']['local_number_ruleset'];
$last_resort_enabled = $form_state['values']['last_resort_enabled'];
$last_resort_ruleset = $form_state['values']['last_resort_ruleset'];
variable_set('sms_valid_use_rulesets', $use_rulesets);
variable_set('sms_valid_use_global_ruleset', $use_global_ruleset);
variable_set('sms_valid_global_ruleset', $global_ruleset);
variable_set('sms_valid_local_number_prefix', $local_number_prefix);
variable_set('sms_valid_local_number_ruleset', $local_number_ruleset);
variable_set('sms_valid_last_resort_enabled', $last_resort_enabled);
variable_set('sms_valid_last_resort_ruleset', $last_resort_ruleset);
drupal_set_message('Settings saved.');
}
/**
* Validation rulesets list form
*
* @ingroup forms
*/
function sms_valid_admin_rulesets_form(&$form_state) {
$rulesets = sms_valid_get_all_rulesets();
$form['note'] = array(
'#type' => 'item',
'#value' => t('A ruleset is a number prefix with a set of deeper number prefixes, each with an allow/deny directive. For example, a ruleset prefix "64" and a rule like "21+" would allow a number like "64-21-123-4567". You can choose to have one big ruleset or you can split them into manageable rulesets by country, category, or whatever you decide.'),
);
foreach ($rulesets as $r) {
$prefix = $r['prefix'];
$qty_rules = count($r['rules']);
$rule_edit = ' (' . l('edit', "admin/smsframework/validation/ruleset/{$prefix}") . ')';
$form[$prefix]['prefix'] = array(
'#type' => 'textfield',
'#size' => 5,
'#maxlength' => 5,
'#disabled' => TRUE,
'#value' => $r['prefix'],
);
$form[$prefix]['name'] = array(
'#value' => $r['name'],
);
$form[$prefix]['iso2'] = array(
'#value' => $r['iso2'],
);
$form[$prefix]['qty_rules'] = array(
'#value' => $qty_rules . $rule_edit,
);
$form[$prefix][$prefix . '_out'] = array(
'#type' => 'checkbox',
'#title' => 'Outbound',
'#default_value' => sms_valid_ruleset_is_enabled($prefix, SMS_DIR_OUT),
);
$form[$prefix][$prefix . '_in'] = array(
'#type' => 'checkbox',
'#title' => 'Inbound',
'#default_value' => sms_valid_ruleset_is_enabled($prefix, SMS_DIR_IN),
);
$form[$prefix][$prefix . '_delete'] = array(
'#type' => 'checkbox',
'#title' => 'Delete',
'#default_value' => FALSE,
);
}
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Changes'),
);
return $form;
}
/**
* @see sms_valid_admin_rulesets_form()
*/
function theme_sms_valid_admin_rulesets_form($form) {
$rows = array();
foreach ($form as $prefix => $element) {
if (isset($element['prefix']) && is_array($element['prefix'])) {
$rows[] = array(
drupal_render($element['prefix']),
drupal_render($element['name']),
drupal_render($element['iso2']),
drupal_render($element['qty_rules']),
drupal_render($element[$prefix . '_out']),
drupal_render($element[$prefix . '_in']),
drupal_render($element[$prefix . '_delete']),
);
unset($form[$prefix]);
}
}
$output .= drupal_render($form['note']);
unset($form['note']);
$header = array(
t('Prefix'),
t('Name'),
t('Country'),
t('Qty Rules'),
array(
'data' => t('Allow messages'),
'colspan' => 2,
),
t('Delete'),
);
$output .= theme('table', $header, $rows);
$output .= drupal_render($form);
return $output;
}
/**
* @see sms_valid_admin_rulesets_form()
*/
function sms_valid_admin_rulesets_form_submit($form, &$form_state) {
foreach ($form_state['values'] as $key => $element) {
// Nasty hack to get these values
$items = explode('_', $key);
if (count($items) == 2) {
// Just run once for each prefix
if ($items[1] == 'out') {
$prefix = $items[0];
$out = $form_state['values'][$prefix . '_out'];
$in = $form_state['values'][$prefix . '_in'];
sms_valid_ruleset_set_status($prefix, sms_dir($out, $in));
// Handle deletes
$delete = $form_state['values'][$prefix . '_delete'];
if ($delete) {
sms_valid_delete_ruleset($prefix);
}
}
}
}
drupal_set_message(t('Rulesets saved.'));
//$form_state['redirect'] = 'admin/smsframework/validation/countrycodes';
}
/**
* Validation ruleset editing form
*
* @param $prefix
* Prefix for ruleset that will be displayed on page load.
*
* @ingroup forms
*/
function sms_valid_admin_ruleset_form(&$form_state, $prefix = NULL) {
if ($prefix === NULL) {
$ruleset = FALSE;
}
else {
$ruleset = sms_valid_get_ruleset($prefix);
}
// Ruleset selection area
$form['title'] = array(
'#type' => 'item',
'#value' => t('Select a ruleset from the drop-down box and click Refresh to update the ruleset form below'),
);
$form['select_prefix'] = array(
'#type' => 'select',
'#options' => sms_valid_get_rulesets_for_form(),
'#default_value' => $prefix,
);
$form['select'] = array(
'#type' => 'submit',
'#value' => t('Refresh Editor (below)'),
'#submit' => array(
'sms_valid_admin_ruleset_form_select',
),
);
// Ruleset editor area
$form['ruleset'] = array(
'#type' => 'fieldset',
'#title' => 'Ruleset',
);
// If this is a new ruleset then this should be a textfield
$form['ruleset']['prefix'] = array(
'#type' => 'textfield',
'#title' => t('Prefix'),
'#size' => 5,
'#maxlength' => 5,
'#value' => $ruleset ? $ruleset['prefix'] : '',
'#description' => 'Should be 4 digits or less. Highest allowed prefix is 65535.',
);
$form['ruleset']['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#size' => 80,
'#maxlength' => 200,
'#default_value' => $ruleset ? $ruleset['name'] : '',
);
// Display a proper country list if the countries_api module is loaded
if (function_exists('countries_api_get_array')) {
$options[''] = '(none)';
$options = array_merge($options, countries_api_get_array());
$form['ruleset']['iso2'] = array(
'#type' => 'select',
'#title' => t('Associated country (optional)'),
'#options' => $options,
'#default_value' => $ruleset ? $ruleset['iso2'] : '',
);
}
else {
$form['ruleset']['iso2'] = array(
'#type' => 'textfield',
'#title' => t('Country code (ISO 3166-1 alpha-2) (optional)'),
'#size' => 2,
'#maxlength' => 2,
'#default_value' => $ruleset ? $ruleset['iso2'] : '',
'#description' => 'This would be a nice drop-down box if you had the Countries API module enabled.',
);
}
$form['ruleset']['out'] = array(
'#type' => 'checkbox',
'#title' => 'Allow outbound communication',
'#default_value' => $ruleset ? sms_valid_ruleset_is_enabled($prefix, SMS_DIR_OUT) : 0,
);
$form['ruleset']['in'] = array(
'#type' => 'checkbox',
'#title' => 'Allow inbound commmunication',
'#default_value' => $ruleset ? sms_valid_ruleset_is_enabled($prefix, SMS_DIR_IN) : 0,
);
$form['ruleset']['rules'] = array(
'#type' => 'textarea',
'#title' => 'Rules',
'#cols' => 80,
'#rows' => 15,
'#default_value' => $ruleset ? sms_valid_rules_to_text($ruleset['rules']) : '',
'#description' => t('One rule per line. Enter a number prefix (any length), not including the ruleset prefix.<br />Any prefix with a "-" at the end signifies an expicit deny.<br />Any prefix with a "+" at the end signifies an explicit allow.<br />All other rules are ignored.<br />Default is to deny any numbers that do not match.<br />Comments must be prefixed with a hash (#). You may place comments in-line only.<br />See the guide at %url', array(
'%url' => 'http://moo0.net/smsframework/?q=node/19',
)),
);
$form['ruleset']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Ruleset'),
);
return $form;
}
/**
* @see sms_valid_admin_ruleset_form()
*/
function theme_sms_valid_admin_ruleset_form($form) {
$header = array();
$rows = array();
$rows[] = array(
array(
'data' => '<strong>' . drupal_render($form['title']) . '</strong>',
'colspan' => 3,
),
);
$rows[] = array(
drupal_render($form['select_prefix']),
drupal_render($form['select']),
array(
'data' => '',
'width' => '80%',
),
);
unset($form['title']);
unset($form['select_prefix']);
unset($form['select']);
$output .= theme('table', $header, $rows);
$output .= drupal_render($form);
return $output;
}
/**
* @see sms_valid_admin_ruleset_form()
*/
function sms_valid_admin_ruleset_form_select(&$form, $form_state) {
$prefix = $form_state['values']['select_prefix'];
$form['#redirect'] = "admin/smsframework/validation/ruleset/{$prefix}";
}
/**
* @see sms_valid_admin_ruleset_form()
*/
function sms_valid_admin_ruleset_form_submit(&$form, $form_state) {
$ruleset['prefix'] = $form_state['clicked_button']['#post']['prefix'];
$ruleset['name'] = $form_state['values']['name'];
$ruleset['iso2'] = $form_state['values']['iso2'];
$rules_text = $form_state['clicked_button']['#post']['rules'];
$ruleset['rules'] = sms_valid_text_to_rules($rules_text);
$out = $form_state['values']['out'];
$in = $form_state['values']['in'];
$ruleset['dirs_enabled'] = sms_dir($out, $in);
sms_valid_save_ruleset($ruleset);
drupal_set_message('Ruleset saved.');
}
/**
* Validation number test form
*
* @param $last_test_validation_number
* Number that will appear in the text field.
*
* @ingroup forms
*/
function sms_valid_admin_test_form(&$form_state, $last_test_validation_number = NULL) {
$last_number = variable_get('sms_valid_test_last_number', '');
$test_mode = variable_get('sms_valid_test_mode', 0);
$form['test_mode'] = array(
'#type' => 'radios',
'#title' => 'Validator(s)',
'#default_value' => $test_mode,
'#options' => array(
0 => 'Test against rulesets only. Verbose feedback.',
1 => 'Test against the main validation function.',
),
'#description' => 'The main validation function includes rulesets (if enabled), the active gateway module and other modules that implement number validation hooks.',
);
$form['number'] = array(
'#type' => 'textfield',
'#title' => t('Number'),
'#size' => 20,
'#maxlength' => 30,
'#default_value' => $last_number,
'#description' => 'Examples: 64211234567, 021-123-4567, 21.123.4567<br />Number will be validated using all configured settings and rulesets.',
);
$form['validate'] = array(
'#type' => 'submit',
'#value' => t('Validate Number'),
);
return $form;
}
/**
* @see sms_valid_admin_test_form()
*/
function sms_valid_admin_test_form_submit(&$form, $form_state) {
$number = $form_state['values']['number'];
drupal_set_message('You entered ' . $number);
variable_set('sms_valid_test_last_number', $number);
$test_mode = $form_state['values']['test_mode'];
variable_set('sms_valid_test_mode', $test_mode);
if (!variable_get('sms_valid_use_rulesets', FALSE)) {
drupal_set_message('Note: Rulesets are disabled.');
}
switch ($test_mode) {
case 0:
// Test only against rulesets
$options = array(
'test' => TRUE,
);
$result = sms_valid_validate($number, $options);
$pass = $result['pass'];
$log_msg = implode("<br />", $result['log']);
drupal_set_message($log_msg);
break;
case 1:
// Test main validation function
$error = sms_validate_number($number);
if ($error) {
drupal_set_message('Error message from validation function:<br />' . $error);
}
$pass = !$error;
break;
}
if ($pass) {
drupal_set_message('Validation succeeded and returned number ' . $number);
}
else {
form_set_error('number', 'Validation FAILED');
}
}
Functions
Name | Description |
---|---|
sms_valid_admin_rulesets_form | Validation rulesets list form |
sms_valid_admin_rulesets_form_submit | |
sms_valid_admin_ruleset_form | Validation ruleset editing form |
sms_valid_admin_ruleset_form_select | |
sms_valid_admin_ruleset_form_submit | |
sms_valid_admin_settings_form | Validation settings form |
sms_valid_admin_settings_form_submit | |
sms_valid_admin_test_form | Validation number test form |
sms_valid_admin_test_form_submit | |
theme_sms_valid_admin_rulesets_form | |
theme_sms_valid_admin_ruleset_form |