You are here

FormState.php in Drupal 7 to 8/9 Module Upgrader 8

File

src/Plugin/DMU/Rewriter/FormState.php
View source
<?php

namespace Drupal\drupalmoduleupgrader\Plugin\DMU\Rewriter;

use Pharborist\ExpressionNode;
use Pharborist\Filter;
use Pharborist\Functions\ParameterNode;
use Pharborist\Objects\ObjectMethodCallNode;
use Pharborist\Operators\AssignNode;
use Pharborist\Token;
use Pharborist\Types\ArrayNode;

/**
 * @Rewriter(
 *  id = "form_state",
 *  type_hint = "\Drupal\Core\Form\FormStateInterface",
 *  properties = {
 *    "always_process" = {
 *      "get" = "getAlwaysProcess",
 *      "set" = "setAlwaysProcess"
 *    },
 *    "build_info" = {
 *      "get" = "getBuildInfo",
 *      "set" = "setBuildInfo"
 *    },
 *    "buttons" = {
 *      "get" = "getButtons",
 *      "set" = "setButtons"
 *    },
 *    "cache" = {
 *      "get" = "isCached",
 *      "set" = "setCached"
 *    },
 *    "complete_form" = {
 *      "get" = "getCompleteForm"
 *    },
 *    "executed" = {
 *      "get" = "isExecuted",
 *      "set" = "setExecuted"
 *    },
 *    "groups" = {
 *      "get" = "getGroups",
 *      "set" = "setGroups"
 *    },
 *    "has_file_element" = {
 *      "get" = "hasFileElement",
 *      "set" = "setHasFileElement"
 *    },
 *    "input" = {
 *      "get" = "getUserInput",
 *      "set" = "setUserInput"
 *    },
 *    "limit_validation_errors" = {
 *      "get" = "getLimitValidationErrors",
 *      "set" = "setLimitValidationErrors"
 *    },
 *    "must_validate" = {
 *      "get" = "isValidationEnforced",
 *      "set" = "setValidationEnforced"
 *    },
 *    "process_input" = {
 *      "get" = "isProcessingInput",
 *      "set" = "setProcessInput"
 *    },
 *    "programmed" = {
 *      "get" = "isProgrammed",
 *      "set" = "setProgrammed"
 *    },
 *    "programmed_bypass_access_check" = {
 *      "get" = "isBypassingProgrammedAccessChecks",
 *      "set" = "setProgrammedBypassAccessCheck"
 *    },
 *    "rebuild" = {
 *      "get" = "isRebuilding",
 *      "set" = "setRebuild"
 *    },
 *    "response" = {
 *      "get" = "getResponse",
 *      "set" = "setResponse"
 *    },
 *    "storage" = {
 *      "get" = "getStorage",
 *      "set" = "setStorage"
 *    },
 *    "submit_handlers" = {
 *      "get" = "getSubmitHandlers",
 *      "set" = "setSubmitHandlers"
 *    },
 *    "submitted" = {
 *      "get" = "isSubmitted",
 *      "set" = "getSubmitted"
 *    },
 *    "temporary" = {
 *      "get" = "getTemporary",
 *      "set" = "setTemporary"
 *    },
 *    "triggering_element" = {
 *      "get" = "getTriggeringElement",
 *      "set" = "setTriggeringElement"
 *    },
 *    "validate_handlers" = {
 *      "get" = "getValidateHandlers",
 *      "set" = "setValidateHandlers"
 *    },
 *    "validation_complete" = {
 *      "get" = "isValidationComplete",
 *      "set" = "setValidationComplete"
 *    }
 *  }
 * )
 */
class FormState extends Generic {

