diff --git a/core/lib/Drupal/Core/Menu/LocalTaskDefault.php b/core/lib/Drupal/Core/Menu/LocalTaskDefault.php index 67e0afda86256f95d96ec9ebffe534ae4bf6455e..1ba0c3e0e4188073bb9ac1a54b8821453f2a5964 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 @@ public function getRouteName() { */ 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 @@ public function getActive() { 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 0000000000000000000000000000000000000000..f0ec5084152b06b3f3740503decea693cae706ea --- /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 0000000000000000000000000000000000000000..a9d667a4486d4d6c8631c84cc81f4ae3137996c9 --- /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 0000000000000000000000000000000000000000..7600bd0b29d4475ae8168341028eec473a8ff383 --- /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 88f4f02f9a7e510b4e34515534a155aa7b0a55cf..878a755f45629d1211ab9f23843442ca9414060e 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 0000000000000000000000000000000000000000..4de8d8fe2499eb3748e5148bf94ffb681fc01642 --- /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 0000000000000000000000000000000000000000..e657c1f57978cb6ca91e5bc5c38dec86c131efb0 --- /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 1777ab88220ef229eca24e20fa2c477b131cf0e9..f7231bf35867df7b6fed3c0487b068e52001a184 100644 --- a/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php +++ b/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php @@ -86,8 +86,9 @@ protected function setUp() { 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); } /**