diff --git a/Classes/Controller/AbstractController.php b/Classes/Controller/AbstractController.php index 0fd8e33c..0c3a2a58 100644 --- a/Classes/Controller/AbstractController.php +++ b/Classes/Controller/AbstractController.php @@ -23,6 +23,7 @@ use In2code\Lux\Domain\Repository\SearchRepository; use In2code\Lux\Domain\Repository\UtmRepository; use In2code\Lux\Domain\Repository\VisitorRepository; +use In2code\Lux\Domain\Service\IndividualAnalyseView\Helper; use In2code\Lux\Domain\Service\RenderingTimeService; use In2code\Lux\Utility\BackendUtility; use In2code\Lux\Utility\ConfigurationUtility; @@ -61,6 +62,7 @@ abstract class AbstractController extends ActionController protected ?CompanyRepository $companyRepository = null; protected ?WiredmindsRepository $wiredmindsRepository = null; protected ?RenderingTimeService $renderingTimeService = null; + protected ?Helper $individualAnalyseViewHelper = null; protected ?CacheLayer $cacheLayer = null; protected ModuleTemplateFactory $moduleTemplateFactory; protected ModuleTemplate $moduleTemplate; @@ -83,6 +85,7 @@ public function __construct( CompanyRepository $companyRepository, WiredmindsRepository $wiredmindsRepository, RenderingTimeService $renderingTimeService, + Helper $individualAnalyseViewHelper, CacheLayer $cacheLayer, ModuleTemplateFactory $moduleTemplateFactory ) { @@ -103,6 +106,7 @@ public function __construct( $this->companyRepository = $companyRepository; $this->wiredmindsRepository = $wiredmindsRepository; $this->renderingTimeService = $renderingTimeService; + $this->individualAnalyseViewHelper = $individualAnalyseViewHelper; $this->cacheLayer = $cacheLayer; $this->moduleTemplateFactory = $moduleTemplateFactory; } diff --git a/Classes/Controller/AnalysisController.php b/Classes/Controller/AnalysisController.php index ff9a3c4b..89c652a5 100644 --- a/Classes/Controller/AnalysisController.php +++ b/Classes/Controller/AnalysisController.php @@ -25,6 +25,7 @@ use In2code\Lux\Domain\Model\News; use In2code\Lux\Domain\Model\Page; use In2code\Lux\Domain\Model\Transfer\FilterDto; +use In2code\Lux\Exception\ConfigurationException; use In2code\Lux\Utility\FileUtility; use In2code\Lux\Utility\LocalizationUtility; use In2code\Lux\Utility\ObjectUtility; @@ -134,38 +135,67 @@ public function contentCsvAction(FilterDto $filter): ResponseInterface * @return void * @throws NoSuchArgumentException */ - public function initializeNewsAction(): void + public function initializeIndividualAnalyseViewAction(): void { $this->setFilter(); } - /** - * @param FilterDto $filter - * @param string $export - * @return ResponseInterface - * @throws Exception - * @throws ExceptionDbalDriver - */ - public function newsAction(FilterDto $filter, string $export = ''): ResponseInterface + public function individualAnalyseViewAction(FilterDto $filter, string $export = ''): ResponseInterface { if ($export === 'csv') { + die(__CLASS__ . ':' . __LINE__); // TOdo: ... return (new ForwardResponse('newsCsv'))->withArguments(['filter' => $filter]); } $this->view->assignMultiple([ 'filter' => $filter, 'luxCategories' => $this->categoryRepository->findAllLuxCategories(), + 'domains' => $this->newsvisitRepository->getAllDomains($filter), 'newsvisitsData' => GeneralUtility::makeInstance(NewsvisistsDataProvider::class, $filter), 'news' => $this->newsvisitRepository->findCombinedByNewsIdentifier($filter), 'languageData' => GeneralUtility::makeInstance(LanguagesNewsDataProvider::class, $filter), 'domainData' => GeneralUtility::makeInstance(DomainNewsDataProvider::class, $filter), - 'domains' => $this->newsvisitRepository->getAllDomains($filter), ]); - $this->addDocumentHeaderForCurrentController(); return $this->defaultRendering(); } + /** + * @return void + * @throws NoSuchArgumentException + */ +// public function initializeNewsAction(): void +// { +// $this->setFilter(); +// } + + /** + * @param FilterDto $filter + * @param string $export + * @return ResponseInterface + * @throws Exception + * @throws ExceptionDbalDriver + */ +// public function newsAction(FilterDto $filter, string $export = ''): ResponseInterface +// { +// if ($export === 'csv') { +// return (new ForwardResponse('newsCsv'))->withArguments(['filter' => $filter]); +// } +// +// $this->view->assignMultiple([ +// 'filter' => $filter, +// 'luxCategories' => $this->categoryRepository->findAllLuxCategories(), +// 'newsvisitsData' => GeneralUtility::makeInstance(NewsvisistsDataProvider::class, $filter), +// 'news' => $this->newsvisitRepository->findCombinedByNewsIdentifier($filter), +// 'languageData' => GeneralUtility::makeInstance(LanguagesNewsDataProvider::class, $filter), +// 'domainData' => GeneralUtility::makeInstance(DomainNewsDataProvider::class, $filter), +// 'domains' => $this->newsvisitRepository->getAllDomains($filter), +// ]); +// +// $this->addDocumentHeaderForCurrentController(); +// return $this->defaultRendering(); +// } + /** * @param FilterDto $filter * @return ResponseInterface @@ -173,13 +203,13 @@ public function newsAction(FilterDto $filter, string $export = ''): ResponseInte * @throws ExceptionDbalDriver * @throws DBALException */ - public function newsCsvAction(FilterDto $filter): ResponseInterface - { - $this->view->assignMultiple([ - 'news' => $this->newsvisitRepository->findCombinedByNewsIdentifier($filter), - ]); - return $this->csvResponse(); - } +// public function newsCsvAction(FilterDto $filter): ResponseInterface +// { +// $this->view->assignMultiple([ +// 'news' => $this->newsvisitRepository->findCombinedByNewsIdentifier($filter), +// ]); +// return $this->csvResponse(); +// } /** * @return void @@ -298,18 +328,18 @@ public function initializeSearchAction(): void * @throws ExceptionDbal * @throws ExceptionDbalDriver */ - public function searchAction(FilterDto $filter): ResponseInterface - { - $this->view->assignMultiple([ - 'filter' => $filter, - 'luxCategories' => $this->categoryRepository->findAllLuxCategories(), - 'searchData' => GeneralUtility::makeInstance(SearchDataProvider::class, $filter), - 'search' => $this->searchRepository->findCombinedBySearchIdentifier($filter), - ]); - - $this->addDocumentHeaderForCurrentController(); - return $this->defaultRendering(); - } +// public function searchAction(FilterDto $filter): ResponseInterface +// { +// $this->view->assignMultiple([ +// 'filter' => $filter, +// 'luxCategories' => $this->categoryRepository->findAllLuxCategories(), +// 'searchData' => GeneralUtility::makeInstance(SearchDataProvider::class, $filter), +// 'search' => $this->searchRepository->findCombinedBySearchIdentifier($filter), +// ]); +// +// $this->addDocumentHeaderForCurrentController(); +// return $this->defaultRendering(); +// } /** * @param Linklistener $linkListener @@ -348,18 +378,18 @@ public function detailPageAction(Page $page): ResponseInterface * @throws ExceptionDbal * @throws DBALException */ - public function detailNewsAction(News $news): ResponseInterface - { - $filter = ObjectUtility::getFilterDto()->setSearchterm((string)$news->getUid()); - $this->view->assignMultiple([ - 'news' => $news, - 'newsvisits' => $this->newsvisitRepository->findByNews($news, 100), - 'newsvisitsData' => GeneralUtility::makeInstance(NewsvisistsDataProvider::class, $filter), - ]); - - $this->addDocumentHeaderForCurrentController(); - return $this->defaultRendering(); - } +// public function detailNewsAction(News $news): ResponseInterface +// { +// $filter = ObjectUtility::getFilterDto()->setSearchterm((string)$news->getUid()); +// $this->view->assignMultiple([ +// 'news' => $news, +// 'newsvisits' => $this->newsvisitRepository->findByNews($news, 100), +// 'newsvisitsData' => GeneralUtility::makeInstance(NewsvisistsDataProvider::class, $filter), +// ]); +// +// $this->addDocumentHeaderForCurrentController(); +// return $this->defaultRendering(); +// } /** * @param string $href @@ -404,18 +434,18 @@ public function detailLinkListenerAction(Linklistener $linkListener): ResponseIn * @throws ExceptionDbal * @throws ExceptionDbalDriver */ - public function detailSearchAction(string $searchterm): ResponseInterface - { - $filter = ObjectUtility::getFilterDto()->setSearchterm($searchterm); - $this->view->assignMultiple([ - 'searchterm' => $searchterm, - 'searchData' => GeneralUtility::makeInstance(SearchDataProvider::class, $filter), - 'searches' => $this->searchRepository->findBySearchterm(urldecode($searchterm)), - ]); - - $this->addDocumentHeaderForCurrentController(); - return $this->defaultRendering(); - } +// public function detailSearchAction(string $searchterm): ResponseInterface +// { +// $filter = ObjectUtility::getFilterDto()->setSearchterm($searchterm); +// $this->view->assignMultiple([ +// 'searchterm' => $searchterm, +// 'searchData' => GeneralUtility::makeInstance(SearchDataProvider::class, $filter), +// 'searches' => $this->searchRepository->findBySearchterm(urldecode($searchterm)), +// ]); +// +// $this->addDocumentHeaderForCurrentController(); +// return $this->defaultRendering(); +// } /** * AJAX action to show a detail view @@ -456,27 +486,27 @@ public function detailAjaxPage(ServerRequestInterface $request): ResponseInterfa * @throws ExceptionDbalDriver * @throws DBALException */ - public function detailNewsAjaxPage(ServerRequestInterface $request): ResponseInterface - { - $filter = $this->getFilterFromSessionForAjaxRequests('news', (string)$request->getQueryParams()['news']); - /** @var News $news */ - $news = $this->newsRepository->findByIdentifier((int)$request->getQueryParams()['news']); - $standaloneView = ObjectUtility::getStandaloneView(); - $standaloneView->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName( - 'EXT:lux/Resources/Private/Templates/Analysis/NewsDetailPageAjax.html' - )); - $standaloneView->setPartialRootPaths(['EXT:lux/Resources/Private/Partials/']); - $standaloneView->assignMultiple([ - 'news' => $news, - 'newsvisits' => $news !== null ? $this->newsvisitRepository->findByNews($news, 10) : null, - 'newsvisitsData' => GeneralUtility::makeInstance(NewsvisistsDataProvider::class, $filter), - ]); - $response = GeneralUtility::makeInstance(JsonResponse::class); - /** @var StreamInterface $stream */ - $stream = $response->getBody(); - $stream->write(json_encode(['html' => $standaloneView->render()])); - return $response; - } +// public function detailNewsAjaxPage(ServerRequestInterface $request): ResponseInterface +// { +// $filter = $this->getFilterFromSessionForAjaxRequests('news', (string)$request->getQueryParams()['news']); +// /** @var News $news */ +// $news = $this->newsRepository->findByIdentifier((int)$request->getQueryParams()['news']); +// $standaloneView = ObjectUtility::getStandaloneView(); +// $standaloneView->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName( +// 'EXT:lux/Resources/Private/Templates/Analysis/NewsDetailPageAjax.html' +// )); +// $standaloneView->setPartialRootPaths(['EXT:lux/Resources/Private/Partials/']); +// $standaloneView->assignMultiple([ +// 'news' => $news, +// 'newsvisits' => $news !== null ? $this->newsvisitRepository->findByNews($news, 10) : null, +// 'newsvisitsData' => GeneralUtility::makeInstance(NewsvisistsDataProvider::class, $filter), +// ]); +// $response = GeneralUtility::makeInstance(JsonResponse::class); +// /** @var StreamInterface $stream */ +// $stream = $response->getBody(); +// $stream->write(json_encode(['html' => $standaloneView->render()])); +// return $response; +// } /** * AJAX action to show a detail view for utm @@ -498,25 +528,25 @@ public function detailUtmAjaxPage(ServerRequestInterface $request): ResponseInte * @return ResponseInterface * @noinspection PhpUnused */ - public function detailSearchAjaxPage(ServerRequestInterface $request): ResponseInterface - { - $standaloneView = ObjectUtility::getStandaloneView(); - $standaloneView->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName( - 'EXT:lux/Resources/Private/Templates/Analysis/SearchDetailPageAjax.html' - )); - $standaloneView->setPartialRootPaths(['EXT:lux/Resources/Private/Partials/']); - $standaloneView->assignMultiple([ - 'searches' => $this->searchRepository->findBySearchterm( - urldecode($request->getQueryParams()['searchterm']) - ), - 'searchterm' => $request->getQueryParams()['searchterm'], - ]); - $response = GeneralUtility::makeInstance(JsonResponse::class); - /** @var StreamInterface $stream */ - $stream = $response->getBody(); - $stream->write(json_encode(['html' => $standaloneView->render()])); - return $response; - } +// public function detailSearchAjaxPage(ServerRequestInterface $request): ResponseInterface +// { +// $standaloneView = ObjectUtility::getStandaloneView(); +// $standaloneView->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName( +// 'EXT:lux/Resources/Private/Templates/Analysis/SearchDetailPageAjax.html' +// )); +// $standaloneView->setPartialRootPaths(['EXT:lux/Resources/Private/Partials/']); +// $standaloneView->assignMultiple([ +// 'searches' => $this->searchRepository->findBySearchterm( +// urldecode($request->getQueryParams()['searchterm']) +// ), +// 'searchterm' => $request->getQueryParams()['searchterm'], +// ]); +// $response = GeneralUtility::makeInstance(JsonResponse::class); +// /** @var StreamInterface $stream */ +// $stream = $response->getBody(); +// $stream->write(json_encode(['html' => $standaloneView->render()])); +// return $response; +// } /** * AJAX action to show a detail view @@ -579,18 +609,11 @@ public function detailAjaxLinklistener(ServerRequestInterface $request): Respons /** * @return void - * @throws ExceptionDbal - * @throws ExceptionDbalDriver + * @throws ConfigurationException */ protected function addDocumentHeaderForCurrentController(): void { $actions = ['dashboard', 'content', 'utm', 'linkListener']; - if ($this->newsvisitRepository->isTableFilled()) { - $actions[] = 'news'; - } - if ($this->searchRepository->isTableFilled()) { - $actions[] = 'search'; - } $menuConfiguration = []; foreach ($actions as $action) { $menuConfiguration[] = [ @@ -600,6 +623,12 @@ protected function addDocumentHeaderForCurrentController(): void ), ]; } + foreach ($this->individualAnalyseViewHelper->getActivatedViews() as $configuration) { + $menuConfiguration[] = [ + 'action' => 'individualAnalyseView', + 'label' => LocalizationUtility::translate($configuration['label']), + ]; + } $this->addDocumentHeader($menuConfiguration); } } diff --git a/Classes/Domain/Model/Individualvisit.php b/Classes/Domain/Model/Individualvisit.php new file mode 100644 index 00000000..a0057c40 --- /dev/null +++ b/Classes/Domain/Model/Individualvisit.php @@ -0,0 +1,98 @@ +visitor; + } + + public function setVisitor(?Visitor $visitor): self + { + $this->visitor = $visitor; + return $this; + } + + public function getCrdate(): ?DateTime + { + return $this->crdate; + } + + public function setCrdate(?DateTime $crdate): self + { + $this->crdate = $crdate; + return $this; + } + + public function getPagevisit(): ?Pagevisit + { + return $this->pagevisit; + } + + public function setPagevisit(?Pagevisit $pagevisit): self + { + $this->pagevisit = $pagevisit; + return $this; + } + + public function getDomain(): string + { + return $this->domain; + } + + public function setDomain(string $domain): self + { + $this->domain = $domain; + return $this; + } + + public function getTableForeign(): string + { + return $this->tableForeign; + } + + public function setTableForeign(string $tableForeign): self + { + $this->tableForeign = $tableForeign; + return $this; + } + + public function getIdentifierForeign(): int + { + return $this->identifierForeign; + } + + public function setIdentifierForeign(int $identifierForeign): self + { + $this->identifierForeign = $identifierForeign; + return $this; + } + + public function getLanguage(): int + { + return $this->language; + } + + public function setLanguage(int $language): self + { + $this->language = $language; + return $this; + } +} diff --git a/Classes/Domain/Repository/NewsvisitRepository.php b/Classes/Domain/Repository/NewsvisitRepository.php index 3afee36c..af9cf0ee 100644 --- a/Classes/Domain/Repository/NewsvisitRepository.php +++ b/Classes/Domain/Repository/NewsvisitRepository.php @@ -192,21 +192,6 @@ public function getAllLanguages(FilterDto $filter): array return $connection->executeQuery($sql)->fetchAllAssociative(); } - /** - * @return bool - * @throws ExceptionDbalDriver - * @throws ExceptionDbal - */ - public function isTableFilled(): bool - { - if (DatabaseUtility::isTableExisting(News::TABLE_NAME)) { - $connection = DatabaseUtility::getConnectionForTable(News::TABLE_NAME); - $sql = 'select count(*) from ' . News::TABLE_NAME . ' where deleted=0'; - return $connection->executeQuery($sql)->fetchOne() > 0; - } - return false; - } - /** * @param QueryInterface $query * @param array $logicalAnd diff --git a/Classes/Domain/Repository/SearchRepository.php b/Classes/Domain/Repository/SearchRepository.php index 9a25716a..114e8e55 100644 --- a/Classes/Domain/Repository/SearchRepository.php +++ b/Classes/Domain/Repository/SearchRepository.php @@ -43,18 +43,6 @@ public function findCombinedBySearchIdentifier(FilterDto $filter): array return $connection->executeQuery($sql)->fetchAllAssociative(); } - /** - * @return bool - * @throws Exception - * @throws ExceptionDbalDriver - */ - public function isTableFilled(): bool - { - $connection = DatabaseUtility::getConnectionForTable(Search::TABLE_NAME); - $sql = 'select count(*) from ' . Search::TABLE_NAME . ' where deleted=0'; - return $connection->executeQuery($sql)->fetchOne() > 0; - } - /** * @param DateTime $start * @param DateTime $end diff --git a/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/AbstractActivator.php b/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/AbstractActivator.php new file mode 100644 index 00000000..3e8f7180 --- /dev/null +++ b/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/AbstractActivator.php @@ -0,0 +1,21 @@ +configuration; + } + + public function setConfiguration(array $configuration): self + { + $this->configuration = $configuration; + return $this; + } +} diff --git a/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/ActivatorInterface.php b/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/ActivatorInterface.php new file mode 100644 index 00000000..b0f376d9 --- /dev/null +++ b/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/ActivatorInterface.php @@ -0,0 +1,10 @@ +getConfiguration()['extensionKey'] ?? ''; + return ExtensionManagementUtility::isLoaded($extensionKey); + } +} diff --git a/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/IsTableFilledActivator.php b/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/IsTableFilledActivator.php new file mode 100644 index 00000000..55d6bf16 --- /dev/null +++ b/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/IsTableFilledActivator.php @@ -0,0 +1,21 @@ +getConfiguration()['table'] ?? ''; + return DatabaseUtility::isTableExisting($table) && DatabaseUtility::isTableFilled($table); + } +} diff --git a/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/TrueActivator.php b/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/TrueActivator.php new file mode 100644 index 00000000..45ab5f07 --- /dev/null +++ b/Classes/Domain/Service/IndividualAnalyseView/Backend/Activator/TrueActivator.php @@ -0,0 +1,13 @@ +getAllViews() as $view) { + $configuration = $view['backend']['activated'] ?? []; + if ($this->isViewActivated($configuration)) { + $activatedViews[] = $view; + } + } + return $activatedViews; + } + + protected function getAllViews(): array + { + return $GLOBALS['TYPO3_CONF_VARS']['EXT']['lux']['individualAnalyseViews'] ?? []; + } + + /** + * @param array $configuration + * @return bool + * @throws ConfigurationException + */ + protected function isViewActivated(array $configuration): bool + { + if (class_exists($configuration['class'] ?? '') === false) { + throw new ConfigurationException('Class ' . $configuration['class'] . ' does not exist', 1708268767); + } + if (is_subclass_of($configuration['class'], ActivatorInterface::class) === false) { + throw new ConfigurationException( + 'Class ' . $configuration['class'] . ' does not implement ' . ActivatorInterface::class, + 1708268868 + ); + } + /** @var AbstractActivator $activator */ + $activator = GeneralUtility::makeInstance($configuration['class']) + ->setConfiguration($configuration['configuration'] ?? []); + return $activator->isActive(); + } +} diff --git a/Configuration/Backend/Modules.php b/Configuration/Backend/Modules.php index a8dc2475..e3968f1a 100644 --- a/Configuration/Backend/Modules.php +++ b/Configuration/Backend/Modules.php @@ -17,17 +17,14 @@ \In2code\Lux\Controller\AnalysisController::class => [ 'dashboard', 'content', - 'news', 'linkListener', - 'search', 'deleteLinkListener', 'detailPage', - 'detailNews', - 'detailSearch', 'detailDownload', 'detailLinkListener', 'resetFilter', 'utm', + 'individualAnalyseView', ], \In2code\Lux\Controller\LeadController::class => [ 'dashboard', diff --git a/Resources/Private/Partials/Filter/Analysis/IndividualAnalyseView.html b/Resources/Private/Partials/Filter/Analysis/IndividualAnalyseView.html new file mode 100644 index 00000000..baa32f8c --- /dev/null +++ b/Resources/Private/Partials/Filter/Analysis/IndividualAnalyseView.html @@ -0,0 +1,130 @@ +
+
+

Filter

+
+
+ +
+
+
Suche
+ +
+ + +
+ +
+ + +
+
+ + +
+
Scoring
+ +
+ + +
+ +
+ + +
+
+ + +
+
Category
+ +
+ + +
+ + +
+ + + Domain + + + {domain} + + + +
+
+
+
+ + +
+
+ This submit is not visible. Nevertheless it will be triggered when pressing return in an input field because it is the first submit. +
+
+
+
+
diff --git a/Resources/Private/Templates/Analysis/IndividualAnalyseView.html b/Resources/Private/Templates/Analysis/IndividualAnalyseView.html new file mode 100644 index 00000000..1d4a3d47 --- /dev/null +++ b/Resources/Private/Templates/Analysis/IndividualAnalyseView.html @@ -0,0 +1,25 @@ + + + +
+
+ + + +
+
+ + + + +
+
+
+
+
+ + +
+
+
+
diff --git a/ext_localconf.php b/ext_localconf.php index 92ae4433..a3722e9a 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -83,5 +83,38 @@ function () { * CacheHash: Add LUX paramters to excluded variables */ \In2code\Lux\Utility\CacheHashUtility::addLuxArgumentsToExcludedVariables(); + + /** + * IndividualAnalyseViews + */ + $GLOBALS['TYPO3_CONF_VARS']['EXT']['lux']['individualAnalyseViews'] = [ + 'news' => [ + 'identifier' => 'news', + 'label' => 'LLL:EXT:lux/Resources/Private/Language/locallang_db.xlf:module.analysis.news', + 'backend' => [ + 'activated' => [ + 'class' => \In2code\Lux\Domain\Service\IndividualAnalyseView\Backend\Activator\IsExtensionActiveActivator::class, + 'configuration' => [ + 'extensionKey' => 'news', + ], + ], + ], + 'frontend' => [ + 'isTriggered' => 'Class', + ], + ], + 'search' => [ + 'identifier' => 'news', + 'label' => 'LLL:EXT:lux/Resources/Private/Language/locallang_db.xlf:module.analysis.search', + 'backend' => [ + 'activated' => [ + 'class' => \In2code\Lux\Domain\Service\IndividualAnalyseView\Backend\Activator\IsTableFilledActivator::class, + 'configuration' => [ + 'table' => \In2code\Lux\Domain\Model\Search::TABLE_NAME, + ], + ], + ], + ], + ]; } ); diff --git a/ext_tables.php b/ext_tables.php index 135cd8f9..105f87b7 100644 --- a/ext_tables.php +++ b/ext_tables.php @@ -72,8 +72,8 @@ function () { '', [ \In2code\Lux\Controller\AnalysisController::class => - 'dashboard,content,news,linkListener,search,deleteLinkListener,detailPage' . - ',detailNews,detailSearch,detailDownload,detailLinkListener,resetFilter,utm', + 'dashboard,content,linkListener,deleteLinkListener,detailPage' . + ',detailDownload,detailLinkListener,resetFilter,utm,individualAnalyseView', \In2code\Lux\Controller\LeadController::class => 'dashboard,list,detail,downloadCsv,remove,deactivate,resetFilter', \In2code\Lux\Controller\GeneralController::class => 'information' diff --git a/ext_tables.sql b/ext_tables.sql index 7c017c6b..9811c0c6 100644 --- a/ext_tables.sql +++ b/ext_tables.sql @@ -150,6 +150,42 @@ CREATE TABLE tx_lux_domain_model_pagevisit ( KEY language (l10n_parent,sys_language_uid) ); +CREATE TABLE tx_lux_domain_model_individualvisit ( + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + visitor int(11) DEFAULT '0' NOT NULL, + + identifier_foreign int(11) DEFAULT '0' NOT NULL, + table_foreign varchar(255) DEFAULT '' NOT NULL, + pagevisit int(11) DEFAULT '0' NOT NULL, + language int(11) DEFAULT '0' NOT NULL, + domain varchar(255) DEFAULT '' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY visitor (visitor), + KEY identifier (identifier), + KEY table (table), + KEY pagevisit (pagevisit), + KEY languagelux (language), + KEY domain (domain(50)), + KEY crdate (crdate), + KEY language (l10n_parent,sys_language_uid) +); + CREATE TABLE tx_lux_domain_model_newsvisit ( uid int(11) NOT NULL auto_increment, pid int(11) DEFAULT '0' NOT NULL,