annotate core/modules/help/src/Plugin/Block/HelpBlock.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\help\Plugin\Block;
Chris@0 4
Chris@0 5 use Drupal\Core\Block\BlockBase;
Chris@0 6 use Drupal\Core\Cache\Cache;
Chris@0 7 use Drupal\Core\Extension\ModuleHandlerInterface;
Chris@0 8 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
Chris@0 9 use Drupal\Core\Routing\RouteMatchInterface;
Chris@0 10 use Symfony\Component\DependencyInjection\ContainerInterface;
Chris@0 11 use Symfony\Component\HttpFoundation\Request;
Chris@0 12
Chris@0 13 /**
Chris@0 14 * Provides a 'Help' block.
Chris@0 15 *
Chris@0 16 * @Block(
Chris@0 17 * id = "help_block",
Chris@0 18 * admin_label = @Translation("Help")
Chris@0 19 * )
Chris@0 20 */
Chris@0 21 class HelpBlock extends BlockBase implements ContainerFactoryPluginInterface {
Chris@0 22
Chris@0 23 /**
Chris@0 24 * The module handler.
Chris@0 25 *
Chris@0 26 * @var \Drupal\Core\Extension\ModuleHandlerInterface
Chris@0 27 */
Chris@0 28 protected $moduleHandler;
Chris@0 29
Chris@0 30 /**
Chris@0 31 * The current request.
Chris@0 32 *
Chris@0 33 * @var \Symfony\Component\HttpFoundation\Request
Chris@0 34 */
Chris@0 35 protected $request;
Chris@0 36
Chris@0 37 /**
Chris@0 38 * The current route match.
Chris@0 39 *
Chris@0 40 * @var \Drupal\Core\Routing\RouteMatchInterface
Chris@0 41 */
Chris@0 42 protected $routeMatch;
Chris@0 43
Chris@0 44 /**
Chris@0 45 * Creates a HelpBlock instance.
Chris@0 46 *
Chris@0 47 * @param array $configuration
Chris@0 48 * A configuration array containing information about the plugin instance.
Chris@0 49 * @param string $plugin_id
Chris@0 50 * The plugin_id for the plugin instance.
Chris@0 51 * @param mixed $plugin_definition
Chris@0 52 * The plugin implementation definition.
Chris@0 53 * @param \Symfony\Component\HttpFoundation\Request $request
Chris@0 54 * The current request.
Chris@0 55 * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
Chris@0 56 * The module handler.
Chris@0 57 * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
Chris@0 58 * The current route match.
Chris@0 59 */
Chris@0 60 public function __construct(array $configuration, $plugin_id, $plugin_definition, Request $request, ModuleHandlerInterface $module_handler, RouteMatchInterface $route_match) {
Chris@0 61 parent::__construct($configuration, $plugin_id, $plugin_definition);
Chris@0 62
Chris@0 63 $this->request = $request;
Chris@0 64 $this->moduleHandler = $module_handler;
Chris@0 65 $this->routeMatch = $route_match;
Chris@0 66 }
Chris@0 67
Chris@0 68 /**
Chris@0 69 * {@inheritdoc}
Chris@0 70 */
Chris@0 71 public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
Chris@0 72 return new static(
Chris@0 73 $configuration,
Chris@0 74 $plugin_id,
Chris@0 75 $plugin_definition,
Chris@0 76 $container->get('request_stack')->getCurrentRequest(),
Chris@0 77 $container->get('module_handler'),
Chris@0 78 $container->get('current_route_match')
Chris@0 79 );
Chris@0 80 }
Chris@0 81
Chris@0 82 /**
Chris@0 83 * {@inheritdoc}
Chris@0 84 */
Chris@0 85 public function build() {
Chris@0 86 // Do not show on a 403 or 404 page.
Chris@0 87 if ($this->request->attributes->has('exception')) {
Chris@0 88 return [];
Chris@0 89 }
Chris@0 90
Chris@0 91 $implementations = $this->moduleHandler->getImplementations('help');
Chris@0 92 $build = [];
Chris@0 93 $args = [
Chris@0 94 $this->routeMatch->getRouteName(),
Chris@0 95 $this->routeMatch,
Chris@0 96 ];
Chris@0 97 foreach ($implementations as $module) {
Chris@0 98 // Don't add empty strings to $build array.
Chris@0 99 if ($help = $this->moduleHandler->invoke($module, 'help', $args)) {
Chris@0 100 // Convert strings to #markup render arrays so that they will XSS admin
Chris@0 101 // filtered.
Chris@0 102 $build[] = is_array($help) ? $help : ['#markup' => $help];
Chris@0 103 }
Chris@0 104 }
Chris@0 105 return $build;
Chris@0 106 }
Chris@0 107
Chris@0 108 /**
Chris@0 109 * {@inheritdoc}
Chris@0 110 */
Chris@0 111 public function getCacheContexts() {
Chris@0 112 return Cache::mergeContexts(parent::getCacheContexts(), ['route']);
Chris@0 113 }
Chris@0 114
Chris@0 115 }