  /**
   * {@inheritdoc}
   */
  public function rewrite(ParameterNode $parameter) {
    parent::rewrite($parameter);
    $function = $parameter
      ->getFunction();
    $form_state = Token::variable('$' . $parameter
      ->getName());
    $set_errors = $function
      ->find(Filter::isFunctionCall('form_set_error', 'form_error'));

    /** @var \Pharborist\Functions\FunctionCallNode $set_error */
    foreach ($set_errors as $set_error) {
      $arguments = $set_error
        ->getArguments();
      $method = $set_error
        ->getName()
        ->getText() == 'form_set_error' ? 'setErrorByName' : 'setError';
      $rewrite = ObjectMethodCallNode::create(clone $form_state, $method);
      foreach ($arguments as $argument) {
        if (is_object($argument)) {
          $rewrite
            ->appendArgument(clone $argument);
        }
      }
      $set_error
        ->replaceWith($rewrite);
    }

    // form_clear_error() --> $form_state->clearErrors().
    $clear_errors = $function
      ->find(Filter::isFunctionCall('form_clear_error'));
    foreach ($clear_errors as $clear_error) {
      $clear_error
        ->replaceWith(ObjectMethodCallNode::create(clone $form_state, 'clearErrors'));
    }

    // form_get_errors() --> $form_state->getErrors()
    $get_errors = $function
      ->find(Filter::isFunctionCall('form_get_errors'));
    foreach ($get_errors as $get_error) {
      $get_error
        ->replaceWith(ObjectMethodCallNode::create(clone $form_state, 'getErrors'));
    }

    // form_get_error() --> $form_state->getError()
    $get_errors = $function
      ->find(Filter::isFunctionCall('form_get_error'));

    /** @var \Pharborist\Functions\FunctionCallNode $get_error */
    foreach ($get_errors as $get_error) {
      $rewrite = ObjectMethodCallNode::create(clone $form_state, 'getError')
        ->appendArgument($get_error
        ->getArguments()
        ->get(0));
      $get_error
        ->replaceWith($rewrite);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function rewriteAsGetter(ExpressionNode $expr, $property) {

    /** @var \Pharborist\ArrayLookupNode $expr */
    $object = clone $expr
      ->getRootArray();
    $keys = $expr
      ->getKeys();

    // $foo = $form_state['values'] --> $foo = $form_state->getValues()
    // $foo = $form_state['values']['baz'] --> $form_state->getValue(['baz'])
    if ($property == 'values') {
      if (sizeof($keys) == 1) {
        return ObjectMethodCallNode::create($object, 'getValues');
      }
      else {
        array_shift($keys);
        return ObjectMethodCallNode::create($object, 'getValue')
          ->appendArgument(ArrayNode::create($keys));
      }
    }
    elseif (isset($this->pluginDefinition['properties'][$property]['get'])) {
      return parent::rewriteAsGetter($expr, $property);
    }
    else {
      return ObjectMethodCallNode::create($object, 'get')
        ->appendArgument(ArrayNode::create($keys));
    }
  }

  /**
   * {@inheritdoc}
   */
  public function rewriteAsSetter(ExpressionNode $expr, $property, AssignNode $assignment) {

    /** @var \Pharborist\ArrayLookupNode $expr */
    $object = clone $expr
      ->getRootArray();
    $keys = $expr
      ->getKeys();
    $value = clone $assignment
      ->getRightOperand();

    // $form_state['values']['baz'] = 'foo' --> $form_state->setValue(['baz'], 'foo')
    if ($property == 'values') {
      array_shift($keys);
      return ObjectMethodCallNode::create($object, 'setValue')
        ->appendArgument(ArrayNode::create($keys))
        ->appendArgument($value);
    }
    elseif (isset($this->pluginDefinition['properties'][$property]['set'])) {
      return parent::rewriteAsSetter($expr, $property, $assignment);
    }
    else {
      return ObjectMethodCallNode::create($object, 'set')
        ->appendArgument(ArrayNode::create($keys))
        ->appendArgument($value);
    }
  }

}

Classes

Namesort descending Description
FormState Plugin annotation @Rewriter( id = "form_state", type_hint = "\Drupal\Core\Form\FormStateInterface", properties = { "always_process" = { "get" = "getAlwaysProcess", "set" = "setAlwaysProcess" }, "build_info" = { "get" =…