You are here

private function ForwardLinkBuilder::buildLink in Forward 8.3

Same name and namespace in other branches
  1. 8 src/ForwardLinkBuilder.php \Drupal\forward\ForwardLinkBuilder::buildLink()
  2. 8.2 src/ForwardLinkBuilder.php \Drupal\forward\ForwardLinkBuilder::buildLink()

Build a link.

1 call to ForwardLinkBuilder::buildLink()
ForwardLinkBuilder::buildForwardEntityLink in src/ForwardLinkBuilder.php
Builds a Forward link for a given entity.

File

src/ForwardLinkBuilder.php, line 68

Class

ForwardLinkBuilder
Defines a class for building markup for a Forward link on an entity.

Namespace

Drupal\forward

Code

private function buildLink(EntityInterface $entity, array $settings) {
  $langcode = $entity
    ->language()
    ->getId();
  $token = [
    'forward' => [
      'entity' => $entity,
    ],
  ];
  $title = $this->tokenService
    ->replace($settings['forward_interface_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['forward_link_icon'];
  $link_style = $settings['forward_link_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' => $this->tokenService
      ->replace($settings['forward_link_title'], $token, [
      'langcode' => $langcode,
    ]),
    'class' => [
      'forward-page',
    ],
  ];
  if ($settings['forward_link_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 [
    'title' => $title,
    'url' => $url,
    'attributes' => $attributes,
  ];
}