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
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -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 {

  /**
+89 −0
Original line number Diff line number Diff line
<?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
  ) {}

}
+9 −8
Original line number Diff line number Diff line
@@ -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 {

  /**
+12 −11
Original line number Diff line number Diff line
@@ -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 {

  /**
+10 −8
Original line number Diff line number Diff line
@@ -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 {

  /**
Loading