Mercurial > hg > isophonics-drupal-site
diff core/modules/tour/tour.module @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/tour/tour.module Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,114 @@ +<?php + +/** + * @file + * Main functions of the module. + */ + +use Drupal\Core\Routing\RouteMatchInterface; +use Drupal\tour\Entity\Tour; + +/** + * 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 the <a href=':tour'>online documentation for the Tour module</a>.", [':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>.", [':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'] += [ + '#type' => 'toolbar_item', + 'tab' => [ + '#type' => 'html_tag', + '#tag' => 'button', + '#value' => t('Tour'), + '#attributes' => [ + 'class' => ['toolbar-icon', 'toolbar-icon-help'], + 'aria-pressed' => 'false', + 'type' => 'button', + ], + ], + '#wrapper_attributes' => [ + 'class' => ['tour-toolbar-tab', 'hidden'], + 'id' => 'toolbar-tab-tour', + ], + '#attached' => [ + 'library' => [ + '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 = Tour::loadMultiple(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(); +}