/plugins/Feedback/API.php
PHP | 115 lines | 77 code | 18 blank | 20 comment | 10 complexity | 3daeef739f170eb24c229bbedba9f5ee MD5 | raw file
Possible License(s): LGPL-3.0, JSON, MIT, GPL-3.0, LGPL-2.1, GPL-2.0, AGPL-1.0, BSD-2-Clause, BSD-3-Clause
- <?php
- /**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
- */
- namespace Piwik\Plugins\Feedback;
- use Piwik\Common;
- use Piwik\Config;
- use Piwik\IP;
- use Piwik\Mail;
- use Piwik\Piwik;
- use Piwik\Translate;
- use Piwik\Url;
- use Piwik\Version;
- /**
- * API for plugin Feedback
- *
- * @method static \Piwik\Plugins\Feedback\API getInstance()
- */
- class API extends \Piwik\Plugin\API
- {
- /**
- * Sends feedback for a specific feature to the Piwik team or alternatively to the email address configured in the
- * config: "feedback_email_address".
- *
- * @param string $featureName The name of a feature you want to give feedback to.
- * @param bool|int $like Whether you like the feature or not
- * @param string|bool $message A message containing the actual feedback
- */
- public function sendFeedbackForFeature($featureName, $like, $message = false)
- {
- Piwik::checkUserIsNotAnonymous();
- Piwik::checkUserHasSomeViewAccess();
- $featureName = $this->getEnglishTranslationForFeatureName($featureName);
- $likeText = 'Yes';
- if (empty($like)) {
- $likeText = 'No';
- }
- $body = sprintf("Feature: %s\nLike: %s\n", $featureName, $likeText, $message);
- $feedbackMessage = "";
- if (!empty($message) && $message != 'undefined') {
- $feedbackMessage = sprintf("Feedback:\n%s\n", trim($message));
- }
- $body .= $feedbackMessage ? $feedbackMessage : " \n";
- $subject = sprintf("%s for %s %s",
- empty($like) ? "-1" : "+1",
- $featureName,
- empty($feedbackMessage) ? "" : "(w/ feedback)"
- );
- $this->sendMail($subject, $body);
- }
- private function sendMail($subject, $body)
- {
- $feedbackEmailAddress = Config::getInstance()->General['feedback_email_address'];
- $subject = '[ Feedback Feature - Piwik ] ' . $subject;
- $body = Common::unsanitizeInputValue($body) . "\n"
- . 'Piwik ' . Version::VERSION . "\n"
- . 'IP: ' . IP::getIpFromHeader() . "\n"
- . 'URL: ' . Url::getReferrer() . "\n";
- $mail = new Mail();
- $mail->setFrom(Piwik::getCurrentUserEmail());
- $mail->addTo($feedbackEmailAddress, 'Piwik Team');
- $mail->setSubject($subject);
- $mail->setBodyText($body);
- @$mail->send();
- }
- private function findTranslationKeyForFeatureName($featureName)
- {
- if (empty($GLOBALS['Piwik_translations'])) {
- return;
- }
- foreach ($GLOBALS['Piwik_translations'] as $key => $translations) {
- $possibleKey = array_search($featureName, $translations);
- if (!empty($possibleKey)) {
- return $key . '_' . $possibleKey;
- }
- }
- }
- private function getEnglishTranslationForFeatureName($featureName)
- {
- $loadedLanguage = Translate::getLanguageLoaded();
- if ($loadedLanguage == 'en') {
- return $featureName;
- }
- $translationKeyForFeature = $this->findTranslationKeyForFeatureName($featureName);
- if (!empty($translationKeyForFeature)) {
- Translate::reloadLanguage('en');
- $featureName = Piwik::translate($translationKeyForFeature);
- Translate::reloadLanguage($loadedLanguage);
- return $featureName;
- }
- return $featureName;
- }
- }