sms_valid.admin.inc in SMS Framework 7
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
*/
/**
* Form constructor for validation settings form.
*
* @param int $prefix
* Default country code. This should not be used.
*
* @see sms_valid_admin_settings_form_submit()
*
* @ingroup forms
*/
function sms_valid_admin_settings_form($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;
}
/**
* Submit handler for sms_valid_admin_settings_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(t('Settings saved.'));
}
/**
* Form constructor for validation rulesets list form.
*
* @ingroup forms
*/
function sms_valid_admin_rulesets_form($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(t('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(
'#markup' => $r->name,
);
$form[$prefix]['iso2'] = array(
'#markup' => $r->iso2,
);
$form[$prefix]['qty_rules'] = array(
'#markup' => $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;
}
/**
* Theme function for sms_valid_admin_rulesets_form().
*
* @see sms_valid_admin_rulesets_form()
*/
function theme_sms_valid_admin_rulesets_form($variables) {
$form = $variables['form'];
$output = '';
foreach ($form as $prefix => $element) {
if (is_array($element) && 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_children($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', array(
'header' => $header,
'rows' => $rows,
));
$output .= drupal_render_children($form);
return $output;
}
/**
* Submit handler for sms_valid_admin_rulesets_form().
*
* @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';
}
/**
* Form constructor for validation ruleset editing.
*
* @param int $prefix
* Prefix for ruleset that will be displayed on page load.
*
* @ingroup forms
*/
function sms_valid_admin_ruleset_form($form, &$form_state, $prefix = NULL) {
include_once DRUPAL_ROOT . '/includes/locale.inc';
if ($prefix === NULL) {
$ruleset = FALSE;
}
else {
$ruleset = sms_valid_get_ruleset($prefix);
}
// Ruleset selection area.
$form['title'] = array(
'#type' => 'item',
'#markup' => t('Choose 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'] : '',
);
$options[''] = '(none)';
$options = array_merge($options, country_get_list());
$form['ruleset']['iso2'] = array(
'#type' => 'select',
'#title' => t('Associated country (optional)'),
'#options' => $options,
'#default_value' => $ruleset ? $ruleset['iso2'] : '',
);
$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;
}
/**
* Theme function for sms_valid_admin_ruleset_form().
*
* @see sms_valid_admin_ruleset_form()
*/
function theme_sms_valid_admin_ruleset_form($variables) {
$form = $variables['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', array(
'header' => $header,
'rows' => $rows,
));
$output .= drupal_render_children($form);
return $output;
}
/**
* Redirects to the ruleset edit form base on the ruleset selected.
*
* @see sms_valid_admin_ruleset_form()
*/
function sms_valid_admin_ruleset_form_select(&$form, $form_state) {
$prefix = $form_state['values']['select_prefix'];
drupal_goto("admin/smsframework/validation/ruleset/{$prefix}");
}
/**
* Submit handler for the sms_valid_admin_ruleset_form().
*
* @see sms_valid_admin_ruleset_form()
*/
function sms_valid_admin_ruleset_form_submit(&$form, $form_state) {
$ruleset['prefix'] = $form_state['input']['prefix'];
$ruleset['name'] = $form_state['values']['name'];
$ruleset['iso2'] = $form_state['values']['iso2'];
$rules_text = $form_state['values']['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(t('Ruleset saved.'));
}
/**
* Form constructor for the number validation test form.
*
* @param string $last_test_validation_number
* Number that will appear in the text field.
*
* @ingroup forms
*/
function sms_valid_admin_test_form($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;
}
/**
* Submit handler for sms_valid_admin_test_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(check_plain(t('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(t('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(check_plain($log_msg));
break;
case 1:
// Test main validation function
$error = sms_validate_number($number);
if ($error) {
drupal_set_message(t('Error message from validation function: %error', array(
'%error' => filter_xss(implode("<br />", $error)),
)));
$pass = FALSE;
}
else {
$pass = TRUE;
}
break;
}
if ($pass) {
drupal_set_message(t('Validation succeeded and returned number %number.', array(
'%number' => $number,
)));
}
else {
form_set_error('number', 'Validation failed.');
}
}
Functions
Name | Description |
---|---|
sms_valid_admin_rulesets_form | Form constructor for validation rulesets list form. |
sms_valid_admin_rulesets_form_submit | Submit handler for sms_valid_admin_rulesets_form(). |
sms_valid_admin_ruleset_form | Form constructor for validation ruleset editing. |
sms_valid_admin_ruleset_form_select | Redirects to the ruleset edit form base on the ruleset selected. |
sms_valid_admin_ruleset_form_submit | Submit handler for the sms_valid_admin_ruleset_form(). |
sms_valid_admin_settings_form | Form constructor for validation settings form. |
sms_valid_admin_settings_form_submit | Submit handler for sms_valid_admin_settings_form(). |
sms_valid_admin_test_form | Form constructor for the number validation test form. |
sms_valid_admin_test_form_submit | Submit handler for sms_valid_admin_test_form() |
theme_sms_valid_admin_rulesets_form | Theme function for sms_valid_admin_rulesets_form(). |
theme_sms_valid_admin_ruleset_form | Theme function for sms_valid_admin_ruleset_form(). |