‪TYPO3CMS  11.5
TranslationStatusController.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
18 use Psr\Http\Message\ServerRequestInterface;
22 use TYPO3\CMS\Backend\Utility\BackendUtility;
31 use TYPO3\CMS\Core\Page\PageRenderer;
37 
43 {
46 
50  protected ‪$siteLanguages;
51 
55  protected ‪$pObj;
56 
60  protected ‪$id;
61 
63  {
64  $this->iconFactory = ‪$iconFactory;
65  $this->uriBuilder = ‪$uriBuilder;
66  }
67 
73  public function ‪init(‪InfoModuleController ‪$pObj, ServerRequestInterface $request)
74  {
75  $this->id = (int)($request->getParsedBody()['id'] ?? $request->getQueryParams()['id'] ?? 0);
76  $this->‪initializeSiteLanguages($request);
77  $this->pObj = ‪$pObj;
78 
79  // Setting MOD_MENU items as we need them for logging:
80  $this->pObj->MOD_MENU = array_merge($this->pObj->MOD_MENU, $this->modMenu());
81  }
82 
88  public function ‪main(ServerRequestInterface $request)
89  {
90  $theOutput = '<h1>' . htmlspecialchars($this->‪getLanguageService()->sL('LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_title')) . '</h1>';
91  if ($this->id) {
92  $this->‪getPageRenderer()->loadRequireJsModule('TYPO3/CMS/Info/TranslationStatus');
93 
94  $moduleMenu = '';
95 
96  foreach (['depth' => false, 'lang' => true] as $name => $addCsh) {
97  $menu = BackendUtility::getDropdownMenu($this->id, 'SET[' . $name . ']', $this->pObj->MOD_SETTINGS[$name], $this->pObj->MOD_MENU[$name]);
98  if ($menu !== '') {
99  $moduleMenu .= '
100  <div class="col">
101  <label class="form-label">' .
102  htmlspecialchars($this->‪getLanguageService()->sL('LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:moduleFunctions.' . $name)) .
103  '</label>' .
104  $menu .
105  '</div>';
106  if ($addCsh) {
107  $moduleMenu .= BackendUtility::cshItem('_MOD_web_info', $name, '', '<div class="col"><span class="btn btn-default btn-sm">|</span></div>');
108  }
109  }
110  }
111 
112  if ($moduleMenu !== '') {
113  $theOutput .= '<div class="row row-cols-auto mb-3 g-3 align-items-center">' . $moduleMenu . '</div>';
114  }
115 
116  // Showing the tree
117  $tree = $this->‪getTree();
118  // Render information table
119  $theOutput .= $this->‪renderL10nTable($tree, $request);
120  }
121  return $theOutput;
122  }
123 
124  protected function ‪getTree(): ‪PageTreeView
125  {
126  // Initialize starting point of page tree
127  $treeStartingPoint = ‪$this->id;
128  $treeStartingRecord = BackendUtility::getRecordWSOL('pages', $treeStartingPoint);
129  $depth = (int)$this->pObj->MOD_SETTINGS['depth'];
130  $tree = GeneralUtility::makeInstance(PageTreeView::class);
131  $tree->init('AND ' . $this->‪getBackendUser()->‪getPagePermsClause(‪Permission::PAGE_SHOW));
132  $tree->addField('l18n_cfg');
133  $tree->tree[] = [
134  'row' => $treeStartingRecord,
135  // Creating top icon; the current page
136  'HTML' => $this->iconFactory->getIconForRecord('pages', $treeStartingRecord, ‪Icon::SIZE_SMALL)->render(),
137  ];
138  // Create the tree from starting point
139  if ($depth) {
140  $tree->getTree($treeStartingPoint, $depth);
141  }
142  return $tree;
143  }
144 
150  protected function ‪modMenu()
151  {
152  $lang = $this->‪getLanguageService();
153  $menuArray = [
154  'depth' => [
155  0 => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_0'),
156  1 => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_1'),
157  2 => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_2'),
158  3 => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_3'),
159  4 => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_4'),
160  999 => $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_infi'),
161  ],
162  ];
163  // Languages:
164  $menuArray['lang'] = [];
165  foreach ($this->siteLanguages as $language) {
166  if ($language->getLanguageId() === 0) {
167  $menuArray['lang'][0] = '[All]';
168  } else {
169  $menuArray['lang'][$language->getLanguageId()] = $language->getTitle();
170  }
171  }
172  return $menuArray;
173  }
174 
182  protected function ‪renderL10nTable(PageTreeView $tree, ServerRequestInterface $request)
183  {
184  $lang = $this->‪getLanguageService();
185  // Title length:
186  $titleLen = $this->‪getBackendUser()->uc['titleLen'];
187  // Put together the TREE:
188  ‪$output = '';
189  $langRecUids = [];
190 
191  $userTsConfig = $this->‪getBackendUser()->‪getTSConfig();
192  $showPageId = !empty($userTsConfig['options.']['pageTree.']['showPageIdWithTitle']);
193 
194  // If another page module was specified, replace the default Page module with the new one
195  $pageModule = trim($this->‪getBackendUser()->getTSConfig()['options.']['overridePageModule'] ?? '');
196  $pageModule = BackendUtility::isModuleSetInTBE_MODULES($pageModule) ? $pageModule : 'web_layout';
197  $canLinkToPageModule = $this->‪getBackendUser()->‪check('modules', $pageModule);
198 
199  foreach ($tree->tree as $data) {
200  $tCells = [];
201  $langRecUids[0][] = $data['row']['uid'];
202  $pageTitle = ($showPageId ? '[' . (int)$data['row']['uid'] . '] ' : '') . GeneralUtility::fixed_lgd_cs($data['row']['title'], $titleLen);
203  // Page icons / titles etc.
204  if ($canLinkToPageModule) {
205  $pageModuleLink = (string)$this->uriBuilder->buildUriFromRoute($pageModule, ['id' => $data['row']['uid'], 'SET' => ['language' => 0]]);
206  $pageModuleLink = '<a href="' . htmlspecialchars($pageModuleLink) . '" title="' . $lang->sL('LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_editPage') . '">' . htmlspecialchars($pageTitle) . '</a>';
207  } else {
208  $pageModuleLink = htmlspecialchars($pageTitle);
209  }
210 
211  $tCells[] = '<td' . (!empty($data['row']['_CSSCLASS']) ? ' class="' . $data['row']['_CSSCLASS'] . '"' : '') . '>' .
212  (!empty($data['depthData']) ? $data['depthData'] : '') .
213  BackendUtility::wrapClickMenuOnIcon($data['HTML'], 'pages', $data['row']['uid']) .
214  $pageModuleLink .
215  ((string)$data['row']['nav_title'] !== '' ? ' [Nav: <em>' . htmlspecialchars(GeneralUtility::fixed_lgd_cs($data['row']['nav_title'], $titleLen)) . '</em>]' : '') .
216  '</td>';
217  $previewUriBuilder = ‪PreviewUriBuilder::create((int)$data['row']['uid']);
218  // DEFAULT language:
219  $pageTranslationVisibility = new PageTranslationVisibility((int)($data['row']['l18n_cfg'] ?? 0));
220  $status = $pageTranslationVisibility->shouldBeHiddenInDefaultLanguage() ? 'danger' : 'success';
221  // Create links:
222  $editUrl = (string)$this->uriBuilder->buildUriFromRoute('record_edit', [
223  'edit' => [
224  'pages' => [
225  $data['row']['uid'] => 'edit',
226  ],
227  ],
228  'returnUrl' => $request->getAttribute('normalizedParams')->getRequestUri(),
229  ]);
230  $info = '<a href="#" ' . $previewUriBuilder->serializeDispatcherAttributes()
231  . ' class="btn btn-default" title="' . $lang->sL('LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_viewPage') . '">' .
232  $this->iconFactory->getIcon('actions-view-page', ‪Icon::SIZE_SMALL)->render() . '</a>';
233  if ($this->‪getBackendUser()->‪check('tables_modify', 'pages')) {
234  $info .= '<a href="' . htmlspecialchars($editUrl)
235  . '" class="btn btn-default" title="' . $lang->sL(
236  'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_editDefaultLanguagePage'
237  ) . '">' . $this->iconFactory->getIcon('actions-page-open', ‪Icon::SIZE_SMALL)->render() . '</a>';
238  }
239  $info .= '&nbsp;';
240  $info .= $pageTranslationVisibility->shouldBeHiddenInDefaultLanguage() ? '<span title="' . htmlspecialchars($lang->sL('LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.l18n_cfg.I.1')) . '">D</span>' : '&nbsp;';
241  $info .= $pageTranslationVisibility->shouldHideTranslationIfNoTranslatedRecordExists() ? '<span title="' . htmlspecialchars($lang->sL('LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.l18n_cfg.I.2')) . '">N</span>' : '&nbsp;';
242  // Put into cell:
243  $tCells[] = '<td class="' . $status . ' col-border-left"><div class="btn-group">' . $info . '</div></td>';
244  $tCells[] = '<td class="' . $status . '" title="' . $lang->sL(
245  'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_CEcount'
246  ) . '" align="center">' . $this->‪getContentElementCount($data['row']['uid'], 0) . '</td>';
247  // Traverse system languages:
248  foreach ($this->siteLanguages as $siteLanguage) {
249  $languageId = $siteLanguage->getLanguageId();
250  if ($languageId === 0) {
251  continue;
252  }
253  if ($this->pObj->MOD_SETTINGS['lang'] == 0 || (int)$this->pObj->MOD_SETTINGS['lang'] === $languageId) {
254  $row = $this->‪getLangStatus($data['row']['uid'], $languageId);
255  if ($pageTranslationVisibility->shouldBeHiddenInDefaultLanguage() || $pageTranslationVisibility->shouldHideTranslationIfNoTranslatedRecordExists()) {
256  $status = 'danger';
257  } else {
258  $status = '';
259  }
260  if (is_array($row)) {
261  $langRecUids[$languageId][] = $row['uid'];
262  if (!$row['_HIDDEN']) {
263  $status = 'success';
264  }
265  $info = ($showPageId ? ' [' . (int)$row['uid'] . ']' : '') . ' ' . htmlspecialchars(
266  GeneralUtility::fixed_lgd_cs($row['title'], $titleLen)
267  ) . ((string)$row['nav_title'] !== '' ? ' [Nav: <em>' . htmlspecialchars(
268  GeneralUtility::fixed_lgd_cs($row['nav_title'], $titleLen)
269  ) . '</em>]' : '') . ($row['_COUNT'] > 1 ? '<div>' . $lang->sL(
270  'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_badThingThereAre'
271  ) . '</div>' : '');
272 
273  if ($canLinkToPageModule) {
274  $pageModuleLink = (string)$this->uriBuilder->buildUriFromRoute($pageModule, ['id' => $data['row']['uid'], 'SET' => ['language' => $languageId]]);
275  $pageModuleLink = '<a href="' . htmlspecialchars($pageModuleLink) . '" title="' . $lang->sL('LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_editPageLang') . '">' . $info . '</a>';
276  } else {
277  $pageModuleLink = $info;
278  }
279  $tCells[] = '<td class="' . $status . ' col-border-left">' .
280  BackendUtility::wrapClickMenuOnIcon($tree->getIcon($row), 'pages', (int)$row['uid']) .
281  $pageModuleLink .
282  '</td>';
283  // Edit whole record:
284  // Create links:
285  $editUrl = (string)$this->uriBuilder->buildUriFromRoute('record_edit', [
286  'edit' => [
287  'pages' => [
288  $row['uid'] => 'edit',
289  ],
290  ],
291  'returnUrl' => $request->getAttribute('normalizedParams')->getRequestUri(),
292  ]);
293  // ViewPageLink
294  $info = '<a href="#" ' . $previewUriBuilder
295  ->withAdditionalQueryParameters('&L=' . $languageId)
296  ->serializeDispatcherAttributes()
297  . ' class="btn btn-default" title="' . $lang->sL('LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_viewPage') . '">' .
298  $this->iconFactory->getIcon('actions-view', ‪Icon::SIZE_SMALL)->render() . '</a>';
299  $info .= '<a href="' . htmlspecialchars($editUrl)
300  . '" class="btn btn-default" title="' . $lang->sL(
301  'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_editLanguageOverlayRecord'
302  ) . '">' . $this->iconFactory->getIcon('actions-open', ‪Icon::SIZE_SMALL)->render() . '</a>';
303  $tCells[] = '<td class="' . $status . '"><div class="btn-group">' . $info . '</div></td>';
304  $tCells[] = '<td class="' . $status . '" title="' . $lang->sL(
305  'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_CEcount'
306  ) . '" align="center">' . $this->‪getContentElementCount($data['row']['uid'], $languageId) . '</td>';
307  } else {
308  $info = '<div class="btn-group"><label class="btn btn-default btn-checkbox">';
309  $info .= '<input type="checkbox" data-lang="' . $languageId . '" data-uid="' . (int)$data['row']['uid'] . '" name="newOL[' . $languageId . '][' . $data['row']['uid'] . ']" value="1" />';
310  $info .= '<span class="t3-icon fa"></span></label></div>';
311  $tCells[] = '<td class="' . $status . ' col-border-left">&nbsp;</td>';
312  $tCells[] = '<td class="' . $status . '">&nbsp;</td>';
313  $tCells[] = '<td class="' . $status . '">' . $info . '</td>';
314  }
315  }
316  }
317  ‪$output .= '
318  <tr>
319  ' . implode('
320  ', $tCells) . '
321  </tr>';
322  }
323  // Put together HEADER:
324  $headerCells = [];
325  $headerCells[] = '<th>' . $lang->sL('LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_page') . '</th>';
326  if ($this->‪getBackendUser()->check('tables_modify', 'pages') && is_array($langRecUids[0])) {
327  $editUrl = (string)$this->uriBuilder->buildUriFromRoute('record_edit', [
328  'edit' => [
329  'pages' => [
330  implode(',', $langRecUids[0]) => 'edit',
331  ],
332  ],
333  'columnsOnly' => 'title,nav_title,l18n_cfg,hidden',
334  'returnUrl' => $request->getAttribute('normalizedParams')->getRequestUri(),
335  ]);
336  $editIco = '<a href="' . htmlspecialchars($editUrl)
337  . '" class="btn btn-default" title="' . $lang->sL(
338  'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_editPageProperties'
339  ) . '">' . $this->iconFactory->getIcon('actions-document-open', ‪Icon::SIZE_SMALL)->render() . '</a>';
340  } else {
341  $editIco = '';
342  }
343  if (isset($this->siteLanguages[0])) {
344  $defaultLanguageLabel = $this->siteLanguages[0]->getTitle();
345  } else {
346  $defaultLanguageLabel = $lang->sL('LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_default');
347  }
348  $headerCells[] = '<th class="col-border-left" colspan="2">' . htmlspecialchars($defaultLanguageLabel) . '&nbsp;' . $editIco . '</th>';
349  foreach ($this->siteLanguages as $siteLanguage) {
350  $languageId = $siteLanguage->getLanguageId();
351  if ($languageId === 0) {
352  continue;
353  }
354  if ($this->pObj->MOD_SETTINGS['lang'] == 0 || (int)$this->pObj->MOD_SETTINGS['lang'] === $languageId) {
355  // Title:
356  $headerCells[] = '<th class="col-border-left">' . htmlspecialchars($siteLanguage->getTitle()) . '</th>';
357  // Edit language overlay records:
358  if (is_array($langRecUids[$languageId] ?? null)) {
359  $editUrl = (string)$this->uriBuilder->buildUriFromRoute('record_edit', [
360  'edit' => [
361  'pages' => [
362  implode(',', $langRecUids[$languageId]) => 'edit',
363  ],
364  ],
365  'columnsOnly' => 'title,nav_title,hidden',
366  'returnUrl' => $request->getAttribute('normalizedParams')->getRequestUri(),
367  ]);
368  $editButton = '<a href="' . htmlspecialchars($editUrl)
369  . '" class="btn btn-default" title="' . $lang->sL(
370  'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_renderl10n_editLangOverlays'
371  ) . '">' . $this->iconFactory->getIcon('actions-document-open', ‪Icon::SIZE_SMALL)->render() . '</a>';
372  } else {
373  $editButton = '';
374  }
375  // Create new overlay records:
376  $createLink = (string)$this->uriBuilder->buildUriFromRoute('tce_db', [
377  'redirect' => $request->getAttribute('normalizedParams')->getRequestUri(),
378  ]);
379  $newButton = '<a href="' . htmlspecialchars($createLink) . '" data-edit-url="' . htmlspecialchars($createLink) . '" class="btn btn-default disabled t3js-language-new-' . $languageId . '" title="' . $lang->sL(
380  'LLL:EXT:info/Resources/Private/Language/locallang_webinfo.xlf:lang_getlangsta_createNewTranslationHeaders'
381  ) . '">' . $this->iconFactory->getIcon('actions-document-new', ‪Icon::SIZE_SMALL)->render() . '</a>';
382 
383  $headerCells[] = '<th>' . $editButton . '</th>';
384  $headerCells[] = '<th>' . $newButton . '</th>';
385  }
386  }
387 
388  ‪$output =
389  '<div class="table-fit">' .
390  '<table class="table table-striped table-hover" id="langTable">' .
391  '<thead>' .
392  '<tr>' .
393  implode('', $headerCells) .
394  '</tr>' .
395  '</thead>' .
396  '<tbody>' .
397  ‪$output .
398  '</tbody>' .
399  '</table>' .
400  '</div>';
401  return ‪$output;
402  }
403 
411  protected function ‪getLangStatus($pageId, $langId)
412  {
413  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
414  ->getQueryBuilderForTable('pages');
415  $queryBuilder
416  ->getRestrictions()
417  ->removeAll()
418  ->add(GeneralUtility::makeInstance(WorkspaceRestriction::class, (int)$this->‪getBackendUser()->workspace))
419  ->add(GeneralUtility::makeInstance(DeletedRestriction::class));
420  $result = $queryBuilder
421  ->select('*')
422  ->from('pages')
423  ->where(
424  $queryBuilder->expr()->eq(
425  ‪$GLOBALS['TCA']['pages']['ctrl']['transOrigPointerField'],
426  $queryBuilder->createNamedParameter($pageId, ‪Connection::PARAM_INT)
427  )
428  )
429  ->andWhere(
430  $queryBuilder->expr()->eq(
431  ‪$GLOBALS['TCA']['pages']['ctrl']['languageField'],
432  $queryBuilder->createNamedParameter($langId, ‪Connection::PARAM_INT)
433  )
434  )
435  ->executeQuery();
436 
437  $row = $result->fetchAssociative();
438  BackendUtility::workspaceOL('pages', $row);
439  if (is_array($row)) {
440  $row['_COUNT'] = $queryBuilder->count('uid')->executeQuery()->fetchOne();
441  $row['_HIDDEN'] = $row['hidden'] || (int)$row['endtime'] > 0 && (int)$row['endtime'] < ‪$GLOBALS['EXEC_TIME'] || ‪$GLOBALS['EXEC_TIME'] < (int)$row['starttime'];
442  }
443  $result->free();
444  return $row;
445  }
446 
454  protected function ‪getContentElementCount($pageId, $sysLang)
455  {
456  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
457  ->getQueryBuilderForTable('tt_content');
458  $queryBuilder->getRestrictions()
459  ->removeAll()
460  ->add(GeneralUtility::makeInstance(DeletedRestriction::class))
461  ->add(GeneralUtility::makeInstance(WorkspaceRestriction::class, (int)$this->‪getBackendUser()->workspace));
462  $count = $queryBuilder
463  ->count('uid')
464  ->from('tt_content')
465  ->where(
466  $queryBuilder->expr()->eq(
467  'pid',
468  $queryBuilder->createNamedParameter($pageId, ‪Connection::PARAM_INT)
469  )
470  )
471  ->andWhere(
472  $queryBuilder->expr()->eq(
473  'sys_language_uid',
474  $queryBuilder->createNamedParameter($sysLang, ‪Connection::PARAM_INT)
475  )
476  )
477  ->executeQuery()
478  ->fetchOne();
479  return $count ?: '-';
480  }
481 
486  protected function ‪initializeSiteLanguages(ServerRequestInterface $request)
487  {
489  $currentSite = $request->getAttribute('site');
490  $this->siteLanguages = $currentSite->getAvailableLanguages($this->‪getBackendUser(), false, (int)$this->id);
491  }
492 
496  protected function ‪getLanguageService(): LanguageService
497  {
498  return ‪$GLOBALS['LANG'];
499  }
500 
506  protected function ‪getBackendUser(): BackendUserAuthentication
507  {
508  return ‪$GLOBALS['BE_USER'];
509  }
510 
514  protected function ‪getPageRenderer(): PageRenderer
515  {
516  return GeneralUtility::makeInstance(PageRenderer::class);
517  }
518 }
‪TYPO3\CMS\Core\Imaging\Icon\SIZE_SMALL
‪const SIZE_SMALL
Definition: Icon.php:30
‪TYPO3\CMS\Info\Controller\InfoModuleController
Definition: InfoModuleController.php:45
‪TYPO3\CMS\Core\Site\Entity\SiteInterface
Definition: SiteInterface.php:26
‪TYPO3\CMS\Core\Database\Connection\PARAM_INT
‪const PARAM_INT
Definition: Connection.php:49
‪TYPO3\CMS\Info\Controller\TranslationStatusController
Definition: TranslationStatusController.php:43
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication\getPagePermsClause
‪string getPagePermsClause($perms)
Definition: BackendUserAuthentication.php:460
‪TYPO3\CMS\Backend\Routing\PreviewUriBuilder\create
‪static static create(int $pageId, string $alternativeUri=null)
Definition: PreviewUriBuilder.php:75
‪TYPO3\CMS\Core\Imaging\Icon
Definition: Icon.php:26
‪TYPO3\CMS\Info\Controller\TranslationStatusController\getPageRenderer
‪PageRenderer getPageRenderer()
Definition: TranslationStatusController.php:512
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication\getTSConfig
‪array getTSConfig()
Definition: BackendUserAuthentication.php:1000
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication\check
‪bool check($type, $value)
Definition: BackendUserAuthentication.php:585
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:34
‪TYPO3\CMS\Core\Type\Bitmask\PageTranslationVisibility
Definition: PageTranslationVisibility.php:30
‪TYPO3\CMS\Info\Controller\TranslationStatusController\renderL10nTable
‪string renderL10nTable(PageTreeView $tree, ServerRequestInterface $request)
Definition: TranslationStatusController.php:180
‪TYPO3\CMS\Backend\Tree\View\PageTreeView
Definition: PageTreeView.php:24
‪TYPO3\CMS\Info\Controller\TranslationStatusController\getLanguageService
‪LanguageService getLanguageService()
Definition: TranslationStatusController.php:494
‪TYPO3\CMS\Info\Controller\TranslationStatusController\$siteLanguages
‪SiteLanguage[] $siteLanguages
Definition: TranslationStatusController.php:49
‪TYPO3\CMS\Core\Type\Bitmask\Permission
Definition: Permission.php:26
‪TYPO3\CMS\Core\Site\Entity\SiteLanguage
Definition: SiteLanguage.php:26
‪TYPO3\CMS\Info\Controller\TranslationStatusController\$id
‪$id
Definition: TranslationStatusController.php:58
‪TYPO3\CMS\Info\Controller\TranslationStatusController\getLangStatus
‪array getLangStatus($pageId, $langId)
Definition: TranslationStatusController.php:409
‪TYPO3\CMS\Info\Controller\TranslationStatusController\$uriBuilder
‪UriBuilder $uriBuilder
Definition: TranslationStatusController.php:45
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:40
‪TYPO3\CMS\Info\Controller\TranslationStatusController\modMenu
‪array modMenu()
Definition: TranslationStatusController.php:148
‪TYPO3\CMS\Info\Controller\TranslationStatusController\$iconFactory
‪IconFactory $iconFactory
Definition: TranslationStatusController.php:44
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Core\Type\Bitmask\Permission\PAGE_SHOW
‪const PAGE_SHOW
Definition: Permission.php:35
‪TYPO3\CMS\Info\Controller\TranslationStatusController\init
‪init(InfoModuleController $pObj, ServerRequestInterface $request)
Definition: TranslationStatusController.php:71
‪TYPO3\CMS\Info\Controller\TranslationStatusController\getContentElementCount
‪int getContentElementCount($pageId, $sysLang)
Definition: TranslationStatusController.php:452
‪TYPO3\CMS\Info\Controller\TranslationStatusController\getTree
‪getTree()
Definition: TranslationStatusController.php:122
‪$output
‪$output
Definition: annotationChecker.php:121
‪TYPO3\CMS\Core\Database\Connection
Definition: Connection.php:38
‪TYPO3\CMS\Info\Controller\TranslationStatusController\getBackendUser
‪BackendUserAuthentication getBackendUser()
Definition: TranslationStatusController.php:504
‪TYPO3\CMS\Backend\Tree\View\AbstractTreeView\getIcon
‪string getIcon($row)
Definition: AbstractTreeView.php:323
‪TYPO3\CMS\Info\Controller\TranslationStatusController\__construct
‪__construct(IconFactory $iconFactory, UriBuilder $uriBuilder)
Definition: TranslationStatusController.php:60
‪TYPO3\CMS\Info\Controller\TranslationStatusController\main
‪string main(ServerRequestInterface $request)
Definition: TranslationStatusController.php:86
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction
Definition: DeletedRestriction.php:28
‪TYPO3\CMS\Backend\Routing\PreviewUriBuilder
Definition: PreviewUriBuilder.php:32
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Info\Controller\TranslationStatusController\initializeSiteLanguages
‪initializeSiteLanguages(ServerRequestInterface $request)
Definition: TranslationStatusController.php:484
‪TYPO3\CMS\Info\Controller\TranslationStatusController\$pObj
‪InfoModuleController $pObj
Definition: TranslationStatusController.php:53
‪TYPO3\CMS\Info\Controller
Definition: InfoModuleController.php:16
‪TYPO3\CMS\Core\Database\Query\Restriction\WorkspaceRestriction
Definition: WorkspaceRestriction.php:40