LanguageSelectionPageBlock.php in Language Selection Page 8.2
File
src/Plugin/Block/LanguageSelectionPageBlock.php
View source
<?php
declare (strict_types=1);
namespace Drupal\language_selection_page\Plugin\Block;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Executable\ExecutableManagerInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\language_selection_page\Controller\LanguageSelectionPageController;
use Symfony\Component\DependencyInjection\ContainerInterface;
final class LanguageSelectionPageBlock extends BlockBase implements ContainerFactoryPluginInterface {
protected $configFactory;
protected $languageSelectionPageConditionManager;
protected $pageController;
public function __construct(array $configuration, $plugin_id, array $plugin_definition, ExecutableManagerInterface $plugin_manager, ConfigFactoryInterface $config_factory, LanguageSelectionPageController $page_controller) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->languageSelectionPageConditionManager = $plugin_manager;
$this->configFactory = $config_factory;
$this->pageController = $page_controller;
}
public function build() {
$config = $this->configFactory
->get('language_selection_page.negotiation');
$content = NULL;
if ($config
->get('type') === 'block') {
$destination = $this->pageController
->getDestination();
$content = $this->pageController
->getPageContent($destination);
}
return \is_array($content) ? $content : NULL;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('plugin.manager.language_selection_page_condition'), $container
->get('config.factory'), $container
->get('language_selection_page_controller'));
}
protected function blockAccess(AccountInterface $account) {
$config = $this->configFactory
->get('language_selection_page.negotiation');
$manager = $this->languageSelectionPageConditionManager;
$defs = array_filter($manager
->getDefinitions(), static function ($value) {
return isset($value['runInBlock']) && $value['runInBlock'];
});
foreach ($defs as $def) {
$condition_plugin = $manager
->createInstance($def['id'], $config
->get());
if (!$manager
->execute($condition_plugin)) {
return AccessResult::forbidden();
}
}
return AccessResult::allowed();
}
}