Download plugins/Feedback/Feedback.php from Leon4gr45/matomo: direct link, hf CLI and curl.
- Browser
- Download file 7.15 kB
-
https://huggingface.co/spaces/Leon4gr45/matomo/resolve/main/plugins/Feedback/Feedback.php
- Command line
-
hf download hf://spaces/Leon4gr45/matomo/plugins/Feedback/Feedback.php
-
curl -L -o Feedback.php https://huggingface.co/spaces/Leon4gr45/matomo/resolve/main/plugins/Feedback/Feedback.php
7.15 kB
| /** | |
| * Matomo - free/libre analytics platform | |
| * | |
| * @link https://matomo.org | |
| * @license https://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 | |
| { | |
| public 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); | |
| } | |
| } | |