├── .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 | ![LUX](../Images/logo_claim.svg#gh-light-mode-only "LUX") 2 | ![LUX](../Images/logo_claim_white.svg#gh-dark-mode-only "LUX") 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 | ![LUX](../../Images/logo_claim.svg#gh-light-mode-only "LUX") 2 | ![LUX](../../Images/logo_claim_white.svg#gh-dark-mode-only "LUX") 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 | 10 | 16 | 27 | 28 | -------------------------------------------------------------------------------- /Resources/Private/.htaccess: -------------------------------------------------------------------------------- 1 | # Apache < 2.3 2 | 3 | Order allow,deny 4 | Deny from all 5 | Satisfy All 6 | 7 | 8 | # Apache >= 2.3 9 | 10 | Require all denied 11 | 12 | -------------------------------------------------------------------------------- /Resources/Private/Build/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [["@babel/preset-env", { 3 | "modules": false 4 | }]] 5 | } 6 | -------------------------------------------------------------------------------- /Resources/Private/Build/.nvmrc: -------------------------------------------------------------------------------- 1 | 18 2 | -------------------------------------------------------------------------------- /Resources/Private/Build/JavaScript/Frontend/Modern.js: -------------------------------------------------------------------------------- 1 | import { load } from '@fingerprintjs/botd'; 2 | 3 | (async () => { 4 | const botDetection = await load({ monitoring: false }); 5 | const { bot: isBot } = await botDetection.detect(); 6 | 7 | if (!isBot) { 8 | await import('./Lux'); 9 | } 10 | })(); 11 | -------------------------------------------------------------------------------- /Resources/Private/Build/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from "unbuild"; 2 | 3 | export default defineBuildConfig({ 4 | entries: [ 5 | { 6 | builder: "rollup", 7 | name: "index", 8 | input: "./JavaScript/Frontend/Modern", 9 | outDir: "../../Public/JavaScript/Lux/modern", 10 | }, 11 | ], 12 | rollup: { 13 | esbuild: { 14 | minify: true, 15 | } 16 | }, 17 | outDir: "../../Public/JavaScript/Lux/modern", 18 | clean: true, 19 | failOnWarn: false, 20 | }); 21 | -------------------------------------------------------------------------------- /Resources/Private/Build/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lux", 3 | "description": "Living User Experience - LUX - the marketing automation tool for TYPO3.", 4 | "author": "in2code", 5 | "private": true, 6 | "scripts": { 7 | "build": "./node_modules/gulp/bin/gulp.js build && unbuild", 8 | "watch": "./node_modules/gulp/bin/gulp.js default" 9 | }, 10 | "devDependencies": { 11 | "@babel/core": "^7.16.0", 12 | "@babel/preset-env": "^7.16.4", 13 | "@fingerprintjs/botd": "^1.9.1", 14 | "@fingerprintjs/fingerprintjs": "^2.1.0", 15 | "@rollup/plugin-babel": "^5.3.0", 16 | "@rollup/plugin-commonjs": "^21.0.1", 17 | "@rollup/plugin-node-resolve": "^13.0.6", 18 | "basiclightbox": "^5.0.0", 19 | "gulp": "^4.0.2", 20 | "gulp-plumber": "^1.2.1", 21 | "gulp-rename": "^2.0.0", 22 | "gulp-sass": "^5.0.0", 23 | "gulp-uglify": "^3.0.2", 24 | "rollup": "^2.61.1", 25 | "rollup-plugin-terser": "^7.0.2", 26 | "sass": "^1.54.3", 27 | "typescript": "^5.6.2", 28 | "ua-parser-js": "^0.7.31", 29 | "unbuild": "^2.0.0" 30 | }, 31 | "dependencies": { 32 | "chart.js": "^4.4.5" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Resources/Private/Build/readme.md: -------------------------------------------------------------------------------- 1 | # How to start frontend toolchain 2 | 3 | ## Small guide 4 | 5 | * Go to Recources/Private/Build 6 | * `nvm use` will change to needed npm version 7 | * `npm i` will install the node modules (if not yet installed) 8 | * Then start with `npm run build` or the watch task with `npm run watch` 9 | -------------------------------------------------------------------------------- /Resources/Private/Build/rollup.config.js: -------------------------------------------------------------------------------- 1 | const babel = require('@rollup/plugin-babel').babel; 2 | const resolve = require('@rollup/plugin-node-resolve').default; 3 | const commonjs = require('@rollup/plugin-commonjs'); 4 | const { terser } = require('rollup-plugin-terser'); 5 | 6 | module.exports = { 7 | input: './JavaScript/Frontend/Lux.js', 8 | plugins: [ 9 | resolve({ 10 | browser: true 11 | }), 12 | commonjs({ 13 | sourceMap: false 14 | }), 15 | babel({ 16 | exclude: './node_modules/**', 17 | babelHelpers: 'bundled' 18 | }), 19 | terser() 20 | ], 21 | output: { 22 | file: '../../Public/JavaScript/Lux/Lux.min.js', 23 | format: 'iife' 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /Resources/Private/Language/de.locallang_mod.xlf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | LUX 8 | LUX 9 | 10 | 11 | LUX - Living User eXperience 12 | LUX - Living User eXperience 13 | 14 | 15 | LUX - Living User eXperience 16 | LUX - Living User eXperience 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Resources/Private/Language/de.locallang_mod_analysis.xlf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | Analysis 8 | Analyse 9 | 10 | 11 | Analysis 12 | Analyse 13 | 14 | 15 | Analysis 16 | Analyse 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Resources/Private/Language/de.locallang_mod_lead.xlf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | Leads 8 | Leads 9 | 10 | 11 | Leads management 12 | Lead Management 13 | 14 | 15 | Leads 16 | Leads 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Resources/Private/Language/de.locallang_mod_workflow.xlf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | Campaigns 8 | Kampagnen 9 | 10 | 11 | Marketing campaigns with workflows, A/B testing and URL shortener 12 | Marketing Kampagnen mit Workflows, A/B Tests und URL Shortener 13 | 14 | 15 | Campaigns 16 | Kampagnen 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Resources/Private/Language/locallang_mod.xlf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | LUX 8 | 9 | 10 | LUX - Living User eXperience 11 | 12 | 13 | LUX - Living User eXperience 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Resources/Private/Language/locallang_mod_analysis.xlf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | Analysis 8 | 9 | 10 | Analysis 11 | 12 | 13 | Analysis 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Resources/Private/Language/locallang_mod_lead.xlf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | Leads 8 | 9 | 10 | Leads management 11 | 12 | 13 | Leads 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Resources/Private/Language/locallang_mod_workflow.xlf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | Campaigns 8 | 9 | 10 | Marketing campaigns with workflows, A/B testing and URL shortener 11 | 12 | 13 | Campaigns 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Resources/Private/Layouts/Backend.html: -------------------------------------------------------------------------------- 1 | 7 | 8 |
9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 |
25 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Analysis/Browser.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Browser 5 |

6 |
7 |
8 | 9 | 10 |
11 | 14 |
15 |
16 | 17 | 18 | 19 |
20 |
21 |
22 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Analysis/Domain.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Domain 5 |

6 |
7 |
8 | 9 | 10 |
11 | 14 |
15 |
16 | 17 | 18 | 19 |
20 |
21 |
22 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Analysis/Language.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Languages 5 |

6 |
7 |
8 | 9 | 10 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |
21 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Analysis/SocialMedia.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Top Social Media Sources 5 |

6 |
7 |
8 | 9 | 10 |
11 | 14 |
15 |
16 | 17 | 18 | 19 |
20 |
21 |
22 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Analysis/Utm.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | UTM visits 5 | {headerPostfix} 6 |

7 |
8 |
9 | 10 | 11 |
12 | 18 |
19 |
20 | 21 | 22 | 23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Analysis/UtmCampaign.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Campaign 5 | {headerPostfix} 6 |

7 |
8 |
9 | 10 | 11 |
12 | 17 |
18 |
19 | 20 | 21 | 22 |
23 |
24 |
25 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Analysis/UtmMedium.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Medium 5 | {headerPostfix} 6 |

7 |
8 |
9 | 10 | 11 |
12 | 15 |
16 |
17 | 18 | 19 | 20 |
21 |
22 |
23 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Analysis/UtmSource.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Source 5 | {headerPostfix} 6 |

7 |
8 |
9 | 10 | 11 |
12 | 15 |
16 |
17 | 18 | 19 | 20 |
21 |
22 |
23 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Lead/CategoryScoring.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | 6 | CategoryScoring 7 | 8 |

9 |
10 |
11 | 12 | 13 | 18 | 19 | 20 | 21 | 22 | 23 |
24 |
25 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Lead/Scoring.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | 6 | Scoring 7 | 8 |

9 |
10 |
11 | 12 | 13 | 19 | 20 | 21 | 22 | 23 | 24 |
25 |
26 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Leads/CompanyAmountPerMonth.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Number of companies 5 |

6 |
7 |
8 | 9 | 10 | 15 | 16 | 17 | 18 | 19 | 20 |
21 |
22 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Leads/CompanyRevenueClasses.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Revenue 5 |

6 |
7 |
8 | 9 | 10 | 15 | 16 | 17 | 18 | 19 | 20 |
21 |
22 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Leads/IdentifiedPerMethod.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Identified by method 5 |

6 |
7 |
8 | 9 | 10 |
11 | 14 |
15 |
16 | 17 | 18 | 19 |
20 |
21 |
22 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Leads/IdentifiedPerMonth.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Identified per month 5 |

6 |
7 |
8 | 9 | 10 | 15 | 16 | 17 | 18 | 19 | 20 |
21 |
22 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Box/Leads/Referrer.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | Referrer 5 |

6 |
7 |
8 | 9 | 10 | 15 | 16 | 17 | 18 | 19 | 20 |
21 |
22 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Miscellaneous/FlashMessages.html: -------------------------------------------------------------------------------- 1 | 2 |
    3 | 4 |
  • {flashMessage.message}
  • 5 |
    6 |
7 |
8 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Miscellaneous/NoSites.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | No sites 4 |
5 |
6 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Miscellaneous/NoValues.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | No values to show 4 |
5 |
6 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Miscellaneous/RenderingTime.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 7 |
8 |
9 |
10 | -------------------------------------------------------------------------------- /Resources/Private/Partials/PageOverview/Leads/Title.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Last visitors 7 | 8 | 9 | -------------------------------------------------------------------------------- /Resources/Private/Sass/_Settings.scss: -------------------------------------------------------------------------------- 1 | $colorMain: #027ACA; 2 | $colorSoft: #7cc6fe; 3 | $colorAlternative: #027ACA; 4 | 5 | $colorSecondary: #F2B602; 6 | 7 | $white: #ffffff; 8 | $colorGrey: #DDDDDD; 9 | $colorGreyBright: #CCCCCC; 10 | $colorGreySoft: #737373; 11 | $colorGreyDark: #292929; 12 | $black: #000000; 13 | 14 | // Breakpoints 15 | $phone: 320px; 16 | $phone-5: 400px; 17 | $phablet: 600px; 18 | $tablet: 768px; 19 | $desktop: 1024px; 20 | $desktop-wide: 1280px; 21 | $laptop-small: 1440px; 22 | $laptop: 1680px; 23 | $fullhd: 1920px; 24 | -------------------------------------------------------------------------------- /Resources/Private/Sass/_WizardForm.scss: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Resources/Private/Static/IpCompany.txt: -------------------------------------------------------------------------------- 1 | 88.133.160.219;in2code GmbH 2 | -------------------------------------------------------------------------------- /Resources/Private/Static/TelecommunicationProviderTerms.txt: -------------------------------------------------------------------------------- 1 | 1&1 2 | a1 3 | aconet 4 | addix 5 | afrihost 6 | airtel 7 | ais-fibre 8 | amazon 9 | apple 10 | arcor 11 | at&t 12 | atria 13 | bell 14 | broadband 15 | cable 16 | cablenet 17 | chinanet 18 | cloudflare 19 | comcast 20 | communications 21 | d2 22 | dtag 23 | ecotel 24 | eurofiber 25 | ewe-tel 26 | ewetel 27 | facebook 28 | glasfaser 29 | google 30 | hansenet 31 | hetzner 32 | host1plus 33 | internet 34 | kabel 35 | komro 36 | mobile 37 | netcom 38 | netzdienst 39 | network 40 | netlogix 41 | o2 42 | orange 43 | railtel 44 | starlink 45 | swisscom 46 | t-systems 47 | telecom 48 | telefon 49 | telekabel 50 | telenet 51 | telekom 52 | telecommunication 53 | telekommunikation 54 | telenot 55 | unicom 56 | unitymedia 57 | versatel 58 | vodafone 59 | zscaler 60 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Analysis/ContentCsv.html: -------------------------------------------------------------------------------- 1 | 2 | PAGE;PID;AMOUNT 3 | {page.page.title};{page.page.uid};{page.count} 4 | 5 | 6 | DOWNLOAD;AMOUNT 7 | {download.0.href};{download -> f:count()} 8 | 9 | 10 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Analysis/LinkListenerCsv.html: -------------------------------------------------------------------------------- 1 | 2 | TITLE;DESCRIPTION;CATEGORIES;CREATED;AUTHOR;CLICKS;PERFORMANCE 3 | {linkListener.title};{linkListener.description};{linkListener.category.title};{f:format.date(date:linkListener.crdate,format:'{f:translate(key:\'LLL:EXT:lux/Resources/Private/Language/locallang_db.xlf:date\')}')};{linkListener.cruserId.username};{linkListener.linkclicksRaw -> f:count()};{linkListener.performance -> lux:format.percent()} 4 | 5 | 6 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Analysis/News.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |
6 | 7 | 8 | 9 |
10 |
11 | 12 | 13 | 14 | 15 |
16 |
17 |
18 |
19 |
20 | 21 | 22 |
23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Analysis/NewsCsv.html: -------------------------------------------------------------------------------- 1 | 2 | UID;TITLE;CATEGORIES;CREATED;AUTHOR;AMOUNT 3 | {item.news.uid};{item.news.title};{category.title},;{f:format.date(date:item.news.crdate,format:'{f:translate(key:\'LLL:EXT:lux/Resources/Private/Language/locallang_db.xlf:date\')}')};{item.news.cruserId.username};{item.count} 4 | 5 | 6 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Analysis/Search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |
6 | 7 | 8 | 9 |
10 |
11 | 12 |
13 |
14 |
15 |
16 |
17 | 18 |
19 |
20 |
21 |
22 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Analysis/UtmCsv.html: -------------------------------------------------------------------------------- 1 | 2 | LEAD;SOURCE;MEDIUM;CAMPAIGN;ID;TERM;CONTENT 3 | {utm.visitor.fullName};{utm.utmSource};{utm.utmMedium};{utm.utmCampaign};{utm.utmId};{utm.utmTerm};{utm.utmContent} 4 | 5 | 6 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Analysis/Dashboard/Browser.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Analysis/Dashboard/Downloads.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Analysis/Dashboard/Pagevisits.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Analysis/Dashboard/Pagevisitsleads.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Analysis/Dashboard/Socialmedia.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Analysis/Dashboard/Top/Downloads.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Analysis/Dashboard/Top/News.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Analysis/Dashboard/Top/Pages.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Analysis/Dashboard/Top/Search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Lead/Dashboard/Countrylist.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Lead/Dashboard/Hottest.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Lead/Dashboard/Identified.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Lead/Dashboard/Identifiedpermethod.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Lead/Dashboard/Identifiedpermonth.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Lead/Dashboard/Map.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Lead/Dashboard/Recurring.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Lead/Dashboard/Referrer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Pageoverview/Analysis/Body.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Pageoverview/Analysis/Title.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Pageoverview/Leads/Body.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Backend/Units/Pageoverview/Leads/Title.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Configuration/JavaScriptFieldMappingConfiguration.js: -------------------------------------------------------------------------------- 1 | window.luxFieldMappingConfiguration = '{fieldMapping -> f:format.raw()}'; 2 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Configuration/JavaScriptFormFieldMappingConfiguration.js: -------------------------------------------------------------------------------- 1 | window.luxFormFieldMappingConfiguration = '{formFieldMapping -> f:format.raw()}'; 2 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Frontend/TrackingOptOut.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {settings.text} 4 | 8 |
9 | 10 | DoNotTrack browser settings 11 |
12 | {settings.textDoNotTrack} 13 |
14 |
15 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Mail/Email4LinkMail.html: -------------------------------------------------------------------------------- 1 | 2 | Available variables: 3 | - {href} like "fileadmin/file.pdf" 4 | - {file} File object: {file.publicUrl} for complete URL, {file.name} for filename, etc... 5 | - {visitor} Visitor object 6 | 7 |

Your requested asset

8 | 9 |

10 | We have sent you the wanted whitepaper as attachment to this email. 11 | 12 | You can also directly download the file. 13 | 14 |

15 |

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 |

35 | -------------------------------------------------------------------------------- /Resources/Public/Css/CKEditor/Email4LinkPopup.css: -------------------------------------------------------------------------------- 1 | .ck-email4link-form { 2 | margin: 20px 15px !important; 3 | } 4 | 5 | .ck-email4link-form > h2 { 6 | font-size: 16px !important; 7 | } 8 | 9 | .ck-email4link-form > h2, 10 | .ck-email4link-form > div, 11 | .ck-email4link-form > p { 12 | margin-bottom: 20px !important; 13 | } 14 | 15 | .ck-email4link-form input:not([type='checkbox']), 16 | .ck-email4link-form textarea { 17 | width: 100% !important; 18 | } 19 | 20 | .ck-email4link-form input[type='checkbox'] { 21 | margin-right: 10px !important; 22 | } 23 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Extension.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Resources/Public/Icons/decrease.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Resources/Public/Icons/increase.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Resources/Public/Icons/lux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/in2code-de/lux/ff26d3124454f2ba7ad7d0b4a72819fb74c164e6/Resources/Public/Icons/lux.png -------------------------------------------------------------------------------- /Resources/Public/Icons/lux.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/lux_module_analysis.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Resources/Public/Icons/lux_module_lead.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Resources/Public/Icons/lux_module_workflow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Resources/Public/Icons/lux_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Resources/Public/Icons/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_attribute.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_categoryscoring.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_company.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_fingerprint.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_ipinformation.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_linkclick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_linklistener.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_log.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_newsvisit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_pagevisit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_utm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Icons/tx_lux_domain_model_visitor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Resources/Public/Images/AvatarDefault.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | placeholder 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Resources/Public/Images/Companies/Companies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/in2code-de/lux/ff26d3124454f2ba7ad7d0b4a72819fb74c164e6/Resources/Public/Images/Companies/Companies.png -------------------------------------------------------------------------------- /Resources/Public/Images/Companies/Company.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/in2code-de/lux/ff26d3124454f2ba7ad7d0b4a72819fb74c164e6/Resources/Public/Images/Companies/Company.png -------------------------------------------------------------------------------- /Resources/Public/Images/Enterprise/AbTestingPageModule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/in2code-de/lux/ff26d3124454f2ba7ad7d0b4a72819fb74c164e6/Resources/Public/Images/Enterprise/AbTestingPageModule.png -------------------------------------------------------------------------------- /Resources/Public/Images/Enterprise/ContextualContent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/in2code-de/lux/ff26d3124454f2ba7ad7d0b4a72819fb74c164e6/Resources/Public/Images/Enterprise/ContextualContent.png -------------------------------------------------------------------------------- /Resources/Public/Images/Enterprise/UrlShortener.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/in2code-de/lux/ff26d3124454f2ba7ad7d0b4a72819fb74c164e6/Resources/Public/Images/Enterprise/UrlShortener.png -------------------------------------------------------------------------------- /Resources/Public/Images/Enterprise/WorkflowEnterpriseAction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/in2code-de/lux/ff26d3124454f2ba7ad7d0b4a72819fb74c164e6/Resources/Public/Images/Enterprise/WorkflowEnterpriseAction.png -------------------------------------------------------------------------------- /Resources/Public/Images/Enterprise/WorkflowEnterpriseTrigger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/in2code-de/lux/ff26d3124454f2ba7ad7d0b4a72819fb74c164e6/Resources/Public/Images/Enterprise/WorkflowEnterpriseTrigger.png -------------------------------------------------------------------------------- /Resources/Public/Images/Enterprise/WorkflowFrontendLightbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/in2code-de/lux/ff26d3124454f2ba7ad7d0b4a72819fb74c164e6/Resources/Public/Images/Enterprise/WorkflowFrontendLightbox.png -------------------------------------------------------------------------------- /Resources/Public/Images/LogoGoogle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Resources/Public/JavaScript/Static/CkEditorPlugins/luxEmail4Link/email4link/command.js: -------------------------------------------------------------------------------- 1 | import {Core, Typing} from "@typo3/ckeditor5-bundle.js"; 2 | 3 | export default class Email4LinkCommand extends Core.Command { 4 | refresh() { 5 | const model = this.editor.model; 6 | const selection = model.document.selection; 7 | 8 | this.isEnabled = this._getSelectedLink() !== null; 9 | } 10 | 11 | execute({ title, text, sendEmail }) { 12 | this.editor.model.change( writer => { 13 | const link = this._getSelectedLink(); 14 | 15 | if (link) { 16 | const linkRange = Typing.findAttributeRange(link.getFirstPosition(), 'linkHref', link.getAttribute('linkHref'), editor.model); 17 | 18 | writer.setAttribute('sendEmail', String(sendEmail), linkRange) 19 | writer.setAttribute('emailTitle', String(title), linkRange) 20 | writer.setAttribute('emailText', String(text), linkRange) 21 | } 22 | }); 23 | } 24 | 25 | _getSelectedLink() { 26 | const model = this.editor.model; 27 | const selection = model.document.selection; 28 | 29 | if (selection.hasAttribute('linkHref')) { 30 | return selection; 31 | } 32 | 33 | return null; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Resources/Public/JavaScript/Static/CkEditorPlugins/luxEmail4Link/ui/textareaview.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved. 3 | * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license 4 | */ 5 | 6 | /** 7 | * @module find-and-replace/ui/checkboxview 8 | */ 9 | 10 | import { UI } from "@typo3/ckeditor5-bundle.js"; 11 | 12 | /** 13 | * The checkbox view class. 14 | * 15 | * @extends module:ui/view~View 16 | */ 17 | export default class TextareaView extends UI.InputView { 18 | constructor(locale) { 19 | super(locale); 20 | this.template.tag = 'textarea'; 21 | this.extendTemplate({ 22 | attributes: { 23 | class: [ 24 | 'ck-input-textarea' 25 | ] 26 | } 27 | }); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /codeception.yml: -------------------------------------------------------------------------------- 1 | namespace: In2code\Lux\Tests 2 | params: 3 | - env 4 | paths: 5 | tests: Tests/Acceptance 6 | output: Tests/Acceptance/_output 7 | data: Tests/Acceptance/_data 8 | support: Tests/Acceptance/_support 9 | envs: Tests/Acceptance/_envs 10 | extensions: 11 | enabled: 12 | - Codeception\Extension\RunFailed 13 | -------------------------------------------------------------------------------- /docker-compose.selenium.yml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | services: 4 | chrome: 5 | image: seleniarm/node-chromium:4.1.2-20220227 6 | volumes: 7 | - /dev/shm:/dev/shm 8 | depends_on: 9 | - seleniarm-hub 10 | environment: 11 | - SE_EVENT_BUS_HOST=seleniarm-hub 12 | - SE_EVENT_BUS_PUBLISH_PORT=4442 13 | - SE_EVENT_BUS_SUBSCRIBE_PORT=4443 14 | ports: 15 | - ${PORT_CHROME}:5900 16 | - ${VNC_PORT_CHROME}:5900 # for vnc 17 | 18 | firefox: 19 | image: seleniarm/node-firefox:4.1.2-20220227 20 | volumes: 21 | - /dev/shm:/dev/shm 22 | depends_on: 23 | - seleniarm-hub 24 | environment: 25 | - SE_EVENT_BUS_HOST=seleniarm-hub 26 | - SE_EVENT_BUS_PUBLISH_PORT=4442 27 | - SE_EVENT_BUS_SUBSCRIBE_PORT=4443 28 | ports: 29 | - ${PORT_FIREFOX}:5900 30 | - ${VNC_PORT_FIREFOX}:5900 # for vnc 31 | 32 | seleniarm-hub: 33 | image: seleniarm/hub:4.1.2-20220227 34 | ports: 35 | - ${SELENIARM_PORT_4442}:4442 36 | - ${SELENIARM_PORT_4443}:4443 37 | - ${SELENIARM_PORT_4444}:4444 38 | -------------------------------------------------------------------------------- /ext_emconf.php: -------------------------------------------------------------------------------- 1 | 'LUX - TYPO3 Marketing Automation', 4 | 'description' => 'Living User Experience - LUX - the Marketing Automation tool for TYPO3. 5 | Turn your visitors to leads. Identification and profiling of your visitors within your TYPO3 website.', 6 | 'category' => 'plugin', 7 | 'version' => '38.5.1', 8 | 'author' => 'Alex Kellner', 9 | 'author_email' => 'alexander.kellner@in2code.de', 10 | 'author_company' => 'in2code.de', 11 | 'state' => 'stable', 12 | 'constraints' => [ 13 | 'depends' => [ 14 | 'typo3' => '12.4.0-13.4.99', 15 | ], 16 | 'conflicts' => [], 17 | 'suggests' => [ 18 | 'dashboard' => '0.0.0-0.0.0', 19 | ], 20 | ], 21 | ]; 22 | --------------------------------------------------------------------------------