murmurations-1.0.0-alpha1/src/EventSubscriber/RouteSubscriber.php

src/EventSubscriber/RouteSubscriber.php
<?php

namespace Drupal\murmurations\EventSubscriber;

use Drupal\Core\Routing\RouteSubscriberBase;
use Drupal\murmurations\MurmurationsPluginManager;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;

/**
 * Make a profile route and map and list routes for each profile.
 * @todo use the plugin definition to declare the root path for the search tabs.
 */
class RouteSubscriber extends RouteSubscriberBase {

  /**
   * @var MurmurationsPluginManager
   */
  protected $pluginManager;

  /**
   * {@inheritdoc}
   */
  public function __construct(MurmurationsPluginManager $murmurations_plugin_manager) {
    $this->pluginManager = $murmurations_plugin_manager;
  }

  /**
   * {@inheritdoc}
   */
  protected function alterRoutes(RouteCollection $collection) {
    foreach($this->pluginManager->allInstances() as $id => $plugin) {
      if ($plugin->needed()) {
        continue;
      }
      $plugin_def = $plugin->getPluginDefinition();
      $profile_path = $plugin_def['profile_path'];
      if (isset($plugin_def['entity_type'])) {
        $profile_path = str_replace($plugin_def['entity_type'], 'entity', $profile_path);
      }
      // One route to display the json profiles for each plugin
      $route = new Route(
        $profile_path,
        ['_controller' => 'Drupal\murmurations\Page::publishJson'],
        [],
        ['plugin' => $id, '_format' => 'json']
      );
      if (str_contains($profile_path, '{')) {
        $route->setRequirement('_murmurations_profile_published', 'true');
      }
      else {
        $route->setOption('_access', 'TRUE');
      }
      $collection->add("murmurations.$id", $route);

      // Two routes for the map and list filter pages for each plugin
      $collection->add(
        "murmurations.$id.search.map",
        new Route(
          "murmurations/$id",
          [
            '_form' => '\Drupal\murmurations\Form\FilterFormMap',
            '_title_callback' => '\Drupal\murmurations\Page::filterPageTitle'
          ],
          ['_permission' =>  'filter murmurations content'],
          ['plugin' => $id]
        )
      );
      $collection->add(
        "murmurations.$id.search.list",
        new Route(
          "murmurations/$id/list",
          [
            '_form' => '\Drupal\murmurations\Form\FilterFormList',
            '_title_callback' => '\Drupal\murmurations\Page::filterPageTitle'
          ],
          ['_permission' =>  'filter murmurations content'],
          ['plugin' => $id]
        )
      );
    }
  }
}

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

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