admin_toolbar_content-1.0.0/src/Plugin/AdminToolbarContent/AdminToolbarContentMediaPlugin.php

src/Plugin/AdminToolbarContent/AdminToolbarContentMediaPlugin.php
<?php

namespace Drupal\admin_toolbar_content\Plugin\AdminToolbarContent;

use Drupal\admin_toolbar_content\AdminToolbarContentPluginBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Alter the system media menu and adding a new main media menu item.
 *
 * @see \Drupal\admin_toolbar_content\Plugin\Derivative\AdminToolbarContentMenuLinks.
 *
 * @AdminToolbarContentPlugin(
 *   id = "media",
 *   name = @Translation("Media"),
 *   description = @Translation("Adds a 'Media' item to the admin menu."),
 *   entity_type = "media_type",
 * )
 */
class AdminToolbarContentMediaPlugin extends AdminToolbarContentPluginBase {

  /**
   * {@inheritdoc}
   */
  public function buildConfigForm(array &$form, FormStateInterface $form_state): array {
    $elements = parent::buildConfigForm($form, $form_state);

    if ($this->isRouteAvailable('view.media_library.page')) {
      $elements['link_media_library'] = [
        '#type' => 'checkbox',
        '#title' => $this->t('Link to media library'),
        '#description' => $this->t('Links media items directly to the media library.'),
        '#default_value' => $this->config->get("plugins." . $this->getPluginId() . '.link_media_library') ?? 0,
      ];
    }

    return $elements;
  }

  /**
   * {@inheritdoc}
   */
  public function alterDiscoveredMenuLinks(array &$links): void {
    unset($links["admin_toolbar_tools.extra_links:media_page"]);
    unset($links["admin_toolbar_tools.extra_links:media_library"]);
    unset($links["admin_toolbar_tools.extra_links:add_media"]);

    $mediaTypes = $this->getItems();
    foreach ($mediaTypes as $id => $mediaType) {
      unset($links["admin_toolbar_tools.extra_links:media.add.$id"]);
    }

    if ($this->isRouteAvailable('view.files.page_1')) {
      unset($links['admin_toolbar_tools.extra_links:view.files']);
    }

  }

  /**
   * {@inheritdoc}
   */
  public function createMenuLinkItems(): void {

    $link_library = $this->config->get("plugins." . $this->getPluginId() . '.link_media_library') ?? TRUE;

    // Use Media Library page if library is accessible.
    if ($link_library && $this->isRouteAvailable('view.media_library.page')) {
      $this->createRootLink($this->t("Media"), "view.media_library.page", [], -7);
    }
    else {
      $this->createRootLink($this->t("Media"), "view.media.media_page_list", [], -7);
    }

    $this->createFilesLink();
    $this->createCollectionLinks("entity.media.collection");
    $this->createItemLinks("entity.media.collection", 'type');
    $this->createItemAddLinks("entity.media.add_form");
  }

  /**
   * Creates the files link.
   */
  protected function createFilesLink(): void {
    if ($this->isRouteAvailable('view.files.page_1')) {
      $this->links[$this->getPluginId() . '.files'] = [
        'title' => $this->t('Files'),
        'route_name' => 'view.files.page_1',
        'route_parameters' => [],
        'menu_name' => 'admin',
        'parent' => isset($this->links[$this->getPluginId()])
          ? $this->baseMenuLinkPluginDefinition['id'] . ':' . $this->getPluginId()
          : 'system.admin',
        'weight' => -7,
      ] + $this->baseMenuLinkPluginDefinition;
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc