diff --git a/lib/Drupal/views/Tests/ModuleTest.php b/lib/Drupal/views/Tests/ModuleTest.php index ede122e01ed..9998cbde239 100644 --- a/lib/Drupal/views/Tests/ModuleTest.php +++ b/lib/Drupal/views/Tests/ModuleTest.php @@ -140,6 +140,96 @@ class ModuleTest extends ViewTestBase { $this->assertEqual('Drupal\\views\\Plugin\\views\\filter\\String', get_class($handler)); } + /** + * Tests the load wrapper/helper functions. + */ + public function testLoadFunctions() { + $controller = entity_get_controller('view'); + + // Test views_view_is_enabled/disabled. + $load = $controller->load(array('archive')); + $archive = reset($load); + $this->assertTrue(views_view_is_disabled($archive), 'views_view_is_disabled works as expected.'); + // Enable the view and check this. + $archive->enable(); + $this->assertTrue(views_view_is_enabled($archive), ' views_view_is_enabled works as expected.'); + + // We can store this now, as we have enabled/disabled above. + $all_views = $controller->load(); + + // Test views_get_all_views(). + $this->assertIdentical(array_keys($all_views), array_keys(views_get_all_views()), 'views_get_all_views works as expected.'); + + // Test views_get_enabled_views(). + $expected_enabled = array_filter($all_views, function($view) { + return views_view_is_enabled($view); + }); + $this->assertIdentical(array_keys($expected_enabled), array_keys(views_get_enabled_views()), 'Expected enabled views returned.'); + + // Test views_get_disabled_views(). + $expected_disabled = array_filter($all_views, function($view) { + return views_view_is_disabled($view); + }); + $this->assertIdentical(array_keys($expected_disabled), array_keys(views_get_disabled_views()), 'Expected disabled views returned.'); + + // Test views_get_views_as_options(). + // Test the $views_only parameter. + $this->assertIdentical(array_keys($all_views), array_keys(views_get_views_as_options(TRUE)), 'Expected option keys for all views were returned.'); + $expected_options = array(); + foreach ($all_views as $id => $view) { + $expected_options[$id] = $view->getHumanName(); + } + $this->assertIdentical($expected_options, views_get_views_as_options(TRUE), 'Expected options array was returned.'); + + // Test the default. + $this->assertIdentical($this->formatViewOptions($all_views), views_get_views_as_options(), 'Expected options array for all views was returned.'); + // Test enabled views. + $this->assertIdentical($this->formatViewOptions($expected_enabled), views_get_views_as_options(FALSE, 'enabled'), 'Expected enabled options array was returned.'); + // Test disabled views. + $this->assertIdentical($this->formatViewOptions($expected_disabled), views_get_views_as_options(FALSE, 'disabled'), 'Expected disabled options array was returned.'); + + // Test the sort parameter. + $all_views_sorted = $all_views; + ksort($all_views_sorted); + $this->assertIdentical(array_keys($all_views_sorted), array_keys(views_get_views_as_options(TRUE, 'all', NULL, FALSE, TRUE)), 'All view id keys returned in expected sort order'); + + // Test $exclude_view parameter. + $this->assertFalse(array_key_exists('archive', views_get_views_as_options(TRUE, 'all', 'archive')), 'View excluded from options based on name'); + $this->assertFalse(array_key_exists('archive:default', views_get_views_as_options(FALSE, 'all', 'archive:default')), 'View display excluded from options based on name'); + $this->assertFalse(array_key_exists('archive', views_get_views_as_options(TRUE, 'all', $archive->getExecutable())), 'View excluded from options based on object'); + + // Test the $opt_group parameter. + $expected_opt_groups = array(); + foreach ($all_views as $id => $view) { + foreach ($view->display as $display_id => $display) { + $expected_opt_groups[$view->id()][$view->id() . ':' . $display['id']] = t('@view : @display', array('@view' => $view->id(), '@display' => $display['id'])); + } + } + $this->assertIdentical($expected_opt_groups, views_get_views_as_options(FALSE, 'all', NULL, TRUE), 'Expected option array for an option group returned.'); + } + + /** + * Helper to return an expected views option array. + * + * @param array $views + * An array of Drupal\views\ViewStorage objects to create an options array + * for. + * + * @return array + * A formatted options array that matches the expected output. + */ + protected function formatViewOptions(array $views = array()) { + $expected_options = array(); + foreach ($views as $id => $view) { + foreach ($view->display as $display_id => $display) { + $expected_options[$view->id() . ':' . $display['id']] = t('View: @view - Display: @display', + array('@view' => $view->name, '@display' => $display['id'])); + } + } + + return $expected_options; + } + /** * Ensure that a certain handler is a instance of a certain table/field. */ diff --git a/views.module b/views.module index 5af807fb25c..fe78d5a9a8e 100644 --- a/views.module +++ b/views.module @@ -1648,28 +1648,31 @@ function views_get_views_as_options($views_only = FALSE, $filter = 'all', $exclu $exclude_view_display = ''; } elseif (is_object($exclude_view)) { - $exclude_view_name = $exclude_view->storage->name; + $exclude_view_name = $exclude_view->storage->id(); $exclude_view_display = $exclude_view->current_display; } else { - list($exclude_view_name, $exclude_view_display) = explode(':', $exclude_view); + // Append a ':' to the $exclude_view string so we always have more than one + // item to explode. + list($exclude_view_name, $exclude_view_display) = explode(':', "$exclude_view:"); } $options = array(); foreach ($views as $view) { + $id = $view->id(); // Return only views. - if ($views_only && $view->storage->name != $exclude_view_name) { - $options[$view->storage->name] = $view->storage->getHumanName(); + if ($views_only && $id != $exclude_view_name) { + $options[$id] = $view->getHumanName(); } // Return views with display ids. else { foreach ($view->display as $display_id => $display) { - if (!($view->storage->name == $exclude_view_name && $display_id == $exclude_view_display)) { + if (!($id == $exclude_view_name && $display_id == $exclude_view_display)) { if ($optgroup) { - $options[$view->storage->name][$view->storage->name . ':' . $display['id']] = t('@view : @display', array('@view' => $view->storage->name, '@display' => $display['id'])); + $options[$id][$id . ':' . $display['id']] = t('@view : @display', array('@view' => $id, '@display' => $display['id'])); } else { - $options[$view->storage->name . ':' . $display['id']] = t('View: @view - Display: @display', array('@view' => $view->storage->name, '@display' => $display['id'])); + $options[$id . ':' . $display['id']] = t('View: @view - Display: @display', array('@view' => $id, '@display' => $display['id'])); } } }