%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/SubmitButton.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;
/**
* Submittable button control.
*
* @property-read bool $submittedBy
*/
class SubmitButton extends Button implements Nette\Forms\SubmitterControl
{
/**
* Occurs when the button is clicked and form is successfully validated
* @var array<callable(self, array|object): void|callable(Nette\Forms\Form, array|object): void|callable(array|object): void>
*/
public $onClick = [];
/** @var array<callable(self): void> Occurs when the button is clicked and form is not validated */
public $onInvalidClick = [];
/** @var array|null */
private $validationScope;
/**
* @param string|object $caption
*/
public function __construct($caption = null)
{
parent::__construct($caption);
$this->control->type = 'submit';
$this->setOmitted(true);
}
public function loadHttpData(): void
{
parent::loadHttpData();
if ($this->isFilled()) {
$this->getForm()->setSubmittedBy($this);
}
}
/**
* Tells if the form was submitted by this button.
*/
public function isSubmittedBy(): bool
{
return $this->getForm()->isSubmitted() === $this;
}
/**
* Sets the validation scope. Clicking the button validates only the controls within the specified scope.
* @return static
*/
public function setValidationScope(?iterable $scope)
{
if ($scope === null) {
$this->validationScope = null;
} else {
$this->validationScope = [];
foreach ($scope ?: [] as $control) {
if (!$control instanceof Nette\Forms\Container && !$control instanceof Nette\Forms\Control) {
throw new Nette\InvalidArgumentException('Validation scope accepts only Nette\Forms\Container or Nette\Forms\Control instances.');
}
$this->validationScope[] = $control;
}
}
return $this;
}
/**
* Gets the validation scope.
*/
public function getValidationScope(): ?array
{
return $this->validationScope;
}
/**
* Fires click event.
*/
public function click(): void
{
Nette\Utils\Arrays::invoke($this->onClick, $this);
}
public function getControl($caption = null): Nette\Utils\Html
{
$scope = [];
foreach ((array) $this->validationScope as $control) {
$scope[] = $control->lookupPath(Nette\Forms\Form::class);
}
return parent::getControl($caption)->addAttributes([
'formnovalidate' => $this->validationScope !== null,
'data-nette-validation-scope' => $scope ?: null,
]);
}
}