annotate core/modules/help/src/Plugin/Block/HelpBlock.php @ 19:fa3358dc1485 tip

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