'getStylesheetFiles', 'AssetManager.getJavaScriptFiles' => 'getJsFiles', 'UsersManager.deleteUser' => 'cleanupUser', 'API.DocumentationGenerator.@hideExceptForSuperUser' => 'displayOnlyForSuperUser', 'Template.jsGlobalVariables' => 'addJsGlobalVariables', 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys', 'System.addSystemSummaryItems' => 'addSystemSummaryItems', 'FrontController.modifyErrorPage' => 'onModifyErrorPage', ); } public function onModifyErrorPage(&$output, $exception) { if ( empty($output) || !$exception instanceof UnexpectedWebsiteFoundException ) { return; } $requestedIdSite = $this->getRequestedIdSite(); if ($requestedIdSite === null) { return; } if (!$this->isInvalidRequestedIdSite($requestedIdSite)) { return; } $message = sprintf( '

%s

%s

', Piwik::translate('CoreAdminHome_InvalidSiteUrlError', Common::sanitizeInputValue($requestedIdSite)), Piwik::translate('CoreAdminHome_InvalidSiteUrlErrorHelp') ); $output = $this->replaceErrorPageMessage($output, $message); } private function getRequestedIdSite(): ?string { foreach ([$_GET, $_POST] as $request) { if (!isset($request['idSite']) || is_array($request['idSite'])) { continue; } $idSite = trim((string) $request['idSite']); if ($idSite !== '') { return $idSite; } } return null; } private function isInvalidRequestedIdSite(string $requestedIdSite): bool { if (!ctype_digit($requestedIdSite)) { return false; } try { new Site((int) $requestedIdSite); return false; } catch (UnexpectedWebsiteFoundException $exception) { return true; } } private function replaceErrorPageMessage(string $output, string $message): string { $updatedOutput = preg_replace('/

.*?<\/h2>/s', '

' . $message . '

