![]() Server : LiteSpeed System : Linux premium84.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : claqxcrl ( 523) PHP Version : 8.1.32 Disable Function : NONE Directory : /home/claqxcrl/anfangola.com/wp-content/plugins/matomo/app/plugins/Feedback/ |
<?php /** * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ namespace Piwik\Plugins\Feedback; use Piwik\Date; use Piwik\View; use Piwik\Piwik; use Piwik\Common; use Piwik\Plugins\Feedback\FeedbackReminder; /** * */ class Feedback extends \Piwik\Plugin { const NEVER_REMIND_ME_AGAIN = "-1"; /** * @see \Piwik\Plugin::registerEvents */ public function registerEvents() { return array('AssetManager.getStylesheetFiles' => 'getStylesheetFiles', 'AssetManager.getJavaScriptFiles' => 'getJsFiles', 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys', 'Controller.CoreHome.index.end' => 'renderViewsAndAddToPage'); } public function getStylesheetFiles(&$stylesheets) { $stylesheets[] = "plugins/Feedback/stylesheets/feedback.less"; $stylesheets[] = "plugins/Feedback/vue/src/RateFeature/RateFeature.less"; $stylesheets[] = "plugins/Feedback/vue/src/ReviewLinks/ReviewLinks.less"; $stylesheets[] = "plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.less"; } public function getJsFiles(&$jsFiles) { } public function getClientSideTranslationKeys(&$translationKeys) { $translationKeys[] = 'Feedback_ThankYouHeart'; $translationKeys[] = 'Feedback_ThankYouForSpreading'; $translationKeys[] = 'Feedback_RateFeatureTitle'; $translationKeys[] = 'Feedback_RateFeatureThankYouTitle'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageLike'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageLikeNamedFeature'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageLikeExtra'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageLikeExtraConfigurable'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageLikeExtraEasy'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageLikeExtraUseful'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageDislike'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageDislikeNamedFeature'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageDislikeExtra'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageDislikeExtraBugs'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageDislikeExtraMissing'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageDislikeExtraSpeed'; $translationKeys[] = 'Feedback_RateFeatureLeaveMessageDislikeExtraEasier'; $translationKeys[] = 'Feedback_RateFeatureOtherReason'; $translationKeys[] = 'Feedback_SendFeedback'; $translationKeys[] = 'Feedback_RateFeatureSendFeedbackInformation'; $translationKeys[] = 'Feedback_RateFeatureUsefulInfo'; $translationKeys[] = 'Feedback_RateFeatureEasyToUse'; $translationKeys[] = 'Feedback_RateFeatureConfigurable'; $translationKeys[] = 'Feedback_RateFeatureDislikeAddMissingFeatures'; $translationKeys[] = 'Feedback_RateFeatureDislikeMakeEasier'; $translationKeys[] = 'Feedback_RateFeatureDislikeSpeedUp'; $translationKeys[] = 'Feedback_RateFeatureDislikeFixBugs'; $translationKeys[] = 'Feedback_ReviewMatomoTitle'; $translationKeys[] = 'Feedback_PleaseLeaveExternalReviewForMatomo'; $translationKeys[] = 'Feedback_RemindMeLater'; $translationKeys[] = 'Feedback_NeverAskMeAgain'; $translationKeys[] = 'Feedback_WontShowAgain'; $translationKeys[] = 'Feedback_AppreciateFeedback'; $translationKeys[] = 'Feedback_Policy'; $translationKeys[] = 'General_Ok'; $translationKeys[] = 'General_Cancel'; $translationKeys[] = 'Feedback_Question0'; $translationKeys[] = 'Feedback_Question1'; $translationKeys[] = 'Feedback_Question2'; $translationKeys[] = 'Feedback_Question3'; $translationKeys[] = 'Feedback_Question4'; $translationKeys[] = 'Feedback_FeedbackTitle'; $translationKeys[] = 'Feedback_FeedbackSubtitle'; $translationKeys[] = 'Feedback_ThankYourForFeedback'; $translationKeys[] = 'Feedback_ThankYou'; $translationKeys[] = 'Feedback_MessageBodyValidationError'; } public function renderViewsAndAddToPage(&$pageHtml) { //only show on superuser if (!Piwik::hasUserSuperUserAccess()) { return $pageHtml; } $feedbackQuestionBanner = $this->renderFeedbackQuestion(); $matches = preg_split('/(<body.*?>)/i', $pageHtml, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $pageHtml = $matches[0] . $matches[1] . $feedbackQuestionBanner . $matches[2]; } public function renderFeedbackQuestion() { $feedbackQuestionBanner = new View('@Feedback/feedbackQuestionBanner'); $feedbackQuestionBanner->showQuestionBanner = (int) $this->showQuestionBanner(); return $feedbackQuestionBanner->render(); } public function showQuestionBanner() { if (Piwik::isUserIsAnonymous()) { return false; } // Hide Feedback popup in all tests except if forced if ($this->isDisabledInTestMode()) { return false; } $shouldShowQuestionBanner = true; Piwik::postEvent('Feedback.showQuestionBanner', [&$shouldShowQuestionBanner]); if (!$shouldShowQuestionBanner) { return false; } $feedbackReminder = new FeedbackReminder(); $nextReminderDate = $feedbackReminder->getUserOption(); $now = Date::now()->getTimestamp(); // If there isn't any reminder date set, or never remind me was selected previously (-1) we determine a new date if ($nextReminderDate === false || $nextReminderDate <= 0) { // if user was created within the last 6 months, we set the date to 6 months after his creation date $userCreatedDate = Piwik::getCurrentUserCreationDate(); if (!empty($userCreatedDate) && Date::factory($userCreatedDate)->addMonth(6)->getTimestamp() > $now) { $nextReminder = Date::factory($userCreatedDate)->addMonth(6)->toString('Y-m-d'); $feedbackReminder->setUserOption($nextReminder); return false; } // Otherwise we set the date to somewhen within the next 6 months $nextReminder = Date::now()->getStartOfDay()->addDay(Common::getRandomInt(1, 6 * 30))->toString('Y-m-d'); $feedbackReminder->setUserOption($nextReminder); return false; } $nextReminderDate = Date::factory($nextReminderDate); if ($nextReminderDate->getTimestamp() > $now) { return false; } return true; } // needs to be protected not private for testing purpose protected function isDisabledInTestMode() { return defined('PIWIK_TEST_MODE') && PIWIK_TEST_MODE && !Common::getRequestVar('forceFeedbackTest', false); } }