<?php /** * @file * Main functions of the module. */ use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Routing\RouteMatchInterface; /** * Implements hook_help(). */ function tour_help($route_name, RouteMatchInterface $route_match) { switch ($route_name) { case 'help.page.tour': $output = ''; $output .= '<h3>' . t('About') . '</h3>'; $output .= '<p>' . t("The Tour module provides users with guided tours of the site interface. Each tour consists of several tips that highlight elements of the user interface, guide the user through a workflow, or explain key concepts of the website. For more information, see <a href='!tour'>the online documentation for the Tour module</a>.", array('!tour' => 'https://www.drupal.org/documentation/modules/tour')) . '</p>'; $output .= '<h3>' . t('Uses') . '</h3>'; $output .= '<dl>'; $output .= '<dt>' . t('Viewing tours') . '</dt>'; $output .= '<dd>' . t("If a tour is available on a page, a <em>Tour</em> button will be visible in the toolbar. If you click this button the first tip of the tour will appear. The tour continues after clicking the <em>Next</em> button in the tip. To see a tour users must have the permission <em>Access tour</em> and JavaScript must be enabled in the browser") . '</dd>'; $output .= '<dt>' . t('Creating tours') . '</dt>'; $output .= '<dd>' . t("Tours can be written as YAML-documents with a text editor, or using the contributed <a href='!tour_ui'>Tour UI</a> module. For more information, see <a href='!doc_url'>the online documentation for writing tours</a>.", array('!doc_url' => 'https://www.drupal.org/developing/api/tour', '!tour_ui' => 'https://www.drupal.org/project/tour_ui')) . '</dd>'; $output .= '</dl>'; return $output; } } /** * Implements hook_toolbar(). */ function tour_toolbar() { $items = []; $items['tour'] = [ '#cache' => [ 'contexts' => [ 'user.permissions', ], ], ]; if (!\Drupal::currentUser()->hasPermission('access tour')) { return $items; } $items['tour'] += array( '#type' => 'toolbar_item', 'tab' => array( '#type' => 'html_tag', '#tag' => 'button', '#value' => t('Tour'), '#attributes' => array( 'class' => array('toolbar-icon', 'toolbar-icon-help'), 'role' => 'button', 'aria-pressed' => 'false', ), ), '#wrapper_attributes' => array( 'class' => array('tour-toolbar-tab', 'hidden'), 'id' => 'toolbar-tab-tour', ), '#attached' => array( 'library' => array( 'tour/tour', ), ), ); return $items; } /** * Implements hook_page_bottom(). */ function tour_page_bottom(array &$page_bottom) { if (!\Drupal::currentUser()->hasPermission('access tour')) { return; } // Load all of the items and match on route name. $route_match = \Drupal::routeMatch(); $route_name = $route_match->getRouteName(); $results = \Drupal::entityQuery('tour') ->condition('routes.*.route_name', $route_name) ->execute(); if (!empty($results) && $tours = entity_load_multiple('tour', array_keys($results))) { foreach ($tours as $id => $tour) { // Match on params. if (!$tour->hasMatchingRoute($route_name, $route_match->getRawParameters()->all())) { unset($tours[$id]); } } if (!empty($tours)) { $page_bottom['tour'] = entity_view_multiple($tours, 'full'); } } } /** * Implements hook_ENTITY_TYPE_insert() for tour entities. */ function tour_tour_insert($entity) { \Drupal::service('plugin.manager.tour.tip')->clearCachedDefinitions(); } /** * Implements hook_ENTITY_TYPE_update() for tour entities. */ function tour_tour_update($entity) { \Drupal::service('plugin.manager.tour.tip')->clearCachedDefinitions(); }