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:
authorThomas Steur <tsteur@users.noreply.github.com>2016-10-04 01:46:56 +0300
committerGitHub <noreply@github.com>2016-10-04 01:46:56 +0300
commit644db32bcfce59b90bfa566d05e9702512bea398 (patch)
tree6f76a5a1f9a743aba87d8943b6ec5063b03efe01
parent2cfd2e6883320040121f2c437d6aec3074dcb986 (diff)
parent4c38c16a4992ecd8b081ec8264157eeee1a6ecf5 (diff)
Merge pull request #10648 from piwik/3.0-m09
Merge 2.x => 3.x-dev
-rw-r--r--CHANGELOG.md4
-rw-r--r--composer.lock55
-rw-r--r--config/global.php15
-rw-r--r--core/ArchiveProcessor/PluginsArchiver.php38
-rw-r--r--core/Config.php16
-rw-r--r--core/Date.php13
-rw-r--r--core/Db/Adapter.php2
-rw-r--r--core/Plugin.php17
-rw-r--r--core/Plugin/Archiver.php13
-rw-r--r--core/Plugin/ControllerAdmin.php56
-rw-r--r--core/Tracker/TrackerCodeGenerator.php14
-rw-r--r--core/Tracker/VisitExcluded.php21
-rw-r--r--core/Updater.php7
-rw-r--r--core/Updates/2.16.3-b3.php40
-rw-r--r--core/Updates/2.16.3-rc2.php28
-rw-r--r--core/View.php26
-rw-r--r--js/piwik.js315
-rw-r--r--js/piwik.min.js97
-rw-r--r--lang/en.json3
-rw-r--r--lang/es.json1
-rw-r--r--lang/it.json2
-rw-r--r--piwik.js97
-rw-r--r--plugins/API/SegmentMetadata.php1
-rw-r--r--plugins/API/lang/es.json3
-rw-r--r--plugins/API/lang/tr.json14
-rw-r--r--plugins/Actions/Columns/EntryPageUrl.php26
-rw-r--r--plugins/Actions/Columns/IdPageview.php2
-rw-r--r--plugins/Actions/lang/es.json4
-rw-r--r--plugins/Annotations/lang/tr.json6
-rw-r--r--plugins/Contents/lang/es.json5
-rw-r--r--plugins/CoreAdminHome/lang/es.json1
-rw-r--r--plugins/CoreAdminHome/stylesheets/generalSettings.less3
-rw-r--r--plugins/CoreAdminHome/tests/Integration/SetConfigTest.php41
-rw-r--r--plugins/CoreConsole/Commands/GeneratePlugin.php4
-rw-r--r--plugins/CoreHome/Tracker/VisitRequestProcessor.php3
-rw-r--r--plugins/CoreHome/javascripts/broadcast.js10
-rw-r--r--plugins/CoreHome/javascripts/popover.js10
-rw-r--r--plugins/CorePluginsAdmin/MarketplaceApiClient.php10
-rw-r--r--plugins/CorePluginsAdmin/PluginInstaller.php9
-rw-r--r--plugins/CorePluginsAdmin/config/config.php7
-rw-r--r--plugins/CorePluginsAdmin/lang/es.json4
-rw-r--r--plugins/CoreUpdater/Commands/Update.php8
-rw-r--r--plugins/CoreUpdater/Controller.php2
-rw-r--r--plugins/CoreUpdater/Updater.php54
-rw-r--r--plugins/CoreUpdater/lang/en.json4
-rw-r--r--plugins/CoreUpdater/lang/tr.json23
-rw-r--r--plugins/CustomPiwikJs/API.php41
-rw-r--r--plugins/CustomPiwikJs/Commands/UpdateTracker.php2
-rw-r--r--plugins/CustomPiwikJs/File.php9
-rw-r--r--plugins/CustomPiwikJs/lang/cs.json7
-rw-r--r--plugins/CustomPiwikJs/lang/de.json5
-rw-r--r--plugins/CustomPiwikJs/lang/el.json7
-rw-r--r--plugins/CustomPiwikJs/lang/es.json7
-rw-r--r--plugins/CustomPiwikJs/lang/fr.json7
-rw-r--r--plugins/CustomPiwikJs/lang/nb.json7
-rw-r--r--plugins/CustomPiwikJs/tests/Integration/ApiTest.php84
-rw-r--r--plugins/CustomPiwikJs/tests/Integration/FileTest.php70
-rw-r--r--plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php8
-rw-r--r--plugins/CustomVariables/lang/es.json14
-rw-r--r--plugins/Dashboard/Dashboard.php29
-rw-r--r--plugins/DevicePlugins/lang/es.json1
-rw-r--r--plugins/DevicePlugins/lang/tr.json7
-rw-r--r--plugins/Diagnostics/lang/es.json8
-rw-r--r--plugins/ExamplePlugin/CHANGELOG.md3
-rw-r--r--plugins/ExamplePlugin/README.md9
-rw-r--r--plugins/ExamplePlugin/docs/faq.md5
-rw-r--r--plugins/ExamplePlugin/docs/index.md1
-rw-r--r--plugins/ExampleTheme/CHANGELOG.md3
-rw-r--r--plugins/ExampleTheme/README.md9
-rw-r--r--plugins/ExampleTheme/docs/faq.md5
-rw-r--r--plugins/ExampleTheme/docs/index.md1
-rw-r--r--plugins/Feedback/lang/cs.json4
-rw-r--r--plugins/Feedback/lang/es.json1
-rw-r--r--plugins/Feedback/lang/nb.json3
-rw-r--r--plugins/Goals/lang/es.json1
-rw-r--r--plugins/Installation/lang/cs.json3
-rw-r--r--plugins/Installation/lang/de.json2
-rw-r--r--plugins/LanguagesManager/Commands/CreatePull.php18
-rw-r--r--plugins/Live/javascripts/rowaction.js7
-rw-r--r--plugins/Live/javascripts/visitorProfile.js5
-rw-r--r--plugins/Live/lang/es.json3
-rw-r--r--plugins/Login/lang/es.json2
-rw-r--r--plugins/Login/lang/tr.json22
-rw-r--r--plugins/Morpheus/javascripts/ajaxHelper.js42
-rw-r--r--plugins/Morpheus/templates/javascriptCode.twig (renamed from plugins/Morpheus/templates/javascriptCode.tpl)7
-rw-r--r--plugins/ScheduledReports/Controller.php6
-rw-r--r--plugins/ScheduledReports/ScheduledReports.php1
-rw-r--r--plugins/ScheduledReports/Tasks.php4
-rw-r--r--plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js27
-rw-r--r--plugins/ScheduledReports/lang/cs.json1
-rw-r--r--plugins/ScheduledReports/lang/el.json1
-rw-r--r--plugins/ScheduledReports/lang/en.json1
-rw-r--r--plugins/ScheduledReports/lang/es.json1
-rw-r--r--plugins/ScheduledReports/templates/_addReport.twig11
-rw-r--r--plugins/ScheduledReports/templates/index.twig1
-rw-r--r--plugins/ScheduledReports/tests/Integration/ApiTest.php17
-rw-r--r--plugins/SitesManager/lang/es.json6
-rw-r--r--plugins/Transitions/lang/tr.json38
-rw-r--r--plugins/UserId/lang/es.json4
-rw-r--r--plugins/UsersManager/lang/es.json5
-rw-r--r--plugins/VisitFrequency/lang/tr.json26
-rw-r--r--tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php9
-rw-r--r--tests/PHPUnit/Framework/Mock/Tracker/RequestAuthenticated.php10
-rw-r--r--tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php35
-rw-r--r--tests/PHPUnit/Integration/Tracker/VisitTest.php24
-rw-r--r--tests/PHPUnit/Integration/UpdaterTest.php15
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_day.xml23
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_month.xml23
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_day.xml6
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_month.xml6
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml110
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml110
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv2
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_row_evolution_graph__ScheduledReports.generateReport_week.original.html7
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html308
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html2
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml12
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml12
-rw-r--r--tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageTitleExcludes__Actions.getPageUrls_day.xml12
-rw-r--r--tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlExcludes__Actions.getPageUrls_day.xml12
-rw-r--r--tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlStartsWith__Actions.getPageUrls_day.xml12
-rw-r--r--tests/PHPUnit/Unit/DateTest.php23
-rw-r--r--tests/PHPUnit/Unit/DeprecatedMethodsTest.php84
-rw-r--r--tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png4
-rw-r--r--tests/UI/expected-screenshots/DashboardManager_create_new.png4
-rw-r--r--tests/UI/expected-screenshots/Dashboard_reset.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_not_segmented.png3
-rw-r--r--tests/UI/specs/UIIntegration_spec.js25
-rw-r--r--tests/angularjs/Gruntfile.js2
-rw-r--r--tests/javascript/index.php115
-rw-r--r--tests/resources/Updater/testpluginUpdates/0.5.php12
-rw-r--r--tests/resources/extractSearchEngineInformationFromUrlTests.yml72
135 files changed, 1910 insertions, 953 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f5aa2e505f..53bbd03c19 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,10 @@ The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** l
### New APIs
* The Piwik JavaScript tracker has a new method `trackRequest` that allows you to send any tracking parameters to Piwik. For example `_paq.push(['trackRequest', 'te=foo&bar=baz'])`
+### Internal Changes
+* Expected screenshots for UI tests are now stored using Git LFS instead of a submodule. Running, creating or updating UI tests will require Git LFS to be installed.
+The folder containing expected screenshots was renamed from `expected-ui-screenshots` to `expected-screenshots`. The UI-Test-Runner is now able to handle both names.
+
## Piwik 2.16.2
### New APIs
diff --git a/composer.lock b/composer.lock
index 6025211961..d1164b4d32 100644
--- a/composer.lock
+++ b/composer.lock
@@ -863,16 +863,16 @@
},
{
"name": "piwik/referrer-spam-blacklist",
- "version": "1.0.9",
+ "version": "1.0.10",
"source": {
"type": "git",
"url": "https://github.com/piwik/referrer-spam-blacklist.git",
- "reference": "7cce0bed292d148822ebad0eb9a286b04d27f340"
+ "reference": "58ecaaf7aced82ddbcc9339e1fc9e7fe9e996eb8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/piwik/referrer-spam-blacklist/zipball/7cce0bed292d148822ebad0eb9a286b04d27f340",
- "reference": "7cce0bed292d148822ebad0eb9a286b04d27f340",
+ "url": "https://api.github.com/repos/piwik/referrer-spam-blacklist/zipball/58ecaaf7aced82ddbcc9339e1fc9e7fe9e996eb8",
+ "reference": "58ecaaf7aced82ddbcc9339e1fc9e7fe9e996eb8",
"shasum": ""
},
"type": "library",
@@ -881,20 +881,20 @@
"Public Domain"
],
"description": "Community-contributed list of referrer spammers",
- "time": "2016-07-20 19:55:33"
+ "time": "2016-09-28 16:10:53"
},
{
"name": "piwik/searchengine-and-social-list",
- "version": "1.3.3",
+ "version": "1.3.4",
"source": {
"type": "git",
"url": "https://github.com/piwik/searchengine-and-social-list.git",
- "reference": "07046e6c6472f3cf7751f45f7b1f1657dcf920e7"
+ "reference": "ef1547e4e3e64d5eb174e75a3bfa3906f33e3108"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/piwik/searchengine-and-social-list/zipball/07046e6c6472f3cf7751f45f7b1f1657dcf920e7",
- "reference": "07046e6c6472f3cf7751f45f7b1f1657dcf920e7",
+ "url": "https://api.github.com/repos/piwik/searchengine-and-social-list/zipball/ef1547e4e3e64d5eb174e75a3bfa3906f33e3108",
+ "reference": "ef1547e4e3e64d5eb174e75a3bfa3906f33e3108",
"shasum": ""
},
"type": "library",
@@ -903,26 +903,34 @@
"Public Domain"
],
"description": "Search engine and social network definitions used by Piwik",
- "time": "2016-09-18 14:28:00"
+ "time": "2016-09-22 08:52:36"
},
{
"name": "psr/log",
- "version": "1.0.0",
+ "version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
+ "reference": "5277094ed527a1c4477177d102fe4c53551953e0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
- "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/5277094ed527a1c4477177d102fe4c53551953e0",
+ "reference": "5277094ed527a1c4477177d102fe4c53551953e0",
"shasum": ""
},
+ "require": {
+ "php": ">=5.3.0"
+ },
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
"autoload": {
- "psr-0": {
- "Psr\\Log\\": ""
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -936,12 +944,13 @@
}
],
"description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
"keywords": [
"log",
"psr",
"psr-3"
],
- "time": "2012-12-21 11:40:51"
+ "time": "2016-09-19 16:02:08"
},
{
"name": "symfony/console",
@@ -1225,16 +1234,16 @@
},
{
"name": "twig/twig",
- "version": "v1.24.2",
+ "version": "v1.25.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
- "reference": "33093f6e310e6976baeac7b14f3a6ec02f2d79b7"
+ "reference": "f16a634ab08d87e520da5671ec52153d627f10f6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/33093f6e310e6976baeac7b14f3a6ec02f2d79b7",
- "reference": "33093f6e310e6976baeac7b14f3a6ec02f2d79b7",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/f16a634ab08d87e520da5671ec52153d627f10f6",
+ "reference": "f16a634ab08d87e520da5671ec52153d627f10f6",
"shasum": ""
},
"require": {
@@ -1247,7 +1256,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.24-dev"
+ "dev-master": "1.25-dev"
}
},
"autoload": {
@@ -1282,7 +1291,7 @@
"keywords": [
"templating"
],
- "time": "2016-09-01 17:50:53"
+ "time": "2016-09-21 23:05:12"
}
],
"packages-dev": [
diff --git a/config/global.php b/config/global.php
index 36e04970aa..cd10f72370 100644
--- a/config/global.php
+++ b/config/global.php
@@ -45,10 +45,17 @@ return array(
return $cache;
},
'Piwik\Cache\Backend' => function (ContainerInterface $c) {
- try {
- $backend = $c->get('ini.Cache.backend');
- } catch (NotFoundException $ex) {
- $backend = 'chained'; // happens if global.ini.php is not available
+ // If Piwik is not installed yet, it's possible the tmp/ folder is not writable
+ // we prevent failing with an unclear message eg. coming from doctrine-cache
+ // by forcing to use a cache backend which always works ie. array
+ if(!\Piwik\SettingsPiwik::isPiwikInstalled()) {
+ $backend = 'array';
+ } else {
+ try {
+ $backend = $c->get('ini.Cache.backend');
+ } catch (NotFoundException $ex) {
+ $backend = 'chained'; // happens if global.ini.php is not available
+ }
}
return \Piwik\Cache::buildBackend($backend);
diff --git a/core/ArchiveProcessor/PluginsArchiver.php b/core/ArchiveProcessor/PluginsArchiver.php
index 28c90cb15c..325b529aa3 100644
--- a/core/ArchiveProcessor/PluginsArchiver.php
+++ b/core/ArchiveProcessor/PluginsArchiver.php
@@ -10,10 +10,12 @@
namespace Piwik\ArchiveProcessor;
use Piwik\ArchiveProcessor;
+use Piwik\Common;
use Piwik\DataAccess\ArchiveWriter;
use Piwik\DataAccess\LogAggregator;
use Piwik\DataTable\Manager;
use Piwik\Metrics;
+use Piwik\Piwik;
use Piwik\Plugin\Archiver;
use Piwik\Log;
use Piwik\Timer;
@@ -50,8 +52,8 @@ class PluginsArchiver
public function __construct(Parameters $params, $isTemporaryArchive)
{
$this->params = $params;
-
- $this->archiveWriter = new ArchiveWriter($this->params, $isTemporaryArchive);
+ $this->isTemporaryArchive = $isTemporaryArchive;
+ $this->archiveWriter = new ArchiveWriter($this->params, $this->isTemporaryArchive);
$this->archiveWriter->initNewArchive();
$this->logAggregator = new LogAggregator($params);
@@ -106,7 +108,7 @@ class PluginsArchiver
$latestUsedTableId = Manager::getInstance()->getMostRecentTableId();
/** @var Archiver $archiver */
- $archiver = new $archiverClass($this->archiveProcessor);
+ $archiver = $this->makeNewArchiverObject($archiverClass, $pluginName);
if (!$archiver->isEnabled()) {
Log::debug("PluginsArchiver::%s: Skipping archiving for plugin '%s'.", __FUNCTION__, $pluginName);
@@ -198,9 +200,9 @@ class PluginsArchiver
return true;
}
if (Rules::shouldProcessReportsAllPlugins(
- $this->params->getIdSites(),
- $this->params->getSegment(),
- $this->params->getPeriod()->getLabel())) {
+ $this->params->getIdSites(),
+ $this->params->getSegment(),
+ $this->params->getPeriod()->getLabel())) {
return true;
}
@@ -236,4 +238,28 @@ class PluginsArchiver
$metrics = $this->archiveProcessor->aggregateNumericMetrics($toSum);
return $metrics;
}
+
+
+ /**
+ * @param $archiverClass
+ * @return Archiver
+ */
+ private function makeNewArchiverObject($archiverClass, $pluginName)
+ {
+ $archiver = new $archiverClass($this->archiveProcessor);
+
+ /**
+ * Triggered right after a new **plugin archiver instance** is created.
+ * Subscribers to this event can configure the plugin archiver, for example prevent the archiving of a plugin's data
+ * by calling `$archiver->disable()` method.
+ *
+ * @param \Piwik\Plugin\Archiver &$archiver The newly created plugin archiver instance.
+ * @param string $pluginName The name of plugin of which archiver instance was created.
+ * @param array $this->params Array containing archive parameters (Site, Period, Date and Segment)
+ * @param bool $this->isTemporaryArchive Flag indicating whether the archive being processed is temporary (ie. the period isn't finished yet) or final (the period is already finished and in the past).
+ */
+ Piwik::postEvent('Archiving.makeNewArchiverObject', array($archiver, $pluginName, $this->params, $this->isTemporaryArchive));
+
+ return $archiver;
+ }
}
diff --git a/core/Config.php b/core/Config.php
index 01fa144a5c..f9a95feed0 100644
--- a/core/Config.php
+++ b/core/Config.php
@@ -12,6 +12,7 @@ namespace Piwik;
use Exception;
use Piwik\Application\Kernel\GlobalSettingsProvider;
use Piwik\Container\StaticContainer;
+use Piwik\Exception\MissingFilePermissionException;
use Piwik\ProfessionalServices\Advertising;
/**
@@ -375,15 +376,18 @@ class Config
*/
protected function writeConfig($clear = true)
{
- if ($this->doNotWriteConfigInTests) {
- return;
- }
-
$output = $this->dumpConfig();
if ($output !== null
&& $output !== false
) {
- $success = @file_put_contents($this->getLocalPath(), $output);
+
+ if ($this->doNotWriteConfigInTests) {
+ // simulate whether it would be successful
+ $success = is_writable($this->getLocalPath());
+ } else {
+ $success = @file_put_contents($this->getLocalPath(), $output);
+ }
+
if ($success === false) {
throw $this->getConfigNotWritableException();
}
@@ -411,6 +415,6 @@ class Config
public function getConfigNotWritableException()
{
$path = "config/" . basename($this->getLocalPath());
- return new Exception(Piwik::translate('General_ConfigFileIsNotWritable', array("(" . $path . ")", "")));
+ return new MissingFilePermissionException(Piwik::translate('General_ConfigFileIsNotWritable', array("(" . $path . ")", "")));
}
}
diff --git a/core/Date.php b/core/Date.php
index ad492eb6ea..8922ed8ac2 100644
--- a/core/Date.php
+++ b/core/Date.php
@@ -220,6 +220,19 @@ class Date
}
/**
+ * Returns the offset to UTC time for the given timezone
+ *
+ * @param $timezone
+ * @return int offest in minutes
+ */
+ public static function getUtcOffset($timezone)
+ {
+ $timestampUTC = self::today()->getTimestampUTC();
+ $timestampZone = self::adjustForTimezone($timestampUTC, $timezone);
+ return ($timestampZone - $timestampUTC);
+ }
+
+ /**
* Helper function that returns the offset in the timezone string 'UTC+14'
* Returns false if the timezone is not UTC+X or UTC-X
*
diff --git a/core/Db/Adapter.php b/core/Db/Adapter.php
index 5363d15383..a3ceebe6cf 100644
--- a/core/Db/Adapter.php
+++ b/core/Db/Adapter.php
@@ -125,7 +125,7 @@ class Adapter
* @param string $adapterName
* @return bool
*/
- public function isRecommendedAdapter($adapterName)
+ public static function isRecommendedAdapter($adapterName)
{
return strtolower($adapterName) === 'pdo/mysql';
}
diff --git a/core/Plugin.php b/core/Plugin.php
index 6480157301..82ef4f2fec 100644
--- a/core/Plugin.php
+++ b/core/Plugin.php
@@ -137,17 +137,22 @@ class Plugin
if ($cache->contains($cacheId)) {
$this->pluginInformation = $cache->fetch($cacheId);
} else {
- $metadataLoader = new MetadataLoader($pluginName);
- $this->pluginInformation = $metadataLoader->load();
-
- if ($this->hasDefinedPluginInformationInPluginClass() && $metadataLoader->hasPluginJson()) {
- throw new \Exception('Plugin ' . $pluginName . ' has defined the method getInformation() and as well as having a plugin.json file. Please delete the getInformation() method from the plugin class. Alternatively, you may delete the plugin directory from plugins/' . $pluginName);
- }
+ $this->reloadPluginInformation();
$cache->save($cacheId, $this->pluginInformation);
}
}
+ public function reloadPluginInformation()
+ {
+ $metadataLoader = new MetadataLoader($this->pluginName);
+ $this->pluginInformation = $metadataLoader->load();
+
+ if ($this->hasDefinedPluginInformationInPluginClass() && $metadataLoader->hasPluginJson()) {
+ throw new \Exception('Plugin ' . $this->pluginName . ' has defined the method getInformation() and as well as having a plugin.json file. Please delete the getInformation() method from the plugin class. Alternatively, you may delete the plugin directory from plugins/' . $this->pluginName);
+ }
+ }
+
private function createCacheIfNeeded()
{
if (is_null($this->cache)) {
diff --git a/core/Plugin/Archiver.php b/core/Plugin/Archiver.php
index 7cc9fe26f5..90e325bc8e 100644
--- a/core/Plugin/Archiver.php
+++ b/core/Plugin/Archiver.php
@@ -60,6 +60,11 @@ abstract class Archiver
private $processor;
/**
+ * @var bool
+ */
+ private $enabled;
+
+ /**
* Constructor.
*
* @param ArchiveProcessor $processor The ArchiveProcessor instance to use when persisting archive
@@ -69,6 +74,7 @@ abstract class Archiver
{
$this->maximumRows = PiwikConfig::getInstance()->General['datatable_archiving_maximum_rows_standard'];
$this->processor = $processor;
+ $this->enabled = true;
}
/**
@@ -121,6 +127,11 @@ abstract class Archiver
return $this->getProcessor()->getLogAggregator();
}
+ public function disable()
+ {
+ $this->enabled = false;
+ }
+
/**
* Whether this Archiver should be used or not.
*
@@ -128,6 +139,6 @@ abstract class Archiver
*/
public function isEnabled()
{
- return true;
+ return $this->enabled;
}
}
diff --git a/core/Plugin/ControllerAdmin.php b/core/Plugin/ControllerAdmin.php
index 89fc082199..092a963b8a 100644
--- a/core/Plugin/ControllerAdmin.php
+++ b/core/Plugin/ControllerAdmin.php
@@ -155,6 +155,43 @@ abstract class ControllerAdmin extends Controller
Notification\Manager::notify('ControllerAdmin_EacceleratorIsUsed', $notification);
}
+ /**
+ * PHP Version required by the next major Piwik version
+ * @return string
+ */
+ private static function getNextRequiredMinimumPHP()
+ {
+ return '5.5.9';
+ }
+
+ private static function isUsingPhpVersionCompatibleWithNextPiwik()
+ {
+ return version_compare( PHP_VERSION, self::getNextRequiredMinimumPHP(), '>=' );
+ }
+
+ private static function notifyWhenPhpVersionIsNotCompatibleWithNextMajorPiwik()
+ {
+ return; // no major version coming
+
+ if (self::isUsingPhpVersionCompatibleWithNextPiwik()) {
+ return;
+ }
+
+ $youMustUpgradePHP = Piwik::translate('General_YouMustUpgradePhpVersionToReceiveLatestPiwik');
+ $message = Piwik::translate('General_PiwikCannotBeUpgradedBecausePhpIsTooOld')
+ . ' '
+ . sprintf(Piwik::translate('General_PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure'), self::getNextRequiredMinimumPHP())
+ ;
+
+ $notification = new Notification($message);
+ $notification->title = $youMustUpgradePHP;
+ $notification->priority = Notification::PRIORITY_LOW;
+ $notification->context = Notification::CONTEXT_WARNING;
+ $notification->type = Notification::TYPE_TRANSIENT;
+ $notification->flags = Notification::FLAG_NO_CLEAR;
+ NotificationManager::notify('PHPVersionTooOldForNewestPiwikCheck', $notification);
+ }
+
private static function notifyWhenPhpVersionIsEOL()
{
return; // no supported version (5.5+) has currently ended support
@@ -163,7 +200,10 @@ abstract class ControllerAdmin extends Controller
return;
}
- $message = Piwik::translate('General_WarningPhpVersionXIsTooOld', '5.5');
+ $message = Piwik::translate('General_WarningPiwikWillStopSupportingPHPVersion', array($deprecatedMajorPhpVersion, self::getNextRequiredMinimumPHP()))
+ . "\n "
+ . Piwik::translate('General_WarningPhpVersionXIsTooOld', $deprecatedMajorPhpVersion);
+
$notification = new Notification($message);
$notification->title = Piwik::translate('General_Warning');
$notification->priority = Notification::PRIORITY_LOW;
@@ -233,10 +273,8 @@ abstract class ControllerAdmin extends Controller
$view->isSuperUser = Piwik::hasUserSuperUserAccess();
self::notifyAnyInvalidPlugin();
-
- self::checkPhpVersion($view);
-
self::notifyWhenPhpVersionIsEOL();
+ self::notifyWhenPhpVersionIsNotCompatibleWithNextMajorPiwik();
self::notifyWhenDebugOnDemandIsEnabled('debug');
self::notifyWhenDebugOnDemandIsEnabled('debug_on_demand');
@@ -260,16 +298,6 @@ abstract class ControllerAdmin extends Controller
return "Piwik " . Version::VERSION;
}
- /**
- * Check if the current PHP version is >= 5.3. If not, a warning is displayed
- * to the user.
- */
- private static function checkPhpVersion($view)
- {
- $view->phpVersion = PHP_VERSION;
- $view->phpIsNewEnough = self::isPhpVersionAtLeast55();
- }
-
private static function isPhpVersionAtLeast55()
{
return version_compare(PHP_VERSION, '5.5', '>=');
diff --git a/core/Tracker/TrackerCodeGenerator.php b/core/Tracker/TrackerCodeGenerator.php
index c985db88e7..ffeea91b6a 100644
--- a/core/Tracker/TrackerCodeGenerator.php
+++ b/core/Tracker/TrackerCodeGenerator.php
@@ -12,6 +12,7 @@ use Piwik\Common;
use Piwik\Piwik;
use Piwik\Plugins\CustomVariables\CustomVariables;
use Piwik\Plugins\SitesManager\API as APISitesManager;
+use Piwik\View;
/**
* Generates the Javascript code to be inserted on every page of the website to track.
@@ -46,8 +47,7 @@ class TrackerCodeGenerator
$disableCookies = false
) {
// changes made to this code should be mirrored in plugins/CoreAdminHome/javascripts/jsTrackingGenerator.js var generateJsCode
- $jsCode = file_get_contents(PIWIK_INCLUDE_PATH . "/plugins/Morpheus/templates/javascriptCode.tpl");
- $jsCode = htmlentities($jsCode);
+
if (substr($piwikUrl, 0, 4) !== 'http') {
$piwikUrl = 'http://' . $piwikUrl;
}
@@ -119,7 +119,8 @@ class TrackerCodeGenerator
'piwikUrl' => Common::sanitizeInputValue($piwikUrl),
'options' => $options,
'optionsBeforeTrackerUrl' => $optionsBeforeTrackerUrl,
- 'protocol' => '//'
+ 'protocol' => '//',
+ 'loadAsync' => true
);
$parameters = compact('mergeSubdomains', 'groupPageTitlesByDomain', 'mergeAliasUrls', 'visitorCustomVariables',
'pageCustomVariables', 'customCampaignNameQueryParam', 'customCampaignKeywordParam',
@@ -141,6 +142,7 @@ class TrackerCodeGenerator
* the JavaScript tracker inside of anonymous function before
* adding setTrackerUrl into paq.
* - **protocol**: Piwik url protocol.
+ * - **loadAsync**: boolean whether piwik.js should be loaded syncronous or asynchronous
*
* The **httpsPiwikUrl** element can be set if the HTTPS
* domain is different from the normal domain.
@@ -156,6 +158,12 @@ class TrackerCodeGenerator
}
$codeImpl = array('setTrackerUrl' => htmlentities($setTrackerUrl)) + $codeImpl;
+ $view = new View('@Morpheus/javascriptCode');
+ $view->disableCacheBuster();
+ $view->loadAsync = $codeImpl['loadAsync'];
+ $jsCode = $view->render();
+ $jsCode = htmlentities($jsCode);
+
foreach ($codeImpl as $keyToReplace => $replaceWith) {
$jsCode = str_replace('{$' . $keyToReplace . '}', $replaceWith, $jsCode);
}
diff --git a/core/Tracker/VisitExcluded.php b/core/Tracker/VisitExcluded.php
index a644d4479f..303d45c23b 100644
--- a/core/Tracker/VisitExcluded.php
+++ b/core/Tracker/VisitExcluded.php
@@ -28,25 +28,16 @@ class VisitExcluded
/**
* @param Request $request
- * @param bool|string $ip
- * @param bool|string $userAgent
*/
- public function __construct(Request $request, $ip = false, $userAgent = false)
+ public function __construct(Request $request)
{
$this->spamFilter = new ReferrerSpamFilter();
- if (false === $ip) {
- $ip = $request->getIp();
- }
-
- if (false === $userAgent) {
- $userAgent = $request->getUserAgent();
- }
-
$this->request = $request;
$this->idSite = $request->getIdSite();
- $this->userAgent = $userAgent;
- $this->ip = $ip;
+ $userAgent = $request->getUserAgent();
+ $this->userAgent = Common::unsanitizeInputValue($userAgent);
+ $this->ip = $request->getIp();
}
/**
@@ -89,8 +80,10 @@ class VisitExcluded
* @param bool &$excluded Whether the request should be excluded or not. Initialized
* to `false`. Event subscribers should set it to `true` in
* order to exclude the request.
+ * @param Request $request The request object which contains all of the request's information
+ *
*/
- Piwik::postEvent('Tracker.isExcludedVisit', array(&$excluded));
+ Piwik::postEvent('Tracker.isExcludedVisit', array(&$excluded, $this->request));
/*
* Following exclude operations happen after the hook.
diff --git a/core/Updater.php b/core/Updater.php
index 581d6609a5..d53280f4da 100644
--- a/core/Updater.php
+++ b/core/Updater.php
@@ -12,6 +12,7 @@ use Piwik\Columns\Updater as ColumnUpdater;
use Piwik\Container\StaticContainer;
use Piwik\Updater\Migration;
use Piwik\Updater\Migration\Db\Sql;
+use Piwik\Exception\MissingFilePermissionException;
use Piwik\Updater\UpdateObserver;
use Zend_Db_Exception;
@@ -264,8 +265,8 @@ class Updater
$this->markComponentSuccessfullyUpdated($componentName, $fileVersion);
} catch (UpdaterErrorException $e) {
$this->executeListenerHook('onError', array($componentName, $fileVersion, $e));
-
throw $e;
+
} catch (\Exception $e) {
$warningMessages[] = $e->getMessage();
@@ -583,7 +584,9 @@ class Updater
// make sure to check for them here
if ($e instanceof Zend_Db_Exception) {
throw new UpdaterErrorException($e->getMessage(), $e->getCode(), $e);
- } else {
+ } else if ($e instanceof MissingFilePermissionException) {
+ throw new UpdaterErrorException($e->getMessage(), $e->getCode(), $e);
+ }{
throw $e;
}
}
diff --git a/core/Updates/2.16.3-b3.php b/core/Updates/2.16.3-b3.php
new file mode 100644
index 0000000000..e5f2075c71
--- /dev/null
+++ b/core/Updates/2.16.3-b3.php
@@ -0,0 +1,40 @@
+<?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\Updates;
+
+use Piwik\Date;
+use Piwik\Plugins\ScheduledReports\API as ScheduledReportsAPI;
+use Piwik\Plugins\ScheduledReports\Model as ScheduledReportsModel;
+use Piwik\Site;
+use Piwik\Updater;
+use Piwik\Updates as PiwikUpdates;
+
+/**
+ * Update for version 2.16.3-b3.
+ *
+ * Update existing scheduled reports to use UTC timezone for hour setting
+ */
+class Updates_2_16_3_b3 extends PiwikUpdates
+{
+ public function doUpdate(Updater $updater)
+ {
+ $model = new ScheduledReportsModel();
+ $allReports = ScheduledReportsAPI::getInstance()->getReports();
+ foreach ($allReports as $report) {
+ $report['hour'] = $this->adjustTimezoneBySite($report['hour'], $report['idsite']);
+ $model->updateReport($report['idreport'], $report);
+ }
+ }
+
+ protected function adjustTimezoneBySite($hour, $idSite)
+ {
+ $timeZoneDifference = -ceil(Date::getUtcOffset($timezone)/3600);
+ return (24 + $hour + $timeZoneDifference) % 24;
+ }
+}
diff --git a/core/Updates/2.16.3-rc2.php b/core/Updates/2.16.3-rc2.php
new file mode 100644
index 0000000000..d2a394194e
--- /dev/null
+++ b/core/Updates/2.16.3-rc2.php
@@ -0,0 +1,28 @@
+<?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\Updates;
+
+use Piwik\Plugins\ScheduledReports\API as ScheduledReportsAPI;
+use Piwik\Plugins\ScheduledReports\Model as ScheduledReportsModel;
+use Piwik\Site;
+use Piwik\Updater;
+use Piwik\Updates as PiwikUpdates;
+
+/**
+ * Mark the upgrade as major as the field visit_entry_idaction_url was updated in https://github.com/piwik/piwik/pull/10510
+ */
+class Updates_2_16_3_rc2 extends PiwikUpdates
+{
+
+ public static function isMajorUpdate()
+ {
+ return true;
+ }
+
+}
diff --git a/core/View.php b/core/View.php
index 0a2cbabb67..0c9b379a67 100644
--- a/core/View.php
+++ b/core/View.php
@@ -116,6 +116,7 @@ class View implements ViewInterface
protected $templateVars = array();
private $contentType = 'text/html; charset=utf-8';
private $xFrameOptions = null;
+ private $enableCacheBuster = true;
/**
* Constructor.
@@ -146,6 +147,14 @@ class View implements ViewInterface
}
/**
+ * Disables the cache buster (adding of ?cb=...) to JavaScript and stylesheet files
+ */
+ public function disableCacheBuster()
+ {
+ $this->enableCacheBuster = false;
+ }
+
+ /**
* Returns the template filename.
*
* @return string
@@ -237,9 +246,8 @@ class View implements ViewInterface
} else {
$cacheBuster = UIAssetCacheBuster::getInstance()->piwikVersionBasedCacheBuster();
}
-
$this->cacheBuster = $cacheBuster;
-
+
$this->loginModule = Piwik::getLoginPluginName();
$user = APIUsersManager::getInstance()->getUser($this->userLogin);
@@ -260,6 +268,16 @@ class View implements ViewInterface
return $this->renderTwigTemplate();
}
+ /**
+ * @internal
+ * @ignore
+ * @return Twig_Environment
+ */
+ public function getTwig()
+ {
+ return $this->twig;
+ }
+
protected function renderTwigTemplate()
{
try {
@@ -272,7 +290,9 @@ class View implements ViewInterface
throw $ex;
}
- $output = $this->applyFilter_cacheBuster($output);
+ if ($this->enableCacheBuster) {
+ $output = $this->applyFilter_cacheBuster($output);
+ }
$helper = new Theme;
$output = $helper->rewriteAssetsPathToTheme($output);
diff --git a/js/piwik.js b/js/piwik.js
index 6e07cbdd2b..59f0defc99 100644
--- a/js/piwik.js
+++ b/js/piwik.js
@@ -1030,7 +1030,8 @@ if (typeof JSON2 !== 'object' && typeof window.JSON === 'object' && window.JSON.
/*global _paq:true */
/*members push */
/*global Piwik:true */
-/*members addPlugin, getTracker, getAsyncTracker, getAsyncTrackers, addTracker, trigger, on, off */
+/*members addPlugin, getTracker, getAsyncTracker, getAsyncTrackers, addTracker, trigger, on, off, retryMissedPluginCalls,
+ DOM, onLoad, onReady*/
/*global Piwik_Overlay_Client */
/*global AnalyticsTracker:true */
/*members initialize */
@@ -1086,7 +1087,9 @@ if (typeof window.Piwik !== 'object') {
iterator,
/* local Piwik */
- Piwik;
+ Piwik,
+
+ missedPluginTrackerCalls = [];
/************************************************************
* Private methods
@@ -1178,62 +1181,81 @@ if (typeof window.Piwik !== 'object') {
* [ functionObject, optional_parameters ]
*/
function apply() {
- var i, j, f, parameterArray;
+ var i, j, f, parameterArray, trackerCall;
for (i = 0; i < arguments.length; i += 1) {
+ trackerCall = null;
+ if (arguments[i] && arguments[i].slice) {
+ trackerCall = arguments[i].slice();
+ }
parameterArray = arguments[i];
f = parameterArray.shift();
- for (j = 0; j < asyncTrackers.length; j++) {
- if (isString(f)) {
- var context = asyncTrackers[j];
- var fParts;
-
- var isStaticPluginCall = f.indexOf('::') > 0;
- if (isStaticPluginCall) {
- fParts = f.split('::');
- context = fParts[0];
- f = fParts[1];
+ var fParts, context;
+
+ var isStaticPluginCall = isString(f) && f.indexOf('::') > 0;
+ if (isStaticPluginCall) {
+ // a static method will not be called on a tracker and is not dependent on the existance of a
+ // tracker etc
+ fParts = f.split('::');
+ context = fParts[0];
+ f = fParts[1];
+
+ if ('object' === typeof Piwik[context] && 'function' === typeof Piwik[context][f]) {
+ Piwik[context][f].apply(Piwik[context], parameterArray);
+ } else if (trackerCall) {
+ // we try to call that method again later as the plugin might not be loaded yet
+ // a plugin can call "Piwik.retryMissedPluginCalls();" once it has been loaded and then the
+ // method call to "Piwik[context][f]" may be executed
+ missedPluginTrackerCalls.push(trackerCall);
+ }
- if ('object' === typeof Piwik[context] && 'function' === typeof Piwik[context][f]) {
- Piwik[context][f].apply(Piwik[context], parameterArray);
+ } else {
+ for (j = 0; j < asyncTrackers.length; j++) {
+ if (isString(f)) {
+ context = asyncTrackers[j];
+
+ var isPluginTrackerCall = f.indexOf('.') > 0;
+
+ if (isPluginTrackerCall) {
+ fParts = f.split('.');
+ if (context && 'object' === typeof context[fParts[0]]) {
+ context = context[fParts[0]];
+ f = fParts[1];
+ } else if (trackerCall) {
+ // we try to call that method again later as the plugin might not be loaded yet
+ missedPluginTrackerCalls.push(trackerCall);
+ break;
+ }
}
- return;
- }
-
- var isPluginTrackerCall = f.indexOf('.') > 0;
-
- if (isPluginTrackerCall) {
- fParts = f.split('.');
- context = context[fParts[0]];
- f = fParts[1];
- }
+ if (context[f]) {
+ context[f].apply(context, parameterArray);
+ } else {
+ var message = 'The method \'' + f + '\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript';
+ logConsoleError(message);
- if (context[f]) {
- context[f].apply(context, parameterArray);
- } else {
- var message = 'The method \'' + f + '\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript';
- logConsoleError(message);
- if (!isPluginTrackerCall) {
- throw new TypeError(message);
+ if (!isPluginTrackerCall) {
+ // do not trigger an error if it is a call to a plugin as the plugin may just not be
+ // loaded yet etc
+ throw new TypeError(message);
+ }
}
- }
- if (f === 'addTracker') {
- // addTracker adds an entry to asyncTrackers and would otherwise result in an endless loop
- break;
- }
+ if (f === 'addTracker') {
+ // addTracker adds an entry to asyncTrackers and would otherwise result in an endless loop
+ break;
+ }
- if (f === 'setTrackerUrl' || f === 'setSiteId') {
- // these two methods should be only executed on the first tracker
- break;
+ if (f === 'setTrackerUrl' || f === 'setSiteId') {
+ // these two methods should be only executed on the first tracker
+ break;
+ }
+ } else {
+ f.apply(asyncTrackers[j], parameterArray);
}
- } else {
- f.apply(asyncTrackers[j], parameterArray);
}
}
-
}
}
@@ -1254,6 +1276,79 @@ if (typeof window.Piwik !== 'object') {
element['on' + eventType] = eventHandler;
}
+ function trackCallbackOnLoad(callback)
+ {
+ if (documentAlias.readyState === 'complete') {
+ callback();
+ } else if (windowAlias.addEventListener) {
+ windowAlias.addEventListener('load', callback);
+ } else if (windowAlias.attachEvent) {
+ windowAlias.attachEvent('onload', callback);
+ }
+ }
+
+ function trackCallbackOnReady(callback)
+ {
+ var loaded = false;
+
+ if (documentAlias.attachEvent) {
+ loaded = documentAlias.readyState === 'complete';
+ } else {
+ loaded = documentAlias.readyState !== 'loading';
+ }
+
+ if (loaded) {
+ callback();
+ return;
+ }
+
+ var _timer;
+
+ if (documentAlias.addEventListener) {
+ addEventListener(documentAlias, 'DOMContentLoaded', function ready() {
+ documentAlias.removeEventListener('DOMContentLoaded', ready, false);
+ if (!loaded) {
+ loaded = true;
+ callback();
+ }
+ });
+ } else if (documentAlias.attachEvent) {
+ documentAlias.attachEvent('onreadystatechange', function ready() {
+ if (documentAlias.readyState === 'complete') {
+ documentAlias.detachEvent('onreadystatechange', ready);
+ if (!loaded) {
+ loaded = true;
+ callback();
+ }
+ }
+ });
+
+ if (documentAlias.documentElement.doScroll && windowAlias === windowAlias.top) {
+ (function ready() {
+ if (!loaded) {
+ try {
+ documentAlias.documentElement.doScroll('left');
+ } catch (error) {
+ setTimeout(ready, 0);
+
+ return;
+ }
+ loaded = true;
+ callback();
+ }
+ }());
+ }
+ }
+
+ // fallback
+ addEventListener(windowAlias, 'load', function () {
+ if (!loaded) {
+ loaded = true;
+ callback();
+ }
+ }, false);
+ }
+
/*
* Call plugin hook methods
*/
@@ -1289,7 +1384,6 @@ if (typeof window.Piwik !== 'object') {
var now;
executePluginMethod('unload');
-
/*
* Delay/pause (blocks UI)
*/
@@ -4766,79 +4860,6 @@ if (typeof window.Piwik !== 'object') {
callback();
}
- function trackCallbackOnLoad(callback)
- {
- if (documentAlias.readyState === 'complete') {
- callback();
- } else if (windowAlias.addEventListener) {
- windowAlias.addEventListener('load', callback);
- } else if (windowAlias.attachEvent) {
- windowAlias.attachEvent('onload', callback);
- }
- }
-
- function trackCallbackOnReady(callback)
- {
- var loaded = false;
-
- if (documentAlias.attachEvent) {
- loaded = documentAlias.readyState === 'complete';
- } else {
- loaded = documentAlias.readyState !== 'loading';
- }
-
- if (loaded) {
- callback();
- return;
- }
-
- var _timer;
-
- if (documentAlias.addEventListener) {
- addEventListener(documentAlias, 'DOMContentLoaded', function ready() {
- documentAlias.removeEventListener('DOMContentLoaded', ready, false);
- if (!loaded) {
- loaded = true;
- callback();
- }
- });
- } else if (documentAlias.attachEvent) {
- documentAlias.attachEvent('onreadystatechange', function ready() {
- if (documentAlias.readyState === 'complete') {
- documentAlias.detachEvent('onreadystatechange', ready);
- if (!loaded) {
- loaded = true;
- callback();
- }
- }
- });
-
- if (documentAlias.documentElement.doScroll && windowAlias === windowAlias.top) {
- (function ready() {
- if (!loaded) {
- try {
- documentAlias.documentElement.doScroll('left');
- } catch (error) {
- setTimeout(ready, 0);
-
- return;
- }
- loaded = true;
- callback();
- }
- }());
- }
- }
-
- // fallback
- addEventListener(windowAlias, 'load', function () {
- if (!loaded) {
- loaded = true;
- callback();
- }
- }, false);
- }
-
/*
* Process clicks
*/
@@ -6605,6 +6626,44 @@ if (typeof window.Piwik !== 'object') {
initialized: false,
/**
+ * DOM Document related methods
+ */
+ DOM: {
+ /**
+ * Adds an event listener to the given element.
+ * @param element
+ * @param eventType
+ * @param eventHandler
+ * @param useCapture Optional
+ */
+ addEventListener: function (element, eventType, eventHandler, useCapture) {
+ var captureType = typeof useCapture;
+ if (captureType === 'undefined') {
+ useCapture = false;
+ }
+
+ addEventListener(element, eventType, eventHandler, useCapture);
+ },
+ /**
+ * Specify a function to execute when the DOM is fully loaded.
+ *
+ * If the DOM is already loaded, the function will be executed immediately.
+ *
+ * @param function callback
+ */
+ onLoad: trackCallbackOnLoad,
+
+ /**
+ * Specify a function to execute when the DOM is ready.
+ *
+ * If the DOM is already ready, the function will be executed immediately.
+ *
+ * @param function callback
+ */
+ onReady: trackCallbackOnReady
+ },
+
+ /**
* Listen to an event and invoke the handler when a the event is triggered.
*
* @param string event
@@ -6632,7 +6691,7 @@ if (typeof window.Piwik !== 'object') {
var i = 0;
for (i; i < eventHandlers[event].length; i++) {
if (eventHandlers[event][i] === handler) {
- delete eventHandlers[event][i];
+ eventHandlers[event].splice(i, 1);
}
}
},
@@ -6749,6 +6808,26 @@ if (typeof window.Piwik !== 'object') {
return tracker;
}
}
+ },
+
+ /**
+ * When calling plugin methods via "_paq.push(['...'])" and the plugin is loaded separately because
+ * piwik.js is not writable then there is a chance that first piwik.js is loaded and later the plugin.
+ * In this case we would have already executed all "_paq.push" methods and they would not have succeeded
+ * because the plugin will be loaded only later. In this case, once a plugin is loaded, it should call
+ * "Piwik.retryMissedPluginCalls()" so they will be executed after all.
+ *
+ * @param string piwikUrl
+ * @param int|string siteId
+ * @return Tracker
+ */
+ retryMissedPluginCalls: function () {
+ var missedCalls = missedPluginTrackerCalls;
+ missedPluginTrackerCalls = [];
+ var i = 0;
+ for (i; i < missedCalls.length; i++) {
+ apply(missedCalls[i]);
+ }
}
};
diff --git a/js/piwik.min.js b/js/piwik.min.js
index 548d87f62e..1a04b67ec5 100644
--- a/js/piwik.min.js
+++ b/js/piwik.min.js
@@ -18,54 +18,55 @@ var I="000000";var t=function(ac,ad){return(I+(ad||0)).slice(-ac)};var z="\\u00"
}else{at=null}}else{if(typeof at.toJSON=="function"&&((ae!=N&&ae!=O&&ae!=E)||r.call(at,"toJSON"))){at=at.toJSON(ai)}}}if(ag){at=ag.call(aA,ai,at)}if(at===null){return"null"}ae=u.call(at);if(ae==A){return""+at}else{if(ae==N){return at>-1/0&&at<1/0?""+at:"null"}else{if(ae==O){return C(""+at)}}}if(typeof at=="object"){for(af=aj.length;af--;){if(aj[af]===at){throw aa()}}aj.push(at);ar=[];av=ac;ac+=ax;if(ae==E){for(ah=0,af=at.length;ah<af;ah++){ad=p(ah,at,ag,al,ax,ac,aj);ar.push(ad===L?"null":ad)}ao=ar.length?(ax?"[\n"+ac+ar.join(",\n"+ac)+"\n"+av+"]":("["+ar.join(",")+"]")):"[]"}else{m(al||at,function(aC){var aB=p(aC,at,ag,al,ax,ac,aj);if(aB!==L){ar.push(C(aC)+":"+(ax?" ":"")+aB)}});ao=ar.length?(ax?"{\n"+ac+ar.join(",\n"+ac)+"\n"+av+"}":("{"+ar.join(",")+"}")):"{}"}aj.pop();return ao}};V.stringify=function(ac,ae,af){var ad,al,aj,ai;if(e[typeof ae]&&ae){if((ai=u.call(ae))==U){al=ae}else{if(ai==E){aj={};for(var ah=0,ag=ae.length,ak;ah<ag;ak=ae[ah++],((ai=u.call(ak)),ai==O||ai==N)&&(aj[ak]=1)){}}}}if(af){if((ai=u.call(af))==N){if((af-=af%1)>0){for(ad="",af>10&&(af=10);
ad.length<af;ad+=" "){}}}else{if(ai==O){ad=af.length<=10?af:af.slice(0,10)}}}return p("",(ak={},ak[""]=ac,ak),al,aj,ad,"",[])}}if(!o("json-parse")){var M=R.fromCharCode;var l={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"};var G,X;var H=function(){G=X=null;throw T()};var y=function(){var ah=X,af=ah.length,ag,ae,ac,ai,ad;while(G<af){ad=ah.charCodeAt(G);switch(ad){case 9:case 10:case 13:case 32:G++;break;case 123:case 125:case 91:case 93:case 58:case 44:ag=F?ah.charAt(G):ah[G];G++;return ag;case 34:for(ag="@",G++;G<af;){ad=ah.charCodeAt(G);if(ad<32){H()}else{if(ad==92){ad=ah.charCodeAt(++G);switch(ad){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:ag+=l[ad];G++;break;case 117:ae=++G;for(ac=G+4;G<ac;G++){ad=ah.charCodeAt(G);if(!(ad>=48&&ad<=57||ad>=97&&ad<=102||ad>=65&&ad<=70)){H()}}ag+=M("0x"+ah.slice(ae,G));break;default:H()}}else{if(ad==34){break}ad=ah.charCodeAt(G);ae=G;while(ad>=32&&ad!=92&&ad!=34){ad=ah.charCodeAt(++G)}ag+=ah.slice(ae,G)}}}if(ah.charCodeAt(G)==34){G++;
return ag}H();default:ae=G;if(ad==45){ai=true;ad=ah.charCodeAt(++G)}if(ad>=48&&ad<=57){if(ad==48&&((ad=ah.charCodeAt(G+1)),ad>=48&&ad<=57)){H()}ai=false;for(;G<af&&((ad=ah.charCodeAt(G)),ad>=48&&ad<=57);G++){}if(ah.charCodeAt(G)==46){ac=++G;for(;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}ad=ah.charCodeAt(G);if(ad==101||ad==69){ad=ah.charCodeAt(++G);if(ad==43||ad==45){G++}for(ac=G;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}return +ah.slice(ae,G)}if(ai){H()}if(ah.slice(G,G+4)=="true"){G+=4;return true}else{if(ah.slice(G,G+5)=="false"){G+=5;return false}else{if(ah.slice(G,G+4)=="null"){G+=4;return null}}}H()}}return"$"};var W=function(ad){var ac,ae;if(ad=="$"){H()}if(typeof ad=="string"){if((F?ad.charAt(0):ad[0])=="@"){return ad.slice(1)}if(ad=="["){ac=[];for(;;ae||(ae=true)){ad=y();if(ad=="]"){break}if(ae){if(ad==","){ad=y();if(ad=="]"){H()}}else{H()}}if(ad==","){H()}ac.push(W(ad))}return ac}else{if(ad=="{"){ac={};for(;;ae||(ae=true)){ad=y();
-if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON2=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var l,a={},r={},y=document,f=navigator,P=screen,L=window,g=L.performance||L.mozPerformance||L.msPerformance||L.webkitPerformance,n=L.encodeURIComponent,K=L.decodeURIComponent,i=unescape,A=[],x,d;
-function k(ac){try{return K(ac)}catch(ad){return unescape(ac)}}function B(ad){var ac=typeof ad;return ac!=="undefined"}function t(ac){return typeof ac==="function"}function O(ac){return typeof ac==="object"}function q(ac){return typeof ac==="string"||ac instanceof String}function u(ad){if(!ad){return true}var ac;var ae=true;for(ac in ad){if(Object.prototype.hasOwnProperty.call(ad,ac)){ae=false}}return ae}function Y(ac){if(console!==undefined&&console&&console.error){console.error(ac)}}function V(){var ag,af,ai,ac;for(ag=0;ag<arguments.length;ag+=1){ac=arguments[ag];ai=ac.shift();for(af=0;af<A.length;af++){if(q(ai)){var ad=A[af];var ah;var ae=ai.indexOf("::")>0;if(ae){ah=ai.split("::");ad=ah[0];ai=ah[1];if("object"===typeof d[ad]&&"function"===typeof d[ad][ai]){d[ad][ai].apply(d[ad],ac)}return}var aj=ai.indexOf(".")>0;if(aj){ah=ai.split(".");ad=ad[ah[0]];ai=ah[1]}if(ad[ai]){ad[ai].apply(ad,ac)}else{var ak="The method '"+ai+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript';
-Y(ak);if(!aj){throw new TypeError(ak)}}if(ai==="addTracker"){break}if(ai==="setTrackerUrl"||ai==="setSiteId"){break}}else{ai.apply(A[af],ac)}}}}function aa(af,ae,ad,ac){if(af.addEventListener){af.addEventListener(ae,ad,ac);return true}if(af.attachEvent){return af.attachEvent("on"+ae,ad)}af["on"+ae]=ad}function S(ad,ah){var ac="",af,ae,ag;for(af in a){if(Object.prototype.hasOwnProperty.call(a,af)){ae=a[af][ad];if(t(ae)){ag=ae(ah);if(ag){ac+=ag}}}}return ac}function W(){var ac;S("unload");if(l){do{ac=new Date()}while(ac.getTimeAlias()<l)}}function j(ae,ad){var ac=y.createElement("script");ac.type="text/javascript";ac.src=ae;if(ac.readyState){ac.onreadystatechange=function(){var af=this.readyState;if(af==="loaded"||af==="complete"){ac.onreadystatechange=null;ad()}}}else{ac.onload=ad}y.getElementsByTagName("head")[0].appendChild(ac)}function C(){var ac="";try{ac=L.top.document.referrer}catch(ae){if(L.parent){try{ac=L.parent.document.referrer}catch(ad){ac=""}}}if(ac===""){ac=y.referrer}return ac
-}function m(ac){var ae=new RegExp("^([a-z]+):"),ad=ae.exec(ac);return ad?ad[1]:null}function c(ac){var ae=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),ad=ae.exec(ac);return ad?ad[1]:ac}function N(ae,ad){var ac="[\\?&#]"+ad+"=([^&#]*)";var ag=new RegExp(ac);var af=ag.exec(ae);return af?K(af[1]):""}function w(ac){return unescape(n(ac))}function Z(ar){var ae=function(ay,ax){return(ay<<ax)|(ay>>>(32-ax))},at=function(aA){var ay="",az,ax;for(az=7;az>=0;az--){ax=(aA>>>(az*4))&15;ay+=ax.toString(16)}return ay},ah,av,au,ad=[],al=1732584193,aj=4023233417,ai=2562383102,ag=271733878,af=3285377520,aq,ap,ao,an,am,aw,ac,ak=[];ar=w(ar);ac=ar.length;for(av=0;av<ac-3;av+=4){au=ar.charCodeAt(av)<<24|ar.charCodeAt(av+1)<<16|ar.charCodeAt(av+2)<<8|ar.charCodeAt(av+3);ak.push(au)}switch(ac&3){case 0:av=2147483648;break;case 1:av=ar.charCodeAt(ac-1)<<24|8388608;break;case 2:av=ar.charCodeAt(ac-2)<<24|ar.charCodeAt(ac-1)<<16|32768;break;case 3:av=ar.charCodeAt(ac-3)<<24|ar.charCodeAt(ac-2)<<16|ar.charCodeAt(ac-1)<<8|128;
-break}ak.push(av);while((ak.length&15)!==14){ak.push(0)}ak.push(ac>>>29);ak.push((ac<<3)&4294967295);for(ah=0;ah<ak.length;ah+=16){for(av=0;av<16;av++){ad[av]=ak[ah+av]}for(av=16;av<=79;av++){ad[av]=ae(ad[av-3]^ad[av-8]^ad[av-14]^ad[av-16],1)}aq=al;ap=aj;ao=ai;an=ag;am=af;for(av=0;av<=19;av++){aw=(ae(aq,5)+((ap&ao)|(~ap&an))+am+ad[av]+1518500249)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}for(av=20;av<=39;av++){aw=(ae(aq,5)+(ap^ao^an)+am+ad[av]+1859775393)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}for(av=40;av<=59;av++){aw=(ae(aq,5)+((ap&ao)|(ap&an)|(ao&an))+am+ad[av]+2400959708)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}for(av=60;av<=79;av++){aw=(ae(aq,5)+(ap^ao^an)+am+ad[av]+3395469782)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}al=(al+aq)&4294967295;aj=(aj+ap)&4294967295;ai=(ai+ao)&4294967295;ag=(ag+an)&4294967295;af=(af+am)&4294967295}aw=at(al)+at(aj)+at(ai)+at(ag)+at(af);return aw.toLowerCase()}function R(ae,ac,ad){if(!ae){ae=""}if(!ac){ac=""}if(ae==="translate.googleusercontent.com"){if(ad===""){ad=ac
-}ac=N(ac,"u");ae=c(ac)}else{if(ae==="cc.bingj.com"||ae==="webcache.googleusercontent.com"||ae.slice(0,5)==="74.6."){ac=y.links[0].href;ae=c(ac)}}return[ae,ac,ad]}function D(ad){var ac=ad.length;if(ad.charAt(--ac)==="."){ad=ad.slice(0,ac)}if(ad.slice(0,2)==="*."){ad=ad.slice(1)}if(ad.indexOf("/")!==-1){ad=ad.substr(0,ad.indexOf("/"))}return ad}function ab(ad){ad=ad&&ad.text?ad.text:ad;if(!q(ad)){var ac=y.getElementsByTagName("title");if(ac&&B(ac[0])){ad=ac[0].text}}return ad}function H(ac){if(!ac){return[]}if(!B(ac.children)&&B(ac.childNodes)){return ac.children}if(B(ac.children)){return ac.children}return[]}function M(ad,ac){if(!ad||!ac){return false}if(ad.contains){return ad.contains(ac)}if(ad===ac){return true}if(ad.compareDocumentPosition){return !!(ad.compareDocumentPosition(ac)&16)}return false}function E(ae,af){if(ae&&ae.indexOf){return ae.indexOf(af)}if(!B(ae)||ae===null){return -1}if(!ae.length){return -1}var ac=ae.length;if(ac===0){return -1}var ad=0;while(ad<ac){if(ae[ad]===af){return ad
-}ad++}return -1}function X(ad,ac){ad=String(ad);return ad.lastIndexOf(ac,0)===0}function J(ad,ac){ad=String(ad);return ad.indexOf(ac,ad.length-ac.length)!==-1}function s(ad,ac){ad=String(ad);return ad.indexOf(ac)!==-1}function e(ad,ac){ad=String(ad);return ad.substr(0,ad.length-ac)}function h(ae){if(!ae){return false}function ac(ag,ah){if(L.getComputedStyle){return y.defaultView.getComputedStyle(ag,null)[ah]}if(ag.currentStyle){return ag.currentStyle[ah]}}function af(ag){ag=ag.parentNode;while(ag){if(ag===y){return true}ag=ag.parentNode}return false}function ad(ai,ao,ag,al,aj,am,ak){var ah=ai.parentNode,an=1;if(!af(ai)){return false}if(9===ah.nodeType){return true}if("0"===ac(ai,"opacity")||"none"===ac(ai,"display")||"hidden"===ac(ai,"visibility")){return false}if(!B(ao)||!B(ag)||!B(al)||!B(aj)||!B(am)||!B(ak)){ao=ai.offsetTop;aj=ai.offsetLeft;al=ao+ai.offsetHeight;ag=aj+ai.offsetWidth;am=ai.offsetWidth;ak=ai.offsetHeight}if(ae===ai&&(0===ak||0===am)&&"hidden"===ac(ai,"overflow")){return false
-}if(ah){if(("hidden"===ac(ah,"overflow")||"scroll"===ac(ah,"overflow"))){if(aj+an>ah.offsetWidth+ah.scrollLeft||aj+am-an<ah.scrollLeft||ao+an>ah.offsetHeight+ah.scrollTop||ao+ak-an<ah.scrollTop){return false}}if(ai.offsetParent===ah){aj+=ah.offsetLeft;ao+=ah.offsetTop}return ad(ah,ao,ag,al,aj,am,ak)}return true}return ad(ae)}var U={htmlCollectionToArray:function(ae){var ac=[],ad;if(!ae||!ae.length){return ac}for(ad=0;ad<ae.length;ad++){ac.push(ae[ad])}return ac},find:function(ac){if(!document.querySelectorAll||!ac){return[]}var ad=document.querySelectorAll(ac);return this.htmlCollectionToArray(ad)},findMultiple:function(ae){if(!ae||!ae.length){return[]}var ad,af;var ac=[];for(ad=0;ad<ae.length;ad++){af=this.find(ae[ad]);ac=ac.concat(af)}ac=this.makeNodesUnique(ac);return ac},findNodesByTagName:function(ad,ac){if(!ad||!ac||!ad.getElementsByTagName){return[]}var ae=ad.getElementsByTagName(ac);return this.htmlCollectionToArray(ae)},makeNodesUnique:function(ac){var ah=[].concat(ac);ac.sort(function(aj,ai){if(aj===ai){return 0
-}var al=E(ah,aj);var ak=E(ah,ai);if(al===ak){return 0}return al>ak?-1:1});if(ac.length<=1){return ac}var ad=0;var af=0;var ag=[];var ae;ae=ac[ad++];while(ae){if(ae===ac[ad]){af=ag.push(ad)}ae=ac[ad++]||null}while(af--){ac.splice(ag[af],1)}return ac},getAttributeValueFromNode:function(ag,ae){if(!this.hasNodeAttribute(ag,ae)){return}if(ag&&ag.getAttribute){return ag.getAttribute(ae)}if(!ag||!ag.attributes){return}var af=(typeof ag.attributes[ae]);if("undefined"===af){return}if(ag.attributes[ae].value){return ag.attributes[ae].value}if(ag.attributes[ae].nodeValue){return ag.attributes[ae].nodeValue}var ad;var ac=ag.attributes;if(!ac){return}for(ad=0;ad<ac.length;ad++){if(ac[ad].nodeName===ae){return ac[ad].nodeValue}}return null},hasNodeAttributeWithValue:function(ad,ac){var ae=this.getAttributeValueFromNode(ad,ac);return !!ae},hasNodeAttribute:function(ae,ac){if(ae&&ae.hasAttribute){return ae.hasAttribute(ac)}if(ae&&ae.attributes){var ad=(typeof ae.attributes[ac]);return"undefined"!==ad}return false
-},hasNodeCssClass:function(ae,ac){if(ae&&ac&&ae.className){var ad=typeof ae.className==="string"?ae.className.split(" "):[];if(-1!==E(ad,ac)){return true}}return false},findNodesHavingAttribute:function(ag,ae,ac){if(!ac){ac=[]}if(!ag||!ae){return ac}var af=H(ag);if(!af||!af.length){return ac}var ad,ah;for(ad=0;ad<af.length;ad++){ah=af[ad];if(this.hasNodeAttribute(ah,ae)){ac.push(ah)}ac=this.findNodesHavingAttribute(ah,ae,ac)}return ac},findFirstNodeHavingAttribute:function(ae,ad){if(!ae||!ad){return}if(this.hasNodeAttribute(ae,ad)){return ae}var ac=this.findNodesHavingAttribute(ae,ad);if(ac&&ac.length){return ac[0]}},findFirstNodeHavingAttributeWithValue:function(af,ae){if(!af||!ae){return}if(this.hasNodeAttributeWithValue(af,ae)){return af}var ac=this.findNodesHavingAttribute(af,ae);if(!ac||!ac.length){return}var ad;for(ad=0;ad<ac.length;ad++){if(this.getAttributeValueFromNode(ac[ad],ae)){return ac[ad]}}},findNodesHavingCssClass:function(ag,af,ac){if(!ac){ac=[]}if(!ag||!af){return ac}if(ag.getElementsByClassName){var ah=ag.getElementsByClassName(af);
-return this.htmlCollectionToArray(ah)}var ae=H(ag);if(!ae||!ae.length){return[]}var ad,ai;for(ad=0;ad<ae.length;ad++){ai=ae[ad];if(this.hasNodeCssClass(ai,af)){ac.push(ai)}ac=this.findNodesHavingCssClass(ai,af,ac)}return ac},findFirstNodeHavingClass:function(ae,ad){if(!ae||!ad){return}if(this.hasNodeCssClass(ae,ad)){return ae}var ac=this.findNodesHavingCssClass(ae,ad);if(ac&&ac.length){return ac[0]}},isLinkElement:function(ad){if(!ad){return false}var ac=String(ad.nodeName).toLowerCase();var af=["a","area"];var ae=E(af,ac);return ae!==-1},setAnyAttribute:function(ad,ac,ae){if(!ad||!ac){return}if(ad.setAttribute){ad.setAttribute(ac,ae)}else{ad[ac]=ae}}};var p={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var ad="."+this.CONTENT_CLASS;
-var ac="["+this.CONTENT_ATTR+"]";var ae=U.findMultiple([ad,ac]);return ae},findContentNodesWithinNode:function(af){if(!af){return[]}var ad=U.findNodesHavingCssClass(af,this.CONTENT_CLASS);var ac=U.findNodesHavingAttribute(af,this.CONTENT_ATTR);if(ac&&ac.length){var ae;for(ae=0;ae<ac.length;ae++){ad.push(ac[ae])}}if(U.hasNodeAttribute(af,this.CONTENT_ATTR)){ad.push(af)}else{if(U.hasNodeCssClass(af,this.CONTENT_CLASS)){ad.push(af)}}ad=U.makeNodesUnique(ad);return ad},findParentContentNode:function(ad){if(!ad){return}var ae=ad;var ac=0;while(ae&&ae!==y&&ae.parentNode){if(U.hasNodeAttribute(ae,this.CONTENT_ATTR)){return ae}if(U.hasNodeCssClass(ae,this.CONTENT_CLASS)){return ae}ae=ae.parentNode;if(ac>1000){break}ac++}},findPieceNode:function(ad){var ac;ac=U.findFirstNodeHavingAttribute(ad,this.CONTENT_PIECE_ATTR);if(!ac){ac=U.findFirstNodeHavingClass(ad,this.CONTENT_PIECE_CLASS)}if(ac){return ac}return ad},findTargetNodeNoDefault:function(ac){if(!ac){return}var ad=U.findFirstNodeHavingAttributeWithValue(ac,this.CONTENT_TARGET_ATTR);
-if(ad){return ad}ad=U.findFirstNodeHavingAttribute(ac,this.CONTENT_TARGET_ATTR);if(ad){return ad}ad=U.findFirstNodeHavingClass(ac,this.CONTENT_TARGET_CLASS);if(ad){return ad}},findTargetNode:function(ac){var ad=this.findTargetNodeNoDefault(ac);if(ad){return ad}return ac},findContentName:function(ad){if(!ad){return}var ag=U.findFirstNodeHavingAttributeWithValue(ad,this.CONTENT_NAME_ATTR);if(ag){return U.getAttributeValueFromNode(ag,this.CONTENT_NAME_ATTR)}var ac=this.findContentPiece(ad);if(ac){return this.removeDomainIfIsInLink(ac)}if(U.hasNodeAttributeWithValue(ad,"title")){return U.getAttributeValueFromNode(ad,"title")}var ae=this.findPieceNode(ad);if(U.hasNodeAttributeWithValue(ae,"title")){return U.getAttributeValueFromNode(ae,"title")}var af=this.findTargetNode(ad);if(U.hasNodeAttributeWithValue(af,"title")){return U.getAttributeValueFromNode(af,"title")}},findContentPiece:function(ad){if(!ad){return}var af=U.findFirstNodeHavingAttributeWithValue(ad,this.CONTENT_PIECE_ATTR);if(af){return U.getAttributeValueFromNode(af,this.CONTENT_PIECE_ATTR)
-}var ac=this.findPieceNode(ad);var ae=this.findMediaUrlInNode(ac);if(ae){return this.toAbsoluteUrl(ae)}},findContentTarget:function(ae){if(!ae){return}var af=this.findTargetNode(ae);if(U.hasNodeAttributeWithValue(af,this.CONTENT_TARGET_ATTR)){return U.getAttributeValueFromNode(af,this.CONTENT_TARGET_ATTR)}var ad;if(U.hasNodeAttributeWithValue(af,"href")){ad=U.getAttributeValueFromNode(af,"href");return this.toAbsoluteUrl(ad)}var ac=this.findPieceNode(ae);if(U.hasNodeAttributeWithValue(ac,"href")){ad=U.getAttributeValueFromNode(ac,"href");return this.toAbsoluteUrl(ad)}},isSameDomain:function(ac){if(!ac||!ac.indexOf){return false}if(0===ac.indexOf(this.getLocation().origin)){return true}var ad=ac.indexOf(this.getLocation().host);if(8>=ad&&0<=ad){return true}return false},removeDomainIfIsInLink:function(ae){var ad="^https?://[^/]+";var ac="^.*//[^/]+";if(ae&&ae.search&&-1!==ae.search(new RegExp(ad))&&this.isSameDomain(ae)){ae=ae.replace(new RegExp(ac),"");if(!ae){ae="/"}}return ae},findMediaUrlInNode:function(ag){if(!ag){return
-}var ae=["img","embed","video","audio"];var ac=ag.nodeName.toLowerCase();if(-1!==E(ae,ac)&&U.findFirstNodeHavingAttributeWithValue(ag,"src")){var af=U.findFirstNodeHavingAttributeWithValue(ag,"src");return U.getAttributeValueFromNode(af,"src")}if(ac==="object"&&U.hasNodeAttributeWithValue(ag,"data")){return U.getAttributeValueFromNode(ag,"data")}if(ac==="object"){var ah=U.findNodesByTagName(ag,"param");if(ah&&ah.length){var ad;for(ad=0;ad<ah.length;ad++){if("movie"===U.getAttributeValueFromNode(ah[ad],"name")&&U.hasNodeAttributeWithValue(ah[ad],"value")){return U.getAttributeValueFromNode(ah[ad],"value")}}}var ai=U.findNodesByTagName(ag,"embed");if(ai&&ai.length){return this.findMediaUrlInNode(ai[0])}}},trim:function(ac){if(ac&&String(ac)===ac){return ac.replace(/^\s+|\s+$/g,"")}return ac},isOrWasNodeInViewport:function(ah){if(!ah||!ah.getBoundingClientRect||ah.nodeType!==1){return true}var ag=ah.getBoundingClientRect();var af=y.documentElement||{};var ae=ag.top<0;if(ae&&ah.offsetTop){ae=(ah.offsetTop+ag.height)>0
-}var ad=af.clientWidth;if(L.innerWidth&&ad>L.innerWidth){ad=L.innerWidth}var ac=af.clientHeight;if(L.innerHeight&&ac>L.innerHeight){ac=L.innerHeight}return((ag.bottom>0||ae)&&ag.right>0&&ag.left<ad&&((ag.top<ac)||ae))},isNodeVisible:function(ad){var ac=h(ad);var ae=this.isOrWasNodeInViewport(ad);return ac&&ae},buildInteractionRequestParams:function(ac,ad,ae,af){var ag="";if(ac){ag+="c_i="+n(ac)}if(ad){if(ag){ag+="&"}ag+="c_n="+n(ad)}if(ae){if(ag){ag+="&"}ag+="c_p="+n(ae)}if(af){if(ag){ag+="&"}ag+="c_t="+n(af)}return ag},buildImpressionRequestParams:function(ac,ad,ae){var af="c_n="+n(ac)+"&c_p="+n(ad);if(ae){af+="&c_t="+n(ae)}return af},buildContentBlock:function(ae){if(!ae){return}var ac=this.findContentName(ae);var ad=this.findContentPiece(ae);var af=this.findContentTarget(ae);ac=this.trim(ac);ad=this.trim(ad);af=this.trim(af);return{name:ac||"Unknown",piece:ad||"Unknown",target:af||""}},collectContent:function(af){if(!af||!af.length){return[]}var ae=[];var ac,ad;for(ac=0;ac<af.length;
-ac++){ad=this.buildContentBlock(af[ac]);if(B(ad)){ae.push(ad)}}return ae},setLocation:function(ac){this.location=ac},getLocation:function(){var ac=this.location||L.location;if(!ac.origin){ac.origin=ac.protocol+"//"+ac.hostname+(ac.port?":"+ac.port:"")}return ac},toAbsoluteUrl:function(ad){if((!ad||String(ad)!==ad)&&ad!==""){return ad}if(""===ad){return this.getLocation().href}if(ad.search(/^\/\//)!==-1){return this.getLocation().protocol+ad}if(ad.search(/:\/\//)!==-1){return ad}if(0===ad.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ad}if(0===ad.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ad}if(0===ad.search("^[a-zA-Z]{2,11}:")){return ad}if(ad.search(/^\//)!==-1){return this.getLocation().origin+ad}var ac="(.*/)";var ae=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ac))[0];return ae+ad},isUrlToCurrentDomain:function(ad){var ae=this.toAbsoluteUrl(ad);if(!ae){return false}var ac=this.getLocation().origin;
-if(ac===ae){return true}if(0===String(ae).indexOf(ac)){if(":"===String(ae).substr(ac.length,1)){return false}return true}return false},setHrefAttribute:function(ad,ac){if(!ad||!ac){return}U.setAnyAttribute(ad,"href",ac)},shouldIgnoreInteraction:function(ae){var ad=U.hasNodeAttribute(ae,this.CONTENT_IGNOREINTERACTION_ATTR);var ac=U.hasNodeCssClass(ae,this.CONTENT_IGNOREINTERACTION_CLASS);return ad||ac}};function G(ad,ag){if(ag){return ag}if(s(ad,"?")){var af=ad.indexOf("?");ad=ad.slice(0,af)}if(J(ad,"piwik.php")){ad=e(ad,"piwik.php".length)}else{if(J(ad,".php")){var ac=ad.lastIndexOf("/");var ae=1;ad=ad.slice(0,ac+ae)}}if(J(ad,"/js/")){ad=e(ad,"js/".length)}return ad}function F(ai){var ak="Piwik_Overlay";var ad=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var ae=ad.exec(y.referrer);if(ae){var ag=ae[1];if(ag!==String(ai)){return false}var ah=ae[2],ac=ae[3],af=ae[4];if(!af){af=""}else{if(af.indexOf("&segment=")===0){af=af.substr("&segment=".length)
-}}L.name=ak+"###"+ah+"###"+ac+"###"+af}var aj=L.name.split("###");return aj.length===4&&aj[0]===ak}function Q(ad,aj,af){var ai=L.name.split("###"),ah=ai[1],ac=ai[2],ag=ai[3],ae=G(ad,aj);j(ae+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(ae,af,ah,ac,ag)})}function o(){var ae;try{ae=L.frameElement}catch(ad){return true}if(B(ae)){return(ae&&String(ae.nodeName).toLowerCase()==="iframe")?true:false}try{return L.self!==L.top}catch(ac){return true}}function I(bM,bG){var bC=R(y.domain,L.location.href,C()),cl=D(bC[0]),bm=k(bC[1]),a1=k(bC[2]),cj=false,bQ="GET",cx=bQ,aq="application/x-www-form-urlencoded; charset=UTF-8",b2=aq,am=bM||"",bh="",cp="",bE=bG||"",ba="",bn="",aL,aX="",cu=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ai=[cl],bb=[],bk=[],aO=[],bi=500,cc,aM,bq,bo,ac,bY=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bg=["pk_kwd","piwik_kwd","utm_term"],aY="_pk_",cn,a3,aZ=false,ch,aU,a7,cd=33955200000,bW=1800000,ct=15768000000,aJ=true,bU=0,bp=false,ay=false,bJ,bu={},bT={},a0={},a6=200,cq={},cv={},bI=[],bN=false,b6=false,ad=false,cw=false,aw=false,aT=o(),co=null,bK,az,bc,bF=Z,a2,at;
-try{aX=y.title}catch(b4){aX=""}function cA(cK,cH,cG,cJ,cF,cI){if(aZ){return}var cE;if(cG){cE=new Date();cE.setTime(cE.getTime()+cG)}y.cookie=cK+"="+n(cH)+(cG?";expires="+cE.toGMTString():"")+";path="+(cJ||"/")+(cF?";domain="+cF:"")+(cI?";secure":"")}function al(cG){if(aZ){return 0}var cE=new RegExp("(^|;)[ ]*"+cG+"=([^;]*)"),cF=cE.exec(y.cookie);return cF?K(cF[2]):0}function bA(cE){var cF;if(bo){cF=new RegExp("#.*");return cE.replace(cF,"")}return cE}function bt(cG,cE){var cH=m(cE),cF;if(cH){return cE}if(cE.slice(0,1)==="/"){return m(cG)+"://"+c(cG)+cE}cG=bA(cG);cF=cG.indexOf("?");if(cF>=0){cG=cG.slice(0,cF)}cF=cG.lastIndexOf("/");if(cF!==cG.length-1){cG=cG.slice(0,cF+1)}return cG+cE}function ca(cG,cE){var cF;cG=String(cG).toLowerCase();cE=String(cE).toLowerCase();if(cG===cE){return true}if(cE.slice(0,1)==="."){if(cG===cE.slice(1)){return true}cF=cG.length-cE.length;if((cF>0)&&(cG.slice(cF)===cE)){return true}}return false}function bS(cE){var cF=document.createElement("a");if(cE.indexOf("//")!==0&&cE.indexOf("http")!==0){if(cE.indexOf("*")===0){cE=cE.substr(1)
-}if(cE.indexOf(".")===0){cE=cE.substr(1)}cE="http://"+cE}cF.href=p.toAbsoluteUrl(cE);if(cF.pathname){return cF.pathname}return""}function aK(cF,cE){if(!X(cE,"/")){cE="/"+cE}if(!X(cF,"/")){cF="/"+cF}var cG=(cE==="/"||cE==="/*");if(cG){return true}if(cF===cE){return true}cE=String(cE).toLowerCase();cF=String(cF).toLowerCase();if(J(cE,"*")){cE=cE.slice(0,-1);cG=(!cE||cE==="/");if(cG){return true}if(cF===cE){return true}return cF.indexOf(cE)===0}if(!J(cF,"/")){cF+="/"}if(!J(cE,"/")){cE+="/"}return cF.indexOf(cE)===0}function af(cI,cK){var cF,cE,cG,cH,cJ;for(cF=0;cF<ai.length;cF++){cH=D(ai[cF]);cJ=bS(ai[cF]);if(ca(cI,cH)&&aK(cK,cJ)){return true}}return false}function aD(cH){var cF,cE,cG;for(cF=0;cF<ai.length;cF++){cE=D(ai[cF].toLowerCase());if(cH===cE){return true}if(cE.slice(0,1)==="."){if(cH===cE.slice(1)){return true}cG=cH.length-cE.length;if((cG>0)&&(cH.slice(cG)===cE)){return true}}}return false}function bX(cE,cG){var cF=new Image(1,1);cF.onload=function(){x=0;if(typeof cG==="function"){cG()
-}};cE=cE.replace("send_image=0","send_image=1");cF.src=am+(am.indexOf("?")<0?"?":"&")+cE}function cs(cF,cI,cE){if(!B(cE)||null===cE){cE=true}try{var cH=L.XMLHttpRequest?new L.XMLHttpRequest():L.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;cH.open("POST",am,true);cH.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)&&cE){bX(cF,cI)}else{if(this.readyState===4&&(typeof cI==="function")){cI()}}};cH.setRequestHeader("Content-Type",b2);cH.send(cF)}catch(cG){if(cE){bX(cF,cI)}}}function bO(cF){var cE=new Date();var cG=cE.getTime()+cF;if(!l||cG>l){l=cG}}function bV(cE){if(bK||!aM){return}bK=setTimeout(function cF(){bK=null;if(!aT){aT=(!y.hasFocus||y.hasFocus())}if(!aT){bV(aM);return}if(bq()){return}var cG=new Date(),cH=aM-(cG.getTime()-co);cH=Math.min(aM,cH);bV(cH)},cE||aM)}function bj(){if(!bK){return}clearTimeout(bK);bK=null}function aQ(){aT=true;if(bq()){return}bV()}function aj(){bj()}function cC(){if(aw||!aM){return}aw=true;aa(L,"focus",aQ);
-aa(L,"blur",aj);bV()}function b7(cI){var cF=new Date();var cE=cF.getTime();co=cE;if(b6&&cE<b6){var cG=b6-cE;setTimeout(cI,cG);bO(cG+50);b6+=50;return}if(b6===false){var cH=800;b6=cE+cH}cI()}function bf(cF,cE,cG){if(!ch&&cF){b7(function(){if(cx==="POST"){cs(cF,cG)}else{bX(cF,cG)}bO(cE)})}if(!aw){cC()}else{bV()}}function bR(cE){if(ch){return false}return(cE&&cE.length)}function cB(cG,cE){if(!bR(cG)){return}var cF='{"requests":["?'+cG.join('","?')+'"]}';b7(function(){cs(cF,null,false);bO(cE)})}function aB(cE){return aY+cE+"."+bE+"."+a2}function bD(){if(aZ){return"0"}if(!B(f.cookieEnabled)){var cE=aB("testcookie");cA(cE,"1");return al(cE)==="1"?"1":"0"}return f.cookieEnabled?"1":"0"}function aW(){a2=bF((cn||cl)+(a3||"/")).slice(0,4)}function bv(){var cF=aB("cvar"),cE=al(cF);if(cE.length){cE=JSON2.parse(cE);if(O(cE)){return cE}}return{}}function b8(){if(ay===false){ay=bv()}}function ci(){return bF((f.userAgent||"")+(f.platform||"")+JSON2.stringify(cv)+(new Date()).getTime()+Math.random()).slice(0,16)
-}function cf(){var cG=new Date(),cE=Math.round(cG.getTime()/1000),cF=aB("id"),cJ=al(cF),cI,cH;if(cJ){cI=cJ.split(".");cI.unshift("0");if(bn.length){cI[1]=bn}return cI}if(bn.length){cH=bn}else{if("0"===bD()){cH=""}else{cH=ci()}}cI=["1",cH,cE,0,cE,"",""];return cI}function aF(){var cL=cf(),cH=cL[0],cI=cL[1],cF=cL[2],cE=cL[3],cJ=cL[4],cG=cL[5];if(!B(cL[6])){cL[6]=""}var cK=cL[6];return{newVisitor:cH,uuid:cI,createTs:cF,visitCount:cE,currentVisitTs:cJ,lastVisitTs:cG,lastEcommerceOrderTs:cK}}function ap(){var cH=new Date(),cF=cH.getTime(),cI=aF().createTs;var cE=parseInt(cI,10);var cG=(cE*1000)+cd-cF;return cG}function au(cE){if(!bE){return}var cG=new Date(),cF=Math.round(cG.getTime()/1000);if(!B(cE)){cE=aF()}var cH=cE.uuid+"."+cE.createTs+"."+cE.visitCount+"."+cF+"."+cE.lastVisitTs+"."+cE.lastEcommerceOrderTs;cA(aB("id"),cH,ap(),a3,cn)}function bl(){var cE=al(aB("ref"));if(cE.length){try{cE=JSON2.parse(cE);if(O(cE)){return cE}}catch(cF){}}return["","",0,""]}function bw(cG,cF,cE){cA(cG,"",-86400,cF,cE)
-}function a8(cF){var cE="testvalue";cA("test",cE,10000,null,cF);if(al("test")===cE){bw("test",null,cF);return true}return false}function an(){var cG=aZ;aZ=false;var cE=["id","ses","cvar","ref"];var cF,cH;for(cF=0;cF<cE.length;cF++){cH=aB(cE[cF]);if(0!==al(cH)){bw(cH,a3,cn)}}aZ=cG}function bB(cE){bE=cE;au()}function cD(cI){if(!cI||!O(cI)){return}var cH=[];var cG;for(cG in cI){if(Object.prototype.hasOwnProperty.call(cI,cG)){cH.push(cG)}}var cJ={};cH.sort();var cE=cH.length;var cF;for(cF=0;cF<cE;cF++){cJ[cH[cF]]=cI[cH[cF]]}return cJ}function bL(){cA(aB("ses"),"*",bW,a3,cn)}function aV(){var cH="";var cF="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var cG=cF.length;var cE;for(cE=0;cE<6;cE++){cH+=cF.charAt(Math.floor(Math.random()*cG))}return cH}function bZ(cG,c1,c2,cH){var c0,cF=new Date(),cO=Math.round(cF.getTime()/1000),cL,cZ,cI=1024,c7,cP,cX=ay,cJ=aB("ses"),cV=aB("ref"),cS=aB("cvar"),cT=al(cJ),cY=bl(),c4=aL||bm,cM,cE;if(aZ){an()}if(ch){return""}var cU=aF();if(!B(cH)){cH=""
-}var cR=y.characterSet||y.charset;if(!cR||cR.toLowerCase()==="utf-8"){cR=null}cM=cY[0];cE=cY[1];cL=cY[2];cZ=cY[3];if(!cT){var c3=bW/1000;if(!cU.lastVisitTs||(cO-cU.lastVisitTs)>c3){cU.visitCount++;cU.lastVisitTs=cU.currentVisitTs}if(!a7||!cM.length){for(c0 in bY){if(Object.prototype.hasOwnProperty.call(bY,c0)){cM=N(c4,bY[c0]);if(cM.length){break}}}for(c0 in bg){if(Object.prototype.hasOwnProperty.call(bg,c0)){cE=N(c4,bg[c0]);if(cE.length){break}}}}c7=c(a1);cP=cZ.length?c(cZ):"";if(c7.length&&!aD(c7)&&(!a7||!cP.length||aD(cP))){cZ=a1}if(cZ.length||cM.length){cL=cO;cY=[cM,cE,cL,bA(cZ.slice(0,cI))];cA(cV,JSON2.stringify(cY),ct,a3,cn)}}cG+="&idsite="+bE+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+cF.getHours()+"&m="+cF.getMinutes()+"&s="+cF.getSeconds()+"&url="+n(bA(c4))+(a1.length?"&urlref="+n(bA(a1)):"")+((ba&&ba.length)?"&uid="+n(ba):"")+"&_id="+cU.uuid+"&_idts="+cU.createTs+"&_idvc="+cU.visitCount+"&_idn="+cU.newVisitor+(cM.length?"&_rcn="+n(cM):"")+(cE.length?"&_rck="+n(cE):"")+"&_refts="+cL+"&_viewts="+cU.lastVisitTs+(String(cU.lastEcommerceOrderTs).length?"&_ects="+cU.lastEcommerceOrderTs:"")+(String(cZ).length?"&_ref="+n(bA(cZ.slice(0,cI))):"")+(cR?"&cs="+n(cR):"")+"&send_image=0";
-for(c0 in cv){if(Object.prototype.hasOwnProperty.call(cv,c0)){cG+="&"+c0+"="+cv[c0]}}var c6=[];if(c1){for(c0 in c1){if(Object.prototype.hasOwnProperty.call(c1,c0)&&/^dimension\d+$/.test(c0)){var cK=c0.replace("dimension","");c6.push(parseInt(cK,10));c6.push(String(cK));cG+="&"+c0+"="+c1[c0];delete c1[c0]}}}if(c1&&u(c1)){c1=null}for(c0 in a0){if(Object.prototype.hasOwnProperty.call(a0,c0)){var cQ=(-1===E(c6,c0));if(cQ){cG+="&dimension"+c0+"="+a0[c0]}}}if(c1){cG+="&data="+n(JSON2.stringify(c1))}else{if(ac){cG+="&data="+n(JSON2.stringify(ac))}}function cN(c8,c9){var da=JSON2.stringify(c8);if(da.length>2){return"&"+c9+"="+n(da)}return""}var c5=cD(bu);var cW=cD(bT);cG+=cN(c5,"cvar");cG+=cN(cW,"e_cvar");if(ay){cG+=cN(ay,"_cvar");for(c0 in cX){if(Object.prototype.hasOwnProperty.call(cX,c0)){if(ay[c0][0]===""||ay[c0][1]===""){delete ay[c0]}}}if(bp){cA(cS,JSON2.stringify(ay),bW,a3,cn)}}if(aJ){if(bU){cG+="&gt_ms="+bU}else{if(g&&g.timing&&g.timing.requestStart&&g.timing.responseEnd){cG+="&gt_ms="+(g.timing.responseEnd-g.timing.requestStart)
-}}}if(at){cG+="&pv_id="+at}cU.lastEcommerceOrderTs=B(cH)&&String(cH).length?cH:cU.lastEcommerceOrderTs;au(cU);bL();cG+=S(c2);if(cp.length){cG+="&"+cp}if(t(bJ)){cG=bJ(cG)}return cG}bq=function aN(){var cE=new Date();if(co+aM<=cE.getTime()){var cF=bZ("ping=1",null,"ping");bf(cF,bi);return true}return false};function a4(cH,cG,cM,cI,cE,cP){var cK="idgoal=0",cL,cF=new Date(),cN=[],cO,cJ=String(cH).length;if(cJ){cK+="&ec_id="+n(cH);cL=Math.round(cF.getTime()/1000)}cK+="&revenue="+cG;if(String(cM).length){cK+="&ec_st="+cM}if(String(cI).length){cK+="&ec_tx="+cI}if(String(cE).length){cK+="&ec_sh="+cE}if(String(cP).length){cK+="&ec_dt="+cP}if(cq){for(cO in cq){if(Object.prototype.hasOwnProperty.call(cq,cO)){if(!B(cq[cO][1])){cq[cO][1]=""}if(!B(cq[cO][2])){cq[cO][2]=""}if(!B(cq[cO][3])||String(cq[cO][3]).length===0){cq[cO][3]=0}if(!B(cq[cO][4])||String(cq[cO][4]).length===0){cq[cO][4]=1}cN.push(cq[cO])}}cK+="&ec_items="+n(JSON2.stringify(cN))}cK=bZ(cK,ac,"ecommerce",cL);bf(cK,bi);if(cJ){cq={}}}function bx(cE,cI,cH,cG,cF,cJ){if(String(cE).length&&B(cI)){a4(cE,cI,cH,cG,cF,cJ)
-}}function a5(cE){if(B(cE)){a4("",cE,"","","","")}}function by(cF,cH,cG){at=aV();var cE=bZ("action_name="+n(ab(cF||aX)),cH,"log");bf(cE,bi,cG)}function aH(cG,cF){var cH,cE="(^| )(piwik[_-]"+cF;if(cG){for(cH=0;cH<cG.length;cH++){cE+="|"+cG[cH]}}cE+=")( |$)";return new RegExp(cE)}function aC(cE){return(am&&cE&&0===String(cE).indexOf(am))}function b0(cI,cE,cJ,cF){if(aC(cE)){return 0}var cH=aH(bk,"download"),cG=aH(aO,"link"),cK=new RegExp("\\.("+cu.join("|")+")([?&#]|$)","i");if(cG.test(cI)){return"link"}if(cF||cH.test(cI)||cK.test(cE)){return"download"}if(cJ){return 0}return"link"}function ag(cF){var cE;cE=cF.parentNode;while(cE!==null&&B(cE)){if(U.isLinkElement(cF)){break}cF=cE;cE=cF.parentNode}return cF}function cy(cJ){cJ=ag(cJ);if(!U.hasNodeAttribute(cJ,"href")){return}if(!B(cJ.href)){return}var cI=U.getAttributeValueFromNode(cJ,"href");if(aC(cI)){return}var cF=cJ.pathname||bS(cJ.href);var cK=cJ.hostname||c(cJ.href);var cL=cK.toLowerCase();var cG=cJ.href.replace(cK,cL);var cH=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");
-if(!cH.test(cG)){var cE=b0(cJ.className,cG,af(cL,cF),U.hasNodeAttribute(cJ,"download"));if(cE){return{type:cE,href:cG}}}}function ax(cE,cF,cG,cH){var cI=p.buildInteractionRequestParams(cE,cF,cG,cH);if(!cI){return}return bZ(cI,null,"contentInteraction")}function ce(cG,cH,cL,cE,cF){if(!B(cG)){return}if(aC(cG)){return cG}var cJ=p.toAbsoluteUrl(cG);var cI="redirecturl="+n(cJ)+"&";cI+=ax(cH,cL,cE,(cF||cG));var cK="&";if(am.indexOf("?")<0){cK="?"}return am+cK+cI}function aR(cE,cF){if(!cE||!cF){return false}var cG=p.findTargetNode(cE);if(p.shouldIgnoreInteraction(cG)){return false}cG=p.findTargetNodeNoDefault(cE);if(cG&&!M(cG,cF)){return false}return true}function b1(cG,cF,cI){if(!cG){return}var cE=p.findParentContentNode(cG);if(!cE){return}if(!aR(cE,cG)){return}var cH=p.buildContentBlock(cE);if(!cH){return}if(!cH.target&&cI){cH.target=cI}return p.buildInteractionRequestParams(cF,cH.name,cH.piece,cH.target)}function aE(cF){if(!bI||!bI.length){return false}var cE,cG;for(cE=0;cE<bI.length;cE++){cG=bI[cE];
-if(cG&&cG.name===cF.name&&cG.piece===cF.piece&&cG.target===cF.target){return true}}return false}function be(cH){if(!cH){return false}var cK=p.findTargetNode(cH);if(!cK||p.shouldIgnoreInteraction(cK)){return false}var cL=cy(cK);if(cw&&cL&&cL.type){return false}if(U.isLinkElement(cK)&&U.hasNodeAttributeWithValue(cK,"href")){var cE=String(U.getAttributeValueFromNode(cK,"href"));if(0===cE.indexOf("#")){return false}if(aC(cE)){return true}if(!p.isUrlToCurrentDomain(cE)){return false}var cI=p.buildContentBlock(cH);if(!cI){return}var cG=cI.name;var cM=cI.piece;var cJ=cI.target;if(!U.hasNodeAttributeWithValue(cK,p.CONTENT_TARGET_ATTR)||cK.wasContentTargetAttrReplaced){cK.wasContentTargetAttrReplaced=true;cJ=p.toAbsoluteUrl(cE);U.setAnyAttribute(cK,p.CONTENT_TARGET_ATTR,cJ)}var cF=ce(cE,"click",cG,cM,cJ);p.setHrefAttribute(cK,cF);return true}return false}function av(cF){if(!cF||!cF.length){return}var cE;for(cE=0;cE<cF.length;cE++){be(cF[cE])}}function aG(cE){return function(cF){if(!cE){return}var cI=p.findParentContentNode(cE);
-var cJ;if(cF){cJ=cF.target||cF.srcElement}if(!cJ){cJ=cE}if(!aR(cI,cJ)){return}bO(bi);if(U.isLinkElement(cE)&&U.hasNodeAttributeWithValue(cE,"href")&&U.hasNodeAttributeWithValue(cE,p.CONTENT_TARGET_ATTR)){var cG=U.getAttributeValueFromNode(cE,"href");if(!aC(cG)&&cE.wasContentTargetAttrReplaced){U.setAnyAttribute(cE,p.CONTENT_TARGET_ATTR,"")}}var cN=cy(cE);if(ad&&cN&&cN.type){return cN.type}if(be(cI)){return"href"}var cK=p.buildContentBlock(cI);if(!cK){return}var cH=cK.name;var cO=cK.piece;var cM=cK.target;var cL=ax("click",cH,cO,cM);bf(cL,bi);return cL}}function bz(cG){if(!cG||!cG.length){return}var cE,cF;for(cE=0;cE<cG.length;cE++){cF=p.findTargetNode(cG[cE]);if(cF&&!cF.contentInteractionTrackingSetupDone){cF.contentInteractionTrackingSetupDone=true;aa(cF,"click",aG(cF))}}}function a9(cG,cH){if(!cG||!cG.length){return[]}var cE,cF;for(cE=0;cE<cG.length;cE++){if(aE(cG[cE])){cG.splice(cE,1);cE--}else{bI.push(cG[cE])}}if(!cG||!cG.length){return[]}av(cH);bz(cH);var cI=[];for(cE=0;cE<cG.length;
-cE++){cF=bZ(p.buildImpressionRequestParams(cG[cE].name,cG[cE].piece,cG[cE].target),undefined,"contentImpressions");if(cF){cI.push(cF)}}return cI}function b5(cF){var cE=p.collectContent(cF);return a9(cE,cF)}function aP(cF){if(!cF||!cF.length){return[]}var cE;for(cE=0;cE<cF.length;cE++){if(!p.isNodeVisible(cF[cE])){cF.splice(cE,1);cE--}}if(!cF||!cF.length){return[]}return b5(cF)}function ao(cG,cE,cF){var cH=p.buildImpressionRequestParams(cG,cE,cF);return bZ(cH,null,"contentImpression")}function cz(cH,cF){if(!cH){return}var cE=p.findParentContentNode(cH);var cG=p.buildContentBlock(cE);if(!cG){return}if(!cF){cF="Unknown"}return ax(cF,cG.name,cG.piece,cG.target)}function cg(cF,cH,cE,cG){return"e_c="+n(cF)+"&e_a="+n(cH)+(B(cE)?"&e_n="+n(cE):"")+(B(cG)?"&e_v="+n(cG):"")}function ah(cG,cI,cE,cH,cK,cJ){if(String(cG).length===0||String(cI).length===0){return false}var cF=bZ(cg(cG,cI,cE,cH),cK,"event");bf(cF,bi,cJ)}function bH(cE,cH,cF,cI){var cG=bZ("search="+n(cE)+(cH?"&search_cat="+n(cH):"")+(B(cF)?"&search_count="+cF:""),cI,"sitesearch");
-bf(cG,bi)}function ck(cE,cH,cG){var cF=bZ("idgoal="+cE+(cH?"&revenue="+cH:""),cG,"goal");bf(cF,bi)}function cr(cH,cE,cL,cK,cG){var cJ=cE+"="+n(bA(cH));var cF=b1(cG,"click",cH);if(cF){cJ+="&"+cF}var cI=bZ(cJ,cL,"link");bf(cI,bi,cK)}function bs(cF,cE){if(cF!==""){return cF+cE.charAt(0).toUpperCase()+cE.slice(1)}return cE}function bP(cJ){var cI,cE,cH=["","webkit","ms","moz"],cG;if(!aU){for(cE=0;cE<cH.length;cE++){cG=cH[cE];if(Object.prototype.hasOwnProperty.call(y,bs(cG,"hidden"))){if(y[bs(cG,"visibilityState")]==="prerender"){cI=true}break}}}if(cI){aa(y,cG+"visibilitychange",function cF(){y.removeEventListener(cG+"visibilitychange",cF,false);cJ()});return}cJ()}function ar(cE){if(y.readyState==="complete"){cE()}else{if(L.addEventListener){L.addEventListener("load",cE)}else{if(L.attachEvent){L.attachEvent("onload",cE)}}}}function aS(cH){var cE=false;if(y.attachEvent){cE=y.readyState==="complete"}else{cE=y.readyState!=="loading"}if(cE){cH();return}var cG;if(y.addEventListener){aa(y,"DOMContentLoaded",function cF(){y.removeEventListener("DOMContentLoaded",cF,false);
-if(!cE){cE=true;cH()}})}else{if(y.attachEvent){y.attachEvent("onreadystatechange",function cF(){if(y.readyState==="complete"){y.detachEvent("onreadystatechange",cF);if(!cE){cE=true;cH()}}});if(y.documentElement.doScroll&&L===L.top){(function cF(){if(!cE){try{y.documentElement.doScroll("left")}catch(cI){setTimeout(cF,0);return}cE=true;cH()}}())}}}aa(L,"load",function(){if(!cE){cE=true;cH()}},false)}function cb(cE){var cF=cy(cE);if(cF&&cF.type){cF.href=k(cF.href);cr(cF.href,cF.type,undefined,null,cE)}}function b3(){return y.all&&!y.addEventListener}function cm(cE){var cG=cE.which;var cF=(typeof cE.button);if(!cG&&cF!=="undefined"){if(b3()){if(cE.button&1){cG=1}else{if(cE.button&2){cG=3}else{if(cE.button&4){cG=2}}}}else{if(cE.button===0||cE.button==="0"){cG=1}else{if(cE.button&1){cG=2}else{if(cE.button&2){cG=3}}}}}return cG}function br(cE){switch(cm(cE)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aI(cE){return cE.target||cE.srcElement}function ak(cE){return function(cH){cH=cH||L.event;
-var cG=br(cH);var cI=aI(cH);if(cH.type==="click"){var cF=false;if(cE&&cG==="middle"){cF=true}if(cI&&!cF){cb(cI)}}else{if(cH.type==="mousedown"){if(cG==="middle"&&cI){az=cG;bc=cI}else{az=bc=null}}else{if(cH.type==="mouseup"){if(cG===az&&cI===bc){cb(cI)}az=bc=null}else{if(cH.type==="contextmenu"){cb(cI)}}}}}}function ae(cF,cE){aa(cF,"click",ak(cE),false);if(cE){aa(cF,"mouseup",ak(cE),false);aa(cF,"mousedown",ak(cE),false);aa(cF,"contextmenu",ak(cE),false)}}function bd(cF){if(!ad){ad=true;var cG,cE=aH(bb,"ignore"),cH=y.links;if(cH){for(cG=0;cG<cH.length;cG++){if(!cE.test(cH[cG].className)){ae(cH[cG],cF)}}}}}function aA(cG,cI,cJ){if(bN){return true}bN=true;var cK=false;var cH,cF;function cE(){cK=true}ar(function(){function cL(cN){setTimeout(function(){if(!bN){return}cK=false;cJ.trackVisibleContentImpressions();cL(cN)},cN)}function cM(cN){setTimeout(function(){if(!bN){return}if(cK){cK=false;cJ.trackVisibleContentImpressions()}cM(cN)},cN)}if(cG){cH=["scroll","resize"];for(cF=0;cF<cH.length;cF++){if(y.addEventListener){y.addEventListener(cH[cF],cE)
-}else{L.attachEvent("on"+cH[cF],cE)}}cM(100)}if(cI&&cI>0){cI=parseInt(cI,10);cL(cI)}})}function b9(){var cF,cH,cI={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(f.userAgent))){if(f.mimeTypes&&f.mimeTypes.length){for(cF in cI){if(Object.prototype.hasOwnProperty.call(cI,cF)){cH=f.mimeTypes[cI[cF]];cv[cF]=(cH&&cH.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&B(f.javaEnabled)&&f.javaEnabled()){cv.java="1"}if(t(L.GearsFactory)){cv.gears="1"}cv.cookie=bD()}var cG=parseInt(P.width,10);var cE=parseInt(P.height,10);cv.res=parseInt(cG,10)+"x"+parseInt(cE,10)}b9();aW();au();this.getVisitorId=function(){return aF().uuid};this.getVisitorInfo=function(){return cf()};this.getAttributionInfo=function(){return bl()};this.getAttributionCampaignName=function(){return bl()[0]
-};this.getAttributionCampaignKeyword=function(){return bl()[1]};this.getAttributionReferrerTimestamp=function(){return bl()[2]};this.getAttributionReferrerUrl=function(){return bl()[3]};this.setTrackerUrl=function(cE){am=cE};this.getTrackerUrl=function(){return am};this.addTracker=function(cE,cG){if(!cG){throw new Error("A siteId must be given to add a new tracker")}if(!B(cE)||null===cE){cE=this.getTrackerUrl()}var cF=new I(cE,cG);A.push(cF);return cF};this.getSiteId=function(){return bE};this.setSiteId=function(cE){bB(cE)};this.setUserId=function(cE){if(!B(cE)||!cE.length){return}ba=cE;bn=bF(ba).substr(0,16)};this.getUserId=function(){return ba};this.setCustomData=function(cE,cF){if(O(cE)){ac=cE}else{if(!ac){ac={}}ac[cE]=cF}};this.getCustomData=function(){return ac};this.setCustomRequestProcessing=function(cE){bJ=cE};this.appendToTrackingUrl=function(cE){cp=cE};this.getRequest=function(cE){return bZ(cE)};this.addPlugin=function(cE,cF){a[cE]=cF};this.setCustomDimension=function(cE,cF){cE=parseInt(cE,10);
-if(cE>0){if(!B(cF)){cF=""}if(!q(cF)){cF=String(cF)}a0[cE]=cF}};this.getCustomDimension=function(cE){cE=parseInt(cE,10);if(cE>0&&Object.prototype.hasOwnProperty.call(a0,cE)){return a0[cE]}};this.deleteCustomDimension=function(cE){cE=parseInt(cE,10);if(cE>0){delete a0[cE]}};this.setCustomVariable=function(cF,cE,cI,cG){var cH;if(!B(cG)){cG="visit"}if(!B(cE)){return}if(!B(cI)){cI=""}if(cF>0){cE=!q(cE)?String(cE):cE;cI=!q(cI)?String(cI):cI;cH=[cE.slice(0,a6),cI.slice(0,a6)];if(cG==="visit"||cG===2){b8();ay[cF]=cH}else{if(cG==="page"||cG===3){bu[cF]=cH}else{if(cG==="event"){bT[cF]=cH}}}}};this.getCustomVariable=function(cF,cG){var cE;if(!B(cG)){cG="visit"}if(cG==="page"||cG===3){cE=bu[cF]}else{if(cG==="event"){cE=bT[cF]}else{if(cG==="visit"||cG===2){b8();cE=ay[cF]}}}if(!B(cE)||(cE&&cE[0]==="")){return false}return cE};this.deleteCustomVariable=function(cE,cF){if(this.getCustomVariable(cE,cF)){this.setCustomVariable(cE,"","",cF)}};this.storeCustomVariablesInCookie=function(){bp=true};this.setLinkTrackingTimer=function(cE){bi=cE
-};this.setDownloadExtensions=function(cE){if(q(cE)){cE=cE.split("|")}cu=cE};this.addDownloadExtensions=function(cF){var cE;if(q(cF)){cF=cF.split("|")}for(cE=0;cE<cF.length;cE++){cu.push(cF[cE])}};this.removeDownloadExtensions=function(cG){var cF,cE=[];if(q(cG)){cG=cG.split("|")}for(cF=0;cF<cu.length;cF++){if(E(cG,cu[cF])===-1){cE.push(cu[cF])}}cu=cE};this.setDomains=function(cE){ai=q(cE)?[cE]:cE;var cI=false,cG=0,cF;for(cG;cG<ai.length;cG++){cF=String(ai[cG]);if(ca(cl,D(cF))){cI=true;break}var cH=bS(cF);if(cH&&cH!=="/"&&cH!=="/*"){cI=true;break}}if(!cI){ai.push(cl)}};this.setIgnoreClasses=function(cE){bb=q(cE)?[cE]:cE};this.setRequestMethod=function(cE){cx=cE||bQ};this.setRequestContentType=function(cE){b2=cE||aq};this.setReferrerUrl=function(cE){a1=cE};this.setCustomUrl=function(cE){aL=bt(bm,cE)};this.setDocumentTitle=function(cE){aX=cE};this.setAPIUrl=function(cE){bh=cE};this.setDownloadClasses=function(cE){bk=q(cE)?[cE]:cE};this.setLinkClasses=function(cE){aO=q(cE)?[cE]:cE};this.setCampaignNameKey=function(cE){bY=q(cE)?[cE]:cE
-};this.setCampaignKeywordKey=function(cE){bg=q(cE)?[cE]:cE};this.discardHashTag=function(cE){bo=cE};this.setCookieNamePrefix=function(cE){aY=cE;ay=bv()};this.setCookieDomain=function(cE){var cF=D(cE);if(a8(cF)){cn=cF;aW()}};this.setCookiePath=function(cE){a3=cE;aW()};this.setVisitorCookieTimeout=function(cE){cd=cE*1000};this.setSessionCookieTimeout=function(cE){bW=cE*1000};this.setReferralCookieTimeout=function(cE){ct=cE*1000};this.setConversionAttributionFirstReferrer=function(cE){a7=cE};this.disableCookies=function(){aZ=true;cv.cookie="0";if(bE){an()}};this.deleteCookies=function(){an()};this.setDoNotTrack=function(cF){var cE=f.doNotTrack||f.msDoNotTrack;ch=cF&&(cE==="yes"||cE==="1");if(ch){this.disableCookies()}};this.addListener=function(cF,cE){ae(cF,cE)};this.enableLinkTracking=function(cE){cw=true;bP(function(){aS(function(){bd(cE)})})};this.enableJSErrorTracking=function(){if(cj){return}cj=true;var cE=L.onerror;L.onerror=function(cJ,cH,cG,cI,cF){bP(function(){var cK="JavaScript Errors";
-var cL=cH+":"+cG;if(cI){cL+=":"+cI}ah(cK,cL,cJ)});if(cE){return cE(cJ,cH,cG,cI,cF)}return false}};this.disablePerformanceTracking=function(){aJ=false};this.setGenerationTimeMs=function(cE){bU=parseInt(cE,10)};this.enableHeartBeatTimer=function(cE){cE=Math.max(cE,1);aM=(cE||15)*1000;if(co!==null){cC()}};this.killFrame=function(){if(L.location!==L.top.location){L.top.location=L.location}};this.redirectFile=function(cE){if(L.location.protocol==="file:"){L.location=cE}};this.setCountPreRendered=function(cE){aU=cE};this.trackGoal=function(cE,cG,cF){bP(function(){ck(cE,cG,cF)})};this.trackLink=function(cF,cE,cH,cG){bP(function(){cr(cF,cE,cH,cG)})};this.trackPageView=function(cE,cG,cF){bI=[];if(F(bE)){bP(function(){Q(am,bh,bE)})}else{bP(function(){by(cE,cG,cF)})}};this.trackAllContentImpressions=function(){if(F(bE)){return}bP(function(){aS(function(){var cE=p.findContentNodes();var cF=b5(cE);cB(cF,bi)})})};this.trackVisibleContentImpressions=function(cE,cF){if(F(bE)){return}if(!B(cE)){cE=true}if(!B(cF)){cF=750
-}aA(cE,cF,this);bP(function(){ar(function(){var cG=p.findContentNodes();var cH=aP(cG);cB(cH,bi)})})};this.trackContentImpression=function(cG,cE,cF){if(F(bE)){return}if(!cG){return}cE=cE||"Unknown";bP(function(){var cH=ao(cG,cE,cF);bf(cH,bi)})};this.trackContentImpressionsWithinNode=function(cE){if(F(bE)||!cE){return}bP(function(){if(bN){ar(function(){var cF=p.findContentNodesWithinNode(cE);var cG=aP(cF);cB(cG,bi)})}else{aS(function(){var cF=p.findContentNodesWithinNode(cE);var cG=b5(cF);cB(cG,bi)})}})};this.trackContentInteraction=function(cG,cH,cE,cF){if(F(bE)){return}if(!cG||!cH){return}cE=cE||"Unknown";bP(function(){var cI=ax(cG,cH,cE,cF);bf(cI,bi)})};this.trackContentInteractionNode=function(cF,cE){if(F(bE)||!cF){return}bP(function(){var cG=cz(cF,cE);bf(cG,bi)})};this.logAllContentBlocksOnPage=function(){var cF=p.findContentNodes();var cE=p.collectContent(cF);if(console!==undefined&&console&&console.log){console.log(cE)}};this.trackEvent=function(cF,cH,cE,cG,cJ,cI){bP(function(){ah(cF,cH,cE,cG,cJ,cI)
-})};this.trackSiteSearch=function(cE,cG,cF,cH){bP(function(){bH(cE,cG,cF,cH)})};this.setEcommerceView=function(cH,cE,cG,cF){if(!B(cG)||!cG.length){cG=""}else{if(cG instanceof Array){cG=JSON2.stringify(cG)}}bu[5]=["_pkc",cG];if(B(cF)&&String(cF).length){bu[2]=["_pkp",cF]}if((!B(cH)||!cH.length)&&(!B(cE)||!cE.length)){return}if(B(cH)&&cH.length){bu[3]=["_pks",cH]}if(!B(cE)||!cE.length){cE=""}bu[4]=["_pkn",cE]};this.addEcommerceItem=function(cI,cE,cG,cF,cH){if(cI.length){cq[cI]=[cI,cE,cG,cF,cH]}};this.trackEcommerceOrder=function(cE,cI,cH,cG,cF,cJ){bx(cE,cI,cH,cG,cF,cJ)};this.trackEcommerceCartUpdate=function(cE){a5(cE)};this.trackRequest=function(cE,cG,cF){bP(function(){var cH=bZ(cE,cG);bf(cH,bi,cF)})};d.trigger("TrackerSetup",[this])}function z(){return{push:V}}function b(ah,ag){var ai={};var ae,af;for(ae=0;ae<ag.length;ae++){var ac=ag[ae];ai[ac]=1;for(af=0;af<ah.length;af++){if(ah[af]&&ah[af][0]){var ad=ah[af][0];if(ac===ad){V(ah[af]);delete ah[af];if(ai[ad]>1){Y("The method "+ad+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')
-}ai[ad]++}}}}return ah}var v=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"];function T(ac,ae){var ad=new I(ac,ae);A.push(ad);_paq=b(_paq,v);for(x=0;x<_paq.length;x++){if(_paq[x]){V(_paq[x])}}_paq=new z();return ad}aa(L,"beforeunload",W,false);Date.prototype.getTimeAlias=Date.prototype.getTime;d={initialized:false,on:function(ad,ac){if(!r[ad]){r[ad]=[]}r[ad].push(ac)},off:function(ae,ad){if(!r[ae]){return}var ac=0;for(ac;ac<r[ae].length;ac++){if(r[ae][ac]===ad){delete r[ae][ac]}}},trigger:function(ae,af,ad){if(!r[ae]){return}var ac=0;for(ac;ac<r[ae].length;ac++){r[ae][ac].apply(ad||L,af)}},addPlugin:function(ac,ad){a[ac]=ad},getTracker:function(ac,ad){if(!B(ad)){ad=this.getAsyncTracker().getSiteId()}if(!B(ac)){ac=this.getAsyncTracker().getTrackerUrl()}return new I(ac,ad)},getAsyncTrackers:function(){return A},addTracker:function(ac,ad){if(!A.length){T(ac,ad)}else{A[0].addTracker(ac,ad)
-}},getAsyncTracker:function(ad,ag){var af;if(A&&A[0]){af=A[0]}if(!ag&&!ad){return af}if((!B(ag)||null===ag)&&af){ag=af.getSiteId()}if((!B(ad)||null===ad)&&af){ad=af.getTrackerUrl()}var ae,ac=0;for(ac;ac<A.length;ac++){ae=A[ac];if(ae&&String(ae.getSiteId())===String(ag)&&ae.getTrackerUrl()===ad){return ae}}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return d})}return d}());
+if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON2=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var n,a={},t={},A=document,f=navigator,R=screen,N=window,g=N.performance||N.mozPerformance||N.msPerformance||N.webkitPerformance,p=N.encodeURIComponent,M=N.decodeURIComponent,i=unescape,C=[],z,d,Y=[];
+function l(af){try{return M(af)}catch(ag){return unescape(af)}}function D(ag){var af=typeof ag;return af!=="undefined"}function v(af){return typeof af==="function"}function Q(af){return typeof af==="object"}function s(af){return typeof af==="string"||af instanceof String}function w(ag){if(!ag){return true}var af;var ah=true;for(af in ag){if(Object.prototype.hasOwnProperty.call(ag,af)){ah=false}}return ah}function ab(af){if(console!==undefined&&console&&console.error){console.error(af)}}function X(){var ak,aj,am,ag,af;for(ak=0;ak<arguments.length;ak+=1){af=null;if(arguments[ak]&&arguments[ak].slice){af=arguments[ak].slice()}ag=arguments[ak];am=ag.shift();var al,ah;var ai=s(am)&&am.indexOf("::")>0;if(ai){al=am.split("::");ah=al[0];am=al[1];if("object"===typeof d[ah]&&"function"===typeof d[ah][am]){d[ah][am].apply(d[ah],ag)}else{if(af){Y.push(af)}}}else{for(aj=0;aj<C.length;aj++){if(s(am)){ah=C[aj];var an=am.indexOf(".")>0;if(an){al=am.split(".");if(ah&&"object"===typeof ah[al[0]]){ah=ah[al[0]];
+am=al[1]}else{if(af){Y.push(af);break}}}if(ah[am]){ah[am].apply(ah,ag)}else{var ao="The method '"+am+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript';ab(ao);if(!an){throw new TypeError(ao)}}if(am==="addTracker"){break}if(am==="setTrackerUrl"||am==="setSiteId"){break}}else{am.apply(C[aj],ag)}}}}}function ae(ai,ah,ag,af){if(ai.addEventListener){ai.addEventListener(ah,ag,af);return true}if(ai.attachEvent){return ai.attachEvent("on"+ah,ag)}ai["on"+ah]=ag}function j(af){if(A.readyState==="complete"){af()}else{if(N.addEventListener){N.addEventListener("load",af)}else{if(N.attachEvent){N.attachEvent("onload",af)}}}}function m(ai){var af=false;if(A.attachEvent){af=A.readyState==="complete"}else{af=A.readyState!=="loading"}if(af){ai();return}var ah;if(A.addEventListener){ae(A,"DOMContentLoaded",function ag(){A.removeEventListener("DOMContentLoaded",ag,false);if(!af){af=true;ai()}})}else{if(A.attachEvent){A.attachEvent("onreadystatechange",function ag(){if(A.readyState==="complete"){A.detachEvent("onreadystatechange",ag);
+if(!af){af=true;ai()}}});if(A.documentElement.doScroll&&N===N.top){(function ag(){if(!af){try{A.documentElement.doScroll("left")}catch(aj){setTimeout(ag,0);return}af=true;ai()}}())}}}ae(N,"load",function(){if(!af){af=true;ai()}},false)}function U(ag,ak){var af="",ai,ah,aj;for(ai in a){if(Object.prototype.hasOwnProperty.call(a,ai)){ah=a[ai][ag];if(v(ah)){aj=ah(ak);if(aj){af+=aj}}}}return af}function Z(){var af;U("unload");if(n){do{af=new Date()}while(af.getTimeAlias()<n)}}function k(ah,ag){var af=A.createElement("script");af.type="text/javascript";af.src=ah;if(af.readyState){af.onreadystatechange=function(){var ai=this.readyState;if(ai==="loaded"||ai==="complete"){af.onreadystatechange=null;ag()}}}else{af.onload=ag}A.getElementsByTagName("head")[0].appendChild(af)}function E(){var af="";try{af=N.top.document.referrer}catch(ah){if(N.parent){try{af=N.parent.document.referrer}catch(ag){af=""}}}if(af===""){af=A.referrer}return af}function o(af){var ah=new RegExp("^([a-z]+):"),ag=ah.exec(af);
+return ag?ag[1]:null}function c(af){var ah=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),ag=ah.exec(af);return ag?ag[1]:af}function P(ah,ag){var af="[\\?&#]"+ag+"=([^&#]*)";var aj=new RegExp(af);var ai=aj.exec(ah);return ai?M(ai[1]):""}function y(af){return unescape(p(af))}function ad(av){var ah=function(aB,aA){return(aB<<aA)|(aB>>>(32-aA))},aw=function(aD){var aB="",aC,aA;for(aC=7;aC>=0;aC--){aA=(aD>>>(aC*4))&15;aB+=aA.toString(16)}return aB},ak,ay,ax,ag=[],ao=1732584193,am=4023233417,al=2562383102,aj=271733878,ai=3285377520,au,at,ar,aq,ap,az,af,an=[];av=y(av);af=av.length;for(ay=0;ay<af-3;ay+=4){ax=av.charCodeAt(ay)<<24|av.charCodeAt(ay+1)<<16|av.charCodeAt(ay+2)<<8|av.charCodeAt(ay+3);an.push(ax)}switch(af&3){case 0:ay=2147483648;break;case 1:ay=av.charCodeAt(af-1)<<24|8388608;break;case 2:ay=av.charCodeAt(af-2)<<24|av.charCodeAt(af-1)<<16|32768;break;case 3:ay=av.charCodeAt(af-3)<<24|av.charCodeAt(af-2)<<16|av.charCodeAt(af-1)<<8|128;break}an.push(ay);while((an.length&15)!==14){an.push(0)
+}an.push(af>>>29);an.push((af<<3)&4294967295);for(ak=0;ak<an.length;ak+=16){for(ay=0;ay<16;ay++){ag[ay]=an[ak+ay]}for(ay=16;ay<=79;ay++){ag[ay]=ah(ag[ay-3]^ag[ay-8]^ag[ay-14]^ag[ay-16],1)}au=ao;at=am;ar=al;aq=aj;ap=ai;for(ay=0;ay<=19;ay++){az=(ah(au,5)+((at&ar)|(~at&aq))+ap+ag[ay]+1518500249)&4294967295;ap=aq;aq=ar;ar=ah(at,30);at=au;au=az}for(ay=20;ay<=39;ay++){az=(ah(au,5)+(at^ar^aq)+ap+ag[ay]+1859775393)&4294967295;ap=aq;aq=ar;ar=ah(at,30);at=au;au=az}for(ay=40;ay<=59;ay++){az=(ah(au,5)+((at&ar)|(at&aq)|(ar&aq))+ap+ag[ay]+2400959708)&4294967295;ap=aq;aq=ar;ar=ah(at,30);at=au;au=az}for(ay=60;ay<=79;ay++){az=(ah(au,5)+(at^ar^aq)+ap+ag[ay]+3395469782)&4294967295;ap=aq;aq=ar;ar=ah(at,30);at=au;au=az}ao=(ao+au)&4294967295;am=(am+at)&4294967295;al=(al+ar)&4294967295;aj=(aj+aq)&4294967295;ai=(ai+ap)&4294967295}az=aw(ao)+aw(am)+aw(al)+aw(aj)+aw(ai);return az.toLowerCase()}function T(ah,af,ag){if(!ah){ah=""}if(!af){af=""}if(ah==="translate.googleusercontent.com"){if(ag===""){ag=af}af=P(af,"u");
+ah=c(af)}else{if(ah==="cc.bingj.com"||ah==="webcache.googleusercontent.com"||ah.slice(0,5)==="74.6."){af=A.links[0].href;ah=c(af)}}return[ah,af,ag]}function F(ag){var af=ag.length;if(ag.charAt(--af)==="."){ag=ag.slice(0,af)}if(ag.slice(0,2)==="*."){ag=ag.slice(1)}if(ag.indexOf("/")!==-1){ag=ag.substr(0,ag.indexOf("/"))}return ag}function ac(ag){ag=ag&&ag.text?ag.text:ag;if(!s(ag)){var af=A.getElementsByTagName("title");if(af&&D(af[0])){ag=af[0].text}}return ag}function J(af){if(!af){return[]}if(!D(af.children)&&D(af.childNodes)){return af.children}if(D(af.children)){return af.children}return[]}function O(ag,af){if(!ag||!af){return false}if(ag.contains){return ag.contains(af)}if(ag===af){return true}if(ag.compareDocumentPosition){return !!(ag.compareDocumentPosition(af)&16)}return false}function G(ah,ai){if(ah&&ah.indexOf){return ah.indexOf(ai)}if(!D(ah)||ah===null){return -1}if(!ah.length){return -1}var af=ah.length;if(af===0){return -1}var ag=0;while(ag<af){if(ah[ag]===ai){return ag}ag++
+}return -1}function aa(ag,af){ag=String(ag);return ag.lastIndexOf(af,0)===0}function L(ag,af){ag=String(ag);return ag.indexOf(af,ag.length-af.length)!==-1}function u(ag,af){ag=String(ag);return ag.indexOf(af)!==-1}function e(ag,af){ag=String(ag);return ag.substr(0,ag.length-af)}function h(ah){if(!ah){return false}function af(aj,ak){if(N.getComputedStyle){return A.defaultView.getComputedStyle(aj,null)[ak]}if(aj.currentStyle){return aj.currentStyle[ak]}}function ai(aj){aj=aj.parentNode;while(aj){if(aj===A){return true}aj=aj.parentNode}return false}function ag(al,ar,aj,ao,am,ap,an){var ak=al.parentNode,aq=1;if(!ai(al)){return false}if(9===ak.nodeType){return true}if("0"===af(al,"opacity")||"none"===af(al,"display")||"hidden"===af(al,"visibility")){return false}if(!D(ar)||!D(aj)||!D(ao)||!D(am)||!D(ap)||!D(an)){ar=al.offsetTop;am=al.offsetLeft;ao=ar+al.offsetHeight;aj=am+al.offsetWidth;ap=al.offsetWidth;an=al.offsetHeight}if(ah===al&&(0===an||0===ap)&&"hidden"===af(al,"overflow")){return false
+}if(ak){if(("hidden"===af(ak,"overflow")||"scroll"===af(ak,"overflow"))){if(am+aq>ak.offsetWidth+ak.scrollLeft||am+ap-aq<ak.scrollLeft||ar+aq>ak.offsetHeight+ak.scrollTop||ar+an-aq<ak.scrollTop){return false}}if(al.offsetParent===ak){am+=ak.offsetLeft;ar+=ak.offsetTop}return ag(ak,ar,aj,ao,am,ap,an)}return true}return ag(ah)}var W={htmlCollectionToArray:function(ah){var af=[],ag;if(!ah||!ah.length){return af}for(ag=0;ag<ah.length;ag++){af.push(ah[ag])}return af},find:function(af){if(!document.querySelectorAll||!af){return[]}var ag=document.querySelectorAll(af);return this.htmlCollectionToArray(ag)},findMultiple:function(ah){if(!ah||!ah.length){return[]}var ag,ai;var af=[];for(ag=0;ag<ah.length;ag++){ai=this.find(ah[ag]);af=af.concat(ai)}af=this.makeNodesUnique(af);return af},findNodesByTagName:function(ag,af){if(!ag||!af||!ag.getElementsByTagName){return[]}var ah=ag.getElementsByTagName(af);return this.htmlCollectionToArray(ah)},makeNodesUnique:function(af){var ak=[].concat(af);af.sort(function(am,al){if(am===al){return 0
+}var ao=G(ak,am);var an=G(ak,al);if(ao===an){return 0}return ao>an?-1:1});if(af.length<=1){return af}var ag=0;var ai=0;var aj=[];var ah;ah=af[ag++];while(ah){if(ah===af[ag]){ai=aj.push(ag)}ah=af[ag++]||null}while(ai--){af.splice(aj[ai],1)}return af},getAttributeValueFromNode:function(aj,ah){if(!this.hasNodeAttribute(aj,ah)){return}if(aj&&aj.getAttribute){return aj.getAttribute(ah)}if(!aj||!aj.attributes){return}var ai=(typeof aj.attributes[ah]);if("undefined"===ai){return}if(aj.attributes[ah].value){return aj.attributes[ah].value}if(aj.attributes[ah].nodeValue){return aj.attributes[ah].nodeValue}var ag;var af=aj.attributes;if(!af){return}for(ag=0;ag<af.length;ag++){if(af[ag].nodeName===ah){return af[ag].nodeValue}}return null},hasNodeAttributeWithValue:function(ag,af){var ah=this.getAttributeValueFromNode(ag,af);return !!ah},hasNodeAttribute:function(ah,af){if(ah&&ah.hasAttribute){return ah.hasAttribute(af)}if(ah&&ah.attributes){var ag=(typeof ah.attributes[af]);return"undefined"!==ag}return false
+},hasNodeCssClass:function(ah,af){if(ah&&af&&ah.className){var ag=typeof ah.className==="string"?ah.className.split(" "):[];if(-1!==G(ag,af)){return true}}return false},findNodesHavingAttribute:function(aj,ah,af){if(!af){af=[]}if(!aj||!ah){return af}var ai=J(aj);if(!ai||!ai.length){return af}var ag,ak;for(ag=0;ag<ai.length;ag++){ak=ai[ag];if(this.hasNodeAttribute(ak,ah)){af.push(ak)}af=this.findNodesHavingAttribute(ak,ah,af)}return af},findFirstNodeHavingAttribute:function(ah,ag){if(!ah||!ag){return}if(this.hasNodeAttribute(ah,ag)){return ah}var af=this.findNodesHavingAttribute(ah,ag);if(af&&af.length){return af[0]}},findFirstNodeHavingAttributeWithValue:function(ai,ah){if(!ai||!ah){return}if(this.hasNodeAttributeWithValue(ai,ah)){return ai}var af=this.findNodesHavingAttribute(ai,ah);if(!af||!af.length){return}var ag;for(ag=0;ag<af.length;ag++){if(this.getAttributeValueFromNode(af[ag],ah)){return af[ag]}}},findNodesHavingCssClass:function(aj,ai,af){if(!af){af=[]}if(!aj||!ai){return af}if(aj.getElementsByClassName){var ak=aj.getElementsByClassName(ai);
+return this.htmlCollectionToArray(ak)}var ah=J(aj);if(!ah||!ah.length){return[]}var ag,al;for(ag=0;ag<ah.length;ag++){al=ah[ag];if(this.hasNodeCssClass(al,ai)){af.push(al)}af=this.findNodesHavingCssClass(al,ai,af)}return af},findFirstNodeHavingClass:function(ah,ag){if(!ah||!ag){return}if(this.hasNodeCssClass(ah,ag)){return ah}var af=this.findNodesHavingCssClass(ah,ag);if(af&&af.length){return af[0]}},isLinkElement:function(ag){if(!ag){return false}var af=String(ag.nodeName).toLowerCase();var ai=["a","area"];var ah=G(ai,af);return ah!==-1},setAnyAttribute:function(ag,af,ah){if(!ag||!af){return}if(ag.setAttribute){ag.setAttribute(af,ah)}else{ag[af]=ah}}};var r={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var ag="."+this.CONTENT_CLASS;
+var af="["+this.CONTENT_ATTR+"]";var ah=W.findMultiple([ag,af]);return ah},findContentNodesWithinNode:function(ai){if(!ai){return[]}var ag=W.findNodesHavingCssClass(ai,this.CONTENT_CLASS);var af=W.findNodesHavingAttribute(ai,this.CONTENT_ATTR);if(af&&af.length){var ah;for(ah=0;ah<af.length;ah++){ag.push(af[ah])}}if(W.hasNodeAttribute(ai,this.CONTENT_ATTR)){ag.push(ai)}else{if(W.hasNodeCssClass(ai,this.CONTENT_CLASS)){ag.push(ai)}}ag=W.makeNodesUnique(ag);return ag},findParentContentNode:function(ag){if(!ag){return}var ah=ag;var af=0;while(ah&&ah!==A&&ah.parentNode){if(W.hasNodeAttribute(ah,this.CONTENT_ATTR)){return ah}if(W.hasNodeCssClass(ah,this.CONTENT_CLASS)){return ah}ah=ah.parentNode;if(af>1000){break}af++}},findPieceNode:function(ag){var af;af=W.findFirstNodeHavingAttribute(ag,this.CONTENT_PIECE_ATTR);if(!af){af=W.findFirstNodeHavingClass(ag,this.CONTENT_PIECE_CLASS)}if(af){return af}return ag},findTargetNodeNoDefault:function(af){if(!af){return}var ag=W.findFirstNodeHavingAttributeWithValue(af,this.CONTENT_TARGET_ATTR);
+if(ag){return ag}ag=W.findFirstNodeHavingAttribute(af,this.CONTENT_TARGET_ATTR);if(ag){return ag}ag=W.findFirstNodeHavingClass(af,this.CONTENT_TARGET_CLASS);if(ag){return ag}},findTargetNode:function(af){var ag=this.findTargetNodeNoDefault(af);if(ag){return ag}return af},findContentName:function(ag){if(!ag){return}var aj=W.findFirstNodeHavingAttributeWithValue(ag,this.CONTENT_NAME_ATTR);if(aj){return W.getAttributeValueFromNode(aj,this.CONTENT_NAME_ATTR)}var af=this.findContentPiece(ag);if(af){return this.removeDomainIfIsInLink(af)}if(W.hasNodeAttributeWithValue(ag,"title")){return W.getAttributeValueFromNode(ag,"title")}var ah=this.findPieceNode(ag);if(W.hasNodeAttributeWithValue(ah,"title")){return W.getAttributeValueFromNode(ah,"title")}var ai=this.findTargetNode(ag);if(W.hasNodeAttributeWithValue(ai,"title")){return W.getAttributeValueFromNode(ai,"title")}},findContentPiece:function(ag){if(!ag){return}var ai=W.findFirstNodeHavingAttributeWithValue(ag,this.CONTENT_PIECE_ATTR);if(ai){return W.getAttributeValueFromNode(ai,this.CONTENT_PIECE_ATTR)
+}var af=this.findPieceNode(ag);var ah=this.findMediaUrlInNode(af);if(ah){return this.toAbsoluteUrl(ah)}},findContentTarget:function(ah){if(!ah){return}var ai=this.findTargetNode(ah);if(W.hasNodeAttributeWithValue(ai,this.CONTENT_TARGET_ATTR)){return W.getAttributeValueFromNode(ai,this.CONTENT_TARGET_ATTR)}var ag;if(W.hasNodeAttributeWithValue(ai,"href")){ag=W.getAttributeValueFromNode(ai,"href");return this.toAbsoluteUrl(ag)}var af=this.findPieceNode(ah);if(W.hasNodeAttributeWithValue(af,"href")){ag=W.getAttributeValueFromNode(af,"href");return this.toAbsoluteUrl(ag)}},isSameDomain:function(af){if(!af||!af.indexOf){return false}if(0===af.indexOf(this.getLocation().origin)){return true}var ag=af.indexOf(this.getLocation().host);if(8>=ag&&0<=ag){return true}return false},removeDomainIfIsInLink:function(ah){var ag="^https?://[^/]+";var af="^.*//[^/]+";if(ah&&ah.search&&-1!==ah.search(new RegExp(ag))&&this.isSameDomain(ah)){ah=ah.replace(new RegExp(af),"");if(!ah){ah="/"}}return ah},findMediaUrlInNode:function(aj){if(!aj){return
+}var ah=["img","embed","video","audio"];var af=aj.nodeName.toLowerCase();if(-1!==G(ah,af)&&W.findFirstNodeHavingAttributeWithValue(aj,"src")){var ai=W.findFirstNodeHavingAttributeWithValue(aj,"src");return W.getAttributeValueFromNode(ai,"src")}if(af==="object"&&W.hasNodeAttributeWithValue(aj,"data")){return W.getAttributeValueFromNode(aj,"data")}if(af==="object"){var ak=W.findNodesByTagName(aj,"param");if(ak&&ak.length){var ag;for(ag=0;ag<ak.length;ag++){if("movie"===W.getAttributeValueFromNode(ak[ag],"name")&&W.hasNodeAttributeWithValue(ak[ag],"value")){return W.getAttributeValueFromNode(ak[ag],"value")}}}var al=W.findNodesByTagName(aj,"embed");if(al&&al.length){return this.findMediaUrlInNode(al[0])}}},trim:function(af){if(af&&String(af)===af){return af.replace(/^\s+|\s+$/g,"")}return af},isOrWasNodeInViewport:function(ak){if(!ak||!ak.getBoundingClientRect||ak.nodeType!==1){return true}var aj=ak.getBoundingClientRect();var ai=A.documentElement||{};var ah=aj.top<0;if(ah&&ak.offsetTop){ah=(ak.offsetTop+aj.height)>0
+}var ag=ai.clientWidth;if(N.innerWidth&&ag>N.innerWidth){ag=N.innerWidth}var af=ai.clientHeight;if(N.innerHeight&&af>N.innerHeight){af=N.innerHeight}return((aj.bottom>0||ah)&&aj.right>0&&aj.left<ag&&((aj.top<af)||ah))},isNodeVisible:function(ag){var af=h(ag);var ah=this.isOrWasNodeInViewport(ag);return af&&ah},buildInteractionRequestParams:function(af,ag,ah,ai){var aj="";if(af){aj+="c_i="+p(af)}if(ag){if(aj){aj+="&"}aj+="c_n="+p(ag)}if(ah){if(aj){aj+="&"}aj+="c_p="+p(ah)}if(ai){if(aj){aj+="&"}aj+="c_t="+p(ai)}return aj},buildImpressionRequestParams:function(af,ag,ah){var ai="c_n="+p(af)+"&c_p="+p(ag);if(ah){ai+="&c_t="+p(ah)}return ai},buildContentBlock:function(ah){if(!ah){return}var af=this.findContentName(ah);var ag=this.findContentPiece(ah);var ai=this.findContentTarget(ah);af=this.trim(af);ag=this.trim(ag);ai=this.trim(ai);return{name:af||"Unknown",piece:ag||"Unknown",target:ai||""}},collectContent:function(ai){if(!ai||!ai.length){return[]}var ah=[];var af,ag;for(af=0;af<ai.length;
+af++){ag=this.buildContentBlock(ai[af]);if(D(ag)){ah.push(ag)}}return ah},setLocation:function(af){this.location=af},getLocation:function(){var af=this.location||N.location;if(!af.origin){af.origin=af.protocol+"//"+af.hostname+(af.port?":"+af.port:"")}return af},toAbsoluteUrl:function(ag){if((!ag||String(ag)!==ag)&&ag!==""){return ag}if(""===ag){return this.getLocation().href}if(ag.search(/^\/\//)!==-1){return this.getLocation().protocol+ag}if(ag.search(/:\/\//)!==-1){return ag}if(0===ag.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ag}if(0===ag.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ag}if(0===ag.search("^[a-zA-Z]{2,11}:")){return ag}if(ag.search(/^\//)!==-1){return this.getLocation().origin+ag}var af="(.*/)";var ah=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(af))[0];return ah+ag},isUrlToCurrentDomain:function(ag){var ah=this.toAbsoluteUrl(ag);if(!ah){return false}var af=this.getLocation().origin;
+if(af===ah){return true}if(0===String(ah).indexOf(af)){if(":"===String(ah).substr(af.length,1)){return false}return true}return false},setHrefAttribute:function(ag,af){if(!ag||!af){return}W.setAnyAttribute(ag,"href",af)},shouldIgnoreInteraction:function(ah){var ag=W.hasNodeAttribute(ah,this.CONTENT_IGNOREINTERACTION_ATTR);var af=W.hasNodeCssClass(ah,this.CONTENT_IGNOREINTERACTION_CLASS);return ag||af}};function I(ag,aj){if(aj){return aj}if(u(ag,"?")){var ai=ag.indexOf("?");ag=ag.slice(0,ai)}if(L(ag,"piwik.php")){ag=e(ag,"piwik.php".length)}else{if(L(ag,".php")){var af=ag.lastIndexOf("/");var ah=1;ag=ag.slice(0,af+ah)}}if(L(ag,"/js/")){ag=e(ag,"js/".length)}return ag}function H(al){var an="Piwik_Overlay";var ag=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var ah=ag.exec(A.referrer);if(ah){var aj=ah[1];if(aj!==String(al)){return false}var ak=ah[2],af=ah[3],ai=ah[4];if(!ai){ai=""}else{if(ai.indexOf("&segment=")===0){ai=ai.substr("&segment=".length)
+}}N.name=an+"###"+ak+"###"+af+"###"+ai}var am=N.name.split("###");return am.length===4&&am[0]===an}function S(ag,am,ai){var al=N.name.split("###"),ak=al[1],af=al[2],aj=al[3],ah=I(ag,am);k(ah+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(ah,ai,ak,af,aj)})}function q(){var ah;try{ah=N.frameElement}catch(ag){return true}if(D(ah)){return(ah&&String(ah.nodeName).toLowerCase()==="iframe")?true:false}try{return N.self!==N.top}catch(af){return true}}function K(bN,bH){var bD=T(A.domain,N.location.href,E()),cm=F(bD[0]),bn=l(bD[1]),a2=l(bD[2]),ck=false,bR="GET",cy=bR,au="application/x-www-form-urlencoded; charset=UTF-8",b3=au,ap=bN||"",bi="",cq="",bF=bH||"",bb="",bo="",aN,aY="",cv=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],al=[cm],bc=[],bl=[],aQ=[],bj=500,cd,aO,br,bp,af,bZ=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bh=["pk_kwd","piwik_kwd","utm_term"],aZ="_pk_",co,a4,a0=false,ci,aV,a8,ce=33955200000,bX=1800000,cu=15768000000,aL=true,bV=0,bq=false,aA=false,bK,bv={},bU={},a1={},a7=200,cr={},cw={},bJ=[],bO=false,b7=false,ag=false,cx=false,ay=false,aU=q(),cp=null,bL,aB,bd,bG=ad,a3,av;
+try{aY=A.title}catch(b5){aY=""}function cB(cL,cI,cH,cK,cG,cJ){if(a0){return}var cF;if(cH){cF=new Date();cF.setTime(cF.getTime()+cH)}A.cookie=cL+"="+p(cI)+(cH?";expires="+cF.toGMTString():"")+";path="+(cK||"/")+(cG?";domain="+cG:"")+(cJ?";secure":"")}function ao(cH){if(a0){return 0}var cF=new RegExp("(^|;)[ ]*"+cH+"=([^;]*)"),cG=cF.exec(A.cookie);return cG?M(cG[2]):0}function bB(cF){var cG;if(bp){cG=new RegExp("#.*");return cF.replace(cG,"")}return cF}function bu(cH,cF){var cI=o(cF),cG;if(cI){return cF}if(cF.slice(0,1)==="/"){return o(cH)+"://"+c(cH)+cF}cH=bB(cH);cG=cH.indexOf("?");if(cG>=0){cH=cH.slice(0,cG)}cG=cH.lastIndexOf("/");if(cG!==cH.length-1){cH=cH.slice(0,cG+1)}return cH+cF}function cb(cH,cF){var cG;cH=String(cH).toLowerCase();cF=String(cF).toLowerCase();if(cH===cF){return true}if(cF.slice(0,1)==="."){if(cH===cF.slice(1)){return true}cG=cH.length-cF.length;if((cG>0)&&(cH.slice(cG)===cF)){return true}}return false}function bT(cF){var cG=document.createElement("a");if(cF.indexOf("//")!==0&&cF.indexOf("http")!==0){if(cF.indexOf("*")===0){cF=cF.substr(1)
+}if(cF.indexOf(".")===0){cF=cF.substr(1)}cF="http://"+cF}cG.href=r.toAbsoluteUrl(cF);if(cG.pathname){return cG.pathname}return""}function aM(cG,cF){if(!aa(cF,"/")){cF="/"+cF}if(!aa(cG,"/")){cG="/"+cG}var cH=(cF==="/"||cF==="/*");if(cH){return true}if(cG===cF){return true}cF=String(cF).toLowerCase();cG=String(cG).toLowerCase();if(L(cF,"*")){cF=cF.slice(0,-1);cH=(!cF||cF==="/");if(cH){return true}if(cG===cF){return true}return cG.indexOf(cF)===0}if(!L(cG,"/")){cG+="/"}if(!L(cF,"/")){cF+="/"}return cG.indexOf(cF)===0}function ai(cJ,cL){var cG,cF,cH,cI,cK;for(cG=0;cG<al.length;cG++){cI=F(al[cG]);cK=bT(al[cG]);if(cb(cJ,cI)&&aM(cL,cK)){return true}}return false}function aF(cI){var cG,cF,cH;for(cG=0;cG<al.length;cG++){cF=F(al[cG].toLowerCase());if(cI===cF){return true}if(cF.slice(0,1)==="."){if(cI===cF.slice(1)){return true}cH=cI.length-cF.length;if((cH>0)&&(cI.slice(cH)===cF)){return true}}}return false}function bY(cF,cH){var cG=new Image(1,1);cG.onload=function(){z=0;if(typeof cH==="function"){cH()
+}};cF=cF.replace("send_image=0","send_image=1");cG.src=ap+(ap.indexOf("?")<0?"?":"&")+cF}function ct(cG,cJ,cF){if(!D(cF)||null===cF){cF=true}try{var cI=N.XMLHttpRequest?new N.XMLHttpRequest():N.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;cI.open("POST",ap,true);cI.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)&&cF){bY(cG,cJ)}else{if(this.readyState===4&&(typeof cJ==="function")){cJ()}}};cI.setRequestHeader("Content-Type",b3);cI.send(cG)}catch(cH){if(cF){bY(cG,cJ)}}}function bP(cG){var cF=new Date();var cH=cF.getTime()+cG;if(!n||cH>n){n=cH}}function bW(cF){if(bL||!aO){return}bL=setTimeout(function cG(){bL=null;if(!aU){aU=(!A.hasFocus||A.hasFocus())}if(!aU){bW(aO);return}if(br()){return}var cH=new Date(),cI=aO-(cH.getTime()-cp);cI=Math.min(aO,cI);bW(cI)},cF||aO)}function bk(){if(!bL){return}clearTimeout(bL);bL=null}function aS(){aU=true;if(br()){return}bW()}function am(){bk()}function cD(){if(ay||!aO){return}ay=true;ae(N,"focus",aS);
+ae(N,"blur",am);bW()}function b8(cJ){var cG=new Date();var cF=cG.getTime();cp=cF;if(b7&&cF<b7){var cH=b7-cF;setTimeout(cJ,cH);bP(cH+50);b7+=50;return}if(b7===false){var cI=800;b7=cF+cI}cJ()}function bg(cG,cF,cH){if(!ci&&cG){b8(function(){if(cy==="POST"){ct(cG,cH)}else{bY(cG,cH)}bP(cF)})}if(!ay){cD()}else{bW()}}function bS(cF){if(ci){return false}return(cF&&cF.length)}function cC(cH,cF){if(!bS(cH)){return}var cG='{"requests":["?'+cH.join('","?')+'"]}';b8(function(){ct(cG,null,false);bP(cF)})}function aD(cF){return aZ+cF+"."+bF+"."+a3}function bE(){if(a0){return"0"}if(!D(f.cookieEnabled)){var cF=aD("testcookie");cB(cF,"1");return ao(cF)==="1"?"1":"0"}return f.cookieEnabled?"1":"0"}function aX(){a3=bG((co||cm)+(a4||"/")).slice(0,4)}function bw(){var cG=aD("cvar"),cF=ao(cG);if(cF.length){cF=JSON2.parse(cF);if(Q(cF)){return cF}}return{}}function b9(){if(aA===false){aA=bw()}}function cj(){return bG((f.userAgent||"")+(f.platform||"")+JSON2.stringify(cw)+(new Date()).getTime()+Math.random()).slice(0,16)
+}function cg(){var cH=new Date(),cF=Math.round(cH.getTime()/1000),cG=aD("id"),cK=ao(cG),cJ,cI;if(cK){cJ=cK.split(".");cJ.unshift("0");if(bo.length){cJ[1]=bo}return cJ}if(bo.length){cI=bo}else{if("0"===bE()){cI=""}else{cI=cj()}}cJ=["1",cI,cF,0,cF,"",""];return cJ}function aH(){var cM=cg(),cI=cM[0],cJ=cM[1],cG=cM[2],cF=cM[3],cK=cM[4],cH=cM[5];if(!D(cM[6])){cM[6]=""}var cL=cM[6];return{newVisitor:cI,uuid:cJ,createTs:cG,visitCount:cF,currentVisitTs:cK,lastVisitTs:cH,lastEcommerceOrderTs:cL}}function at(){var cI=new Date(),cG=cI.getTime(),cJ=aH().createTs;var cF=parseInt(cJ,10);var cH=(cF*1000)+ce-cG;return cH}function aw(cF){if(!bF){return}var cH=new Date(),cG=Math.round(cH.getTime()/1000);if(!D(cF)){cF=aH()}var cI=cF.uuid+"."+cF.createTs+"."+cF.visitCount+"."+cG+"."+cF.lastVisitTs+"."+cF.lastEcommerceOrderTs;cB(aD("id"),cI,at(),a4,co)}function bm(){var cF=ao(aD("ref"));if(cF.length){try{cF=JSON2.parse(cF);if(Q(cF)){return cF}}catch(cG){}}return["","",0,""]}function bx(cH,cG,cF){cB(cH,"",-86400,cG,cF)
+}function a9(cG){var cF="testvalue";cB("test",cF,10000,null,cG);if(ao("test")===cF){bx("test",null,cG);return true}return false}function aq(){var cH=a0;a0=false;var cF=["id","ses","cvar","ref"];var cG,cI;for(cG=0;cG<cF.length;cG++){cI=aD(cF[cG]);if(0!==ao(cI)){bx(cI,a4,co)}}a0=cH}function bC(cF){bF=cF;aw()}function cE(cJ){if(!cJ||!Q(cJ)){return}var cI=[];var cH;for(cH in cJ){if(Object.prototype.hasOwnProperty.call(cJ,cH)){cI.push(cH)}}var cK={};cI.sort();var cF=cI.length;var cG;for(cG=0;cG<cF;cG++){cK[cI[cG]]=cJ[cI[cG]]}return cK}function bM(){cB(aD("ses"),"*",bX,a4,co)}function aW(){var cI="";var cG="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var cH=cG.length;var cF;for(cF=0;cF<6;cF++){cI+=cG.charAt(Math.floor(Math.random()*cH))}return cI}function b0(cH,c2,c3,cI){var c1,cG=new Date(),cP=Math.round(cG.getTime()/1000),cM,c0,cJ=1024,c8,cQ,cY=aA,cK=aD("ses"),cW=aD("ref"),cT=aD("cvar"),cU=ao(cK),cZ=bm(),c5=aN||bn,cN,cF;if(a0){aq()}if(ci){return""}var cV=aH();if(!D(cI)){cI=""
+}var cS=A.characterSet||A.charset;if(!cS||cS.toLowerCase()==="utf-8"){cS=null}cN=cZ[0];cF=cZ[1];cM=cZ[2];c0=cZ[3];if(!cU){var c4=bX/1000;if(!cV.lastVisitTs||(cP-cV.lastVisitTs)>c4){cV.visitCount++;cV.lastVisitTs=cV.currentVisitTs}if(!a8||!cN.length){for(c1 in bZ){if(Object.prototype.hasOwnProperty.call(bZ,c1)){cN=P(c5,bZ[c1]);if(cN.length){break}}}for(c1 in bh){if(Object.prototype.hasOwnProperty.call(bh,c1)){cF=P(c5,bh[c1]);if(cF.length){break}}}}c8=c(a2);cQ=c0.length?c(c0):"";if(c8.length&&!aF(c8)&&(!a8||!cQ.length||aF(cQ))){c0=a2}if(c0.length||cN.length){cM=cP;cZ=[cN,cF,cM,bB(c0.slice(0,cJ))];cB(cW,JSON2.stringify(cZ),cu,a4,co)}}cH+="&idsite="+bF+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+cG.getHours()+"&m="+cG.getMinutes()+"&s="+cG.getSeconds()+"&url="+p(bB(c5))+(a2.length?"&urlref="+p(bB(a2)):"")+((bb&&bb.length)?"&uid="+p(bb):"")+"&_id="+cV.uuid+"&_idts="+cV.createTs+"&_idvc="+cV.visitCount+"&_idn="+cV.newVisitor+(cN.length?"&_rcn="+p(cN):"")+(cF.length?"&_rck="+p(cF):"")+"&_refts="+cM+"&_viewts="+cV.lastVisitTs+(String(cV.lastEcommerceOrderTs).length?"&_ects="+cV.lastEcommerceOrderTs:"")+(String(c0).length?"&_ref="+p(bB(c0.slice(0,cJ))):"")+(cS?"&cs="+p(cS):"")+"&send_image=0";
+for(c1 in cw){if(Object.prototype.hasOwnProperty.call(cw,c1)){cH+="&"+c1+"="+cw[c1]}}var c7=[];if(c2){for(c1 in c2){if(Object.prototype.hasOwnProperty.call(c2,c1)&&/^dimension\d+$/.test(c1)){var cL=c1.replace("dimension","");c7.push(parseInt(cL,10));c7.push(String(cL));cH+="&"+c1+"="+c2[c1];delete c2[c1]}}}if(c2&&w(c2)){c2=null}for(c1 in a1){if(Object.prototype.hasOwnProperty.call(a1,c1)){var cR=(-1===G(c7,c1));if(cR){cH+="&dimension"+c1+"="+a1[c1]}}}if(c2){cH+="&data="+p(JSON2.stringify(c2))}else{if(af){cH+="&data="+p(JSON2.stringify(af))}}function cO(c9,da){var db=JSON2.stringify(c9);if(db.length>2){return"&"+da+"="+p(db)}return""}var c6=cE(bv);var cX=cE(bU);cH+=cO(c6,"cvar");cH+=cO(cX,"e_cvar");if(aA){cH+=cO(aA,"_cvar");for(c1 in cY){if(Object.prototype.hasOwnProperty.call(cY,c1)){if(aA[c1][0]===""||aA[c1][1]===""){delete aA[c1]}}}if(bq){cB(cT,JSON2.stringify(aA),bX,a4,co)}}if(aL){if(bV){cH+="&gt_ms="+bV}else{if(g&&g.timing&&g.timing.requestStart&&g.timing.responseEnd){cH+="&gt_ms="+(g.timing.responseEnd-g.timing.requestStart)
+}}}if(av){cH+="&pv_id="+av}cV.lastEcommerceOrderTs=D(cI)&&String(cI).length?cI:cV.lastEcommerceOrderTs;aw(cV);bM();cH+=U(c3);if(cq.length){cH+="&"+cq}if(v(bK)){cH=bK(cH)}return cH}br=function aP(){var cF=new Date();if(cp+aO<=cF.getTime()){var cG=b0("ping=1",null,"ping");bg(cG,bj);return true}return false};function a5(cI,cH,cN,cJ,cF,cQ){var cL="idgoal=0",cM,cG=new Date(),cO=[],cP,cK=String(cI).length;if(cK){cL+="&ec_id="+p(cI);cM=Math.round(cG.getTime()/1000)}cL+="&revenue="+cH;if(String(cN).length){cL+="&ec_st="+cN}if(String(cJ).length){cL+="&ec_tx="+cJ}if(String(cF).length){cL+="&ec_sh="+cF}if(String(cQ).length){cL+="&ec_dt="+cQ}if(cr){for(cP in cr){if(Object.prototype.hasOwnProperty.call(cr,cP)){if(!D(cr[cP][1])){cr[cP][1]=""}if(!D(cr[cP][2])){cr[cP][2]=""}if(!D(cr[cP][3])||String(cr[cP][3]).length===0){cr[cP][3]=0}if(!D(cr[cP][4])||String(cr[cP][4]).length===0){cr[cP][4]=1}cO.push(cr[cP])}}cL+="&ec_items="+p(JSON2.stringify(cO))}cL=b0(cL,af,"ecommerce",cM);bg(cL,bj);if(cK){cr={}}}function by(cF,cJ,cI,cH,cG,cK){if(String(cF).length&&D(cJ)){a5(cF,cJ,cI,cH,cG,cK)
+}}function a6(cF){if(D(cF)){a5("",cF,"","","","")}}function bz(cG,cI,cH){av=aW();var cF=b0("action_name="+p(ac(cG||aY)),cI,"log");bg(cF,bj,cH)}function aJ(cH,cG){var cI,cF="(^| )(piwik[_-]"+cG;if(cH){for(cI=0;cI<cH.length;cI++){cF+="|"+cH[cI]}}cF+=")( |$)";return new RegExp(cF)}function aE(cF){return(ap&&cF&&0===String(cF).indexOf(ap))}function b1(cJ,cF,cK,cG){if(aE(cF)){return 0}var cI=aJ(bl,"download"),cH=aJ(aQ,"link"),cL=new RegExp("\\.("+cv.join("|")+")([?&#]|$)","i");if(cH.test(cJ)){return"link"}if(cG||cI.test(cJ)||cL.test(cF)){return"download"}if(cK){return 0}return"link"}function aj(cG){var cF;cF=cG.parentNode;while(cF!==null&&D(cF)){if(W.isLinkElement(cG)){break}cG=cF;cF=cG.parentNode}return cG}function cz(cK){cK=aj(cK);if(!W.hasNodeAttribute(cK,"href")){return}if(!D(cK.href)){return}var cJ=W.getAttributeValueFromNode(cK,"href");if(aE(cJ)){return}var cG=cK.pathname||bT(cK.href);var cL=cK.hostname||c(cK.href);var cM=cL.toLowerCase();var cH=cK.href.replace(cL,cM);var cI=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");
+if(!cI.test(cH)){var cF=b1(cK.className,cH,ai(cM,cG),W.hasNodeAttribute(cK,"download"));if(cF){return{type:cF,href:cH}}}}function az(cF,cG,cH,cI){var cJ=r.buildInteractionRequestParams(cF,cG,cH,cI);if(!cJ){return}return b0(cJ,null,"contentInteraction")}function cf(cH,cI,cM,cF,cG){if(!D(cH)){return}if(aE(cH)){return cH}var cK=r.toAbsoluteUrl(cH);var cJ="redirecturl="+p(cK)+"&";cJ+=az(cI,cM,cF,(cG||cH));var cL="&";if(ap.indexOf("?")<0){cL="?"}return ap+cL+cJ}function aT(cF,cG){if(!cF||!cG){return false}var cH=r.findTargetNode(cF);if(r.shouldIgnoreInteraction(cH)){return false}cH=r.findTargetNodeNoDefault(cF);if(cH&&!O(cH,cG)){return false}return true}function b2(cH,cG,cJ){if(!cH){return}var cF=r.findParentContentNode(cH);if(!cF){return}if(!aT(cF,cH)){return}var cI=r.buildContentBlock(cF);if(!cI){return}if(!cI.target&&cJ){cI.target=cJ}return r.buildInteractionRequestParams(cG,cI.name,cI.piece,cI.target)}function aG(cG){if(!bJ||!bJ.length){return false}var cF,cH;for(cF=0;cF<bJ.length;cF++){cH=bJ[cF];
+if(cH&&cH.name===cG.name&&cH.piece===cG.piece&&cH.target===cG.target){return true}}return false}function bf(cI){if(!cI){return false}var cL=r.findTargetNode(cI);if(!cL||r.shouldIgnoreInteraction(cL)){return false}var cM=cz(cL);if(cx&&cM&&cM.type){return false}if(W.isLinkElement(cL)&&W.hasNodeAttributeWithValue(cL,"href")){var cF=String(W.getAttributeValueFromNode(cL,"href"));if(0===cF.indexOf("#")){return false}if(aE(cF)){return true}if(!r.isUrlToCurrentDomain(cF)){return false}var cJ=r.buildContentBlock(cI);if(!cJ){return}var cH=cJ.name;var cN=cJ.piece;var cK=cJ.target;if(!W.hasNodeAttributeWithValue(cL,r.CONTENT_TARGET_ATTR)||cL.wasContentTargetAttrReplaced){cL.wasContentTargetAttrReplaced=true;cK=r.toAbsoluteUrl(cF);W.setAnyAttribute(cL,r.CONTENT_TARGET_ATTR,cK)}var cG=cf(cF,"click",cH,cN,cK);r.setHrefAttribute(cL,cG);return true}return false}function ax(cG){if(!cG||!cG.length){return}var cF;for(cF=0;cF<cG.length;cF++){bf(cG[cF])}}function aI(cF){return function(cG){if(!cF){return}var cJ=r.findParentContentNode(cF);
+var cK;if(cG){cK=cG.target||cG.srcElement}if(!cK){cK=cF}if(!aT(cJ,cK)){return}bP(bj);if(W.isLinkElement(cF)&&W.hasNodeAttributeWithValue(cF,"href")&&W.hasNodeAttributeWithValue(cF,r.CONTENT_TARGET_ATTR)){var cH=W.getAttributeValueFromNode(cF,"href");if(!aE(cH)&&cF.wasContentTargetAttrReplaced){W.setAnyAttribute(cF,r.CONTENT_TARGET_ATTR,"")}}var cO=cz(cF);if(ag&&cO&&cO.type){return cO.type}if(bf(cJ)){return"href"}var cL=r.buildContentBlock(cJ);if(!cL){return}var cI=cL.name;var cP=cL.piece;var cN=cL.target;var cM=az("click",cI,cP,cN);bg(cM,bj);return cM}}function bA(cH){if(!cH||!cH.length){return}var cF,cG;for(cF=0;cF<cH.length;cF++){cG=r.findTargetNode(cH[cF]);if(cG&&!cG.contentInteractionTrackingSetupDone){cG.contentInteractionTrackingSetupDone=true;ae(cG,"click",aI(cG))}}}function ba(cH,cI){if(!cH||!cH.length){return[]}var cF,cG;for(cF=0;cF<cH.length;cF++){if(aG(cH[cF])){cH.splice(cF,1);cF--}else{bJ.push(cH[cF])}}if(!cH||!cH.length){return[]}ax(cI);bA(cI);var cJ=[];for(cF=0;cF<cH.length;
+cF++){cG=b0(r.buildImpressionRequestParams(cH[cF].name,cH[cF].piece,cH[cF].target),undefined,"contentImpressions");if(cG){cJ.push(cG)}}return cJ}function b6(cG){var cF=r.collectContent(cG);return ba(cF,cG)}function aR(cG){if(!cG||!cG.length){return[]}var cF;for(cF=0;cF<cG.length;cF++){if(!r.isNodeVisible(cG[cF])){cG.splice(cF,1);cF--}}if(!cG||!cG.length){return[]}return b6(cG)}function ar(cH,cF,cG){var cI=r.buildImpressionRequestParams(cH,cF,cG);return b0(cI,null,"contentImpression")}function cA(cI,cG){if(!cI){return}var cF=r.findParentContentNode(cI);var cH=r.buildContentBlock(cF);if(!cH){return}if(!cG){cG="Unknown"}return az(cG,cH.name,cH.piece,cH.target)}function ch(cG,cI,cF,cH){return"e_c="+p(cG)+"&e_a="+p(cI)+(D(cF)?"&e_n="+p(cF):"")+(D(cH)?"&e_v="+p(cH):"")}function ak(cH,cJ,cF,cI,cL,cK){if(String(cH).length===0||String(cJ).length===0){return false}var cG=b0(ch(cH,cJ,cF,cI),cL,"event");bg(cG,bj,cK)}function bI(cF,cI,cG,cJ){var cH=b0("search="+p(cF)+(cI?"&search_cat="+p(cI):"")+(D(cG)?"&search_count="+cG:""),cJ,"sitesearch");
+bg(cH,bj)}function cl(cF,cI,cH){var cG=b0("idgoal="+cF+(cI?"&revenue="+cI:""),cH,"goal");bg(cG,bj)}function cs(cI,cF,cM,cL,cH){var cK=cF+"="+p(bB(cI));var cG=b2(cH,"click",cI);if(cG){cK+="&"+cG}var cJ=b0(cK,cM,"link");bg(cJ,bj,cL)}function bs(cG,cF){if(cG!==""){return cG+cF.charAt(0).toUpperCase()+cF.slice(1)}return cF}function bQ(cK){var cJ,cF,cI=["","webkit","ms","moz"],cH;if(!aV){for(cF=0;cF<cI.length;cF++){cH=cI[cF];if(Object.prototype.hasOwnProperty.call(A,bs(cH,"hidden"))){if(A[bs(cH,"visibilityState")]==="prerender"){cJ=true}break}}}if(cJ){ae(A,cH+"visibilitychange",function cG(){A.removeEventListener(cH+"visibilitychange",cG,false);cK()});return}cK()}function cc(cF){var cG=cz(cF);if(cG&&cG.type){cG.href=l(cG.href);cs(cG.href,cG.type,undefined,null,cF)}}function b4(){return A.all&&!A.addEventListener}function cn(cF){var cH=cF.which;var cG=(typeof cF.button);if(!cH&&cG!=="undefined"){if(b4()){if(cF.button&1){cH=1}else{if(cF.button&2){cH=3}else{if(cF.button&4){cH=2}}}}else{if(cF.button===0||cF.button==="0"){cH=1
+}else{if(cF.button&1){cH=2}else{if(cF.button&2){cH=3}}}}}return cH}function bt(cF){switch(cn(cF)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aK(cF){return cF.target||cF.srcElement}function an(cF){return function(cI){cI=cI||N.event;var cH=bt(cI);var cJ=aK(cI);if(cI.type==="click"){var cG=false;if(cF&&cH==="middle"){cG=true}if(cJ&&!cG){cc(cJ)}}else{if(cI.type==="mousedown"){if(cH==="middle"&&cJ){aB=cH;bd=cJ}else{aB=bd=null}}else{if(cI.type==="mouseup"){if(cH===aB&&cJ===bd){cc(cJ)}aB=bd=null}else{if(cI.type==="contextmenu"){cc(cJ)}}}}}}function ah(cG,cF){ae(cG,"click",an(cF),false);if(cF){ae(cG,"mouseup",an(cF),false);ae(cG,"mousedown",an(cF),false);ae(cG,"contextmenu",an(cF),false)}}function be(cG){if(!ag){ag=true;var cH,cF=aJ(bc,"ignore"),cI=A.links;if(cI){for(cH=0;cH<cI.length;cH++){if(!cF.test(cI[cH].className)){ah(cI[cH],cG)}}}}}function aC(cH,cJ,cK){if(bO){return true}bO=true;var cL=false;var cI,cG;function cF(){cL=true}j(function(){function cM(cO){setTimeout(function(){if(!bO){return
+}cL=false;cK.trackVisibleContentImpressions();cM(cO)},cO)}function cN(cO){setTimeout(function(){if(!bO){return}if(cL){cL=false;cK.trackVisibleContentImpressions()}cN(cO)},cO)}if(cH){cI=["scroll","resize"];for(cG=0;cG<cI.length;cG++){if(A.addEventListener){A.addEventListener(cI[cG],cF)}else{N.attachEvent("on"+cI[cG],cF)}}cN(100)}if(cJ&&cJ>0){cJ=parseInt(cJ,10);cM(cJ)}})}function ca(){var cG,cI,cJ={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(f.userAgent))){if(f.mimeTypes&&f.mimeTypes.length){for(cG in cJ){if(Object.prototype.hasOwnProperty.call(cJ,cG)){cI=f.mimeTypes[cJ[cG]];cw[cG]=(cI&&cI.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&D(f.javaEnabled)&&f.javaEnabled()){cw.java="1"}if(v(N.GearsFactory)){cw.gears="1"
+}cw.cookie=bE()}var cH=parseInt(R.width,10);var cF=parseInt(R.height,10);cw.res=parseInt(cH,10)+"x"+parseInt(cF,10)}ca();aX();aw();this.getVisitorId=function(){return aH().uuid};this.getVisitorInfo=function(){return cg()};this.getAttributionInfo=function(){return bm()};this.getAttributionCampaignName=function(){return bm()[0]};this.getAttributionCampaignKeyword=function(){return bm()[1]};this.getAttributionReferrerTimestamp=function(){return bm()[2]};this.getAttributionReferrerUrl=function(){return bm()[3]};this.setTrackerUrl=function(cF){ap=cF};this.getTrackerUrl=function(){return ap};this.addTracker=function(cF,cH){if(!cH){throw new Error("A siteId must be given to add a new tracker")}if(!D(cF)||null===cF){cF=this.getTrackerUrl()}var cG=new K(cF,cH);C.push(cG);return cG};this.getSiteId=function(){return bF};this.setSiteId=function(cF){bC(cF)};this.setUserId=function(cF){if(!D(cF)||!cF.length){return}bb=cF;bo=bG(bb).substr(0,16)};this.getUserId=function(){return bb};this.setCustomData=function(cF,cG){if(Q(cF)){af=cF
+}else{if(!af){af={}}af[cF]=cG}};this.getCustomData=function(){return af};this.setCustomRequestProcessing=function(cF){bK=cF};this.appendToTrackingUrl=function(cF){cq=cF};this.getRequest=function(cF){return b0(cF)};this.addPlugin=function(cF,cG){a[cF]=cG};this.setCustomDimension=function(cF,cG){cF=parseInt(cF,10);if(cF>0){if(!D(cG)){cG=""}if(!s(cG)){cG=String(cG)}a1[cF]=cG}};this.getCustomDimension=function(cF){cF=parseInt(cF,10);if(cF>0&&Object.prototype.hasOwnProperty.call(a1,cF)){return a1[cF]}};this.deleteCustomDimension=function(cF){cF=parseInt(cF,10);if(cF>0){delete a1[cF]}};this.setCustomVariable=function(cG,cF,cJ,cH){var cI;if(!D(cH)){cH="visit"}if(!D(cF)){return}if(!D(cJ)){cJ=""}if(cG>0){cF=!s(cF)?String(cF):cF;cJ=!s(cJ)?String(cJ):cJ;cI=[cF.slice(0,a7),cJ.slice(0,a7)];if(cH==="visit"||cH===2){b9();aA[cG]=cI}else{if(cH==="page"||cH===3){bv[cG]=cI}else{if(cH==="event"){bU[cG]=cI}}}}};this.getCustomVariable=function(cG,cH){var cF;if(!D(cH)){cH="visit"}if(cH==="page"||cH===3){cF=bv[cG]
+}else{if(cH==="event"){cF=bU[cG]}else{if(cH==="visit"||cH===2){b9();cF=aA[cG]}}}if(!D(cF)||(cF&&cF[0]==="")){return false}return cF};this.deleteCustomVariable=function(cF,cG){if(this.getCustomVariable(cF,cG)){this.setCustomVariable(cF,"","",cG)}};this.storeCustomVariablesInCookie=function(){bq=true};this.setLinkTrackingTimer=function(cF){bj=cF};this.setDownloadExtensions=function(cF){if(s(cF)){cF=cF.split("|")}cv=cF};this.addDownloadExtensions=function(cG){var cF;if(s(cG)){cG=cG.split("|")}for(cF=0;cF<cG.length;cF++){cv.push(cG[cF])}};this.removeDownloadExtensions=function(cH){var cG,cF=[];if(s(cH)){cH=cH.split("|")}for(cG=0;cG<cv.length;cG++){if(G(cH,cv[cG])===-1){cF.push(cv[cG])}}cv=cF};this.setDomains=function(cF){al=s(cF)?[cF]:cF;var cJ=false,cH=0,cG;for(cH;cH<al.length;cH++){cG=String(al[cH]);if(cb(cm,F(cG))){cJ=true;break}var cI=bT(cG);if(cI&&cI!=="/"&&cI!=="/*"){cJ=true;break}}if(!cJ){al.push(cm)}};this.setIgnoreClasses=function(cF){bc=s(cF)?[cF]:cF};this.setRequestMethod=function(cF){cy=cF||bR
+};this.setRequestContentType=function(cF){b3=cF||au};this.setReferrerUrl=function(cF){a2=cF};this.setCustomUrl=function(cF){aN=bu(bn,cF)};this.setDocumentTitle=function(cF){aY=cF};this.setAPIUrl=function(cF){bi=cF};this.setDownloadClasses=function(cF){bl=s(cF)?[cF]:cF};this.setLinkClasses=function(cF){aQ=s(cF)?[cF]:cF};this.setCampaignNameKey=function(cF){bZ=s(cF)?[cF]:cF};this.setCampaignKeywordKey=function(cF){bh=s(cF)?[cF]:cF};this.discardHashTag=function(cF){bp=cF};this.setCookieNamePrefix=function(cF){aZ=cF;aA=bw()};this.setCookieDomain=function(cF){var cG=F(cF);if(a9(cG)){co=cG;aX()}};this.setCookiePath=function(cF){a4=cF;aX()};this.setVisitorCookieTimeout=function(cF){ce=cF*1000};this.setSessionCookieTimeout=function(cF){bX=cF*1000};this.setReferralCookieTimeout=function(cF){cu=cF*1000};this.setConversionAttributionFirstReferrer=function(cF){a8=cF};this.disableCookies=function(){a0=true;cw.cookie="0";if(bF){aq()}};this.deleteCookies=function(){aq()};this.setDoNotTrack=function(cG){var cF=f.doNotTrack||f.msDoNotTrack;
+ci=cG&&(cF==="yes"||cF==="1");if(ci){this.disableCookies()}};this.addListener=function(cG,cF){ah(cG,cF)};this.enableLinkTracking=function(cF){cx=true;bQ(function(){m(function(){be(cF)})})};this.enableJSErrorTracking=function(){if(ck){return}ck=true;var cF=N.onerror;N.onerror=function(cK,cI,cH,cJ,cG){bQ(function(){var cL="JavaScript Errors";var cM=cI+":"+cH;if(cJ){cM+=":"+cJ}ak(cL,cM,cK)});if(cF){return cF(cK,cI,cH,cJ,cG)}return false}};this.disablePerformanceTracking=function(){aL=false};this.setGenerationTimeMs=function(cF){bV=parseInt(cF,10)};this.enableHeartBeatTimer=function(cF){cF=Math.max(cF,1);aO=(cF||15)*1000;if(cp!==null){cD()}};this.killFrame=function(){if(N.location!==N.top.location){N.top.location=N.location}};this.redirectFile=function(cF){if(N.location.protocol==="file:"){N.location=cF}};this.setCountPreRendered=function(cF){aV=cF};this.trackGoal=function(cF,cH,cG){bQ(function(){cl(cF,cH,cG)})};this.trackLink=function(cG,cF,cI,cH){bQ(function(){cs(cG,cF,cI,cH)})};this.trackPageView=function(cF,cH,cG){bJ=[];
+if(H(bF)){bQ(function(){S(ap,bi,bF)})}else{bQ(function(){bz(cF,cH,cG)})}};this.trackAllContentImpressions=function(){if(H(bF)){return}bQ(function(){m(function(){var cF=r.findContentNodes();var cG=b6(cF);cC(cG,bj)})})};this.trackVisibleContentImpressions=function(cF,cG){if(H(bF)){return}if(!D(cF)){cF=true}if(!D(cG)){cG=750}aC(cF,cG,this);bQ(function(){j(function(){var cH=r.findContentNodes();var cI=aR(cH);cC(cI,bj)})})};this.trackContentImpression=function(cH,cF,cG){if(H(bF)){return}if(!cH){return}cF=cF||"Unknown";bQ(function(){var cI=ar(cH,cF,cG);bg(cI,bj)})};this.trackContentImpressionsWithinNode=function(cF){if(H(bF)||!cF){return}bQ(function(){if(bO){j(function(){var cG=r.findContentNodesWithinNode(cF);var cH=aR(cG);cC(cH,bj)})}else{m(function(){var cG=r.findContentNodesWithinNode(cF);var cH=b6(cG);cC(cH,bj)})}})};this.trackContentInteraction=function(cH,cI,cF,cG){if(H(bF)){return}if(!cH||!cI){return}cF=cF||"Unknown";bQ(function(){var cJ=az(cH,cI,cF,cG);bg(cJ,bj)})};this.trackContentInteractionNode=function(cG,cF){if(H(bF)||!cG){return
+}bQ(function(){var cH=cA(cG,cF);bg(cH,bj)})};this.logAllContentBlocksOnPage=function(){var cG=r.findContentNodes();var cF=r.collectContent(cG);if(console!==undefined&&console&&console.log){console.log(cF)}};this.trackEvent=function(cG,cI,cF,cH,cK,cJ){bQ(function(){ak(cG,cI,cF,cH,cK,cJ)})};this.trackSiteSearch=function(cF,cH,cG,cI){bQ(function(){bI(cF,cH,cG,cI)})};this.setEcommerceView=function(cI,cF,cH,cG){if(!D(cH)||!cH.length){cH=""}else{if(cH instanceof Array){cH=JSON2.stringify(cH)}}bv[5]=["_pkc",cH];if(D(cG)&&String(cG).length){bv[2]=["_pkp",cG]}if((!D(cI)||!cI.length)&&(!D(cF)||!cF.length)){return}if(D(cI)&&cI.length){bv[3]=["_pks",cI]}if(!D(cF)||!cF.length){cF=""}bv[4]=["_pkn",cF]};this.addEcommerceItem=function(cJ,cF,cH,cG,cI){if(cJ.length){cr[cJ]=[cJ,cF,cH,cG,cI]}};this.trackEcommerceOrder=function(cF,cJ,cI,cH,cG,cK){by(cF,cJ,cI,cH,cG,cK)};this.trackEcommerceCartUpdate=function(cF){a6(cF)};this.trackRequest=function(cF,cH,cG){bQ(function(){var cI=b0(cF,cH);bg(cI,bj,cG)})};d.trigger("TrackerSetup",[this])
+}function B(){return{push:X}}function b(ak,aj){var al={};var ah,ai;for(ah=0;ah<aj.length;ah++){var af=aj[ah];al[af]=1;for(ai=0;ai<ak.length;ai++){if(ak[ai]&&ak[ai][0]){var ag=ak[ai][0];if(af===ag){X(ak[ai]);delete ak[ai];if(al[ag]>1){ab("The method "+ag+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}al[ag]++}}}}return ak}var x=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"];function V(af,ah){var ag=new K(af,ah);C.push(ag);_paq=b(_paq,x);for(z=0;z<_paq.length;z++){if(_paq[z]){X(_paq[z])}}_paq=new B();return ag}ae(N,"beforeunload",Z,false);Date.prototype.getTimeAlias=Date.prototype.getTime;d={initialized:false,DOM:{addEventListener:function(ai,ah,ag,af){var aj=typeof af;if(aj==="undefined"){af=false}ae(ai,ah,ag,af)
+},onLoad:j,onReady:m},on:function(ag,af){if(!t[ag]){t[ag]=[]}t[ag].push(af)},off:function(ah,ag){if(!t[ah]){return}var af=0;for(af;af<t[ah].length;af++){if(t[ah][af]===ag){t[ah].splice(af,1)}}},trigger:function(ah,ai,ag){if(!t[ah]){return}var af=0;for(af;af<t[ah].length;af++){t[ah][af].apply(ag||N,ai)}},addPlugin:function(af,ag){a[af]=ag},getTracker:function(af,ag){if(!D(ag)){ag=this.getAsyncTracker().getSiteId()}if(!D(af)){af=this.getAsyncTracker().getTrackerUrl()}return new K(af,ag)},getAsyncTrackers:function(){return C},addTracker:function(af,ag){if(!C.length){V(af,ag)}else{C[0].addTracker(af,ag)}},getAsyncTracker:function(ag,aj){var ai;if(C&&C[0]){ai=C[0]}if(!aj&&!ag){return ai}if((!D(aj)||null===aj)&&ai){aj=ai.getSiteId()}if((!D(ag)||null===ag)&&ai){ag=ai.getTrackerUrl()}var ah,af=0;for(af;af<C.length;af++){ah=C[af];if(ah&&String(ah.getSiteId())===String(aj)&&ah.getTrackerUrl()===ag){return ah}}},retryMissedPluginCalls:function(){var ag=Y;Y=[];var af=0;for(af;af<ag.length;af++){X(ag[af])
+}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return d})}return d}());
/*!!! pluginTrackerHook */
-}(function(){if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}window.Piwik.addTracker();window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]
-}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}};
+}(function(){if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}window.Piwik.addTracker();window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)
+}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}};
/*!! @license-end */
}; \ No newline at end of file
diff --git a/lang/en.json b/lang/en.json
index 095cc49a14..00aea52f6e 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -399,6 +399,9 @@
"Warnings": "Warnings",
"WarningPhpVersionXIsTooOld": "The PHP version %s you are using has reached its End of Life (EOL). You are strongly urged to upgrade to a current version, as using this version may expose you to security vulnerabilities and bugs that have been fixed in more recent versions of PHP.",
"WarningPiwikWillStopSupportingPHPVersion": "Piwik will stop supporting PHP %1$s in the next major version. Upgrade your PHP to at least PHP %2$s, before it's too late!",
+ "YouMustUpgradePhpVersionToReceiveLatestPiwik": "You must upgrade your PHP version in order to receive the latest Piwik update.",
+ "PiwikCannotBeUpgradedBecausePhpIsTooOld": "Piwik cannot be upgraded to the latest major version because your PHP version is too old.",
+ "PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Please upgrade your PHP version to at least PHP %s so your Piwik analytics data stays secure.",
"WarningFileIntegrityNoManifest": "File integrity check could not be performed due to missing manifest.inc.php.",
"WarningFileIntegrityNoManifestDeployingFromGit": "If you are deploying Piwik from Git, this message is normal.",
"WarningFileIntegrityNoMd5file": "File integrity check could not be completed due to missing md5_file() function.",
diff --git a/lang/es.json b/lang/es.json
index 8dc19b7a06..7de9883818 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -286,6 +286,7 @@
"Password": "Contraseña",
"Period": "Periodo",
"Piechart": "Gráfica circular",
+ "PiwikIsACollaborativeProjectYouCanContributeAndDonate": "%1$sPiwik%2$s es un proyecto de colaboración traído para ti por los miembros del %7$sequipo de Piwik%8$s así como muchos otros colaboradores alrededor del mundo. <br\/> Si eres un fan de Piwik, puedes ayudar: descubrir %3$sCómo participar en Piwik%4$s, o %5$sdona ahora%6$s para ayudar a financiar Piwik 3.0!",
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s está disponible. Por favor alerte al %2$s administrador Piwik%3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Piwik %1$s está disponible. %2$s ¡Por favor, actualice ahora!%3$s (ver %4$scambios%5$s).",
"PleaseSpecifyValue": "Por favor especifique un valor para '%s'.",
diff --git a/lang/it.json b/lang/it.json
index 7612c7c81e..b6ca374ee9 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -367,7 +367,7 @@
"TrackingScopeVisit": "Visita",
"TransitionsRowActionTooltip": "Guarda cosa hanno fatto i visitatori prima e dopo aver visto questa pagina",
"TransitionsRowActionTooltipTitle": "Apri Transizioni",
- "TranslatorName": "Alessandro Coscia, Giovdi, Yusef Maali, Andrea Marchitelli (CILEA), Fabrizio Rocca, Ted Mosby, Alfio E. Fresta, Giovanni Matina, Blau",
+ "TranslatorName": "Alessandro Coscia, Giovdi, Yusef Maali, Andrea Marchitelli (CILEA), <a href=\"https:\/\/www.fabriziorocca.it\/\">Fabrizio Rocca<\/a>, Ted Mosby, Alfio E. Fresta, Giovanni Matina, Blau",
"UniquePurchases": "Acquisti unici",
"Unknown": "Sconosciuto",
"Upload": "Carica",
diff --git a/piwik.js b/piwik.js
index 548d87f62e..1a04b67ec5 100644
--- a/piwik.js
+++ b/piwik.js
@@ -18,54 +18,55 @@ var I="000000";var t=function(ac,ad){return(I+(ad||0)).slice(-ac)};var z="\\u00"
}else{at=null}}else{if(typeof at.toJSON=="function"&&((ae!=N&&ae!=O&&ae!=E)||r.call(at,"toJSON"))){at=at.toJSON(ai)}}}if(ag){at=ag.call(aA,ai,at)}if(at===null){return"null"}ae=u.call(at);if(ae==A){return""+at}else{if(ae==N){return at>-1/0&&at<1/0?""+at:"null"}else{if(ae==O){return C(""+at)}}}if(typeof at=="object"){for(af=aj.length;af--;){if(aj[af]===at){throw aa()}}aj.push(at);ar=[];av=ac;ac+=ax;if(ae==E){for(ah=0,af=at.length;ah<af;ah++){ad=p(ah,at,ag,al,ax,ac,aj);ar.push(ad===L?"null":ad)}ao=ar.length?(ax?"[\n"+ac+ar.join(",\n"+ac)+"\n"+av+"]":("["+ar.join(",")+"]")):"[]"}else{m(al||at,function(aC){var aB=p(aC,at,ag,al,ax,ac,aj);if(aB!==L){ar.push(C(aC)+":"+(ax?" ":"")+aB)}});ao=ar.length?(ax?"{\n"+ac+ar.join(",\n"+ac)+"\n"+av+"}":("{"+ar.join(",")+"}")):"{}"}aj.pop();return ao}};V.stringify=function(ac,ae,af){var ad,al,aj,ai;if(e[typeof ae]&&ae){if((ai=u.call(ae))==U){al=ae}else{if(ai==E){aj={};for(var ah=0,ag=ae.length,ak;ah<ag;ak=ae[ah++],((ai=u.call(ak)),ai==O||ai==N)&&(aj[ak]=1)){}}}}if(af){if((ai=u.call(af))==N){if((af-=af%1)>0){for(ad="",af>10&&(af=10);
ad.length<af;ad+=" "){}}}else{if(ai==O){ad=af.length<=10?af:af.slice(0,10)}}}return p("",(ak={},ak[""]=ac,ak),al,aj,ad,"",[])}}if(!o("json-parse")){var M=R.fromCharCode;var l={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"};var G,X;var H=function(){G=X=null;throw T()};var y=function(){var ah=X,af=ah.length,ag,ae,ac,ai,ad;while(G<af){ad=ah.charCodeAt(G);switch(ad){case 9:case 10:case 13:case 32:G++;break;case 123:case 125:case 91:case 93:case 58:case 44:ag=F?ah.charAt(G):ah[G];G++;return ag;case 34:for(ag="@",G++;G<af;){ad=ah.charCodeAt(G);if(ad<32){H()}else{if(ad==92){ad=ah.charCodeAt(++G);switch(ad){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:ag+=l[ad];G++;break;case 117:ae=++G;for(ac=G+4;G<ac;G++){ad=ah.charCodeAt(G);if(!(ad>=48&&ad<=57||ad>=97&&ad<=102||ad>=65&&ad<=70)){H()}}ag+=M("0x"+ah.slice(ae,G));break;default:H()}}else{if(ad==34){break}ad=ah.charCodeAt(G);ae=G;while(ad>=32&&ad!=92&&ad!=34){ad=ah.charCodeAt(++G)}ag+=ah.slice(ae,G)}}}if(ah.charCodeAt(G)==34){G++;
return ag}H();default:ae=G;if(ad==45){ai=true;ad=ah.charCodeAt(++G)}if(ad>=48&&ad<=57){if(ad==48&&((ad=ah.charCodeAt(G+1)),ad>=48&&ad<=57)){H()}ai=false;for(;G<af&&((ad=ah.charCodeAt(G)),ad>=48&&ad<=57);G++){}if(ah.charCodeAt(G)==46){ac=++G;for(;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}ad=ah.charCodeAt(G);if(ad==101||ad==69){ad=ah.charCodeAt(++G);if(ad==43||ad==45){G++}for(ac=G;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}return +ah.slice(ae,G)}if(ai){H()}if(ah.slice(G,G+4)=="true"){G+=4;return true}else{if(ah.slice(G,G+5)=="false"){G+=5;return false}else{if(ah.slice(G,G+4)=="null"){G+=4;return null}}}H()}}return"$"};var W=function(ad){var ac,ae;if(ad=="$"){H()}if(typeof ad=="string"){if((F?ad.charAt(0):ad[0])=="@"){return ad.slice(1)}if(ad=="["){ac=[];for(;;ae||(ae=true)){ad=y();if(ad=="]"){break}if(ae){if(ad==","){ad=y();if(ad=="]"){H()}}else{H()}}if(ad==","){H()}ac.push(W(ad))}return ac}else{if(ad=="{"){ac={};for(;;ae||(ae=true)){ad=y();
-if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON2=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var l,a={},r={},y=document,f=navigator,P=screen,L=window,g=L.performance||L.mozPerformance||L.msPerformance||L.webkitPerformance,n=L.encodeURIComponent,K=L.decodeURIComponent,i=unescape,A=[],x,d;
-function k(ac){try{return K(ac)}catch(ad){return unescape(ac)}}function B(ad){var ac=typeof ad;return ac!=="undefined"}function t(ac){return typeof ac==="function"}function O(ac){return typeof ac==="object"}function q(ac){return typeof ac==="string"||ac instanceof String}function u(ad){if(!ad){return true}var ac;var ae=true;for(ac in ad){if(Object.prototype.hasOwnProperty.call(ad,ac)){ae=false}}return ae}function Y(ac){if(console!==undefined&&console&&console.error){console.error(ac)}}function V(){var ag,af,ai,ac;for(ag=0;ag<arguments.length;ag+=1){ac=arguments[ag];ai=ac.shift();for(af=0;af<A.length;af++){if(q(ai)){var ad=A[af];var ah;var ae=ai.indexOf("::")>0;if(ae){ah=ai.split("::");ad=ah[0];ai=ah[1];if("object"===typeof d[ad]&&"function"===typeof d[ad][ai]){d[ad][ai].apply(d[ad],ac)}return}var aj=ai.indexOf(".")>0;if(aj){ah=ai.split(".");ad=ad[ah[0]];ai=ah[1]}if(ad[ai]){ad[ai].apply(ad,ac)}else{var ak="The method '"+ai+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript';
-Y(ak);if(!aj){throw new TypeError(ak)}}if(ai==="addTracker"){break}if(ai==="setTrackerUrl"||ai==="setSiteId"){break}}else{ai.apply(A[af],ac)}}}}function aa(af,ae,ad,ac){if(af.addEventListener){af.addEventListener(ae,ad,ac);return true}if(af.attachEvent){return af.attachEvent("on"+ae,ad)}af["on"+ae]=ad}function S(ad,ah){var ac="",af,ae,ag;for(af in a){if(Object.prototype.hasOwnProperty.call(a,af)){ae=a[af][ad];if(t(ae)){ag=ae(ah);if(ag){ac+=ag}}}}return ac}function W(){var ac;S("unload");if(l){do{ac=new Date()}while(ac.getTimeAlias()<l)}}function j(ae,ad){var ac=y.createElement("script");ac.type="text/javascript";ac.src=ae;if(ac.readyState){ac.onreadystatechange=function(){var af=this.readyState;if(af==="loaded"||af==="complete"){ac.onreadystatechange=null;ad()}}}else{ac.onload=ad}y.getElementsByTagName("head")[0].appendChild(ac)}function C(){var ac="";try{ac=L.top.document.referrer}catch(ae){if(L.parent){try{ac=L.parent.document.referrer}catch(ad){ac=""}}}if(ac===""){ac=y.referrer}return ac
-}function m(ac){var ae=new RegExp("^([a-z]+):"),ad=ae.exec(ac);return ad?ad[1]:null}function c(ac){var ae=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),ad=ae.exec(ac);return ad?ad[1]:ac}function N(ae,ad){var ac="[\\?&#]"+ad+"=([^&#]*)";var ag=new RegExp(ac);var af=ag.exec(ae);return af?K(af[1]):""}function w(ac){return unescape(n(ac))}function Z(ar){var ae=function(ay,ax){return(ay<<ax)|(ay>>>(32-ax))},at=function(aA){var ay="",az,ax;for(az=7;az>=0;az--){ax=(aA>>>(az*4))&15;ay+=ax.toString(16)}return ay},ah,av,au,ad=[],al=1732584193,aj=4023233417,ai=2562383102,ag=271733878,af=3285377520,aq,ap,ao,an,am,aw,ac,ak=[];ar=w(ar);ac=ar.length;for(av=0;av<ac-3;av+=4){au=ar.charCodeAt(av)<<24|ar.charCodeAt(av+1)<<16|ar.charCodeAt(av+2)<<8|ar.charCodeAt(av+3);ak.push(au)}switch(ac&3){case 0:av=2147483648;break;case 1:av=ar.charCodeAt(ac-1)<<24|8388608;break;case 2:av=ar.charCodeAt(ac-2)<<24|ar.charCodeAt(ac-1)<<16|32768;break;case 3:av=ar.charCodeAt(ac-3)<<24|ar.charCodeAt(ac-2)<<16|ar.charCodeAt(ac-1)<<8|128;
-break}ak.push(av);while((ak.length&15)!==14){ak.push(0)}ak.push(ac>>>29);ak.push((ac<<3)&4294967295);for(ah=0;ah<ak.length;ah+=16){for(av=0;av<16;av++){ad[av]=ak[ah+av]}for(av=16;av<=79;av++){ad[av]=ae(ad[av-3]^ad[av-8]^ad[av-14]^ad[av-16],1)}aq=al;ap=aj;ao=ai;an=ag;am=af;for(av=0;av<=19;av++){aw=(ae(aq,5)+((ap&ao)|(~ap&an))+am+ad[av]+1518500249)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}for(av=20;av<=39;av++){aw=(ae(aq,5)+(ap^ao^an)+am+ad[av]+1859775393)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}for(av=40;av<=59;av++){aw=(ae(aq,5)+((ap&ao)|(ap&an)|(ao&an))+am+ad[av]+2400959708)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}for(av=60;av<=79;av++){aw=(ae(aq,5)+(ap^ao^an)+am+ad[av]+3395469782)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}al=(al+aq)&4294967295;aj=(aj+ap)&4294967295;ai=(ai+ao)&4294967295;ag=(ag+an)&4294967295;af=(af+am)&4294967295}aw=at(al)+at(aj)+at(ai)+at(ag)+at(af);return aw.toLowerCase()}function R(ae,ac,ad){if(!ae){ae=""}if(!ac){ac=""}if(ae==="translate.googleusercontent.com"){if(ad===""){ad=ac
-}ac=N(ac,"u");ae=c(ac)}else{if(ae==="cc.bingj.com"||ae==="webcache.googleusercontent.com"||ae.slice(0,5)==="74.6."){ac=y.links[0].href;ae=c(ac)}}return[ae,ac,ad]}function D(ad){var ac=ad.length;if(ad.charAt(--ac)==="."){ad=ad.slice(0,ac)}if(ad.slice(0,2)==="*."){ad=ad.slice(1)}if(ad.indexOf("/")!==-1){ad=ad.substr(0,ad.indexOf("/"))}return ad}function ab(ad){ad=ad&&ad.text?ad.text:ad;if(!q(ad)){var ac=y.getElementsByTagName("title");if(ac&&B(ac[0])){ad=ac[0].text}}return ad}function H(ac){if(!ac){return[]}if(!B(ac.children)&&B(ac.childNodes)){return ac.children}if(B(ac.children)){return ac.children}return[]}function M(ad,ac){if(!ad||!ac){return false}if(ad.contains){return ad.contains(ac)}if(ad===ac){return true}if(ad.compareDocumentPosition){return !!(ad.compareDocumentPosition(ac)&16)}return false}function E(ae,af){if(ae&&ae.indexOf){return ae.indexOf(af)}if(!B(ae)||ae===null){return -1}if(!ae.length){return -1}var ac=ae.length;if(ac===0){return -1}var ad=0;while(ad<ac){if(ae[ad]===af){return ad
-}ad++}return -1}function X(ad,ac){ad=String(ad);return ad.lastIndexOf(ac,0)===0}function J(ad,ac){ad=String(ad);return ad.indexOf(ac,ad.length-ac.length)!==-1}function s(ad,ac){ad=String(ad);return ad.indexOf(ac)!==-1}function e(ad,ac){ad=String(ad);return ad.substr(0,ad.length-ac)}function h(ae){if(!ae){return false}function ac(ag,ah){if(L.getComputedStyle){return y.defaultView.getComputedStyle(ag,null)[ah]}if(ag.currentStyle){return ag.currentStyle[ah]}}function af(ag){ag=ag.parentNode;while(ag){if(ag===y){return true}ag=ag.parentNode}return false}function ad(ai,ao,ag,al,aj,am,ak){var ah=ai.parentNode,an=1;if(!af(ai)){return false}if(9===ah.nodeType){return true}if("0"===ac(ai,"opacity")||"none"===ac(ai,"display")||"hidden"===ac(ai,"visibility")){return false}if(!B(ao)||!B(ag)||!B(al)||!B(aj)||!B(am)||!B(ak)){ao=ai.offsetTop;aj=ai.offsetLeft;al=ao+ai.offsetHeight;ag=aj+ai.offsetWidth;am=ai.offsetWidth;ak=ai.offsetHeight}if(ae===ai&&(0===ak||0===am)&&"hidden"===ac(ai,"overflow")){return false
-}if(ah){if(("hidden"===ac(ah,"overflow")||"scroll"===ac(ah,"overflow"))){if(aj+an>ah.offsetWidth+ah.scrollLeft||aj+am-an<ah.scrollLeft||ao+an>ah.offsetHeight+ah.scrollTop||ao+ak-an<ah.scrollTop){return false}}if(ai.offsetParent===ah){aj+=ah.offsetLeft;ao+=ah.offsetTop}return ad(ah,ao,ag,al,aj,am,ak)}return true}return ad(ae)}var U={htmlCollectionToArray:function(ae){var ac=[],ad;if(!ae||!ae.length){return ac}for(ad=0;ad<ae.length;ad++){ac.push(ae[ad])}return ac},find:function(ac){if(!document.querySelectorAll||!ac){return[]}var ad=document.querySelectorAll(ac);return this.htmlCollectionToArray(ad)},findMultiple:function(ae){if(!ae||!ae.length){return[]}var ad,af;var ac=[];for(ad=0;ad<ae.length;ad++){af=this.find(ae[ad]);ac=ac.concat(af)}ac=this.makeNodesUnique(ac);return ac},findNodesByTagName:function(ad,ac){if(!ad||!ac||!ad.getElementsByTagName){return[]}var ae=ad.getElementsByTagName(ac);return this.htmlCollectionToArray(ae)},makeNodesUnique:function(ac){var ah=[].concat(ac);ac.sort(function(aj,ai){if(aj===ai){return 0
-}var al=E(ah,aj);var ak=E(ah,ai);if(al===ak){return 0}return al>ak?-1:1});if(ac.length<=1){return ac}var ad=0;var af=0;var ag=[];var ae;ae=ac[ad++];while(ae){if(ae===ac[ad]){af=ag.push(ad)}ae=ac[ad++]||null}while(af--){ac.splice(ag[af],1)}return ac},getAttributeValueFromNode:function(ag,ae){if(!this.hasNodeAttribute(ag,ae)){return}if(ag&&ag.getAttribute){return ag.getAttribute(ae)}if(!ag||!ag.attributes){return}var af=(typeof ag.attributes[ae]);if("undefined"===af){return}if(ag.attributes[ae].value){return ag.attributes[ae].value}if(ag.attributes[ae].nodeValue){return ag.attributes[ae].nodeValue}var ad;var ac=ag.attributes;if(!ac){return}for(ad=0;ad<ac.length;ad++){if(ac[ad].nodeName===ae){return ac[ad].nodeValue}}return null},hasNodeAttributeWithValue:function(ad,ac){var ae=this.getAttributeValueFromNode(ad,ac);return !!ae},hasNodeAttribute:function(ae,ac){if(ae&&ae.hasAttribute){return ae.hasAttribute(ac)}if(ae&&ae.attributes){var ad=(typeof ae.attributes[ac]);return"undefined"!==ad}return false
-},hasNodeCssClass:function(ae,ac){if(ae&&ac&&ae.className){var ad=typeof ae.className==="string"?ae.className.split(" "):[];if(-1!==E(ad,ac)){return true}}return false},findNodesHavingAttribute:function(ag,ae,ac){if(!ac){ac=[]}if(!ag||!ae){return ac}var af=H(ag);if(!af||!af.length){return ac}var ad,ah;for(ad=0;ad<af.length;ad++){ah=af[ad];if(this.hasNodeAttribute(ah,ae)){ac.push(ah)}ac=this.findNodesHavingAttribute(ah,ae,ac)}return ac},findFirstNodeHavingAttribute:function(ae,ad){if(!ae||!ad){return}if(this.hasNodeAttribute(ae,ad)){return ae}var ac=this.findNodesHavingAttribute(ae,ad);if(ac&&ac.length){return ac[0]}},findFirstNodeHavingAttributeWithValue:function(af,ae){if(!af||!ae){return}if(this.hasNodeAttributeWithValue(af,ae)){return af}var ac=this.findNodesHavingAttribute(af,ae);if(!ac||!ac.length){return}var ad;for(ad=0;ad<ac.length;ad++){if(this.getAttributeValueFromNode(ac[ad],ae)){return ac[ad]}}},findNodesHavingCssClass:function(ag,af,ac){if(!ac){ac=[]}if(!ag||!af){return ac}if(ag.getElementsByClassName){var ah=ag.getElementsByClassName(af);
-return this.htmlCollectionToArray(ah)}var ae=H(ag);if(!ae||!ae.length){return[]}var ad,ai;for(ad=0;ad<ae.length;ad++){ai=ae[ad];if(this.hasNodeCssClass(ai,af)){ac.push(ai)}ac=this.findNodesHavingCssClass(ai,af,ac)}return ac},findFirstNodeHavingClass:function(ae,ad){if(!ae||!ad){return}if(this.hasNodeCssClass(ae,ad)){return ae}var ac=this.findNodesHavingCssClass(ae,ad);if(ac&&ac.length){return ac[0]}},isLinkElement:function(ad){if(!ad){return false}var ac=String(ad.nodeName).toLowerCase();var af=["a","area"];var ae=E(af,ac);return ae!==-1},setAnyAttribute:function(ad,ac,ae){if(!ad||!ac){return}if(ad.setAttribute){ad.setAttribute(ac,ae)}else{ad[ac]=ae}}};var p={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var ad="."+this.CONTENT_CLASS;
-var ac="["+this.CONTENT_ATTR+"]";var ae=U.findMultiple([ad,ac]);return ae},findContentNodesWithinNode:function(af){if(!af){return[]}var ad=U.findNodesHavingCssClass(af,this.CONTENT_CLASS);var ac=U.findNodesHavingAttribute(af,this.CONTENT_ATTR);if(ac&&ac.length){var ae;for(ae=0;ae<ac.length;ae++){ad.push(ac[ae])}}if(U.hasNodeAttribute(af,this.CONTENT_ATTR)){ad.push(af)}else{if(U.hasNodeCssClass(af,this.CONTENT_CLASS)){ad.push(af)}}ad=U.makeNodesUnique(ad);return ad},findParentContentNode:function(ad){if(!ad){return}var ae=ad;var ac=0;while(ae&&ae!==y&&ae.parentNode){if(U.hasNodeAttribute(ae,this.CONTENT_ATTR)){return ae}if(U.hasNodeCssClass(ae,this.CONTENT_CLASS)){return ae}ae=ae.parentNode;if(ac>1000){break}ac++}},findPieceNode:function(ad){var ac;ac=U.findFirstNodeHavingAttribute(ad,this.CONTENT_PIECE_ATTR);if(!ac){ac=U.findFirstNodeHavingClass(ad,this.CONTENT_PIECE_CLASS)}if(ac){return ac}return ad},findTargetNodeNoDefault:function(ac){if(!ac){return}var ad=U.findFirstNodeHavingAttributeWithValue(ac,this.CONTENT_TARGET_ATTR);
-if(ad){return ad}ad=U.findFirstNodeHavingAttribute(ac,this.CONTENT_TARGET_ATTR);if(ad){return ad}ad=U.findFirstNodeHavingClass(ac,this.CONTENT_TARGET_CLASS);if(ad){return ad}},findTargetNode:function(ac){var ad=this.findTargetNodeNoDefault(ac);if(ad){return ad}return ac},findContentName:function(ad){if(!ad){return}var ag=U.findFirstNodeHavingAttributeWithValue(ad,this.CONTENT_NAME_ATTR);if(ag){return U.getAttributeValueFromNode(ag,this.CONTENT_NAME_ATTR)}var ac=this.findContentPiece(ad);if(ac){return this.removeDomainIfIsInLink(ac)}if(U.hasNodeAttributeWithValue(ad,"title")){return U.getAttributeValueFromNode(ad,"title")}var ae=this.findPieceNode(ad);if(U.hasNodeAttributeWithValue(ae,"title")){return U.getAttributeValueFromNode(ae,"title")}var af=this.findTargetNode(ad);if(U.hasNodeAttributeWithValue(af,"title")){return U.getAttributeValueFromNode(af,"title")}},findContentPiece:function(ad){if(!ad){return}var af=U.findFirstNodeHavingAttributeWithValue(ad,this.CONTENT_PIECE_ATTR);if(af){return U.getAttributeValueFromNode(af,this.CONTENT_PIECE_ATTR)
-}var ac=this.findPieceNode(ad);var ae=this.findMediaUrlInNode(ac);if(ae){return this.toAbsoluteUrl(ae)}},findContentTarget:function(ae){if(!ae){return}var af=this.findTargetNode(ae);if(U.hasNodeAttributeWithValue(af,this.CONTENT_TARGET_ATTR)){return U.getAttributeValueFromNode(af,this.CONTENT_TARGET_ATTR)}var ad;if(U.hasNodeAttributeWithValue(af,"href")){ad=U.getAttributeValueFromNode(af,"href");return this.toAbsoluteUrl(ad)}var ac=this.findPieceNode(ae);if(U.hasNodeAttributeWithValue(ac,"href")){ad=U.getAttributeValueFromNode(ac,"href");return this.toAbsoluteUrl(ad)}},isSameDomain:function(ac){if(!ac||!ac.indexOf){return false}if(0===ac.indexOf(this.getLocation().origin)){return true}var ad=ac.indexOf(this.getLocation().host);if(8>=ad&&0<=ad){return true}return false},removeDomainIfIsInLink:function(ae){var ad="^https?://[^/]+";var ac="^.*//[^/]+";if(ae&&ae.search&&-1!==ae.search(new RegExp(ad))&&this.isSameDomain(ae)){ae=ae.replace(new RegExp(ac),"");if(!ae){ae="/"}}return ae},findMediaUrlInNode:function(ag){if(!ag){return
-}var ae=["img","embed","video","audio"];var ac=ag.nodeName.toLowerCase();if(-1!==E(ae,ac)&&U.findFirstNodeHavingAttributeWithValue(ag,"src")){var af=U.findFirstNodeHavingAttributeWithValue(ag,"src");return U.getAttributeValueFromNode(af,"src")}if(ac==="object"&&U.hasNodeAttributeWithValue(ag,"data")){return U.getAttributeValueFromNode(ag,"data")}if(ac==="object"){var ah=U.findNodesByTagName(ag,"param");if(ah&&ah.length){var ad;for(ad=0;ad<ah.length;ad++){if("movie"===U.getAttributeValueFromNode(ah[ad],"name")&&U.hasNodeAttributeWithValue(ah[ad],"value")){return U.getAttributeValueFromNode(ah[ad],"value")}}}var ai=U.findNodesByTagName(ag,"embed");if(ai&&ai.length){return this.findMediaUrlInNode(ai[0])}}},trim:function(ac){if(ac&&String(ac)===ac){return ac.replace(/^\s+|\s+$/g,"")}return ac},isOrWasNodeInViewport:function(ah){if(!ah||!ah.getBoundingClientRect||ah.nodeType!==1){return true}var ag=ah.getBoundingClientRect();var af=y.documentElement||{};var ae=ag.top<0;if(ae&&ah.offsetTop){ae=(ah.offsetTop+ag.height)>0
-}var ad=af.clientWidth;if(L.innerWidth&&ad>L.innerWidth){ad=L.innerWidth}var ac=af.clientHeight;if(L.innerHeight&&ac>L.innerHeight){ac=L.innerHeight}return((ag.bottom>0||ae)&&ag.right>0&&ag.left<ad&&((ag.top<ac)||ae))},isNodeVisible:function(ad){var ac=h(ad);var ae=this.isOrWasNodeInViewport(ad);return ac&&ae},buildInteractionRequestParams:function(ac,ad,ae,af){var ag="";if(ac){ag+="c_i="+n(ac)}if(ad){if(ag){ag+="&"}ag+="c_n="+n(ad)}if(ae){if(ag){ag+="&"}ag+="c_p="+n(ae)}if(af){if(ag){ag+="&"}ag+="c_t="+n(af)}return ag},buildImpressionRequestParams:function(ac,ad,ae){var af="c_n="+n(ac)+"&c_p="+n(ad);if(ae){af+="&c_t="+n(ae)}return af},buildContentBlock:function(ae){if(!ae){return}var ac=this.findContentName(ae);var ad=this.findContentPiece(ae);var af=this.findContentTarget(ae);ac=this.trim(ac);ad=this.trim(ad);af=this.trim(af);return{name:ac||"Unknown",piece:ad||"Unknown",target:af||""}},collectContent:function(af){if(!af||!af.length){return[]}var ae=[];var ac,ad;for(ac=0;ac<af.length;
-ac++){ad=this.buildContentBlock(af[ac]);if(B(ad)){ae.push(ad)}}return ae},setLocation:function(ac){this.location=ac},getLocation:function(){var ac=this.location||L.location;if(!ac.origin){ac.origin=ac.protocol+"//"+ac.hostname+(ac.port?":"+ac.port:"")}return ac},toAbsoluteUrl:function(ad){if((!ad||String(ad)!==ad)&&ad!==""){return ad}if(""===ad){return this.getLocation().href}if(ad.search(/^\/\//)!==-1){return this.getLocation().protocol+ad}if(ad.search(/:\/\//)!==-1){return ad}if(0===ad.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ad}if(0===ad.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ad}if(0===ad.search("^[a-zA-Z]{2,11}:")){return ad}if(ad.search(/^\//)!==-1){return this.getLocation().origin+ad}var ac="(.*/)";var ae=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ac))[0];return ae+ad},isUrlToCurrentDomain:function(ad){var ae=this.toAbsoluteUrl(ad);if(!ae){return false}var ac=this.getLocation().origin;
-if(ac===ae){return true}if(0===String(ae).indexOf(ac)){if(":"===String(ae).substr(ac.length,1)){return false}return true}return false},setHrefAttribute:function(ad,ac){if(!ad||!ac){return}U.setAnyAttribute(ad,"href",ac)},shouldIgnoreInteraction:function(ae){var ad=U.hasNodeAttribute(ae,this.CONTENT_IGNOREINTERACTION_ATTR);var ac=U.hasNodeCssClass(ae,this.CONTENT_IGNOREINTERACTION_CLASS);return ad||ac}};function G(ad,ag){if(ag){return ag}if(s(ad,"?")){var af=ad.indexOf("?");ad=ad.slice(0,af)}if(J(ad,"piwik.php")){ad=e(ad,"piwik.php".length)}else{if(J(ad,".php")){var ac=ad.lastIndexOf("/");var ae=1;ad=ad.slice(0,ac+ae)}}if(J(ad,"/js/")){ad=e(ad,"js/".length)}return ad}function F(ai){var ak="Piwik_Overlay";var ad=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var ae=ad.exec(y.referrer);if(ae){var ag=ae[1];if(ag!==String(ai)){return false}var ah=ae[2],ac=ae[3],af=ae[4];if(!af){af=""}else{if(af.indexOf("&segment=")===0){af=af.substr("&segment=".length)
-}}L.name=ak+"###"+ah+"###"+ac+"###"+af}var aj=L.name.split("###");return aj.length===4&&aj[0]===ak}function Q(ad,aj,af){var ai=L.name.split("###"),ah=ai[1],ac=ai[2],ag=ai[3],ae=G(ad,aj);j(ae+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(ae,af,ah,ac,ag)})}function o(){var ae;try{ae=L.frameElement}catch(ad){return true}if(B(ae)){return(ae&&String(ae.nodeName).toLowerCase()==="iframe")?true:false}try{return L.self!==L.top}catch(ac){return true}}function I(bM,bG){var bC=R(y.domain,L.location.href,C()),cl=D(bC[0]),bm=k(bC[1]),a1=k(bC[2]),cj=false,bQ="GET",cx=bQ,aq="application/x-www-form-urlencoded; charset=UTF-8",b2=aq,am=bM||"",bh="",cp="",bE=bG||"",ba="",bn="",aL,aX="",cu=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ai=[cl],bb=[],bk=[],aO=[],bi=500,cc,aM,bq,bo,ac,bY=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bg=["pk_kwd","piwik_kwd","utm_term"],aY="_pk_",cn,a3,aZ=false,ch,aU,a7,cd=33955200000,bW=1800000,ct=15768000000,aJ=true,bU=0,bp=false,ay=false,bJ,bu={},bT={},a0={},a6=200,cq={},cv={},bI=[],bN=false,b6=false,ad=false,cw=false,aw=false,aT=o(),co=null,bK,az,bc,bF=Z,a2,at;
-try{aX=y.title}catch(b4){aX=""}function cA(cK,cH,cG,cJ,cF,cI){if(aZ){return}var cE;if(cG){cE=new Date();cE.setTime(cE.getTime()+cG)}y.cookie=cK+"="+n(cH)+(cG?";expires="+cE.toGMTString():"")+";path="+(cJ||"/")+(cF?";domain="+cF:"")+(cI?";secure":"")}function al(cG){if(aZ){return 0}var cE=new RegExp("(^|;)[ ]*"+cG+"=([^;]*)"),cF=cE.exec(y.cookie);return cF?K(cF[2]):0}function bA(cE){var cF;if(bo){cF=new RegExp("#.*");return cE.replace(cF,"")}return cE}function bt(cG,cE){var cH=m(cE),cF;if(cH){return cE}if(cE.slice(0,1)==="/"){return m(cG)+"://"+c(cG)+cE}cG=bA(cG);cF=cG.indexOf("?");if(cF>=0){cG=cG.slice(0,cF)}cF=cG.lastIndexOf("/");if(cF!==cG.length-1){cG=cG.slice(0,cF+1)}return cG+cE}function ca(cG,cE){var cF;cG=String(cG).toLowerCase();cE=String(cE).toLowerCase();if(cG===cE){return true}if(cE.slice(0,1)==="."){if(cG===cE.slice(1)){return true}cF=cG.length-cE.length;if((cF>0)&&(cG.slice(cF)===cE)){return true}}return false}function bS(cE){var cF=document.createElement("a");if(cE.indexOf("//")!==0&&cE.indexOf("http")!==0){if(cE.indexOf("*")===0){cE=cE.substr(1)
-}if(cE.indexOf(".")===0){cE=cE.substr(1)}cE="http://"+cE}cF.href=p.toAbsoluteUrl(cE);if(cF.pathname){return cF.pathname}return""}function aK(cF,cE){if(!X(cE,"/")){cE="/"+cE}if(!X(cF,"/")){cF="/"+cF}var cG=(cE==="/"||cE==="/*");if(cG){return true}if(cF===cE){return true}cE=String(cE).toLowerCase();cF=String(cF).toLowerCase();if(J(cE,"*")){cE=cE.slice(0,-1);cG=(!cE||cE==="/");if(cG){return true}if(cF===cE){return true}return cF.indexOf(cE)===0}if(!J(cF,"/")){cF+="/"}if(!J(cE,"/")){cE+="/"}return cF.indexOf(cE)===0}function af(cI,cK){var cF,cE,cG,cH,cJ;for(cF=0;cF<ai.length;cF++){cH=D(ai[cF]);cJ=bS(ai[cF]);if(ca(cI,cH)&&aK(cK,cJ)){return true}}return false}function aD(cH){var cF,cE,cG;for(cF=0;cF<ai.length;cF++){cE=D(ai[cF].toLowerCase());if(cH===cE){return true}if(cE.slice(0,1)==="."){if(cH===cE.slice(1)){return true}cG=cH.length-cE.length;if((cG>0)&&(cH.slice(cG)===cE)){return true}}}return false}function bX(cE,cG){var cF=new Image(1,1);cF.onload=function(){x=0;if(typeof cG==="function"){cG()
-}};cE=cE.replace("send_image=0","send_image=1");cF.src=am+(am.indexOf("?")<0?"?":"&")+cE}function cs(cF,cI,cE){if(!B(cE)||null===cE){cE=true}try{var cH=L.XMLHttpRequest?new L.XMLHttpRequest():L.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;cH.open("POST",am,true);cH.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)&&cE){bX(cF,cI)}else{if(this.readyState===4&&(typeof cI==="function")){cI()}}};cH.setRequestHeader("Content-Type",b2);cH.send(cF)}catch(cG){if(cE){bX(cF,cI)}}}function bO(cF){var cE=new Date();var cG=cE.getTime()+cF;if(!l||cG>l){l=cG}}function bV(cE){if(bK||!aM){return}bK=setTimeout(function cF(){bK=null;if(!aT){aT=(!y.hasFocus||y.hasFocus())}if(!aT){bV(aM);return}if(bq()){return}var cG=new Date(),cH=aM-(cG.getTime()-co);cH=Math.min(aM,cH);bV(cH)},cE||aM)}function bj(){if(!bK){return}clearTimeout(bK);bK=null}function aQ(){aT=true;if(bq()){return}bV()}function aj(){bj()}function cC(){if(aw||!aM){return}aw=true;aa(L,"focus",aQ);
-aa(L,"blur",aj);bV()}function b7(cI){var cF=new Date();var cE=cF.getTime();co=cE;if(b6&&cE<b6){var cG=b6-cE;setTimeout(cI,cG);bO(cG+50);b6+=50;return}if(b6===false){var cH=800;b6=cE+cH}cI()}function bf(cF,cE,cG){if(!ch&&cF){b7(function(){if(cx==="POST"){cs(cF,cG)}else{bX(cF,cG)}bO(cE)})}if(!aw){cC()}else{bV()}}function bR(cE){if(ch){return false}return(cE&&cE.length)}function cB(cG,cE){if(!bR(cG)){return}var cF='{"requests":["?'+cG.join('","?')+'"]}';b7(function(){cs(cF,null,false);bO(cE)})}function aB(cE){return aY+cE+"."+bE+"."+a2}function bD(){if(aZ){return"0"}if(!B(f.cookieEnabled)){var cE=aB("testcookie");cA(cE,"1");return al(cE)==="1"?"1":"0"}return f.cookieEnabled?"1":"0"}function aW(){a2=bF((cn||cl)+(a3||"/")).slice(0,4)}function bv(){var cF=aB("cvar"),cE=al(cF);if(cE.length){cE=JSON2.parse(cE);if(O(cE)){return cE}}return{}}function b8(){if(ay===false){ay=bv()}}function ci(){return bF((f.userAgent||"")+(f.platform||"")+JSON2.stringify(cv)+(new Date()).getTime()+Math.random()).slice(0,16)
-}function cf(){var cG=new Date(),cE=Math.round(cG.getTime()/1000),cF=aB("id"),cJ=al(cF),cI,cH;if(cJ){cI=cJ.split(".");cI.unshift("0");if(bn.length){cI[1]=bn}return cI}if(bn.length){cH=bn}else{if("0"===bD()){cH=""}else{cH=ci()}}cI=["1",cH,cE,0,cE,"",""];return cI}function aF(){var cL=cf(),cH=cL[0],cI=cL[1],cF=cL[2],cE=cL[3],cJ=cL[4],cG=cL[5];if(!B(cL[6])){cL[6]=""}var cK=cL[6];return{newVisitor:cH,uuid:cI,createTs:cF,visitCount:cE,currentVisitTs:cJ,lastVisitTs:cG,lastEcommerceOrderTs:cK}}function ap(){var cH=new Date(),cF=cH.getTime(),cI=aF().createTs;var cE=parseInt(cI,10);var cG=(cE*1000)+cd-cF;return cG}function au(cE){if(!bE){return}var cG=new Date(),cF=Math.round(cG.getTime()/1000);if(!B(cE)){cE=aF()}var cH=cE.uuid+"."+cE.createTs+"."+cE.visitCount+"."+cF+"."+cE.lastVisitTs+"."+cE.lastEcommerceOrderTs;cA(aB("id"),cH,ap(),a3,cn)}function bl(){var cE=al(aB("ref"));if(cE.length){try{cE=JSON2.parse(cE);if(O(cE)){return cE}}catch(cF){}}return["","",0,""]}function bw(cG,cF,cE){cA(cG,"",-86400,cF,cE)
-}function a8(cF){var cE="testvalue";cA("test",cE,10000,null,cF);if(al("test")===cE){bw("test",null,cF);return true}return false}function an(){var cG=aZ;aZ=false;var cE=["id","ses","cvar","ref"];var cF,cH;for(cF=0;cF<cE.length;cF++){cH=aB(cE[cF]);if(0!==al(cH)){bw(cH,a3,cn)}}aZ=cG}function bB(cE){bE=cE;au()}function cD(cI){if(!cI||!O(cI)){return}var cH=[];var cG;for(cG in cI){if(Object.prototype.hasOwnProperty.call(cI,cG)){cH.push(cG)}}var cJ={};cH.sort();var cE=cH.length;var cF;for(cF=0;cF<cE;cF++){cJ[cH[cF]]=cI[cH[cF]]}return cJ}function bL(){cA(aB("ses"),"*",bW,a3,cn)}function aV(){var cH="";var cF="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var cG=cF.length;var cE;for(cE=0;cE<6;cE++){cH+=cF.charAt(Math.floor(Math.random()*cG))}return cH}function bZ(cG,c1,c2,cH){var c0,cF=new Date(),cO=Math.round(cF.getTime()/1000),cL,cZ,cI=1024,c7,cP,cX=ay,cJ=aB("ses"),cV=aB("ref"),cS=aB("cvar"),cT=al(cJ),cY=bl(),c4=aL||bm,cM,cE;if(aZ){an()}if(ch){return""}var cU=aF();if(!B(cH)){cH=""
-}var cR=y.characterSet||y.charset;if(!cR||cR.toLowerCase()==="utf-8"){cR=null}cM=cY[0];cE=cY[1];cL=cY[2];cZ=cY[3];if(!cT){var c3=bW/1000;if(!cU.lastVisitTs||(cO-cU.lastVisitTs)>c3){cU.visitCount++;cU.lastVisitTs=cU.currentVisitTs}if(!a7||!cM.length){for(c0 in bY){if(Object.prototype.hasOwnProperty.call(bY,c0)){cM=N(c4,bY[c0]);if(cM.length){break}}}for(c0 in bg){if(Object.prototype.hasOwnProperty.call(bg,c0)){cE=N(c4,bg[c0]);if(cE.length){break}}}}c7=c(a1);cP=cZ.length?c(cZ):"";if(c7.length&&!aD(c7)&&(!a7||!cP.length||aD(cP))){cZ=a1}if(cZ.length||cM.length){cL=cO;cY=[cM,cE,cL,bA(cZ.slice(0,cI))];cA(cV,JSON2.stringify(cY),ct,a3,cn)}}cG+="&idsite="+bE+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+cF.getHours()+"&m="+cF.getMinutes()+"&s="+cF.getSeconds()+"&url="+n(bA(c4))+(a1.length?"&urlref="+n(bA(a1)):"")+((ba&&ba.length)?"&uid="+n(ba):"")+"&_id="+cU.uuid+"&_idts="+cU.createTs+"&_idvc="+cU.visitCount+"&_idn="+cU.newVisitor+(cM.length?"&_rcn="+n(cM):"")+(cE.length?"&_rck="+n(cE):"")+"&_refts="+cL+"&_viewts="+cU.lastVisitTs+(String(cU.lastEcommerceOrderTs).length?"&_ects="+cU.lastEcommerceOrderTs:"")+(String(cZ).length?"&_ref="+n(bA(cZ.slice(0,cI))):"")+(cR?"&cs="+n(cR):"")+"&send_image=0";
-for(c0 in cv){if(Object.prototype.hasOwnProperty.call(cv,c0)){cG+="&"+c0+"="+cv[c0]}}var c6=[];if(c1){for(c0 in c1){if(Object.prototype.hasOwnProperty.call(c1,c0)&&/^dimension\d+$/.test(c0)){var cK=c0.replace("dimension","");c6.push(parseInt(cK,10));c6.push(String(cK));cG+="&"+c0+"="+c1[c0];delete c1[c0]}}}if(c1&&u(c1)){c1=null}for(c0 in a0){if(Object.prototype.hasOwnProperty.call(a0,c0)){var cQ=(-1===E(c6,c0));if(cQ){cG+="&dimension"+c0+"="+a0[c0]}}}if(c1){cG+="&data="+n(JSON2.stringify(c1))}else{if(ac){cG+="&data="+n(JSON2.stringify(ac))}}function cN(c8,c9){var da=JSON2.stringify(c8);if(da.length>2){return"&"+c9+"="+n(da)}return""}var c5=cD(bu);var cW=cD(bT);cG+=cN(c5,"cvar");cG+=cN(cW,"e_cvar");if(ay){cG+=cN(ay,"_cvar");for(c0 in cX){if(Object.prototype.hasOwnProperty.call(cX,c0)){if(ay[c0][0]===""||ay[c0][1]===""){delete ay[c0]}}}if(bp){cA(cS,JSON2.stringify(ay),bW,a3,cn)}}if(aJ){if(bU){cG+="&gt_ms="+bU}else{if(g&&g.timing&&g.timing.requestStart&&g.timing.responseEnd){cG+="&gt_ms="+(g.timing.responseEnd-g.timing.requestStart)
-}}}if(at){cG+="&pv_id="+at}cU.lastEcommerceOrderTs=B(cH)&&String(cH).length?cH:cU.lastEcommerceOrderTs;au(cU);bL();cG+=S(c2);if(cp.length){cG+="&"+cp}if(t(bJ)){cG=bJ(cG)}return cG}bq=function aN(){var cE=new Date();if(co+aM<=cE.getTime()){var cF=bZ("ping=1",null,"ping");bf(cF,bi);return true}return false};function a4(cH,cG,cM,cI,cE,cP){var cK="idgoal=0",cL,cF=new Date(),cN=[],cO,cJ=String(cH).length;if(cJ){cK+="&ec_id="+n(cH);cL=Math.round(cF.getTime()/1000)}cK+="&revenue="+cG;if(String(cM).length){cK+="&ec_st="+cM}if(String(cI).length){cK+="&ec_tx="+cI}if(String(cE).length){cK+="&ec_sh="+cE}if(String(cP).length){cK+="&ec_dt="+cP}if(cq){for(cO in cq){if(Object.prototype.hasOwnProperty.call(cq,cO)){if(!B(cq[cO][1])){cq[cO][1]=""}if(!B(cq[cO][2])){cq[cO][2]=""}if(!B(cq[cO][3])||String(cq[cO][3]).length===0){cq[cO][3]=0}if(!B(cq[cO][4])||String(cq[cO][4]).length===0){cq[cO][4]=1}cN.push(cq[cO])}}cK+="&ec_items="+n(JSON2.stringify(cN))}cK=bZ(cK,ac,"ecommerce",cL);bf(cK,bi);if(cJ){cq={}}}function bx(cE,cI,cH,cG,cF,cJ){if(String(cE).length&&B(cI)){a4(cE,cI,cH,cG,cF,cJ)
-}}function a5(cE){if(B(cE)){a4("",cE,"","","","")}}function by(cF,cH,cG){at=aV();var cE=bZ("action_name="+n(ab(cF||aX)),cH,"log");bf(cE,bi,cG)}function aH(cG,cF){var cH,cE="(^| )(piwik[_-]"+cF;if(cG){for(cH=0;cH<cG.length;cH++){cE+="|"+cG[cH]}}cE+=")( |$)";return new RegExp(cE)}function aC(cE){return(am&&cE&&0===String(cE).indexOf(am))}function b0(cI,cE,cJ,cF){if(aC(cE)){return 0}var cH=aH(bk,"download"),cG=aH(aO,"link"),cK=new RegExp("\\.("+cu.join("|")+")([?&#]|$)","i");if(cG.test(cI)){return"link"}if(cF||cH.test(cI)||cK.test(cE)){return"download"}if(cJ){return 0}return"link"}function ag(cF){var cE;cE=cF.parentNode;while(cE!==null&&B(cE)){if(U.isLinkElement(cF)){break}cF=cE;cE=cF.parentNode}return cF}function cy(cJ){cJ=ag(cJ);if(!U.hasNodeAttribute(cJ,"href")){return}if(!B(cJ.href)){return}var cI=U.getAttributeValueFromNode(cJ,"href");if(aC(cI)){return}var cF=cJ.pathname||bS(cJ.href);var cK=cJ.hostname||c(cJ.href);var cL=cK.toLowerCase();var cG=cJ.href.replace(cK,cL);var cH=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");
-if(!cH.test(cG)){var cE=b0(cJ.className,cG,af(cL,cF),U.hasNodeAttribute(cJ,"download"));if(cE){return{type:cE,href:cG}}}}function ax(cE,cF,cG,cH){var cI=p.buildInteractionRequestParams(cE,cF,cG,cH);if(!cI){return}return bZ(cI,null,"contentInteraction")}function ce(cG,cH,cL,cE,cF){if(!B(cG)){return}if(aC(cG)){return cG}var cJ=p.toAbsoluteUrl(cG);var cI="redirecturl="+n(cJ)+"&";cI+=ax(cH,cL,cE,(cF||cG));var cK="&";if(am.indexOf("?")<0){cK="?"}return am+cK+cI}function aR(cE,cF){if(!cE||!cF){return false}var cG=p.findTargetNode(cE);if(p.shouldIgnoreInteraction(cG)){return false}cG=p.findTargetNodeNoDefault(cE);if(cG&&!M(cG,cF)){return false}return true}function b1(cG,cF,cI){if(!cG){return}var cE=p.findParentContentNode(cG);if(!cE){return}if(!aR(cE,cG)){return}var cH=p.buildContentBlock(cE);if(!cH){return}if(!cH.target&&cI){cH.target=cI}return p.buildInteractionRequestParams(cF,cH.name,cH.piece,cH.target)}function aE(cF){if(!bI||!bI.length){return false}var cE,cG;for(cE=0;cE<bI.length;cE++){cG=bI[cE];
-if(cG&&cG.name===cF.name&&cG.piece===cF.piece&&cG.target===cF.target){return true}}return false}function be(cH){if(!cH){return false}var cK=p.findTargetNode(cH);if(!cK||p.shouldIgnoreInteraction(cK)){return false}var cL=cy(cK);if(cw&&cL&&cL.type){return false}if(U.isLinkElement(cK)&&U.hasNodeAttributeWithValue(cK,"href")){var cE=String(U.getAttributeValueFromNode(cK,"href"));if(0===cE.indexOf("#")){return false}if(aC(cE)){return true}if(!p.isUrlToCurrentDomain(cE)){return false}var cI=p.buildContentBlock(cH);if(!cI){return}var cG=cI.name;var cM=cI.piece;var cJ=cI.target;if(!U.hasNodeAttributeWithValue(cK,p.CONTENT_TARGET_ATTR)||cK.wasContentTargetAttrReplaced){cK.wasContentTargetAttrReplaced=true;cJ=p.toAbsoluteUrl(cE);U.setAnyAttribute(cK,p.CONTENT_TARGET_ATTR,cJ)}var cF=ce(cE,"click",cG,cM,cJ);p.setHrefAttribute(cK,cF);return true}return false}function av(cF){if(!cF||!cF.length){return}var cE;for(cE=0;cE<cF.length;cE++){be(cF[cE])}}function aG(cE){return function(cF){if(!cE){return}var cI=p.findParentContentNode(cE);
-var cJ;if(cF){cJ=cF.target||cF.srcElement}if(!cJ){cJ=cE}if(!aR(cI,cJ)){return}bO(bi);if(U.isLinkElement(cE)&&U.hasNodeAttributeWithValue(cE,"href")&&U.hasNodeAttributeWithValue(cE,p.CONTENT_TARGET_ATTR)){var cG=U.getAttributeValueFromNode(cE,"href");if(!aC(cG)&&cE.wasContentTargetAttrReplaced){U.setAnyAttribute(cE,p.CONTENT_TARGET_ATTR,"")}}var cN=cy(cE);if(ad&&cN&&cN.type){return cN.type}if(be(cI)){return"href"}var cK=p.buildContentBlock(cI);if(!cK){return}var cH=cK.name;var cO=cK.piece;var cM=cK.target;var cL=ax("click",cH,cO,cM);bf(cL,bi);return cL}}function bz(cG){if(!cG||!cG.length){return}var cE,cF;for(cE=0;cE<cG.length;cE++){cF=p.findTargetNode(cG[cE]);if(cF&&!cF.contentInteractionTrackingSetupDone){cF.contentInteractionTrackingSetupDone=true;aa(cF,"click",aG(cF))}}}function a9(cG,cH){if(!cG||!cG.length){return[]}var cE,cF;for(cE=0;cE<cG.length;cE++){if(aE(cG[cE])){cG.splice(cE,1);cE--}else{bI.push(cG[cE])}}if(!cG||!cG.length){return[]}av(cH);bz(cH);var cI=[];for(cE=0;cE<cG.length;
-cE++){cF=bZ(p.buildImpressionRequestParams(cG[cE].name,cG[cE].piece,cG[cE].target),undefined,"contentImpressions");if(cF){cI.push(cF)}}return cI}function b5(cF){var cE=p.collectContent(cF);return a9(cE,cF)}function aP(cF){if(!cF||!cF.length){return[]}var cE;for(cE=0;cE<cF.length;cE++){if(!p.isNodeVisible(cF[cE])){cF.splice(cE,1);cE--}}if(!cF||!cF.length){return[]}return b5(cF)}function ao(cG,cE,cF){var cH=p.buildImpressionRequestParams(cG,cE,cF);return bZ(cH,null,"contentImpression")}function cz(cH,cF){if(!cH){return}var cE=p.findParentContentNode(cH);var cG=p.buildContentBlock(cE);if(!cG){return}if(!cF){cF="Unknown"}return ax(cF,cG.name,cG.piece,cG.target)}function cg(cF,cH,cE,cG){return"e_c="+n(cF)+"&e_a="+n(cH)+(B(cE)?"&e_n="+n(cE):"")+(B(cG)?"&e_v="+n(cG):"")}function ah(cG,cI,cE,cH,cK,cJ){if(String(cG).length===0||String(cI).length===0){return false}var cF=bZ(cg(cG,cI,cE,cH),cK,"event");bf(cF,bi,cJ)}function bH(cE,cH,cF,cI){var cG=bZ("search="+n(cE)+(cH?"&search_cat="+n(cH):"")+(B(cF)?"&search_count="+cF:""),cI,"sitesearch");
-bf(cG,bi)}function ck(cE,cH,cG){var cF=bZ("idgoal="+cE+(cH?"&revenue="+cH:""),cG,"goal");bf(cF,bi)}function cr(cH,cE,cL,cK,cG){var cJ=cE+"="+n(bA(cH));var cF=b1(cG,"click",cH);if(cF){cJ+="&"+cF}var cI=bZ(cJ,cL,"link");bf(cI,bi,cK)}function bs(cF,cE){if(cF!==""){return cF+cE.charAt(0).toUpperCase()+cE.slice(1)}return cE}function bP(cJ){var cI,cE,cH=["","webkit","ms","moz"],cG;if(!aU){for(cE=0;cE<cH.length;cE++){cG=cH[cE];if(Object.prototype.hasOwnProperty.call(y,bs(cG,"hidden"))){if(y[bs(cG,"visibilityState")]==="prerender"){cI=true}break}}}if(cI){aa(y,cG+"visibilitychange",function cF(){y.removeEventListener(cG+"visibilitychange",cF,false);cJ()});return}cJ()}function ar(cE){if(y.readyState==="complete"){cE()}else{if(L.addEventListener){L.addEventListener("load",cE)}else{if(L.attachEvent){L.attachEvent("onload",cE)}}}}function aS(cH){var cE=false;if(y.attachEvent){cE=y.readyState==="complete"}else{cE=y.readyState!=="loading"}if(cE){cH();return}var cG;if(y.addEventListener){aa(y,"DOMContentLoaded",function cF(){y.removeEventListener("DOMContentLoaded",cF,false);
-if(!cE){cE=true;cH()}})}else{if(y.attachEvent){y.attachEvent("onreadystatechange",function cF(){if(y.readyState==="complete"){y.detachEvent("onreadystatechange",cF);if(!cE){cE=true;cH()}}});if(y.documentElement.doScroll&&L===L.top){(function cF(){if(!cE){try{y.documentElement.doScroll("left")}catch(cI){setTimeout(cF,0);return}cE=true;cH()}}())}}}aa(L,"load",function(){if(!cE){cE=true;cH()}},false)}function cb(cE){var cF=cy(cE);if(cF&&cF.type){cF.href=k(cF.href);cr(cF.href,cF.type,undefined,null,cE)}}function b3(){return y.all&&!y.addEventListener}function cm(cE){var cG=cE.which;var cF=(typeof cE.button);if(!cG&&cF!=="undefined"){if(b3()){if(cE.button&1){cG=1}else{if(cE.button&2){cG=3}else{if(cE.button&4){cG=2}}}}else{if(cE.button===0||cE.button==="0"){cG=1}else{if(cE.button&1){cG=2}else{if(cE.button&2){cG=3}}}}}return cG}function br(cE){switch(cm(cE)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aI(cE){return cE.target||cE.srcElement}function ak(cE){return function(cH){cH=cH||L.event;
-var cG=br(cH);var cI=aI(cH);if(cH.type==="click"){var cF=false;if(cE&&cG==="middle"){cF=true}if(cI&&!cF){cb(cI)}}else{if(cH.type==="mousedown"){if(cG==="middle"&&cI){az=cG;bc=cI}else{az=bc=null}}else{if(cH.type==="mouseup"){if(cG===az&&cI===bc){cb(cI)}az=bc=null}else{if(cH.type==="contextmenu"){cb(cI)}}}}}}function ae(cF,cE){aa(cF,"click",ak(cE),false);if(cE){aa(cF,"mouseup",ak(cE),false);aa(cF,"mousedown",ak(cE),false);aa(cF,"contextmenu",ak(cE),false)}}function bd(cF){if(!ad){ad=true;var cG,cE=aH(bb,"ignore"),cH=y.links;if(cH){for(cG=0;cG<cH.length;cG++){if(!cE.test(cH[cG].className)){ae(cH[cG],cF)}}}}}function aA(cG,cI,cJ){if(bN){return true}bN=true;var cK=false;var cH,cF;function cE(){cK=true}ar(function(){function cL(cN){setTimeout(function(){if(!bN){return}cK=false;cJ.trackVisibleContentImpressions();cL(cN)},cN)}function cM(cN){setTimeout(function(){if(!bN){return}if(cK){cK=false;cJ.trackVisibleContentImpressions()}cM(cN)},cN)}if(cG){cH=["scroll","resize"];for(cF=0;cF<cH.length;cF++){if(y.addEventListener){y.addEventListener(cH[cF],cE)
-}else{L.attachEvent("on"+cH[cF],cE)}}cM(100)}if(cI&&cI>0){cI=parseInt(cI,10);cL(cI)}})}function b9(){var cF,cH,cI={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(f.userAgent))){if(f.mimeTypes&&f.mimeTypes.length){for(cF in cI){if(Object.prototype.hasOwnProperty.call(cI,cF)){cH=f.mimeTypes[cI[cF]];cv[cF]=(cH&&cH.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&B(f.javaEnabled)&&f.javaEnabled()){cv.java="1"}if(t(L.GearsFactory)){cv.gears="1"}cv.cookie=bD()}var cG=parseInt(P.width,10);var cE=parseInt(P.height,10);cv.res=parseInt(cG,10)+"x"+parseInt(cE,10)}b9();aW();au();this.getVisitorId=function(){return aF().uuid};this.getVisitorInfo=function(){return cf()};this.getAttributionInfo=function(){return bl()};this.getAttributionCampaignName=function(){return bl()[0]
-};this.getAttributionCampaignKeyword=function(){return bl()[1]};this.getAttributionReferrerTimestamp=function(){return bl()[2]};this.getAttributionReferrerUrl=function(){return bl()[3]};this.setTrackerUrl=function(cE){am=cE};this.getTrackerUrl=function(){return am};this.addTracker=function(cE,cG){if(!cG){throw new Error("A siteId must be given to add a new tracker")}if(!B(cE)||null===cE){cE=this.getTrackerUrl()}var cF=new I(cE,cG);A.push(cF);return cF};this.getSiteId=function(){return bE};this.setSiteId=function(cE){bB(cE)};this.setUserId=function(cE){if(!B(cE)||!cE.length){return}ba=cE;bn=bF(ba).substr(0,16)};this.getUserId=function(){return ba};this.setCustomData=function(cE,cF){if(O(cE)){ac=cE}else{if(!ac){ac={}}ac[cE]=cF}};this.getCustomData=function(){return ac};this.setCustomRequestProcessing=function(cE){bJ=cE};this.appendToTrackingUrl=function(cE){cp=cE};this.getRequest=function(cE){return bZ(cE)};this.addPlugin=function(cE,cF){a[cE]=cF};this.setCustomDimension=function(cE,cF){cE=parseInt(cE,10);
-if(cE>0){if(!B(cF)){cF=""}if(!q(cF)){cF=String(cF)}a0[cE]=cF}};this.getCustomDimension=function(cE){cE=parseInt(cE,10);if(cE>0&&Object.prototype.hasOwnProperty.call(a0,cE)){return a0[cE]}};this.deleteCustomDimension=function(cE){cE=parseInt(cE,10);if(cE>0){delete a0[cE]}};this.setCustomVariable=function(cF,cE,cI,cG){var cH;if(!B(cG)){cG="visit"}if(!B(cE)){return}if(!B(cI)){cI=""}if(cF>0){cE=!q(cE)?String(cE):cE;cI=!q(cI)?String(cI):cI;cH=[cE.slice(0,a6),cI.slice(0,a6)];if(cG==="visit"||cG===2){b8();ay[cF]=cH}else{if(cG==="page"||cG===3){bu[cF]=cH}else{if(cG==="event"){bT[cF]=cH}}}}};this.getCustomVariable=function(cF,cG){var cE;if(!B(cG)){cG="visit"}if(cG==="page"||cG===3){cE=bu[cF]}else{if(cG==="event"){cE=bT[cF]}else{if(cG==="visit"||cG===2){b8();cE=ay[cF]}}}if(!B(cE)||(cE&&cE[0]==="")){return false}return cE};this.deleteCustomVariable=function(cE,cF){if(this.getCustomVariable(cE,cF)){this.setCustomVariable(cE,"","",cF)}};this.storeCustomVariablesInCookie=function(){bp=true};this.setLinkTrackingTimer=function(cE){bi=cE
-};this.setDownloadExtensions=function(cE){if(q(cE)){cE=cE.split("|")}cu=cE};this.addDownloadExtensions=function(cF){var cE;if(q(cF)){cF=cF.split("|")}for(cE=0;cE<cF.length;cE++){cu.push(cF[cE])}};this.removeDownloadExtensions=function(cG){var cF,cE=[];if(q(cG)){cG=cG.split("|")}for(cF=0;cF<cu.length;cF++){if(E(cG,cu[cF])===-1){cE.push(cu[cF])}}cu=cE};this.setDomains=function(cE){ai=q(cE)?[cE]:cE;var cI=false,cG=0,cF;for(cG;cG<ai.length;cG++){cF=String(ai[cG]);if(ca(cl,D(cF))){cI=true;break}var cH=bS(cF);if(cH&&cH!=="/"&&cH!=="/*"){cI=true;break}}if(!cI){ai.push(cl)}};this.setIgnoreClasses=function(cE){bb=q(cE)?[cE]:cE};this.setRequestMethod=function(cE){cx=cE||bQ};this.setRequestContentType=function(cE){b2=cE||aq};this.setReferrerUrl=function(cE){a1=cE};this.setCustomUrl=function(cE){aL=bt(bm,cE)};this.setDocumentTitle=function(cE){aX=cE};this.setAPIUrl=function(cE){bh=cE};this.setDownloadClasses=function(cE){bk=q(cE)?[cE]:cE};this.setLinkClasses=function(cE){aO=q(cE)?[cE]:cE};this.setCampaignNameKey=function(cE){bY=q(cE)?[cE]:cE
-};this.setCampaignKeywordKey=function(cE){bg=q(cE)?[cE]:cE};this.discardHashTag=function(cE){bo=cE};this.setCookieNamePrefix=function(cE){aY=cE;ay=bv()};this.setCookieDomain=function(cE){var cF=D(cE);if(a8(cF)){cn=cF;aW()}};this.setCookiePath=function(cE){a3=cE;aW()};this.setVisitorCookieTimeout=function(cE){cd=cE*1000};this.setSessionCookieTimeout=function(cE){bW=cE*1000};this.setReferralCookieTimeout=function(cE){ct=cE*1000};this.setConversionAttributionFirstReferrer=function(cE){a7=cE};this.disableCookies=function(){aZ=true;cv.cookie="0";if(bE){an()}};this.deleteCookies=function(){an()};this.setDoNotTrack=function(cF){var cE=f.doNotTrack||f.msDoNotTrack;ch=cF&&(cE==="yes"||cE==="1");if(ch){this.disableCookies()}};this.addListener=function(cF,cE){ae(cF,cE)};this.enableLinkTracking=function(cE){cw=true;bP(function(){aS(function(){bd(cE)})})};this.enableJSErrorTracking=function(){if(cj){return}cj=true;var cE=L.onerror;L.onerror=function(cJ,cH,cG,cI,cF){bP(function(){var cK="JavaScript Errors";
-var cL=cH+":"+cG;if(cI){cL+=":"+cI}ah(cK,cL,cJ)});if(cE){return cE(cJ,cH,cG,cI,cF)}return false}};this.disablePerformanceTracking=function(){aJ=false};this.setGenerationTimeMs=function(cE){bU=parseInt(cE,10)};this.enableHeartBeatTimer=function(cE){cE=Math.max(cE,1);aM=(cE||15)*1000;if(co!==null){cC()}};this.killFrame=function(){if(L.location!==L.top.location){L.top.location=L.location}};this.redirectFile=function(cE){if(L.location.protocol==="file:"){L.location=cE}};this.setCountPreRendered=function(cE){aU=cE};this.trackGoal=function(cE,cG,cF){bP(function(){ck(cE,cG,cF)})};this.trackLink=function(cF,cE,cH,cG){bP(function(){cr(cF,cE,cH,cG)})};this.trackPageView=function(cE,cG,cF){bI=[];if(F(bE)){bP(function(){Q(am,bh,bE)})}else{bP(function(){by(cE,cG,cF)})}};this.trackAllContentImpressions=function(){if(F(bE)){return}bP(function(){aS(function(){var cE=p.findContentNodes();var cF=b5(cE);cB(cF,bi)})})};this.trackVisibleContentImpressions=function(cE,cF){if(F(bE)){return}if(!B(cE)){cE=true}if(!B(cF)){cF=750
-}aA(cE,cF,this);bP(function(){ar(function(){var cG=p.findContentNodes();var cH=aP(cG);cB(cH,bi)})})};this.trackContentImpression=function(cG,cE,cF){if(F(bE)){return}if(!cG){return}cE=cE||"Unknown";bP(function(){var cH=ao(cG,cE,cF);bf(cH,bi)})};this.trackContentImpressionsWithinNode=function(cE){if(F(bE)||!cE){return}bP(function(){if(bN){ar(function(){var cF=p.findContentNodesWithinNode(cE);var cG=aP(cF);cB(cG,bi)})}else{aS(function(){var cF=p.findContentNodesWithinNode(cE);var cG=b5(cF);cB(cG,bi)})}})};this.trackContentInteraction=function(cG,cH,cE,cF){if(F(bE)){return}if(!cG||!cH){return}cE=cE||"Unknown";bP(function(){var cI=ax(cG,cH,cE,cF);bf(cI,bi)})};this.trackContentInteractionNode=function(cF,cE){if(F(bE)||!cF){return}bP(function(){var cG=cz(cF,cE);bf(cG,bi)})};this.logAllContentBlocksOnPage=function(){var cF=p.findContentNodes();var cE=p.collectContent(cF);if(console!==undefined&&console&&console.log){console.log(cE)}};this.trackEvent=function(cF,cH,cE,cG,cJ,cI){bP(function(){ah(cF,cH,cE,cG,cJ,cI)
-})};this.trackSiteSearch=function(cE,cG,cF,cH){bP(function(){bH(cE,cG,cF,cH)})};this.setEcommerceView=function(cH,cE,cG,cF){if(!B(cG)||!cG.length){cG=""}else{if(cG instanceof Array){cG=JSON2.stringify(cG)}}bu[5]=["_pkc",cG];if(B(cF)&&String(cF).length){bu[2]=["_pkp",cF]}if((!B(cH)||!cH.length)&&(!B(cE)||!cE.length)){return}if(B(cH)&&cH.length){bu[3]=["_pks",cH]}if(!B(cE)||!cE.length){cE=""}bu[4]=["_pkn",cE]};this.addEcommerceItem=function(cI,cE,cG,cF,cH){if(cI.length){cq[cI]=[cI,cE,cG,cF,cH]}};this.trackEcommerceOrder=function(cE,cI,cH,cG,cF,cJ){bx(cE,cI,cH,cG,cF,cJ)};this.trackEcommerceCartUpdate=function(cE){a5(cE)};this.trackRequest=function(cE,cG,cF){bP(function(){var cH=bZ(cE,cG);bf(cH,bi,cF)})};d.trigger("TrackerSetup",[this])}function z(){return{push:V}}function b(ah,ag){var ai={};var ae,af;for(ae=0;ae<ag.length;ae++){var ac=ag[ae];ai[ac]=1;for(af=0;af<ah.length;af++){if(ah[af]&&ah[af][0]){var ad=ah[af][0];if(ac===ad){V(ah[af]);delete ah[af];if(ai[ad]>1){Y("The method "+ad+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')
-}ai[ad]++}}}}return ah}var v=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"];function T(ac,ae){var ad=new I(ac,ae);A.push(ad);_paq=b(_paq,v);for(x=0;x<_paq.length;x++){if(_paq[x]){V(_paq[x])}}_paq=new z();return ad}aa(L,"beforeunload",W,false);Date.prototype.getTimeAlias=Date.prototype.getTime;d={initialized:false,on:function(ad,ac){if(!r[ad]){r[ad]=[]}r[ad].push(ac)},off:function(ae,ad){if(!r[ae]){return}var ac=0;for(ac;ac<r[ae].length;ac++){if(r[ae][ac]===ad){delete r[ae][ac]}}},trigger:function(ae,af,ad){if(!r[ae]){return}var ac=0;for(ac;ac<r[ae].length;ac++){r[ae][ac].apply(ad||L,af)}},addPlugin:function(ac,ad){a[ac]=ad},getTracker:function(ac,ad){if(!B(ad)){ad=this.getAsyncTracker().getSiteId()}if(!B(ac)){ac=this.getAsyncTracker().getTrackerUrl()}return new I(ac,ad)},getAsyncTrackers:function(){return A},addTracker:function(ac,ad){if(!A.length){T(ac,ad)}else{A[0].addTracker(ac,ad)
-}},getAsyncTracker:function(ad,ag){var af;if(A&&A[0]){af=A[0]}if(!ag&&!ad){return af}if((!B(ag)||null===ag)&&af){ag=af.getSiteId()}if((!B(ad)||null===ad)&&af){ad=af.getTrackerUrl()}var ae,ac=0;for(ac;ac<A.length;ac++){ae=A[ac];if(ae&&String(ae.getSiteId())===String(ag)&&ae.getTrackerUrl()===ad){return ae}}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return d})}return d}());
+if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON2=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var n,a={},t={},A=document,f=navigator,R=screen,N=window,g=N.performance||N.mozPerformance||N.msPerformance||N.webkitPerformance,p=N.encodeURIComponent,M=N.decodeURIComponent,i=unescape,C=[],z,d,Y=[];
+function l(af){try{return M(af)}catch(ag){return unescape(af)}}function D(ag){var af=typeof ag;return af!=="undefined"}function v(af){return typeof af==="function"}function Q(af){return typeof af==="object"}function s(af){return typeof af==="string"||af instanceof String}function w(ag){if(!ag){return true}var af;var ah=true;for(af in ag){if(Object.prototype.hasOwnProperty.call(ag,af)){ah=false}}return ah}function ab(af){if(console!==undefined&&console&&console.error){console.error(af)}}function X(){var ak,aj,am,ag,af;for(ak=0;ak<arguments.length;ak+=1){af=null;if(arguments[ak]&&arguments[ak].slice){af=arguments[ak].slice()}ag=arguments[ak];am=ag.shift();var al,ah;var ai=s(am)&&am.indexOf("::")>0;if(ai){al=am.split("::");ah=al[0];am=al[1];if("object"===typeof d[ah]&&"function"===typeof d[ah][am]){d[ah][am].apply(d[ah],ag)}else{if(af){Y.push(af)}}}else{for(aj=0;aj<C.length;aj++){if(s(am)){ah=C[aj];var an=am.indexOf(".")>0;if(an){al=am.split(".");if(ah&&"object"===typeof ah[al[0]]){ah=ah[al[0]];
+am=al[1]}else{if(af){Y.push(af);break}}}if(ah[am]){ah[am].apply(ah,ag)}else{var ao="The method '"+am+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript';ab(ao);if(!an){throw new TypeError(ao)}}if(am==="addTracker"){break}if(am==="setTrackerUrl"||am==="setSiteId"){break}}else{am.apply(C[aj],ag)}}}}}function ae(ai,ah,ag,af){if(ai.addEventListener){ai.addEventListener(ah,ag,af);return true}if(ai.attachEvent){return ai.attachEvent("on"+ah,ag)}ai["on"+ah]=ag}function j(af){if(A.readyState==="complete"){af()}else{if(N.addEventListener){N.addEventListener("load",af)}else{if(N.attachEvent){N.attachEvent("onload",af)}}}}function m(ai){var af=false;if(A.attachEvent){af=A.readyState==="complete"}else{af=A.readyState!=="loading"}if(af){ai();return}var ah;if(A.addEventListener){ae(A,"DOMContentLoaded",function ag(){A.removeEventListener("DOMContentLoaded",ag,false);if(!af){af=true;ai()}})}else{if(A.attachEvent){A.attachEvent("onreadystatechange",function ag(){if(A.readyState==="complete"){A.detachEvent("onreadystatechange",ag);
+if(!af){af=true;ai()}}});if(A.documentElement.doScroll&&N===N.top){(function ag(){if(!af){try{A.documentElement.doScroll("left")}catch(aj){setTimeout(ag,0);return}af=true;ai()}}())}}}ae(N,"load",function(){if(!af){af=true;ai()}},false)}function U(ag,ak){var af="",ai,ah,aj;for(ai in a){if(Object.prototype.hasOwnProperty.call(a,ai)){ah=a[ai][ag];if(v(ah)){aj=ah(ak);if(aj){af+=aj}}}}return af}function Z(){var af;U("unload");if(n){do{af=new Date()}while(af.getTimeAlias()<n)}}function k(ah,ag){var af=A.createElement("script");af.type="text/javascript";af.src=ah;if(af.readyState){af.onreadystatechange=function(){var ai=this.readyState;if(ai==="loaded"||ai==="complete"){af.onreadystatechange=null;ag()}}}else{af.onload=ag}A.getElementsByTagName("head")[0].appendChild(af)}function E(){var af="";try{af=N.top.document.referrer}catch(ah){if(N.parent){try{af=N.parent.document.referrer}catch(ag){af=""}}}if(af===""){af=A.referrer}return af}function o(af){var ah=new RegExp("^([a-z]+):"),ag=ah.exec(af);
+return ag?ag[1]:null}function c(af){var ah=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),ag=ah.exec(af);return ag?ag[1]:af}function P(ah,ag){var af="[\\?&#]"+ag+"=([^&#]*)";var aj=new RegExp(af);var ai=aj.exec(ah);return ai?M(ai[1]):""}function y(af){return unescape(p(af))}function ad(av){var ah=function(aB,aA){return(aB<<aA)|(aB>>>(32-aA))},aw=function(aD){var aB="",aC,aA;for(aC=7;aC>=0;aC--){aA=(aD>>>(aC*4))&15;aB+=aA.toString(16)}return aB},ak,ay,ax,ag=[],ao=1732584193,am=4023233417,al=2562383102,aj=271733878,ai=3285377520,au,at,ar,aq,ap,az,af,an=[];av=y(av);af=av.length;for(ay=0;ay<af-3;ay+=4){ax=av.charCodeAt(ay)<<24|av.charCodeAt(ay+1)<<16|av.charCodeAt(ay+2)<<8|av.charCodeAt(ay+3);an.push(ax)}switch(af&3){case 0:ay=2147483648;break;case 1:ay=av.charCodeAt(af-1)<<24|8388608;break;case 2:ay=av.charCodeAt(af-2)<<24|av.charCodeAt(af-1)<<16|32768;break;case 3:ay=av.charCodeAt(af-3)<<24|av.charCodeAt(af-2)<<16|av.charCodeAt(af-1)<<8|128;break}an.push(ay);while((an.length&15)!==14){an.push(0)
+}an.push(af>>>29);an.push((af<<3)&4294967295);for(ak=0;ak<an.length;ak+=16){for(ay=0;ay<16;ay++){ag[ay]=an[ak+ay]}for(ay=16;ay<=79;ay++){ag[ay]=ah(ag[ay-3]^ag[ay-8]^ag[ay-14]^ag[ay-16],1)}au=ao;at=am;ar=al;aq=aj;ap=ai;for(ay=0;ay<=19;ay++){az=(ah(au,5)+((at&ar)|(~at&aq))+ap+ag[ay]+1518500249)&4294967295;ap=aq;aq=ar;ar=ah(at,30);at=au;au=az}for(ay=20;ay<=39;ay++){az=(ah(au,5)+(at^ar^aq)+ap+ag[ay]+1859775393)&4294967295;ap=aq;aq=ar;ar=ah(at,30);at=au;au=az}for(ay=40;ay<=59;ay++){az=(ah(au,5)+((at&ar)|(at&aq)|(ar&aq))+ap+ag[ay]+2400959708)&4294967295;ap=aq;aq=ar;ar=ah(at,30);at=au;au=az}for(ay=60;ay<=79;ay++){az=(ah(au,5)+(at^ar^aq)+ap+ag[ay]+3395469782)&4294967295;ap=aq;aq=ar;ar=ah(at,30);at=au;au=az}ao=(ao+au)&4294967295;am=(am+at)&4294967295;al=(al+ar)&4294967295;aj=(aj+aq)&4294967295;ai=(ai+ap)&4294967295}az=aw(ao)+aw(am)+aw(al)+aw(aj)+aw(ai);return az.toLowerCase()}function T(ah,af,ag){if(!ah){ah=""}if(!af){af=""}if(ah==="translate.googleusercontent.com"){if(ag===""){ag=af}af=P(af,"u");
+ah=c(af)}else{if(ah==="cc.bingj.com"||ah==="webcache.googleusercontent.com"||ah.slice(0,5)==="74.6."){af=A.links[0].href;ah=c(af)}}return[ah,af,ag]}function F(ag){var af=ag.length;if(ag.charAt(--af)==="."){ag=ag.slice(0,af)}if(ag.slice(0,2)==="*."){ag=ag.slice(1)}if(ag.indexOf("/")!==-1){ag=ag.substr(0,ag.indexOf("/"))}return ag}function ac(ag){ag=ag&&ag.text?ag.text:ag;if(!s(ag)){var af=A.getElementsByTagName("title");if(af&&D(af[0])){ag=af[0].text}}return ag}function J(af){if(!af){return[]}if(!D(af.children)&&D(af.childNodes)){return af.children}if(D(af.children)){return af.children}return[]}function O(ag,af){if(!ag||!af){return false}if(ag.contains){return ag.contains(af)}if(ag===af){return true}if(ag.compareDocumentPosition){return !!(ag.compareDocumentPosition(af)&16)}return false}function G(ah,ai){if(ah&&ah.indexOf){return ah.indexOf(ai)}if(!D(ah)||ah===null){return -1}if(!ah.length){return -1}var af=ah.length;if(af===0){return -1}var ag=0;while(ag<af){if(ah[ag]===ai){return ag}ag++
+}return -1}function aa(ag,af){ag=String(ag);return ag.lastIndexOf(af,0)===0}function L(ag,af){ag=String(ag);return ag.indexOf(af,ag.length-af.length)!==-1}function u(ag,af){ag=String(ag);return ag.indexOf(af)!==-1}function e(ag,af){ag=String(ag);return ag.substr(0,ag.length-af)}function h(ah){if(!ah){return false}function af(aj,ak){if(N.getComputedStyle){return A.defaultView.getComputedStyle(aj,null)[ak]}if(aj.currentStyle){return aj.currentStyle[ak]}}function ai(aj){aj=aj.parentNode;while(aj){if(aj===A){return true}aj=aj.parentNode}return false}function ag(al,ar,aj,ao,am,ap,an){var ak=al.parentNode,aq=1;if(!ai(al)){return false}if(9===ak.nodeType){return true}if("0"===af(al,"opacity")||"none"===af(al,"display")||"hidden"===af(al,"visibility")){return false}if(!D(ar)||!D(aj)||!D(ao)||!D(am)||!D(ap)||!D(an)){ar=al.offsetTop;am=al.offsetLeft;ao=ar+al.offsetHeight;aj=am+al.offsetWidth;ap=al.offsetWidth;an=al.offsetHeight}if(ah===al&&(0===an||0===ap)&&"hidden"===af(al,"overflow")){return false
+}if(ak){if(("hidden"===af(ak,"overflow")||"scroll"===af(ak,"overflow"))){if(am+aq>ak.offsetWidth+ak.scrollLeft||am+ap-aq<ak.scrollLeft||ar+aq>ak.offsetHeight+ak.scrollTop||ar+an-aq<ak.scrollTop){return false}}if(al.offsetParent===ak){am+=ak.offsetLeft;ar+=ak.offsetTop}return ag(ak,ar,aj,ao,am,ap,an)}return true}return ag(ah)}var W={htmlCollectionToArray:function(ah){var af=[],ag;if(!ah||!ah.length){return af}for(ag=0;ag<ah.length;ag++){af.push(ah[ag])}return af},find:function(af){if(!document.querySelectorAll||!af){return[]}var ag=document.querySelectorAll(af);return this.htmlCollectionToArray(ag)},findMultiple:function(ah){if(!ah||!ah.length){return[]}var ag,ai;var af=[];for(ag=0;ag<ah.length;ag++){ai=this.find(ah[ag]);af=af.concat(ai)}af=this.makeNodesUnique(af);return af},findNodesByTagName:function(ag,af){if(!ag||!af||!ag.getElementsByTagName){return[]}var ah=ag.getElementsByTagName(af);return this.htmlCollectionToArray(ah)},makeNodesUnique:function(af){var ak=[].concat(af);af.sort(function(am,al){if(am===al){return 0
+}var ao=G(ak,am);var an=G(ak,al);if(ao===an){return 0}return ao>an?-1:1});if(af.length<=1){return af}var ag=0;var ai=0;var aj=[];var ah;ah=af[ag++];while(ah){if(ah===af[ag]){ai=aj.push(ag)}ah=af[ag++]||null}while(ai--){af.splice(aj[ai],1)}return af},getAttributeValueFromNode:function(aj,ah){if(!this.hasNodeAttribute(aj,ah)){return}if(aj&&aj.getAttribute){return aj.getAttribute(ah)}if(!aj||!aj.attributes){return}var ai=(typeof aj.attributes[ah]);if("undefined"===ai){return}if(aj.attributes[ah].value){return aj.attributes[ah].value}if(aj.attributes[ah].nodeValue){return aj.attributes[ah].nodeValue}var ag;var af=aj.attributes;if(!af){return}for(ag=0;ag<af.length;ag++){if(af[ag].nodeName===ah){return af[ag].nodeValue}}return null},hasNodeAttributeWithValue:function(ag,af){var ah=this.getAttributeValueFromNode(ag,af);return !!ah},hasNodeAttribute:function(ah,af){if(ah&&ah.hasAttribute){return ah.hasAttribute(af)}if(ah&&ah.attributes){var ag=(typeof ah.attributes[af]);return"undefined"!==ag}return false
+},hasNodeCssClass:function(ah,af){if(ah&&af&&ah.className){var ag=typeof ah.className==="string"?ah.className.split(" "):[];if(-1!==G(ag,af)){return true}}return false},findNodesHavingAttribute:function(aj,ah,af){if(!af){af=[]}if(!aj||!ah){return af}var ai=J(aj);if(!ai||!ai.length){return af}var ag,ak;for(ag=0;ag<ai.length;ag++){ak=ai[ag];if(this.hasNodeAttribute(ak,ah)){af.push(ak)}af=this.findNodesHavingAttribute(ak,ah,af)}return af},findFirstNodeHavingAttribute:function(ah,ag){if(!ah||!ag){return}if(this.hasNodeAttribute(ah,ag)){return ah}var af=this.findNodesHavingAttribute(ah,ag);if(af&&af.length){return af[0]}},findFirstNodeHavingAttributeWithValue:function(ai,ah){if(!ai||!ah){return}if(this.hasNodeAttributeWithValue(ai,ah)){return ai}var af=this.findNodesHavingAttribute(ai,ah);if(!af||!af.length){return}var ag;for(ag=0;ag<af.length;ag++){if(this.getAttributeValueFromNode(af[ag],ah)){return af[ag]}}},findNodesHavingCssClass:function(aj,ai,af){if(!af){af=[]}if(!aj||!ai){return af}if(aj.getElementsByClassName){var ak=aj.getElementsByClassName(ai);
+return this.htmlCollectionToArray(ak)}var ah=J(aj);if(!ah||!ah.length){return[]}var ag,al;for(ag=0;ag<ah.length;ag++){al=ah[ag];if(this.hasNodeCssClass(al,ai)){af.push(al)}af=this.findNodesHavingCssClass(al,ai,af)}return af},findFirstNodeHavingClass:function(ah,ag){if(!ah||!ag){return}if(this.hasNodeCssClass(ah,ag)){return ah}var af=this.findNodesHavingCssClass(ah,ag);if(af&&af.length){return af[0]}},isLinkElement:function(ag){if(!ag){return false}var af=String(ag.nodeName).toLowerCase();var ai=["a","area"];var ah=G(ai,af);return ah!==-1},setAnyAttribute:function(ag,af,ah){if(!ag||!af){return}if(ag.setAttribute){ag.setAttribute(af,ah)}else{ag[af]=ah}}};var r={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var ag="."+this.CONTENT_CLASS;
+var af="["+this.CONTENT_ATTR+"]";var ah=W.findMultiple([ag,af]);return ah},findContentNodesWithinNode:function(ai){if(!ai){return[]}var ag=W.findNodesHavingCssClass(ai,this.CONTENT_CLASS);var af=W.findNodesHavingAttribute(ai,this.CONTENT_ATTR);if(af&&af.length){var ah;for(ah=0;ah<af.length;ah++){ag.push(af[ah])}}if(W.hasNodeAttribute(ai,this.CONTENT_ATTR)){ag.push(ai)}else{if(W.hasNodeCssClass(ai,this.CONTENT_CLASS)){ag.push(ai)}}ag=W.makeNodesUnique(ag);return ag},findParentContentNode:function(ag){if(!ag){return}var ah=ag;var af=0;while(ah&&ah!==A&&ah.parentNode){if(W.hasNodeAttribute(ah,this.CONTENT_ATTR)){return ah}if(W.hasNodeCssClass(ah,this.CONTENT_CLASS)){return ah}ah=ah.parentNode;if(af>1000){break}af++}},findPieceNode:function(ag){var af;af=W.findFirstNodeHavingAttribute(ag,this.CONTENT_PIECE_ATTR);if(!af){af=W.findFirstNodeHavingClass(ag,this.CONTENT_PIECE_CLASS)}if(af){return af}return ag},findTargetNodeNoDefault:function(af){if(!af){return}var ag=W.findFirstNodeHavingAttributeWithValue(af,this.CONTENT_TARGET_ATTR);
+if(ag){return ag}ag=W.findFirstNodeHavingAttribute(af,this.CONTENT_TARGET_ATTR);if(ag){return ag}ag=W.findFirstNodeHavingClass(af,this.CONTENT_TARGET_CLASS);if(ag){return ag}},findTargetNode:function(af){var ag=this.findTargetNodeNoDefault(af);if(ag){return ag}return af},findContentName:function(ag){if(!ag){return}var aj=W.findFirstNodeHavingAttributeWithValue(ag,this.CONTENT_NAME_ATTR);if(aj){return W.getAttributeValueFromNode(aj,this.CONTENT_NAME_ATTR)}var af=this.findContentPiece(ag);if(af){return this.removeDomainIfIsInLink(af)}if(W.hasNodeAttributeWithValue(ag,"title")){return W.getAttributeValueFromNode(ag,"title")}var ah=this.findPieceNode(ag);if(W.hasNodeAttributeWithValue(ah,"title")){return W.getAttributeValueFromNode(ah,"title")}var ai=this.findTargetNode(ag);if(W.hasNodeAttributeWithValue(ai,"title")){return W.getAttributeValueFromNode(ai,"title")}},findContentPiece:function(ag){if(!ag){return}var ai=W.findFirstNodeHavingAttributeWithValue(ag,this.CONTENT_PIECE_ATTR);if(ai){return W.getAttributeValueFromNode(ai,this.CONTENT_PIECE_ATTR)
+}var af=this.findPieceNode(ag);var ah=this.findMediaUrlInNode(af);if(ah){return this.toAbsoluteUrl(ah)}},findContentTarget:function(ah){if(!ah){return}var ai=this.findTargetNode(ah);if(W.hasNodeAttributeWithValue(ai,this.CONTENT_TARGET_ATTR)){return W.getAttributeValueFromNode(ai,this.CONTENT_TARGET_ATTR)}var ag;if(W.hasNodeAttributeWithValue(ai,"href")){ag=W.getAttributeValueFromNode(ai,"href");return this.toAbsoluteUrl(ag)}var af=this.findPieceNode(ah);if(W.hasNodeAttributeWithValue(af,"href")){ag=W.getAttributeValueFromNode(af,"href");return this.toAbsoluteUrl(ag)}},isSameDomain:function(af){if(!af||!af.indexOf){return false}if(0===af.indexOf(this.getLocation().origin)){return true}var ag=af.indexOf(this.getLocation().host);if(8>=ag&&0<=ag){return true}return false},removeDomainIfIsInLink:function(ah){var ag="^https?://[^/]+";var af="^.*//[^/]+";if(ah&&ah.search&&-1!==ah.search(new RegExp(ag))&&this.isSameDomain(ah)){ah=ah.replace(new RegExp(af),"");if(!ah){ah="/"}}return ah},findMediaUrlInNode:function(aj){if(!aj){return
+}var ah=["img","embed","video","audio"];var af=aj.nodeName.toLowerCase();if(-1!==G(ah,af)&&W.findFirstNodeHavingAttributeWithValue(aj,"src")){var ai=W.findFirstNodeHavingAttributeWithValue(aj,"src");return W.getAttributeValueFromNode(ai,"src")}if(af==="object"&&W.hasNodeAttributeWithValue(aj,"data")){return W.getAttributeValueFromNode(aj,"data")}if(af==="object"){var ak=W.findNodesByTagName(aj,"param");if(ak&&ak.length){var ag;for(ag=0;ag<ak.length;ag++){if("movie"===W.getAttributeValueFromNode(ak[ag],"name")&&W.hasNodeAttributeWithValue(ak[ag],"value")){return W.getAttributeValueFromNode(ak[ag],"value")}}}var al=W.findNodesByTagName(aj,"embed");if(al&&al.length){return this.findMediaUrlInNode(al[0])}}},trim:function(af){if(af&&String(af)===af){return af.replace(/^\s+|\s+$/g,"")}return af},isOrWasNodeInViewport:function(ak){if(!ak||!ak.getBoundingClientRect||ak.nodeType!==1){return true}var aj=ak.getBoundingClientRect();var ai=A.documentElement||{};var ah=aj.top<0;if(ah&&ak.offsetTop){ah=(ak.offsetTop+aj.height)>0
+}var ag=ai.clientWidth;if(N.innerWidth&&ag>N.innerWidth){ag=N.innerWidth}var af=ai.clientHeight;if(N.innerHeight&&af>N.innerHeight){af=N.innerHeight}return((aj.bottom>0||ah)&&aj.right>0&&aj.left<ag&&((aj.top<af)||ah))},isNodeVisible:function(ag){var af=h(ag);var ah=this.isOrWasNodeInViewport(ag);return af&&ah},buildInteractionRequestParams:function(af,ag,ah,ai){var aj="";if(af){aj+="c_i="+p(af)}if(ag){if(aj){aj+="&"}aj+="c_n="+p(ag)}if(ah){if(aj){aj+="&"}aj+="c_p="+p(ah)}if(ai){if(aj){aj+="&"}aj+="c_t="+p(ai)}return aj},buildImpressionRequestParams:function(af,ag,ah){var ai="c_n="+p(af)+"&c_p="+p(ag);if(ah){ai+="&c_t="+p(ah)}return ai},buildContentBlock:function(ah){if(!ah){return}var af=this.findContentName(ah);var ag=this.findContentPiece(ah);var ai=this.findContentTarget(ah);af=this.trim(af);ag=this.trim(ag);ai=this.trim(ai);return{name:af||"Unknown",piece:ag||"Unknown",target:ai||""}},collectContent:function(ai){if(!ai||!ai.length){return[]}var ah=[];var af,ag;for(af=0;af<ai.length;
+af++){ag=this.buildContentBlock(ai[af]);if(D(ag)){ah.push(ag)}}return ah},setLocation:function(af){this.location=af},getLocation:function(){var af=this.location||N.location;if(!af.origin){af.origin=af.protocol+"//"+af.hostname+(af.port?":"+af.port:"")}return af},toAbsoluteUrl:function(ag){if((!ag||String(ag)!==ag)&&ag!==""){return ag}if(""===ag){return this.getLocation().href}if(ag.search(/^\/\//)!==-1){return this.getLocation().protocol+ag}if(ag.search(/:\/\//)!==-1){return ag}if(0===ag.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ag}if(0===ag.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ag}if(0===ag.search("^[a-zA-Z]{2,11}:")){return ag}if(ag.search(/^\//)!==-1){return this.getLocation().origin+ag}var af="(.*/)";var ah=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(af))[0];return ah+ag},isUrlToCurrentDomain:function(ag){var ah=this.toAbsoluteUrl(ag);if(!ah){return false}var af=this.getLocation().origin;
+if(af===ah){return true}if(0===String(ah).indexOf(af)){if(":"===String(ah).substr(af.length,1)){return false}return true}return false},setHrefAttribute:function(ag,af){if(!ag||!af){return}W.setAnyAttribute(ag,"href",af)},shouldIgnoreInteraction:function(ah){var ag=W.hasNodeAttribute(ah,this.CONTENT_IGNOREINTERACTION_ATTR);var af=W.hasNodeCssClass(ah,this.CONTENT_IGNOREINTERACTION_CLASS);return ag||af}};function I(ag,aj){if(aj){return aj}if(u(ag,"?")){var ai=ag.indexOf("?");ag=ag.slice(0,ai)}if(L(ag,"piwik.php")){ag=e(ag,"piwik.php".length)}else{if(L(ag,".php")){var af=ag.lastIndexOf("/");var ah=1;ag=ag.slice(0,af+ah)}}if(L(ag,"/js/")){ag=e(ag,"js/".length)}return ag}function H(al){var an="Piwik_Overlay";var ag=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var ah=ag.exec(A.referrer);if(ah){var aj=ah[1];if(aj!==String(al)){return false}var ak=ah[2],af=ah[3],ai=ah[4];if(!ai){ai=""}else{if(ai.indexOf("&segment=")===0){ai=ai.substr("&segment=".length)
+}}N.name=an+"###"+ak+"###"+af+"###"+ai}var am=N.name.split("###");return am.length===4&&am[0]===an}function S(ag,am,ai){var al=N.name.split("###"),ak=al[1],af=al[2],aj=al[3],ah=I(ag,am);k(ah+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(ah,ai,ak,af,aj)})}function q(){var ah;try{ah=N.frameElement}catch(ag){return true}if(D(ah)){return(ah&&String(ah.nodeName).toLowerCase()==="iframe")?true:false}try{return N.self!==N.top}catch(af){return true}}function K(bN,bH){var bD=T(A.domain,N.location.href,E()),cm=F(bD[0]),bn=l(bD[1]),a2=l(bD[2]),ck=false,bR="GET",cy=bR,au="application/x-www-form-urlencoded; charset=UTF-8",b3=au,ap=bN||"",bi="",cq="",bF=bH||"",bb="",bo="",aN,aY="",cv=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],al=[cm],bc=[],bl=[],aQ=[],bj=500,cd,aO,br,bp,af,bZ=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bh=["pk_kwd","piwik_kwd","utm_term"],aZ="_pk_",co,a4,a0=false,ci,aV,a8,ce=33955200000,bX=1800000,cu=15768000000,aL=true,bV=0,bq=false,aA=false,bK,bv={},bU={},a1={},a7=200,cr={},cw={},bJ=[],bO=false,b7=false,ag=false,cx=false,ay=false,aU=q(),cp=null,bL,aB,bd,bG=ad,a3,av;
+try{aY=A.title}catch(b5){aY=""}function cB(cL,cI,cH,cK,cG,cJ){if(a0){return}var cF;if(cH){cF=new Date();cF.setTime(cF.getTime()+cH)}A.cookie=cL+"="+p(cI)+(cH?";expires="+cF.toGMTString():"")+";path="+(cK||"/")+(cG?";domain="+cG:"")+(cJ?";secure":"")}function ao(cH){if(a0){return 0}var cF=new RegExp("(^|;)[ ]*"+cH+"=([^;]*)"),cG=cF.exec(A.cookie);return cG?M(cG[2]):0}function bB(cF){var cG;if(bp){cG=new RegExp("#.*");return cF.replace(cG,"")}return cF}function bu(cH,cF){var cI=o(cF),cG;if(cI){return cF}if(cF.slice(0,1)==="/"){return o(cH)+"://"+c(cH)+cF}cH=bB(cH);cG=cH.indexOf("?");if(cG>=0){cH=cH.slice(0,cG)}cG=cH.lastIndexOf("/");if(cG!==cH.length-1){cH=cH.slice(0,cG+1)}return cH+cF}function cb(cH,cF){var cG;cH=String(cH).toLowerCase();cF=String(cF).toLowerCase();if(cH===cF){return true}if(cF.slice(0,1)==="."){if(cH===cF.slice(1)){return true}cG=cH.length-cF.length;if((cG>0)&&(cH.slice(cG)===cF)){return true}}return false}function bT(cF){var cG=document.createElement("a");if(cF.indexOf("//")!==0&&cF.indexOf("http")!==0){if(cF.indexOf("*")===0){cF=cF.substr(1)
+}if(cF.indexOf(".")===0){cF=cF.substr(1)}cF="http://"+cF}cG.href=r.toAbsoluteUrl(cF);if(cG.pathname){return cG.pathname}return""}function aM(cG,cF){if(!aa(cF,"/")){cF="/"+cF}if(!aa(cG,"/")){cG="/"+cG}var cH=(cF==="/"||cF==="/*");if(cH){return true}if(cG===cF){return true}cF=String(cF).toLowerCase();cG=String(cG).toLowerCase();if(L(cF,"*")){cF=cF.slice(0,-1);cH=(!cF||cF==="/");if(cH){return true}if(cG===cF){return true}return cG.indexOf(cF)===0}if(!L(cG,"/")){cG+="/"}if(!L(cF,"/")){cF+="/"}return cG.indexOf(cF)===0}function ai(cJ,cL){var cG,cF,cH,cI,cK;for(cG=0;cG<al.length;cG++){cI=F(al[cG]);cK=bT(al[cG]);if(cb(cJ,cI)&&aM(cL,cK)){return true}}return false}function aF(cI){var cG,cF,cH;for(cG=0;cG<al.length;cG++){cF=F(al[cG].toLowerCase());if(cI===cF){return true}if(cF.slice(0,1)==="."){if(cI===cF.slice(1)){return true}cH=cI.length-cF.length;if((cH>0)&&(cI.slice(cH)===cF)){return true}}}return false}function bY(cF,cH){var cG=new Image(1,1);cG.onload=function(){z=0;if(typeof cH==="function"){cH()
+}};cF=cF.replace("send_image=0","send_image=1");cG.src=ap+(ap.indexOf("?")<0?"?":"&")+cF}function ct(cG,cJ,cF){if(!D(cF)||null===cF){cF=true}try{var cI=N.XMLHttpRequest?new N.XMLHttpRequest():N.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;cI.open("POST",ap,true);cI.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)&&cF){bY(cG,cJ)}else{if(this.readyState===4&&(typeof cJ==="function")){cJ()}}};cI.setRequestHeader("Content-Type",b3);cI.send(cG)}catch(cH){if(cF){bY(cG,cJ)}}}function bP(cG){var cF=new Date();var cH=cF.getTime()+cG;if(!n||cH>n){n=cH}}function bW(cF){if(bL||!aO){return}bL=setTimeout(function cG(){bL=null;if(!aU){aU=(!A.hasFocus||A.hasFocus())}if(!aU){bW(aO);return}if(br()){return}var cH=new Date(),cI=aO-(cH.getTime()-cp);cI=Math.min(aO,cI);bW(cI)},cF||aO)}function bk(){if(!bL){return}clearTimeout(bL);bL=null}function aS(){aU=true;if(br()){return}bW()}function am(){bk()}function cD(){if(ay||!aO){return}ay=true;ae(N,"focus",aS);
+ae(N,"blur",am);bW()}function b8(cJ){var cG=new Date();var cF=cG.getTime();cp=cF;if(b7&&cF<b7){var cH=b7-cF;setTimeout(cJ,cH);bP(cH+50);b7+=50;return}if(b7===false){var cI=800;b7=cF+cI}cJ()}function bg(cG,cF,cH){if(!ci&&cG){b8(function(){if(cy==="POST"){ct(cG,cH)}else{bY(cG,cH)}bP(cF)})}if(!ay){cD()}else{bW()}}function bS(cF){if(ci){return false}return(cF&&cF.length)}function cC(cH,cF){if(!bS(cH)){return}var cG='{"requests":["?'+cH.join('","?')+'"]}';b8(function(){ct(cG,null,false);bP(cF)})}function aD(cF){return aZ+cF+"."+bF+"."+a3}function bE(){if(a0){return"0"}if(!D(f.cookieEnabled)){var cF=aD("testcookie");cB(cF,"1");return ao(cF)==="1"?"1":"0"}return f.cookieEnabled?"1":"0"}function aX(){a3=bG((co||cm)+(a4||"/")).slice(0,4)}function bw(){var cG=aD("cvar"),cF=ao(cG);if(cF.length){cF=JSON2.parse(cF);if(Q(cF)){return cF}}return{}}function b9(){if(aA===false){aA=bw()}}function cj(){return bG((f.userAgent||"")+(f.platform||"")+JSON2.stringify(cw)+(new Date()).getTime()+Math.random()).slice(0,16)
+}function cg(){var cH=new Date(),cF=Math.round(cH.getTime()/1000),cG=aD("id"),cK=ao(cG),cJ,cI;if(cK){cJ=cK.split(".");cJ.unshift("0");if(bo.length){cJ[1]=bo}return cJ}if(bo.length){cI=bo}else{if("0"===bE()){cI=""}else{cI=cj()}}cJ=["1",cI,cF,0,cF,"",""];return cJ}function aH(){var cM=cg(),cI=cM[0],cJ=cM[1],cG=cM[2],cF=cM[3],cK=cM[4],cH=cM[5];if(!D(cM[6])){cM[6]=""}var cL=cM[6];return{newVisitor:cI,uuid:cJ,createTs:cG,visitCount:cF,currentVisitTs:cK,lastVisitTs:cH,lastEcommerceOrderTs:cL}}function at(){var cI=new Date(),cG=cI.getTime(),cJ=aH().createTs;var cF=parseInt(cJ,10);var cH=(cF*1000)+ce-cG;return cH}function aw(cF){if(!bF){return}var cH=new Date(),cG=Math.round(cH.getTime()/1000);if(!D(cF)){cF=aH()}var cI=cF.uuid+"."+cF.createTs+"."+cF.visitCount+"."+cG+"."+cF.lastVisitTs+"."+cF.lastEcommerceOrderTs;cB(aD("id"),cI,at(),a4,co)}function bm(){var cF=ao(aD("ref"));if(cF.length){try{cF=JSON2.parse(cF);if(Q(cF)){return cF}}catch(cG){}}return["","",0,""]}function bx(cH,cG,cF){cB(cH,"",-86400,cG,cF)
+}function a9(cG){var cF="testvalue";cB("test",cF,10000,null,cG);if(ao("test")===cF){bx("test",null,cG);return true}return false}function aq(){var cH=a0;a0=false;var cF=["id","ses","cvar","ref"];var cG,cI;for(cG=0;cG<cF.length;cG++){cI=aD(cF[cG]);if(0!==ao(cI)){bx(cI,a4,co)}}a0=cH}function bC(cF){bF=cF;aw()}function cE(cJ){if(!cJ||!Q(cJ)){return}var cI=[];var cH;for(cH in cJ){if(Object.prototype.hasOwnProperty.call(cJ,cH)){cI.push(cH)}}var cK={};cI.sort();var cF=cI.length;var cG;for(cG=0;cG<cF;cG++){cK[cI[cG]]=cJ[cI[cG]]}return cK}function bM(){cB(aD("ses"),"*",bX,a4,co)}function aW(){var cI="";var cG="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var cH=cG.length;var cF;for(cF=0;cF<6;cF++){cI+=cG.charAt(Math.floor(Math.random()*cH))}return cI}function b0(cH,c2,c3,cI){var c1,cG=new Date(),cP=Math.round(cG.getTime()/1000),cM,c0,cJ=1024,c8,cQ,cY=aA,cK=aD("ses"),cW=aD("ref"),cT=aD("cvar"),cU=ao(cK),cZ=bm(),c5=aN||bn,cN,cF;if(a0){aq()}if(ci){return""}var cV=aH();if(!D(cI)){cI=""
+}var cS=A.characterSet||A.charset;if(!cS||cS.toLowerCase()==="utf-8"){cS=null}cN=cZ[0];cF=cZ[1];cM=cZ[2];c0=cZ[3];if(!cU){var c4=bX/1000;if(!cV.lastVisitTs||(cP-cV.lastVisitTs)>c4){cV.visitCount++;cV.lastVisitTs=cV.currentVisitTs}if(!a8||!cN.length){for(c1 in bZ){if(Object.prototype.hasOwnProperty.call(bZ,c1)){cN=P(c5,bZ[c1]);if(cN.length){break}}}for(c1 in bh){if(Object.prototype.hasOwnProperty.call(bh,c1)){cF=P(c5,bh[c1]);if(cF.length){break}}}}c8=c(a2);cQ=c0.length?c(c0):"";if(c8.length&&!aF(c8)&&(!a8||!cQ.length||aF(cQ))){c0=a2}if(c0.length||cN.length){cM=cP;cZ=[cN,cF,cM,bB(c0.slice(0,cJ))];cB(cW,JSON2.stringify(cZ),cu,a4,co)}}cH+="&idsite="+bF+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+cG.getHours()+"&m="+cG.getMinutes()+"&s="+cG.getSeconds()+"&url="+p(bB(c5))+(a2.length?"&urlref="+p(bB(a2)):"")+((bb&&bb.length)?"&uid="+p(bb):"")+"&_id="+cV.uuid+"&_idts="+cV.createTs+"&_idvc="+cV.visitCount+"&_idn="+cV.newVisitor+(cN.length?"&_rcn="+p(cN):"")+(cF.length?"&_rck="+p(cF):"")+"&_refts="+cM+"&_viewts="+cV.lastVisitTs+(String(cV.lastEcommerceOrderTs).length?"&_ects="+cV.lastEcommerceOrderTs:"")+(String(c0).length?"&_ref="+p(bB(c0.slice(0,cJ))):"")+(cS?"&cs="+p(cS):"")+"&send_image=0";
+for(c1 in cw){if(Object.prototype.hasOwnProperty.call(cw,c1)){cH+="&"+c1+"="+cw[c1]}}var c7=[];if(c2){for(c1 in c2){if(Object.prototype.hasOwnProperty.call(c2,c1)&&/^dimension\d+$/.test(c1)){var cL=c1.replace("dimension","");c7.push(parseInt(cL,10));c7.push(String(cL));cH+="&"+c1+"="+c2[c1];delete c2[c1]}}}if(c2&&w(c2)){c2=null}for(c1 in a1){if(Object.prototype.hasOwnProperty.call(a1,c1)){var cR=(-1===G(c7,c1));if(cR){cH+="&dimension"+c1+"="+a1[c1]}}}if(c2){cH+="&data="+p(JSON2.stringify(c2))}else{if(af){cH+="&data="+p(JSON2.stringify(af))}}function cO(c9,da){var db=JSON2.stringify(c9);if(db.length>2){return"&"+da+"="+p(db)}return""}var c6=cE(bv);var cX=cE(bU);cH+=cO(c6,"cvar");cH+=cO(cX,"e_cvar");if(aA){cH+=cO(aA,"_cvar");for(c1 in cY){if(Object.prototype.hasOwnProperty.call(cY,c1)){if(aA[c1][0]===""||aA[c1][1]===""){delete aA[c1]}}}if(bq){cB(cT,JSON2.stringify(aA),bX,a4,co)}}if(aL){if(bV){cH+="&gt_ms="+bV}else{if(g&&g.timing&&g.timing.requestStart&&g.timing.responseEnd){cH+="&gt_ms="+(g.timing.responseEnd-g.timing.requestStart)
+}}}if(av){cH+="&pv_id="+av}cV.lastEcommerceOrderTs=D(cI)&&String(cI).length?cI:cV.lastEcommerceOrderTs;aw(cV);bM();cH+=U(c3);if(cq.length){cH+="&"+cq}if(v(bK)){cH=bK(cH)}return cH}br=function aP(){var cF=new Date();if(cp+aO<=cF.getTime()){var cG=b0("ping=1",null,"ping");bg(cG,bj);return true}return false};function a5(cI,cH,cN,cJ,cF,cQ){var cL="idgoal=0",cM,cG=new Date(),cO=[],cP,cK=String(cI).length;if(cK){cL+="&ec_id="+p(cI);cM=Math.round(cG.getTime()/1000)}cL+="&revenue="+cH;if(String(cN).length){cL+="&ec_st="+cN}if(String(cJ).length){cL+="&ec_tx="+cJ}if(String(cF).length){cL+="&ec_sh="+cF}if(String(cQ).length){cL+="&ec_dt="+cQ}if(cr){for(cP in cr){if(Object.prototype.hasOwnProperty.call(cr,cP)){if(!D(cr[cP][1])){cr[cP][1]=""}if(!D(cr[cP][2])){cr[cP][2]=""}if(!D(cr[cP][3])||String(cr[cP][3]).length===0){cr[cP][3]=0}if(!D(cr[cP][4])||String(cr[cP][4]).length===0){cr[cP][4]=1}cO.push(cr[cP])}}cL+="&ec_items="+p(JSON2.stringify(cO))}cL=b0(cL,af,"ecommerce",cM);bg(cL,bj);if(cK){cr={}}}function by(cF,cJ,cI,cH,cG,cK){if(String(cF).length&&D(cJ)){a5(cF,cJ,cI,cH,cG,cK)
+}}function a6(cF){if(D(cF)){a5("",cF,"","","","")}}function bz(cG,cI,cH){av=aW();var cF=b0("action_name="+p(ac(cG||aY)),cI,"log");bg(cF,bj,cH)}function aJ(cH,cG){var cI,cF="(^| )(piwik[_-]"+cG;if(cH){for(cI=0;cI<cH.length;cI++){cF+="|"+cH[cI]}}cF+=")( |$)";return new RegExp(cF)}function aE(cF){return(ap&&cF&&0===String(cF).indexOf(ap))}function b1(cJ,cF,cK,cG){if(aE(cF)){return 0}var cI=aJ(bl,"download"),cH=aJ(aQ,"link"),cL=new RegExp("\\.("+cv.join("|")+")([?&#]|$)","i");if(cH.test(cJ)){return"link"}if(cG||cI.test(cJ)||cL.test(cF)){return"download"}if(cK){return 0}return"link"}function aj(cG){var cF;cF=cG.parentNode;while(cF!==null&&D(cF)){if(W.isLinkElement(cG)){break}cG=cF;cF=cG.parentNode}return cG}function cz(cK){cK=aj(cK);if(!W.hasNodeAttribute(cK,"href")){return}if(!D(cK.href)){return}var cJ=W.getAttributeValueFromNode(cK,"href");if(aE(cJ)){return}var cG=cK.pathname||bT(cK.href);var cL=cK.hostname||c(cK.href);var cM=cL.toLowerCase();var cH=cK.href.replace(cL,cM);var cI=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");
+if(!cI.test(cH)){var cF=b1(cK.className,cH,ai(cM,cG),W.hasNodeAttribute(cK,"download"));if(cF){return{type:cF,href:cH}}}}function az(cF,cG,cH,cI){var cJ=r.buildInteractionRequestParams(cF,cG,cH,cI);if(!cJ){return}return b0(cJ,null,"contentInteraction")}function cf(cH,cI,cM,cF,cG){if(!D(cH)){return}if(aE(cH)){return cH}var cK=r.toAbsoluteUrl(cH);var cJ="redirecturl="+p(cK)+"&";cJ+=az(cI,cM,cF,(cG||cH));var cL="&";if(ap.indexOf("?")<0){cL="?"}return ap+cL+cJ}function aT(cF,cG){if(!cF||!cG){return false}var cH=r.findTargetNode(cF);if(r.shouldIgnoreInteraction(cH)){return false}cH=r.findTargetNodeNoDefault(cF);if(cH&&!O(cH,cG)){return false}return true}function b2(cH,cG,cJ){if(!cH){return}var cF=r.findParentContentNode(cH);if(!cF){return}if(!aT(cF,cH)){return}var cI=r.buildContentBlock(cF);if(!cI){return}if(!cI.target&&cJ){cI.target=cJ}return r.buildInteractionRequestParams(cG,cI.name,cI.piece,cI.target)}function aG(cG){if(!bJ||!bJ.length){return false}var cF,cH;for(cF=0;cF<bJ.length;cF++){cH=bJ[cF];
+if(cH&&cH.name===cG.name&&cH.piece===cG.piece&&cH.target===cG.target){return true}}return false}function bf(cI){if(!cI){return false}var cL=r.findTargetNode(cI);if(!cL||r.shouldIgnoreInteraction(cL)){return false}var cM=cz(cL);if(cx&&cM&&cM.type){return false}if(W.isLinkElement(cL)&&W.hasNodeAttributeWithValue(cL,"href")){var cF=String(W.getAttributeValueFromNode(cL,"href"));if(0===cF.indexOf("#")){return false}if(aE(cF)){return true}if(!r.isUrlToCurrentDomain(cF)){return false}var cJ=r.buildContentBlock(cI);if(!cJ){return}var cH=cJ.name;var cN=cJ.piece;var cK=cJ.target;if(!W.hasNodeAttributeWithValue(cL,r.CONTENT_TARGET_ATTR)||cL.wasContentTargetAttrReplaced){cL.wasContentTargetAttrReplaced=true;cK=r.toAbsoluteUrl(cF);W.setAnyAttribute(cL,r.CONTENT_TARGET_ATTR,cK)}var cG=cf(cF,"click",cH,cN,cK);r.setHrefAttribute(cL,cG);return true}return false}function ax(cG){if(!cG||!cG.length){return}var cF;for(cF=0;cF<cG.length;cF++){bf(cG[cF])}}function aI(cF){return function(cG){if(!cF){return}var cJ=r.findParentContentNode(cF);
+var cK;if(cG){cK=cG.target||cG.srcElement}if(!cK){cK=cF}if(!aT(cJ,cK)){return}bP(bj);if(W.isLinkElement(cF)&&W.hasNodeAttributeWithValue(cF,"href")&&W.hasNodeAttributeWithValue(cF,r.CONTENT_TARGET_ATTR)){var cH=W.getAttributeValueFromNode(cF,"href");if(!aE(cH)&&cF.wasContentTargetAttrReplaced){W.setAnyAttribute(cF,r.CONTENT_TARGET_ATTR,"")}}var cO=cz(cF);if(ag&&cO&&cO.type){return cO.type}if(bf(cJ)){return"href"}var cL=r.buildContentBlock(cJ);if(!cL){return}var cI=cL.name;var cP=cL.piece;var cN=cL.target;var cM=az("click",cI,cP,cN);bg(cM,bj);return cM}}function bA(cH){if(!cH||!cH.length){return}var cF,cG;for(cF=0;cF<cH.length;cF++){cG=r.findTargetNode(cH[cF]);if(cG&&!cG.contentInteractionTrackingSetupDone){cG.contentInteractionTrackingSetupDone=true;ae(cG,"click",aI(cG))}}}function ba(cH,cI){if(!cH||!cH.length){return[]}var cF,cG;for(cF=0;cF<cH.length;cF++){if(aG(cH[cF])){cH.splice(cF,1);cF--}else{bJ.push(cH[cF])}}if(!cH||!cH.length){return[]}ax(cI);bA(cI);var cJ=[];for(cF=0;cF<cH.length;
+cF++){cG=b0(r.buildImpressionRequestParams(cH[cF].name,cH[cF].piece,cH[cF].target),undefined,"contentImpressions");if(cG){cJ.push(cG)}}return cJ}function b6(cG){var cF=r.collectContent(cG);return ba(cF,cG)}function aR(cG){if(!cG||!cG.length){return[]}var cF;for(cF=0;cF<cG.length;cF++){if(!r.isNodeVisible(cG[cF])){cG.splice(cF,1);cF--}}if(!cG||!cG.length){return[]}return b6(cG)}function ar(cH,cF,cG){var cI=r.buildImpressionRequestParams(cH,cF,cG);return b0(cI,null,"contentImpression")}function cA(cI,cG){if(!cI){return}var cF=r.findParentContentNode(cI);var cH=r.buildContentBlock(cF);if(!cH){return}if(!cG){cG="Unknown"}return az(cG,cH.name,cH.piece,cH.target)}function ch(cG,cI,cF,cH){return"e_c="+p(cG)+"&e_a="+p(cI)+(D(cF)?"&e_n="+p(cF):"")+(D(cH)?"&e_v="+p(cH):"")}function ak(cH,cJ,cF,cI,cL,cK){if(String(cH).length===0||String(cJ).length===0){return false}var cG=b0(ch(cH,cJ,cF,cI),cL,"event");bg(cG,bj,cK)}function bI(cF,cI,cG,cJ){var cH=b0("search="+p(cF)+(cI?"&search_cat="+p(cI):"")+(D(cG)?"&search_count="+cG:""),cJ,"sitesearch");
+bg(cH,bj)}function cl(cF,cI,cH){var cG=b0("idgoal="+cF+(cI?"&revenue="+cI:""),cH,"goal");bg(cG,bj)}function cs(cI,cF,cM,cL,cH){var cK=cF+"="+p(bB(cI));var cG=b2(cH,"click",cI);if(cG){cK+="&"+cG}var cJ=b0(cK,cM,"link");bg(cJ,bj,cL)}function bs(cG,cF){if(cG!==""){return cG+cF.charAt(0).toUpperCase()+cF.slice(1)}return cF}function bQ(cK){var cJ,cF,cI=["","webkit","ms","moz"],cH;if(!aV){for(cF=0;cF<cI.length;cF++){cH=cI[cF];if(Object.prototype.hasOwnProperty.call(A,bs(cH,"hidden"))){if(A[bs(cH,"visibilityState")]==="prerender"){cJ=true}break}}}if(cJ){ae(A,cH+"visibilitychange",function cG(){A.removeEventListener(cH+"visibilitychange",cG,false);cK()});return}cK()}function cc(cF){var cG=cz(cF);if(cG&&cG.type){cG.href=l(cG.href);cs(cG.href,cG.type,undefined,null,cF)}}function b4(){return A.all&&!A.addEventListener}function cn(cF){var cH=cF.which;var cG=(typeof cF.button);if(!cH&&cG!=="undefined"){if(b4()){if(cF.button&1){cH=1}else{if(cF.button&2){cH=3}else{if(cF.button&4){cH=2}}}}else{if(cF.button===0||cF.button==="0"){cH=1
+}else{if(cF.button&1){cH=2}else{if(cF.button&2){cH=3}}}}}return cH}function bt(cF){switch(cn(cF)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aK(cF){return cF.target||cF.srcElement}function an(cF){return function(cI){cI=cI||N.event;var cH=bt(cI);var cJ=aK(cI);if(cI.type==="click"){var cG=false;if(cF&&cH==="middle"){cG=true}if(cJ&&!cG){cc(cJ)}}else{if(cI.type==="mousedown"){if(cH==="middle"&&cJ){aB=cH;bd=cJ}else{aB=bd=null}}else{if(cI.type==="mouseup"){if(cH===aB&&cJ===bd){cc(cJ)}aB=bd=null}else{if(cI.type==="contextmenu"){cc(cJ)}}}}}}function ah(cG,cF){ae(cG,"click",an(cF),false);if(cF){ae(cG,"mouseup",an(cF),false);ae(cG,"mousedown",an(cF),false);ae(cG,"contextmenu",an(cF),false)}}function be(cG){if(!ag){ag=true;var cH,cF=aJ(bc,"ignore"),cI=A.links;if(cI){for(cH=0;cH<cI.length;cH++){if(!cF.test(cI[cH].className)){ah(cI[cH],cG)}}}}}function aC(cH,cJ,cK){if(bO){return true}bO=true;var cL=false;var cI,cG;function cF(){cL=true}j(function(){function cM(cO){setTimeout(function(){if(!bO){return
+}cL=false;cK.trackVisibleContentImpressions();cM(cO)},cO)}function cN(cO){setTimeout(function(){if(!bO){return}if(cL){cL=false;cK.trackVisibleContentImpressions()}cN(cO)},cO)}if(cH){cI=["scroll","resize"];for(cG=0;cG<cI.length;cG++){if(A.addEventListener){A.addEventListener(cI[cG],cF)}else{N.attachEvent("on"+cI[cG],cF)}}cN(100)}if(cJ&&cJ>0){cJ=parseInt(cJ,10);cM(cJ)}})}function ca(){var cG,cI,cJ={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(f.userAgent))){if(f.mimeTypes&&f.mimeTypes.length){for(cG in cJ){if(Object.prototype.hasOwnProperty.call(cJ,cG)){cI=f.mimeTypes[cJ[cG]];cw[cG]=(cI&&cI.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&D(f.javaEnabled)&&f.javaEnabled()){cw.java="1"}if(v(N.GearsFactory)){cw.gears="1"
+}cw.cookie=bE()}var cH=parseInt(R.width,10);var cF=parseInt(R.height,10);cw.res=parseInt(cH,10)+"x"+parseInt(cF,10)}ca();aX();aw();this.getVisitorId=function(){return aH().uuid};this.getVisitorInfo=function(){return cg()};this.getAttributionInfo=function(){return bm()};this.getAttributionCampaignName=function(){return bm()[0]};this.getAttributionCampaignKeyword=function(){return bm()[1]};this.getAttributionReferrerTimestamp=function(){return bm()[2]};this.getAttributionReferrerUrl=function(){return bm()[3]};this.setTrackerUrl=function(cF){ap=cF};this.getTrackerUrl=function(){return ap};this.addTracker=function(cF,cH){if(!cH){throw new Error("A siteId must be given to add a new tracker")}if(!D(cF)||null===cF){cF=this.getTrackerUrl()}var cG=new K(cF,cH);C.push(cG);return cG};this.getSiteId=function(){return bF};this.setSiteId=function(cF){bC(cF)};this.setUserId=function(cF){if(!D(cF)||!cF.length){return}bb=cF;bo=bG(bb).substr(0,16)};this.getUserId=function(){return bb};this.setCustomData=function(cF,cG){if(Q(cF)){af=cF
+}else{if(!af){af={}}af[cF]=cG}};this.getCustomData=function(){return af};this.setCustomRequestProcessing=function(cF){bK=cF};this.appendToTrackingUrl=function(cF){cq=cF};this.getRequest=function(cF){return b0(cF)};this.addPlugin=function(cF,cG){a[cF]=cG};this.setCustomDimension=function(cF,cG){cF=parseInt(cF,10);if(cF>0){if(!D(cG)){cG=""}if(!s(cG)){cG=String(cG)}a1[cF]=cG}};this.getCustomDimension=function(cF){cF=parseInt(cF,10);if(cF>0&&Object.prototype.hasOwnProperty.call(a1,cF)){return a1[cF]}};this.deleteCustomDimension=function(cF){cF=parseInt(cF,10);if(cF>0){delete a1[cF]}};this.setCustomVariable=function(cG,cF,cJ,cH){var cI;if(!D(cH)){cH="visit"}if(!D(cF)){return}if(!D(cJ)){cJ=""}if(cG>0){cF=!s(cF)?String(cF):cF;cJ=!s(cJ)?String(cJ):cJ;cI=[cF.slice(0,a7),cJ.slice(0,a7)];if(cH==="visit"||cH===2){b9();aA[cG]=cI}else{if(cH==="page"||cH===3){bv[cG]=cI}else{if(cH==="event"){bU[cG]=cI}}}}};this.getCustomVariable=function(cG,cH){var cF;if(!D(cH)){cH="visit"}if(cH==="page"||cH===3){cF=bv[cG]
+}else{if(cH==="event"){cF=bU[cG]}else{if(cH==="visit"||cH===2){b9();cF=aA[cG]}}}if(!D(cF)||(cF&&cF[0]==="")){return false}return cF};this.deleteCustomVariable=function(cF,cG){if(this.getCustomVariable(cF,cG)){this.setCustomVariable(cF,"","",cG)}};this.storeCustomVariablesInCookie=function(){bq=true};this.setLinkTrackingTimer=function(cF){bj=cF};this.setDownloadExtensions=function(cF){if(s(cF)){cF=cF.split("|")}cv=cF};this.addDownloadExtensions=function(cG){var cF;if(s(cG)){cG=cG.split("|")}for(cF=0;cF<cG.length;cF++){cv.push(cG[cF])}};this.removeDownloadExtensions=function(cH){var cG,cF=[];if(s(cH)){cH=cH.split("|")}for(cG=0;cG<cv.length;cG++){if(G(cH,cv[cG])===-1){cF.push(cv[cG])}}cv=cF};this.setDomains=function(cF){al=s(cF)?[cF]:cF;var cJ=false,cH=0,cG;for(cH;cH<al.length;cH++){cG=String(al[cH]);if(cb(cm,F(cG))){cJ=true;break}var cI=bT(cG);if(cI&&cI!=="/"&&cI!=="/*"){cJ=true;break}}if(!cJ){al.push(cm)}};this.setIgnoreClasses=function(cF){bc=s(cF)?[cF]:cF};this.setRequestMethod=function(cF){cy=cF||bR
+};this.setRequestContentType=function(cF){b3=cF||au};this.setReferrerUrl=function(cF){a2=cF};this.setCustomUrl=function(cF){aN=bu(bn,cF)};this.setDocumentTitle=function(cF){aY=cF};this.setAPIUrl=function(cF){bi=cF};this.setDownloadClasses=function(cF){bl=s(cF)?[cF]:cF};this.setLinkClasses=function(cF){aQ=s(cF)?[cF]:cF};this.setCampaignNameKey=function(cF){bZ=s(cF)?[cF]:cF};this.setCampaignKeywordKey=function(cF){bh=s(cF)?[cF]:cF};this.discardHashTag=function(cF){bp=cF};this.setCookieNamePrefix=function(cF){aZ=cF;aA=bw()};this.setCookieDomain=function(cF){var cG=F(cF);if(a9(cG)){co=cG;aX()}};this.setCookiePath=function(cF){a4=cF;aX()};this.setVisitorCookieTimeout=function(cF){ce=cF*1000};this.setSessionCookieTimeout=function(cF){bX=cF*1000};this.setReferralCookieTimeout=function(cF){cu=cF*1000};this.setConversionAttributionFirstReferrer=function(cF){a8=cF};this.disableCookies=function(){a0=true;cw.cookie="0";if(bF){aq()}};this.deleteCookies=function(){aq()};this.setDoNotTrack=function(cG){var cF=f.doNotTrack||f.msDoNotTrack;
+ci=cG&&(cF==="yes"||cF==="1");if(ci){this.disableCookies()}};this.addListener=function(cG,cF){ah(cG,cF)};this.enableLinkTracking=function(cF){cx=true;bQ(function(){m(function(){be(cF)})})};this.enableJSErrorTracking=function(){if(ck){return}ck=true;var cF=N.onerror;N.onerror=function(cK,cI,cH,cJ,cG){bQ(function(){var cL="JavaScript Errors";var cM=cI+":"+cH;if(cJ){cM+=":"+cJ}ak(cL,cM,cK)});if(cF){return cF(cK,cI,cH,cJ,cG)}return false}};this.disablePerformanceTracking=function(){aL=false};this.setGenerationTimeMs=function(cF){bV=parseInt(cF,10)};this.enableHeartBeatTimer=function(cF){cF=Math.max(cF,1);aO=(cF||15)*1000;if(cp!==null){cD()}};this.killFrame=function(){if(N.location!==N.top.location){N.top.location=N.location}};this.redirectFile=function(cF){if(N.location.protocol==="file:"){N.location=cF}};this.setCountPreRendered=function(cF){aV=cF};this.trackGoal=function(cF,cH,cG){bQ(function(){cl(cF,cH,cG)})};this.trackLink=function(cG,cF,cI,cH){bQ(function(){cs(cG,cF,cI,cH)})};this.trackPageView=function(cF,cH,cG){bJ=[];
+if(H(bF)){bQ(function(){S(ap,bi,bF)})}else{bQ(function(){bz(cF,cH,cG)})}};this.trackAllContentImpressions=function(){if(H(bF)){return}bQ(function(){m(function(){var cF=r.findContentNodes();var cG=b6(cF);cC(cG,bj)})})};this.trackVisibleContentImpressions=function(cF,cG){if(H(bF)){return}if(!D(cF)){cF=true}if(!D(cG)){cG=750}aC(cF,cG,this);bQ(function(){j(function(){var cH=r.findContentNodes();var cI=aR(cH);cC(cI,bj)})})};this.trackContentImpression=function(cH,cF,cG){if(H(bF)){return}if(!cH){return}cF=cF||"Unknown";bQ(function(){var cI=ar(cH,cF,cG);bg(cI,bj)})};this.trackContentImpressionsWithinNode=function(cF){if(H(bF)||!cF){return}bQ(function(){if(bO){j(function(){var cG=r.findContentNodesWithinNode(cF);var cH=aR(cG);cC(cH,bj)})}else{m(function(){var cG=r.findContentNodesWithinNode(cF);var cH=b6(cG);cC(cH,bj)})}})};this.trackContentInteraction=function(cH,cI,cF,cG){if(H(bF)){return}if(!cH||!cI){return}cF=cF||"Unknown";bQ(function(){var cJ=az(cH,cI,cF,cG);bg(cJ,bj)})};this.trackContentInteractionNode=function(cG,cF){if(H(bF)||!cG){return
+}bQ(function(){var cH=cA(cG,cF);bg(cH,bj)})};this.logAllContentBlocksOnPage=function(){var cG=r.findContentNodes();var cF=r.collectContent(cG);if(console!==undefined&&console&&console.log){console.log(cF)}};this.trackEvent=function(cG,cI,cF,cH,cK,cJ){bQ(function(){ak(cG,cI,cF,cH,cK,cJ)})};this.trackSiteSearch=function(cF,cH,cG,cI){bQ(function(){bI(cF,cH,cG,cI)})};this.setEcommerceView=function(cI,cF,cH,cG){if(!D(cH)||!cH.length){cH=""}else{if(cH instanceof Array){cH=JSON2.stringify(cH)}}bv[5]=["_pkc",cH];if(D(cG)&&String(cG).length){bv[2]=["_pkp",cG]}if((!D(cI)||!cI.length)&&(!D(cF)||!cF.length)){return}if(D(cI)&&cI.length){bv[3]=["_pks",cI]}if(!D(cF)||!cF.length){cF=""}bv[4]=["_pkn",cF]};this.addEcommerceItem=function(cJ,cF,cH,cG,cI){if(cJ.length){cr[cJ]=[cJ,cF,cH,cG,cI]}};this.trackEcommerceOrder=function(cF,cJ,cI,cH,cG,cK){by(cF,cJ,cI,cH,cG,cK)};this.trackEcommerceCartUpdate=function(cF){a6(cF)};this.trackRequest=function(cF,cH,cG){bQ(function(){var cI=b0(cF,cH);bg(cI,bj,cG)})};d.trigger("TrackerSetup",[this])
+}function B(){return{push:X}}function b(ak,aj){var al={};var ah,ai;for(ah=0;ah<aj.length;ah++){var af=aj[ah];al[af]=1;for(ai=0;ai<ak.length;ai++){if(ak[ai]&&ak[ai][0]){var ag=ak[ai][0];if(af===ag){X(ak[ai]);delete ak[ai];if(al[ag]>1){ab("The method "+ag+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}al[ag]++}}}}return ak}var x=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"];function V(af,ah){var ag=new K(af,ah);C.push(ag);_paq=b(_paq,x);for(z=0;z<_paq.length;z++){if(_paq[z]){X(_paq[z])}}_paq=new B();return ag}ae(N,"beforeunload",Z,false);Date.prototype.getTimeAlias=Date.prototype.getTime;d={initialized:false,DOM:{addEventListener:function(ai,ah,ag,af){var aj=typeof af;if(aj==="undefined"){af=false}ae(ai,ah,ag,af)
+},onLoad:j,onReady:m},on:function(ag,af){if(!t[ag]){t[ag]=[]}t[ag].push(af)},off:function(ah,ag){if(!t[ah]){return}var af=0;for(af;af<t[ah].length;af++){if(t[ah][af]===ag){t[ah].splice(af,1)}}},trigger:function(ah,ai,ag){if(!t[ah]){return}var af=0;for(af;af<t[ah].length;af++){t[ah][af].apply(ag||N,ai)}},addPlugin:function(af,ag){a[af]=ag},getTracker:function(af,ag){if(!D(ag)){ag=this.getAsyncTracker().getSiteId()}if(!D(af)){af=this.getAsyncTracker().getTrackerUrl()}return new K(af,ag)},getAsyncTrackers:function(){return C},addTracker:function(af,ag){if(!C.length){V(af,ag)}else{C[0].addTracker(af,ag)}},getAsyncTracker:function(ag,aj){var ai;if(C&&C[0]){ai=C[0]}if(!aj&&!ag){return ai}if((!D(aj)||null===aj)&&ai){aj=ai.getSiteId()}if((!D(ag)||null===ag)&&ai){ag=ai.getTrackerUrl()}var ah,af=0;for(af;af<C.length;af++){ah=C[af];if(ah&&String(ah.getSiteId())===String(aj)&&ah.getTrackerUrl()===ag){return ah}}},retryMissedPluginCalls:function(){var ag=Y;Y=[];var af=0;for(af;af<ag.length;af++){X(ag[af])
+}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return d})}return d}());
/*!!! pluginTrackerHook */
-}(function(){if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}window.Piwik.addTracker();window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]
-}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}};
+}(function(){if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}window.Piwik.addTracker();window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)
+}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}};
/*!! @license-end */
}; \ No newline at end of file
diff --git a/plugins/API/SegmentMetadata.php b/plugins/API/SegmentMetadata.php
index c708702b45..95757638c2 100644
--- a/plugins/API/SegmentMetadata.php
+++ b/plugins/API/SegmentMetadata.php
@@ -27,7 +27,6 @@ class SegmentMetadata
}
}
-
foreach ($segments as &$segment) {
$segment['name'] = Piwik::translate($segment['name']);
$segment['category'] = Piwik::translate($segment['category']);
diff --git a/plugins/API/lang/es.json b/plugins/API/lang/es.json
index e35219972b..ced03941ee 100644
--- a/plugins/API/lang/es.json
+++ b/plugins/API/lang/es.json
@@ -9,6 +9,7 @@
"TopLinkTooltip": "Acceda a sus datos de análisis de internet programáticamente, a través de una sencilla API en json, xml, etc.",
"UserAuthentication": "Autenticación de usuario",
"UsingTokenAuth": "Si quieres %1$s solicitar datos dentro de un script, un crontab, etc. %2$s tiene que agregar el parámetro %3$s a las llamadas a la URL de la API que requieren autenticación.",
- "Glossary": "Glosario"
+ "Glossary": "Glosario",
+ "LearnAboutCommonlyUsedTerms": "Obtenga más información de los términos que se utilizan más frecuentemente para aprovechar al máximo de las analíticas de Piwik. %1$s y %2$s."
}
} \ No newline at end of file
diff --git a/plugins/API/lang/tr.json b/plugins/API/lang/tr.json
index 8e9e616b91..dd681977f2 100644
--- a/plugins/API/lang/tr.json
+++ b/plugins/API/lang/tr.json
@@ -1,12 +1,12 @@
{
"API": {
- "GenerateVisits": "Eğer bugün için bir veri yoksa öncelikle %1$s eklentisiyle biraz veri oluşturabilirsiniz. %2$s eklentisini aktifleştirin, sonrasında Piwik Yönetim alanından 'Ziyaretçi Oluşturucu' menüsüne tıklayınız.",
- "KeepTokenSecret": "token_auth kullanıcı adı ve şifreniz kadar gizlidir, %1$s kimseyle paylaşmayınız%2$s!",
- "LoadedAPIs": "%s API başarılı şekilde yüklendi",
- "MoreInformation": "Piwik APIsi hakkında daha fazla bilgi için lütfen %1$s Piwik API Kullanımı %2$s ve %3$s Piwik API Referansına %4$s bakınız.",
- "PluginDescription": "Piwik'teki tüm veri basit API tarafından ulaşılabilir. Bu plugin xml,json,php,csv ve benzeri şekildeki Web Analatik verisini çağırmak için web servis giriş noktasıdır.",
- "ReportingApiReference": "API Referanslarını Raporlamak",
- "TopLinkTooltip": "Json, xml veya diğerleri ile Api kullanarak erişin.",
+ "GenerateVisits": "Bugün için bir veri yoksa %1$s uygulama ekini kullanarak biraz veri oluşturabilirsiniz. %2$s uygulama ekini etkinleştirin. Ardından Piwik Yönetim bölümünden 'Ziyaretçi Üreteci' menüsüne tıklayın.",
+ "KeepTokenSecret": "Bu token_auth kodu kullanıcı adı ve parolanız kadar gizlidir. %1$s kimseyle paylaşmayın%2$s!",
+ "LoadedAPIs": "%s API yazılımı yüklendi",
+ "MoreInformation": "Piwik API yazılımı hakkında ayrıntılı bilgi almak için lütfen %1$s Piwik API Kullanımı %2$s ve %3$s Piwik API Referansı %4$s belgelerine bakın.",
+ "PluginDescription": "Tüm Piwik verilerine temel API kullanılarak erişilebilir. Bu uygulama eki web istatistiği verilerini xml, json, php, csv ve benzer şekillerde çağırabilen web hizmetinin başlangıç noktasıdır.",
+ "ReportingApiReference": "Rapor API Referansı",
+ "TopLinkTooltip": "Web istatistiği verilerine json, xml ve benzer yöntemlerle Temel API üzerinden erişilmesini sağlar.",
"UserAuthentication": "Kullanıcı kimlik doğrulaması",
"UsingTokenAuth": "Bir script, cron vb içerisinden %1$s verisi çağırmak isterseniz, %2$s kimlik doğrulama gerektiren API bağlantılarına %3$s parametresini eklemelisiniz.",
"Glossary": "Sözlük",
diff --git a/plugins/Actions/Columns/EntryPageUrl.php b/plugins/Actions/Columns/EntryPageUrl.php
index 7f3ef19ad1..6b67b9a092 100644
--- a/plugins/Actions/Columns/EntryPageUrl.php
+++ b/plugins/Actions/Columns/EntryPageUrl.php
@@ -18,7 +18,7 @@ use Piwik\Tracker\Visitor;
class EntryPageUrl extends VisitDimension
{
protected $columnName = 'visit_entry_idaction_url';
- protected $columnType = 'INTEGER(10) UNSIGNED NULL';
+ protected $columnType = 'INTEGER(11) UNSIGNED NULL DEFAULT NULL';
protected function configureSegments()
{
@@ -42,9 +42,33 @@ class EntryPageUrl extends VisitDimension
$idActionUrl = $action->getIdActionUrlForEntryAndExitIds();
}
+ if($idActionUrl === false) {
+ return false;
+ }
+
return (int) $idActionUrl;
}
+ /*
+ * @param Request $request
+ * @param Visitor $visitor
+ * @param Action|null $action
+ * @return mixed
+ */
+ public function onExistingVisit(Request $request, Visitor $visitor, $action)
+ {
+ $idAction = $visitor->getVisitorColumn('visit_entry_idaction_url');
+
+ if (is_null($idAction) && !empty($action)) {
+ $idAction = $action->getIdActionUrlForEntryAndExitIds();
+ if (!empty($idAction)) {
+ return $idAction;
+ }
+ }
+
+ return false;
+ }
+
public function getName()
{
return Piwik::translate('Actions_ColumnEntryPageURL');
diff --git a/plugins/Actions/Columns/IdPageview.php b/plugins/Actions/Columns/IdPageview.php
index 0fed0cf397..c1d5352153 100644
--- a/plugins/Actions/Columns/IdPageview.php
+++ b/plugins/Actions/Columns/IdPageview.php
@@ -29,7 +29,7 @@ class IdPageview extends ActionDimension
*/
public function onNewAction(Request $request, Visitor $visitor, Action $action)
{
- return $request->getParam('pv_id');
+ return substr($request->getParam('pv_id'), 0, 6);
}
public function getName()
diff --git a/plugins/Actions/lang/es.json b/plugins/Actions/lang/es.json
index 739ec1ba1d..93759eddff 100644
--- a/plugins/Actions/lang/es.json
+++ b/plugins/Actions/lang/es.json
@@ -2,6 +2,7 @@
"Actions": {
"AvgGenerationTimeTooltip": "Promedio basado en %1$s acceso(s) %2$s entre %3$s y %4$s",
"ColumnClickedURL": "URL elegida",
+ "ColumnActionURL": "URL de acción",
"ColumnClicks": "Clics",
"ColumnClicksDocumentation": "El número de veces que se ha hecho clic en este enlace.",
"ColumnDownloadURL": "URL de descarga",
@@ -60,6 +61,7 @@
"WidgetPageUrlsFollowingSearch": "Páginas siguientes a una búsqueda interna",
"WidgetSearchCategories": "Categorías de búsqueda",
"WidgetSearchKeywords": "Palabras claves de las búsquedas internas del sitio",
- "WidgetSearchNoResultKeywords": "Búsquedas por palabras clave sin resultados"
+ "WidgetSearchNoResultKeywords": "Búsquedas por palabras clave sin resultados",
+ "ActionType": "Tipo de acción"
}
} \ No newline at end of file
diff --git a/plugins/Annotations/lang/tr.json b/plugins/Annotations/lang/tr.json
index 9c29b5e23b..14531eb745 100644
--- a/plugins/Annotations/lang/tr.json
+++ b/plugins/Annotations/lang/tr.json
@@ -15,8 +15,8 @@
"InlineQuickHelp": "Önemli etkinlikleri (yeni blog iletileri ya da web sitesi tasarım değişiklikleri gibi), veri incelemelerinizi ya da önemli olduğunu düşündüğünüz konuları kaydetmek için notlar oluşturabilirsiniz.",
"LoginToAnnotate": "Not eklemek için oturum açın.",
"NoAnnotations": "Bu tarih aralığında bir not yok.",
- "PluginDescription": "Websiteniz de yaptığınız değişiklikleri farklı günlerde belirtmek için not eklemeye izin verir, veriniz ile ilgili analizleri saklar ve bunları meslektaşlarınız ile birlikte paylaşmanıza izn verir. Neden o veriye baktığınızı hatırlamanızdan emin olmak için veriye dipnot koyar.",
- "ViewAndAddAnnotations": "%s için notları göster ve yeni not ekle...",
- "YouCannotModifyThisNote": "Bunu değiştiremezsiniz. Bunun için bu siteye yönetici erişiminiz olması gerekli."
+ "PluginDescription": "Bu özellik web sitenizde farklı günlerde yaptığınız değişiklikleri veri incelemeleri ve düşüncelerinizi çalışma arkadaşlarınızla paylaşmak için notlar eklenmesini sağlar. Verilerinize not ekleyerek neden bu şekilde görüntülendiklerini hatırlayabilirsiniz.",
+ "ViewAndAddAnnotations": "%s için notları görüntüle ve yeni not ekle...",
+ "YouCannotModifyThisNote": "Bu notu siz oluşturmadığınız ya da yönetici yetkileriniz olmadığı için düzenleyemezsiniz."
}
} \ No newline at end of file
diff --git a/plugins/Contents/lang/es.json b/plugins/Contents/lang/es.json
index 67631c79bf..d225a74971 100644
--- a/plugins/Contents/lang/es.json
+++ b/plugins/Contents/lang/es.json
@@ -8,6 +8,9 @@
"ContentName": "Nombre del contenido",
"ContentPiece": "Pieza de contenido",
"ContentTarget": "Objetivo del contenido",
- "Contents": "Contenidos"
+ "Contents": "Contenidos",
+ "InteractionsMetricDocumentation": "El número de veces que se interactuo con un bloque de contenido (ej, un 'clic' en un banner o anuncio).",
+ "ImpressionsMetricDocumentation": "El número de veces que un bloque de contenido, como un banner o un anuncio, fue mostrado en una página.",
+ "InteractionRateMetricDocumentation": "La proporción de impresiones de contenido a interacciones."
}
} \ No newline at end of file
diff --git a/plugins/CoreAdminHome/lang/es.json b/plugins/CoreAdminHome/lang/es.json
index 9ff7c4b667..4f19b725e1 100644
--- a/plugins/CoreAdminHome/lang/es.json
+++ b/plugins/CoreAdminHome/lang/es.json
@@ -3,6 +3,7 @@
"Administration": "Administración",
"ArchivingSettings": "Configuración de archivado",
"BrandingSettings": "Configuración del Branding",
+ "ReleaseChannel": "Canal de lanzamiento",
"ClickHereToOptIn": "Haga clic aquí para optar.",
"ClickHereToOptOut": "Haga clic aquí para no ser seguido.",
"CustomLogoFeedbackInfo": "Si personaliza el logo de Piwik, puede que también esté interesado en ocultar el enlace %1$s en el menú superior. Para hacerlo, puede deshabilitar el complemento Feedback en la página de %2$sAdministración de complementos%3$s.",
diff --git a/plugins/CoreAdminHome/stylesheets/generalSettings.less b/plugins/CoreAdminHome/stylesheets/generalSettings.less
index 958f51e468..9a45fa2b16 100644
--- a/plugins/CoreAdminHome/stylesheets/generalSettings.less
+++ b/plugins/CoreAdminHome/stylesheets/generalSettings.less
@@ -8,7 +8,8 @@
}
// hide PHP is deprecated notification in UI test
-.uiTest [notification-id="DeprecatedPHPVersionCheck"] {
+.uiTest [notification-id="DeprecatedPHPVersionCheck"],
+.uiTest [notification-id="PHPVersionTooOldForNewestPiwikCheck"]{
display: none !important;
}
diff --git a/plugins/CoreAdminHome/tests/Integration/SetConfigTest.php b/plugins/CoreAdminHome/tests/Integration/SetConfigTest.php
index bd1ed5e618..93cf57e7c5 100644
--- a/plugins/CoreAdminHome/tests/Integration/SetConfigTest.php
+++ b/plugins/CoreAdminHome/tests/Integration/SetConfigTest.php
@@ -36,6 +36,12 @@ class SetConfigTest extends ConsoleCommandTestCase
parent::setUp();
}
+ public function tearDown()
+ {
+ parent::tearDown();
+ $this->makeLocalConfigWritable();
+ }
+
public function test_Command_SucceedsWhenOptionsUsed()
{
$code = $this->applicationTester->run(array(
@@ -80,6 +86,22 @@ class SetConfigTest extends ConsoleCommandTestCase
);
}
+ public function test_Command_FailsWithMissingFilePermissionException_whenConfigFileNotWritable()
+ {
+ $this->makeLocalConfigNotWritable();
+
+ $code = $this->applicationTester->run(array(
+ 'command' => 'config:set',
+ 'assignment' => array(
+ 'MySection.other_array_value=[]',
+ ),
+ '-vvv' => false,
+ ));
+
+ $this->assertNotEquals(0, $code, $this->getCommandDisplayOutputErrorMessage());
+ $this->assertContains('[Piwik\Exception\MissingFilePermissionException]', $this->applicationTester->getDisplay());
+ }
+
public function test_Command_SucceedsWhenArgumentsUsed()
{
$config = Config::getInstance();
@@ -191,4 +213,23 @@ class SetConfigTest extends ConsoleCommandTestCase
unlink($configPath);
}
}
+
+ protected function makeLocalConfigNotWritable()
+ {
+ $local = Config::getInstance()->getLocalPath();
+ touch($local);
+ chmod($local, 0444);
+ $this->assertFalse(is_writable($local));
+ }
+
+ protected function makeLocalConfigWritable()
+ {
+ $local = Config::getInstance()->getLocalPath();
+ @chmod(dirname($local), 0755);
+ @chmod($local, 0755);
+ $this->assertTrue(is_writable(dirname($local)));
+ if(file_exists($local)) {
+ $this->assertTrue(is_writable($local));
+ }
+ }
}
diff --git a/plugins/CoreConsole/Commands/GeneratePlugin.php b/plugins/CoreConsole/Commands/GeneratePlugin.php
index 72ef852c81..cfdaee35f5 100644
--- a/plugins/CoreConsole/Commands/GeneratePlugin.php
+++ b/plugins/CoreConsole/Commands/GeneratePlugin.php
@@ -69,8 +69,12 @@ class GeneratePlugin extends GeneratePluginBase
'/ExamplePlugin.php',
'/plugin.json',
'/README.md',
+ '/CHANGELOG.md',
'/screenshots',
'/screenshots/.gitkeep',
+ '/docs',
+ '/docs/faq.md',
+ '/docs/index.md',
);
}
diff --git a/plugins/CoreHome/Tracker/VisitRequestProcessor.php b/plugins/CoreHome/Tracker/VisitRequestProcessor.php
index 019965a958..033399e196 100644
--- a/plugins/CoreHome/Tracker/VisitRequestProcessor.php
+++ b/plugins/CoreHome/Tracker/VisitRequestProcessor.php
@@ -87,8 +87,7 @@ class VisitRequestProcessor extends RequestProcessor
// the IP is needed by isExcluded() and GoalManager->recordGoals()
$visitProperties->setProperty('location_ip', $request->getIp());
- // TODO: move VisitExcluded logic to here (or move to service class stored in DI)
- $excluded = new VisitExcluded($request, $visitProperties->getProperty('location_ip'));
+ $excluded = new VisitExcluded($request);
if ($excluded->isExcluded()) {
return true;
}
diff --git a/plugins/CoreHome/javascripts/broadcast.js b/plugins/CoreHome/javascripts/broadcast.js
index cab2525145..9034c9eef5 100644
--- a/plugins/CoreHome/javascripts/broadcast.js
+++ b/plugins/CoreHome/javascripts/broadcast.js
@@ -288,9 +288,10 @@ var broadcast = {
*
* @param {string} str url with parameters to be updated
* @param {boolean} [showAjaxLoading] whether to show the ajax loading gif or not.
+ * @param {string} strHash additional parameters that should be updated on the hash
* @return {void}
*/
- propagateNewPage: function (str, showAjaxLoading) {
+ propagateNewPage: function (str, showAjaxLoading, strHash) {
// abort all existing ajax requests
globalAjaxQueue.abort();
@@ -314,6 +315,13 @@ var broadcast = {
}
}
+ if (strHash && currentHashStr.length != 0) {
+ var params_hash_vals = strHash.split("&");
+ for (var i = 0; i < params_hash_vals.length; i++) {
+ currentHashStr = broadcast.updateParamValue(params_hash_vals[i], currentHashStr);
+ }
+ }
+
// Now load the new page.
var newUrl = currentSearchStr + currentHashStr;
diff --git a/plugins/CoreHome/javascripts/popover.js b/plugins/CoreHome/javascripts/popover.js
index 2834432e70..a484f9164f 100644
--- a/plugins/CoreHome/javascripts/popover.js
+++ b/plugins/CoreHome/javascripts/popover.js
@@ -230,8 +230,9 @@ var Piwik_Popover = (function () {
* @param {string} url
* @param {string} loadingName
* @param {string} [dialogClass] css class to add to dialog
+ * @param {object} [ajaxRequest] optional instance of ajaxHelper
*/
- createPopupAndLoadUrl: function (url, loadingName, dialogClass) {
+ createPopupAndLoadUrl: function (url, loadingName, dialogClass, ajaxRequest) {
// make sure the minimum top position of the popover is 15px
var ensureMinimumTop = function () {
var popoverContainer = $('#Piwik_Popover').parent();
@@ -257,11 +258,14 @@ var Piwik_Popover = (function () {
setPopoverTitleIfOneFoundInContainer();
ensureMinimumTop();
};
- var ajaxRequest = new ajaxHelper();
+
+ if ('undefined' === typeof ajaxRequest) {
+ ajaxRequest = new ajaxHelper();
+ }
ajaxRequest.addParams(piwikHelper.getArrayFromQueryString(url), 'get');
ajaxRequest.setCallback(callback);
ajaxRequest.setFormat('html');
ajaxRequest.send(false);
}
};
-})(); \ No newline at end of file
+})();
diff --git a/plugins/CorePluginsAdmin/MarketplaceApiClient.php b/plugins/CorePluginsAdmin/MarketplaceApiClient.php
index 05b774c360..eebc3d843b 100644
--- a/plugins/CorePluginsAdmin/MarketplaceApiClient.php
+++ b/plugins/CorePluginsAdmin/MarketplaceApiClient.php
@@ -9,6 +9,7 @@
namespace Piwik\Plugins\CorePluginsAdmin;
use Piwik\Cache;
+use Piwik\Container\StaticContainer;
use Piwik\Http;
use Piwik\Version;
@@ -128,10 +129,15 @@ class MarketplaceApiClient
return PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION . '.' . PHP_RELEASE_VERSION;
}
+ public static function getPiwikVersion()
+ {
+ return StaticContainer::get('marketplacePiwikVersion');
+ }
+
private function fetch($action, $params)
{
$params['php'] = $this->getPhpVersion();
- $params['piwik'] = Version::VERSION;
+ $params['piwik'] = self::getPiwikVersion();
$params['prefer_stable'] = '1';
ksort($params);
$query = http_build_query($params);
@@ -188,7 +194,7 @@ class MarketplaceApiClient
$latestVersion = array_pop($plugin['versions']);
$downloadUrl = $latestVersion['download'];
- return $this->domain . $downloadUrl . '?coreVersion=' . Version::VERSION;
+ return $this->domain . $downloadUrl . '?coreVersion=' . self::getPiwikVersion();
}
}
diff --git a/plugins/CorePluginsAdmin/PluginInstaller.php b/plugins/CorePluginsAdmin/PluginInstaller.php
index ed140d27bc..ab4f7b8622 100644
--- a/plugins/CorePluginsAdmin/PluginInstaller.php
+++ b/plugins/CorePluginsAdmin/PluginInstaller.php
@@ -12,6 +12,7 @@ use Piwik\Container\StaticContainer;
use Piwik\Filechecks;
use Piwik\Filesystem;
use Piwik\Piwik;
+use Piwik\Plugin\Manager as PluginManager;
use Piwik\Plugin\Dependency as PluginDependency;
use Piwik\Unzip;
@@ -49,6 +50,11 @@ class PluginInstaller
Filesystem::deleteAllCacheOnUpdate($this->pluginName);
+ $plugin = PluginManager::getInstance()->getLoadedPlugin($this->pluginName);
+ if (!empty($plugin)) {
+ $plugin->reloadPluginInformation();
+ }
+
} catch (\Exception $e) {
$this->removeFileIfExists($tmpPluginZip);
@@ -160,7 +166,10 @@ class PluginInstaller
$requires = (array) $metadata->require;
}
+ $piwikVersion = MarketplaceApiClient::getPiwikVersion();
+
$dependency = new PluginDependency();
+ $dependency->setPiwikVersion($piwikVersion);
$missingDependencies = $dependency->getMissingDependencies($requires);
if (!empty($missingDependencies)) {
diff --git a/plugins/CorePluginsAdmin/config/config.php b/plugins/CorePluginsAdmin/config/config.php
new file mode 100644
index 0000000000..5d30748a94
--- /dev/null
+++ b/plugins/CorePluginsAdmin/config/config.php
@@ -0,0 +1,7 @@
+<?php
+
+return array(
+ 'marketplacePiwikVersion' => function () {
+ return \Piwik\Version::VERSION;
+ }
+);
diff --git a/plugins/CorePluginsAdmin/lang/es.json b/plugins/CorePluginsAdmin/lang/es.json
index b0407c02ae..b4a91d7d0a 100644
--- a/plugins/CorePluginsAdmin/lang/es.json
+++ b/plugins/CorePluginsAdmin/lang/es.json
@@ -38,6 +38,10 @@
"LastCommitTime": "(último cambio %s)",
"LastUpdated": "Última actualización",
"LicenseHomepage": "Página de la licencia",
+ "LikeThisPlugin": "¿Satisfecho con este complemento?",
+ "ConsiderDonating": "Considere una donación",
+ "CommunityContributedPlugin": "Este es un complemento basado en la suma de voluntades de una comunidad ofrendada de manera gratuita.",
+ "ConsiderDonatingCreatorOf": "Por favor considere donar al creador de %s",
"PluginsExtendPiwik": "Los complementos extienden y amplían las funcionalidades de Piwik.",
"OncePluginIsInstalledYouMayActivateHere": "Una vez que el complemento está instalado, puede activarlo o desactivarlo desde aquí.",
"Marketplace": "Mercado",
diff --git a/plugins/CoreUpdater/Commands/Update.php b/plugins/CoreUpdater/Commands/Update.php
index 4c579ad211..be2c105e93 100644
--- a/plugins/CoreUpdater/Commands/Update.php
+++ b/plugins/CoreUpdater/Commands/Update.php
@@ -163,6 +163,14 @@ class Update extends ConsoleCommand
return;
}
+
+ if ($updater->hasMajorDbUpdate()) {
+ $output->writeln(array(
+ "",
+ sprintf("<comment>%s \n</comment>", Piwik::translate('CoreUpdater_MajorUpdateWarning1'))
+ ));
+ }
+
$output->writeln(array(" *** Note: this is a Dry Run ***", ""));
foreach ($migrationQueries as $query) {
diff --git a/plugins/CoreUpdater/Controller.php b/plugins/CoreUpdater/Controller.php
index 4e3f20ff42..a39dc172dc 100644
--- a/plugins/CoreUpdater/Controller.php
+++ b/plugins/CoreUpdater/Controller.php
@@ -159,6 +159,8 @@ class Controller extends \Piwik\Plugin\Controller
$messages = $e->getUpdateLogMessages();
}
+ Filesystem::deleteAllCacheOnUpdate();
+
$view->feedbackMessages = $messages;
$this->addCustomLogoInfo($view);
return $view->render();
diff --git a/plugins/CoreUpdater/Updater.php b/plugins/CoreUpdater/Updater.php
index 6912dba335..316f325690 100644
--- a/plugins/CoreUpdater/Updater.php
+++ b/plugins/CoreUpdater/Updater.php
@@ -10,17 +10,20 @@ namespace Piwik\Plugins\CoreUpdater;
use Exception;
use Piwik\ArchiveProcessor\Rules;
-use Piwik\Config;
+use Piwik\Container\StaticContainer;
use Piwik\Filechecks;
use Piwik\Filesystem;
use Piwik\Http;
use Piwik\Option;
use Piwik\Plugin\Manager as PluginManager;
use Piwik\Plugin\ReleaseChannels;
+use Piwik\Plugins\CorePluginsAdmin\CorePluginsAdmin;
+use Piwik\Plugins\CorePluginsAdmin\MarketplaceApiClient;
+use Piwik\Plugins\CorePluginsAdmin\MarketplaceApiException;
+use Piwik\Plugins\CorePluginsAdmin\PluginInstaller;
use Piwik\SettingsServer;
use Piwik\Translation\Translator;
use Piwik\Unzip;
-use Piwik\UpdateCheck;
use Piwik\Version;
class Updater
@@ -112,19 +115,58 @@ class Updater
$this->verifyDecompressedArchive($extractedArchiveDirectory);
$messages[] = $this->translator->translate('CoreUpdater_VerifyingUnpackedFiles');
- $disabledPluginNames = $this->disableIncompatiblePlugins($newVersion);
- if (!empty($disabledPluginNames)) {
- $messages[] = $this->translator->translate('CoreUpdater_DisablingIncompatiblePlugins', implode(', ', $disabledPluginNames));
- }
+ // we need to load the marketplace already here, otherwise it will use the new, updated file in Piwik 3
+ $marketplace = new MarketplaceApiClient();
+ require_once PIWIK_DOCUMENT_ROOT . '/plugins/CorePluginsAdmin/PluginInstaller.php';
+ require_once PIWIK_DOCUMENT_ROOT . '/plugins/CorePluginsAdmin/MarketplaceApiException.php';
$this->installNewFiles($extractedArchiveDirectory);
$messages[] = $this->translator->translate('CoreUpdater_InstallingTheLatestVersion');
+
} catch (ArchiveDownloadException $e) {
throw $e;
} catch (Exception $e) {
throw new UpdaterException($e, $messages);
}
+ try {
+ if (CorePluginsAdmin::isMarketplaceEnabled()) {
+ $messages[] = $this->translator->translate('CoreUpdater_CheckingForPluginUpdates');
+
+ $pluginManager = PluginManager::getInstance();
+ $pluginManager->loadAllPluginsAndGetTheirInfo();
+ $loadedPlugins = $pluginManager->getLoadedPlugins();
+
+ MarketplaceApiClient::clearAllCacheEntries();
+ StaticContainer::getContainer()->set('marketplacePiwikVersion', $newVersion);
+
+ $pluginsWithUpdate = $marketplace->checkUpdates($loadedPlugins);
+
+ foreach ($pluginsWithUpdate as $pluginWithUpdate) {
+ $pluginName = $pluginWithUpdate['name'];
+
+ $messages[] = $this->translator->translate('CoreUpdater_UpdatingPluginXToVersionY',
+ array($pluginName, $pluginWithUpdate['version']));
+
+ $pluginInstaller = new PluginInstaller($pluginName);
+ $pluginInstaller->installOrUpdatePluginFromMarketplace();
+ }
+ }
+ } catch (MarketplaceApiException $e) {
+ // there is a problem with the connection to the server, ignore for now
+ } catch (Exception $e) {
+ throw new UpdaterException($e, $messages);
+ }
+
+ try {
+ $disabledPluginNames = $this->disableIncompatiblePlugins($newVersion);
+ if (!empty($disabledPluginNames)) {
+ $messages[] = $this->translator->translate('CoreUpdater_DisablingIncompatiblePlugins', implode(', ', $disabledPluginNames));
+ }
+ } catch (Exception $e) {
+ throw new UpdaterException($e, $messages);
+ }
+
return $messages;
}
diff --git a/plugins/CoreUpdater/lang/en.json b/plugins/CoreUpdater/lang/en.json
index 8086f16b36..ad6d230ce9 100644
--- a/plugins/CoreUpdater/lang/en.json
+++ b/plugins/CoreUpdater/lang/en.json
@@ -1,5 +1,6 @@
{
"CoreUpdater": {
+ "CheckingForPluginUpdates": "Checking for new plugin updates",
"ClickHereToViewSqlQueries": "Click here to view and copy the list of SQL queries that will get executed",
"CriticalErrorDuringTheUpgradeProcess": "Critical Error during the update process:",
"DatabaseUpgradeRequired": "Database Upgrade Required",
@@ -23,7 +24,7 @@
"HelpMessageIntroductionWhenError": "The above is the core error message. It should help explain the cause, but if you require further help please:",
"HelpMessageIntroductionWhenWarning": "The update completed successfuly, however there were issues during the process. Please read the above descriptions for details. For further help:",
"HighTrafficPiwikServerEnableMaintenance": "If you manage a high traffic Piwik server, we recommend to %1$smomentarily disable visitor Tracking and put the Piwik User Interface in maintenance mode%2$s.",
- "IncompatbilePluginsWillBeDisabledInfo": "Note: some plugins are not compatible with Piwik %s. They will be disabled when you upgrade:",
+ "IncompatbilePluginsWillBeDisabledInfo": "Note: some plugins are not compatible with Piwik %s. We will update them if there is an update on the Marketplace, otherwise we will be disable them when you upgrade:",
"InstallingTheLatestVersion": "Installing the latest version",
"LatestBetaRelease": "Latest beta release",
"LatestStableRelease": "Latest stable release",
@@ -52,6 +53,7 @@
"UpdateAutomatically": "Update Automatically",
"UpdateHasBeenCancelledExplanation": "Piwik One Click Update has been cancelled. If you can't fix the above error message, it is recommended that you manually update Piwik. %1$s Please check out the %2$sUpdate documentation%3$s to get started!",
"UpdateTitle": "Update",
+ "UpdatingPluginXToVersionY": "Updating plugin %1$s to version %2$s",
"UpdateSuccessTitle": "Piwik has been successfully updated!",
"UpdateErrorTitle": "Update error",
"ThankYouUpdatePiwik": "Thank you for using Piwik and keeping it up to date!",
diff --git a/plugins/CoreUpdater/lang/tr.json b/plugins/CoreUpdater/lang/tr.json
index 1fcd436d79..54242c23ae 100644
--- a/plugins/CoreUpdater/lang/tr.json
+++ b/plugins/CoreUpdater/lang/tr.json
@@ -9,13 +9,22 @@
"EmptyDatabaseError": "%s veritabanı boş. Piwik ayar dosyanızı değiştirmeniz ya da silmeniz gerekli.",
"ErrorDIYHelp": "İleri düzey bir kullanıcıysanız ve veritabanı güncellemesinde bir sorun ile karşılaşırsanız:",
"ErrorDIYHelp_1": "Sorunun kaynağını bulup düzeltin (memory_limit ya da max_execution_time gibi)",
- "ErrorDIYHelp_2": "Başarız olan güncellemedeki kalan sorguları çalıştır",
- "ErrorDuringPluginsUpdates": "Eklenti güncellenirken hata meydana geldi:",
- "ExceptionAlreadyLatestVersion": "Piwik versiyonunuz %s günceldir.",
- "ExceptionArchiveEmpty": "Boş arşiv.",
- "ExceptionArchiveIncompatible": "Uyumsuz arşiv: %s",
- "ExceptionArchiveIncomplete": "Arşiv tamamlanmadı: bazı dosyalar kayıp (ör. %s).",
- "InstallingTheLatestVersion": "Son versiyon yükleniyor",
+ "ErrorDIYHelp_2": "güncelleme yarım kaldığı sırada eksik kalan sorguları yürüt",
+ "ErrorDIYHelp_3": "version_core değişkeninin değerini yarım kalan güncellemenin sürümüne ayarlayarak, Piwik veritabanınızdaki `option` tablosunu el ile güncelleyin",
+ "ErrorDIYHelp_4": "kalan güncellemeleri tamamlamak için güncelleyiciyi yeniden çalıştırın (tarayıcı ya da komut satırından)",
+ "ErrorDIYHelp_5": "sorunu (ve çözümü) bildirin böylece Piwik yazılımını daha iyi yapabiliriz",
+ "ErrorDuringPluginsUpdates": "Uygulama eki güncellemelerinde bir sorun çıktı:",
+ "ExceptionAlreadyLatestVersion": "Kullandığınız Piwik %s sürümü güncel.",
+ "ExceptionArchiveEmpty": "Arşiv boş.",
+ "ExceptionArchiveIncompatible": "Arşiv uyumsuz: %s",
+ "ExceptionArchiveIncomplete": "Arşiv eksik: Bazı dosyalar kayıp (%s gibi).",
+ "FeedbackRequest": "Görüş ve önerilerinizi Piwik ekibi ile paylaşmaya çekinmeyin:",
+ "InstallingTheLatestVersion": "Son sürüm yükleniyor",
+ "LatestBetaRelease": "Son Beta sürümü",
+ "LatestStableRelease": "Son kararlı sürüm",
+ "Latest2XStableRelease": "Son kararlı 2.X sürümü",
+ "Latest2XBetaRelease": "Son Beta 2.X sürümü",
+ "LtsSupportVersion": "Uzun Dönem Desteklenen Sürüm",
"MajorUpdateWarning1": "Bu büyük bir güncelleştirme. Alışkın olduğunuz süreden daha uzun sürecektir.",
"NoteForLargePiwikInstances": "Büyük Piwik güncellemesi için önemli not",
"NotificationClickToUpdatePlugins": "Eklentileriniz güncellemek için burayı tıklayın:",
diff --git a/plugins/CustomPiwikJs/API.php b/plugins/CustomPiwikJs/API.php
new file mode 100644
index 0000000000..dc028e1de9
--- /dev/null
+++ b/plugins/CustomPiwikJs/API.php
@@ -0,0 +1,41 @@
+<?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\CustomPiwikJs;
+
+use Piwik\Piwik;
+use Piwik\Plugins\CustomPiwikJs\Exception\AccessDeniedException;
+
+/**
+ * API for plugin CustomPiwikJs
+ *
+ * @method static \Piwik\Plugins\CustomPiwikJs\API getInstance()
+ */
+class API extends \Piwik\Plugin\API
+{
+ /**
+ * Detects whether plugin trackers will be automatically added to piwik.js or not. If not, the plugin tracker files
+ * need to be loaded manually.
+ * @return bool
+ */
+ public function doesIncludePluginTrackersAutomatically()
+ {
+ Piwik::checkUserHasSomeAdminAccess();
+
+ try {
+ $updater = new TrackerUpdater();
+ $updater->checkWillSucceed();
+ return true;
+ } catch (AccessDeniedException $e) {
+ return false;
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+}
diff --git a/plugins/CustomPiwikJs/Commands/UpdateTracker.php b/plugins/CustomPiwikJs/Commands/UpdateTracker.php
index 70754bc20f..1bdbd7e5f3 100644
--- a/plugins/CustomPiwikJs/Commands/UpdateTracker.php
+++ b/plugins/CustomPiwikJs/Commands/UpdateTracker.php
@@ -35,7 +35,7 @@ class UpdateTracker extends ConsoleCommand
{
$sourceFile = $input->getOption('source-file');
$targetFile = $input->getOption('target-file');
- $ignoreMinified = $input->hasOption('ignore-minified');
+ $ignoreMinified = (bool)$input->getOption('ignore-minified');
$this->updateTracker($sourceFile, $targetFile, $ignoreMinified);
diff --git a/plugins/CustomPiwikJs/File.php b/plugins/CustomPiwikJs/File.php
index 79a93e7437..03d874e61d 100644
--- a/plugins/CustomPiwikJs/File.php
+++ b/plugins/CustomPiwikJs/File.php
@@ -38,7 +38,9 @@ class File
public function save($content)
{
- file_put_contents($this->file, $content);
+ if(false === file_put_contents($this->file, $content)) {
+ throw new AccessDeniedException(sprintf("Could not write to %s", $this->file));
+ }
}
public function getContent()
@@ -60,7 +62,10 @@ class File
*/
public function hasWriteAccess()
{
- return $this->hasReadAccess() && is_writable($this->file);
+ if (file_exists($this->file) && !is_writable($this->file)) {
+ return false;
+ }
+ return is_writable(dirname($this->file)) || is_writable($this->file);
}
/**
diff --git a/plugins/CustomPiwikJs/lang/cs.json b/plugins/CustomPiwikJs/lang/cs.json
new file mode 100644
index 0000000000..f793e430fa
--- /dev/null
+++ b/plugins/CustomPiwikJs/lang/cs.json
@@ -0,0 +1,7 @@
+{
+ "CustomPiwikJs": {
+ "DiagnosticPiwikJsWritable": "Zapisovatelný JavaScript záznam (\"\/piwik.js\")",
+ "DiagnosticPiwikJsNotWritable": "Piwik JavaScript záznam \"\/piwik.js\" není zapisovatelný, což znamená, že ostatní zásuvné moduly nemohou tento JavaScript záznam rozšiřovat. V budoucnosti mohou být z tohoto důvodu omezeny i další hlavní služby.",
+ "DiagnosticPiwikJsMakeWritable": "Doporučujeme povolit zápis do Piwik.js například pomocí příkazu: %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomPiwikJs/lang/de.json b/plugins/CustomPiwikJs/lang/de.json
new file mode 100644
index 0000000000..7aa50965a5
--- /dev/null
+++ b/plugins/CustomPiwikJs/lang/de.json
@@ -0,0 +1,5 @@
+{
+ "CustomPiwikJs": {
+ "DiagnosticPiwikJsWritable": "Schreibbarer JavaScript-Tracker (\"\/piwik.js\")"
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomPiwikJs/lang/el.json b/plugins/CustomPiwikJs/lang/el.json
new file mode 100644
index 0000000000..7a3c1c1aaa
--- /dev/null
+++ b/plugins/CustomPiwikJs/lang/el.json
@@ -0,0 +1,7 @@
+{
+ "CustomPiwikJs": {
+ "DiagnosticPiwikJsWritable": "Αρχείο παρακολούθησης JavaScript (\"\/piwik.js\")",
+ "DiagnosticPiwikJsNotWritable": "Το αρχείο παρακολούθησης JavaScript \"\/piwik.js\" δεν είναι εγγράψιμο που σημαίνει ότι άλλα πρόσθετα δεν μπορούν να επεκτείνουν την κλάση παρακολούθησης. Στο μέλλον ορισμένα χαρακτηριστικά του πυρήνα δε θα δουλεύουν όπως πρέπει.",
+ "DiagnosticPiwikJsMakeWritable": "Προτείνεται να κάνετε το αρχείο Piwik.js εγγράψιμο εκτελώντας αυτή την εντολή: %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomPiwikJs/lang/es.json b/plugins/CustomPiwikJs/lang/es.json
new file mode 100644
index 0000000000..89f6ed78cc
--- /dev/null
+++ b/plugins/CustomPiwikJs/lang/es.json
@@ -0,0 +1,7 @@
+{
+ "CustomPiwikJs": {
+ "DiagnosticPiwikJsWritable": "Archivo de seguimiento Javascript modificable (\"\/piwik.js\")",
+ "DiagnosticPiwikJsNotWritable": "El archivo de seguimiento JavaScript de Piwik \"\/piwik.js\" no se puede modificar lo que significa que otros complementos no pueden mejorarlo. En el futuro, incluso algunas de las características básicas podrían no funcionar como se espera.",
+ "DiagnosticPiwikJsMakeWritable": "Recomendamos Piwik.js modificable mediante la ejecución de este comando: %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomPiwikJs/lang/fr.json b/plugins/CustomPiwikJs/lang/fr.json
new file mode 100644
index 0000000000..84853489f6
--- /dev/null
+++ b/plugins/CustomPiwikJs/lang/fr.json
@@ -0,0 +1,7 @@
+{
+ "CustomPiwikJs": {
+ "DiagnosticPiwikJsWritable": "Traceur JavaScript inscriptible (\"\/piwik.js\")",
+ "DiagnosticPiwikJsNotWritable": "Le fichier du traceur JavaScript Piwik \"\/piwik.js\" ne peut pas être modifié ce qui signifie que les autres composants ne peuvent pas l'enrichir. A l'avenir même certaines fonctionnalités natives pourraient ne pas fonctionner comme prévu.",
+ "DiagnosticPiwikJsMakeWritable": "Nous vous recommandons de permettre l'écriture de Piwik.js en exécutant la commande suivante : %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomPiwikJs/lang/nb.json b/plugins/CustomPiwikJs/lang/nb.json
new file mode 100644
index 0000000000..e568140ece
--- /dev/null
+++ b/plugins/CustomPiwikJs/lang/nb.json
@@ -0,0 +1,7 @@
+{
+ "CustomPiwikJs": {
+ "DiagnosticPiwikJsWritable": "Skrivbar JavaScript Sporer (\"\/piwik.js\")",
+ "DiagnosticPiwikJsNotWritable": "Piwik JavaScript Sporer filen \"\/piwik.js\" er ikke skrivbar som betyr andre plugins kan ikke forlenge Javascript Sporer. I fremtiden enda noen sentrale funksjoner kanskje ikke fungerer som forventet.",
+ "DiagnosticPiwikJsMakeWritable": "Vi anbefaler å Piwik.js skrivbar ved å kjøre denne kommandoen: %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomPiwikJs/tests/Integration/ApiTest.php b/plugins/CustomPiwikJs/tests/Integration/ApiTest.php
new file mode 100644
index 0000000000..d1fce33e4c
--- /dev/null
+++ b/plugins/CustomPiwikJs/tests/Integration/ApiTest.php
@@ -0,0 +1,84 @@
+<?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\CustomPiwikJs\tests\Integration;
+
+use Piwik\Plugins\CustomPiwikJs\API;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\Mock\FakeAccess;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
+
+/**
+ * @group CustomPiwikJs
+ * @group ApiTest
+ * @group Api
+ * @group Plugins
+ */
+class ApiTest extends IntegrationTestCase
+{
+ /**
+ * @var API
+ */
+ private $api;
+
+ public function setUp()
+ {
+ parent::setUp();
+
+ Fixture::createSuperUser();
+ Fixture::createWebsite('2014-01-01 01:02:03');
+ $this->api = API::getInstance();
+ }
+
+ /**
+ * @expectedException \Piwik\NoAccessException
+ * @expectedExceptionMessage checkUserHasSomeAdminAccess
+ */
+ public function test_doesIncludePluginTrackersAutomatically_failsIfNotEnoughPermission()
+ {
+ $this->setUser();
+ $this->api->doesIncludePluginTrackersAutomatically();
+ }
+
+ /**
+ * @expectedException \Piwik\NoAccessException
+ * @expectedExceptionMessage checkUserHasSomeAdminAccess
+ */
+ public function test_doesIncludePluginTrackersAutomatically_failsIfNotEnoughPermissionAnonymous()
+ {
+ $this->setAnonymousUser();
+ $this->api->doesIncludePluginTrackersAutomatically();
+ }
+
+ public function test_doesIncludePluginTrackersAutomatically_returnsValueWhenEnoughPermission()
+ {
+ $this->assertTrue($this->api->doesIncludePluginTrackersAutomatically());
+ }
+
+ protected function setUser()
+ {
+ FakeAccess::clearAccess(false);
+ FakeAccess::$identity = 'testUsername';
+ FakeAccess::$idSitesView = array(1);
+ FakeAccess::$idSitesAdmin = array();
+ }
+
+ protected function setAnonymousUser()
+ {
+ FakeAccess::clearAccess();
+ FakeAccess::$identity = 'anonymous';
+ }
+
+ public function provideContainerConfig()
+ {
+ return array(
+ 'Piwik\Access' => new FakeAccess()
+ );
+ }
+
+}
diff --git a/plugins/CustomPiwikJs/tests/Integration/FileTest.php b/plugins/CustomPiwikJs/tests/Integration/FileTest.php
index 4d96bd6478..aa8cee9c5d 100644
--- a/plugins/CustomPiwikJs/tests/Integration/FileTest.php
+++ b/plugins/CustomPiwikJs/tests/Integration/FileTest.php
@@ -19,7 +19,8 @@ use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
*/
class FileTest extends IntegrationTestCase
{
- const NOT_EXISTING_FILE = 'notExisTinGFile.js';
+ const NOT_EXISTING_FILE_IN_WRITABLE_DIRECTORY = 'notExisTinGFile.js';
+ const NOT_EXISTING_FILE_IN_NON_WRITABLE_DIRECTORY = 'is-not-writable/notExisTinGFile.js';
/**
* @var string
@@ -30,14 +31,23 @@ class FileTest extends IntegrationTestCase
{
parent::setUp();
$this->dir = PIWIK_DOCUMENT_ROOT . '/plugins/CustomPiwikJs/tests/resources/';
+
+ // make directory not writable
+ $nonWritableDir = dirname($this->dir . self::NOT_EXISTING_FILE_IN_NON_WRITABLE_DIRECTORY);
+ @chmod($nonWritableDir, 0444);
+ if(is_writable($nonWritableDir)) {
+ throw new \Exception("The directory $nonWritableDir should have been made non writable by this test, but it didn't work");
+ }
}
public function tearDown()
{
- if (file_exists($this->dir . self::NOT_EXISTING_FILE)) {
- unlink($this->dir . self::NOT_EXISTING_FILE);
- }
+ // restore permissions changed by makeNotWritableFile()
+ chmod($this->dir, 0777);
+ if (file_exists($this->dir . self::NOT_EXISTING_FILE_IN_WRITABLE_DIRECTORY)) {
+ unlink($this->dir . self::NOT_EXISTING_FILE_IN_WRITABLE_DIRECTORY);
+ }
parent::tearDown();
}
@@ -46,9 +56,40 @@ class FileTest extends IntegrationTestCase
return new File($this->dir . $fileName);
}
+ private function makeNotWritableFile()
+ {
+ $path = $this->dir . 'file-made-non-writable.js';
+ if(file_exists($path)) {
+ chmod($path, 0777);
+ }
+ $file = new File($path);
+ $file->save('will be saved OK, and then we make it non writable.');
+
+ if (!chmod($path, 0444)) {
+ throw new \Exception("chmod on the file didn't work");
+ }
+ if (!chmod(dirname($path), 0755)) {
+ throw new \Exception("chmod on the directory didn't work");
+ }
+ $this->assertTrue(is_writable(dirname($path)));
+ $this->assertFalse(is_writable($path));
+ $this->assertTrue(file_exists($path));
+ return $file;
+ }
+
private function makeNotReadableFile()
{
- return $this->makeFile(self::NOT_EXISTING_FILE);
+ return $this->makeNotReadableFile_inWritableDirectory();
+ }
+
+ private function makeNotReadableFile_inNonWritableDirectory()
+ {
+ return $this->makeFile(self::NOT_EXISTING_FILE_IN_NON_WRITABLE_DIRECTORY);
+ }
+
+ private function makeNotReadableFile_inWritableDirectory()
+ {
+ return $this->makeFile(self::NOT_EXISTING_FILE_IN_WRITABLE_DIRECTORY);
}
public function test_getName()
@@ -66,7 +107,13 @@ class FileTest extends IntegrationTestCase
public function test_hasWriteAccess()
{
$this->assertTrue($this->makeFile()->hasWriteAccess());
- $this->assertFalse($this->makeNotReadableFile()->hasWriteAccess());
+ $this->assertTrue($this->makeNotReadableFile_inWritableDirectory()->hasWriteAccess());
+ $this->assertFalse($this->makeNotReadableFile_inNonWritableDirectory()->hasWriteAccess());
+ }
+
+ public function test_hasWriteAccess_whenFileExistAndIsNotWritable()
+ {
+ $this->assertFalse($this->makeNotWritableFile()->hasWriteAccess());
}
public function test_checkReadable_shouldNotThrowException_IfIsReadable()
@@ -96,7 +143,12 @@ class FileTest extends IntegrationTestCase
*/
public function test_checkWritable_shouldThrowException_IfNotIsWritable()
{
- $this->makeNotReadableFile()->checkWritable();
+ $this->makeNotReadableFile_inNonWritableDirectory()->checkWritable();
+ }
+
+ public function test_checkWritable_shouldNotThrowException_IfDirectoryIsWritable()
+ {
+ $this->makeNotReadableFile_inWritableDirectory()->checkWritable();
}
public function test_getContent()
@@ -111,9 +163,9 @@ class FileTest extends IntegrationTestCase
public function test_save()
{
- $notExistingFile = $this->makeNotReadableFile();
+ $notExistingFile = $this->makeNotReadableFile_inWritableDirectory();
$this->assertFalse($notExistingFile->hasReadAccess());
- $this->assertFalse($notExistingFile->hasWriteAccess());
+ $this->assertTrue($notExistingFile->hasWriteAccess());
$notExistingFile->save('myTestContent');
diff --git a/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php b/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php
index 240638c5e9..58650adf7e 100644
--- a/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php
+++ b/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php
@@ -62,7 +62,13 @@ class TrackerUpdaterTest extends IntegrationTestCase
* @expectedException \Piwik\Plugins\CustomPiwikJs\Exception\AccessDeniedException
* @expectedExceptionMessage not writable
*/
- public function test_checkWillSucceed_shouldThrowExceptionIfTargetIsNotWritable()
+ public function test_checkWillSucceed_shouldNotThrowExceptionIfTargetIsNotWritable()
+ {
+ $updater = $this->makeUpdater(null, $this->dir . 'not-writable/MyNotExisIngFilessss.js');
+ $updater->checkWillSucceed();
+ }
+
+ public function test_checkWillSucceed_shouldNotThrowExceptionIfTargetIsWritable()
{
$updater = $this->makeUpdater(null, $this->dir . 'MyNotExisIngFilessss.js');
$updater->checkWillSucceed();
diff --git a/plugins/CustomVariables/lang/es.json b/plugins/CustomVariables/lang/es.json
index 012d4797a6..fde28a873d 100644
--- a/plugins/CustomVariables/lang/es.json
+++ b/plugins/CustomVariables/lang/es.json
@@ -6,6 +6,18 @@
"CustomVariablesReportDocumentation": "Este informe contiene información sobre sus Variables Personalizadas. Haga clic en el nombre de una variable para ver la distribución de los valores. %1$s Para más información sobre las Variables Personalizadas en general, lea la %2$sdocumentación de Variables Personalizadas en piwik.org%3$s",
"PluginDescription": "Variables Personalizadas (nombre, valor) son pares que se pueden asignar mediante la API de Javascript a los visitantes o cualquiera de sus acciones. Piwik luego informará el número de visitas, páginas, las conversiones para cada uno de estos nombres y valores personalizados. Vea las variables personalizadas detalladas para cada usuario y su acción en el registro de visitantes. <br \/> Requerida para utilizar la función de <a href=\"http:\/\/piwik.org\/docs\/ecommerce-analytics\/\"> Ecommerce Analytics <\/a>!",
"ScopePage": "ámbito de la página",
- "ScopeVisit": "alcance de la visita"
+ "ScopeVisit": "alcance de la visita",
+ "ScopeX": "Ambito %s",
+ "Index": "Indice",
+ "Usages": "Usos",
+ "Unused": "No usado",
+ "CreateNewSlot": "Aumente el número de vacantes disponibles de Medidas personalizadas",
+ "UsageDetails": "%1$s visitas y %2$s acciones desde la creación de este sitio.",
+ "CreatingCustomVariableTakesTime": "Crear una nueva variable personalizada puede tomar un cierto tiempo dependiendo del tamaño de su base de datos. Por lo tanto, sólo es posible hacerlo vía un comando que necesita ser ejecutado desde la línea de comando.",
+ "CurrentAvailableCustomVariables": "Actualmente puede usar hasta %s Variables personalizadas por sitio.",
+ "ToCreateCustomVarExecute": "Para crear una nueva variable personalizada ejecute el siguiente comando dentro de su instalación Piwik:",
+ "SlotsReportIsGeneratedOverTime": "Los datos de este informe irán aumentando con el tiempo. Puede tomar un día o dos para ver cualquier dato y unas pocas semanas hasta que el informe sea totalmente exacto.",
+ "MetricsAreOnlyAvailableForVisitScope": "Nota: %1$s métricas están disponibles solo para las Variables personalizadas de alcance %2$s.",
+ "MetricsNotAvailableForPageScope": "Para Variables personalizadas de alcance %1$s, el valor de estas métricas es %2$s"
}
} \ No newline at end of file
diff --git a/plugins/Dashboard/Dashboard.php b/plugins/Dashboard/Dashboard.php
index e2ded0aa2b..86cf3ec2cd 100644
--- a/plugins/Dashboard/Dashboard.php
+++ b/plugins/Dashboard/Dashboard.php
@@ -10,7 +10,6 @@ namespace Piwik\Plugins\Dashboard;
use Piwik\Common;
use Piwik\Container\StaticContainer;
-use Piwik\Db;
use Piwik\Piwik;
use Piwik\Category\Subcategory;
use Piwik\Widget\WidgetConfig;
@@ -21,7 +20,7 @@ use Piwik\Plugin;
class Dashboard extends \Piwik\Plugin
{
/**
- * @see Piwik\Plugin::registerEvents
+ * @see \Piwik\Plugin::registerEvents
*/
public function registerEvents()
{
@@ -134,37 +133,29 @@ class Dashboard extends \Piwik\Plugin
$defaultLayout = $this->getLayoutForUser('', 1);
if (empty($defaultLayout)) {
- $topWidget = '';
-
+ $advertisingWidget = '';
$advertising = StaticContainer::get('Piwik\ProfessionalServices\Advertising');
if ($advertising->areAdsForProfessionalServicesEnabled() && Plugin\Manager::getInstance()->isPluginActivated('ProfessionalServices')) {
- $topWidget .= '{"uniqueId":"widgetProfessionalServicespromoServices",'
- . '"parameters":{"module":"ProfessionalServices","action":"promoServices"}},';
+ $advertisingWidget = '{"uniqueId":"widgetProfessionalServicespromoServices","parameters":{"module":"ProfessionalServices","action":"promoServices"}},';
}
-
if (Piwik::hasUserSuperUserAccess()) {
- $topWidget .= '{"uniqueId":"widgetCoreHomegetDonateForm",'
- . '"parameters":{"module":"CoreHome","action":"getDonateForm"}},';
+ $piwikPromoWidget = '{"uniqueId":"widgetCoreHomegetDonateForm","parameters":{"module":"CoreHome","action":"getDonateForm"}}';
} else {
- $topWidget .= '{"uniqueId":"widgetCoreHomegetPromoVideo",'
- . '"parameters":{"module":"CoreHome","action":"getPromoVideo"}},';
+ $piwikPromoWidget = '{"uniqueId":"widgetCoreHomegetPromoVideo","parameters":{"module":"CoreHome","action":"getPromoVideo"}}';
}
-
$defaultLayout = '[
[
- {"uniqueId":"widgetVisitsSummarygetEvolutionGraphforceView1viewDataTablegraphEvolution","parameters":{"forceView":"1","viewDataTable":"graphEvolution","module":"VisitsSummary","action":"getEvolutionGraph"}},
{"uniqueId":"widgetLivewidget","parameters":{"module":"Live","action":"widget"}},
- {"uniqueId":"widgetVisitorInterestgetNumberOfVisitsPerVisitDuration","parameters":{"viewDataTable":"cloud","module":"VisitorInterest","action":"getNumberOfVisitsPerVisitDuration"}}
+ ' . $piwikPromoWidget . '
],
[
- ' . $topWidget . '
- {"uniqueId":"widgetReferrersgetWebsites","parameters":{"module":"Referrers","action":"getWebsites"}},
- {"uniqueId":"widgetVisitTimegetVisitInformationPerServerTime","parameters":{"viewDataTable": "graphVerticalBar","module":"VisitTime","action":"getVisitInformationPerServerTime"}}
+ {"uniqueId":"widgetVisitsSummarygetEvolutionGraphforceView1viewDataTablegraphEvolution","parameters":{"forceView":"1","viewDataTable":"graphEvolution","module":"VisitsSummary","action":"getEvolutionGraph"}},
+ ' . $advertisingWidget . '
+ {"uniqueId":"widgetVisitsSummarygetforceView1viewDataTablesparklines","parameters":{"forceView":"1","viewDataTable":"sparklines","module":"VisitsSummary","action":"get"}}
],
[
{"uniqueId":"widgetUserCountryMapvisitorMap","parameters":{"module":"UserCountryMap","action":"visitorMap"}},
- {"uniqueId":"widgetDevicesDetectiongetBrowsers","parameters":{"module":"DevicesDetection","action":"getBrowsers"}},
- {"uniqueId":"widgetReferrersgetSearchEngines","parameters":{"module":"Referrers","action":"getSearchEngines"}},
+ {"uniqueId":"widgetReferrersgetReferrerType","parameters":{"module":"Referrers","action":"getReferrerType"}},
{"uniqueId":"widgetRssWidgetrssPiwik","parameters":{"module":"RssWidget","action":"rssPiwik"}}
]
]';
diff --git a/plugins/DevicePlugins/lang/es.json b/plugins/DevicePlugins/lang/es.json
index 115de91a27..a8b8499033 100644
--- a/plugins/DevicePlugins/lang/es.json
+++ b/plugins/DevicePlugins/lang/es.json
@@ -3,6 +3,7 @@
"BrowserWithNoPluginsEnabled": "%1$s sin complementos habilitados",
"BrowserWithPluginsEnabled": "%1$s con los complementos %2$s habilitados",
"PluginDescription": "Informa la lista de complementos que están admitidos en los navegadores de internet de los visitantes.",
+ "PluginDetectionDoesNotWorkInIE": "Nota: La detección de complementos no funciona en Internet Explorer antes de 11. Este reporte está basado solamente en navegadores no-IE y nuevas versiones de IE.",
"WidgetPlugins": "Lista de Complementos",
"WidgetPluginsDocumentation": "Este informe muestra que extensiones del navegador sus visitantes han habilitado. Esta información puede ser importante sea para elegir el método eficiente de enviar su contenido."
}
diff --git a/plugins/DevicePlugins/lang/tr.json b/plugins/DevicePlugins/lang/tr.json
index 9a4de058ba..9863f35f85 100644
--- a/plugins/DevicePlugins/lang/tr.json
+++ b/plugins/DevicePlugins/lang/tr.json
@@ -1,5 +1,10 @@
{
"DevicePlugins": {
- "WidgetPlugins": "Eklenti Listesi"
+ "BrowserWithNoPluginsEnabled": "%1$s için bir eklenti yüklenmemiş",
+ "BrowserWithPluginsEnabled": "%1$s için %2$s eklenti yüklenmiş",
+ "PluginDescription": "Ziyaretçilerin web tarayıcıları tarafından desteklenen eklentilerin listesini görüntüler.",
+ "PluginDetectionDoesNotWorkInIE": "Not: Eklenti algılaması Internet Explorer 11 öncesindeki sürümleri desteklemez. Bu raporda yalnız IE dışındaki tarayıcılar ve yeni IE tarayıcıları için veriler bulunur.",
+ "WidgetPlugins": "Tarayıcı Eklentileri",
+ "WidgetPluginsDocumentation": "Bu raporda ziyaretçilerinizin web tarayıcılarında hangi eklentilerin etkin olduğu görüntülenir. Bu bilgiler içeriğinizi doğru şekilde sunmanız için önemli olabilir."
}
} \ No newline at end of file
diff --git a/plugins/Diagnostics/lang/es.json b/plugins/Diagnostics/lang/es.json
new file mode 100644
index 0000000000..3793481bb5
--- /dev/null
+++ b/plugins/Diagnostics/lang/es.json
@@ -0,0 +1,8 @@
+{
+ "Diagnostics": {
+ "ConfigFileTitle": "Archivo de configuración",
+ "ConfigFileIntroduction": "Aquí puede ver la configuración de Piwik. Si está ejecutando Piwik en un ecosistema balanceado puede que la página sea diferente sea por el servidor que la esté cargando. Las files con un color de fondo diferente son valores de configuración modificados que son especificados por ejemplo en el archivo %1$s.",
+ "HideUnchanged": "Si desea ver solo los valores modificados puede %1$socultar todos los valores no modificados%2$s.",
+ "Sections": "Secciones"
+ }
+} \ No newline at end of file
diff --git a/plugins/ExamplePlugin/CHANGELOG.md b/plugins/ExamplePlugin/CHANGELOG.md
new file mode 100644
index 0000000000..854631896a
--- /dev/null
+++ b/plugins/ExamplePlugin/CHANGELOG.md
@@ -0,0 +1,3 @@
+## Changelog
+
+Here goes the changelog text.
diff --git a/plugins/ExamplePlugin/README.md b/plugins/ExamplePlugin/README.md
index c9c3266859..fa70e946c8 100644
--- a/plugins/ExamplePlugin/README.md
+++ b/plugins/ExamplePlugin/README.md
@@ -4,12 +4,3 @@
Add your plugin description here.
-## FAQ
-
-__My question?__
-
-My answer
-
-## Changelog
-
-Here goes the changelog text.
diff --git a/plugins/ExamplePlugin/docs/faq.md b/plugins/ExamplePlugin/docs/faq.md
new file mode 100644
index 0000000000..dde17aa5cc
--- /dev/null
+++ b/plugins/ExamplePlugin/docs/faq.md
@@ -0,0 +1,5 @@
+## FAQ
+
+__My question?__
+
+My answer \ No newline at end of file
diff --git a/plugins/ExamplePlugin/docs/index.md b/plugins/ExamplePlugin/docs/index.md
new file mode 100644
index 0000000000..70135e8e6a
--- /dev/null
+++ b/plugins/ExamplePlugin/docs/index.md
@@ -0,0 +1 @@
+## Documentation \ No newline at end of file
diff --git a/plugins/ExampleTheme/CHANGELOG.md b/plugins/ExampleTheme/CHANGELOG.md
new file mode 100644
index 0000000000..854631896a
--- /dev/null
+++ b/plugins/ExampleTheme/CHANGELOG.md
@@ -0,0 +1,3 @@
+## Changelog
+
+Here goes the changelog text.
diff --git a/plugins/ExampleTheme/README.md b/plugins/ExampleTheme/README.md
index de7cfecaa1..0cb889be35 100644
--- a/plugins/ExampleTheme/README.md
+++ b/plugins/ExampleTheme/README.md
@@ -3,12 +3,3 @@
## Description
Add your theme description here.
-
-## FAQ
-
-__My question?__
-My answer
-
-## Changelog
-
-Here goes the changelog text.
diff --git a/plugins/ExampleTheme/docs/faq.md b/plugins/ExampleTheme/docs/faq.md
new file mode 100644
index 0000000000..dde17aa5cc
--- /dev/null
+++ b/plugins/ExampleTheme/docs/faq.md
@@ -0,0 +1,5 @@
+## FAQ
+
+__My question?__
+
+My answer \ No newline at end of file
diff --git a/plugins/ExampleTheme/docs/index.md b/plugins/ExampleTheme/docs/index.md
new file mode 100644
index 0000000000..70135e8e6a
--- /dev/null
+++ b/plugins/ExampleTheme/docs/index.md
@@ -0,0 +1 @@
+## Documentation \ No newline at end of file
diff --git a/plugins/Feedback/lang/cs.json b/plugins/Feedback/lang/cs.json
index 3cd43a1eb8..415390b5a0 100644
--- a/plugins/Feedback/lang/cs.json
+++ b/plugins/Feedback/lang/cs.json
@@ -19,10 +19,14 @@
"ViewUserGuides": "Naučte se, jak konfigurovat Piwik a efektivně analyzovat data s našimi %1$suživatelskými příručkami%2$s",
"CommunityHelp": "Komunitní pomoc",
"ProfessionalHelp": "Profesionální pomoc",
+ "ProfessionalServicesIntro": "Naše celosvětová síť profesionálních Piwik konzultantů podporuje klienty, kteří hostují Piwik na vlastní infrastruktuře.",
+ "ProfessionalServicesOfferIntro": "Ze kterých služeb můžete profitovat?",
"ProfessionalServicesReviewPiwikSetup": "Kontrola vaší instalace Piwiku",
+ "ProfessionalServicesOptimizationMaintenance": "Služby optimalizace a údržby Piwiku",
"ProfessionalServicesPhoneEmailSupport": "Telefonická a e-mailová podpora",
"ProfessionalServicesTraining": "Školení uživatelů, techniků a vývoářů",
"ProfessionalServicesPremiumFeatures": "Prémiové funkce",
+ "ProfessionalServicesCustomDevelopment": "Vývojářské služby na míru",
"ProfessionalServicesAnalystConsulting": "Služby konzultace analytika",
"ContactUs": "Kontaktujte nás",
"VisitTheForums": "Navštivte %1$s fóra%2$s a nechte si pomoci komunitou uživatelů aplikace Piwik"
diff --git a/plugins/Feedback/lang/es.json b/plugins/Feedback/lang/es.json
index 043c642780..a4e07c8a65 100644
--- a/plugins/Feedback/lang/es.json
+++ b/plugins/Feedback/lang/es.json
@@ -22,6 +22,7 @@
"ProfessionalServicesIntro": "Nuestra red mundial de consultores profesionales que brindan asistencia a todos los clientes que hospedan Piwik en su propia infraestructura.",
"ProfessionalServicesOfferIntro": "¿Qué servicios puede beneficiarse?",
"ProfessionalServicesReviewPiwikSetup": "Reseña de su instalación Piwik",
+ "ProfessionalServicesOptimizationMaintenance": "Servicios de mantenimiento & optimización Piwik",
"ProfessionalServicesPhoneEmailSupport": "Asistencia por teléfono y correo electrónico",
"ProfessionalServicesTraining": "Usuario, técnico y entrenamiento del desarrollador",
"ProfessionalServicesPremiumFeatures": "Funciones premium",
diff --git a/plugins/Feedback/lang/nb.json b/plugins/Feedback/lang/nb.json
index f268816761..0b0a28fc40 100644
--- a/plugins/Feedback/lang/nb.json
+++ b/plugins/Feedback/lang/nb.json
@@ -9,7 +9,10 @@
"SendFeedback": "Send tilbakemelding",
"ThankYou": "Takk for at du hjelper oss å lage Piwik bedre!",
"TopLinkTooltip": "Fortell oss hva du synes eller be om profesjonell støtte.",
+ "CommunityHelp": "Samfunns Hjelpere",
"ProfessionalHelp": "Profesjonell hjelp",
+ "ProfessionalServicesPhoneEmailSupport": "Telefon og e-post-støtte",
+ "ProfessionalServicesPremiumFeatures": "Premium-funksjoner",
"ContactUs": "Kontakt oss"
}
} \ No newline at end of file
diff --git a/plugins/Goals/lang/es.json b/plugins/Goals/lang/es.json
index d8c0dcb091..be3da50bb9 100644
--- a/plugins/Goals/lang/es.json
+++ b/plugins/Goals/lang/es.json
@@ -77,6 +77,7 @@
"NewGoalIntro": "El seguimiento de las conversiones del objetivo es una de las maneras más eficaces para medir y mejorar las metas de negocio.",
"NewVisitorsConversionRateIs": "La tasa de visitantes nuevos es %s",
"NoGoalsNeedAccess": "Solo un Administrador o un usuario con permisos de Super Usuario puede gestionar Objetivos para un determinado sitio web. Por favor, consulte a su administrador de Piwik para establecer Objetivos para su sitio web. <br> ¡Hacer un seguimiento de los Objetivos es una gran manera de ayudar a entender y maximizar el rendimiento de su sitio web!",
+ "NoConversionsNoReportsMessage": "Los informes no se muestran porque no hay datos de conversión para el objetivo y período seleccionado.",
"NeedAccess": "Solo un Administrador o un usuario con permisos de Super Usuario puede gestionar Objetivos para un determinado sitio web.",
"Optional": "(opcional)",
"OverallConversionRate": "%s tasa global de la conversión (visitas con un objetivo completado)",
diff --git a/plugins/Installation/lang/cs.json b/plugins/Installation/lang/cs.json
index 70abe1a1b8..ba78860a1b 100644
--- a/plugins/Installation/lang/cs.json
+++ b/plugins/Installation/lang/cs.json
@@ -45,6 +45,8 @@
"PasswordRepeat": "Heslo (zopakujte)",
"PercentDone": "%s %% hotovo",
"ProfessionalServicesAdTitle": "Pokročilá analytika & služby",
+ "ProfessionalServicesfessionalServicesAdText": "Naše síť expertů může pomoci vaší organizaci odkrýt celou sílu Piwik analýz.",
+ "ProfessionalServicesfessionalDiscoverHow": "Více informací o %1$sdalších produktech a službách%2$s pro Piwik a jak navýšit svůj obrat a výnos.",
"PleaseFixTheFollowingErrors": "Prosím opravte následující chyby",
"DefaultSettings": "Výchozí nastavení Piwiku",
"DefaultSettingsHelp": "Piwik má výchozí nastavení. Můžete je změnit teď, nebo později z administračního rozhraní.",
@@ -52,6 +54,7 @@
"RestartWebServer": "Po uložení změn restartujte Vás web server.",
"ReusingTables": "Použití existujících tabulek",
"PiwikOrgNewsletter": "odesílat e-maily s důležitými událostmi v komunitě Piwiku",
+ "ProfessionalServicesNewsletter": "pošlete mi informace o %1$sProfesionálních službách a produktech%2$s pro Piwik",
"SeeBelowForMoreInfo": "Pro více informací se podívejte níže.",
"SetupWebsite": "Nastavit Web",
"SetupWebsiteError": "Při přidávání Webu se vyskytla chyba",
diff --git a/plugins/Installation/lang/de.json b/plugins/Installation/lang/de.json
index 28050912eb..301aeec2a4 100644
--- a/plugins/Installation/lang/de.json
+++ b/plugins/Installation/lang/de.json
@@ -62,7 +62,7 @@
"SetupWebsiteSetupSuccess": "Website %s erfolgreich angelegt!",
"SetupWebSiteURL": "URL der Website",
"SiteSetup": "Konfigurieren Sie Ihre erste Website, welche über Piwik getrackt und analyisert werden soll:",
- "SiteSetupFootnote": "Hinweis: Nachdem die Installation von Piwik fertiggestellt wurde ist es möglich weitere Websites hinzuzufügen!",
+ "SiteSetupFootnote": "Hinweis: Sie können weitere Websites hinzuzufügen sobald die Installation von Piwik abgeschlossen wurde!",
"SuperUser": "Hauptadministrator",
"SuperUserLogin": "Hauptadministrator Login",
"SuperUserSetupError": "Beim Hinzufügen des Hauptadministrators ist ein Fehler aufgetreten.",
diff --git a/plugins/LanguagesManager/Commands/CreatePull.php b/plugins/LanguagesManager/Commands/CreatePull.php
index af46dc7000..fca1fc76aa 100644
--- a/plugins/LanguagesManager/Commands/CreatePull.php
+++ b/plugins/LanguagesManager/Commands/CreatePull.php
@@ -19,6 +19,8 @@ use Symfony\Component\Console\Output\OutputInterface;
*/
class CreatePull extends TranslationBase
{
+ const GIT_BASE_BRANCH = '2.x-dev';
+
protected function configure()
{
$this->setName('translations:createpull')
@@ -38,7 +40,7 @@ class CreatePull extends TranslationBase
return;
}
- $unpushedCommits = shell_exec('git log origin/master..HEAD');
+ $unpushedCommits = shell_exec('git log origin/' . self::GIT_BASE_BRANCH . '..HEAD');
if (!empty($unpushedCommits)) {
@@ -49,7 +51,7 @@ class CreatePull extends TranslationBase
chdir(PIWIK_DOCUMENT_ROOT);
shell_exec('
- git checkout -f master > /dev/null 2>&1
+ git checkout -f ' . self::GIT_BASE_BRANCH . ' > /dev/null 2>&1
git pull > /dev/null 2>&1
git submodule init > /dev/null 2>&1
git submodule update > /dev/null 2>&1
@@ -60,7 +62,7 @@ class CreatePull extends TranslationBase
chdir(PIWIK_DOCUMENT_ROOT.DIRECTORY_SEPARATOR.'plugins'.DIRECTORY_SEPARATOR.$plugin);
shell_exec('
- git checkout master > /dev/null 2>&1
+ git checkout ' . self::GIT_BASE_BRANCH . ' > /dev/null 2>&1
git pull > /dev/null 2>&1
');
}
@@ -73,10 +75,10 @@ class CreatePull extends TranslationBase
shell_exec('git checkout -b translationupdates origin/translationupdates');
}
- // switch to branch and update it to latest master
+ // switch to branch and update it to latest $GIT_BASE_BRANCH
shell_exec('
git checkout -f translationupdates > /dev/null 2>&1
- git merge master > /dev/null 2>&1
+ git reset --hard origin/' . self::GIT_BASE_BRANCH . ' > /dev/null 2>&1
git push origin translationupdates > /dev/null 2>&1
');
@@ -105,7 +107,7 @@ class CreatePull extends TranslationBase
if (empty($changes)) {
$output->writeln("Nothing changed. Everything is already up to date.");
- shell_exec('git checkout master > /dev/null 2>&1');
+ shell_exec('git checkout ' . self::GIT_BASE_BRANCH . ' > /dev/null 2>&1');
return;
}
@@ -163,7 +165,7 @@ class CreatePull extends TranslationBase
shell_exec('git commit -m "language update ${pluginName}"');
shell_exec('git push');
- shell_exec('git checkout master > /dev/null 2>&1');
+ shell_exec('git checkout ' . self::GIT_BASE_BRANCH . ' > /dev/null 2>&1');
$this->createPullRequest($output, $title, $message);
}
@@ -195,7 +197,7 @@ class CreatePull extends TranslationBase
--stderr /dev/null \
-o /dev/null \
-u '.$username.' \
- --data "{\"title\":\"[automatic translation update] '.$title.'\",\"body\":\"'.$message.'\",\"head\":\"translationupdates\",\"base\":\"master\"}" \
+ --data "{\"title\":\"[automatic translation update] '.$title.'\",\"body\":\"'.$message.'\",\"head\":\"translationupdates\",\"base\":\"' . self::GIT_BASE_BRANCH . '\"}" \
-H "Accept: application/json" \
https://api.github.com/repos/piwik/piwik/pulls');
diff --git a/plugins/Live/javascripts/rowaction.js b/plugins/Live/javascripts/rowaction.js
index 3524805dd8..604695bcec 100644
--- a/plugins/Live/javascripts/rowaction.js
+++ b/plugins/Live/javascripts/rowaction.js
@@ -74,7 +74,12 @@
var apiMethod = this.dataTable.param.module + '.' + this.dataTable.param.action;
- this.openPopover(apiMethod, segment, {});
+ var extraParams = {};
+ if (this.dataTable.param.date && this.dataTable.param.period) {
+ extraParams = {date: this.dataTable.param.date, period: this.dataTable.param.period};
+ }
+
+ this.openPopover(apiMethod, segment, extraParams);
};
DataTable_RowActions_SegmentVisitorLog.prototype.doOpenPopover = function (urlParam) {
diff --git a/plugins/Live/javascripts/visitorProfile.js b/plugins/Live/javascripts/visitorProfile.js
index c5bea438af..38cf21765d 100644
--- a/plugins/Live/javascripts/visitorProfile.js
+++ b/plugins/Live/javascripts/visitorProfile.js
@@ -51,7 +51,10 @@
url += '&showMap=0';
}
- Piwik_Popover.createPopupAndLoadUrl(url, _pk_translate('Live_VisitorProfile'), 'visitor-profile-popup');
+ var ajaxRequest = new ajaxHelper();
+ ajaxRequest.removeDefaultParameter('segment');
+
+ Piwik_Popover.createPopupAndLoadUrl(url, _pk_translate('Live_VisitorProfile'), 'visitor-profile-popup', ajaxRequest);
};
$.extend(VisitorProfileControl.prototype, UIControl.prototype, {
diff --git a/plugins/Live/lang/es.json b/plugins/Live/lang/es.json
index dfd02688b6..495242ead6 100644
--- a/plugins/Live/lang/es.json
+++ b/plugins/Live/lang/es.json
@@ -4,6 +4,7 @@
"CalculatedOverNPageViews": "Calculado usando las últimas %1$s páginas vistas de este visitante.",
"ClickToViewMoreAboutVisit": "Clic para ver más información acerca de esta visita.",
"ConvertedNGoals": "%s Objetivos convertidos",
+ "EcommerceSummaryConversions": "%1$s pedidos%2$s por un total de %3$s%4$s, comprando %5$s artículos%6$s.",
"FirstVisit": "Primer visita",
"GoalType": "Tipo",
"HideMap": "ocultar mapa",
@@ -33,6 +34,8 @@
"VisitorsInRealTime": "Visitantes en tiempo real",
"VisitorsLastVisit": "La última visita de este visitante fue hace %s días.",
"VisitsFrom": "%1$s%2$s visitas%3$s desde",
+ "VisitSummary": "Pasó un total de %1$s%2$s en el sitio de internet%3$s, y vió %4$s páginas%5$s en %6$s visitas%7$s.",
+ "VisitSummaryWithActionDetails": "Pasó un total de %1$s%2$s en el sitio de internet%3$s, y ejecutó %4$s acciones%5$s (%6$s) en %7$s visitas%8$s.",
"RowActionTooltipDefault": "Mostrar registro de visitante segmentado por esta fila",
"RowActionTooltipWithDimension": "Mostrar registro de visitante segmentado por este %s",
"RowActionTooltipTitle": "Abrir registro de visitante segmentado",
diff --git a/plugins/Login/lang/es.json b/plugins/Login/lang/es.json
index ec597a1b5e..79ee9ce391 100644
--- a/plugins/Login/lang/es.json
+++ b/plugins/Login/lang/es.json
@@ -5,12 +5,14 @@
"ExceptionInvalidSuperUserAccessAuthenticationMethod": "Un usuario con acceso Super Usuario no puede ser autenticado usando el mecanismo '%s'.",
"ExceptionPasswordMD5HashExpected": "Se espera que el parámetro contraseña sea un hash MD5 de la contraseña.",
"InvalidNonceOrHeadersOrReferrer": "La seguridad del formulario falló. Por favor cargue nuevamente el formulario y compruebe que sus cookies están habilitadas. Si usa un proxy, debe %1$s configurar Piwik para aceptar la cabecera proxy%2$s que precede a la cabecera Host. Compruebe también que su cabecera Referrer se envía correctamente.",
+ "InvalidNonceSSLMisconfigured": "También, puede %1$s forzar a Piwik a usar una conexión segura%2$s: en su archivo de configuración %3$s establezca %4$s bajo la sección %5$s.",
"InvalidOrExpiredToken": "El Token no es válido o ha caducado",
"InvalidUsernameEmail": "Nombre de usuario y\/o correo electrónico incorrectos.",
"LogIn": "Iniciar sesión",
"LoginOrEmail": "Usuario o correo electrónico",
"LoginPasswordNotCorrect": "Usuario y contraseña incorrectos.",
"LostYourPassword": "¿Olvidó la contraseña?",
+ "MailPasswordChangeBody": "Hola %1$s,\n\nUna solicitud de reestablecimiento de contraseña fue recibida desde %2$s. Para confirmar este cambio de contraseña para iniciar sesión con sus nuevas credenciales, visite el siguiente enlace:\n\n%3$s\n\nAtención: Cambiar su contraseña hará también que cambie su token_auth. Puede verificarlo en su página de ajustes.\n\nSi está utilizando su API token_auth en cualquier aplicación externa o a solo fines de archivado, asegúrese de actualizar su token_auth en tanto que cualquier petición a la API generá un error.\n\nNota: este enlace caducará transcurridas 24 horas.\n\nGracias por usar Piwik!",
"MailTopicPasswordChange": "Confirma el cambio de contraseña",
"PasswordChanged": "Su contraseña ha sido modificada.",
"PasswordRepeat": "Contraseña (repetir)",
diff --git a/plugins/Login/lang/tr.json b/plugins/Login/lang/tr.json
index 1ba717c60b..88f8d5975a 100644
--- a/plugins/Login/lang/tr.json
+++ b/plugins/Login/lang/tr.json
@@ -1,21 +1,21 @@
{
"Login": {
- "ConfirmationLinkSent": "Onaylama bağlantısı gelen kutunuza gönderildi. Şifre değişikliğinı onaylamak için e-posta hesabınızı kontrol edin ve bağlantıyı ziyaret edin.",
- "ContactAdmin": "Olası nedeni: Sunucunuzda mail() fonksiyonunu devre dışı bırakmış olabilir. <br \/>Lütfen Piwik yöneticinizle iletişime geçiniz.",
- "ExceptionInvalidSuperUserAccessAuthenticationMethod": "'%s' mekanizması kullanılarak bir süper kullanıcı girişi yetkilendirilemez.",
- "ExceptionPasswordMD5HashExpected": "Bu şifre parametresi şifrenin MD5 ile hashlenmiş halini beklemektedir.",
+ "ConfirmationLinkSent": "Size onaylama bağlantısını içeren bir e-posta önderildi. Parola değişikliği isteğinizi onaylamak için e-postalarınıza bakın ve onaylama bağlantısını açın.",
+ "ContactAdmin": "Olası neden: Sunucunuzda mail() işlevi devre dışı bırakılmış olabilir. <br \/>Lütfen Piwik yöneticinizle görüşün.",
+ "ExceptionInvalidSuperUserAccessAuthenticationMethod": "Süper kullanıcı yetkileri olan bir kullanıcının kimliği '%s' yöntemi ile doğrulanamaz.",
+ "ExceptionPasswordMD5HashExpected": "Parola parametresinin parolanın MD5 yöntemi ile karılmış biçimi olması beklenir.",
"InvalidNonceOrHeadersOrReferrer": "Form güvenliği sağlanamadı. Lütfen formu tekrar yükleyin ve çerezlerin aktif olduğundan emin olun. Eğer bir proxy sunucusu kullanıyorsanız, %2$s proxy başlığını kabul etmek için Piwik'i %1$s olarak ayarlamalısınız. Bununla birlikte Referans başlaığınızın doğru gönderildiğini kontrol edin.",
"InvalidOrExpiredToken": "Güvenlik kodu yanlış yada süresi dolmuş.",
- "InvalidUsernameEmail": "Geçersiz kullanıcı adı ve\/veya e-posta adresi",
+ "InvalidUsernameEmail": "Kullanıcı adı ya da e-posta adresi geçersiz.",
"LogIn": "Oturum aç",
- "LoginOrEmail": "Giriş veya E-posta",
- "LoginPasswordNotCorrect": "Kullanıcı adı & Şifre yanlış",
- "LostYourPassword": "Şifrenizi mi unuttunuz?",
+ "LoginOrEmail": "Kullanıcı Adı ya da E-posta",
+ "LoginPasswordNotCorrect": "Kullanıcı adı ile parola uyuşmuyor.",
+ "LostYourPassword": "Parolamı unuttum",
"MailTopicPasswordChange": "Parola Değişikliğini Onayla",
"PasswordChanged": "Parolanız değiştirildi.",
- "PasswordRepeat": "Şifre (Tekrar)",
- "PasswordsDoNotMatch": "Şifre eşleşmedi",
+ "PasswordRepeat": "Parola onayı",
+ "PasswordsDoNotMatch": "Parola ve onayı aynı değil",
"RememberMe": "Beni Hatırla",
- "ResetPasswordInstructions": "Hesabınız için yeni parolanızı giriniz."
+ "ResetPasswordInstructions": "Hesabınıza yeni bir parola yazın."
}
} \ No newline at end of file
diff --git a/plugins/Morpheus/javascripts/ajaxHelper.js b/plugins/Morpheus/javascripts/ajaxHelper.js
index c46984e5ce..4cc1ac823e 100644
--- a/plugins/Morpheus/javascripts/ajaxHelper.js
+++ b/plugins/Morpheus/javascripts/ajaxHelper.js
@@ -151,6 +151,8 @@ function ajaxHelper() {
*/
this.requestHandle = null;
+ this.defaultParams = ['idSite', 'period', 'date', 'segment'];
+
/**
* Adds params to the request.
* If params are given more then once, the latest given value is used for the request
@@ -318,6 +320,42 @@ function ajaxHelper() {
};
/**
+ * Detect whether are allowed to use the given default parameter or not
+ * @param string parameter
+ * @returns {boolean}
+ * @private
+ */
+ this._useGETDefaultParameter = function (parameter) {
+ if (parameter && this.defaultParams) {
+ var i;
+ for (i = 0; i < this.defaultParams.length; i++) {
+ if (this.defaultParams[i] === parameter) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Removes a default parameter that is usually send automatically along the request.
+ *
+ * @param {String} parameter A name such as "period", "date", "segment".
+ */
+ this.removeDefaultParameter = function (parameter) {
+ if (parameter && this.defaultParams) {
+
+ var i;
+ for (i = 0; i < this.defaultParams.length; i++) {
+ if (this.defaultParams[i] === parameter) {
+ this.defaultParams.splice(i, 1);
+ }
+ }
+ }
+ }
+
+ /**
* Send the request
* @param {Boolean} [sync] indicates if the request should be synchronous (defaults to false)
* @return {void}
@@ -497,13 +535,13 @@ function ajaxHelper() {
}
for (var key in defaultParams) {
- if (!params[key] && !this.postParams[key] && defaultParams[key]) {
+ if (this._useGETDefaultParameter(key) && !params[key] && !this.postParams[key] && defaultParams[key]) {
params[key] = defaultParams[key];
}
}
// handle default date & period if not already set
- if (!params.date && !this.postParams.date) {
+ if (this._useGETDefaultParameter('date') && !params.date && !this.postParams.date) {
params.date = piwik.currentDateString || broadcast.getValueFromUrl('date');
if (params.period == 'range' && piwik.currentDateString) {
params.date = piwik.startDateString + ',' + params.date;
diff --git a/plugins/Morpheus/templates/javascriptCode.tpl b/plugins/Morpheus/templates/javascriptCode.twig
index 18483dd09d..c18d850d34 100644
--- a/plugins/Morpheus/templates/javascriptCode.tpl
+++ b/plugins/Morpheus/templates/javascriptCode.twig
@@ -7,9 +7,12 @@
{$setTrackerUrl}
{$optionsBeforeTrackerUrl}_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['setSiteId', '{$idSite}']);
- var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
- g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
+ {% if loadAsync %}var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
+ g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);{% endif %}
+
})();
</script>
+{% if not loadAsync %}<script type='text/javascript' src="{$protocol}{$piwikUrl}/piwik.js">
+{% endif %}
<noscript><p><img src="{$protocol}{$piwikUrl}/piwik.php?idsite={$idSite}" style="border:0;" alt="" /></p></noscript>
<!-- End Piwik Code -->
diff --git a/plugins/ScheduledReports/Controller.php b/plugins/ScheduledReports/Controller.php
index a58faed74e..789b30fbc4 100644
--- a/plugins/ScheduledReports/Controller.php
+++ b/plugins/ScheduledReports/Controller.php
@@ -8,6 +8,7 @@
*/
namespace Piwik\Plugins\ScheduledReports;
+use Piwik\Date;
use Piwik\Piwik;
use Piwik\Plugins\LanguagesManager\LanguagesManager;
use Piwik\Plugins\SegmentEditor\API as APISegmentEditor;
@@ -26,7 +27,10 @@ class Controller extends \Piwik\Plugin\Controller
$view = new View('@ScheduledReports/index');
$this->setGeneralVariablesView($view);
- $view->countWebsites = count(APISitesManager::getInstance()->getSitesIdWithAtLeastViewAccess());
+ $siteTimezone = $this->site->getTimezone();
+
+ $view->timeZoneDifference = Date::getUtcOffset($siteTimezone) / 3600;
+ $view->countWebsites = count(APISitesManager::getInstance()->getSitesIdWithAtLeastViewAccess());
// get report types
$reportTypes = API::getReportTypes();
diff --git a/plugins/ScheduledReports/ScheduledReports.php b/plugins/ScheduledReports/ScheduledReports.php
index df6744f673..b85bbb7621 100644
--- a/plugins/ScheduledReports/ScheduledReports.php
+++ b/plugins/ScheduledReports/ScheduledReports.php
@@ -111,6 +111,7 @@ class ScheduledReports extends \Piwik\Plugin
{
$translationKeys[] = "ScheduledReports_ReportSent";
$translationKeys[] = "ScheduledReports_ReportUpdated";
+ $translationKeys[] = "ScheduledReports_ReportHourWithUTC";
}
/**
diff --git a/plugins/ScheduledReports/Tasks.php b/plugins/ScheduledReports/Tasks.php
index be61e0d793..44a13e1b57 100644
--- a/plugins/ScheduledReports/Tasks.php
+++ b/plugins/ScheduledReports/Tasks.php
@@ -18,11 +18,9 @@ class Tasks extends \Piwik\Plugin\Tasks
foreach (API::getInstance()->getReports() as $report) {
if (!$report['deleted'] && $report['period'] != Schedule::PERIOD_NEVER) {
- $timezone = Site::getTimezoneFor($report['idsite']);
-
$schedule = Schedule::getScheduledTimeForPeriod($report['period']);
$schedule->setHour($report['hour']);
- $schedule->setTimezone($timezone);
+ $schedule->setTimezone('UTC'); // saved hour is UTC always
$this->custom(API::getInstance(), 'sendReport', $report['idreport'], $schedule);
}
diff --git a/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js b/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js
index ed50d95314..afc2932898 100644
--- a/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js
+++ b/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js
@@ -14,6 +14,15 @@
var self = this;
+ this.reportHours = [];
+ for (var i = 0; i < 24; i++) {
+ if ((timeZoneDifference*2) % 2 != 0) {
+ this.reportHours.push({key: i + '.5', value: i + ':30'});
+ } else {
+ this.reportHours.push({key: i + '', value: i + ''});
+ }
+ }
+
function scrollToTop()
{
piwikHelper.lazyScrollTo(".emailReports", 200);
@@ -33,6 +42,15 @@
}
}
+ function adjustHourToTimezone(hour, difference) {
+ return '' + ((24 + parseFloat(hour) + difference) % 24);
+ }
+
+ function updateReportHourUtc (report) {
+ var reportHour = adjustHourToTimezone(report.hour, -timeZoneDifference);
+ report.hourUtc = _pk_translate('ScheduledReports_ReportHourWithUTC', [reportHour]);
+ }
+
function formSetEditReport(idReport) {
var report = {
'type': ReportPlugin.defaultReportType,
@@ -52,6 +70,9 @@
resetParameters(report.type, report);
}
+ report.hour = adjustHourToTimezone(report.hour, timeZoneDifference);
+ updateReportHourUtc(report);
+
$('[name=reportsList] input').prop('checked', false);
var key;
@@ -97,6 +118,10 @@
piwikHelper.refreshAfter(2);
}
+ this.updateReportHourUtc = function () {
+ updateReportHourUtc(this.report);
+ };
+
// Click Add/Update Submit
this.submitReport = function () {
var idReport = this.editingReportId;
@@ -108,7 +133,7 @@
apiParameters.reportFormat = this.report['format' + this.report.type];
var period = self.report.period;
- var hour = self.report.hour;
+ var hour = adjustHourToTimezone(this.report.hour, timeZoneDifference);
var reports = [];
$('[name=reportsList].' + apiParameters.reportType + ' input:checked').each(function () {
diff --git a/plugins/ScheduledReports/lang/cs.json b/plugins/ScheduledReports/lang/cs.json
index 1eea0758c1..cb0eaca715 100644
--- a/plugins/ScheduledReports/lang/cs.json
+++ b/plugins/ScheduledReports/lang/cs.json
@@ -29,6 +29,7 @@
"PluginDescription": "Vytvořte vlastní e-mailová hlášení a naplánujte jejich zaslání denně, týdně nebo měsíčně jednomu nebo více lidem. Je podporováno několik formátů (HTML, PDF, CSV, obrázky).",
"ReportFormat": "Formát hlášení",
"ReportHour": "Odeslat hlášení v %s hodin",
+ "ReportHourWithUTC": "Odeslat hlášení v %1$s hodin (%2$s hodin UTC)",
"ReportIncludeNWebsites": "Hlášení bude obsahovat hlavní měření pro všechny weby, které mají aspoň jednu návštěvu (z %s aktuálně dostupných webů).",
"ReportSent": "Hlášení posláno",
"ReportsIncluded": "Zahrnuté statistiky",
diff --git a/plugins/ScheduledReports/lang/el.json b/plugins/ScheduledReports/lang/el.json
index 5c5ea4b5ec..10f56acac4 100644
--- a/plugins/ScheduledReports/lang/el.json
+++ b/plugins/ScheduledReports/lang/el.json
@@ -29,6 +29,7 @@
"PluginDescription": "Δημιουργεί προσαρμοσμένες αναφορές και τις προγραμματίζει για καθημερινή, εβδομαδιαία ή μηνιαία αναφορά σε ένα ή περισσότερα άτομα. Υποστηρίζονται αρκετοί τύποι αναφορών (html, pdf, csv, εικόνες).",
"ReportFormat": "Μορφή Αναφοράς",
"ReportHour": "Αποστολή αναφοράς στις %s",
+ "ReportHourWithUTC": "Αποστολή αναφοράς στις %1$s (%2$s ώρα UTC)",
"ReportIncludeNWebsites": "Η αναφορά θα περιλαμβάνει βασικές μετρήσεις για όλες τις ιστοσελίδες που έχουν τουλάχιστον μια επισκεψη (από τις συνολικά %s διαθέσιμες ιστοσελίδες).",
"ReportSent": "Η αναφορά στάλθηκε.",
"ReportsIncluded": "Συμπερίληψη στατιστικών",
diff --git a/plugins/ScheduledReports/lang/en.json b/plugins/ScheduledReports/lang/en.json
index 3b53fb3987..f97c481202 100644
--- a/plugins/ScheduledReports/lang/en.json
+++ b/plugins/ScheduledReports/lang/en.json
@@ -29,6 +29,7 @@
"PluginDescription": "Create custom reports and schedule them to be emailed daily, weekly or monthly to one or several people. Several report formats are supported (html, pdf, csv, images).",
"ReportFormat": "Report Format",
"ReportHour": "Send report at %s o'clock",
+ "ReportHourWithUTC": "%s o'clock UTC",
"ReportIncludeNWebsites": "The report will include main metrics for all websites that have at least one visit (from the %s websites currently available).",
"ReportSent": "Report sent",
"ReportsIncluded": "Statistics included",
diff --git a/plugins/ScheduledReports/lang/es.json b/plugins/ScheduledReports/lang/es.json
index 53b295f107..7e0f117781 100644
--- a/plugins/ScheduledReports/lang/es.json
+++ b/plugins/ScheduledReports/lang/es.json
@@ -29,6 +29,7 @@
"PluginDescription": "Cree informes personalizados y prográmelos para ser enviados por correo electrónico diaria, semanal o mensualmente a uno o varias personas. Algunos formatos de informe están soportados (html, pdf, csv, imágenes).",
"ReportFormat": "Formato del informe",
"ReportHour": "Enviar informe a las %s horas",
+ "ReportHourWithUTC": "Enviar informe a las %1$s en punto (%2$s UTC)",
"ReportIncludeNWebsites": "El informe incluirá las principales métricas para todos los sitios de internet con al menos una visita (de todo %s los sitios de internet disponibles).",
"ReportSent": "Informe enviado",
"ReportsIncluded": "Estadísticas incluidas",
diff --git a/plugins/ScheduledReports/templates/_addReport.twig b/plugins/ScheduledReports/templates/_addReport.twig
index 27cde7ae65..ac7840337a 100644
--- a/plugins/ScheduledReports/templates/_addReport.twig
+++ b/plugins/ScheduledReports/templates/_addReport.twig
@@ -45,11 +45,20 @@
inline-help="#emailScheduleInlineHelp">
</div>
- <div piwik-field uicontrol="text" name="report_hour"
+ <div piwik-field uicontrol="select" name="report_hour"
+ options="manageScheduledReport.reportHours"
+ ng-change="manageScheduledReport.updateReportHourUtc()"
ng-model="manageScheduledReport.report.hour"
+ {% if timeZoneDifference != 0 %}inline-help="#reportHourHelpText"{% endif %}
title="{{ 'ScheduledReports_ReportHour'|translate('X')|e('html_attr') }}">
</div>
+ {% if timeZoneDifference != 0 %}
+ <div id="reportHourHelpText" class="inline-help-node">
+ <span ng-bind="manageScheduledReport.report.hourUtc"></span>
+ </div>
+ {% endif %}
+
<div piwik-field uicontrol="select" name="report_type"
options="{{ reportTypeOptions|json_encode }}"
ng-model="manageScheduledReport.report.type"
diff --git a/plugins/ScheduledReports/templates/index.twig b/plugins/ScheduledReports/templates/index.twig
index 1ba11502e6..2455101a0d 100644
--- a/plugins/ScheduledReports/templates/index.twig
+++ b/plugins/ScheduledReports/templates/index.twig
@@ -31,6 +31,7 @@
</div>
<script type="text/javascript">
+ var timeZoneDifference = {{ timeZoneDifference }};
var ReportPlugin = {};
ReportPlugin.defaultPeriod = '{{ defaultPeriod }}';
ReportPlugin.defaultHour = '{{ defaultHour }}';
diff --git a/plugins/ScheduledReports/tests/Integration/ApiTest.php b/plugins/ScheduledReports/tests/Integration/ApiTest.php
index 5062ae1569..8c3e86ba30 100644
--- a/plugins/ScheduledReports/tests/Integration/ApiTest.php
+++ b/plugins/ScheduledReports/tests/Integration/ApiTest.php
@@ -374,21 +374,22 @@ class ApiTest extends IntegrationTestCase
));
// expected tasks
+ // NOTE: scheduled reports are always saved with UTC, to avoid daylight saving issues
$scheduleTask1 = Schedule::factory('daily');
- $scheduleTask1->setHour(0); // paris is UTC-1, period ends at 23h UTC
- $scheduleTask1->setTimezone('Europe/Paris');
+ $scheduleTask1->setHour(0);
+ $scheduleTask1->setTimezone('UTC');
$scheduleTask2 = new Monthly();
- $scheduleTask2->setHour(0); // site is UTC-6.5, period ends at 6h30 UTC, smallest resolution is hour
- $scheduleTask2->setTimezone('UTC-6.5');
+ $scheduleTask2->setHour(0);
+ $scheduleTask2->setTimezone('UTC');
$scheduleTask3 = new Monthly();
- $scheduleTask3->setHour(8); // paris is UTC-1, configured to be sent at 8h
- $scheduleTask3->setTimezone('Europe/Paris');
+ $scheduleTask3->setHour(8);
+ $scheduleTask3->setTimezone('UTC');
$scheduleTask4 = new Monthly();
- $scheduleTask4->setHour(8); // site is UTC-6.5, configured to be sent at 8h
- $scheduleTask4->setTimezone('UTC-6.5');
+ $scheduleTask4->setHour(8);
+ $scheduleTask4->setTimezone('UTC');
$expectedTasks = array(
new Task(APIScheduledReports::getInstance(), 'sendReport', 1, $scheduleTask1),
diff --git a/plugins/SitesManager/lang/es.json b/plugins/SitesManager/lang/es.json
index 434f0d5815..703e87b049 100644
--- a/plugins/SitesManager/lang/es.json
+++ b/plugins/SitesManager/lang/es.json
@@ -67,12 +67,18 @@
"SiteSearchUse": "Puede utilizar Piwik para rastrear y obtener un informe que es lo que están buscando sus visitantes en el motor de búsqueda interno de su sitio de internet.",
"SiteWithoutDataTitle": "Aun no se han grabado datos",
"SiteWithoutDataDescription": "Aun no se han registrado datos analíticos para este sitio de internet.",
+ "SiteWithoutDataSetupTracking": "Por favor configure el %1$scódigo de rastreo Javascript%2$s en su sitio de internet si ya no lo ha hecho.",
+ "SiteWithoutDataMessageDisappears": "Este mensaje desaparecerá tan pronto como algún dato sea rastreado en este sitio de internet.",
+ "SiteWithoutDataSetupGoals": "Mientras tanto, tal vez le gustaría %1$sestablecer algunas metas%2$s.",
"SuperUserAccessCan": "Un usuario con acceso Super Usuario también puede %1$s especificar la configuración global%2$s para nuevos sitios de internet.",
"Timezone": "Zona Horaria",
"TrackingSiteSearch": "Seguimiento en el Buscador interno del sitio",
"TrackingTags": "Código de seguimiento para %s",
"Urls": "URLs",
"UTCTimeIs": "La hora UTC es %s.",
+ "OnlyMatchedUrlsAllowed": "Solo rastrear visitas y acciones cuando la acción URL comienza con una de las siguientes URLs.",
+ "OnlyMatchedUrlsAllowedHelp": "Cuando es habilitado, Piwik solo rastreará acciones internas cuando la URL de la página es una URL conocida del sitio. Esto evita que la gente genere datos basura en sus analíticas con direcciones URL de otros sitios.",
+ "OnlyMatchedUrlsAllowedHelpExamples": "El dominio y el camino tiene que ser una coincidencia total y cada subdominio válido tiene que especificarse por separado. Por ejemplo, cuando las URLs conocidas son 'http:\/\/example.com\/path' y 'http:\/\/good.example.com', las peticiones de rastreo para 'http:\/\/example.com\/otherpath' o 'http:\/\/bad.example.com' son ignoradas.",
"WebsitesManagement": "Administración de sitios de internet",
"XManagement": "Administrar %s",
"ChooseMeasurableTypeHeadline": "Qué le gustaría medir?",
diff --git a/plugins/Transitions/lang/tr.json b/plugins/Transitions/lang/tr.json
index cd5fed6a05..4a82e65986 100644
--- a/plugins/Transitions/lang/tr.json
+++ b/plugins/Transitions/lang/tr.json
@@ -1,28 +1,28 @@
{
"Transitions": {
- "BouncesInline": "%s sıçramalar",
- "DirectEntries": "Direk Girişler",
- "ErrorBack": "Bir önceki işleme dön",
- "ExitsInline": "%s çıkışlar",
+ "BouncesInline": "%s hemen çıkma",
+ "DirectEntries": "Doğrudan Girişler",
+ "ErrorBack": "Önceki işleme dön",
+ "ExitsInline": "%s çıkış",
"FromCampaigns": "Kampanyalardan Geçişler",
- "FromPreviousPages": "İç sayfalardan",
+ "FromPreviousPages": "İç Sayfalardan",
"FromPreviousPagesInline": "%s iç sayfalardan",
- "FromPreviousSiteSearches": "İnternet Aramalarından",
- "FromPreviousSiteSearchesInline": "%s internet aramalarından",
+ "FromPreviousSiteSearches": "İç Aramalardan",
+ "FromPreviousSiteSearchesInline": "%s iç aramalardan",
"FromSearchEngines": "Arama Motorlarından",
- "FromWebsites": "Websitelerden",
- "IncomingTraffic": "Gelen trafik",
- "LoopsInline": "%s sayfa yüklemeleri",
- "NoDataForAction": "%s için veri yok",
- "NoDataForActionDetails": "%s süresi boyunca hiç sayfa görüntülenmemiş ve aksiyon alınmamıştır veya o hatalıdır.",
- "OutgoingTraffic": "Giden trafik",
- "PluginDescription": "Yeni iconu ile ulaşılan Aksiyon raporları sayfasında yeni geçişler raporunun içindeki her sayfaya ait URL'yi önceki ve takip eden aksiyonları için raporlar.",
- "ShareOfAllPageviews": "Bu sayfa %1$s sayfa görünütülemesine sahiptir ( %2$s tüm sayfa görüntülemesi).",
+ "FromWebsites": "Web Sitelerinden",
+ "IncomingTraffic": "Gelen Trafik",
+ "LoopsInline": "%s sayfa yüklemesi",
+ "NoDataForAction": "%s için herhangi bir veri yok",
+ "NoDataForActionDetails": "%s süresi boyunca işlem için hiç bir sayfa görüntülenmemiş ya da geçersiz.",
+ "OutgoingTraffic": "Giden Trafik",
+ "PluginDescription": "İşlem raporları bölümündeki yeni simgesi ile erişilebilen yeni geçiş raporundaki her sayfanın İnternet adresi için önceki ve sonraki işlemleri görüntüler.",
+ "ShareOfAllPageviews": "Bu sayfa %1$s kez görüntülenmiş (toplam sayfa görüntülemelerinden %2$s).",
"ToFollowingPages": "İç Sayfalara",
- "ToFollowingPagesInline": "%s İç Sayfalara",
+ "ToFollowingPagesInline": "%s iç sayfalara",
"ToFollowingSiteSearches": "İç Aramalar",
- "ToFollowingSiteSearchesInline": "%s İç Aramalar",
- "XOfAllPageviews": "Bu sayfadaki tüm görüntülenmelerin %s'i",
- "XOutOfYVisits": "%1$s (%2$s'nin dışında)"
+ "ToFollowingSiteSearchesInline": "%s iç arama",
+ "XOfAllPageviews": "Bu sayfanın tüm görüntülenmelerinden %s",
+ "XOutOfYVisits": "%1$s (toplam %2$s)"
}
} \ No newline at end of file
diff --git a/plugins/UserId/lang/es.json b/plugins/UserId/lang/es.json
index 98b725a25a..904563e8a4 100644
--- a/plugins/UserId/lang/es.json
+++ b/plugins/UserId/lang/es.json
@@ -1,5 +1,7 @@
{
"UserId": {
- "UserReportTitle": "Usuarios"
+ "UserId": "UserId",
+ "UserReportTitle": "Usuarios",
+ "PluginDescription": "Muestra reportes de usuario"
}
} \ No newline at end of file
diff --git a/plugins/UsersManager/lang/es.json b/plugins/UsersManager/lang/es.json
index fb5557dfb7..57277f127b 100644
--- a/plugins/UsersManager/lang/es.json
+++ b/plugins/UsersManager/lang/es.json
@@ -13,6 +13,7 @@
"ClickHereToSetTheCookieOnDomain": "Haga clic aquí para configurar la cookie que excluirá sus visitas a los sitios de internet a los que Piwik realiza seguimiento en %s",
"ConfirmGrantSuperUserAccess": "¿Estás seguro que desea conceder acceso 'Super User' a '%s'? Atención: el usuario tendrá acceso a todos los sitios de internet y podrá realizar tareas administrativas.",
"ConfirmProhibitMySuperUserAccess": "¿%s, está seguro que desea eliminar su acceso Super Usuario? Perderá todos los permisos y accesos a todos los sitios de internet y será desconectado de Piwik.",
+ "ConfirmProhibitOtherUsersSuperUserAccess": "¿Está seguro que desea quitar el acceso Super Usuario de '%s'? Este perderá todos los permisos y accesos a todos los sitios. Asegúrese de dar acceso a los sitios necesarios después si es necesario.",
"DeleteConfirm": "¿Está seguro que desea eliminar al usuario %s?",
"Email": "Correo electrónico",
"EmailYourAdministrator": "%1$sEnviar un correo electrónico a su administrador acerca de este problema%2$s.",
@@ -37,9 +38,12 @@
"ExcludeVisitsViaCookie": "Excluir sus visitas usando una cookie",
"ForAnonymousUsersReportDateToLoadByDefault": "Para los usuarios anónimos, fecha del informe a cargar por defecto",
"GiveViewAccess": "Otorgar acceso a la visualización",
+ "GiveViewAccessTitle": "Otorgar a un actual usuario acceso a ver los informes de %s",
+ "GiveViewAccessInstructions": "Para otorgar atributos de visualización a actuales usuarios de %s suministre o el nombre de usuario o su correo electrónico",
"IfYouWouldLikeToChangeThePasswordTypeANewOne": "Si desea cambiar la contraseña ingrese una nueva. Si no, déjelo vacío.",
"InjectedHostCannotChangePwd": "Está actualmente visitando con un medio desconocido (%1$s). No puede cambiar su contraseña hasta que el problema esté soluionado.",
"LastSeen": "Última visita",
+ "MainDescription": "Decida qué usuarios poseen acceso a sus sitios de internet. También puede otorgarles acceso a todos los sitios de una vez simplemente eligiendo la opción \"Usar en todos los sitios\" en el selector de los mismos.",
"ManageAccess": "Administrar el acceso",
"MenuAnonymousUserSettings": "Configuración de usuario anónimo",
"MenuUsers": "Usuarios",
@@ -48,6 +52,7 @@
"PersonalSettings": "Ajustes personales",
"NoteNoAnonymousUserAccessSettingsWontBeUsed2": "Nota: No puede modificar la configuración en esta sección, debido a que no posee ningún sitio de internet que pueda ser contactado por un usuario anónimo.",
"NoUsersExist": "Todavía no hay usuarios.",
+ "PluginDescription": "La Gestión de Usuarios le permite agregar nuevos usuarios, editar los actuales y otorgarles acceso a observar o administrar sitios de internet.",
"PrivAdmin": "Administrador",
"PrivNone": "Sin acceso",
"PrivView": "Ver",
diff --git a/plugins/VisitFrequency/lang/tr.json b/plugins/VisitFrequency/lang/tr.json
new file mode 100644
index 0000000000..45b4c613f9
--- /dev/null
+++ b/plugins/VisitFrequency/lang/tr.json
@@ -0,0 +1,26 @@
+{
+ "VisitFrequency": {
+ "ColumnActionsByReturningVisits": "Geri Gelen Ziyaretlere Göre Eylemler",
+ "ColumnAverageVisitDurationForReturningVisitors": "Ortalama Geri Gelen Ziyaret Süresi (saniye)",
+ "ColumnAvgActionsPerReturningVisit": "Geri Gelen Ziyaretlerin Ortalama Eylemleri",
+ "ColumnBounceCountForReturningVisits": "Geri Gelen Ziyaretlerin Sekme Sayısı",
+ "ColumnBounceRateForReturningVisits": "Geri Gelen Ziyaretlerin Sekme Oranı",
+ "ColumnMaxActionsInReturningVisit": "Bir geri gelen ziyaret için en fazla eylem sayısı",
+ "ColumnNbReturningVisitsConverted": "Dönüştürülmüş geri gelen ziyaret sayısı",
+ "ColumnReturningVisits": "Geri Gelen Ziyaretler",
+ "ColumnSumVisitLengthReturning": "Geri gelen ziyaretçilerin harcadığı toplam süre (saniye)",
+ "ColumnUniqueReturningVisitors": "Tekil geri gelen ziyaretçi sayısı",
+ "ColumnReturningUsers": "Geri Gelen Kullanıcılar",
+ "PluginDescription": "İlk kez gelen ziyaretçiler ile geri gelen ziyaretçi ölçeklerini raporlar.",
+ "ReturnActions": "Geri gelen ziyaretlerin eylemleri %s",
+ "ReturnAverageVisitDuration": "Geri gelen ziyaretçilerin ortalama ziyaret süresi %s",
+ "ReturnAvgActions": "Her geri gelen ziyaret için %s eylem",
+ "ReturnBounceRate": "%s geri gelen ziyaret sekti (bir sayfadan sonra siteyi terk etti)",
+ "ReturningVisitDocumentation": "Geri gelen ziyaret (yeni ziyaretten farklı olarak) daha önce siteyi en az bir kez ziyaret etmiş birisi tarafından yapılır.",
+ "ReturningVisitsDocumentation": "Geri gelen ziyaretlerin özeti.",
+ "ReturnVisits": "%s geri gelen ziyaret",
+ "SubmenuFrequency": "Sıklık",
+ "WidgetGraphReturning": "Zamana Göre Geri Gelen Ziyaretler",
+ "WidgetOverview": "Sıklık Özeti"
+ }
+} \ No newline at end of file
diff --git a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php
index cd2a714ab2..fc3f12d979 100644
--- a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php
+++ b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php
@@ -49,6 +49,11 @@ class TwoVisitsWithCustomEvents extends Fixture
$uselocal = false;
$vis = self::getTracker($this->idSite, $this->dateTime, $useDefault = true, $uselocal);
+ // $vis will start with a pageview, while $vis2 will directly start with the event
+ $vis->setUrl('http://example.org/webradio');
+ $vis->setGenerationTime(333);
+ self::checkResponse($vis->doTrackPageView('Welcome!'));
+
$this->trackMusicPlaying($vis);
$this->trackMusicRatings($vis);
$this->trackEventWithoutUrl($vis);
@@ -81,10 +86,6 @@ class TwoVisitsWithCustomEvents extends Fixture
protected function trackMusicPlaying(PiwikTracker $vis)
{
- $vis->setUrl('http://example.org/webradio');
- $vis->setGenerationTime(333);
- self::checkResponse($vis->doTrackPageView('Welcome!'));
-
$this->moveTimeForward($vis, 1);
$this->setMusicEventCustomVar($vis);
self::checkResponse($vis->doTrackEvent('Music', 'play', 'La fiancée de l\'eau'));
diff --git a/tests/PHPUnit/Framework/Mock/Tracker/RequestAuthenticated.php b/tests/PHPUnit/Framework/Mock/Tracker/RequestAuthenticated.php
new file mode 100644
index 0000000000..0b3c0a3555
--- /dev/null
+++ b/tests/PHPUnit/Framework/Mock/Tracker/RequestAuthenticated.php
@@ -0,0 +1,10 @@
+<?php
+namespace Piwik\Tests\Framework\Mock\Tracker;
+
+use Piwik\Tracker\Request;
+
+class RequestAuthenticated extends Request
+{
+ protected $isAuthenticated = true;
+
+} \ No newline at end of file
diff --git a/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php b/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php
index 06f4bb5916..c8bce62d51 100644
--- a/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php
+++ b/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php
@@ -152,6 +152,41 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase
$this->assertEquals($expected, $jsTag);
}
+ /**
+ * Tests the generated JS code with options before tracker url
+ */
+ public function testJavascriptTrackingCode_loadSync()
+ {
+ $generator = new TrackerCodeGenerator();
+
+ Piwik::addAction('Piwik.getJavascriptCode', function (&$codeImpl) {
+ $codeImpl['loadAsync'] = false;
+ });
+
+ $jsTag = $generator->generate($idSite = 1, $piwikUrl = 'http://localhost/piwik',
+ $mergeSubdomains = true, $groupPageTitlesByDomain = true, $mergeAliasUrls = true);
+
+ $expected = "&lt;!-- Piwik --&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+ var _paq = _paq || [];
+ _paq.push([\"setDocumentTitle\", document.domain + \"/\" + document.title]);
+ _paq.push(['trackPageView']);
+ _paq.push(['enableLinkTracking']);
+ (function() {
+ var u=&quot;//localhost/piwik/&quot;;
+ _paq.push(['setTrackerUrl', u+'piwik.php']);
+ _paq.push(['setSiteId', '1']);
+
+ })();
+&lt;/script&gt;
+&lt;script type='text/javascript' src=&quot;//localhost/piwik/piwik.js&quot;&gt;
+&lt;noscript&gt;&lt;p&gt;&lt;img src=&quot;//localhost/piwik/piwik.php?idsite=1&quot; style=&quot;border:0;&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;/noscript&gt;
+&lt;!-- End Piwik Code --&gt;
+";
+
+ $this->assertEquals($expected, $jsTag);
+ }
+
public function testStringsAreEscaped()
{
$generator = new TrackerCodeGenerator();
diff --git a/tests/PHPUnit/Integration/Tracker/VisitTest.php b/tests/PHPUnit/Integration/Tracker/VisitTest.php
index 92baae429e..d78e65ceda 100644
--- a/tests/PHPUnit/Integration/Tracker/VisitTest.php
+++ b/tests/PHPUnit/Integration/Tracker/VisitTest.php
@@ -16,6 +16,7 @@ use Piwik\Plugin\Manager;
use Piwik\Plugins\SitesManager\API;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\Mock\FakeAccess;
+use Piwik\Tests\Framework\Mock\Tracker\RequestAuthenticated;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visit;
use Piwik\Tracker\VisitExcluded;
@@ -91,14 +92,14 @@ class VisitTest extends IntegrationTestCase
$idsite = API::getInstance()->addSite("name", "http://piwik.net/", $ecommerce = 0,
$siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, $excludedIp);
- $request = new Request(array('idsite' => $idsite));
+ $request = new RequestAuthenticated(array('idsite' => $idsite));
// test that IPs within the range, or the given IP, are excluded
foreach ($tests as $ip => $expected) {
- $testIpIsExcluded = IPUtils::stringToBinaryIP($ip);
+ $request->setParam('cip', $ip);
- $excluded = new VisitExcluded_public($request, $testIpIsExcluded);
- $this->assertSame($expected, $excluded->public_isVisitorIpExcluded($testIpIsExcluded));
+ $excluded = new VisitExcluded_public($request);
+ $this->assertSame($expected, $excluded->public_isVisitorIpExcluded($ip));
}
}
@@ -179,13 +180,12 @@ class VisitTest extends IntegrationTestCase
$idsite = API::getInstance()->addSite("name", "http://piwik.net/", $ecommerce = 0,
$siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null);
- $request = new Request(array('idsite' => $idsite));
- $testIpIsExcluded = IPUtils::stringToBinaryIP($ip);
+ $request = new RequestAuthenticated(array('idsite' => $idsite, 'cip' => $ip));
$_SERVER['HTTP_VIA'] = '1.1 Chrome-Compression-Proxy';
- $excluded = new VisitExcluded_public($request, $testIpIsExcluded);
- $isBot = $excluded->public_isNonHumanBot($testIpIsExcluded);
+ $excluded = new VisitExcluded_public($request);
+ $isBot = $excluded->public_isNonHumanBot();
unset($_SERVER['HTTP_VIA']);
$this->assertSame($isNonHumanBot, $isBot);
}
@@ -242,7 +242,8 @@ class VisitTest extends IntegrationTestCase
// test that user agents that contain excluded user agent strings are excluded
foreach ($tests as $ua => $expected) {
- $excluded = new VisitExcluded_public($request, $ip = false, $ua);
+ $request->setParam('ua', $ua);
+ $excluded = new VisitExcluded_public($request);
$this->assertSame($expected, $excluded->public_isUserAgentExcluded(), "Result if isUserAgentExcluded('$ua') was not " . ($expected ? 'true' : 'false') . ".");
}
@@ -309,10 +310,11 @@ class VisitTest extends IntegrationTestCase
);
$idsite = API::getInstance()->addSite("name", "http://piwik.net/");
- $request = new Request(array('idsite' => $idsite, 'bots' => 0));
+ $request = new RequestAuthenticated(array('idsite' => $idsite, 'bots' => 0));
foreach ($isIpBot as $ip => $isBot) {
- $excluded = new VisitExcluded_public($request, IPUtils::stringToBinaryIP($ip));
+ $request->setParam('cip', $ip);
+ $excluded = new VisitExcluded_public($request);
$this->assertSame($isBot, $excluded->public_isNonHumanBot(), $ip);
}
diff --git a/tests/PHPUnit/Integration/UpdaterTest.php b/tests/PHPUnit/Integration/UpdaterTest.php
index aeee654848..a4bec9f93c 100644
--- a/tests/PHPUnit/Integration/UpdaterTest.php
+++ b/tests/PHPUnit/Integration/UpdaterTest.php
@@ -18,6 +18,21 @@ use Piwik\Tests\Framework\Fixture;
*/
class UpdaterTest extends IntegrationTestCase
{
+ public function test_doUpdate_reportsAnError_whenMissingFilePermissionException()
+ {
+ $updater = new Updater($pathToCoreUpdates = null, PIWIK_INCLUDE_PATH . '/tests/resources/Updater/%s/');
+ $updater->markComponentSuccessfullyUpdated('testpluginUpdates', '0.4');
+ $componentsWithUpdateFile = $updater->getComponentsWithUpdateFile(array('testpluginUpdates' => '0.5'));
+
+ $this->assertEquals(1, count($componentsWithUpdateFile));
+
+ $result = $updater->updateComponents($componentsWithUpdateFile);
+
+ $this->assertTrue( count ($result['errors']) > 0, 'when an update fails because config file is not writable, we expect the updater to report a critical error');
+ $this->assertEquals( 'make sure this exception is thrown', $result['errors'][0]);
+ }
+
+
public function testUpdaterChecksCoreVersionAndDetectsUpdateFile()
{
$updater = new Updater(PIWIK_INCLUDE_PATH . '/tests/resources/Updater/core/');
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_day.xml
index 445b742211..7aceeda4db 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_day.xml
@@ -9,6 +9,11 @@
<nb_hits_with_time_generation>2</nb_hits_with_time_generation>
<min_time_generation>0.666</min_time_generation>
<max_time_generation>0.666</max_time_generation>
+ <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors>
+ <entry_nb_visits>1</entry_nb_visits>
+ <entry_nb_actions>14</entry_nb_actions>
+ <entry_sum_visit_length>3541</entry_sum_visit_length>
+ <entry_bounce_count>0</entry_bounce_count>
<exit_nb_uniq_visitors>2</exit_nb_uniq_visitors>
<exit_nb_visits>2</exit_nb_visits>
<avg_time_on_page>0</avg_time_on_page>
@@ -20,17 +25,17 @@
</row>
<row>
<label>/webradio</label>
- <nb_visits>2</nb_visits>
- <nb_uniq_visitors>2</nb_uniq_visitors>
- <nb_hits>2</nb_hits>
- <sum_time_spent>2998</sum_time_spent>
- <nb_hits_with_time_generation>2</nb_hits_with_time_generation>
+ <nb_visits>1</nb_visits>
+ <nb_uniq_visitors>1</nb_uniq_visitors>
+ <nb_hits>1</nb_hits>
+ <sum_time_spent>1499</sum_time_spent>
+ <nb_hits_with_time_generation>1</nb_hits_with_time_generation>
<min_time_generation>0.333</min_time_generation>
<max_time_generation>0.333</max_time_generation>
- <entry_nb_uniq_visitors>2</entry_nb_uniq_visitors>
- <entry_nb_visits>2</entry_nb_visits>
- <entry_nb_actions>31</entry_nb_actions>
- <entry_sum_visit_length>7202</entry_sum_visit_length>
+ <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors>
+ <entry_nb_visits>1</entry_nb_visits>
+ <entry_nb_actions>16</entry_nb_actions>
+ <entry_sum_visit_length>3601</entry_sum_visit_length>
<entry_bounce_count>0</entry_bounce_count>
<avg_time_on_page>1499</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_month.xml
index 0b56a1fbd5..79b9cb81e5 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_month.xml
@@ -8,8 +8,13 @@
<nb_hits_with_time_generation>2</nb_hits_with_time_generation>
<min_time_generation>0.666</min_time_generation>
<max_time_generation>0.666</max_time_generation>
+ <entry_nb_visits>1</entry_nb_visits>
+ <entry_nb_actions>14</entry_nb_actions>
+ <entry_sum_visit_length>3541</entry_sum_visit_length>
+ <entry_bounce_count>0</entry_bounce_count>
<exit_nb_visits>2</exit_nb_visits>
<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
+ <sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
<avg_time_on_page>0</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
@@ -20,18 +25,18 @@
</row>
<row>
<label>/webradio</label>
- <nb_visits>2</nb_visits>
- <nb_hits>2</nb_hits>
- <sum_time_spent>2998</sum_time_spent>
- <nb_hits_with_time_generation>2</nb_hits_with_time_generation>
+ <nb_visits>1</nb_visits>
+ <nb_hits>1</nb_hits>
+ <sum_time_spent>1499</sum_time_spent>
+ <nb_hits_with_time_generation>1</nb_hits_with_time_generation>
<min_time_generation>0.333</min_time_generation>
<max_time_generation>0.333</max_time_generation>
- <entry_nb_visits>2</entry_nb_visits>
- <entry_nb_actions>31</entry_nb_actions>
- <entry_sum_visit_length>7202</entry_sum_visit_length>
+ <entry_nb_visits>1</entry_nb_visits>
+ <entry_nb_actions>16</entry_nb_actions>
+ <entry_sum_visit_length>3601</entry_sum_visit_length>
<entry_bounce_count>0</entry_bounce_count>
- <sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
- <sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors>
+ <sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+ <sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
<avg_time_on_page>1499</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_day.xml
index 65ae232e68..f7a5fb831c 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_day.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
- <nb_pageviews>4</nb_pageviews>
- <nb_uniq_pageviews>4</nb_uniq_pageviews>
+ <nb_pageviews>3</nb_pageviews>
+ <nb_uniq_pageviews>3</nb_uniq_pageviews>
<nb_downloads>0</nb_downloads>
<nb_uniq_downloads>0</nb_uniq_downloads>
<nb_outlinks>0</nb_outlinks>
<nb_uniq_outlinks>0</nb_uniq_outlinks>
<nb_searches>0</nb_searches>
<nb_keywords>0</nb_keywords>
- <avg_time_generation>0.5</avg_time_generation>
+ <avg_time_generation>0.557</avg_time_generation>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_month.xml
index 65ae232e68..f7a5fb831c 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_month.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
- <nb_pageviews>4</nb_pageviews>
- <nb_uniq_pageviews>4</nb_uniq_pageviews>
+ <nb_pageviews>3</nb_pageviews>
+ <nb_uniq_pageviews>3</nb_uniq_pageviews>
<nb_downloads>0</nb_downloads>
<nb_uniq_downloads>0</nb_uniq_downloads>
<nb_outlinks>0</nb_outlinks>
<nb_uniq_outlinks>0</nb_uniq_outlinks>
<nb_searches>0</nb_searches>
<nb_keywords>0</nb_keywords>
- <avg_time_generation>0.5</avg_time_generation>
+ <avg_time_generation>0.557</avg_time_generation>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
index 572b560a01..3c677f06fd 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
@@ -883,7 +883,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>46</pageId>
+ <pageId>45</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Purchase</eventAction>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -984,7 +984,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>45</pageId>
+ <pageId>44</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1085,7 +1085,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>41</pageId>
+ <pageId>40</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play50%</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1099,7 +1099,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>42</pageId>
+ <pageId>41</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play75%</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1113,7 +1113,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>44</pageId>
+ <pageId>43</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
<eventName>Search query here</eventName>
@@ -1127,7 +1127,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>47</pageId>
+ <pageId>46</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playEnd</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1141,7 +1141,7 @@
<url />
<pageIdAction />
- <pageId>48</pageId>
+ <pageId>47</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>rating</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1156,7 +1156,7 @@
<url>http://example.org/finishedMovie</url>
<pageIdAction>27</pageIdAction>
- <pageId>49</pageId>
+ <pageId>48</pageId>
<eventCategory>event category Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventCategory>
<eventAction>event action Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventAction>
<eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventName>
@@ -1259,7 +1259,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>43</pageId>
+ <pageId>42</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1356,35 +1356,11 @@
<actionDetails>
<row>
- <type>action</type>
- <url>http://example.org/webradio</url>
- <pageTitle>Welcome!</pageTitle>
- <pageIdAction>2</pageIdAction>
-
- <pageId>26</pageId>
- <generationTime>0.33s</generationTime>
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon />
-
- </row>
- <row>
- <type>goal</type>
- <goalName>triggered js</goalName>
- <goalId>1</goalId>
- <revenue>0</revenue>
- <goalPageId>26</goalPageId>
-
- <url>http://example.org/webradio</url>
- <icon>plugins/Morpheus/images/goal.png</icon>
-
- </row>
- <row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>27</pageId>
+ <pageId>26</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play</eventAction>
<customVariables>
@@ -1401,10 +1377,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>28</pageId>
+ <pageId>27</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play25%</eventAction>
<customVariables>
@@ -1421,10 +1397,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>29</pageId>
+ <pageId>28</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play50%</eventAction>
<customVariables>
@@ -1441,10 +1417,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>30</pageId>
+ <pageId>29</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play75%</eventAction>
<customVariables>
@@ -1461,10 +1437,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>31</pageId>
+ <pageId>30</pageId>
<eventCategory>Music</eventCategory>
<eventAction>playEnd</eventAction>
<customVariables>
@@ -1481,10 +1457,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>32</pageId>
+ <pageId>31</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
<customVariables>
@@ -1502,10 +1478,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>33</pageId>
+ <pageId>32</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
<customVariables>
@@ -1527,7 +1503,7 @@
<pageTitle>Movie Theater</pageTitle>
<pageIdAction>15</pageIdAction>
- <pageId>34</pageId>
+ <pageId>33</pageId>
<generationTime>0.67s</generationTime>
<timeSpent>60</timeSpent>
<timeSpentPretty>1 min 0s</timeSpentPretty>
@@ -1539,7 +1515,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>35</pageId>
+ <pageId>34</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<eventName>Princess Mononoke (もののけ姫)</eventName>
@@ -1553,7 +1529,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>36</pageId>
+ <pageId>35</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<eventName>Ponyo (崖の上のポニョ)</eventName>
@@ -1567,7 +1543,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>37</pageId>
+ <pageId>36</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1581,7 +1557,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>38</pageId>
+ <pageId>37</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>clickBuyNow</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1595,7 +1571,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>39</pageId>
+ <pageId>38</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playStart</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1609,7 +1585,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>40</pageId>
+ <pageId>39</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play25%</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1617,7 +1593,7 @@
</row>
</actionDetails>
- <goalConversions>1</goalConversions>
+ <goalConversions>0</goalConversions>
<siteCurrency>USD</siteCurrency>
<siteCurrencySymbol>$</siteCurrencySymbol>
@@ -1627,18 +1603,18 @@
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
- <visitConverted>1</visitConverted>
- <visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
+ <visitConverted>0</visitConverted>
+ <visitConvertedIcon />
<visitCount>1</visitCount>
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
- <visitDuration>3601</visitDuration>
- <visitDurationPretty>1 hours 0 min</visitDurationPretty>
+ <visitDuration>3541</visitDuration>
+ <visitDurationPretty>59 min 1s</visitDurationPretty>
<searches>0</searches>
- <actions>15</actions>
+ <actions>14</actions>
<referrerType>direct</referrerType>
<referrerTypeName>Direct Entry</referrerTypeName>
<referrerName />
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
index 572b560a01..3c677f06fd 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
@@ -883,7 +883,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>46</pageId>
+ <pageId>45</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Purchase</eventAction>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -984,7 +984,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>45</pageId>
+ <pageId>44</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1085,7 +1085,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>41</pageId>
+ <pageId>40</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play50%</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1099,7 +1099,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>42</pageId>
+ <pageId>41</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play75%</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1113,7 +1113,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>44</pageId>
+ <pageId>43</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
<eventName>Search query here</eventName>
@@ -1127,7 +1127,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>47</pageId>
+ <pageId>46</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playEnd</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1141,7 +1141,7 @@
<url />
<pageIdAction />
- <pageId>48</pageId>
+ <pageId>47</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>rating</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1156,7 +1156,7 @@
<url>http://example.org/finishedMovie</url>
<pageIdAction>27</pageIdAction>
- <pageId>49</pageId>
+ <pageId>48</pageId>
<eventCategory>event category Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventCategory>
<eventAction>event action Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventAction>
<eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventName>
@@ -1259,7 +1259,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>43</pageId>
+ <pageId>42</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1356,35 +1356,11 @@
<actionDetails>
<row>
- <type>action</type>
- <url>http://example.org/webradio</url>
- <pageTitle>Welcome!</pageTitle>
- <pageIdAction>2</pageIdAction>
-
- <pageId>26</pageId>
- <generationTime>0.33s</generationTime>
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon />
-
- </row>
- <row>
- <type>goal</type>
- <goalName>triggered js</goalName>
- <goalId>1</goalId>
- <revenue>0</revenue>
- <goalPageId>26</goalPageId>
-
- <url>http://example.org/webradio</url>
- <icon>plugins/Morpheus/images/goal.png</icon>
-
- </row>
- <row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>27</pageId>
+ <pageId>26</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play</eventAction>
<customVariables>
@@ -1401,10 +1377,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>28</pageId>
+ <pageId>27</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play25%</eventAction>
<customVariables>
@@ -1421,10 +1397,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>29</pageId>
+ <pageId>28</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play50%</eventAction>
<customVariables>
@@ -1441,10 +1417,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>30</pageId>
+ <pageId>29</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play75%</eventAction>
<customVariables>
@@ -1461,10 +1437,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>31</pageId>
+ <pageId>30</pageId>
<eventCategory>Music</eventCategory>
<eventAction>playEnd</eventAction>
<customVariables>
@@ -1481,10 +1457,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>32</pageId>
+ <pageId>31</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
<customVariables>
@@ -1502,10 +1478,10 @@
</row>
<row>
<type>event</type>
- <url>http://example.org/webradio</url>
- <pageIdAction>3</pageIdAction>
+ <url>http://example.com/piwik/</url>
+ <pageIdAction>31</pageIdAction>
- <pageId>33</pageId>
+ <pageId>32</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
<customVariables>
@@ -1527,7 +1503,7 @@
<pageTitle>Movie Theater</pageTitle>
<pageIdAction>15</pageIdAction>
- <pageId>34</pageId>
+ <pageId>33</pageId>
<generationTime>0.67s</generationTime>
<timeSpent>60</timeSpent>
<timeSpentPretty>1 min 0s</timeSpentPretty>
@@ -1539,7 +1515,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>35</pageId>
+ <pageId>34</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<eventName>Princess Mononoke (もののけ姫)</eventName>
@@ -1553,7 +1529,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>36</pageId>
+ <pageId>35</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<eventName>Ponyo (崖の上のポニョ)</eventName>
@@ -1567,7 +1543,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>37</pageId>
+ <pageId>36</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1581,7 +1557,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>38</pageId>
+ <pageId>37</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>clickBuyNow</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1595,7 +1571,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>39</pageId>
+ <pageId>38</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playStart</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1609,7 +1585,7 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
- <pageId>40</pageId>
+ <pageId>39</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play25%</eventAction>
<eventName>Spirited Away (千と千尋の神隠し)</eventName>
@@ -1617,7 +1593,7 @@
</row>
</actionDetails>
- <goalConversions>1</goalConversions>
+ <goalConversions>0</goalConversions>
<siteCurrency>USD</siteCurrency>
<siteCurrencySymbol>$</siteCurrencySymbol>
@@ -1627,18 +1603,18 @@
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
- <visitConverted>1</visitConverted>
- <visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
+ <visitConverted>0</visitConverted>
+ <visitConvertedIcon />
<visitCount>1</visitCount>
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
- <visitDuration>3601</visitDuration>
- <visitDurationPretty>1 hours 0 min</visitDurationPretty>
+ <visitDuration>3541</visitDuration>
+ <visitDurationPretty>59 min 1s</visitDurationPretty>
<searches>0</searches>
- <actions>15</actions>
+ <actions>14</actions>
<referrerType>direct</referrerType>
<referrerTypeName>Direct Entry</referrerTypeName>
<referrerName />
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
index ad3603d5f9..c228c82177 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
@@ -235,7 +235,7 @@ label,nb_visits,nb_hits,bounce_rate,avg_time_on_page,exit_rate
Entry pages
label,entry_nb_visits,entry_bounce_count,bounce_rate
-/index.htm,3,0,0%
+/index.htm,4,0,0%
Entry page titles
label,entry_nb_visits,entry_bounce_count,bounce_rate
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_row_evolution_graph__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_row_evolution_graph__ScheduledReports.generateReport_week.original.html
index e7bfae0990..9fb22e1d37 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_row_evolution_graph__ScheduledReports.generateReport_week.original.html
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_row_evolution_graph__ScheduledReports.generateReport_week.original.html
@@ -1,17 +1,18 @@
<html>
<head>
<meta charset="utf-8">
+ <meta name="robots" content="noindex,nofollow">
</head>
<body style="font-family: dejavusans; color: rgb(13,13,13);line-height: 1.33;">
-<a id="reportTop" rel="noreferrer" target="_blank" href=""><img title="Go to Piwik" border="0" alt="Piwik" src='plugins/Morpheus/images/logo-header.png'/></a>
+<a id="reportTop" rel="noreferrer" target="_blank" href="http://example.com/piwik/tests/PHPUnit/proxy/"><img title="Go to Piwik" border="0" alt="Piwik" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/images/logo-header.png'/></a>
<h1 style="font-weight:normal; color: rgb(13,13,13); font-size: 24pt;">
Piwik test
</h1>
<p>
- Mail Test report - Date range: Week 4 April - 10 April 2011
+ Mail Test report - Date range: week April 4 – 10, 2011
</p>
@@ -20,7 +21,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"/>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
index f20b1a9b27..d53b33b873 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
@@ -1,17 +1,18 @@
<html>
<head>
<meta charset="utf-8">
+ <meta name="robots" content="noindex,nofollow">
</head>
<body style="font-family: dejavusans; color: rgb(13,13,13);line-height: 1.33;">
-<a id="reportTop" rel="noreferrer" target="_blank" href=""><img title="Go to Piwik" border="0" alt="Piwik" src='plugins/Morpheus/images/logo-header.png'/></a>
+<a id="reportTop" rel="noreferrer" target="_blank" href="http://example.com/piwik/tests/PHPUnit/proxy/"><img title="Go to Piwik" border="0" alt="Piwik" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/images/logo-header.png'/></a>
<h1 style="font-weight:normal; color: rgb(13,13,13); font-size: 24pt;">
Piwik test
</h1>
<p>
- Mail Test report - Date range: Week 4 April - 10 April 2011
+ Mail Test report - Date range: week April 4 – 10, 2011
</p>
@@ -295,6 +296,11 @@
</a>
</li>
<li>
+ <a href="#UserId_getUsers" style="text-decoration:none; color: rgb(13,13,13);">
+ Users
+ </a>
+ </li>
+ <li>
<a href="#CustomVariables_getCustomVariables" style="text-decoration:none; color: rgb(13,13,13);">
Custom Variables
</a>
@@ -325,11 +331,6 @@
</a>
</li>
<li>
- <a href="#Provider_getProvider" style="text-decoration:none; color: rgb(13,13,13);">
- Provider
- </a>
- </li>
- <li>
<a href="#DevicesDetection_getType" style="text-decoration:none; color: rgb(13,13,13);">
Device type
</a>
@@ -340,21 +341,11 @@
</a>
</li>
<li>
- <a href="#DevicesDetection_getBrowsers" style="text-decoration:none; color: rgb(13,13,13);">
- Visitor Browser
- </a>
- </li>
- <li>
<a href="#DevicesDetection_getModel" style="text-decoration:none; color: rgb(13,13,13);">
Device model
</a>
</li>
<li>
- <a href="#DevicesDetection_getBrowserVersions" style="text-decoration:none; color: rgb(13,13,13);">
- Browser version
- </a>
- </li>
- <li>
<a href="#DevicesDetection_getOsFamilies" style="text-decoration:none; color: rgb(13,13,13);">
Operating System families
</a>
@@ -365,6 +356,16 @@
</a>
</li>
<li>
+ <a href="#DevicesDetection_getBrowsers" style="text-decoration:none; color: rgb(13,13,13);">
+ Visitor Browser
+ </a>
+ </li>
+ <li>
+ <a href="#DevicesDetection_getBrowserVersions" style="text-decoration:none; color: rgb(13,13,13);">
+ Browser version
+ </a>
+ </li>
+ <li>
<a href="#DevicesDetection_getBrowserEngines" style="text-decoration:none; color: rgb(13,13,13);">
Browser engines
</a>
@@ -473,7 +474,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -2040,7 +2041,7 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicePlugins/images/plugins/cookie.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicePlugins/images/plugins/cookie.gif'>
&nbsp;
Cookie </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -2053,7 +2054,7 @@
<tr style=";line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicePlugins/images/plugins/flash.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicePlugins/images/plugins/flash.gif'>
&nbsp;
Flash </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -2066,7 +2067,7 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicePlugins/images/plugins/java.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicePlugins/images/plugins/java.gif'>
&nbsp;
Java </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -2079,7 +2080,7 @@
<tr style=";line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicePlugins/images/plugins/director.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicePlugins/images/plugins/director.gif'>
&nbsp;
Director </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -2092,7 +2093,7 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicePlugins/images/plugins/gears.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicePlugins/images/plugins/gears.gif'>
&nbsp;
Gears </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -2105,7 +2106,7 @@
<tr style=";line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicePlugins/images/plugins/pdf.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicePlugins/images/plugins/pdf.gif'>
&nbsp;
Pdf </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -2118,7 +2119,7 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicePlugins/images/plugins/quicktime.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicePlugins/images/plugins/quicktime.gif'>
&nbsp;
Quicktime </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -2131,7 +2132,7 @@
<tr style=";line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicePlugins/images/plugins/realplayer.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicePlugins/images/plugins/realplayer.gif'>
&nbsp;
Realplayer </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -2144,7 +2145,7 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicePlugins/images/plugins/silverlight.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicePlugins/images/plugins/silverlight.gif'>
&nbsp;
Silverlight </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -2157,7 +2158,7 @@
<tr style=";line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicePlugins/images/plugins/windowsmedia.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicePlugins/images/plugins/windowsmedia.gif'>
&nbsp;
Windowsmedia </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -2422,7 +2423,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -2500,7 +2501,7 @@
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
Purchased Products </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 12
+ 35
</td>
</tr>
@@ -2802,7 +2803,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -2840,7 +2841,7 @@
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
Products left in cart </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 12
+ 78
</td>
</tr>
@@ -3142,7 +3143,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -3258,32 +3259,6 @@
<tr style=";line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- TRIPOD SKU </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- $ 200
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 2
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 1
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 0
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- $ 100
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 2
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 0%
- </td>
- </tr>
-
- <tr style="background-color: rgb(242,242,242);line-height: 22px;">
- <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
SKU IN ABANDONED CART TWO </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
$ 0
@@ -3318,7 +3293,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -3434,32 +3409,6 @@
<tr style=";line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- TRIPOD - bought day after </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- $ 200
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 2
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 1
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 0
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- $ 100
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 2
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 0%
- </td>
- </tr>
-
- <tr style="background-color: rgb(242,242,242);line-height: 22px;">
- <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
PRODUCT THREE LEFT in cart </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
$ 0
@@ -3484,7 +3433,7 @@
</td>
</tr>
- <tr style=";line-height: 22px;">
+ <tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
PRODUCT TWO LEFT in cart </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -3520,7 +3469,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -3714,32 +3663,6 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- Tools </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- $ 200
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 2
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 1
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 0
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- $ 100
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 2
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 0%
- </td>
- </tr>
-
- <tr style=";line-height: 22px;">
- <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
Category TWO LEFT in cart </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
$ 0
@@ -3774,7 +3697,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -3908,7 +3831,7 @@
4
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 00:13:30
+ 00:03:23
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
0%
@@ -4068,7 +3991,7 @@
3
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 00:06:00
+ 00:02:00
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
0%
@@ -4522,7 +4445,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAOk0lEQVR4nO3dW4wk10EG4LO3yeys197L9NyWdextx4QVECnKxoEkVhwHmRAL4UUojnhAAiSEEIIVKCESlxEgIFKQQeKFFyReebBFIDIKBCWKgpSMwiOal85qlXUce9fYeNeXHe/s8FBOb7sv1aeqTs30Vn3f0+meU6dOnenu+ruqTte+nZ2dAAAwzf697gAAcGc4OPS42+1mhV6vt+udAQBm1ztCQ7fblRUAgLFun56QGACAHMNHGvplAQIAGPSO0DAYFPoHHjY2NgbrbG5unj17dnc6BwDMjuELIUedO3cu5+GoS5cuLSwsdDqdSv3inYxqHYxqHYxqHYxqHYxqCaZcAgBRhAYAIMrt0xO9Xs+FkADAJBMvhAQAGOT0BAAQZfrsid0xg2dG/NoVAAyaidAwtHuekb31LPQBAGbH3p+eGI0I9tYAMIP2+EhD/kGF0VtuZvVHz2WMtjP4TH47/Rby24zvzFD9IAYB0AgzcXpirKG9/tjy6MNy7Uxts+iCs3nCBQCqSBAazl94Jr7y0089EVNtaC+bfaHPnhm79x2sECbvvKe2069WpTNTGwSAO9FuH2lYX19fX1/fzTUOniaYZOhURXXJGwSAPZcgNDz91BPr6+v3339/9vCll16am5s7evTo2MoXL1Zf4Xj9AwCjBwYiFw8/TBhJ9vTJGwSAvZXmSMPgwYNC9w0b3cfvrUmXVc5OgwCwV/Z+yuXQBIQwblZC5E537GGG0cZHF8w/hVGiMzHnRADgzjITsyfGTlwcfLLK1/SYG3FNrVO0M+7+BUDz7NvZ2UnbYqHTE0QyqnUwqnUwqnUwqnUwqiXs/ekJAOCOIDQAAFGEBgAgitAAAEQRGgCAKEIDABBFaAAAoggNAEAUoQEAiCI0AADh/IVnzl945vrrWzl1hAYAaLs3btzMCvv35VUTGgCg7V64ej0rLByey6kmNABA233/yvWYakIDALTdF/9xI4Tw6cfem19NaAAAQghhrXNXfgWhAQAIIYRVoQEAyHHr1k5WWFsSGgCAyZ7vT52YP5RfU2gAgFZ77oVrkTWFBgBotb/6h2+FEH7xEw9OrSk0AABhZXHKBQ1BaAAAQsR8yyA0AAAhhNXOkal1hAYAaK+rr7yRFY4dnZ9aWWgAgPa6/INX4ysLDQDQXn/69/8VQnji4++JqSw0AEDbLZ+cfkFDEBoAgOVFoQEAmKx/14lTS0dj6gsNANBSr16/kRUWjx2OqS80AEBLPXfleqH6QgMAtNQf/d03Qgg//7EHIusLDQDQap3jC5E1hQYAaLWVRaEBAJisP3ViZTFq6kQQGgCgnW5sbWeFzvGoqRNBaACAdrr84tt3nZg7dCByEaEBANroc099PYTw+MPd+EWEBgBor8VjsVdBBqEBANps6UTsBQ1BaACANlvp3BVfWWgAgNZ56+atrBB5U+yM0AAArfP81bfvOnH4XQfjlxIaAKB1fvcLXw0hfPLDZwotJTQAQEudPDZfqL7QAAAttRj9W5AZoQEAWmqtE3vXiYzQAADt0p86sbpYYOpEEBoAoG2uvvx6VjiyMFdoQaEBANrlt/7i38stKDQAQBs9+dh7iy4iNABAG3WK/BZkRmgAgDZaPlHg/pYZoQEAWmR7+4dTJ4rcqiojNABAi/zf9RtZ4e4jxaZOBKEBAFrl19f/LSscOFA4AwgNANA65x99sMRSQgMAtE6n+FWQQWgAgBZaPik0AAARTi0Vu1VVRmgAgLa49tpWVjh2dL7E4kIDALTF969czwqHDpYJAAcHH3S73X651+tV6RYAMGs+/7dfDyE8/nB3as2xboeGbrc7GBSGHgIAzVBu6kQYPD0hIgBAG6wUv1VVxjUNANAua8XvOpHZt7OzM/i4f1lD/8DDxsbGYIXNzc2zZ8+WWxkAsFdubN364j9dDiH8wWdOHziwr0QLw6Ghr/Q1DZcuXVpYWOh0OiWWZRKjWgejWgejWgejWocWjurFyy//3l9/LYTw9FNPlGvB6QkAaIUsMTz60LtLt3A7NAzOtwQAGqncD0hnbk+57PV6fqcBAJqt9NSJMPTjToICADTbqeUyd53IuKYBAJrvxtbNrLDWERoAgMle/N/Xs0K5u05khAYAaL7f+cJXQwgf+sm1/fvL/EJDRmgAgLZYXSx/FWQQGgCgPapcBRmEBgBoj9J3ncgIDQDQcNvbt7LCjzjSAADkuPrKG1lhYf5QlXaEBgBouN/8869khSpTJ4LQAAAt8XMfOVOxBaEBAFphbanSVZBBaACAlqh4FWQQGgCgJU6v3F2xBaEBAJrs5VffzArH756v2JTQAABN9mt/8myqpoQGAGi+x376vuqNCA0A0HwVf0A6IzQAQPOtLVWdOhGEBgBog9OV51sGoQEAGuzaa1tZYenkkeqtCQ0A0Fi/8odfTtia0AAADfczH7ovSTtCAwA03MpignMTQWgAgMZbTTHfMggNANB4SX6kIQgNANBUW29tZwWnJwCAPE9+9ktZYe7QgSQNCg0A0GSPPvTuVE0JDQDQZEsnF1I1JTQAQJOtnkxzFWQQGgCg2VY6aa6CDEIDADTbaoq7TmSEBgBooOdevJYVjizMpWpTaACABvrtv/yPEMLHP3hvwjaFBgBorM7xZFMngtAAAA22lO6ChiA0AECDpfoB6YzQAABNc+vWTlZYFRoAgBwvvfJ6Vjh2dD5hs0IDADTNb/zZV0IIH/vA6bTNCg0A0EyLxw6nbVBoAIBm6pxIOd8yCA0A0FQri8luVZURGgCgUWqaOhGEBgBomFdfu5EVTtzjmgYAYLJf/eNns8L+/fvStiw0AEAD/cIjDyRvU2gAgAZaPJ74goYgNABAI60sJp5vGYQGAGiS/tSJlaT3t8wIDQDQHDe2bmaFxeOONAAAk/3y5/81K8wdOpC8caEBAJrm8Ye7dTQrNABA03SOJ/5Zp4zQAABNk/xWVRmhAQCaZjX1raoyQgMANER/6sRSDfMtg9AAAI3xmc/9S1Y4/K6DdbQvNABAo/zsh++vqWWhAQAaZfFYLVMngtAAAA2zXM8FDUFoAICGWV4UGgCAybbe2s4Ka51a5lsGoQEAmuHJz34pKyzMH6ppFUIDADTHIx+8t77GhQYAaI76pk4EoQEAmmSltqkTQWgAgCapb75lEBoAoAG2t29lhVNLdU2dCEIDADTAL/3+P2eFuxbm6luL0AAADfFT71s7cKDGPbvQAAANsXRiodb2hQYAaIhap04EoQEAGmOltrtOZIQGAGiItc7RWts/OPig2+32y71er9YVAwBJnL/wTFY4cc98rSu6HRq63e5gUBh6CADMsvf9aKfWqRPB6QkAaIblE/Ve0BCGTk8kceFv/jt5mwBAvuWar4IMMaFhY2Nj8OHm5ubZs2dr6w8AUMbFi9/7zneu1bqK6aHh3LlzOQ9HPbr55q2d/feeWqzSrf/81qWfeLBz8p5K9/f88jd6n3joviotPH/l2uUXrn3k/aerNPI/37269db2+39spUojX/v2dxePHf7xB1erNJJqVB/5wL379+8r3cIPrlz/3ovXPmpUBxjVIUZ1iFEd0qRR3d7efvabFyvurd68cfPoXXOf+ugDh+fTn0AYtG9nZycrpboQ8uLFiwsLC8vLy2k6SAjBqNbDqNbBqNbBqNbBqJbgQkgAIMrt4xi9Xs/vNAAAk7zj5IegAABMcvuaBgCAHK5pAACiCA0ArTB41RqUU8uEzuyl2b9CIv/6ylRXXw6ttHrLhbYifnVF57JOHb2aOlN08/ONLp7T4Nh/ZfILbva2S2mHd2wjo3uISe+OKiuN78/YChXXO/p/mfRkxVVkhv5fOe+dmq4P63dm7Cb3JR/VVEMa85qsY72jfSi0e0rVpd3ZwNqdOXNmJ6mswX6zQ+0Xelh6pdVbLrQVhVZXqCdTh2tsa9U7U3Tz803tdtEK1e1tl9IOb2QjNb31Sven+kpH3/WTnqy4irGNp3qPl+5MiTXGVJv0WVrHRsW8y9Kut8QHe6ou7ebA1urg2O9YWVKelGrzVQlNk9Lf1P4kT2pFDwYM1R/tcxj48hefLqceJBhN7kk6k3Y8S/y/+n0een7s4YHBl01kz0tsYMIu1fHFIr/NqSMzuHU5361j1hVfZ7STg8uWe9fX/dItuorR/pf7dC139CL/Xxm5dfUdNRm7rsHX4eBATXp5VNk9Rb6Sk3Rp1wa2bgfDuN+CDGU/i5OYtf6UlrP/Tt7yHnZm18zg3dtnsEsVjd2i3dmu0Tf4nfiuHzK2/+W2q2hua8wHaSb/5aFLu2biNQ27s+WjX3/3tj85a09y1rmKZrwuRzufE8xjtnTwOEq5Ycn/hr0nXapo1qJM6Q7MyOu83DHXHNVHY+z7KKb92RnS6j1JtS0J/78zMry1Ojh4jDpSoSHujTuEPlRhsOXRj+9ZUPencP6QTrp8pqbO1KTERUAV97tTX6iDHYj8F8/44Zn4M19TGylaOfKlm2q9u6nKV/OiG1V6B5Yz/neW/i4jJxXlKzqGU/+/1bvUJG8faSg0FlVezZGj3Lb/Tc6Qjj2tkPPX2RR/gCGh/PbvlKGLN3aLSmxmofqFXro5hg6bx3dglpXYqLSvydn8IK14dnXqVuzO+7qRr9gYY36nob7tzz+klrNUTf1JZfRoSqodUrlP/Jo6U1qVxDD1SFUo9e2/ypjU1KWKKq5u0uKl3317/qpLYvY/fOLdQdvS6/V2bccfWXPXujT7Js6eKH0Kv79g/3hOzsGisdcKjD45tT+jKx3bcpKtqLIhg0+WO2Zb4pRQic4U3fyiWzH6TOntKm20AyUaL7dU8uEdanawb/lHAkZXGv/iKdGfnMoxUWxS+0OnmUafLG3shsevosRGFepJ0UViPthzXpypTn6VaCHVSCZ86xXtUt0Du2vG33ti1r4lzFp/gOqa+r5u6nZB8DPSAEAkd7kEdtuddTw2XlO3C/qEBgAgitMTAEAUoQEAiPL/Sz6G8Y9fXaEAAAAASUVORK5CYII="
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -4941,7 +4864,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -5308,7 +5231,7 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/UserCountry/images/flags/pl.png'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/pl.png'>
&nbsp;
Poland </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -5333,7 +5256,7 @@
<tr style=";line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/UserCountry/images/flags/fr.png'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/fr.png'>
&nbsp;
France </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -5467,7 +5390,7 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/UserCountry/images/flags/xx.png'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
&nbsp;
Unknown </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -5535,7 +5458,7 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/UserCountry/images/flags/xx.png'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
&nbsp;
Unknown </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -5563,6 +5486,11 @@
<a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
Back to top
</a>
+<h2 id="UserId_getUsers" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
+ Users
+</h2>
+
+ There is no data for this report.
<h2 id="CustomVariables_getCustomVariables" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
Custom Variables
</h2>
@@ -6229,7 +6157,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAPUUlEQVR4nO3d329k10EH8BOvd71Zr9f2+Nc2pkvXLqRJBFUC20J+qD8hEj/VviDUN8oLUB4qBIUHqEGifaBqXhBCiL+hfQAUpCIotJVaogqBlCg8eFcNdVIn7m62G3vtWXvMw92dnZ0Zz9y5Pzzjcz+fh+iOc++Z43vP3vv1uffc89Dh4WEAAOhnbNgVAABOhu6hYXV19ZjrAQCMuC6hQWIAADq1h4bV1dX19fWhVAUAGGXjrR+6JoaNjY3Wj5ubmxcvXuxR4u7u7tjY2JkzZ4qqIpE5ODjY3d2dnJwcdkUYXdvb22fPnj116tSwK8KIqtfrjUbj7Nmzw65IVD7zV98JIXzxd5+cmjzyCn6/p6GoPoZ6vb6/v5+/HGJ1cHBQr9eHXQtGWr1ePzg4GHYtGF37+/tOI8XaP2jcW+g1prK9p6F1OckQy8vLreu0fex0eHg4MTExPz8/UHWpju3t7Uaj8cgjjwy7Ioyu3d3dhYUF3VEcZWtra29vz2mkQFs3dpKFJ953ucdq90NDazeDJxsAoDo2r++kWc17GgCg6v70r78RQvjVD/UZPik0AAAhhDB7oc+zpd1Dg3sTAFA1czMP915hmD0Nqw8aSgVKLSrN7+VVWgCMiNp0pp6GY7PeIs3ls9hL7DF0qPT9irbnT0uuDgAcaal2vvcKnmkoRmfoMQIFgBNhe+fuSy+mpyZ6rzne+38PUfMa3Lz0Jj9pvTa3XZWb1+lkIVkzWWi7qLeu1rrtUYW3BYL0aaAtOvSoQ9tv16MyAFCgt96+nSycHu/TlTCioaHzch5aLv/Nn6csoe/H3uv0uPBn/qU6P3b+dt6cAcAxaL7Zqa9RuT3R43qZ8nGHNm2X2DRX3K7rpL9at9YzzVYDhQCJAYCSfOHvvx1C+I3n39d3zQJ6Gj752a+mX/krL3yi9WPnPYi2n8ek9Y5JsSsDQE616T7jLcPx355YW1tbW1trfuzRu3DMFTserY8vpOyKEB0AOAZ93+wUCgkNX3nhE2tra5cv353i4saNG+Pj41NTU11XvnateyFtd/RPqJTdA10flShkZQDIZql2XD0NrZ0HGxsb2Wa5bOaGzgCR5pJZ0h2NgZ6+7G2gC7+UAMAxOLg3Kfbc7Lm+K4/W6Im23ND689YVOpc7PxZeq/zf0ncUZe/fLtuXAkAP12/uJgvnzp7uu/JDh4eHxX595p6Gk0IfQE7b29ubm5srKyvDrgij6+rVq0tLS5OTk8OuCCNqa2trb29veXl52BWJwcvrW8kUl20jFboalSGXo6z1L36JAYCYJInh1z/y3jQrj9btidHUdtdguJUBgMLNTvUfOhGEhpRkBQAi1ndS7ITbEwBQdXOzQgMAkMJiivGWQWgAgMpqToo9NdlnUuyE0AAAFfXmvfkt+06KnRAaAKCi/uBL/zbQ+kIDAFRamkmxE0IDAFRamvktE0IDAFRayvGWQWgAgIpbSPdmpyA0AEA1NRp3Z6xcmks7OZzQAABV9Na98ZYTZ9LOKSE0AEAVvXl9Z9BNhAYAqKLP/803Qwi/9uFUk2InhAYAqK704y2D0AAAVTaferxlEBoAoMoWZlLNb5kQGgCgutK/2SkIDQBQQc1JsWfOp5oUOyE0AEDl/OCH28nCqVMDJAGhAQAq5w+//PUQwsc+eGmgrYQGAKio2vQADzQEoQEAKmtOaAAA0lgYZOhEEBoAoLLma2nnt0wIDQBQUUu1Ad7sFIQGAKiaN++Ntzxz+tRAGwoNAFAtb2xtZ9tQaACAavnzv/1WCOGXnl0ZdEOhAQCqaH5msKETQWgAgGoaaFLshNAAAFW0MODQiSA0AEClNBqHycLirNAAABxt+/bdSbEvDDIpdkJoAIAK2by+kywMNCl2QmgAgAr5oy9/PYTw3FM/lmFboQEAKifD0IkgNABABS3MDPwUZBAaAKCCMoy3DEIDAFTQ0txgk2InhAYAqIqDg0aycFFoAAB62Lpxd7zl2NhDGTYXGgCgKn7nL7+WLAgNAEB/H/3ApWwbCg0AUC2LtSwPNAShAQCqZmkuy3jLIDQAQNUsCg0AQA/NSbHfNX8+WwlCAwBUwjs7e8nCzNTZbCUIDQBQCc1JsTMTGgCgEj73wr+HEJ5+/3LmEoQGAKiQhVqWSbETQgMAVEi2qaoSQgMAVMhSpkmxE0IDAFTIop4GAKCH+p2DZCHzO6SD0AAAVfDDt28nC6fHs1/6hQYAiN/vfeFr+QsRGgCgKp5/+nKezYUGAKiKzFNVJYQGAKiKxdlcoWG89cPq6mpzeX19PU+5AMCoWczxkobQGhpWV1dbg0LbRwDghDo4aCQLeV4HGVpvT4gIABCld27fSRYunJ/IU8543zVu3rz5wBe/886FCxd6rF+v1w8PD2/dupWnWkRsd3d3f39fC6GH/f39nZ2dRqMx7IowonZ3d+/cueM0kt6177+dLOTcad1DQ+u9iddff/2BL752rfXRh057e3tjY2Pb29t5qkXE9vf39/f329oVtEouCePj/f+qoZru3LnTaDTq9fqwK3Ji/MXfvRJC+JlHp3Oee9v/TSaBoPVWxWOPPda6QtvHThsbGxMTE/Pz83mqRcS2t7c3NzdXVlaGXRFG19WrV5eWliYnc918JWJbW1t7e3vLy8vDrsgJ8koI4fKli48++mieUtpHT3iyAQCitDDzcM4S7j8IKTEAQMQW8o23DD3e0xCMpwCAiOSZFDtxPzSICAAQn736frIwX+DtCQAgPs1Jsc+cPpWzKKEBAGL2mS/+SwjhmScLGGwiNABA/GoX8t6bCEIDAFTB/MzZ/IUIDQAQv7mZvOMtg9AAAFWwOCc0AABHazQOk4XFWaEBADjaj7b3koWck2InhAYAiNZv/dmLBZYmNABA5J7/+fcUUo7QAACRq+V+gXRCaACAyAkNAEAqC9NCAwCQQiEvaQhCAwDE6vbe3Umxa3oaAIAebtwsbFLshNAAAHFKJsX+6AcuFVWg0AAAMZsu4l2QCaEBAGI2V9B4yyA0AEDc5qbPFlWU0AAAMZsvYn7LhNAAABG6Pyl2bbKoMoUGAIjQzVt3J8WemjxTVJlCAwBE6NNrRU6KnRAaACBav/zcSoGlCQ0AEK2ZqcKGTgShAQAiVpsRGgCAFOZnChtvGYQGAIjYQnEvaQhCAwDEp2VSbLcnAICjfeqP/yFZKGpS7ITQAABx+vjP/XixBQoNABCn2ULHWwahAQBiNTM1UWyBQgMAxGlu5uFiCxQaACBOBU6KnRAaACBOSzWhAQA42o0f7SYLk+cKmxQ7ITQAQFQ+/fniJ8VOCA0AEKFf+dBq4WUKDQAQodqFgl/SEIQGAIjSTNFvdgpCAwBEaWG24Jc0BKEBAKK0UPR4yyA0AEBMmpNiuz0BAPRS0qTYCaEBAGJT+KTYCaEBAGJTxr2JIDQAQHzmpoUGACCFMt7sFIQGAIjPQm2yjGKFBgCITRkvaQhCAwBE4/rN28nCwxPjZZQvNABAJH577Z9DCM8+uTw29lAZ5QsNABCV6fOlPAUZhAYAiMzs9ERJJQsNABCV+eni57dMCA0AEJX52VKGTgShAQAiszirpwEAONpe/e6k2NMXhAYA4Gi/+bm7k2KfHi/r4i40AEA8Pnzl3eUVLjQAQDxq5cxvmRAaACAec9NlDZ0IQgMAxGShtKETQWgAgJjMzwgNAEAKS3OT5RUuNADAiffJz341WZg4U8qk2AmhAQAiceXxiyVNip0QGgAgErUyH2gIQgMARKPUlzQEoQEAolHq0IkgNABANBZrJQ6dCEIDAJx0jcZhsrBY09MAABytOSl2bbrc0PDAaM7V1dXm8vr6eqlfDAAU4lN/8o/JwqlT5fYF3A8Nq6urrUGh7SMAMMqefv8jZX+F2xMAEIO5kodOhLbbE4X4/S/9Z+FlEqP/HnYFAKKyOFvipNiJ/qHhpZdeav346quvPv7446XVBwDI4ub1N7773ZulfkX/0HDlypUeHzt97NXdxuHYpeX5PNX61+9876d+cmEu31Og//SN9Y9/8D15SnjjrVvf37z17FPvzlPIK1e36ncOnnrsYp5Cvv0/r8/PPPzeS7N5Cilqr37kZy/lebf5a2+8/b2NG7/wzE/kqYa92uYHb73zf2/eei6Wtvrif/zvTz+69K6F6TyF2KttYmqr//XKxm79zjNPXc5TyIjs1YODgxe/dS3n1Wp3b3+xdu4Xn1k5PV7uUwcPHR7eHdxZ1IOQ165dO3fu3NLSUjEVJDq3bt167bXXnnjiiWFXhNH18ssvX7p0aWpqatgVYURtbm7u7OxcvpwrNJCBByEBgFTu355YX1/3ngYA4CgPPNMgKAAAR7n/TAMAQA+eaQAAUhEaABhA69NvVE2X9zQkDaL5fEP+pyMzF9i55lHbFl7nKLXtpZBjYG3hrSJ9lbSK45dnJpqcu/0YThddf1JZbYGgwOOepyUUe8iaNdGisjh80MrKSvO/rQtdP6aRucDONY/atvA6x6rHPhy0nJyFtB2y1p/3Lk2rGIrMuyvnbj+G00XXn1RZmv3Qd530hyN9rfqWmb6oDKtpUU3ttyfaklH+oJS5hPQbxpnmytE2sLZptUV4MFCX0RXZ9ZCl+XNWqxi61nYS7jWPth82HdtRyNMwNJW+2s4PbT/sXL+MXdp67up8FWFn3UK3c1f6PjMt6ijFT1jFidP5L3DodWBktd7uafbZdv6QaHQ9P4zUQe9ak6Nq5TZlTqlCQ8o7QOVJDr+nbwqR7Mneh7K5Ttc1C38PWLaTjlYxIvoeu2M+gWgYOaX5153+ULaGywybZ5am5inPPFpUq1Sh4ajslqFjatBdH/PjJMOTJjf00NkMcraKtq1SPgupVQxFhlNnjz/+ercWp4uh6Pp4coZyWg9H75PGUV/Rebu86yEu73KuRXXKdXsi265M3xM+9F4vMshwyAbK/lrFELV1/+YvcKCnWJwuhiXDRXrQw1HI3zDFpgctqqs+72kotUOm98F2wErV92+4nL0R+XWtnlZxshR4Aunay935fylbGYkhvfX19cJL1qIG0t7T0PZQdP671z0KHKjLukdlCq9z1Qy6x8poFRm27V0ZraIMg94vKLCpHMPpQl90V517sm2oQt/nDbsWUlL1Blo5zW3QvttWrUWNytwTYh1tNInRMVLHYqQqQwS0qIGMxGukHTPaaBJ0pWFQLC1qUKPS0wCMoCj7V4HMhAYAIJWRuD0BAIw+oQEASOX/ARbBihL7qUu/AAAAAElFTkSuQmCC"
height="200"
width="700"/>
@@ -6316,74 +6244,6 @@
<a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
Back to top
</a>
-<h2 id="Provider_getProvider" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
- Provider
-</h2>
-
- <img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAF7UlEQVR4nO3dP24jVQDH8QmbNCuhKBVSAtpibkC2hYIDIOUAVPRItPQguj0BHfWegCPgE6BpgIwEEooEUigiMRQWZjJx4p8TO+M3/nwq/xk7b3c1O9+8N2MfdF1XAQCs8s7YAwAAyiAaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAi+xUNdV0vfXDp4w+/CgD2zX5Fw32apsmf1RAA7KfDsQewSd989+Pgka8+f92/2zRNXdf9CBjcBQDuM6lo+OmXP29ubhZ3j46OLi8vz87OVr7wbkksbg86Y/7UYoP5s/2Nn/YnAIDdNaloqKrq+vp6cfv4+Lht2yQa+h4IiGpZQ5i3AGBP7N05Df25geQYv1YEKAYAJmzvomGleVWEZzuutTEAFG1qyxMvX758+pvMJwzmKRBORYQbA0C5JhUNF5/U7eXlys0WKxTJlZb5lEPlnAYAJm1S0fDpx6+q6tUT32StA79KAGB/TCoaNuLuVZRLL6C4b+PnGSQAPL+DruvGHgMAUABXTwAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBApJhPhPTBi1AW+ywUp/95x0s3KCMaBl/x4BsfYMfZZ6E4yX5qeQLYPIkAZQnLvoyZBgBgq5IlRdEAbMvK9VFgdyRLiqIB2JbFfzrOaYBpcE4DABARDcDm9RdHgck46Lpu7DFEXPMNZbHPQlmSfbaYaAAAxmV5AgCIiAYAICIaAICIaAAAIqIBAIiIBgAgUlg0zGazsYcApNq2bdt27FEAqZUH2cKiAQAYi2gAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIHI49gLX9+ttfYw8BiPz+x99VVf3zwj7Ls3r/vXfHHsJklRcNX3z7w9hDAGB3vX1zMfYQJsvyBAAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQOQx0VDX9cbHAQDsuMPFrbqum6bpP3f3EQAowt3fbx3Rnu5w9SYAUCCVsHGrlyfmsVb/575n725T91S3o29w++EfAQDsgmimob9OMTje9x8fbNNPvJUpcN9bAcDj9A89DisbEZ0IufTvenBoX/nv0TTNYkZhcDt5OQDkmttMY2/EIy+5NBkAAPvmkdGg2gBg3/wfDYMOWDmX8IhumL9ksR5hugKALfGb7TbcOhGy3wHJ4fyBA/8gKcQBAM/JYWgbDrquG3sMa5jNZl9///PYowBgd719czH2EEo1m83Oz88f2MB3TwAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQORx7AGv78rPXYw8BiFxdXVVVdXJyMvZAgM0oLxo++vCDsYcARNr2RVVVp6enYw8E2AzLEwBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABEDrquG3sMAEABzDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQORf+Zdxfjze1KoAAAAASUVORK5CYII="
- height="200"
- width="700"/>
-
- <br/>
- <br/>
-
- <table style="border-collapse:collapse; margin-left: 5px;">
- <thead style="background-color: rgb(255,255,255); color: rgb(13,13,13); font-size: 11pt; text-transform: uppercase; line-height:2.5em;">
- <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Provider&nbsp;&nbsp;
- </th>
- <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Visits&nbsp;&nbsp;
- </th>
- <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Actions&nbsp;&nbsp;
- </th>
- <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Actions per Visit&nbsp;&nbsp;
- </th>
- <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Avg. Time on Website&nbsp;&nbsp;
- </th>
- <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Bounce Rate&nbsp;&nbsp;
- </th>
- <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Conversion Rate&nbsp;&nbsp;
- </th>
- </thead>
- <tbody>
-
- <tr style="background-color: rgb(242,242,242);line-height: 22px;">
- <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <a style="color: rgb(13,13,13);" href='http://'>
- Unknown </a>
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 5
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 16
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 3.2
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 00:22:49
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 20%
- </td>
- <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 80%
- </td>
- </tr>
- </tbody>
- </table>
- <br/>
- <a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
- Back to top
- </a>
<h2 id="DevicesDetection_getType" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
Device type
</h2>
@@ -6424,7 +6284,7 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicesDetection/images/screens/normal.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.gif'>
&nbsp;
Desktop </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -6492,7 +6352,7 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicesDetection/images/brand/Unknown.ico'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/brand/Unknown.ico'>
&nbsp;
Unknown </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
@@ -6520,12 +6380,12 @@
<a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
Back to top
</a>
-<h2 id="DevicesDetection_getBrowsers" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
- Visitor Browser
+<h2 id="DevicesDetection_getModel" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
+ Device model
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAF7UlEQVR4nO3dP24jVQDH8QmbNCuhKBVSAtpibkC2hYIDIOUAVPRItPQguj0BHfWegCPgE6BpgIwEEooEUigiMRQWZjJx4p8TO+M3/nwq/xk7b3c1O9+8N2MfdF1XAQCs8s7YAwAAyiAaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAi+xUNdV0vfXDp4w+/CgD2zX5Fw32apsmf1RAA7KfDsQewSd989+Pgka8+f92/2zRNXdf9CBjcBQDuM6lo+OmXP29ubhZ3j46OLi8vz87OVr7wbkksbg86Y/7UYoP5s/2Nn/YnAIDdNaloqKrq+vp6cfv4+Lht2yQa+h4IiGpZQ5i3AGBP7N05Df25geQYv1YEKAYAJmzvomGleVWEZzuutTEAFG1qyxMvX758+pvMJwzmKRBORYQbA0C5JhUNF5/U7eXlys0WKxTJlZb5lEPlnAYAJm1S0fDpx6+q6tUT32StA79KAGB/TCoaNuLuVZRLL6C4b+PnGSQAPL+DruvGHgMAUABXTwAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBApJhPhPTBi1AW+ywUp/95x0s3KCMaBl/x4BsfYMfZZ6E4yX5qeQLYPIkAZQnLvoyZBgBgq5IlRdEAbMvK9VFgdyRLiqIB2JbFfzrOaYBpcE4DABARDcDm9RdHgck46Lpu7DFEXPMNZbHPQlmSfbaYaAAAxmV5AgCIiAYAICIaAICIaAAAIqIBAIiIBgAgUlg0zGazsYcApNq2bdt27FEAqZUH2cKiAQAYi2gAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIHI49gLX9+ttfYw8BiPz+x99VVf3zwj7Ls3r/vXfHHsJklRcNX3z7w9hDAGB3vX1zMfYQJsvyBAAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQOQx0VDX9cbHAQDsuMPFrbqum6bpP3f3EQAowt3fbx3Rnu5w9SYAUCCVsHGrlyfmsVb/575n725T91S3o29w++EfAQDsgmimob9OMTje9x8fbNNPvJUpcN9bAcDj9A89DisbEZ0IufTvenBoX/nv0TTNYkZhcDt5OQDkmttMY2/EIy+5NBkAAPvmkdGg2gBg3/wfDYMOWDmX8IhumL9ksR5hugKALfGb7TbcOhGy3wHJ4fyBA/8gKcQBAM/JYWgbDrquG3sMa5jNZl9///PYowBgd719czH2EEo1m83Oz88f2MB3TwAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQORx7AGv78rPXYw8BiFxdXVVVdXJyMvZAgM0oLxo++vCDsYcARNr2RVVVp6enYw8E2AzLEwBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABEDrquG3sMAEABzDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQORf+Zdxfjze1KoAAAAASUVORK5CYII="
height="200"
width="700"/>
@@ -6535,7 +6395,7 @@
<table style="border-collapse:collapse; margin-left: 5px;">
<thead style="background-color: rgb(255,255,255); color: rgb(13,13,13); font-size: 11pt; text-transform: uppercase; line-height:2.5em;">
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Browser&nbsp;&nbsp;
+ &nbsp;Device model&nbsp;&nbsp;
</th>
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
&nbsp;Visits&nbsp;&nbsp;
@@ -6560,9 +6420,7 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicesDetection/images/browsers/FF.gif'>
- &nbsp;
- Firefox </td>
+ Unknown </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
5
</td>
@@ -6588,12 +6446,12 @@
<a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
Back to top
</a>
-<h2 id="DevicesDetection_getModel" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
- Device model
+<h2 id="DevicesDetection_getOsFamilies" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
+ Operating System families
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAF7UlEQVR4nO3dP24jVQDH8QmbNCuhKBVSAtpibkC2hYIDIOUAVPRItPQguj0BHfWegCPgE6BpgIwEEooEUigiMRQWZjJx4p8TO+M3/nwq/xk7b3c1O9+8N2MfdF1XAQCs8s7YAwAAyiAaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAi+xUNdV0vfXDp4w+/CgD2zX5Fw32apsmf1RAA7KfDsQewSd989+Pgka8+f92/2zRNXdf9CBjcBQDuM6lo+OmXP29ubhZ3j46OLi8vz87OVr7wbkksbg86Y/7UYoP5s/2Nn/YnAIDdNaloqKrq+vp6cfv4+Lht2yQa+h4IiGpZQ5i3AGBP7N05Df25geQYv1YEKAYAJmzvomGleVWEZzuutTEAFG1qyxMvX758+pvMJwzmKRBORYQbA0C5JhUNF5/U7eXlys0WKxTJlZb5lEPlnAYAJm1S0fDpx6+q6tUT32StA79KAGB/TCoaNuLuVZRLL6C4b+PnGSQAPL+DruvGHgMAUABXTwAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBApJhPhPTBi1AW+ywUp/95x0s3KCMaBl/x4BsfYMfZZ6E4yX5qeQLYPIkAZQnLvoyZBgBgq5IlRdEAbMvK9VFgdyRLiqIB2JbFfzrOaYBpcE4DABARDcDm9RdHgck46Lpu7DFEXPMNZbHPQlmSfbaYaAAAxmV5AgCIiAYAICIaAICIaAAAIqIBAIiIBgAgUlg0zGazsYcApNq2bdt27FEAqZUH2cKiAQAYi2gAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIHI49gLX9+ttfYw8BiPz+x99VVf3zwj7Ls3r/vXfHHsJklRcNX3z7w9hDAGB3vX1zMfYQJsvyBAAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQOQx0VDX9cbHAQDsuMPFrbqum6bpP3f3EQAowt3fbx3Rnu5w9SYAUCCVsHGrlyfmsVb/575n725T91S3o29w++EfAQDsgmimob9OMTje9x8fbNNPvJUpcN9bAcDj9A89DisbEZ0IufTvenBoX/nv0TTNYkZhcDt5OQDkmttMY2/EIy+5NBkAAPvmkdGg2gBg3/wfDYMOWDmX8IhumL9ksR5hugKALfGb7TbcOhGy3wHJ4fyBA/8gKcQBAM/JYWgbDrquG3sMa5jNZl9///PYowBgd719czH2EEo1m83Oz88f2MB3TwAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQORx7AGv78rPXYw8BiFxdXVVVdXJyMvZAgM0oLxo++vCDsYcARNr2RVVVp6enYw8E2AzLEwBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABEDrquG3sMAEABzDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQORf+Zdxfjze1KoAAAAASUVORK5CYII="
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -6603,7 +6461,7 @@
<table style="border-collapse:collapse; margin-left: 5px;">
<thead style="background-color: rgb(255,255,255); color: rgb(13,13,13); font-size: 11pt; text-transform: uppercase; line-height:2.5em;">
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Device model&nbsp;&nbsp;
+ &nbsp;Operating system family&nbsp;&nbsp;
</th>
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
&nbsp;Visits&nbsp;&nbsp;
@@ -6628,7 +6486,9 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- Unknown </td>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/os/WIN.gif'>
+ &nbsp;
+ Windows </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
5
</td>
@@ -6654,12 +6514,12 @@
<a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
Back to top
</a>
-<h2 id="DevicesDetection_getBrowserVersions" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
- Browser version
+<h2 id="DevicesDetection_getOsVersions" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
+ Operating System versions
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAIBUlEQVR4nO3dz4/Udx3H8Q/CuoSCu4Q26C4G0olRDs1at4LGisKhkZiY9KaHnnrQk9HEgxqiFzXe6j/Qg4mJHEyvaGMkaWxM1Q0hHGhDNhLLTv2RDUtbKMtSx8PQ6TA7zL52dne+M+zjcSDz47tf3kCG73O+P2Z2NBqNAgCwlo9UPQAAMBpEAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDRslVqt1vXBro/3/ikAGAaiYdDm5+fzZzUEAMNjV9UDjKpfvPj3jkd+/PxT7Xfn5+drtVp7BHTcBYDRIhr6dOXNt1dWVlp3x8bGFhYWpqen1/zB1SXRut3RGc2nWgs0n21feGN/AgBYH9HQv1u3brVuT0xM1Ov1JBra9QiI0q0h7LcAoELOadhC7fsGkm38uiJAMQAwYKKhSs2qCM92XNfCALDpHJ7o3549eza+kuYOg2YKhLsiwoUBYHOJhj49e6pWX1hYc7HWEYrkSst8l0NxTgMAAyca+vSNE4dLObzBlaxrw68SAKiWaKjS6qsou15A8aCFBzMkADTtaDQaVc8AAIwAV08AABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQMQnQnbhgxehKl59UKH2zyDuuoBo6NTxFQ++8QEGxqsPKpS84hyeAIaFRICqhI1uTwMAEB0cFA3AcFnzqCqwFZKDg6IBGC6t/6qc0wDDxjkNAEBENADDov2QKjCEdjQajapnGDquFIeqePVBVZJXn2gAACIOTwAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAARETDA83NzVU9AmxH9Xq9Xq9XPQVsR2tu+EQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAAJFdVQ8w1K79+52qR4Bt5z+L75VS/rfTq49Nc+jgvqpHeEiIhl6++8s/Vj0CABv10gvPVj3CQ8LhCQAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgsqvqAQZkZfnd99/57859j5VSmjfGxneVsrvquQBgZGx+NNRqtfn5+U1f7UasLL+78PK3ly4vTh49sHR58dbi1fN3pj//rV+deHzvB/VQVpbvjo3vrXpSABheH0ZDx8a+991B6jpJrVZrX6b3bG8vXan/eW7q6dn2B//22+9d/OKjM0fOzB6+W0o5cPDopk4NwHDp2HCUtbYdrDYChyeaidD8p20PiP6a5tbi1dbtG+PXXnnrO6+8VUopP/3aH8bGN29oAIaPStigD6Nh9ba5/W5rsY43+qsXaF+y68rL/dv4rivcVLdLKXsOHCmlLF1ebD363ldvN29MLB+6MX5ts39TAHjY9LOnoWOTX1a96S/djimEK+yqVRV9JMXK8t03f/2j0lYM5+9Mt55tFsPE8qH1rhaAkdPxbrbCSUZUP9HQ3190a2dD11/7WGHuJ69/pnb8m/fGeP3s8YlLHQvMHDmzpQMAULmOjdcQnrY//LpEQ+vvseOYwtbpb0dCGIznL/7jX5Onm4u++saNMnn6taVyfOJSa+/CxPKhE4/vdekEAPR2XzR0fdM/mJ0Bq89zXD1DefCJkD2cOVv/0qcnTj/5yLkLN5uPHJ+4dPKjC3uujpVSJmeu1P80dvMrSz6xAQB66/KJkO0b4/XuZujdFu27Lga2G6PDx5fONW9MzlyZnLlSSpl6evaRnZMDHgOAAdvqd7/bwSZcctlx7UPrQEN+vknvSyc69i70lxrnLtx89Y0brbtTp1Zat/cd+8HuRz+x3hUCMFrWtWGiqx2NRqPqGbbWy3+9d9rjuQs35187W0r54WO/vy8aPvu7AwePrv5I6bm5uZ//5p8DmxOALfLSC89WPcJomJubm52d7bHACHy40wY9c+yJUkopt0/O3D3/5PMXr/7s/F+mv35xrHlsotz5wscmP+VLKABgTQ9/NHxg99h4eebYEydnXnz/1L1vrmpy3QQAJLZPNNwzNu7qSgDoR5erJwAAVhMNAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABEdlU9wFD7/nNPVT0CbDvXr18vpezfv7/qQYBOoqGXL3/uk1WPANtOvb6zlDI1NVX1IEAnhycAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiOxoNBpVzwAAjAB7GgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAg8n/j6k/2lSrybwAAAABJRU5ErkJggg=="
height="200"
width="700"/>
@@ -6669,7 +6529,7 @@
<table style="border-collapse:collapse; margin-left: 5px;">
<thead style="background-color: rgb(255,255,255); color: rgb(13,13,13); font-size: 11pt; text-transform: uppercase; line-height:2.5em;">
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Browser version&nbsp;&nbsp;
+ &nbsp;Operating System versions&nbsp;&nbsp;
</th>
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
&nbsp;Visits&nbsp;&nbsp;
@@ -6694,9 +6554,9 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicesDetection/images/browsers/FF.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/os/WIN.gif'>
&nbsp;
- Firefox 3.6 </td>
+ Windows XP </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
5
</td>
@@ -6722,12 +6582,12 @@
<a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
Back to top
</a>
-<h2 id="DevicesDetection_getOsFamilies" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
- Operating System families
+<h2 id="DevicesDetection_getBrowsers" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
+ Visitor Browser
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -6737,7 +6597,7 @@
<table style="border-collapse:collapse; margin-left: 5px;">
<thead style="background-color: rgb(255,255,255); color: rgb(13,13,13); font-size: 11pt; text-transform: uppercase; line-height:2.5em;">
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Operating system family&nbsp;&nbsp;
+ &nbsp;Browser&nbsp;&nbsp;
</th>
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
&nbsp;Visits&nbsp;&nbsp;
@@ -6762,9 +6622,9 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicesDetection/images/os/WIN.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/browsers/FF.gif'>
&nbsp;
- Windows </td>
+ Firefox </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
5
</td>
@@ -6790,12 +6650,12 @@
<a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
Back to top
</a>
-<h2 id="DevicesDetection_getOsVersions" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
- Operating System versions
+<h2 id="DevicesDetection_getBrowserVersions" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
+ Browser version
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"/>
@@ -6805,7 +6665,7 @@
<table style="border-collapse:collapse; margin-left: 5px;">
<thead style="background-color: rgb(255,255,255); color: rgb(13,13,13); font-size: 11pt; text-transform: uppercase; line-height:2.5em;">
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Operating System versions&nbsp;&nbsp;
+ &nbsp;Browser version&nbsp;&nbsp;
</th>
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
&nbsp;Visits&nbsp;&nbsp;
@@ -6830,9 +6690,9 @@
<tr style="background-color: rgb(242,242,242);line-height: 22px;">
<td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- <img src='plugins/DevicesDetection/images/os/WIN.gif'>
+ <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/browsers/FF.gif'>
&nbsp;
- Windows XP </td>
+ Firefox 3.6 </td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
5
</td>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
index 173df28cda..880a4be3a1 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
@@ -4034,7 +4034,7 @@
/index.htm </a>
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 3
+ 4
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
0
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml
index 457accfc9a..2da80f0930 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml
@@ -5,16 +5,16 @@
<nb_visits>2</nb_visits>
<nb_hits>2</nb_hits>
<sum_time_spent>360</sum_time_spent>
- <entry_nb_visits>1</entry_nb_visits>
- <entry_nb_actions>3</entry_nb_actions>
- <entry_sum_visit_length>364</entry_sum_visit_length>
- <entry_bounce_count>0</entry_bounce_count>
+ <entry_nb_visits>2</entry_nb_visits>
+ <entry_nb_actions>4</entry_nb_actions>
+ <entry_sum_visit_length>725</entry_sum_visit_length>
+ <entry_bounce_count>1</entry_bounce_count>
<exit_nb_visits>1</exit_nb_visits>
<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
- <sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+ <sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors>
<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
<avg_time_on_page>180</avg_time_on_page>
- <bounce_rate>0%</bounce_rate>
+ <bounce_rate>50%</bounce_rate>
<exit_rate>50%</exit_rate>
<url>http://example.org/homepage</url>
<segment>pageUrl==http%3A%2F%2Fexample.org%2Fhomepage</segment>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml
index 457accfc9a..2da80f0930 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml
@@ -5,16 +5,16 @@
<nb_visits>2</nb_visits>
<nb_hits>2</nb_hits>
<sum_time_spent>360</sum_time_spent>
- <entry_nb_visits>1</entry_nb_visits>
- <entry_nb_actions>3</entry_nb_actions>
- <entry_sum_visit_length>364</entry_sum_visit_length>
- <entry_bounce_count>0</entry_bounce_count>
+ <entry_nb_visits>2</entry_nb_visits>
+ <entry_nb_actions>4</entry_nb_actions>
+ <entry_sum_visit_length>725</entry_sum_visit_length>
+ <entry_bounce_count>1</entry_bounce_count>
<exit_nb_visits>1</exit_nb_visits>
<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
- <sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+ <sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors>
<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
<avg_time_on_page>180</avg_time_on_page>
- <bounce_rate>0%</bounce_rate>
+ <bounce_rate>50%</bounce_rate>
<exit_rate>50%</exit_rate>
<url>http://example.org/homepage</url>
<segment>pageUrl==http%3A%2F%2Fexample.org%2Fhomepage</segment>
diff --git a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageTitleExcludes__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageTitleExcludes__Actions.getPageUrls_day.xml
index 21450c0dd4..754d1c45fa 100644
--- a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageTitleExcludes__Actions.getPageUrls_day.xml
+++ b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageTitleExcludes__Actions.getPageUrls_day.xml
@@ -6,15 +6,15 @@
<nb_uniq_visitors>2</nb_uniq_visitors>
<nb_hits>2</nb_hits>
<sum_time_spent>0</sum_time_spent>
- <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors>
- <entry_nb_visits>1</entry_nb_visits>
- <entry_nb_actions>3</entry_nb_actions>
- <entry_sum_visit_length>364</entry_sum_visit_length>
- <entry_bounce_count>0</entry_bounce_count>
+ <entry_nb_uniq_visitors>2</entry_nb_uniq_visitors>
+ <entry_nb_visits>2</entry_nb_visits>
+ <entry_nb_actions>4</entry_nb_actions>
+ <entry_sum_visit_length>725</entry_sum_visit_length>
+ <entry_bounce_count>1</entry_bounce_count>
<exit_nb_uniq_visitors>1</exit_nb_uniq_visitors>
<exit_nb_visits>1</exit_nb_visits>
<avg_time_on_page>0</avg_time_on_page>
- <bounce_rate>0%</bounce_rate>
+ <bounce_rate>50%</bounce_rate>
<exit_rate>50%</exit_rate>
<url>http://example.org/homepage</url>
<segment>pageUrl==http%3A%2F%2Fexample.org%2Fhomepage</segment>
diff --git a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlExcludes__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlExcludes__Actions.getPageUrls_day.xml
index 21450c0dd4..754d1c45fa 100644
--- a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlExcludes__Actions.getPageUrls_day.xml
+++ b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlExcludes__Actions.getPageUrls_day.xml
@@ -6,15 +6,15 @@
<nb_uniq_visitors>2</nb_uniq_visitors>
<nb_hits>2</nb_hits>
<sum_time_spent>0</sum_time_spent>
- <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors>
- <entry_nb_visits>1</entry_nb_visits>
- <entry_nb_actions>3</entry_nb_actions>
- <entry_sum_visit_length>364</entry_sum_visit_length>
- <entry_bounce_count>0</entry_bounce_count>
+ <entry_nb_uniq_visitors>2</entry_nb_uniq_visitors>
+ <entry_nb_visits>2</entry_nb_visits>
+ <entry_nb_actions>4</entry_nb_actions>
+ <entry_sum_visit_length>725</entry_sum_visit_length>
+ <entry_bounce_count>1</entry_bounce_count>
<exit_nb_uniq_visitors>1</exit_nb_uniq_visitors>
<exit_nb_visits>1</exit_nb_visits>
<avg_time_on_page>0</avg_time_on_page>
- <bounce_rate>0%</bounce_rate>
+ <bounce_rate>50%</bounce_rate>
<exit_rate>50%</exit_rate>
<url>http://example.org/homepage</url>
<segment>pageUrl==http%3A%2F%2Fexample.org%2Fhomepage</segment>
diff --git a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlStartsWith__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlStartsWith__Actions.getPageUrls_day.xml
index 21450c0dd4..754d1c45fa 100644
--- a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlStartsWith__Actions.getPageUrls_day.xml
+++ b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlStartsWith__Actions.getPageUrls_day.xml
@@ -6,15 +6,15 @@
<nb_uniq_visitors>2</nb_uniq_visitors>
<nb_hits>2</nb_hits>
<sum_time_spent>0</sum_time_spent>
- <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors>
- <entry_nb_visits>1</entry_nb_visits>
- <entry_nb_actions>3</entry_nb_actions>
- <entry_sum_visit_length>364</entry_sum_visit_length>
- <entry_bounce_count>0</entry_bounce_count>
+ <entry_nb_uniq_visitors>2</entry_nb_uniq_visitors>
+ <entry_nb_visits>2</entry_nb_visits>
+ <entry_nb_actions>4</entry_nb_actions>
+ <entry_sum_visit_length>725</entry_sum_visit_length>
+ <entry_bounce_count>1</entry_bounce_count>
<exit_nb_uniq_visitors>1</exit_nb_uniq_visitors>
<exit_nb_visits>1</exit_nb_visits>
<avg_time_on_page>0</avg_time_on_page>
- <bounce_rate>0%</bounce_rate>
+ <bounce_rate>50%</bounce_rate>
<exit_rate>50%</exit_rate>
<url>http://example.org/homepage</url>
<segment>pageUrl==http%3A%2F%2Fexample.org%2Fhomepage</segment>
diff --git a/tests/PHPUnit/Unit/DateTest.php b/tests/PHPUnit/Unit/DateTest.php
index ee37aba1eb..0e075ee985 100644
--- a/tests/PHPUnit/Unit/DateTest.php
+++ b/tests/PHPUnit/Unit/DateTest.php
@@ -58,6 +58,29 @@ class DateTest extends \PHPUnit_Framework_TestCase
$this->fail('Expected exception not raised');
}
+ public function getTimezoneOffsets()
+ {
+ return array(
+ array('UTC-2', -7200),
+ array('UTC+1.5', 5400),
+ array('UTC', 0),
+ array('America/Belize', -21600),
+ array('EST', -18000),
+ array('Antarctica/Syowa', 10800),
+ );
+ }
+
+ /**
+ * @group Core
+ * @group DateTest
+ * @dataProvider getTimezoneOffsets
+ */
+ public function testGetUtcOffset($timezone, $expectedOffset)
+ {
+ $offset = Date::getUtcOffset($timezone);
+ $this->assertEquals($expectedOffset, $offset);
+ }
+
/**
* @group Core
*/
diff --git a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
index 59c7ca86ae..1cb3f36cc1 100644
--- a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
+++ b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
@@ -8,10 +8,7 @@
namespace Piwik\Tests\Unit;
-use Piwik\AssetManager;
-use Piwik\AssetManager\UIAsset;
use Piwik\Date;
-use Piwik\Plugin;
use Piwik\Version;
use ReflectionClass;
@@ -23,53 +20,52 @@ class DeprecatedMethodsTest extends \PHPUnit_Framework_TestCase
{
public function test_deprecations()
{
- $validTill = '2016-09-01';
- $this->assertDeprecatedMethodIsRemoved('Piwik\SettingsServer', 'isApache', $validTill);
+ $this->assertDeprecatedMethodIsRemovedInPiwik3b1('Piwik\SettingsServer', 'isApache');
$validTill = '2015-03-10';
- $this->assertDeprecatedMethodIsRemoved('\Piwik\Period', 'factory', $validTill);
- $this->assertDeprecatedMethodIsRemoved('\Piwik\Config', 'getConfigSuperUserForBackwardCompatibility', $validTill);
- $this->assertDeprecatedMethodIsRemoved('\Piwik\Menu\MenuAdmin', 'addEntry', $validTill);
- $this->assertDeprecatedMethodIsRemoved('\Piwik\Menu\MenuAdmin', 'removeEntry', $validTill);
- $this->assertDeprecatedMethodIsRemoved('\Piwik\Menu\MenuTop', 'addEntry', $validTill);
- $this->assertDeprecatedMethodIsRemoved('\Piwik\Menu\MenuTop', 'removeEntry', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Period', 'factory', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Config', 'getConfigSuperUserForBackwardCompatibility', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Menu\MenuAdmin', 'addEntry', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Menu\MenuAdmin', 'removeEntry', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Menu\MenuTop', 'addEntry', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Menu\MenuTop', 'removeEntry', $validTill);
$validTill = '2015-03-10';
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'sanitizeIp', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'sanitizeIpRange', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'P2N', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'N2P', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'prettyPrint', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'isIPv4', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'long2ip', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'isIPv6', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'isMappedIPv4', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'getIPv4FromMappedIPv6', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'getIpsForRange', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'isIpInRange', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'getHostByAddr', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\SettingsPiwik', 'rewriteTmpPathWithInstanceId', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'sanitizeIp', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'sanitizeIpRange', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'P2N', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'N2P', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'prettyPrint', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'isIPv4', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'long2ip', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'isIPv6', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'isMappedIPv4', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'getIPv4FromMappedIPv6', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'getIpsForRange', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'isIpInRange', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'getHostByAddr', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\SettingsPiwik', 'rewriteTmpPathWithInstanceId', $validTill);
$validTill = '2015-05-01';
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getBrowserVersion', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getBrowser', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getOS', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getOSFamily', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getBrowserType', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getMobileVsDesktop', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getResolution', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getConfiguration', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getPlugin', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getLanguage', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getLanguageCode', $validTill);
- $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\UserSettings', 'renameDeprecatedModuleAndAction', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getBrowserVersion', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getBrowser', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getOS', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getOSFamily', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getBrowserType', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getMobileVsDesktop', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getResolution', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getConfiguration', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getPlugin', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getLanguage', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getLanguageCode', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\UserSettings', 'renameDeprecatedModuleAndAction', $validTill);
// please be aware if re-adding a plugin called userSettings, and someone updates eg from Piwik 2.13 to that version,
// the plugin will be possibly removed in an Update during 2.14.0
$this->assertDeprecatedClassIsRemoved('Piwik\Plugins\UserSettings\UserSettings', $validTill);
$validTill = '2015-06-01';
- $this->assertDeprecatedMethodIsRemoved('Piwik\Archive', 'getBlob', $validTill);
+ $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Archive', 'getBlob', $validTill);
$this->assertDeprecatedMethodIsRemovedInPiwik3('\Piwik\Menu\MenuAbstract', 'add');
$this->assertDeprecatedMethodIsRemovedInPiwik3('\Piwik\Archive', 'getDataTableFromArchive');
@@ -87,7 +83,8 @@ class DeprecatedMethodsTest extends \PHPUnit_Framework_TestCase
$this->assertDeprecatedMethodIsRemovedInPiwik4('Piwik\Updater', 'executeMigrationQueries');
}
- private function assertDeprecatedMethodIsRemoved($className, $method, $removalDate)
+
+ private function assertDeprecatedMethodIsRemovedBeforeDate($className, $method, $removalDate)
{
$now = Date::now();
$removalDate = Date::factory($removalDate);
@@ -129,14 +126,19 @@ class DeprecatedMethodsTest extends \PHPUnit_Framework_TestCase
$this->assertFalse($classExists, $errorMessage);
}
+ private function assertDeprecatedMethodIsRemovedInPiwik3b1($className, $method)
+ {
+ $this->assertDeprecatedMethodIsRemovedInPiwikVersion('3.0.0-b1', $className, $method);
+ }
+
private function assertDeprecatedMethodIsRemovedInPiwik3($className, $method)
{
- $this->assertDeprecatedMethodIsRemovedInPiwikVersion('3.0.0', $className, $method);
+ $this->assertDeprecatedMethodIsRemovedInPiwikVersion('3.0.0-b2', $className, $method);
}
private function assertDeprecatedMethodIsRemovedInPiwik4($className, $method)
{
- $this->assertDeprecatedMethodIsRemovedInPiwikVersion('4.0.0', $className, $method);
+ $this->assertDeprecatedMethodIsRemovedInPiwikVersion('4.0.0-b1', $className, $method);
}
private function assertDeprecatedMethodIsRemovedInPiwikVersion($piwikVersion, $className, $method)
diff --git a/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png b/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png
index 84e0f1e50a..c052514ef3 100644
--- a/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png
+++ b/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:81ad9741df39c72e4b9090eeb52ecfa0a876f80353f8ecc7d314e6d77b052645
-size 96834
+oid sha256:991da58219c2022c905b166a4391998e276a2c2da2f8afd66fced8e209d17352
+size 101749
diff --git a/tests/UI/expected-screenshots/DashboardManager_create_new.png b/tests/UI/expected-screenshots/DashboardManager_create_new.png
index fc74c091e9..690b9547c6 100644
--- a/tests/UI/expected-screenshots/DashboardManager_create_new.png
+++ b/tests/UI/expected-screenshots/DashboardManager_create_new.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f04d481fc90c6c130aca91ab43b0e70be5b439289c9a85ef27d217a0892287bc
-size 228318
+oid sha256:b3c4067cfa1733ef2d050d15178908ad555668006b72e2c59309513d90622df1
+size 243505
diff --git a/tests/UI/expected-screenshots/Dashboard_reset.png b/tests/UI/expected-screenshots/Dashboard_reset.png
index f5d5a88b7b..40f4f6af58 100644
--- a/tests/UI/expected-screenshots/Dashboard_reset.png
+++ b/tests/UI/expected-screenshots/Dashboard_reset.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:52ec4e2e7ed19790cdfc84347bccb796db268da63e8a1d00057d1fb10a779c59
-size 293586
+oid sha256:57de6cdea1a833f884d1fb819be65143fbac905db7ca862e39f77ea0e2b104fa
+size 237532
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png
index 9eafa608c8..e189b12ae7 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f01f2c280b0aca85280f969cbb99e850f23806554fe8698f85863fc9294161bc
-size 4095615
+oid sha256:5c8b45705e72df6643b633f93dc9ed0ae6d353a73936bbe10e5180e5e054b3f1
+size 4115929
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png
index 9b952d6ee2..ab91405bed 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:478293bfbfaa6466508fa4fa695d6b3735a1986d82a104d99d33e57a2365fc15
-size 490946
+oid sha256:c3234393a49b59ddeea97371351ec432dfa4b068937b253858b2d5b4419c5e85
+size 492266
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png
index 0256fc3721..1384227595 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:463367e003ecae3012be6e80949d3574599f3d0f8bae05b1fc3d8cb65638835a
-size 69873
+oid sha256:4690c7114fec502748f3686d009ba3abd1ea7a927df73f3e3b2cc24326b17ac5
+size 65758
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_not_segmented.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_not_segmented.png
new file mode 100644
index 0000000000..91125c7a9c
--- /dev/null
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_not_segmented.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0643bf59751bacd616d9939d172df5b3a962993ec72a93cc3547d56974b5a15d
+size 471571
diff --git a/tests/UI/specs/UIIntegration_spec.js b/tests/UI/specs/UIIntegration_spec.js
index 9b4706465f..252f57f49d 100644
--- a/tests/UI/specs/UIIntegration_spec.js
+++ b/tests/UI/specs/UIIntegration_spec.js
@@ -698,4 +698,29 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
page.click('a.actionSegmentVisitorLog:visible');
}, done);
});
+
+ it('should not apply current segmented when opening visitor log', function (done) {
+ var url = "?" + widgetizeParams + "&" + generalParams + "&moduleToWidgetize=Live&actionToWidgetize=getVisitorLog&segment=visitCount==2&enableAnimation=0";
+
+ delete testEnvironment.queryParamOverride.visitorId;
+ testEnvironment.save();
+
+ expect.screenshot("visitor_profile_not_segmented").to.be.capture(function (page) {
+ page.load(url);
+
+ page.evaluate(function () {
+ $('.visitor-log-visitor-profile-link').first().click();
+ });
+
+ page.evaluate(function () {
+ $(document).ready(function () {
+ $('.visitor-profile-show-map').click();
+ });
+ });
+
+ page.wait(1000);
+ }, done);
+ });
+
+
});
diff --git a/tests/angularjs/Gruntfile.js b/tests/angularjs/Gruntfile.js
index 3527b5973a..8dc577a407 100644
--- a/tests/angularjs/Gruntfile.js
+++ b/tests/angularjs/Gruntfile.js
@@ -34,7 +34,7 @@ module.exports = function(grunt) {
},
"shell": {
compilePiwikJs: {
- command: "sed '/<DEBUG>/,/<\\/DEBUG>/d' < piwik.js | sed 's/eval/replacedEvilString/' | java -jar yuicompressor-2.4.2/build/yuicompressor-2.4.2.jar --type js --line-break 1000 | sed 's/replacedEvilString/eval/' | sed 's/^[/][*]/\\/*!/' > piwik-min.js && cp piwik-min.js ../piwik.js",
+ command: "sed '/<DEBUG>/,/<\\/DEBUG>/d' < piwik.js | sed 's/eval/replacedEvilString/' | java -jar yuicompressor-2.4.7/build/yuicompressor-2.4.7.jar --type js --line-break 1000 | sed 's/replacedEvilString/eval/' | sed 's/^[/][*]/\\/*!/' > piwik-min.js && cp piwik-min.js ../piwik.js",
options: {
execOptions: {
cwd: 'js'
diff --git a/tests/javascript/index.php b/tests/javascript/index.php
index 34a8d252f5..f8cf328249 100644
--- a/tests/javascript/index.php
+++ b/tests/javascript/index.php
@@ -28,8 +28,6 @@ $targetFileName = '/tests/resources/piwik.test.js';
$sourceFile = PIWIK_DOCUMENT_ROOT . TrackerUpdater::DEVELOPMENT_PIWIK_JS;
$targetFile = PIWIK_DOCUMENT_ROOT . $targetFileName;
-file_put_contents($targetFile, '');
-
$updater = new TrackerUpdater($sourceFile, $targetFile);
$updater->setTrackerFiles(new JsTestPluginTrackerFiles());
$updater->checkWillSucceed();
@@ -611,6 +609,119 @@ function PiwikTest() {
}
});
+ test("Piwik plugin methods", function() {
+ expect(26);
+
+ // TESTS FOR retryMissedPluginCalls
+
+ // these 2 calls should fail because they do not exist
+ _paq.push(['MyCustomPlugin::myCustomStaticMethod']);
+ _paq.push(['MyCustomPlugin::myCustomStaticMethod2']);
+ _paq.push(['MyCustomPlugin.myCustomMethod']);
+
+ // now we define these method
+ var called = 0;
+ var calledStatic = 0;
+ var calledStatic2 = 0;
+ Piwik.MyCustomPlugin = {myCustomStaticMethod: function () { calledStatic++; }};
+ var asyncTrackers = Piwik.getAsyncTrackers();
+ var i = 0;
+ for (i; i < asyncTrackers.length; i++) {
+ asyncTrackers[i].MyCustomPlugin = {myCustomMethod: function () { called++; }};
+ }
+
+ // now we retry those calls
+ Piwik.retryMissedPluginCalls();
+
+ strictEqual(1, called, "retryMissedPluginCalls, successfully executed non static method once it is defined");
+ strictEqual(1, calledStatic, "retryMissedPluginCalls, successfully executed static method once it is defined");
+ strictEqual(0, calledStatic2, "retryMissedPluginCalls, should not have executed not defined method");
+
+ // defining another method
+ Piwik.MyCustomPlugin.myCustomStaticMethod2 = function () { calledStatic2++; };
+
+ // retrying again should not call the missed plugin calls again because they are now defined
+ Piwik.retryMissedPluginCalls();
+
+ strictEqual(1, called, "retryMissedPluginCalls, should not execute a resolved missed call again");
+ strictEqual(1, calledStatic, "retryMissedPluginCalls, should not execute a resolved missed call again");
+ strictEqual(1, calledStatic2, "retryMissedPluginCalls, successfully executed static method 2 once it is defined");
+
+ // calling them now that they are defined increases the counter immediately
+ _paq.push(['MyCustomPlugin::myCustomStaticMethod']);
+ _paq.push(['MyCustomPlugin.myCustomMethod']);
+
+ strictEqual(2, called, "executing static plugin method works directly if defined");
+ strictEqual(2, calledStatic, "executing plugin method works directly if defined");
+ strictEqual(1, calledStatic2, "a method is only executed when actually pushed");
+
+ // TESTS FOR events
+ var calledEvent1 = 0;
+ var calledEvent1_1 = 0;
+ var calledEvent2 = 0;
+ var passedArgs = null;
+
+ function callEvent1() { calledEvent1++; }
+ function callEvent1_1() { calledEvent1_1++; }
+ function callEvent2(arg1, arg2) { calledEvent2++; passedArgs = [arg1, arg2]; }
+
+ Piwik.on('myEvent1', callEvent1);
+ Piwik.on('myEvent2', callEvent2);
+
+ Piwik.trigger('myEvent1', []);
+ strictEqual(1, calledEvent1, "event, should trigger event and call handler callEvent1");
+
+ Piwik.trigger('myEvent1', []);
+ strictEqual(2, calledEvent1, "event, should trigger event whenever it is called and call handler callEvent1 again");
+ strictEqual(0, calledEvent2, "event, should only execute event listeners that listen to that triggered event");
+
+ Piwik.trigger('myEvent2', ['arg1', 'arg2']);
+ strictEqual(2, calledEvent1, "event, should not have executed that event because it has different name");
+ strictEqual(1, calledEvent2, "event, should have executed different handler this time");
+ deepEqual(['arg1', 'arg2'], passedArgs, "event, should be possible to pass arguments to events");
+
+ Piwik.on('myEvent1', callEvent1_1);
+
+ Piwik.trigger('myEvent1', []);
+ strictEqual(3, calledEvent1, "event, should call multiple event handlers when many listen to same event");
+ strictEqual(1, calledEvent1_1, "event, should call multiple event handlers when many listen to same event");
+
+ Piwik.off('myEvent1', callEvent1);
+
+ Piwik.trigger('myEvent1', []);
+ strictEqual(3, calledEvent1, "event, it is possible to remove an event listener and it will not be executed anymore");
+ strictEqual(2, calledEvent1_1, "event, should still call other event listeners when others were removed");
+
+ /**
+ * TESTING DOM
+ **/
+ var loaded = false;
+ var ready = false;
+ var customEvent = false;
+
+ strictEqual('object', typeof Piwik.DOM, "Piwik.DOM object is defined");
+ strictEqual('function', typeof Piwik.DOM.onReady, "DOM.onReady method is defined");
+ strictEqual('function', typeof Piwik.DOM.onLoad, "DOM.onLoad method is defined");
+ strictEqual('function', typeof Piwik.DOM.addEventListener, "DOM.addEventListener method is defined");
+
+ Piwik.DOM.onLoad(function () {
+ loaded = true;
+ });
+ Piwik.DOM.onReady(function () {
+ ready = true;
+ });
+
+ strictEqual(true, ready, "onReady, DOM should be ready");
+ strictEqual(true, loaded, "event, DOM should be loaded");
+
+ Piwik.DOM.addEventListener(_e('click7'), 'myCustomEvent', function () {
+ customEvent = true;
+ });
+ triggerEvent(_e('click7'), 'myCustomEvent');
+
+ strictEqual(true, customEvent, "DOM.addEventListener works");
+ });
+
test("Query", function() {
var tracker = Piwik.getTracker();
var query = tracker.getQuery();
diff --git a/tests/resources/Updater/testpluginUpdates/0.5.php b/tests/resources/Updater/testpluginUpdates/0.5.php
new file mode 100644
index 0000000000..944dcffaf2
--- /dev/null
+++ b/tests/resources/Updater/testpluginUpdates/0.5.php
@@ -0,0 +1,12 @@
+<?php
+namespace Piwik\Plugins\testpluginUpdates;
+
+use Piwik\Updates as PiwikUpdates;
+
+class Updates_0_5 extends PiwikUpdates
+{
+ function doUpdate(\Piwik\Updater $updater)
+ {
+ throw new \Piwik\Exception\MissingFilePermissionException('make sure this exception is thrown');
+ }
+}
diff --git a/tests/resources/extractSearchEngineInformationFromUrlTests.yml b/tests/resources/extractSearchEngineInformationFromUrlTests.yml
index 879ba91707..9f916bbbe3 100644
--- a/tests/resources/extractSearchEngineInformationFromUrlTests.yml
+++ b/tests/resources/extractSearchEngineInformationFromUrlTests.yml
@@ -346,25 +346,57 @@
engine: 'Yahoo! Japan Images'
keywords: 'to heart logo'
-- url: 'http://video.search.yahoo.co.jp/search?tt=c&ei=UTF-8&fr=sfp_as&aq=-1&oq=&p=piwik&meta=vc%3D'
+- url: 'http://image.search.yahoo.co.jp/search?ei=Shift_JIS&fr=top_ga1_sa&p=%8CN%82%CC%96%BC%82%CD%81B'
+ engine: 'Yahoo! Japan Images'
+ keywords: '君の名は。'
+
+- url: 'http://image.search.yahoo.co.jp/search?ei=EUC-JP&fr=top_ga1_sa&p=%B7%AF%A4%CE%CC%BE%A4%CF%A1%A3'
+ engine: 'Yahoo! Japan Images'
+ keywords: '君の名は。'
+
+- url: 'http://video.search.yahoo.co.jp/search?tt=c&ei=UTF-8&fr=sfp_as&aq=-1&oq=&p=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82&meta=vc%3D'
engine: 'Yahoo! Japan Videos'
- keywords: 'piwik'
+ keywords: '君の名は。'
+
+- url: 'http://video.search.yahoo.co.jp/search?tt=c&ei=Shift_JIS&fr=sfp_as&aq=-1&oq=&p=%8El%8C%8E%82%CD%8CN%82%CC%89R&meta=vc%3D'
+ engine: 'Yahoo! Japan Videos'
+ keywords: '四月は君の嘘'
-- url: 'http://search.yahoo.co.jp/search?ei=UTF-8&p=piwik'
+- url: 'http://video.search.yahoo.co.jp/search?tt=c&ei=EUC-JP&fr=sfp_as&aq=-1&oq=&p=%BB%CD%B7%EE%A4%CF%B7%AF%A4%CE%B1%B3&meta=vc%3D'
+ engine: 'Yahoo! Japan Videos'
+ keywords: '四月は君の嘘'
+
+- url: 'http://search.yahoo.co.jp/search?ei=UTF-8&p=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82'
engine: 'Yahoo! Japan'
- keywords: 'piwik'
+ keywords: '君の名は。'
+
+- url: 'http://search.yahoo.co.jp/search?ei=Shift_JIS&p=%8El%8C%8E%82%CD%8CN%82%CC%89R'
+ engine: 'Yahoo! Japan'
+ keywords: '四月は君の嘘'
+
+- url: 'http://search.yahoo.co.jp/search?ei=EUC-JP&p=%BB%CD%B7%EE%A4%CF%B7%AF%A4%CE%B1%B3'
+ engine: 'Yahoo! Japan'
+ keywords: '四月は君の嘘'
-- url: 'http://search.auone.jp/?q=piwik&sr=0001&ie=UTF-8&lr='
+- url: 'http://search.auone.jp/?q=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82&sr=0001&ie=UTF-8&lr='
engine: 'auone'
- keywords: 'piwik'
+ keywords: '君の名は。'
+
+- url: 'http://search.auone.jp/?q=%8El%8C%8E%82%CD%8CN%82%CC%89R&sr=0001&ie=SJIS&lr='
+ engine: 'auone'
+ keywords: '四月は君の嘘'
-- url: 'http://search.nifty.com/websearch/search?select=2&ss=up&cflg=%E6%A4%9C%E7%B4%A2&chartype=&Text=%E3%82%A6%E3%82%A7%E3%83%96%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E7%B4%84'
+- url: 'http://search.auone.jp/?q=%BB%CD%B7%EE%A4%CF%B7%AF%A4%CE%B1%B3&sr=0001&ie=EUC&lr='
+ engine: 'auone'
+ keywords: '四月は君の嘘'
+
+- url: 'http://search.nifty.com/websearch/search?select=2&ss=up&Text=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82'
engine: 'Nifty'
- keywords: 'ウェブ検索結果約'
+ keywords: '君の名は。'
-- url: 'http://videosearch.nifty.com/search?kw=piwik'
+- url: 'http://videosearch.nifty.com/search?kw=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82'
engine: 'Nifty Videos'
- keywords: 'piwik'
+ keywords: '君の名は。'
- url: 'http://www.claro-search.com/?q=logiciels+pour+%C3%A9crire+en+japonais+avec+windows+xp&s=web&as=0&rlz=0&babsrc=SP_clro'
engine: 'Claro Search'
@@ -378,21 +410,29 @@
engine: 'Google'
keywords: 'ふたりはプリキュアmaxheart'
-- url: 'http://cgi.search.biglobe.ne.jp/cgi-bin/search-st?search=%E6%A4%9C%E7%B4%A2&web_s.x=1&q=piwik&x=0&y=0&ie=utf8'
+- url: 'http://cgi.search.biglobe.ne.jp/cgi-bin/search-st?q=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82&ie=utf8'
engine: 'Biglobe'
- keywords: 'piwik'
+ keywords: '君の名は。'
+
+- url: 'http://cgi.search.biglobe.ne.jp/cgi-bin/search-st?q=%8El%8C%8E%82%CD%8CN%82%CC%89R&ie=sjis'
+ engine: 'Biglobe'
+ keywords: '四月は君の嘘'
+
+- url: 'http://cgi.search.biglobe.ne.jp/cgi-bin/search-st?q=%BB%CD%B7%EE%A4%CF%B7%AF%A4%CE%B1%B3&ie=euc'
+ engine: 'Biglobe'
+ keywords: '四月は君の嘘'
- url: 'http://images.search.biglobe.ne.jp/cgi-bin/search?q=%E3%82%B5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%AF%EF%BC%88'
engine: 'Biglobe Images'
keywords: 'サーリンク('
-- url: 'http://www.so-net.ne.jp/search/web/?query=piwik&from=gp&kz=&suggest=gp_suggest_on'
+- url: 'http://www.so-net.ne.jp/search/web/?query=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82&from=gp&kz=&suggest=gp_suggest_on'
engine: 'So-net'
- keywords: 'piwik'
+ keywords: '君の名は。'
-- url: 'http://video.so-net.ne.jp/search/?kw=piwik&from='
+- url: 'http://video.so-net.ne.jp/search/?kw=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82&from='
engine: 'So-net Videos'
- keywords: 'piwik'
+ keywords: '君の名は。'
- url: 'http://search.seesaa.jp/%E6%97%A5%E6%9C%AC%E3%83%86%E3%83%AC%E3%83%93%E6%94%BE%E9%80%81%E7%B6%B2/index.html'
engine: 'SeeSaa'