82 lines
2.1 KiB
PHP
82 lines
2.1 KiB
PHP
<?php
|
|
/**
|
|
* @file classes/components/form/FieldControlledVocab.php
|
|
*
|
|
* Copyright (c) 2014-2021 Simon Fraser University
|
|
* Copyright (c) 2000-2021 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class FieldAutosuggestPreset
|
|
*
|
|
* @ingroup classes_controllers_form
|
|
*
|
|
* @brief A type of autosuggest field that preloads all of its options.
|
|
*/
|
|
|
|
namespace PKP\components\forms;
|
|
|
|
class FieldAutosuggestPreset extends FieldBaseAutosuggest
|
|
{
|
|
/** @copydoc Field::$component */
|
|
public $component = 'field-autosuggest-preset';
|
|
|
|
/** @var array Key/value list of suggestions for this field */
|
|
public $options = [];
|
|
|
|
/** @var array Key/value list of languages this field should support. Key = locale code. Value = locale name */
|
|
public $locales = [];
|
|
|
|
/**
|
|
* @copydoc Field::getConfig()
|
|
*/
|
|
public function getConfig()
|
|
{
|
|
$config = parent::getConfig();
|
|
$config['options'] = $this->options;
|
|
$config['selected'] = $this->getSelected();
|
|
|
|
return $config;
|
|
}
|
|
|
|
/**
|
|
* @copydoc Field::getConfig()
|
|
*/
|
|
protected function getSelected(): array
|
|
{
|
|
if ($this->isMultilingual) {
|
|
$selected = [];
|
|
foreach ($this->locales as $locale) {
|
|
if (array_key_exists($locale['key'], $this->value)) {
|
|
$config['selected'][$locale['key']] = array_map([$this, 'mapSelected'], (array) $this->value[$locale['key']]);
|
|
} else {
|
|
$config['selected'][$locale['key']] = [];
|
|
}
|
|
}
|
|
return $selected;
|
|
}
|
|
|
|
return array_map([$this, 'mapSelected'], $this->value);
|
|
}
|
|
|
|
/**
|
|
* Map the selected values to the format expected by an
|
|
* autosuggest field
|
|
*
|
|
* @param string $value
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function mapSelected($value)
|
|
{
|
|
foreach ($this->options as $option) {
|
|
if ($option['value'] === $value) {
|
|
return $option;
|
|
}
|
|
}
|
|
return [
|
|
'value' => $value,
|
|
'label' => $value,
|
|
];
|
|
}
|
|
}
|