Skip to content
Snippets Groups Projects
Verified Commit cca3f394 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3421002 by sorlov, Ruturaj Chaubey, smustgrave, larowlan: Convert...

Issue #3421002 by sorlov, Ruturaj Chaubey, smustgrave, larowlan: Convert ViewsDisplay plugin discovery to attributes

(cherry picked from commit a52189b3)
parent 498ce9e1
Branches
Tags
34 merge requests!12802Issue #3537193 by opauwlo: Add enable absolute path option for CKEditor5 image uploads,!12745Fixed: Path alias language doesn't changes on changing of node language,!12684Issue #3220784,!12537Add ViewsConfigUpdater deprecation support for default_argument_skip_url,!12523Issue #3493858 by vidorado, xavier.masson, smustgrave: Extend ViewsBlockBase...,!122353526426-warning-for-missing,!12212Issue #3445525 by alexpott, japerry, catch, mglaman, longwave: Add BC layer...,!11958Issue #3490507 by alexpott, smustgrave: Fix bogus mocking in...,!11769Issue #3517987: Add option to contextual filters to encode slashes in query parameter.,!11185Issue #3477324 by andypost, alexpott: Fix usage of str_getcsv() and fgetcsv() for PHP 8.4,!10602Issue #3438769 by vinmayiswamy, antonnavi, michelle, amateescu: Sub workspace does not clear,!10301Issue #3469309 by mstrelan, smustgrave, moshe weitzman: Use one-time login...,!10187Issue #3487488 by dakwamine: ExtensionMimeTypeGuesser::guessMimeType must support file names with "0" (zero) like foo.0.zip,!9944Issue #3483353: Consider making the createCopy config action optionally fail...,!9929Issue #3445469 by pooja_sharma, smustgrave: Add additional test coverage for...,!9787Resolve issue 3479427 - bootstrap barrio issue under Windows,!9742Issue #3463908 by catch, quietone: Split OptionsFieldUiTest into two,!9526Issue #3458177 by mondrake, catch, quietone, godotislate, longwave, larowlan,...,!8738Issue #3424162 by camilledavis, dineshkumarbollu, smustgrave: Claro...,!8704Make greek characters available in ckeditor5,!8597Draft: Issue #3442259 by catch, quietone, dww: Reduce time of Migrate Upgrade tests...,!8533Issue #3446962 by kim.pepper: Remove incorrectly added...,!8517Issue #3443748 by NexusNovaz, smustgrave: Testcase creates false positive,!8325Update file Sort.php,!8095Expose document root on install,!7930Resolve #3427374 "Taxonomytid viewsargumentdefault plugin",!7627Issue #3439440 by nicxvan, Binoli Lalani, longwave: Remove country support from DateFormatter,!7445Issue #3440169: When using drupalGet(), provide an associative array for $headers,!7401#3271894 Fix documented StreamWrapperInterface return types for realpath() and dirname(),!7384Add constraints to system.advisories,!6622Issue #2559833 by piggito, mohit_aghera, larowlan, guptahemant, vakulrai,...,!6502Draft: Resolve #2938524 "Plach testing issue",!38582585169-10.1.x,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key
Showing
with 195 additions and 93 deletions
......@@ -10,6 +10,8 @@
use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Routing\RouteProviderInterface;
use Drupal\Core\State\StateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\views\Attribute\ViewsDisplay;
use Drupal\views\Plugin\views\display\ResponseDisplayPluginInterface;
use Drupal\views\Render\ViewsRenderPipelineMarkup;
use Drupal\views\ViewExecutable;
......@@ -22,16 +24,15 @@
* The plugin that handles Data response callbacks for REST resources.
*
* @ingroup views_display_plugins
*
* @ViewsDisplay(
* id = "rest_export",
* title = @Translation("REST export"),
* help = @Translation("Create a REST export resource."),
* uses_route = TRUE,
* admin = @Translation("REST export"),
* returns_response = TRUE
* )
*/
#[ViewsDisplay(
id: "rest_export",
title: new TranslatableMarkup("REST export"),
help: new TranslatableMarkup("Create a REST export resource."),
admin: new TranslatableMarkup("REST export"),
uses_route: TRUE,
returns_response: TRUE
)]
class RestExport extends PathPluginBase implements ResponseDisplayPluginInterface {
/**
......
<?php
declare(strict_types=1);
namespace Drupal\views\Attribute;
use Drupal\Component\Plugin\Attribute\Plugin;
use Drupal\Core\StringTranslation\TranslatableMarkup;
/**
* Defines a Plugin attribute object for views display plugins.
*
* @see \Drupal\views\Plugin\views\display\DisplayPluginBase
*
* @ingroup views_display_plugins
*/
#[\Attribute(\Attribute::TARGET_CLASS)]
class ViewsDisplay extends Plugin {
/**
* Constructs a views display attribute object.
*
* @param string $id
* The plugin ID.
* @param \Drupal\Core\StringTranslation\TranslatableMarkup $title
* The plugin title used in the views UI.
* @param \Drupal\Core\StringTranslation\TranslatableMarkup|null $short_title
* (optional) The short title used in the views UI.
* @param \Drupal\Core\StringTranslation\TranslatableMarkup|null $admin
* (optional) The administrative name of the display.
* The name is displayed on the Views overview and also used as default name
* for new displays.
* @param \Drupal\Core\StringTranslation\TranslatableMarkup|null $help
* (optional) A short help string; this is displayed in the views UI.
* @param bool $uses_menu_links
* (optional) Whether or not to use hook_menu() to register a route.
* Defaults to FALSE.
* @param bool $uses_route
* (optional) Does the display plugin registers routes to the route.
* Defaults to FALSE.
* @param bool $uses_hook_block
* (optional) Does the display plugin provide blocks. Defaults to FALSE.
* @param bool $returns_response
* (optional) Whether the display returns a response object.
* Defaults to FALSE.
* @param string[]|null $contextual_links_locations
* (optional) A list of places where contextual links should be added.
* If you don't specify it there will be contextual links rendered for all
* displays of a view. If this is not set or regions have been specified,
* views will display an option to 'hide contextual links'. Use an empty
* array to disable.
* @param string[] $base
* (optional) The base tables on which this exposed form plugin can be used.
* If no base table is specified the plugin can be used with all tables.
* @param string|null $theme
* (optional) The theme function used to render the style output.
* @param bool $no_ui
* (optional) Whether the plugin should be not selectable in the UI.
* If it's set to TRUE, you can still use it via the API in config files.
* Defaults to FALSE.
* @param bool $register_theme
* (optional) Whether to register a theme function automatically. Defaults
* to TRUE.
* @param bool $entity_reference_display
* (optional) Custom property, used with \Drupal\views\Views::getApplicableViews().
* Defaults to FALSE.
* @param class-string|null $deriver
* (optional) The deriver class.
*/
public function __construct(
public readonly string $id,
public readonly TranslatableMarkup $title,
public readonly ?TranslatableMarkup $short_title = NULL,
public readonly ?TranslatableMarkup $admin = NULL,
public readonly ?TranslatableMarkup $help = NULL,
public readonly bool $uses_menu_links = FALSE,
public readonly bool $uses_route = FALSE,
public readonly bool $uses_hook_block = FALSE,
public readonly bool $returns_response = FALSE,
public readonly ?array $contextual_links_locations = NULL,
public readonly array $base = [],
public readonly ?string $theme = NULL,
public readonly bool $no_ui = FALSE,
public readonly bool $register_theme = TRUE,
public readonly bool $entity_reference_display = FALSE,
public readonly ?string $deriver = NULL
) {}
}
......@@ -3,6 +3,8 @@
namespace Drupal\views\Plugin\views\display;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\views\Attribute\ViewsDisplay;
use Drupal\views\ViewExecutable;
/**
......@@ -13,15 +15,14 @@
* the same view. They can share some information.
*
* @ingroup views_display_plugins
*
* @ViewsDisplay(
* id = "attachment",
* title = @Translation("Attachment"),
* help = @Translation("Attachments added to other displays to achieve multiple views in the same view."),
* theme = "views_view",
* contextual_links_locations = {""}
* )
*/
#[ViewsDisplay(
id: "attachment",
title: new TranslatableMarkup("Attachment"),
help: new TranslatableMarkup("Attachments added to other displays to achieve multiple views in the same view."),
theme: "views_view",
contextual_links_locations: [""]
)]
class Attachment extends DisplayPluginBase {
/**
......
......@@ -3,11 +3,13 @@
namespace Drupal\views\Plugin\views\display;
use Drupal\Component\Utility\Unicode;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\Url;
use Drupal\Component\Plugin\Discovery\CachedDiscoveryInterface;
use Drupal\Core\Block\BlockManagerInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Attribute\ViewsDisplay;
use Drupal\views\Plugin\Block\ViewsBlock;
use Symfony\Component\DependencyInjection\ContainerInterface;
......@@ -16,20 +18,19 @@
*
* @ingroup views_display_plugins
*
* @ViewsDisplay(
* id = "block",
* title = @Translation("Block"),
* help = @Translation("Display the view as a block."),
* theme = "views_view",
* register_theme = FALSE,
* uses_hook_block = TRUE,
* contextual_links_locations = {"block"},
* admin = @Translation("Block")
* )
*
* @see \Drupal\views\Plugin\Block\ViewsBlock
* @see \Drupal\views\Plugin\Derivative\ViewsBlock
*/
#[ViewsDisplay(
id: "block",
title: new TranslatableMarkup("Block"),
help: new TranslatableMarkup("Display the view as a block."),
admin: new TranslatableMarkup("Block"),
theme: "views_view",
register_theme: FALSE,
uses_hook_block: TRUE,
contextual_links_locations: ["block"]
)]
class Block extends DisplayPluginBase {
/**
......
......@@ -2,19 +2,21 @@
namespace Drupal\views\Plugin\views\display;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\views\Attribute\ViewsDisplay;
/**
* A plugin to handle defaults on a view.
*
* @ingroup views_display_plugins
*
* @ViewsDisplay(
* id = "default",
* title = @Translation("Default"),
* help = @Translation("Default settings for this view."),
* theme = "views_view",
* no_ui = TRUE
* )
*/
#[ViewsDisplay(
id: "default",
title: new TranslatableMarkup("Default"),
help: new TranslatableMarkup("Default settings for this view."),
theme: "views_view",
no_ui: TRUE
)]
class DefaultDisplay extends DisplayPluginBase {
/**
......
......@@ -2,6 +2,9 @@
namespace Drupal\views\Plugin\views\display;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\views\Attribute\ViewsDisplay;
/**
* The plugin that handles an embed display.
*
......@@ -9,15 +12,14 @@
*
* @todo: Wait until annotations/plugins support access methods.
* no_ui => !\Drupal::config('views.settings')->get('ui.show.display_embed'),
*
* @ViewsDisplay(
* id = "embed",
* title = @Translation("Embed"),
* help = @Translation("Provide a display which can be embedded using the views api."),
* theme = "views_view",
* uses_menu_links = FALSE
* )
*/
#[ViewsDisplay(
id: "embed",
title: new TranslatableMarkup("Embed"),
help: new TranslatableMarkup("Provide a display which can be embedded using the views api."),
theme: "views_view",
uses_menu_links: FALSE
)]
class Embed extends DisplayPluginBase {
/**
......
......@@ -3,6 +3,8 @@
namespace Drupal\views\Plugin\views\display;
use Drupal\Core\Database\Connection;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\views\Attribute\ViewsDisplay;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
......@@ -13,18 +15,17 @@
* 'Entity Reference' display.
*
* @ingroup views_display_plugins
*
* @ViewsDisplay(
* id = "entity_reference",
* title = @Translation("Entity Reference"),
* admin = @Translation("Entity Reference Source"),
* help = @Translation("Selects referenceable entities for an entity reference field."),
* theme = "views_view",
* register_theme = FALSE,
* uses_menu_links = FALSE,
* entity_reference_display = TRUE
* )
*/
#[ViewsDisplay(
id: "entity_reference",
title: new TranslatableMarkup("Entity Reference"),
admin: new TranslatableMarkup("Entity Reference Source"),
help: new TranslatableMarkup("Selects referenceable entities for an entity reference field."),
theme: "views_view",
register_theme: FALSE,
uses_menu_links: FALSE,
entity_reference_display: TRUE
)]
class EntityReference extends DisplayPluginBase {
/**
......
......@@ -8,6 +8,8 @@
use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Routing\RouteProviderInterface;
use Drupal\Core\State\StateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\views\Attribute\ViewsDisplay;
use Drupal\views\ViewExecutable;
use Drupal\views\Views;
use Symfony\Component\DependencyInjection\ContainerInterface;
......@@ -17,16 +19,15 @@
* The plugin that handles a feed, such as RSS or atom.
*
* @ingroup views_display_plugins
*
* @ViewsDisplay(
* id = "feed",
* title = @Translation("Feed"),
* help = @Translation("Display the view as a feed, such as an RSS feed."),
* uses_route = TRUE,
* admin = @Translation("Feed"),
* returns_response = TRUE
* )
*/
#[ViewsDisplay(
id: "feed",
title: new TranslatableMarkup("Feed"),
admin: new TranslatableMarkup("Feed"),
help: new TranslatableMarkup("Display the view as a feed, such as an RSS feed."),
uses_route: TRUE,
returns_response: TRUE
)]
class Feed extends PathPluginBase implements ResponseDisplayPluginInterface {
/**
......
......@@ -9,6 +9,8 @@
use Drupal\Core\Menu\MenuParentFormSelectorInterface;
use Drupal\Core\State\StateInterface;
use Drupal\Core\Routing\RouteProviderInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\views\Attribute\ViewsDisplay;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Routing\Route;
......@@ -16,18 +18,17 @@
* The plugin that handles a full page.
*
* @ingroup views_display_plugins
*
* @ViewsDisplay(
* id = "page",
* title = @Translation("Page"),
* help = @Translation("Display the view as a page, with a URL and menu links."),
* uses_menu_links = TRUE,
* uses_route = TRUE,
* contextual_links_locations = {"page"},
* theme = "views_view",
* admin = @Translation("Page")
* )
*/
#[ViewsDisplay(
id: "page",
title: new TranslatableMarkup("Page"),
help: new TranslatableMarkup("Display the view as a page, with a URL and menu links."),
uses_menu_links: TRUE,
uses_route: TRUE,
contextual_links_locations: ["page"],
theme: "views_view",
admin: new TranslatableMarkup("Page"),
)]
class Page extends PathPluginBase {
/**
......
......@@ -2,18 +2,20 @@
namespace Drupal\views_test_data\Plugin\views\display;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\views\Attribute\ViewsDisplay;
/**
* Defines a Display test plugin with areas disabled.
*
* @ViewsDisplay(
* id = "display_no_area_test",
* title = @Translation("Display test no area"),
* help = @Translation("Defines a display test with areas disabled."),
* theme = "views_view",
* register_theme = FALSE,
* contextual_links_locations = {"view"}
* )
*/
#[ViewsDisplay(
id: "display_no_area_test",
title: new TranslatableMarkup("Display test no area"),
help: new TranslatableMarkup("Defines a display test with areas disabled."),
theme: "views_view",
register_theme: FALSE,
contextual_links_locations: ["view"]
)]
class DisplayNoAreaTest extends DisplayTest {
/**
......
......@@ -5,20 +5,21 @@
use Drupal\Component\Utility\Unicode;
use Drupal\Component\Utility\Xss;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\views\Attribute\ViewsDisplay;
use Drupal\views\Plugin\views\display\DisplayPluginBase;
/**
* Defines a Display test plugin.
*
* @ViewsDisplay(
* id = "display_test",
* title = @Translation("Display test"),
* help = @Translation("Defines a display test plugin."),
* theme = "views_view",
* register_theme = FALSE,
* contextual_links_locations = {"view"}
* )
*/
#[ViewsDisplay(
id: "display_test",
title: new TranslatableMarkup("Display test"),
help: new TranslatableMarkup("Defines a display test plugin."),
theme: "views_view",
register_theme: FALSE,
contextual_links_locations: ["view"]
)]
class DisplayTest extends DisplayPluginBase {
/**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment