View source
<?php
namespace Drupal\login_popup\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Form\FormBuilderInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Render\Renderer;
use Drupal\Core\Session\AccountProxy;
use Drupal\Core\Url;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class LoginFormPopup extends BlockBase implements ContainerFactoryPluginInterface {
protected $formBuilder;
protected $currentUser;
protected $renderer;
protected $requestStack;
public function __construct(array $configuration, $plugin_id, $plugin_definition, FormBuilderInterface $form_builder, AccountProxy $currentUser, Renderer $renderer, RequestStack $request_stack) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->formBuilder = $form_builder;
$this->currentUser = $currentUser;
$this->renderer = $renderer;
$this->requestStack = $request_stack;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('form_builder'), $container
->get('current_user'), $container
->get('renderer'), $container
->get('request_stack'));
}
public function defaultConfiguration() {
return [
'show_logout_link' => FALSE,
];
}
public function blockForm($form, FormStateInterface $form_state) {
$form = parent::blockForm($form, $form_state);
$config = $this
->getConfiguration();
$form['show_logout_link'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Show Logout Link'),
'#default_value' => !empty($config['show_logout_link']) ? $config['show_logout_link'] : FALSE,
];
return $form;
}
public function blockSubmit($form, FormStateInterface $form_state) {
$this
->setConfigurationValue('show_logout_link', $form_state
->getValue('show_logout_link'));
}
public function build() {
$base_url = $this->requestStack
->getCurrentRequest()
->getSchemeAndHttpHost();
$url = Url::fromRoute('user.login');
$config = $this
->getConfiguration();
$link_options = [
'attributes' => [
'class' => [
'use-ajax',
'login-popup-form',
],
'data-dialog-type' => 'modal',
],
];
$url
->setOptions($link_options);
$link = Link::fromTextAndUrl($this
->t('Log in'), $url)
->toString();
$build = [];
if ($this->currentUser
->isAnonymous()) {
$build['login_popup_block']['#markup'] = '<div class="Login-popup-link">' . $link . '</div>';
}
else {
if ($config['show_logout_link']) {
$build['login_register_popup_block']['#markup'] = '<div class="Login-Register-popup-link"><span><a href=" ' . $base_url . '/user/logout">Log out</a></div>';
}
}
$build['login_popup_block']['#attached']['library'][] = 'core/drupal.dialog.ajax';
return $build;
}
}