You are here

protected static function WebformCodeMirror::validateTwig in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/Element/WebformCodeMirror.php \Drupal\webform\Element\WebformCodeMirror::validateTwig()

Validate Twig.

Parameters

array $element: The form element whose value is being validated.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

array $complete_form: The complete form structure.

Return value

array|null An array of error messages.

1 call to WebformCodeMirror::validateTwig()
WebformCodeMirror::getErrors in src/Element/WebformCodeMirror.php
Get validation errors.

File

src/Element/WebformCodeMirror.php, line 287

Class

WebformCodeMirror
Provides a webform element for using CodeMirror.

Namespace

Drupal\webform\Element

Code

protected static function validateTwig($element, FormStateInterface $form_state, $complete_form) {
  $template = $element['#value'];
  $form_object = $form_state
    ->getFormObject();
  try {

    // If form object has ::getWebform method validate Twig template
    // using a temporary webform submission context.
    if (method_exists($form_object, 'getWebform')) {

      /** @var \Drupal\webform\WebformInterface $webform */
      $webform = $form_object
        ->getWebform();

      // Get a temporary webform submission.

      /** @var \Drupal\webform\WebformSubmissionGenerateInterface $webform_submission_generate */
      $webform_submission_generate = \Drupal::service('webform_submission.generate');
      $values = [
        // Set sid to 0 to prevent validation errors.
        'sid' => 0,
        'webform_id' => $webform
          ->id(),
        'data' => $webform_submission_generate
          ->getData($webform),
      ];
      $webform_submission = WebformSubmission::create($values);
      $build = WebformTwigExtension::buildTwigTemplate($webform_submission, $template, []);
    }
    else {
      $build = [
        '#type' => 'inline_template',
        '#template' => $element['#value'],
        '#context' => [],
      ];
    }
    \Drupal::service('renderer')
      ->renderPlain($build);
    return NULL;
  } catch (\Exception $exception) {
    return [
      $exception
        ->getMessage(),
    ];
  }
}