public function WebformEntityReferenceLinkFormatter::viewElements in Webform 6.x
Same name and namespace in other branches
- 8.5 src/Plugin/Field/FieldFormatter/WebformEntityReferenceLinkFormatter.php \Drupal\webform\Plugin\Field\FieldFormatter\WebformEntityReferenceLinkFormatter::viewElements()
Builds a renderable array for a field value.
Parameters
\Drupal\Core\Field\FieldItemListInterface $items: The field values to be rendered.
string $langcode: The language that should be used to render the field.
Return value
array A renderable array for $items, as an array of child elements keyed by consecutive numeric indexes starting from 0.
Overrides FormatterInterface::viewElements
File
- src/
Plugin/ Field/ FieldFormatter/ WebformEntityReferenceLinkFormatter.php, line 130
Class
- WebformEntityReferenceLinkFormatter
- Plugin implementation of the 'Link to webform' formatter.
Namespace
Drupal\webform\Plugin\Field\FieldFormatterCode
public function viewElements(FieldItemListInterface $items, $langcode) {
$source_entity = $items
->getEntity();
$this->messageManager
->setSourceEntity($source_entity);
$elements = [];
/** @var \Drupal\webform\WebformInterface[] $entities */
$entities = $this
->getEntitiesToView($items, $langcode);
foreach ($entities as $delta => $entity) {
// Do not display the webform if the current user can't create submissions.
if ($entity
->id() && !$entity
->access('submission_create')) {
continue;
}
if ($entity
->isOpen()) {
$link_label = $this
->getSetting('label');
if (strpos($link_label, '[webform_submission') !== FALSE) {
$link_entity = WebformSubmission::create([
'webform_id' => $entity
->id(),
'entity_type' => $source_entity
->getEntityTypeId(),
'entity_id' => $source_entity
->id(),
]);
// Invoke override settings to all webform handlers to adjust any
// form settings.
$link_entity
->getWebform()
->invokeHandlers('overrideSettings', $link_entity);
}
else {
$link_entity = $entity;
}
$link_options = QueryStringWebformSourceEntity::getRouteOptionsQuery($source_entity);
$link = [
'#type' => 'link',
'#title' => [
'#markup' => $this->tokenManager
->replace($link_label, $link_entity),
],
'#url' => $entity
->toUrl('canonical', $link_options),
'#attributes' => $this
->getSetting('attributes') ?: [],
];
if ($dialog = $this
->getSetting('dialog')) {
$link['#attributes']['class'][] = 'webform-dialog';
$link['#attributes']['class'][] = 'webform-dialog-' . $dialog;
// Attach webform dialog library and options if they are not
// on every page.
if (!\Drupal::config('webform.settings')
->get('settings.dialog')) {
$link['#attached']['library'][] = 'webform/webform.dialog';
$link['#attached']['drupalSettings']['webform']['dialog']['options'] = \Drupal::config('webform.settings')
->get('settings.dialog_options');
}
}
$elements[$delta] = $link;
}
else {
$this->messageManager
->setWebform($entity);
$message_type = $entity
->isOpening() ? WebformMessageManagerInterface::FORM_OPEN_MESSAGE : WebformMessageManagerInterface::FORM_CLOSE_MESSAGE;
$elements[$delta] = $this->messageManager
->build($message_type);
}
$this
->setCacheContext($elements[$delta], $entity, $items[$delta]);
}
return $elements;
}