View source
<?php
declare (strict_types=1);
namespace Drupal\authorization\Form;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Form\FormInterface;
use Drupal\Core\Form\FormState;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Symfony\Component\HttpFoundation\Response;
class SubFormState implements FormStateInterface {
protected static $inheritedKeys = [
'build_info' => TRUE,
'rebuild_info' => TRUE,
'rebuild' => TRUE,
'response' => TRUE,
'redirect' => TRUE,
'redirect_route' => TRUE,
'no_redirect' => TRUE,
'method' => TRUE,
'cache' => TRUE,
'no_cache' => TRUE,
'triggering_element' => TRUE,
];
protected $mainFormState;
protected $subKeys;
protected $internalStorage;
protected $values;
protected $input;
public function __construct(FormStateInterface $main_form_state, array $sub_keys) {
$this->mainFormState = $main_form_state;
$this->subKeys = $sub_keys;
$sub_state =& $main_form_state
->get('sub_states');
if (!isset($sub_state)) {
$sub_state = [];
}
$this->internalStorage =& $this
->applySubKeys($sub_state);
if (!isset($this->internalStorage)) {
$this->internalStorage = [];
}
$this->values =& $this
->applySubKeys($main_form_state
->getValues());
if (!is_array($this->values)) {
$this->values = [];
}
$this->input =& $this
->applySubKeys($main_form_state
->getUserInput());
if (!is_array($this->input)) {
$this->input = [];
}
}
protected function &applySubKeys(array &$original) : ?array {
return NestedArray::getValue($original, $this->subKeys);
}
public function &getCompleteForm() : array {
return $this
->applySubKeys($this->mainFormState
->getCompleteForm());
}
public function setCompleteForm(array &$complete_form) {
$sub_form =& $this
->applySubKeys($this->mainFormState
->getCompleteForm());
$sub_form = $complete_form;
return $this;
}
public function loadInclude($module, $type, $name = NULL) {
return $this->mainFormState
->loadInclude($module, $type, $name);
}
public function getCacheableArray() : array {
return [];
}
public function setFormState(array $form_state_additions) {
foreach ($form_state_additions as $key => $value) {
$this
->set($key, $value);
}
return $this;
}
public function setResponse(Response $response) {
$this->mainFormState
->setResponse($response);
return $this;
}
public function getResponse() : ?Response {
return $this->mainFormState
->getResponse();
}
public function setRedirect($route_name, array $route_parameters = [], array $options = []) {
$this->mainFormState
->setRedirect($route_name, $route_parameters, $options);
return $this;
}
public function setRedirectUrl(Url $url) {
$this->mainFormState
->setRedirectUrl($url);
return $this;
}
public function getRedirect() {
return $this->mainFormState
->getRedirect();
}
public function setStorage(array $storage) {
$this->internalStorage = $storage;
return $this;
}
public function &getStorage() {
return $this->internalStorage;
}
public function &get($property) {
if (isset(self::$inheritedKeys[$property])) {
return $this->mainFormState
->get($property);
}
$value =& NestedArray::getValue($this->internalStorage, (array) $property);
return $value;
}
public function set($property, $value) {
if (isset(self::$inheritedKeys[$property])) {
$this->mainFormState
->set($property, $value);
}
else {
$this->internalStorage[$property] = $value;
}
return $this;
}
public function has($property) {
return isset(self::$inheritedKeys[$property]) || array_key_exists($property, $this->internalStorage);
}
public function setBuildInfo(array $build_info) {
$this->mainFormState
->setBuildInfo($build_info);
return $this;
}
public function getBuildInfo() {
return $this->mainFormState
->getBuildInfo();
}
public function addBuildInfo($property, $value) {
$this->mainFormState
->addBuildInfo($property, $value);
return $this;
}
public function &getUserInput() {
$user_input =& $this->mainFormState
->getUserInput();
return $this
->applySubKeys($user_input);
}
public function setUserInput(array $user_input) {
$old =& $this
->getUserInput();
$old = $user_input;
return $this;
}
public function &getValues() {
return $this->values;
}
public function &getValue($key, $default = NULL) {
if ($this
->hasValue($key)) {
return $this->values[$key];
}
}
public function setValues(array $values) {
$this->values = $values;
return $this;
}
public function setValue($key, $value) {
$this->values[$key] = $value;
return $this;
}
public function unsetValue($key) {
unset($this->values[$key]);
return $this;
}
public function hasValue($key) {
if (isset($this->values[$key])) {
return TRUE;
}
return FALSE;
}
public function isValueEmpty($key) {
if (empty($this->values[$key])) {
return TRUE;
}
return FALSE;
}
public function setValueForElement(array $element, $value) {
$this->mainFormState
->setValueForElement($element, $value);
return $this;
}
public static function hasAnyErrors() {
return FormState::hasAnyErrors();
}
public function setErrorByName($name, $message = '') {
$this->mainFormState
->setErrorByName(implode('][', $this->subKeys) . '][' . $name, $message);
return $this;
}
public function setError(array &$element, $message = '') {
$this->mainFormState
->setError($element, $message);
return $this;
}
public function clearErrors() {
$this->mainFormState
->clearErrors();
}
public function getErrors() {
return $this->mainFormState
->getErrors();
}
public function getError(array $element) {
return $this->mainFormState
->getError($element);
}
public function setRebuild($rebuild = TRUE) {
$this->mainFormState
->setRebuild($rebuild);
return $this;
}
public function isRebuilding() {
return $this->mainFormState
->isRebuilding();
}
public function setInvalidToken($invalid_token) {
$this->mainFormState
->setInvalidToken($invalid_token);
return $this;
}
public function hasInvalidToken() {
return $this->mainFormState
->hasInvalidToken();
}
public function prepareCallback($callback) {
return $this->mainFormState
->prepareCallback($callback);
}
public function getFormObject() {
return $this->mainFormState
->getFormObject();
}
public function setFormObject(FormInterface $form_object) {
$this->mainFormState
->setFormObject($form_object);
return $this;
}
public function setAlwaysProcess($always_process = TRUE) {
$this->mainFormState
->setAlwaysProcess($always_process);
return $this;
}
public function getAlwaysProcess() {
return $this->mainFormState
->getAlwaysProcess();
}
public function setButtons(array $buttons) {
$this->mainFormState
->setButtons($buttons);
return $this;
}
public function getButtons() {
return $this->mainFormState
->getButtons();
}
public function setCached($cache = TRUE) {
$this->mainFormState
->setCached($cache);
return $this;
}
public function isCached() {
return $this->mainFormState
->isCached();
}
public function disableCache() {
$this->mainFormState
->disableCache();
return $this;
}
public function setExecuted() {
$this->mainFormState
->setExecuted();
return $this;
}
public function isExecuted() {
return $this->mainFormState
->isExecuted();
}
public function setGroups(array $groups) {
$this->mainFormState
->setGroups($groups);
return $this;
}
public function &getGroups() {
return $this->mainFormState
->getGroups();
}
public function setHasFileElement($has_file_element = TRUE) {
$this->mainFormState
->setHasFileElement($has_file_element);
return $this;
}
public function hasFileElement() {
return $this->mainFormState
->hasFileElement();
}
public function setLimitValidationErrors($limit_validation_errors) {
$add_subkeys = function (array $path) {
return array_merge($this->subKeys, $path);
};
$limit_validation_errors = array_map($add_subkeys, $limit_validation_errors);
$this->mainFormState
->setLimitValidationErrors($limit_validation_errors);
return $this;
}
public function getLimitValidationErrors() {
$limit_validation_errors = $this->mainFormState
->getLimitValidationErrors();
if (is_null($limit_validation_errors)) {
return NULL;
}
$return = [];
$sub_keys_count = count($this->subKeys);
foreach ($limit_validation_errors as $path) {
if (array_slice($path, 0, $sub_keys_count) == $sub_keys_count) {
if (count($path) == $sub_keys_count) {
return NULL;
}
$return[] = $path;
}
}
return $return;
}
public function setMethod($method) {
$this->mainFormState
->setMethod($method);
return $this;
}
public function setRequestMethod($method) {
$this->mainFormState
->setRequestMethod($method);
return $this;
}
public function isMethodType($method_type) : bool {
return $this->mainFormState
->isMethodType($method_type);
}
public function setValidationEnforced($must_validate = TRUE) {
$this->mainFormState
->setValidationEnforced($must_validate);
return $this;
}
public function isValidationEnforced() : bool {
return $this->mainFormState
->isValidationEnforced();
}
public function disableRedirect($no_redirect = TRUE) {
$this->mainFormState
->disableRedirect($no_redirect);
return $this;
}
public function isRedirectDisabled() : bool {
return $this->mainFormState
->isRedirectDisabled();
}
public function setProcessInput($process_input = TRUE) {
$this->mainFormState
->setProcessInput($process_input);
return $this;
}
public function isProcessingInput() {
return $this->mainFormState
->isProcessingInput();
}
public function setProgrammed($programmed = TRUE) {
$this->mainFormState
->setProgrammed($programmed);
return $this;
}
public function isProgrammed() {
return $this->mainFormState
->isProgrammed();
}
public function setProgrammedBypassAccessCheck($programmed_bypass_access_check = TRUE) {
$this->mainFormState
->setProgrammedBypassAccessCheck($programmed_bypass_access_check);
return $this;
}
public function isBypassingProgrammedAccessChecks() {
return $this->mainFormState
->isBypassingProgrammedAccessChecks();
}
public function setRebuildInfo(array $rebuild_info) {
$this->mainFormState
->setRebuildInfo($rebuild_info);
return $this;
}
public function getRebuildInfo() : array {
return $this->mainFormState
->getRebuildInfo();
}
public function addRebuildInfo($property, $value) {
$this->mainFormState
->addRebuildInfo($property, $value);
return $this;
}
public function setSubmitHandlers(array $submit_handlers) {
$this->mainFormState
->setSubmitHandlers($submit_handlers);
return $this;
}
public function getSubmitHandlers() : array {
return $this->mainFormState
->getSubmitHandlers();
}
public function setSubmitted() {
$this->mainFormState
->setSubmitted();
return $this;
}
public function isSubmitted() : bool {
return $this->mainFormState
->isSubmitted();
}
public function setTemporary(array $temporary) {
$this->mainFormState
->setTemporary($temporary);
return $this;
}
public function getTemporary() : array {
return $this->mainFormState
->getTemporary();
}
public function &getTemporaryValue($key) {
return $this->mainFormState
->getTemporaryValue($key);
}
public function setTemporaryValue($key, $value) {
$this->mainFormState
->setTemporaryValue($key, $value);
return $this;
}
public function hasTemporaryValue($key) {
return $this->mainFormState
->getTemporaryValue($key);
}
public function setTriggeringElement($triggering_element) {
$this->mainFormState
->setTriggeringElement($triggering_element);
return $this;
}
public function &getTriggeringElement() {
return $this->mainFormState
->getTriggeringElement();
}
public function setValidateHandlers(array $validate_handlers) {
$this->mainFormState
->setValidateHandlers($validate_handlers);
return $this;
}
public function getValidateHandlers() : array {
return $this->mainFormState
->getValidateHandlers();
}
public function setValidationComplete($validation_complete = TRUE) {
$this->mainFormState
->setValidationComplete($validation_complete);
return $this;
}
public function isValidationComplete() : bool {
return $this->mainFormState
->isValidationComplete();
}
public function getCleanValueKeys() : array {
return $this->mainFormState
->getCleanValueKeys();
}
public function setCleanValueKeys(array $keys) {
$this->mainFormState
->setCleanValueKeys($keys);
return $this;
}
public function addCleanValueKey($key) {
$this->mainFormState
->addCleanValueKey($key);
return $this;
}
public function cleanValues() {
$this->mainFormState
->cleanValues();
return $this;
}
}