diff --git a/CHANGELOG.md b/CHANGELOG.md index f5aa2e505f11497b4f19edfeb20a07200bf2398a..53bbd03c190b66d006e5eec9f7217639b5618bb7 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 60252119613bdab2d4baa4a6f259130d300687b6..d1164b4d32d89d3f7e8effa2734100ec86a190ba 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 36e04970aafd2838db6ebe744c8609320db061d9..cd10f72370e1f28caaf549ca6537637c4d875b05 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 28c90cb15cb23bdec77b2962109e480656444245..325b529aa37f68147b0858a94e11288ef90709f9 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 01fa144a5cd89d7cddaecc0dcb33c82a2ed178de..f9a95feed0ca3a1f4b5d559cfe8d513c1ddb5860 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/Db/Adapter.php b/core/Db/Adapter.php index 5363d1538371d73b94233338faaf1763ebc57e84..a3ceebe6cf91d4c97f24eb4da4a6b2f0e14ba3ad 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 648015730108aa4a0b3f01fd2f0bdee7e1fe6231..82ef4f2fec72c00a40840d340fa26a8ad3a6618a 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 7cc9fe26f533978e44079ca28819e6bc70d0e322..90e325bc8e14a7f0a99ba5f15738104e6c44a79a 100644 --- a/core/Plugin/Archiver.php +++ b/core/Plugin/Archiver.php @@ -59,6 +59,11 @@ abstract class Archiver */ private $processor; + /** + * @var bool + */ + private $enabled; + /** * Constructor. * @@ -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 89fc082199df311d69775ca0c45a109ec8858f6f..092a963b8adf7406d4513bc3153a0667a31af036 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 c985db88e75541294aa53616a79c57de5340c8cb..ffeea91b6a85ce2ff021333d102f04d445562c92 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 a644d4479f1e7e293f3183e8e7128045e581f891..303d45c23b75ebb58e8b885fbf935792e510adb0 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 581d6609a570af45bc04bff8689d88f328efce8a..d53280f4da599599fe82447d4a9224c0acacad3e 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 0000000000000000000000000000000000000000..4d28615f6f32af39e367589ad6bee56afb3a39c6 --- /dev/null +++ b/core/Updates/2.16.3-b3.php @@ -0,0 +1,45 @@ +<?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; + +/** + * 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) + { + $timezone = Site::getTimezoneFor($idSite); + try { + $dateTimeZone = new \DateTimeZone($timezone); + } catch(\Exception $e) { + return; + } + $timeZoneDifference = -ceil($dateTimeZone->getOffset(new \DateTime()) / 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 0000000000000000000000000000000000000000..d2a394194ee4203818b5be6c7b28de9533757ec6 --- /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 0a2cbabb67a9bea507b7ca6a6dc33068227f0ef9..0c9b379a6741d8b0df095ddef48d9a25794057df 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. @@ -145,6 +146,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. * @@ -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 6e07cbdd2bd5186adf0484e31ed9eaf4442e3b41..59f0defc99cbb48b547678cebe1e9d32a349ac87 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 */ @@ -6604,6 +6625,44 @@ if (typeof window.Piwik !== 'object') { Piwik = { 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. * @@ -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 548d87f62ea15c21e348a01b5250dda58c3a04ca..1a04b67ec5221cc317aac3971fd1cb89f405c7a4 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+=">_ms="+bU}else{if(g&&g.timing&&g.timing.requestStart&&g.timing.responseEnd){cG+=">_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+=">_ms="+bV}else{if(g&&g.timing&&g.timing.requestStart&&g.timing.responseEnd){cH+=">_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 095cc49a14866c85cfa7e119e88f0fb3fbe4b6f0..00aea52f6ea7f0962a4c074154f91868692e1948 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 8dc19b7a06dd98eac3e27bdb0a31dd016140cc0c..7de9883818213998222cc12843313fe9510d92bf 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 7612c7c81e6d8fc6734181bfce7b8a62774e6f7b..b6ca374ee9a47dc0f9e659249924befde6f3e0ca 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/misc/log-analytics b/misc/log-analytics index 2878508f66c10d998c9e4e0bc276988b3755cde1..9c4f36e66fc9b82a13643aae7d3310bfbfc731f6 160000 --- a/misc/log-analytics +++ b/misc/log-analytics @@ -1 +1 @@ -Subproject commit 2878508f66c10d998c9e4e0bc276988b3755cde1 +Subproject commit 9c4f36e66fc9b82a13643aae7d3310bfbfc731f6 diff --git a/piwik.js b/piwik.js index 548d87f62ea15c21e348a01b5250dda58c3a04ca..1a04b67ec5221cc317aac3971fd1cb89f405c7a4 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+=">_ms="+bU}else{if(g&&g.timing&&g.timing.requestStart&&g.timing.responseEnd){cG+=">_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+=">_ms="+bV}else{if(g&&g.timing&&g.timing.requestStart&&g.timing.responseEnd){cH+=">_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/lang/es.json b/plugins/API/lang/es.json index e35219972b62f507b4cf8003be01d142eddaa15c..ced03941ee852366f5061774d5d57258f42d252f 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 8e9e616b91c4d1d4cfaf8bd4c5e8bcf06d128e8f..dd681977f238ca990dac24581575950623b99d03 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 7f3ef19ad1acb542332f7fe298e675133989051a..6b67b9a092987fd08d186e11b7c93cde3f18193a 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 0fed0cf397aff4d26ee18e59e2c814e59c699a93..c1d5352153c31904d6b0626f616438fe2885a24e 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 739ec1ba1d32fe26052921568cdbf137a28a052d..93759eddff0a4681eb484def5276029fe49772e4 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 9c29b5e23b423dec0b921d714a3e0c95742775db..14531eb745a9538631caa4bcc1c8fc132816b999 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 67631c79bff8323ca6a3ef3eb43eae64bf8e18ed..d225a74971f0a8d70583c050b6ad5034129298bc 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 9ff7c4b6676c8e00b2b9ecd5c6e62031b6a17c4b..4f19b725e11826e326fb6cc7d8b4742bfa3a211f 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 958f51e4683432d4408209c19eb212202585f3a2..9a45fa2b168ceb55c5803e2541329004a84a69df 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 bd1ed5e6181daf88f6b360a8f0e8a8451dbc002f..93cf57e7c5f852ee3ee28e35d9d0afbee60447e5 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 72ef852c81f2f1c5f5cd8f32b0e542ea93773713..cfdaee35f5b28e6ad7fe7dbcac9c641816c97089 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 019965a958367f8ef678c71617b08140919c9473..033399e196a2b807590f56afd9d0b61f9e5287f2 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 cab25251456c66ba15a32260b1413995486c8695..9034c9eef5dc56108b996204997e6458c5cb6a56 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 2834432e70bb3e2a242174bcaadc7c81224e170f..a484f9164f40699d9bec3edc86b91292adbd2cd4 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 05b774c36061dcaa9cab68caf2c4fc2fa3e91f03..eebc3d843b9ee0eb8f61284ffb77197b2e01df5c 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 ed140d27bc40d9589b6e184b84b3cd46d09e4d5a..ab4f7b8622ac627676337a8e4d7e6f883bdea1df 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 0000000000000000000000000000000000000000..5d30748a94503f18f374f646f5d01eb7ca9c6248 --- /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 b0407c02ae5049438312d66385377dee10e95bb3..b4a91d7d0a10e69916a7db1cecbbffced040e416 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 4c579ad211ba43ad58ac17bd5a60d47220731fee..be2c105e93e9f7ea119593da7c8efead0bc44353 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 4e3f20ff4238f1aad976852c7c8f5bba0ad25eb2..a39dc172dcfe18fb0df79b67cdb3c6e1c2738c12 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 6912dba3356e38683849ad8346e5b006dac4b592..316f325690627848f10f6c6127239e984182d5cc 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 8086f16b36ade4b7147f69c3655adeac00868dbd..ad6d230ce9695abf466d2c7afc3e08a483686fdd 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 1fcd436d79e761469fa357b2cf9cd545ad7757bd..54242c23ae9db786fbbe667781c3a58915391422 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/CustomDimensions b/plugins/CustomDimensions index 096c2707dd0ed9818bbfd7bed4774f54d6810835..a6bdbaef0040f00e34d344231da7773048830262 160000 --- a/plugins/CustomDimensions +++ b/plugins/CustomDimensions @@ -1 +1 @@ -Subproject commit 096c2707dd0ed9818bbfd7bed4774f54d6810835 +Subproject commit a6bdbaef0040f00e34d344231da7773048830262 diff --git a/plugins/CustomPiwikJs/API.php b/plugins/CustomPiwikJs/API.php new file mode 100644 index 0000000000000000000000000000000000000000..dc028e1de990cccee80af512ec84a8d608259401 --- /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 70754bc20f073e50babc053e9bc7404a45dd7f30..1bdbd7e5f3f5d56c33fa0a469dab26674f33104a 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 79a93e74371b901647c7fae44586c3feaf85a0f3..03d874e61d588a7cd51760f5950c8b4b054eac6f 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 0000000000000000000000000000000000000000..f793e430fa968b1f90f466fe2af19cb7d7f0a52a --- /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 0000000000000000000000000000000000000000..7aa50965a5fb8abbb1ec262221d8ffb26db0cb34 --- /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 0000000000000000000000000000000000000000..7a3c1c1aaa253ca95cd39ba39000d4a70e04c543 --- /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 0000000000000000000000000000000000000000..89f6ed78cce100451a9f41d1d490b41b3cfcbddf --- /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 0000000000000000000000000000000000000000..84853489f6ef5b734837d3e70dd19ecdfa53fd78 --- /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 0000000000000000000000000000000000000000..e568140ece71b6404a1a2684894e5fbc6354e80d --- /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 0000000000000000000000000000000000000000..d1fce33e4c811bee4f90fa3227f1e32f8b826b79 --- /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 4d96bd6478df5e9fa2f5b76f15f1a8b4fbe4372e..aa8cee9c5d9ec62f06384a611d4203b1e961158f 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 240638c5e932968daa031379574a9b57f1cc2a42..58650adf7e66e8a233e84dc49ed161a263162815 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 012d4797a6a96f22448b95ec4ebdd96f67a651fa..fde28a873dee355d0655f299e754f0e8bceb3f96 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 e2ded0aa2b3369d03927a5ab36c909556badd38a..86cf3ec2cd27b60482382f3331b6b46d2a3c8a1e 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 115de91a27ffc34c8a24fea5b359d1c2a41c94e2..a8b8499033e893c3eb33ea4a2c87784c2dc83d8d 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 9a4de058ba63e9dfe2cd01c95873c6301949e35d..9863f35f8572cb609607be3141325a62d11d5af7 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 0000000000000000000000000000000000000000..3793481bb548db54c55973077b61c27b1f4f6df5 --- /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 0000000000000000000000000000000000000000..854631896a5fae960eaa2c270e0ebcd1de7e32c2 --- /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 c9c3266859c38dbc2479d8367864afc9ea0a3e28..fa70e946c878b73eeda411feec78cf30a6970eec 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 0000000000000000000000000000000000000000..dde17aa5cc2d230aaaf2f523155e85e0b059aab4 --- /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 0000000000000000000000000000000000000000..70135e8e6a50de0468ef81f064000b7ef1b8eaf4 --- /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 0000000000000000000000000000000000000000..854631896a5fae960eaa2c270e0ebcd1de7e32c2 --- /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 de7cfecaa110b5c4ce61f9f35cdfc580ff031fc5..0cb889be3559c9894d92a9fed85f93b41716c2ac 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 0000000000000000000000000000000000000000..dde17aa5cc2d230aaaf2f523155e85e0b059aab4 --- /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 0000000000000000000000000000000000000000..70135e8e6a50de0468ef81f064000b7ef1b8eaf4 --- /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 3cd43a1eb809b6358e98efc75c2e092f6b83a2c9..415390b5a0b63fa0b5c52389b407038ca480af06 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 043c6427805d29f3bbfdd0e84fcc306df30a1950..a4e07c8a6516a965f2f5a53d5a7e0afe75348975 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 f2688167614014b6302146fcf4aac87f479367ef..0b0a28fc40cb577511161870b663b13abe44d119 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 d8c0dcb091dc8fd209eea46abb461f39553a3904..be3da50bb90419b3025ebab6f0856d8d117ed22c 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 70abe1a1b86e5f3ebd229bf6d9ad9ac9097f8325..ba78860a1bd617b84c22fc0709a7e0ee223b6848 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 28050912eb74438c130326d6ff05bca38d84be02..301aeec2a4dab66318c1509e9d5959691224cd62 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 af46dc7000dec1b259185fffd06001957ab566a2..fca1fc76aaa311393b76cc447f441452d753482d 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 3524805dd8f53910566ae9566179d020d7e548a5..604695bcec296273c68217e83997697799f7943f 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 c5bea438af9ceac1058a9af84ab4b00b405ee1d2..38cf21765dcf7bdabe75a8b26923ea787309ded5 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 dfd02688b6846ce03e715d7e2d529bd4351c453d..495242ead6773fb9383cd66cf06879bf00ba2b96 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 ec597a1b5eebb2ae6aeeb8ace5484f39502f46bb..79ee9ce39164dae81310f344681c537a94e0d271 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 1ba717c60b2c77107dd8f10603420b0d7990affd..88f8d5975a03969ef47ad2796f83aca28eeed7dc 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 c46984e5ce723dcc926989dcf06c90793004a148..4cc1ac823e8e7b06c5d813c040d2d3dc433114fd 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 @@ -317,6 +319,42 @@ function ajaxHelper() { this.errorElement = element; }; + /** + * 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) @@ -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 similarity index 66% rename from plugins/Morpheus/templates/javascriptCode.tpl rename to plugins/Morpheus/templates/javascriptCode.twig index 18483dd09d54dd002f746dcd5283c13abb2b31aa..c18d850d345d988bf24a3e1731965e873f5dfeff 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 a58faed74e24a23d7eed98c6e53fc57e58a67476..d42b209a910b420be7e06909c481268c23eced71 100644 --- a/plugins/ScheduledReports/Controller.php +++ b/plugins/ScheduledReports/Controller.php @@ -26,7 +26,11 @@ class Controller extends \Piwik\Plugin\Controller $view = new View('@ScheduledReports/index'); $this->setGeneralVariablesView($view); - $view->countWebsites = count(APISitesManager::getInstance()->getSitesIdWithAtLeastViewAccess()); + $siteTimezone = $this->site->getTimezone(); + $dateTimeZone = new \DateTimeZone($siteTimezone); + + $view->timeZoneDifference = $dateTimeZone->getOffset(new \DateTime()) / 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 df6744f673eb96a14a69b6d39230a0ea3ca158b2..b85bbb7621a186514cf6bbb03e2519eb4cf7b512 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 be61e0d793d68ebc0bc150d7507aaf0d1ac07da9..44a13e1b57cd026dd275b9395f4e6b748e11b839 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 ed50d953148e42b9cf0d46e12ed3d3a4b68747ee..b0de00ddfef6d18738fd2d40cdb1322661a464a7 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,11 @@ var self = this; + this.reportHours = []; + for (var i = 0; i < 24; i++) { + this.reportHours.push({key: i + '', value: i + ''}); + } + function scrollToTop() { piwikHelper.lazyScrollTo(".emailReports", 200); @@ -33,6 +38,15 @@ } } + function adjustHourToTimezone(hour, difference) { + return '' + ((24 + parseInt(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 +66,9 @@ resetParameters(report.type, report); } + report.hour = adjustHourToTimezone(report.hour, timeZoneDifference); + updateReportHourUtc(report); + $('[name=reportsList] input').prop('checked', false); var key; @@ -97,6 +114,10 @@ piwikHelper.refreshAfter(2); } + this.updateReportHourUtc = function () { + updateReportHourUtc(this.report); + }; + // Click Add/Update Submit this.submitReport = function () { var idReport = this.editingReportId; @@ -108,7 +129,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 1eea0758c136de04ba31323abb11c33393d8a5e5..cb0eaca7156125be7c5ae62d1bf8217c55e61237 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 5c5ea4b5ecebf8d438dcdf15d89a05e22b0c82e3..10f56acac4b4e4a15d86baaf78a6a272b1655620 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 3b53fb39873aada848440e2badcfed6ad35a5297..f97c48120242356a93f6112b461f8e6b42bde207 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 53b295f10791fc408f4639e2f86ecdb3c284a5e7..7e0f117781bef778b4c81e22ec1961c337cd83a8 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 27cde7ae658eb3d41a7b2366172d472bd8b10a69..ac7840337ae73e22488ce6a60f5ffdfc72fb40eb 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 1ba11502e6a6e4e9fde3f2c89ffed0dd1d8b2bf3..2455101a0d4f4da339db5a0e18373b50e44979af 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 5062ae1569a91aabf6f30b6780cd1a0f08829667..8c3e86ba300747559ae110ba12c35c640995a359 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 434f0d5815b314ddaad975c0b94846c78f7c41b9..703e87b04984c0b583ac10560f34fbf9105dbf95 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 cd5fed6a05ba37539857169e0acffc421b36ef4a..4a82e6598624c523183719537f8458af949d42da 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 98b725a25a6427324249d7fd1667ebc2cbd191b1..904563e8a4eeb386efa1c390403a1a2c0e538d9b 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 fb5557dfb77b03c2c86858e89764d017d51f97c0..57277f127bfd1a02585232dbc2b950e27dadbd95 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 0000000000000000000000000000000000000000..45b4c613f959cacf76cc56fc7b2d57ea93a3075e --- /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 cd2a714ab21167082e9f6e1d081a684b8e8201a7..fc3f12d97942fe18094c57686e28be6e10db7e36 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 0000000000000000000000000000000000000000..0b3c0a35554a2943135d6ef0fc33835cd4177454 --- /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 06f4bb5916b2e92458113c5e85536608487917be..c8bce62d517200830163f3a45c93b07a22157315 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 = "<!-- Piwik --> +<script type="text/javascript"> + var _paq = _paq || []; + _paq.push([\"setDocumentTitle\", document.domain + \"/\" + document.title]); + _paq.push(['trackPageView']); + _paq.push(['enableLinkTracking']); + (function() { + var u="//localhost/piwik/"; + _paq.push(['setTrackerUrl', u+'piwik.php']); + _paq.push(['setSiteId', '1']); + + })(); +</script> +<script type='text/javascript' src="//localhost/piwik/piwik.js"> +<noscript><p><img src="//localhost/piwik/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript> +<!-- End Piwik Code --> +"; + + $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 92baae429eeb964867d26822e5a12542044f6e10..d78e65cedaa894e361416ead59574577e62ccf52 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 aeee6548484294cfa59309370a98fafb8dbaf023..a4bec9f93c8ecaae157c80212898b4f220fcba32 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 445b7422117eeb0e0d007329a31f8ff73bed1dbe..7aceeda4db744976c3384c73a2d801e666475641 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 0b56a1fbd52979f051338fe21b345789a5687132..79b9cb81e5f9bb57980a086424c46273d09f918c 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 65ae232e68d46289bc59928dc3483d5a232c3781..f7a5fb831c424cee6b3dd881902531e1246bc78d 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 65ae232e68d46289bc59928dc3483d5a232c3781..f7a5fb831c424cee6b3dd881902531e1246bc78d 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 572b560a01412a2cda2d374ca79aa94034609170..3c677f06fd794808375afa8dd5c5e252c46ac82e 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 ---> SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED <---</eventCategory> <eventAction>event action Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---> SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED <---</eventAction> <eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---> SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED <---</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> @@ -1355,36 +1355,12 @@ <visitIp>111.1.1.1</visitIp> <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 572b560a01412a2cda2d374ca79aa94034609170..3c677f06fd794808375afa8dd5c5e252c46ac82e 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 ---> SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED <---</eventCategory> <eventAction>event action Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---> SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED <---</eventAction> <eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---> SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED <---</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> @@ -1355,36 +1355,12 @@ <visitIp>111.1.1.1</visitIp> <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 ad3603d5f9b3fac8ff2cb37275ab63f99c2db589..c228c82177052384995e61a3d110a734ecc1e183 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 e7bfae099058c9a66566f50a2c46e3667becabd5..9fb22e1d378c29ce469f86963cfcf705ae05ed51 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 f20b1a9b27b46c0368c5292a932a177fa7b16b0d..d53b33b8736ccf936677752c96232f7417a32b14 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> @@ -293,6 +294,11 @@ <a href="#UserCountry_getCity" style="text-decoration:none; color: rgb(13,13,13);"> City </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);"> @@ -323,11 +329,6 @@ <a href="#VisitFrequency_get" style="text-decoration:none; color: rgb(13,13,13);"> Returning Visits </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);"> @@ -338,21 +339,11 @@ <a href="#DevicesDetection_getBrand" style="text-decoration:none; color: rgb(13,13,13);"> Device brand </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);"> @@ -363,6 +354,16 @@ <a href="#DevicesDetection_getOsVersions" style="text-decoration:none; color: rgb(13,13,13);"> Operating System versions </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);"> @@ -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'> 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'> 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'> 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'> 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'> 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'> 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'> 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'> 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'> 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'> 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,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAPsUlEQVR4nO3dz48k10EH8Lezszv7e2Z6fm1YsmR3II5NUGTDZsGxnTiJsMQPo+SCUC6IcAHCIUIQOEAWJJIDUXxBCCH+huQAKEhBYJxEIrFytXzprBAZO2s7u97s7/HODIea7S33j+r69Xp6qj6fU3VP1atXb6q7vl1Vr96BnZ2dAAAwzsxeVwAA2B+Gh4b19fUJ1wMAmHJDQoPEAAAM6g8N6+vr3W53T6oCAEyz2fSLoYlhY2Mj/fLKlSunT5/OKPHu3bszMzOHDx+uq4oErRqHVo1Bq8agVWPQqn0+93ffDSF8+Q8fP3l8ZJs8PNNQ1zmGzc3N+/fvVy+HNK0ag1aNQavGoFVj0Kpp97e2H0xk9ansP9OQnk4yxJkzZ9Lz9L0ctLOzMzc3t7y8XKi6ZNOqMWjVGLRqDFo1Bq2a9ta128nEz3/gXMZsD0ND+jSDOxsAoD2uXL2dZzbPaQCAtvvLv/9WCOE3Pzqm+6TQAACEEMLiqSPZMwwPDa5NAEDbLC0czZ7BmQYAIIQQOvOlzjQwhS5evLjXVQCgydY6J7JnmM3+c1RDn1fd+Csj6a1u/MYCMP1u3d5MJuZPzmXPuZehIbTvqNnXl1XXVgD23Jtv30kmDs2Ouf7g8sTkDEaEbrdreDAA9lbvyU5j7fGZhgy9o2nfT/Ohb6aPvsmfBl+OnWfUO70FM2Yb9WZfJQffTxfet5YwesTRPPV0HQSAPL70z/8TQvjt5z4wds4aQsOnP//1/DN/7YVPpV8OHhTTx/jePBlvDr4cPMAPXXxwnlHlZ69rbN1yGlwq/c7GxsYzzzyTXbecdQaAQZ35Mf0tw+QvT1y6dCn9sjsgDBzhRr2Z8Ut61G/6jJcZ5WccffPULafs+hStZ3bhANBn7JOdQi1nGr72wqcuXbp07tzuEBfXrl2bnZ09efLk0JkvX66+wliq3F4wyVsT8qxr6MUOABhlrTP+TEM99zSkzx9sbGzs03HDqhxfJ3lszrmu9J0NogMAQ209GBR7afHY2Jn1npiQUdcsYt9tkFz00UcDgKGuXr+bTBw7cmjszNMYGvoOcn2dC3pv1nusHTyyjnr21Ni65Vw2ZG5F38y9uyBzrktKACCPN3L3twx73uVyVO+Joff35bzpr7TsmyuHzja0bjmXzZhtcOaXXnppVG7I7smZZ0UAtFYyKPZvPfuzeWY+sLOzU+/q9+89DdNMq8agVWPQqjFo1Ri0aiJ5bsLvPv/B55/9ubEzT+PlCQBgksYOip0QGgCg7ZYWhQYAIIfVHP0tg9AAAK3VGxT75PExg2InhAYAaKlef8uxg2InhAYAaKk/+cp/FZpfaACAVsszKHZCaACAVsszvmVCaACAVsvZ3zIIDQDQciv5nuwUhAYAaKft7d1xJNaWjudcRGgAgDZ680F/y7nDeUevFBoAoI3euFpgUOyE0AAAbfTFf/h2COH5j+UaFDshNABAe+XvbxmEBgBos+Xc/S2D0AAAbbaykGt8y4TQAADtlf/JTkFoAIAW6g2KvXAi16DYCaEBAFrnRz++lUwcPFggCQgNANA6f/rVF0MIn7h4ttBSQgMAtFRnvsANDUFoAIDWWhIaAIA8Vop0nQhCAwC01nIn7/iWCaEBAFpqrVPgyU5BaACAtnnjQX/Lw4cOFlpQaACAdnn9rVvlFhQaAKBd/vofvxNC+LWnzhddUGgAgDZaXijWdSIIDQDQToUGxU4IDQDQRisFu04EoQEAWmV7eyeZWF0UGgCA0W7d2R0U+1SRQbETQgMAtMiVq7eTiUKDYieEBgBokT/76oshhKef+OkSywoNANA6JbpOBKEBAFpoZaHwXZBBaACAFirR3zIIDQDQQmtLxQbFTggNANAWW1vbycRpoQEAyPDWtd3+ljMzB0osLjQAQFv8wd9+M5kQGgCA8T7+4bPlFhQaAKBdVjtlbmgIQgMAtM3aUpn+lkFoAIC2WRUaAIAMvUGx37N8olwJQgMAtMLN2/eSiYWTR8qVIDQAQCv0BsUuTWgAgFb4wgv/HUJ48kNnSpcgNABAi6x0ygyKnRAaAKBFyg1VlRAaAKBF1koNip0QGgCgRVadaQAAMmy+s5VMlH6GdBAaAKANfvz2nWTi0Gz5Q7/QAADN90df+mb1QoQGAGiL5548V2VxoQEA2qL0UFUJoQEA2mJ1sVJomE2/WF9f7013u90q5QIA02a1wkMaQjo0rK+vp4NC30sAYJ/a2tpOJqo8DjKkL0+ICADQSDfvvJNMnDoxV6Wc2bFzXL9+/V0rvnnz1KlTGfNvbm7u7OzcuHGjSrXoo1Vj0KoxaNUYtGoMrWrVyz98O5mouL3DQ0P62sRrr732rhVfvpy+9WHQvXv3ZmZmbt26VaVa9NGqMWjVGLRqDFo1hla16t/80yshhF98ZL7vmF5Uf2hIAkH6UsWjjz6anqHv5aCNjY25ubnl5eUq1aKPVo1Bq8agVWPQqjG0rFVfCSGcO3v6kUceqVJKf+8JdzYAQCOtLBytWMLDGyElBgBosJVq/S1DxnMagv4UANAgVQbFTjwMDSICADTPvc37ycRyjZcnAIDm6Q2KffjQwYpFCQ0A0GSf+/J/hBA+8viZ6kUJDQDQfJ1TVa9NBKEBANpgeeFI9UKEBgBovqWFqv0tg9AAAG2wuiQ0AACjbW/vJBOri0IDADDaT27dSyYqDoqdEBoAoLF+76++UWNpQgMANNxzv/K+WsoRGgCg4TqVHyCdEBoAoOGEBgAgl5V5oQEAyKGWhzQEoQEAmurOvd1BsTvONAAAGa5dr21Q7ITQAADNlAyK/fEPn62rQKEBAJpsvo5nQSaEBgBosqWa+lsGoQEAmm1p/khdRQkNANBky3WMb5kQGgCggR4Oit05XleZQgMANND1G7uDYp88friuMoUGAGigz16qc1DshNAAAI3160+fr7E0oQEAGmvhZG1dJ4LQAAAN1lkQGgCAHJYXautvGYQGAGiwlfoe0hCEBgBontSg2C5PAACjfebP/yWZqGtQ7ITQAADN9Mlf/pl6CxQaAKCZFmvtbxmEBgBoqoWTc/UWKDQAQDMtLRytt0ChAQCaqcZBsRNCAwA001pHaAAARrv2k7vJxPFjtQ2KnRAaAKBRPvvF+gfFTggNANBAv/HR9drLFBoAoIE6p2p+SEMQGgCgkRbqfrJTEBoAoJFWFmt+SEMQGgCgkVbq7m8ZhAYAaJLeoNguTwAAWSINip0QGgCgaWofFDshNABA08S4NhGEBgBonqV5oQEAyCHGk52C0AAAzbPSOR6jWKEBAJomxkMagtAAAI1x9fqdZOLo3GyM8oUGAGiI37/07yGEpx4/MzNzIEb5QgMANMr8iSh3QQahAQAaZnF+LlLJQgMANMryfP3jWyaEBgBolOXFKF0ngtAAAA2zuuhMAwAw2r3N3UGx508JDQDAaL/zhd1BsQ/Nxjq4Cw0A0Bwfu/DeeIULDQDQHJ0441smhAYAaI6l+VhdJ4LQAABNshKt60QQGgCgSZYXhAYAIIe1pePxChcaAGDf+/Tnv55MzB2OMih2QmgAgIa48NjpSINiJ4QGAGiITswbGoLQAACNEfUhDUFoAIDGiNp1IggNANAYq52IXSeC0AAA+9329k4ysdpxpgEAGK03KHZnPm5oeFdvzvX19d50t9uNumIAoBaf+Yt/TSYOHox7LuBhaFhfX08Hhb6XAMA0e/JDPxV7FS5PAEATLEXuOhH6Lk/U4o+/8r3aywQAsq0uRhwUOzE+NLz88svpl6+++upjjz0WrT4AQBnXr77+/e9fj7qK8aHhwoULGS8HfeLVu9s7M2fPLFep1n9+939/4f0rS9XuAv23b3U/efF9VUp4/c0bP7xy46kn3lulkFd+8NbmO1tPPHq6SiEvfu8HywtHP/j+91QppK5WffaXzlZ5tvmP3rz5f2/ceFqrpmjVPlq1j1bt06RW3dra+sZ3Llc8Wt29d3+1c+xXP3L+0Gzcuw4O7Ozsdu6s60bIy5cvHzt2bG1trZ4KEkLQqnFo1Ri0agxaNQatWoIbIQGAXB5enuh2u57TAACM8q57GgQFAGCUh/c0AABkcE8DAJCL0ADQCum71qCc+p8IGR7smr07JLLvr6zr7su+lVYvudBW5F9d0b6sY1svUmWKbn62wcUzChz6r6z9hpu9rVK9zTu0kMEjxKhPR5WV5q/P0Bkqrnfw/zLqzYqrSPT9vzI+O5HuD+tVZugm99TeqnU1aZ59MsZ6B+tQ6PBUV5Ums4HRnT9/fqdWSYG9YvvKL/Sy9Eqrl1xoKwqtrlBNxjbX0NKqV6bo5mcbW+2iM1S3t1Wqt3lzFhLpo1e6PtVXOvipH/VmxVUMLbyuz3jpypRYY57ZRn2XxtioPJ+yetdb4ou9ripNsmGjmh36GytJyqNSbbYqoWlU+htbn9qTWtGTAX3zD9Y5pH785U+XY08SDCb3WipTb3uW+H/16tz3/tDTA+ndJmfNS2xgjVWK8cMiu8yxLZPeuozf1nnWlX+ewUqmly33qY+96xZdxWD9y327ljt7kf2vzLl18c6aDF1Xej9MN9So3aPK4SnnnlxLlSbWsLHNhmHPggxlv4trMW31KS3j+F17yXtYmYmZwtHbp7BKFQ3dosls1+AHfD9+6vsMrX+57Sqa2xrzRZrI3j1UaWJG3tMwmS0f/Pm7t/XJWHstV52raMZ+OVj5jGCeZ0vT51HKNUv2L+w9qVJF0xZlSldgSvbzcudcM1RvjaGfozzlT0+TVq9JXdtS4/93Spo3qtn0OeqcCjVxd9gp9L4Z0iUPfn1Pg9jfwtlNOur2mUiViaTETUAVj7tjd9R0BXL+i6f89Ez+K19jCyk6c85dt671TlKVn+ZFN6r0ASyj/feX3iEjIxVlK9qGY/+/1avUJLtnGgq1RZW9OWcrt+1/k9GkQy8rZPx1OuU/wVCj7PL3S9PlN3SLSmxmofkL7boZ+k6b56/ANCuxUfXuk9P5RVrx6urYrZjM57qRe2weQ57TEG/7s0+pZSwVqT51GTybUtcBqdw3fqTKlFYlMYw9UxVK/fqv0iaRqlRRxdWNWrz0p2/P97paTP+XT377aFu63e7EDvw555xYlabfyN4TpS/h9xbsnc/JOFk09F6BwTfH1mdwpUNLrmUrqmxI+s1y52xLXBIqUZmim190KwbfKb1dpQ1WoETh5ZaqvXn7ik3XLftMwOBK8+88JeqTMXOeKDaq/L7LTINvljZ0w/OvosRGFapJ0UXyfLFn7Jx1XfwqUUJdLVnjR69olWI37MQMH3ti2n4lTFt9gOqa+rlu6nZB8BhpACAno1wCk7a/zsfm19Ttgh6hAQDIxeUJACAXoQEAyOX/AS/5f6pTJnZiAAAAAElFTkSuQmCC" + 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"/> @@ -3257,32 +3258,6 @@ </tr> <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;"> @@ -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"/> @@ -3433,32 +3408,6 @@ </tr> <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;"> @@ -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"/> @@ -3713,32 +3662,6 @@ </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;"> - 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;"> @@ -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,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" + 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,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAODUlEQVR4nO3dz29l10EH8DNjz9gZj8f2s589janp2AFKolIlYlLID7VpSyPxo6jdINQFEmUDlEWFoLCAmgXtgqrZIMSCv6FdAApSERRKpbZRhaiUKiycUQND6ok7k+nEM7Yzz2ZxPS9v3s/77g+/N+d+Povo+uXe46N7z9z39Tn33HPq6OgoAAAMcnrUFQAAHgztoWFjY2NjY2MkVQEAxtl9oWFjY2Nra2tUVQEAxtl9oUFiAAB6mRy4x9WrV1t/3N7evnjxYp/99/b2Tp8+ffbs2bxVI1KNRmNvb29mZmbUFWF87e7uTk9PT0xMjLoijKmDg4PDw8Pp6elRVyQqn/mrb4cQvvh7j8/O9PwGL/5ByIODg7t37xZeLNFoNBoHBwejrgVj7eDgoNFojLoWjK+7d++6jRTrbuPw3ka/OZWDexpWV1f7/Njp6OhoampqaWlpYMlU0+7u7uHh4cMPPzzqijC+9vb26vW67ih62dnZ2d/fdxsp0M6N28nGY++91Gc3Uy4BoOq2r99Os5vQAABV92d//Y0Qwq99cMA7F+4bnmi+oSHZMJkCAKpj4cKAZ0vvCw1SAgBU1uL8Q/13MDwBAIQQQm1umJ6GEWp9d/WYdHh4PyYAlbJSO99/h7EIDW1fz2PybT0OdQCAsu3ePn7pxdzsVP89Rz880RkRfFsDwIl54807ycaZyQGpYMQ9Df07FZpjFs19kv07xzI6y2n9pH85zRL6l5m+Mm37BzEIgDHWfLPTQGMxPNFV27d+1+3OH7OVM7DMYQ8czwEXAOj0hb/7VgjhN55/78A9CwgNn/zsV9Pv/JUXPpFmt7Zv2eQP+uSTrt++rTuE3l/eA8tp7panMgMLBIBxU5sbMN8ynHxPw+bm5ubm5kn+xtZhgl7ahiryK7xAACjVwDc7hUJCw1de+MTm5ualS8dLXNy4cWNycnJ2drbrzleu5P+F3TU7ADo7BlIeHgp9FWbhBQJAeVZqJ9XT0Np5cPXq1fSrXHZ+x49Wr8cqx6dAAChQ496i2IsL5wbuPPopl20TEEK3WQkpv3S7djN0Ft55YP8hjAyVSTMmAgAjd/3mXrJxbvrMwJ3HYvZE14mLrR/m+TO9z6zI9PsMW5k0vxQARu5a6vmWIYRTR0dHxf76oYYnqKDd3d3t7e319fVRV4Tx9eqrr66srMzMzIy6IoypnZ2d/f391dXVUVckBskUyF9/7pHf+vj7Bu48+uEJAGC0FmYHT50IQgMAMHBR7ITQAABVt7ggNAAAKSynmG8ZhAYAqKzmotizMwMWxU4IDQBQUc35lgMXxU4IDQBQUX/4pX8dan+hAQAqLc2i2AmhAQAqLc36lgmhAQAqLeV8yyA0AEDF1dO92SkIDQBQTYeHx4tPrSymXedFaACAKnrj3nzLqbNpl7wWGgCgiq5dH2JR7ITQAABV9Pm/+Y8Qwsc/9Ej6Q4QGAKiu9PMtg9AAAFW2lHq+ZRAaAKDK6vOp1rdMCA0AUF3p3+wUhAYAqKDmotjz51Mtip0QGgCgcn74o91kY2JiiCQgNABA5fzRl78eQvjIB9aGOkpoAICKqs0N8UBDEBoAoLIWhQYAII36MFMngtAAAJW1VEu7vmVCaACAilqpDfFmpyA0AEDVXLs33/LsmYmhDhQaAKBaXt/ZzXag0AAA1fIXf/vNEMIvP7M+7IFCAwBU0dL8cFMngtAAANU01KLYCaEBAKqoPuTUiSA0AEClHB4eJRvLC0IDANDb7p3jRbEvDLModkJoAIAK2b5+O9kYalHshNAAABXyx1/+egjh2Sd+IsOxQgMAVE6GqRNBaACACqrPD/0UZBAaAKCCMsy3DEIDAFTQyuJwi2InhAYAqIpG4zDZuCg0AAB97Nw4nm95+vSpDIcLDQBQFb/7l19LNoQGAGCwDz+5lu1AoQEAqmW5luWBhiA0AEDVrCxmmW8ZhAYAqJploQEA6KO5KPa7ls5nK0FoAIBKeOv2frIxPzudrQShAQAqobkodmZCAwBUwude+LcQwlPvX81cgtAAABVSr2VZFDshNABAhWRbqiohNABAhaxkWhQ7ITQAQIUs62kAAPo4eLuRbGR+h3QQGgCgCn705p1k48xk9q9+oQEA4vf7X/ha/kKEBgCoiuefupTncKEBAKoi81JVCaEBAKpieUFoAABSWM7xkoYgNABA9BqNw2Qjz+sgg9AAANF7687bycaF81N5yhEaACBy167vFlKO0AAAkUsWxX7uybWc5QgNAFAJi3PZF8VOCA0AUAn1eaEBAEihnm++ZRAaAKAi8iyKnRAaACBm+wd3k40lwxMAQB/NRbHPnpnIWZTQAAAx+8wX/zmE8PTjq/mLEhoAIH61C3nHJoLQAABVsDQ/nb8QoQEA4rc4n3e+ZRAaAKAKlheFBgCgt8PDo2RjeUFoAAB6+/HufrKRc1HshNAAANH67T9/scDShAYAiNzzv/ieQsoRGgAgcrXcL5BOCA0AEDmhAQBIpT4nNAAAKRTykoYgNABArO7sHy+KXdPTAAD0ceNmYYtiJ4QGAIhTsij2h59cK6pAoQEAYjZXxLsgE0IDAMRssaD5lkFoAIC4Lc5NF1WU0AAAMVsqYn3LhNAAABF6Z1Hs2kxRZQoNABChm7eOF8WenTlbVJlCAwBE6NObRS6KnRAaACBav/LseoGlCQ0AEK352cKmTgShAQAiVpsXGgCAFJbmC5tvGYQGAIhYvbiXNAShAQDi07IotuEJAKC3T/3J3ycbRS2KnRAaACBOH/2Fnyy2QKEBAOK0UOh8yyA0AECs5menii1QaACAOC3OP1RsgUIDAMSpwEWxE0IDAMRppSY0AAC93fjxXrIxc66wRbETQgMAROXTny9+UeyE0AAAEfrVD24UXqbQAAARql0o+CUNQWgAgCjNF/1mpyA0AECU6gsFv6QhCA0AEKV60fMtg9AAADFpLopteAIA6KekRbETQgMAxKbwRbETQgMAxKaMsYkgNABAfBbnhAYAIIUy3uwUhAYAiE+9NlNGsUIDAMSmjJc0BKEBAKJx/eadZOOhqckyyhcaACASv7P5TyGEZx5fPX36VBnlCw0AEJW586U8BRmEBgCIzMLcVEklCw0AEJWlueLXt0wIDQAQlaWFUqZOBKEBACKzvKCnAQDobf/geFHsuQtCAwDQ229+7nhR7DOTZX25Cw0AEI8PXX53eYULDQAQj1o561smhAYAiMfiXFlTJ4LQAAAxqZc2dSIIDQAQk6V5oQEASGFlcaa8woUGAHjgffKzX002ps6Wsih2QmgAgEhcfvRiSYtiJ4QGAIhErcwHGoLQAADRKPUlDUFoAIBolDp1IggNABCN5VqJUyeC0AAAD7rDw6NkY7mmpwEA6K25KHZtrtzQcN9szo2Njeb21tZWqb8YACjEp/70H5KNiYly+wLeCQ0bGxutQaHtRwBgnD31/ofL/hWGJwAgBoslT50IbcMThfiDL32n8DKJ0X+NugIAUVleKHFR7MTg0PDSSy+1/vjKK688+uijpdUHAMji5vXXv/vdm6X+isGh4fLly31+7PSRV/YOj06vrS7lqda/fPsH7/vp+mK+p0D/8RtbH/3Ae/KU8Pobt/53+9YzT7w7TyHff3Xn4O3GEz97MU8h3/re/y3NP/TI2kKeQoo6q8/9/Fqed5u/9vqbP7h645ee/qk81XBW2/zwjbf+59qtZ2Npqy/++3//3M+svKs+l6cQZ7VNTG31P79/de/g7aefuJSnkDE5q41G48VvXsn5bbW3f3e5du5jT6+fmSz3qYNTR0fHkzuLehDyypUr586dW1lZKaaCROfWrVuvvfbaY489NuqKML5efvnltbW12dnZUVeEMbW9vX379u1Ll3KFBjLwICQAkMo7wxNbW1ve0wAA9HLfMw2CAgDQyzvPNAAA9OGZBgAgFaEBgCG0Pv1G1XR5T0PSIJrPN+R/OjJzgZ179jq28DpHqe0shRwTawtvFemrpFWcvDwr0eQ87Sdwu+j6SWW1BYICr3uellDsJWvWRIvK4uh+6+vrzf+2bnT9MY3MBXbu2evYwuscqz7ncNhychbSdslaP+9fmlYxEplPV87TfgK3i66fVFma8zBwn/SXI32tBpaZvqgMu2lRTe3DE23JKH9QylxC+gPjTHPlaJtY27TRItwfqMvoiux6ydL8OatVjFxrOwn3mkfbh00ndhXyNAxNZaC2+0Pbh537l3FKW+9dna8i7Kxb6HbvSt9npkX1UvyCVTxwOv8FjrwOjK3W4Z5mn23nh0Sj6/1hrC5615r0qpVhypxShYaUI0DlSS6/p28KkZzJ/peyuU/XPQt/D1i2m45WMSYGXrsTvoFoGDml+ded/lK2hssMh2eWpuYp7zxaVKtUoaFXdsvQMTXsqY/5cZLRSZMb+uhsBjlbRdtRKZ+F1CpGIsOts88ff/1bi9vFSHR9PDlDOa2Xo/9No9ev6Bwu73qJy/s616I65RqeyHYq0/eEj7zXiwwyXLKhsr9WMUJt3b/5CxzqKRa3i1HJ8CU97OUo5G+YYtODFtXVgPc0lNoh0/9iu2ClGvg3XM7eiPy6Vk+reLAUeAPp2svd+X8pWxmJIb2tra3CS9aihtLe09D2UHT+0es+BQ7VZd2nMoXXuWqGPWNltIoMx/avjFZRhmHHCwpsKidwu9AX3VXnmWybqjDwecOuhZRUvaF2TjMMOvDYqrWocVl7QqyjjSYxPsbqWoxVZYiAFjWUsXiNtGtGG02CrjQMiqVFDWtcehqAMRRl/yqQmdAAAKQyFsMTAMD4ExoAgFT+H3+F32OO/ca/AAAAAElFTkSuQmCC" 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'> 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'> 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'> 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'> 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;"> - Provider - </th> - <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> - Visits - </th> - <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> - Actions - </th> - <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> - Actions per Visit - </th> - <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> - Avg. Time on Website - </th> - <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> - Bounce Rate - </th> - <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> - Conversion Rate - </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'> 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'> 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,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAIY0lEQVR4nO3db4jUeR3A8Y+5opjrKG4YunLh4JUcoVuKLf4JRC2KiwsvlKPioDLyQRTRg6IHPYjoYdD1j+hhV0cI0tETFc09YZFuUamwVreU0+EuXdQdb+vQmh6M7Y17u7Mfd9f97c6+Xg9kf7/57ex3R8bf2+/3NzMLarVaAABM5F1FDwAAmBtEAwCQIhoAgBTRAACkiAYAIEU0AAApogEASBENERHlcnnMnWPub/5dANCqREMzAwMD+Vs1BACtra3oAcyE7//y1VF7vv2FLY2bAwMD5XK5MQJGbQIA8yIaLr02dO/evZHNRYsWXb9+fe3atRN+4ztLYuTrUZ1Rv2nkgPqtjQdP7TcAgOLNi2iIiOHh4ZGvS6VSpVLJREOjJgERYzWEeQsAWoxrGh5onBvInOMfKQIUAwAtQDRk1asiebXjIx0MAHPCfFmeWLp06dTvpD5hUE+B5FRE8mAAmP3mRTR8ene5cv36hIeNrFBkXmmZn3II1zQA0BLmRTR8atcTEU9M8U4e6cSvEgBoPfMiGqbFO19FOeYLKMY7eGYGCQCPz4JarVb0GACAOcCrJwCAFNEAAKSIBgAgRTQAACmiAQBIEQ0AQIpoAABSRAMAkDLn3xHSGy/C7Od5CnNC4/saj3nA3I6GUR/x4BMfYBbyPIU5IfPctDwBPF4SAWa/ZM3P7ZkGAGBaZJYRRQMwEyZcKwWKlVlGFA3ATBj5B8g1DTB3uaYBAEgRDcDj1bhQCsxpC2q1WtFjmBKv/4bZz/MUZr/M83TORwMAMDMsTwAAKaIBAEgRDQBAimgAAFJEAwCQIhoAgJQWiYa+vr6ihwA0U6lUKpVK0aMAmpnwZNoi0QAAPG6iAQBIEQ0AQIpoAABSRAMAkCIaAIAU0QAApIgGACBFNAAAKaIBAEgRDQBAimgAAFJEAwCQIhoAgBTRAACktBU9gGlz7Y1q0UMAxvXPwX9FxH8Xep4yQzpXtxc9hBbUOtHw1R+cKHoIAMwW3/j81u1dnUWPotVYngAAUkQDAJAiGgCAFNEAAKSIBgAgRTQAACmiAQBIEQ0AQIpoAABSRAMAkCIaAIAU0QAApIgGACBFNAAAKaIBAEgRDQBAimgAAFJEAwCQIhoAgBTRAACkiAYAIEU0AAApogEASBENAECKaAAAUkQDAJAiGgCAFNEAAKSIBgAgRTQAACmiAQBIEQ0AQIpoAABSRAMAkCIaAIAU0QAApIgGACBFNAAAKaIBAEgRDQBAimgAAFJEAwCQIhoAgBTRAACkiAYAIEU0AAApogEASBENAECKaAAAUtqKHsBDLp57tXP9hvrXL77ce/TOkmdK/46IxYPnImLbrr2d6ze0l0pFDhEA5qtpi4ZyuRwRAwMDk76H6p07Z3uO178+23N8ccQzq7qO3lkSEQciDm48Vu09cqRn//7nD+sGAJh5b0dD/aw/YmBgoFwuJyMgf2Rze9ZdiX/8IiL2rIsTr70vIuozDW9F128uxsGNx/bcvfLiy71f/uzHp/6zAGh5o05tMbX/3PLQTMOoh3KGH9lrf7/UHtGxrD8ibt59sn3wzM+O/nnls196cHNb9567VzqW9Xec/1GEaAAgRSVMo2YXQtYDrfHPkf0jGg8YOWbMAxrvc0xne453LOuvXq5WL1cjYtvmzvNbD5y6OnTq6lBEnLo6VJ972PXeNyb7ywIAk5e6pqFx9WHUSkR9M3nAhKsY9VyoVW784fcnXhj+SGx9sL/eDRdOnj64MXpeX70///sBML81/mfVrMMUPRQN4z2yM/MoXzh5+hMfvNG451dLfn7mwn9++v7D9c0dmxbOwDAAaBmjzl/TdQXevNXsmobxNFliGE/ysspq/+32J1csWPOej62JfZUz1b/ejk07el956fzWA5v/+FLsfNQfCwBMm8m85HISmZZZnjj03e/1fufAvrhfq9yIiGPn2vrauntfWVEvhm/uvL1tc2dEf3XVjkmMGQCYoqm+I+QkZh3G07l+Q1/bhmr/7frmvq77H75/qXv54Ff+9pPfbT/zyR3DHcv6v/Xjxdt27Z2unwhAa5vGkxQxiZmG+oRB4+aEB4xMMDSfbGgvlT7wma/1/vpSnIvud9+MiH1dK/bFxfqt1cvVntdXb9q9Y+QtIwGguQnPWTySt6NhzNN/k/1N9jTZbP4X9tzT3UcGv3jh5Ol4MyKiu/9mfX/vmx19f+rYtHuHt4ME4JEIhWk0uz57or1U2v/84bdWdfX99oe9Q6teGI7u5YO9Q6u6lw9u2v3Rbbv2KgYAKMrsioaIaC+Vnnu6+9pTHYciev5yMyIOPdURET6qCgCKNeuiISLaS6WNXVsiYmNX0UMBAP5vqq+eAADmCdEAAKSIBgAgRTQAACmiAQBIEQ0AQIpoAABSRAMAkCIaAIAU0QAApIgGACBFNAAAKaIBAEgRDQBAimgAAFJEAwCQIhoAgBTRAACkiAYAIEU0AAApogEASBENAECKaAAAUkQDAJAiGgCAFNEAAKSIBgAgRTQAACmiAQBIEQ0AQIpoAABSRAMAkCIaAIAU0QAApIgGACBFNAAAKaIBAEgRDQBAimgAAFJEAwCQIhoAgBTRAACkiAYAIEU0AAApogEASBENAECKaAAAUkQDAJDSVvQAps3XP7el6CEA47p161ZErFy5suiBMF9s7+oseggtqHWiYeeH1hU9BGBclcrCiFizZk3RAwEmz/IEAJAiGgCAFNEAAKSIBgAgRTQAACmiAQBIEQ0AQIpoAABSRAMAkCIaAIAU0QAApIgGACBFNAAAKaIBAEgRDQBAyoJarVb0GACAOcBMAwCQIhoAgBTRAACkiAYAIEU0AAApogEASBENAECKaAAAUv4HGWY6S4ZdfLYAAAAASUVORK5CYII=" + 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;"> - Browser + Device model </th> <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> Visits @@ -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'> - - 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,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAHz0lEQVR4nO3dz4ucdwHH8W9sthu2ibOQSjUbSdJBtIew1NREaQ0m0GIQhB6EevDUg55EwYsS9FLEm/4DPXgyJy8eiiIEikWKDRJ6SEsYEmh2U38s7PZHzGYTxsNsn53MTnc/+/OZmX29DuGZZ5559jsLT573Pj9m9rXb7QIAsJ7P1D0AAGA4iAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoiDSbzb4z+85f+1UAMKREw5a0Wq38WQ0BwFDbX/cABsKvX32rZ84vXn6m+2Gr1Wo2m90R0PMQAEaeaCillOvvfbC0tFQ9HBsbm5mZmZqaWveFq0uimu7pjM5T1QKdZ7sX3to7AIAdJxqW3blzp5puNBqzs7NJNHRbIyBKv4Zw3AKA4eKahlT3sYFkH7+hCFAMAAw+0bBtOlURXu24oYUBYBA4PbFsYmJi6yvpHDDopEB4KCJcGABqJxpKKeXF883ZmZl1F6vOUCR3WuaHHIprGgAYBqKhlFK+e/ZYKce2uJIN7fhVAgBDRzRsm9V3Ufa9geLTFt6dQQLApu1rt9t1jwEAGALungAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAyOh/IqQPXoRBY6uEwdT9scV9FxjxaOj5igff+AC1s1XCYEo2RqcngF0lEWAAhfk+4kcaAIBEct5QNAA1WPfUKbDLkvOGogGoQfX/kWsaYIi4pgEAiIgGYFd1nzcFhsu+drtd9xh2ljvCYdDYKmEAJRvm6EcDALAtnJ4AACKiAQCIiAYAICIaAICIaAAAIqIBAIjslWi4cuVK3UMAHmKrhEGz7la5V6IBANgi0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABDZX/cAds+tf31Y9xCAFf9dWLJVstOOPnGo7iGMlD0UDT/+zV/rHgLwsD/drnsEjLg//vbFuocwUpyeAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAi++sewIYtLX704MP/PHLoc6WUzsTY+P5SDtQ9LgAYcdsfDc1ms9VqbftqO5YWP5r5yw/nr81NPnV4/trcnbmbl+9Nfe37vzv75MFP6qEsLd4fGz+4QwMAgD1rJRp6dvZrP6zLB/PXZ/925chzp7pn/uMPP7n6jcenj188dex+KeXwE0/VNDoABlGz2eyZMwh7tGE0fKcnKnfmblbTC+O3Xr/9o9dvl1LKr77957HxugYFwCBSCdtiJRparVZ1OKEz0f2wWqx6qnpV6RdxPTO711YePm7Rd4Wf4m4pZeLw8VLK/LW5au7/vnW3M9FYPLowfit52wDARm3mSEPPLr88vKfvzFl9diNc4RqWFu+/9/ufl65iuHxvqnq2UwyNxaP5GwFgj+j5O7bGkQy1zUTD5n7d1cGGvv+GK/nlO19pnnlpeYXvXDrTeLtngenjFzcxNgBGWM9ua0Cu0htGfT6nofptbmh3vhWdH7Tuz7p89cb7kxc602+8u/D+5IU3F06WUhqLRzsHGBqLR88+edCtEwCwEx6Khr6VsDtF1mq11m2Ui5dmn/1y48LTj1VzzjTePvfozPM3F56/ufC9xlvPXrn68YP5nR4qAOxNfY40dCfCRnNh7b1+9+WQPZdGbsLn51/rTExOX5+cvl5KOfLcqccemdz0CgEYSbtz1Hwv2IZbLnvufagujcyvOslunVj22j8/fuPdherhkfNL1fSh0z878PgXNjJ2AEbfhnZJrKE3Glb/KqsDA30X6Hl2jSVXz1x7ydVeeenIymvfvFRKOffoTPJCAPY4obAthunDnV44fbKUUsrdc9P3Lz/98tWbr1z++9R3ro51zk2Ue1//7OSXfAkFAOyQYYqGTxwYGy8vnD55bvrVB+eXv7mqw30TALBzhjEalo2Nu7sSAHZPn7snAABWEw0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAET21z2A3fPTHzxT9xCAFTdu3Dhx4kTdowA2YA9Fwze/+sW6hwCsmGj/+5StEoaK0xMAQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAARPa12+26xwAADAFHGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAg8n+lhSjia6QRugAAAABJRU5ErkJggg==" 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;"> - Device model + Operating system family </th> <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> Visits @@ -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'> + + 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,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" 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;"> - Browser version + Operating System versions </th> <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> Visits @@ -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'> - 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;"> - Operating system family + Browser </th> <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> Visits @@ -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'> - 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;"> - Operating System versions + Browser version </th> <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> Visits @@ -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'> - 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 173df28cda92271b73de16d65d4ca4e2202195e9..880a4be3a1b372c135788d837a22ef32674b1b3e 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 457accfc9ace96ea6d6c5ea72827bd2ab69718ef..2da80f09301a4ffe5be0b14ad163bd114471faee 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 457accfc9ace96ea6d6c5ea72827bd2ab69718ef..2da80f09301a4ffe5be0b14ad163bd114471faee 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 21450c0dd487c6eec8641f8e137b8eb78e2b3689..754d1c45fa17e7bc302bf59ecffd0f06f20fd8b9 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 21450c0dd487c6eec8641f8e137b8eb78e2b3689..754d1c45fa17e7bc302bf59ecffd0f06f20fd8b9 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 21450c0dd487c6eec8641f8e137b8eb78e2b3689..754d1c45fa17e7bc302bf59ecffd0f06f20fd8b9 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/DeprecatedMethodsTest.php b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php index 59c7ca86aea20dffa2bfe7590c4246a0b595732b..1cb3f36cc17fbc60876df6b8dbce8ea67fa1503d 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 84e0f1e50ae04be97de1792beb718f75174d3960..c052514ef3f465c5beb0e81974a9d6ce8a866a28 100644 Binary files a/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png and b/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png differ diff --git a/tests/UI/expected-screenshots/CoreUpdaterDb_main.png b/tests/UI/expected-screenshots/CoreUpdaterDb_main.png index 868a987f49191fce57bc48cfaf43f403e8a86acd..072b687685695df35b9bdfe650fee8ad4eb9a5c1 100644 Binary files a/tests/UI/expected-screenshots/CoreUpdaterDb_main.png and b/tests/UI/expected-screenshots/CoreUpdaterDb_main.png differ diff --git a/tests/UI/expected-screenshots/DashboardManager_create_new.png b/tests/UI/expected-screenshots/DashboardManager_create_new.png index 4decdbdf65dbe67c761bf6bbee2fafc1997cabb9..659d0cdcaed1ebc1996b4ccd5f1af251967d82e8 100644 Binary files a/tests/UI/expected-screenshots/DashboardManager_create_new.png and b/tests/UI/expected-screenshots/DashboardManager_create_new.png differ diff --git a/tests/UI/expected-screenshots/Dashboard_reset.png b/tests/UI/expected-screenshots/Dashboard_reset.png index 646559ccfe0c4c0ad30f0543803fb14e9b6e38ec..9c8220783a7656eb8eaf6618ff2b9eef429b8d5d 100644 Binary files a/tests/UI/expected-screenshots/Dashboard_reset.png and b/tests/UI/expected-screenshots/Dashboard_reset.png differ diff --git a/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png b/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png index 53d9678de10dc9ff2ddb84420780d6eac40f40dd..e7513f37f54f76cdecf9e8ddaa320e1f9e9957a4 100644 Binary files a/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png and b/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png differ diff --git a/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png b/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png index f710a5b4fa630860be9ceb246e232fd566b0c3cf..8a98ef8005a65120bad49f2b36c14c309d0b3b58 100644 Binary files a/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png and b/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png differ diff --git a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_changed_sort_order.png b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_changed_sort_order.png index 752be15b83529e3182d9d04af83e80443169eba7..5d98fb1e7804d13718b6c7c644457eabc3041484 100644 Binary files a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_changed_sort_order.png and b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_changed_sort_order.png differ diff --git a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_page_1.png b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_page_1.png index f710a5b4fa630860be9ceb246e232fd566b0c3cf..8a98ef8005a65120bad49f2b36c14c309d0b3b58 100644 Binary files a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_page_1.png and b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_page_1.png differ diff --git a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_search.png b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_search.png index 8f359642365a4345b70ec94fdfdb8c6606c5d381..0969960764266a0c8db0e639e3c1f96340d9557b 100644 Binary files a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_search.png and b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_search.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png index 9eafa608c840794c7bb7ddd0851458fdc4ae2986..e189b12ae741c5f8147d4b9342ece32c8dced599 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png and b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png index baae74bd465d694b4600490de2f4296c4430a50e..3404bb899e17d8f0db26a5e5390476db9c83f428 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png and b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png index 619325451ac94acca066467ebf03230f8baf1e6a..71bec02bed9c4c85a835d7192584a3d7451e1500 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png and b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_overview.png b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_overview.png index ca9ceeeac23302050e06574e65f77428a29b4b52..47793452e71c9b6e7b89c763810f194bef6a1840 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_overview.png and b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_overview.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png index 0256fc3721a054bde802717ee235d9d92dab342c..1384227595bd3079dfdff6e22ad55b33042c7cb1 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png and b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_goals_ecommerce.png b/tests/UI/expected-screenshots/UIIntegrationTest_goals_ecommerce.png index ca9ceeeac23302050e06574e65f77428a29b4b52..47793452e71c9b6e7b89c763810f194bef6a1840 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_goals_ecommerce.png and b/tests/UI/expected-screenshots/UIIntegrationTest_goals_ecommerce.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png b/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png index dc19add4123b90173aa69a60d0beb1bf3bab53e1..52cc88e9a7a81c0fd1f6f4edb3567a3c66b74479 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png and b/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_goals_overview.png b/tests/UI/expected-screenshots/UIIntegrationTest_goals_overview.png index ab7dc749e8cceb8af01655093d6f0cd961629cb6..6b1f20745128b4f3f7e80197c1d3d8d8c552a2f4 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_goals_overview.png and b/tests/UI/expected-screenshots/UIIntegrationTest_goals_overview.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_referrers_overview.png b/tests/UI/expected-screenshots/UIIntegrationTest_referrers_overview.png index 25d54d6fffa65a1a99adf4de73409df721193f17..ab27957247e1391db8066dc0c6f89d6af66106d3 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_referrers_overview.png and b/tests/UI/expected-screenshots/UIIntegrationTest_referrers_overview.png differ 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 0000000000000000000000000000000000000000..91125c7a9c920f9f2418200bb278ed8178477088 Binary files /dev/null and b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_not_segmented.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png index 78f8463054454b2ed58ef67b42f5d3766d182ba3..718ff17a3a835387de68c29b02be1947c1892ed0 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png and b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_engagement.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_engagement.png index 5a47febc5d8fccfe89b8e05cca3a8419dcbd978d..b50579d3b86e771b336667bce4028e0bc6a41cef 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_engagement.png and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_engagement.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview.png index 98088a4e7a6ea63864d889853f99a8debd82b187..e48a608ccbd14cc0e95b7664ad050971b502e424 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview.png and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_reloaded.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_reloaded.png index 98088a4e7a6ea63864d889853f99a8debd82b187..e48a608ccbd14cc0e95b7664ad050971b502e424 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_reloaded.png and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_reloaded.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_segment.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_segment.png index 1a02f72ad5b42da00f8888e784cca74d53d53396..a5b4d447cc1e7e467a29499d7ade4ae931e8307b 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_segment.png and b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_segment.png differ diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png index 6cb6d80137b88d111363fb7c87096bb645305126..75b476d01bc3dcc3529727cfbcf1d5f84f08c22c 100644 Binary files a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png and b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png differ diff --git a/tests/UI/specs/UIIntegration_spec.js b/tests/UI/specs/UIIntegration_spec.js index 196e8d7f9588bc0c08ce42ce8a167d7f76461949..ab4ba8041a962f41fdc399957427d6c2b752a284 100644 --- a/tests/UI/specs/UIIntegration_spec.js +++ b/tests/UI/specs/UIIntegration_spec.js @@ -692,4 +692,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 3527b5973acf9720eb43552c7a49efac3a902b65..8dc577a407e8ade1ef5681a1ae80e1695d8d48ed 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 34a8d252f56ef33f48db4d8e4252adffad6cc53a..f8cf328249cfaef8844818ec8a42d258a022b6ab 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 0000000000000000000000000000000000000000..944dcffaf2c45a7ae5d3f9a03f1bb01f4a6ed46e --- /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 879ba917073e957817dffcdaa836cac3eb3f13a6..9f916bbbe3018941beeed89f9e3776ed837e2b87 100644 --- a/tests/resources/extractSearchEngineInformationFromUrlTests.yml +++ b/tests/resources/extractSearchEngineInformationFromUrlTests.yml @@ -346,25 +346,57 @@ engine: 'Yahoo! Japan Images' keywords: 'ï½”ï½ ï½ˆï½…ï½ï½’ï½” lï½ï½‡ï½' -- 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'