Mercurial > hg > isophonics-drupal-site
comparison core/modules/content_translation/src/Routing/ContentTranslationRouteSubscriber.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\content_translation\Routing; | |
4 | |
5 use Drupal\content_translation\ContentTranslationManagerInterface; | |
6 use Drupal\Core\Routing\RouteSubscriberBase; | |
7 use Drupal\Core\Routing\RoutingEvents; | |
8 use Symfony\Component\Routing\Route; | |
9 use Symfony\Component\Routing\RouteCollection; | |
10 | |
11 /** | |
12 * Subscriber for entity translation routes. | |
13 */ | |
14 class ContentTranslationRouteSubscriber extends RouteSubscriberBase { | |
15 | |
16 /** | |
17 * The content translation manager. | |
18 * | |
19 * @var \Drupal\content_translation\ContentTranslationManagerInterface | |
20 */ | |
21 protected $contentTranslationManager; | |
22 | |
23 /** | |
24 * Constructs a ContentTranslationRouteSubscriber object. | |
25 * | |
26 * @param \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager | |
27 * The content translation manager. | |
28 */ | |
29 public function __construct(ContentTranslationManagerInterface $content_translation_manager) { | |
30 $this->contentTranslationManager = $content_translation_manager; | |
31 } | |
32 | |
33 /** | |
34 * {@inheritdoc} | |
35 */ | |
36 protected function alterRoutes(RouteCollection $collection) { | |
37 foreach ($this->contentTranslationManager->getSupportedEntityTypes() as $entity_type_id => $entity_type) { | |
38 // Try to get the route from the current collection. | |
39 $link_template = $entity_type->getLinkTemplate('canonical'); | |
40 if (strpos($link_template, '/') !== FALSE) { | |
41 $base_path = '/' . $link_template; | |
42 } | |
43 else { | |
44 if (!$entity_route = $collection->get("entity.$entity_type_id.canonical")) { | |
45 continue; | |
46 } | |
47 $base_path = $entity_route->getPath(); | |
48 } | |
49 | |
50 // Inherit admin route status from edit route, if exists. | |
51 $is_admin = FALSE; | |
52 $route_name = "entity.$entity_type_id.edit_form"; | |
53 if ($edit_route = $collection->get($route_name)) { | |
54 $is_admin = (bool) $edit_route->getOption('_admin_route'); | |
55 } | |
56 | |
57 $path = $base_path . '/translations'; | |
58 | |
59 $route = new Route( | |
60 $path, | |
61 [ | |
62 '_controller' => '\Drupal\content_translation\Controller\ContentTranslationController::overview', | |
63 'entity_type_id' => $entity_type_id, | |
64 ], | |
65 [ | |
66 '_entity_access' => $entity_type_id . '.view', | |
67 '_access_content_translation_overview' => $entity_type_id, | |
68 ], | |
69 [ | |
70 'parameters' => [ | |
71 $entity_type_id => [ | |
72 'type' => 'entity:' . $entity_type_id, | |
73 ], | |
74 ], | |
75 '_admin_route' => $is_admin, | |
76 ] | |
77 ); | |
78 $route_name = "entity.$entity_type_id.content_translation_overview"; | |
79 $collection->add($route_name, $route); | |
80 | |
81 $route = new Route( | |
82 $path . '/add/{source}/{target}', | |
83 [ | |
84 '_controller' => '\Drupal\content_translation\Controller\ContentTranslationController::add', | |
85 'source' => NULL, | |
86 'target' => NULL, | |
87 '_title' => 'Add', | |
88 'entity_type_id' => $entity_type_id, | |
89 | |
90 ], | |
91 [ | |
92 '_entity_access' => $entity_type_id . '.view', | |
93 '_access_content_translation_manage' => 'create', | |
94 ], | |
95 [ | |
96 'parameters' => [ | |
97 'source' => [ | |
98 'type' => 'language', | |
99 ], | |
100 'target' => [ | |
101 'type' => 'language', | |
102 ], | |
103 $entity_type_id => [ | |
104 'type' => 'entity:' . $entity_type_id, | |
105 ], | |
106 ], | |
107 '_admin_route' => $is_admin, | |
108 ] | |
109 ); | |
110 $collection->add("entity.$entity_type_id.content_translation_add", $route); | |
111 | |
112 $route = new Route( | |
113 $path . '/edit/{language}', | |
114 [ | |
115 '_controller' => '\Drupal\content_translation\Controller\ContentTranslationController::edit', | |
116 'language' => NULL, | |
117 '_title' => 'Edit', | |
118 'entity_type_id' => $entity_type_id, | |
119 ], | |
120 [ | |
121 '_access_content_translation_manage' => 'update', | |
122 ], | |
123 [ | |
124 'parameters' => [ | |
125 'language' => [ | |
126 'type' => 'language', | |
127 ], | |
128 $entity_type_id => [ | |
129 'type' => 'entity:' . $entity_type_id, | |
130 ], | |
131 ], | |
132 '_admin_route' => $is_admin, | |
133 ] | |
134 ); | |
135 $collection->add("entity.$entity_type_id.content_translation_edit", $route); | |
136 | |
137 $route = new Route( | |
138 $path . '/delete/{language}', | |
139 [ | |
140 '_entity_form' => $entity_type_id . '.content_translation_deletion', | |
141 'language' => NULL, | |
142 '_title' => 'Delete', | |
143 'entity_type_id' => $entity_type_id, | |
144 ], | |
145 [ | |
146 '_access_content_translation_manage' => 'delete', | |
147 ], | |
148 [ | |
149 'parameters' => [ | |
150 'language' => [ | |
151 'type' => 'language', | |
152 ], | |
153 $entity_type_id => [ | |
154 'type' => 'entity:' . $entity_type_id, | |
155 ], | |
156 ], | |
157 '_admin_route' => $is_admin, | |
158 ] | |
159 ); | |
160 $collection->add("entity.$entity_type_id.content_translation_delete", $route); | |
161 } | |
162 } | |
163 | |
164 /** | |
165 * {@inheritdoc} | |
166 */ | |
167 public static function getSubscribedEvents() { | |
168 $events = parent::getSubscribedEvents(); | |
169 // Should run after AdminRouteSubscriber so the routes can inherit admin | |
170 // status of the edit routes on entities. Therefore priority -210. | |
171 $events[RoutingEvents::ALTER] = ['onAlterRoutes', -210]; | |
172 return $events; | |
173 } | |
174 | |
175 } |