summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwebchick2013-10-07 04:33:22 (GMT)
committerwebchick2013-10-07 04:33:22 (GMT)
commit4020361ecb3706aa9282aaa77db44862987b987e (patch)
tree852ad5cd082bd13c6ab88366ecc2eb104389e329
parent1f6bbe94fd26d5950773b1aac6148cabe58a42fb (diff)
Issue #1972990 by pwolanin, Dean Reilly, dawehner, Jberges, dokumori, AjitS, tim.plunkett: Convert tracker_page() to a Controller.
-rw-r--r--core/lib/Drupal/Core/Menu/LocalTaskDefault.php49
-rw-r--r--core/modules/tracker/lib/Drupal/tracker/Access/ViewOwnTrackerAccessCheck.php38
-rw-r--r--core/modules/tracker/lib/Drupal/tracker/Controller/TrackerPage.php24
-rw-r--r--core/modules/tracker/lib/Drupal/tracker/Controller/TrackerUserRecent.php25
-rw-r--r--core/modules/tracker/lib/Drupal/tracker/Controller/TrackerUserTab.php33
-rw-r--r--core/modules/tracker/lib/Drupal/tracker/Plugin/Menu/UserTrackerTab.php48
-rw-r--r--core/modules/tracker/tracker.local_tasks.yml10
-rw-r--r--core/modules/tracker/tracker.module42
-rw-r--r--core/modules/tracker/tracker.routing.yml30
-rw-r--r--core/modules/tracker/tracker.services.yml5
-rw-r--r--core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php3
11 files changed, 230 insertions, 77 deletions
diff --git a/core/lib/Drupal/Core/Menu/LocalTaskDefault.php b/core/lib/Drupal/Core/Menu/LocalTaskDefault.php
index 67e0afd..1ba0c3e 100644
--- a/core/lib/Drupal/Core/Menu/LocalTaskDefault.php
+++ b/core/lib/Drupal/Core/Menu/LocalTaskDefault.php
@@ -7,16 +7,13 @@
namespace Drupal\Core\Menu;
-use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Plugin\PluginBase;
-use Drupal\Core\Routing\RouteProviderInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
/**
* Default object used for LocalTaskPlugins.
*/
-class LocalTaskDefault extends PluginBase implements LocalTaskInterface, ContainerFactoryPluginInterface {
+class LocalTaskDefault extends PluginBase implements LocalTaskInterface {
/**
* The route provider to load routes by name.
@@ -33,35 +30,6 @@ class LocalTaskDefault extends PluginBase implements LocalTaskInterface, Contain
protected $active = FALSE;
/**
- * Constructs a \Drupal\system\Plugin\LocalTaskDefault object.
- *
- * @param array $configuration
- * A configuration array containing information about the plugin instance.
- * @param string $plugin_id
- * The plugin_id for the plugin instance.
- * @param array $plugin_definition
- * The plugin implementation definition.
- * @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
- * The route provider.
- */
- public function __construct(array $configuration, $plugin_id, array $plugin_definition, RouteProviderInterface $route_provider) {
- $this->routeProvider = $route_provider;
- parent::__construct($configuration, $plugin_id, $plugin_definition);
- }
-
- /**
- * {@inheritdoc}
- */
- public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) {
- return new static(
- $configuration,
- $plugin_id,
- $plugin_definition,
- $container->get('router.route_provider')
- );
- }
-
- /**
* {@inheritdoc}
*/
public function getRouteName() {
@@ -73,7 +41,7 @@ class LocalTaskDefault extends PluginBase implements LocalTaskInterface, Contain
*/
public function getRouteParameters(Request $request) {
$parameters = isset($this->pluginDefinition['route_parameters']) ? $this->pluginDefinition['route_parameters'] : array();
- $route = $this->routeProvider->getRouteByName($this->getRouteName());
+ $route = $this->routeProvider()->getRouteByName($this->getRouteName());
$variables = $route->compile()->getVariables();
// Normally the \Drupal\Core\ParamConverter\ParamConverterManager has
@@ -158,4 +126,17 @@ class LocalTaskDefault extends PluginBase implements LocalTaskInterface, Contain
return $this->active;
}
+ /**
+ * Returns the route provider.
+ *
+ * @return \Drupal\Core\Routing\RouteProviderInterface
+ * The route provider.
+ */
+ protected function routeProvider() {
+ if (!$this->routeProvider) {
+ $this->routeProvider = \Drupal::service('router.route_provider');
+ }
+ return $this->routeProvider;
+ }
+
}
diff --git a/core/modules/tracker/lib/Drupal/tracker/Access/ViewOwnTrackerAccessCheck.php b/core/modules/tracker/lib/Drupal/tracker/Access/ViewOwnTrackerAccessCheck.php
new file mode 100644
index 0000000..f0ec508
--- /dev/null
+++ b/core/modules/tracker/lib/Drupal/tracker/Access/ViewOwnTrackerAccessCheck.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\tracker\Access\ViewOwnTrackerAccessCheck.
+ */
+
+namespace Drupal\tracker\Access;
+
+use Drupal\Core\Access\StaticAccessCheckInterface;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * Access check for user tracker routes.
+ */
+class ViewOwnTrackerAccessCheck implements StaticAccessCheckInterface {
+
+ /**
+ * {@inheritdoc}
+ */
+ public function appliesTo() {
+ return array('_access_tracker_own_information');
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function access(Route $route, Request $request) {
+ // The user object from the User ID in the path.
+ $user = $request->attributes->get('user');
+ // @todo - $account should be passed in.
+ // The \Drupal\Core\Session\AccountInterface $account trying to access this.
+ $account = \Drupal::currentUser();
+ return $user && $account->isAuthenticated() && ($user->id() == $account->id());
+ }
+}
+
diff --git a/core/modules/tracker/lib/Drupal/tracker/Controller/TrackerPage.php b/core/modules/tracker/lib/Drupal/tracker/Controller/TrackerPage.php
new file mode 100644
index 0000000..a9d667a
--- /dev/null
+++ b/core/modules/tracker/lib/Drupal/tracker/Controller/TrackerPage.php
@@ -0,0 +1,24 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\tracker\Controller\TrackerPage.
+ */
+
+namespace Drupal\tracker\Controller;
+
+use Drupal\Core\Controller\ControllerBase;
+
+/**
+ * Controller for tracker.page route.
+ */
+class TrackerPage extends ControllerBase {
+
+ /**
+ * Content callback for the tracker.page route.
+ */
+ public function getContent() {
+ module_load_include('inc', 'tracker', 'tracker.pages');
+ return tracker_page();
+ }
+}
diff --git a/core/modules/tracker/lib/Drupal/tracker/Controller/TrackerUserRecent.php b/core/modules/tracker/lib/Drupal/tracker/Controller/TrackerUserRecent.php
new file mode 100644
index 0000000..4b644ae
--- /dev/null
+++ b/core/modules/tracker/lib/Drupal/tracker/Controller/TrackerUserRecent.php
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\tracker\Controller\TrackerUserRecent.
+ */
+
+namespace Drupal\tracker\Controller;
+
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\user\UserInterface;
+
+/**
+ * Controller for tracker.users_recent_content route.
+ */
+class TrackerUserRecent extends ControllerBase {
+
+ /**
+ * Content callback for the tracker.users_recent_content route.
+ */
+ public function getContent(UserInterface $user) {
+ module_load_include('inc', 'tracker', 'tracker.pages');
+ return tracker_page($user);
+ }
+}
diff --git a/core/modules/tracker/lib/Drupal/tracker/Controller/TrackerUserTab.php b/core/modules/tracker/lib/Drupal/tracker/Controller/TrackerUserTab.php
new file mode 100644
index 0000000..cb595f7
--- /dev/null
+++ b/core/modules/tracker/lib/Drupal/tracker/Controller/TrackerUserTab.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\tracker\Controller\TrackerUserTab.
+ */
+
+namespace Drupal\tracker\Controller;
+
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\user\UserInterface;
+use Drupal\Component\Utility\String;
+
+/**
+ * Controller for tracker.user_tab route.
+ */
+class TrackerUserTab extends ControllerBase {
+
+ /**
+ * Content callback for the tracker.user_tab route.
+ */
+ public function getContent(UserInterface $user) {
+ module_load_include('inc', 'tracker', 'tracker.pages');
+ return tracker_page($user);
+ }
+
+ /**
+ * Title callback for the tracker.user_tab route.
+ */
+ public function getTitle(UserInterface $user) {
+ return String::checkPlain(user_format_name($user));
+ }
+}
diff --git a/core/modules/tracker/lib/Drupal/tracker/Plugin/Menu/UserTrackerTab.php b/core/modules/tracker/lib/Drupal/tracker/Plugin/Menu/UserTrackerTab.php
new file mode 100644
index 0000000..3e195af
--- /dev/null
+++ b/core/modules/tracker/lib/Drupal/tracker/Plugin/Menu/UserTrackerTab.php
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\tracker\Plugin\Menu\UserTrackerTab.
+ */
+
+namespace Drupal\tracker\Plugin\Menu;
+
+use Drupal\Core\Menu\LocalTaskDefault;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * Provides route parameters needed to link to the current user tracker tab.
+ */
+class UserTrackerTab extends LocalTaskDefault {
+
+ /**
+ * Current user object.
+ *
+ * @var \Drupal\Core\Session\AccountInterface
+ */
+ protected $currentUser;
+
+ /**
+ * Gets the current active user.
+ *
+ * @todo: https://drupal.org/node/2105123 put this method in
+ * \Drupal\Core\Plugin\PluginBase instead.
+ *
+ * @return \Drupal\Core\Session\AccountInterface
+ */
+ protected function currentUser() {
+ if (!$this->currentUser) {
+ $this->currentUser = \Drupal::currentUser();
+ }
+ return $this->currentUser;
+ }
+
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getRouteParameters(Request $request) {
+ return array('user' => $this->currentUser()->Id());
+ }
+
+}
diff --git a/core/modules/tracker/tracker.local_tasks.yml b/core/modules/tracker/tracker.local_tasks.yml
new file mode 100644
index 0000000..7600bd0
--- /dev/null
+++ b/core/modules/tracker/tracker.local_tasks.yml
@@ -0,0 +1,10 @@
+tracker.page_tab:
+ route_name: tracker.page
+ title: 'Recent content'
+ tab_root_id: tracker.page_tab
+
+tracker.users_recent_tab:
+ route_name: tracker.users_recent_content
+ title: 'My recent content'
+ tab_root_id: tracker.page_tab
+ class: '\Drupal\tracker\Plugin\Menu\UserTrackerTab'
diff --git a/core/modules/tracker/tracker.module b/core/modules/tracker/tracker.module
index 88f4f02..878a755 100644
--- a/core/modules/tracker/tracker.module
+++ b/core/modules/tracker/tracker.module
@@ -31,48 +31,6 @@ function tracker_help($path, $arg) {
}
/**
- * Implements hook_menu().
- */
-function tracker_menu() {
- $items['tracker'] = array(
- 'title' => 'Recent content',
- 'page callback' => 'tracker_page',
- 'access arguments' => array('access content'),
- 'weight' => 1,
- 'file' => 'tracker.pages.inc',
- );
- $items['tracker/all'] = array(
- 'title' => 'All recent content',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- );
- $items['tracker/%user_uid_optional'] = array(
- 'title' => 'My recent content',
- 'page callback' => 'tracker_page',
- 'access callback' => '_tracker_myrecent_access',
- 'access arguments' => array(1),
- 'page arguments' => array(1),
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'tracker.pages.inc',
- );
-
- $items['user/%user/track'] = array(
- 'title' => 'Track',
- 'page callback' => 'tracker_page',
- 'page arguments' => array(1, TRUE),
- 'access callback' => '_tracker_user_access',
- 'access arguments' => array(1),
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'tracker.pages.inc',
- );
- $items['user/%user/track/content'] = array(
- 'title' => 'Track content',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- );
-
- return $items;
-}
-
-/**
* Implements hook_cron().
*
* Updates tracking information for any items still to be tracked. The state
diff --git a/core/modules/tracker/tracker.routing.yml b/core/modules/tracker/tracker.routing.yml
new file mode 100644
index 0000000..4de8d8f
--- /dev/null
+++ b/core/modules/tracker/tracker.routing.yml
@@ -0,0 +1,30 @@
+tracker.page:
+ path: '/tracker'
+ defaults:
+ _content: '\Drupal\tracker\Controller\TrackerPage::getContent'
+ _title: 'Recent content'
+ requirements:
+ _permission: 'access content'
+
+tracker.users_recent_content:
+ path: '/tracker/{user}'
+ defaults:
+ _content: '\Drupal\tracker\Controller\TrackerUserRecent::getContent'
+ _title: 'My recent content'
+ options:
+ _access_mode: 'ALL'
+ requirements:
+ _permission: 'access content'
+ _access_tracker_own_information: 'TRUE'
+
+tracker.user_tab:
+ path: '/user/{user}/track'
+ defaults:
+ _content: '\Drupal\tracker\Controller\TrackerUserTab::getContent'
+ _title_callback: '\Drupal\tracker\Controller\TrackerUserTab::getTitle'
+ options:
+ _access_mode: 'ALL'
+ requirements:
+ _permission: 'access content'
+ _entity_access: 'user.view'
+
diff --git a/core/modules/tracker/tracker.services.yml b/core/modules/tracker/tracker.services.yml
new file mode 100644
index 0000000..e657c1f
--- /dev/null
+++ b/core/modules/tracker/tracker.services.yml
@@ -0,0 +1,5 @@
+services:
+ access_check.tracker.view_own:
+ class: Drupal\tracker\Access\ViewOwnTrackerAccessCheck
+ tags:
+ - { name: access_check }
diff --git a/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php b/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php
index 1777ab8..f7231bf 100644
--- a/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php
+++ b/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php
@@ -86,8 +86,9 @@ class LocalTaskDefaultTest extends UnitTestCase {
protected function setupLocalTaskDefault() {
$container = new ContainerBuilder();
$container->set('string_translation', $this->stringTranslation);
+ $container->set('router.route_provider', $this->routeProvider);
\Drupal::setContainer($container);
- $this->localTaskBase = new LocalTaskDefault($this->config, $this->pluginId, $this->pluginDefinition, $this->routeProvider);
+ $this->localTaskBase = new LocalTaskDefault($this->config, $this->pluginId, $this->pluginDefinition);
}
/**