You are here

function _webform_entity_print_webform_submission_links in Webform 6.x

Same name and namespace in other branches
  1. 8.5 modules/webform_entity_print/webform_entity_print.module \_webform_entity_print_webform_submission_links()

Build Webform Entity Print links.

Parameters

array &$build: A renderable array representing the entity content.

\Drupal\Core\Entity\EntityInterface $entity: The entity object being rendered.

\Drupal\Core\Entity\Display\EntityViewDisplayInterface $display: The entity view display holding the display options configured for the entity components.

1 call to _webform_entity_print_webform_submission_links()
webform_entity_print_webform_submission_view_alter in modules/webform_entity_print/webform_entity_print.module
Implements hook_ENTITY_TYPE_view_alter() for webform_submission entities.

File

modules/webform_entity_print/webform_entity_print.module, line 134
Provides Entity Print (PDF) integration.

Code

function _webform_entity_print_webform_submission_links(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display) {
  $view_mode = $display
    ->getMode();
  $export_types = \Drupal::service('plugin.manager.entity_print.export_type')
    ->getDefinitions();
  $access_manager = \Drupal::accessManager();

  /** @var \Drupal\webform\WebformThirdPartySettingsManagerInterface $third_party_settings_manager */
  $third_party_settings_manager = \Drupal::service('webform.third_party_settings_manager');
  $debug = $third_party_settings_manager
    ->getThirdPartySetting('webform_entity_print', 'debug');
  $default_export_type_settings = $third_party_settings_manager
    ->getThirdPartySetting('webform_entity_print', 'export_types') ?: [];
  $webform_export_type_settings = $entity
    ->getWebform()
    ->getThirdPartySetting('webform_entity_print', 'export_types') ?: [];
  $print_links = [];
  $debug_links = [];
  foreach ($export_types as $export_type => $definition) {

    // Set default export type settings.
    $webform_export_type_settings += [
      $export_type => [],
    ];
    $default_export_type_settings += [
      $export_type => [],
    ];

    // Get settings from webform and global settings.
    $export_settings = array_filter($webform_export_type_settings[$export_type]) + $default_export_type_settings[$export_type] + [
      'link_text' => '',
      'link_attributes' => [],
    ];

    // Skip if export type is not enabled.
    if (empty($export_settings['enabled']) || empty($export_settings['link_text'])) {
      continue;
    }
    $key = 'webform_entity_print_view_' . $export_type;
    $route_params = [
      'entity_type' => $entity
        ->getEntityTypeId(),
      'entity_id' => $entity
        ->id(),
      'export_type' => trim($export_type, '_engine'),
    ];
    $route_options = [
      'query' => [
        'view_mode' => $view_mode,
      ],
    ];

    // Attach the URL's token query parameter used to grant view permission.
    $token = \Drupal::request()
      ->get('token');
    if ($token && $token === $entity
      ->getToken()) {
      $route_options['query']['token'] = $token;
    }
    $link_attributes = $export_settings['link_attributes'];
    $link_attributes += [
      'class' => [],
    ];
    $link_attributes['class'][] = 'webform-entity-print-link';
    $link_attributes['class'][] = Html::getClass('webform-entity-print-link-' . $export_type);
    $print_links[$key] = [
      '#type' => 'link',
      '#title' => $export_settings['link_text'],
      '#export_type' => $export_type,
      '#url' => Url::fromRoute('entity_print.view', $route_params, $route_options),
      '#attributes' => $link_attributes,
      '#access' => $access_manager
        ->checkNamedRoute('entity_print.view', $route_params, NULL, TRUE),
    ];
    if ($debug) {
      $debug_links[$key] = [
        '#type' => 'link',
        '#title' => $definition['label'],
        '#export_type' => $export_type,
        '#url' => Url::fromRoute('entity_print.view.debug', $route_params, $route_options),
        '#access' => $access_manager
          ->checkNamedRoute('entity_print.view', $route_params, NULL, TRUE),
        '#prefix' => $debug_links ? ' | ' : '',
      ];
    }
  }
  if ($print_links) {
    $build['webform_entity_print'] = [
      '#type' => 'actions',
      '#attributes' => [
        'class' => [
          'webform-entity-print-links',
        ],
      ],
    ] + $print_links;
  }
  if ($debug_links) {
    $build['webform_entity_print_debug'] = [
      '#suffix' => '<p>',
      '#prefix' => '</p>',
      'title' => [
        '#markup' => '<strong>' . t('Debug') . '</strong>',
        '#suffix' => ': ',
      ],
    ] + $debug_links;
  }
}