Webform.php in Webform 6.x
File
src/Element/Webform.php
View source
<?php
namespace Drupal\webform\Element;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Render\Element\RenderElement;
use Drupal\webform\Entity\Webform as WebformEntity;
use Drupal\webform\Entity\WebformSubmission;
use Drupal\webform\WebformInterface;
class Webform extends RenderElement {
public function getInfo() {
$class = get_class($this);
return [
'#pre_render' => [
[
$class,
'preRenderWebformElement',
],
],
'#webform' => NULL,
'#default_data' => [],
'#action' => NULL,
'#sid' => NULL,
'#information' => NULL,
];
}
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) {
$element['webform_access_denied'] = static::buildAccessDenied($webform);
}
else {
static::addCacheableDependency($element, $webform);
}
}
else {
if ($webform
->access('submission_create')) {
$values = [];
$values['data'] = $element['#default_data'];
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'];
}
$element['webform_build'] = $webform
->getSubmissionForm($values);
}
elseif ($webform
->getSetting('form_access_denied') !== WebformInterface::ACCESS_DENIED_DEFAULT) {
$element['webform_access_denied'] = static::buildAccessDenied($webform);
}
else {
static::addCacheableDependency($element, $webform);
}
}
if (isset($element['webform_build'])) {
if (!empty($element['#action'])) {
$element['webform_build']['#action'] = $element['#action'];
}
if ($element['#information'] === FALSE && isset($element['webform_build']['information'])) {
$element['webform_build']['information']['#access'] = FALSE;
}
}
if (\Drupal::currentUser()
->isAnonymous() && $webform
->getSetting('draft') === WebformInterface::DRAFT_ALL) {
$element['#cache']['max-age'] = 0;
if (\Drupal::moduleHandler()
->moduleExists('page_cache')) {
\Drupal::service('page_cache_kill_switch')
->trigger();
}
}
return $element;
}
public static function buildAccessDenied(WebformInterface $webform) {
$webform_token_manager = \Drupal::service('webform.token_manager');
$config = \Drupal::configFactory()
->get('webform.settings');
$message = $webform
->getSetting('form_access_denied_message') ?: $config
->get('settings.default_form_access_denied_message');
$message = $webform_token_manager
->replace($message, $webform);
$attributes = $webform
->getSetting('form_access_denied_attributes');
$attributes['class'][] = 'webform-access-denied';
$build = [
'#type' => 'container',
'#attributes' => $attributes,
'message' => WebformHtmlEditor::checkMarkup($message),
];
return static::addCacheableDependency($build, $webform);
}
public static function addCacheableDependency(array &$elements, WebformInterface $webform) {
$renderer = \Drupal::service('renderer');
$config = \Drupal::configFactory()
->get('webform.settings');
$renderer
->addCacheableDependency($elements, $config);
$renderer
->addCacheableDependency($elements, $webform);
return $elements;
}
}
Classes
Name |
Description |
Webform |
Provides a render element to display a webform. |