├── .env
├── Classes
├── Backend
│ ├── Buttons
│ │ └── NavigationGroupButton.php
│ ├── LiveSearch
│ │ └── Visitor.php
│ └── Units
│ │ ├── AbstractUnit.php
│ │ ├── Analysis
│ │ └── Dashboard
│ │ │ ├── Browser.php
│ │ │ ├── Downloads.php
│ │ │ ├── Pagevisits.php
│ │ │ ├── Pagevisitsleads.php
│ │ │ ├── Socialmedia.php
│ │ │ └── Top
│ │ │ ├── Downloads.php
│ │ │ ├── News.php
│ │ │ ├── Pages.php
│ │ │ └── Search.php
│ │ ├── Lead
│ │ └── Dashboard
│ │ │ ├── Countrylist.php
│ │ │ ├── Hottest.php
│ │ │ ├── Identified.php
│ │ │ ├── Identifiedpermethod.php
│ │ │ ├── Identifiedpermonth.php
│ │ │ ├── Map.php
│ │ │ ├── Recurring.php
│ │ │ └── Referrer.php
│ │ ├── Pageoverview
│ │ ├── Analysis
│ │ │ ├── Body.php
│ │ │ └── Title.php
│ │ └── Leads
│ │ │ ├── Body.php
│ │ │ └── Title.php
│ │ ├── UnitFinder.php
│ │ └── UnitInterface.php
├── Command
│ ├── ExtbaseCommandTrait.php
│ ├── LuxAnonymizeCommand.php
│ ├── LuxAutorelateToFrontendUsersCommand.php
│ ├── LuxCacheWarmupCommand.php
│ ├── LuxCleanupAllVisitorsCommand.php
│ ├── LuxCleanupUnknownVisitorsByAgeCommand.php
│ ├── LuxCleanupVisitorByUidCommand.php
│ ├── LuxCleanupVisitorsByAgeCommand.php
│ ├── LuxCleanupVisitorsByPropertyCommand.php
│ ├── LuxDemoDataCommand.php
│ ├── LuxLeadSendSummaryCommand.php
│ ├── LuxLeadSendSummaryOfKnownCompaniesCommand.php
│ ├── LuxLeadSendSummaryOfLuxCategoryCommand.php
│ ├── LuxServiceRecalculateScoringCommand.php
│ └── LuxSetWiredmindCompanyInformationCommand.php
├── Controller
│ ├── AbTestingController.php
│ ├── AbstractController.php
│ ├── AnalysisController.php
│ ├── FrontendController.php
│ ├── GeneralController.php
│ ├── LeadController.php
│ ├── ShortenerController.php
│ ├── UtmGeneratorController.php
│ └── WorkflowController.php
├── DataProcessing
│ ├── FieldMappingProcessor.php
│ └── FormFieldMappingProcessor.php
├── Domain
│ ├── Cache
│ │ ├── CacheLayer.php
│ │ └── CacheWarmup.php
│ ├── DataProvider
│ │ ├── AbstractDataProvider.php
│ │ ├── AbstractDynamicFilterDataProvider.php
│ │ ├── AllLinkclickDataProvider.php
│ │ ├── BrowserAmountDataProvider.php
│ │ ├── CompanyAmountPerMonthDataProvider.php
│ │ ├── CompanyCategoryScoringsDataProvider.php
│ │ ├── CompanyScoringWeeksDataProvider.php
│ │ ├── DataProviderInterface.php
│ │ ├── DomainDataProvider.php
│ │ ├── DomainNewsDataProvider.php
│ │ ├── DownloadsDataProvider.php
│ │ ├── IdentificationMethodsDataProvider.php
│ │ ├── LanguagesDataProvider.php
│ │ ├── LanguagesNewsDataProvider.php
│ │ ├── LeadsPerTimeDataProvider.php
│ │ ├── LinkclickDataProvider.php
│ │ ├── NewsvisistsDataProvider.php
│ │ ├── PageOverview
│ │ │ ├── AbstractDataProvider.php
│ │ │ ├── GotinExternalDataProvider.php
│ │ │ ├── GotinInternalDataProvider.php
│ │ │ └── GotoutInternalDataProvider.php
│ │ ├── PagevisistsDataProvider.php
│ │ ├── ReferrerAmountDataProvider.php
│ │ ├── RevenueClassDataProvider.php
│ │ ├── SearchDataProvider.php
│ │ ├── SocialMediaDataProvider.php
│ │ ├── UtmCampaignDataProvider.php
│ │ ├── UtmDataProvider.php
│ │ ├── UtmMediaDataProvider.php
│ │ ├── UtmSourceDataProvider.php
│ │ ├── VisitorCategoryScoringsDataProvider.php
│ │ └── VisitorScoringWeeksDataProvider.php
│ ├── Factory
│ │ ├── CompanyFactory.php
│ │ ├── Ipinformation
│ │ │ ├── AbstractIpinformation.php
│ │ │ ├── Handler.php
│ │ │ ├── IpApi.php
│ │ │ ├── IpinformationInterface.php
│ │ │ └── Iplist.php
│ │ ├── UtmFactory.php
│ │ └── VisitorFactory.php
│ ├── Finisher
│ │ ├── AbstractFinisher.php
│ │ ├── DisableEmail4LinkFinisher.php
│ │ ├── ErrorLoggingFinisher.php
│ │ ├── FinisherHandler.php
│ │ └── FinisherInterface.php
│ ├── LogEventListeners
│ │ └── Log.php
│ ├── Model
│ │ ├── AbstractModel.php
│ │ ├── Attribute.php
│ │ ├── Category.php
│ │ ├── Categoryscoring.php
│ │ ├── Company.php
│ │ ├── Download.php
│ │ ├── File.php
│ │ ├── Fingerprint.php
│ │ ├── FrontendUser.php
│ │ ├── FrontendUserGroup.php
│ │ ├── Ipinformation.php
│ │ ├── Linkclick.php
│ │ ├── Linklistener.php
│ │ ├── Log.php
│ │ ├── Metadata.php
│ │ ├── News.php
│ │ ├── Newsvisit.php
│ │ ├── Page.php
│ │ ├── Pagevisit.php
│ │ ├── Search.php
│ │ ├── Transfer
│ │ │ └── FilterDto.php
│ │ ├── User.php
│ │ ├── Utm.php
│ │ └── Visitor.php
│ ├── Repository
│ │ ├── AbstractRepository.php
│ │ ├── AttributeRepository.php
│ │ ├── CategoryRepository.php
│ │ ├── CategoryscoringRepository.php
│ │ ├── CompanyRepository.php
│ │ ├── DownloadRepository.php
│ │ ├── FileRepository.php
│ │ ├── FingerprintRepository.php
│ │ ├── FrontendUserRepository.php
│ │ ├── IpinformationRepository.php
│ │ ├── LanguageRepository.php
│ │ ├── LinkclickRepository.php
│ │ ├── LinklistenerRepository.php
│ │ ├── LogRepository.php
│ │ ├── NewsRepository.php
│ │ ├── NewsvisitRepository.php
│ │ ├── PageRepository.php
│ │ ├── PagevisitRepository.php
│ │ ├── Remote
│ │ │ └── WiredmindsRepository.php
│ │ ├── SearchRepository.php
│ │ ├── UserRepository.php
│ │ ├── UtmRepository.php
│ │ └── VisitorRepository.php
│ ├── Service
│ │ ├── AnonymizeService.php
│ │ ├── BranchService.php
│ │ ├── CategoryScoringService.php
│ │ ├── CompanyConfigurationService.php
│ │ ├── CompanyInformationService.php
│ │ ├── ConfigurationService.php
│ │ ├── CountryService.php
│ │ ├── DemoDataService.php
│ │ ├── Email
│ │ │ ├── ErrorService.php
│ │ │ ├── SendAssetEmail4LinkService.php
│ │ │ └── SendSummaryService.php
│ │ ├── FileService.php
│ │ ├── GeoService.php
│ │ ├── GetCompanyFromIpService.php
│ │ ├── Image
│ │ │ ├── AbstractImageService.php
│ │ │ ├── CompanyImageService.php
│ │ │ ├── ImageServiceInterface.php
│ │ │ └── VisitorImageService.php
│ │ ├── LogService.php
│ │ ├── PermissionTrait.php
│ │ ├── Provider
│ │ │ ├── AllowedMail.php
│ │ │ ├── CustomerMail.php
│ │ │ └── Telecommunication.php
│ │ ├── RedirectService.php
│ │ ├── Referrer
│ │ │ ├── Readable.php
│ │ │ └── SocialMedia.php
│ │ ├── RenderingTimeService.php
│ │ ├── ScoringService.php
│ │ ├── SiteService.php
│ │ ├── Uri
│ │ │ ├── AbstractRecord.php
│ │ │ ├── EditRecord.php
│ │ │ ├── NewRecord.php
│ │ │ ├── RecordInterface.php
│ │ │ └── WebRecord.php
│ │ └── VisitorMergeService.php
│ └── Tracker
│ │ ├── AbTestingTracker.php
│ │ ├── AbstractFrontenduserTracker.php
│ │ ├── AttributeTracker.php
│ │ ├── CompanyTracker.php
│ │ ├── DownloadTracker.php
│ │ ├── EventTracker.php
│ │ ├── FrontenduserAuthenticationTracker.php
│ │ ├── LinkClickTracker.php
│ │ ├── LuxletterlinkAttributeTracker.php
│ │ ├── NewsTracker.php
│ │ ├── PageTracker.php
│ │ ├── SearchTracker.php
│ │ ├── StopTracking.php
│ │ └── UtmTracker.php
├── Events
│ ├── AfterTrackingEvent.php
│ ├── AttributeCreateEvent.php
│ ├── AttributeOverwriteEvent.php
│ ├── Log
│ │ ├── DownloadEvent.php
│ │ ├── EventTrackerEvent.php
│ │ ├── LinkClickEvent.php
│ │ ├── LogEmail4linkSendEmailEvent.php
│ │ ├── LogEmail4linkSendEmailFailedEvent.php
│ │ ├── LogVisitorEvent.php
│ │ ├── LogVisitorIdentifiedByEmail4linkEvent.php
│ │ ├── LogVisitorIdentifiedByFieldlisteningEvent.php
│ │ ├── LogVisitorIdentifiedByFormlisteningEvent.php
│ │ ├── LogVisitorIdentifiedByFrontendauthenticationEvent.php
│ │ ├── LogVisitorIdentifiedByLuxletterlinkEvent.php
│ │ ├── SearchEvent.php
│ │ └── UtmEvent.php
│ ├── NewsTrackerEvent.php
│ ├── PageTrackerEvent.php
│ ├── ReadableReferrersEvent.php
│ ├── SetAssetEmail4LinkEvent.php
│ ├── StopAnyProcessBeforePersistenceEvent.php
│ ├── VisitorFactoryAfterCreateNewEvent.php
│ ├── VisitorFactoryBeforeCreateNewEvent.php
│ └── VisitorsMergeEvent.php
├── Exception
│ ├── ActionNotAllowedException.php
│ ├── ArgumentsException.php
│ ├── AuthenticationException.php
│ ├── CallerException.php
│ ├── ClassDoesNotExistException.php
│ ├── ConfigurationException.php
│ ├── ConnectionFailedException.php
│ ├── ContextException.php
│ ├── DisabledException.php
│ ├── DisallowedUserAgentException.php
│ ├── EmailValidationException.php
│ ├── EnvironmentException.php
│ ├── FakeException.php
│ ├── FileNotFoundException.php
│ ├── FingerprintMustNotBeEmptyException.php
│ ├── InterfaceIsMissingException.php
│ ├── IpinformationServiceConnectionFailureException.php
│ ├── NotPaginatableException.php
│ ├── ParametersException.php
│ ├── RequestException.php
│ ├── UnexpectedValueException.php
│ └── Validation
│ │ └── IdentificatorFormatException.php
├── Hooks
│ ├── LuxLinkListenerLinkhandler.php
│ ├── LuxletterLinkLuxIdentificationHandler.php
│ └── PageOverview.php
├── TCA
│ ├── GetStatusForLogSelection.php
│ ├── PreventReferenceIndex.php
│ └── VisitorTitle.php
├── Update
│ ├── AddSites
│ │ ├── AbstractSiteUpgrade.php
│ │ ├── AddSitesForDownloads.php
│ │ ├── AddSitesForLinkclick.php
│ │ └── AddSitesForPagevisits.php
│ ├── AddSitesUpgradeWizard.php
│ └── UpdateFingerprintRelationsUpgradeWizard.php
├── UserFunc
│ └── EnableStatus.php
├── Utility
│ ├── ArrayUtility.php
│ ├── BackendUtility.php
│ ├── CacheHashUtility.php
│ ├── CacheLayerUtility.php
│ ├── ConfigurationUtility.php
│ ├── CookieUtility.php
│ ├── DatabaseUtility.php
│ ├── DateUtility.php
│ ├── EmailUtility.php
│ ├── EnvironmentUtility.php
│ ├── ExtensionUtility.php
│ ├── FileUtility.php
│ ├── FrontendUtility.php
│ ├── IpUtility.php
│ ├── LocalizationUtility.php
│ ├── MathUtility.php
│ ├── ObjectUtility.php
│ ├── StringUtility.php
│ └── UrlUtility.php
├── ViewHelpers
│ ├── Backend
│ │ ├── CacheViewHelper.php
│ │ ├── GetClassNameOnActionViewHelper.php
│ │ ├── GetRenderingTimeViewHelper.php
│ │ ├── UriEditViewHelper.php
│ │ ├── UriNewViewHelper.php
│ │ └── UriWebViewHelper.php
│ ├── Charts
│ │ ├── GetIdentifiedNumbersPerMonthViewHelper.php
│ │ ├── GetLastDayNamesViewHelper.php
│ │ ├── GetLastMonthNamesViewHelper.php
│ │ └── GetPercentageFromValueViewHelper.php
│ ├── Condition
│ │ ├── IsLuxenterpriseExtensionActivatedViewHelper.php
│ │ └── IsTypo3TwelveViewHelper.php
│ ├── Form
│ │ └── GetOptionsArrayTimePeriodFilterViewHelper.php
│ ├── Format
│ │ ├── CropBeginnViewHelper.php
│ │ ├── GetFilenameFromPathAndFilenameViewHelper.php
│ │ ├── ImplodeViewHelper.php
│ │ ├── PercentViewHelper.php
│ │ ├── QuotesViewHelper.php
│ │ ├── ReadableDateViewHelper.php
│ │ ├── ReadableNumberViewHelper.php
│ │ └── UpperViewHelper.php
│ ├── Helper
│ │ └── GetRangeViewHelper.php
│ ├── Lead
│ │ ├── GetDateOfLatestPageVisitAndPageViewHelper.php
│ │ └── GetDateOfLatestPageVisitViewHelper.php
│ ├── Page
│ │ ├── GetLastVisitedPageByPageIdentifierViewHelper.php
│ │ └── GetVisitedPageAmountByPageIdentifierAndVisitorViewHelper.php
│ ├── Pagination
│ │ ├── PaginateViewHelper.php
│ │ └── UriViewHelper.php
│ ├── Rendering
│ │ └── ContentElementViewHelper.php
│ ├── Repository
│ │ └── GetContentHeaderFromContentUidViewHelper.php
│ ├── String
│ │ ├── GetRandomValueViewHelper.php
│ │ ├── GetRangeViewHelper.php
│ │ └── ImplodeOnObjectsPropertyViewHelper.php
│ └── Visitor
│ │ ├── GetAnyPropertyViewHelper.php
│ │ ├── GetCategoryScoringFromCategoryAndVisitorViewHelper.php
│ │ ├── GetPropertyFromAttributesViewHelper.php
│ │ └── GetPropertyFromIpinformationsViewHelper.php
└── Widgets
│ └── DataProvider
│ ├── LuxBrowserDataProvider.php
│ ├── LuxDownloadsDataProvider.php
│ ├── LuxDownloadsWeekDataProvider.php
│ ├── LuxHottestLeadsDataProvider.php
│ ├── LuxIdentifiedDataProvider.php
│ ├── LuxIdentifiedPerMonthDataProvider.php
│ ├── LuxNewsDataProvider.php
│ ├── LuxPageVisitsDataProvider.php
│ ├── LuxPageVisitsWeekDataProvider.php
│ ├── LuxRecurringDataProvider.php
│ ├── LuxReferrerDataProvider.php
│ ├── LuxSearchtermsDataProvider.php
│ ├── LuxUtmCampaignDataProvider.php
│ ├── LuxUtmMediaDataProvider.php
│ └── LuxUtmSourceDataProvider.php
├── Configuration
├── Backend
│ ├── AjaxRoutes.php
│ ├── DashboardPresets.php
│ ├── DashboardWidgetGroups.php
│ └── Modules.php
├── ContentSecurityPolicies.php
├── DemoData
│ ├── tx_lux_domain_model_attribute.php
│ ├── tx_lux_domain_model_categoryscoring.php
│ ├── tx_lux_domain_model_company.php
│ ├── tx_lux_domain_model_download.php
│ ├── tx_lux_domain_model_fingerprint.php
│ ├── tx_lux_domain_model_ipinformation.php
│ ├── tx_lux_domain_model_linkclick.php
│ ├── tx_lux_domain_model_linklistener.php
│ ├── tx_lux_domain_model_log.php
│ ├── tx_lux_domain_model_newsvisit.php
│ ├── tx_lux_domain_model_pagevisit.php
│ ├── tx_lux_domain_model_search.php
│ ├── tx_lux_domain_model_utm.php
│ ├── tx_lux_domain_model_visitor.php
│ ├── tx_luxenterprise_domain_model_abpagevisit.php
│ ├── tx_luxenterprise_domain_model_shortener.php
│ └── tx_luxenterprise_domain_model_shortenervisit.php
├── Extbase
│ └── Persistence
│ │ └── Classes.php
├── FlexForms
│ └── FlexFormPi1.xml
├── JavaScriptModules.php
├── Services.php
├── Services.yaml
├── TCA
│ ├── Overrides
│ │ ├── sys_category.php
│ │ ├── sys_template.php
│ │ └── tt_content.php
│ ├── tx_lux_domain_model_attribute.php
│ ├── tx_lux_domain_model_categoryscoring.php
│ ├── tx_lux_domain_model_company.php
│ ├── tx_lux_domain_model_download.php
│ ├── tx_lux_domain_model_fingerprint.php
│ ├── tx_lux_domain_model_ipinformation.php
│ ├── tx_lux_domain_model_linkclick.php
│ ├── tx_lux_domain_model_linklistener.php
│ ├── tx_lux_domain_model_log.php
│ ├── tx_lux_domain_model_newsvisit.php
│ ├── tx_lux_domain_model_pagevisit.php
│ ├── tx_lux_domain_model_search.php
│ ├── tx_lux_domain_model_utm.php
│ └── tx_lux_domain_model_visitor.php
├── TSConfig
│ ├── Lux.typoscript
│ └── LuxLetter.typoscript
├── TypoScript
│ ├── Lux
│ │ ├── 01_TrackingConfiguration.typoscript
│ │ ├── 02_IdentificationConfiguration.typoscript
│ │ ├── 03_BackendViewConfiguration.typoscript
│ │ ├── 04_FinisherConfiguration.typoscript
│ │ ├── 05_IpinformationConfiguration.typoscript
│ │ ├── 06_GeneralConfiguration.typoscript
│ │ ├── 10_ExtensionConfiguration.typoscript
│ │ ├── 11_PageConfiguration.typoscript
│ │ ├── 12_PageTypeNumConfiguration.typoscript
│ │ ├── 13_LinkhandlerConfiguration.typoscript
│ │ └── 20_Configuration.typoscript
│ ├── constants.typoscript
│ └── setup.typoscript
└── Yaml
│ └── CkEditor.yaml
├── Documentation
├── Developer
│ ├── Features.md
│ └── Index.md
├── Images
│ ├── documentation_categoryscorings_categories.png
│ ├── documentation_categoryscorings_detail.png
│ ├── documentation_categoryscorings_page.png
│ ├── documentation_companies_list.png
│ ├── documentation_companies_list_preview.png
│ ├── documentation_companies_notoken.png
│ ├── documentation_company_detail.png
│ ├── documentation_identification_fieldmapping_dashboard.png
│ ├── documentation_identification_fieldmapping_frontend.png
│ ├── documentation_identification_formmapping_dashboard.png
│ ├── documentation_identification_formmapping_frontend.png
│ ├── documentation_info.png
│ ├── documentation_installation_browserrequest.png
│ ├── documentation_installation_extensionmanager.png
│ ├── documentation_installation_extensionmanager1.png
│ ├── documentation_installation_extensionmanager2.png
│ ├── documentation_installation_extensionmanager3.png
│ ├── documentation_installation_extensionmanager4.png
│ ├── documentation_leads_list.png
│ ├── documentation_leads_list_detail.png
│ ├── documentation_marketing_donottrack.png
│ ├── documentation_marketing_scoringcategory.png
│ ├── documentation_marketing_scoringdiagram.png
│ ├── documentation_marketing_slack.png
│ ├── documentation_pageoverview.png
│ ├── documentation_plugin_contextualcontent.png
│ ├── documentation_plugin_hiddencontent.png
│ ├── documentation_plugin_optout_backend.png
│ ├── documentation_plugin_optout_frontend1.png
│ ├── documentation_plugin_optout_frontend2.png
│ ├── documentation_scoring.png
│ ├── documentation_workflow_edit_step1.png
│ ├── documentation_workflow_edit_step2.png
│ ├── documentation_workflow_edit_step3.png
│ ├── logo_claim.svg
│ ├── logo_claim_white.svg
│ ├── screenshot_abtesting_pageoverview.png
│ ├── screenshot_abtesting_pagesettings.png
│ ├── screenshot_analysis_content.png
│ ├── screenshot_analysis_content_dark.png
│ ├── screenshot_analysis_dashboard.png
│ ├── screenshot_analysis_linklisteners.png
│ ├── screenshot_analysis_linklisteners_detail.png
│ ├── screenshot_analysis_search.png
│ ├── screenshot_analysis_utm.png
│ ├── screenshot_dashboard.png
│ ├── screenshot_detail.png
│ ├── screenshot_email4link.png
│ ├── screenshot_email4link_ckeditor_plugin.png
│ ├── screenshot_lead_actions.png
│ ├── screenshot_linklistener_link.png
│ ├── screenshot_list.png
│ ├── screenshot_list2.png
│ ├── screenshot_modules.png
│ ├── screenshot_pageoverview.png
│ ├── screenshot_pageoverview_leads.png
│ ├── screenshot_summarymail.png
│ ├── screenshot_typo3dashboard.png
│ ├── screenshot_urlshortener_edit.png
│ ├── screenshot_urlshortener_list.png
│ ├── screenshot_utmgenerator_edit.png
│ ├── screenshot_utmgenerator_list.png
│ ├── screenshot_workflow_action.png
│ ├── screenshot_workflow_list.png
│ └── screenshot_workflow_trigger.png
├── Index.md
├── Marketing
│ └── Index.md
├── Privacy
│ ├── Commands.md
│ ├── DoNotTrack.md
│ ├── FingerprintsAndLocalStorage.md
│ ├── Index.md
│ ├── IpAddresses.md
│ ├── OptInAndOptOut.md
│ └── PrivacyPage.md
├── Technical
│ ├── API
│ │ ├── Create.md
│ │ ├── FindAllByAnyProperties.md
│ │ ├── FindByProperty.md
│ │ └── Index.md
│ ├── Analysis
│ │ └── Index.md
│ ├── Campaigns
│ │ ├── AbTesting.md
│ │ ├── Index.md
│ │ ├── UrlShortener.md
│ │ ├── UtmGenerator.md
│ │ └── Workflows.md
│ ├── Categoryscorings
│ │ └── Index.md
│ ├── Changelog
│ │ └── Index.md
│ ├── Commands
│ │ └── Index.md
│ ├── Editors
│ │ └── Index.md
│ ├── Events
│ │ └── Index.md
│ ├── FAQ
│ │ └── Index.md
│ ├── Finisher
│ │ └── Index.md
│ ├── Identification
│ │ └── Index.md
│ ├── Index.md
│ ├── Installation
│ │ └── Index.md
│ ├── Leads
│ │ ├── Companies.md
│ │ ├── Index.md
│ │ └── Leads.md
│ └── Plugins
│ │ └── Index.md
└── guides.xml
├── Makefile
├── Resources
├── Private
│ ├── .htaccess
│ ├── Build
│ │ ├── .babelrc
│ │ ├── .nvmrc
│ │ ├── JavaScript
│ │ │ ├── Backend
│ │ │ │ ├── Diagram.js
│ │ │ │ ├── Module.js
│ │ │ │ └── PageOverview.js
│ │ │ └── Frontend
│ │ │ │ ├── Identification.js
│ │ │ │ ├── Lux.js
│ │ │ │ └── Modern.js
│ │ ├── build.config.ts
│ │ ├── gulpfile.js
│ │ ├── package.json
│ │ ├── readme.md
│ │ └── rollup.config.js
│ ├── Language
│ │ ├── de.locallang_db.xlf
│ │ ├── de.locallang_mod.xlf
│ │ ├── de.locallang_mod_analysis.xlf
│ │ ├── de.locallang_mod_lead.xlf
│ │ ├── de.locallang_mod_workflow.xlf
│ │ ├── locallang_db.xlf
│ │ ├── locallang_mod.xlf
│ │ ├── locallang_mod_analysis.xlf
│ │ ├── locallang_mod_lead.xlf
│ │ └── locallang_mod_workflow.xlf
│ ├── Layouts
│ │ └── Backend.html
│ ├── Partials
│ │ ├── Box
│ │ │ ├── Analysis
│ │ │ │ ├── AllLinkclicks.html
│ │ │ │ ├── Browser.html
│ │ │ │ ├── Domain.html
│ │ │ │ ├── Downloads.html
│ │ │ │ ├── DownloadsList.html
│ │ │ │ ├── Language.html
│ │ │ │ ├── Linkclicks.html
│ │ │ │ ├── Newsvisits.html
│ │ │ │ ├── NewsvisitsList.html
│ │ │ │ ├── Pagevisits.html
│ │ │ │ ├── PagevisitsList.html
│ │ │ │ ├── Search.html
│ │ │ │ ├── SearchList.html
│ │ │ │ ├── SocialMedia.html
│ │ │ │ ├── TopDownloads.html
│ │ │ │ ├── TopNews.html
│ │ │ │ ├── TopPages.html
│ │ │ │ ├── TopSearch.html
│ │ │ │ ├── Utm.html
│ │ │ │ ├── UtmCampaign.html
│ │ │ │ ├── UtmList.html
│ │ │ │ ├── UtmMedium.html
│ │ │ │ └── UtmSource.html
│ │ │ ├── Company
│ │ │ │ └── Visitors.html
│ │ │ ├── Lead
│ │ │ │ ├── CategoryScoring.html
│ │ │ │ ├── Information.html
│ │ │ │ ├── PageFunnel.html
│ │ │ │ ├── Profiles.html
│ │ │ │ ├── Properties.html
│ │ │ │ └── Scoring.html
│ │ │ ├── Leads
│ │ │ │ ├── CompanyAmountPerMonth.html
│ │ │ │ ├── CompanyRevenueClasses.html
│ │ │ │ ├── CountryList.html
│ │ │ │ ├── Hottest.html
│ │ │ │ ├── Identified.html
│ │ │ │ ├── IdentifiedPerMethod.html
│ │ │ │ ├── IdentifiedPerMonth.html
│ │ │ │ ├── LatestCompanies.html
│ │ │ │ ├── Map.html
│ │ │ │ ├── Pagevisits.html
│ │ │ │ ├── Recurring.html
│ │ │ │ ├── Referrer.html
│ │ │ │ ├── Status.html
│ │ │ │ ├── TimeFrames.html
│ │ │ │ └── WhoIsOnline.html
│ │ │ └── Miscellaneous
│ │ │ │ ├── FilterInformation.html
│ │ │ │ └── Log.html
│ │ ├── Filter
│ │ │ ├── Analysis
│ │ │ │ ├── Content.html
│ │ │ │ ├── Dashboard.html
│ │ │ │ ├── LinkListener.html
│ │ │ │ ├── News.html
│ │ │ │ ├── Search.html
│ │ │ │ └── Utm.html
│ │ │ ├── Lead
│ │ │ │ ├── Companies.html
│ │ │ │ ├── Dashboard.html
│ │ │ │ └── List.html
│ │ │ └── TableSorting.html
│ │ ├── Miscellaneous
│ │ │ ├── FlashMessages.html
│ │ │ ├── NoSites.html
│ │ │ ├── NoValues.html
│ │ │ ├── Pagination.html
│ │ │ └── RenderingTime.html
│ │ └── PageOverview
│ │ │ ├── Analysis
│ │ │ ├── Body.html
│ │ │ └── Title.html
│ │ │ └── Leads
│ │ │ ├── Body.html
│ │ │ └── Title.html
│ ├── Sass
│ │ ├── Frontend.scss
│ │ ├── Modules.scss
│ │ ├── PageOverview.scss
│ │ ├── _BasicLightbox.scss
│ │ ├── _Grid.scss
│ │ ├── _Settings.scss
│ │ ├── _Timeline.scss
│ │ ├── _Wizard.scss
│ │ └── _WizardForm.scss
│ ├── Static
│ │ ├── DisallowedMailProviders.txt
│ │ ├── IpCompany.txt
│ │ ├── TelecommunicationProviderTerms.txt
│ │ └── TelecommunicationProviders.txt
│ └── Templates
│ │ ├── Analysis
│ │ ├── Content.html
│ │ ├── ContentCsv.html
│ │ ├── ContentDetailDownloadAjax.html
│ │ ├── ContentDetailPageAjax.html
│ │ ├── Dashboard.html
│ │ ├── DetailDownload.html
│ │ ├── DetailLinkListener.html
│ │ ├── DetailNews.html
│ │ ├── DetailPage.html
│ │ ├── DetailSearch.html
│ │ ├── LinkListener.html
│ │ ├── LinkListenerAjax.html
│ │ ├── LinkListenerCsv.html
│ │ ├── News.html
│ │ ├── NewsCsv.html
│ │ ├── NewsDetailPageAjax.html
│ │ ├── Search.html
│ │ ├── SearchDetailPageAjax.html
│ │ ├── Utm.html
│ │ ├── UtmCsv.html
│ │ └── UtmDetailPageAjax.html
│ │ ├── Backend
│ │ ├── PageOverview.html
│ │ └── Units
│ │ │ ├── Analysis
│ │ │ └── Dashboard
│ │ │ │ ├── Browser.html
│ │ │ │ ├── Downloads.html
│ │ │ │ ├── Pagevisits.html
│ │ │ │ ├── Pagevisitsleads.html
│ │ │ │ ├── Socialmedia.html
│ │ │ │ └── Top
│ │ │ │ ├── Downloads.html
│ │ │ │ ├── News.html
│ │ │ │ ├── Pages.html
│ │ │ │ └── Search.html
│ │ │ ├── Lead
│ │ │ └── Dashboard
│ │ │ │ ├── Countrylist.html
│ │ │ │ ├── Hottest.html
│ │ │ │ ├── Identified.html
│ │ │ │ ├── Identifiedpermethod.html
│ │ │ │ ├── Identifiedpermonth.html
│ │ │ │ ├── Map.html
│ │ │ │ ├── Recurring.html
│ │ │ │ └── Referrer.html
│ │ │ └── Pageoverview
│ │ │ ├── Analysis
│ │ │ ├── Body.html
│ │ │ └── Title.html
│ │ │ └── Leads
│ │ │ ├── Body.html
│ │ │ └── Title.html
│ │ ├── Configuration
│ │ ├── JavaScriptFieldMappingConfiguration.js
│ │ └── JavaScriptFormFieldMappingConfiguration.js
│ │ ├── Frontend
│ │ ├── Email4link.html
│ │ └── TrackingOptOut.html
│ │ ├── General
│ │ └── Information.html
│ │ ├── Lead
│ │ ├── Companies.html
│ │ ├── CompaniesDisabled.html
│ │ ├── Company.html
│ │ ├── CompanyListDetailAjax.html
│ │ ├── Dashboard.html
│ │ ├── Detail.html
│ │ ├── DownloadCsv.html
│ │ ├── DownloadCsvCompanies.html
│ │ ├── List.html
│ │ └── ListDetailAjax.html
│ │ ├── Mail
│ │ ├── Email4LinkMail.html
│ │ └── SummaryMail.html
│ │ ├── Newsletter
│ │ └── Receiver.html
│ │ ├── UserFunc
│ │ └── EnableStatus.html
│ │ ├── ViewHelpers
│ │ └── Widget
│ │ │ └── Paginate
│ │ │ └── Index.html
│ │ └── Workflow
│ │ └── List.html
└── Public
│ ├── Css
│ ├── CKEditor
│ │ └── Email4LinkPopup.css
│ ├── Frontend.min.css
│ ├── Modules.min.css
│ ├── PageOverview.min.css
│ └── Vendor
│ │ ├── HoverEffectIdeas.css
│ │ └── Spinkit.min.css
│ ├── Icons
│ ├── Extension.svg
│ ├── decrease.svg
│ ├── increase.svg
│ ├── lux.png
│ ├── lux.svg
│ ├── lux_module_analysis.svg
│ ├── lux_module_lead.svg
│ ├── lux_module_workflow.svg
│ ├── lux_white.svg
│ ├── star.svg
│ ├── tx_lux_domain_model_attribute.svg
│ ├── tx_lux_domain_model_categoryscoring.svg
│ ├── tx_lux_domain_model_company.svg
│ ├── tx_lux_domain_model_download.svg
│ ├── tx_lux_domain_model_fingerprint.svg
│ ├── tx_lux_domain_model_ipinformation.svg
│ ├── tx_lux_domain_model_linkclick.svg
│ ├── tx_lux_domain_model_linklistener.svg
│ ├── tx_lux_domain_model_log.svg
│ ├── tx_lux_domain_model_newsvisit.svg
│ ├── tx_lux_domain_model_pagevisit.svg
│ ├── tx_lux_domain_model_search.svg
│ ├── tx_lux_domain_model_utm.svg
│ └── tx_lux_domain_model_visitor.svg
│ ├── Images
│ ├── AvatarDefault.svg
│ ├── Companies
│ │ ├── Companies.png
│ │ └── Company.png
│ ├── Enterprise
│ │ ├── AbTestingPageModule.png
│ │ ├── ContextualContent.png
│ │ ├── UrlShortener.png
│ │ ├── WorkflowEnterpriseAction.png
│ │ ├── WorkflowEnterpriseTrigger.png
│ │ └── WorkflowFrontendLightbox.png
│ ├── LogoGoogle.svg
│ └── LogoGoogleMaps.svg
│ └── JavaScript
│ ├── Lux
│ ├── Diagram.min.js
│ ├── Lux.min.js
│ ├── Module.min.js
│ ├── PageOverview.min.js
│ └── modern
│ │ ├── chunks
│ │ └── Lux.mjs
│ │ └── index.mjs
│ ├── Static
│ └── CkEditorPlugins
│ │ └── luxEmail4Link
│ │ ├── email4link
│ │ ├── command.js
│ │ ├── editing.js
│ │ ├── ui.js
│ │ └── view.js
│ │ ├── plugin.js
│ │ └── ui
│ │ ├── checkboxview.js
│ │ └── textareaview.js
│ └── Vendor
│ └── Chart.min.js
├── codeception.yml
├── composer.json
├── docker-compose.selenium.yml
├── ext_conf_template.txt
├── ext_emconf.php
├── ext_localconf.php
├── ext_tables.php
├── ext_tables.sql
└── readme.md
/Classes/Backend/Units/Analysis/Dashboard/Browser.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Analysis/Browser/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | return [
26 | 'browserData' => GeneralUtility::makeInstance(BrowserAmountDataProvider::class, $this->filter),
27 | ];
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Analysis/Dashboard/Downloads.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Analysis/Downloads/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | return [
26 | 'numberOfDownloadsData' => GeneralUtility::makeInstance(DownloadsDataProvider::class, $this->filter),
27 | ];
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Analysis/Dashboard/Pagevisits.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Analysis/Pagevisits/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | return [
26 | 'numberOfVisitorsData' => GeneralUtility::makeInstance(PagevisistsDataProvider::class, $this->filter),
27 | ];
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Analysis/Dashboard/Pagevisitsleads.php:
--------------------------------------------------------------------------------
1 | $pagevisitsRepository->findLatestPagevisits($this->filter),
25 | ];
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Analysis/Dashboard/Socialmedia.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Analysis/SocialMedia/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | return [
26 | 'socialMediaData' => GeneralUtility::makeInstance(SocialMediaDataProvider::class, $this->filter),
27 | ];
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Analysis/Dashboard/Top/Downloads.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Analysis/TopDownloads/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | $downloadRepository = GeneralUtility::makeInstance(DownloadRepository::class);
26 | return [
27 | 'downloads' => $downloadRepository->findCombinedByHref($this->filter),
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Analysis/Dashboard/Top/News.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Analysis/TopNews/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | $newsvisitRepository = GeneralUtility::makeInstance(NewsvisitRepository::class);
26 | return [
27 | 'news' => $newsvisitRepository->findCombinedByNewsIdentifier($this->filter),
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Analysis/Dashboard/Top/Pages.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Analysis/TopPages/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | $pagevisitsRepository = GeneralUtility::makeInstance(PagevisitRepository::class);
26 | return [
27 | 'pages' => $pagevisitsRepository->findCombinedByPageIdentifier($this->filter),
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Analysis/Dashboard/Top/Search.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Analysis/TopSearch/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | $searchRepository = GeneralUtility::makeInstance(SearchRepository::class);
26 | return [
27 | 'searchterms' => $searchRepository->findCombinedBySearchIdentifier($this->filter),
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Lead/Dashboard/Countrylist.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Leads/CountryList/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | $ipinformationRepository = GeneralUtility::makeInstance(IpinformationRepository::class);
26 | return [
27 | 'countries' => $ipinformationRepository->findAllCountryCodesGrouped($this->filter),
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Lead/Dashboard/Hottest.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Leads/Hottest/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | $visitorRepository = GeneralUtility::makeInstance(VisitorRepository::class);
26 | return [
27 | 'hottestVisitors' => $visitorRepository->findByHottestScorings($this->filter->setLimit(10)),
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Lead/Dashboard/Map.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Leads/Map/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | $ipinformationRepository = GeneralUtility::makeInstance(IpinformationRepository::class);
26 | return [
27 | 'countries' => $ipinformationRepository->findAllCountryCodesGrouped($this->filter),
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/Lead/Dashboard/Referrer.php:
--------------------------------------------------------------------------------
1 | cacheLayer->isCacheAvailable('Box/Leads/Referrer/' . $this->filter->getHash())) {
23 | return [];
24 | }
25 | return [
26 | 'referrerAmountData' => GeneralUtility::makeInstance(ReferrerAmountDataProvider::class, $this->filter),
27 | ];
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/UnitFinder.php:
--------------------------------------------------------------------------------
1 | arguments = $arguments;
18 | }
19 |
20 | /**
21 | * @param string $path
22 | * @return UnitInterface
23 | * @throws ConfigurationException
24 | */
25 | public function find(string $path): UnitInterface
26 | {
27 | $pathParts = StringUtility::splitCamelcaseString($path);
28 | $classNameUnit = 'In2code\Lux\Backend\Units\\' . implode('\\', $pathParts);
29 | if (class_exists($classNameUnit) === false) {
30 | throw new ConfigurationException('Given class ' . $classNameUnit . ' does not exists', 1694522397);
31 | }
32 | /** @noinspection PhpParamsInspection */
33 | return GeneralUtility::makeInstance($classNameUnit, $this->arguments);
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Classes/Backend/Units/UnitInterface.php:
--------------------------------------------------------------------------------
1 | setRequest(
22 | (new ServerRequest())->withAttribute('applicationType', SystemEnvironmentBuilder::REQUESTTYPE_BE)
23 | );
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Classes/Controller/AbTestingController.php:
--------------------------------------------------------------------------------
1 | setFilter();
19 | }
20 |
21 | /**
22 | * @param FilterDto $filter
23 | * @return ResponseInterface
24 | */
25 | public function listAction(FilterDto $filter): ResponseInterface
26 | {
27 | $this->addDocumentHeaderForCurrentController();
28 | return $this->defaultRendering();
29 | }
30 |
31 | protected function addDocumentHeaderForCurrentController(): void
32 | {
33 | $this->addDocumentHeader([]);
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Classes/Domain/DataProvider/DataProviderInterface.php:
--------------------------------------------------------------------------------
1 | [
16 | * 13,
17 | * 23,
18 | * ],
19 | * 'titles' => [
20 | * 'Campaign A',
21 | * 'Campaign B',
22 | * ]
23 | * ]
24 | *
25 | * @return void
26 | * @throws ExceptionDbal
27 | */
28 | public function prepareData(): void
29 | {
30 | $utmRepository = GeneralUtility::makeInstance(UtmRepository::class);
31 | $rows = $utmRepository->findCombinedByField('utm_campaign', $this->filter);
32 | foreach ($rows as $row) {
33 | $this->data['titles'][] = $row['utm_campaign'];
34 | $this->data['amounts'][] = $row['count'];
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Classes/Domain/DataProvider/UtmMediaDataProvider.php:
--------------------------------------------------------------------------------
1 | [
16 | * 13,
17 | * 23,
18 | * 33,
19 | * ],
20 | * 'titles' => [
21 | * 'email',
22 | * 'google',
23 | * 'app',
24 | * ]
25 | * ]
26 | *
27 | * @return void
28 | * @throws ExceptionDbal
29 | */
30 | public function prepareData(): void
31 | {
32 | $utmRepository = GeneralUtility::makeInstance(UtmRepository::class);
33 | $rows = $utmRepository->findCombinedByField('utm_medium', $this->filter);
34 | foreach ($rows as $row) {
35 | $this->data['titles'][] = $row['utm_medium'];
36 | $this->data['amounts'][] = $row['count'];
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/Classes/Domain/DataProvider/UtmSourceDataProvider.php:
--------------------------------------------------------------------------------
1 | [
16 | * 13,
17 | * 23,
18 | * 33,
19 | * ],
20 | * 'titles' => [
21 | * 'Twitter',
22 | * 'Facebook',
23 | * 'LinkedIn',
24 | * ]
25 | * ]
26 | *
27 | * @return void
28 | * @throws ExceptionDbal
29 | */
30 | public function prepareData(): void
31 | {
32 | $utmRepository = GeneralUtility::makeInstance(UtmRepository::class);
33 | $rows = $utmRepository->findCombinedByField('utm_source', $this->filter);
34 | foreach ($rows as $row) {
35 | $this->data['titles'][] = $row['utm_source'];
36 | $this->data['amounts'][] = $row['count'];
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/Classes/Domain/Factory/Ipinformation/IpApi.php:
--------------------------------------------------------------------------------
1 | 'org',
10 | 'country' => 'country',
11 | 'countryCode' => 'countryCode',
12 | 'city' => 'city',
13 | 'lat' => 'lat',
14 | 'lon' => 'lon',
15 | 'zip' => 'zip',
16 | 'region' => 'region',
17 | ];
18 | }
19 |
--------------------------------------------------------------------------------
/Classes/Domain/Factory/Ipinformation/IpinformationInterface.php:
--------------------------------------------------------------------------------
1 | 'country', // name of country - like "Germany"
10 | 'countrycode' => 'countryCode', // ISO code of country - like "DE"
11 | 'detail' => 'org', // name of the organisation - like "Company A"
12 | ];
13 | }
14 |
--------------------------------------------------------------------------------
/Classes/Domain/Finisher/DisableEmail4LinkFinisher.php:
--------------------------------------------------------------------------------
1 | getVisitor()->isIdentified() && $this->getConfigurationByKey('enable') === '1';
11 | }
12 |
13 | public function start(): array
14 | {
15 | return [
16 | 'action' => 'disableEmail4Link',
17 | 'configuration' => [],
18 | 'finisher' => 'DisableEmail4Link',
19 | ];
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Classes/Domain/Finisher/FinisherInterface.php:
--------------------------------------------------------------------------------
1 | _setProperty('_languageUid', -1);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Classes/Domain/Model/Categoryscoring.php:
--------------------------------------------------------------------------------
1 | scoring;
18 | }
19 |
20 | public function setScoring(int $scoring): self
21 | {
22 | $this->scoring = $scoring;
23 | return $this;
24 | }
25 |
26 | public function getCategory(): ?Category
27 | {
28 | return $this->category;
29 | }
30 |
31 | public function setCategory(Category $category): self
32 | {
33 | $this->category = $category;
34 | return $this;
35 | }
36 |
37 | public function getVisitor(): Visitor
38 | {
39 | return $this->visitor;
40 | }
41 |
42 | public function setVisitor(Visitor $visitor): self
43 | {
44 | $this->visitor = $visitor;
45 | return $this;
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/Classes/Domain/Model/File.php:
--------------------------------------------------------------------------------
1 | metadata;
19 | }
20 |
21 | public function setMetadata(Metadata $metadata): self
22 | {
23 | $this->metadata = $metadata;
24 | return $this;
25 | }
26 |
27 | public function getName(): string
28 | {
29 | return $this->name;
30 | }
31 |
32 | public function setName(string $name): self
33 | {
34 | $this->name = $name;
35 | return $this;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Classes/Domain/Model/Ipinformation.php:
--------------------------------------------------------------------------------
1 | visitor;
18 | }
19 |
20 | public function setVisitor(Visitor $visitor): self
21 | {
22 | $this->visitor = $visitor;
23 | return $this;
24 | }
25 |
26 | public function getName(): string
27 | {
28 | return $this->name;
29 | }
30 |
31 | public function setName(string $name): self
32 | {
33 | $this->name = $name;
34 | return $this;
35 | }
36 |
37 | public function getValue(): string
38 | {
39 | return $this->value;
40 | }
41 |
42 | public function setValue(string $value): self
43 | {
44 | $this->value = $value;
45 | return $this;
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/Classes/Domain/Model/Metadata.php:
--------------------------------------------------------------------------------
1 |
15 | */
16 | protected ?ObjectStorage $categories = null;
17 |
18 | public function __construct()
19 | {
20 | $this->categories = new ObjectStorage();
21 | }
22 |
23 | public function getCategories(): ObjectStorage
24 | {
25 | return $this->categories;
26 | }
27 |
28 | /**
29 | * Return all identifiers to related categories
30 | *
31 | * @return array
32 | */
33 | public function getLuxCategories(): array
34 | {
35 | $categories = [];
36 | foreach ($this->getCategories() as $category) {
37 | if ($category->isLuxCategory() === true) {
38 | $categories[] = $category;
39 | }
40 | }
41 | return $categories;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Classes/Domain/Model/User.php:
--------------------------------------------------------------------------------
1 | name;
18 | }
19 |
20 | public function setName(string $name): self
21 | {
22 | $this->name = $name;
23 | return $this;
24 | }
25 |
26 | public function getUsername(): string
27 | {
28 | return $this->username;
29 | }
30 |
31 | public function setUsername(string $username): self
32 | {
33 | $this->username = $username;
34 | return $this;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Classes/Domain/Repository/AttributeRepository.php:
--------------------------------------------------------------------------------
1 | createQuery();
14 | $logicalAnd = [
15 | $query->equals('visitor', $visitor),
16 | $query->equals('name', $key),
17 | ];
18 | $query->matching($query->logicalAnd(...$logicalAnd));
19 | /** @var Attribute $attribute */
20 | $attribute = $query->execute()->getFirst();
21 | return $attribute;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Classes/Domain/Repository/CategoryscoringRepository.php:
--------------------------------------------------------------------------------
1 | select('uid', 'email')
28 | ->from(self::TABLE_NAME)
29 | ->where('email != \'\'')
30 | ->executeQuery()
31 | ->fetchAllAssociative();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/Classes/Domain/Repository/NewsRepository.php:
--------------------------------------------------------------------------------
1 | getTypoScriptSettingsByPath('general.disallowedMailProviderList');
24 | return FileUtility::isExactStringInFile($domain, GeneralUtility::getFileAbsFileName($list)) === false;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Classes/Domain/Service/Uri/EditRecord.php:
--------------------------------------------------------------------------------
1 | [
21 | $tableName => [
22 | $identifier => 'edit',
23 | ],
24 | ],
25 | ];
26 | if ($addReturnUrl) {
27 | $uriParameters['returnUrl'] = $this->getReturnUrl();
28 | }
29 | return $this->getRoute('record_edit', $uriParameters);
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Classes/Domain/Service/Uri/NewRecord.php:
--------------------------------------------------------------------------------
1 | [
21 | $tableName => [
22 | $pageIdentifier => 'new',
23 | ],
24 | ],
25 | ];
26 | if ($addReturnUrl) {
27 | $uriParameters['returnUrl'] = $this->getReturnUrl();
28 | }
29 | return $this->getRoute('record_edit', $uriParameters);
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Classes/Domain/Service/Uri/RecordInterface.php:
--------------------------------------------------------------------------------
1 | $identifier,
21 | ];
22 | return $this->getRoute('web_layout', $uriParameters);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Classes/Domain/Tracker/EventTracker.php:
--------------------------------------------------------------------------------
1 | eventDispatcher = $eventDispatcher;
17 | }
18 |
19 | public function track(Visitor $visitor, array $arguments)
20 | {
21 | $this->eventDispatcher->dispatch(new EventTrackerEvent($visitor, $arguments['parameter'], $arguments));
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Classes/Events/AttributeCreateEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
17 | $this->attribute = $attribute;
18 | }
19 |
20 | public function getVisitor(): Visitor
21 | {
22 | return $this->visitor;
23 | }
24 |
25 | public function getAttribute(): Attribute
26 | {
27 | return $this->attribute;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/Events/AttributeOverwriteEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
17 | $this->attribute = $attribute;
18 | }
19 |
20 | public function getVisitor(): Visitor
21 | {
22 | return $this->visitor;
23 | }
24 |
25 | public function getAttribute(): Attribute
26 | {
27 | return $this->attribute;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/Events/Log/DownloadEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
17 | $this->download = $download;
18 | }
19 |
20 | public function getVisitor(): Visitor
21 | {
22 | return $this->visitor;
23 | }
24 |
25 | public function getDownload(): Download
26 | {
27 | return $this->download;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/Events/Log/EventTrackerEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
17 | $this->parameter = $parameter;
18 | $this->arguments = $arguments;
19 | }
20 |
21 | public function getVisitor(): Visitor
22 | {
23 | return $this->visitor;
24 | }
25 |
26 | public function getParameter(): string
27 | {
28 | return $this->parameter;
29 | }
30 |
31 | public function getArguments(): array
32 | {
33 | return $this->arguments;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Classes/Events/Log/LinkClickEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
19 | $this->linklistener = $linklistener;
20 | $this->pageUid = $pageUid;
21 | }
22 |
23 | public function getVisitor(): Visitor
24 | {
25 | return $this->visitor;
26 | }
27 |
28 | public function getLinklistener(): Linklistener
29 | {
30 | return $this->linklistener;
31 | }
32 |
33 | public function getPageUid(): int
34 | {
35 | return $this->pageUid;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Classes/Events/Log/LogEmail4linkSendEmailEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
17 | $this->href = $href;
18 | }
19 |
20 | public function getVisitor(): Visitor
21 | {
22 | return $this->visitor;
23 | }
24 |
25 | public function getHref(): string
26 | {
27 | return $this->href;
28 | }
29 |
30 | public function setHref(string $href): LogEmail4linkSendEmailEvent
31 | {
32 | $this->href = $href;
33 | return $this;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Classes/Events/Log/LogEmail4linkSendEmailFailedEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
17 | $this->href = $href;
18 | }
19 |
20 | public function getVisitor(): Visitor
21 | {
22 | return $this->visitor;
23 | }
24 |
25 | public function getHref(): string
26 | {
27 | return $this->href;
28 | }
29 |
30 | public function setHref(string $href): self
31 | {
32 | $this->href = $href;
33 | return $this;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Classes/Events/Log/LogVisitorEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
15 | }
16 |
17 | public function getVisitor(): Visitor
18 | {
19 | return $this->visitor;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Classes/Events/Log/LogVisitorIdentifiedByEmail4linkEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
18 | $this->attribute = $attribute;
19 | $this->pageIdentifier = $pageIdentifier;
20 | }
21 |
22 | public function getVisitor(): Visitor
23 | {
24 | return $this->visitor;
25 | }
26 |
27 | public function getAttribute(): ?Attribute
28 | {
29 | return $this->attribute;
30 | }
31 |
32 | public function getPageIdentifier(): int
33 | {
34 | return $this->pageIdentifier;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Classes/Events/Log/LogVisitorIdentifiedByFieldlisteningEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
19 | $this->attribute = $attribute;
20 | $this->pageIdentifier = $pageIdentifier;
21 | }
22 |
23 | public function getVisitor(): Visitor
24 | {
25 | return $this->visitor;
26 | }
27 |
28 | public function getAttribute(): ?Attribute
29 | {
30 | return $this->attribute;
31 | }
32 |
33 | public function getPageIdentifier(): int
34 | {
35 | return $this->pageIdentifier;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Classes/Events/Log/LogVisitorIdentifiedByFormlisteningEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
19 | $this->attribute = $attribute;
20 | $this->pageIdentifier = $pageIdentifier;
21 | }
22 |
23 | public function getVisitor(): Visitor
24 | {
25 | return $this->visitor;
26 | }
27 |
28 | public function getAttribute(): ?Attribute
29 | {
30 | return $this->attribute;
31 | }
32 |
33 | public function getPageIdentifier(): int
34 | {
35 | return $this->pageIdentifier;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Classes/Events/Log/LogVisitorIdentifiedByFrontendauthenticationEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
19 | $this->attribute = $attribute;
20 | $this->pageIdentifier = $pageIdentifier;
21 | }
22 |
23 | public function getVisitor(): Visitor
24 | {
25 | return $this->visitor;
26 | }
27 |
28 | public function getAttribute(): ?Attribute
29 | {
30 | return $this->attribute;
31 | }
32 |
33 | public function getPageIdentifier(): int
34 | {
35 | return $this->pageIdentifier;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Classes/Events/Log/LogVisitorIdentifiedByLuxletterlinkEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
19 | $this->attribute = $attribute;
20 | $this->pageIdentifier = $pageIdentifier;
21 | }
22 |
23 | public function getVisitor(): Visitor
24 | {
25 | return $this->visitor;
26 | }
27 |
28 | public function getAttribute(): ?Attribute
29 | {
30 | return $this->attribute;
31 | }
32 |
33 | public function getPageIdentifier(): int
34 | {
35 | return $this->pageIdentifier;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Classes/Events/Log/SearchEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
17 | $this->searchUid = $searchUid;
18 | }
19 |
20 | public function getVisitor(): Visitor
21 | {
22 | return $this->visitor;
23 | }
24 |
25 | public function getSearchUid(): int
26 | {
27 | return $this->searchUid;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/Events/Log/UtmEvent.php:
--------------------------------------------------------------------------------
1 | utm = $utm;
15 | }
16 |
17 | public function getUtm(): Utm
18 | {
19 | return $this->utm;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Classes/Events/NewsTrackerEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
19 | $this->newsvisit = $newsvisit;
20 | $this->arguments = $arguments;
21 | }
22 |
23 | public function getVisitor(): Visitor
24 | {
25 | return $this->visitor;
26 | }
27 |
28 | public function getNewsvisit(): Newsvisit
29 | {
30 | return $this->newsvisit;
31 | }
32 |
33 | public function getArguments(): array
34 | {
35 | return $this->arguments;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Classes/Events/PageTrackerEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
19 | $this->pagevisit = $pagevisit;
20 | $this->arguments = $arguments;
21 | }
22 |
23 | public function getVisitor(): Visitor
24 | {
25 | return $this->visitor;
26 | }
27 |
28 | public function getPagevisit(): Pagevisit
29 | {
30 | return $this->pagevisit;
31 | }
32 |
33 | public function getArguments(): array
34 | {
35 | return $this->arguments;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Classes/Events/ReadableReferrersEvent.php:
--------------------------------------------------------------------------------
1 | referrer = $referrer;
14 | $this->sources = $sources;
15 | }
16 |
17 | public function getReferrer(): string
18 | {
19 | return $this->referrer;
20 | }
21 |
22 | public function setReferrer(string $referrer): self
23 | {
24 | $this->referrer = $referrer;
25 | return $this;
26 | }
27 |
28 | public function getSources(): array
29 | {
30 | return $this->sources;
31 | }
32 |
33 | public function setSources(array $sources): self
34 | {
35 | $this->sources = $sources;
36 | return $this;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Classes/Events/SetAssetEmail4LinkEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
19 | $this->mailMessage = $mailMessage;
20 | $this->href = $href;
21 | }
22 |
23 | public function getVisitor(): Visitor
24 | {
25 | return $this->visitor;
26 | }
27 |
28 | public function getMailMessage(): MailMessage
29 | {
30 | return $this->mailMessage;
31 | }
32 |
33 | public function getHref(): string
34 | {
35 | return $this->href;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Classes/Events/StopAnyProcessBeforePersistenceEvent.php:
--------------------------------------------------------------------------------
1 | fingerprint = $fingerprint;
15 | }
16 |
17 | public function getFingerprint(): Fingerprint
18 | {
19 | return $this->fingerprint;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Classes/Events/VisitorFactoryAfterCreateNewEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
17 | $this->fingerprint = $fingerprint;
18 | }
19 |
20 | public function getVisitor(): Visitor
21 | {
22 | return $this->visitor;
23 | }
24 |
25 | public function getFingerprint(): Fingerprint
26 | {
27 | return $this->fingerprint;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/Events/VisitorFactoryBeforeCreateNewEvent.php:
--------------------------------------------------------------------------------
1 | visitor = $visitor;
17 | $this->fingerprint = $fingerprint;
18 | }
19 |
20 | public function getVisitor(): Visitor
21 | {
22 | return $this->visitor;
23 | }
24 |
25 | public function getFingerprint(): Fingerprint
26 | {
27 | return $this->fingerprint;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/Events/VisitorsMergeEvent.php:
--------------------------------------------------------------------------------
1 | visitors = $visitors;
15 | }
16 |
17 | public function getVisitors(): QueryResultInterface
18 | {
19 | return $this->visitors;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Classes/Exception/ActionNotAllowedException.php:
--------------------------------------------------------------------------------
1 | isIdentification()) {
19 | $link = $event->getLink();
20 | CookieUtility::setCookie('luxletterlinkhash', $link['hash']);
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Classes/TCA/GetStatusForLogSelection.php:
--------------------------------------------------------------------------------
1 | getStatusItemsFromLogModel();
14 | }
15 |
16 | protected function getStatusItemsFromLogModel(): array
17 | {
18 | $log = new ReflectionClass(Log::class);
19 | $constants = $log->getConstants();
20 | $items = [];
21 | foreach (array_keys($constants) as $key) {
22 | if (stristr($key, 'STATUS_')) {
23 | $items[] = [$key, $constants[$key]];
24 | }
25 | }
26 | return $items;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Classes/TCA/VisitorTitle.php:
--------------------------------------------------------------------------------
1 | getEmail($parameters['row'] ?? []) . ' (uid' . $parameters['row']['uid'] . ')';
14 | }
15 |
16 | protected function getEmail(array $properties): string
17 | {
18 | $email = LocalizationUtility::translateByKey('anonym');
19 | if (!empty($properties['email'])) {
20 | $email = $properties['email'];
21 | }
22 | return $email;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Classes/Update/AddSites/AddSitesForDownloads.php:
--------------------------------------------------------------------------------
1 | executeQuery('select * from ' . Download::TABLE_NAME . ' where deleted=0')
17 | ->fetchAllAssociative();
18 | foreach ($records as $record) {
19 | $siteIdentifier = $this->getSiteIdentifierFromPage($record['page']);
20 | $connection->executeQuery(
21 | 'update ' . Download::TABLE_NAME . ' set site = "' . $siteIdentifier . '" where uid=' . $record['uid']
22 | );
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Classes/Update/AddSites/AddSitesForLinkclick.php:
--------------------------------------------------------------------------------
1 | executeQuery('select * from ' . Linkclick::TABLE_NAME . ' where deleted=0')
17 | ->fetchAllAssociative();
18 | foreach ($records as $record) {
19 | $siteIdentifier = $this->getSiteIdentifierFromPage($record['page']);
20 | $connection->executeQuery(
21 | 'update ' . Linkclick::TABLE_NAME . ' set site = "' . $siteIdentifier . '" where uid=' . $record['uid']
22 | );
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Classes/Update/AddSites/AddSitesForPagevisits.php:
--------------------------------------------------------------------------------
1 | executeQuery('select * from ' . Pagevisit::TABLE_NAME . ' where deleted=0')
17 | ->fetchAllAssociative();
18 | foreach ($records as $record) {
19 | $siteIdentifier = $this->getSiteIdentifierFromPage($record['page']);
20 | $connection->executeQuery(
21 | 'update ' . Pagevisit::TABLE_NAME . ' set site = "' . $siteIdentifier . '" where uid=' . $record['uid']
22 | );
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Classes/Utility/EmailUtility.php:
--------------------------------------------------------------------------------
1 | isFrontend();
18 | }
19 |
20 | public static function isBackend(): bool
21 | {
22 | if (ObjectUtility::getRequest() === null) {
23 | // E.g. when called from CLI
24 | return false;
25 | }
26 | return ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isBackend();
27 | }
28 |
29 | public static function isCli(): bool
30 | {
31 | return Environment::isCli();
32 | }
33 |
34 | public static function isComposerMode(): bool
35 | {
36 | return defined('TYPO3_COMPOSER_MODE');
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Classes/Utility/MathUtility.php:
--------------------------------------------------------------------------------
1 | registerArgument('tableName', 'string', 'tableName', true);
16 | $this->registerArgument('identifier', 'int', 'identifier', true);
17 | $this->registerArgument('moduleName', 'string', 'module name for return url', true);
18 | $this->registerArgument('addReturnUrl', 'bool', 'addReturnUrl', false, true);
19 | }
20 |
21 | public function render(): string
22 | {
23 | $editRecord = GeneralUtility::makeInstance(EditRecord::class, $this->renderingContext);
24 | return $editRecord->get(
25 | $this->arguments['tableName'],
26 | (int)$this->arguments['identifier'],
27 | (bool)$this->arguments['addReturnUrl']
28 | );
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Backend/UriWebViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('identifier', 'int', 'identifier', true);
16 | }
17 |
18 | public function render(): string
19 | {
20 | $editRecord = GeneralUtility::makeInstance(WebRecord::class, $this->renderingContext);
21 | return $editRecord->get('', (int)$this->arguments['identifier']);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Charts/GetIdentifiedNumbersPerMonthViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('logs', 'array', '{identifiedPerMonth} variable', true);
13 | }
14 |
15 | public function render(): string
16 | {
17 | $amount = [];
18 | foreach ($this->arguments['logs'] as $logs) {
19 | $amount[] = count($logs);
20 | }
21 | return implode(',', $amount);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Charts/GetLastMonthNamesViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('months', 'int', 'Number of last months', true);
15 | }
16 |
17 | public function render(): string
18 | {
19 | $now = new DateTime();
20 | $monthNames = [
21 | LocalizationUtility::translateByKey('datetime.month.' . $now->format('n')),
22 | ];
23 | for ($i = 1; $i < $this->arguments['months']; $i++) {
24 | $month = clone $now;
25 | $month->modify('-' . $i . ' months');
26 | $monthNames[] = LocalizationUtility::translateByKey('datetime.month.' . $month->format('n'));
27 | }
28 | $monthNames = array_reverse($monthNames);
29 | return implode(',', $monthNames);
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Condition/IsLuxenterpriseExtensionActivatedViewHelper.php:
--------------------------------------------------------------------------------
1 | LocalizationUtility::translateByKey('module.analysis.filter.timePeriod.15'),
17 | FilterDto::PERIOD_LASTMONTH
18 | => LocalizationUtility::translateByKey('module.analysis.filter.timePeriod.2'),
19 | FilterDto::PERIOD_THISMONTH
20 | => LocalizationUtility::translateByKey('module.analysis.filter.timePeriod.1'),
21 | FilterDto::PERIOD_THISYEAR
22 | => LocalizationUtility::translateByKey('module.analysis.filter.timePeriod.0'),
23 | ];
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Format/CropBeginnViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('length', 'int', 'Characters length', true);
14 | $this->registerArgument('prepend', 'string', 'Any prepend characters', false, '... ');
15 | }
16 |
17 | public function render(): string
18 | {
19 | $value = $this->renderChildren();
20 | $length = $this->arguments['length'] * -1;
21 | $string = substr($value, $length);
22 | if ($this->arguments['prepend'] !== '') {
23 | $string = $this->arguments['prepend'] . $string;
24 | }
25 | return $string;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Format/GetFilenameFromPathAndFilenameViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('pathAndFilename', 'string', 'Like "fileadmin/whitepaper.pdf"', false);
15 | }
16 |
17 | public function render(): string
18 | {
19 | return FileUtility::getFilenameFromPathAndFilename($this->getPathAndFilename());
20 | }
21 |
22 | protected function getPathAndFilename(): string
23 | {
24 | $pathAndFilename = $this->renderChildren();
25 | if (!empty($this->arguments['pathAndFilename'])) {
26 | $pathAndFilename = $this->arguments['pathAndFilename'];
27 | }
28 | return (string)$pathAndFilename;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Format/ImplodeViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('array', 'array', 'Any given array', false);
14 | $this->registerArgument('glue', 'string', 'Any glue character', false, ',');
15 | }
16 |
17 | public function render(): string
18 | {
19 | return implode($this->arguments['glue'], $this->getArray());
20 | }
21 |
22 | protected function getArray(): array
23 | {
24 | $array = $this->renderChildren();
25 | if (!empty($this->arguments['array'])) {
26 | $array = $this->arguments['array'];
27 | }
28 | return $array;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Format/PercentViewHelper.php:
--------------------------------------------------------------------------------
1 | "50%"
13 | *
14 | * @return string
15 | */
16 | public function render(): string
17 | {
18 | $number = $this->renderChildren();
19 | $number = number_format((float)$number, 3);
20 | return ($number * 100) . '%';
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Format/QuotesViewHelper.php:
--------------------------------------------------------------------------------
1 | renderChildren()) . '"';
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Format/UpperViewHelper.php:
--------------------------------------------------------------------------------
1 | renderChildren());
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Helper/GetRangeViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('from', 'int', 'start', false, 0);
13 | $this->registerArgument('to', 'int', 'end', true);
14 | }
15 |
16 | public function render(): array
17 | {
18 | return range($this->arguments['from'], $this->arguments['to']);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Lead/GetDateOfLatestPageVisitAndPageViewHelper.php:
--------------------------------------------------------------------------------
1 | pagevisitRepository = $pagevisitRepository;
18 | }
19 |
20 | public function initializeArguments()
21 | {
22 | parent::initializeArguments();
23 | $this->registerArgument('visitor', Visitor::class, 'visitor', true);
24 | $this->registerArgument('pageIdentifier', 'int', 'pages.uid', true);
25 | }
26 |
27 | public function render(): ?DateTime
28 | {
29 | return $this->pagevisitRepository->findLatestDateByVisitorAndPageIdentifier(
30 | $this->arguments['visitor'],
31 | $this->arguments['pageIdentifier']
32 | );
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Lead/GetDateOfLatestPageVisitViewHelper.php:
--------------------------------------------------------------------------------
1 | pagevisitRepository = $pagevisitRepository;
18 | }
19 |
20 | public function initializeArguments()
21 | {
22 | parent::initializeArguments();
23 | $this->registerArgument('visitor', Visitor::class, 'visitor', true);
24 | }
25 |
26 | public function render(): ?DateTime
27 | {
28 | return $this->pagevisitRepository->findLatestDateByVisitor($this->arguments['visitor']);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Rendering/ContentElementViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('uid', 'int', 'tt_content.uid', true);
17 | }
18 |
19 | public function render(): string
20 | {
21 | $contentObject = GeneralUtility::makeInstance(ContentObjectRenderer::class);
22 | $configuration = [
23 | 'tables' => 'tt_content',
24 | 'source' => (int)$this->arguments['uid'],
25 | 'dontCheckPid' => 1,
26 | ];
27 | return $contentObject->cObjGetSingle('RECORDS', $configuration);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Repository/GetContentHeaderFromContentUidViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('uid', 'int', 'tt_content.uid', true);
15 | }
16 |
17 | /**
18 | * @return string
19 | * @throws ExceptionDbal
20 | */
21 | public function render(): string
22 | {
23 | $queryBuilder = DatabaseUtility::getQueryBuilderForTable('tt_content');
24 | return (string)$queryBuilder
25 | ->select('header')
26 | ->from('tt_content')
27 | ->where('uid=' . (int)$this->arguments['uid'])
28 | ->executeQuery()
29 | ->fetchOne();
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/String/GetRandomValueViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('length', 'int', 'String length', false, 32);
18 | $this->registerArgument('upper', 'bool', 'Get also characters in uppercase', false, true);
19 | }
20 |
21 | public function render(): string
22 | {
23 | return StringUtility::getRandomString($this->arguments['length'], $this->arguments['upper']);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/String/GetRangeViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('length', 'int', 'String length', false, 10);
13 | $this->registerArgument('start', 'int', 'String length', false, 0);
14 | $this->registerArgument('characterLength', 'int', 'Fill with leading zeros', false, false);
15 | }
16 |
17 | public function render(): array
18 | {
19 | $start = $this->arguments['start'];
20 | $length = $this->arguments['length'];
21 | $end = $start + $length;
22 | $result = [];
23 | for ($i = $start; $i < $end; $i++) {
24 | $value = $i;
25 | if ($this->arguments['characterLength']) {
26 | $value = str_pad((string)$value, $this->arguments['characterLength'], '0', STR_PAD_LEFT);
27 | }
28 | $result[] = $value;
29 | }
30 | return $result;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Visitor/GetAnyPropertyViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('visitor', Visitor::class, 'visitor', true);
14 | $this->registerArgument('property', 'string', 'any property name you want to get from the visitor', true);
15 | }
16 |
17 | public function render(): string
18 | {
19 | /** @var Visitor $visitor */
20 | $visitor = $this->arguments['visitor'];
21 | return (string)$visitor->getAnyPropertyByName($this->arguments['property']);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Visitor/GetCategoryScoringFromCategoryAndVisitorViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('visitor', Visitor::class, 'visitor', true);
16 | $this->registerArgument('category', Category::class, 'category', true);
17 | }
18 |
19 | public function render(): int
20 | {
21 | $scoring = 0;
22 | /** @var Visitor $visitor */
23 | $visitor = $this->arguments['visitor'];
24 | /** @var Categoryscoring $categoryscoring */
25 | $categoryscoring = $visitor->getCategoryscoringByCategory($this->arguments['category']);
26 | if ($categoryscoring !== null) {
27 | $scoring = $categoryscoring->getScoring();
28 | }
29 | return $scoring;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Visitor/GetPropertyFromAttributesViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('visitor', Visitor::class, 'visitor', true);
18 | $this->registerArgument('attribute', 'string', 'any attribute name you want to get from the visitor', true);
19 | }
20 |
21 | public function render(): string
22 | {
23 | /** @var Visitor $visitor */
24 | $visitor = $this->arguments['visitor'];
25 | return (string)$visitor->getPropertyFromAttributes($this->arguments['attribute']);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Classes/ViewHelpers/Visitor/GetPropertyFromIpinformationsViewHelper.php:
--------------------------------------------------------------------------------
1 | registerArgument('visitor', Visitor::class, 'visitor', true);
18 | $this->registerArgument('attribute', 'string', 'any attribute name you want to get from the visitor', true);
19 | }
20 |
21 | public function render(): string
22 | {
23 | /** @var Visitor $visitor */
24 | $visitor = $this->arguments['visitor'];
25 | return (string)$visitor->getPropertyFromIpinformations($this->arguments['attribute']);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Classes/Widgets/DataProvider/LuxHottestLeadsDataProvider.php:
--------------------------------------------------------------------------------
1 | findByHottestScorings($filter->setLimit(10));
21 | /** @var Visitor $visitor */
22 | foreach ($visitors as $visitor) {
23 | $list[] = $visitor->getFullNameWithEmail() . ' - Scoring ' . $visitor->getScoring();
24 | }
25 | return $list;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Classes/Widgets/DataProvider/LuxUtmMediaDataProvider.php:
--------------------------------------------------------------------------------
1 | $data->getTitlesFromData(),
20 | 'datasets' => [
21 | [
22 | 'label' => LocalizationUtility::translateByKey('module.dashboard.widget.luxpagevisitsweek.label'),
23 | 'backgroundColor' => WidgetApi::getDefaultChartColors(),
24 | 'border' => 0,
25 | 'data' => $data->getAmountsFromData(),
26 | ],
27 | ],
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Classes/Widgets/DataProvider/LuxUtmSourceDataProvider.php:
--------------------------------------------------------------------------------
1 | $data->getTitlesFromData(),
20 | 'datasets' => [
21 | [
22 | 'label' => LocalizationUtility::translateByKey('module.dashboard.widget.luxpagevisitsweek.label'),
23 | 'backgroundColor' => WidgetApi::getDefaultChartColors(),
24 | 'border' => 0,
25 | 'data' => $data->getAmountsFromData(),
26 | ],
27 | ],
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Configuration/Backend/DashboardPresets.php:
--------------------------------------------------------------------------------
1 | [
5 | 'title' => 'LLL:EXT:lux/Resources/Private/Language/locallang_db.xlf:module.dashboard.preset.lux.title',
6 | 'description' =>
7 | 'LLL:EXT:lux/Resources/Private/Language/locallang_db.xlf:module.dashboard.preset.lux.description',
8 | 'iconIdentifier' => 'extension-lux-turquoise',
9 | 'defaultWidgets' => [
10 | 'luxPageVisits',
11 | 'luxDownloads',
12 | 'luxNews',
13 | 'luxSearchterms',
14 | 'luxRecurring',
15 | 'luxIdentified',
16 | 'luxReferrer',
17 | 'luxIdentifiedPerMonth',
18 | 'luxHottestLeads',
19 | 'luxBrowser',
20 | 'luxPageVisitsWeek',
21 | 'luxDownloadsWeek',
22 | ],
23 | 'showInWizard' => true,
24 | ],
25 | ];
26 |
--------------------------------------------------------------------------------
/Configuration/Backend/DashboardWidgetGroups.php:
--------------------------------------------------------------------------------
1 | [
5 | 'title' => 'LLL:EXT:lux/Resources/Private/Language/locallang_db.xlf:module.dashboard.group.lux.title',
6 | ],
7 | ];
8 |
--------------------------------------------------------------------------------
/Configuration/ContentSecurityPolicies.php:
--------------------------------------------------------------------------------
1 | 1,
6 | 'tstamp' => (new DateTime('2 days ago'))->modify('+ 450 minutes')->getTimestamp(),
7 | 'crdate' => (new DateTime('2 days ago'))->modify('+ 450 minutes')->getTimestamp(),
8 | 'sys_language_uid' => -1,
9 | 'searchterm' => 'Marketing Automation Solution',
10 | 'pagevisit' => 1,
11 | ],
12 | [
13 | 'visitor' => 2,
14 | 'tstamp' => (new DateTime('11 days ago'))->modify('+ 333 minutes')->getTimestamp(),
15 | 'crdate' => (new DateTime('11 days ago'))->modify('+ 333 minutes')->getTimestamp(),
16 | 'sys_language_uid' => -1,
17 | 'searchterm' => 'LUX TYPO3',
18 | 'pagevisit' => 4,
19 | ],
20 | [
21 | 'visitor' => 2,
22 | 'tstamp' => (new DateTime('11 days ago'))->modify('+ 336 minutes')->getTimestamp(),
23 | 'crdate' => (new DateTime('11 days ago'))->modify('+ 336 minutes')->getTimestamp(),
24 | 'sys_language_uid' => -1,
25 | 'searchterm' => 'Newsletter E-Mail Marketing',
26 | 'pagevisit' => 8,
27 | ],
28 | ];
29 |
--------------------------------------------------------------------------------
/Configuration/DemoData/tx_luxenterprise_domain_model_shortener.php:
--------------------------------------------------------------------------------
1 | 1,
8 | 'tstamp' => (new DateTime())->getTimestamp(),
9 | 'crdate' => (new DateTime())->getTimestamp(),
10 | 'from' => 'landingpage',
11 | 'to' => 'https://www.linkedin.com',
12 | 'category' => DemoDataService::getRandomLuxCatgoryIdentifier(),
13 | 'description' => 'Shortener to landingpage',
14 | ],
15 | [
16 | 'shortenervisits' => 3,
17 | 'tstamp' => (new DateTime())->getTimestamp(),
18 | 'crdate' => (new DateTime())->getTimestamp(),
19 | 'from' => 'blogpost',
20 | 'to' => 't3://page?uid=' . DemoDataService::getRandomPageIdentifier(),
21 | 'category' => DemoDataService::getRandomLuxCatgoryIdentifier(),
22 | 'description' => 'Shortener to new blog post',
23 | ],
24 | ];
25 |
--------------------------------------------------------------------------------
/Configuration/Extbase/Persistence/Classes.php:
--------------------------------------------------------------------------------
1 | [
16 | 'tableName' => 'fe_users',
17 | ],
18 | FrontendUserGroup::class => [
19 | 'tableName' => 'fe_groups',
20 | ],
21 | Page::class => [
22 | 'tableName' => 'pages',
23 | ],
24 | User::class => [
25 | 'tableName' => 'be_users',
26 | ],
27 | Category::class => [
28 | 'tableName' => 'sys_category',
29 | ],
30 | File::class => [
31 | 'tableName' => 'sys_file',
32 | ],
33 | Metadata::class => [
34 | 'tableName' => 'sys_file_metadata',
35 | ],
36 | News::class => [
37 | 'tableName' => 'tx_news_domain_model_news',
38 | ],
39 | ];
40 |
--------------------------------------------------------------------------------
/Configuration/JavaScriptModules.php:
--------------------------------------------------------------------------------
1 | [
5 | 'core',
6 | ],
7 | 'imports' => [
8 | '@in2code/lux/' => [
9 | 'path' => 'EXT:lux/Resources/Public/JavaScript/Lux/',
10 | 'exclude' => [
11 | 'EXT:lux/Resources/Public/JavaScript/modern/',
12 | ],
13 | ],
14 | '@in2code/lux/vendor/chartjs.js' => 'EXT:lux/Resources/Public/JavaScript/Vendor/Chart.min.js',
15 | ],
16 | ];
17 |
--------------------------------------------------------------------------------
/Configuration/TCA/Overrides/sys_category.php:
--------------------------------------------------------------------------------
1 | [
7 | 'exclude' => true,
8 | 'label' => 'LLL:EXT:lux/Resources/Private/Language/locallang_db.xlf:sys_category.lux_category',
9 | 'description' => 'LLL:EXT:lux/Resources/Private/Language/locallang_db.xlf:sys_category.lux_category.description',
10 | 'config' => [
11 | 'type' => 'check',
12 | 'default' => 0,
13 | ],
14 | ],
15 | 'lux_company_category' => [
16 | 'exclude' => true,
17 | 'label' => 'LLL:EXT:lux/Resources/Private/Language/locallang_db.xlf:sys_category.lux_company_category',
18 | 'description' =>
19 | 'LLL:EXT:lux/Resources/Private/Language/locallang_db.xlf:sys_category.lux_company_category.description',
20 | 'config' => [
21 | 'type' => 'check',
22 | 'default' => 0,
23 | ],
24 | ],
25 | ];
26 | ExtensionManagementUtility::addTCAcolumns('sys_category', $columns);
27 | ExtensionManagementUtility::addToAllTCAtypes('sys_category', 'lux_category,lux_company_category', '', 'after:parent');
28 |
--------------------------------------------------------------------------------
/Configuration/TCA/Overrides/sys_template.php:
--------------------------------------------------------------------------------
1 |
11 |
12 | **Note:** While Firefox turns on the DNT by default for anonymous tabs, Chrome and Internet Explorer never turn this
13 | setting on by default.
14 |
--------------------------------------------------------------------------------
/Documentation/Privacy/Index.md:
--------------------------------------------------------------------------------
1 | 
2 | 
3 |
4 | This part of the documentation gives you some information about privacy on websites in general.
5 |
6 | ## Privacy documentation
7 |
8 | LUX respects the privacy protection of website visitors. Please follow our example.
9 |
10 | First of all let your visitors know what kind of information you are collecting and why you are collection those
11 | information and where the information is stored (not on a third party companies server but on your server!).
12 | The best place for this explanation is the privacy site (Datenschutzerklärung). This will follow the
13 | rules of GDPR (General Data Protection Regulation) / DSGVO (Datenschutzgrundverordnung).
14 |
15 | * [Example privacy page content](PrivacyPage.md)
16 | * [All related to the visitor ip address](IpAddresses.md)
17 | * [Fingerprints vs. local storage (cookie)](FingerprintsAndLocalStorage.md)
18 | * [All information about optin and optout](OptInAndOptOut.md)
19 | * [Privacy related commands](Commands.md)
20 | * [Do not track header in browser](DoNotTrack.md)
21 |
--------------------------------------------------------------------------------
/Documentation/Technical/Leads/Index.md:
--------------------------------------------------------------------------------
1 | 
2 | 
3 |
4 | ### Backend Module Leads/Dashboard
5 |
6 |
7 |
8 |
9 |
10 | A dashboard helps to give you an overview about your lead activities on your website.
11 |
12 | ### [Dashboard](Index.md)
13 | ### [Leads](Leads.md)
14 | ### [Companies](Companies.md)
15 |
--------------------------------------------------------------------------------
/Documentation/guides.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | Rendering time: {renderingTime}s 6 |
7 |
10 | We have sent you the wanted whitepaper as attachment to this email.
11 |
16 | Please feel free to contact us if you have any questions. 17 |
18 | 19 |
20 | --
21 |
22 | Firstname Lastname
23 | Marketing
24 |
25 |
26 | company name
27 |
28 | Street 12a · D-ZIPCODE City
29 | Email: firstname.lastname@company.org
30 | Telefon: +49(0) 1234 56789
31 | Mobil: +49(0) 1234 56789
32 | Fax: +49(0) 1234 56789
33 | Website: https://www.company.org
34 |