From 4020361ecb3706aa9282aaa77db44862987b987e Mon Sep 17 00:00:00 2001 From: webchick Date: Sun, 6 Oct 2013 21:33:22 -0700 Subject: [PATCH] Issue #1972990 by pwolanin, Dean Reilly, dawehner, Jberges, dokumori, AjitS, tim.plunkett: Convert tracker_page() to a Controller. --- .../lib/Drupal/Core/Menu/LocalTaskDefault.php | 49 ++++++------------- .../Access/ViewOwnTrackerAccessCheck.php | 38 ++++++++++++++ .../Drupal/tracker/Controller/TrackerPage.php | 24 +++++++++ .../tracker/Controller/TrackerUserRecent.php | 25 ++++++++++ .../tracker/Controller/TrackerUserTab.php | 33 +++++++++++++ .../tracker/Plugin/Menu/UserTrackerTab.php | 48 ++++++++++++++++++ core/modules/tracker/tracker.local_tasks.yml | 10 ++++ core/modules/tracker/tracker.module | 42 ---------------- core/modules/tracker/tracker.routing.yml | 30 ++++++++++++ core/modules/tracker/tracker.services.yml | 5 ++ .../Tests/Core/Menu/LocalTaskDefaultTest.php | 3 +- 11 files changed, 230 insertions(+), 77 deletions(-) create mode 100644 core/modules/tracker/lib/Drupal/tracker/Access/ViewOwnTrackerAccessCheck.php create mode 100644 core/modules/tracker/lib/Drupal/tracker/Controller/TrackerPage.php create mode 100644 core/modules/tracker/lib/Drupal/tracker/Controller/TrackerUserRecent.php create mode 100644 core/modules/tracker/lib/Drupal/tracker/Controller/TrackerUserTab.php create mode 100644 core/modules/tracker/lib/Drupal/tracker/Plugin/Menu/UserTrackerTab.php create mode 100644 core/modules/tracker/tracker.local_tasks.yml create mode 100644 core/modules/tracker/tracker.routing.yml create mode 100644 core/modules/tracker/tracker.services.yml diff --git a/core/lib/Drupal/Core/Menu/LocalTaskDefault.php b/core/lib/Drupal/Core/Menu/LocalTaskDefault.php index 67e0afda862..1ba0c3e0e41 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. @@ -32,35 +29,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} */ @@ -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 00000000000..f0ec5084152 --- /dev/null +++ b/core/modules/tracker/lib/Drupal/tracker/Access/ViewOwnTrackerAccessCheck.php @@ -0,0 +1,38 @@ +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 00000000000..a9d667a4486 --- /dev/null +++ b/core/modules/tracker/lib/Drupal/tracker/Controller/TrackerPage.php @@ -0,0 +1,24 @@ +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 00000000000..7600bd0b29d --- /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 88f4f02f9a7..878a755f456 100644 --- a/core/modules/tracker/tracker.module +++ b/core/modules/tracker/tracker.module @@ -30,48 +30,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(). * diff --git a/core/modules/tracker/tracker.routing.yml b/core/modules/tracker/tracker.routing.yml new file mode 100644 index 00000000000..4de8d8fe249 --- /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 00000000000..e657c1f5797 --- /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 1777ab88220..f7231bf3586 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); } /**