You are here

protected function ForwardLinkGenerator::generateLink in Forward 4.x

Same name and namespace in other branches
  1. 4.0.x src/Services/ForwardLinkGenerator.php \Drupal\forward\Services\ForwardLinkGenerator::generateLink()

Generate a link to forward the entity using the settings.

1 call to ForwardLinkGenerator::generateLink()
ForwardLinkGenerator::generate in src/Services/ForwardLinkGenerator.php
Generate a Forward link for a given entity.

File

src/Services/ForwardLinkGenerator.php, line 87

Class

ForwardLinkGenerator
Defines a class for generating a Forward link on an entity.

Namespace

Drupal\forward\Services

Code

protected function generateLink(EntityInterface $entity, array $settings) {
  $langcode = $entity
    ->language()
    ->getId();
  $token = [
    'forward' => [
      'entity' => $entity,
    ],
  ];
  $title = $this->tokenService
    ->replace($settings['title'], $token, [
    'langcode' => $langcode,
  ]);
  $title_text = $title;
  $html = FALSE;

  // Output the correct style of link.
  $default_icon = drupal_get_path('module', 'forward') . '/images/forward.gif';
  $custom_icon = $settings['icon'];
  $link_style = $settings['style'];
  switch ($link_style) {

    // Text only is a "noop" since the title text is already setup above.
    // Image only.
    case 1:
      $img = $custom_icon ? $custom_icon : $default_icon;
      $render_array = [
        '#theme' => 'image',
        '#uri' => $img,
        '#alt' => $title,
        '#attributes' => [
          'class' => [
            'forward-icon',
          ],
        ],
      ];
      $title = $this->renderer
        ->render($render_array);
      $html = TRUE;
      break;

    // Image and text.
    case 2:
      $img = $custom_icon ? $custom_icon : $default_icon;
      $render_array = [
        'image' => [
          '#theme' => 'image',
          '#uri' => $img,
          '#alt' => $title,
          '#attributes' => [
            'class' => [
              'forward-icon',
              'forward-icon-margin',
            ],
          ],
        ],
        'text' => [
          '#markup' => $title_text,
        ],
      ];
      $title = $this->renderer
        ->render($render_array);
      $html = TRUE;
      break;
  }
  $attributes = [
    'title' => $title_text,
    'class' => [
      'forward-page',
    ],
  ];
  if ($settings['nofollow']) {
    $attributes['rel'] = 'nofollow';
  }
  $entity_id = $entity
    ->id();
  $entity_type = $entity
    ->getEntityTypeId();
  $url = Url::fromUri("internal:/forward/{$entity_type}/{$entity_id}");
  $url
    ->setOptions([
    'html' => $html,
    'attributes' => $attributes,
  ]);
  return $this->linkGenerator
    ->generate($title, $url);
}