diff options
author | Thomas Steur <thomas.steur@gmail.com> | 2016-09-30 02:03:13 +0300 |
---|---|---|
committer | Thomas Steur <thomas.steur@gmail.com> | 2016-09-30 02:03:13 +0300 |
commit | 43bd151e711d5c719cf89d2746c23da5e29dd264 (patch) | |
tree | af3c4969a64f759811a08c026b739b3d8e716435 | |
parent | 68fea796ef5a81cf7c5f4fb17508968ac898bb7c (diff) | |
parent | 7d115b50ecb1660175e64e4e546c72546fd56d69 (diff) |
Merge branch '2.x-dev' into 3.0-m09
152 files changed, 1910 insertions, 987 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index f5aa2e505f..53bbd03c19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** l ### New APIs * The Piwik JavaScript tracker has a new method `trackRequest` that allows you to send any tracking parameters to Piwik. For example `_paq.push(['trackRequest', 'te=foo&bar=baz'])` +### Internal Changes +* Expected screenshots for UI tests are now stored using Git LFS instead of a submodule. Running, creating or updating UI tests will require Git LFS to be installed. +The folder containing expected screenshots was renamed from `expected-ui-screenshots` to `expected-screenshots`. The UI-Test-Runner is now able to handle both names. + ## Piwik 2.16.2 ### New APIs diff --git a/composer.lock b/composer.lock index 6025211961..d1164b4d32 100644 --- a/composer.lock +++ b/composer.lock @@ -863,16 +863,16 @@ }, { "name": "piwik/referrer-spam-blacklist", - "version": "1.0.9", + "version": "1.0.10", "source": { "type": "git", "url": "https://github.com/piwik/referrer-spam-blacklist.git", - "reference": "7cce0bed292d148822ebad0eb9a286b04d27f340" + "reference": "58ecaaf7aced82ddbcc9339e1fc9e7fe9e996eb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/piwik/referrer-spam-blacklist/zipball/7cce0bed292d148822ebad0eb9a286b04d27f340", - "reference": "7cce0bed292d148822ebad0eb9a286b04d27f340", + "url": "https://api.github.com/repos/piwik/referrer-spam-blacklist/zipball/58ecaaf7aced82ddbcc9339e1fc9e7fe9e996eb8", + "reference": "58ecaaf7aced82ddbcc9339e1fc9e7fe9e996eb8", "shasum": "" }, "type": "library", @@ -881,20 +881,20 @@ "Public Domain" ], "description": "Community-contributed list of referrer spammers", - "time": "2016-07-20 19:55:33" + "time": "2016-09-28 16:10:53" }, { "name": "piwik/searchengine-and-social-list", - "version": "1.3.3", + "version": "1.3.4", "source": { "type": "git", "url": "https://github.com/piwik/searchengine-and-social-list.git", - "reference": "07046e6c6472f3cf7751f45f7b1f1657dcf920e7" + "reference": "ef1547e4e3e64d5eb174e75a3bfa3906f33e3108" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/piwik/searchengine-and-social-list/zipball/07046e6c6472f3cf7751f45f7b1f1657dcf920e7", - "reference": "07046e6c6472f3cf7751f45f7b1f1657dcf920e7", + "url": "https://api.github.com/repos/piwik/searchengine-and-social-list/zipball/ef1547e4e3e64d5eb174e75a3bfa3906f33e3108", + "reference": "ef1547e4e3e64d5eb174e75a3bfa3906f33e3108", "shasum": "" }, "type": "library", @@ -903,26 +903,34 @@ "Public Domain" ], "description": "Search engine and social network definitions used by Piwik", - "time": "2016-09-18 14:28:00" + "time": "2016-09-22 08:52:36" }, { "name": "psr/log", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + "reference": "5277094ed527a1c4477177d102fe4c53551953e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "url": "https://api.github.com/repos/php-fig/log/zipball/5277094ed527a1c4477177d102fe4c53551953e0", + "reference": "5277094ed527a1c4477177d102fe4c53551953e0", "shasum": "" }, + "require": { + "php": ">=5.3.0" + }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { - "psr-0": { - "Psr\\Log\\": "" + "psr-4": { + "Psr\\Log\\": "Psr/Log/" } }, "notification-url": "https://packagist.org/downloads/", @@ -936,12 +944,13 @@ } ], "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ "log", "psr", "psr-3" ], - "time": "2012-12-21 11:40:51" + "time": "2016-09-19 16:02:08" }, { "name": "symfony/console", @@ -1225,16 +1234,16 @@ }, { "name": "twig/twig", - "version": "v1.24.2", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "33093f6e310e6976baeac7b14f3a6ec02f2d79b7" + "reference": "f16a634ab08d87e520da5671ec52153d627f10f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/33093f6e310e6976baeac7b14f3a6ec02f2d79b7", - "reference": "33093f6e310e6976baeac7b14f3a6ec02f2d79b7", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/f16a634ab08d87e520da5671ec52153d627f10f6", + "reference": "f16a634ab08d87e520da5671ec52153d627f10f6", "shasum": "" }, "require": { @@ -1247,7 +1256,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.24-dev" + "dev-master": "1.25-dev" } }, "autoload": { @@ -1282,7 +1291,7 @@ "keywords": [ "templating" ], - "time": "2016-09-01 17:50:53" + "time": "2016-09-21 23:05:12" } ], "packages-dev": [ diff --git a/config/global.php b/config/global.php index 36e04970aa..cd10f72370 100644 --- a/config/global.php +++ b/config/global.php @@ -45,10 +45,17 @@ return array( return $cache; }, 'Piwik\Cache\Backend' => function (ContainerInterface $c) { - try { - $backend = $c->get('ini.Cache.backend'); - } catch (NotFoundException $ex) { - $backend = 'chained'; // happens if global.ini.php is not available + // If Piwik is not installed yet, it's possible the tmp/ folder is not writable + // we prevent failing with an unclear message eg. coming from doctrine-cache + // by forcing to use a cache backend which always works ie. array + if(!\Piwik\SettingsPiwik::isPiwikInstalled()) { + $backend = 'array'; + } else { + try { + $backend = $c->get('ini.Cache.backend'); + } catch (NotFoundException $ex) { + $backend = 'chained'; // happens if global.ini.php is not available + } } return \Piwik\Cache::buildBackend($backend); diff --git a/core/ArchiveProcessor/PluginsArchiver.php b/core/ArchiveProcessor/PluginsArchiver.php index 28c90cb15c..325b529aa3 100644 --- a/core/ArchiveProcessor/PluginsArchiver.php +++ b/core/ArchiveProcessor/PluginsArchiver.php @@ -10,10 +10,12 @@ namespace Piwik\ArchiveProcessor; use Piwik\ArchiveProcessor; +use Piwik\Common; use Piwik\DataAccess\ArchiveWriter; use Piwik\DataAccess\LogAggregator; use Piwik\DataTable\Manager; use Piwik\Metrics; +use Piwik\Piwik; use Piwik\Plugin\Archiver; use Piwik\Log; use Piwik\Timer; @@ -50,8 +52,8 @@ class PluginsArchiver public function __construct(Parameters $params, $isTemporaryArchive) { $this->params = $params; - - $this->archiveWriter = new ArchiveWriter($this->params, $isTemporaryArchive); + $this->isTemporaryArchive = $isTemporaryArchive; + $this->archiveWriter = new ArchiveWriter($this->params, $this->isTemporaryArchive); $this->archiveWriter->initNewArchive(); $this->logAggregator = new LogAggregator($params); @@ -106,7 +108,7 @@ class PluginsArchiver $latestUsedTableId = Manager::getInstance()->getMostRecentTableId(); /** @var Archiver $archiver */ - $archiver = new $archiverClass($this->archiveProcessor); + $archiver = $this->makeNewArchiverObject($archiverClass, $pluginName); if (!$archiver->isEnabled()) { Log::debug("PluginsArchiver::%s: Skipping archiving for plugin '%s'.", __FUNCTION__, $pluginName); @@ -198,9 +200,9 @@ class PluginsArchiver return true; } if (Rules::shouldProcessReportsAllPlugins( - $this->params->getIdSites(), - $this->params->getSegment(), - $this->params->getPeriod()->getLabel())) { + $this->params->getIdSites(), + $this->params->getSegment(), + $this->params->getPeriod()->getLabel())) { return true; } @@ -236,4 +238,28 @@ class PluginsArchiver $metrics = $this->archiveProcessor->aggregateNumericMetrics($toSum); return $metrics; } + + + /** + * @param $archiverClass + * @return Archiver + */ + private function makeNewArchiverObject($archiverClass, $pluginName) + { + $archiver = new $archiverClass($this->archiveProcessor); + + /** + * Triggered right after a new **plugin archiver instance** is created. + * Subscribers to this event can configure the plugin archiver, for example prevent the archiving of a plugin's data + * by calling `$archiver->disable()` method. + * + * @param \Piwik\Plugin\Archiver &$archiver The newly created plugin archiver instance. + * @param string $pluginName The name of plugin of which archiver instance was created. + * @param array $this->params Array containing archive parameters (Site, Period, Date and Segment) + * @param bool $this->isTemporaryArchive Flag indicating whether the archive being processed is temporary (ie. the period isn't finished yet) or final (the period is already finished and in the past). + */ + Piwik::postEvent('Archiving.makeNewArchiverObject', array($archiver, $pluginName, $this->params, $this->isTemporaryArchive)); + + return $archiver; + } } diff --git a/core/Config.php b/core/Config.php index 01fa144a5c..f9a95feed0 100644 --- a/core/Config.php +++ b/core/Config.php @@ -12,6 +12,7 @@ namespace Piwik; use Exception; use Piwik\Application\Kernel\GlobalSettingsProvider; use Piwik\Container\StaticContainer; +use Piwik\Exception\MissingFilePermissionException; use Piwik\ProfessionalServices\Advertising; /** @@ -375,15 +376,18 @@ class Config */ protected function writeConfig($clear = true) { - if ($this->doNotWriteConfigInTests) { - return; - } - $output = $this->dumpConfig(); if ($output !== null && $output !== false ) { - $success = @file_put_contents($this->getLocalPath(), $output); + + if ($this->doNotWriteConfigInTests) { + // simulate whether it would be successful + $success = is_writable($this->getLocalPath()); + } else { + $success = @file_put_contents($this->getLocalPath(), $output); + } + if ($success === false) { throw $this->getConfigNotWritableException(); } @@ -411,6 +415,6 @@ class Config public function getConfigNotWritableException() { $path = "config/" . basename($this->getLocalPath()); - return new Exception(Piwik::translate('General_ConfigFileIsNotWritable', array("(" . $path . ")", ""))); + return new MissingFilePermissionException(Piwik::translate('General_ConfigFileIsNotWritable', array("(" . $path . ")", ""))); } } diff --git a/core/Db/Adapter.php b/core/Db/Adapter.php index 5363d15383..a3ceebe6cf 100644 --- a/core/Db/Adapter.php +++ b/core/Db/Adapter.php @@ -125,7 +125,7 @@ class Adapter * @param string $adapterName * @return bool */ - public function isRecommendedAdapter($adapterName) + public static function isRecommendedAdapter($adapterName) { return strtolower($adapterName) === 'pdo/mysql'; } diff --git a/core/Plugin.php b/core/Plugin.php index 6480157301..82ef4f2fec 100644 --- a/core/Plugin.php +++ b/core/Plugin.php @@ -137,17 +137,22 @@ class Plugin if ($cache->contains($cacheId)) { $this->pluginInformation = $cache->fetch($cacheId); } else { - $metadataLoader = new MetadataLoader($pluginName); - $this->pluginInformation = $metadataLoader->load(); - - if ($this->hasDefinedPluginInformationInPluginClass() && $metadataLoader->hasPluginJson()) { - throw new \Exception('Plugin ' . $pluginName . ' has defined the method getInformation() and as well as having a plugin.json file. Please delete the getInformation() method from the plugin class. Alternatively, you may delete the plugin directory from plugins/' . $pluginName); - } + $this->reloadPluginInformation(); $cache->save($cacheId, $this->pluginInformation); } } + public function reloadPluginInformation() + { + $metadataLoader = new MetadataLoader($this->pluginName); + $this->pluginInformation = $metadataLoader->load(); + + if ($this->hasDefinedPluginInformationInPluginClass() && $metadataLoader->hasPluginJson()) { + throw new \Exception('Plugin ' . $this->pluginName . ' has defined the method getInformation() and as well as having a plugin.json file. Please delete the getInformation() method from the plugin class. Alternatively, you may delete the plugin directory from plugins/' . $this->pluginName); + } + } + private function createCacheIfNeeded() { if (is_null($this->cache)) { diff --git a/core/Plugin/Archiver.php b/core/Plugin/Archiver.php index 7cc9fe26f5..90e325bc8e 100644 --- a/core/Plugin/Archiver.php +++ b/core/Plugin/Archiver.php @@ -60,6 +60,11 @@ abstract class Archiver private $processor; /** + * @var bool + */ + private $enabled; + + /** * Constructor. * * @param ArchiveProcessor $processor The ArchiveProcessor instance to use when persisting archive @@ -69,6 +74,7 @@ abstract class Archiver { $this->maximumRows = PiwikConfig::getInstance()->General['datatable_archiving_maximum_rows_standard']; $this->processor = $processor; + $this->enabled = true; } /** @@ -121,6 +127,11 @@ abstract class Archiver return $this->getProcessor()->getLogAggregator(); } + public function disable() + { + $this->enabled = false; + } + /** * Whether this Archiver should be used or not. * @@ -128,6 +139,6 @@ abstract class Archiver */ public function isEnabled() { - return true; + return $this->enabled; } } diff --git a/core/Plugin/ControllerAdmin.php b/core/Plugin/ControllerAdmin.php index 89fc082199..092a963b8a 100644 --- a/core/Plugin/ControllerAdmin.php +++ b/core/Plugin/ControllerAdmin.php @@ -155,6 +155,43 @@ abstract class ControllerAdmin extends Controller Notification\Manager::notify('ControllerAdmin_EacceleratorIsUsed', $notification); } + /** + * PHP Version required by the next major Piwik version + * @return string + */ + private static function getNextRequiredMinimumPHP() + { + return '5.5.9'; + } + + private static function isUsingPhpVersionCompatibleWithNextPiwik() + { + return version_compare( PHP_VERSION, self::getNextRequiredMinimumPHP(), '>=' ); + } + + private static function notifyWhenPhpVersionIsNotCompatibleWithNextMajorPiwik() + { + return; // no major version coming + + if (self::isUsingPhpVersionCompatibleWithNextPiwik()) { + return; + } + + $youMustUpgradePHP = Piwik::translate('General_YouMustUpgradePhpVersionToReceiveLatestPiwik'); + $message = Piwik::translate('General_PiwikCannotBeUpgradedBecausePhpIsTooOld') + . ' ' + . sprintf(Piwik::translate('General_PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure'), self::getNextRequiredMinimumPHP()) + ; + + $notification = new Notification($message); + $notification->title = $youMustUpgradePHP; + $notification->priority = Notification::PRIORITY_LOW; + $notification->context = Notification::CONTEXT_WARNING; + $notification->type = Notification::TYPE_TRANSIENT; + $notification->flags = Notification::FLAG_NO_CLEAR; + NotificationManager::notify('PHPVersionTooOldForNewestPiwikCheck', $notification); + } + private static function notifyWhenPhpVersionIsEOL() { return; // no supported version (5.5+) has currently ended support @@ -163,7 +200,10 @@ abstract class ControllerAdmin extends Controller return; } - $message = Piwik::translate('General_WarningPhpVersionXIsTooOld', '5.5'); + $message = Piwik::translate('General_WarningPiwikWillStopSupportingPHPVersion', array($deprecatedMajorPhpVersion, self::getNextRequiredMinimumPHP())) + . "\n " + . Piwik::translate('General_WarningPhpVersionXIsTooOld', $deprecatedMajorPhpVersion); + $notification = new Notification($message); $notification->title = Piwik::translate('General_Warning'); $notification->priority = Notification::PRIORITY_LOW; @@ -233,10 +273,8 @@ abstract class ControllerAdmin extends Controller $view->isSuperUser = Piwik::hasUserSuperUserAccess(); self::notifyAnyInvalidPlugin(); - - self::checkPhpVersion($view); - self::notifyWhenPhpVersionIsEOL(); + self::notifyWhenPhpVersionIsNotCompatibleWithNextMajorPiwik(); self::notifyWhenDebugOnDemandIsEnabled('debug'); self::notifyWhenDebugOnDemandIsEnabled('debug_on_demand'); @@ -260,16 +298,6 @@ abstract class ControllerAdmin extends Controller return "Piwik " . Version::VERSION; } - /** - * Check if the current PHP version is >= 5.3. If not, a warning is displayed - * to the user. - */ - private static function checkPhpVersion($view) - { - $view->phpVersion = PHP_VERSION; - $view->phpIsNewEnough = self::isPhpVersionAtLeast55(); - } - private static function isPhpVersionAtLeast55() { return version_compare(PHP_VERSION, '5.5', '>='); diff --git a/core/Tracker/TrackerCodeGenerator.php b/core/Tracker/TrackerCodeGenerator.php index c985db88e7..ffeea91b6a 100644 --- a/core/Tracker/TrackerCodeGenerator.php +++ b/core/Tracker/TrackerCodeGenerator.php @@ -12,6 +12,7 @@ use Piwik\Common; use Piwik\Piwik; use Piwik\Plugins\CustomVariables\CustomVariables; use Piwik\Plugins\SitesManager\API as APISitesManager; +use Piwik\View; /** * Generates the Javascript code to be inserted on every page of the website to track. @@ -46,8 +47,7 @@ class TrackerCodeGenerator $disableCookies = false ) { // changes made to this code should be mirrored in plugins/CoreAdminHome/javascripts/jsTrackingGenerator.js var generateJsCode - $jsCode = file_get_contents(PIWIK_INCLUDE_PATH . "/plugins/Morpheus/templates/javascriptCode.tpl"); - $jsCode = htmlentities($jsCode); + if (substr($piwikUrl, 0, 4) !== 'http') { $piwikUrl = 'http://' . $piwikUrl; } @@ -119,7 +119,8 @@ class TrackerCodeGenerator 'piwikUrl' => Common::sanitizeInputValue($piwikUrl), 'options' => $options, 'optionsBeforeTrackerUrl' => $optionsBeforeTrackerUrl, - 'protocol' => '//' + 'protocol' => '//', + 'loadAsync' => true ); $parameters = compact('mergeSubdomains', 'groupPageTitlesByDomain', 'mergeAliasUrls', 'visitorCustomVariables', 'pageCustomVariables', 'customCampaignNameQueryParam', 'customCampaignKeywordParam', @@ -141,6 +142,7 @@ class TrackerCodeGenerator * the JavaScript tracker inside of anonymous function before * adding setTrackerUrl into paq. * - **protocol**: Piwik url protocol. + * - **loadAsync**: boolean whether piwik.js should be loaded syncronous or asynchronous * * The **httpsPiwikUrl** element can be set if the HTTPS * domain is different from the normal domain. @@ -156,6 +158,12 @@ class TrackerCodeGenerator } $codeImpl = array('setTrackerUrl' => htmlentities($setTrackerUrl)) + $codeImpl; + $view = new View('@Morpheus/javascriptCode'); + $view->disableCacheBuster(); + $view->loadAsync = $codeImpl['loadAsync']; + $jsCode = $view->render(); + $jsCode = htmlentities($jsCode); + foreach ($codeImpl as $keyToReplace => $replaceWith) { $jsCode = str_replace('{$' . $keyToReplace . '}', $replaceWith, $jsCode); } diff --git a/core/Tracker/VisitExcluded.php b/core/Tracker/VisitExcluded.php index a644d4479f..303d45c23b 100644 --- a/core/Tracker/VisitExcluded.php +++ b/core/Tracker/VisitExcluded.php @@ -28,25 +28,16 @@ class VisitExcluded /** * @param Request $request - * @param bool|string $ip - * @param bool|string $userAgent */ - public function __construct(Request $request, $ip = false, $userAgent = false) + public function __construct(Request $request) { $this->spamFilter = new ReferrerSpamFilter(); - if (false === $ip) { - $ip = $request->getIp(); - } - - if (false === $userAgent) { - $userAgent = $request->getUserAgent(); - } - $this->request = $request; $this->idSite = $request->getIdSite(); - $this->userAgent = $userAgent; - $this->ip = $ip; + $userAgent = $request->getUserAgent(); + $this->userAgent = Common::unsanitizeInputValue($userAgent); + $this->ip = $request->getIp(); } /** @@ -89,8 +80,10 @@ class VisitExcluded * @param bool &$excluded Whether the request should be excluded or not. Initialized * to `false`. Event subscribers should set it to `true` in * order to exclude the request. + * @param Request $request The request object which contains all of the request's information + * */ - Piwik::postEvent('Tracker.isExcludedVisit', array(&$excluded)); + Piwik::postEvent('Tracker.isExcludedVisit', array(&$excluded, $this->request)); /* * Following exclude operations happen after the hook. diff --git a/core/Updater.php b/core/Updater.php index 581d6609a5..d53280f4da 100644 --- a/core/Updater.php +++ b/core/Updater.php @@ -12,6 +12,7 @@ use Piwik\Columns\Updater as ColumnUpdater; use Piwik\Container\StaticContainer; use Piwik\Updater\Migration; use Piwik\Updater\Migration\Db\Sql; +use Piwik\Exception\MissingFilePermissionException; use Piwik\Updater\UpdateObserver; use Zend_Db_Exception; @@ -264,8 +265,8 @@ class Updater $this->markComponentSuccessfullyUpdated($componentName, $fileVersion); } catch (UpdaterErrorException $e) { $this->executeListenerHook('onError', array($componentName, $fileVersion, $e)); - throw $e; + } catch (\Exception $e) { $warningMessages[] = $e->getMessage(); @@ -583,7 +584,9 @@ class Updater // make sure to check for them here if ($e instanceof Zend_Db_Exception) { throw new UpdaterErrorException($e->getMessage(), $e->getCode(), $e); - } else { + } else if ($e instanceof MissingFilePermissionException) { + throw new UpdaterErrorException($e->getMessage(), $e->getCode(), $e); + }{ throw $e; } } diff --git a/core/Updates/2.16.3-b3.php b/core/Updates/2.16.3-b3.php new file mode 100644 index 0000000000..4d28615f6f --- /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 0000000000..d2a394194e --- /dev/null +++ b/core/Updates/2.16.3-rc2.php @@ -0,0 +1,28 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Updates; + +use Piwik\Plugins\ScheduledReports\API as ScheduledReportsAPI; +use Piwik\Plugins\ScheduledReports\Model as ScheduledReportsModel; +use Piwik\Site; +use Piwik\Updater; +use Piwik\Updates as PiwikUpdates; + +/** + * Mark the upgrade as major as the field visit_entry_idaction_url was updated in https://github.com/piwik/piwik/pull/10510 + */ +class Updates_2_16_3_rc2 extends PiwikUpdates +{ + + public static function isMajorUpdate() + { + return true; + } + +} diff --git a/core/View.php b/core/View.php index 0a2cbabb67..0c9b379a67 100644 --- a/core/View.php +++ b/core/View.php @@ -116,6 +116,7 @@ class View implements ViewInterface protected $templateVars = array(); private $contentType = 'text/html; charset=utf-8'; private $xFrameOptions = null; + private $enableCacheBuster = true; /** * Constructor. @@ -146,6 +147,14 @@ class View implements ViewInterface } /** + * Disables the cache buster (adding of ?cb=...) to JavaScript and stylesheet files + */ + public function disableCacheBuster() + { + $this->enableCacheBuster = false; + } + + /** * Returns the template filename. * * @return string @@ -237,9 +246,8 @@ class View implements ViewInterface } else { $cacheBuster = UIAssetCacheBuster::getInstance()->piwikVersionBasedCacheBuster(); } - $this->cacheBuster = $cacheBuster; - + $this->loginModule = Piwik::getLoginPluginName(); $user = APIUsersManager::getInstance()->getUser($this->userLogin); @@ -260,6 +268,16 @@ class View implements ViewInterface return $this->renderTwigTemplate(); } + /** + * @internal + * @ignore + * @return Twig_Environment + */ + public function getTwig() + { + return $this->twig; + } + protected function renderTwigTemplate() { try { @@ -272,7 +290,9 @@ class View implements ViewInterface throw $ex; } - $output = $this->applyFilter_cacheBuster($output); + if ($this->enableCacheBuster) { + $output = $this->applyFilter_cacheBuster($output); + } $helper = new Theme; $output = $helper->rewriteAssetsPathToTheme($output); diff --git a/js/piwik.js b/js/piwik.js index 6e07cbdd2b..59f0defc99 100644 --- a/js/piwik.js +++ b/js/piwik.js @@ -1030,7 +1030,8 @@ if (typeof JSON2 !== 'object' && typeof window.JSON === 'object' && window.JSON. /*global _paq:true */ /*members push */ /*global Piwik:true */ -/*members addPlugin, getTracker, getAsyncTracker, getAsyncTrackers, addTracker, trigger, on, off */ +/*members addPlugin, getTracker, getAsyncTracker, getAsyncTrackers, addTracker, trigger, on, off, retryMissedPluginCalls, + DOM, onLoad, onReady*/ /*global Piwik_Overlay_Client */ /*global AnalyticsTracker:true */ /*members initialize */ @@ -1086,7 +1087,9 @@ if (typeof window.Piwik !== 'object') { iterator, /* local Piwik */ - Piwik; + Piwik, + + missedPluginTrackerCalls = []; /************************************************************ * Private methods @@ -1178,62 +1181,81 @@ if (typeof window.Piwik !== 'object') { * [ functionObject, optional_parameters ] */ function apply() { - var i, j, f, parameterArray; + var i, j, f, parameterArray, trackerCall; for (i = 0; i < arguments.length; i += 1) { + trackerCall = null; + if (arguments[i] && arguments[i].slice) { + trackerCall = arguments[i].slice(); + } parameterArray = arguments[i]; f = parameterArray.shift(); - for (j = 0; j < asyncTrackers.length; j++) { - if (isString(f)) { - var context = asyncTrackers[j]; - var fParts; - - var isStaticPluginCall = f.indexOf('::') > 0; - if (isStaticPluginCall) { - fParts = f.split('::'); - context = fParts[0]; - f = fParts[1]; + var fParts, context; + + var isStaticPluginCall = isString(f) && f.indexOf('::') > 0; + if (isStaticPluginCall) { + // a static method will not be called on a tracker and is not dependent on the existance of a + // tracker etc + fParts = f.split('::'); + context = fParts[0]; + f = fParts[1]; + + if ('object' === typeof Piwik[context] && 'function' === typeof Piwik[context][f]) { + Piwik[context][f].apply(Piwik[context], parameterArray); + } else if (trackerCall) { + // we try to call that method again later as the plugin might not be loaded yet + // a plugin can call "Piwik.retryMissedPluginCalls();" once it has been loaded and then the + // method call to "Piwik[context][f]" may be executed + missedPluginTrackerCalls.push(trackerCall); + } - if ('object' === typeof Piwik[context] && 'function' === typeof Piwik[context][f]) { - Piwik[context][f].apply(Piwik[context], parameterArray); + } else { + for (j = 0; j < asyncTrackers.length; j++) { + if (isString(f)) { + context = asyncTrackers[j]; + + var isPluginTrackerCall = f.indexOf('.') > 0; + + if (isPluginTrackerCall) { + fParts = f.split('.'); + if (context && 'object' === typeof context[fParts[0]]) { + context = context[fParts[0]]; + f = fParts[1]; + } else if (trackerCall) { + // we try to call that method again later as the plugin might not be loaded yet + missedPluginTrackerCalls.push(trackerCall); + break; + } } - return; - } - - var isPluginTrackerCall = f.indexOf('.') > 0; - - if (isPluginTrackerCall) { - fParts = f.split('.'); - context = context[fParts[0]]; - f = fParts[1]; - } + if (context[f]) { + context[f].apply(context, parameterArray); + } else { + var message = 'The method \'' + f + '\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript'; + logConsoleError(message); - if (context[f]) { - context[f].apply(context, parameterArray); - } else { - var message = 'The method \'' + f + '\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript'; - logConsoleError(message); - if (!isPluginTrackerCall) { - throw new TypeError(message); + if (!isPluginTrackerCall) { + // do not trigger an error if it is a call to a plugin as the plugin may just not be + // loaded yet etc + throw new TypeError(message); + } } - } - if (f === 'addTracker') { - // addTracker adds an entry to asyncTrackers and would otherwise result in an endless loop - break; - } + if (f === 'addTracker') { + // addTracker adds an entry to asyncTrackers and would otherwise result in an endless loop + break; + } - if (f === 'setTrackerUrl' || f === 'setSiteId') { - // these two methods should be only executed on the first tracker - break; + if (f === 'setTrackerUrl' || f === 'setSiteId') { + // these two methods should be only executed on the first tracker + break; + } + } else { + f.apply(asyncTrackers[j], parameterArray); } - } else { - f.apply(asyncTrackers[j], parameterArray); } } - } } @@ -1254,6 +1276,79 @@ if (typeof window.Piwik !== 'object') { element['on' + eventType] = eventHandler; } + function trackCallbackOnLoad(callback) + { + if (documentAlias.readyState === 'complete') { + callback(); + } else if (windowAlias.addEventListener) { + windowAlias.addEventListener('load', callback); + } else if (windowAlias.attachEvent) { + windowAlias.attachEvent('onload', callback); + } + } + + function trackCallbackOnReady(callback) + { + var loaded = false; + + if (documentAlias.attachEvent) { + loaded = documentAlias.readyState === 'complete'; + } else { + loaded = documentAlias.readyState !== 'loading'; + } + + if (loaded) { + callback(); + return; + } + + var _timer; + + if (documentAlias.addEventListener) { + addEventListener(documentAlias, 'DOMContentLoaded', function ready() { + documentAlias.removeEventListener('DOMContentLoaded', ready, false); + if (!loaded) { + loaded = true; + callback(); + } + }); + } else if (documentAlias.attachEvent) { + documentAlias.attachEvent('onreadystatechange', function ready() { + if (documentAlias.readyState === 'complete') { + documentAlias.detachEvent('onreadystatechange', ready); + if (!loaded) { + loaded = true; + callback(); + } + } + }); + + if (documentAlias.documentElement.doScroll && windowAlias === windowAlias.top) { + (function ready() { + if (!loaded) { + try { + documentAlias.documentElement.doScroll('left'); + } catch (error) { + setTimeout(ready, 0); + + return; + } + loaded = true; + callback(); + } + }()); + } + } + + // fallback + addEventListener(windowAlias, 'load', function () { + if (!loaded) { + loaded = true; + callback(); + } + }, false); + } + /* * Call plugin hook methods */ @@ -1289,7 +1384,6 @@ if (typeof window.Piwik !== 'object') { var now; executePluginMethod('unload'); - /* * Delay/pause (blocks UI) */ @@ -4766,79 +4860,6 @@ if (typeof window.Piwik !== 'object') { callback(); } - function trackCallbackOnLoad(callback) - { - if (documentAlias.readyState === 'complete') { - callback(); - } else if (windowAlias.addEventListener) { - windowAlias.addEventListener('load', callback); - } else if (windowAlias.attachEvent) { - windowAlias.attachEvent('onload', callback); - } - } - - function trackCallbackOnReady(callback) - { - var loaded = false; - - if (documentAlias.attachEvent) { - loaded = documentAlias.readyState === 'complete'; - } else { - loaded = documentAlias.readyState !== 'loading'; - } - - if (loaded) { - callback(); - return; - } - - var _timer; - - if (documentAlias.addEventListener) { - addEventListener(documentAlias, 'DOMContentLoaded', function ready() { - documentAlias.removeEventListener('DOMContentLoaded', ready, false); - if (!loaded) { - loaded = true; - callback(); - } - }); - } else if (documentAlias.attachEvent) { - documentAlias.attachEvent('onreadystatechange', function ready() { - if (documentAlias.readyState === 'complete') { - documentAlias.detachEvent('onreadystatechange', ready); - if (!loaded) { - loaded = true; - callback(); - } - } - }); - - if (documentAlias.documentElement.doScroll && windowAlias === windowAlias.top) { - (function ready() { - if (!loaded) { - try { - documentAlias.documentElement.doScroll('left'); - } catch (error) { - setTimeout(ready, 0); - - return; - } - loaded = true; - callback(); - } - }()); - } - } - - // fallback - addEventListener(windowAlias, 'load', function () { - if (!loaded) { - loaded = true; - callback(); - } - }, false); - } - /* * Process clicks */ @@ -6605,6 +6626,44 @@ if (typeof window.Piwik !== 'object') { initialized: false, /** + * DOM Document related methods + */ + DOM: { + /** + * Adds an event listener to the given element. + * @param element + * @param eventType + * @param eventHandler + * @param useCapture Optional + */ + addEventListener: function (element, eventType, eventHandler, useCapture) { + var captureType = typeof useCapture; + if (captureType === 'undefined') { + useCapture = false; + } + + addEventListener(element, eventType, eventHandler, useCapture); + }, + /** + * Specify a function to execute when the DOM is fully loaded. + * + * If the DOM is already loaded, the function will be executed immediately. + * + * @param function callback + */ + onLoad: trackCallbackOnLoad, + + /** + * Specify a function to execute when the DOM is ready. + * + * If the DOM is already ready, the function will be executed immediately. + * + * @param function callback + */ + onReady: trackCallbackOnReady + }, + + /** * Listen to an event and invoke the handler when a the event is triggered. * * @param string event @@ -6632,7 +6691,7 @@ if (typeof window.Piwik !== 'object') { var i = 0; for (i; i < eventHandlers[event].length; i++) { if (eventHandlers[event][i] === handler) { - delete eventHandlers[event][i]; + eventHandlers[event].splice(i, 1); } } }, @@ -6749,6 +6808,26 @@ if (typeof window.Piwik !== 'object') { return tracker; } } + }, + + /** + * When calling plugin methods via "_paq.push(['...'])" and the plugin is loaded separately because + * piwik.js is not writable then there is a chance that first piwik.js is loaded and later the plugin. + * In this case we would have already executed all "_paq.push" methods and they would not have succeeded + * because the plugin will be loaded only later. In this case, once a plugin is loaded, it should call + * "Piwik.retryMissedPluginCalls()" so they will be executed after all. + * + * @param string piwikUrl + * @param int|string siteId + * @return Tracker + */ + retryMissedPluginCalls: function () { + var missedCalls = missedPluginTrackerCalls; + missedPluginTrackerCalls = []; + var i = 0; + for (i; i < missedCalls.length; i++) { + apply(missedCalls[i]); + } } }; diff --git a/js/piwik.min.js b/js/piwik.min.js index 548d87f62e..1a04b67ec5 100644 --- a/js/piwik.min.js +++ b/js/piwik.min.js @@ -18,54 +18,55 @@ var I="000000";var t=function(ac,ad){return(I+(ad||0)).slice(-ac)};var z="\\u00" }else{at=null}}else{if(typeof at.toJSON=="function"&&((ae!=N&&ae!=O&&ae!=E)||r.call(at,"toJSON"))){at=at.toJSON(ai)}}}if(ag){at=ag.call(aA,ai,at)}if(at===null){return"null"}ae=u.call(at);if(ae==A){return""+at}else{if(ae==N){return at>-1/0&&at<1/0?""+at:"null"}else{if(ae==O){return C(""+at)}}}if(typeof at=="object"){for(af=aj.length;af--;){if(aj[af]===at){throw aa()}}aj.push(at);ar=[];av=ac;ac+=ax;if(ae==E){for(ah=0,af=at.length;ah<af;ah++){ad=p(ah,at,ag,al,ax,ac,aj);ar.push(ad===L?"null":ad)}ao=ar.length?(ax?"[\n"+ac+ar.join(",\n"+ac)+"\n"+av+"]":("["+ar.join(",")+"]")):"[]"}else{m(al||at,function(aC){var aB=p(aC,at,ag,al,ax,ac,aj);if(aB!==L){ar.push(C(aC)+":"+(ax?" ":"")+aB)}});ao=ar.length?(ax?"{\n"+ac+ar.join(",\n"+ac)+"\n"+av+"}":("{"+ar.join(",")+"}")):"{}"}aj.pop();return ao}};V.stringify=function(ac,ae,af){var ad,al,aj,ai;if(e[typeof ae]&&ae){if((ai=u.call(ae))==U){al=ae}else{if(ai==E){aj={};for(var ah=0,ag=ae.length,ak;ah<ag;ak=ae[ah++],((ai=u.call(ak)),ai==O||ai==N)&&(aj[ak]=1)){}}}}if(af){if((ai=u.call(af))==N){if((af-=af%1)>0){for(ad="",af>10&&(af=10); ad.length<af;ad+=" "){}}}else{if(ai==O){ad=af.length<=10?af:af.slice(0,10)}}}return p("",(ak={},ak[""]=ac,ak),al,aj,ad,"",[])}}if(!o("json-parse")){var M=R.fromCharCode;var l={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"};var G,X;var H=function(){G=X=null;throw T()};var y=function(){var ah=X,af=ah.length,ag,ae,ac,ai,ad;while(G<af){ad=ah.charCodeAt(G);switch(ad){case 9:case 10:case 13:case 32:G++;break;case 123:case 125:case 91:case 93:case 58:case 44:ag=F?ah.charAt(G):ah[G];G++;return ag;case 34:for(ag="@",G++;G<af;){ad=ah.charCodeAt(G);if(ad<32){H()}else{if(ad==92){ad=ah.charCodeAt(++G);switch(ad){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:ag+=l[ad];G++;break;case 117:ae=++G;for(ac=G+4;G<ac;G++){ad=ah.charCodeAt(G);if(!(ad>=48&&ad<=57||ad>=97&&ad<=102||ad>=65&&ad<=70)){H()}}ag+=M("0x"+ah.slice(ae,G));break;default:H()}}else{if(ad==34){break}ad=ah.charCodeAt(G);ae=G;while(ad>=32&&ad!=92&&ad!=34){ad=ah.charCodeAt(++G)}ag+=ah.slice(ae,G)}}}if(ah.charCodeAt(G)==34){G++; return ag}H();default:ae=G;if(ad==45){ai=true;ad=ah.charCodeAt(++G)}if(ad>=48&&ad<=57){if(ad==48&&((ad=ah.charCodeAt(G+1)),ad>=48&&ad<=57)){H()}ai=false;for(;G<af&&((ad=ah.charCodeAt(G)),ad>=48&&ad<=57);G++){}if(ah.charCodeAt(G)==46){ac=++G;for(;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}ad=ah.charCodeAt(G);if(ad==101||ad==69){ad=ah.charCodeAt(++G);if(ad==43||ad==45){G++}for(ac=G;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}return +ah.slice(ae,G)}if(ai){H()}if(ah.slice(G,G+4)=="true"){G+=4;return true}else{if(ah.slice(G,G+5)=="false"){G+=5;return false}else{if(ah.slice(G,G+4)=="null"){G+=4;return null}}}H()}}return"$"};var W=function(ad){var ac,ae;if(ad=="$"){H()}if(typeof ad=="string"){if((F?ad.charAt(0):ad[0])=="@"){return ad.slice(1)}if(ad=="["){ac=[];for(;;ae||(ae=true)){ad=y();if(ad=="]"){break}if(ae){if(ad==","){ad=y();if(ad=="]"){H()}}else{H()}}if(ad==","){H()}ac.push(W(ad))}return ac}else{if(ad=="{"){ac={};for(;;ae||(ae=true)){ad=y(); -if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON2=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var l,a={},r={},y=document,f=navigator,P=screen,L=window,g=L.performance||L.mozPerformance||L.msPerformance||L.webkitPerformance,n=L.encodeURIComponent,K=L.decodeURIComponent,i=unescape,A=[],x,d; -function k(ac){try{return K(ac)}catch(ad){return unescape(ac)}}function B(ad){var ac=typeof ad;return ac!=="undefined"}function t(ac){return typeof ac==="function"}function O(ac){return typeof ac==="object"}function q(ac){return typeof ac==="string"||ac instanceof String}function u(ad){if(!ad){return true}var ac;var ae=true;for(ac in ad){if(Object.prototype.hasOwnProperty.call(ad,ac)){ae=false}}return ae}function Y(ac){if(console!==undefined&&console&&console.error){console.error(ac)}}function V(){var ag,af,ai,ac;for(ag=0;ag<arguments.length;ag+=1){ac=arguments[ag];ai=ac.shift();for(af=0;af<A.length;af++){if(q(ai)){var ad=A[af];var ah;var ae=ai.indexOf("::")>0;if(ae){ah=ai.split("::");ad=ah[0];ai=ah[1];if("object"===typeof d[ad]&&"function"===typeof d[ad][ai]){d[ad][ai].apply(d[ad],ac)}return}var aj=ai.indexOf(".")>0;if(aj){ah=ai.split(".");ad=ad[ah[0]];ai=ah[1]}if(ad[ai]){ad[ai].apply(ad,ac)}else{var ak="The method '"+ai+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript'; -Y(ak);if(!aj){throw new TypeError(ak)}}if(ai==="addTracker"){break}if(ai==="setTrackerUrl"||ai==="setSiteId"){break}}else{ai.apply(A[af],ac)}}}}function aa(af,ae,ad,ac){if(af.addEventListener){af.addEventListener(ae,ad,ac);return true}if(af.attachEvent){return af.attachEvent("on"+ae,ad)}af["on"+ae]=ad}function S(ad,ah){var ac="",af,ae,ag;for(af in a){if(Object.prototype.hasOwnProperty.call(a,af)){ae=a[af][ad];if(t(ae)){ag=ae(ah);if(ag){ac+=ag}}}}return ac}function W(){var ac;S("unload");if(l){do{ac=new Date()}while(ac.getTimeAlias()<l)}}function j(ae,ad){var ac=y.createElement("script");ac.type="text/javascript";ac.src=ae;if(ac.readyState){ac.onreadystatechange=function(){var af=this.readyState;if(af==="loaded"||af==="complete"){ac.onreadystatechange=null;ad()}}}else{ac.onload=ad}y.getElementsByTagName("head")[0].appendChild(ac)}function C(){var ac="";try{ac=L.top.document.referrer}catch(ae){if(L.parent){try{ac=L.parent.document.referrer}catch(ad){ac=""}}}if(ac===""){ac=y.referrer}return ac -}function m(ac){var ae=new RegExp("^([a-z]+):"),ad=ae.exec(ac);return ad?ad[1]:null}function c(ac){var ae=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),ad=ae.exec(ac);return ad?ad[1]:ac}function N(ae,ad){var ac="[\\?&#]"+ad+"=([^&#]*)";var ag=new RegExp(ac);var af=ag.exec(ae);return af?K(af[1]):""}function w(ac){return unescape(n(ac))}function Z(ar){var ae=function(ay,ax){return(ay<<ax)|(ay>>>(32-ax))},at=function(aA){var ay="",az,ax;for(az=7;az>=0;az--){ax=(aA>>>(az*4))&15;ay+=ax.toString(16)}return ay},ah,av,au,ad=[],al=1732584193,aj=4023233417,ai=2562383102,ag=271733878,af=3285377520,aq,ap,ao,an,am,aw,ac,ak=[];ar=w(ar);ac=ar.length;for(av=0;av<ac-3;av+=4){au=ar.charCodeAt(av)<<24|ar.charCodeAt(av+1)<<16|ar.charCodeAt(av+2)<<8|ar.charCodeAt(av+3);ak.push(au)}switch(ac&3){case 0:av=2147483648;break;case 1:av=ar.charCodeAt(ac-1)<<24|8388608;break;case 2:av=ar.charCodeAt(ac-2)<<24|ar.charCodeAt(ac-1)<<16|32768;break;case 3:av=ar.charCodeAt(ac-3)<<24|ar.charCodeAt(ac-2)<<16|ar.charCodeAt(ac-1)<<8|128; -break}ak.push(av);while((ak.length&15)!==14){ak.push(0)}ak.push(ac>>>29);ak.push((ac<<3)&4294967295);for(ah=0;ah<ak.length;ah+=16){for(av=0;av<16;av++){ad[av]=ak[ah+av]}for(av=16;av<=79;av++){ad[av]=ae(ad[av-3]^ad[av-8]^ad[av-14]^ad[av-16],1)}aq=al;ap=aj;ao=ai;an=ag;am=af;for(av=0;av<=19;av++){aw=(ae(aq,5)+((ap&ao)|(~ap&an))+am+ad[av]+1518500249)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}for(av=20;av<=39;av++){aw=(ae(aq,5)+(ap^ao^an)+am+ad[av]+1859775393)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}for(av=40;av<=59;av++){aw=(ae(aq,5)+((ap&ao)|(ap&an)|(ao&an))+am+ad[av]+2400959708)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}for(av=60;av<=79;av++){aw=(ae(aq,5)+(ap^ao^an)+am+ad[av]+3395469782)&4294967295;am=an;an=ao;ao=ae(ap,30);ap=aq;aq=aw}al=(al+aq)&4294967295;aj=(aj+ap)&4294967295;ai=(ai+ao)&4294967295;ag=(ag+an)&4294967295;af=(af+am)&4294967295}aw=at(al)+at(aj)+at(ai)+at(ag)+at(af);return aw.toLowerCase()}function R(ae,ac,ad){if(!ae){ae=""}if(!ac){ac=""}if(ae==="translate.googleusercontent.com"){if(ad===""){ad=ac -}ac=N(ac,"u");ae=c(ac)}else{if(ae==="cc.bingj.com"||ae==="webcache.googleusercontent.com"||ae.slice(0,5)==="74.6."){ac=y.links[0].href;ae=c(ac)}}return[ae,ac,ad]}function D(ad){var ac=ad.length;if(ad.charAt(--ac)==="."){ad=ad.slice(0,ac)}if(ad.slice(0,2)==="*."){ad=ad.slice(1)}if(ad.indexOf("/")!==-1){ad=ad.substr(0,ad.indexOf("/"))}return ad}function ab(ad){ad=ad&&ad.text?ad.text:ad;if(!q(ad)){var ac=y.getElementsByTagName("title");if(ac&&B(ac[0])){ad=ac[0].text}}return ad}function H(ac){if(!ac){return[]}if(!B(ac.children)&&B(ac.childNodes)){return ac.children}if(B(ac.children)){return ac.children}return[]}function M(ad,ac){if(!ad||!ac){return false}if(ad.contains){return ad.contains(ac)}if(ad===ac){return true}if(ad.compareDocumentPosition){return !!(ad.compareDocumentPosition(ac)&16)}return false}function E(ae,af){if(ae&&ae.indexOf){return ae.indexOf(af)}if(!B(ae)||ae===null){return -1}if(!ae.length){return -1}var ac=ae.length;if(ac===0){return -1}var ad=0;while(ad<ac){if(ae[ad]===af){return ad -}ad++}return -1}function X(ad,ac){ad=String(ad);return ad.lastIndexOf(ac,0)===0}function J(ad,ac){ad=String(ad);return ad.indexOf(ac,ad.length-ac.length)!==-1}function s(ad,ac){ad=String(ad);return ad.indexOf(ac)!==-1}function e(ad,ac){ad=String(ad);return ad.substr(0,ad.length-ac)}function h(ae){if(!ae){return false}function ac(ag,ah){if(L.getComputedStyle){return y.defaultView.getComputedStyle(ag,null)[ah]}if(ag.currentStyle){return ag.currentStyle[ah]}}function af(ag){ag=ag.parentNode;while(ag){if(ag===y){return true}ag=ag.parentNode}return false}function ad(ai,ao,ag,al,aj,am,ak){var ah=ai.parentNode,an=1;if(!af(ai)){return false}if(9===ah.nodeType){return true}if("0"===ac(ai,"opacity")||"none"===ac(ai,"display")||"hidden"===ac(ai,"visibility")){return false}if(!B(ao)||!B(ag)||!B(al)||!B(aj)||!B(am)||!B(ak)){ao=ai.offsetTop;aj=ai.offsetLeft;al=ao+ai.offsetHeight;ag=aj+ai.offsetWidth;am=ai.offsetWidth;ak=ai.offsetHeight}if(ae===ai&&(0===ak||0===am)&&"hidden"===ac(ai,"overflow")){return false -}if(ah){if(("hidden"===ac(ah,"overflow")||"scroll"===ac(ah,"overflow"))){if(aj+an>ah.offsetWidth+ah.scrollLeft||aj+am-an<ah.scrollLeft||ao+an>ah.offsetHeight+ah.scrollTop||ao+ak-an<ah.scrollTop){return false}}if(ai.offsetParent===ah){aj+=ah.offsetLeft;ao+=ah.offsetTop}return ad(ah,ao,ag,al,aj,am,ak)}return true}return ad(ae)}var U={htmlCollectionToArray:function(ae){var ac=[],ad;if(!ae||!ae.length){return ac}for(ad=0;ad<ae.length;ad++){ac.push(ae[ad])}return ac},find:function(ac){if(!document.querySelectorAll||!ac){return[]}var ad=document.querySelectorAll(ac);return this.htmlCollectionToArray(ad)},findMultiple:function(ae){if(!ae||!ae.length){return[]}var ad,af;var ac=[];for(ad=0;ad<ae.length;ad++){af=this.find(ae[ad]);ac=ac.concat(af)}ac=this.makeNodesUnique(ac);return ac},findNodesByTagName:function(ad,ac){if(!ad||!ac||!ad.getElementsByTagName){return[]}var ae=ad.getElementsByTagName(ac);return this.htmlCollectionToArray(ae)},makeNodesUnique:function(ac){var ah=[].concat(ac);ac.sort(function(aj,ai){if(aj===ai){return 0 -}var al=E(ah,aj);var ak=E(ah,ai);if(al===ak){return 0}return al>ak?-1:1});if(ac.length<=1){return ac}var ad=0;var af=0;var ag=[];var ae;ae=ac[ad++];while(ae){if(ae===ac[ad]){af=ag.push(ad)}ae=ac[ad++]||null}while(af--){ac.splice(ag[af],1)}return ac},getAttributeValueFromNode:function(ag,ae){if(!this.hasNodeAttribute(ag,ae)){return}if(ag&&ag.getAttribute){return ag.getAttribute(ae)}if(!ag||!ag.attributes){return}var af=(typeof ag.attributes[ae]);if("undefined"===af){return}if(ag.attributes[ae].value){return ag.attributes[ae].value}if(ag.attributes[ae].nodeValue){return ag.attributes[ae].nodeValue}var ad;var ac=ag.attributes;if(!ac){return}for(ad=0;ad<ac.length;ad++){if(ac[ad].nodeName===ae){return ac[ad].nodeValue}}return null},hasNodeAttributeWithValue:function(ad,ac){var ae=this.getAttributeValueFromNode(ad,ac);return !!ae},hasNodeAttribute:function(ae,ac){if(ae&&ae.hasAttribute){return ae.hasAttribute(ac)}if(ae&&ae.attributes){var ad=(typeof ae.attributes[ac]);return"undefined"!==ad}return false -},hasNodeCssClass:function(ae,ac){if(ae&&ac&&ae.className){var ad=typeof ae.className==="string"?ae.className.split(" "):[];if(-1!==E(ad,ac)){return true}}return false},findNodesHavingAttribute:function(ag,ae,ac){if(!ac){ac=[]}if(!ag||!ae){return ac}var af=H(ag);if(!af||!af.length){return ac}var ad,ah;for(ad=0;ad<af.length;ad++){ah=af[ad];if(this.hasNodeAttribute(ah,ae)){ac.push(ah)}ac=this.findNodesHavingAttribute(ah,ae,ac)}return ac},findFirstNodeHavingAttribute:function(ae,ad){if(!ae||!ad){return}if(this.hasNodeAttribute(ae,ad)){return ae}var ac=this.findNodesHavingAttribute(ae,ad);if(ac&&ac.length){return ac[0]}},findFirstNodeHavingAttributeWithValue:function(af,ae){if(!af||!ae){return}if(this.hasNodeAttributeWithValue(af,ae)){return af}var ac=this.findNodesHavingAttribute(af,ae);if(!ac||!ac.length){return}var ad;for(ad=0;ad<ac.length;ad++){if(this.getAttributeValueFromNode(ac[ad],ae)){return ac[ad]}}},findNodesHavingCssClass:function(ag,af,ac){if(!ac){ac=[]}if(!ag||!af){return ac}if(ag.getElementsByClassName){var ah=ag.getElementsByClassName(af); -return this.htmlCollectionToArray(ah)}var ae=H(ag);if(!ae||!ae.length){return[]}var ad,ai;for(ad=0;ad<ae.length;ad++){ai=ae[ad];if(this.hasNodeCssClass(ai,af)){ac.push(ai)}ac=this.findNodesHavingCssClass(ai,af,ac)}return ac},findFirstNodeHavingClass:function(ae,ad){if(!ae||!ad){return}if(this.hasNodeCssClass(ae,ad)){return ae}var ac=this.findNodesHavingCssClass(ae,ad);if(ac&&ac.length){return ac[0]}},isLinkElement:function(ad){if(!ad){return false}var ac=String(ad.nodeName).toLowerCase();var af=["a","area"];var ae=E(af,ac);return ae!==-1},setAnyAttribute:function(ad,ac,ae){if(!ad||!ac){return}if(ad.setAttribute){ad.setAttribute(ac,ae)}else{ad[ac]=ae}}};var p={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var ad="."+this.CONTENT_CLASS; -var ac="["+this.CONTENT_ATTR+"]";var ae=U.findMultiple([ad,ac]);return ae},findContentNodesWithinNode:function(af){if(!af){return[]}var ad=U.findNodesHavingCssClass(af,this.CONTENT_CLASS);var ac=U.findNodesHavingAttribute(af,this.CONTENT_ATTR);if(ac&&ac.length){var ae;for(ae=0;ae<ac.length;ae++){ad.push(ac[ae])}}if(U.hasNodeAttribute(af,this.CONTENT_ATTR)){ad.push(af)}else{if(U.hasNodeCssClass(af,this.CONTENT_CLASS)){ad.push(af)}}ad=U.makeNodesUnique(ad);return ad},findParentContentNode:function(ad){if(!ad){return}var ae=ad;var ac=0;while(ae&&ae!==y&&ae.parentNode){if(U.hasNodeAttribute(ae,this.CONTENT_ATTR)){return ae}if(U.hasNodeCssClass(ae,this.CONTENT_CLASS)){return ae}ae=ae.parentNode;if(ac>1000){break}ac++}},findPieceNode:function(ad){var ac;ac=U.findFirstNodeHavingAttribute(ad,this.CONTENT_PIECE_ATTR);if(!ac){ac=U.findFirstNodeHavingClass(ad,this.CONTENT_PIECE_CLASS)}if(ac){return ac}return ad},findTargetNodeNoDefault:function(ac){if(!ac){return}var ad=U.findFirstNodeHavingAttributeWithValue(ac,this.CONTENT_TARGET_ATTR); -if(ad){return ad}ad=U.findFirstNodeHavingAttribute(ac,this.CONTENT_TARGET_ATTR);if(ad){return ad}ad=U.findFirstNodeHavingClass(ac,this.CONTENT_TARGET_CLASS);if(ad){return ad}},findTargetNode:function(ac){var ad=this.findTargetNodeNoDefault(ac);if(ad){return ad}return ac},findContentName:function(ad){if(!ad){return}var ag=U.findFirstNodeHavingAttributeWithValue(ad,this.CONTENT_NAME_ATTR);if(ag){return U.getAttributeValueFromNode(ag,this.CONTENT_NAME_ATTR)}var ac=this.findContentPiece(ad);if(ac){return this.removeDomainIfIsInLink(ac)}if(U.hasNodeAttributeWithValue(ad,"title")){return U.getAttributeValueFromNode(ad,"title")}var ae=this.findPieceNode(ad);if(U.hasNodeAttributeWithValue(ae,"title")){return U.getAttributeValueFromNode(ae,"title")}var af=this.findTargetNode(ad);if(U.hasNodeAttributeWithValue(af,"title")){return U.getAttributeValueFromNode(af,"title")}},findContentPiece:function(ad){if(!ad){return}var af=U.findFirstNodeHavingAttributeWithValue(ad,this.CONTENT_PIECE_ATTR);if(af){return U.getAttributeValueFromNode(af,this.CONTENT_PIECE_ATTR) -}var ac=this.findPieceNode(ad);var ae=this.findMediaUrlInNode(ac);if(ae){return this.toAbsoluteUrl(ae)}},findContentTarget:function(ae){if(!ae){return}var af=this.findTargetNode(ae);if(U.hasNodeAttributeWithValue(af,this.CONTENT_TARGET_ATTR)){return U.getAttributeValueFromNode(af,this.CONTENT_TARGET_ATTR)}var ad;if(U.hasNodeAttributeWithValue(af,"href")){ad=U.getAttributeValueFromNode(af,"href");return this.toAbsoluteUrl(ad)}var ac=this.findPieceNode(ae);if(U.hasNodeAttributeWithValue(ac,"href")){ad=U.getAttributeValueFromNode(ac,"href");return this.toAbsoluteUrl(ad)}},isSameDomain:function(ac){if(!ac||!ac.indexOf){return false}if(0===ac.indexOf(this.getLocation().origin)){return true}var ad=ac.indexOf(this.getLocation().host);if(8>=ad&&0<=ad){return true}return false},removeDomainIfIsInLink:function(ae){var ad="^https?://[^/]+";var ac="^.*//[^/]+";if(ae&&ae.search&&-1!==ae.search(new RegExp(ad))&&this.isSameDomain(ae)){ae=ae.replace(new RegExp(ac),"");if(!ae){ae="/"}}return ae},findMediaUrlInNode:function(ag){if(!ag){return -}var ae=["img","embed","video","audio"];var ac=ag.nodeName.toLowerCase();if(-1!==E(ae,ac)&&U.findFirstNodeHavingAttributeWithValue(ag,"src")){var af=U.findFirstNodeHavingAttributeWithValue(ag,"src");return U.getAttributeValueFromNode(af,"src")}if(ac==="object"&&U.hasNodeAttributeWithValue(ag,"data")){return U.getAttributeValueFromNode(ag,"data")}if(ac==="object"){var ah=U.findNodesByTagName(ag,"param");if(ah&&ah.length){var ad;for(ad=0;ad<ah.length;ad++){if("movie"===U.getAttributeValueFromNode(ah[ad],"name")&&U.hasNodeAttributeWithValue(ah[ad],"value")){return U.getAttributeValueFromNode(ah[ad],"value")}}}var ai=U.findNodesByTagName(ag,"embed");if(ai&&ai.length){return this.findMediaUrlInNode(ai[0])}}},trim:function(ac){if(ac&&String(ac)===ac){return ac.replace(/^\s+|\s+$/g,"")}return ac},isOrWasNodeInViewport:function(ah){if(!ah||!ah.getBoundingClientRect||ah.nodeType!==1){return true}var ag=ah.getBoundingClientRect();var af=y.documentElement||{};var ae=ag.top<0;if(ae&&ah.offsetTop){ae=(ah.offsetTop+ag.height)>0 -}var ad=af.clientWidth;if(L.innerWidth&&ad>L.innerWidth){ad=L.innerWidth}var ac=af.clientHeight;if(L.innerHeight&&ac>L.innerHeight){ac=L.innerHeight}return((ag.bottom>0||ae)&&ag.right>0&&ag.left<ad&&((ag.top<ac)||ae))},isNodeVisible:function(ad){var ac=h(ad);var ae=this.isOrWasNodeInViewport(ad);return ac&&ae},buildInteractionRequestParams:function(ac,ad,ae,af){var ag="";if(ac){ag+="c_i="+n(ac)}if(ad){if(ag){ag+="&"}ag+="c_n="+n(ad)}if(ae){if(ag){ag+="&"}ag+="c_p="+n(ae)}if(af){if(ag){ag+="&"}ag+="c_t="+n(af)}return ag},buildImpressionRequestParams:function(ac,ad,ae){var af="c_n="+n(ac)+"&c_p="+n(ad);if(ae){af+="&c_t="+n(ae)}return af},buildContentBlock:function(ae){if(!ae){return}var ac=this.findContentName(ae);var ad=this.findContentPiece(ae);var af=this.findContentTarget(ae);ac=this.trim(ac);ad=this.trim(ad);af=this.trim(af);return{name:ac||"Unknown",piece:ad||"Unknown",target:af||""}},collectContent:function(af){if(!af||!af.length){return[]}var ae=[];var ac,ad;for(ac=0;ac<af.length; -ac++){ad=this.buildContentBlock(af[ac]);if(B(ad)){ae.push(ad)}}return ae},setLocation:function(ac){this.location=ac},getLocation:function(){var ac=this.location||L.location;if(!ac.origin){ac.origin=ac.protocol+"//"+ac.hostname+(ac.port?":"+ac.port:"")}return ac},toAbsoluteUrl:function(ad){if((!ad||String(ad)!==ad)&&ad!==""){return ad}if(""===ad){return this.getLocation().href}if(ad.search(/^\/\//)!==-1){return this.getLocation().protocol+ad}if(ad.search(/:\/\//)!==-1){return ad}if(0===ad.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ad}if(0===ad.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ad}if(0===ad.search("^[a-zA-Z]{2,11}:")){return ad}if(ad.search(/^\//)!==-1){return this.getLocation().origin+ad}var ac="(.*/)";var ae=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ac))[0];return ae+ad},isUrlToCurrentDomain:function(ad){var ae=this.toAbsoluteUrl(ad);if(!ae){return false}var ac=this.getLocation().origin; -if(ac===ae){return true}if(0===String(ae).indexOf(ac)){if(":"===String(ae).substr(ac.length,1)){return false}return true}return false},setHrefAttribute:function(ad,ac){if(!ad||!ac){return}U.setAnyAttribute(ad,"href",ac)},shouldIgnoreInteraction:function(ae){var ad=U.hasNodeAttribute(ae,this.CONTENT_IGNOREINTERACTION_ATTR);var ac=U.hasNodeCssClass(ae,this.CONTENT_IGNOREINTERACTION_CLASS);return ad||ac}};function G(ad,ag){if(ag){return ag}if(s(ad,"?")){var af=ad.indexOf("?");ad=ad.slice(0,af)}if(J(ad,"piwik.php")){ad=e(ad,"piwik.php".length)}else{if(J(ad,".php")){var ac=ad.lastIndexOf("/");var ae=1;ad=ad.slice(0,ac+ae)}}if(J(ad,"/js/")){ad=e(ad,"js/".length)}return ad}function F(ai){var ak="Piwik_Overlay";var ad=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var ae=ad.exec(y.referrer);if(ae){var ag=ae[1];if(ag!==String(ai)){return false}var ah=ae[2],ac=ae[3],af=ae[4];if(!af){af=""}else{if(af.indexOf("&segment=")===0){af=af.substr("&segment=".length) -}}L.name=ak+"###"+ah+"###"+ac+"###"+af}var aj=L.name.split("###");return aj.length===4&&aj[0]===ak}function Q(ad,aj,af){var ai=L.name.split("###"),ah=ai[1],ac=ai[2],ag=ai[3],ae=G(ad,aj);j(ae+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(ae,af,ah,ac,ag)})}function o(){var ae;try{ae=L.frameElement}catch(ad){return true}if(B(ae)){return(ae&&String(ae.nodeName).toLowerCase()==="iframe")?true:false}try{return L.self!==L.top}catch(ac){return true}}function I(bM,bG){var bC=R(y.domain,L.location.href,C()),cl=D(bC[0]),bm=k(bC[1]),a1=k(bC[2]),cj=false,bQ="GET",cx=bQ,aq="application/x-www-form-urlencoded; charset=UTF-8",b2=aq,am=bM||"",bh="",cp="",bE=bG||"",ba="",bn="",aL,aX="",cu=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ai=[cl],bb=[],bk=[],aO=[],bi=500,cc,aM,bq,bo,ac,bY=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bg=["pk_kwd","piwik_kwd","utm_term"],aY="_pk_",cn,a3,aZ=false,ch,aU,a7,cd=33955200000,bW=1800000,ct=15768000000,aJ=true,bU=0,bp=false,ay=false,bJ,bu={},bT={},a0={},a6=200,cq={},cv={},bI=[],bN=false,b6=false,ad=false,cw=false,aw=false,aT=o(),co=null,bK,az,bc,bF=Z,a2,at; -try{aX=y.title}catch(b4){aX=""}function cA(cK,cH,cG,cJ,cF,cI){if(aZ){return}var cE;if(cG){cE=new Date();cE.setTime(cE.getTime()+cG)}y.cookie=cK+"="+n(cH)+(cG?";expires="+cE.toGMTString():"")+";path="+(cJ||"/")+(cF?";domain="+cF:"")+(cI?";secure":"")}function al(cG){if(aZ){return 0}var cE=new RegExp("(^|;)[ ]*"+cG+"=([^;]*)"),cF=cE.exec(y.cookie);return cF?K(cF[2]):0}function bA(cE){var cF;if(bo){cF=new RegExp("#.*");return cE.replace(cF,"")}return cE}function bt(cG,cE){var cH=m(cE),cF;if(cH){return cE}if(cE.slice(0,1)==="/"){return m(cG)+"://"+c(cG)+cE}cG=bA(cG);cF=cG.indexOf("?");if(cF>=0){cG=cG.slice(0,cF)}cF=cG.lastIndexOf("/");if(cF!==cG.length-1){cG=cG.slice(0,cF+1)}return cG+cE}function ca(cG,cE){var cF;cG=String(cG).toLowerCase();cE=String(cE).toLowerCase();if(cG===cE){return true}if(cE.slice(0,1)==="."){if(cG===cE.slice(1)){return true}cF=cG.length-cE.length;if((cF>0)&&(cG.slice(cF)===cE)){return true}}return false}function bS(cE){var cF=document.createElement("a");if(cE.indexOf("//")!==0&&cE.indexOf("http")!==0){if(cE.indexOf("*")===0){cE=cE.substr(1) -}if(cE.indexOf(".")===0){cE=cE.substr(1)}cE="http://"+cE}cF.href=p.toAbsoluteUrl(cE);if(cF.pathname){return cF.pathname}return""}function aK(cF,cE){if(!X(cE,"/")){cE="/"+cE}if(!X(cF,"/")){cF="/"+cF}var cG=(cE==="/"||cE==="/*");if(cG){return true}if(cF===cE){return true}cE=String(cE).toLowerCase();cF=String(cF).toLowerCase();if(J(cE,"*")){cE=cE.slice(0,-1);cG=(!cE||cE==="/");if(cG){return true}if(cF===cE){return true}return cF.indexOf(cE)===0}if(!J(cF,"/")){cF+="/"}if(!J(cE,"/")){cE+="/"}return cF.indexOf(cE)===0}function af(cI,cK){var cF,cE,cG,cH,cJ;for(cF=0;cF<ai.length;cF++){cH=D(ai[cF]);cJ=bS(ai[cF]);if(ca(cI,cH)&&aK(cK,cJ)){return true}}return false}function aD(cH){var cF,cE,cG;for(cF=0;cF<ai.length;cF++){cE=D(ai[cF].toLowerCase());if(cH===cE){return true}if(cE.slice(0,1)==="."){if(cH===cE.slice(1)){return true}cG=cH.length-cE.length;if((cG>0)&&(cH.slice(cG)===cE)){return true}}}return false}function bX(cE,cG){var cF=new Image(1,1);cF.onload=function(){x=0;if(typeof cG==="function"){cG() -}};cE=cE.replace("send_image=0","send_image=1");cF.src=am+(am.indexOf("?")<0?"?":"&")+cE}function cs(cF,cI,cE){if(!B(cE)||null===cE){cE=true}try{var cH=L.XMLHttpRequest?new L.XMLHttpRequest():L.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;cH.open("POST",am,true);cH.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)&&cE){bX(cF,cI)}else{if(this.readyState===4&&(typeof cI==="function")){cI()}}};cH.setRequestHeader("Content-Type",b2);cH.send(cF)}catch(cG){if(cE){bX(cF,cI)}}}function bO(cF){var cE=new Date();var cG=cE.getTime()+cF;if(!l||cG>l){l=cG}}function bV(cE){if(bK||!aM){return}bK=setTimeout(function cF(){bK=null;if(!aT){aT=(!y.hasFocus||y.hasFocus())}if(!aT){bV(aM);return}if(bq()){return}var cG=new Date(),cH=aM-(cG.getTime()-co);cH=Math.min(aM,cH);bV(cH)},cE||aM)}function bj(){if(!bK){return}clearTimeout(bK);bK=null}function aQ(){aT=true;if(bq()){return}bV()}function aj(){bj()}function cC(){if(aw||!aM){return}aw=true;aa(L,"focus",aQ); -aa(L,"blur",aj);bV()}function b7(cI){var cF=new Date();var cE=cF.getTime();co=cE;if(b6&&cE<b6){var cG=b6-cE;setTimeout(cI,cG);bO(cG+50);b6+=50;return}if(b6===false){var cH=800;b6=cE+cH}cI()}function bf(cF,cE,cG){if(!ch&&cF){b7(function(){if(cx==="POST"){cs(cF,cG)}else{bX(cF,cG)}bO(cE)})}if(!aw){cC()}else{bV()}}function bR(cE){if(ch){return false}return(cE&&cE.length)}function cB(cG,cE){if(!bR(cG)){return}var cF='{"requests":["?'+cG.join('","?')+'"]}';b7(function(){cs(cF,null,false);bO(cE)})}function aB(cE){return aY+cE+"."+bE+"."+a2}function bD(){if(aZ){return"0"}if(!B(f.cookieEnabled)){var cE=aB("testcookie");cA(cE,"1");return al(cE)==="1"?"1":"0"}return f.cookieEnabled?"1":"0"}function aW(){a2=bF((cn||cl)+(a3||"/")).slice(0,4)}function bv(){var cF=aB("cvar"),cE=al(cF);if(cE.length){cE=JSON2.parse(cE);if(O(cE)){return cE}}return{}}function b8(){if(ay===false){ay=bv()}}function ci(){return bF((f.userAgent||"")+(f.platform||"")+JSON2.stringify(cv)+(new Date()).getTime()+Math.random()).slice(0,16) -}function cf(){var cG=new Date(),cE=Math.round(cG.getTime()/1000),cF=aB("id"),cJ=al(cF),cI,cH;if(cJ){cI=cJ.split(".");cI.unshift("0");if(bn.length){cI[1]=bn}return cI}if(bn.length){cH=bn}else{if("0"===bD()){cH=""}else{cH=ci()}}cI=["1",cH,cE,0,cE,"",""];return cI}function aF(){var cL=cf(),cH=cL[0],cI=cL[1],cF=cL[2],cE=cL[3],cJ=cL[4],cG=cL[5];if(!B(cL[6])){cL[6]=""}var cK=cL[6];return{newVisitor:cH,uuid:cI,createTs:cF,visitCount:cE,currentVisitTs:cJ,lastVisitTs:cG,lastEcommerceOrderTs:cK}}function ap(){var cH=new Date(),cF=cH.getTime(),cI=aF().createTs;var cE=parseInt(cI,10);var cG=(cE*1000)+cd-cF;return cG}function au(cE){if(!bE){return}var cG=new Date(),cF=Math.round(cG.getTime()/1000);if(!B(cE)){cE=aF()}var cH=cE.uuid+"."+cE.createTs+"."+cE.visitCount+"."+cF+"."+cE.lastVisitTs+"."+cE.lastEcommerceOrderTs;cA(aB("id"),cH,ap(),a3,cn)}function bl(){var cE=al(aB("ref"));if(cE.length){try{cE=JSON2.parse(cE);if(O(cE)){return cE}}catch(cF){}}return["","",0,""]}function bw(cG,cF,cE){cA(cG,"",-86400,cF,cE) -}function a8(cF){var cE="testvalue";cA("test",cE,10000,null,cF);if(al("test")===cE){bw("test",null,cF);return true}return false}function an(){var cG=aZ;aZ=false;var cE=["id","ses","cvar","ref"];var cF,cH;for(cF=0;cF<cE.length;cF++){cH=aB(cE[cF]);if(0!==al(cH)){bw(cH,a3,cn)}}aZ=cG}function bB(cE){bE=cE;au()}function cD(cI){if(!cI||!O(cI)){return}var cH=[];var cG;for(cG in cI){if(Object.prototype.hasOwnProperty.call(cI,cG)){cH.push(cG)}}var cJ={};cH.sort();var cE=cH.length;var cF;for(cF=0;cF<cE;cF++){cJ[cH[cF]]=cI[cH[cF]]}return cJ}function bL(){cA(aB("ses"),"*",bW,a3,cn)}function aV(){var cH="";var cF="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var cG=cF.length;var cE;for(cE=0;cE<6;cE++){cH+=cF.charAt(Math.floor(Math.random()*cG))}return cH}function bZ(cG,c1,c2,cH){var c0,cF=new Date(),cO=Math.round(cF.getTime()/1000),cL,cZ,cI=1024,c7,cP,cX=ay,cJ=aB("ses"),cV=aB("ref"),cS=aB("cvar"),cT=al(cJ),cY=bl(),c4=aL||bm,cM,cE;if(aZ){an()}if(ch){return""}var cU=aF();if(!B(cH)){cH="" -}var cR=y.characterSet||y.charset;if(!cR||cR.toLowerCase()==="utf-8"){cR=null}cM=cY[0];cE=cY[1];cL=cY[2];cZ=cY[3];if(!cT){var c3=bW/1000;if(!cU.lastVisitTs||(cO-cU.lastVisitTs)>c3){cU.visitCount++;cU.lastVisitTs=cU.currentVisitTs}if(!a7||!cM.length){for(c0 in bY){if(Object.prototype.hasOwnProperty.call(bY,c0)){cM=N(c4,bY[c0]);if(cM.length){break}}}for(c0 in bg){if(Object.prototype.hasOwnProperty.call(bg,c0)){cE=N(c4,bg[c0]);if(cE.length){break}}}}c7=c(a1);cP=cZ.length?c(cZ):"";if(c7.length&&!aD(c7)&&(!a7||!cP.length||aD(cP))){cZ=a1}if(cZ.length||cM.length){cL=cO;cY=[cM,cE,cL,bA(cZ.slice(0,cI))];cA(cV,JSON2.stringify(cY),ct,a3,cn)}}cG+="&idsite="+bE+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+cF.getHours()+"&m="+cF.getMinutes()+"&s="+cF.getSeconds()+"&url="+n(bA(c4))+(a1.length?"&urlref="+n(bA(a1)):"")+((ba&&ba.length)?"&uid="+n(ba):"")+"&_id="+cU.uuid+"&_idts="+cU.createTs+"&_idvc="+cU.visitCount+"&_idn="+cU.newVisitor+(cM.length?"&_rcn="+n(cM):"")+(cE.length?"&_rck="+n(cE):"")+"&_refts="+cL+"&_viewts="+cU.lastVisitTs+(String(cU.lastEcommerceOrderTs).length?"&_ects="+cU.lastEcommerceOrderTs:"")+(String(cZ).length?"&_ref="+n(bA(cZ.slice(0,cI))):"")+(cR?"&cs="+n(cR):"")+"&send_image=0"; -for(c0 in cv){if(Object.prototype.hasOwnProperty.call(cv,c0)){cG+="&"+c0+"="+cv[c0]}}var c6=[];if(c1){for(c0 in c1){if(Object.prototype.hasOwnProperty.call(c1,c0)&&/^dimension\d+$/.test(c0)){var cK=c0.replace("dimension","");c6.push(parseInt(cK,10));c6.push(String(cK));cG+="&"+c0+"="+c1[c0];delete c1[c0]}}}if(c1&&u(c1)){c1=null}for(c0 in a0){if(Object.prototype.hasOwnProperty.call(a0,c0)){var cQ=(-1===E(c6,c0));if(cQ){cG+="&dimension"+c0+"="+a0[c0]}}}if(c1){cG+="&data="+n(JSON2.stringify(c1))}else{if(ac){cG+="&data="+n(JSON2.stringify(ac))}}function cN(c8,c9){var da=JSON2.stringify(c8);if(da.length>2){return"&"+c9+"="+n(da)}return""}var c5=cD(bu);var cW=cD(bT);cG+=cN(c5,"cvar");cG+=cN(cW,"e_cvar");if(ay){cG+=cN(ay,"_cvar");for(c0 in cX){if(Object.prototype.hasOwnProperty.call(cX,c0)){if(ay[c0][0]===""||ay[c0][1]===""){delete ay[c0]}}}if(bp){cA(cS,JSON2.stringify(ay),bW,a3,cn)}}if(aJ){if(bU){cG+=">_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 095cc49a14..00aea52f6e 100644 --- a/lang/en.json +++ b/lang/en.json @@ -399,6 +399,9 @@ "Warnings": "Warnings", "WarningPhpVersionXIsTooOld": "The PHP version %s you are using has reached its End of Life (EOL). You are strongly urged to upgrade to a current version, as using this version may expose you to security vulnerabilities and bugs that have been fixed in more recent versions of PHP.", "WarningPiwikWillStopSupportingPHPVersion": "Piwik will stop supporting PHP %1$s in the next major version. Upgrade your PHP to at least PHP %2$s, before it's too late!", + "YouMustUpgradePhpVersionToReceiveLatestPiwik": "You must upgrade your PHP version in order to receive the latest Piwik update.", + "PiwikCannotBeUpgradedBecausePhpIsTooOld": "Piwik cannot be upgraded to the latest major version because your PHP version is too old.", + "PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Please upgrade your PHP version to at least PHP %s so your Piwik analytics data stays secure.", "WarningFileIntegrityNoManifest": "File integrity check could not be performed due to missing manifest.inc.php.", "WarningFileIntegrityNoManifestDeployingFromGit": "If you are deploying Piwik from Git, this message is normal.", "WarningFileIntegrityNoMd5file": "File integrity check could not be completed due to missing md5_file() function.", diff --git a/lang/es.json b/lang/es.json index 8dc19b7a06..7de9883818 100644 --- a/lang/es.json +++ b/lang/es.json @@ -286,6 +286,7 @@ "Password": "Contraseña", "Period": "Periodo", "Piechart": "Gráfica circular", + "PiwikIsACollaborativeProjectYouCanContributeAndDonate": "%1$sPiwik%2$s es un proyecto de colaboración traído para ti por los miembros del %7$sequipo de Piwik%8$s así como muchos otros colaboradores alrededor del mundo. <br\/> Si eres un fan de Piwik, puedes ayudar: descubrir %3$sCómo participar en Piwik%4$s, o %5$sdona ahora%6$s para ayudar a financiar Piwik 3.0!", "PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s está disponible. Por favor alerte al %2$s administrador Piwik%3$s.", "PiwikXIsAvailablePleaseUpdateNow": "Piwik %1$s está disponible. %2$s ¡Por favor, actualice ahora!%3$s (ver %4$scambios%5$s).", "PleaseSpecifyValue": "Por favor especifique un valor para '%s'.", diff --git a/lang/it.json b/lang/it.json index 7612c7c81e..b6ca374ee9 100644 --- a/lang/it.json +++ b/lang/it.json @@ -367,7 +367,7 @@ "TrackingScopeVisit": "Visita", "TransitionsRowActionTooltip": "Guarda cosa hanno fatto i visitatori prima e dopo aver visto questa pagina", "TransitionsRowActionTooltipTitle": "Apri Transizioni", - "TranslatorName": "Alessandro Coscia, Giovdi, Yusef Maali, Andrea Marchitelli (CILEA), Fabrizio Rocca, Ted Mosby, Alfio E. Fresta, Giovanni Matina, Blau", + "TranslatorName": "Alessandro Coscia, Giovdi, Yusef Maali, Andrea Marchitelli (CILEA), <a href=\"https:\/\/www.fabriziorocca.it\/\">Fabrizio Rocca<\/a>, Ted Mosby, Alfio E. Fresta, Giovanni Matina, Blau", "UniquePurchases": "Acquisti unici", "Unknown": "Sconosciuto", "Upload": "Carica", diff --git a/misc/log-analytics b/misc/log-analytics -Subproject 2878508f66c10d998c9e4e0bc276988b3755cde +Subproject 9c4f36e66fc9b82a13643aae7d3310bfbfc731f @@ -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 e35219972b..ced03941ee 100644 --- a/plugins/API/lang/es.json +++ b/plugins/API/lang/es.json @@ -9,6 +9,7 @@ "TopLinkTooltip": "Acceda a sus datos de análisis de internet programáticamente, a través de una sencilla API en json, xml, etc.", "UserAuthentication": "Autenticación de usuario", "UsingTokenAuth": "Si quieres %1$s solicitar datos dentro de un script, un crontab, etc. %2$s tiene que agregar el parámetro %3$s a las llamadas a la URL de la API que requieren autenticación.", - "Glossary": "Glosario" + "Glossary": "Glosario", + "LearnAboutCommonlyUsedTerms": "Obtenga más información de los términos que se utilizan más frecuentemente para aprovechar al máximo de las analíticas de Piwik. %1$s y %2$s." } }
\ No newline at end of file diff --git a/plugins/API/lang/tr.json b/plugins/API/lang/tr.json index 8e9e616b91..dd681977f2 100644 --- a/plugins/API/lang/tr.json +++ b/plugins/API/lang/tr.json @@ -1,12 +1,12 @@ { "API": { - "GenerateVisits": "Eğer bugün için bir veri yoksa öncelikle %1$s eklentisiyle biraz veri oluşturabilirsiniz. %2$s eklentisini aktifleştirin, sonrasında Piwik Yönetim alanından 'Ziyaretçi Oluşturucu' menüsüne tıklayınız.", - "KeepTokenSecret": "token_auth kullanıcı adı ve şifreniz kadar gizlidir, %1$s kimseyle paylaşmayınız%2$s!", - "LoadedAPIs": "%s API başarılı şekilde yüklendi", - "MoreInformation": "Piwik APIsi hakkında daha fazla bilgi için lütfen %1$s Piwik API Kullanımı %2$s ve %3$s Piwik API Referansına %4$s bakınız.", - "PluginDescription": "Piwik'teki tüm veri basit API tarafından ulaşılabilir. Bu plugin xml,json,php,csv ve benzeri şekildeki Web Analatik verisini çağırmak için web servis giriş noktasıdır.", - "ReportingApiReference": "API Referanslarını Raporlamak", - "TopLinkTooltip": "Json, xml veya diğerleri ile Api kullanarak erişin.", + "GenerateVisits": "Bugün için bir veri yoksa %1$s uygulama ekini kullanarak biraz veri oluşturabilirsiniz. %2$s uygulama ekini etkinleştirin. Ardından Piwik Yönetim bölümünden 'Ziyaretçi Üreteci' menüsüne tıklayın.", + "KeepTokenSecret": "Bu token_auth kodu kullanıcı adı ve parolanız kadar gizlidir. %1$s kimseyle paylaşmayın%2$s!", + "LoadedAPIs": "%s API yazılımı yüklendi", + "MoreInformation": "Piwik API yazılımı hakkında ayrıntılı bilgi almak için lütfen %1$s Piwik API Kullanımı %2$s ve %3$s Piwik API Referansı %4$s belgelerine bakın.", + "PluginDescription": "Tüm Piwik verilerine temel API kullanılarak erişilebilir. Bu uygulama eki web istatistiği verilerini xml, json, php, csv ve benzer şekillerde çağırabilen web hizmetinin başlangıç noktasıdır.", + "ReportingApiReference": "Rapor API Referansı", + "TopLinkTooltip": "Web istatistiği verilerine json, xml ve benzer yöntemlerle Temel API üzerinden erişilmesini sağlar.", "UserAuthentication": "Kullanıcı kimlik doğrulaması", "UsingTokenAuth": "Bir script, cron vb içerisinden %1$s verisi çağırmak isterseniz, %2$s kimlik doğrulama gerektiren API bağlantılarına %3$s parametresini eklemelisiniz.", "Glossary": "Sözlük", diff --git a/plugins/Actions/Columns/EntryPageUrl.php b/plugins/Actions/Columns/EntryPageUrl.php index 7f3ef19ad1..6b67b9a092 100644 --- a/plugins/Actions/Columns/EntryPageUrl.php +++ b/plugins/Actions/Columns/EntryPageUrl.php @@ -18,7 +18,7 @@ use Piwik\Tracker\Visitor; class EntryPageUrl extends VisitDimension { protected $columnName = 'visit_entry_idaction_url'; - protected $columnType = 'INTEGER(10) UNSIGNED NULL'; + protected $columnType = 'INTEGER(11) UNSIGNED NULL DEFAULT NULL'; protected function configureSegments() { @@ -42,9 +42,33 @@ class EntryPageUrl extends VisitDimension $idActionUrl = $action->getIdActionUrlForEntryAndExitIds(); } + if($idActionUrl === false) { + return false; + } + return (int) $idActionUrl; } + /* + * @param Request $request + * @param Visitor $visitor + * @param Action|null $action + * @return mixed + */ + public function onExistingVisit(Request $request, Visitor $visitor, $action) + { + $idAction = $visitor->getVisitorColumn('visit_entry_idaction_url'); + + if (is_null($idAction) && !empty($action)) { + $idAction = $action->getIdActionUrlForEntryAndExitIds(); + if (!empty($idAction)) { + return $idAction; + } + } + + return false; + } + public function getName() { return Piwik::translate('Actions_ColumnEntryPageURL'); diff --git a/plugins/Actions/Columns/IdPageview.php b/plugins/Actions/Columns/IdPageview.php index 0fed0cf397..c1d5352153 100644 --- a/plugins/Actions/Columns/IdPageview.php +++ b/plugins/Actions/Columns/IdPageview.php @@ -29,7 +29,7 @@ class IdPageview extends ActionDimension */ public function onNewAction(Request $request, Visitor $visitor, Action $action) { - return $request->getParam('pv_id'); + return substr($request->getParam('pv_id'), 0, 6); } public function getName() diff --git a/plugins/Actions/lang/es.json b/plugins/Actions/lang/es.json index 739ec1ba1d..93759eddff 100644 --- a/plugins/Actions/lang/es.json +++ b/plugins/Actions/lang/es.json @@ -2,6 +2,7 @@ "Actions": { "AvgGenerationTimeTooltip": "Promedio basado en %1$s acceso(s) %2$s entre %3$s y %4$s", "ColumnClickedURL": "URL elegida", + "ColumnActionURL": "URL de acción", "ColumnClicks": "Clics", "ColumnClicksDocumentation": "El número de veces que se ha hecho clic en este enlace.", "ColumnDownloadURL": "URL de descarga", @@ -60,6 +61,7 @@ "WidgetPageUrlsFollowingSearch": "Páginas siguientes a una búsqueda interna", "WidgetSearchCategories": "Categorías de búsqueda", "WidgetSearchKeywords": "Palabras claves de las búsquedas internas del sitio", - "WidgetSearchNoResultKeywords": "Búsquedas por palabras clave sin resultados" + "WidgetSearchNoResultKeywords": "Búsquedas por palabras clave sin resultados", + "ActionType": "Tipo de acción" } }
\ No newline at end of file diff --git a/plugins/Annotations/lang/tr.json b/plugins/Annotations/lang/tr.json index 9c29b5e23b..14531eb745 100644 --- a/plugins/Annotations/lang/tr.json +++ b/plugins/Annotations/lang/tr.json @@ -15,8 +15,8 @@ "InlineQuickHelp": "Önemli etkinlikleri (yeni blog iletileri ya da web sitesi tasarım değişiklikleri gibi), veri incelemelerinizi ya da önemli olduğunu düşündüğünüz konuları kaydetmek için notlar oluşturabilirsiniz.", "LoginToAnnotate": "Not eklemek için oturum açın.", "NoAnnotations": "Bu tarih aralığında bir not yok.", - "PluginDescription": "Websiteniz de yaptığınız değişiklikleri farklı günlerde belirtmek için not eklemeye izin verir, veriniz ile ilgili analizleri saklar ve bunları meslektaşlarınız ile birlikte paylaşmanıza izn verir. Neden o veriye baktığınızı hatırlamanızdan emin olmak için veriye dipnot koyar.", - "ViewAndAddAnnotations": "%s için notları göster ve yeni not ekle...", - "YouCannotModifyThisNote": "Bunu değiştiremezsiniz. Bunun için bu siteye yönetici erişiminiz olması gerekli." + "PluginDescription": "Bu özellik web sitenizde farklı günlerde yaptığınız değişiklikleri veri incelemeleri ve düşüncelerinizi çalışma arkadaşlarınızla paylaşmak için notlar eklenmesini sağlar. Verilerinize not ekleyerek neden bu şekilde görüntülendiklerini hatırlayabilirsiniz.", + "ViewAndAddAnnotations": "%s için notları görüntüle ve yeni not ekle...", + "YouCannotModifyThisNote": "Bu notu siz oluşturmadığınız ya da yönetici yetkileriniz olmadığı için düzenleyemezsiniz." } }
\ No newline at end of file diff --git a/plugins/Contents/lang/es.json b/plugins/Contents/lang/es.json index 67631c79bf..d225a74971 100644 --- a/plugins/Contents/lang/es.json +++ b/plugins/Contents/lang/es.json @@ -8,6 +8,9 @@ "ContentName": "Nombre del contenido", "ContentPiece": "Pieza de contenido", "ContentTarget": "Objetivo del contenido", - "Contents": "Contenidos" + "Contents": "Contenidos", + "InteractionsMetricDocumentation": "El número de veces que se interactuo con un bloque de contenido (ej, un 'clic' en un banner o anuncio).", + "ImpressionsMetricDocumentation": "El número de veces que un bloque de contenido, como un banner o un anuncio, fue mostrado en una página.", + "InteractionRateMetricDocumentation": "La proporción de impresiones de contenido a interacciones." } }
\ No newline at end of file diff --git a/plugins/CoreAdminHome/lang/es.json b/plugins/CoreAdminHome/lang/es.json index 9ff7c4b667..4f19b725e1 100644 --- a/plugins/CoreAdminHome/lang/es.json +++ b/plugins/CoreAdminHome/lang/es.json @@ -3,6 +3,7 @@ "Administration": "Administración", "ArchivingSettings": "Configuración de archivado", "BrandingSettings": "Configuración del Branding", + "ReleaseChannel": "Canal de lanzamiento", "ClickHereToOptIn": "Haga clic aquí para optar.", "ClickHereToOptOut": "Haga clic aquí para no ser seguido.", "CustomLogoFeedbackInfo": "Si personaliza el logo de Piwik, puede que también esté interesado en ocultar el enlace %1$s en el menú superior. Para hacerlo, puede deshabilitar el complemento Feedback en la página de %2$sAdministración de complementos%3$s.", diff --git a/plugins/CoreAdminHome/stylesheets/generalSettings.less b/plugins/CoreAdminHome/stylesheets/generalSettings.less index 958f51e468..9a45fa2b16 100644 --- a/plugins/CoreAdminHome/stylesheets/generalSettings.less +++ b/plugins/CoreAdminHome/stylesheets/generalSettings.less @@ -8,7 +8,8 @@ } // hide PHP is deprecated notification in UI test -.uiTest [notification-id="DeprecatedPHPVersionCheck"] { +.uiTest [notification-id="DeprecatedPHPVersionCheck"], +.uiTest [notification-id="PHPVersionTooOldForNewestPiwikCheck"]{ display: none !important; } diff --git a/plugins/CoreAdminHome/tests/Integration/SetConfigTest.php b/plugins/CoreAdminHome/tests/Integration/SetConfigTest.php index bd1ed5e618..93cf57e7c5 100644 --- a/plugins/CoreAdminHome/tests/Integration/SetConfigTest.php +++ b/plugins/CoreAdminHome/tests/Integration/SetConfigTest.php @@ -36,6 +36,12 @@ class SetConfigTest extends ConsoleCommandTestCase parent::setUp(); } + public function tearDown() + { + parent::tearDown(); + $this->makeLocalConfigWritable(); + } + public function test_Command_SucceedsWhenOptionsUsed() { $code = $this->applicationTester->run(array( @@ -80,6 +86,22 @@ class SetConfigTest extends ConsoleCommandTestCase ); } + public function test_Command_FailsWithMissingFilePermissionException_whenConfigFileNotWritable() + { + $this->makeLocalConfigNotWritable(); + + $code = $this->applicationTester->run(array( + 'command' => 'config:set', + 'assignment' => array( + 'MySection.other_array_value=[]', + ), + '-vvv' => false, + )); + + $this->assertNotEquals(0, $code, $this->getCommandDisplayOutputErrorMessage()); + $this->assertContains('[Piwik\Exception\MissingFilePermissionException]', $this->applicationTester->getDisplay()); + } + public function test_Command_SucceedsWhenArgumentsUsed() { $config = Config::getInstance(); @@ -191,4 +213,23 @@ class SetConfigTest extends ConsoleCommandTestCase unlink($configPath); } } + + protected function makeLocalConfigNotWritable() + { + $local = Config::getInstance()->getLocalPath(); + touch($local); + chmod($local, 0444); + $this->assertFalse(is_writable($local)); + } + + protected function makeLocalConfigWritable() + { + $local = Config::getInstance()->getLocalPath(); + @chmod(dirname($local), 0755); + @chmod($local, 0755); + $this->assertTrue(is_writable(dirname($local))); + if(file_exists($local)) { + $this->assertTrue(is_writable($local)); + } + } } diff --git a/plugins/CoreConsole/Commands/GeneratePlugin.php b/plugins/CoreConsole/Commands/GeneratePlugin.php index 72ef852c81..cfdaee35f5 100644 --- a/plugins/CoreConsole/Commands/GeneratePlugin.php +++ b/plugins/CoreConsole/Commands/GeneratePlugin.php @@ -69,8 +69,12 @@ class GeneratePlugin extends GeneratePluginBase '/ExamplePlugin.php', '/plugin.json', '/README.md', + '/CHANGELOG.md', '/screenshots', '/screenshots/.gitkeep', + '/docs', + '/docs/faq.md', + '/docs/index.md', ); } diff --git a/plugins/CoreHome/Tracker/VisitRequestProcessor.php b/plugins/CoreHome/Tracker/VisitRequestProcessor.php index 019965a958..033399e196 100644 --- a/plugins/CoreHome/Tracker/VisitRequestProcessor.php +++ b/plugins/CoreHome/Tracker/VisitRequestProcessor.php @@ -87,8 +87,7 @@ class VisitRequestProcessor extends RequestProcessor // the IP is needed by isExcluded() and GoalManager->recordGoals() $visitProperties->setProperty('location_ip', $request->getIp()); - // TODO: move VisitExcluded logic to here (or move to service class stored in DI) - $excluded = new VisitExcluded($request, $visitProperties->getProperty('location_ip')); + $excluded = new VisitExcluded($request); if ($excluded->isExcluded()) { return true; } diff --git a/plugins/CoreHome/javascripts/broadcast.js b/plugins/CoreHome/javascripts/broadcast.js index cab2525145..9034c9eef5 100644 --- a/plugins/CoreHome/javascripts/broadcast.js +++ b/plugins/CoreHome/javascripts/broadcast.js @@ -288,9 +288,10 @@ var broadcast = { * * @param {string} str url with parameters to be updated * @param {boolean} [showAjaxLoading] whether to show the ajax loading gif or not. + * @param {string} strHash additional parameters that should be updated on the hash * @return {void} */ - propagateNewPage: function (str, showAjaxLoading) { + propagateNewPage: function (str, showAjaxLoading, strHash) { // abort all existing ajax requests globalAjaxQueue.abort(); @@ -314,6 +315,13 @@ var broadcast = { } } + if (strHash && currentHashStr.length != 0) { + var params_hash_vals = strHash.split("&"); + for (var i = 0; i < params_hash_vals.length; i++) { + currentHashStr = broadcast.updateParamValue(params_hash_vals[i], currentHashStr); + } + } + // Now load the new page. var newUrl = currentSearchStr + currentHashStr; diff --git a/plugins/CoreHome/javascripts/popover.js b/plugins/CoreHome/javascripts/popover.js index 2834432e70..a484f9164f 100644 --- a/plugins/CoreHome/javascripts/popover.js +++ b/plugins/CoreHome/javascripts/popover.js @@ -230,8 +230,9 @@ var Piwik_Popover = (function () { * @param {string} url * @param {string} loadingName * @param {string} [dialogClass] css class to add to dialog + * @param {object} [ajaxRequest] optional instance of ajaxHelper */ - createPopupAndLoadUrl: function (url, loadingName, dialogClass) { + createPopupAndLoadUrl: function (url, loadingName, dialogClass, ajaxRequest) { // make sure the minimum top position of the popover is 15px var ensureMinimumTop = function () { var popoverContainer = $('#Piwik_Popover').parent(); @@ -257,11 +258,14 @@ var Piwik_Popover = (function () { setPopoverTitleIfOneFoundInContainer(); ensureMinimumTop(); }; - var ajaxRequest = new ajaxHelper(); + + if ('undefined' === typeof ajaxRequest) { + ajaxRequest = new ajaxHelper(); + } ajaxRequest.addParams(piwikHelper.getArrayFromQueryString(url), 'get'); ajaxRequest.setCallback(callback); ajaxRequest.setFormat('html'); ajaxRequest.send(false); } }; -})();
\ No newline at end of file +})(); diff --git a/plugins/CorePluginsAdmin/MarketplaceApiClient.php b/plugins/CorePluginsAdmin/MarketplaceApiClient.php index 05b774c360..eebc3d843b 100644 --- a/plugins/CorePluginsAdmin/MarketplaceApiClient.php +++ b/plugins/CorePluginsAdmin/MarketplaceApiClient.php @@ -9,6 +9,7 @@ namespace Piwik\Plugins\CorePluginsAdmin; use Piwik\Cache; +use Piwik\Container\StaticContainer; use Piwik\Http; use Piwik\Version; @@ -128,10 +129,15 @@ class MarketplaceApiClient return PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION . '.' . PHP_RELEASE_VERSION; } + public static function getPiwikVersion() + { + return StaticContainer::get('marketplacePiwikVersion'); + } + private function fetch($action, $params) { $params['php'] = $this->getPhpVersion(); - $params['piwik'] = Version::VERSION; + $params['piwik'] = self::getPiwikVersion(); $params['prefer_stable'] = '1'; ksort($params); $query = http_build_query($params); @@ -188,7 +194,7 @@ class MarketplaceApiClient $latestVersion = array_pop($plugin['versions']); $downloadUrl = $latestVersion['download']; - return $this->domain . $downloadUrl . '?coreVersion=' . Version::VERSION; + return $this->domain . $downloadUrl . '?coreVersion=' . self::getPiwikVersion(); } } diff --git a/plugins/CorePluginsAdmin/PluginInstaller.php b/plugins/CorePluginsAdmin/PluginInstaller.php index ed140d27bc..ab4f7b8622 100644 --- a/plugins/CorePluginsAdmin/PluginInstaller.php +++ b/plugins/CorePluginsAdmin/PluginInstaller.php @@ -12,6 +12,7 @@ use Piwik\Container\StaticContainer; use Piwik\Filechecks; use Piwik\Filesystem; use Piwik\Piwik; +use Piwik\Plugin\Manager as PluginManager; use Piwik\Plugin\Dependency as PluginDependency; use Piwik\Unzip; @@ -49,6 +50,11 @@ class PluginInstaller Filesystem::deleteAllCacheOnUpdate($this->pluginName); + $plugin = PluginManager::getInstance()->getLoadedPlugin($this->pluginName); + if (!empty($plugin)) { + $plugin->reloadPluginInformation(); + } + } catch (\Exception $e) { $this->removeFileIfExists($tmpPluginZip); @@ -160,7 +166,10 @@ class PluginInstaller $requires = (array) $metadata->require; } + $piwikVersion = MarketplaceApiClient::getPiwikVersion(); + $dependency = new PluginDependency(); + $dependency->setPiwikVersion($piwikVersion); $missingDependencies = $dependency->getMissingDependencies($requires); if (!empty($missingDependencies)) { diff --git a/plugins/CorePluginsAdmin/config/config.php b/plugins/CorePluginsAdmin/config/config.php new file mode 100644 index 0000000000..5d30748a94 --- /dev/null +++ b/plugins/CorePluginsAdmin/config/config.php @@ -0,0 +1,7 @@ +<?php + +return array( + 'marketplacePiwikVersion' => function () { + return \Piwik\Version::VERSION; + } +); diff --git a/plugins/CorePluginsAdmin/lang/es.json b/plugins/CorePluginsAdmin/lang/es.json index b0407c02ae..b4a91d7d0a 100644 --- a/plugins/CorePluginsAdmin/lang/es.json +++ b/plugins/CorePluginsAdmin/lang/es.json @@ -38,6 +38,10 @@ "LastCommitTime": "(último cambio %s)", "LastUpdated": "Última actualización", "LicenseHomepage": "Página de la licencia", + "LikeThisPlugin": "¿Satisfecho con este complemento?", + "ConsiderDonating": "Considere una donación", + "CommunityContributedPlugin": "Este es un complemento basado en la suma de voluntades de una comunidad ofrendada de manera gratuita.", + "ConsiderDonatingCreatorOf": "Por favor considere donar al creador de %s", "PluginsExtendPiwik": "Los complementos extienden y amplían las funcionalidades de Piwik.", "OncePluginIsInstalledYouMayActivateHere": "Una vez que el complemento está instalado, puede activarlo o desactivarlo desde aquí.", "Marketplace": "Mercado", diff --git a/plugins/CoreUpdater/Commands/Update.php b/plugins/CoreUpdater/Commands/Update.php index 4c579ad211..be2c105e93 100644 --- a/plugins/CoreUpdater/Commands/Update.php +++ b/plugins/CoreUpdater/Commands/Update.php @@ -163,6 +163,14 @@ class Update extends ConsoleCommand return; } + + if ($updater->hasMajorDbUpdate()) { + $output->writeln(array( + "", + sprintf("<comment>%s \n</comment>", Piwik::translate('CoreUpdater_MajorUpdateWarning1')) + )); + } + $output->writeln(array(" *** Note: this is a Dry Run ***", "")); foreach ($migrationQueries as $query) { diff --git a/plugins/CoreUpdater/Controller.php b/plugins/CoreUpdater/Controller.php index 4e3f20ff42..a39dc172dc 100644 --- a/plugins/CoreUpdater/Controller.php +++ b/plugins/CoreUpdater/Controller.php @@ -159,6 +159,8 @@ class Controller extends \Piwik\Plugin\Controller $messages = $e->getUpdateLogMessages(); } + Filesystem::deleteAllCacheOnUpdate(); + $view->feedbackMessages = $messages; $this->addCustomLogoInfo($view); return $view->render(); diff --git a/plugins/CoreUpdater/Updater.php b/plugins/CoreUpdater/Updater.php index 6912dba335..316f325690 100644 --- a/plugins/CoreUpdater/Updater.php +++ b/plugins/CoreUpdater/Updater.php @@ -10,17 +10,20 @@ namespace Piwik\Plugins\CoreUpdater; use Exception; use Piwik\ArchiveProcessor\Rules; -use Piwik\Config; +use Piwik\Container\StaticContainer; use Piwik\Filechecks; use Piwik\Filesystem; use Piwik\Http; use Piwik\Option; use Piwik\Plugin\Manager as PluginManager; use Piwik\Plugin\ReleaseChannels; +use Piwik\Plugins\CorePluginsAdmin\CorePluginsAdmin; +use Piwik\Plugins\CorePluginsAdmin\MarketplaceApiClient; +use Piwik\Plugins\CorePluginsAdmin\MarketplaceApiException; +use Piwik\Plugins\CorePluginsAdmin\PluginInstaller; use Piwik\SettingsServer; use Piwik\Translation\Translator; use Piwik\Unzip; -use Piwik\UpdateCheck; use Piwik\Version; class Updater @@ -112,19 +115,58 @@ class Updater $this->verifyDecompressedArchive($extractedArchiveDirectory); $messages[] = $this->translator->translate('CoreUpdater_VerifyingUnpackedFiles'); - $disabledPluginNames = $this->disableIncompatiblePlugins($newVersion); - if (!empty($disabledPluginNames)) { - $messages[] = $this->translator->translate('CoreUpdater_DisablingIncompatiblePlugins', implode(', ', $disabledPluginNames)); - } + // we need to load the marketplace already here, otherwise it will use the new, updated file in Piwik 3 + $marketplace = new MarketplaceApiClient(); + require_once PIWIK_DOCUMENT_ROOT . '/plugins/CorePluginsAdmin/PluginInstaller.php'; + require_once PIWIK_DOCUMENT_ROOT . '/plugins/CorePluginsAdmin/MarketplaceApiException.php'; $this->installNewFiles($extractedArchiveDirectory); $messages[] = $this->translator->translate('CoreUpdater_InstallingTheLatestVersion'); + } catch (ArchiveDownloadException $e) { throw $e; } catch (Exception $e) { throw new UpdaterException($e, $messages); } + try { + if (CorePluginsAdmin::isMarketplaceEnabled()) { + $messages[] = $this->translator->translate('CoreUpdater_CheckingForPluginUpdates'); + + $pluginManager = PluginManager::getInstance(); + $pluginManager->loadAllPluginsAndGetTheirInfo(); + $loadedPlugins = $pluginManager->getLoadedPlugins(); + + MarketplaceApiClient::clearAllCacheEntries(); + StaticContainer::getContainer()->set('marketplacePiwikVersion', $newVersion); + + $pluginsWithUpdate = $marketplace->checkUpdates($loadedPlugins); + + foreach ($pluginsWithUpdate as $pluginWithUpdate) { + $pluginName = $pluginWithUpdate['name']; + + $messages[] = $this->translator->translate('CoreUpdater_UpdatingPluginXToVersionY', + array($pluginName, $pluginWithUpdate['version'])); + + $pluginInstaller = new PluginInstaller($pluginName); + $pluginInstaller->installOrUpdatePluginFromMarketplace(); + } + } + } catch (MarketplaceApiException $e) { + // there is a problem with the connection to the server, ignore for now + } catch (Exception $e) { + throw new UpdaterException($e, $messages); + } + + try { + $disabledPluginNames = $this->disableIncompatiblePlugins($newVersion); + if (!empty($disabledPluginNames)) { + $messages[] = $this->translator->translate('CoreUpdater_DisablingIncompatiblePlugins', implode(', ', $disabledPluginNames)); + } + } catch (Exception $e) { + throw new UpdaterException($e, $messages); + } + return $messages; } diff --git a/plugins/CoreUpdater/lang/en.json b/plugins/CoreUpdater/lang/en.json index 8086f16b36..ad6d230ce9 100644 --- a/plugins/CoreUpdater/lang/en.json +++ b/plugins/CoreUpdater/lang/en.json @@ -1,5 +1,6 @@ { "CoreUpdater": { + "CheckingForPluginUpdates": "Checking for new plugin updates", "ClickHereToViewSqlQueries": "Click here to view and copy the list of SQL queries that will get executed", "CriticalErrorDuringTheUpgradeProcess": "Critical Error during the update process:", "DatabaseUpgradeRequired": "Database Upgrade Required", @@ -23,7 +24,7 @@ "HelpMessageIntroductionWhenError": "The above is the core error message. It should help explain the cause, but if you require further help please:", "HelpMessageIntroductionWhenWarning": "The update completed successfuly, however there were issues during the process. Please read the above descriptions for details. For further help:", "HighTrafficPiwikServerEnableMaintenance": "If you manage a high traffic Piwik server, we recommend to %1$smomentarily disable visitor Tracking and put the Piwik User Interface in maintenance mode%2$s.", - "IncompatbilePluginsWillBeDisabledInfo": "Note: some plugins are not compatible with Piwik %s. They will be disabled when you upgrade:", + "IncompatbilePluginsWillBeDisabledInfo": "Note: some plugins are not compatible with Piwik %s. We will update them if there is an update on the Marketplace, otherwise we will be disable them when you upgrade:", "InstallingTheLatestVersion": "Installing the latest version", "LatestBetaRelease": "Latest beta release", "LatestStableRelease": "Latest stable release", @@ -52,6 +53,7 @@ "UpdateAutomatically": "Update Automatically", "UpdateHasBeenCancelledExplanation": "Piwik One Click Update has been cancelled. If you can't fix the above error message, it is recommended that you manually update Piwik. %1$s Please check out the %2$sUpdate documentation%3$s to get started!", "UpdateTitle": "Update", + "UpdatingPluginXToVersionY": "Updating plugin %1$s to version %2$s", "UpdateSuccessTitle": "Piwik has been successfully updated!", "UpdateErrorTitle": "Update error", "ThankYouUpdatePiwik": "Thank you for using Piwik and keeping it up to date!", diff --git a/plugins/CoreUpdater/lang/tr.json b/plugins/CoreUpdater/lang/tr.json index 1fcd436d79..54242c23ae 100644 --- a/plugins/CoreUpdater/lang/tr.json +++ b/plugins/CoreUpdater/lang/tr.json @@ -9,13 +9,22 @@ "EmptyDatabaseError": "%s veritabanı boş. Piwik ayar dosyanızı değiştirmeniz ya da silmeniz gerekli.", "ErrorDIYHelp": "İleri düzey bir kullanıcıysanız ve veritabanı güncellemesinde bir sorun ile karşılaşırsanız:", "ErrorDIYHelp_1": "Sorunun kaynağını bulup düzeltin (memory_limit ya da max_execution_time gibi)", - "ErrorDIYHelp_2": "Başarız olan güncellemedeki kalan sorguları çalıştır", - "ErrorDuringPluginsUpdates": "Eklenti güncellenirken hata meydana geldi:", - "ExceptionAlreadyLatestVersion": "Piwik versiyonunuz %s günceldir.", - "ExceptionArchiveEmpty": "Boş arşiv.", - "ExceptionArchiveIncompatible": "Uyumsuz arşiv: %s", - "ExceptionArchiveIncomplete": "Arşiv tamamlanmadı: bazı dosyalar kayıp (ör. %s).", - "InstallingTheLatestVersion": "Son versiyon yükleniyor", + "ErrorDIYHelp_2": "güncelleme yarım kaldığı sırada eksik kalan sorguları yürüt", + "ErrorDIYHelp_3": "version_core değişkeninin değerini yarım kalan güncellemenin sürümüne ayarlayarak, Piwik veritabanınızdaki `option` tablosunu el ile güncelleyin", + "ErrorDIYHelp_4": "kalan güncellemeleri tamamlamak için güncelleyiciyi yeniden çalıştırın (tarayıcı ya da komut satırından)", + "ErrorDIYHelp_5": "sorunu (ve çözümü) bildirin böylece Piwik yazılımını daha iyi yapabiliriz", + "ErrorDuringPluginsUpdates": "Uygulama eki güncellemelerinde bir sorun çıktı:", + "ExceptionAlreadyLatestVersion": "Kullandığınız Piwik %s sürümü güncel.", + "ExceptionArchiveEmpty": "Arşiv boş.", + "ExceptionArchiveIncompatible": "Arşiv uyumsuz: %s", + "ExceptionArchiveIncomplete": "Arşiv eksik: Bazı dosyalar kayıp (%s gibi).", + "FeedbackRequest": "Görüş ve önerilerinizi Piwik ekibi ile paylaşmaya çekinmeyin:", + "InstallingTheLatestVersion": "Son sürüm yükleniyor", + "LatestBetaRelease": "Son Beta sürümü", + "LatestStableRelease": "Son kararlı sürüm", + "Latest2XStableRelease": "Son kararlı 2.X sürümü", + "Latest2XBetaRelease": "Son Beta 2.X sürümü", + "LtsSupportVersion": "Uzun Dönem Desteklenen Sürüm", "MajorUpdateWarning1": "Bu büyük bir güncelleştirme. Alışkın olduğunuz süreden daha uzun sürecektir.", "NoteForLargePiwikInstances": "Büyük Piwik güncellemesi için önemli not", "NotificationClickToUpdatePlugins": "Eklentileriniz güncellemek için burayı tıklayın:", diff --git a/plugins/CustomDimensions b/plugins/CustomDimensions -Subproject 096c2707dd0ed9818bbfd7bed4774f54d681083 +Subproject a6bdbaef0040f00e34d344231da777304883026 diff --git a/plugins/CustomPiwikJs/API.php b/plugins/CustomPiwikJs/API.php new file mode 100644 index 0000000000..dc028e1de9 --- /dev/null +++ b/plugins/CustomPiwikJs/API.php @@ -0,0 +1,41 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +namespace Piwik\Plugins\CustomPiwikJs; + +use Piwik\Piwik; +use Piwik\Plugins\CustomPiwikJs\Exception\AccessDeniedException; + +/** + * API for plugin CustomPiwikJs + * + * @method static \Piwik\Plugins\CustomPiwikJs\API getInstance() + */ +class API extends \Piwik\Plugin\API +{ + /** + * Detects whether plugin trackers will be automatically added to piwik.js or not. If not, the plugin tracker files + * need to be loaded manually. + * @return bool + */ + public function doesIncludePluginTrackersAutomatically() + { + Piwik::checkUserHasSomeAdminAccess(); + + try { + $updater = new TrackerUpdater(); + $updater->checkWillSucceed(); + return true; + } catch (AccessDeniedException $e) { + return false; + } catch (\Exception $e) { + return false; + } + } + +} diff --git a/plugins/CustomPiwikJs/Commands/UpdateTracker.php b/plugins/CustomPiwikJs/Commands/UpdateTracker.php index 70754bc20f..1bdbd7e5f3 100644 --- a/plugins/CustomPiwikJs/Commands/UpdateTracker.php +++ b/plugins/CustomPiwikJs/Commands/UpdateTracker.php @@ -35,7 +35,7 @@ class UpdateTracker extends ConsoleCommand { $sourceFile = $input->getOption('source-file'); $targetFile = $input->getOption('target-file'); - $ignoreMinified = $input->hasOption('ignore-minified'); + $ignoreMinified = (bool)$input->getOption('ignore-minified'); $this->updateTracker($sourceFile, $targetFile, $ignoreMinified); diff --git a/plugins/CustomPiwikJs/File.php b/plugins/CustomPiwikJs/File.php index 79a93e7437..03d874e61d 100644 --- a/plugins/CustomPiwikJs/File.php +++ b/plugins/CustomPiwikJs/File.php @@ -38,7 +38,9 @@ class File public function save($content) { - file_put_contents($this->file, $content); + if(false === file_put_contents($this->file, $content)) { + throw new AccessDeniedException(sprintf("Could not write to %s", $this->file)); + } } public function getContent() @@ -60,7 +62,10 @@ class File */ public function hasWriteAccess() { - return $this->hasReadAccess() && is_writable($this->file); + if (file_exists($this->file) && !is_writable($this->file)) { + return false; + } + return is_writable(dirname($this->file)) || is_writable($this->file); } /** diff --git a/plugins/CustomPiwikJs/lang/cs.json b/plugins/CustomPiwikJs/lang/cs.json new file mode 100644 index 0000000000..f793e430fa --- /dev/null +++ b/plugins/CustomPiwikJs/lang/cs.json @@ -0,0 +1,7 @@ +{ + "CustomPiwikJs": { + "DiagnosticPiwikJsWritable": "Zapisovatelný JavaScript záznam (\"\/piwik.js\")", + "DiagnosticPiwikJsNotWritable": "Piwik JavaScript záznam \"\/piwik.js\" není zapisovatelný, což znamená, že ostatní zásuvné moduly nemohou tento JavaScript záznam rozšiřovat. V budoucnosti mohou být z tohoto důvodu omezeny i další hlavní služby.", + "DiagnosticPiwikJsMakeWritable": "Doporučujeme povolit zápis do Piwik.js například pomocí příkazu: %s" + } +}
\ No newline at end of file diff --git a/plugins/CustomPiwikJs/lang/de.json b/plugins/CustomPiwikJs/lang/de.json new file mode 100644 index 0000000000..7aa50965a5 --- /dev/null +++ b/plugins/CustomPiwikJs/lang/de.json @@ -0,0 +1,5 @@ +{ + "CustomPiwikJs": { + "DiagnosticPiwikJsWritable": "Schreibbarer JavaScript-Tracker (\"\/piwik.js\")" + } +}
\ No newline at end of file diff --git a/plugins/CustomPiwikJs/lang/el.json b/plugins/CustomPiwikJs/lang/el.json new file mode 100644 index 0000000000..7a3c1c1aaa --- /dev/null +++ b/plugins/CustomPiwikJs/lang/el.json @@ -0,0 +1,7 @@ +{ + "CustomPiwikJs": { + "DiagnosticPiwikJsWritable": "Αρχείο παρακολούθησης JavaScript (\"\/piwik.js\")", + "DiagnosticPiwikJsNotWritable": "Το αρχείο παρακολούθησης JavaScript \"\/piwik.js\" δεν είναι εγγράψιμο που σημαίνει ότι άλλα πρόσθετα δεν μπορούν να επεκτείνουν την κλάση παρακολούθησης. Στο μέλλον ορισμένα χαρακτηριστικά του πυρήνα δε θα δουλεύουν όπως πρέπει.", + "DiagnosticPiwikJsMakeWritable": "Προτείνεται να κάνετε το αρχείο Piwik.js εγγράψιμο εκτελώντας αυτή την εντολή: %s" + } +}
\ No newline at end of file diff --git a/plugins/CustomPiwikJs/lang/es.json b/plugins/CustomPiwikJs/lang/es.json new file mode 100644 index 0000000000..89f6ed78cc --- /dev/null +++ b/plugins/CustomPiwikJs/lang/es.json @@ -0,0 +1,7 @@ +{ + "CustomPiwikJs": { + "DiagnosticPiwikJsWritable": "Archivo de seguimiento Javascript modificable (\"\/piwik.js\")", + "DiagnosticPiwikJsNotWritable": "El archivo de seguimiento JavaScript de Piwik \"\/piwik.js\" no se puede modificar lo que significa que otros complementos no pueden mejorarlo. En el futuro, incluso algunas de las características básicas podrían no funcionar como se espera.", + "DiagnosticPiwikJsMakeWritable": "Recomendamos Piwik.js modificable mediante la ejecución de este comando: %s" + } +}
\ No newline at end of file diff --git a/plugins/CustomPiwikJs/lang/fr.json b/plugins/CustomPiwikJs/lang/fr.json new file mode 100644 index 0000000000..84853489f6 --- /dev/null +++ b/plugins/CustomPiwikJs/lang/fr.json @@ -0,0 +1,7 @@ +{ + "CustomPiwikJs": { + "DiagnosticPiwikJsWritable": "Traceur JavaScript inscriptible (\"\/piwik.js\")", + "DiagnosticPiwikJsNotWritable": "Le fichier du traceur JavaScript Piwik \"\/piwik.js\" ne peut pas être modifié ce qui signifie que les autres composants ne peuvent pas l'enrichir. A l'avenir même certaines fonctionnalités natives pourraient ne pas fonctionner comme prévu.", + "DiagnosticPiwikJsMakeWritable": "Nous vous recommandons de permettre l'écriture de Piwik.js en exécutant la commande suivante : %s" + } +}
\ No newline at end of file diff --git a/plugins/CustomPiwikJs/lang/nb.json b/plugins/CustomPiwikJs/lang/nb.json new file mode 100644 index 0000000000..e568140ece --- /dev/null +++ b/plugins/CustomPiwikJs/lang/nb.json @@ -0,0 +1,7 @@ +{ + "CustomPiwikJs": { + "DiagnosticPiwikJsWritable": "Skrivbar JavaScript Sporer (\"\/piwik.js\")", + "DiagnosticPiwikJsNotWritable": "Piwik JavaScript Sporer filen \"\/piwik.js\" er ikke skrivbar som betyr andre plugins kan ikke forlenge Javascript Sporer. I fremtiden enda noen sentrale funksjoner kanskje ikke fungerer som forventet.", + "DiagnosticPiwikJsMakeWritable": "Vi anbefaler å Piwik.js skrivbar ved å kjøre denne kommandoen: %s" + } +}
\ No newline at end of file diff --git a/plugins/CustomPiwikJs/tests/Integration/ApiTest.php b/plugins/CustomPiwikJs/tests/Integration/ApiTest.php new file mode 100644 index 0000000000..d1fce33e4c --- /dev/null +++ b/plugins/CustomPiwikJs/tests/Integration/ApiTest.php @@ -0,0 +1,84 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +namespace Piwik\Plugins\CustomPiwikJs\tests\Integration; + +use Piwik\Plugins\CustomPiwikJs\API; +use Piwik\Tests\Framework\Fixture; +use Piwik\Tests\Framework\Mock\FakeAccess; +use Piwik\Tests\Framework\TestCase\IntegrationTestCase; + +/** + * @group CustomPiwikJs + * @group ApiTest + * @group Api + * @group Plugins + */ +class ApiTest extends IntegrationTestCase +{ + /** + * @var API + */ + private $api; + + public function setUp() + { + parent::setUp(); + + Fixture::createSuperUser(); + Fixture::createWebsite('2014-01-01 01:02:03'); + $this->api = API::getInstance(); + } + + /** + * @expectedException \Piwik\NoAccessException + * @expectedExceptionMessage checkUserHasSomeAdminAccess + */ + public function test_doesIncludePluginTrackersAutomatically_failsIfNotEnoughPermission() + { + $this->setUser(); + $this->api->doesIncludePluginTrackersAutomatically(); + } + + /** + * @expectedException \Piwik\NoAccessException + * @expectedExceptionMessage checkUserHasSomeAdminAccess + */ + public function test_doesIncludePluginTrackersAutomatically_failsIfNotEnoughPermissionAnonymous() + { + $this->setAnonymousUser(); + $this->api->doesIncludePluginTrackersAutomatically(); + } + + public function test_doesIncludePluginTrackersAutomatically_returnsValueWhenEnoughPermission() + { + $this->assertTrue($this->api->doesIncludePluginTrackersAutomatically()); + } + + protected function setUser() + { + FakeAccess::clearAccess(false); + FakeAccess::$identity = 'testUsername'; + FakeAccess::$idSitesView = array(1); + FakeAccess::$idSitesAdmin = array(); + } + + protected function setAnonymousUser() + { + FakeAccess::clearAccess(); + FakeAccess::$identity = 'anonymous'; + } + + public function provideContainerConfig() + { + return array( + 'Piwik\Access' => new FakeAccess() + ); + } + +} diff --git a/plugins/CustomPiwikJs/tests/Integration/FileTest.php b/plugins/CustomPiwikJs/tests/Integration/FileTest.php index 4d96bd6478..aa8cee9c5d 100644 --- a/plugins/CustomPiwikJs/tests/Integration/FileTest.php +++ b/plugins/CustomPiwikJs/tests/Integration/FileTest.php @@ -19,7 +19,8 @@ use Piwik\Tests\Framework\TestCase\IntegrationTestCase; */ class FileTest extends IntegrationTestCase { - const NOT_EXISTING_FILE = 'notExisTinGFile.js'; + const NOT_EXISTING_FILE_IN_WRITABLE_DIRECTORY = 'notExisTinGFile.js'; + const NOT_EXISTING_FILE_IN_NON_WRITABLE_DIRECTORY = 'is-not-writable/notExisTinGFile.js'; /** * @var string @@ -30,14 +31,23 @@ class FileTest extends IntegrationTestCase { parent::setUp(); $this->dir = PIWIK_DOCUMENT_ROOT . '/plugins/CustomPiwikJs/tests/resources/'; + + // make directory not writable + $nonWritableDir = dirname($this->dir . self::NOT_EXISTING_FILE_IN_NON_WRITABLE_DIRECTORY); + @chmod($nonWritableDir, 0444); + if(is_writable($nonWritableDir)) { + throw new \Exception("The directory $nonWritableDir should have been made non writable by this test, but it didn't work"); + } } public function tearDown() { - if (file_exists($this->dir . self::NOT_EXISTING_FILE)) { - unlink($this->dir . self::NOT_EXISTING_FILE); - } + // restore permissions changed by makeNotWritableFile() + chmod($this->dir, 0777); + if (file_exists($this->dir . self::NOT_EXISTING_FILE_IN_WRITABLE_DIRECTORY)) { + unlink($this->dir . self::NOT_EXISTING_FILE_IN_WRITABLE_DIRECTORY); + } parent::tearDown(); } @@ -46,9 +56,40 @@ class FileTest extends IntegrationTestCase return new File($this->dir . $fileName); } + private function makeNotWritableFile() + { + $path = $this->dir . 'file-made-non-writable.js'; + if(file_exists($path)) { + chmod($path, 0777); + } + $file = new File($path); + $file->save('will be saved OK, and then we make it non writable.'); + + if (!chmod($path, 0444)) { + throw new \Exception("chmod on the file didn't work"); + } + if (!chmod(dirname($path), 0755)) { + throw new \Exception("chmod on the directory didn't work"); + } + $this->assertTrue(is_writable(dirname($path))); + $this->assertFalse(is_writable($path)); + $this->assertTrue(file_exists($path)); + return $file; + } + private function makeNotReadableFile() { - return $this->makeFile(self::NOT_EXISTING_FILE); + return $this->makeNotReadableFile_inWritableDirectory(); + } + + private function makeNotReadableFile_inNonWritableDirectory() + { + return $this->makeFile(self::NOT_EXISTING_FILE_IN_NON_WRITABLE_DIRECTORY); + } + + private function makeNotReadableFile_inWritableDirectory() + { + return $this->makeFile(self::NOT_EXISTING_FILE_IN_WRITABLE_DIRECTORY); } public function test_getName() @@ -66,7 +107,13 @@ class FileTest extends IntegrationTestCase public function test_hasWriteAccess() { $this->assertTrue($this->makeFile()->hasWriteAccess()); - $this->assertFalse($this->makeNotReadableFile()->hasWriteAccess()); + $this->assertTrue($this->makeNotReadableFile_inWritableDirectory()->hasWriteAccess()); + $this->assertFalse($this->makeNotReadableFile_inNonWritableDirectory()->hasWriteAccess()); + } + + public function test_hasWriteAccess_whenFileExistAndIsNotWritable() + { + $this->assertFalse($this->makeNotWritableFile()->hasWriteAccess()); } public function test_checkReadable_shouldNotThrowException_IfIsReadable() @@ -96,7 +143,12 @@ class FileTest extends IntegrationTestCase */ public function test_checkWritable_shouldThrowException_IfNotIsWritable() { - $this->makeNotReadableFile()->checkWritable(); + $this->makeNotReadableFile_inNonWritableDirectory()->checkWritable(); + } + + public function test_checkWritable_shouldNotThrowException_IfDirectoryIsWritable() + { + $this->makeNotReadableFile_inWritableDirectory()->checkWritable(); } public function test_getContent() @@ -111,9 +163,9 @@ class FileTest extends IntegrationTestCase public function test_save() { - $notExistingFile = $this->makeNotReadableFile(); + $notExistingFile = $this->makeNotReadableFile_inWritableDirectory(); $this->assertFalse($notExistingFile->hasReadAccess()); - $this->assertFalse($notExistingFile->hasWriteAccess()); + $this->assertTrue($notExistingFile->hasWriteAccess()); $notExistingFile->save('myTestContent'); diff --git a/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php b/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php index 240638c5e9..58650adf7e 100644 --- a/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php +++ b/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php @@ -62,7 +62,13 @@ class TrackerUpdaterTest extends IntegrationTestCase * @expectedException \Piwik\Plugins\CustomPiwikJs\Exception\AccessDeniedException * @expectedExceptionMessage not writable */ - public function test_checkWillSucceed_shouldThrowExceptionIfTargetIsNotWritable() + public function test_checkWillSucceed_shouldNotThrowExceptionIfTargetIsNotWritable() + { + $updater = $this->makeUpdater(null, $this->dir . 'not-writable/MyNotExisIngFilessss.js'); + $updater->checkWillSucceed(); + } + + public function test_checkWillSucceed_shouldNotThrowExceptionIfTargetIsWritable() { $updater = $this->makeUpdater(null, $this->dir . 'MyNotExisIngFilessss.js'); $updater->checkWillSucceed(); diff --git a/plugins/CustomVariables/lang/es.json b/plugins/CustomVariables/lang/es.json index 012d4797a6..fde28a873d 100644 --- a/plugins/CustomVariables/lang/es.json +++ b/plugins/CustomVariables/lang/es.json @@ -6,6 +6,18 @@ "CustomVariablesReportDocumentation": "Este informe contiene información sobre sus Variables Personalizadas. Haga clic en el nombre de una variable para ver la distribución de los valores. %1$s Para más información sobre las Variables Personalizadas en general, lea la %2$sdocumentación de Variables Personalizadas en piwik.org%3$s", "PluginDescription": "Variables Personalizadas (nombre, valor) son pares que se pueden asignar mediante la API de Javascript a los visitantes o cualquiera de sus acciones. Piwik luego informará el número de visitas, páginas, las conversiones para cada uno de estos nombres y valores personalizados. Vea las variables personalizadas detalladas para cada usuario y su acción en el registro de visitantes. <br \/> Requerida para utilizar la función de <a href=\"http:\/\/piwik.org\/docs\/ecommerce-analytics\/\"> Ecommerce Analytics <\/a>!", "ScopePage": "ámbito de la página", - "ScopeVisit": "alcance de la visita" + "ScopeVisit": "alcance de la visita", + "ScopeX": "Ambito %s", + "Index": "Indice", + "Usages": "Usos", + "Unused": "No usado", + "CreateNewSlot": "Aumente el número de vacantes disponibles de Medidas personalizadas", + "UsageDetails": "%1$s visitas y %2$s acciones desde la creación de este sitio.", + "CreatingCustomVariableTakesTime": "Crear una nueva variable personalizada puede tomar un cierto tiempo dependiendo del tamaño de su base de datos. Por lo tanto, sólo es posible hacerlo vía un comando que necesita ser ejecutado desde la línea de comando.", + "CurrentAvailableCustomVariables": "Actualmente puede usar hasta %s Variables personalizadas por sitio.", + "ToCreateCustomVarExecute": "Para crear una nueva variable personalizada ejecute el siguiente comando dentro de su instalación Piwik:", + "SlotsReportIsGeneratedOverTime": "Los datos de este informe irán aumentando con el tiempo. Puede tomar un día o dos para ver cualquier dato y unas pocas semanas hasta que el informe sea totalmente exacto.", + "MetricsAreOnlyAvailableForVisitScope": "Nota: %1$s métricas están disponibles solo para las Variables personalizadas de alcance %2$s.", + "MetricsNotAvailableForPageScope": "Para Variables personalizadas de alcance %1$s, el valor de estas métricas es %2$s" } }
\ No newline at end of file diff --git a/plugins/Dashboard/Dashboard.php b/plugins/Dashboard/Dashboard.php index e2ded0aa2b..86cf3ec2cd 100644 --- a/plugins/Dashboard/Dashboard.php +++ b/plugins/Dashboard/Dashboard.php @@ -10,7 +10,6 @@ namespace Piwik\Plugins\Dashboard; use Piwik\Common; use Piwik\Container\StaticContainer; -use Piwik\Db; use Piwik\Piwik; use Piwik\Category\Subcategory; use Piwik\Widget\WidgetConfig; @@ -21,7 +20,7 @@ use Piwik\Plugin; class Dashboard extends \Piwik\Plugin { /** - * @see Piwik\Plugin::registerEvents + * @see \Piwik\Plugin::registerEvents */ public function registerEvents() { @@ -134,37 +133,29 @@ class Dashboard extends \Piwik\Plugin $defaultLayout = $this->getLayoutForUser('', 1); if (empty($defaultLayout)) { - $topWidget = ''; - + $advertisingWidget = ''; $advertising = StaticContainer::get('Piwik\ProfessionalServices\Advertising'); if ($advertising->areAdsForProfessionalServicesEnabled() && Plugin\Manager::getInstance()->isPluginActivated('ProfessionalServices')) { - $topWidget .= '{"uniqueId":"widgetProfessionalServicespromoServices",' - . '"parameters":{"module":"ProfessionalServices","action":"promoServices"}},'; + $advertisingWidget = '{"uniqueId":"widgetProfessionalServicespromoServices","parameters":{"module":"ProfessionalServices","action":"promoServices"}},'; } - if (Piwik::hasUserSuperUserAccess()) { - $topWidget .= '{"uniqueId":"widgetCoreHomegetDonateForm",' - . '"parameters":{"module":"CoreHome","action":"getDonateForm"}},'; + $piwikPromoWidget = '{"uniqueId":"widgetCoreHomegetDonateForm","parameters":{"module":"CoreHome","action":"getDonateForm"}}'; } else { - $topWidget .= '{"uniqueId":"widgetCoreHomegetPromoVideo",' - . '"parameters":{"module":"CoreHome","action":"getPromoVideo"}},'; + $piwikPromoWidget = '{"uniqueId":"widgetCoreHomegetPromoVideo","parameters":{"module":"CoreHome","action":"getPromoVideo"}}'; } - $defaultLayout = '[ [ - {"uniqueId":"widgetVisitsSummarygetEvolutionGraphforceView1viewDataTablegraphEvolution","parameters":{"forceView":"1","viewDataTable":"graphEvolution","module":"VisitsSummary","action":"getEvolutionGraph"}}, {"uniqueId":"widgetLivewidget","parameters":{"module":"Live","action":"widget"}}, - {"uniqueId":"widgetVisitorInterestgetNumberOfVisitsPerVisitDuration","parameters":{"viewDataTable":"cloud","module":"VisitorInterest","action":"getNumberOfVisitsPerVisitDuration"}} + ' . $piwikPromoWidget . ' ], [ - ' . $topWidget . ' - {"uniqueId":"widgetReferrersgetWebsites","parameters":{"module":"Referrers","action":"getWebsites"}}, - {"uniqueId":"widgetVisitTimegetVisitInformationPerServerTime","parameters":{"viewDataTable": "graphVerticalBar","module":"VisitTime","action":"getVisitInformationPerServerTime"}} + {"uniqueId":"widgetVisitsSummarygetEvolutionGraphforceView1viewDataTablegraphEvolution","parameters":{"forceView":"1","viewDataTable":"graphEvolution","module":"VisitsSummary","action":"getEvolutionGraph"}}, + ' . $advertisingWidget . ' + {"uniqueId":"widgetVisitsSummarygetforceView1viewDataTablesparklines","parameters":{"forceView":"1","viewDataTable":"sparklines","module":"VisitsSummary","action":"get"}} ], [ {"uniqueId":"widgetUserCountryMapvisitorMap","parameters":{"module":"UserCountryMap","action":"visitorMap"}}, - {"uniqueId":"widgetDevicesDetectiongetBrowsers","parameters":{"module":"DevicesDetection","action":"getBrowsers"}}, - {"uniqueId":"widgetReferrersgetSearchEngines","parameters":{"module":"Referrers","action":"getSearchEngines"}}, + {"uniqueId":"widgetReferrersgetReferrerType","parameters":{"module":"Referrers","action":"getReferrerType"}}, {"uniqueId":"widgetRssWidgetrssPiwik","parameters":{"module":"RssWidget","action":"rssPiwik"}} ] ]'; diff --git a/plugins/DevicePlugins/lang/es.json b/plugins/DevicePlugins/lang/es.json index 115de91a27..a8b8499033 100644 --- a/plugins/DevicePlugins/lang/es.json +++ b/plugins/DevicePlugins/lang/es.json @@ -3,6 +3,7 @@ "BrowserWithNoPluginsEnabled": "%1$s sin complementos habilitados", "BrowserWithPluginsEnabled": "%1$s con los complementos %2$s habilitados", "PluginDescription": "Informa la lista de complementos que están admitidos en los navegadores de internet de los visitantes.", + "PluginDetectionDoesNotWorkInIE": "Nota: La detección de complementos no funciona en Internet Explorer antes de 11. Este reporte está basado solamente en navegadores no-IE y nuevas versiones de IE.", "WidgetPlugins": "Lista de Complementos", "WidgetPluginsDocumentation": "Este informe muestra que extensiones del navegador sus visitantes han habilitado. Esta información puede ser importante sea para elegir el método eficiente de enviar su contenido." } diff --git a/plugins/DevicePlugins/lang/tr.json b/plugins/DevicePlugins/lang/tr.json index 9a4de058ba..9863f35f85 100644 --- a/plugins/DevicePlugins/lang/tr.json +++ b/plugins/DevicePlugins/lang/tr.json @@ -1,5 +1,10 @@ { "DevicePlugins": { - "WidgetPlugins": "Eklenti Listesi" + "BrowserWithNoPluginsEnabled": "%1$s için bir eklenti yüklenmemiş", + "BrowserWithPluginsEnabled": "%1$s için %2$s eklenti yüklenmiş", + "PluginDescription": "Ziyaretçilerin web tarayıcıları tarafından desteklenen eklentilerin listesini görüntüler.", + "PluginDetectionDoesNotWorkInIE": "Not: Eklenti algılaması Internet Explorer 11 öncesindeki sürümleri desteklemez. Bu raporda yalnız IE dışındaki tarayıcılar ve yeni IE tarayıcıları için veriler bulunur.", + "WidgetPlugins": "Tarayıcı Eklentileri", + "WidgetPluginsDocumentation": "Bu raporda ziyaretçilerinizin web tarayıcılarında hangi eklentilerin etkin olduğu görüntülenir. Bu bilgiler içeriğinizi doğru şekilde sunmanız için önemli olabilir." } }
\ No newline at end of file diff --git a/plugins/Diagnostics/lang/es.json b/plugins/Diagnostics/lang/es.json new file mode 100644 index 0000000000..3793481bb5 --- /dev/null +++ b/plugins/Diagnostics/lang/es.json @@ -0,0 +1,8 @@ +{ + "Diagnostics": { + "ConfigFileTitle": "Archivo de configuración", + "ConfigFileIntroduction": "Aquí puede ver la configuración de Piwik. Si está ejecutando Piwik en un ecosistema balanceado puede que la página sea diferente sea por el servidor que la esté cargando. Las files con un color de fondo diferente son valores de configuración modificados que son especificados por ejemplo en el archivo %1$s.", + "HideUnchanged": "Si desea ver solo los valores modificados puede %1$socultar todos los valores no modificados%2$s.", + "Sections": "Secciones" + } +}
\ No newline at end of file diff --git a/plugins/ExamplePlugin/CHANGELOG.md b/plugins/ExamplePlugin/CHANGELOG.md new file mode 100644 index 0000000000..854631896a --- /dev/null +++ b/plugins/ExamplePlugin/CHANGELOG.md @@ -0,0 +1,3 @@ +## Changelog + +Here goes the changelog text. diff --git a/plugins/ExamplePlugin/README.md b/plugins/ExamplePlugin/README.md index c9c3266859..fa70e946c8 100644 --- a/plugins/ExamplePlugin/README.md +++ b/plugins/ExamplePlugin/README.md @@ -4,12 +4,3 @@ Add your plugin description here. -## FAQ - -__My question?__ - -My answer - -## Changelog - -Here goes the changelog text. diff --git a/plugins/ExamplePlugin/docs/faq.md b/plugins/ExamplePlugin/docs/faq.md new file mode 100644 index 0000000000..dde17aa5cc --- /dev/null +++ b/plugins/ExamplePlugin/docs/faq.md @@ -0,0 +1,5 @@ +## FAQ + +__My question?__ + +My answer
\ No newline at end of file diff --git a/plugins/ExamplePlugin/docs/index.md b/plugins/ExamplePlugin/docs/index.md new file mode 100644 index 0000000000..70135e8e6a --- /dev/null +++ b/plugins/ExamplePlugin/docs/index.md @@ -0,0 +1 @@ +## Documentation
\ No newline at end of file diff --git a/plugins/ExampleTheme/CHANGELOG.md b/plugins/ExampleTheme/CHANGELOG.md new file mode 100644 index 0000000000..854631896a --- /dev/null +++ b/plugins/ExampleTheme/CHANGELOG.md @@ -0,0 +1,3 @@ +## Changelog + +Here goes the changelog text. diff --git a/plugins/ExampleTheme/README.md b/plugins/ExampleTheme/README.md index de7cfecaa1..0cb889be35 100644 --- a/plugins/ExampleTheme/README.md +++ b/plugins/ExampleTheme/README.md @@ -3,12 +3,3 @@ ## Description Add your theme description here. - -## FAQ - -__My question?__ -My answer - -## Changelog - -Here goes the changelog text. diff --git a/plugins/ExampleTheme/docs/faq.md b/plugins/ExampleTheme/docs/faq.md new file mode 100644 index 0000000000..dde17aa5cc --- /dev/null +++ b/plugins/ExampleTheme/docs/faq.md @@ -0,0 +1,5 @@ +## FAQ + +__My question?__ + +My answer
\ No newline at end of file diff --git a/plugins/ExampleTheme/docs/index.md b/plugins/ExampleTheme/docs/index.md new file mode 100644 index 0000000000..70135e8e6a --- /dev/null +++ b/plugins/ExampleTheme/docs/index.md @@ -0,0 +1 @@ +## Documentation
\ No newline at end of file diff --git a/plugins/Feedback/lang/cs.json b/plugins/Feedback/lang/cs.json index 3cd43a1eb8..415390b5a0 100644 --- a/plugins/Feedback/lang/cs.json +++ b/plugins/Feedback/lang/cs.json @@ -19,10 +19,14 @@ "ViewUserGuides": "Naučte se, jak konfigurovat Piwik a efektivně analyzovat data s našimi %1$suživatelskými příručkami%2$s", "CommunityHelp": "Komunitní pomoc", "ProfessionalHelp": "Profesionální pomoc", + "ProfessionalServicesIntro": "Naše celosvětová síť profesionálních Piwik konzultantů podporuje klienty, kteří hostují Piwik na vlastní infrastruktuře.", + "ProfessionalServicesOfferIntro": "Ze kterých služeb můžete profitovat?", "ProfessionalServicesReviewPiwikSetup": "Kontrola vaší instalace Piwiku", + "ProfessionalServicesOptimizationMaintenance": "Služby optimalizace a údržby Piwiku", "ProfessionalServicesPhoneEmailSupport": "Telefonická a e-mailová podpora", "ProfessionalServicesTraining": "Školení uživatelů, techniků a vývoářů", "ProfessionalServicesPremiumFeatures": "Prémiové funkce", + "ProfessionalServicesCustomDevelopment": "Vývojářské služby na míru", "ProfessionalServicesAnalystConsulting": "Služby konzultace analytika", "ContactUs": "Kontaktujte nás", "VisitTheForums": "Navštivte %1$s fóra%2$s a nechte si pomoci komunitou uživatelů aplikace Piwik" diff --git a/plugins/Feedback/lang/es.json b/plugins/Feedback/lang/es.json index 043c642780..a4e07c8a65 100644 --- a/plugins/Feedback/lang/es.json +++ b/plugins/Feedback/lang/es.json @@ -22,6 +22,7 @@ "ProfessionalServicesIntro": "Nuestra red mundial de consultores profesionales que brindan asistencia a todos los clientes que hospedan Piwik en su propia infraestructura.", "ProfessionalServicesOfferIntro": "¿Qué servicios puede beneficiarse?", "ProfessionalServicesReviewPiwikSetup": "Reseña de su instalación Piwik", + "ProfessionalServicesOptimizationMaintenance": "Servicios de mantenimiento & optimización Piwik", "ProfessionalServicesPhoneEmailSupport": "Asistencia por teléfono y correo electrónico", "ProfessionalServicesTraining": "Usuario, técnico y entrenamiento del desarrollador", "ProfessionalServicesPremiumFeatures": "Funciones premium", diff --git a/plugins/Feedback/lang/nb.json b/plugins/Feedback/lang/nb.json index f268816761..0b0a28fc40 100644 --- a/plugins/Feedback/lang/nb.json +++ b/plugins/Feedback/lang/nb.json @@ -9,7 +9,10 @@ "SendFeedback": "Send tilbakemelding", "ThankYou": "Takk for at du hjelper oss å lage Piwik bedre!", "TopLinkTooltip": "Fortell oss hva du synes eller be om profesjonell støtte.", + "CommunityHelp": "Samfunns Hjelpere", "ProfessionalHelp": "Profesjonell hjelp", + "ProfessionalServicesPhoneEmailSupport": "Telefon og e-post-støtte", + "ProfessionalServicesPremiumFeatures": "Premium-funksjoner", "ContactUs": "Kontakt oss" } }
\ No newline at end of file diff --git a/plugins/Goals/lang/es.json b/plugins/Goals/lang/es.json index d8c0dcb091..be3da50bb9 100644 --- a/plugins/Goals/lang/es.json +++ b/plugins/Goals/lang/es.json @@ -77,6 +77,7 @@ "NewGoalIntro": "El seguimiento de las conversiones del objetivo es una de las maneras más eficaces para medir y mejorar las metas de negocio.", "NewVisitorsConversionRateIs": "La tasa de visitantes nuevos es %s", "NoGoalsNeedAccess": "Solo un Administrador o un usuario con permisos de Super Usuario puede gestionar Objetivos para un determinado sitio web. Por favor, consulte a su administrador de Piwik para establecer Objetivos para su sitio web. <br> ¡Hacer un seguimiento de los Objetivos es una gran manera de ayudar a entender y maximizar el rendimiento de su sitio web!", + "NoConversionsNoReportsMessage": "Los informes no se muestran porque no hay datos de conversión para el objetivo y período seleccionado.", "NeedAccess": "Solo un Administrador o un usuario con permisos de Super Usuario puede gestionar Objetivos para un determinado sitio web.", "Optional": "(opcional)", "OverallConversionRate": "%s tasa global de la conversión (visitas con un objetivo completado)", diff --git a/plugins/Installation/lang/cs.json b/plugins/Installation/lang/cs.json index 70abe1a1b8..ba78860a1b 100644 --- a/plugins/Installation/lang/cs.json +++ b/plugins/Installation/lang/cs.json @@ -45,6 +45,8 @@ "PasswordRepeat": "Heslo (zopakujte)", "PercentDone": "%s %% hotovo", "ProfessionalServicesAdTitle": "Pokročilá analytika & služby", + "ProfessionalServicesfessionalServicesAdText": "Naše síť expertů může pomoci vaší organizaci odkrýt celou sílu Piwik analýz.", + "ProfessionalServicesfessionalDiscoverHow": "Více informací o %1$sdalších produktech a službách%2$s pro Piwik a jak navýšit svůj obrat a výnos.", "PleaseFixTheFollowingErrors": "Prosím opravte následující chyby", "DefaultSettings": "Výchozí nastavení Piwiku", "DefaultSettingsHelp": "Piwik má výchozí nastavení. Můžete je změnit teď, nebo později z administračního rozhraní.", @@ -52,6 +54,7 @@ "RestartWebServer": "Po uložení změn restartujte Vás web server.", "ReusingTables": "Použití existujících tabulek", "PiwikOrgNewsletter": "odesílat e-maily s důležitými událostmi v komunitě Piwiku", + "ProfessionalServicesNewsletter": "pošlete mi informace o %1$sProfesionálních službách a produktech%2$s pro Piwik", "SeeBelowForMoreInfo": "Pro více informací se podívejte níže.", "SetupWebsite": "Nastavit Web", "SetupWebsiteError": "Při přidávání Webu se vyskytla chyba", diff --git a/plugins/Installation/lang/de.json b/plugins/Installation/lang/de.json index 28050912eb..301aeec2a4 100644 --- a/plugins/Installation/lang/de.json +++ b/plugins/Installation/lang/de.json @@ -62,7 +62,7 @@ "SetupWebsiteSetupSuccess": "Website %s erfolgreich angelegt!", "SetupWebSiteURL": "URL der Website", "SiteSetup": "Konfigurieren Sie Ihre erste Website, welche über Piwik getrackt und analyisert werden soll:", - "SiteSetupFootnote": "Hinweis: Nachdem die Installation von Piwik fertiggestellt wurde ist es möglich weitere Websites hinzuzufügen!", + "SiteSetupFootnote": "Hinweis: Sie können weitere Websites hinzuzufügen sobald die Installation von Piwik abgeschlossen wurde!", "SuperUser": "Hauptadministrator", "SuperUserLogin": "Hauptadministrator Login", "SuperUserSetupError": "Beim Hinzufügen des Hauptadministrators ist ein Fehler aufgetreten.", diff --git a/plugins/LanguagesManager/Commands/CreatePull.php b/plugins/LanguagesManager/Commands/CreatePull.php index af46dc7000..fca1fc76aa 100644 --- a/plugins/LanguagesManager/Commands/CreatePull.php +++ b/plugins/LanguagesManager/Commands/CreatePull.php @@ -19,6 +19,8 @@ use Symfony\Component\Console\Output\OutputInterface; */ class CreatePull extends TranslationBase { + const GIT_BASE_BRANCH = '2.x-dev'; + protected function configure() { $this->setName('translations:createpull') @@ -38,7 +40,7 @@ class CreatePull extends TranslationBase return; } - $unpushedCommits = shell_exec('git log origin/master..HEAD'); + $unpushedCommits = shell_exec('git log origin/' . self::GIT_BASE_BRANCH . '..HEAD'); if (!empty($unpushedCommits)) { @@ -49,7 +51,7 @@ class CreatePull extends TranslationBase chdir(PIWIK_DOCUMENT_ROOT); shell_exec(' - git checkout -f master > /dev/null 2>&1 + git checkout -f ' . self::GIT_BASE_BRANCH . ' > /dev/null 2>&1 git pull > /dev/null 2>&1 git submodule init > /dev/null 2>&1 git submodule update > /dev/null 2>&1 @@ -60,7 +62,7 @@ class CreatePull extends TranslationBase chdir(PIWIK_DOCUMENT_ROOT.DIRECTORY_SEPARATOR.'plugins'.DIRECTORY_SEPARATOR.$plugin); shell_exec(' - git checkout master > /dev/null 2>&1 + git checkout ' . self::GIT_BASE_BRANCH . ' > /dev/null 2>&1 git pull > /dev/null 2>&1 '); } @@ -73,10 +75,10 @@ class CreatePull extends TranslationBase shell_exec('git checkout -b translationupdates origin/translationupdates'); } - // switch to branch and update it to latest master + // switch to branch and update it to latest $GIT_BASE_BRANCH shell_exec(' git checkout -f translationupdates > /dev/null 2>&1 - git merge master > /dev/null 2>&1 + git reset --hard origin/' . self::GIT_BASE_BRANCH . ' > /dev/null 2>&1 git push origin translationupdates > /dev/null 2>&1 '); @@ -105,7 +107,7 @@ class CreatePull extends TranslationBase if (empty($changes)) { $output->writeln("Nothing changed. Everything is already up to date."); - shell_exec('git checkout master > /dev/null 2>&1'); + shell_exec('git checkout ' . self::GIT_BASE_BRANCH . ' > /dev/null 2>&1'); return; } @@ -163,7 +165,7 @@ class CreatePull extends TranslationBase shell_exec('git commit -m "language update ${pluginName}"'); shell_exec('git push'); - shell_exec('git checkout master > /dev/null 2>&1'); + shell_exec('git checkout ' . self::GIT_BASE_BRANCH . ' > /dev/null 2>&1'); $this->createPullRequest($output, $title, $message); } @@ -195,7 +197,7 @@ class CreatePull extends TranslationBase --stderr /dev/null \ -o /dev/null \ -u '.$username.' \ - --data "{\"title\":\"[automatic translation update] '.$title.'\",\"body\":\"'.$message.'\",\"head\":\"translationupdates\",\"base\":\"master\"}" \ + --data "{\"title\":\"[automatic translation update] '.$title.'\",\"body\":\"'.$message.'\",\"head\":\"translationupdates\",\"base\":\"' . self::GIT_BASE_BRANCH . '\"}" \ -H "Accept: application/json" \ https://api.github.com/repos/piwik/piwik/pulls'); diff --git a/plugins/Live/javascripts/rowaction.js b/plugins/Live/javascripts/rowaction.js index 3524805dd8..604695bcec 100644 --- a/plugins/Live/javascripts/rowaction.js +++ b/plugins/Live/javascripts/rowaction.js @@ -74,7 +74,12 @@ var apiMethod = this.dataTable.param.module + '.' + this.dataTable.param.action; - this.openPopover(apiMethod, segment, {}); + var extraParams = {}; + if (this.dataTable.param.date && this.dataTable.param.period) { + extraParams = {date: this.dataTable.param.date, period: this.dataTable.param.period}; + } + + this.openPopover(apiMethod, segment, extraParams); }; DataTable_RowActions_SegmentVisitorLog.prototype.doOpenPopover = function (urlParam) { diff --git a/plugins/Live/javascripts/visitorProfile.js b/plugins/Live/javascripts/visitorProfile.js index c5bea438af..38cf21765d 100644 --- a/plugins/Live/javascripts/visitorProfile.js +++ b/plugins/Live/javascripts/visitorProfile.js @@ -51,7 +51,10 @@ url += '&showMap=0'; } - Piwik_Popover.createPopupAndLoadUrl(url, _pk_translate('Live_VisitorProfile'), 'visitor-profile-popup'); + var ajaxRequest = new ajaxHelper(); + ajaxRequest.removeDefaultParameter('segment'); + + Piwik_Popover.createPopupAndLoadUrl(url, _pk_translate('Live_VisitorProfile'), 'visitor-profile-popup', ajaxRequest); }; $.extend(VisitorProfileControl.prototype, UIControl.prototype, { diff --git a/plugins/Live/lang/es.json b/plugins/Live/lang/es.json index dfd02688b6..495242ead6 100644 --- a/plugins/Live/lang/es.json +++ b/plugins/Live/lang/es.json @@ -4,6 +4,7 @@ "CalculatedOverNPageViews": "Calculado usando las últimas %1$s páginas vistas de este visitante.", "ClickToViewMoreAboutVisit": "Clic para ver más información acerca de esta visita.", "ConvertedNGoals": "%s Objetivos convertidos", + "EcommerceSummaryConversions": "%1$s pedidos%2$s por un total de %3$s%4$s, comprando %5$s artículos%6$s.", "FirstVisit": "Primer visita", "GoalType": "Tipo", "HideMap": "ocultar mapa", @@ -33,6 +34,8 @@ "VisitorsInRealTime": "Visitantes en tiempo real", "VisitorsLastVisit": "La última visita de este visitante fue hace %s días.", "VisitsFrom": "%1$s%2$s visitas%3$s desde", + "VisitSummary": "Pasó un total de %1$s%2$s en el sitio de internet%3$s, y vió %4$s páginas%5$s en %6$s visitas%7$s.", + "VisitSummaryWithActionDetails": "Pasó un total de %1$s%2$s en el sitio de internet%3$s, y ejecutó %4$s acciones%5$s (%6$s) en %7$s visitas%8$s.", "RowActionTooltipDefault": "Mostrar registro de visitante segmentado por esta fila", "RowActionTooltipWithDimension": "Mostrar registro de visitante segmentado por este %s", "RowActionTooltipTitle": "Abrir registro de visitante segmentado", diff --git a/plugins/Login/lang/es.json b/plugins/Login/lang/es.json index ec597a1b5e..79ee9ce391 100644 --- a/plugins/Login/lang/es.json +++ b/plugins/Login/lang/es.json @@ -5,12 +5,14 @@ "ExceptionInvalidSuperUserAccessAuthenticationMethod": "Un usuario con acceso Super Usuario no puede ser autenticado usando el mecanismo '%s'.", "ExceptionPasswordMD5HashExpected": "Se espera que el parámetro contraseña sea un hash MD5 de la contraseña.", "InvalidNonceOrHeadersOrReferrer": "La seguridad del formulario falló. Por favor cargue nuevamente el formulario y compruebe que sus cookies están habilitadas. Si usa un proxy, debe %1$s configurar Piwik para aceptar la cabecera proxy%2$s que precede a la cabecera Host. Compruebe también que su cabecera Referrer se envía correctamente.", + "InvalidNonceSSLMisconfigured": "También, puede %1$s forzar a Piwik a usar una conexión segura%2$s: en su archivo de configuración %3$s establezca %4$s bajo la sección %5$s.", "InvalidOrExpiredToken": "El Token no es válido o ha caducado", "InvalidUsernameEmail": "Nombre de usuario y\/o correo electrónico incorrectos.", "LogIn": "Iniciar sesión", "LoginOrEmail": "Usuario o correo electrónico", "LoginPasswordNotCorrect": "Usuario y contraseña incorrectos.", "LostYourPassword": "¿Olvidó la contraseña?", + "MailPasswordChangeBody": "Hola %1$s,\n\nUna solicitud de reestablecimiento de contraseña fue recibida desde %2$s. Para confirmar este cambio de contraseña para iniciar sesión con sus nuevas credenciales, visite el siguiente enlace:\n\n%3$s\n\nAtención: Cambiar su contraseña hará también que cambie su token_auth. Puede verificarlo en su página de ajustes.\n\nSi está utilizando su API token_auth en cualquier aplicación externa o a solo fines de archivado, asegúrese de actualizar su token_auth en tanto que cualquier petición a la API generá un error.\n\nNota: este enlace caducará transcurridas 24 horas.\n\nGracias por usar Piwik!", "MailTopicPasswordChange": "Confirma el cambio de contraseña", "PasswordChanged": "Su contraseña ha sido modificada.", "PasswordRepeat": "Contraseña (repetir)", diff --git a/plugins/Login/lang/tr.json b/plugins/Login/lang/tr.json index 1ba717c60b..88f8d5975a 100644 --- a/plugins/Login/lang/tr.json +++ b/plugins/Login/lang/tr.json @@ -1,21 +1,21 @@ { "Login": { - "ConfirmationLinkSent": "Onaylama bağlantısı gelen kutunuza gönderildi. Şifre değişikliğinı onaylamak için e-posta hesabınızı kontrol edin ve bağlantıyı ziyaret edin.", - "ContactAdmin": "Olası nedeni: Sunucunuzda mail() fonksiyonunu devre dışı bırakmış olabilir. <br \/>Lütfen Piwik yöneticinizle iletişime geçiniz.", - "ExceptionInvalidSuperUserAccessAuthenticationMethod": "'%s' mekanizması kullanılarak bir süper kullanıcı girişi yetkilendirilemez.", - "ExceptionPasswordMD5HashExpected": "Bu şifre parametresi şifrenin MD5 ile hashlenmiş halini beklemektedir.", + "ConfirmationLinkSent": "Size onaylama bağlantısını içeren bir e-posta önderildi. Parola değişikliği isteğinizi onaylamak için e-postalarınıza bakın ve onaylama bağlantısını açın.", + "ContactAdmin": "Olası neden: Sunucunuzda mail() işlevi devre dışı bırakılmış olabilir. <br \/>Lütfen Piwik yöneticinizle görüşün.", + "ExceptionInvalidSuperUserAccessAuthenticationMethod": "Süper kullanıcı yetkileri olan bir kullanıcının kimliği '%s' yöntemi ile doğrulanamaz.", + "ExceptionPasswordMD5HashExpected": "Parola parametresinin parolanın MD5 yöntemi ile karılmış biçimi olması beklenir.", "InvalidNonceOrHeadersOrReferrer": "Form güvenliği sağlanamadı. Lütfen formu tekrar yükleyin ve çerezlerin aktif olduğundan emin olun. Eğer bir proxy sunucusu kullanıyorsanız, %2$s proxy başlığını kabul etmek için Piwik'i %1$s olarak ayarlamalısınız. Bununla birlikte Referans başlaığınızın doğru gönderildiğini kontrol edin.", "InvalidOrExpiredToken": "Güvenlik kodu yanlış yada süresi dolmuş.", - "InvalidUsernameEmail": "Geçersiz kullanıcı adı ve\/veya e-posta adresi", + "InvalidUsernameEmail": "Kullanıcı adı ya da e-posta adresi geçersiz.", "LogIn": "Oturum aç", - "LoginOrEmail": "Giriş veya E-posta", - "LoginPasswordNotCorrect": "Kullanıcı adı & Şifre yanlış", - "LostYourPassword": "Şifrenizi mi unuttunuz?", + "LoginOrEmail": "Kullanıcı Adı ya da E-posta", + "LoginPasswordNotCorrect": "Kullanıcı adı ile parola uyuşmuyor.", + "LostYourPassword": "Parolamı unuttum", "MailTopicPasswordChange": "Parola Değişikliğini Onayla", "PasswordChanged": "Parolanız değiştirildi.", - "PasswordRepeat": "Şifre (Tekrar)", - "PasswordsDoNotMatch": "Şifre eşleşmedi", + "PasswordRepeat": "Parola onayı", + "PasswordsDoNotMatch": "Parola ve onayı aynı değil", "RememberMe": "Beni Hatırla", - "ResetPasswordInstructions": "Hesabınız için yeni parolanızı giriniz." + "ResetPasswordInstructions": "Hesabınıza yeni bir parola yazın." } }
\ No newline at end of file diff --git a/plugins/Morpheus/javascripts/ajaxHelper.js b/plugins/Morpheus/javascripts/ajaxHelper.js index c46984e5ce..4cc1ac823e 100644 --- a/plugins/Morpheus/javascripts/ajaxHelper.js +++ b/plugins/Morpheus/javascripts/ajaxHelper.js @@ -151,6 +151,8 @@ function ajaxHelper() { */ this.requestHandle = null; + this.defaultParams = ['idSite', 'period', 'date', 'segment']; + /** * Adds params to the request. * If params are given more then once, the latest given value is used for the request @@ -318,6 +320,42 @@ function ajaxHelper() { }; /** + * Detect whether are allowed to use the given default parameter or not + * @param string parameter + * @returns {boolean} + * @private + */ + this._useGETDefaultParameter = function (parameter) { + if (parameter && this.defaultParams) { + var i; + for (i = 0; i < this.defaultParams.length; i++) { + if (this.defaultParams[i] === parameter) { + return true; + } + } + } + + return false; + } + + /** + * Removes a default parameter that is usually send automatically along the request. + * + * @param {String} parameter A name such as "period", "date", "segment". + */ + this.removeDefaultParameter = function (parameter) { + if (parameter && this.defaultParams) { + + var i; + for (i = 0; i < this.defaultParams.length; i++) { + if (this.defaultParams[i] === parameter) { + this.defaultParams.splice(i, 1); + } + } + } + } + + /** * Send the request * @param {Boolean} [sync] indicates if the request should be synchronous (defaults to false) * @return {void} @@ -497,13 +535,13 @@ function ajaxHelper() { } for (var key in defaultParams) { - if (!params[key] && !this.postParams[key] && defaultParams[key]) { + if (this._useGETDefaultParameter(key) && !params[key] && !this.postParams[key] && defaultParams[key]) { params[key] = defaultParams[key]; } } // handle default date & period if not already set - if (!params.date && !this.postParams.date) { + if (this._useGETDefaultParameter('date') && !params.date && !this.postParams.date) { params.date = piwik.currentDateString || broadcast.getValueFromUrl('date'); if (params.period == 'range' && piwik.currentDateString) { params.date = piwik.startDateString + ',' + params.date; diff --git a/plugins/Morpheus/templates/javascriptCode.tpl b/plugins/Morpheus/templates/javascriptCode.twig index 18483dd09d..c18d850d34 100644 --- a/plugins/Morpheus/templates/javascriptCode.tpl +++ b/plugins/Morpheus/templates/javascriptCode.twig @@ -7,9 +7,12 @@ {$setTrackerUrl} {$optionsBeforeTrackerUrl}_paq.push(['setTrackerUrl', u+'piwik.php']); _paq.push(['setSiteId', '{$idSite}']); - var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); + {% if loadAsync %}var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; + g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);{% endif %} + })(); </script> +{% if not loadAsync %}<script type='text/javascript' src="{$protocol}{$piwikUrl}/piwik.js"> +{% endif %} <noscript><p><img src="{$protocol}{$piwikUrl}/piwik.php?idsite={$idSite}" style="border:0;" alt="" /></p></noscript> <!-- End Piwik Code --> diff --git a/plugins/ScheduledReports/Controller.php b/plugins/ScheduledReports/Controller.php index a58faed74e..d42b209a91 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 df6744f673..b85bbb7621 100644 --- a/plugins/ScheduledReports/ScheduledReports.php +++ b/plugins/ScheduledReports/ScheduledReports.php @@ -111,6 +111,7 @@ class ScheduledReports extends \Piwik\Plugin { $translationKeys[] = "ScheduledReports_ReportSent"; $translationKeys[] = "ScheduledReports_ReportUpdated"; + $translationKeys[] = "ScheduledReports_ReportHourWithUTC"; } /** diff --git a/plugins/ScheduledReports/Tasks.php b/plugins/ScheduledReports/Tasks.php index be61e0d793..44a13e1b57 100644 --- a/plugins/ScheduledReports/Tasks.php +++ b/plugins/ScheduledReports/Tasks.php @@ -18,11 +18,9 @@ class Tasks extends \Piwik\Plugin\Tasks foreach (API::getInstance()->getReports() as $report) { if (!$report['deleted'] && $report['period'] != Schedule::PERIOD_NEVER) { - $timezone = Site::getTimezoneFor($report['idsite']); - $schedule = Schedule::getScheduledTimeForPeriod($report['period']); $schedule->setHour($report['hour']); - $schedule->setTimezone($timezone); + $schedule->setTimezone('UTC'); // saved hour is UTC always $this->custom(API::getInstance(), 'sendReport', $report['idreport'], $schedule); } diff --git a/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js b/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js index ed50d95314..b0de00ddfe 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 1eea0758c1..cb0eaca715 100644 --- a/plugins/ScheduledReports/lang/cs.json +++ b/plugins/ScheduledReports/lang/cs.json @@ -29,6 +29,7 @@ "PluginDescription": "Vytvořte vlastní e-mailová hlášení a naplánujte jejich zaslání denně, týdně nebo měsíčně jednomu nebo více lidem. Je podporováno několik formátů (HTML, PDF, CSV, obrázky).", "ReportFormat": "Formát hlášení", "ReportHour": "Odeslat hlášení v %s hodin", + "ReportHourWithUTC": "Odeslat hlášení v %1$s hodin (%2$s hodin UTC)", "ReportIncludeNWebsites": "Hlášení bude obsahovat hlavní měření pro všechny weby, které mají aspoň jednu návštěvu (z %s aktuálně dostupných webů).", "ReportSent": "Hlášení posláno", "ReportsIncluded": "Zahrnuté statistiky", diff --git a/plugins/ScheduledReports/lang/el.json b/plugins/ScheduledReports/lang/el.json index 5c5ea4b5ec..10f56acac4 100644 --- a/plugins/ScheduledReports/lang/el.json +++ b/plugins/ScheduledReports/lang/el.json @@ -29,6 +29,7 @@ "PluginDescription": "Δημιουργεί προσαρμοσμένες αναφορές και τις προγραμματίζει για καθημερινή, εβδομαδιαία ή μηνιαία αναφορά σε ένα ή περισσότερα άτομα. Υποστηρίζονται αρκετοί τύποι αναφορών (html, pdf, csv, εικόνες).", "ReportFormat": "Μορφή Αναφοράς", "ReportHour": "Αποστολή αναφοράς στις %s", + "ReportHourWithUTC": "Αποστολή αναφοράς στις %1$s (%2$s ώρα UTC)", "ReportIncludeNWebsites": "Η αναφορά θα περιλαμβάνει βασικές μετρήσεις για όλες τις ιστοσελίδες που έχουν τουλάχιστον μια επισκεψη (από τις συνολικά %s διαθέσιμες ιστοσελίδες).", "ReportSent": "Η αναφορά στάλθηκε.", "ReportsIncluded": "Συμπερίληψη στατιστικών", diff --git a/plugins/ScheduledReports/lang/en.json b/plugins/ScheduledReports/lang/en.json index 3b53fb3987..f97c481202 100644 --- a/plugins/ScheduledReports/lang/en.json +++ b/plugins/ScheduledReports/lang/en.json @@ -29,6 +29,7 @@ "PluginDescription": "Create custom reports and schedule them to be emailed daily, weekly or monthly to one or several people. Several report formats are supported (html, pdf, csv, images).", "ReportFormat": "Report Format", "ReportHour": "Send report at %s o'clock", + "ReportHourWithUTC": "%s o'clock UTC", "ReportIncludeNWebsites": "The report will include main metrics for all websites that have at least one visit (from the %s websites currently available).", "ReportSent": "Report sent", "ReportsIncluded": "Statistics included", diff --git a/plugins/ScheduledReports/lang/es.json b/plugins/ScheduledReports/lang/es.json index 53b295f107..7e0f117781 100644 --- a/plugins/ScheduledReports/lang/es.json +++ b/plugins/ScheduledReports/lang/es.json @@ -29,6 +29,7 @@ "PluginDescription": "Cree informes personalizados y prográmelos para ser enviados por correo electrónico diaria, semanal o mensualmente a uno o varias personas. Algunos formatos de informe están soportados (html, pdf, csv, imágenes).", "ReportFormat": "Formato del informe", "ReportHour": "Enviar informe a las %s horas", + "ReportHourWithUTC": "Enviar informe a las %1$s en punto (%2$s UTC)", "ReportIncludeNWebsites": "El informe incluirá las principales métricas para todos los sitios de internet con al menos una visita (de todo %s los sitios de internet disponibles).", "ReportSent": "Informe enviado", "ReportsIncluded": "Estadísticas incluidas", diff --git a/plugins/ScheduledReports/templates/_addReport.twig b/plugins/ScheduledReports/templates/_addReport.twig index 27cde7ae65..ac7840337a 100644 --- a/plugins/ScheduledReports/templates/_addReport.twig +++ b/plugins/ScheduledReports/templates/_addReport.twig @@ -45,11 +45,20 @@ inline-help="#emailScheduleInlineHelp"> </div> - <div piwik-field uicontrol="text" name="report_hour" + <div piwik-field uicontrol="select" name="report_hour" + options="manageScheduledReport.reportHours" + ng-change="manageScheduledReport.updateReportHourUtc()" ng-model="manageScheduledReport.report.hour" + {% if timeZoneDifference != 0 %}inline-help="#reportHourHelpText"{% endif %} title="{{ 'ScheduledReports_ReportHour'|translate('X')|e('html_attr') }}"> </div> + {% if timeZoneDifference != 0 %} + <div id="reportHourHelpText" class="inline-help-node"> + <span ng-bind="manageScheduledReport.report.hourUtc"></span> + </div> + {% endif %} + <div piwik-field uicontrol="select" name="report_type" options="{{ reportTypeOptions|json_encode }}" ng-model="manageScheduledReport.report.type" diff --git a/plugins/ScheduledReports/templates/index.twig b/plugins/ScheduledReports/templates/index.twig index 1ba11502e6..2455101a0d 100644 --- a/plugins/ScheduledReports/templates/index.twig +++ b/plugins/ScheduledReports/templates/index.twig @@ -31,6 +31,7 @@ </div> <script type="text/javascript"> + var timeZoneDifference = {{ timeZoneDifference }}; var ReportPlugin = {}; ReportPlugin.defaultPeriod = '{{ defaultPeriod }}'; ReportPlugin.defaultHour = '{{ defaultHour }}'; diff --git a/plugins/ScheduledReports/tests/Integration/ApiTest.php b/plugins/ScheduledReports/tests/Integration/ApiTest.php index 5062ae1569..8c3e86ba30 100644 --- a/plugins/ScheduledReports/tests/Integration/ApiTest.php +++ b/plugins/ScheduledReports/tests/Integration/ApiTest.php @@ -374,21 +374,22 @@ class ApiTest extends IntegrationTestCase )); // expected tasks + // NOTE: scheduled reports are always saved with UTC, to avoid daylight saving issues $scheduleTask1 = Schedule::factory('daily'); - $scheduleTask1->setHour(0); // paris is UTC-1, period ends at 23h UTC - $scheduleTask1->setTimezone('Europe/Paris'); + $scheduleTask1->setHour(0); + $scheduleTask1->setTimezone('UTC'); $scheduleTask2 = new Monthly(); - $scheduleTask2->setHour(0); // site is UTC-6.5, period ends at 6h30 UTC, smallest resolution is hour - $scheduleTask2->setTimezone('UTC-6.5'); + $scheduleTask2->setHour(0); + $scheduleTask2->setTimezone('UTC'); $scheduleTask3 = new Monthly(); - $scheduleTask3->setHour(8); // paris is UTC-1, configured to be sent at 8h - $scheduleTask3->setTimezone('Europe/Paris'); + $scheduleTask3->setHour(8); + $scheduleTask3->setTimezone('UTC'); $scheduleTask4 = new Monthly(); - $scheduleTask4->setHour(8); // site is UTC-6.5, configured to be sent at 8h - $scheduleTask4->setTimezone('UTC-6.5'); + $scheduleTask4->setHour(8); + $scheduleTask4->setTimezone('UTC'); $expectedTasks = array( new Task(APIScheduledReports::getInstance(), 'sendReport', 1, $scheduleTask1), diff --git a/plugins/SitesManager/lang/es.json b/plugins/SitesManager/lang/es.json index 434f0d5815..703e87b049 100644 --- a/plugins/SitesManager/lang/es.json +++ b/plugins/SitesManager/lang/es.json @@ -67,12 +67,18 @@ "SiteSearchUse": "Puede utilizar Piwik para rastrear y obtener un informe que es lo que están buscando sus visitantes en el motor de búsqueda interno de su sitio de internet.", "SiteWithoutDataTitle": "Aun no se han grabado datos", "SiteWithoutDataDescription": "Aun no se han registrado datos analíticos para este sitio de internet.", + "SiteWithoutDataSetupTracking": "Por favor configure el %1$scódigo de rastreo Javascript%2$s en su sitio de internet si ya no lo ha hecho.", + "SiteWithoutDataMessageDisappears": "Este mensaje desaparecerá tan pronto como algún dato sea rastreado en este sitio de internet.", + "SiteWithoutDataSetupGoals": "Mientras tanto, tal vez le gustaría %1$sestablecer algunas metas%2$s.", "SuperUserAccessCan": "Un usuario con acceso Super Usuario también puede %1$s especificar la configuración global%2$s para nuevos sitios de internet.", "Timezone": "Zona Horaria", "TrackingSiteSearch": "Seguimiento en el Buscador interno del sitio", "TrackingTags": "Código de seguimiento para %s", "Urls": "URLs", "UTCTimeIs": "La hora UTC es %s.", + "OnlyMatchedUrlsAllowed": "Solo rastrear visitas y acciones cuando la acción URL comienza con una de las siguientes URLs.", + "OnlyMatchedUrlsAllowedHelp": "Cuando es habilitado, Piwik solo rastreará acciones internas cuando la URL de la página es una URL conocida del sitio. Esto evita que la gente genere datos basura en sus analíticas con direcciones URL de otros sitios.", + "OnlyMatchedUrlsAllowedHelpExamples": "El dominio y el camino tiene que ser una coincidencia total y cada subdominio válido tiene que especificarse por separado. Por ejemplo, cuando las URLs conocidas son 'http:\/\/example.com\/path' y 'http:\/\/good.example.com', las peticiones de rastreo para 'http:\/\/example.com\/otherpath' o 'http:\/\/bad.example.com' son ignoradas.", "WebsitesManagement": "Administración de sitios de internet", "XManagement": "Administrar %s", "ChooseMeasurableTypeHeadline": "Qué le gustaría medir?", diff --git a/plugins/Transitions/lang/tr.json b/plugins/Transitions/lang/tr.json index cd5fed6a05..4a82e65986 100644 --- a/plugins/Transitions/lang/tr.json +++ b/plugins/Transitions/lang/tr.json @@ -1,28 +1,28 @@ { "Transitions": { - "BouncesInline": "%s sıçramalar", - "DirectEntries": "Direk Girişler", - "ErrorBack": "Bir önceki işleme dön", - "ExitsInline": "%s çıkışlar", + "BouncesInline": "%s hemen çıkma", + "DirectEntries": "Doğrudan Girişler", + "ErrorBack": "Önceki işleme dön", + "ExitsInline": "%s çıkış", "FromCampaigns": "Kampanyalardan Geçişler", - "FromPreviousPages": "İç sayfalardan", + "FromPreviousPages": "İç Sayfalardan", "FromPreviousPagesInline": "%s iç sayfalardan", - "FromPreviousSiteSearches": "İnternet Aramalarından", - "FromPreviousSiteSearchesInline": "%s internet aramalarından", + "FromPreviousSiteSearches": "İç Aramalardan", + "FromPreviousSiteSearchesInline": "%s iç aramalardan", "FromSearchEngines": "Arama Motorlarından", - "FromWebsites": "Websitelerden", - "IncomingTraffic": "Gelen trafik", - "LoopsInline": "%s sayfa yüklemeleri", - "NoDataForAction": "%s için veri yok", - "NoDataForActionDetails": "%s süresi boyunca hiç sayfa görüntülenmemiş ve aksiyon alınmamıştır veya o hatalıdır.", - "OutgoingTraffic": "Giden trafik", - "PluginDescription": "Yeni iconu ile ulaşılan Aksiyon raporları sayfasında yeni geçişler raporunun içindeki her sayfaya ait URL'yi önceki ve takip eden aksiyonları için raporlar.", - "ShareOfAllPageviews": "Bu sayfa %1$s sayfa görünütülemesine sahiptir ( %2$s tüm sayfa görüntülemesi).", + "FromWebsites": "Web Sitelerinden", + "IncomingTraffic": "Gelen Trafik", + "LoopsInline": "%s sayfa yüklemesi", + "NoDataForAction": "%s için herhangi bir veri yok", + "NoDataForActionDetails": "%s süresi boyunca işlem için hiç bir sayfa görüntülenmemiş ya da geçersiz.", + "OutgoingTraffic": "Giden Trafik", + "PluginDescription": "İşlem raporları bölümündeki yeni simgesi ile erişilebilen yeni geçiş raporundaki her sayfanın İnternet adresi için önceki ve sonraki işlemleri görüntüler.", + "ShareOfAllPageviews": "Bu sayfa %1$s kez görüntülenmiş (toplam sayfa görüntülemelerinden %2$s).", "ToFollowingPages": "İç Sayfalara", - "ToFollowingPagesInline": "%s İç Sayfalara", + "ToFollowingPagesInline": "%s iç sayfalara", "ToFollowingSiteSearches": "İç Aramalar", - "ToFollowingSiteSearchesInline": "%s İç Aramalar", - "XOfAllPageviews": "Bu sayfadaki tüm görüntülenmelerin %s'i", - "XOutOfYVisits": "%1$s (%2$s'nin dışında)" + "ToFollowingSiteSearchesInline": "%s iç arama", + "XOfAllPageviews": "Bu sayfanın tüm görüntülenmelerinden %s", + "XOutOfYVisits": "%1$s (toplam %2$s)" } }
\ No newline at end of file diff --git a/plugins/UserId/lang/es.json b/plugins/UserId/lang/es.json index 98b725a25a..904563e8a4 100644 --- a/plugins/UserId/lang/es.json +++ b/plugins/UserId/lang/es.json @@ -1,5 +1,7 @@ { "UserId": { - "UserReportTitle": "Usuarios" + "UserId": "UserId", + "UserReportTitle": "Usuarios", + "PluginDescription": "Muestra reportes de usuario" } }
\ No newline at end of file diff --git a/plugins/UsersManager/lang/es.json b/plugins/UsersManager/lang/es.json index fb5557dfb7..57277f127b 100644 --- a/plugins/UsersManager/lang/es.json +++ b/plugins/UsersManager/lang/es.json @@ -13,6 +13,7 @@ "ClickHereToSetTheCookieOnDomain": "Haga clic aquí para configurar la cookie que excluirá sus visitas a los sitios de internet a los que Piwik realiza seguimiento en %s", "ConfirmGrantSuperUserAccess": "¿Estás seguro que desea conceder acceso 'Super User' a '%s'? Atención: el usuario tendrá acceso a todos los sitios de internet y podrá realizar tareas administrativas.", "ConfirmProhibitMySuperUserAccess": "¿%s, está seguro que desea eliminar su acceso Super Usuario? Perderá todos los permisos y accesos a todos los sitios de internet y será desconectado de Piwik.", + "ConfirmProhibitOtherUsersSuperUserAccess": "¿Está seguro que desea quitar el acceso Super Usuario de '%s'? Este perderá todos los permisos y accesos a todos los sitios. Asegúrese de dar acceso a los sitios necesarios después si es necesario.", "DeleteConfirm": "¿Está seguro que desea eliminar al usuario %s?", "Email": "Correo electrónico", "EmailYourAdministrator": "%1$sEnviar un correo electrónico a su administrador acerca de este problema%2$s.", @@ -37,9 +38,12 @@ "ExcludeVisitsViaCookie": "Excluir sus visitas usando una cookie", "ForAnonymousUsersReportDateToLoadByDefault": "Para los usuarios anónimos, fecha del informe a cargar por defecto", "GiveViewAccess": "Otorgar acceso a la visualización", + "GiveViewAccessTitle": "Otorgar a un actual usuario acceso a ver los informes de %s", + "GiveViewAccessInstructions": "Para otorgar atributos de visualización a actuales usuarios de %s suministre o el nombre de usuario o su correo electrónico", "IfYouWouldLikeToChangeThePasswordTypeANewOne": "Si desea cambiar la contraseña ingrese una nueva. Si no, déjelo vacío.", "InjectedHostCannotChangePwd": "Está actualmente visitando con un medio desconocido (%1$s). No puede cambiar su contraseña hasta que el problema esté soluionado.", "LastSeen": "Última visita", + "MainDescription": "Decida qué usuarios poseen acceso a sus sitios de internet. También puede otorgarles acceso a todos los sitios de una vez simplemente eligiendo la opción \"Usar en todos los sitios\" en el selector de los mismos.", "ManageAccess": "Administrar el acceso", "MenuAnonymousUserSettings": "Configuración de usuario anónimo", "MenuUsers": "Usuarios", @@ -48,6 +52,7 @@ "PersonalSettings": "Ajustes personales", "NoteNoAnonymousUserAccessSettingsWontBeUsed2": "Nota: No puede modificar la configuración en esta sección, debido a que no posee ningún sitio de internet que pueda ser contactado por un usuario anónimo.", "NoUsersExist": "Todavía no hay usuarios.", + "PluginDescription": "La Gestión de Usuarios le permite agregar nuevos usuarios, editar los actuales y otorgarles acceso a observar o administrar sitios de internet.", "PrivAdmin": "Administrador", "PrivNone": "Sin acceso", "PrivView": "Ver", diff --git a/plugins/VisitFrequency/lang/tr.json b/plugins/VisitFrequency/lang/tr.json new file mode 100644 index 0000000000..45b4c613f9 --- /dev/null +++ b/plugins/VisitFrequency/lang/tr.json @@ -0,0 +1,26 @@ +{ + "VisitFrequency": { + "ColumnActionsByReturningVisits": "Geri Gelen Ziyaretlere Göre Eylemler", + "ColumnAverageVisitDurationForReturningVisitors": "Ortalama Geri Gelen Ziyaret Süresi (saniye)", + "ColumnAvgActionsPerReturningVisit": "Geri Gelen Ziyaretlerin Ortalama Eylemleri", + "ColumnBounceCountForReturningVisits": "Geri Gelen Ziyaretlerin Sekme Sayısı", + "ColumnBounceRateForReturningVisits": "Geri Gelen Ziyaretlerin Sekme Oranı", + "ColumnMaxActionsInReturningVisit": "Bir geri gelen ziyaret için en fazla eylem sayısı", + "ColumnNbReturningVisitsConverted": "Dönüştürülmüş geri gelen ziyaret sayısı", + "ColumnReturningVisits": "Geri Gelen Ziyaretler", + "ColumnSumVisitLengthReturning": "Geri gelen ziyaretçilerin harcadığı toplam süre (saniye)", + "ColumnUniqueReturningVisitors": "Tekil geri gelen ziyaretçi sayısı", + "ColumnReturningUsers": "Geri Gelen Kullanıcılar", + "PluginDescription": "İlk kez gelen ziyaretçiler ile geri gelen ziyaretçi ölçeklerini raporlar.", + "ReturnActions": "Geri gelen ziyaretlerin eylemleri %s", + "ReturnAverageVisitDuration": "Geri gelen ziyaretçilerin ortalama ziyaret süresi %s", + "ReturnAvgActions": "Her geri gelen ziyaret için %s eylem", + "ReturnBounceRate": "%s geri gelen ziyaret sekti (bir sayfadan sonra siteyi terk etti)", + "ReturningVisitDocumentation": "Geri gelen ziyaret (yeni ziyaretten farklı olarak) daha önce siteyi en az bir kez ziyaret etmiş birisi tarafından yapılır.", + "ReturningVisitsDocumentation": "Geri gelen ziyaretlerin özeti.", + "ReturnVisits": "%s geri gelen ziyaret", + "SubmenuFrequency": "Sıklık", + "WidgetGraphReturning": "Zamana Göre Geri Gelen Ziyaretler", + "WidgetOverview": "Sıklık Özeti" + } +}
\ No newline at end of file diff --git a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php index cd2a714ab2..fc3f12d979 100644 --- a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php +++ b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php @@ -49,6 +49,11 @@ class TwoVisitsWithCustomEvents extends Fixture $uselocal = false; $vis = self::getTracker($this->idSite, $this->dateTime, $useDefault = true, $uselocal); + // $vis will start with a pageview, while $vis2 will directly start with the event + $vis->setUrl('http://example.org/webradio'); + $vis->setGenerationTime(333); + self::checkResponse($vis->doTrackPageView('Welcome!')); + $this->trackMusicPlaying($vis); $this->trackMusicRatings($vis); $this->trackEventWithoutUrl($vis); @@ -81,10 +86,6 @@ class TwoVisitsWithCustomEvents extends Fixture protected function trackMusicPlaying(PiwikTracker $vis) { - $vis->setUrl('http://example.org/webradio'); - $vis->setGenerationTime(333); - self::checkResponse($vis->doTrackPageView('Welcome!')); - $this->moveTimeForward($vis, 1); $this->setMusicEventCustomVar($vis); self::checkResponse($vis->doTrackEvent('Music', 'play', 'La fiancée de l\'eau')); diff --git a/tests/PHPUnit/Framework/Mock/Tracker/RequestAuthenticated.php b/tests/PHPUnit/Framework/Mock/Tracker/RequestAuthenticated.php new file mode 100644 index 0000000000..0b3c0a3555 --- /dev/null +++ b/tests/PHPUnit/Framework/Mock/Tracker/RequestAuthenticated.php @@ -0,0 +1,10 @@ +<?php +namespace Piwik\Tests\Framework\Mock\Tracker; + +use Piwik\Tracker\Request; + +class RequestAuthenticated extends Request +{ + protected $isAuthenticated = true; + +}
\ No newline at end of file diff --git a/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php b/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php index 06f4bb5916..c8bce62d51 100644 --- a/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php +++ b/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php @@ -152,6 +152,41 @@ class TrackerCodeGeneratorTest extends IntegrationTestCase $this->assertEquals($expected, $jsTag); } + /** + * Tests the generated JS code with options before tracker url + */ + public function testJavascriptTrackingCode_loadSync() + { + $generator = new TrackerCodeGenerator(); + + Piwik::addAction('Piwik.getJavascriptCode', function (&$codeImpl) { + $codeImpl['loadAsync'] = false; + }); + + $jsTag = $generator->generate($idSite = 1, $piwikUrl = 'http://localhost/piwik', + $mergeSubdomains = true, $groupPageTitlesByDomain = true, $mergeAliasUrls = true); + + $expected = "<!-- 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 92baae429e..d78e65ceda 100644 --- a/tests/PHPUnit/Integration/Tracker/VisitTest.php +++ b/tests/PHPUnit/Integration/Tracker/VisitTest.php @@ -16,6 +16,7 @@ use Piwik\Plugin\Manager; use Piwik\Plugins\SitesManager\API; use Piwik\Tests\Framework\Fixture; use Piwik\Tests\Framework\Mock\FakeAccess; +use Piwik\Tests\Framework\Mock\Tracker\RequestAuthenticated; use Piwik\Tracker\Request; use Piwik\Tracker\Visit; use Piwik\Tracker\VisitExcluded; @@ -91,14 +92,14 @@ class VisitTest extends IntegrationTestCase $idsite = API::getInstance()->addSite("name", "http://piwik.net/", $ecommerce = 0, $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, $excludedIp); - $request = new Request(array('idsite' => $idsite)); + $request = new RequestAuthenticated(array('idsite' => $idsite)); // test that IPs within the range, or the given IP, are excluded foreach ($tests as $ip => $expected) { - $testIpIsExcluded = IPUtils::stringToBinaryIP($ip); + $request->setParam('cip', $ip); - $excluded = new VisitExcluded_public($request, $testIpIsExcluded); - $this->assertSame($expected, $excluded->public_isVisitorIpExcluded($testIpIsExcluded)); + $excluded = new VisitExcluded_public($request); + $this->assertSame($expected, $excluded->public_isVisitorIpExcluded($ip)); } } @@ -179,13 +180,12 @@ class VisitTest extends IntegrationTestCase $idsite = API::getInstance()->addSite("name", "http://piwik.net/", $ecommerce = 0, $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null); - $request = new Request(array('idsite' => $idsite)); - $testIpIsExcluded = IPUtils::stringToBinaryIP($ip); + $request = new RequestAuthenticated(array('idsite' => $idsite, 'cip' => $ip)); $_SERVER['HTTP_VIA'] = '1.1 Chrome-Compression-Proxy'; - $excluded = new VisitExcluded_public($request, $testIpIsExcluded); - $isBot = $excluded->public_isNonHumanBot($testIpIsExcluded); + $excluded = new VisitExcluded_public($request); + $isBot = $excluded->public_isNonHumanBot(); unset($_SERVER['HTTP_VIA']); $this->assertSame($isNonHumanBot, $isBot); } @@ -242,7 +242,8 @@ class VisitTest extends IntegrationTestCase // test that user agents that contain excluded user agent strings are excluded foreach ($tests as $ua => $expected) { - $excluded = new VisitExcluded_public($request, $ip = false, $ua); + $request->setParam('ua', $ua); + $excluded = new VisitExcluded_public($request); $this->assertSame($expected, $excluded->public_isUserAgentExcluded(), "Result if isUserAgentExcluded('$ua') was not " . ($expected ? 'true' : 'false') . "."); } @@ -309,10 +310,11 @@ class VisitTest extends IntegrationTestCase ); $idsite = API::getInstance()->addSite("name", "http://piwik.net/"); - $request = new Request(array('idsite' => $idsite, 'bots' => 0)); + $request = new RequestAuthenticated(array('idsite' => $idsite, 'bots' => 0)); foreach ($isIpBot as $ip => $isBot) { - $excluded = new VisitExcluded_public($request, IPUtils::stringToBinaryIP($ip)); + $request->setParam('cip', $ip); + $excluded = new VisitExcluded_public($request); $this->assertSame($isBot, $excluded->public_isNonHumanBot(), $ip); } diff --git a/tests/PHPUnit/Integration/UpdaterTest.php b/tests/PHPUnit/Integration/UpdaterTest.php index aeee654848..a4bec9f93c 100644 --- a/tests/PHPUnit/Integration/UpdaterTest.php +++ b/tests/PHPUnit/Integration/UpdaterTest.php @@ -18,6 +18,21 @@ use Piwik\Tests\Framework\Fixture; */ class UpdaterTest extends IntegrationTestCase { + public function test_doUpdate_reportsAnError_whenMissingFilePermissionException() + { + $updater = new Updater($pathToCoreUpdates = null, PIWIK_INCLUDE_PATH . '/tests/resources/Updater/%s/'); + $updater->markComponentSuccessfullyUpdated('testpluginUpdates', '0.4'); + $componentsWithUpdateFile = $updater->getComponentsWithUpdateFile(array('testpluginUpdates' => '0.5')); + + $this->assertEquals(1, count($componentsWithUpdateFile)); + + $result = $updater->updateComponents($componentsWithUpdateFile); + + $this->assertTrue( count ($result['errors']) > 0, 'when an update fails because config file is not writable, we expect the updater to report a critical error'); + $this->assertEquals( 'make sure this exception is thrown', $result['errors'][0]); + } + + public function testUpdaterChecksCoreVersionAndDetectsUpdateFile() { $updater = new Updater(PIWIK_INCLUDE_PATH . '/tests/resources/Updater/core/'); diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_day.xml index 445b742211..7aceeda4db 100644 --- a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_day.xml +++ b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_day.xml @@ -9,6 +9,11 @@ <nb_hits_with_time_generation>2</nb_hits_with_time_generation> <min_time_generation>0.666</min_time_generation> <max_time_generation>0.666</max_time_generation> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>14</entry_nb_actions> + <entry_sum_visit_length>3541</entry_sum_visit_length> + <entry_bounce_count>0</entry_bounce_count> <exit_nb_uniq_visitors>2</exit_nb_uniq_visitors> <exit_nb_visits>2</exit_nb_visits> <avg_time_on_page>0</avg_time_on_page> @@ -20,17 +25,17 @@ </row> <row> <label>/webradio</label> - <nb_visits>2</nb_visits> - <nb_uniq_visitors>2</nb_uniq_visitors> - <nb_hits>2</nb_hits> - <sum_time_spent>2998</sum_time_spent> - <nb_hits_with_time_generation>2</nb_hits_with_time_generation> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>1499</sum_time_spent> + <nb_hits_with_time_generation>1</nb_hits_with_time_generation> <min_time_generation>0.333</min_time_generation> <max_time_generation>0.333</max_time_generation> - <entry_nb_uniq_visitors>2</entry_nb_uniq_visitors> - <entry_nb_visits>2</entry_nb_visits> - <entry_nb_actions>31</entry_nb_actions> - <entry_sum_visit_length>7202</entry_sum_visit_length> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>16</entry_nb_actions> + <entry_sum_visit_length>3601</entry_sum_visit_length> <entry_bounce_count>0</entry_bounce_count> <avg_time_on_page>1499</avg_time_on_page> <bounce_rate>0%</bounce_rate> diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_month.xml index 0b56a1fbd5..79b9cb81e5 100644 --- a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_month.xml +++ b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.getPageUrls_month.xml @@ -8,8 +8,13 @@ <nb_hits_with_time_generation>2</nb_hits_with_time_generation> <min_time_generation>0.666</min_time_generation> <max_time_generation>0.666</max_time_generation> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>14</entry_nb_actions> + <entry_sum_visit_length>3541</entry_sum_visit_length> + <entry_bounce_count>0</entry_bounce_count> <exit_nb_visits>2</exit_nb_visits> <sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors> + <sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors> <sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors> <avg_time_on_page>0</avg_time_on_page> <bounce_rate>0%</bounce_rate> @@ -20,18 +25,18 @@ </row> <row> <label>/webradio</label> - <nb_visits>2</nb_visits> - <nb_hits>2</nb_hits> - <sum_time_spent>2998</sum_time_spent> - <nb_hits_with_time_generation>2</nb_hits_with_time_generation> + <nb_visits>1</nb_visits> + <nb_hits>1</nb_hits> + <sum_time_spent>1499</sum_time_spent> + <nb_hits_with_time_generation>1</nb_hits_with_time_generation> <min_time_generation>0.333</min_time_generation> <max_time_generation>0.333</max_time_generation> - <entry_nb_visits>2</entry_nb_visits> - <entry_nb_actions>31</entry_nb_actions> - <entry_sum_visit_length>7202</entry_sum_visit_length> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>16</entry_nb_actions> + <entry_sum_visit_length>3601</entry_sum_visit_length> <entry_bounce_count>0</entry_bounce_count> - <sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors> - <sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors> + <sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors> + <sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors> <avg_time_on_page>1499</avg_time_on_page> <bounce_rate>0%</bounce_rate> <exit_rate>0%</exit_rate> diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_day.xml index 65ae232e68..f7a5fb831c 100644 --- a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_day.xml +++ b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_day.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" ?> <result> - <nb_pageviews>4</nb_pageviews> - <nb_uniq_pageviews>4</nb_uniq_pageviews> + <nb_pageviews>3</nb_pageviews> + <nb_uniq_pageviews>3</nb_uniq_pageviews> <nb_downloads>0</nb_downloads> <nb_uniq_downloads>0</nb_uniq_downloads> <nb_outlinks>0</nb_outlinks> <nb_uniq_outlinks>0</nb_uniq_outlinks> <nb_searches>0</nb_searches> <nb_keywords>0</nb_keywords> - <avg_time_generation>0.5</avg_time_generation> + <avg_time_generation>0.557</avg_time_generation> </result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_month.xml index 65ae232e68..f7a5fb831c 100644 --- a/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_month.xml +++ b/tests/PHPUnit/System/expected/test_CustomEvents__Actions.get_month.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" ?> <result> - <nb_pageviews>4</nb_pageviews> - <nb_uniq_pageviews>4</nb_uniq_pageviews> + <nb_pageviews>3</nb_pageviews> + <nb_uniq_pageviews>3</nb_uniq_pageviews> <nb_downloads>0</nb_downloads> <nb_uniq_downloads>0</nb_uniq_downloads> <nb_outlinks>0</nb_outlinks> <nb_uniq_outlinks>0</nb_uniq_outlinks> <nb_searches>0</nb_searches> <nb_keywords>0</nb_keywords> - <avg_time_generation>0.5</avg_time_generation> + <avg_time_generation>0.557</avg_time_generation> </result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml index 572b560a01..3c677f06fd 100644 --- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml +++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml @@ -883,7 +883,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>46</pageId> + <pageId>45</pageId> <eventCategory>Movie</eventCategory> <eventAction>Purchase</eventAction> <icon>plugins/Morpheus/images/event.png</icon> @@ -984,7 +984,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>45</pageId> + <pageId>44</pageId> <eventCategory>Movie</eventCategory> <eventAction>Search</eventAction> <icon>plugins/Morpheus/images/event.png</icon> @@ -1085,7 +1085,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>41</pageId> + <pageId>40</pageId> <eventCategory>Movie</eventCategory> <eventAction>play50%</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1099,7 +1099,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>42</pageId> + <pageId>41</pageId> <eventCategory>Movie</eventCategory> <eventAction>play75%</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1113,7 +1113,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>44</pageId> + <pageId>43</pageId> <eventCategory>Movie</eventCategory> <eventAction>Search</eventAction> <eventName>Search query here</eventName> @@ -1127,7 +1127,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>47</pageId> + <pageId>46</pageId> <eventCategory>Movie</eventCategory> <eventAction>playEnd</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1141,7 +1141,7 @@ <url /> <pageIdAction /> - <pageId>48</pageId> + <pageId>47</pageId> <eventCategory>Movie</eventCategory> <eventAction>rating</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1156,7 +1156,7 @@ <url>http://example.org/finishedMovie</url> <pageIdAction>27</pageIdAction> - <pageId>49</pageId> + <pageId>48</pageId> <eventCategory>event category Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---> 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> @@ -1356,35 +1356,11 @@ <actionDetails> <row> - <type>action</type> - <url>http://example.org/webradio</url> - <pageTitle>Welcome!</pageTitle> - <pageIdAction>2</pageIdAction> - - <pageId>26</pageId> - <generationTime>0.33s</generationTime> - <timeSpent>60</timeSpent> - <timeSpentPretty>1 min 0s</timeSpentPretty> - <icon /> - - </row> - <row> - <type>goal</type> - <goalName>triggered js</goalName> - <goalId>1</goalId> - <revenue>0</revenue> - <goalPageId>26</goalPageId> - - <url>http://example.org/webradio</url> - <icon>plugins/Morpheus/images/goal.png</icon> - - </row> - <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>27</pageId> + <pageId>26</pageId> <eventCategory>Music</eventCategory> <eventAction>play</eventAction> <customVariables> @@ -1401,10 +1377,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>28</pageId> + <pageId>27</pageId> <eventCategory>Music</eventCategory> <eventAction>play25%</eventAction> <customVariables> @@ -1421,10 +1397,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>29</pageId> + <pageId>28</pageId> <eventCategory>Music</eventCategory> <eventAction>play50%</eventAction> <customVariables> @@ -1441,10 +1417,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>30</pageId> + <pageId>29</pageId> <eventCategory>Music</eventCategory> <eventAction>play75%</eventAction> <customVariables> @@ -1461,10 +1437,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>31</pageId> + <pageId>30</pageId> <eventCategory>Music</eventCategory> <eventAction>playEnd</eventAction> <customVariables> @@ -1481,10 +1457,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>32</pageId> + <pageId>31</pageId> <eventCategory>Music</eventCategory> <eventAction>rating</eventAction> <customVariables> @@ -1502,10 +1478,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>33</pageId> + <pageId>32</pageId> <eventCategory>Music</eventCategory> <eventAction>rating</eventAction> <customVariables> @@ -1527,7 +1503,7 @@ <pageTitle>Movie Theater</pageTitle> <pageIdAction>15</pageIdAction> - <pageId>34</pageId> + <pageId>33</pageId> <generationTime>0.67s</generationTime> <timeSpent>60</timeSpent> <timeSpentPretty>1 min 0s</timeSpentPretty> @@ -1539,7 +1515,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>35</pageId> + <pageId>34</pageId> <eventCategory>Movie</eventCategory> <eventAction>playTrailer</eventAction> <eventName>Princess Mononoke (もののけ姫)</eventName> @@ -1553,7 +1529,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>36</pageId> + <pageId>35</pageId> <eventCategory>Movie</eventCategory> <eventAction>playTrailer</eventAction> <eventName>Ponyo (崖の上のポニョ)</eventName> @@ -1567,7 +1543,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>37</pageId> + <pageId>36</pageId> <eventCategory>Movie</eventCategory> <eventAction>playTrailer</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1581,7 +1557,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>38</pageId> + <pageId>37</pageId> <eventCategory>Movie</eventCategory> <eventAction>clickBuyNow</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1595,7 +1571,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>39</pageId> + <pageId>38</pageId> <eventCategory>Movie</eventCategory> <eventAction>playStart</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1609,7 +1585,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>40</pageId> + <pageId>39</pageId> <eventCategory>Movie</eventCategory> <eventAction>play25%</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1617,7 +1593,7 @@ </row> </actionDetails> - <goalConversions>1</goalConversions> + <goalConversions>0</goalConversions> <siteCurrency>USD</siteCurrency> <siteCurrencySymbol>$</siteCurrencySymbol> @@ -1627,18 +1603,18 @@ <userId /> <visitorType>new</visitorType> <visitorTypeIcon /> - <visitConverted>1</visitConverted> - <visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon> + <visitConverted>0</visitConverted> + <visitConvertedIcon /> <visitCount>1</visitCount> <visitEcommerceStatus>none</visitEcommerceStatus> <visitEcommerceStatusIcon /> <daysSinceFirstVisit>0</daysSinceFirstVisit> <daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder> - <visitDuration>3601</visitDuration> - <visitDurationPretty>1 hours 0 min</visitDurationPretty> + <visitDuration>3541</visitDuration> + <visitDurationPretty>59 min 1s</visitDurationPretty> <searches>0</searches> - <actions>15</actions> + <actions>14</actions> <referrerType>direct</referrerType> <referrerTypeName>Direct Entry</referrerTypeName> <referrerName /> diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml index 572b560a01..3c677f06fd 100644 --- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml +++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml @@ -883,7 +883,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>46</pageId> + <pageId>45</pageId> <eventCategory>Movie</eventCategory> <eventAction>Purchase</eventAction> <icon>plugins/Morpheus/images/event.png</icon> @@ -984,7 +984,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>45</pageId> + <pageId>44</pageId> <eventCategory>Movie</eventCategory> <eventAction>Search</eventAction> <icon>plugins/Morpheus/images/event.png</icon> @@ -1085,7 +1085,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>41</pageId> + <pageId>40</pageId> <eventCategory>Movie</eventCategory> <eventAction>play50%</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1099,7 +1099,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>42</pageId> + <pageId>41</pageId> <eventCategory>Movie</eventCategory> <eventAction>play75%</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1113,7 +1113,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>44</pageId> + <pageId>43</pageId> <eventCategory>Movie</eventCategory> <eventAction>Search</eventAction> <eventName>Search query here</eventName> @@ -1127,7 +1127,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>47</pageId> + <pageId>46</pageId> <eventCategory>Movie</eventCategory> <eventAction>playEnd</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1141,7 +1141,7 @@ <url /> <pageIdAction /> - <pageId>48</pageId> + <pageId>47</pageId> <eventCategory>Movie</eventCategory> <eventAction>rating</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1156,7 +1156,7 @@ <url>http://example.org/finishedMovie</url> <pageIdAction>27</pageIdAction> - <pageId>49</pageId> + <pageId>48</pageId> <eventCategory>event category Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---> 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> @@ -1356,35 +1356,11 @@ <actionDetails> <row> - <type>action</type> - <url>http://example.org/webradio</url> - <pageTitle>Welcome!</pageTitle> - <pageIdAction>2</pageIdAction> - - <pageId>26</pageId> - <generationTime>0.33s</generationTime> - <timeSpent>60</timeSpent> - <timeSpentPretty>1 min 0s</timeSpentPretty> - <icon /> - - </row> - <row> - <type>goal</type> - <goalName>triggered js</goalName> - <goalId>1</goalId> - <revenue>0</revenue> - <goalPageId>26</goalPageId> - - <url>http://example.org/webradio</url> - <icon>plugins/Morpheus/images/goal.png</icon> - - </row> - <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>27</pageId> + <pageId>26</pageId> <eventCategory>Music</eventCategory> <eventAction>play</eventAction> <customVariables> @@ -1401,10 +1377,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>28</pageId> + <pageId>27</pageId> <eventCategory>Music</eventCategory> <eventAction>play25%</eventAction> <customVariables> @@ -1421,10 +1397,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>29</pageId> + <pageId>28</pageId> <eventCategory>Music</eventCategory> <eventAction>play50%</eventAction> <customVariables> @@ -1441,10 +1417,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>30</pageId> + <pageId>29</pageId> <eventCategory>Music</eventCategory> <eventAction>play75%</eventAction> <customVariables> @@ -1461,10 +1437,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>31</pageId> + <pageId>30</pageId> <eventCategory>Music</eventCategory> <eventAction>playEnd</eventAction> <customVariables> @@ -1481,10 +1457,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>32</pageId> + <pageId>31</pageId> <eventCategory>Music</eventCategory> <eventAction>rating</eventAction> <customVariables> @@ -1502,10 +1478,10 @@ </row> <row> <type>event</type> - <url>http://example.org/webradio</url> - <pageIdAction>3</pageIdAction> + <url>http://example.com/piwik/</url> + <pageIdAction>31</pageIdAction> - <pageId>33</pageId> + <pageId>32</pageId> <eventCategory>Music</eventCategory> <eventAction>rating</eventAction> <customVariables> @@ -1527,7 +1503,7 @@ <pageTitle>Movie Theater</pageTitle> <pageIdAction>15</pageIdAction> - <pageId>34</pageId> + <pageId>33</pageId> <generationTime>0.67s</generationTime> <timeSpent>60</timeSpent> <timeSpentPretty>1 min 0s</timeSpentPretty> @@ -1539,7 +1515,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>35</pageId> + <pageId>34</pageId> <eventCategory>Movie</eventCategory> <eventAction>playTrailer</eventAction> <eventName>Princess Mononoke (もののけ姫)</eventName> @@ -1553,7 +1529,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>36</pageId> + <pageId>35</pageId> <eventCategory>Movie</eventCategory> <eventAction>playTrailer</eventAction> <eventName>Ponyo (崖の上のポニョ)</eventName> @@ -1567,7 +1543,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>37</pageId> + <pageId>36</pageId> <eventCategory>Movie</eventCategory> <eventAction>playTrailer</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1581,7 +1557,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>38</pageId> + <pageId>37</pageId> <eventCategory>Movie</eventCategory> <eventAction>clickBuyNow</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1595,7 +1571,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>39</pageId> + <pageId>38</pageId> <eventCategory>Movie</eventCategory> <eventAction>playStart</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1609,7 +1585,7 @@ <url>http://example.org/movies</url> <pageIdAction>16</pageIdAction> - <pageId>40</pageId> + <pageId>39</pageId> <eventCategory>Movie</eventCategory> <eventAction>play25%</eventAction> <eventName>Spirited Away (千と千尋の神隠し)</eventName> @@ -1617,7 +1593,7 @@ </row> </actionDetails> - <goalConversions>1</goalConversions> + <goalConversions>0</goalConversions> <siteCurrency>USD</siteCurrency> <siteCurrencySymbol>$</siteCurrencySymbol> @@ -1627,18 +1603,18 @@ <userId /> <visitorType>new</visitorType> <visitorTypeIcon /> - <visitConverted>1</visitConverted> - <visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon> + <visitConverted>0</visitConverted> + <visitConvertedIcon /> <visitCount>1</visitCount> <visitEcommerceStatus>none</visitEcommerceStatus> <visitEcommerceStatusIcon /> <daysSinceFirstVisit>0</daysSinceFirstVisit> <daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder> - <visitDuration>3601</visitDuration> - <visitDurationPretty>1 hours 0 min</visitDurationPretty> + <visitDuration>3541</visitDuration> + <visitDurationPretty>59 min 1s</visitDurationPretty> <searches>0</searches> - <actions>15</actions> + <actions>14</actions> <referrerType>direct</referrerType> <referrerTypeName>Direct Entry</referrerTypeName> <referrerName /> diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv index ad3603d5f9..c228c82177 100644 --- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv +++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv @@ -235,7 +235,7 @@ label,nb_visits,nb_hits,bounce_rate,avg_time_on_page,exit_rate Entry pages label,entry_nb_visits,entry_bounce_count,bounce_rate -/index.htm,3,0,0% +/index.htm,4,0,0% Entry page titles label,entry_nb_visits,entry_bounce_count,bounce_rate diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_row_evolution_graph__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_row_evolution_graph__ScheduledReports.generateReport_week.original.html index e7bfae0990..9fb22e1d37 100644 --- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_row_evolution_graph__ScheduledReports.generateReport_week.original.html +++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_row_evolution_graph__ScheduledReports.generateReport_week.original.html @@ -1,17 +1,18 @@ <html> <head> <meta charset="utf-8"> + <meta name="robots" content="noindex,nofollow"> </head> <body style="font-family: dejavusans; color: rgb(13,13,13);line-height: 1.33;"> -<a id="reportTop" rel="noreferrer" target="_blank" href=""><img title="Go to Piwik" border="0" alt="Piwik" src='plugins/Morpheus/images/logo-header.png'/></a> +<a id="reportTop" rel="noreferrer" target="_blank" href="http://example.com/piwik/tests/PHPUnit/proxy/"><img title="Go to Piwik" border="0" alt="Piwik" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/images/logo-header.png'/></a> <h1 style="font-weight:normal; color: rgb(13,13,13); font-size: 24pt;"> Piwik test </h1> <p> - Mail Test report - Date range: Week 4 April - 10 April 2011 + Mail Test report - Date range: week April 4 – 10, 2011 </p> @@ -20,7 +21,7 @@ </h2> <img alt="" - src="data:image/png;base64,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" + src="data:image/png;base64,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" height="200" width="700"/> diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html index f20b1a9b27..d53b33b873 100644 --- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html +++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html @@ -1,17 +1,18 @@ <html> <head> <meta charset="utf-8"> + <meta name="robots" content="noindex,nofollow"> </head> <body style="font-family: dejavusans; color: rgb(13,13,13);line-height: 1.33;"> -<a id="reportTop" rel="noreferrer" target="_blank" href=""><img title="Go to Piwik" border="0" alt="Piwik" src='plugins/Morpheus/images/logo-header.png'/></a> +<a id="reportTop" rel="noreferrer" target="_blank" href="http://example.com/piwik/tests/PHPUnit/proxy/"><img title="Go to Piwik" border="0" alt="Piwik" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/images/logo-header.png'/></a> <h1 style="font-weight:normal; color: rgb(13,13,13); font-size: 24pt;"> Piwik test </h1> <p> - Mail Test report - Date range: Week 4 April - 10 April 2011 + Mail Test report - Date range: week April 4 – 10, 2011 </p> @@ -295,6 +296,11 @@ </a> </li> <li> + <a href="#UserId_getUsers" style="text-decoration:none; color: rgb(13,13,13);"> + Users + </a> + </li> + <li> <a href="#CustomVariables_getCustomVariables" style="text-decoration:none; color: rgb(13,13,13);"> Custom Variables </a> @@ -325,11 +331,6 @@ </a> </li> <li> - <a href="#Provider_getProvider" style="text-decoration:none; color: rgb(13,13,13);"> - Provider - </a> - </li> - <li> <a href="#DevicesDetection_getType" style="text-decoration:none; color: rgb(13,13,13);"> Device type </a> @@ -340,21 +341,11 @@ </a> </li> <li> - <a href="#DevicesDetection_getBrowsers" style="text-decoration:none; color: rgb(13,13,13);"> - Visitor Browser - </a> - </li> - <li> <a href="#DevicesDetection_getModel" style="text-decoration:none; color: rgb(13,13,13);"> Device model </a> </li> <li> - <a href="#DevicesDetection_getBrowserVersions" style="text-decoration:none; color: rgb(13,13,13);"> - Browser version - </a> - </li> - <li> <a href="#DevicesDetection_getOsFamilies" style="text-decoration:none; color: rgb(13,13,13);"> Operating System families </a> @@ -365,6 +356,16 @@ </a> </li> <li> + <a href="#DevicesDetection_getBrowsers" style="text-decoration:none; color: rgb(13,13,13);"> + Visitor Browser + </a> + </li> + <li> + <a href="#DevicesDetection_getBrowserVersions" style="text-decoration:none; color: rgb(13,13,13);"> + Browser version + </a> + </li> + <li> <a href="#DevicesDetection_getBrowserEngines" style="text-decoration:none; color: rgb(13,13,13);"> Browser engines </a> @@ -473,7 +474,7 @@ </h2> <img alt="" - src="data:image/png;base64,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" + src="data:image/png;base64,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" height="200" width="700"/> @@ -2040,7 +2041,7 @@ <tr style="background-color: rgb(242,242,242);line-height: 22px;"> <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - <img src='plugins/DevicePlugins/images/plugins/cookie.gif'> + <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicePlugins/images/plugins/cookie.gif'> 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,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" + src="data:image/png;base64,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" height="200" width="700"/> @@ -2500,7 +2501,7 @@ <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> Purchased Products </td> <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 12 + 35 </td> </tr> @@ -2802,7 +2803,7 @@ </h2> <img alt="" - src="data:image/png;base64,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" + src="data:image/png;base64,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" height="200" width="700"/> @@ -2840,7 +2841,7 @@ <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> Products left in cart </td> <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 12 + 78 </td> </tr> @@ -3142,7 +3143,7 @@ </h2> <img alt="" - src="data:image/png;base64,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" + src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKJklEQVR4nO3dP4wbWR0H8FmUIBFFShOaTXHFiAbo9ijvCugokFLQ0FKCqKCB8hTaSPSIJqJCka6hQaKgxg0gUO40QhxaFxCkCE4RIkpMYTFM5s/zz97xPI/n86nsmfGbn9eW39fvvfFebDabAgBgl8/kLgAAmAehAQAIERoAgBChAQAIERoAgBChAQAIERoAgBChgSmUZdm7sXd7+lEA5CI0kFNVVfG9MgRAXrdyF8A5+PFPf9va8sNvv9u8W1VVWZbNENC6C8DpExoYwcd//eerV6/qu7dv376+vn7w4MHOB3aTRH27lTO2u+oDtnubB9/sGQCwm9DAOF6+fFnfvnfv3nq9joSGpkSAKPoyhHELgIlZ08BEmmMDkT5+rxAgMQBMQGjgVGxTRXC1414HAzAK0xOM486dOzdvZDtgsI0CwaGI4MEA3JzQwAgefrVcX1/vPKyeoYhcaRkfciisaQCYhNDACL7x/jtF8c4NG9mr45cSAKYnNHAquldR9l5AMXTwNEUCLNnFZrPJXQMAMAOungAAQoQGACBEaAAAQoQGACBEaAAAQoQGACBEaAAAQvy4Ezv4DSUWyNueJUv85K7QQErrrePHm1kCb3uWLP1/f0xPALxFRGCxdkZkoQEACA2qCQ0Ag8xNsBDBt7o1DQA9tjO7EgPL0VzNMJQhhAaANgMMLE1w8a/pCYC3SAwwxEgDKVVVuWCdBWpddeadD1sXm80mdw0AwAyYngAAQoQGACBEaAAAQoQGACBEaAAAQoQGACBEaCBktVrlLgEmtV6v1+t17ipgUjs/6oUGACBEaAAAQoQGACDE/54g6kc/+U3uEhbq0ffez10CQFEIDcT96c//yF3CQv3h479/+Qufz10FgOkJACBGaAAAQoQGACBEaAAAQoQGACBEaAAAQoQGACBEaAAAQoSG2Ssbtndbe7sbm1taD+fEeaWAjPwi5LyVZVlVVfNuYm/k4enjyWv7AgkNQC5GGs7KvglARJgXrxeQl9BwnowZADA60xPz1hqs3gaFwxKDnAFAmtAwe901DdskEU8A9aOOUR4AZ8P0xHmKL5fbxguJAYCdhIZ5SySDZm5oZYh6HMKUBABxpifmrbumoXt3GwtaGaI+phU7ZIhT1vx1jcKLBUxOaJi9Vs+RuNvtY/Q68+L1AvIyPQEAhAgNAECI0AAAhAgNAECI0AAAhAgNAECI0AAAhAgNAECI0AAAhPhFSKKePn6YuwQAcjLSAACECA0AQIjQAACECA0AQIjQAACECA0AQIhLLol6/fpN7hJgOq/fbApvexbmzZtN+gChgahvfv/D3CUAcFxPv/JuYq/pCQAgRGgAAEKEBgAgRGgAAEKEBgAgRGgAAEKEBgAgRGgAAEKEhnNTlmWWxwJw9uYaGsqGotPb9W6Mb+nqnjHe4L4HjPgoALi5ug+a5c9Il2VZVVXzbmLvYXpbqDfWp6iqqnm6yKkPq+3mzwgADtDsZGcZGlq2Pff29r6JobfXH+trfau17Vnq0zXPMrSl1VSizd6zR9o3hgHAkFancw6hoTbKGMO+6tjRe/ahcYjuwd3hk6Hn0mqneDth1JMp3Y3d9tNjNgAsWbcnmmVoaA0GtL7Bj6LVfba+qbdONJQYukeOwlQFAMfW26/NMjQUfd+tEz33zqa6X7sTCeB4X8fHbfmARZoAUGst/K+qaq6hodfBueFEzjJum+npDwBI6J0xn+Ull4lvzK1Fgt2UdPTiRjLulZmHXX0KAE2zHGnormno3m1eEllvTzeYWBIYX8Rw8FPoXaixb1P17aFlH60tiYwFAC0Xm80mdw3MwGq1evTkk9xVAHBcTx8/TOyd5fQEADA9oQEACBEaAIAQoQEACBEaAIAQoQEACBEaAIAQoQEACBEaAICQWf6MNFl88N33cpcA03n+/HlRFPfv389dCEzn2bNn6QOEBqK+VPr0ZEHWn/tPURSXl972LMi/X/wlfYDpCQAgRGgAAEKEBgAgRGgAAEKEBgAgRGgg6ncf/S13CQDkJDQQ9bMPf5+7BAByEhoAgBChAQAIERoAgBChAQAIERoAgBChAQAIERoAgBChAQAIERoAgJBbuQsYWVmWVVXVt4uiqO/27t3abmxuae5qPqrZTu/xrTZ7K+yet1vk0EkjW+KFdY8cKjv9FABYgrMKDUPd7dCRrbvNPBHsCxO9eG8jvedNHHCweGH7nm7nUwDgXJ359ETv1+5uP7fz2/mRHCkxAMAxnHlomBGJAYATdz7TE3Wn25qhCE5Y7Gw8uL3e0nvG1pDGARMioxfWOlJwAWDI+YSGhJvnhqGOdmh+ITHZ0bsg4OAKb16YlABA0FlNT5T/k7uQQxZJTLOuItfqDQDOwJmEhvryh1p31L35Lby1d7L1BDsvhhwq0ooHALJbxPRE19Dagn2lpyF2XqbRPW/zUa0McaTC9l3TMNafDoDZudhsNrlrYAZWq9WTX794/IOv5S4EJrJer4uiuLy8zF0ITGe1Wl1dXSUOOJPpCQDg2IQGACBEaAAAQoQGACBEaAAAQoQGACBEaAAAQoQGACBEaCDq7p3P5i4BgJyEBqI++M57uUsAICehAQAIERoAgBChAQAIERoAgBChAQAIERoAgJBbuQtgNn7+yz/mLgGm8+mn/yqK4u7dF7kLWaJvff2LuUugn9BA1C9+9Sx3CcAiCA0ny/QEABAiNAAAIUIDABAiNAAAIUIDABAiNAAAIUIDABAiNAAAIUIDABDy1i9ClmVZ366qqizLqqqae7sb6+297Wy3b+92m+pW0z1jc2/ivEOn2NlCd1ewqa7eZ5Q4Ue9T6D0mfa6hwhJ/8Pru0EkBToHPqFPz/9CQ7rCHuvlevdlip95Qkuhig2dJt9C7K9JUvIX09ube3tqGCu5WNRRBhhzwFwCYjM+oEzQ4PTHuSxX5pn5DwcGA7THdZ9R8+GHV9j4q17u8WUxrpGQob03wGgHEiQgnaPeaBuEOACia0xOtL5r1nPdYiSE9m1Dvah02tOyg9+DDpkXi1Y74Rbz3KbTWggDgg/GkvLUQsrumYcRu+LDWDlh2cLzccLwM0Wx/3GaHAhbALOxc18WUbu08YrLOZq/O8gxm3xNXPYzyBz+pNRYAnIHBqyeamt1Yd/pg35GDSE8Wmchobtl5itZjux1z7xn3WhuYaGHnszteBmqNlLQWe1qZDJwsH0onKLWmYehnG1p9T7fRoSsUDnDzi3SHWuhdwxFvKl7eASeaZnTngMIAJuMz6gRdbDab3DUwA6vV6tGTT3JXASzC08cPc5ewUKvV6urqKnGAn5EGAEKEBgAgRGgAAEKEBgAgRGgAAEKEBgAgRGgAAEKEBgAgZPf/noAtP7fCoqzX66IoLi8vcxcCJ8RIAwAQIjQAACFCAwAQIjQAACH+yyUAEGKkAQAIERoAgBChAQAIERoAgBChAQAIERoAgBChAQAIERoAgJD/Aou4z8wLfHYqAAAAAElFTkSuQmCC" height="200" width="700"/> @@ -3258,32 +3259,6 @@ <tr style=";line-height: 22px;"> <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - TRIPOD SKU </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - $ 200 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 2 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 1 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 0 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - $ 100 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 2 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 0% - </td> - </tr> - - <tr style="background-color: rgb(242,242,242);line-height: 22px;"> - <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> SKU IN ABANDONED CART TWO </td> <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> $ 0 @@ -3318,7 +3293,7 @@ </h2> <img alt="" - src="data:image/png;base64,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" + src="data:image/png;base64,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" height="200" width="700"/> @@ -3434,32 +3409,6 @@ <tr style=";line-height: 22px;"> <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - TRIPOD - bought day after </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - $ 200 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 2 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 1 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 0 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - $ 100 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 2 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 0% - </td> - </tr> - - <tr style="background-color: rgb(242,242,242);line-height: 22px;"> - <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> PRODUCT THREE LEFT in cart </td> <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> $ 0 @@ -3484,7 +3433,7 @@ </td> </tr> - <tr style=";line-height: 22px;"> + <tr style="background-color: rgb(242,242,242);line-height: 22px;"> <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> PRODUCT TWO LEFT in cart </td> <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> @@ -3520,7 +3469,7 @@ </h2> <img alt="" - src="data:image/png;base64,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" + src="data:image/png;base64,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" height="200" width="700"/> @@ -3714,32 +3663,6 @@ <tr style="background-color: rgb(242,242,242);line-height: 22px;"> <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - Tools </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - $ 200 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 2 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 1 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 0 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - $ 100 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 2 - </td> - <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 0% - </td> - </tr> - - <tr style=";line-height: 22px;"> - <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> Category TWO LEFT in cart </td> <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> $ 0 @@ -3774,7 +3697,7 @@ </h2> <img alt="" - src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAQ0klEQVR4nO3d728cd14H8G9cx06cOP65tmM7bRNfkyblKCTXHicVTojCI55cxemQQOJviOAQPEH5D45/hAu9QwhEBYdUCqikvfbEtb3GSXNpmyZVyrVx/GvXNg+22mz3x+zszKx3PfN6Pdpdz3znM7M/5u3vzHfm0N7eXgAA6GSo3wUAAAfDcP2TlZWV2uPV1dWWrwAAxfQoNKysrNTHgmpcaHhFbgCAwnp0eEIgAAAiDHeepJWPPvqo/undu3cXFhYipl9fXx8ZGRkeTrg4mq2trY2NjQ0NOSslG3t7e2tra+Pj4/0uJD92dna2trbGxsb6XUh+lMvlnZ2dI0eO9LuQ/Nja2jp06NDIyEi/CzkwWu9yMj8Ssb29vbOzk2GDbG9v7+7u9ruK/Njb29ve3u53Fbmys7Njk2arUqnYpNkql8vlcrnfVRwkjf/6N5/K0NLS0lLE02blcnlycnJiYqL7CmltfX19fn5+dHS034XkRKVSWV9fX1xc7Hch+fHw4cN79+7ZpBm6f//+xsaGTZqhO3fuDA8Pl0qlfhdyYDSOnnBmAwDQ0qPDExIDABCh7XUaQgirq6uu0wAAVD0KDS0zgaAAAFQN3BjI5t6OfViibAQAHQ1caAj7fhlKiQEA4hj0SwM1nFcBAPTLIPY0RGh5Yma7Ixq11+tfaehXaHldioYZ6+eKeNxcAADkyUEKDc231Kr2QzTfZyu037t3tZSYM7YsLObiAOCgGPTDE/U74OY9cbvdc8PrtWMcDQc7WnY8tJyx/q8dD5dIDADkUq96Gl66fDX+xD/8wXfqn0Z09cc/vyHxmRDNMzb3Z4SmNBPz8tsAcHANxOGJK1euXLlypfa03a633ZGIlto1UksA7Xopku34a2c/JG4BAAZcr0LDD3/wnStXrpw+fbr69P79+2NjY0ePHm058c2bnRvs+4kCtQIijlA0nzgJALnRw56G+s6DW7duZXuXy/pzFFoOl4g4OTG6m6HljM1BwZmPABTNQByeiKP5RhjN5za2exy6OWSQYEY36QCgCAYuNETscRv+FDGqoqummifreK5DzFkAIE8GfchlR9FDKAGArAxcT0O3Gg5J9LcYAMixAx8agqwAAPviwB+eAAD2h9AAAMQiNAAAsQgNAEAsQgMAEIvQAADEIjQAALEIDQBALEIDABCL0AAAxCI0AACxCA0AQCxCAwAQXrp89aXLV3/1YDNiGqEBAPjS9V/+X8RfhQYAKLr1zXL1wcXzCxGTCQ0AUHR/+tf/EEJ46vGpoaFDEZMJDQBACCEszR2PnkBoAABCCOFkSWgAAGJYmhuPnkBoAABCcHgCAIhWGzqxqKcBAIhQHTpx4czM4eEOqUBoAADC/OyxjtMIDQBAWJgRGgCAGDqOtwxCAwAQQljuNHQiCA0AUGQbW5XqAz0NAECUP/mrH4cQnj07Nzoy3HFioQEAiq40PRZnMqEBAIpufkZoAABimJ/uPN4yCA0AwNJ857Mgg9AAAIW1Xd6pPliYFRoAgPb++C9/FEK4eH7+6GjnoRNBaACAgpudPBpzSqEBAAot5njLIDQAQMHFuVVVldAAAIV2siQ0AADtlSu71Qcxh04EoQEAiul73385hPCNZxbGjhyOOYvQAADFNTNxJP7EQgMAFNfsZNyhE0FoAIAim4s93jIIDQBQZItzcc+CDEIDABRZ/Is0BKEBAAropctXQwjPPTN/bGwk/lxCAwAU1PREFyc0BKEBAAor/q2qqoQGACio+Rk9DQBADPEvIF0lNABAsezu7lUfnJztYuhEEBoAoGj+6M//PoTwjQvdDZ0IQgMAFNP0RHdnQQahAQCKaWZKaAAAYpib6m7oRBAaAKCYFkvdDZ0IQgMAFMrOzm71wdL8eLfzCg0AUCDf/YuXQwgXz8+PHTnc7bxCAwAUzvSJIwnmEhoAoHBmux86EUIYbni+srISQlhdXa1/WlV7EQA40Oamu7sWZNVXQsPKysrq6motKFSfNvw1TYkAwCBYLCUJDV85PCETAECOlSu1oRMnEszeeHgips8//7z+6dra2okTUYsvl8sbGxtDQ06hyEylUllbW9ve3u53ITlRqVQqlcqDBw/6XUh+bGxslMtlmzRDm5ub29vbNmmGtra2ivbF/7O/eSWEcOHMVGV740Fls9vZE4aGjz/+uP7pzZs3689+aLa5ubm1tdUQNUhjc3Pz3r17clhWdnd3t7e3Gz7YpFHNYTZphsrl8u7ubrlc7nch+bG1tXXo0KH19fV+F7LfRod3PvnkToIZE4aG8+fPRzxtduvWrcnJyYmJiWSLo9n169dPnTo1Ojra70JyolKp3Lhx4+zZs/0uJD8ePnx4796906dP97uQ/Lh///7Gxsby8nK/C8mPO3fuDA8Pl0qlfheyn34eQvjakyfPnTuXYGb/pwJAsSzMdH0B6SqhAQCK5WSioROhechl/YP64ZfB2AoAOMhqQyeWu7/rRNVXQkNzLBAUACAfvvf9l0MIZ5+YTnDXiSqHJwCgQGanjg4NHUo2r9AAAAWyMJPwhIYgNABAoSzMCg0AQAxLpYTjLYPQAABFUBs6sZh06EQQGgCgCKpDJ5YXxsfHRhI3IjQAQFEszIwlHjoRhAYAKI6Ts8lPaAhCAwAUx2Ip+QkNQWgAgOJYmtfTAAC0Vxs6cWr+RJp2hAYAyLnq0ImJ4yPjx5IPnQhCAwAUxPL8eJqhE0FoAICCOLWQ6thEEBoAoCCWU1wLskpoAIBCeFxPAwAQ4aXLV6sPlhf0NAAAnZSmxibHj6RsRGgAgPxbmkt1WacqoQEA8m9RaAAA4tDTAADEsjyX9izIIDQAQI7Vhk4spb5IQxAaACD3luePT08cTd+O0AAAOXdyNoMTGoLQAAC5Nz9zLJN2hAYAyLnFkp4GACCGTC7SEIQGAMirR3edyGLoRBAaACDfTi9NZDJ0IggNAJBv8zNjWTUlNABAnpWmshk6EYQGAMi3hVmhAQCIIavxlkFoAIBcyvauE1VCAwDk1tknpmYnsxk6EYQGAMix0lRmQyeC0AAAOTY7lVk3QxAaACDH5qczGzoRhAYAyLGFjG6KXSU0AEDePBo6kdGtqqqEBgDIp2dWZmayGzoRhAYAyKvpiaNDQ4cybFBoAIB8msno5pY1QgMA5FNpWmgAAGI4menQiSA0AEDO1IZOZHirqiqhAQBy6NlzpWyHTgShAQBy6cSx0ccey3gvLzQAQA5lPnQiCA0AkEulTG9VVSU0AEAOLWR9FmQQGgAgT2pDJzIfbxmEBgDIn2fPZj90IggNAJA/J46PHh7OfhcvNABA3kxPHOlFs0IDAOTN3PSxXjQrNABA3sxNj/WiWaEBAHLi0V0n5rIfOhGEBgDImV8/W+rF5SCD0AAAOXN8bGTk8GO9aFloAIBcme3BFRqqhAYAyJXSVE/OggxCAwDkzPxsT8ZbBqEBAPLh0dCJHtx1okpoAID8OHd6erYHN8WuEhoAID8mjo32aOhEEBoAIE96dxZkEBoAIE96dAHpKqEBAPJjoWdDJ4LQAAA58GjoRKlXQyeC0AAAufH4yfG5GT0NAEAnMxNHDw/3cM8uNABATvR06EQQGgAgN3p6FmQIYbjjFCsrK7XHq6urvSwGAEiuz6FhZWWlPig0PAUA+q42dGJpfrynC3J4AgDyYGZidGGmh+MtQ5zDE5m4/Ldv7M+CCuZn/S4gf/633wXkz0/7XUD+vN7vAhhQE+O9HToREoeG11//yqf23XffvXDhQhb1AABJHNrZuHbtWk8XkTA0PPfccxFPmz3/xhczk+NzMxPJFhdCuHf/4Zu/uPfiN59I3EII4bWffrRQOnb28enELWxv7/zjf6z+/rdOpynj7V/cO3Zk5NlzpTSN/N0r77xw8dTE8eT3P33vg88ePNz61rNLacp45b8++PpTpfkU1xL5+NMH79z47HeffzxNGa++8eHywomV5cnELaytbfzTazf/8Ntn05Tx5jt3Txwf+bWnUr2zP/7J9RcuLh8dPZy4hXdu3N/crnzz64tpyviX/7z5G0/PzaYYvnXj9v3rH3z2By88laaMf792+8nFidNLyX86Pl/bevWN2y/+1pNpyrj280+mJo5eODObppEf/eT9b186leb2g2++c6dSqfz2pVS/P//82o1LzyxMnUj+0/HBR7/68O4Xv3Mx1Xf23/7nl187NXlq4UTiFj77fOO/f3Yn5Tv76rVbM1NHfvPpVF+Wq//6/u89//hjjyX/F//t9z89PDx08fxCmjJu3/3iuy+em5/t7eGJQ3t7exF/zupEyPfee29ubm5qairBvLT01ltvPf3006Ojo/0uJCfK5fLbb7996dKlfheSHw8ePPjwww/Pnz/f70Ly49NPP11bWzt9OlVooN7t27eHh4dPnjzZ70IODCdCAgCxdDg8sbq66joNAECIc06DoAAAhI7nNAAAVDmnAQCIRWgAKJD609SgW1+e07APZztWF1FrPHqJWdXTsNCULXe1CvGX1e1A1o6brkfFdLv6EYtomDGiqZbvYOYf0f6WlNWGbWiw1kLzTqLdNyLxEruqp+UEKZfb/Ka0ezFN+1UN71TE96Wnv6XNi872rWz345lJs/WiF5Hhm9iuzTg7o6xK2p8V7K29vb0zZ87s1Wl4molqm7WWo5eYVT0NC03Zcler0NWyEpQR8bRla+mL6Xb1Y7bfXHC3E6TX35Ky2rDtZun2k7kPm7fjNMkW0XJBmaxORMtZfa8TF5NgiXEma/fj2ZdvX7YLTfBLnlVJ+7ZVe6rF6Il2+asanNuF3GhpYlTierLNbt3+M90wfXPBoe6/wPhhs2MnQXOQz6SYrDZmgrepVm3D6y27B+o/LTFrTrBqGZaU+X8Y0Q123Cz1qxbx73WcZcWfprnI+nmTfdMz3LDp228uPtnPabLei+j3Meba9agLquWC6j+B9Vup3Qcjzc4o5mc4k5L2Z6v2Wtshl83XggxJf5QzMWj1JBOx/8685T4Wsw8G8KbtA1hSGi1XZ39WqvlLfeC+6Q1aFp9spboNbfn45ayK/mAoaX8Mh26u4LQ/22LQ6mm36PTHnlM66B/T5rIjEnqcdazvQUm2QaL/ye5LSWkMWo5JXMAgfLyTdbJGSL8pWn6D4rQ/INszfRlZrUiGb+4gbNue+rKnoeUHsbmjO0JXG321VS96wwQp6+m1Xv8cR2/PdmfT9KiYzCU4Gyjlfrfj57O+gJhv7iB3zMQ/4NWxkW4njvmJzWq5+ybNv+bdrlHifVjExj9AajuIiEgUrdsN2PHNTV9SbkRdEbKrrZPmwx1zuxfq3YrYni0PK0T8ddDE72DIUHT7g7/RutJydRKsY1fTd/WJjdDQcx6/gIGVYI2y/TQO4C9nysOpHVdhf77O+fusxjEU4q1t77ZIdA/b/teTieaulKx2S8l++ntUTAJpEkPHDqqQ6L//NFujRyWlkXJZ7WZP/I3LQSAb8F+brhyUdVldXd23HX/MKfetpAHX9pyG5hdXVlYSH8WvzVjr4YnoPsqqnuaFtmw5/SqkWYv6F5N13iY4HpSgmG5XP379za8kXqPEmgtI0HiyuTLcsM1t1hcW3RPQvMT4n5kE9URMHCeHtWu/4RhT84vJtFzr+O0nWKOuKul2lji/5BEfy/TbM1mOzGozZviN67aknm7VfdPFvScG7T+GQasHSCaX3+VcrhS4jDQAEIu7XAJ9c4B6ZePL5UpBldAAAMTi8AQAEIvQAADE8v+BzwL3FMcfuAAAAABJRU5ErkJggg==" + 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,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAOk0lEQVR4nO3dz48c2UEH8Gd77PHaHs9Mzy8HE5P1RFFYiKJd4Q1sdpVsEmUlAkHJBaEckAgXIBwiBIEDZDiQHIiyF4Q48DckB0BBCoJFIRLJKle0l4mFgrXx7saOs+uf65nhUOPedv+oflX13ky76vM5ldtVr1696e769qt69Y7s7e0FAIBpjh52BQCAR8NwaNjc3Nzc3DyUqgAAs+yh0LC5ubm9vX1YVQEAZtlDoUFiAAAmmZu6xpUrVwb/efXq1XPnzpWsf+fOnaNHj544caJp1RigVXPQqjlo1Ry0ag5adcgX/vZ7IYSv/uGTC6cntkn6GyHv3bt3//795MV2nFbNQavmoFVz0Ko5aNVB93d2HyyUjamc3tNw/vz5kn+O2tvbm5+fX11dnVoy8bRqDlo1B62ag1bNQasOeuP6rWLhl97/eMlqhlwCQNddvXYrZjWhAQC67i//7jshhN/8yJRnLjx0eaL/hIZiwWAKAOiO5bMny1d4KDRICQDQWStLj5Wv4PIEABBCCL3FKj0Nh2jw2dUz0uHh+ZgAdMpG70z5CjMRGoZOzzNytp6FOgBAbjdv3SsWFhfmy9c8/MsToxHB2RoADszrP71dLByfm5IKDrmnobxToX/Nor9Osf7otYzRcgZfKS+nX0J5mfGVGVo/iEEAzLD+k52mmonLE2MNnfXHLo/+s145U8usuuFsXnABgFFf+cf/DiH89gvvn7pmgtDw2S9+M37lb7z4mZjVhs6yxQ/64pWxZ9/BFcLkk/fUcvqrNanM1AIBYNb0FqeMtwwH39OwtbW1tbV1kHscvEwwydCliuaSFwgAWU19slNIEhq+8eJntra2Hn98f4qL69evz83NLSwsjF358uXmOxyv3wEw2jEQuXlI+ijM5AUCQD4bvYPqaRjsPLhy5Ur8vGGj5/jDNem2ytkpEAAS2nkwKfbK8qmpKx/+kMuhAQhh3KiEyJPu2G6G0cJHNyy/hFGjMjHXRADg0F27cadYOHXy+NSVZ2L0xNiBi4MvNvmZXjIqMn6dqpWJ2SkAHLrXosdbhhCO7O3tpd19pcsTRNKqOWjVHLRqDlo1B61aKIZA/tbz7/3dT39g6sqHf3kCADhcywvTh04EoQEAmDopdkFoAICuW1kWGgCACOsR4y2D0AAAndWfFHvh9JRJsQtCAwB0VH+85dRJsQtCAwB01J987T8qrS80AECnxUyKXRAaAKDTYua3LAgNANBpkeMtg9AAAB23FvdkpyA0AEA37e7uTz61sXI6chOhAQC66PUH4y3nT8ROeS00AEAXvXatwqTYBaEBALroy3//XyGET3/0vfGbCA0A0F3x4y2D0AAAXbYaPd4yCA0A0GVrS1HzWxaEBgDorvgnOwWhAQA6qD8p9tKZqEmxC0IDAHTOj39ys1g4dqxCEhAaAKBz/vTrL4UQPv6hC5W2EhoAoKN6ixVuaAhCAwB01orQAADEWKsydCIIDQDQWau92PktC0IDAHTURq/Ck52C0AAAXfPag/GWJ44fq7Sh0AAA3fLqGzfrbSg0AEC3/PU/fDeE8OvPXqy6odAAAF20ulRt6EQQGgCgmypNil0QGgCgi9YqDp0IQgMAdMru7l6xsL4sNAAAk928vT8p9tkqk2IXhAYA6JCr124VC5UmxS4IDQDQIX/29ZdCCM899fM1thUaAKBzagydCEIDAHTQ2lLluyCD0AAAHVRjvGUQGgCggzZWqk2KXRAaAKArdnZ2i4VzQgMAUOKN6/vjLY8ePVJjc6EBALriD/7m28WC0AAATPexpy/U21BoAIBuWe/VuaEhCA0A0DUbK3XGWwahAQC6Zl1oAABK9CfFftfqmXolCA0A0Alv3bpbLCwtnKxXgtAAAJ3QnxS7NqEBADrhSy/+ZwjhmQ+er12C0AAAHbLWqzMpdkFoAIAOqTdVVUFoAIAO2ag1KXZBaACADlnX0wAAlLj39k6xUPsZ0kFoAIAu+MlPbxcLx+fqn/qFBgBovz/6yrebFyI0AEBXvPDM4002FxoAoCtqT1VVEBoAoCvWl4UGACDCeoOHNAShAQBab2dnt1ho8jjIIDQAQOu9dfvtYuHsmfkm5QgNANByr127maQcoQEAWq6YFPv5py80LEdoAIBOWFmsPyl2QWgAgE5YWxIaAIAIa83GWwahAQA6osmk2AWhAQDa7O69+8XCqssTAECJ/qTYJ44fa1iU0AAAbfaFr/5bCOHDT55vXpTQAADt1zvb9NpEEBoAoAtWl042L0RoAID2W1lqOt4yCA0A0AXrK0IDADDZ7u5esbC+LDQAAJP97ObdYqHhpNgFoQEAWuv3/upbCUsTGgCg5V74tfckKUdoAICW6zV+gHRBaACAlhMaAIAoa4tCAwAQIclDGoLQAABtdfvu/qTYPT0NAECJ6zeSTYpdEBoAoJ2KSbE/9vSFVAUKDQDQZospngVZEBoAoM1WEo23DEIDALTbyuLJVEUJDQDQZqsp5rcsCA0A0ELvTIrdO52qTKEBAFroxpv7k2IvnD6RqkyhAQBa6PNbKSfFLggNANBan3ruYsLShAYAaK2lhWRDJ4LQAAAt1lsSGgCACKtLycZbBqEBAFpsLd1DGoLQAADtMzAptssTAMBkn/vzfyoWUk2KXRAaAKCdPvGrv5C2QKEBANppOel4yyA0AEBbLS3Mpy1QaACAdlpZeixtgUIDALRTwkmxC0IDALTTRk9oAAAmu/6zO8XC6VPJJsUuCA0A0Cqf/3L6SbELQgMAtNBvfGQzeZlCAwC0UO9s4oc0BKEBAFppKfWTnYLQAACttLac+CENQWgAgFZaSz3eMggNANAm/UmxXZ4AAMpkmhS7IDQAQNsknxS7IDQAQNvkuDYRhAYAaJ+VRaEBAIiQ48lOQWgAgPZZ653OUazQAABtk+MhDUFoAIDWuHbjdrHw2PxcjvKFBgBoid/f+tcQwrNPnj969EiO8oUGAGiVxTNZ7oIMQgMAtMzy4nymkoUGAGiV1cX081sWhAYAaJXV5SxDJ4LQAAAts76spwEAmOzuvf1JsRfPCg0AwGS/86X9SbGPz+U6uQsNANAeH7307nyFCw0A0B69PPNbFoQGAGiPlcVcQyeC0AAAbbKWbehEEBoAoE1Wl4QGACDCxsrpfIULDQDwyPvsF79ZLMyfyDIpdkFoAICWuPTEuUyTYheEBgBoiV7OGxqC0AAArZH1IQ1BaACA1sg6dCIIDQDQGuu9jEMngtAAAI+63d29YmG9p6cBAJisPyl2bzFvaHhoNOfm5mZ/eXt7O+uOAYAkPvcX/1wsHDuWty/gndCwubk5GBSG/gkAzLJnPvhzuXfh8gQAtMFK5qETYejyRBJ//LXvJy8TACi3vpxxUuzC9NDw8ssvD/7zlVdeeeKJJ7LVBwCo48a1V3/wgxtZdzE9NFy6dKnkn6M+/sqd3b2jF86vNqnWv3/vfz/wvrWVZneB/st3tj/xofc0KeHV19/8v6tvPvvUu5sU8j8/fOPe2ztP/eK5JoW89P0fri499svve1eTQlK16vO/cqHJs81//PpbP3rtzee06gCtOkSrDtGqQ9rUqjs7O9/67uWGZ6s7d++v90598sMXj8/lvevgyN7e/uDOVDdCXr58+dSpUxsbG2kqSAhBq+ahVXPQqjlo1Ry0ag1uhAQAorxzeWJ7e9tzGgCASR66p0FQAAAmeeeeBgCAEu5pAACiCA0AnTB41xrUk/6JkOHBW7N/h0T5/ZWp7r4c2mnzkisdRfzuqo5lndp6mSpT9fDLjW5eUuDYP2XyG24Ot0ppm3dsIaNniEmfjiY7ja/P2BUa7nf07zLpxYa7KAz9vUo+O5nuD+tXZuwh9yVv1VRNGvOezLHf0TpUOj2lqtLBHGB2Fy9e3EuqKLBf7FD5lf5Ze6fNS650FJV2V6kmU5trbGnNK1P18MtNrXbVFZo73Cqlbd7IQjJ99GrXp/lORz/1k15suIuxhaf6jNeuTI09xqw26bs0x0HFfMrS7rfGF3uqKh1kw2Y1N/Y3VpGUJ6Xack1C06T0N7U+yZNa1c6AofVH6xwGfvzFp8upnQSjyT1JZdK2Z42/V7/OQ6+P7R4YfNtE1rzGASasUo4fFuVlTm2ZwaMr+W0ds6/4dUYrObhtvU997rdu1V2M1r/et2u93ovyP2Xk0eXrNRm7r8H34WBDTXp7NDk9Rb6Tk1TpwBo2t7kw7lmQoe53cRKzVp/aSs7fyUs+xMocmBmcvX0Gq9TQ2CM6mOMa/YA/ip/6IWPrX++4qua21nyRFsrfHqp0YCbe03AwRz768/dw61Oy9yRXnZtox/tytPIlwTzmSAf7Ueo1S/kv7EOpUkOzFmVqV2BG3uf1+lxLNG+NsZ+jmPJnp0mb1yTVsST8+85I82Y1N9hHHalSE2+P60IfWmGw5NGv71mQ+1u4vEkn3T6TqTKZ1LgJqOF5d+obdbACkX/iGe+eib/yNbWQqitHvnVT7fcgNflpXvWgap/AStr/0dI/ZZSkonJV23Dq37d5ldpkv6ehUls0eTdHtnLX/jYlTTr2skLJ/86m+A6GhMrLf1SaLt7YI6pxmJXWr/TWLTHUbR5fgVlW46DSvidn84u04dXVqUdxMJ/rVr5jY4x5TkO+4y/vUivZKlN9UhntTUl1Qqr3jZ+pMrU1SQxTe6pCrV//TdokU5Uaari7SZvX/vQd+rsuidn/8on3CB3L9vb2gZ34I9c8sCrNvomjJ2pfwu9v2O/PKeksGnuvwOiLU+szutOxJSc5iiYHMvhivT7bGpeEalSm6uFXPYrRV2ofV22jFahReL2tkjfvULGDdSvvCRjdafybp0Z9SlaOiWKTyh+6zDT6Ym1jDzx+FzUOqlJNqm4S88Ve8uZMdfGrRgmpWjLhR69qlXI37IEZP/fErP1KmLX6AM219XPd1uOC4DHSAEAks1wCB+3R6o+N19bjgj6hAQCI4vIEABBFaAAAovw/XXGC03wmlAsAAAAASUVORK5CYII=" + src="data:image/png;base64,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" height="200" width="700"/> @@ -5308,7 +5231,7 @@ <tr style="background-color: rgb(242,242,242);line-height: 22px;"> <td style="font-size: 13px; border-right: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - <img src='plugins/UserCountry/images/flags/pl.png'> + <img src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/pl.png'> 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,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" 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,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" + src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAF7UlEQVR4nO3dP24jVQDH8QmbNCuhKBVSAtpibkC2hYIDIOUAVPRItPQguj0BHfWegCPgE6BpgIwEEooEUigiMRQWZjJx4p8TO+M3/nwq/xk7b3c1O9+8N2MfdF1XAQCs8s7YAwAAyiAaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAi+xUNdV0vfXDp4w+/CgD2zX5Fw32apsmf1RAA7KfDsQewSd989+Pgka8+f92/2zRNXdf9CBjcBQDuM6lo+OmXP29ubhZ3j46OLi8vz87OVr7wbkksbg86Y/7UYoP5s/2Nn/YnAIDdNaloqKrq+vp6cfv4+Lht2yQa+h4IiGpZQ5i3AGBP7N05Df25geQYv1YEKAYAJmzvomGleVWEZzuutTEAFG1qyxMvX758+pvMJwzmKRBORYQbA0C5JhUNF5/U7eXlys0WKxTJlZb5lEPlnAYAJm1S0fDpx6+q6tUT32StA79KAGB/TCoaNuLuVZRLL6C4b+PnGSQAPL+DruvGHgMAUABXTwAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBApJhPhPTBi1AW+ywUp/95x0s3KCMaBl/x4BsfYMfZZ6E4yX5qeQLYPIkAZQnLvoyZBgBgq5IlRdEAbMvK9VFgdyRLiqIB2JbFfzrOaYBpcE4DABARDcDm9RdHgck46Lpu7DFEXPMNZbHPQlmSfbaYaAAAxmV5AgCIiAYAICIaAICIaAAAIqIBAIiIBgAgUlg0zGazsYcApNq2bdt27FEAqZUH2cKiAQAYi2gAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIHI49gLX9+ttfYw8BiPz+x99VVf3zwj7Ls3r/vXfHHsJklRcNX3z7w9hDAGB3vX1zMfYQJsvyBAAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQOQx0VDX9cbHAQDsuMPFrbqum6bpP3f3EQAowt3fbx3Rnu5w9SYAUCCVsHGrlyfmsVb/575n725T91S3o29w++EfAQDsgmimob9OMTje9x8fbNNPvJUpcN9bAcDj9A89DisbEZ0IufTvenBoX/nv0TTNYkZhcDt5OQDkmttMY2/EIy+5NBkAAPvmkdGg2gBg3/wfDYMOWDmX8IhumL9ksR5hugKALfGb7TbcOhGy3wHJ4fyBA/8gKcQBAM/JYWgbDrquG3sMa5jNZl9///PYowBgd719czH2EEo1m83Oz88f2MB3TwAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQORx7AGv78rPXYw8BiFxdXVVVdXJyMvZAgM0oLxo++vCDsYcARNr2RVVVp6enYw8E2AzLEwBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABEDrquG3sMAEABzDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQORf+Zdxfjze1KoAAAAASUVORK5CYII=" height="200" width="700"/> @@ -6535,7 +6395,7 @@ <table style="border-collapse:collapse; margin-left: 5px;"> <thead style="background-color: rgb(255,255,255); color: rgb(13,13,13); font-size: 11pt; text-transform: uppercase; line-height:2.5em;"> <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> - 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,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" height="200" width="700"/> @@ -6603,7 +6461,7 @@ <table style="border-collapse:collapse; margin-left: 5px;"> <thead style="background-color: rgb(255,255,255); color: rgb(13,13,13); font-size: 11pt; text-transform: uppercase; line-height:2.5em;"> <th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;"> - 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 173df28cda..880a4be3a1 100644 --- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html +++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html @@ -4034,7 +4034,7 @@ /index.htm </a> </td> <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> - 3 + 4 </td> <td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;"> 0 diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml index 457accfc9a..2da80f0930 100644 --- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Actions.getPageUrls_range.xml @@ -5,16 +5,16 @@ <nb_visits>2</nb_visits> <nb_hits>2</nb_hits> <sum_time_spent>360</sum_time_spent> - <entry_nb_visits>1</entry_nb_visits> - <entry_nb_actions>3</entry_nb_actions> - <entry_sum_visit_length>364</entry_sum_visit_length> - <entry_bounce_count>0</entry_bounce_count> + <entry_nb_visits>2</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>725</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> <exit_nb_visits>1</exit_nb_visits> <sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors> - <sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors> + <sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors> <sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors> <avg_time_on_page>180</avg_time_on_page> - <bounce_rate>0%</bounce_rate> + <bounce_rate>50%</bounce_rate> <exit_rate>50%</exit_rate> <url>http://example.org/homepage</url> <segment>pageUrl==http%3A%2F%2Fexample.org%2Fhomepage</segment> diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml index 457accfc9a..2da80f0930 100644 --- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Actions.getPageUrls_range.xml @@ -5,16 +5,16 @@ <nb_visits>2</nb_visits> <nb_hits>2</nb_hits> <sum_time_spent>360</sum_time_spent> - <entry_nb_visits>1</entry_nb_visits> - <entry_nb_actions>3</entry_nb_actions> - <entry_sum_visit_length>364</entry_sum_visit_length> - <entry_bounce_count>0</entry_bounce_count> + <entry_nb_visits>2</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>725</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> <exit_nb_visits>1</exit_nb_visits> <sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors> - <sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors> + <sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors> <sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors> <avg_time_on_page>180</avg_time_on_page> - <bounce_rate>0%</bounce_rate> + <bounce_rate>50%</bounce_rate> <exit_rate>50%</exit_rate> <url>http://example.org/homepage</url> <segment>pageUrl==http%3A%2F%2Fexample.org%2Fhomepage</segment> diff --git a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageTitleExcludes__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageTitleExcludes__Actions.getPageUrls_day.xml index 21450c0dd4..754d1c45fa 100644 --- a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageTitleExcludes__Actions.getPageUrls_day.xml +++ b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageTitleExcludes__Actions.getPageUrls_day.xml @@ -6,15 +6,15 @@ <nb_uniq_visitors>2</nb_uniq_visitors> <nb_hits>2</nb_hits> <sum_time_spent>0</sum_time_spent> - <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> - <entry_nb_visits>1</entry_nb_visits> - <entry_nb_actions>3</entry_nb_actions> - <entry_sum_visit_length>364</entry_sum_visit_length> - <entry_bounce_count>0</entry_bounce_count> + <entry_nb_uniq_visitors>2</entry_nb_uniq_visitors> + <entry_nb_visits>2</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>725</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> <exit_nb_visits>1</exit_nb_visits> <avg_time_on_page>0</avg_time_on_page> - <bounce_rate>0%</bounce_rate> + <bounce_rate>50%</bounce_rate> <exit_rate>50%</exit_rate> <url>http://example.org/homepage</url> <segment>pageUrl==http%3A%2F%2Fexample.org%2Fhomepage</segment> diff --git a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlExcludes__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlExcludes__Actions.getPageUrls_day.xml index 21450c0dd4..754d1c45fa 100644 --- a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlExcludes__Actions.getPageUrls_day.xml +++ b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlExcludes__Actions.getPageUrls_day.xml @@ -6,15 +6,15 @@ <nb_uniq_visitors>2</nb_uniq_visitors> <nb_hits>2</nb_hits> <sum_time_spent>0</sum_time_spent> - <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> - <entry_nb_visits>1</entry_nb_visits> - <entry_nb_actions>3</entry_nb_actions> - <entry_sum_visit_length>364</entry_sum_visit_length> - <entry_bounce_count>0</entry_bounce_count> + <entry_nb_uniq_visitors>2</entry_nb_uniq_visitors> + <entry_nb_visits>2</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>725</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> <exit_nb_visits>1</exit_nb_visits> <avg_time_on_page>0</avg_time_on_page> - <bounce_rate>0%</bounce_rate> + <bounce_rate>50%</bounce_rate> <exit_rate>50%</exit_rate> <url>http://example.org/homepage</url> <segment>pageUrl==http%3A%2F%2Fexample.org%2Fhomepage</segment> diff --git a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlStartsWith__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlStartsWith__Actions.getPageUrls_day.xml index 21450c0dd4..754d1c45fa 100644 --- a/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlStartsWith__Actions.getPageUrls_day.xml +++ b/tests/PHPUnit/System/expected/test_twoVisitsWithCustomVariables_SegmentPageUrlStartsWith__Actions.getPageUrls_day.xml @@ -6,15 +6,15 @@ <nb_uniq_visitors>2</nb_uniq_visitors> <nb_hits>2</nb_hits> <sum_time_spent>0</sum_time_spent> - <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> - <entry_nb_visits>1</entry_nb_visits> - <entry_nb_actions>3</entry_nb_actions> - <entry_sum_visit_length>364</entry_sum_visit_length> - <entry_bounce_count>0</entry_bounce_count> + <entry_nb_uniq_visitors>2</entry_nb_uniq_visitors> + <entry_nb_visits>2</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>725</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> <exit_nb_visits>1</exit_nb_visits> <avg_time_on_page>0</avg_time_on_page> - <bounce_rate>0%</bounce_rate> + <bounce_rate>50%</bounce_rate> <exit_rate>50%</exit_rate> <url>http://example.org/homepage</url> <segment>pageUrl==http%3A%2F%2Fexample.org%2Fhomepage</segment> diff --git a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php index 59c7ca86ae..1cb3f36cc1 100644 --- a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php +++ b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php @@ -8,10 +8,7 @@ namespace Piwik\Tests\Unit; -use Piwik\AssetManager; -use Piwik\AssetManager\UIAsset; use Piwik\Date; -use Piwik\Plugin; use Piwik\Version; use ReflectionClass; @@ -23,53 +20,52 @@ class DeprecatedMethodsTest extends \PHPUnit_Framework_TestCase { public function test_deprecations() { - $validTill = '2016-09-01'; - $this->assertDeprecatedMethodIsRemoved('Piwik\SettingsServer', 'isApache', $validTill); + $this->assertDeprecatedMethodIsRemovedInPiwik3b1('Piwik\SettingsServer', 'isApache'); $validTill = '2015-03-10'; - $this->assertDeprecatedMethodIsRemoved('\Piwik\Period', 'factory', $validTill); - $this->assertDeprecatedMethodIsRemoved('\Piwik\Config', 'getConfigSuperUserForBackwardCompatibility', $validTill); - $this->assertDeprecatedMethodIsRemoved('\Piwik\Menu\MenuAdmin', 'addEntry', $validTill); - $this->assertDeprecatedMethodIsRemoved('\Piwik\Menu\MenuAdmin', 'removeEntry', $validTill); - $this->assertDeprecatedMethodIsRemoved('\Piwik\Menu\MenuTop', 'addEntry', $validTill); - $this->assertDeprecatedMethodIsRemoved('\Piwik\Menu\MenuTop', 'removeEntry', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Period', 'factory', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Config', 'getConfigSuperUserForBackwardCompatibility', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Menu\MenuAdmin', 'addEntry', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Menu\MenuAdmin', 'removeEntry', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Menu\MenuTop', 'addEntry', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('\Piwik\Menu\MenuTop', 'removeEntry', $validTill); $validTill = '2015-03-10'; - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'sanitizeIp', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'sanitizeIpRange', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'P2N', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'N2P', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'prettyPrint', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'isIPv4', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'long2ip', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'isIPv6', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'isMappedIPv4', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'getIPv4FromMappedIPv6', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'getIpsForRange', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'isIpInRange', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\IP', 'getHostByAddr', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\SettingsPiwik', 'rewriteTmpPathWithInstanceId', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'sanitizeIp', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'sanitizeIpRange', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'P2N', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'N2P', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'prettyPrint', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'isIPv4', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'long2ip', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'isIPv6', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'isMappedIPv4', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'getIPv4FromMappedIPv6', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'getIpsForRange', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'isIpInRange', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\IP', 'getHostByAddr', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\SettingsPiwik', 'rewriteTmpPathWithInstanceId', $validTill); $validTill = '2015-05-01'; - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getBrowserVersion', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getBrowser', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getOS', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getOSFamily', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getBrowserType', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getMobileVsDesktop', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getResolution', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getConfiguration', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getPlugin', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getLanguage', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getLanguageCode', $validTill); - $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\UserSettings', 'renameDeprecatedModuleAndAction', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getBrowserVersion', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getBrowser', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getOS', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getOSFamily', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getBrowserType', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getMobileVsDesktop', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getResolution', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getConfiguration', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getPlugin', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getLanguage', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\API', 'getLanguageCode', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Plugins\UserSettings\UserSettings', 'renameDeprecatedModuleAndAction', $validTill); // please be aware if re-adding a plugin called userSettings, and someone updates eg from Piwik 2.13 to that version, // the plugin will be possibly removed in an Update during 2.14.0 $this->assertDeprecatedClassIsRemoved('Piwik\Plugins\UserSettings\UserSettings', $validTill); $validTill = '2015-06-01'; - $this->assertDeprecatedMethodIsRemoved('Piwik\Archive', 'getBlob', $validTill); + $this->assertDeprecatedMethodIsRemovedBeforeDate('Piwik\Archive', 'getBlob', $validTill); $this->assertDeprecatedMethodIsRemovedInPiwik3('\Piwik\Menu\MenuAbstract', 'add'); $this->assertDeprecatedMethodIsRemovedInPiwik3('\Piwik\Archive', 'getDataTableFromArchive'); @@ -87,7 +83,8 @@ class DeprecatedMethodsTest extends \PHPUnit_Framework_TestCase $this->assertDeprecatedMethodIsRemovedInPiwik4('Piwik\Updater', 'executeMigrationQueries'); } - private function assertDeprecatedMethodIsRemoved($className, $method, $removalDate) + + private function assertDeprecatedMethodIsRemovedBeforeDate($className, $method, $removalDate) { $now = Date::now(); $removalDate = Date::factory($removalDate); @@ -129,14 +126,19 @@ class DeprecatedMethodsTest extends \PHPUnit_Framework_TestCase $this->assertFalse($classExists, $errorMessage); } + private function assertDeprecatedMethodIsRemovedInPiwik3b1($className, $method) + { + $this->assertDeprecatedMethodIsRemovedInPiwikVersion('3.0.0-b1', $className, $method); + } + private function assertDeprecatedMethodIsRemovedInPiwik3($className, $method) { - $this->assertDeprecatedMethodIsRemovedInPiwikVersion('3.0.0', $className, $method); + $this->assertDeprecatedMethodIsRemovedInPiwikVersion('3.0.0-b2', $className, $method); } private function assertDeprecatedMethodIsRemovedInPiwik4($className, $method) { - $this->assertDeprecatedMethodIsRemovedInPiwikVersion('4.0.0', $className, $method); + $this->assertDeprecatedMethodIsRemovedInPiwikVersion('4.0.0-b1', $className, $method); } private function assertDeprecatedMethodIsRemovedInPiwikVersion($piwikVersion, $className, $method) diff --git a/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png b/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png index 84e0f1e50a..c052514ef3 100644 --- a/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png +++ b/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81ad9741df39c72e4b9090eeb52ecfa0a876f80353f8ecc7d314e6d77b052645 -size 96834 +oid sha256:991da58219c2022c905b166a4391998e276a2c2da2f8afd66fced8e209d17352 +size 101749 diff --git a/tests/UI/expected-screenshots/CoreUpdaterDb_main.png b/tests/UI/expected-screenshots/CoreUpdaterDb_main.png index 868a987f49..072b687685 100644 --- a/tests/UI/expected-screenshots/CoreUpdaterDb_main.png +++ b/tests/UI/expected-screenshots/CoreUpdaterDb_main.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84a5e5e4b22bf72956537588e050f4f9d894ad0ebf07bb6902dbeba239e5beac -size 274318 +oid sha256:e0fb2618e3e201aeb62fdc656f6ae4a9b215f9b0e92ba8baddc70ca66e9b20de +size 274876 diff --git a/tests/UI/expected-screenshots/DashboardManager_create_new.png b/tests/UI/expected-screenshots/DashboardManager_create_new.png index 4decdbdf65..659d0cdcae 100644 --- a/tests/UI/expected-screenshots/DashboardManager_create_new.png +++ b/tests/UI/expected-screenshots/DashboardManager_create_new.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc4355e247e79f2d3b55cec68ec57a72653ba9e09e997378b26e2399733bb18b -size 228477 +oid sha256:8e253c89b13cfd6c77539d75f19ddc8ff6caef5284c704ca2257c78e551ff2a2 +size 243708 diff --git a/tests/UI/expected-screenshots/Dashboard_reset.png b/tests/UI/expected-screenshots/Dashboard_reset.png index 646559ccfe..9c8220783a 100644 --- a/tests/UI/expected-screenshots/Dashboard_reset.png +++ b/tests/UI/expected-screenshots/Dashboard_reset.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1188c01ae937d94c1826748b304cd909082304ebe5327d8a34c46695eda06851 -size 293583 +oid sha256:6dc0273fe71951926b0fe32bff12e74a93ecf6570d80408208b8735ae6bb03fc +size 237531 diff --git a/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png b/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png index 53d9678de1..e7513f37f5 100644 --- a/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png +++ b/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e4b634d85eb7e20b9bcf08151c09872d04e76fbd9d3a3addaab84b84f6e485e -size 424610 +oid sha256:f092b60899d3347f063fb530601a77b12ec03352b0410e66b5c02eacde2e1d4d +size 424616 diff --git a/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png b/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png index f710a5b4fa..8a98ef8005 100644 --- a/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png +++ b/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:311b034c191ca7adb610d2c7be602aec9b7c8340a8c186fb06d8eeda14fa863d -size 74423 +oid sha256:12f5cb6724eb54694c2d09a971f92d8f132ae85ef36b71f832645107756cee19 +size 74424 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 752be15b83..5d98fb1e78 100644 --- a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_changed_sort_order.png +++ b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_changed_sort_order.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:80ef6c0dad7f35ff3ef1a24f17ff807350eeedf80e4292ef215ba03095b47f53 +oid sha256:03e1cbd224acd9a3f857d42433429128b91c61253f7272bdfbd086c512f58842 size 64673 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 f710a5b4fa..8a98ef8005 100644 --- a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_page_1.png +++ b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_page_1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:311b034c191ca7adb610d2c7be602aec9b7c8340a8c186fb06d8eeda14fa863d -size 74423 +oid sha256:12f5cb6724eb54694c2d09a971f92d8f132ae85ef36b71f832645107756cee19 +size 74424 diff --git a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_search.png b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_search.png index 8f35964236..0969960764 100644 --- a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_search.png +++ b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_search.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:188f148ddb606ce25e4dfb9bc3a9e9878c2d036af1e9248ed560f83ea44b0d36 -size 64600 +oid sha256:e057ef855b4117be6edd52d774ca1710ba300fe5527aa6a0574843831848d96b +size 64602 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png index 9eafa608c8..e189b12ae7 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f01f2c280b0aca85280f969cbb99e850f23806554fe8698f85863fc9294161bc -size 4095615 +oid sha256:5c8b45705e72df6643b633f93dc9ed0ae6d353a73936bbe10e5180e5e054b3f1 +size 4115929 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png index baae74bd46..3404bb899e 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db70b75c79e90973e5f75382ceb0317012de2100f9e56ab96ed6bdb0afa88a66 -size 1459119 +oid sha256:aed223ad45084865dd76b06c77240f39dab1a96b6231f9f7b663b06b70752c74 +size 1457385 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png index 619325451a..71bec02bed 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89426cd3c69eb6e0e6028f8021117775e784ef0d7584ec64782ce5d44cd72931 -size 490689 +oid sha256:8ced4f2dc7e3f6890bfecf3518a9d82af6dfa195b70d090b2fb59145daaf52d4 +size 492262 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_overview.png b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_overview.png index ca9ceeeac2..47793452e7 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_overview.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_overview.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f22207a43ea5e04dd3fc65c288661434c469216eaa01e5c2d4e6f234e3fd6e6 -size 76041 +oid sha256:fdaf3b74ca05f985838005b24d43b2f5ceb9192376810ab9e3ccaa8f963aaf3b +size 76075 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png index 0256fc3721..1384227595 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:463367e003ecae3012be6e80949d3574599f3d0f8bae05b1fc3d8cb65638835a -size 69873 +oid sha256:4690c7114fec502748f3686d009ba3abd1ea7a927df73f3e3b2cc24326b17ac5 +size 65758 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_goals_ecommerce.png b/tests/UI/expected-screenshots/UIIntegrationTest_goals_ecommerce.png index ca9ceeeac2..47793452e7 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_goals_ecommerce.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_goals_ecommerce.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f22207a43ea5e04dd3fc65c288661434c469216eaa01e5c2d4e6f234e3fd6e6 -size 76041 +oid sha256:fdaf3b74ca05f985838005b24d43b2f5ceb9192376810ab9e3ccaa8f963aaf3b +size 76075 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png b/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png index dc19add412..52cc88e9a7 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91b0f535cda8344ba0110006489e693ea98cca996795cfc9eeb8719b7f06bd28 -size 183914 +oid sha256:3978c5b1c54f4a846a4ffaab3f9582df963bf4cc6c9b3ae4500f57a73cac6e80 +size 183929 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_goals_overview.png b/tests/UI/expected-screenshots/UIIntegrationTest_goals_overview.png index ab7dc749e8..6b1f207451 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_goals_overview.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_goals_overview.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8238cdd99e0110484f6ae68a88bd81300956ea0ba68d0aaee9ae2a58afaeaa10 -size 197749 +oid sha256:1a705f7447f01d376a64d035b5419a5db222b89455bd547fd83fc1d67b68b514 +size 197863 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_referrers_overview.png b/tests/UI/expected-screenshots/UIIntegrationTest_referrers_overview.png index 25d54d6fff..ab27957247 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_referrers_overview.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_referrers_overview.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b1bd6c7ac80c6ae0bac5d2194a433b9ab88700b80c8effcf7f577d73e68e23e -size 54680 +oid sha256:180d54af8ae6c60efda13450820d13b94fd32d05b047687d557a8acec239c2b8 +size 54726 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_not_segmented.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_not_segmented.png new file mode 100644 index 0000000000..91125c7a9c --- /dev/null +++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_not_segmented.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0643bf59751bacd616d9939d172df5b3a962993ec72a93cc3547d56974b5a15d +size 471571 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png index 78f8463054..718ff17a3a 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5a40784ed68b3095592a54fb47f3339df0b484c8eeee94a509ce7340341b702 -size 221864 +oid sha256:72ee40d84b0c1d2173541b34f9e548a47312a19bab862f92a817005a9f23c64f +size 221854 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_engagement.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_engagement.png index 5a47febc5d..b50579d3b8 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_engagement.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_engagement.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0b35b4a09078dfb61fc29ede982a506e45062db4ae74be5a8badeca798aeb02e -size 135747 +oid sha256:df62dd4a0aab7474ed0ea847016642748a3d2e90a765f3298855ec5f8e36d268 +size 135788 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview.png index 98088a4e7a..e48a608ccb 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1c6d025ebd601a91e88ac11589bdbb6791fd091bd7ced6c2c713011cf883792 -size 69589 +oid sha256:af10d9447d81902718da3e46854a8c80f8af43b3bc54d62f75afb1208db154fa +size 70220 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_reloaded.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_reloaded.png index 98088a4e7a..e48a608ccb 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_reloaded.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_reloaded.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1c6d025ebd601a91e88ac11589bdbb6791fd091bd7ced6c2c713011cf883792 -size 69589 +oid sha256:af10d9447d81902718da3e46854a8c80f8af43b3bc54d62f75afb1208db154fa +size 70220 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_segment.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_segment.png index 1a02f72ad5..a5b4d447cc 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_segment.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_overview_segment.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9c83afa2debc7c85f8216a5333533a775d273009b451b5edb3f3813ef083966 -size 99556 +oid sha256:b0aa03026f5f0e8ebe4face39021f331d7f779121b2e2c5c0cde082639df66fb +size 99717 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png index 6cb6d80137..75b476d01b 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff17e95e443f9b0dc4f7f6b896a591fbf96309e005d627f04f52ec77c04dce14 -size 72379 +oid sha256:110b4d7b4e709203ace2db1462219da436b29f9ce8841305324599baf12ddd1b +size 72377 diff --git a/tests/UI/specs/UIIntegration_spec.js b/tests/UI/specs/UIIntegration_spec.js index 196e8d7f95..ab4ba8041a 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 3527b5973a..8dc577a407 100644 --- a/tests/angularjs/Gruntfile.js +++ b/tests/angularjs/Gruntfile.js @@ -34,7 +34,7 @@ module.exports = function(grunt) { }, "shell": { compilePiwikJs: { - command: "sed '/<DEBUG>/,/<\\/DEBUG>/d' < piwik.js | sed 's/eval/replacedEvilString/' | java -jar yuicompressor-2.4.2/build/yuicompressor-2.4.2.jar --type js --line-break 1000 | sed 's/replacedEvilString/eval/' | sed 's/^[/][*]/\\/*!/' > piwik-min.js && cp piwik-min.js ../piwik.js", + command: "sed '/<DEBUG>/,/<\\/DEBUG>/d' < piwik.js | sed 's/eval/replacedEvilString/' | java -jar yuicompressor-2.4.7/build/yuicompressor-2.4.7.jar --type js --line-break 1000 | sed 's/replacedEvilString/eval/' | sed 's/^[/][*]/\\/*!/' > piwik-min.js && cp piwik-min.js ../piwik.js", options: { execOptions: { cwd: 'js' diff --git a/tests/javascript/index.php b/tests/javascript/index.php index 34a8d252f5..f8cf328249 100644 --- a/tests/javascript/index.php +++ b/tests/javascript/index.php @@ -28,8 +28,6 @@ $targetFileName = '/tests/resources/piwik.test.js'; $sourceFile = PIWIK_DOCUMENT_ROOT . TrackerUpdater::DEVELOPMENT_PIWIK_JS; $targetFile = PIWIK_DOCUMENT_ROOT . $targetFileName; -file_put_contents($targetFile, ''); - $updater = new TrackerUpdater($sourceFile, $targetFile); $updater->setTrackerFiles(new JsTestPluginTrackerFiles()); $updater->checkWillSucceed(); @@ -611,6 +609,119 @@ function PiwikTest() { } }); + test("Piwik plugin methods", function() { + expect(26); + + // TESTS FOR retryMissedPluginCalls + + // these 2 calls should fail because they do not exist + _paq.push(['MyCustomPlugin::myCustomStaticMethod']); + _paq.push(['MyCustomPlugin::myCustomStaticMethod2']); + _paq.push(['MyCustomPlugin.myCustomMethod']); + + // now we define these method + var called = 0; + var calledStatic = 0; + var calledStatic2 = 0; + Piwik.MyCustomPlugin = {myCustomStaticMethod: function () { calledStatic++; }}; + var asyncTrackers = Piwik.getAsyncTrackers(); + var i = 0; + for (i; i < asyncTrackers.length; i++) { + asyncTrackers[i].MyCustomPlugin = {myCustomMethod: function () { called++; }}; + } + + // now we retry those calls + Piwik.retryMissedPluginCalls(); + + strictEqual(1, called, "retryMissedPluginCalls, successfully executed non static method once it is defined"); + strictEqual(1, calledStatic, "retryMissedPluginCalls, successfully executed static method once it is defined"); + strictEqual(0, calledStatic2, "retryMissedPluginCalls, should not have executed not defined method"); + + // defining another method + Piwik.MyCustomPlugin.myCustomStaticMethod2 = function () { calledStatic2++; }; + + // retrying again should not call the missed plugin calls again because they are now defined + Piwik.retryMissedPluginCalls(); + + strictEqual(1, called, "retryMissedPluginCalls, should not execute a resolved missed call again"); + strictEqual(1, calledStatic, "retryMissedPluginCalls, should not execute a resolved missed call again"); + strictEqual(1, calledStatic2, "retryMissedPluginCalls, successfully executed static method 2 once it is defined"); + + // calling them now that they are defined increases the counter immediately + _paq.push(['MyCustomPlugin::myCustomStaticMethod']); + _paq.push(['MyCustomPlugin.myCustomMethod']); + + strictEqual(2, called, "executing static plugin method works directly if defined"); + strictEqual(2, calledStatic, "executing plugin method works directly if defined"); + strictEqual(1, calledStatic2, "a method is only executed when actually pushed"); + + // TESTS FOR events + var calledEvent1 = 0; + var calledEvent1_1 = 0; + var calledEvent2 = 0; + var passedArgs = null; + + function callEvent1() { calledEvent1++; } + function callEvent1_1() { calledEvent1_1++; } + function callEvent2(arg1, arg2) { calledEvent2++; passedArgs = [arg1, arg2]; } + + Piwik.on('myEvent1', callEvent1); + Piwik.on('myEvent2', callEvent2); + + Piwik.trigger('myEvent1', []); + strictEqual(1, calledEvent1, "event, should trigger event and call handler callEvent1"); + + Piwik.trigger('myEvent1', []); + strictEqual(2, calledEvent1, "event, should trigger event whenever it is called and call handler callEvent1 again"); + strictEqual(0, calledEvent2, "event, should only execute event listeners that listen to that triggered event"); + + Piwik.trigger('myEvent2', ['arg1', 'arg2']); + strictEqual(2, calledEvent1, "event, should not have executed that event because it has different name"); + strictEqual(1, calledEvent2, "event, should have executed different handler this time"); + deepEqual(['arg1', 'arg2'], passedArgs, "event, should be possible to pass arguments to events"); + + Piwik.on('myEvent1', callEvent1_1); + + Piwik.trigger('myEvent1', []); + strictEqual(3, calledEvent1, "event, should call multiple event handlers when many listen to same event"); + strictEqual(1, calledEvent1_1, "event, should call multiple event handlers when many listen to same event"); + + Piwik.off('myEvent1', callEvent1); + + Piwik.trigger('myEvent1', []); + strictEqual(3, calledEvent1, "event, it is possible to remove an event listener and it will not be executed anymore"); + strictEqual(2, calledEvent1_1, "event, should still call other event listeners when others were removed"); + + /** + * TESTING DOM + **/ + var loaded = false; + var ready = false; + var customEvent = false; + + strictEqual('object', typeof Piwik.DOM, "Piwik.DOM object is defined"); + strictEqual('function', typeof Piwik.DOM.onReady, "DOM.onReady method is defined"); + strictEqual('function', typeof Piwik.DOM.onLoad, "DOM.onLoad method is defined"); + strictEqual('function', typeof Piwik.DOM.addEventListener, "DOM.addEventListener method is defined"); + + Piwik.DOM.onLoad(function () { + loaded = true; + }); + Piwik.DOM.onReady(function () { + ready = true; + }); + + strictEqual(true, ready, "onReady, DOM should be ready"); + strictEqual(true, loaded, "event, DOM should be loaded"); + + Piwik.DOM.addEventListener(_e('click7'), 'myCustomEvent', function () { + customEvent = true; + }); + triggerEvent(_e('click7'), 'myCustomEvent'); + + strictEqual(true, customEvent, "DOM.addEventListener works"); + }); + test("Query", function() { var tracker = Piwik.getTracker(); var query = tracker.getQuery(); diff --git a/tests/resources/Updater/testpluginUpdates/0.5.php b/tests/resources/Updater/testpluginUpdates/0.5.php new file mode 100644 index 0000000000..944dcffaf2 --- /dev/null +++ b/tests/resources/Updater/testpluginUpdates/0.5.php @@ -0,0 +1,12 @@ +<?php +namespace Piwik\Plugins\testpluginUpdates; + +use Piwik\Updates as PiwikUpdates; + +class Updates_0_5 extends PiwikUpdates +{ + function doUpdate(\Piwik\Updater $updater) + { + throw new \Piwik\Exception\MissingFilePermissionException('make sure this exception is thrown'); + } +} diff --git a/tests/resources/extractSearchEngineInformationFromUrlTests.yml b/tests/resources/extractSearchEngineInformationFromUrlTests.yml index 879ba91707..9f916bbbe3 100644 --- a/tests/resources/extractSearchEngineInformationFromUrlTests.yml +++ b/tests/resources/extractSearchEngineInformationFromUrlTests.yml @@ -346,25 +346,57 @@ engine: 'Yahoo! Japan Images' keywords: 'to heart logo' -- url: 'http://video.search.yahoo.co.jp/search?tt=c&ei=UTF-8&fr=sfp_as&aq=-1&oq=&p=piwik&meta=vc%3D' +- url: 'http://image.search.yahoo.co.jp/search?ei=Shift_JIS&fr=top_ga1_sa&p=%8CN%82%CC%96%BC%82%CD%81B' + engine: 'Yahoo! Japan Images' + keywords: '君の名は。' + +- url: 'http://image.search.yahoo.co.jp/search?ei=EUC-JP&fr=top_ga1_sa&p=%B7%AF%A4%CE%CC%BE%A4%CF%A1%A3' + engine: 'Yahoo! Japan Images' + keywords: '君の名は。' + +- url: 'http://video.search.yahoo.co.jp/search?tt=c&ei=UTF-8&fr=sfp_as&aq=-1&oq=&p=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82&meta=vc%3D' engine: 'Yahoo! Japan Videos' - keywords: 'piwik' + keywords: '君の名は。' + +- url: 'http://video.search.yahoo.co.jp/search?tt=c&ei=Shift_JIS&fr=sfp_as&aq=-1&oq=&p=%8El%8C%8E%82%CD%8CN%82%CC%89R&meta=vc%3D' + engine: 'Yahoo! Japan Videos' + keywords: '四月は君の嘘' -- url: 'http://search.yahoo.co.jp/search?ei=UTF-8&p=piwik' +- url: 'http://video.search.yahoo.co.jp/search?tt=c&ei=EUC-JP&fr=sfp_as&aq=-1&oq=&p=%BB%CD%B7%EE%A4%CF%B7%AF%A4%CE%B1%B3&meta=vc%3D' + engine: 'Yahoo! Japan Videos' + keywords: '四月は君の嘘' + +- url: 'http://search.yahoo.co.jp/search?ei=UTF-8&p=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82' engine: 'Yahoo! Japan' - keywords: 'piwik' + keywords: '君の名は。' + +- url: 'http://search.yahoo.co.jp/search?ei=Shift_JIS&p=%8El%8C%8E%82%CD%8CN%82%CC%89R' + engine: 'Yahoo! Japan' + keywords: '四月は君の嘘' + +- url: 'http://search.yahoo.co.jp/search?ei=EUC-JP&p=%BB%CD%B7%EE%A4%CF%B7%AF%A4%CE%B1%B3' + engine: 'Yahoo! Japan' + keywords: '四月は君の嘘' -- url: 'http://search.auone.jp/?q=piwik&sr=0001&ie=UTF-8&lr=' +- url: 'http://search.auone.jp/?q=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82&sr=0001&ie=UTF-8&lr=' engine: 'auone' - keywords: 'piwik' + keywords: '君の名は。' + +- url: 'http://search.auone.jp/?q=%8El%8C%8E%82%CD%8CN%82%CC%89R&sr=0001&ie=SJIS&lr=' + engine: 'auone' + keywords: '四月は君の嘘' -- url: 'http://search.nifty.com/websearch/search?select=2&ss=up&cflg=%E6%A4%9C%E7%B4%A2&chartype=&Text=%E3%82%A6%E3%82%A7%E3%83%96%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E7%B4%84' +- url: 'http://search.auone.jp/?q=%BB%CD%B7%EE%A4%CF%B7%AF%A4%CE%B1%B3&sr=0001&ie=EUC&lr=' + engine: 'auone' + keywords: '四月は君の嘘' + +- url: 'http://search.nifty.com/websearch/search?select=2&ss=up&Text=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82' engine: 'Nifty' - keywords: 'ウェブ検索結果約' + keywords: '君の名は。' -- url: 'http://videosearch.nifty.com/search?kw=piwik' +- url: 'http://videosearch.nifty.com/search?kw=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82' engine: 'Nifty Videos' - keywords: 'piwik' + keywords: '君の名は。' - url: 'http://www.claro-search.com/?q=logiciels+pour+%C3%A9crire+en+japonais+avec+windows+xp&s=web&as=0&rlz=0&babsrc=SP_clro' engine: 'Claro Search' @@ -378,21 +410,29 @@ engine: 'Google' keywords: 'ふたりはプリキュアmaxheart' -- url: 'http://cgi.search.biglobe.ne.jp/cgi-bin/search-st?search=%E6%A4%9C%E7%B4%A2&web_s.x=1&q=piwik&x=0&y=0&ie=utf8' +- url: 'http://cgi.search.biglobe.ne.jp/cgi-bin/search-st?q=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82&ie=utf8' engine: 'Biglobe' - keywords: 'piwik' + keywords: '君の名は。' + +- url: 'http://cgi.search.biglobe.ne.jp/cgi-bin/search-st?q=%8El%8C%8E%82%CD%8CN%82%CC%89R&ie=sjis' + engine: 'Biglobe' + keywords: '四月は君の嘘' + +- url: 'http://cgi.search.biglobe.ne.jp/cgi-bin/search-st?q=%BB%CD%B7%EE%A4%CF%B7%AF%A4%CE%B1%B3&ie=euc' + engine: 'Biglobe' + keywords: '四月は君の嘘' - url: 'http://images.search.biglobe.ne.jp/cgi-bin/search?q=%E3%82%B5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%AF%EF%BC%88' engine: 'Biglobe Images' keywords: 'サーリンク(' -- url: 'http://www.so-net.ne.jp/search/web/?query=piwik&from=gp&kz=&suggest=gp_suggest_on' +- url: 'http://www.so-net.ne.jp/search/web/?query=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82&from=gp&kz=&suggest=gp_suggest_on' engine: 'So-net' - keywords: 'piwik' + keywords: '君の名は。' -- url: 'http://video.so-net.ne.jp/search/?kw=piwik&from=' +- url: 'http://video.so-net.ne.jp/search/?kw=%E5%90%9B%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%82&from=' engine: 'So-net Videos' - keywords: 'piwik' + keywords: '君の名は。' - url: 'http://search.seesaa.jp/%E6%97%A5%E6%9C%AC%E3%83%86%E3%83%AC%E3%83%93%E6%94%BE%E9%80%81%E7%B6%B2/index.html' engine: 'SeeSaa' |