You are here

public static function Webform::preRenderWebformElement in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/Element/Webform.php \Drupal\webform\Element\Webform::preRenderWebformElement()

Webform element pre render callback.

File

src/Element/Webform.php, line 38

Class

Webform
Provides a render element to display a webform.

Namespace

Drupal\webform\Element

Code

public static function preRenderWebformElement($element) {
  $webform = $element['#webform'] instanceof WebformInterface ? $element['#webform'] : WebformEntity::load($element['#webform']);
  if (!$webform) {
    return $element;
  }
  if (!empty($element['#sid'])) {
    $webform_submission = WebformSubmission::load($element['#sid']);
    if ($webform_submission && $webform_submission
      ->access('update') && $webform_submission
      ->getWebform()
      ->id() === $webform
      ->id()) {
      $element['webform_build'] = \Drupal::service('entity.form_builder')
        ->getForm($webform_submission, 'edit');
    }
    elseif ($webform
      ->getSetting('form_access_denied') !== WebformInterface::ACCESS_DENIED_DEFAULT) {

      // Set access denied message.
      $element['webform_access_denied'] = static::buildAccessDenied($webform);
    }
    else {
      static::addCacheableDependency($element, $webform);
    }
  }
  else {
    if ($webform
      ->access('submission_create')) {
      $values = [];

      // Set data.
      $values['data'] = $element['#default_data'];

      // Set source entity type and id.
      if (!empty($element['#entity']) && $element['#entity'] instanceof EntityInterface) {
        $values['entity_type'] = $element['#entity']
          ->getEntityTypeId();
        $values['entity_id'] = $element['#entity']
          ->id();
      }
      elseif (!empty($element['#entity_type']) && !empty($element['#entity_id'])) {
        $values['entity_type'] = $element['#entity_type'];
        $values['entity_id'] = $element['#entity_id'];
      }

      // Build the webform.
      $element['webform_build'] = $webform
        ->getSubmissionForm($values);
    }
    elseif ($webform
      ->getSetting('form_access_denied') !== WebformInterface::ACCESS_DENIED_DEFAULT) {

      // Set access denied message.
      $element['webform_access_denied'] = static::buildAccessDenied($webform);
    }
    else {
      static::addCacheableDependency($element, $webform);
    }
  }
  if (isset($element['webform_build'])) {

    // Set custom form submit action.
    if (!empty($element['#action'])) {
      $element['webform_build']['#action'] = $element['#action'];
    }

    // Hide submission information.
    if ($element['#information'] === FALSE && isset($element['webform_build']['information'])) {
      $element['webform_build']['information']['#access'] = FALSE;
    }
  }

  // Allow anonymous drafts to be restored.
  // @see \Drupal\webform\WebformSubmissionForm::buildForm
  if (\Drupal::currentUser()
    ->isAnonymous() && $webform
    ->getSetting('draft') === WebformInterface::DRAFT_ALL) {
    $element['#cache']['max-age'] = 0;

    // @todo Remove once bubbling of element's max-age to page cache is fixed.
    // @see https://www.drupal.org/project/webform/issues/3015760
    // @see https://www.drupal.org/project/drupal/issues/2352009
    if (\Drupal::moduleHandler()
      ->moduleExists('page_cache')) {
      \Drupal::service('page_cache_kill_switch')
        ->trigger();
    }
  }
  return $element;
}