diff options
Diffstat (limited to 'platform/www/lib/plugins/config/core/Setting/SettingMultichoice.php')
-rw-r--r-- | platform/www/lib/plugins/config/core/Setting/SettingMultichoice.php | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/platform/www/lib/plugins/config/core/Setting/SettingMultichoice.php b/platform/www/lib/plugins/config/core/Setting/SettingMultichoice.php new file mode 100644 index 0000000..3a50857 --- /dev/null +++ b/platform/www/lib/plugins/config/core/Setting/SettingMultichoice.php @@ -0,0 +1,71 @@ +<?php + +namespace dokuwiki\plugin\config\core\Setting; + +/** + * Class setting_multichoice + */ +class SettingMultichoice extends SettingString { + protected $choices = array(); + public $lang; //some custom language strings are stored in setting + + /** @inheritdoc */ + public function html(\admin_plugin_config $plugin, $echo = false) { + $disable = ''; + $nochoice = ''; + + if($this->isProtected()) { + $value = $this->protected; + $disable = ' disabled="disabled"'; + } else { + $value = is_null($this->local) ? $this->default : $this->local; + } + + // ensure current value is included + if(!in_array($value, $this->choices)) { + $this->choices[] = $value; + } + // disable if no other choices + if(!$this->isProtected() && count($this->choices) <= 1) { + $disable = ' disabled="disabled"'; + $nochoice = $plugin->getLang('nochoice'); + } + + $key = htmlspecialchars($this->key); + + $label = '<label for="config___' . $key . '">' . $this->prompt($plugin) . '</label>'; + + $input = "<div class=\"input\">\n"; + $input .= '<select class="edit" id="config___' . $key . '" name="config[' . $key . ']"' . $disable . '>' . "\n"; + foreach($this->choices as $choice) { + $selected = ($value == $choice) ? ' selected="selected"' : ''; + $option = $plugin->getLang($this->key . '_o_' . $choice); + if(!$option && isset($this->lang[$this->key . '_o_' . $choice])) { + $option = $this->lang[$this->key . '_o_' . $choice]; + } + if(!$option) $option = $choice; + + $choice = htmlspecialchars($choice); + $option = htmlspecialchars($option); + $input .= ' <option value="' . $choice . '"' . $selected . ' >' . $option . '</option>' . "\n"; + } + $input .= "</select> $nochoice \n"; + $input .= "</div>\n"; + + return array($label, $input); + } + + /** @inheritdoc */ + public function update($input) { + if(is_null($input)) return false; + if($this->isProtected()) return false; + + $value = is_null($this->local) ? $this->default : $this->local; + if($value == $input) return false; + + if(!in_array($input, $this->choices)) return false; + + $this->local = $input; + return true; + } +} |