Mercurial > hg > isophonics-drupal-site
comparison core/modules/system/src/MachineNameController.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\system; | |
4 | |
5 use Drupal\Component\Transliteration\TransliterationInterface; | |
6 use Drupal\Component\Utility\Unicode; | |
7 use Drupal\Core\Access\CsrfTokenGenerator; | |
8 use Drupal\Core\DependencyInjection\ContainerInjectionInterface; | |
9 use Symfony\Component\HttpFoundation\JsonResponse; | |
10 use Symfony\Component\HttpFoundation\Request; | |
11 use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; | |
12 use Symfony\Component\DependencyInjection\ContainerInterface; | |
13 | |
14 /** | |
15 * Controller routines for machine name transliteration routes. | |
16 */ | |
17 class MachineNameController implements ContainerInjectionInterface { | |
18 | |
19 /** | |
20 * The transliteration helper. | |
21 * | |
22 * @var \Drupal\Component\Transliteration\TransliterationInterface | |
23 */ | |
24 protected $transliteration; | |
25 | |
26 /** | |
27 * The token generator. | |
28 * | |
29 * @var \Drupal\Core\Access\CsrfTokenGenerator | |
30 */ | |
31 protected $tokenGenerator; | |
32 | |
33 /** | |
34 * Constructs a MachineNameController object. | |
35 * | |
36 * @param \Drupal\Component\Transliteration\TransliterationInterface $transliteration | |
37 * The transliteration helper. | |
38 * @param \Drupal\Core\Access\CsrfTokenGenerator $token_generator | |
39 * The token generator. | |
40 */ | |
41 public function __construct(TransliterationInterface $transliteration, CsrfTokenGenerator $token_generator) { | |
42 $this->transliteration = $transliteration; | |
43 $this->tokenGenerator = $token_generator; | |
44 } | |
45 | |
46 /** | |
47 * {@inheritdoc} | |
48 */ | |
49 public static function create(ContainerInterface $container) { | |
50 return new static( | |
51 $container->get('transliteration'), | |
52 $container->get('csrf_token') | |
53 ); | |
54 } | |
55 | |
56 /** | |
57 * Transliterates a string in given language. Various postprocessing possible. | |
58 * | |
59 * @param \Symfony\Component\HttpFoundation\Request $request | |
60 * The input string and language for the transliteration. | |
61 * Optionally may contain the replace_pattern, replace, lowercase parameters. | |
62 * | |
63 * @return \Symfony\Component\HttpFoundation\JsonResponse | |
64 * The transliterated string. | |
65 */ | |
66 public function transliterate(Request $request) { | |
67 $text = $request->query->get('text'); | |
68 $langcode = $request->query->get('langcode'); | |
69 $replace_pattern = $request->query->get('replace_pattern'); | |
70 $replace_token = $request->query->get('replace_token'); | |
71 $replace = $request->query->get('replace'); | |
72 $lowercase = $request->query->get('lowercase'); | |
73 | |
74 $transliterated = $this->transliteration->transliterate($text, $langcode, '_'); | |
75 if ($lowercase) { | |
76 $transliterated = Unicode::strtolower($transliterated); | |
77 } | |
78 | |
79 if (isset($replace_pattern) && isset($replace)) { | |
80 if (!isset($replace_token)) { | |
81 throw new AccessDeniedHttpException("Missing 'replace_token' query parameter."); | |
82 } | |
83 elseif (!$this->tokenGenerator->validate($replace_token, $replace_pattern)) { | |
84 throw new AccessDeniedHttpException("Invalid 'replace_token' query parameter."); | |
85 } | |
86 | |
87 // Quote the pattern delimiter and remove null characters to avoid the e | |
88 // or other modifiers being injected. | |
89 $transliterated = preg_replace('@' . strtr($replace_pattern, ['@' => '\@', chr(0) => '']) . '@', $replace, $transliterated); | |
90 } | |
91 return new JsonResponse($transliterated); | |
92 } | |
93 | |
94 } |