xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

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

// src/Plugin/ActionLink/AjaxLinkWithAuth.php
 
/**
 * @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
Похожие записи

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании