Merge branch 'MDL-67650-forced-checkbox-textarea' of https://github.com/brendanheywoo...
authorAdrian Greeve <abgreeve@gmail.com>
Fri, 23 Oct 2020 01:03:20 +0000 (09:03 +0800)
committerAdrian Greeve <abgreeve@gmail.com>
Fri, 23 Oct 2020 01:03:20 +0000 (09:03 +0800)
1  2 
lib/adminlib.php

diff --combined lib/adminlib.php
@@@ -1761,6 -1761,27 +1761,27 @@@ abstract class admin_setting 
          $this->set_flag_options($enabled, $default, 'required', new lang_string('required', 'core_admin'));
      }
  
+     /**
+      * Is this option forced in config.php?
+      *
+      * @return bool
+      */
+     public function is_readonly(): bool {
+         global $CFG;
+         if (empty($this->plugin)) {
+             if (array_key_exists($this->name, $CFG->config_php_settings)) {
+                 return true;
+             }
+         } else {
+             if (array_key_exists($this->plugin, $CFG->forced_plugin_settings)
+                 and array_key_exists($this->name, $CFG->forced_plugin_settings[$this->plugin])) {
+                 return true;
+             }
+         }
+         return false;
+     }
      /**
       * Get the currently saved value for a setting flag
       *
@@@ -2460,6 -2481,7 +2481,7 @@@ class admin_setting_configtext extends 
              'name' => $this->get_full_name(),
              'value' => $data,
              'forceltr' => $this->get_force_ltr(),
+             'readonly' => $this->is_readonly(),
          ];
          $element = $OUTPUT->render_from_template('core_admin/setting_configtext', $context);
  
@@@ -2568,6 -2590,7 +2590,7 @@@ class admin_setting_configtextarea exte
              'name' => $this->get_full_name(),
              'value' => $data,
              'forceltr' => $this->get_force_ltr(),
+             'readonly' => $this->is_readonly(),
          ];
          $element = $OUTPUT->render_from_template('core_admin/setting_configtextarea', $context);
  
@@@ -2664,25 -2687,15 +2687,15 @@@ class admin_setting_configpasswordunmas
       * @return  string              Rendered HTML
       */
      public function output_html($data, $query='') {
-         global $OUTPUT, $CFG;
-         $forced = false;
-         if (empty($this->plugin)) {
-             if (array_key_exists($this->name, $CFG->config_php_settings)) {
-                 $forced = true;
-             }
-         } else {
-             if (array_key_exists($this->plugin, $CFG->forced_plugin_settings)
-                 and array_key_exists($this->name, $CFG->forced_plugin_settings[$this->plugin])) {
-                 $forced = true;
-             }
-         }
+         global $OUTPUT;
          $context = (object) [
              'id' => $this->get_id(),
              'name' => $this->get_full_name(),
              'size' => $this->size,
-             'value' => $forced ? null : $data,
+             'value' => $this->is_readonly() ? null : $data,
              'forceltr' => $this->get_force_ltr(),
-             'forced' => $forced
+             'readonly' => $this->is_readonly(),
          ];
          $element = $OUTPUT->render_from_template('core_admin/setting_configpasswordunmask', $context);
          return format_admin_setting($this, $this->visiblename, $element, $this->description, true, '', null, $query);
@@@ -2787,7 -2800,7 +2800,7 @@@ class admin_setting_configfile extends 
              'value' => $data,
              'showvalidity' => !empty($data),
              'valid' => $data && file_exists($data),
-             'readonly' => !empty($CFG->preventexecpath),
+             'readonly' => !empty($CFG->preventexecpath) || $this->is_readonly(),
              'forceltr' => $this->get_force_ltr(),
          ];
  
@@@ -2972,6 -2985,7 +2985,7 @@@ class admin_setting_configcheckbox exte
              'no' => $this->no,
              'value' => $this->yes,
              'checked' => (string) $data === $this->yes,
+             'readonly' => $this->is_readonly(),
          ];
  
          $default = $this->get_defaultsetting();
@@@ -3463,6 -3477,7 +3477,7 @@@ class admin_setting_configselect extend
              ];
          }
          $context->options = $options;
+         $context->readonly = $this->is_readonly();
  
          $element = $OUTPUT->render_from_template($template, $context);
  
@@@ -3620,6 -3635,7 +3635,7 @@@ class admin_setting_configmultiselect e
              ];
          }
          $context->options = $options;
+         $context->readonly = $this->is_readonly();
  
          if (is_null($default)) {
              $defaultinfo = NULL;
@@@ -3710,6 -3726,7 +3726,7 @@@ class admin_setting_configtime extends 
          $context = (object) [
              'id' => $this->get_id(),
              'name' => $this->get_full_name(),
+             'readonly' => $this->is_readonly(),
              'hours' => array_map(function($i) use ($data) {
                  return [
                      'value' => $i,
@@@ -3884,6 -3901,7 +3901,7 @@@ class admin_setting_configduration exte
              'id' => $this->get_id(),
              'name' => $this->get_full_name(),
              'value' => $data['v'],
+             'readonly' => $this->is_readonly(),
              'options' => array_map(function($unit) use ($units, $data, $defaultunit) {
                  return [
                      'value' => $unit,
@@@ -4933,36 -4951,6 +4951,36 @@@ class admin_setting_langlist extends ad
          parent::__construct('langlist', get_string('langlist', 'admin'), get_string('configlanglist', 'admin'), '', PARAM_NOTAGS);
      }
  
 +    /**
 +     * Validate that each language identifier exists on the site
 +     *
 +     * @param string $data
 +     * @return bool|string True if validation successful, otherwise error string
 +     */
 +    public function validate($data) {
 +        $parentcheck = parent::validate($data);
 +        if ($parentcheck !== true) {
 +            return $parentcheck;
 +        }
 +
 +        if ($data === '') {
 +            return true;
 +        }
 +
 +        // Normalize language identifiers.
 +        $langcodes = array_map('trim', explode(',', $data));
 +        foreach ($langcodes as $langcode) {
 +            // If the langcode contains optional alias, split it out.
 +            [$langcode, ] = preg_split('/\s*\|\s*/', $langcode, 2);
 +
 +            if (!get_string_manager()->translation_exists($langcode)) {
 +                return get_string('invalidlanguagecode', 'error', $langcode);
 +            }
 +        }
 +
 +        return true;
 +    }
 +
      /**
       * Save the new setting
       *
@@@ -10536,7 -10524,8 +10554,8 @@@ class admin_setting_configcolourpicker 
              'value' => $data,
              'icon' => $icon->export_for_template($OUTPUT),
              'haspreviewconfig' => !empty($this->previewconfig),
-             'forceltr' => $this->get_force_ltr()
+             'forceltr' => $this->get_force_ltr(),
+             'readonly' => $this->is_readonly(),
          ];
  
          $element = $OUTPUT->render_from_template('core_admin/setting_configcolourpicker', $context);