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..cf6ac1b --- /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 $account->hasPermission('access content') && $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..f448345 --- /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 $account->isAuthenticated() && ($user->id() == $account->id()) && $account->hasPermission('access content'); + } +} + 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; + parent::__construct($configuration, $plugin_id, $plugin_definition, $string_translation, $route_provider); + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('string_translation'), + $container->get('router.route_provider'), + $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..80716a2 --- /dev/null +++ b/core/modules/tracker/tracker.routing.yml @@ -0,0 +1,23 @@ +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' + requirements: + _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' + requirements: + _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 } +