Drupal → Показать форму входа при попытке анонимного пользователя поставить флаг

22.02.2020

Плагин для модуля Flag, который при попытке анонимного пользователя поставить флаг покажет в диалоге форму входа.

// src/Plugin/ActionLink/AjaxLinkWithAuth.php

namespace Drupal\MODULENAME\Plugin\ActionLink;

use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Url;
use Drupal\flag\FlagInterface;
use Drupal\flag\Plugin\ActionLink\AJAXactionLink;

/**
 * @ActionLinkType(
 *   id = "ajax_link_with_auth",
 *   label = @Translation("AJAX link with authentication"),
 *   description = "An AJAX JavaScript request will be made without reloading the page."
 * )
 */
class AjaxLinkWithAuth extends AJAXactionLink {

  /**
   * {@inheritDoc}
   */
  public function getAsFlagLink(FlagInterface $flag, EntityInterface $entity) {
    if ($this->currentUser->isAuthenticated()) {
      $build = parent::getAsFlagLink($flag, $entity);
    }
    else {
      $build = [
        '#theme' => 'flag',
        '#flag' => $flag,
        '#flaggable' => $entity,
        '#action' => 'flag',
        '#access' => TRUE,
        '#title' => [
          '#markup' => $flag->getShortText('flag'),
        ],
        '#attributes' => [
          'title' => $flag->getLongText('flag'),
          'href' => Url::fromRoute('user.login')->toString(),
          'class' => ['use-ajax'],
          'data-dialog-type' => 'modal',
        ],
        '#attached' => [
          'library' => ['core/drupal.ajax'],
        ],
      ];
    }

    return $build;
  }

}

Созданный плагин нужно будет выбрать в форме редактирования флага.

Написанное актуально для
Flag 4
Похожие записи

Добавить комментарий