%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/TextBase.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;
use Nette\Forms\Form;
use Nette\Utils\Strings;
/**
* Implements the basic functionality common to text input controls.
*/
abstract class TextBase extends BaseControl
{
/** @var string */
protected $emptyValue = '';
/** @var mixed unfiltered submitted value */
protected $rawValue = '';
/** @var bool */
private $nullable;
/**
* Sets control's value.
* @return static
* @internal
*/
public function setValue($value)
{
if ($value === null) {
$value = '';
} elseif (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) {
throw new Nette\InvalidArgumentException(sprintf("Value must be scalar or null, %s given in field '%s'.", gettype($value), $this->name));
}
$this->value = $value;
$this->rawValue = (string) $value;
return $this;
}
/**
* Returns control's value.
* @return mixed
*/
public function getValue()
{
$value = $this->value === Strings::trim($this->translate($this->emptyValue))
? ''
: $this->value;
return $this->nullable && $value === '' ? null : $value;
}
/**
* Sets whether getValue() returns null instead of empty string.
* @return static
*/
public function setNullable(bool $value = true)
{
$this->nullable = $value;
return $this;
}
/**
* Sets the special value which is treated as empty string.
* @return static
*/
public function setEmptyValue(string $value)
{
$this->emptyValue = $value;
return $this;
}
/**
* Returns the special value which is treated as empty string.
*/
public function getEmptyValue(): string
{
return $this->emptyValue;
}
/**
* Sets the maximum number of allowed characters.
* @return static
*/
public function setMaxLength(int $length)
{
$this->control->maxlength = $length;
return $this;
}
public function getControl(): Nette\Utils\Html
{
$el = parent::getControl();
if ($this->emptyValue !== '') {
$el->attrs['data-nette-empty-value'] = Strings::trim($this->translate($this->emptyValue));
}
if (isset($el->placeholder)) {
$el->placeholder = $this->translate($el->placeholder);
}
return $el;
}
protected function getRenderedValue(): ?string
{
return $this->rawValue === ''
? ($this->emptyValue === '' ? null : $this->translate($this->emptyValue))
: $this->rawValue;
}
/** @return static */
public function addRule($validator, $errorMessage = null, $arg = null)
{
foreach ($this->getRules() as $rule) {
if (!$rule->canExport() && !$rule->branch) {
return parent::addRule($validator, $errorMessage, $arg);
}
}
if ($validator === Form::Length || $validator === Form::MaxLength) {
$tmp = is_array($arg) ? $arg[1] : $arg;
if (is_scalar($tmp)) {
$this->control->maxlength = isset($this->control->maxlength)
? min($this->control->maxlength, $tmp)
: $tmp;
}
}
return parent::addRule($validator, $errorMessage, $arg);
}
}