', $output, 1); if ($updatedOutput !== null && $updatedOutput !== $output) { return $updatedOutput; } $updatedOutput = preg_replace( '/
Error:<\/strong> .*?<\/div>/s', "
Error: $message
", $output, 1 ); if ($updatedOutput !== null) { return $updatedOutput; } return $output; } public function addSystemSummaryItems(&$systemSummary) { if (Piwik::isUserHasSomeAdminAccess()) { $failures = Request::processRequest('CoreAdminHome.getTrackingFailures', [], []); $numFailures = count($failures); $icon = 'icon-error'; if ($numFailures === 0) { $icon = 'icon-ok'; } $systemSummary[] = new SystemSummary\Item($key = 'trackingfailures', Piwik::translate('CoreAdminHome_NTrackingFailures', $numFailures), $value = null, array('module' => 'CoreAdminHome', 'action' => 'trackingFailures'), $icon, $order = 9); } } public function cleanupUser($userLogin) { PluginSettingsTable::removeAllUserSettingsForUser($userLogin); } public function getStylesheetFiles(&$stylesheets) { $stylesheets[] = "node_modules/jquery-ui-dist/jquery-ui.min.css"; $stylesheets[] = "plugins/Morpheus/stylesheets/base.less"; $stylesheets[] = "plugins/Morpheus/stylesheets/main.less"; $stylesheets[] = "plugins/CoreAdminHome/stylesheets/generalSettings.less"; $stylesheets[] = "plugins/CoreAdminHome/vue/src/TrackingFailures/TrackingFailures.less"; $stylesheets[] = "plugins/CoreAdminHome/stylesheets/whatIsNew.less"; $stylesheets[] = "plugins/CoreAdminHome/stylesheets/trackingCodeGenerator.less"; } public function getJsFiles(&$jsFiles) { $jsFiles[] = "node_modules/jquery/dist/jquery.min.js"; $jsFiles[] = "node_modules/jquery-ui-dist/jquery-ui.min.js"; $jsFiles[] = "node_modules/sprintf-js/dist/sprintf.min.js"; $jsFiles[] = "plugins/Morpheus/javascripts/piwikHelper.js"; $jsFiles[] = "plugins/CoreHome/javascripts/broadcast.js"; $jsFiles[] = "plugins/CoreAdminHome/javascripts/protocolCheck.js"; } public function displayOnlyForSuperUser(&$hide) { $hide = !Piwik::hasUserSuperUserAccess(); } public function addJsGlobalVariables(&$out) { if (ProxyHttp::isHttps()) { $isHttps = 'true'; } else { $isHttps = 'false'; } $out .= "piwik.hasServerDetectedHttps = $isHttps;\n"; } public function getClientSideTranslationKeys(&$translationKeys) { $translationKeys[] = 'CoreAdminHome_ProtocolNotDetectedCorrectly'; $translationKeys[] = 'CoreAdminHome_ProtocolNotDetectedCorrectlySolution'; $translationKeys[] = 'CoreAdminHome_SettingsSaveSuccess'; $translationKeys[] = 'UserCountryMap_None'; $translationKeys[] = 'Actions_ColumnPageURL'; $translationKeys[] = 'General_Date'; $translationKeys[] = 'General_Measurable'; $translationKeys[] = 'General_Action'; $translationKeys[] = 'General_Delete'; $translationKeys[] = 'General_Id'; $translationKeys[] = 'CoreHome_ClickToSeeFullInformation'; $translationKeys[] = 'CoreAdminHome_LearnMore'; $translationKeys[] = 'CoreAdminHome_ConfirmDeleteAllTrackingFailures'; $translationKeys[] = 'CoreAdminHome_ConfirmDeleteThisTrackingFailure'; $translationKeys[] = 'CoreAdminHome_DeleteAllFailures'; $translationKeys[] = 'CoreAdminHome_NTrackingFailures'; $translationKeys[] = 'CoreAdminHome_Problem'; $translationKeys[] = 'CoreAdminHome_Solution'; $translationKeys[] = 'CoreAdminHome_TrackingFailures'; $translationKeys[] = 'CoreAdminHome_TrackingFailuresIntroduction'; $translationKeys[] = 'CoreAdminHome_TrackingURL'; $translationKeys[] = 'CoreAdminHome_NoKnownFailures'; $translationKeys[] = 'CoreAdminHome_JSTracking_CodeNoteBeforeClosingHead'; $translationKeys[] = 'CoreAdminHome_JSTracking_CodeNoteBeforeClosingHeadEmail'; $translationKeys[] = 'SitesManager_InstallationGuides'; $translationKeys[] = 'CoreAdminHome_ArchivingSettings'; $translationKeys[] = 'General_AllowPiwikArchivingToTriggerBrowser'; $translationKeys[] = 'General_ReportsContainingTodayWillBeProcessedAtMostEvery'; $translationKeys[] = 'General_ArchivingTriggerDescription'; $translationKeys[] = 'General_ArchivingTriggerSegment'; $translationKeys[] = 'General_SeeTheOfficialDocumentationForMoreInformation'; $translationKeys[] = 'General_SmallTrafficYouCanLeaveDefault'; $translationKeys[] = 'General_MediumToHighTrafficItIsRecommendedTo'; $translationKeys[] = 'General_RearchiveTimeIntervalOnlyForTodayReports'; $translationKeys[] = 'General_ArchivingInlineHelp'; $translationKeys[] = 'General_NewReportsWillBeProcessedByCron'; $translationKeys[] = 'General_ReportsWillBeProcessedAtMostEveryHour'; $translationKeys[] = 'General_IfArchivingIsFastYouCanSetupCronRunMoreOften'; $translationKeys[] = 'CoreAdminHome_BrandingSettings'; $translationKeys[] = 'CoreAdminHome_CustomLogoHelpText'; $translationKeys[] = 'CoreAdminHome_UseCustomLogo'; $translationKeys[] = 'CoreAdminHome_LogoUpload'; $translationKeys[] = 'CoreAdminHome_FaviconUpload'; $translationKeys[] = 'CoreAdminHome_LogoUploadHelp'; $translationKeys[] = 'CoreAdminHome_LogoUploadFailed'; $translationKeys[] = 'CoreAdminHome_FileUploadDisabled'; $translationKeys[] = 'CoreAdminHome_LogoNotWriteableInstruction'; $translationKeys[] = 'General_GiveUsYourFeedback'; $translationKeys[] = 'CoreAdminHome_CustomLogoFeedbackInfo'; $translationKeys[] = 'CoreAdminHome_EmailServerSettings'; $translationKeys[] = 'General_UseSMTPServerForEmail'; $translationKeys[] = 'General_SelectYesIfYouWantToSendEmailsViaServer'; $translationKeys[] = 'General_SmtpServerAddress'; $translationKeys[] = 'General_SmtpPort'; $translationKeys[] = 'General_OptionalSmtpPort'; $translationKeys[] = 'General_AuthenticationMethodSmtp'; $translationKeys[] = 'General_OnlyUsedIfUserPwdIsSet'; $translationKeys[] = 'General_SmtpUsername'; $translationKeys[] = 'General_OnlyEnterIfRequired'; $translationKeys[] = 'General_Plugins'; $translationKeys[] = 'General_SmtpPassword'; $translationKeys[] = 'General_SmtpFromAddress'; $translationKeys[] = 'General_SmtpFromEmailHelp'; $translationKeys[] = 'General_SmtpFromName'; $translationKeys[] = 'General_NameShownInTheSenderColumn'; $translationKeys[] = 'General_SmtpEncryption'; $translationKeys[] = 'General_EncryptedSmtpTransport'; $translationKeys[] = 'General_OnlyEnterIfRequiredPassword'; $translationKeys[] = 'General_WarningPasswordStored'; $translationKeys[] = 'CoreAdminHome_ImageTracking'; $translationKeys[] = 'CoreAdminHome_TrackAGoal'; $translationKeys[] = 'CoreAdminHome_WithOptionalRevenue'; $translationKeys[] = 'CoreAdminHome_ImageTrackingLink'; $translationKeys[] = 'CoreAdminHome_ImageTrackingIntro1'; $translationKeys[] = 'CoreAdminHome_ImageTrackingIntro2'; $translationKeys[] = 'CoreAdminHome_ImageTrackingIntro3'; $translationKeys[] = 'CoreAdminHome_JavaScriptTracking'; $translationKeys[] = 'CoreAdminHome_JSTrackingIntro1'; $translationKeys[] = 'CoreAdminHome_JSTrackingIntro2'; $translationKeys[] = 'CoreAdminHome_JSTrackingIntro3b'; $translationKeys[] = 'General_JsTrackingTag'; $translationKeys[] = 'SitesManager_EmailInstructionsButton'; $translationKeys[] = 'CoreAdminHome_JSTracking_MergeSubdomains'; $translationKeys[] = 'CoreAdminHome_JSTracking_GroupPageTitlesByDomainDesc1'; $translationKeys[] = 'CoreAdminHome_JSTracking_GroupPageTitlesByDomain'; $translationKeys[] = 'CoreAdminHome_JSTracking_MergeAliasesDesc'; $translationKeys[] = 'CoreAdminHome_JSTracking_MergeAliases'; $translationKeys[] = 'CoreAdminHome_JSTracking_TrackNoScript'; $translationKeys[] = 'Mobile_Advanced'; $translationKeys[] = 'CoreAdminHome_JSTracking_VisitorCustomVars'; $translationKeys[] = 'CoreAdminHome_JSTracking_VisitorCustomVarsDesc'; $translationKeys[] = 'CoreAdminHome_JSTracking_CrossDomain'; $translationKeys[] = 'CoreAdminHome_JSTracking_CrossDomain_NeedsMultipleDomains'; $translationKeys[] = 'CoreAdminHome_JSTracking_EnableCrossDomainLinking'; $translationKeys[] = 'CoreAdminHome_JSTracking_EnableDoNotTrackDesc'; $translationKeys[] = 'CoreAdminHome_JSTracking_EnableDoNotTrack_AlreadyEnabled'; $translationKeys[] = 'CoreAdminHome_JSTracking_EnableDoNotTrack'; $translationKeys[] = 'CoreAdminHome_JSTracking_DisableCookies'; $translationKeys[] = 'CoreAdminHome_JSTracking_DisableCookiesDesc'; $translationKeys[] = 'CoreAdminHome_JSTracking_CustomCampaignQueryParam'; $translationKeys[] = 'CoreAdminHome_JSTracking_CampaignNameParam'; $translationKeys[] = 'CoreAdminHome_JSTracking_CampaignKwdParam'; $translationKeys[] = 'SitesManager_EmailInstructionsSubject'; $translationKeys[] = 'SitesManager_JsTrackingTagHelp'; $translationKeys[] = 'CoreAdminHome_JSTrackingIntro3a'; $translationKeys[] = 'CoreAdminHome_JSTrackingIntro4'; $translationKeys[] = 'CoreAdminHome_JSTrackingIntro5'; $translationKeys[] = 'General_Options'; $translationKeys[] = 'General_Value'; $translationKeys[] = 'Actions_ColumnPageName'; $translationKeys[] = 'CoreAdminHome_JSTracking_MergeSubdomainsDesc'; $translationKeys[] = 'CoreAdminHome_JSTracking_CustomCampaignQueryParamDesc'; $translationKeys[] = 'CoreAdminHome_SinglePageApplicationDescription'; $translationKeys[] = 'CoreAdminHome_CloudflareDescription'; $translationKeys[] = 'CoreAdminHome_SecurityNotificationUserAcceptInviteBody'; $translationKeys[] = 'CoreAdminHome_SecurityNotificationUserDeclinedInviteBody'; $translationKeys[] = 'CoreAdminHome_JSTracking_ConsentManagerDetected'; $translationKeys[] = 'CoreAdminHome_JSTracking_ConsentManagerConnected'; $translationKeys[] = 'CoreAdminHome_GoogleTagManagerDescription'; $translationKeys[] = 'CoreAdminHome_WordpressDescription'; $translationKeys[] = 'CoreAdminHome_VueDescription'; $translationKeys[] = 'CoreAdminHome_ShowAdvancedOptions'; $translationKeys[] = 'CoreAdminHome_HideAdvancedOptions'; $translationKeys[] = 'CoreAdminHome_JSTrackingDocumentationHelp'; $translationKeys[] = 'CoreAdminHome_ReactDescription'; $translationKeys[] = 'CoreAdminHome_JsTrackingCodeAdvancedOptionsStep'; $translationKeys[] = 'CoreAdminHome_JSTracking_DisableCampaignParameters'; $translationKeys[] = 'CoreAdminHome_JSTracking_DisableCampaignParametersDesc'; } }