Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Aubry <matt@piwik.org>2015-07-13 01:58:12 +0300
committerMatthieu Aubry <matt@piwik.org>2015-07-13 01:58:12 +0300
commit286a5fb304660c1e7eaad08da5c5dedd98b414f1 (patch)
tree832d784ae77f46bab16a08027a1db103a5d051e4
parent319e45771a9bd8732b3271e6d0838c8aa00cb918 (diff)
parentcb5f565b5a9f621ffa6cea56f7c10c31cbf8e89e (diff)
Merge pull request #8229 from Zeichen32/OptOutManager
Add OptOutManager
-rw-r--r--plugins/CoreAdminHome/Controller.php55
-rw-r--r--plugins/CoreAdminHome/OptOutManager.php180
-rw-r--r--plugins/CoreAdminHome/templates/optOut.twig30
3 files changed, 216 insertions, 49 deletions
diff --git a/plugins/CoreAdminHome/Controller.php b/plugins/CoreAdminHome/Controller.php
index b80ef1bc7a..cb8f862643 100644
--- a/plugins/CoreAdminHome/Controller.php
+++ b/plugins/CoreAdminHome/Controller.php
@@ -21,7 +21,6 @@ use Piwik\Piwik;
use Piwik\Plugin\ControllerAdmin;
use Piwik\Plugins\CorePluginsAdmin\UpdateCommunication;
use Piwik\Plugins\CustomVariables\CustomVariables;
-use Piwik\Plugins\LanguagesManager\API as APILanguagesManager;
use Piwik\Plugins\LanguagesManager\LanguagesManager;
use Piwik\Plugins\PrivacyManager\DoNotTrackHeaderChecker;
use Piwik\Plugins\SitesManager\API as APISitesManager;
@@ -29,7 +28,6 @@ use Piwik\Settings\Manager as SettingsManager;
use Piwik\Settings\SystemSetting;
use Piwik\Settings\UserSetting;
use Piwik\Site;
-use Piwik\Tracker\IgnoreCookie;
use Piwik\Translation\Translator;
use Piwik\Url;
use Piwik\View;
@@ -43,9 +41,13 @@ class Controller extends ControllerAdmin
*/
private $translator;
- public function __construct(Translator $translator)
+ /** @var OptOutManager */
+ private $optOutManager;
+
+ public function __construct(Translator $translator, OptOutManager $optOutManager)
{
$this->translator = $translator;
+ $this->optOutManager = $optOutManager;
parent::__construct();
}
@@ -317,52 +319,7 @@ class Controller extends ControllerAdmin
*/
public function optOut()
{
- $trackVisits = !IgnoreCookie::isIgnoreCookieFound();
-
- $dntChecker = new DoNotTrackHeaderChecker();
- $dntFound = $dntChecker->isDoNotTrackFound();
-
- $setCookieInNewWindow = Common::getRequestVar('setCookieInNewWindow', false, 'int');
- if ($setCookieInNewWindow) {
- $reloadUrl = Url::getCurrentQueryStringWithParametersModified(array(
- 'showConfirmOnly' => 1,
- 'setCookieInNewWindow' => 0,
- ));
- } else {
- $reloadUrl = false;
-
- $nonce = Common::getRequestVar('nonce', false);
- if ($nonce !== false && Nonce::verifyNonce('Piwik_OptOut', $nonce)) {
- Nonce::discardNonce('Piwik_OptOut');
- IgnoreCookie::setIgnoreCookie();
- $trackVisits = !$trackVisits;
- }
- }
-
- $language = Common::getRequestVar('language', '');
- $lang = APILanguagesManager::getInstance()->isLanguageAvailable($language)
- ? $language
- : LanguagesManager::getLanguageCodeForCurrentUser();
-
- // should not use self::renderTemplate since that uses setBasicVariablesView. this will cause
- // an error when setBasicVariablesAdminView is called, and MenuTop is requested (the idSite query
- // parameter is required)
- $view = new View("@CoreAdminHome/optOut");
- $view->setXFrameOptions('allow');
- $view->dntFound = $dntFound;
- $view->trackVisits = $trackVisits;
- $view->nonce = Nonce::getNonce('Piwik_OptOut', 3600);
- $view->language = $lang;
- $view->isSafari = $this->isUserAgentSafari();
- $view->showConfirmOnly = Common::getRequestVar('showConfirmOnly', false, 'int');
- $view->reloadUrl = $reloadUrl;
- return $view->render();
- }
-
- private function isUserAgentSafari()
- {
- $userAgent = @$_SERVER['HTTP_USER_AGENT'] ?: '';
- return strpos($userAgent, 'Safari') !== false && strpos($userAgent, 'Chrome') === false;
+ return $this->optOutManager->getOptOutView()->render();
}
public function uploadCustomLogo()
diff --git a/plugins/CoreAdminHome/OptOutManager.php b/plugins/CoreAdminHome/OptOutManager.php
new file mode 100644
index 0000000000..42a1cd9aea
--- /dev/null
+++ b/plugins/CoreAdminHome/OptOutManager.php
@@ -0,0 +1,180 @@
+<?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\CoreAdminHome;
+
+use Piwik\Common;
+use Piwik\Nonce;
+use Piwik\Plugins\LanguagesManager\API as APILanguagesManager;
+use Piwik\Plugins\LanguagesManager\LanguagesManager;
+use Piwik\Plugins\PrivacyManager\DoNotTrackHeaderChecker;
+use Piwik\Tracker\IgnoreCookie;
+use Piwik\Url;
+use Piwik\View;
+
+class OptOutManager
+{
+ /** @var DoNotTrackHeaderChecker */
+ private $doNotTrackHeaderChecker;
+
+ /** @var array */
+ private $javascripts;
+
+ /** @var array */
+ private $stylesheets;
+
+ /** @var string */
+ private $title;
+
+ /** @var View|null */
+ private $view;
+
+ /**
+ * @param DoNotTrackHeaderChecker $doNotTrackHeaderChecker
+ */
+ public function __construct(DoNotTrackHeaderChecker $doNotTrackHeaderChecker = null)
+ {
+ $this->doNotTrackHeaderChecker = $doNotTrackHeaderChecker ?: new DoNotTrackHeaderChecker();
+
+ $this->javascripts = array(
+ 'inline' => array(),
+ 'external' => array(),
+ );
+
+ $this->stylesheets = array(
+ 'inline' => array(),
+ 'external' => array(),
+ );
+ }
+
+ /**
+ * Add a javascript file|code into the OptOut View
+ * Note: This method will not escape the inline javascript code!
+ *
+ * @param string $javascript
+ * @param bool $inline
+ */
+ public function addJavascript($javascript, $inline = true)
+ {
+ $type = $inline ? 'inline' : 'external';
+ $this->javascripts[$type][] = $javascript;
+ }
+
+ /**
+ * @return array
+ */
+ public function getJavascripts()
+ {
+ return $this->javascripts;
+ }
+
+ /**
+ * Add a stylesheet file|code into the OptOut View
+ * Note: This method will not escape the inline css code!
+ *
+ * @param string $stylesheet Escaped stylesheet
+ * @param bool $inline
+ */
+ public function addStylesheet($stylesheet, $inline = true)
+ {
+ $type = $inline ? 'inline' : 'external';
+ $this->stylesheets[$type][] = $stylesheet;
+ }
+
+ /**
+ * @return array
+ */
+ public function getStylesheets()
+ {
+ return $this->stylesheets;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * @param string $title
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
+ /**
+ * @return View
+ * @throws \Exception
+ */
+ public function getOptOutView()
+ {
+ if ($this->view) {
+ return $this->view;
+ }
+
+ $trackVisits = !IgnoreCookie::isIgnoreCookieFound();
+ $dntFound = $this->getDoNotTrackHeaderChecker()->isDoNotTrackFound();
+
+ $setCookieInNewWindow = Common::getRequestVar('setCookieInNewWindow', false, 'int');
+ if ($setCookieInNewWindow) {
+ $reloadUrl = Url::getCurrentQueryStringWithParametersModified(array(
+ 'showConfirmOnly' => 1,
+ 'setCookieInNewWindow' => 0,
+ ));
+ } else {
+ $reloadUrl = false;
+
+ $nonce = Common::getRequestVar('nonce', false);
+ if ($nonce !== false && Nonce::verifyNonce('Piwik_OptOut', $nonce)) {
+ Nonce::discardNonce('Piwik_OptOut');
+ IgnoreCookie::setIgnoreCookie();
+ $trackVisits = !$trackVisits;
+ }
+ }
+
+ $language = Common::getRequestVar('language', '');
+ $lang = APILanguagesManager::getInstance()->isLanguageAvailable($language)
+ ? $language
+ : LanguagesManager::getLanguageCodeForCurrentUser();
+
+ $this->view = new View("@CoreAdminHome/optOut");
+ $this->view->setXFrameOptions('allow');
+ $this->view->dntFound = $dntFound;
+ $this->view->trackVisits = $trackVisits;
+ $this->view->nonce = Nonce::getNonce('Piwik_OptOut', 3600);
+ $this->view->language = $lang;
+ $this->view->isSafari = $this->isUserAgentSafari();
+ $this->view->showConfirmOnly = Common::getRequestVar('showConfirmOnly', false, 'int');
+ $this->view->reloadUrl = $reloadUrl;
+ $this->view->javascripts = $this->getJavascripts();
+ $this->view->stylesheets = $this->getStylesheets();
+ $this->view->title = $this->getTitle();
+
+ return $this->view;
+ }
+
+ /**
+ * @return DoNotTrackHeaderChecker
+ */
+ protected function getDoNotTrackHeaderChecker()
+ {
+ return $this->doNotTrackHeaderChecker;
+ }
+
+ /**
+ * @return bool
+ */
+ protected function isUserAgentSafari()
+ {
+ $userAgent = @$_SERVER['HTTP_USER_AGENT'] ?: '';
+ return strpos($userAgent, 'Safari') !== false && strpos($userAgent, 'Chrome') === false;
+ }
+}
diff --git a/plugins/CoreAdminHome/templates/optOut.twig b/plugins/CoreAdminHome/templates/optOut.twig
index 55cd9da01d..e24d47f85b 100644
--- a/plugins/CoreAdminHome/templates/optOut.twig
+++ b/plugins/CoreAdminHome/templates/optOut.twig
@@ -2,9 +2,13 @@
<html>
<head>
<meta charset="utf-8">
+ {% if title %}
+ <title>{{ title }}</title>
+ {% endif %}
{% if reloadUrl %}
<meta http-equiv="refresh" content="0; url={{ reloadUrl }}&amp;nonce={{ nonce }}" />
{% endif %}
+
<script>
function submitForm(event, form, loadInNewWindow) {
event.preventDefault();
@@ -21,6 +25,19 @@
}
}
</script>
+
+ {% if stylesheets.external|length > 0 %}
+ {% for style in stylesheets.external %}
+ <link href="{{ style|raw }}" rel="stylesheet" type="text/css">
+ {% endfor %}
+ {% endif %}
+ {% if stylesheets.inline|length > 0 %}
+ <style>
+ {% for style in stylesheets.inline %}
+ {{ style|raw }}
+ {% endfor %}
+ </style>
+ {% endif %}
</head>
<body>
{% if dntFound %}
@@ -69,5 +86,18 @@
</form>
{% endif %}
{% endif %}
+
+{% if javascripts.external|length > 0 %}
+ {% for script in javascripts.external %}
+ <script type="text/javascript" src="{{ script|raw }}"></script>
+ {% endfor %}
+{% endif %}
+{% if javascripts.inline|length > 0 %}
+ <script>
+ {% for script in javascripts.inline %}
+ {{ script|raw }}
+ {% endfor %}
+ </script>
+{% endif %}
</body>
</html>