2 declare(strict_types = 1);
94 'special' =>
'language',
95 'addQueryString' => 1,
96 'addQueryString.' => [
106 'doNotLinkIt' =>
'1',
107 'wrapItemAndSub' =>
'{|}, |*| {|}, |*| {|}',
111 '1' =>
'LOAD_REGISTER',
117 'data' =>
'register:languages_HMENU'
121 'data' =>
'register:count_HMENU_MENUOBJ',
132 'data' =>
'register:languageId'
134 'wrap' =>
'"languageId":|'
138 'userFunc' =>
'TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor->getFieldAsJson',
140 'data' =>
'register:languageId'
144 'wrap' =>
',"locale":|'
149 'userFunc' =>
'TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor->getFieldAsJson',
151 'data' =>
'register:languageId'
155 'wrap' =>
',"title":|'
160 'userFunc' =>
'TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor->getFieldAsJson',
162 'data' =>
'register:languageId'
164 'field' =>
'navigationTitle',
166 'wrap' =>
',"navigationTitle":|'
171 'userFunc' =>
'TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor->getFieldAsJson',
173 'data' =>
'register:languageId'
175 'field' =>
'twoLetterIsoCode',
177 'wrap' =>
',"twoLetterIsoCode":|'
182 'userFunc' =>
'TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor->getFieldAsJson',
184 'data' =>
'register:languageId'
186 'field' =>
'hreflang',
188 'wrap' =>
',"hreflang":|'
193 'userFunc' =>
'TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor->getFieldAsJson',
195 'data' =>
'register:languageId'
197 'field' =>
'direction',
199 'wrap' =>
',"direction":|'
205 'wrap' =>
',"link":|',
210 'wrap' =>
',"active":|'
215 'wrap' =>
',"current":|'
220 'wrap' =>
',"available":|'
222 '99' =>
'RESTORE_REGISTER'
231 'as' =>
'languagemenu'
249 $this->contentDataProcessor = GeneralUtility::makeInstance(ContentDataProcessor::class);
260 return $this->cObj->stdWrapValue($key, $this->processorConfiguration, $this->menuDefaults[$key]);
279 $matcher = GeneralUtility::makeInstance(SiteMatcher::class);
291 return json_encode($value, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE);
299 $invalidArguments = [];
300 foreach ($this->processorConfiguration as $key => $value) {
301 if (!in_array($key, $this->allowedConfigurationKeys)) {
302 $invalidArguments[str_replace(
'.',
'', $key)] = $key;
305 if (!empty($invalidArguments)) {
306 throw new \InvalidArgumentException(
'LanguageMenuProcessor configuration contains invalid arguments: ' . implode(
', ', $invalidArguments), 1522959188);
315 $this->menuConfig = array_merge($this->menuConfig, $this->processorConfiguration);
318 if (empty($this->menuConfig[
'languages']) && empty($this->menuConfig[
'languages.'])) {
319 $this->menuConfig[
'special.'][
'value'] =
'auto';
320 } elseif (!empty($this->menuConfig[
'languages.'])) {
321 $this->menuConfig[
'special.'][
'value'] = $this->cObj->stdWrap($this->menuConfig[
'languages'], $this->menuConfig[
'languages.']);
323 $this->menuConfig[
'special.'][
'value'] = $this->menuConfig[
'languages'];
327 foreach ($this->menuConfig as $key => $value) {
328 if (in_array($key, $this->removeConfigurationKeysForHmenu,
true)) {
329 unset($this->menuConfig[$key]);
335 (array)
$GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'additionalCanonicalizedUrlParameters']
338 $this->menuConfig[
'addQueryString.'][
'exclude'] = implode(
341 GeneralUtility::trimExplode(
',', $this->menuConfig[
'addQueryString.'][
'exclude'] ??
'',
true),
352 $this->menuConfig[
'1'] =
'TMENU';
353 $this->menuConfig[
'1.'][
'IProcFunc'] = LanguageMenuProcessor::class .
'->replacePlaceholderInRenderedMenuItem';
354 $this->menuConfig[
'1.'][
'NO'] =
'1';
356 $this->menuConfig[
'1.'][
'ACT'] = $this->menuConfig[
'1.'][
'NO'];
357 $this->menuConfig[
'1.'][
'ACT.'] = $this->menuConfig[
'1.'][
'NO.'];
358 $this->menuConfig[
'1.'][
'ACT.'][
'stdWrap.'][
'cObject.'][
'91.'][
'value'] =
'1';
359 $this->menuConfig[
'1.'][
'CUR'] = $this->menuConfig[
'1.'][
'ACT'];
360 $this->menuConfig[
'1.'][
'CUR.'] = $this->menuConfig[
'1.'][
'ACT.'];
361 $this->menuConfig[
'1.'][
'CUR.'][
'stdWrap.'][
'cObject.'][
'92.'][
'value'] =
'1';
362 $this->menuConfig[
'1.'][
'USERDEF1'] = $this->menuConfig[
'1.'][
'NO'];
363 $this->menuConfig[
'1.'][
'USERDEF1.'] = $this->menuConfig[
'1.'][
'NO.'];
364 $this->menuConfig[
'1.'][
'USERDEF1.'][
'stdWrap.'][
'cObject.'][
'93.'][
'value'] =
'0';
365 $this->menuConfig[
'1.'][
'USERDEF2'] = $this->menuConfig[
'1.'][
'ACT'];
366 $this->menuConfig[
'1.'][
'USERDEF2.'] = $this->menuConfig[
'1.'][
'ACT.'];
367 $this->menuConfig[
'1.'][
'USERDEF2.'][
'stdWrap.'][
'cObject.'][
'93.'][
'value'] =
'0';
403 $renderedMenu = $menuContentObject->
render($this->menuConfig);
406 $menu = json_decode($renderedMenu,
true);
409 foreach ($menu as $key => $language) {
410 $processedMenu[$key] = $language;
416 return $processedData;
427 $link = $this->
jsonEncode($menuItem[
'linkHREF'][
'HREF']);
429 $menuItem[
'parts'][
'title'] = str_replace(self::LINK_PLACEHOLDER, $link, $menuItem[
'parts'][
'title']);
446 if (isset($conf[
'language.'])) {
447 $conf[
'language'] = $this->cObj->stdWrap($conf[
'language'], $conf[
'language.']);
448 unset($conf[
'language.']);
450 if (isset($conf[
'field.'])) {
451 $conf[
'field'] = $this->cObj->stdWrap($conf[
'field'], $conf[
'field.']);
452 unset($conf[
'field.']);
456 if ($conf[
'language'] ===
'') {
457 throw new \InvalidArgumentException(
'Argument \'language\' must be supplied.', 1522959186);
459 if ($conf[
'field'] ===
'') {
460 throw new \InvalidArgumentException(
'Argument \'field\' must be supplied.', 1522959187);
467 $language = $site->getLanguageById((
int)$conf[
'language']);
468 if ($language->enabled()) {
469 $language = $language->toArray();
475 if ($language !==
null && !isset($language[$conf[
'field']])) {
476 throw new \InvalidArgumentException(
'Invalid value \'' . $conf[
'field'] .
'\' for argument \
'field\' supplied.', 1524063160);
479 return $this->
jsonEncode($language[$conf[
'field']]);