diff --git a/core/modules/views/lib/Drupal/views/Plugin/ViewsHandlerManager.php b/core/modules/views/lib/Drupal/views/Plugin/ViewsHandlerManager.php index 0a1fb76..23362f0 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/ViewsHandlerManager.php +++ b/core/modules/views/lib/Drupal/views/Plugin/ViewsHandlerManager.php @@ -9,9 +9,11 @@ use Drupal\Component\Plugin\Exception\PluginException; use Drupal\Component\Plugin\PluginManagerBase; +use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Plugin\Factory\ContainerFactory; use Drupal\Core\Plugin\Discovery\CacheDecorator; use Drupal\views\Plugin\Discovery\ViewsHandlerDiscovery; +use Drupal\views\Plugin\views\HandlerBase; use Drupal\views\ViewsData; /** @@ -36,6 +38,13 @@ class ViewsHandlerManager extends PluginManagerBase { protected $handlerType; /** + * The module handler. + * + * @param \Drupal\Core\Extension\ModuleHandlerInterface + */ + protected $moduleHandler; + + /** * Constructs a ViewsHandlerManager object. * * @param string $handler_type @@ -44,9 +53,11 @@ class ViewsHandlerManager extends PluginManagerBase { * An object that implements \Traversable which contains the root paths * keyed by the corresponding namespace to look for plugin implementations, * @param \Drupal\views\ViewsData $views_data - * The views data cache. + * The views data cache. + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler. */ - public function __construct($handler_type, \Traversable $namespaces, ViewsData $views_data) { + public function __construct($handler_type, \Traversable $namespaces, ViewsData $views_data, ModuleHandlerInterface $module_handler) { $this->discovery = new ViewsHandlerDiscovery($handler_type, $namespaces); $this->discovery = new CacheDecorator($this->discovery, "views:$handler_type", 'views_info'); @@ -54,6 +65,7 @@ public function __construct($handler_type, \Traversable $namespaces, ViewsData $ $this->viewsData = $views_data; $this->handlerType = $handler_type; + $this->moduleHandler = $module_handler; } @@ -121,4 +133,14 @@ public function getHandler($item, $override = NULL) { return $this->createInstance('broken', array('optional' => $optional, 'original_configuration' => $item)); } + public function createInstance($plugin_id, array $configuration = array()) { + $instance = parent::createInstance($plugin_id, $configuration); + if ($instance instanceof HandlerBase) { + $instance->setModuleHandler($this->moduleHandler); + $instance->setViewsData($this->viewsData); + } + return $instance; + } + + } diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php index fbb5c7e..485c677 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php @@ -11,6 +11,7 @@ use Drupal\Component\Utility\Unicode; use Drupal\Component\Utility\Url; use Drupal\Component\Utility\Xss; +use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Render\Element; use Drupal\Core\Session\AccountInterface; use Drupal\views\Plugin\views\display\DisplayPluginBase; @@ -18,6 +19,7 @@ use Drupal\views\ViewExecutable; use Drupal\Core\Database\Database; use Drupal\views\Views; +use Drupal\views\ViewsData; abstract class HandlerBase extends PluginBase { @@ -347,6 +349,16 @@ protected function getModuleHandler() { } /** + * Sets the module handler. + * + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler. + */ + public function setModuleHandler(ModuleHandlerInterface $module_handler) { + $this->moduleHandler = $module_handler; + } + + /** * Provides the handler some groupby. */ public function usesGroupBy() { @@ -697,6 +709,16 @@ protected function getViewsData() { } /** + * Sets the views data service. + * + * @param \Drupal\views\ViewsData $views_data + * The views data. + */ + public function setViewsData(ViewsData $views_data) { + $this->viewsData = $views_data; + } + + /** * Fetches a handler to join one table to a primary table from the data cache. * * @param string $table diff --git a/core/modules/views/views.services.yml b/core/modules/views/views.services.yml index 30aa96a..507788c 100644 --- a/core/modules/views/views.services.yml +++ b/core/modules/views/views.services.yml @@ -4,10 +4,10 @@ services: arguments: [access, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] plugin.manager.views.area: class: Drupal\views\Plugin\ViewsHandlerManager - arguments: [area, '@container.namespaces', '@views.views_data'] + arguments: [area, '@container.namespaces', '@views.views_data', '@module_handler'] plugin.manager.views.argument: class: Drupal\views\Plugin\ViewsHandlerManager - arguments: [argument, '@container.namespaces', '@views.views_data'] + arguments: [argument, '@container.namespaces', '@views.views_data', '@module_handler'] plugin.manager.views.argument_default: class: Drupal\views\Plugin\ViewsPluginManager arguments: [argument_default, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] @@ -28,13 +28,13 @@ services: arguments: [exposed_form, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] plugin.manager.views.field: class: Drupal\views\Plugin\ViewsHandlerManager - arguments: [field, '@container.namespaces', '@views.views_data'] + arguments: [field, '@container.namespaces', '@views.views_data', '@module_handler'] plugin.manager.views.filter: class: Drupal\views\Plugin\ViewsHandlerManager - arguments: [filter, '@container.namespaces', '@views.views_data'] + arguments: [filter, '@container.namespaces', '@views.views_data', '@module_handler'] plugin.manager.views.join: class: Drupal\views\Plugin\ViewsHandlerManager - arguments: [join, '@container.namespaces', '@views.views_data'] + arguments: [join, '@container.namespaces', '@views.views_data', '@module_handler'] plugin.manager.views.pager: class: Drupal\views\Plugin\ViewsPluginManager arguments: [pager, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] @@ -43,13 +43,13 @@ services: arguments: [query, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] plugin.manager.views.relationship: class: Drupal\views\Plugin\ViewsHandlerManager - arguments: [relationship, '@container.namespaces', '@views.views_data'] + arguments: [relationship, '@container.namespaces', '@views.views_data', '@module_handler'] plugin.manager.views.row: class: Drupal\views\Plugin\ViewsPluginManager arguments: [row, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] plugin.manager.views.sort: class: Drupal\views\Plugin\ViewsHandlerManager - arguments: [sort, '@container.namespaces', '@views.views_data'] + arguments: [sort, '@container.namespaces', '@views.views_data', '@module_handler'] plugin.manager.views.style: class: Drupal\views\Plugin\ViewsPluginManager arguments: [style, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler']