From 53e5a482ef698ae78873ea1188708c9a3c4ea0e4 Mon Sep 17 00:00:00 2001 From: webchick Date: Wed, 28 Nov 2012 22:20:24 -0800 Subject: [PATCH] Issue #1783196 by dawehner, damiankloip, tim.plunkett: Get the views plugin manager from the DIC when possible. --- core/modules/comment/comment.views.inc | 1 + core/modules/file/file.views.inc | 1 + core/modules/node/node.views.inc | 3 + core/modules/taxonomy/taxonomy.views.inc | 2 + core/modules/user/user.views.inc | 1 + .../Drupal/views/Plugin/Core/Entity/View.php | 2 +- .../Plugin/Type/DefaultWizardDeriver.php | 55 +++++++++++ .../views/Plugin/Type/WizardManager.php | 4 +- .../views/argument/ArgumentPluginBase.php | 8 +- .../views/display/DisplayPluginBase.php | 3 +- .../Plugin/views/display/PathPluginBase.php | 2 +- .../views/Plugin/views/wizard/Standard.php | 20 ++++ .../Plugin/views/wizard/WizardPluginBase.php | 8 +- .../Drupal/views/Tests/Plugin/FilterTest.php | 2 +- .../Drupal/views/Tests/PluginInstanceTest.php | 6 +- .../views/lib/Drupal/views/ViewExecutable.php | 9 +- core/modules/views/views.module | 92 +++++++++++++------ core/modules/views/views_ui/admin.inc | 39 -------- .../Drupal/views_ui/ViewAddFormController.php | 12 ++- core/modules/views/views_ui/views_ui.module | 73 --------------- 20 files changed, 175 insertions(+), 168 deletions(-) create mode 100644 core/modules/views/lib/Drupal/views/Plugin/Type/DefaultWizardDeriver.php create mode 100644 core/modules/views/lib/Drupal/views/Plugin/views/wizard/Standard.php diff --git a/core/modules/comment/comment.views.inc b/core/modules/comment/comment.views.inc index 79c3bc32479..e5348549c1b 100644 --- a/core/modules/comment/comment.views.inc +++ b/core/modules/comment/comment.views.inc @@ -22,6 +22,7 @@ function comment_views_data() { 'access query tag' => 'comment_access', ); $data['comment']['table']['entity type'] = 'comment'; + $data['comment']['table']['wizard_id'] = 'comment'; // Fields diff --git a/core/modules/file/file.views.inc b/core/modules/file/file.views.inc index f080aa15b3a..7774c159edb 100644 --- a/core/modules/file/file.views.inc +++ b/core/modules/file/file.views.inc @@ -27,6 +27,7 @@ function file_views_data() { ), ); $data['file_managed']['table']['entity type'] = 'file'; + $data['file_managed']['table']['wizard_id'] = 'file_managed'; // fid $data['file_managed']['fid'] = array( diff --git a/core/modules/node/node.views.inc b/core/modules/node/node.views.inc index 3a396bbb861..a67b870e2ac 100644 --- a/core/modules/node/node.views.inc +++ b/core/modules/node/node.views.inc @@ -30,6 +30,7 @@ function node_views_data() { ), ); $data['node']['table']['entity type'] = 'node'; + $data['node']['table']['wizard_id'] = 'node'; // node table -- fields @@ -422,6 +423,8 @@ function node_views_data() { // have a group defined will go into this field by default. $data['node_revision']['table']['entity type'] = 'node'; $data['node_revision']['table']['group'] = t('Content revision'); + $data['node_revision']['table']['wizard_id'] = 'node_revision'; + // Advertise this table as a possible base table $data['node_revision']['table']['base'] = array( diff --git a/core/modules/taxonomy/taxonomy.views.inc b/core/modules/taxonomy/taxonomy.views.inc index 0bcb6e5467a..c44037d8099 100644 --- a/core/modules/taxonomy/taxonomy.views.inc +++ b/core/modules/taxonomy/taxonomy.views.inc @@ -105,6 +105,8 @@ function taxonomy_views_data() { 'access query tag' => 'term_access', ); $data['taxonomy_term_data']['table']['entity type'] = 'taxonomy_term'; + $data['taxonomy_term_data']['table']['wizard_id'] = 'taxonomy_term'; + // The term data table $data['taxonomy_term_data']['table']['join'] = array( diff --git a/core/modules/user/user.views.inc b/core/modules/user/user.views.inc index 52e34022cd0..48b61389ef9 100644 --- a/core/modules/user/user.views.inc +++ b/core/modules/user/user.views.inc @@ -24,6 +24,7 @@ function user_views_data() { 'access query tag' => 'user_access', ); $data['users']['table']['entity type'] = 'user'; + $data['users']['table']['wizard_id'] = 'user'; // uid $data['users']['uid'] = array( diff --git a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php index 29be1f6c4cf..f31dcae7bce 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php +++ b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php @@ -224,7 +224,7 @@ class View extends ConfigEntityBase implements ViewStorageInterface { return FALSE; } - $plugin = views_get_plugin_definition('display', $plugin_id); + $plugin = drupal_container()->get('plugin.manager.views.display')->getDefinition($plugin_id); if (empty($plugin)) { $plugin['title'] = t('Broken'); } diff --git a/core/modules/views/lib/Drupal/views/Plugin/Type/DefaultWizardDeriver.php b/core/modules/views/lib/Drupal/views/Plugin/Type/DefaultWizardDeriver.php new file mode 100644 index 00000000000..864dab11ca2 --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Plugin/Type/DefaultWizardDeriver.php @@ -0,0 +1,55 @@ +derivatives) && !empty($this->derivatives[$derivative_id])) { + return $this->derivatives[$derivative_id]; + } + $this->getDerivativeDefinitions($base_plugin_definition); + return $this->derivatives[$derivative_id]; + } + + /** + * Implements Drupal\Component\Plugin\Derivative\DerivativeInterface::getDerivativeDefinitions(). + */ + public function getDerivativeDefinitions(array $base_plugin_definition) { + $base_tables = array_keys(views_fetch_base_tables()); + $this->derivatives = array(); + foreach ($base_tables as $table) { + $views_info = views_fetch_data($table); + if (empty($views_info['table']['wizard_id'])) { + $this->derivatives[$table] = array( + 'id' => 'standard', + 'base_table' => $table, + 'title' => $views_info['table']['base']['title'], + 'class' => 'Drupal\views\Plugin\views\wizard\Standard' + ); + } + } + return $this->derivatives; + + } + +} diff --git a/core/modules/views/lib/Drupal/views/Plugin/Type/WizardManager.php b/core/modules/views/lib/Drupal/views/Plugin/Type/WizardManager.php index 8a0aed597d9..4d9ae008c37 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/Type/WizardManager.php +++ b/core/modules/views/lib/Drupal/views/Plugin/Type/WizardManager.php @@ -8,8 +8,9 @@ namespace Drupal\views\Plugin\Type; use Drupal\Component\Plugin\PluginManagerBase; -use Drupal\Component\Plugin\Factory\DefaultFactory; +use Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator; use Drupal\Component\Plugin\Discovery\ProcessDecorator; +use Drupal\Component\Plugin\Factory\DefaultFactory; use Drupal\Core\Plugin\Discovery\AlterDecorator; use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery; use Drupal\Core\Plugin\Discovery\CacheDecorator; @@ -23,6 +24,7 @@ class WizardManager extends PluginManagerBase { $this->discovery = new AnnotatedClassDiscovery('views', 'wizard'); $this->discovery = new AlterDecorator($this->discovery, 'views_plugins_wizard'); $this->discovery = new ProcessDecorator($this->discovery, array($this, 'processDefinition')); + $this->discovery = new DerivativeDiscoveryDecorator($this->discovery); $this->discovery = new CacheDecorator($this->discovery, 'views:wizard', 'views_info'); $this->factory = new DefaultFactory($this); $this->defaults = array( diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/argument/ArgumentPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/argument/ArgumentPluginBase.php index 04715fbd00b..aaab76ab1f6 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/argument/ArgumentPluginBase.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/argument/ArgumentPluginBase.php @@ -301,7 +301,7 @@ abstract class ArgumentPluginBase extends HandlerBase { ), ); - $plugins = views_get_plugin_definitions('argument_validator'); + $plugins = drupal_container()->get('plugin.manager.views.argument_validator')->getDefinitions(); foreach ($plugins as $id => $info) { if (!empty($info['no_ui'])) { continue; @@ -496,7 +496,7 @@ abstract class ArgumentPluginBase extends HandlerBase { * default action is set to provide default argument. */ function default_argument_form(&$form, &$form_state) { - $plugins = views_get_plugin_definitions('argument_default'); + $plugins = drupal_container()->get('plugin.manager.views.argument_default')->getDefinitions(); $options = array(); $form['default_argument_skip_url'] = array( @@ -560,7 +560,7 @@ abstract class ArgumentPluginBase extends HandlerBase { * default action is set to display one. */ function default_summary_form(&$form, &$form_state) { - $style_plugins = views_get_plugin_definitions('style'); + $style_plugins = drupal_container()->get('plugin.manager.views.style')->getDefinitions(); $summary_plugins = array(); $format_options = array(); foreach ($style_plugins as $key => $plugin) { @@ -1053,7 +1053,7 @@ abstract class ArgumentPluginBase extends HandlerBase { $options = $this->options[$options_name]; } - $plugin = views_get_plugin($type, $name); + $plugin = drupal_container()->get("plugin.manager.views.$type")->createInstance($name); if ($plugin) { // Style plugins expects different parameters as argument related plugins. if ($type == 'style') { diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php index c2721807656..b87a0a4a299 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php @@ -105,8 +105,9 @@ abstract class DisplayPluginBase extends PluginBase { $this->extender = array(); $extenders = views_get_enabled_display_extenders(); if (!empty($extenders)) { + $manager = drupal_container()->get('plugin.manager.views.display_extender'); foreach ($extenders as $extender) { - $plugin = views_get_plugin('display_extender', $extender); + $plugin = $manager->createInstance($extender); if ($plugin) { $plugin->init($this->view, $this); $this->extender[$extender] = $plugin; diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php index 7e7ccad9764..5692b7ef9f3 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php @@ -61,7 +61,7 @@ abstract class PathPluginBase extends DisplayPluginBase { $access_plugin = $this->getPlugin('access'); if (!isset($access_plugin)) { - $access_plugin = views_get_plugin('access', 'none'); + $access_plugin = drupal_container()->get("plugin.manager.views.access")->createInstance('none'); } // Get access callback might return an array of the callback + the dynamic arguments. diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/wizard/Standard.php b/core/modules/views/lib/Drupal/views/Plugin/views/wizard/Standard.php new file mode 100644 index 00000000000..448382ad19b --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Plugin/views/wizard/Standard.php @@ -0,0 +1,20 @@ +get("plugin.manager.views.style")->createInstance($style); if (isset($style_plugin) && $style_plugin->usesRowPlugin()) { $options = $this->row_style_options(); $style_form['row_plugin'] = array( @@ -690,7 +688,7 @@ abstract class WizardPluginBase extends PluginBase implements WizardInterface { protected function alter_display_options(&$display_options, $form, $form_state) { foreach ($display_options as $display_type => $options) { // Allow style plugins to hook in and provide some settings. - $style_plugin = views_get_plugin('style', $options['style']['type']); + $style_plugin = drupal_container()->get("plugin.manager.views.style")->createInstance($options['style']['type']); $style_plugin->wizard_submit($form, $form_state, $this, $display_options, $display_type); } } @@ -840,7 +838,7 @@ abstract class WizardPluginBase extends PluginBase implements WizardInterface { $table_data = views_fetch_data($table); // If the 'in' operator is being used, map the values to an array. $handler = $table_data[$bundle_key]['filter']['id']; - $handler_definition = views_get_plugin_definition('filter', $handler); + $handler_definition = drupal_container()->get('plugin.manager.views.filter')->getDefinition($handler); if ($handler == 'in_operator' || is_subclass_of($handler_definition['class'], 'Drupal\\views\\Plugin\\views\\filter\\InOperator')) { $value = drupal_map_assoc(array($form_state['values']['show']['type'])); } diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/FilterTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/FilterTest.php index ad6ee1d0e8f..82bb4a6b3d8 100644 --- a/core/modules/views/lib/Drupal/views/Tests/Plugin/FilterTest.php +++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/FilterTest.php @@ -52,7 +52,7 @@ class FilterTest extends PluginTestBase { */ public function testFilterQuery() { // Check that we can find the test filter plugin. - $plugin = views_get_plugin('filter', 'test_filter'); + $plugin = drupal_container()->get("plugin.manager.views.filter")->createInstance('test_filter'); $this->assertTrue($plugin instanceof FilterPlugin, 'Test filter plugin found.'); $view = views_get_view('test_filter'); diff --git a/core/modules/views/lib/Drupal/views/Tests/PluginInstanceTest.php b/core/modules/views/lib/Drupal/views/Tests/PluginInstanceTest.php index 5880136b8f2..7840c2788d8 100644 --- a/core/modules/views/lib/Drupal/views/Tests/PluginInstanceTest.php +++ b/core/modules/views/lib/Drupal/views/Tests/PluginInstanceTest.php @@ -88,7 +88,7 @@ class PluginInstanceTest extends ViewTestBase { foreach ($this->definitions as $type => $plugins) { // Get a plugin manager for this type. $manager = $container->get("plugin.manager.views.$type"); - foreach ($plugins as $definition) { + foreach ($plugins as $id => $definition) { // Get a reflection class for this plugin. // We only want to test true plugins, i.e. They extend PluginBase. $reflection = new \ReflectionClass($definition['class']); @@ -96,8 +96,8 @@ class PluginInstanceTest extends ViewTestBase { // Create a plugin instance and check what it is. This is not just // good to check they can be created but for throwing any notices for // method signatures etc... too. - $instance = $manager->createInstance($definition['id']); - $this->assertTrue($instance instanceof $definition['class'], format_string('Instance of @type:@id created', array('@type' => $type, '@id' => $definition['id']))); + $instance = $manager->createInstance($id); + $this->assertTrue($instance instanceof $definition['class'], format_string('Instance of @type:@id created', array('@type' => $type, '@id' => $id))); } } } diff --git a/core/modules/views/lib/Drupal/views/ViewExecutable.php b/core/modules/views/lib/Drupal/views/ViewExecutable.php index 639cd92bbd0..95403e61cb2 100644 --- a/core/modules/views/lib/Drupal/views/ViewExecutable.php +++ b/core/modules/views/lib/Drupal/views/ViewExecutable.php @@ -577,7 +577,7 @@ class ViewExecutable { // Instantiate all displays foreach ($this->storage->get('display') as $id => $display) { - $this->displayHandlers[$id] = views_get_plugin('display', $display['display_plugin']); + $this->displayHandlers[$id] = drupal_container()->get("plugin.manager.views.display")->createInstance($display['display_plugin']); if (!empty($this->displayHandlers[$id])) { // Initialize the new display handler with data. // @todo Refactor display to not need the handler data by reference. @@ -688,7 +688,7 @@ class ViewExecutable { $this->style_options = $style['options']; } - $this->style_plugin = views_get_plugin('style', $this->plugin_name); + $this->style_plugin = drupal_container()->get("plugin.manager.views.style")->createInstance($this->plugin_name); if (empty($this->style_plugin)) { return FALSE; @@ -2207,11 +2207,12 @@ class ViewExecutable { public function &newDisplay($id) { // Create a handler. $display = $this->storage->get('display'); - $this->displayHandlers[$id] = views_get_plugin('display', $display[$id]['display_plugin']); + $manager = drupal_container()->get("plugin.manager.views.display"); + $this->displayHandlers[$id] = $manager->createInstance($display[$id]['display_plugin']); if (empty($this->displayHandlers[$id])) { // provide a 'default' handler as an emergency. This won't work well but // it will keep things from crashing. - $this->displayHandlers[$id] = views_get_plugin('display', 'default'); + $this->displayHandlers[$id] = $manager->createInstance('default'); } if (!empty($this->displayHandlers[$id])) { diff --git a/core/modules/views/views.module b/core/modules/views/views.module index 1c6c35f7708..ac75dd7a0d8 100644 --- a/core/modules/views/views.module +++ b/core/modules/views/views.module @@ -840,7 +840,8 @@ function views_add_contextual_links(&$render_element, $location, ViewExecutable // Also do not do anything if the display plugin has not defined any // contextual links that are intended to be displayed in the requested // location. - $plugin = views_get_plugin_definition('display', $view->displayHandlers[$display_id]->display['display_plugin']); + $plugin_id = $view->displayHandlers[$display_id]->getPluginId(); + $plugin = drupal_container()->get('plugin.manager.views.display')->getDefinition($plugin_id); // If contextual_links_locations are not set, provide a sane default. (To // avoid displaying any contextual links at all, a display plugin can still // set 'contextual_links_locations' to, e.g., {""}.) @@ -1230,6 +1231,59 @@ function views_fetch_data($table = NULL, $reset = FALSE) { return _views_fetch_data($table, $reset); } +/** + * Fetch a list of all base tables available + * + * @return array + * A keyed array of in the form of 'base_table' => 'Description'. + */ +function views_fetch_base_tables() { + static $base_tables = array(); + if (empty($base_tables)) { + $tables = array(); + $data = views_fetch_data(); + foreach ($data as $table => $info) { + if (!empty($info['table']['base'])) { + $tables[$table] = array( + 'title' => $info['table']['base']['title'], + 'description' => !empty($info['table']['base']['help']) ? $info['table']['base']['help'] : '', + 'weight' => !empty($info['table']['base']['weight']) ? $info['table']['base']['weight'] : 0, + ); + } + } + uasort($tables, '_views_weight_sort'); + $base_tables = $tables; + } + + return $base_tables; +} + +/** + * Sorts a structured array by the 'weight' and then by 'title' element. + * + * Callback for uasort() in views_fetch_base_tables(). + * + * @param array $a + * First item for comparison. The compared items should be associative arrays + * that include a 'weight' and title element. + * @param array $b + * Second item for comparison. + * + * @return int + * -1 if the first item comes first, 1 if second and 0 if they have the same + * order. + */ +function _views_weight_sort($a, $b) { + if ($a['weight'] != $b['weight']) { + return $a['weight'] < $b['weight'] ? -1 : 1; + } + if ($a['title'] != $b['title']) { + return $a['title'] < $b['title'] ? -1 : 1; + } + + return 0; +} + /** * Fetch a list of all base tables available * @@ -1245,7 +1299,7 @@ function views_fetch_data($table = NULL, $reset = FALSE) { * A keyed array of in the form of 'base_table' => 'Description'. */ function views_fetch_plugin_names($type, $key = NULL, $base = array()) { - $definitions = views_get_plugin_definitions($type); + $definitions = drupal_container()->get("plugin.manager.views.$type")->getDefinitions(); $plugins = array(); foreach ($definitions as $id => $plugin) { @@ -1291,39 +1345,17 @@ function views_get_plugin($type, $plugin_id) { /** * Gets all the views plugin definitions. * - * @param string|false $type - * Either the plugin type, or FALSE to load all definitions. - * * @return array - * An array of plugin definitions for a single type, or an associative array - * of plugin definitions keyed by plugin type. + * An array of plugin definitions for all types. */ -function views_get_plugin_definitions($type = FALSE) { - $plugins = array(); - $plugin_types = $type ? array($type) : ViewExecutable::getPluginTypes(); +function views_get_plugin_definitions() { $container = drupal_container(); - foreach ($plugin_types as $plugin_type) { + $plugins = array(); + foreach (ViewExecutable::getPluginTypes() as $plugin_type) { $plugins[$plugin_type] = $container->get("plugin.manager.views.$plugin_type")->getDefinitions(); } - if ($type) { - return $plugins[$type]; - } - return $plugins; -} -/** - * Gets the plugin definition from a plugin type with a specific ID. - * - * @param string $type - * The plugin type, e.g., 'access' or 'display'. - * @param string $plugin_id - * The name of the plugin, e.g., 'standard'. - * - * @return array - * A plugin definition. - */ -function views_get_plugin_definition($type, $plugin_id) { - return drupal_container()->get("plugin.manager.views.$type")->getDefinition($plugin_id); + return $plugins; } /** @@ -1389,7 +1421,7 @@ function views_get_applicable_views($type) { // Loop on array keys because something seems to muck with $view->display // a bit in PHP4. foreach (array_keys($display) as $id) { - $plugin = views_get_plugin_definition('display', $display[$id]['display_plugin']); + $plugin = drupal_container()->get('plugin.manager.views.display')->getDefinition($display[$id]['display_plugin']); if (!empty($plugin[$type])) { // This view uses_hook_menu. Clone it so that different handlers // don't trip over each other, and add it to the list. diff --git a/core/modules/views/views_ui/admin.inc b/core/modules/views/views_ui/admin.inc index 50bdfedb59f..7f08067a6e3 100644 --- a/core/modules/views/views_ui/admin.inc +++ b/core/modules/views/views_ui/admin.inc @@ -2113,45 +2113,6 @@ function views_ui_autocomplete_tag($string = '') { return new JsonResponse($matches); } -function _views_weight_sort($a, $b) { - if ($a['weight'] != $b['weight']) { - return $a['weight'] < $b['weight'] ? -1 : 1; - } - if ($a['title'] != $b['title']) { - return $a['title'] < $b['title'] ? -1 : 1; - } - - return 0; -} - -/** - * Fetch a list of all base tables available - * - * @return - * A keyed array of in the form of 'base_table' => 'Description'. - */ -function views_fetch_base_tables() { - static $base_tables = array(); - if (empty($base_tables)) { - $weights = array(); - $tables = array(); - $data = views_fetch_data(); - foreach ($data as $table => $info) { - if (!empty($info['table']['base'])) { - $tables[$table] = array( - 'title' => $info['table']['base']['title'], - 'description' => !empty($info['table']['base']['help']) ? $info['table']['base']['help'] : '', - 'weight' => !empty($info['table']['base']['weight']) ? $info['table']['base']['weight'] : 0, - ); - } - } - uasort($tables, '_views_weight_sort'); - $base_tables = $tables; - } - - return $base_tables; -} - function _views_sort_types($a, $b) { $a_group = drupal_strtolower($a['group']); $b_group = drupal_strtolower($b['group']); diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php index a20606dd159..e5c0e7c6617 100644 --- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php +++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php @@ -87,7 +87,7 @@ class ViewAddFormController extends ViewFormControllerBase { // Create the "Show" dropdown, which allows the base table of the view to be // selected. - $wizard_plugins = views_ui_get_wizards(); + $wizard_plugins = drupal_container()->get("plugin.manager.views.wizard")->getDefinitions(); $options = array(); foreach ($wizard_plugins as $key => $wizard) { $options[$key] = $wizard['title']; @@ -106,7 +106,7 @@ class ViewAddFormController extends ViewFormControllerBase { // Build the rest of the form based on the currently selected wizard plugin. $wizard_key = $show_form['wizard_key']['#default_value']; - $wizard_instance = views_get_plugin('wizard', $wizard_key); + $wizard_instance = drupal_container()->get("plugin.manager.views.wizard")->createInstance($wizard_key); $form = $wizard_instance->build_form($form, $form_state); return $form; @@ -142,10 +142,12 @@ class ViewAddFormController extends ViewFormControllerBase { * Overrides Drupal\Core\Entity\EntityFormController::validate(). */ public function validate(array $form, array &$form_state) { - $wizard = views_ui_get_wizard($form_state['values']['show']['wizard_key']); - $form_state['wizard'] = $wizard; - $form_state['wizard_instance'] = views_get_plugin('wizard', $wizard['id']); + $wizard_type = $form_state['values']['show']['wizard_key']; + $wizard_instance = drupal_container()->get('plugin.manager.views.wizard')->createInstance($wizard_type); + $form_state['wizard'] = $wizard_instance->getDefinition(); + $form_state['wizard_instance'] = $wizard_instance; $errors = $form_state['wizard_instance']->validateView($form, $form_state); + foreach ($errors as $name => $message) { form_set_error($name, $message); } diff --git a/core/modules/views/views_ui/views_ui.module b/core/modules/views/views_ui/views_ui.module index 0d007521a67..190988fa5a2 100644 --- a/core/modules/views/views_ui/views_ui.module +++ b/core/modules/views/views_ui/views_ui.module @@ -470,79 +470,6 @@ function views_ui_view_preview_section_rows_links(ViewUI $view) { return $links; } -/** - * Fetch metadata on a specific views ui wizard plugin. - * - * @param $wizard_type - * Name of a wizard, or name of a base table. - * - * @return - * An array with information about the requested wizard type. - */ -function views_ui_get_wizard($wizard_type) { - $wizard = views_get_plugin_definition('wizard', $wizard_type); - // @todo - handle this via an alter hook instead. - if (!$wizard) { - // Must be a base table using the default wizard plugin. - $base_tables = views_fetch_base_tables(); - if (!empty($base_tables[$wizard_type])) { - $wizard = views_ui_views_wizard_defaults(); - $wizard['base_table'] = $wizard_type; - $wizard['title'] = $base_tables[$wizard_type]['title']; - } - } - return $wizard; -} - -/** - * Fetch metadata for all content_type plugins. - * - * @return - * An array of arrays with information about all available views wizards. - */ -function views_ui_get_wizards() { - $wizard_plugins = views_get_plugin_definitions('wizard'); - $wizard_tables = array(); - foreach ($wizard_plugins as $name => $info) { - $wizard_tables[$info['base_table']] = TRUE; - } - $base_tables = views_fetch_base_tables(); - $default_wizard = views_ui_views_wizard_defaults(); - // Find base tables with no wizard. - // @todo - handle this via an alter hook for plugins? - foreach ($base_tables as $table => $info) { - if (!isset($wizard_tables[$table])) { - $wizard = $default_wizard; - $wizard['title'] = $info['title']; - $wizard['base_table'] = $table; - $wizard_plugins[$table] = $wizard; - } - } - return $wizard_plugins; -} - -/** - * Helper function to define the default values for a Views wizard plugin. - * - * @return - * An array of defaults for a views wizard. - */ -function views_ui_views_wizard_defaults() { - return array( - // The children may, for example, be a different variant for each node type. - 'get children' => NULL, - 'get child' => NULL, - // title and base table must be populated. They are empty here just - // so they are documented. - 'title' => '', - 'base_table' => NULL, - ); -} - -function views_ui_get_form_wizard_instance($wizard) { - return views_get_plugin('wizard', $wizard['name']); -} - /** * Implements hook_views_plugins_display_alter(). */