%PDF- %PDF-
| Direktori : /www/varak.net/losik.varak.net/vendor/nette/forms/src/Forms/Controls/ |
| Current File : //www/varak.net/losik.varak.net/vendor/nette/forms/src/Forms/Controls/SelectBox.php |
<?php
/**
* This file is part of the Nette Framework (https://nette.org)
* Copyright (c) 2004 David Grudl (https://davidgrudl.com)
*/
declare(strict_types=1);
namespace Nette\Forms\Controls;
use Nette;
/**
* Select box control that allows single item selection.
*/
class SelectBox extends ChoiceControl
{
/** validation rule */
public const Valid = ':selectBoxValid';
public const VALID = self::Valid;
/** @var array of option / optgroup */
private $options = [];
/** @var string|object|false */
private $prompt = false;
/** @var array */
private $optionAttributes = [];
public function __construct($label = null, ?array $items = null)
{
parent::__construct($label, $items);
$this->setOption('type', 'select');
$this->addCondition(function () {
return $this->prompt === false
&& $this->options
&& $this->control->size < 2;
})->addRule(Nette\Forms\Form::Filled, Nette\Forms\Validator::$messages[self::Valid]);
}
/**
* Sets first prompt item in select box.
* @param string|object|false $prompt
* @return static
*/
public function setPrompt($prompt)
{
$this->prompt = $prompt;
return $this;
}
/**
* Returns first prompt item?
* @return string|object|false
*/
public function getPrompt()
{
return $this->prompt;
}
/**
* Sets options and option groups from which to choose.
* @return static
*/
public function setItems(array $items, bool $useKeys = true)
{
if (!$useKeys) {
$res = [];
foreach ($items as $key => $value) {
unset($items[$key]);
if (is_array($value)) {
foreach ($value as $val) {
$res[$key][(string) $val] = $val;
}
} else {
$res[(string) $value] = $value;
}
}
$items = $res;
}
$this->options = $items;
return parent::setItems(Nette\Utils\Arrays::flatten($items, true));
}
public function getControl(): Nette\Utils\Html
{
$items = $this->prompt === false ? [] : ['' => $this->translate($this->prompt)];
foreach ($this->options as $key => $value) {
$items[is_array($value) ? $this->translate($key) : $key] = $this->translate($value);
}
return Nette\Forms\Helpers::createSelectBox(
$items,
[
'disabled:' => is_array($this->disabled) ? $this->disabled : null,
] + $this->optionAttributes,
$this->value
)->addAttributes(parent::getControl()->attrs);
}
/** @return static */
public function addOptionAttributes(array $attributes)
{
$this->optionAttributes = $attributes + $this->optionAttributes;
return $this;
}
/** @return static */
public function setOptionAttribute(string $name, $value = true)
{
$this->optionAttributes[$name] = $value;
return $this;
}
public function isOk(): bool
{
return $this->isDisabled()
|| $this->prompt !== false
|| $this->getValue() !== null
|| !$this->options
|| $this->control->size > 1;
}
public function getOptionAttributes(): array
{
return $this->optionAttributes;
}
}