93 parent::initializeView(
$view);
100 $this->view->getModuleTemplate()->setFlashMessageQueue($this->controllerContext->getFlashMessageQueue());
101 $view->
assign(
'extensionConfiguration', $this->indexerConfig);
112 'controller' =>
'Administration',
114 'label' => $this->
getLanguageService()->
sL(
'LLL:EXT:indexed_search/Resources/Private/Language/locallang.xlf:administration.menu.general')
117 'controller' =>
'Administration',
119 'label' => $this->
getLanguageService()->
sL(
'LLL:EXT:indexed_search/Resources/Private/Language/locallang.xlf:administration.menu.pages')
121 'externalDocuments' => [
122 'controller' =>
'Administration',
123 'action' =>
'externalDocuments',
124 'label' => $this->
getLanguageService()->
sL(
'LLL:EXT:indexed_search/Resources/Private/Language/locallang.xlf:administration.menu.externalDocuments')
127 'controller' =>
'Administration',
128 'action' =>
'statistic',
129 'label' => $this->
getLanguageService()->
sL(
'LLL:EXT:indexed_search/Resources/Private/Language/locallang.xlf:administration.menu.statistic')
132 $uriBuilder = $this->objectManager->get(UriBuilder::class);
135 $menu = $this->view->getModuleTemplate()->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
136 $menu->setIdentifier(
'IndexedSearchModuleMenu');
138 foreach ($menuItems as $menuItemConfig) {
139 $isActive = $this->request->getControllerActionName() === $menuItemConfig[
'action'];
140 $menuItem = $menu->makeMenuItem()
141 ->setTitle($menuItemConfig[
'label'])
142 ->setHref($this->
getHref($menuItemConfig[
'controller'], $menuItemConfig[
'action']))
143 ->setActive($isActive);
144 $menu->addMenuItem($menuItem);
147 $this->view->getModuleTemplate()->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
155 $this->pageUid = (int)GeneralUtility::_GET(
'id');
156 $this->indexerConfig = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get(
'indexed_search');
157 $this->enableMetaphoneSearch = (bool)$this->indexerConfig[
'enableMetaphoneSearch'];
158 $this->indexer = GeneralUtility::makeInstance(Indexer::class);
160 parent::initializeAction();
172 $vars = GeneralUtility::_GET(
'tx_indexedsearch_web_indexedsearchisearch');
175 if (is_array($vars) && isset($vars[
'action']) && method_exists($this, $vars[
'action'] .
'Action')) {
176 $action = $vars[
'action'];
179 case 'saveStopwordsKeywords':
180 $action =
'statisticDetails';
182 case 'deleteIndexedItem':
183 $action =
'statistic';
187 $beUser->uc[
'indexed_search'][
'action'] = $action;
190 } elseif (isset($beUser->uc[
'indexed_search'][
'action'])) {
192 $request->setControllerActionName($beUser->uc[
'indexed_search'][
'action']);
194 if (isset($beUser->uc[
'indexed_search'][
'arguments'])) {
215 $this->view->assignMultiple([
216 'records' => $this->administrationRepository->getRecordsNumbers(),
217 'phash' => $this->administrationRepository->getPageHashTypes()
220 if ($this->pageUid) {
221 $expressionBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
222 ->getQueryBuilderForTable(
'index_stat_word')
225 $last24hours = $expressionBuilder->gt(
'tstamp',
$GLOBALS[
'EXEC_TIME'] - 86400);
226 $last30days = $expressionBuilder->gt(
'tstamp',
$GLOBALS[
'EXEC_TIME'] - 30 * 86400);
228 $this->view->assignMultiple([
229 'pageUid' => $this->pageUid,
230 'all' => $this->administrationRepository->getGeneralSearchStatistic(
'', $this->pageUid),
231 'last24hours' => $this->administrationRepository->getGeneralSearchStatistic($last24hours, $this->pageUid),
232 'last30days' => $this->administrationRepository->getGeneralSearchStatistic($last30days, $this->pageUid),
242 $this->view->assign(
'records', $this->administrationRepository->getPageStatistic());
250 $this->view->assign(
'records', $this->administrationRepository->getExternalDocumentsStatistic());
260 $pageHash = (int)$pageHash;
262 $icon = $this->view->getModuleTemplate()->getIconFactory()->getIcon(
'actions-view-go-up',
Icon::SIZE_SMALL);
263 $backButton = $this->view->getModuleTemplate()->getDocHeaderComponent()
264 ->getButtonBar()->makeLinkButton()
265 ->setTitle($this->
getLanguageService()->
sL(
'LLL:EXT:indexed_search/Resources/Private/Language/locallang.xlf:administration.back'))
267 ->setHref($this->
getHref(
'Administration',
'statistic'));
268 $this->view->getModuleTemplate()->getDocHeaderComponent()
269 ->getButtonBar()->addButton($backButton);
271 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'index_phash');
272 $pageHashRow = $queryBuilder
274 ->from(
'index_phash')
276 $queryBuilder->expr()->eq(
278 $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)
284 if (!is_array($pageHashRow)) {
288 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'index_debug');
289 $debugRow = $queryBuilder
291 ->from(
'index_debug')
293 $queryBuilder->expr()->eq(
295 $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)
302 if (is_array($debugRow)) {
303 $debugInfo = unserialize($debugRow[0][
'debuginfo']);
304 $lexer = $debugInfo[
'lexer'];
305 unset($debugInfo[
'lexer']);
308 $keywords = is_array($pageRecord) ? array_flip(GeneralUtility::trimExplode(
',', $pageRecord[
'keywords'],
true)) : [];
310 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'index_words');
311 $wordRecords = $queryBuilder
312 ->select(
'index_words.*',
'index_rel.*')
313 ->from(
'index_words')
316 $queryBuilder->expr()->eq(
318 $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)
320 $queryBuilder->expr()->eq(
322 $queryBuilder->quoteIdentifier(
'index_rel.wid')
325 ->orderBy(
'index_words.baseword')
328 foreach ($wordRecords as $id => $row) {
329 if (isset($keywords[$row[
'baseword']])) {
330 $wordRecords[$id][
'is_keyword'] =
true;
333 $metaphoneRows = $metaphone = [];
334 if ($this->enableMetaphoneSearch && is_array($wordRecords)) {
336 foreach ($wordRecords as $row) {
337 $metaphoneRows[$row[
'metaphone']][] = $row[
'baseword'];
340 foreach ($metaphoneRows as $hash => $words) {
341 if (count($words) > 1) {
343 'metaphone' => $this->indexer->metaphone($words[0], 1), $hash,
352 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'index_section');
353 $sections = $queryBuilder
355 ->from(
'index_section')
357 $queryBuilder->expr()->eq(
359 $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)
366 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'index_words');
367 $topCountWords = $queryBuilder
368 ->select(
'index_words.baseword',
'index_words.metaphone',
'index_rel.*')
369 ->from(
'index_words')
373 $queryBuilder->expr()->eq(
375 $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)
377 $queryBuilder->expr()->eq(
378 'index_words.is_stopword',
379 $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)
381 $queryBuilder->expr()->eq(
383 $queryBuilder->quoteIdentifier(
'index_rel.wid')
386 ->orderBy(
'index_rel.count',
'DESC')
391 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'index_words');
392 $topFrequency = $queryBuilder
393 ->select(
'index_words.baseword',
'index_words.metaphone',
'index_rel.*')
394 ->from(
'index_words')
398 $queryBuilder->expr()->eq(
400 $queryBuilder->createNamedParameter($pageHash, \PDO::PARAM_INT)
402 $queryBuilder->expr()->eq(
403 'index_words.is_stopword',
404 $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)
406 $queryBuilder->expr()->eq(
408 $queryBuilder->quoteIdentifier(
'index_rel.wid')
411 ->orderBy(
'index_rel.freq',
'DESC')
415 $this->view->assignMultiple([
416 'phash' => (
int)$pageHash,
417 'phashRow' => $pageHashRow,
418 'words' => $wordRecords,
419 'sections' => $sections,
420 'topCount' => $topCountWords,
421 'topFrequency' => $topFrequency,
422 'debug' => $debugInfo,
424 'metaphone' => $metaphone,
425 'page' => $pageRecord,
426 'keywords' => $keywords
441 if (is_array($stopwords) && !empty($stopwords)) {
442 $this->administrationRepository->saveStopWords($stopwords);
444 if (is_array($keywords) && !empty($keywords)) {
445 $this->administrationRepository->saveKeywords($keywords, $pageId);
449 $this->
redirect(
'statisticDetails',
null,
null, [
'pageHash' => $pageHash]);
460 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'index_phash');
461 $rows = $queryBuilder
462 ->select(
'index_phash.*',
'index_section.*',
'index_rel.*')
464 ->from(
'index_section')
465 ->from(
'index_phash')
467 $queryBuilder->expr()->eq(
469 $queryBuilder->createNamedParameter($id, \PDO::PARAM_INT)
471 $queryBuilder->expr()->eq(
473 $queryBuilder->quoteIdentifier(
'index_section.phash')
475 $queryBuilder->expr()->eq(
476 'index_section.phash',
477 $queryBuilder->quoteIdentifier(
'index_phash.phash')
480 ->orderBy(
'index_rel.freq',
'desc')
484 $this->view->assignMultiple([
498 foreach (
$GLOBALS[
'TYPO3_CONF_VARS'][
'EXTCONF'][
'indexed_search'][
'external_parsers'] ?? [] as $extension => $className) {
500 $fileContentParser = GeneralUtility::makeInstance($className);
501 if ($fileContentParser->softInit($extension)) {
502 $this->external_parsers[$extension] = $fileContentParser;
507 $allLines = $this->administrationRepository->getTree($this->pageUid, $depth, $mode);
509 $this->view->assignMultiple([
510 'levelTranslations' => explode(
'|', $this->
getLanguageService()->sL(
'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.enterSearchLevels')),
512 'pageUid' => $this->pageUid,
527 $this->administrationRepository->removeIndexedPhashRow($id, $this->pageUid, $depth);
528 $this->
redirect(
'statistic',
null,
null, [
'depth' => $depth,
'mode' => $mode]);
540 protected function getHref($controller, $action, $parameters = [])
544 return $uriBuilder->reset()->uriFor($action, $parameters, $controller);