Unverified Commit 40d62a67 authored by alexpott's avatar alexpott

Issue #3086794 by andypost, alexpott, jhodgdon, Amber Himes Matz, catch, xjm:...

Issue #3086794 by andypost, alexpott, jhodgdon, Amber Himes Matz, catch, xjm: Search results pages plugins could display results in administrative theme
parent 758adf0e
......@@ -37,4 +37,11 @@ class SearchPlugin extends Plugin {
*/
public $title;
/**
* Whether or not search results should be displayed in admin theme.
*
* @var bool
*/
public $use_admin_theme = FALSE;
}
......@@ -145,4 +145,15 @@ public function searchFormAlter(array &$form, FormStateInterface $form_state);
*/
public function buildSearchUrlQuery(FormStateInterface $form_state);
/**
* Returns whether or not search results should be displayed in admin theme.
*
* @return bool
* TRUE if search results should be displayed in the admin theme, and FALSE
* otherwise.
*
* @see \Drupal\search\Annotation\SearchPlugin::$use_admin_theme
*/
public function usesAdminTheme();
}
......@@ -162,4 +162,11 @@ public function getHelp() {
return $help;
}
/**
* {@inheritdoc}
*/
public function usesAdminTheme() {
return $this->pluginDefinition['use_admin_theme'];
}
}
......@@ -110,6 +110,10 @@ public function routes() {
],
]
);
if ($entity->getPlugin()->usesAdminTheme()) {
$routes["search.view_$entity_id"]->setOption('_admin_route', TRUE);
$routes["search.help_$entity_id"]->setOption('_admin_route', TRUE);
}
}
return $routes;
}
......
......@@ -12,7 +12,8 @@
*
* @SearchPlugin(
* id = "search_extra_type_search",
* title = @Translation("Dummy search type")
* title = @Translation("Dummy search type"),
* use_admin_theme = TRUE,
* )
*/
class SearchExtraTypeSearch extends ConfigurableSearchPluginBase {
......
<?php
namespace Drupal\Tests\search\Functional;
use Drupal\Tests\BrowserTestBase;
/**
* Verify the search results using administration theme for specific plugins.
*
* @see \Drupal\search\Annotation\SearchPlugin::$use_admin_theme
* @see \Drupal\Tests\system\Functional\System\ThemeTest::testAdministrationTheme()
*
* @group search
*/
class SearchAdminThemeTest extends BrowserTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = ['node', 'search', 'search_extra_type', 'user'];
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* The administration theme name.
*
* @var string
*/
protected $adminTheme = 'seven';
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
// Install an administration theme to make sure it used for search results.
\Drupal::service('theme_installer')->install([$this->adminTheme]);
\Drupal::configFactory()
->getEditable('system.theme')
->set('admin', $this->adminTheme)
->save();
// Create searching user.
$user = $this->drupalCreateUser([
'access content',
'search content',
'access user profiles',
'view the administration theme',
]);
// Log in with sufficient privileges.
$this->drupalLogin($user);
}
/**
* Tests that search results could be displayed in administration theme.
*
* @see \Drupal\node\Plugin\Search\NodeSearch
* @see \Drupal\search_extra_type\Plugin\Search\SearchExtraTypeSearch
* @see \Drupal\user\Plugin\Search\UserSearch
*/
public function testSearchUsingAdminTheme() {
/** @var \Drupal\search\SearchPageRepositoryInterface $repository */
$repository = \Drupal::service('search.search_page_repository');
$pages = $repository->getActiveSearchPages();
// Test default configured pages.
$page_ids = [
'node_search' => FALSE,
'dummy_search_type' => TRUE,
'user_search' => FALSE,
];
foreach ($page_ids as $page_id => $use_admin_theme) {
$plugin = $pages[$page_id]->getPlugin();
$path = 'search/' . $pages[$page_id]->getPath();
$this->drupalGet($path);
$session = $this->assertSession();
// Make sure help plugin rendered help link.
// @todo Test label in https://www.drupal.org/node/3086795
$path_help = $path . '/help';
$session->linkByHrefExists($path_help);
$this->assertSame($use_admin_theme, $plugin->usesAdminTheme());
$this->assertAdminTheme($use_admin_theme);
$this->drupalGet($path_help);
$this->assertAdminTheme($use_admin_theme);
}
}
/**
* Asserts whether an administrative theme's used for the loaded page.
*
* @param bool $is_admin
* TRUE to test for administrative theme, FALSE otherwise.
*/
protected function assertAdminTheme($is_admin) {
if ($is_admin) {
$this->assertRaw('core/themes/' . $this->adminTheme);
}
else {
$this->assertNoRaw('core/themes/' . $this->adminTheme);
}
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment