MDL-69772 admin: Better validation for the allcountrycodes setting
The patch introduces a new admin_setting fiela type that can be used for specifying comma separated list of countries. The field has inbuilt validation so that only valid country codes can be inserted.
This commit is contained in:
@@ -4901,6 +4901,66 @@ class admin_setting_langlist extends admin_setting_configtext {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Allows to specify comma separated list of known country codes.
|
||||
*
|
||||
* This is a simple subclass of the plain input text field with added validation so that all the codes are actually
|
||||
* known codes.
|
||||
*
|
||||
* @package core
|
||||
* @category admin
|
||||
* @copyright 2020 David Mudrák <david@moodle.com>
|
||||
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class admin_setting_countrycodes extends admin_setting_configtext {
|
||||
|
||||
/**
|
||||
* Construct the instance of the setting.
|
||||
*
|
||||
* @param string $name Name of the admin setting such as 'allcountrycodes' or 'myplugin/countries'.
|
||||
* @param lang_string|string $visiblename Language string with the field label text.
|
||||
* @param lang_string|string $description Language string with the field description text.
|
||||
* @param string $defaultsetting Default value of the setting.
|
||||
* @param int $size Input text field size.
|
||||
*/
|
||||
public function __construct($name, $visiblename, $description, $defaultsetting = '', $size = null) {
|
||||
parent::__construct($name, $visiblename, $description, $defaultsetting, '/^(?:\w+(?:,\w+)*)?$/', $size);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the setting value before storing it.
|
||||
*
|
||||
* The value is first validated through custom regex so that it is a word consisting of letters, numbers or underscore; or
|
||||
* a comma separated list of such words.
|
||||
*
|
||||
* @param string $data Value inserted into the setting field.
|
||||
* @return bool|string True if the value is OK, error string otherwise.
|
||||
*/
|
||||
public function validate($data) {
|
||||
|
||||
$parentcheck = parent::validate($data);
|
||||
|
||||
if ($parentcheck !== true) {
|
||||
return $parentcheck;
|
||||
}
|
||||
|
||||
if ($data === '') {
|
||||
return true;
|
||||
}
|
||||
|
||||
$allcountries = get_string_manager()->get_list_of_countries(true);
|
||||
|
||||
foreach (explode(',', $data) as $code) {
|
||||
if (!isset($allcountries[$code])) {
|
||||
return get_string('invalidcountrycode', 'core_error', $code);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Selection of one of the recognised countries using the list
|
||||
* returned by {@link get_list_of_countries()}.
|
||||
|
||||
Reference in New Issue
Block a user