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 @@ 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/UserTrackerAccessCheck.php b/core/modules/tracker/lib/Drupal/tracker/Access/UserTrackerAccessCheck.php new file mode 100644 index 0000000..51ca5d4 --- /dev/null +++ b/core/modules/tracker/lib/Drupal/tracker/Access/UserTrackerAccessCheck.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 && $user->access('view', $account); + } +} + 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 @@ +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 @@ +currentUserId = $current_user_id; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('current_user')->id() + ); + } + + /** + * {@inheritdoc} + */ + public function getRouteParameters(Request $request) { + return array('user' => $this->currentUserId); + } + +} 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..3e23675 --- /dev/null +++ b/core/modules/tracker/tracker.routing.yml @@ -0,0 +1,29 @@ +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' + _access_tracker_user_tab: 'TRUE' diff --git a/core/modules/tracker/tracker.services.yml b/core/modules/tracker/tracker.services.yml new file mode 100644 index 0000000..834eb62 --- /dev/null +++ b/core/modules/tracker/tracker.services.yml @@ -0,0 +1,10 @@ +services: + access_check.tracker.view_own: + class: Drupal\tracker\Access\ViewOwnTrackerAccessCheck + tags: + - { name: access_check } + access_check.tracker.user_tab: + class: Drupal\tracker\Access\UserTrackerAccessCheck + 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 @@ 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); } /**