diff --git a/backup_migrate.advanced_settings.inc b/backup_migrate.advanced_settings.inc index 93472b9..7352843 100644 --- a/backup_migrate.advanced_settings.inc +++ b/backup_migrate.advanced_settings.inc @@ -9,6 +9,11 @@ * The advanced settings form. */ function backup_migrate_ui_advanced_settings_form($form, &$form_state) { + $form['backup_migrate_advanced_settings_intro'] = array( + '#markup' => t('These settings should be handled with care, it is recommended to leave them at their defaults unless there is a specific need to modify them.'), + '#prefix' => '

', + '#suffix' => '

', + ); $form['backup_migrate_memory_limit'] = array( '#type' => 'textfield', '#title' => t('Memory Limit'), @@ -23,7 +28,7 @@ function backup_migrate_ui_advanced_settings_form($form, &$form_state) { '#default_value' => variable_get('backup_migrate_backup_max_time', BACKUP_MIGRATE_BACKUP_MAX_TIME), '#description' => t('If backups fail due to a PHP timeout error, especially an error saying "MySQL server has gone away", increase this setting. Before doing this, check to see what PHP\'s "max_execution_time" is set to, then set this field to a higher number, e.g. if max_execution_time is 180 (seconds) try setting Time Limit to 240 seconds (4 minutes), or 300 seconds (5 minutes). Default: !default.', array('!default' => '' . check_plain(BACKUP_MIGRATE_BACKUP_MAX_TIME) . '')), '#required' => FALSE, - '#element_validate' => array('backup_migrate_positive_nonzero_integer_validate'), + '#element_validate' => array('element_validate_integer_positive'), ); $form['backup_migrate_verbose'] = array( '#type' => 'checkbox', @@ -45,7 +50,7 @@ function backup_migrate_ui_advanced_settings_form($form, &$form_state) { '#default_value' => variable_get('backup_migrate_data_rows_per_query', BACKUP_MIGRATE_DATA_ROWS_PER_QUERY), '#description' => t('Controls how many records are loaded from the database at once. Defaults to "!default", i.e. !default rows. Note that setting this to a high number can cause problems when exporting large data sets, e.g. cache tables can have huge volumes of data per record.', array('!default' => '' . check_plain(BACKUP_MIGRATE_DATA_ROWS_PER_QUERY) . '')), '#required' => FALSE, - '#element_validate' => array('backup_migrate_positive_nonzero_integer_validate'), + '#element_validate' => array('element_validate_integer_positive'), ); $form['backup_migrate_data_rows_per_line'] = array( '#type' => 'textfield', @@ -53,7 +58,7 @@ function backup_migrate_ui_advanced_settings_form($form, &$form_state) { '#default_value' => variable_get('backup_migrate_data_rows_per_line', BACKUP_MIGRATE_DATA_ROWS_PER_LINE), '#description' => t('Controls how many records are included in a single INSERT statement. Defaults to "!default", i.e. !default records.', array('!default' => '' . check_plain(BACKUP_MIGRATE_DATA_ROWS_PER_LINE) . '')), '#required' => FALSE, - '#element_validate' => array('backup_migrate_positive_nonzero_integer_validate'), + '#element_validate' => array('element_validate_integer_positive'), ); $form['backup_migrate_data_bytes_per_line'] = array( '#type' => 'textfield', @@ -61,7 +66,7 @@ function backup_migrate_ui_advanced_settings_form($form, &$form_state) { '#default_value' => variable_get('backup_migrate_data_bytes_per_line', BACKUP_MIGRATE_DATA_BYTES_PER_LINE), '#description' => t('Controls how much data will be inserted at once using a single INSERT statement. This works with the "backup_migrate_data_rows_per_line" variable to ensure that each INSERT statement doesn\'t end up being too large. Defaults to "!default", i.e. !default bytes.', array('!default' => '' . check_plain(BACKUP_MIGRATE_DATA_BYTES_PER_LINE) . '')), '#required' => FALSE, - '#element_validate' => array('backup_migrate_positive_nonzero_integer_validate'), + '#element_validate' => array('element_validate_integer_positive'), ); $form['backup_migrate_max_email_size'] = array( '#type' => 'textfield', @@ -69,7 +74,7 @@ function backup_migrate_ui_advanced_settings_form($form, &$form_state) { '#default_value' => variable_get('backup_migrate_max_email_size', BACKUP_MIGRATE_MAX_EMAIL_SIZE), '#description' => t('In bytes. Limits the size of e-mails with attached back-ups that can be sent. Default: !default.', array('!default' => '' . check_plain(BACKUP_MIGRATE_MAX_EMAIL_SIZE) . '')), '#required' => FALSE, - '#element_validate' => array('element_validate_integer_positive'), + '#element_validate' => array('backup_migrate_unsigned_integer_validate'), ); $form['backup_migrate_cleanup_temp_files'] = array( '#type' => 'checkbox', @@ -90,7 +95,7 @@ function backup_migrate_ui_advanced_settings_form($form, &$form_state) { '#type' => 'textfield', '#title' => t('Schedule buffer'), '#default_value' => variable_get('backup_migrate_schedule_buffer', BACKUP_MIGRATE_SCHEDULE_BUFFER), - '#description' => t('Add a small negative buffer (1% of the entire period) to the time to account for slight difference in cron run length. In seconds. Default: !default.', array('!default' => '' . check_plain(BACKUP_MIGRATE_SCHEDULE_BUFFER) . '')), + '#description' => t('Add a small negative buffer (for example 1% of the entire period) to the time to account for slight difference in cron run length. Format: percentage of the period as a decimal fraction between 0 and 1. Default: !default.', array('!default' => '' . check_plain(BACKUP_MIGRATE_SCHEDULE_BUFFER) . '')), '#required' => FALSE, '#element_validate' => array('backup_migrate_fraction_validate'), ); @@ -113,7 +118,7 @@ function backup_migrate_ui_advanced_settings_form($form, &$form_state) { } /** - * Validate the global settings Memory Limit form field. + * Validate fields that require a PHP.ini-like memory_limit value. */ function backup_migrate_memory_limit_validate($element, &$form_state, $form) { if (!_backup_migrate_is_valid_memory_limit($element['#value'])) { @@ -122,15 +127,13 @@ function backup_migrate_memory_limit_validate($element, &$form_state, $form) { } /** - * Validate fields that require a positive non-zero integer. - * - * For example, when asking for the minimum number of records to process. + * Validate fields that require zero or a positive integer. */ -function backup_migrate_positive_nonzero_integer_validate($element, &$form_state, $form) { +function backup_migrate_unsigned_integer_validate($element, &$form_state, $form) { $value = $element['#value']; - $test = preg_match('/^[1-9][0-9]*$/', $value); + $test = preg_match('/^[0-9]+$/', $value); if ($test !== 1) { - form_error($element, t('%name must be a positive non-zero integer.', array('%name' => $element['#title']))); + form_error($element, t('%name must be zero or a positive integer.', array('%name' => $element['#title']))); } } diff --git a/tests/BmTestBasics.test b/tests/BmTestBasics.test index 3f3aeb7..6ced384 100644 --- a/tests/BmTestBasics.test +++ b/tests/BmTestBasics.test @@ -112,12 +112,6 @@ class BmTestBasics extends BmTestBase { // Need this file loaded for the custom validators. module_load_include('advanced_settings.inc', 'backup_migrate'); - // backup_migrate_memory_limit_validate - // backup_migrate_positive_nonzero_integer_validate - // backup_migrate_fraction_validate - - $form = array(); - $form_state = array(); $field = 'mock_field'; $element = array( @@ -129,6 +123,7 @@ class BmTestBasics extends BmTestBase { // Test the memory limit validator. $element['#title'] = 'Mock Field (Memory Limit)'; $test_values = array( + // Value to be tested => validity. '-1' => TRUE, // Special meaning: no limit. '50' => TRUE, '5M' => TRUE, // 5 megabytes. @@ -145,23 +140,23 @@ class BmTestBasics extends BmTestBase { '.5.5G' => FALSE, ); foreach ($test_values as $value => $valid) { - $this->assertValidField('backup_migrate_memory_limit_validate', $element, $value, $valid, 'memory limit value'); + $this->assertValidFieldValue('backup_migrate_memory_limit_validate', $element, $value, $valid, 'memory limit value'); } // Test the positive non-zero integer validator. - $element['#title'] = 'Mock Field (Positive Non-zero Integer)'; + $element['#title'] = 'Mock Field (Unsigned Integer)'; $test_values = array( + '0' => TRUE, '1' => TRUE, '10000' => TRUE, 'a' => FALSE, // NaN. '.5' => FALSE, // Not an integer. - '0' => FALSE, // Not non-zero. '-1' => FALSE, // Not positive. // PHP_INT_MAX => TRUE, // Largest integer. // (PHP_INT_MAX + 1) => FALSE, // Resolves to a decimal. ); foreach ($test_values as $value => $valid) { - $this->assertValidField('backup_migrate_positive_nonzero_integer_validate', $element, $value, $valid, 'positive non-zero integer'); + $this->assertValidFieldValue('backup_migrate_unsigned_integer_validate', $element, $value, $valid, 'zero or a positive integer'); } // Test the validator for decimals ranging from 0 to 1. @@ -178,7 +173,7 @@ class BmTestBasics extends BmTestBase { 'a' => FALSE, ); foreach ($test_values as $value => $valid) { - $this->assertValidField('backup_migrate_fraction_validate', $element, $value, $valid, 'decimal between 0 and 1'); + $this->assertValidFieldValue('backup_migrate_fraction_validate', $element, $value, $valid, 'decimal between 0 and 1'); } } @@ -191,12 +186,12 @@ class BmTestBasics extends BmTestBase { * Input for error setter. * @param string $value * Field value to be tested. - * @param bool $valid + * @param bool $value_is_valid * Expected outcome. - * @param string $subject - * Description of value type. + * @param string $type + * Description of value sub-type. */ - protected function assertValidField($validator, $element, $value, $valid, $subject) { + protected function assertValidFieldValue($validator, $element, $value, $value_is_valid, $type) { $form = array(); $form_state = array(); $field = 'mock_field'; @@ -204,15 +199,18 @@ class BmTestBasics extends BmTestBase { form_clear_error(); call_user_func_array($validator, array($element, &$form_state, $form)); - $result = form_get_errors(); - if ($valid) { - $msg = t('%value is a valid %subject.', array('%value' => $value, '%subject' => $subject)); - $this->assertTrue(empty($result[$field]), $msg); + $errors = form_get_errors(); + + if ($value_is_valid) { + $msg = t('%value is a valid %type.', array('%value' => $value, '%type' => $type)); + $result = $this->assertTrue(empty($errors[$field]), $msg); } else { - $msg = t('%value is not a valid %subject. Error message: "%msg".', array('%value' => $value, '%subject' => $subject, '%msg' => strip_tags($result[$field]))); - $this->assertFalse(empty($result[$field]), $msg); + $msg = t('%value is not a valid %type. Error message: "%msg".', array('%value' => $value, '%type' => $type, '%msg' => strip_tags($errors[$field]))); + $result = $this->assertFalse(empty($errors[$field]), $msg); } + + return $result; } }