‪TYPO3CMS  11.5
DatabaseIntegrityController.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 Doctrine\DBAL\Platforms\MySqlPlatform;
19 use Psr\Http\Message\ResponseInterface;
20 use Psr\Http\Message\ServerRequestInterface;
25 use TYPO3\CMS\Backend\Utility\BackendUtility;
34 use TYPO3\CMS\Core\Page\PageRenderer;
41 
47 {
51  protected ‪$formName = 'queryform';
52 
58  protected ‪$moduleName = 'system_dbint';
59 
63  protected ‪$view;
64 
68  protected ‪$templatePath = 'EXT:lowlevel/Resources/Private/Templates/Backend/';
69 
75  protected ‪$moduleTemplate;
76 
83  protected ‪$MOD_MENU = [
84  'function' => [],
85  ];
86 
92  protected ‪$MOD_SETTINGS = [];
93 
95  protected PageRenderer ‪$pageRenderer;
96  protected ‪UriBuilder ‪$uriBuilder;
98 
99  public function ‪__construct(
101  PageRenderer ‪$pageRenderer,
104  ) {
105  $this->iconFactory = ‪$iconFactory;
106  $this->pageRenderer = ‪$pageRenderer;
107  $this->uriBuilder = ‪$uriBuilder;
108  $this->moduleTemplateFactory = ‪$moduleTemplateFactory;
109  }
110 
118  public function ‪mainAction(ServerRequestInterface $request): ResponseInterface
119  {
120  $this->‪getLanguageService()->‪includeLLFile('EXT:lowlevel/Resources/Private/Language/locallang.xlf');
121  $this->view = GeneralUtility::makeInstance(StandaloneView::class);
122  $this->view->getRequest()->setControllerExtensionName('lowlevel');
123 
124  $this->‪menuConfig();
125  $this->moduleTemplate = $this->moduleTemplateFactory->create($request);
126 
127  switch ($this->MOD_SETTINGS['function']) {
128  case 'search':
129  $title = $this->‪getLanguageService()->‪getLL('fullSearch');
130  $templateFilename = 'CustomSearch.html';
131  $this->‪func_search();
132  break;
133  case 'records':
134  $title = $this->‪getLanguageService()->‪getLL('recordStatistics');
135  $templateFilename = 'RecordStatistics.html';
136  $this->‪func_records();
137  break;
138  case 'relations':
139  $title = $this->‪getLanguageService()->‪getLL('databaseRelations');
140  $templateFilename = 'Relations.html';
141  $this->‪func_relations();
142  break;
143  case 'refindex':
144  $title = $this->‪getLanguageService()->‪getLL('manageRefIndex');
145  $templateFilename = 'ReferenceIndex.html';
146  $this->‪func_refindex();
147  break;
148  default:
149  $title = $this->‪getLanguageService()->‪getLL('menuTitle');
150  $templateFilename = 'IntegrityOverview.html';
151  $this->‪func_default();
152  }
153  $this->view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($this->templatePath . $templateFilename));
154  $content = '<form action="" method="post" id="DatabaseIntegrityView" name="' . $this->formName . '">';
155  $content .= $this->view->render();
156  $content .= '</form>';
157 
158  // Setting up the shortcut button for docheader
159  $buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
160  // Shortcut
161  $shortCutButton = $buttonBar->makeShortcutButton()
162  ->setRouteIdentifier($this->moduleName)
163  ->setDisplayName($this->MOD_MENU['function'][$this->MOD_SETTINGS['function']])
164  ->setArguments([
165  'SET' => [
166  'function' => $this->MOD_SETTINGS['function'] ?? '',
167  'search' => $this->MOD_SETTINGS['search'] ?? 'raw',
168  'search_query_makeQuery' => $this->MOD_SETTINGS['search_query_makeQuery'] ?? '',
169  ],
170  ]);
171  $buttonBar->addButton($shortCutButton, ‪ButtonBar::BUTTON_POSITION_RIGHT, 2);
172 
173  $this->‪getModuleMenu();
174 
175  $this->moduleTemplate->setContent($content);
176  $this->moduleTemplate->setTitle(
177  $this->‪getLanguageService()->sL('LLL:EXT:lowlevel/Resources/Private/Language/locallang_mod.xlf:mlang_tabs_tab'),
178  $title
179  );
180  return new ‪HtmlResponse($this->moduleTemplate->renderContent());
181  }
182 
186  protected function ‪menuConfig()
187  {
188  $lang = $this->‪getLanguageService();
189  // MENU-ITEMS:
190  // If array, then it's a selector box menu
191  // If empty string it's just a variable, that'll be saved.
192  // Values NOT in this array will not be saved in the settings-array for the module.
193  $this->MOD_MENU = [
194  'function' => [
195  0 => htmlspecialchars($lang->getLL('menuTitle')),
196  'records' => htmlspecialchars($lang->getLL('recordStatistics')),
197  'relations' => htmlspecialchars($lang->getLL('databaseRelations')),
198  'search' => htmlspecialchars($lang->getLL('fullSearch')),
199  'refindex' => htmlspecialchars($lang->getLL('manageRefIndex')),
200  ],
201  'search' => [
202  'raw' => htmlspecialchars($lang->getLL('rawSearch')),
203  'query' => htmlspecialchars($lang->getLL('advancedQuery')),
204  ],
205  'search_query_smallparts' => '',
206  'search_result_labels' => '',
207  'labels_noprefix' => '',
208  'options_sortlabel' => '',
209  'show_deleted' => '',
210  'queryConfig' => '',
211  // Current query
212  'queryTable' => '',
213  // Current table
214  'queryFields' => '',
215  // Current tableFields
216  'queryLimit' => '',
217  // Current limit
218  'queryOrder' => '',
219  // Current Order field
220  'queryOrderDesc' => '',
221  // Current Order field descending flag
222  'queryOrder2' => '',
223  // Current Order2 field
224  'queryOrder2Desc' => '',
225  // Current Order2 field descending flag
226  'queryGroup' => '',
227  // Current Group field
228  'storeArray' => '',
229  // Used to store the available Query config memory banks
230  'storeQueryConfigs' => '',
231  // Used to store the available Query configs in memory
232  'search_query_makeQuery' => [
233  'all' => htmlspecialchars($lang->getLL('selectRecords')),
234  'count' => htmlspecialchars($lang->getLL('countResults')),
235  'explain' => htmlspecialchars($lang->getLL('explainQuery')),
236  'csv' => htmlspecialchars($lang->getLL('csvExport')),
237  ],
238  'sword' => '',
239  ];
240 
241  // EXPLAIN is no ANSI SQL, for now this is only executed on mysql
242  $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionByName(‪ConnectionPool::DEFAULT_CONNECTION_NAME);
243  if (!$connection->getDatabasePlatform() instanceof MySQLPlatform) {
244  unset($this->MOD_MENU['search_query_makeQuery']['explain']);
245  }
246 
247  // CLEAN SETTINGS
248  $OLD_MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, [], $this->moduleName, 'ses');
249  $this->MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, GeneralUtility::_GP('SET'), $this->moduleName, 'ses');
250  if (GeneralUtility::_GP('queryConfig')) {
251  $qA = GeneralUtility::_GP('queryConfig');
252  $this->MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, ['queryConfig' => serialize($qA)], $this->moduleName, 'ses');
253  }
254  $addConditionCheck = GeneralUtility::_GP('qG_ins');
255  $setLimitToStart = false;
256  foreach ($OLD_MOD_SETTINGS as $key => $val) {
257  if (strpos($key, 'query') === 0 && $this->MOD_SETTINGS[$key] != $val && $key !== 'queryLimit' && $key !== 'use_listview') {
258  $setLimitToStart = true;
259  if ($key === 'queryTable' && !$addConditionCheck) {
260  $this->MOD_SETTINGS['queryConfig'] = '';
261  }
262  }
263  if ($key === 'queryTable' && $this->MOD_SETTINGS[$key] != $val) {
264  $this->MOD_SETTINGS['queryFields'] = '';
265  }
266  }
267  if ($setLimitToStart) {
268  $currentLimit = explode(',', $this->MOD_SETTINGS['queryLimit']);
269  if (!empty($currentLimit[1] ?? 0)) {
270  $this->MOD_SETTINGS['queryLimit'] = '0,' . $currentLimit[1];
271  } else {
272  $this->MOD_SETTINGS['queryLimit'] = '0';
273  }
274  $this->MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, $this->MOD_SETTINGS, $this->moduleName, 'ses');
275  }
276  }
277 
281  protected function ‪getModuleMenu()
282  {
283  $menu = $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
284  $menu->setIdentifier('DatabaseJumpMenu');
285  foreach ($this->MOD_MENU['function'] as $controller => $title) {
286  $item = $menu
287  ->makeMenuItem()
288  ->setHref(
289  (string)$this->uriBuilder->buildUriFromRoute(
290  $this->moduleName,
291  [
292  'id' => 0,
293  'SET' => [
294  'function' => $controller,
295  ],
296  ]
297  )
298  )
299  ->setTitle($title);
300  if ($controller === $this->MOD_SETTINGS['function']) {
301  $item->setActive(true);
302  }
303  $menu->addMenuItem($item);
304  }
305  $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
306  }
307 
311  protected function ‪func_default()
312  {
313  $modules = [];
314  $availableModFuncs = ['records', 'relations', 'search', 'refindex'];
315  foreach ($availableModFuncs as $modFunc) {
316  $modules[$modFunc] = (string)$this->uriBuilder->buildUriFromRoute('system_dbint', ['SET' => ['function' => $modFunc]]);
317  }
318  $this->view->assign('availableFunctions', $modules);
319  }
320 
321  /****************************
322  *
323  * Functionality implementation
324  *
325  ****************************/
329  protected function ‪func_refindex()
330  {
331  $readmeLocation = ‪ExtensionManagementUtility::extPath('lowlevel', 'README.rst');
332  $this->view->assign('ReadmeLink', ‪PathUtility::getAbsoluteWebPath($readmeLocation));
333  $this->view->assign('ReadmeLocation', $readmeLocation);
334  $this->view->assign('binaryPath', ‪ExtensionManagementUtility::extPath('core', 'bin/typo3'));
335  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Lowlevel/ReferenceIndex');
336 
337  if (GeneralUtility::_GP('_update') || GeneralUtility::_GP('_check')) {
338  $testOnly = (bool)GeneralUtility::_GP('_check');
339  $refIndexObj = GeneralUtility::makeInstance(ReferenceIndex::class);
340  $result = $refIndexObj->updateIndex($testOnly);
341  $recordsCheckedString = $result['resultText'];
342  ‪$errors = $result['errors'];
343  $flashMessage = GeneralUtility::makeInstance(
344  FlashMessage::class,
345  !empty(‪$errors) ? implode("\n", ‪$errors) : 'Index Integrity was perfect!',
346  $recordsCheckedString,
348  );
349 
350  $flashMessageRenderer = GeneralUtility::makeInstance(FlashMessageRendererResolver::class)->resolve();
351  $bodyContent = $flashMessageRenderer->render([$flashMessage]);
352 
353  $this->view->assign('content', nl2br($bodyContent));
354  }
355  }
356 
360  protected function ‪func_search()
361  {
362  $lang = $this->‪getLanguageService();
363  $searchMode = $this->MOD_SETTINGS['search'];
364  $fullsearch = GeneralUtility::makeInstance(QueryGenerator::class, $this->MOD_SETTINGS, $this->MOD_MENU, $this->moduleName);
365  $fullsearch->setFormName($this->formName);
366  $submenu = '<div class="row row-cols-auto align-items-end g-3 mb-3">';
367  $submenu .= '<div class="col">' . BackendUtility::getDropdownMenu(0, 'SET[search]', $searchMode, $this->MOD_MENU['search']) . '</div>';
368  if ($this->MOD_SETTINGS['search'] === 'query') {
369  $submenu .= '<div class="col">' . BackendUtility::getDropdownMenu(0, 'SET[search_query_makeQuery]', $this->MOD_SETTINGS['search_query_makeQuery'], $this->MOD_MENU['search_query_makeQuery']) . '</div>';
370  }
371  $submenu .= '</div>';
372  if ($this->MOD_SETTINGS['search'] === 'query') {
373  $submenu .= '<div class="form-check">' . BackendUtility::getFuncCheck(0, 'SET[search_query_smallparts]', $this->MOD_SETTINGS['search_query_smallparts'] ?? '', '', '', 'id="checkSearch_query_smallparts"') . '<label class="form-check-label" for="checkSearch_query_smallparts">' . $lang->getLL('showSQL') . '</label></div>';
374  $submenu .= '<div class="form-check">' . BackendUtility::getFuncCheck(0, 'SET[search_result_labels]', $this->MOD_SETTINGS['search_result_labels'] ?? '', '', '', 'id="checkSearch_result_labels"') . '<label class="form-check-label" for="checkSearch_result_labels">' . $lang->getLL('useFormattedStrings') . '</label></div>';
375  $submenu .= '<div class="form-check">' . BackendUtility::getFuncCheck(0, 'SET[labels_noprefix]', $this->MOD_SETTINGS['labels_noprefix'] ?? '', '', '', 'id="checkLabels_noprefix"') . '<label class="form-check-label" for="checkLabels_noprefix">' . $lang->getLL('dontUseOrigValues') . '</label></div>';
376  $submenu .= '<div class="form-check">' . BackendUtility::getFuncCheck(0, 'SET[options_sortlabel]', $this->MOD_SETTINGS['options_sortlabel'] ?? '', '', '', 'id="checkOptions_sortlabel"') . '<label class="form-check-label" for="checkOptions_sortlabel">' . $lang->getLL('sortOptions') . '</label></div>';
377  $submenu .= '<div class="form-check">' . BackendUtility::getFuncCheck(0, 'SET[show_deleted]', $this->MOD_SETTINGS['show_deleted'] ?? 0, '', '', 'id="checkShow_deleted"') . '<label class="form-check-label" for="checkShow_deleted">' . $lang->getLL('showDeleted') . '</label></div>';
378  }
379  $this->view->assign('submenu', $submenu);
380  $this->view->assign('searchMode', $searchMode);
381  switch ($searchMode) {
382  case 'query':
383  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Lowlevel/QueryGenerator');
384  $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/DateTimePicker');
385  $this->view->assign('queryMaker', $fullsearch->queryMaker());
386  break;
387  case 'raw':
388  default:
389  $this->view->assign('searchOptions', $fullsearch->form());
390  $this->view->assign('results', $fullsearch->search());
391  }
392  }
393 
397  protected function ‪func_records()
398  {
399  $admin = GeneralUtility::makeInstance(DatabaseIntegrityCheck::class);
400  $admin->genTree(0);
401 
402  // Pages stat
403  $pageStatistic = [
404  'total_pages' => [
405  'icon' => $this->iconFactory->getIconForRecord('pages', [], ‪Icon::SIZE_SMALL)->render(),
406  'count' => count($admin->getPageIdArray()),
407  ],
408  'translated_pages' => [
409  'icon' => $this->iconFactory->getIconForRecord('pages', [], ‪Icon::SIZE_SMALL)->render(),
410  'count' => count($admin->getPageTranslatedPageIDArray()),
411  ],
412  'hidden_pages' => [
413  'icon' => $this->iconFactory->getIconForRecord('pages', ['hidden' => 1], ‪Icon::SIZE_SMALL)->render(),
414  'count' => $admin->getRecStats()['hidden'] ?? 0,
415  ],
416  'deleted_pages' => [
417  'icon' => $this->iconFactory->getIconForRecord('pages', ['deleted' => 1], ‪Icon::SIZE_SMALL)->render(),
418  'count' => isset($admin->getRecStats()['deleted']['pages']) ? count($admin->getRecStats()['deleted']['pages']) : 0,
419  ],
420  ];
421 
422  $lang = $this->‪getLanguageService();
423 
424  // Doktype
425  $doktypes = [];
426  $doktype = ‪$GLOBALS['TCA']['pages']['columns']['doktype']['config']['items'];
427  if (is_array($doktype)) {
428  foreach ($doktype as $setup) {
429  if ($setup[1] !== '--div--') {
430  $doktypes[] = [
431  'icon' => $this->iconFactory->getIconForRecord('pages', ['doktype' => $setup[1]], ‪Icon::SIZE_SMALL)->render(),
432  'title' => $lang->sL($setup[0]) . ' (' . $setup[1] . ')',
433  'count' => (int)($admin->getRecStats()['doktype'][$setup[1]] ?? 0),
434  ];
435  }
436  }
437  }
438 
439  // Tables and lost records
440  $id_list = '-1,0,' . implode(',', array_keys($admin->getPageIdArray()));
441  $id_list = rtrim($id_list, ',');
442  $admin->lostRecords($id_list);
443  if ($admin->fixLostRecord(GeneralUtility::_GET('fixLostRecords_table'), GeneralUtility::_GET('fixLostRecords_uid'))) {
444  $admin = GeneralUtility::makeInstance(DatabaseIntegrityCheck::class);
445  $admin->genTree(0);
446  $id_list = '-1,0,' . implode(',', array_keys($admin->getPageIdArray()));
447  $id_list = rtrim($id_list, ',');
448  $admin->lostRecords($id_list);
449  }
450  $tableStatistic = [];
451  $countArr = $admin->countRecords($id_list);
452  if (is_array(‪$GLOBALS['TCA'])) {
453  foreach (‪$GLOBALS['TCA'] as $t => $value) {
454  if (‪$GLOBALS['TCA'][$t]['ctrl']['hideTable'] ?? false) {
455  continue;
456  }
457  if ($t === 'pages' && $admin->getLostPagesList() !== '') {
458  $lostRecordCount = count(explode(',', $admin->getLostPagesList()));
459  } else {
460  $lostRecordCount = isset($admin->getLRecords()[$t]) ? count($admin->getLRecords()[$t]) : 0;
461  }
462  if ($countArr['all'][$t] ?? false) {
463  $theNumberOfRe = (int)($countArr['non_deleted'][$t] ?? 0) . '/' . $lostRecordCount;
464  } else {
465  $theNumberOfRe = '';
466  }
467  $lr = '';
468  if (is_array($admin->getLRecords()[$t] ?? false)) {
469  foreach ($admin->getLRecords()[$t] as $data) {
470  if (!GeneralUtility::inList($admin->getLostPagesList(), $data['pid'])) {
471  $lr .= '<div class="record"><a href="' . htmlspecialchars((string)$this->uriBuilder->buildUriFromRoute('system_dbint', ['SET' => ['function' => 'records'], 'fixLostRecords_table' => $t, 'fixLostRecords_uid' => $data['uid']])) . '" title="' . htmlspecialchars($lang->getLL('fixLostRecord')) . '">' . $this->iconFactory->getIcon('status-dialog-error', ‪Icon::SIZE_SMALL)->render() . '</a>uid:' . $data['uid'] . ', pid:' . $data['pid'] . ', ' . htmlspecialchars(GeneralUtility::fixed_lgd_cs(strip_tags($data['title']), 20)) . '</div>';
472  } else {
473  $lr .= '<div class="record-noicon">uid:' . $data['uid'] . ', pid:' . $data['pid'] . ', ' . htmlspecialchars(GeneralUtility::fixed_lgd_cs(strip_tags($data['title']), 20)) . '</div>';
474  }
475  }
476  }
477  $tableStatistic[$t] = [
478  'icon' => $this->iconFactory->getIconForRecord($t, [], ‪Icon::SIZE_SMALL)->render(),
479  'title' => $lang->sL(‪$GLOBALS['TCA'][$t]['ctrl']['title']),
480  'count' => $theNumberOfRe,
481  'lostRecords' => $lr,
482  ];
483  }
484  }
485 
486  $this->view->assignMultiple([
487  'pages' => $pageStatistic,
488  'doktypes' => $doktypes,
489  'tables' => $tableStatistic,
490  ]);
491  }
492 
496  protected function ‪func_relations()
497  {
498  $admin = GeneralUtility::makeInstance(DatabaseIntegrityCheck::class);
499  $admin->selectNonEmptyRecordsWithFkeys();
500 
501  $this->view->assignMultiple([
502  'select_db' => $admin->testDBRefs($admin->getCheckSelectDBRefs()),
503  'group_db' => $admin->testDBRefs($admin->getCheckGroupDBRefs()),
504  ]);
505  }
506 
511  protected function ‪getLanguageService()
512  {
513  return ‪$GLOBALS['LANG'];
514  }
515 }
‪TYPO3\CMS\Core\Imaging\Icon\SIZE_SMALL
‪const SIZE_SMALL
Definition: Icon.php:30
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\$uriBuilder
‪UriBuilder $uriBuilder
Definition: DatabaseIntegrityController.php:89
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\$formName
‪string $formName
Definition: DatabaseIntegrityController.php:50
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\$pageRenderer
‪PageRenderer $pageRenderer
Definition: DatabaseIntegrityController.php:88
‪TYPO3\CMS\Core\Utility\PathUtility
Definition: PathUtility.php:25
‪TYPO3\CMS\Backend\Template\Components\ButtonBar
Definition: ButtonBar.php:32
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\getLanguageService
‪LanguageService getLanguageService()
Definition: DatabaseIntegrityController.php:504
‪TYPO3\CMS\Core\Imaging\Icon
Definition: Icon.php:26
‪TYPO3\CMS\Backend\Template\ModuleTemplateFactory
Definition: ModuleTemplateFactory.php:29
‪TYPO3\CMS\Core\Database\ReferenceIndex
Definition: ReferenceIndex.php:42
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\mainAction
‪ResponseInterface mainAction(ServerRequestInterface $request)
Definition: DatabaseIntegrityController.php:111
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\$MOD_SETTINGS
‪array $MOD_SETTINGS
Definition: DatabaseIntegrityController.php:85
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:34
‪TYPO3\CMS\Lowlevel\Database\QueryGenerator
Definition: QueryGenerator.php:49
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\$moduleName
‪string $moduleName
Definition: DatabaseIntegrityController.php:56
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\$moduleTemplate
‪ModuleTemplate $moduleTemplate
Definition: DatabaseIntegrityController.php:70
‪TYPO3\CMS\Core\Messaging\FlashMessageRendererResolver
Definition: FlashMessageRendererResolver.php:33
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\$templatePath
‪string $templatePath
Definition: DatabaseIntegrityController.php:64
‪TYPO3\CMS\Backend\Template\ModuleTemplate
Definition: ModuleTemplate.php:46
‪TYPO3\CMS\Core\Database\ConnectionPool\DEFAULT_CONNECTION_NAME
‪const DEFAULT_CONNECTION_NAME
Definition: ConnectionPool.php:50
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility
Definition: ExtensionManagementUtility.php:43
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\func_relations
‪func_relations()
Definition: DatabaseIntegrityController.php:489
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\__construct
‪__construct(IconFactory $iconFactory, PageRenderer $pageRenderer, UriBuilder $uriBuilder, ModuleTemplateFactory $moduleTemplateFactory)
Definition: DatabaseIntegrityController.php:92
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:40
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\func_search
‪func_search()
Definition: DatabaseIntegrityController.php:353
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\$iconFactory
‪IconFactory $iconFactory
Definition: DatabaseIntegrityController.php:87
‪TYPO3\CMS\Lowlevel\Controller
Definition: ConfigurationController.php:18
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\func_records
‪func_records()
Definition: DatabaseIntegrityController.php:390
‪$errors
‪$errors
Definition: annotationChecker.php:123
‪TYPO3\CMS\Core\Messaging\AbstractMessage\OK
‪const OK
Definition: AbstractMessage.php:29
‪TYPO3\CMS\Lowlevel\Integrity\DatabaseIntegrityCheck
Definition: DatabaseIntegrityCheck.php:41
‪TYPO3\CMS\Core\Messaging\FlashMessage
Definition: FlashMessage.php:26
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:31
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\$view
‪StandaloneView $view
Definition: DatabaseIntegrityController.php:60
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\func_default
‪func_default()
Definition: DatabaseIntegrityController.php:304
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\extPath
‪static string extPath($key, $script='')
Definition: ExtensionManagementUtility.php:142
‪TYPO3\CMS\Core\Localization\LanguageService\includeLLFile
‪array includeLLFile($fileRef)
Definition: LanguageService.php:271
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\$MOD_MENU
‪array $MOD_MENU
Definition: DatabaseIntegrityController.php:77
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\getModuleMenu
‪getModuleMenu()
Definition: DatabaseIntegrityController.php:274
‪TYPO3\CMS\Core\Utility\PathUtility\getAbsoluteWebPath
‪static string getAbsoluteWebPath($targetPath, bool $prefixWithSitePath=true)
Definition: PathUtility.php:51
‪TYPO3\CMS\Core\Localization\LanguageService\getLL
‪string getLL($index)
Definition: LanguageService.php:121
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\menuConfig
‪menuConfig()
Definition: DatabaseIntegrityController.php:179
‪TYPO3\CMS\Backend\Template\Components\ButtonBar\BUTTON_POSITION_RIGHT
‪const BUTTON_POSITION_RIGHT
Definition: ButtonBar.php:41
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController
Definition: DatabaseIntegrityController.php:47
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\$moduleTemplateFactory
‪ModuleTemplateFactory $moduleTemplateFactory
Definition: DatabaseIntegrityController.php:90
‪TYPO3\CMS\Core\Messaging\AbstractMessage\ERROR
‪const ERROR
Definition: AbstractMessage.php:31
‪TYPO3\CMS\Core\Http\HtmlResponse
Definition: HtmlResponse.php:26
‪TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController\func_refindex
‪func_refindex()
Definition: DatabaseIntegrityController.php:322