annotate core/modules/path/src/Controller/PathController.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents c2387f117808
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\path\Controller;
Chris@0 4
Chris@0 5 use Drupal\Component\Utility\Unicode;
Chris@0 6 use Drupal\Core\Controller\ControllerBase;
Chris@0 7 use Drupal\Core\Path\AliasStorageInterface;
Chris@0 8 use Drupal\Core\Path\AliasManagerInterface;
Chris@0 9 use Drupal\Core\Url;
Chris@0 10 use Symfony\Component\DependencyInjection\ContainerInterface;
Chris@0 11 use Symfony\Component\HttpFoundation\Request;
Chris@0 12
Chris@0 13 /**
Chris@0 14 * Controller routines for path routes.
Chris@0 15 */
Chris@0 16 class PathController extends ControllerBase {
Chris@0 17
Chris@0 18 /**
Chris@0 19 * The path alias storage.
Chris@0 20 *
Chris@0 21 * @var \Drupal\Core\Path\AliasStorageInterface
Chris@0 22 */
Chris@0 23 protected $aliasStorage;
Chris@0 24
Chris@0 25 /**
Chris@0 26 * The path alias manager.
Chris@0 27 *
Chris@0 28 * @var \Drupal\Core\Path\AliasManagerInterface
Chris@0 29 */
Chris@0 30 protected $aliasManager;
Chris@0 31
Chris@0 32 /**
Chris@0 33 * Constructs a new PathController.
Chris@0 34 *
Chris@0 35 * @param \Drupal\Core\Path\AliasStorageInterface $alias_storage
Chris@0 36 * The path alias storage.
Chris@0 37 * @param \Drupal\Core\Path\AliasManagerInterface $alias_manager
Chris@0 38 * The path alias manager.
Chris@0 39 */
Chris@0 40 public function __construct(AliasStorageInterface $alias_storage, AliasManagerInterface $alias_manager) {
Chris@0 41 $this->aliasStorage = $alias_storage;
Chris@0 42 $this->aliasManager = $alias_manager;
Chris@0 43 }
Chris@0 44
Chris@0 45 /**
Chris@0 46 * {@inheritdoc}
Chris@0 47 */
Chris@0 48 public static function create(ContainerInterface $container) {
Chris@0 49 return new static(
Chris@0 50 $container->get('path.alias_storage'),
Chris@0 51 $container->get('path.alias_manager')
Chris@0 52 );
Chris@0 53 }
Chris@0 54
Chris@0 55 /**
Chris@0 56 * Displays the path administration overview page.
Chris@0 57 *
Chris@0 58 * @param \Symfony\Component\HttpFoundation\Request $request
Chris@0 59 * The request object.
Chris@0 60 *
Chris@0 61 * @return array
Chris@16 62 * A render array as expected by
Chris@16 63 * \Drupal\Core\Render\RendererInterface::render().
Chris@0 64 */
Chris@0 65 public function adminOverview(Request $request) {
Chris@0 66 $keys = $request->query->get('search');
Chris@0 67 // Add the filter form above the overview table.
Chris@0 68 $build['path_admin_filter_form'] = $this->formBuilder()->getForm('Drupal\path\Form\PathFilterForm', $keys);
Chris@0 69 // Enable language column if language.module is enabled or if we have any
Chris@0 70 // alias with a language.
Chris@0 71 $multilanguage = ($this->moduleHandler()->moduleExists('language') || $this->aliasStorage->languageAliasExists());
Chris@0 72
Chris@0 73 $header = [];
Chris@0 74 $header[] = ['data' => $this->t('Alias'), 'field' => 'alias', 'sort' => 'asc'];
Chris@0 75 $header[] = ['data' => $this->t('System'), 'field' => 'source'];
Chris@0 76 if ($multilanguage) {
Chris@0 77 $header[] = ['data' => $this->t('Language'), 'field' => 'langcode'];
Chris@0 78 }
Chris@0 79 $header[] = $this->t('Operations');
Chris@0 80
Chris@0 81 $rows = [];
Chris@0 82 $destination = $this->getDestinationArray();
Chris@0 83 foreach ($this->aliasStorage->getAliasesForAdminListing($header, $keys) as $data) {
Chris@0 84 $row = [];
Chris@0 85 // @todo Should Path module store leading slashes? See
Chris@0 86 // https://www.drupal.org/node/2430593.
Chris@0 87 $row['data']['alias'] = $this->l(Unicode::truncate($data->alias, 50, FALSE, TRUE), Url::fromUserInput($data->source, [
Chris@0 88 'attributes' => ['title' => $data->alias],
Chris@0 89 ]));
Chris@0 90 $row['data']['source'] = $this->l(Unicode::truncate($data->source, 50, FALSE, TRUE), Url::fromUserInput($data->source, [
Chris@0 91 'alias' => TRUE,
Chris@0 92 'attributes' => ['title' => $data->source],
Chris@0 93 ]));
Chris@0 94 if ($multilanguage) {
Chris@0 95 $row['data']['language_name'] = $this->languageManager()->getLanguageName($data->langcode);
Chris@0 96 }
Chris@0 97
Chris@0 98 $operations = [];
Chris@0 99 $operations['edit'] = [
Chris@0 100 'title' => $this->t('Edit'),
Chris@0 101 'url' => Url::fromRoute('path.admin_edit', ['pid' => $data->pid], ['query' => $destination]),
Chris@0 102 ];
Chris@0 103 $operations['delete'] = [
Chris@0 104 'title' => $this->t('Delete'),
Chris@0 105 'url' => Url::fromRoute('path.delete', ['pid' => $data->pid], ['query' => $destination]),
Chris@0 106 ];
Chris@0 107 $row['data']['operations'] = [
Chris@0 108 'data' => [
Chris@0 109 '#type' => 'operations',
Chris@0 110 '#links' => $operations,
Chris@0 111 ],
Chris@0 112 ];
Chris@0 113
Chris@0 114 // If the system path maps to a different URL alias, highlight this table
Chris@0 115 // row to let the user know of old aliases.
Chris@0 116 if ($data->alias != $this->aliasManager->getAliasByPath($data->source, $data->langcode)) {
Chris@0 117 $row['class'] = ['warning'];
Chris@0 118 }
Chris@0 119
Chris@0 120 $rows[] = $row;
Chris@0 121 }
Chris@0 122
Chris@0 123 $build['path_table'] = [
Chris@0 124 '#type' => 'table',
Chris@0 125 '#header' => $header,
Chris@0 126 '#rows' => $rows,
Chris@0 127 '#empty' => $this->t('No URL aliases available. <a href=":link">Add URL alias</a>.', [':link' => $this->url('path.admin_add')]),
Chris@0 128 ];
Chris@0 129 $build['path_pager'] = ['#type' => 'pager'];
Chris@0 130
Chris@0 131 return $build;
Chris@0 132 }
Chris@0 133
Chris@0 134 }