diff options
151 files changed, 4747 insertions, 2652 deletions
diff --git a/.travis.yml b/.travis.yml index 40a749e108..4eb7e54bec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -94,9 +94,9 @@ before_script: - php -r "var_dump(gd_info());" - mysql -e 'create database piwik_tests;' # Make sure we use Python 2.6 - - sudo add-apt-repository ppa:fkrull/deadsnakes -y - - sudo apt-get update - - sudo apt-get install python2.6 python2.6-dev + - travis_retry sudo add-apt-repository ppa:fkrull/deadsnakes -y + - travis_retry sudo apt-get update + - travis_retry sudo apt-get install python2.6 python2.6-dev # Log Analytics works with Python 2.6 or 2.7 but we want to test on 2.6 - python2.6 --version - python --version @@ -112,6 +112,7 @@ after_script: - cat /var/log/nginx/error.log - cat $TRAVIS_BUILD_DIR/tmp/php-fpm.log - cat $TRAVIS_BUILD_DIR/tmp/logs/piwik.log + - cat $TRAVIS_BUILD_DIR/config/config.ini.php - cd $TRAVIS_BUILD_DIR - ./tests/travis/upload_artifacts.sh diff --git a/composer.lock b/composer.lock index 106f57b07b..aa25e6356e 100644 --- a/composer.lock +++ b/composer.lock @@ -96,16 +96,16 @@ }, { "name": "piwik/device-detector", - "version": "2.1.1", + "version": "2.2", "source": { "type": "git", "url": "https://github.com/piwik/device-detector.git", - "reference": "a35a509849ef16d4e47c6f417c116efe6c96965f" + "reference": "2a5f44c6c788f0b06e50c38514ea5bf011fc8636" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/piwik/device-detector/zipball/a35a509849ef16d4e47c6f417c116efe6c96965f", - "reference": "a35a509849ef16d4e47c6f417c116efe6c96965f", + "url": "https://api.github.com/repos/piwik/device-detector/zipball/2a5f44c6c788f0b06e50c38514ea5bf011fc8636", + "reference": "2a5f44c6c788f0b06e50c38514ea5bf011fc8636", "shasum": "" }, "require": { @@ -139,7 +139,7 @@ "parser", "useragent" ], - "time": "2014-06-23 04:13:18" + "time": "2014-06-26 11:07:53" }, { "name": "symfony/console", @@ -300,16 +300,16 @@ "packages-dev": [ { "name": "phpunit/php-code-coverage", - "version": "2.0.8", + "version": "2.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "58401826c8cfc8fd689b60026e91c337df374bca" + "reference": "ed8ac99ce38c3fd134128c898f7ca74665abef7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/58401826c8cfc8fd689b60026e91c337df374bca", - "reference": "58401826c8cfc8fd689b60026e91c337df374bca", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ed8ac99ce38c3fd134128c898f7ca74665abef7f", + "reference": "ed8ac99ce38c3fd134128c898f7ca74665abef7f", "shasum": "" }, "require": { @@ -361,7 +361,7 @@ "testing", "xunit" ], - "time": "2014-05-26 14:55:24" + "time": "2014-06-29 08:14:40" }, { "name": "phpunit/php-file-iterator", @@ -622,16 +622,16 @@ }, { "name": "phpunit/phpunit-mock-objects", - "version": "2.1.4", + "version": "2.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "1a894a16b6c15fcdc5ef2b110f0e6233952c9b0f" + "reference": "7878b9c41edb3afab92b85edf5f0981014a2713a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/1a894a16b6c15fcdc5ef2b110f0e6233952c9b0f", - "reference": "1a894a16b6c15fcdc5ef2b110f0e6233952c9b0f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/7878b9c41edb3afab92b85edf5f0981014a2713a", + "reference": "7878b9c41edb3afab92b85edf5f0981014a2713a", "shasum": "" }, "require": { @@ -675,7 +675,7 @@ "mock", "xunit" ], - "time": "2014-06-07 16:22:57" + "time": "2014-06-12 07:22:15" }, { "name": "sebastian/comparator", diff --git a/config/global.ini.php b/config/global.ini.php index c3c68c1de0..51dbba90cb 100644 --- a/config/global.ini.php +++ b/config/global.ini.php @@ -18,7 +18,7 @@ password = dbname = tables_prefix = port = 3306 -adapter = PDO_MYSQL +adapter = PDO\MYSQL type = InnoDB schema = Mysql @@ -34,7 +34,7 @@ password = dbname = piwik_tests tables_prefix = piwiktests_ port = 3306 -adapter = PDO_MYSQL +adapter = PDO\MYSQL type = InnoDB schema = Mysql @@ -267,6 +267,12 @@ login_password_recovery_email_address = "password-recovery@{DOMAIN}" ; name that appears as a Sender in the password recovery email login_password_recovery_email_name = Piwik +; email address that appears as a Repy-to in the password recovery email +; if specified, {DOMAIN} will be replaced by the current Piwik domain +login_password_recovery_replyto_email_address = "no-reply@{DOMAIN}" +; name that appears as a Reply-to in the password recovery email +login_password_recovery_replyto_email_name = "No-reply" + ; By default when user logs out he is redirected to Piwik "homepage" usually the Login form. ; Uncomment the next line to set a URL to redirect the user to after he logs out of Piwik. ; login_logout_url = http://... @@ -289,6 +295,9 @@ noreply_email_address = "noreply@{DOMAIN}" ; when testing, use your own email address or "nobody" feedback_email_address = "feedback@piwik.org" +; using to set reply_to in reports e-mail to login of report creator +scheduled_reports_replyto_is_user_email_and_alias = 0 + ; during archiving, Piwik will limit the number of results recorded, for performance reasons ; maximum number of rows for any of the Referrers tables (keywords, search engines, campaigns, etc.) datatable_archiving_maximum_rows_referrers = 1000 @@ -384,7 +393,7 @@ enable_trusted_host_check = 1 ; The release server is an essential part of the Piwik infrastructure/ecosystem ; to provide the latest software version. -latest_version_url = http://builds.piwik.org/piwik-latest.zip +latest_version_url = http://builds.piwik.org/piwik.zip ; The API server is an essential part of the Piwik infrastructure/ecosystem to ; provide services to Piwik installations, e.g., getLatestVersion and diff --git a/core/API/DataTableManipulator/LabelFilter.php b/core/API/DataTableManipulator/LabelFilter.php index 20c3ccd430..3c50e67ff2 100644 --- a/core/API/DataTableManipulator/LabelFilter.php +++ b/core/API/DataTableManipulator/LabelFilter.php @@ -111,15 +111,15 @@ class LabelFilter extends DataTableManipulator * Note: The HTML Encoded version must be tried first, since in ResponseBuilder the $label is unsanitized * via Common::unsanitizeLabelParameter. * - * @param string $label + * @param string $originalLabel * @return array */ - private function getLabelVariations($label) + private function getLabelVariations($originalLabel) { static $pageTitleReports = array('getPageTitles', 'getEntryPageTitles', 'getExitPageTitles'); $variations = array(); - $label = urldecode($label); + $label = urldecode($originalLabel); $label = trim($label); $sanitizedLabel = Common::sanitizeInputValue($label); @@ -128,10 +128,17 @@ class LabelFilter extends DataTableManipulator if ($this->apiModule == 'Actions' && in_array($this->apiMethod, $pageTitleReports) ) { - // special case: the Actions.getPageTitles report prefixes some labels with a blank. - // the blank might be passed by the user but is removed in Request::getRequestArrayFromString. - $variations[] = ' ' . $sanitizedLabel; - $variations[] = ' ' . $label; + // temporary workaround for #4363, if a '%20' is at the end of this label, we assume it is a + // terminal label and only check for a terminal row. + if (substr($originalLabel, -3) == '%20') { + array_unshift($variations, ' ' . $sanitizedLabel); + array_unshift($variations, ' ' . $label); + } else { + // special case: the Actions.getPageTitles report prefixes some labels with a blank. + // the blank might be passed by the user but is removed in Request::getRequestArrayFromString. + $variations[] = ' ' . $sanitizedLabel; + $variations[] = ' ' . $label; + } } $variations[] = $label; diff --git a/core/Archive.php b/core/Archive.php index 84facb267f..c7407c0af0 100644 --- a/core/Archive.php +++ b/core/Archive.php @@ -197,11 +197,12 @@ class Archive { $websiteIds = Site::getIdSitesFromIdSitesString($idSites, $_restrictSitesToLogin); + $timezone = count($websiteIds) == 1 ? Site::getTimezoneFor($websiteIds[0]) : false; + if (Period::isMultiplePeriod($strDate, $period)) { - $oPeriod = Factory::build($period, $strDate); + $oPeriod = Factory::build($period, $strDate, $timezone); $allPeriods = $oPeriod->getSubperiods(); } else { - $timezone = count($websiteIds) == 1 ? Site::getTimezoneFor($websiteIds[0]) : false; $oPeriod = Factory::makePeriodFromQueryParams($timezone, $period, $strDate); $allPeriods = array($oPeriod); } diff --git a/core/ArchiveProcessor.php b/core/ArchiveProcessor.php index e490d12dcb..c15ea5dd54 100644 --- a/core/ArchiveProcessor.php +++ b/core/ArchiveProcessor.php @@ -338,9 +338,10 @@ class ArchiveProcessor if ($dataTable instanceof Map) { // see http://dev.piwik.org/trac/ticket/4377 - foreach ($dataTable->getDataTables() as $table) { - $this->renameColumnsAfterAggregation($table, $columnsToRenameAfterAggregation); - } + $self = $this; + $dataTable->filter(function ($table) use ($self, $columnsToRenameAfterAggregation) { + $self->renameColumnsAfterAggregation($table, $columnsToRenameAfterAggregation); + }); } $dataTable = $this->getAggregatedDataTableMap($dataTable, $columnsAggregationOperation); @@ -443,7 +444,10 @@ class ArchiveProcessor } } - protected function renameColumnsAfterAggregation(DataTable $table, $columnsToRenameAfterAggregation = null) + /** + * Note: public only for use in closure in PHP 5.3. + */ + public function renameColumnsAfterAggregation(DataTable $table, $columnsToRenameAfterAggregation = null) { // Rename columns after aggregation if (is_null($columnsToRenameAfterAggregation)) { diff --git a/core/ArchiveProcessor/Loader.php b/core/ArchiveProcessor/Loader.php index d832d4be2f..a4ffa4d12e 100644 --- a/core/ArchiveProcessor/Loader.php +++ b/core/ArchiveProcessor/Loader.php @@ -10,6 +10,7 @@ namespace Piwik\ArchiveProcessor; use Piwik\Archive; use Piwik\ArchiveProcessor; use Piwik\Config; +use Piwik\DataAccess\ArchivePurger; use Piwik\DataAccess\ArchiveSelector; use Piwik\Date; use Piwik\Period; @@ -119,10 +120,6 @@ class Loader } $idArchive = $pluginsArchiver->finalizeArchive(); - if (!$this->params->isSingleSiteDayArchive() && $visits) { - ArchiveSelector::purgeOutdatedArchives($this->params->getPeriod()->getDateStart()); - } - return array($idArchive, $visits); } diff --git a/core/ArchiveProcessor/Rules.php b/core/ArchiveProcessor/Rules.php index 71f6760d58..e5450e040c 100644 --- a/core/ArchiveProcessor/Rules.php +++ b/core/ArchiveProcessor/Rules.php @@ -33,8 +33,7 @@ class Rules const FLAG_TABLE_PURGED = 'lastPurge_'; - /** Old Archives purge can be disabled (used in tests only) */ - static public $purgeDisabledByTests = false; + static public $purgeOutdatedArchivesIsDisabled = false; /** Flag that will forcefully disable the archiving process (used in tests only) */ public static $archivingDisabledByTests = false; @@ -43,9 +42,11 @@ class Rules * Returns the name of the archive field used to tell the status of an archive, (ie, * whether the archive was created successfully or not). * + * @param array $idSites * @param Segment $segment * @param string $periodLabel * @param string $plugin + * @param bool $isSkipAggregationOfSubTables * @return string */ public static function getDoneStringFlagFor(array $idSites, $segment, $periodLabel, $plugin, $isSkipAggregationOfSubTables) @@ -128,6 +129,16 @@ class Rules return $doneFlags; } + static public function disablePurgeOutdatedArchives() + { + self::$purgeOutdatedArchivesIsDisabled = true; + } + + static public function enablePurgeOutdatedArchives() + { + self::$purgeOutdatedArchivesIsDisabled = false; + } + /** * Given a monthly archive table, will delete all reports that are now outdated, * or reports that ended with an error @@ -137,7 +148,7 @@ class Rules */ public static function shouldPurgeOutdatedArchives(Date $date) { - if (self::$purgeDisabledByTests) { + if (self::$purgeOutdatedArchivesIsDisabled) { return false; } $key = self::FLAG_TABLE_PURGED . "blob_" . $date->toString('Y_m'); diff --git a/core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php b/core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php index 414a5d44e7..47a78a47ca 100644 --- a/core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php +++ b/core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php @@ -15,14 +15,31 @@ class StylesheetUIAssetFetcher extends UIAssetFetcher { protected function getPriorityOrder() { - return array( + $theme = $this->getTheme(); + $themeName = $theme->getThemeName(); + + $themeName = $this->getTheme()->getThemeName(); + $order = array( 'libs/', 'plugins/CoreHome/stylesheets/color_manager.css', // must be before other Piwik stylesheets 'plugins/Morpheus/stylesheets/base.less', - 'plugins\/((?!Morpheus).)*\/', - 'plugins/Dashboard/stylesheets/dashboard.less', - 'tests/', ); + + if ($themeName === 'Morpheus') { + $order[] = 'plugins\/((?!Morpheus).)*\/'; + } else { + $order[] = sprintf('plugins\/((?!(Morpheus)|(%s)).)*\/', $themeName); + } + + $order = array_merge( + $order, + array( + 'plugins/Dashboard/stylesheets/dashboard.less', + 'tests/', + ) + ); + + return $order; } protected function retrieveFileLocations() diff --git a/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php b/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php index f943a918d3..b8dedab561 100644 --- a/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php +++ b/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php @@ -30,8 +30,10 @@ class StylesheetUIAssetMerger extends UIAssetMerger protected function getMergedAssets() { - $this->lessCompiler->addImportDir(PIWIK_USER_PATH); - return $this->lessCompiler->compile($this->getConcatenatedAssets()); + // note: we're using setImportDir on purpose (not addImportDir) + $this->lessCompiler->setImportDir(PIWIK_USER_PATH); + $concatenatedAssets = $this->getConcatenatedAssets(); + return $this->lessCompiler->compile($concatenatedAssets); } /** diff --git a/core/AssetManager/UIAssetMinifier.php b/core/AssetManager/UIAssetMinifier.php index e9bc541959..ad8bbb61a9 100644 --- a/core/AssetManager/UIAssetMinifier.php +++ b/core/AssetManager/UIAssetMinifier.php @@ -60,7 +60,7 @@ class UIAssetMinifier extends Singleton private static function validateDependency() { if (!class_exists("JShrink\\Minifier")) - throw new Exception("JShrink could not be found, maybe you are using Piwik from git and need to have update Composer. <br>php composer.phar update"); + throw new Exception("JShrink could not be found, maybe you are using Piwik from git and need to update Composer. $ php composer.phar update"); } } diff --git a/core/CliMulti.php b/core/CliMulti.php index 8085631feb..f5b0d552bd 100644 --- a/core/CliMulti.php +++ b/core/CliMulti.php @@ -241,6 +241,8 @@ class CliMulti { } $output->write($message); + + Log::debug($e); } } diff --git a/core/CronArchive.php b/core/CronArchive.php index add03bb5e5..e12fcc85f6 100644 --- a/core/CronArchive.php +++ b/core/CronArchive.php @@ -64,6 +64,7 @@ class CronArchive private $idSitesInvalidatedOldReports = array(); private $shouldArchiveSpecifiedSites = array(); private $shouldSkipSpecifiedSites = array(); + private $shouldArchiveOnlySpecificPeriods = array(); /** * @var SharedSiteIds|FixedSiteIds */ @@ -131,6 +132,10 @@ class CronArchive $this->segments = $this->initSegmentsToArchive(); $this->allWebsites = APISitesManager::getInstance()->getAllSitesId(); + if(!empty($this->shouldArchiveOnlySpecificPeriods)) { + $this->log("- Will process the following periods: " . implode(", ", $this->shouldArchiveOnlySpecificPeriods) . " (--force-periods)"); + } + $websitesIds = $this->initWebsiteIds(); $this->filterWebsiteIds($websitesIds); @@ -171,7 +176,6 @@ class CronArchive $this->runScheduledTasks(); } - // TODO: replace w/ $this-> private $websitesWithVisitsSinceLastRun = 0; private $skippedPeriodsArchivesWebsite = 0; private $skippedDayArchivesWebsites = 0; @@ -339,7 +343,7 @@ class CronArchive // (*) If there was some old reports invalidated for this website // we make sure all these old reports are triggered at least once - $websiteIsOldDataInvalidate = in_array($idSite, $this->idSitesInvalidatedOldReports); + $websiteIsOldDataInvalidate = $this->isOldReportInvalidatedForWebsite($idSite); if ($websiteIsOldDataInvalidate) { $shouldArchivePeriods = true; @@ -373,7 +377,7 @@ class CronArchive $skipDayArchive = false; } - if ($skipDayArchive) { + if ($skipDayArchive) { $this->log("Skipped website id $idSite, already done " . \Piwik\MetricsFormatter::getPrettyTimeFromSeconds($elapsedSinceLastArchiving, true, $isHtml = false) . " ago, " . $timerWebsite->__toString()); @@ -382,75 +386,11 @@ class CronArchive return false; } - // Fake that the request is already done, so that other core:archive commands - // running do not grab the same website from the queue - Option::set($this->lastRunKey($idSite, "day"), time()); - - // Remove this website from the list of websites to be invalidated - // since it's now just about to being re-processed, makes sure another running cron archiving process - // does not archive the same idSite - if ($websiteIsOldDataInvalidate) { - $this->setSiteIsArchived($idSite); - } - - // when some data was purged from this website - // we make sure we query all previous days/weeks/months - $processDaysSince = $lastTimestampWebsiteProcessedDay; - if($websiteIsOldDataInvalidate - // when --force-all-websites option, - // also forces to archive last52 days to be safe - || $this->shouldArchiveAllSites) { - $processDaysSince = false; - } - - - $timer = new Timer; - $dateLast = $this->getApiDateLastParameter($idSite, "day", $processDaysSince); - $url = $this->getVisitsRequestUrl($idSite, "day", $dateLast); - $content = $this->request($url); - $response = @unserialize($content); - $visitsToday = $this->getVisitsLastPeriodFromApiResponse($response); - $visitsLastDays = $this->getVisitsFromApiResponse($response); - - if (empty($content) - || !is_array($response) - || count($response) == 0 - ) { - // cancel the succesful run flag - Option::set($this->lastRunKey($idSite, "day"), 0); - - $this->logError("Empty or invalid response '$content' for website id $idSite, " . $timerWebsite->__toString() . ", skipping"); - $this->skipped++; - return false; - } - - $this->requests++; - $this->processed++; - - // If there is no visit today and we don't need to process this website, we can skip remaining archives - if ($visitsToday == 0 - && !$shouldArchivePeriods - ) { - $this->log("Skipped website id $idSite, no visit today, " . $timerWebsite->__toString()); - $this->skipped++; - return false; - } - - if ($visitsLastDays == 0 - && !$shouldArchivePeriods - && $this->shouldArchiveAllSites - ) { - $this->log("Skipped website id $idSite, no visits in the last " . $dateLast . " days, " . $timerWebsite->__toString()); - $this->skipped++; + $shouldProceed = $this->processArchiveDays($idSite, $lastTimestampWebsiteProcessedDay, $shouldArchivePeriods, $timerWebsite); + if(!$shouldProceed) { return false; } - - $this->visitsToday += $visitsToday; - $this->websitesWithVisitsSinceLastRun++; - $this->archiveVisitsAndSegments($idSite, "day", $lastTimestampWebsiteProcessedDay); - $this->logArchivedWebsite($idSite, "day", $dateLast, $visitsLastDays, $visitsToday, $timer); - if (!$shouldArchivePeriods) { $this->log("Skipped website id $idSite periods processing, already done " . \Piwik\MetricsFormatter::getPrettyTimeFromSeconds($elapsedSinceLastArchiving, true, $isHtml = false) @@ -462,6 +402,13 @@ class CronArchive $success = true; foreach (array('week', 'month', 'year') as $period) { + + if(!$this->shouldProcessPeriod($period)) { + // if any period was skipped, we do not mark the Periods archiving as successful + $success = false; + continue; + } + $success = $this->archiveVisitsAndSegments($idSite, $period, $lastTimestampWebsiteProcessedPeriods) && $success; } @@ -508,9 +455,9 @@ class CronArchive /** * Returns base URL to process reports for the $idSite on a given $period */ - private function getVisitsRequestUrl($idSite, $period, $dateLast) + private function getVisitsRequestUrl($idSite, $period, $date) { - return "?module=API&method=API.get&idSite=$idSite&period=$period&date=last" . $dateLast . "&format=php&token_auth=" . $this->token_auth; + return "?module=API&method=API.get&idSite=$idSite&period=$period&date=" . $date . "&format=php&token_auth=" . $this->token_auth; } private function initSegmentsToArchive() @@ -523,6 +470,90 @@ class CronArchive return $segments; } + /** + * @param $idSite + * @param $lastTimestampWebsiteProcessedDay + * @param $shouldArchivePeriods + * @param $timerWebsite + * @return bool + */ + protected function processArchiveDays($idSite, $lastTimestampWebsiteProcessedDay, $shouldArchivePeriods, Timer $timerWebsite) + { + if (!$this->shouldProcessPeriod("day")) { + // skip day archiving and proceed to period processing + return true; + } + + // Fake that the request is already done, so that other core:archive commands + // running do not grab the same website from the queue + Option::set($this->lastRunKey($idSite, "day"), time()); + + // Remove this website from the list of websites to be invalidated + // since it's now just about to being re-processed, makes sure another running cron archiving process + // does not archive the same idSite + if ($this->isOldReportInvalidatedForWebsite($idSite)) { + $this->setSiteIsArchived($idSite); + } + + // when some data was purged from this website + // we make sure we query all previous days/weeks/months + $processDaysSince = $lastTimestampWebsiteProcessedDay; + if($this->isOldReportInvalidatedForWebsite($idSite) + // when --force-all-websites option, + // also forces to archive last52 days to be safe + || $this->shouldArchiveAllSites) { + $processDaysSince = false; + } + + $date = $this->getApiDateParameter($idSite, "day", $processDaysSince); + $url = $this->getVisitsRequestUrl($idSite, "day", $date); + $content = $this->request($url); + $daysResponse = @unserialize($content); + + if (empty($content) + || !is_array($daysResponse) + || count($daysResponse) == 0 + ) { + // cancel the succesful run flag + Option::set($this->lastRunKey($idSite, "day"), 0); + + $this->logError("Empty or invalid response '$content' for website id $idSite, " . $timerWebsite->__toString() . ", skipping"); + $this->skipped++; + return false; + } + + $visitsToday = $this->getVisitsLastPeriodFromApiResponse($daysResponse); + $visitsLastDays = $this->getVisitsFromApiResponse($daysResponse); + + $this->requests++; + $this->processed++; + + // If there is no visit today and we don't need to process this website, we can skip remaining archives + if ($visitsToday == 0 + && !$shouldArchivePeriods + ) { + $this->log("Skipped website id $idSite, no visit today, " . $timerWebsite->__toString()); + $this->skipped++; + return false; + } + + if ($visitsLastDays == 0 + && !$shouldArchivePeriods + && $this->shouldArchiveAllSites + ) { + $this->log("Skipped website id $idSite, no visits in the last " . $date . " days, " . $timerWebsite->__toString()); + $this->skipped++; + return false; + } + + $this->visitsToday += $visitsToday; + $this->websitesWithVisitsSinceLastRun++; + $this->archiveVisitsAndSegments($idSite, "day", $processDaysSince); + $this->logArchivedWebsite($idSite, "day", $date, $visitsLastDays, $visitsToday, $timerWebsite); + + return true; + } + private function getSegmentsForSite($idSite) { $segmentsAllSites = $this->segments; @@ -550,8 +581,8 @@ class CronArchive $url = $this->piwikUrl; - $dateLast = $this->getApiDateLastParameter($idSite, $period, $lastTimestampWebsiteProcessed); - $url .= $this->getVisitsRequestUrl($idSite, $period, $dateLast); + $date = $this->getApiDateParameter($idSite, $period, $lastTimestampWebsiteProcessed); + $url .= $this->getVisitsRequestUrl($idSite, $period, $date); $url .= self::APPEND_TO_API_REQUEST; @@ -576,7 +607,7 @@ class CronArchive $cliMulti = new CliMulti(); $cliMulti->setAcceptInvalidSSLCertificate($this->acceptInvalidSSLCertificate); - $cliMulti->setConcurrentProcessesLimit(self::MAX_CONCURRENT_API_REQUESTS); + $cliMulti->setConcurrentProcessesLimit($this->getConcurrentRequestsPerWebsite()); $response = $cliMulti->request($urls); foreach ($urls as $index => $url) { @@ -597,7 +628,7 @@ class CronArchive // we have already logged the daily archive above if($period != "day") { - $this->logArchivedWebsite($idSite, $period, $dateLast, $visitsInLastPeriods, $visitsLastPeriod, $timer); + $this->logArchivedWebsite($idSite, $period, $date, $visitsInLastPeriods, $visitsLastPeriod, $timer); } return $success; @@ -711,11 +742,10 @@ class CronArchive } // Make sure we log at least INFO (if logger is set to DEBUG then keep it) - $logLevel = @$log[\Piwik\Log::LOG_LEVEL_CONFIG_OPTION]; - if ($logLevel != 'VERBOSE' - && $logLevel != 'DEBUG' + $logLevel = Log::getInstance()->getLogLevel(); + if ($logLevel != Log::VERBOSE + && $logLevel != Log::DEBUG ) { - $log[\Piwik\Log::LOG_LEVEL_CONFIG_OPTION] = 'INFO'; Log::getInstance()->setLogLevel(Log::INFO); } @@ -776,6 +806,7 @@ class CronArchive $this->shouldSkipSpecifiedSites = \Piwik\Site::getIdSitesFromIdSitesString($skipIdSites); $this->lastSuccessRunTimestamp = Option::get(self::OPTION_ARCHIVING_FINISHED_TS); $this->shouldArchiveOnlySitesWithTrafficSince = $this->isShouldArchiveAllSitesWithTrafficSince(); + $this->shouldArchiveOnlySpecificPeriods = $this->getPeriodsToProcess(); if($this->shouldArchiveOnlySitesWithTrafficSince === false) { // force-all-periods is not set here @@ -1170,7 +1201,96 @@ class CronArchive * @param $lastTimestampWebsiteProcessed * @return float|int|true */ - private function getApiDateLastParameter($idSite, $period, $lastTimestampWebsiteProcessed = false) + private function getApiDateParameter($idSite, $period, $lastTimestampWebsiteProcessed = false) + { + $dateRangeForced = $this->getDateRangeToProcess(); + if(!empty($dateRangeForced)) { + return $dateRangeForced; + } + return $this->getDateLastN($idSite, $period, $lastTimestampWebsiteProcessed); + } + + /** + * @param $idSite + * @param $period + * @param $date + * @param $visitsInLastPeriods + * @param $visitsToday + * @param $timer + */ + private function logArchivedWebsite($idSite, $period, $date, $visitsInLastPeriods, $visitsToday, Timer $timer) + { + if(substr($date, 0, 4) === 'last') { + $visitsInLastPeriods = (int)$visitsInLastPeriods . " visits in last " . $date . " " . $period . "s, "; + $thisPeriod = $period == "day" ? "today" : "this " . $period; + $visitsInLastPeriod = (int)$visitsToday . " visits " . $thisPeriod . ", "; + } else { + $visitsInLastPeriods = (int)$visitsInLastPeriods . " visits in " . $period . "s included in: $date, "; + $visitsInLastPeriod = ''; + } + + $this->log("Archived website id = $idSite, period = $period, " + . $visitsInLastPeriods + . $visitsInLastPeriod + . $timer->__toString()); + } + + private function getDateRangeToProcess() + { + $restrictToDateRange = $this->getParameterFromCli("force-date-range", true); + if(empty($restrictToDateRange)) { + return false; + } + if(strpos($restrictToDateRange, ',') === false) { + throw new Exception("--force-date-range expects a date range ie. YYYY-MM-DD,YYYY-MM-DD"); + } + return $restrictToDateRange; + } + + /** + * @return array + */ + private function getPeriodsToProcess() + { + $restrictToPeriods = $this->getParameterFromCli("force-periods", true); + $restrictToPeriods = explode(',', $restrictToPeriods); + $restrictToPeriods = array_map('trim', $restrictToPeriods); + $restrictToPeriods = array_intersect($restrictToPeriods, $this->getDefaultPeriodsToProcess()); + return $restrictToPeriods; + } + + /** + * @return array + */ + private function getDefaultPeriodsToProcess() + { + return array('day', 'week', 'month', 'year'); + } + + /** + * @param $idSite + * @return bool + */ + private function isOldReportInvalidatedForWebsite($idSite) + { + return in_array($idSite, $this->idSitesInvalidatedOldReports); + } + + private function shouldProcessPeriod($period) + { + if(empty($this->shouldArchiveOnlySpecificPeriods)) { + return true; + } + return in_array($period, $this->shouldArchiveOnlySpecificPeriods); + } + + /** + * @param $idSite + * @param $period + * @param $lastTimestampWebsiteProcessed + * @return string + */ + private function getDateLastN($idSite, $period, $lastTimestampWebsiteProcessed) { $dateLastMax = self::DEFAULT_DATE_LAST; if ($period == 'year') { @@ -1191,25 +1311,15 @@ class CronArchive $dateLastForced = $this->getParameterFromCli('--force-date-last-n', true); if (!empty($dateLastForced)) { $dateLast = $dateLastForced; - return $dateLast; } - return $dateLast; + return "last" . $dateLast; } /** - * @param $idSite - * @param $period - * @param $dateLast - * @param $visitsInLastPeriods - * @param $visitsToday - * @param $timer + * @return int */ - private function logArchivedWebsite($idSite, $period, $dateLast, $visitsInLastPeriods, $visitsToday, Timer $timer) + private function getConcurrentRequestsPerWebsite() { - $thisPeriod = $period == "day" ? "today" : "this " . $period; - $this->log("Archived website id = $idSite, period = $period, " - . (int)$visitsInLastPeriods . " visits in last " . $dateLast . " " . $period . "s, " - . (int)$visitsToday . " visits " . $thisPeriod . ", " - . $timer->__toString()); + return $this->getParameterFromCli('--concurrent-requests-per-website', true); } } diff --git a/core/DataAccess/ArchivePurger.php b/core/DataAccess/ArchivePurger.php new file mode 100644 index 0000000000..09fb096cd9 --- /dev/null +++ b/core/DataAccess/ArchivePurger.php @@ -0,0 +1,97 @@ +<?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\DataAccess; + +use Exception; +use Piwik\ArchiveProcessor\Rules; +use Piwik\Date; +use Piwik\Db; +use Piwik\Log; +use Piwik\Piwik; + +/** + * Cleans up outdated archives + * + * @package Piwik\DataAccess + */ +class ArchivePurger +{ + static public function purgeOutdatedArchives(Date $dateStart) + { + $purgeArchivesOlderThan = Rules::shouldPurgeOutdatedArchives($dateStart); + if (!$purgeArchivesOlderThan) { + return; + } + + $idArchivesToDelete = self::getTemporaryArchiveIdsOlderThan($dateStart, $purgeArchivesOlderThan); + if (!empty($idArchivesToDelete)) { + self::deleteArchiveIds($dateStart, $idArchivesToDelete); + } + self::deleteArchivesWithPeriodRange($dateStart); + + Log::debug("Purging temporary archives: done [ purged archives older than %s in %s ] [Deleted IDs: %s]", + $purgeArchivesOlderThan, $dateStart->toString("Y-m"), implode(',', $idArchivesToDelete)); + } + + protected static function getTemporaryArchiveIdsOlderThan(Date $date, $purgeArchivesOlderThan) + { + $query = "SELECT idarchive + FROM " . ArchiveTableCreator::getNumericTable($date) . " + WHERE name LIKE 'done%' + AND (( value = " . ArchiveWriter::DONE_OK_TEMPORARY . " + AND ts_archived < ?) + OR value = " . ArchiveWriter::DONE_ERROR . ")"; + + $result = Db::fetchAll($query, array($purgeArchivesOlderThan)); + $idArchivesToDelete = array(); + if (!empty($result)) { + foreach ($result as $row) { + $idArchivesToDelete[] = $row['idarchive']; + } + } + return $idArchivesToDelete; + } + + /* + * Deleting "Custom Date Range" reports after 1 day, since they can be re-processed and would take up un-necessary space + */ + protected static function deleteArchivesWithPeriodRange(Date $date) + { + $query = "DELETE FROM %s WHERE period = ? AND ts_archived < ?"; + + $yesterday = Date::factory('yesterday')->getDateTime(); + $bind = array(Piwik::$idPeriods['range'], $yesterday); + $numericTable = ArchiveTableCreator::getNumericTable($date); + Db::query(sprintf($query, $numericTable), $bind); + Log::debug("Purging Custom Range archives: done [ purged archives older than %s from %s / blob ]", $yesterday, $numericTable); + try { + Db::query(sprintf($query, ArchiveTableCreator::getBlobTable($date)), $bind); + } catch (Exception $e) { + // Individual blob tables could be missing + } + } + + protected static function deleteArchiveIds(Date $date, $idArchivesToDelete) + { + $batches = array_chunk($idArchivesToDelete, 1000); + foreach($batches as $idsToDelete) { + $query = "DELETE FROM %s WHERE idarchive IN (" . implode(',', $idsToDelete) . ")"; + + Db::query(sprintf($query, ArchiveTableCreator::getNumericTable($date))); + try { + Db::query(sprintf($query, ArchiveTableCreator::getBlobTable($date))); + } catch (Exception $e) { + // Individual blob tables could be missing + } + } + + } + + +} diff --git a/core/DataAccess/ArchiveSelector.php b/core/DataAccess/ArchiveSelector.php index 601e8a58d0..0d8b028c72 100644 --- a/core/DataAccess/ArchiveSelector.php +++ b/core/DataAccess/ArchiveSelector.php @@ -294,74 +294,5 @@ class ArchiveSelector " value = '" . ArchiveWriter::DONE_OK_TEMPORARY . "'))"; } - static public function purgeOutdatedArchives(Date $dateStart) - { - $purgeArchivesOlderThan = Rules::shouldPurgeOutdatedArchives($dateStart); - if (!$purgeArchivesOlderThan) { - return; - } - - $idArchivesToDelete = self::getTemporaryArchiveIdsOlderThan($dateStart, $purgeArchivesOlderThan); - if (!empty($idArchivesToDelete)) { - self::deleteArchiveIds($dateStart, $idArchivesToDelete); - } - self::deleteArchivesWithPeriodRange($dateStart); - - Log::debug("Purging temporary archives: done [ purged archives older than %s in %s ] [Deleted IDs: %s]", - $purgeArchivesOlderThan, $dateStart->toString("Y-m"), implode(',', $idArchivesToDelete)); - } - - /* - * Deleting "Custom Date Range" reports after 1 day, since they can be re-processed and would take up un-necessary space - */ - protected static function deleteArchivesWithPeriodRange(Date $date) - { - $query = "DELETE FROM %s WHERE period = ? AND ts_archived < ?"; - - $yesterday = Date::factory('yesterday')->getDateTime(); - $bind = array(Piwik::$idPeriods['range'], $yesterday); - $numericTable = ArchiveTableCreator::getNumericTable($date); - Db::query(sprintf($query, $numericTable), $bind); - Log::debug("Purging Custom Range archives: done [ purged archives older than %s from %s / blob ]", $yesterday, $numericTable); - try { - Db::query(sprintf($query, ArchiveTableCreator::getBlobTable($date)), $bind); - } catch (Exception $e) { - // Individual blob tables could be missing - } - } - protected static function deleteArchiveIds(Date $date, $idArchivesToDelete) - { - $batches = array_chunk($idArchivesToDelete, 1000); - foreach($batches as $idsToDelete) { - $query = "DELETE FROM %s WHERE idarchive IN (" . implode(',', $idsToDelete) . ")"; - - Db::query(sprintf($query, ArchiveTableCreator::getNumericTable($date))); - try { - Db::query(sprintf($query, ArchiveTableCreator::getBlobTable($date))); - } catch (Exception $e) { - // Individual blob tables could be missing - } - } - - } - - protected static function getTemporaryArchiveIdsOlderThan(Date $date, $purgeArchivesOlderThan) - { - $query = "SELECT idarchive - FROM " . ArchiveTableCreator::getNumericTable($date) . " - WHERE name LIKE 'done%' - AND (( value = " . ArchiveWriter::DONE_OK_TEMPORARY . " - AND ts_archived < ?) - OR value = " . ArchiveWriter::DONE_ERROR . ")"; - - $result = Db::fetchAll($query, array($purgeArchivesOlderThan)); - $idArchivesToDelete = array(); - if (!empty($result)) { - foreach ($result as $row) { - $idArchivesToDelete[] = $row['idarchive']; - } - } - return $idArchivesToDelete; - } } diff --git a/core/Db.php b/core/Db.php index 0bcfd68f47..8eabee10cb 100644 --- a/core/Db.php +++ b/core/Db.php @@ -76,7 +76,7 @@ class Db * database. * - **dbname**: The name of the Piwik MySQL database. * - **port**: The MySQL database port to use. - * - **adapter**: either `'PDO_MYSQL'` or `'MYSQLI'` + * - **adapter**: either `'PDO\MYSQL'` or `'MYSQLI'` * - **type**: The MySQL engine to use, for instance 'InnoDB' */ Piwik::postEvent('Db.getDatabaseConfig', array(&$dbConfig)); @@ -338,7 +338,7 @@ class Db $tables = array($tables); } - return self::query("DROP TABLE " . implode(',', $tables)); + return self::query("DROP TABLE `" . implode('`,`', $tables) . "`"); } /** @@ -358,7 +358,7 @@ class Db */ static public function getColumnNamesFromTable($table) { - $columns = self::fetchAll("SHOW COLUMNS FROM " . $table); + $columns = self::fetchAll("SHOW COLUMNS FROM `" . $table . "`"); $columnNames = array(); foreach ($columns as $column) { diff --git a/core/Db/BatchInsert.php b/core/Db/BatchInsert.php index f8325c0209..c3476438cf 100644 --- a/core/Db/BatchInsert.php +++ b/core/Db/BatchInsert.php @@ -168,7 +168,7 @@ class BatchInsert /* * Second attempt: using the LOCAL keyword means the client reads the file and sends it to the server; - * the LOCAL keyword may trigger a known PHP PDO_MYSQL bug when MySQL not built with --enable-local-infile + * the LOCAL keyword may trigger a known PHP PDO\MYSQL bug when MySQL not built with --enable-local-infile * @see http://bugs.php.net/bug.php?id=54158 */ $openBaseDir = ini_get('open_basedir'); diff --git a/core/Db/Schema.php b/core/Db/Schema.php index 6bcb81eaf1..c54389fd75 100644 --- a/core/Db/Schema.php +++ b/core/Db/Schema.php @@ -77,6 +77,7 @@ class Schema extends Singleton $adapterName = strtoupper($adapterName); switch ($adapterName) { + case 'PDO\MYSQL': case 'PDO_MYSQL': case 'MYSQLI': $adapterName = 'MYSQL'; diff --git a/core/Db/Schema/Mysql.php b/core/Db/Schema/Mysql.php index 6bd5723720..80356c1794 100644 --- a/core/Db/Schema/Mysql.php +++ b/core/Db/Schema/Mysql.php @@ -232,7 +232,7 @@ class Mysql implements SchemaInterface ", 'session' => "CREATE TABLE {$prefixTables}session ( - id CHAR(32) NOT NULL, + id VARCHAR( 255 ) NOT NULL, modified INTEGER, lifetime INTEGER, data TEXT, diff --git a/core/FrontController.php b/core/FrontController.php index 2861e3cb0b..a06a08db9f 100644 --- a/core/FrontController.php +++ b/core/FrontController.php @@ -86,6 +86,7 @@ class FrontController extends Singleton $result = $this->doDispatch($module, $action, $parameters); return $result; } catch (NoAccessException $exception) { + Log::debug($exception); /** * Triggered when a user with insufficient access permissions tries to view some resource. @@ -216,9 +217,9 @@ class FrontController extends Singleton // in tracker mode Piwik\Tracker\Db\Pdo\Mysql does currently not implement profiling Profiler::displayDbProfileReport(); Profiler::printQueryCount(); - Log::debug(Registry::get('timer')); } } catch (Exception $e) { + Log::verbose($e); } } @@ -262,6 +263,7 @@ class FrontController extends Singleton try { Config::getInstance()->database; // access property to check if the local file exists } catch (Exception $exception) { + Log::debug($exception); /** * Triggered when the configuration file cannot be found or read, which usually @@ -324,25 +326,51 @@ class FrontController extends Singleton throw $exceptionToThrow; } + // try to connect to the database try { Db::createDatabaseObject(); - Option::get('TestingIfDatabaseConnectionWorked'); - + Db::fetchAll("SELECT DATABASE()"); } catch (Exception $exception) { if (self::shouldRethrowException()) { throw $exception; } + Log::debug($exception); + /** - * Triggered if the INI config file has the incorrect format or if certain required configuration - * options are absent. - * - * This event can be used to start the installation process or to display a custom error message. - * + * Triggered when Piwik cannot connect to the database. + * + * This event can be used to start the installation process or to display a custom error + * message. + * * @param Exception $exception The exception thrown from creating and testing the database * connection. */ + Piwik::postEvent('Db.cannotConnectToDb', array($exception), $pending = true); + + throw $exception; + } + + // try to get an option (to check if data can be queried) + try { + Option::get('TestingIfDatabaseConnectionWorked'); + } catch (Exception $exception) { + if (self::shouldRethrowException()) { + throw $exception; + } + + Log::debug($exception); + + /** + * Triggered when Piwik cannot access database data. + * + * This event can be used to start the installation process or to display a custom error + * message. + * + * @param Exception $exception The exception thrown from trying to get an option value. + */ Piwik::postEvent('Config.badConfigurationFile', array($exception), $pending = true); + throw $exception; } diff --git a/core/Log.php b/core/Log.php index 6a9ebefc57..7d9e501ddf 100644 --- a/core/Log.php +++ b/core/Log.php @@ -373,6 +373,12 @@ class Log extends Singleton $this->currentLogLevel = $logLevel; } + + public function getLogLevel() + { + return $this->currentLogLevel; + } + public function customLogToFileForDebuggingIfYouStillSeeThisHereRemoveIt($message, $addTrace = true) { if ($addTrace) { diff --git a/core/Mail.php b/core/Mail.php index 8bbb581dd5..d26b08b154 100644 --- a/core/Mail.php +++ b/core/Mail.php @@ -50,20 +50,25 @@ class Mail extends Zend_Mail */ public function setFrom($email, $name = null) { - $hostname = Config::getInstance()->mail['defaultHostnameIfEmpty']; - $piwikHost = Url::getCurrentHost($hostname); + return parent::setFrom( + $this->parseDomainPlaceholderAsPiwikHostName($email), + $name + ); + } - // If known Piwik URL, use it instead of "localhost" - $piwikUrl = SettingsPiwik::getPiwikUrl(); - $url = parse_url($piwikUrl); - if (isset($url['host']) - && $url['host'] != 'localhost' - && $url['host'] != '127.0.0.1' - ) { - $piwikHost = $url['host']; - } - $email = str_replace('{DOMAIN}', $piwikHost, $email); - return parent::setFrom($email, $name); + /** + * Set Reply-To Header + * + * @param string $email + * @param null|string $name + * @return Zend_Mail + */ + public function setReplyTo($email, $name = null) + { + return parent::setReplyTo( + $this->parseDomainPlaceholderAsPiwikHostName($email), + $name + ); } /** @@ -100,4 +105,32 @@ class Mail extends Zend_Mail return parent::send($transport); } } + + /** + * @param string $email + * @return string + */ + protected function parseDomainPlaceholderAsPiwikHostName($email) + { + $hostname = Config::getInstance()->mail['defaultHostnameIfEmpty']; + $piwikHost = Url::getCurrentHost($hostname); + + // If known Piwik URL, use it instead of "localhost" + $piwikUrl = SettingsPiwik::getPiwikUrl(); + $url = parse_url($piwikUrl); + if ($this->isHostDefinedAndNotLocal($url)) { + $piwikHost = $url['host']; + } + + return str_replace('{DOMAIN}', $piwikHost, $email); + } + + /** + * @param array $url + * @return bool + */ + protected function isHostDefinedAndNotLocal($url) + { + return isset($url['host']) && !in_array($url['host'], array('localhost', '127.0.0.1'), true); + } } diff --git a/core/Period/Factory.php b/core/Period/Factory.php index 996e2e792a..11d5203ab7 100644 --- a/core/Period/Factory.php +++ b/core/Period/Factory.php @@ -23,16 +23,18 @@ class Factory * * @param string $period `"day"`, `"week"`, `"month"`, `"year"`, `"range"`. * @param Date|string $date A date within the period or the range of dates. + * @param Date|string $timezone Optional timezone that will be used only when $period is 'range' or $date is 'last|previous' * @throws Exception If `$strPeriod` is invalid. * @return \Piwik\Period */ - static public function build($period, $date) + static public function build($period, $date, $timezone = 'UTC') { self::checkPeriodIsEnabled($period); if (is_string($date)) { - if (Period::isMultiplePeriod($date, $period) || $period == 'range') { - return new Range($period, $date); + if (Period::isMultiplePeriod($date, $period) + || $period == 'range') { + return new Range($period, $date, $timezone); } $date = Date::factory($date); } diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php index 0703d7dac5..67f3355ce8 100644 --- a/core/Plugin/Manager.php +++ b/core/Plugin/Manager.php @@ -100,9 +100,6 @@ class Manager extends Singleton { $pluginsToLoad = Config::getInstance()->Plugins['Plugins']; $pluginsToLoad = array_diff($pluginsToLoad, Tracker::getPluginsNotToLoad()); - if(defined('PIWIK_TEST_MODE')) { - $pluginsToLoad = array_intersect($pluginsToLoad, $this->getPluginsToLoadDuringTests()); - } $this->loadPlugins($pluginsToLoad); } @@ -118,62 +115,11 @@ class Manager extends Singleton } $pluginsTracker = array_diff($pluginsTracker, Tracker::getPluginsNotToLoad()); - if(defined('PIWIK_TEST_MODE')) { - $pluginsTracker = array_intersect($pluginsTracker, $this->getPluginsToLoadDuringTests()); - } $this->doNotLoadAlwaysActivatedPlugins(); $this->loadPlugins($pluginsTracker); return $pluginsTracker; } - public function getPluginsToLoadDuringTests() - { - $toLoad = array(); - - $loadStandalonePluginsDuringTests = @Config::getInstance()->DebugTests['enable_load_standalone_plugins_during_tests']; - - foreach($this->readPluginsDirectory() as $plugin) { - $forceDisable = array( - 'ExampleVisualization', // adds an icon - 'LoginHttpAuth', // other Login plugins would conflict - ); - if(in_array($plugin, $forceDisable)) { - continue; - } - - // Load all default plugins - $isPluginBundledWithCore = $this->isPluginBundledWithCore($plugin); - - // Load plugins from submodules - $isPluginOfficiallySupported = $this->isPluginOfficialAndNotBundledWithCore($plugin); - - // Also load plugins which are Git repositories (eg. being developed) - $isPluginHasGitRepository = file_exists( PIWIK_INCLUDE_PATH . '/plugins/' . $plugin . '/.git/config'); - - $loadPlugin = $isPluginBundledWithCore || $isPluginOfficiallySupported; - - if($loadStandalonePluginsDuringTests) { - $loadPlugin = $loadPlugin || $isPluginHasGitRepository; - } else { - $loadPlugin = $loadPlugin && !$isPluginHasGitRepository; - } - - // Do not enable other Themes - $disabledThemes = $this->coreThemesDisabledByDefault; - - // PleineLune is officially supported, yet we don't want to enable another theme in tests (we test for Morpheus) - $disabledThemes[] = "PleineLune"; - - $isThemeDisabled = in_array($plugin, $disabledThemes); - - $loadPlugin = $loadPlugin && !$isThemeDisabled; - if($loadPlugin) { - $toLoad[] = $plugin; - } - } - return $toLoad; - } - public function getCorePluginsDisabledByDefault() { return array_merge( $this->corePluginsDisabledByDefault, $this->coreThemesDisabledByDefault); diff --git a/core/Profiler.php b/core/Profiler.php index bcbf67019c..e3a62f7049 100644 --- a/core/Profiler.php +++ b/core/Profiler.php @@ -52,7 +52,8 @@ class Profiler $profiler = Db::get()->getProfiler(); if (!$profiler->getEnabled()) { - throw new \Exception("To display the profiler you should enable enable_sql_profiler on your config/config.ini.php file"); + // To display the profiler you should enable enable_sql_profiler on your config/config.ini.php file + return; } $infoIndexedByQuery = array(); @@ -133,7 +134,9 @@ class Profiler { $totalTime = self::getDbElapsedSecs(); $queryCount = Profiler::getQueryCount(); - Log::debug(sprintf("Total queries = %d (total sql time = %.2fs)", $queryCount, $totalTime)); + if($queryCount > 0) { + Log::debug(sprintf("Total queries = %d (total sql time = %.2fs)", $queryCount, $totalTime)); + } } /** diff --git a/core/Session/SaveHandler/DbTable.php b/core/Session/SaveHandler/DbTable.php index 0b91f4c366..249faca6e1 100644 --- a/core/Session/SaveHandler/DbTable.php +++ b/core/Session/SaveHandler/DbTable.php @@ -78,8 +78,9 @@ class DbTable implements Zend_Session_SaveHandler_Interface . ' AND ' . $this->config['modifiedColumn'] . ' + ' . $this->config['lifetimeColumn'] . ' >= ?'; $result = Db::get()->fetchOne($sql, array($id, time())); - if (!$result) + if (!$result) { $result = ''; + } return $result; } diff --git a/core/SettingsPiwik.php b/core/SettingsPiwik.php index f620112805..608d7c55c7 100644 --- a/core/SettingsPiwik.php +++ b/core/SettingsPiwik.php @@ -191,7 +191,7 @@ class SettingsPiwik */ public static function isPiwikInstalled() { - $config = Config::getInstance()->getLocalConfigPath(); + $config = Config::getInstance()->getLocalPath(); $exists = file_exists($config); // Piwik is installed if the config file is found diff --git a/core/Tracker.php b/core/Tracker.php index 69c1a9b7e0..29973c8981 100644 --- a/core/Tracker.php +++ b/core/Tracker.php @@ -559,7 +559,7 @@ class Tracker * database. * - **dbname**: The name of the Piwik MySQL database. * - **port**: The MySQL database port to use. - * - **adapter**: either `'PDO_MYSQL'` or `'MYSQLI'` + * - **adapter**: either `'PDO\MYSQL'` or `'MYSQLI'` * - **type**: The MySQL engine to use, for instance 'InnoDB' */ Piwik::postEvent('Tracker.getDatabaseConfig', array(&$configDb)); @@ -700,7 +700,7 @@ class Tracker try { $pluginsTracker = \Piwik\Plugin\Manager::getInstance()->loadTrackerPlugins(); - Common::printDebug("Loading plugins: { " . implode(",", $pluginsTracker) . " }"); + Common::printDebug("Loading plugins: { " . implode(", ", $pluginsTracker) . " }"); } catch (Exception $e) { Common::printDebug("ERROR: " . $e->getMessage()); } diff --git a/core/Tracker/Visit.php b/core/Tracker/Visit.php index c391c0484d..bada2f794a 100644 --- a/core/Tracker/Visit.php +++ b/core/Tracker/Visit.php @@ -271,11 +271,13 @@ class Visit implements VisitInterface protected function getTimeSpentReferrerAction() { $timeSpent = $this->request->getCurrentTimestamp() - $this->visitorInfo['visit_last_action_time']; - if ($timeSpent < 0 - || $timeSpent > Config::getInstance()->Tracker['visit_standard_length'] - ) { + if ($timeSpent < 0) { $timeSpent = 0; } + $visitStandardLength = Config::getInstance()->Tracker['visit_standard_length']; + if($timeSpent > $visitStandardLength) { + $timeSpent = $visitStandardLength; + } return $timeSpent; } diff --git a/core/Updates/2.4.0-b8.php b/core/Updates/2.4.0-b8.php new file mode 100644 index 0000000000..4df50ee0ce --- /dev/null +++ b/core/Updates/2.4.0-b8.php @@ -0,0 +1,29 @@ +<?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\Common; +use Piwik\Updater; +use Piwik\Updates; + +class Updates_2_4_0_b8 extends Updates +{ + static function getSql() + { + return array( + "ALTER TABLE `" . Common::prefixTable('session') + . "` CHANGE `id` `id` VARCHAR( 255 ) NOT NULL " => false, + ); + } + + static function update() + { + Updater::updateDatabase(__FILE__, self::getSql()); + } +} diff --git a/core/Version.php b/core/Version.php index afdc38f7b5..b11fa037d4 100644 --- a/core/Version.php +++ b/core/Version.php @@ -21,5 +21,5 @@ final class Version * The current Piwik version. * @var string */ - const VERSION = '2.4.0-b7'; + const VERSION = '2.4.0'; } diff --git a/core/ViewDataTable/Config.php b/core/ViewDataTable/Config.php index 383ae043c0..8fbdf85321 100644 --- a/core/ViewDataTable/Config.php +++ b/core/ViewDataTable/Config.php @@ -160,6 +160,11 @@ class Config public $show_goals = false; /** + * Controls whether the 'insights' footer icon is shown. + */ + public $show_insights = true; + + /** * Array property mapping DataTable column names with their internationalized names. * * The default value for this property is set elsewhere. It will contain translations diff --git a/core/ViewDataTable/Manager.php b/core/ViewDataTable/Manager.php index 24616ece5c..0559661d44 100644 --- a/core/ViewDataTable/Manager.php +++ b/core/ViewDataTable/Manager.php @@ -242,7 +242,9 @@ class Manager $graphViewIcons['buttons'] = array_filter($graphViewIcons['buttons']); - if (!empty($insightsViewIcons['buttons'])) { + if (!empty($insightsViewIcons['buttons']) + && $view->config->show_insights + ) { $result[] = $insightsViewIcons; } diff --git a/core/testMinimumPhpVersion.php b/core/testMinimumPhpVersion.php index 589ffbaaa6..7f03b02479 100644 --- a/core/testMinimumPhpVersion.php +++ b/core/testMinimumPhpVersion.php @@ -50,7 +50,8 @@ if ($minimumPhpInvalid) { To use Piwik, please ask your web host to install php5-json or install it yourself, for example on debian system: <code>sudo apt-get install php5-json</code>. <br/>Then restart your webserver and refresh this page.</p>"; } - if (!file_exists(PIWIK_INCLUDE_PATH . '/vendor/autoload.php') && !file_exists(PIWIK_INCLUDE_PATH . '/../../autoload.php')) { + if (!file_exists(PIWIK_INCLUDE_PATH . '/vendor/autoload.php') + && !file_exists(PIWIK_INCLUDE_PATH . '/../../autoload.php')) { $composerInstall = "In the piwik directory, run in the command line the following (eg. via ssh): \n\n" . "<pre> curl -sS https://getcomposer.org/installer | php \n\n php composer.phar install\n\n</pre> "; if (DIRECTORY_SEPARATOR === '\\' /* ::isWindows() */) { @@ -61,8 +62,9 @@ if ($minimumPhpInvalid) { "<br/>" . $composerInstall. " This will initialize composer for Piwik and download libraries we use in vendor/* directory.". "\n\n<br/><br/>Then reload this page to access your analytics reports." . + "\n\n<br/><br/>For more information check out this FAQ: <a href='http://piwik.org/faq/how-to-install/faq_18271/' target='_blank'>How do I use Piwik from the Git repository?</a>." . "\n\n<br/><br/>Note: if for some reasons you cannot install composer, instead install the latest Piwik release from ". - "<a href='http://builds.piwik.org/piwik-latest.zip'>builds.piwik.org</a>.</p>"; + "<a href='http://builds.piwik.org/piwik.zip'>builds.piwik.org</a>.</p>"; } } diff --git a/js/piwik.js b/js/piwik.js index 9fe9c4b333..a7ef9f24fc 100644 --- a/js/piwik.js +++ b/js/piwik.js @@ -408,13 +408,14 @@ if (typeof JSON2 !== 'object') { exec, res, width, height, devicePixelRatio, pdf, qt, realp, wma, dir, fla, java, gears, ag, - hook, getHook, getVisitorId, getVisitorInfo, setSiteId, setTrackerUrl, appendToTrackingUrl, getRequest, + hook, getHook, getVisitorId, getVisitorInfo, setSiteId, setTrackerUrl, appendToTrackingUrl, getRequest, addPlugin, getAttributionInfo, getAttributionCampaignName, getAttributionCampaignKeyword, getAttributionReferrerTimestamp, getAttributionReferrerUrl, setCustomData, getCustomData, + setCustomRequestProcessing, setCustomVariable, getCustomVariable, deleteCustomVariable, setDownloadExtensions, addDownloadExtensions, - setDomains, setIgnoreClasses, setRequestMethod, + setDomains, setIgnoreClasses, setRequestMethod, setRequestContentType, setReferrerUrl, setCustomUrl, setAPIUrl, setDocumentTitle, setDownloadClasses, setLinkClasses, setCampaignNameKey, setCampaignKeywordKey, @@ -1077,8 +1078,15 @@ if (typeof Piwik !== 'object') { enableJSErrorTracking = false, + defaultRequestMethod = 'GET', + // Request method (GET or POST) - configRequestMethod = 'GET', + configRequestMethod = defaultRequestMethod, + + defaultRequestContentType = 'application/x-www-form-urlencoded; charset=UTF-8', + + // Request Content-Type header value; applicable when POST request method is used for submitting tracking events + configRequestContentType = defaultRequestContentType, // Tracker URL configTrackerUrl = trackerUrl || '', @@ -1086,7 +1094,7 @@ if (typeof Piwik !== 'object') { // API URL (only set if it differs from the Tracker URL) configApiUrl = '', - // This string is appended to the Tracker URL Request (eg. to send data that is not handled by the existin setters/getters) + // This string is appended to the Tracker URL Request (eg. to send data that is not handled by the existing setters/getters) configAppendToTrackingUrl = '', // Site ID @@ -1175,6 +1183,8 @@ if (typeof Piwik !== 'object') { // Custom Variables read from cookie, scope "visit" customVariables = false, + configCustomRequestContentProcessing, + // Custom Variables, scope "page" customVariablesPage = {}, @@ -1367,9 +1377,7 @@ if (typeof Piwik !== 'object') { } }; - // see XMLHttpRequest Level 2 spec, section 4.7.2 for invalid headers - // @link http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); + xhr.setRequestHeader('Content-Type', configRequestContentType); xhr.send(request); } catch (e) { @@ -1824,6 +1832,11 @@ if (typeof Piwik !== 'object') { if (configAppendToTrackingUrl.length) { request += '&' + configAppendToTrackingUrl; } + + if (isFunction(configCustomRequestContentProcessing)) { + request = configCustomRequestContentProcessing(request); + } + return request; } @@ -2436,6 +2449,27 @@ if (typeof Piwik !== 'object') { }, /** + * Configure function with custom request content processing logic. + * It gets called after request content in form of query parameters string has been prepared and before request content gets sent. + * + * Examples: + * tracker.setCustomRequestProcessing(function(request){ + * var pairs = request.split('&'); + * var result = {}; + * pairs.forEach(function(pair) { + * pair = pair.split('='); + * result[pair[0]] = decodeURIComponent(pair[1] || ''); + * }); + * return JSON.stringify(result); + * }); + * + * @param function customRequestContentProcessingLogic + */ + setCustomRequestProcessing: function (customRequestContentProcessingLogic) { + configCustomRequestContentProcessing = customRequestContentProcessingLogic; + }, + + /** * Appends the specified query string to the piwik.php?... Tracking API URL * * @param string queryString eg. 'lat=140&long=100' @@ -2456,6 +2490,18 @@ if (typeof Piwik !== 'object') { }, /** + * Add plugin defined by a name and a callback function. + * The callback function will be called whenever a tracking request is sent. + * This can be used to append data to the tracking request, or execute other custom logic. + * + * @param string pluginName + * @param Object pluginObj + */ + addPlugin: function (pluginName, pluginObj) { + plugins[pluginName] = pluginObj; + }, + + /** * Set custom variable within this visit * * @param int index @@ -2588,7 +2634,18 @@ if (typeof Piwik !== 'object') { * @param string method GET or POST; default is GET */ setRequestMethod: function (method) { - configRequestMethod = method || 'GET'; + configRequestMethod = method || defaultRequestMethod; + }, + + /** + * Set request Content-Type header value, applicable when POST request method is used for submitting tracking events. + * See XMLHttpRequest Level 2 spec, section 4.7.2 for invalid headers + * @link http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html + * + * @param string requestContentType; default is 'application/x-www-form-urlencoded; charset=UTF-8' + */ + setRequestContentType: function (requestContentType) { + configRequestContentType = requestContentType || defaultRequestContentType; }, /** @@ -2986,8 +3043,9 @@ if (typeof Piwik !== 'object') { /** * Log special pageview: Internal search * - * @param string customTitle - * @param mixed customData + * @param string keyword + * @param string category + * @param int resultsCount */ trackSiteSearch: function (keyword, category, resultsCount) { trackCallback(function () { diff --git a/lang/cs.json b/lang/cs.json index 3e5612f111..c8853a2bdb 100644 --- a/lang/cs.json +++ b/lang/cs.json @@ -12,25 +12,41 @@ "ColumnNoResultKeyword": "Hledané klÃÄové slovo nebylo nalezeno", "ColumnPageName": "Jméno stránky", "ColumnPagesPerSearch": "Stránka hledaných výsledků", - "ColumnPagesPerSearchDocumentation": "NávÅ¡tÄ›vnÃk hledal na VaÅ¡Ã strance a obÄas klikla na \"DalÅ¡Ã\" k zobrazenà vÃce výsledků. Toto je průmÄ›rné ÄÃslo stránky s výsledky vyhledávánà zobrazené na toto klÃÄové slovo.", + "ColumnPagesPerSearchDocumentation": "NávÅ¡tÄ›vnÃk hledal na VaÅ¡Ã stránce a obÄas klikl na \"DalÅ¡Ã\" k zobrazenà vÃce výsledků. Toto je průmÄ›rné ÄÃslo stránky s výsledky vyhledávánà zobrazené na toto klÃÄové slovo.", "ColumnPageURL": "URL stránky", "ColumnSearchCategory": "Hledánà kategorie", "ColumnSearches": "VyhledávánÃ", - "ColumnSearchesDocumentation": "PoÄet uživatelů, kteřà hledali tyto klÃÄová slova ve vyhledavaÄi na VaÅ¡ich stránkách.", + "ColumnSearchesDocumentation": "PoÄet uživatelů, kteřà hledali tato klÃÄová slova ve vyhledávaÄi na VaÅ¡ich stránkách.", "ColumnSearchExits": "% Nalezených výstupů", - "ColumnSearchExitsDocumentation": "Procento návÅ¡tÄ›v, kteřà opustitli stránku po nalezenà tohoto klÃÄového slova pomocà vyhledavaÄe.", + "ColumnSearchExitsDocumentation": "Procento návÅ¡tÄ›v, které opustily stránku po nalezenà tohoto klÃÄového slova pomocà vyhledávaÄe.", "ColumnSearchResultsCount": "PoÄet nalezených výsledků", "ColumnSiteSearchKeywords": "UnikátnÃch klÃÄových slov", "ColumnUniqueClicks": "UnikátnÃch prokliků", - "ColumnUniqueClicksDocumentation": "PoÄet návÅ¡tÄ›v které klikli na tento odkaz. Pokud bylo na odkaz kliknuto vÃcekrát pÅ™i jedné návÅ¡tÄ›vÄ›, je kliknutà zapoÄÃtáno jen jednou.", + "ColumnUniqueClicksDocumentation": "PoÄet návÅ¡tÄ›v, které klikly na tento odkaz. Pokud bylo na odkaz kliknuto vÃcekrát pÅ™i jedné návÅ¡tÄ›vÄ›, je kliknutà zapoÄÃtáno jen jednou.", "ColumnUniqueDownloads": "UnikátnÃch staženÃ", "ColumnUniqueOutlinks": "Unikátnà externà odkazy", "DownloadsReportDocumentation": "V tomto hlášenà můžete vidÄ›t soubory, které byly staženy. %s Které Piwik poÄÃtá jako stažené jsou jen ty, na které bylo kliknuto. Bez ohledu na to, jestli bylo staženà dokonÄeno nebo pÅ™eruÅ¡eno. To Piwik neumà zjistit.", - "EntryPageTitles": "Vstupnà titulky stránky", + "EntryPagesReportDocumentation": "Toto hlášenà obsahuje informace o vstupnÃch stránkách, které byly použity v daném obdobÃ. Vstupnà stránka je prvnà stránka, kterou uživatel zobrazà pÅ™i své návÅ¡tÄ›vÄ›. %s URL vstupnÃch stránek jsou zobrazeny jako strom složek.", + "EntryPageTitles": "Titulky vstupnÃch stránek", + "EntryPageTitlesReportDocumentation": "Toto hlášenà obsahuje informace o titulcÃch vstupnÃch stránek, které byly použity v daném obdobÃ.", + "ExitPagesReportDocumentation": "Toto hlášenà obsahuje informace o výstupnÃch stránkách, které se vyskytly v daném obdobÃ. Výstupnà stránka je poslednà stránkou, kterou uživatel zobrazà bÄ›hem své návÅ¡tÄ›vy. %s URL výstupnÃch stránek jsou zobrazeny jako strom složek.", "ExitPageTitles": "Výstupnà titulky stránky", + "ExitPageTitlesReportDocumentation": "Toto hlášenà obsahuje informace o titulcÃch výstupnÃch stránek za dané obdobÃ.", + "LearnMoreAboutSiteSearchLink": "ZjistÄ›te vÃce o sledovánà toho, jak návÅ¡tÄ›vnÃci použÃvaà váš vyhledávaÄ.", + "OneSearch": "1 VyhledávánÃ", + "OutlinkDocumentation": "Externà odkaz je odkaz, který vede z vaÅ¡ich stránek na jinou domén.", + "OutlinksReportDocumentation": "Toto hlášenà zobrazuje hyerarchický seznam URL externÃch odkazů, na které vaÅ¡i návÅ¡tÄ›vnÃci klikli.", + "PagesReportDocumentation": "Toto hlášenà obsahuje informace o URL navÅ¡tÃvených. %s Tabulka je organizována hyerarchicky jako strom složek.", + "PageTitlesReportDocumentation": "Toto hlášenà obsahuje informace o titulcÃch navÅ¡tÃvených stránek. %s Titulek je HTML tag %s, který vÄ›tÅ¡ina prohlÞeÄů zobrazuje v titulku okna.", "PageUrls": "URL stránky", "PluginDescription": "Hlásà zobrazenà stránek, odchozà odkazy a staženÃ. Zaznamenávánà odchozÃch stránek a stahovánà je automatické!", + "SiteSearchCategories1": "Toto hlášenà shrnuje kategorie, které návÅ¡tÄ›vnÃci vybrali pÅ™i vyhledávánà na stránkách.", + "SiteSearchCategories2": "NapÅ™Ãklad elektronické obchody mÃvajà filtr kategoriÃ, aby mohli uzákaznÃci zvolit, ve které kategorii bude provedeno hledánÃ.", + "SiteSearchFollowingPagesDoc": "Když návÅ¡tÄ›vnÃci hledajà na vaÅ¡ich stránkách, snažà se nalézt urÄitou stránku, obhsa, produkt, nebo službu. Toto hlášenà zobrazuje stránky, na které bylo klikáno nejÄastÄ›ji po internÃm vyhledávánÃ. Jinak Å™eÄeno, jedná se o stránky, které byly nejvÃce hledány návÅ¡tÄ›vnÃky, kteřà už byli na vaÅ¡ich stránkách.", + "SiteSearchIntro": "Sledovánà vyhledávánà na vaÅ¡ich stránkách je velmi efektivnà způsob, jak se dozvÄ›dÄ›t vÃce o tom, co vaÅ¡i návÅ¡tÄ›vnÃci na stránkách hledajÃ, jaký obsah by je mohl zajÃmat, jaké produkty by si mohli chtÃt koupit, a jak jim obecnÄ› zpÅ™Ãjemnit pobyt na vaÅ¡ich stránkách.", "SiteSearchKeyword": "KlÃÄová slova (VyhledávánÃ)", + "SiteSearchKeywordsDocumentation": "Toto hlášenà shrnuje klÃÄová slova, která byla použita návÅ¡tÄ›vnÃky pÅ™i hledánà pomocà internÃho vyhledávaÄe.", + "SiteSearchKeywordsNoResultDocumentation": "Toto hlášenà shrnuje klÃÄová slova, pro která nebyl vrácen žádný výsledek. Možná by bylo možné vylepÅ¡it vyhledávacà algoritmus, nebo návÅ¡tÄ›vnÃci hledajà nÄ›co, co (zatÃm) nenà na vaÅ¡ich stránkách?", "SubmenuPagesEntry": "Vstupnà stránky", "SubmenuPagesExit": "Odchozà stránky", "SubmenuPageTitles": "Titulky stránek", @@ -59,9 +75,12 @@ "HideAnnotationsFor": "Skrýt anotace %s...", "IconDesc": "Zobrazit poznámky k tomuto Äasovému rozpÄ›tÃ.", "IconDescHideNotes": "Skrýt poznámky zvoleného rozsahu.", + "InlineQuickHelp": "Můžete vytvoÅ™it anotace k důležitým událostem, jako je tÅ™eba nový pÅ™ÃspÄ›vek na blogu, redesign stránek, nebo cokoliv, co považujete za důležité.", "LoginToAnnotate": "PÅ™ihlásit se pro vytvoÅ™enà anotace.", "NoAnnotations": "Nejsou zde žádné anotace k tomuto Äasovému rozpÄ›tÃ.", - "ViewAndAddAnnotations": "Zobrazit a pÅ™idat anotace k %s..." + "PluginDescription": "Dovoluje vám pÅ™idat poznámky k jednotlivým dnům (k oznaÄenà zmÄ›n na stránkách, poznamenánà analýz dat, které lze sdÃlet s kolegy...). AnotovánÃm dat zajistÃte, že budete v budoucnu vÄ›dÄ›t, proÄ data vypadajà tak, jak vypadajÃ.", + "ViewAndAddAnnotations": "Zobrazit a pÅ™idat anotace k %s...", + "YouCannotModifyThisNote": "Nemůžete upravit tuto anotaci, protože jste ji nevytvoÅ™il(a) a ani nemáte administrátorský pÅ™Ãstup k této stránce." }, "API": { "GenerateVisits": "Pokud pro dneÅ¡ek nemáte data, můžete je nejprve vygenerovat pomocà zásuvného modulu %s. Můžete povolit zásuvný modul %s a poté kliknout na 'Generátor návÅ¡tÄ›v' v menu v administraÄnà Äásti Piwiku", @@ -76,36 +95,75 @@ }, "CoreAdminHome": { "Administration": "Administrace", + "ArchivingSettings": "Archivovánà nastavenÃ", "BrandingSettings": "OznaÄenà nastavenÃ", + "CheckReleaseGetVersion": "PÅ™i kontrole nových verzà Piwiku vždy zÃskat", "ClickHereToOptIn": "KliknÄ›te zde pro pÅ™ihlášenÃ.", "ClickHereToOptOut": "KliknÄ›te zde odhlásit.", + "CustomLogoFeedbackInfo": "Pokud pÅ™izpůsobÃte logo Piwiku, možná by vás zajÃmalo, jak skrýt odkaz %s v hornÃm menu, Pokud to chcete provést, zakažte plugin zpÄ›tné vazby na stránce %sSpravovat zásuvné moduly%s.", + "CustomLogoHelpText": "Můžete pÅ™izpůsobit logo Piwiku, které bude zobrazeno v uživatelském rozhranà a v e-mailových hlášenÃch.", "EmailServerSettings": "Nastavenà server E-mailu", + "FaviconUpload": "Vyberte favicon, kterou chcete nahrát", "ForBetaTestersOnly": "Pouze pro beta testery", "ImageTracking": "SledovánÃm obrázkem", "ImageTrackingIntro1": "Pokud má návÅ¡tÄ›vnÃk vypnutý JavaScript nebo nemůže být JavaScript použit. Můžete využÃt obrázku k měřenà a sledovánà VaÅ¡Ã návÅ¡tÄ›vnosti.", + "ImageTrackingIntro2": "NÞe vygenerujte odkaz a vložte vygenerované HTML do kódu stránky. Pokud ho použÃváte jako nouzové Å™eÅ¡enà mÃsto javascriptového sledovánÃ, můžete ho obalit do tagů %1$s.", + "ImageTrackingIntro3": "VÅ¡echny možnosti, které lze použÃt u obrázkového sledovacÃho odkazu najdete v %1$sdokumentaci sledovacÃho API%2$s.", "ImageTrackingLink": "Odkaz pro sledovánà obrázkem", "ImportingServerLogs": "Důležitá serverová hlášenÃ.", + "ImportingServerLogsDesc": "Alternativou ke sledovánà návÅ¡tÄ›vnÃků pomocà javascriptu nebo obrázku je neustálý import logu web serveru. VÃce informacà najdeve v dokumentaci %1$sanalýzy log souborů%2$s.", + "InvalidPluginsYouCanUninstall": "Tyto zásovné moduly můžete aktualizovat nebo odinstalovat na stránce %1$ssprávy zásuvných modulů%2$s.", "JavaScriptTracking": "Sledovánà javascriptem", "JSTracking_CampaignKwdParam": "KlÃÄové slovo kampanÄ›", "JSTracking_CampaignNameParam": "Název kampanÄ›", + "JSTracking_CustomCampaignQueryParam": "Pro jméno kampanÄ› a klÃÄové slovo použÃt vlastnà parametry dotazu", + "JSTracking_CustomCampaignQueryParamDesc": "Poznámka: %1$sPiwik automaticky detekuje parametry pro Google analitics.%2$s", + "JSTracking_EnableDoNotTrack": "Pocolit detekci klientů s povolenou volbou \"nesledovat\"", + "JSTracking_EnableDoNotTrack_AlreadyEnabled": "Poznámka: Serverová detekce volby \"nesledovat\" byla povolena, takže tato volba nebude mÃt vliv.", + "JSTracking_EnableDoNotTrackDesc": "Sledovacà požadavky nebudou zaslány, pokud si to návÅ¡tÄ›vnÃci nepÅ™ejÃ.", + "JSTracking_GroupPageTitlesByDomain": "PÅ™ed titulek stránky pÅ™i sledovánà pÅ™ipojit doménu stránek", + "JSTracking_MergeAliases": "Ve \"hlášenà externÃch odkazů\" skrýt kliknutà na známé aliasy", + "JSTracking_MergeAliasesDesc": "Takže kliky na URL aliasů (napÅ™. %s) nebudou poÄÃtány jako externà odkazy.", + "JSTracking_MergeSubdomains": "Sledovat vÅ¡echny návÅ¡tÄ›vnÃky na vÅ¡ech subdoménách", "JSTracking_MergeSubdomainsDesc": "Pokud uživatel navÅ¡tÃvà %1$s a %2$s, budou zaznamenáni jako unikátnà uživatelé.", + "JSTracking_PageCustomVars": "Sledovat vlastnà promÄ›nnou pro každé zobrazenà stránky", "JSTracking_PageCustomVarsDesc": "NapÅ™Ãklad promÄ›nná s názvem 'Kategorie' a hodnotou \"White papers\"", + "JSTracking_VisitorCustomVars": "Sledovat vlastnà promÄ›nné pro tohoto návÅ¡tÄ›vnÃka", + "JSTracking_VisitorCustomVarsDesc": "NapÅ™Ãklad se jménem \"Typ\" a hodnotou \"zákaznÃk\".", + "JSTrackingIntro1": "NávÅ¡tÄ›vnÃky vaÅ¡ich stránekek můžete sledovat mnoha způsoby. DoporuÄená metoda je pomocà javascriptu. Aby to bylo možné, každá z vaÅ¡ich stránek musà mÃt javascriptový kód, který můžete vygenerovat zde,", + "JSTrackingIntro2": "Až budete mÃt sledovacà javascriptový kód, vložte ho do vÅ¡ech stránek, které majà být Piwikem sledovány.", "LatestBetaRelease": "Poslednà testovacà verze", "LatestStableRelease": "Poslednà stabilnà verze", "LogoUpload": "Vyberte logotyp", + "LogoUploadHelp": "ProsÃm, nahrajte soubor v jednom z následujÃcÃch formátů: %s, s minimálnà výškou %s pixelů.", "MenuDiagnostic": "Diagnostika", "MenuGeneralSettings": "Hlavnà nastavenÃ", "MenuManage": "Správa", + "OptOutComplete": "VylouÄenà hotovo. VaÅ¡e návÅ¡tÄ›vy nebudou sledovány nástrojem webové analýzy.", + "OptOutCompleteBis": "Poznámka: pokud smažete cookie, odstranÃte vyluÄovacà cookie nebo zmmÄ›nÃte poÄÃtaÄ nebo prohlÞeÄ, budete muset provést proceduru vylouÄenà znovu.", + "OptOutExplanation": "Piwik se zaměřuje na poskytovánà soukromà na internetu. Pokud chcete dát svým návÅ¡tÄ›vnÃkům možnost, aby byli vylouÄeni z webové analýzy Piwikem, můžete na nÄ›jakou stránku (tÅ™eba stránku o soukromÃ) umÃstit následujÃcà HTML kód.", + "OptOutExplanationBis": "Tento kód zobrazà iframe s odkazem, který nastavà u návÅ¡tÄ›vnÃka vynechávacà cookie. %s KliknÄ›te zde%s pro zobrazenà obsahu iframe.", "OptOutForYourVisitors": "Piwik odhlášenà pro VaÅ¡e návÅ¡tÄ›vnÃky", "PiwikIsInstalledAt": "Piwik je nainstalován na", "PluginDescription": "AdministraÄnà Äást Piwiku", + "PluginSettingChangeNotAllowed": "Nemůžete zmÄ›nit hodnotu volby %s zásuvného modulu \"%s\"", + "PluginSettingReadNotAllowed": "Nemůžete ÄÃst hodnotu volby %s zásuvného modulu \"%s\"", "PluginSettings": "Nastavenà pluginu", + "PluginSettingsIntro": "Zde můžete zmÄ›nit nastavenà pro následujÃcà zásuvné moduly tÅ™etÃch stran:", + "PluginSettingsValueNotAllowed": "Hodnota pro pole \"%s\" zásuvného modulu \"%s\" nenà povolena", + "SendPluginUpdateCommunication": "Odeslat e-mail s upozornÄ›nÃm, když je vydána aktualizace zásuvného modulu", + "SendPluginUpdateCommunicationHelp": "Superuživatelům bude odeslán e-mail, když bude k dispozici aktualizace zásuvného modulu.", "StableReleases": "Piwik je důležitý nástroj pro měřenÃ, doporuÄujeme vždy použÃvat nejnovÄ›jÅ¡Ã vydánÃ. Pokud použÃváte nejnovÄ›jÅ¡Ã beta verzi a naÅ¡li jste chyby, prosÃme o jejich nahlášenà %spÅ™Ãmo zde %s.", "TrackAGoal": "Sledovat cÃl", "TrackingCode": "Sledovacà kód", + "TrustedHostConfirm": "Jste si jist(a), že chcete zmÄ›nit důvÄ›ryhodné jméno hostitele Piwiku?", + "TrustedHostSettings": "DůvÄ›ryhodné jméno hostitele Piwiku", + "UpdateSettings": "Aktualizovat nastavenÃ", "UseCustomLogo": "PoužÃt vlastnà logotyp", + "ValidPiwikHostname": "Platné jméno hostitele Piwiku", "WithOptionalRevenue": "volitelné hodnoty", "YouAreOptedIn": "NávÅ¡tÄ›va této stránky se aktuálnÄ› zaznamenává pomocà Piwik Wabanalyse.", + "YouAreOptedOut": "AktuálnÄ› jste vylouÄen.", "YouMayOptOut": "Zde se můžete rozhodnou, zda se smà ve VaÅ¡em prohlÞeÄi ukládat jedineÄná analytická data “ Cookies†, a zda umožnÃte provozovateli webové stránky shromažÄovat a analyzovat různé statistické údaje.", "YouMayOptOutBis": "Pokud jste se rozhodli že ne, kliknÄ›te na pÅ™iložený odkaz pro uloženà deaktivaÄnÃho Cookie ve VaÅ¡em prohlÞeÄi." }, @@ -113,17 +171,31 @@ "CategoryNoData": "V této kategorii nejsou k dispozici žádná data. Zkuste \"Zobrazit vÅ¡echny výsledky\".", "CheckForUpdates": "Zkontrolovat aktualizace", "CheckPiwikOut": "VyzkouÅ¡ejte Piwik!", + "CloseWidgetDirections": "Tento widget můžete zavÅ™Ãt kliknutÃm na ikonu X na hornà Äásti widgetu.", + "DataForThisReportHasBeenPurged": "Data pro toto hlášenà jsou starÅ¡Ã než %s mÄ›sÃců a byla odstranÄ›na.", + "DataTableExcludeAggregateRows": "Agregované řádky jsou zobrazeny %s Skrýt", + "DataTableIncludeAggregateRows": "Agregované řádky jsou skryty %s Zobrazit", "DateFormat": "%longDay% %day% %longMonth% %longYear%", "Default": "výchozÃ", "DonateCall1": "Piwik Vás nic nestojÃ, ale to neznemená, že nás vývoj nic nestojÃ.", "DonateCall2": "Piwik potÅ™ebuje VaÅ¡i podporu, aby mohl růst a prosperovat.", "DonateFormInstructions": "KliknÄ›te na posuvnÃk ke zvolenà Äástky, poté kliknÄ›te na tlaÄÃtko Subscribe.", + "ExcludeRowsWithLowPopulation": "VÅ¡echny řádky jsou zobrazeny %s VylouÄit nÃzkou populaci", + "ExternalHelp": "NápovÄ›da (otevÅ™e se v nové záložce)", + "FlattenDataTable": "Hlášenà je hierarchické %s ZploÅ¡tit", "HowMuchIsPiwikWorth": "Jak moc si cenÃte Piwiku?", + "IncludeRowsWithLowPopulation": "Řádky s nÃzkou populacà jsou skryty %s Zobrazit vÅ¡echny řádky", + "InjectedHostEmailBody": "Aoj. Dnes jsem se snažil fodzsz fo \\Piwiku a dosta jsem varovánà o neznámém ménu hostitele.", + "InjectedHostEmailSubject": "K piwiku bylo pÅ™istupováno s neznámým jménem hostitele %s", + "InjectedHostSuperUserWarning": "Piwik může být Å¡patnÄ› nakonfigurován, napÅ™Ãklad pokud byl pÅ™esunut na nový server nebo URL. Můžete %1$skliknout zde a pÅ™idat %2$s jako platné jméno hostitele Piwiku (pokud mu důvěřujete)%3$s, nebo %4$s kliknÄ›te zde%5$s pro bezpeÄný pÅ™Ãstup k Piwiku%6$s.", + "InjectedHostWarningIntro": "Nynà pÅ™istupujete k Piwiku z %1$s, ale byl nakonfigurován, aby naslouchal na následujÃcà adrese: %2$s.", "JavascriptDisabled": "MusÃte mÃt zapnutý JavaScript, jinak Piwik nezobrazÃte.<br \/> Nebo jen nenà Váš prohlÞeÄ mezi podporovanými.<br \/>Pro běžné zobrazenà zapnÄ›te JavaScript ve svém prohlÞeÄi, poté %1$szkuste znovu%2$s.<br \/>", "LongMonthFormat": "%longYear%, %longMonth%", + "LongWeekFormat": "%dayFrom% %longMonthFrom% - %dayTo% %longMonthTo% %longYearTo%", "MakeADifference": "UdÄ›lej zmÄ›nu: %1$sPÅ™ispÄ›j na vývoj%2$s nové verze Piwik 2.0", "MakeOneTimeDonation": "Provést jednorázový dar.", "NoPrivilegesAskPiwikAdmin": "Jste pÅ™ihlášen jako '%s' ale zdá se, že nemáte povolenà k nastavenà Piwik. %s Zeptejte se VaÅ¡eho Piwik administrátora (klikem na email)%s aby Vám dal 'view' pÅ™Ãstup na stránku.", + "OnlyForSuperUserAccess": "Tento widget je zobrazován pouze uživatelům se superuživatelským pÅ™Ãstupem.", "PageOf": "%1$s z %2$s", "PeriodDay": "Den", "PeriodDays": "dnů", @@ -137,6 +209,7 @@ "PluginDescription": "Struktura hlášenÃ", "ReportGeneratedOn": "Hlášenà vygenerované %s", "ReportGeneratedXAgo": "Hlášenà vygenerovanà již %s", + "SharePiwikLong": "Nazdar! Zrovna jsem naÅ¡el skvÄ›lý open source software Piwik!", "SharePiwikShort": "Piwik! Bezplatná webová analytika. Vlastni svá data.", "ShareThis": "SdÃlet", "ShortDateFormat": "%shortDay% %day% %shortMonth%", @@ -144,44 +217,122 @@ "ShortMonthFormat": "%shortMonth% %longYear%", "ShortWeekFormat": "%dayFrom% %shortMonthFrom% - %dayTo% %shortMonthTo% %shortYearTo%", "ShowJSCode": "Zobrazit JavaScriptový kód ke vloženÃ", + "SubscribeAndBecomePiwikSupporter": "PokraÄujte na zabezpeÄenou platebnà stránku (Paypal), pokud se chcete stát podpůrcem Piwiku.", "SupportPiwik": "PodpoÅ™te Piwik!", "TableNoData": "Žádna data", "ThereIsNoDataForThisReport": "Pro toto hlášenà nejsou k dispozici žádná data", + "UnFlattenDataTable": "Hlášenà je ploché %s VytvoÅ™it hierarchický", "ViewAllPiwikVideoTutorials": "Zobrazit vÅ¡echny návody Piwik", "WebAnalyticsReports": "HlášenÃ", "YouAreUsingTheLatestVersion": "PoužÃváte nejnovÄ›jÅ¡Ã verzi Piwik." }, "CorePluginsAdmin": { "ActionActivatePlugin": "Aktivovat plugin", + "ActionActivateTheme": "Aktivovat Å¡ablonu", "ActionInstall": "Instalovat", "ActionUninstall": "Odinstalovat", "Activate": "Povolit", "Activated": "Aktivován", "Active": "Povolen", "Activity": "Aktivita", + "AllowedUploadFormats": "Na této stránce můžete nahrát zásuvný modul nebo Å¡ablonu ve formátu .zip.", "AuthorHomepage": "Domovská stránka autorů", "Authors": "AutoÅ™i", + "BackToExtendPiwik": "ZppÄ›t na obchod", + "BeCarefulUsingPlugins": "Zásuvné moduly, které nejsou tvoÅ™eny týmem Piwiku musà být použÃvány opatrnÄ›: nekontrolovali jsme je.", + "BeCarefulUsingThemes": "Å ablony, které nejsou tvoÅ™eny týmem Piwiku musà být použÃvány opatrnÄ›: nekontrolovali jsme je.", + "ByDesigningOwnTheme": "VytvoÅ™enà %svlastnà šablony%s", + "ByInstallingNewPluginFromMarketplace": "InstalovánÃm %snového zásuvného modulu z obchodu%s", + "ByInstallingNewThemeFromMarketplace": "InstalovánÃm %snov éšablony z obchodu%s", + "ByWritingOwnPlugin": "%sNapsánÃm vlastnÃho zásuvného modulu%s", + "Changelog": "Protokol zmÄ›n", + "ChangeSettingsPossible": "Pro tento zásuvný modul můžete zmÄ›nit %snastavenÃ%s.b", + "CorePluginTooltip": "Jaderné zásuvné moduly nemajà verzi, protože jsou distribuovány s Piwikem.", "Deactivate": "Zakázat", "Developer": "Vývojář", + "DoMoreContactPiwikAdmins": "Pokud chcete nainstalovat nový zásuvný modul nebo Å¡ablonu,, kontaktujte vaÅ¡e administrátory Piwiku.", + "DownloadAndInstallPluginsFromMarketplace": "Můžete automaticky stáhnout a nainstalovat zásuvné moduly z %sobchodu%s.", + "EmailToEnquireUpdatedVersion": ";NapiÅ¡te e-mail %1$s a požádejte o novÄ›jÅ¡Ã verzi %2$s.", + "EnjoyAnotherLookAndFeelOfThemes": "Vychutnejte si novývzhled", + "FeaturedPlugin": "DoporuÄovaný zásuvný modul", + "GetEarlyAccessForPaidPlugins": "Poznámka: MomentálnÄ› jsou vÅ¡echny zásuvné moduly v obchodÄ› zdarma. V budoucnu máme v plánu povolit placené zásuvné moduly. %sKontaktujte nás%s pro vÄasný pÅ™Ãstup.", + "GetNewFunctionality": "ZÃskat novou funkcionalitu", "History": "Historie", "Inactive": "Zakázán", + "InfoPluginUpdateIsRecommended": "Aktualizujte vaÅ¡e zásuvné moduly nynÃ, abyste mohli využÃt vÅ¡echna vylepÅ¡enÃ.", + "InfoThemeUpdateIsRecommended": "Aktualizujte vaÅ¡e Å¡ablony a užÃvejte si poslednà verzi.", + "InstallingPlugin": "Instalovánà %s", + "InstallNewPlugins": "Instalovat nové zásuvné moduly", + "InstallNewThemes": "Instalovat nové Å¡ablony", + "LastCommitTime": "(Poslednà zmÄ›na %s)", + "LastUpdated": "Naposledy aktualizován", "LicenseHomepage": "Povolená domovská stránka", "MainDescription": "Zásuvné moduly rozÅ¡iÅ™ujà funkce Piwiku. Po instalaci zásuvného modulu jej můžete povolit nebo zakázat zde.", + "Marketplace": "Obchod", + "MarketplaceSellPluginSubject": "Obchod - prodat zásuvný modul", "MenuPlatform": "Platforma", + "MissingRequirementsNotice": "ProsÃm aktualizujte %1$s%2$s na novÄ›jÅ¡Ã verzi, je vyžadována %1$s %3$s.", + "NoPluginsFound": "Žádné zásuvné moduly nenalezeny", + "NotAllowedToBrowseMarketplacePlugins": "Můžete si projÃt zásuvné moduly, které rozÅ¡iÅ™ujà možnosti Piwik platformy. Pokud nÄ›který z nich potÅ™ebujete, kontaktujte administrátora.", + "NotAllowedToBrowseMarketplaceThemes": "Můžete si projÃt seznam Å¡ablon, které mohou být instalovány k pÅ™izpůsobenà vzhledu Piwik platformy. Pokud nÄ›jakou z nich chcete použÃt, kontaktujte administrátora.", + "NoThemesFound": "Nenalezeny žádné Å¡ablony", + "NoZipFileSelected": "ProsÃm vyberte soubor .zip.", + "NumDownloadsLatestVersion": "Poslednà verze: %s StaženÃ", + "NumUpdatesAvailable": "%s Dostupné aktualizace", + "OrByUploadingAPlugin": "nebo %snahránÃm zásuvného modulu%s", + "OrByUploadingATheme": "nebo %snahránÃm Å¡ablony%s", + "Origin": "Původ", + "OriginCore": "Jádro", + "OriginThirdParty": "TÅ™età strana", "PluginDescription": "AdministraÄnà rozhranà zásuvných modulů", "PluginHomepage": "Domovká stránka zásuvného modulu", + "PluginKeywords": "KlÃÄová slova", + "PluginNotCompatibleWith": "%1$s zásuvný modul nenà kompatibilnà s %2$s", + "PluginNotWorkingAlternative": "Pokud jste tento plugin použÃvali, možná najdete v obchodÄ› novÄ›jÅ¡Ã verzi. Pokud ne, možná ho chcete odinstalovat.", + "PluginRequirement": "%1$s vyžaduje %2$s.", "PluginsManagement": "Správa zásuvných modulů", + "PluginUpdateAvailable": "PoužÃváte verzi %s, ale je dostupná novÄ›jÅ¡Ã verze %s.", + "PluginVersionInfo": "%1$s z %2$s", + "PluginWebsite": "Stránky zásuvného modulu", + "Screenshots": "SnÃmky obrazovky", + "SortByAlpha": "alfa", + "SortByNewest": "nejnovÄ›jÅ¡Ã", + "SortByPopular": "populárnÃ", "Status": "Stav", + "StepDownloadingPluginFromMarketplace": "Stahovánà zásuvného modulu z obchodu", + "StepDownloadingThemeFromMarketplace": "Stahovánà šablony z obchodu", + "StepPluginSuccessfullyInstalled": "ÚspěšnÄ› jste nainstalovali zásuvný modul %1$s %2$s.", + "StepPluginSuccessfullyUpdated": "ÚspěšnÄ› jste aktualizovali zásuvný modul %1$s %2$s.", + "StepReplaceExistingPlugin": "Nahrazovánà existujÃcÃho zásuvného modulu", + "StepReplaceExistingTheme": "Nahrazovánà existujÃcà šablony", + "StepThemeSuccessfullyInstalled": "ÚspěšnÄ› jste nainstalovali Å¡ablonu %1$s %2$s.", + "StepThemeSuccessfullyUpdated": "ÚspěšnÄ› jste aktualizovali Å¡ablonu %1$s %2$s.", + "StepUnzippingPlugin": "Rozbalovánà zásuvného modulu", + "StepUnzippingTheme": "Rozbalovánà šablony", + "SuccessfullyActicated": "ÚspěšnÄ› jste aktivovali <strong>%s<\/strong>.", + "Support": "Podpora", + "TeaserExtendPiwik": "RozÅ¡iÅ™te Piwik s použitÃm zásuvných modulů a Å¡ablon", + "TeaserExtendPiwikByPlugin": "RozÅ¡iÅ™te Piwik instalacà nového zásuvného modulu", + "TeaserExtendPiwikByTheme": "Užijte si jiný vzhled po instalaci nové Å¡ablony", + "TeaserExtendPiwikByUpload": "RozÅ¡iÅ™te Piwik nahránÃm zip souboru", "Theme": "Å ablona", "Themes": "Å ablony", + "ThemesDescription": "Å ablony mohou zmÄ›nit vzhled uživatelského rozhranà Piwiku a pÅ™inést nový zážitek z vaÅ¡ich analytických hlášenÃ.", "ThemesManagement": "Správce Å¡ablon", - "Version": "Verze" + "UninstallConfirm": "Chystáte se odebrat zásuvný modul %s. Tento modul bude kompletnÄ› odebrán z platformy a akci nebude možné vrátit zpÄ›t. Jste si jisti, že to chcete provést?", + "Updated": "Aktualizováno", + "UpdatingPlugin": "Aktualizace %s", + "UploadZipFile": "Nahrát zip soubor", + "Version": "Verze", + "ViewRepositoryChangelog": "Zobrazit zmÄ›ny", + "Websites": "Stránky" }, "CoreUpdater": { "ClickHereToViewSqlQueries": "KliknÄ›te zde, abyste vidÄ›li a zkopÃrovali SQL dotazy, které majà být spuÅ¡tÄ›ny", "CreatingBackupOfConfigurationFile": "VytvářÃm zálohu konfiguraÄnÃho souboru v %s", "CriticalErrorDuringTheUpgradeProcess": "PÅ™i aktualizaci nastala kritická chyba:", "DatabaseUpgradeRequired": "Vyžadováno povýšenà databáze", + "DisablingIncompatiblePlugins": "Zakazovánà nekompatibilnÃch zásuvných modulů %s", "DownloadingUpdateFromX": "Stahuji aktualizaci z %s", "DownloadX": "Stáhnout %s", "EmptyDatabaseError": "Databáze %s je prázdná. MusÃte upravit konfiguraÄnà soubor Piwiku, nebo jej vymazat", @@ -196,19 +347,28 @@ "ExceptionArchiveEmpty": "Archiv je prázdný", "ExceptionArchiveIncompatible": "Nekompatibilnà archiv: %s", "ExceptionArchiveIncomplete": "ArchÃv je nekompletnÃ: nÄ›které soubory chybà (napÅ™.: %s).", + "FeedbackRequest": "Zde můžete s týmem Piwiku sdÃlet nápady a návrhy:", "HelpMessageContent": "Zkontrolujte %1$s Piwik FAQ %2$s , který vysvÄ›tluje nejÄastÄ›jsà chybi pÅ™i aktualizaci. %3$s Požádejte vaÅ¡eho systémového administrátora - může vám pomoct s chybou, která je nejÄastÄ›ji způsobena nastavenÃm serveru MySQL.", "HelpMessageIntroductionWhenError": "NÞe je hlavnà chybová hláška. Pomůže vám zjistit pÅ™ÃÄinu,. ale pokud budete potÅ™ebovat dalÅ¡Ã pomoc:", "HelpMessageIntroductionWhenWarning": "Aktualizace probÄ›hla v pořádku, ale byly zaznamenány problémy. ProsÃm pÅ™eÄtÄ›te si nižšà popis. Pro dalÅ¡Ã pomoc:", + "HighTrafficPiwikServerEnableMaintenance": "Pokud provozujete Piwik server s velkým provozem, doporuÄujeme %sna chvÃli zakázat sledovánà návÅ¡tÄ›vnÃků a pÅ™epnout uživatelské rozhranà do režimu údržby%s.", + "IncompatbilePluginsWillBeDisabledInfo": "Poznámka: NÄ›které zásuvné moduly nejsou kompatibilnà s Piwikem %s. Budou zakázány pÅ™i aktualizaci:", "InstallingTheLatestVersion": "Instaluji poslednà verzi", "MajorUpdateWarning1": "Toto je důležitá aktualizace! Zabere vÃce Äasu, než obvykle.", + "MajorUpdateWarning2": "NásledujÃcà doporuÄenà je pÅ™edevÅ¡Ãm důležité pro velké instalace.", "NoteForLargePiwikInstances": "Důležitá poznámka pro rozsáhlé instalace Piwiku", "NoteItIsExpectedThatQueriesFail": "Poznámka: Pokud budete SQL dotazy spouÅ¡tÄ›t ruÄnÄ›, nÄ›které z nich selžou. V tom pÅ™ÃpadÄ› chyby jednoduÅ¡e ignorujte a spusÅ¥te dalÅ¡Ã dotazy", + "NotificationClickToUpdatePlugins": "KliknÄ›te zde pro aktualizaci vaÅ¡ich zásuvných modulů:", + "NotificationClickToUpdateThemes": "KliknÄ›te zde pro aktualizaci vaÅ¡ich Å¡ablon:", + "NotificationSubjectAvailableCoreUpdate": "Je dostupný nový Piwik %s", + "NotificationSubjectAvailablePluginUpdate": "Jsou dostupné aktualizace pro vaÅ¡e zásuvné moduly", "PiwikHasBeenSuccessfullyUpgraded": "Piwik byl úspěšnÄ› aktualizován!", "PiwikUpdatedSuccessfully": "Piwik úspěšnÄ› aktualizován!", "PiwikWillBeUpgradedFromVersionXToVersionY": "Databáze Piwiku bude aktualizována z verze %1$s na novou verzi %2$s.", "PluginDescription": "Mechanismus aktualizace Piwiku", "ReadyToGo": "PÅ™ipraven pokraÄovat?", "TheFollowingPluginsWillBeUpgradedX": "NásledujÃcà zásuvné moduly budou aktualizovány: %s.", + "ThereIsNewPluginVersionAvailableForUpdate": "NÄ›které moduly, které použÃváte, byly v obchodÄ› aktualizovány:", "ThereIsNewVersionAvailableForUpdate": "Je k dispozici nová verze Piwiku", "TheUpgradeProcessMayFailExecuteCommand": "Pokud máte velkou databázi Piwiku, aktualizace v prohlÞeÄi může trvat dlouhou dobu. V této situaci můžete spustit aktualizaci z pÅ™Ãkazového řádku: %s", "TheUpgradeProcessMayTakeAWhilePleaseBePatient": "Aktualizace databáze může chvÃli trvat, buÄte prosÃm trpÄ›livÃ.", @@ -230,6 +390,8 @@ "ColumnCustomVariableName": "Název vlastnà promÄ›nné", "ColumnCustomVariableValue": "Hodnota vlastnà promÄ›nné", "CustomVariables": "Vlastnà promÄ›nné", + "CustomVariablesReportDocumentation": "Toto hlášenà obsahuje informace o vaÅ¡ich vlastnÃch promÄ›nných. KliknÄ›te na promÄ›nnou pro zobrazenà distribuce hodnot. %s Pro vÃce informacà si pÅ™eÄtÄ›te %sdokumentaci o vlastnÃch promÄ›nných na piwik.org%s", + "PluginDescription": "Vlastnà promÄ›nné jsou dvojice klÃÄ, hodnota, které můžete nastavit pÅ™i návÅ¡tÄ›vÄ› s použitÃm funkce setVisitCustomVariables() javascriptového API. Piwik pak zobrazà poÄty návÅ¡tÄ›v, stránek a konverzà pro tyto hodnoty.", "ScopePage": "rozsah stránky", "ScopeVisit": "rozsah návÅ¡tÄ›vy" }, @@ -241,6 +403,7 @@ "CreateNewDashboard": "VytvoÅ™it novou nástÄ›nku", "Dashboard": "NástÄ›nka", "DashboardCopied": "PÅ™ehled byl úspěšnÄ› nakopÃrován vybranému uživateli.", + "DashboardEmptyNotification": "VaÅ¡e nástÄ›nka neobsahuje žádné widgety. NÄ›jaké pÅ™idejte, nebo obnovte výchozà výbÄ›r widgetů na nástÄ›nce.", "DashboardName": "Jméno nástÄ›nky:", "DashboardOf": "NástÄ›nka %s", "DefaultDashboard": "Výchozà nástÄ›nka - použÃváte výchozà rozvrženà nástÄ›nky", @@ -261,23 +424,38 @@ "SelectWidget": "Zvolte widget pro pÅ™idánà na nástÄ›nku", "SetAsDefaultWidgets": "Nastavit výchozà výbÄ›r widgetů", "SetAsDefaultWidgetsConfirm": "Opravdu chcete nastavit toto rozvrženà widgetů jako výchozà rozvrženÃ?", + "SetAsDefaultWidgetsConfirmHelp": "Tyto widgety a jejich rozvrženà budou použity vždy, když nÄ›kdo vytvořà novou nástÄ›nku nebo použije vlastnost %s.", "TopLinkTooltip": "Zobraz analytické hlášenà webu pro %s.", "WidgetNotFound": "Widget nenalezen", "WidgetPreview": "Náhled widgetu", "WidgetsAndDashboard": "Widgety a NástÄ›nka" }, + "DoNotTrack": { + "PluginDescription": "Ignoruje návÅ¡tÄ›vy s hlaviÄkamy X-Do-Not-Track nebo DNT." + }, "Feedback": { "ContactThePiwikTeam": "Kontaktujte tým Piwiku", "DoYouHaveBugReportOrFeatureRequest": "Máte hlášenà chyby, nebo námÄ›t na vylepÅ¡enÃ?", + "GetInTouch": "Jsme rádi za vaÅ¡i zpÄ›tnou vazbu a vždy Äteme vÅ¡echny zprávy. Možná chcete nabÃdnout podnikatelskou pÅ™Ãležitost, najmout Piwik konzultanta, podÄ›lit se o váš úspÄ›ch, nebo prostÄ› pozdravit.", + "HowToCreateIssue": "ProsÃm, pÅ™eÄtÄ›te si doporuÄenÃ, jak psát dobré %1$shlášenà chyby%2$s nebo %3$sžádost o vlastnost%4$s. Potom %5$sse zaregistrujte%6$s nebo %7$spÅ™ihlaste%8$s v naÅ¡em systému sledovánà problémů a vytvoÅ™te %9$snový problém%10$s.", "IWantTo": "Chci:", "LearnWaysToParticipate": "NauÄit způsoby jak %s spolupracovat %s", "ManuallySendEmailTo": "ProsÃm poÅ¡lete ruÄnÄ› zprávu", "PluginDescription": "PoÅ¡lete ohlas teamu Piwiku. SdÃlejte s námi vaÅ¡e nápady a návrhy!", + "PrivacyClaim": "Piwik respektuje vaÅ¡e %1$ssoukromÃ%2$s a dává vám plnou kontrolu nad vaÅ¡imi daty.", + "RateFeatureLeaveMessageDislike": "Je nám lÃto, že se vám to nelÃbÃ. ŘeknÄ›te nám, jak se můžeme zlepÅ¡it.", + "RateFeatureLeaveMessageLike": "Jsme rádi, že se vám to lÃbÃ. ŘeknÄ›te nám, co se vám lÃbà nejvÃc, nebo jestli máte nÄ›jaký návrh na novou funkci.", + "RateFeatureSendFeedbackInformation": "Piwik platforma nám (týmu Piwiku) poÅ¡le e-mail s vaÅ¡Ã e-mailovou adresou, abychom vás v pÅ™ÃpadÄ› otázek mohli kontaktovat.", + "RateFeatureThankYouTitle": "DÄ›kujeme za ohodnocenà %s.", + "RateFeatureTitle": "LÃbà se vám vlastnost %s? OhodnoÅ¥te ji a zanechte komentář", "SendFeedback": "Odeslat odezvu", "SpecialRequest": "Máte speciálnà požadavek na tým Piwiku?", "ThankYou": "DÄ›kujeme vám, že pomáháte Piwik dÄ›lat lepÅ¡Ãm!", "TopLinkTooltip": "Řekni co si myslÃÅ¡, nebo pořádek pomoc profesionála.", - "VisitTheForums": "NavÅ¡tivte %s forum%s" + "ViewAnswersToFAQ": "Zobrazit odpovÄ›di na %sÄasto kladené otázky%s", + "ViewUserGuides": "eNauÄte se jak konfigurovat Piwik a efektivnÄ› analyzovat data s naÅ¡imi %1$suživatelskými pÅ™ÃruÄkami%2$s", + "VisitTheForums": "NavÅ¡tivte %s forum%s", + "WantToThankConsiderDonating": "MyslÃte si, že je Piwik úžasný a chcete nám podÄ›kovat?" }, "General": { "AbandonedCarts": "Neobjednané koÅ¡Ãky", @@ -286,21 +464,25 @@ "Actions": "Akce", "Add": "PÅ™idat", "AfterEntry": "Po vloženà dne", + "All": "VÅ¡e", "AllowPiwikArchivingToTriggerBrowser": "SpouÅ¡tÄ›t archovovánà když jsou hlášenà prohlÞena ve Web prohlÞeÄi", "AllWebsitesDashboard": "NástÄ›nka pro vÅ¡echny weby", "And": "a", "API": "API", "ApplyDateRange": "Aplikovat vybraný rozsah", "ArchivingInlineHelp": "Pro web stránky se stÅ™ednÃ, nebo vysokou návÅ¡tÄ›vnostà je doporuÄeno zakázat archivovánà Piwiku z web prohlÞeÄe. MÃsto toho doporuÄujeme vytvoÅ™enà úlohy pro cron", + "ArchivingTriggerDescription": "DoporuÄeno pro vÄ›tÅ¡Ã instalace Piwiku, potÅ™ebujete %snastavit cron úlohu%s na automatické spracovánà hlášenÃ.", "AuthenticationMethodSmtp": "AutentizaÄnà metoda SMTP", "AverageOrderValue": "PrůmÄ›rná hodnota objednávky", "AveragePrice": "PrůmÄ›rná cena", "AverageQuantity": "PrůmÄ›rné množstvÃ", "BackToPiwik": "ZpÄ›t do Piwiku", "Broken": "Rozbité", + "BrokenDownReportDocumentation": "Je ÄlenÄ›n do různých hlášenÃ, která jsou zobrazena dolnà Äásti stránky. Vybraný graf můžete zvÄ›tÅ¡it tak, že na nÄ›j kliknete.", "Cancel": "ZruÅ¡it", "CannotUnzipFile": "Nelze rozbalit soubor %1$s: %2$s", "ChangePassword": "ZmÄ›nit heslo", + "ChangeTagCloudView": "VÅ¡imnÄ›te si, že můžete zobrazit hlášenà jinak, než jako tag cloud. Pro zmÄ›nu zobrazenà použÃjte ovládacà prvky pod nÃm.", "ChooseDate": "Vyber datum", "ChooseLanguage": "Zvolte jazyk", "ChoosePeriod": "Zvolte obdobÃ", @@ -311,6 +493,7 @@ "ColumnActionsPerVisit": "Akcà za návÅ¡tÄ›vu", "ColumnActionsPerVisitDocumentation": "PrůmÄ›rnà poÄet akcà (zobrazenà stránek, staženà nebo externÃch odkazů) za návÅ¡tÄ›vu.", "ColumnAverageGenerationTime": "PrůmÄ›rný generovaný Äas", + "ColumnAverageGenerationTimeDocumentation": "PrůmÄ›rný Äas, za který byla stránka vygenerována. Toto měřenà zahrnuje Äas, který potÅ™eboval server k vygenerovánà stránky plus Äas, který potÅ™eboval klient k jejÃmu staženÃ. KratÅ¡Ã průmÄ›rný Äas znamená rychlejÅ¡Ã stránku.", "ColumnAverageTimeOnPage": "PřůmÄ›rnÄ› Äasu na stránce", "ColumnAverageTimeOnPageDocumentation": "PrůmÄ›rný celkový Äas strávený na stránce (pouze konkrétnà stránky),", "ColumnAvgTimeOnSite": "PrůmÄ›rnÄ› Äasu na stránkách", @@ -336,7 +519,9 @@ "ColumnNbActions": "Akce", "ColumnNbActionsDocumentation": "PoÄet akcà VaÅ¡ich návstÄ›vnÃků. Akcà se rozumà zobrazenà stránky, staženà a kliknutà na externà odkazy.", "ColumnNbUniqVisitors": "JedineÄnà návÅ¡tÄ›vnÃci", + "ColumnNbUniqVisitorsDocumentation": "PoÄet neduplicitnÃch návÅ¡tÄ›vnÃků, kteřà navÅ¡tÃvili vaÅ¡e stránky. Každý návÅ¡tÄ›vnÃk je poÄÃtán pouze jednou, ikdyž tÅ™eba pÅ™iÅ¡el nÄ›kolikrát za den.", "ColumnNbVisits": "NávÅ¡tÄ›v", + "ColumnNbVisitsDocumentation": "Pokud návÅ¡tÄ›vnÃk pÅ™ijde na vaÅ¡e stránky poprvé, nebo po tÅ™iceti minutách, je tato návÅ¡tÄ›va zapoÄÃtána jako nová.", "ColumnPageBounceRateDocumentation": "Procento návÅ¡tÄ›v, které zaÄaly touto stránkou a ihned ji opustili.", "ColumnPageviews": "Zobrazenà stránek", "ColumnPageviewsDocumentation": "PoÄet navÅ¡tÃvenà této stránky.", @@ -349,17 +534,23 @@ "ColumnUniquePageviews": "JedineÄná zobrazenà stránek", "ColumnUniquePageviewsDocumentation": "PoÄet návÅ¡tÄ›vnÃků, kteřà navÅ¡tÃvily tuto stránku. Pokud byla tato stránka navÅ¡tÃvena nÄ›kolikrát, návÅ¡tÄ›va je zapoÄÃtána jen jednou.", "ColumnValuePerVisit": "Hodnota za návÅ¡tÄ›vu", + "ColumnViewedAfterSearch": "Kliknuto ve výsledcÃch vyhledávánÃ", + "ColumnViewedAfterSearchDocumentation": "ePoÄet návÅ¡tÄ›v této stránky poté, co návÅ¡tÄ›vnÃk provedl vyhledávánà a kliknul na tuto stránku.", "ColumnVisitDuration": "Doba návÅ¡tÄ›vy (v sekundách)", "ColumnVisitsWithConversions": "NávÅ¡tÄ›vy s pÅ™echodem", "ConfigFileIsNotWritable": "KonfiguraÄnà soubor Piwiku %s nenà zapisovatelný, nÄ›které zmÄ›ny nebudou uloženy. %s ProsÃm upravte oprávnÄ›nà ke konfiguraÄnÃmu souboru", + "Continue": "PokraÄovat", "ContinueToPiwik": "PokraÄujte do Piwiku", "CurrentMonth": "Tento mÄ›sÃc", "CurrentWeek": "Tento týden", "CurrentYear": "Tento rok", "Daily": "DennÄ›", + "DailyReport": "dennÄ›", "DailyReports": "Dennà hlášenÃ", "DailySum": "dennà souÄet", "DashboardForASpecificWebsite": "NástÄ›nka pro vybraný web", + "DataForThisGraphHasBeenPurged": "Data pro tento graf jsou starÅ¡Ã než %s mÄ›sÃců a proto byla odstranÄ›na.", + "DataForThisTagCloudHasBeenPurged": "Data pro tento tag cloud jsou starÅ¡Ã než %s mÄ›sÃců a proto byla odstranÄ›na.", "Date": "Datum", "DateRange": "Rozsah:", "DateRangeFrom": "Od", @@ -378,6 +569,7 @@ "DayTu": "út", "DayWe": "st", "Default": "VýchozÃ", + "DefaultAppended": "(výchozÃ)", "Delete": "Vymazat", "Description": "Popis", "Desktop": "Desktop", @@ -391,40 +583,56 @@ "Done": "Hotovo", "Download": "Stáhnout", "DownloadFail_FileExists": "Sobor %s již existuje!", + "DownloadFail_FileExistsContinue": "Pokus o pokraÄovánà stahovánà %s, ale celý stažený soubor už existuje!", + "DownloadFail_HttpRequestFail": "NepodaÅ™ilo se stáhnout soubor. NÄ›co může být v nepořádku se stránkou, z nÞ byl soubor stahován. Můžete to zkusit pozdÄ›ji nebo můžete soubor stáhnout sami.", + "DownloadFullVersion": "%1$sStáhnout%2$s plnou verzi! PodÃvejte se na %3$s", + "DownloadPleaseRemoveExisting": "Pokud to chcete nahradit, odstraňte stávajÃcà soubor.", "Downloads": "StaženÃ", "EcommerceOrders": "Elektronické objednávky", + "EcommerceVisitStatusDesc": "Stav elektronického obchodu na konci návÅ¡tÄ›vy", + "EcommerceVisitStatusEg": "NapÅ™Ãklad pro výbÄ›r vÅ¡ech návÅ¡tÄ›v, které obsahujà elektronickou objednávku, API požadavek by byl %s", "Edit": "Upravit", + "EncryptedSmtpTransport": "Zadejte Å¡ifrovánà transportvnà vrsty vyžadované vaÅ¡Ãm SMTP serverem.", "EnglishLanguageName": "Czech", "Error": "Chyba", "ErrorRequest": "Jej... bÄ›hem požadavku se vyskytla chyba, prosÃm zkuste to znovu.", "EvolutionOverPeriod": "Vývoj za periodu", + "EvolutionSummaryGeneric": "%1$s v %2$s srovnáno s %3$s v %4$s. Vývin: %5$s", + "ExceptionCheckUserHasSuperUserAccessOrIsTheUser": "Uživatel musà být super uživatel nebo uživatel %s.", "ExceptionConfigurationFileNotFound": "KonfiguraÄnà soubor {%s} nebyl nalezen", "ExceptionDatabaseVersion": "VaÅ¡e %1$s verze je %2$s ale Piwik vyžaduje minimálnÄ› %3$s.", "ExceptionFileIntegrity": "Test integrity selhal: %s", "ExceptionFilesizeMismatch": "Nesouhlasà velikost souboru: %1$s (oÄekávaná délka: %2$s, nalezeno: %3$s)", "ExceptionIncompatibleClientServerVersions": "VaÅ¡e %1$s verze klienta je %2$s tato je ale nekompatibilnà se serverem %3$s.", + "ExceptionInvalidAggregateReportsFormat": "Agregovaný formát hlášený %s nenà platný. Zkuste mÃsto toho nÄ›jaký z %s.", "ExceptionInvalidArchiveTimeToLive": "DneÅ¡nà doba života archivu musà být ÄÃslo vÄ›tÅ¡Ã než nula", "ExceptionInvalidDateFormat": "Formát data musà být: %s nebo klÃÄové slovo podporované funkcà %s (vÃce informacà viz %s)", "ExceptionInvalidDateRange": "Datum '%s' nenà v platném rozmezÃ. Může mÃt následujÃcà formát: %s.", "ExceptionInvalidPeriod": "Perioda '%s' nenà podporovaná. VyzkouÅ¡ejte nÄ›jakou z následujÃcÃch mÃsto: %s.", "ExceptionInvalidRendererFormat": "Formát rendereru '%s' nenà platný. VyzkouÅ¡ejte nÄ›jaký jiný mÃsto: %s.", + "ExceptionInvalidReportRendererFormat": "Formát hlášenà %s nenà platný. Zkuste mÃsto toho jakýkoliv z %s.", + "ExceptionInvalidStaticGraphType": "Typ statického grafu %s nenà platný. Zkuste mÃsto toho nÄ›který z %s.", "ExceptionInvalidToken": "Token je neplatný", "ExceptionLanguageFileNotFound": "Jazykový soubor '%s' nenalezen", "ExceptionMethodNotFound": "Metoda '%s' neexistuje nebo nenà dostupná v modulu '%s'.", "ExceptionMissingFile": "ChybÄ›jÃcà soubor: %s", "ExceptionNonceMismatch": "Nemůžu ověřit bezpeÄnostnà token tohoto formuláře", "ExceptionPrivilege": "Nemůžete pÅ™istupovat k tomuto zdroji, protože vyžaduje oprávnÄ›nà %s.", + "ExceptionPrivilegeAccessWebsite": "Nemůžete pÅ™istupovat k tomuto zdroji, protože vyžaduje pÅ™Ãstup %s pro stránku s ID = %d.", "ExceptionPrivilegeAtLeastOneWebsite": "Nemůžete pÅ™istupovat k tomuto zdroji, protože vyžaduje oprávnÄ›nà %s alespoň pro jeden web", "ExceptionUnableToStartSession": "OtevÅ™eno k start session", "ExceptionUndeletableFile": "Nelze vymazat soubor %s", "ExceptionUnreadableFileDisabledMethod": "KonfiguraÄnà soubor {%s} je neÄitelný. Host může být zakázán %s.", + "ExpandDataTableFooter": "ZmÄ›nit vizualizaci nebo nastavit hlášenÃ", "Export": "Exportovat", "ExportAsImage": "Exportovat obrázek", "ExportThisReport": "Exportovat data v ostatnÃch formátech", "Faq": "FAQ", "FileIntegrityWarningExplanation": "Test integrity selhal a nahlásil nÄ›jaké chyby. To je dÃky ÄásteÄnÄ› nebo Å¡patnÄ› nahraným souborům Piwiku. MÄ›li byste znova nahrát vÅ¡echny soubory Piwiku v módu BINARY.", "First": "PrvnÃ", + "Flatten": "ZploÅ¡tit", "ForExampleShort": "napÅ™.", + "Forums": "Fóra", "FromReferrer": "z", "GeneralInformation": "Hlavnà informace", "GeneralSettings": "Hlavnà nastavenÃ", @@ -435,6 +643,7 @@ "GraphHelp": "VÃce informacà o zobrazovánà grafů v Piwiku", "HelloUser": "Ahoj, %s!", "Help": "Pomoc", + "HelpTranslatePiwik": "Možná byste chtÄ›li %1$snám pomoct s pÅ™ekladem Piwiku%2$s.", "Hide": "skrýt", "HoursMinutes": "%1$s hodin %2$s min.", "Id": "ID", @@ -443,11 +652,13 @@ "Installed": "Nainstalováno", "InvalidDateRange": "Chybný rozsah, vyberte jej znovu", "InvalidResponse": "Obdržená data jsou neplatná.", + "IP": "IP", "JsTrackingTag": "JavaScriptový zaznamenávacà tag", "Language": "Jazyk", "LastDays": "PoslednÃch %s dnà (vÄetnÄ› dnes)", "LastDaysShort": "PoslednÃch %s dnÃ", "LayoutDirection": "ltr", + "Live": "ŽivÄ›", "Loading": "NaÄÃtám...", "LoadingData": "NaÄÃtám data...", "LoadingPopover": "NaÄÃtám %s...", @@ -474,6 +685,7 @@ "LongMonth_8": "Srpen", "LongMonth_9": "ZářÃ", "MainMetrics": "Vlastnà měřenÃ", + "Matches": "Shody", "MediumToHighTrafficItIsRecommendedTo": "Pro weby se stÅ™ednÃm, nebo velkým provozem doporuÄujeme zpracovat dneÅ¡nà hlášenà každou půlhodinu (%s vteÅ™in), nebo každou hodinu (%s vteÅ™in)", "Metadata": "Meta data", "Metric": "MěřenÃ", @@ -483,6 +695,7 @@ "MinutesSeconds": "%1$s minut %2$s sek.", "Mobile": "Mobil", "Monthly": "MÄ›sÃÄnÄ›", + "MonthlyReport": "mÄ›sÃÄnÄ›", "MonthlyReports": "MÄ›sÃÄnà hlášenÃ", "More": "VÃce", "MoreDetails": "VÃce podrobnostÃ", @@ -490,6 +703,7 @@ "MultiSitesSummary": "vÅ¡echny weby", "Name": "Jméno", "NbActions": "PoÄet akcÃ", + "NbSearches": "PoÄet internÃch vyhledávánÃ", "NDays": "%s dnÃ", "Never": "Nikdy", "NewReportsWillBeProcessedByCron": "Pokud nenà archivovánà spouÅ¡tÄ›no web prohlÞeÄem budou nová hlášenà zpracovávaná cronem", @@ -518,18 +732,32 @@ "OnlyEnterIfRequiredPassword": "Heslo zadejte pouze v pÅ™ÃpadÄ›, že jej váš SMTP server vyžaduje", "OnlyUsedIfUserPwdIsSet": "Použito pouze v pÅ™ÃpadÄ›, že je nastaveno uživatelské jméno\/heslo. V pÅ™ÃpadÄ› že si nejste jisti jakou metodu použÃt, zeptejte se vaÅ¡eho poskytovatele", "OpenSourceWebAnalytics": "Open Source Web Analytics", + "OperationAtLeast": "Aspoň", + "OperationAtMost": "NejvÃce", + "OperationContains": "Obsahuje", + "OperationDoesNotContain": "Neobsahuje", + "OperationEquals": "Je rovno", + "OperationGreaterThan": "VÄ›tÅ¡Ã než", + "OperationIs": "Je", + "OperationIsNot": "NenÃ", + "OperationLessThan": "MenÅ¡Ã než", + "OperationNotEquals": "Nenà rovno", + "OptionalSmtpPort": "Volitelné. Pro neÅ¡ifrovaná a TLS SMTP spojenà je výchozà 25, pro SSL SMTP spojenà je výchozà 465.", "Options": "NastavenÃ", "OrCancel": "nebo %s ZruÅ¡it %s", "OriginalLanguageName": "ÄŒesky", "Others": "OstatnÃ", "Outlink": "Odchozà odkaz", "Outlinks": "Externà odkazy", + "OverlayRowActionTooltip": "PodÃvejte se na svá analytická data pÅ™Ãmo na stránce (otevÅ™e novou záložku)", + "OverlayRowActionTooltipTitle": "OtevÅ™Ãt vrstvu stránky", "Overview": "PÅ™ehled", "Pages": "Stránky", "ParameterMustIntegerBetween": "PromÄ›nná %s musà být ÄÃselná hodnota mezi %s a %s.", "Password": "Heslo", "Period": "ObdobÃ", "Piechart": "KoláÄový graf", + "PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s je dostupný. ProsÃm, upozornÄ›te %2$sadministrátora Piwiku%3$s.", "PiwikXIsAvailablePleaseUpdateNow": "Je k dispozici Piwik %1$s. %2$s ProsÃm aktualizujte jej!%3$s (viz %4$s zmÄ›ny%5$s).", "PleaseSpecifyValue": "ProsÃm zapiÅ¡tÄ› hodnotu pro '%s'.", "PleaseUpdatePiwik": "ProsÃm aktualizujte Piwik", @@ -538,12 +766,14 @@ "PoweredBy": "Běžà na", "Previous": "PÅ™edchozÃ", "PreviousDays": "pÅ™edeÅ¡lých %s dnà (kromÄ› dneÅ¡ka)", + "PreviousDaysShort": "PÅ™edchozÃch %s dnů", "Price": "Cena", "ProductConversionRate": "Konverznà pomÄ›r", "ProductRevenue": "Hodnota produktu", "PurchasedProducts": "Zakoupené produkty", "Quantity": "MnožstvÃ", "RangeReports": "Upravit rozmezà dnÃ", + "ReadThisToLearnMore": "%1$sPokud se chcete dozvÄ›dÄ›t vÃce, pÅ™eÄtÄ›te si toto.%2$s", "Recommended": "(doporuÄuje se)", "RecordsToPlot": "Záznamy k vykreslenÃ", "Refresh": "Obnovit", @@ -552,12 +782,17 @@ "RelatedReports": "Podobná hlášenÃ", "Remove": "Odstranit", "Report": "HlášenÃ", + "ReportGeneratedFrom": "Toto hlášenà bylo vytvoÅ™eno s použitÃm dat z %s.", + "ReportRatioTooltip": "'%1$s' reprezentuje %2$s z %3$s %4$s s %5$s.", "Reports": "HlášenÃ", + "ReportsContainingTodayWillBeProcessedAtMostEvery": "Hlášenà pro dneÅ¡ek nebo pro jakékoliv jiné datum budou zpracovány nejvÃce každých", "ReportsWillBeProcessedAtMostEveryHour": "Proto budou hlášenà zpracovávaná každou hodinu", "RequestTimedOut": "Datový požadavek na %s vyprÅ¡el. ProsÃm vyzkouÅ¡ejte jej znovu", "Required": "%s požadováno", "ReturningVisitor": "VracejÃcà se návÅ¡tÄ›vnÃci", "ReturningVisitorAllVisits": "Zobrazit vÅ¡echny návÅ¡tÄ›vy", + "RowEvolutionRowActionTooltip": "PodÃvejte se, jak se hodnoty tohoto řádku měřenà mÄ›nily v Äase", + "RowEvolutionRowActionTooltipTitle": "OtevÅ™Ãt vývoj řádku", "Rows": "Řádek", "RowsToDisplay": "Řádků k zobrazenÃ", "Save": "Uložit", @@ -565,6 +800,9 @@ "Search": "Hledat", "SearchNoResults": "Žádné výsledky", "Seconds": "%s sekund", + "SeeAll": "Zobrazit vÅ¡e", + "SeeTheOfficialDocumentationForMoreInformation": "Pro vÃce informacà navÅ¡tivte %soficiálnà dokumentaci%s.", + "Segment": "Část", "SelectYesIfYouWantToSendEmailsViaServer": "Zvolte \"Ano\" pokud chcete e-mail posÃlat pomocà uvedeného serveru mÃsto lokálnà funkce PHP mail", "Settings": "Vlastnostni", "Shipping": "Doprava", @@ -588,6 +826,7 @@ "ShortMonth_8": "Srp", "ShortMonth_9": "Zář", "Show": "zobrazit", + "SingleWebsitesDashboard": "NástÄ›nka jednÄ›ch stránek", "SmallTrafficYouCanLeaveDefault": "Pro weby s malým provozem můžete ponechat výchozÃch %s sekund a uvidÃte vÅ¡echna hlášenà v reálném Äase", "SmtpEncryption": "SMTP Å¡ifrovánÃ", "SmtpPassword": "Heslo SMTP", @@ -595,15 +834,20 @@ "SmtpServerAddress": "Adresa SMTP serveru", "SmtpUsername": "Uživatelské jméno SMTP", "Source": "Zdroj", + "StatisticsAreNotRecorded": "Zaznamenávánà statistik návÅ¡tÄ›vnÃků Pywikem je aktuálnÄ› zakázáno. Povolte ho nastavenÃm record_statistics = 1 ve vaÅ¡em souboru config\/config.ini.php.", "Subtotal": "MezisouÄet", + "Summary": "Souhrn", "Table": "Tabulka", "TagCloud": "Oblak tagů", "Tax": "Daň", + "TimeAgo": "PÅ™ed %s", "TimeOnPage": "ÄŒas na stránce", "Today": "Dnes", "Total": "Celkem", + "TotalRatioTooltip": "Toto je %1$s ze vÅ¡ech %2$s %3$s.", "TotalRevenue": "Celková hodnota", "TotalVisitsPageviewsRevenue": "(Celkem: %s návÅ¡tÄ›v, %s zobrazenà stránek, %s tržby)", + "TransitionsRowActionTooltip": "PodÃvejte se, co dÄ›lali návÅ¡tÄ›vnÃci pÅ™ed a po návÅ¡tÄ›vÄ› této stránky", "TransitionsRowActionTooltipTitle": "OtevÅ™Ãt pÅ™echody", "TranslatorEmail": "info@joomladev.eu, salab@email.cz, michal@cihar.com", "TranslatorName": "Filip Bartmann, Jakub Baláš, Michal ÄŒihaÅ™", @@ -616,6 +860,7 @@ "Value": "Hodnota", "VBarGraph": "Svislý sloupcový graf", "View": "Zobrazit", + "ViewDocumentationFor": "Zobrazit dokumentaci pro %1$s", "Visit": "NávÅ¡tÄ›va", "VisitConvertedGoal": "NávÅ¡tÄ›va, která pÅ™evedla alespoň jeden CÃl.", "VisitConvertedGoalId": "NávÅ¡tÄ›va, která pÅ™evedla konkrétnà ID CÃl.", @@ -627,15 +872,21 @@ "Visitors": "NávÅ¡tÄ›vnÃci", "VisitsWith": "NávÅ¡tÄ›v s %s", "VisitType": "Typ návÅ¡tÄ›vnÃka", + "VisitTypeExample": "NapÅ™Ãklad pro výbÄ›r vÅ¡ech návÅ¡tÄ›vnÃků, kteřà se vrátili na stránky vÄetnÄ› tÄ›ch, co si v pÅ™edcchozÃch návÅ¡tÄ›vách nÄ›co koupili, API požadavek by obsahoval %s", "Warning": "VarovánÃ", "WarningFileIntegrityNoManifest": "Test integrity nemůže být proveden z důvodů chybÄ›jÃcÃho souboru manifest.inc.php.", + "WarningFileIntegrityNoManifestDeployingFromGit": "Pokud nasazujete Piwik z Gitu, pak je tato zpráva normálnÃ.", "WarningFileIntegrityNoMd5file": "Test integrity nemůže být dokonÄen z důvodů chybÄ›jÃcà funkce md5_file().", "WarningPasswordStored": "%sUpozornÄ›nÃ:%s Toto heslo bude uloženo v konfiguraÄnÃm souboru viditelné pro vÅ¡echny s pÅ™Ãstupem k nÄ›mu.", "Website": "Web stránky", "Weekly": "TýdnÄ›", + "WeeklyReport": "TýdnÄ›", "WeeklyReports": "Tydennà hlášenÃ", "WellDone": "VýbornÄ›!", "Widgets": "Widgety", + "XComparedToY": "%1$s ve srovnánà s %2$s", + "XFromY": "%1$s z %2$s", + "YearlyReport": "roÄnÄ›", "YearlyReports": "RoÄnà hlášenÃ", "YearsDays": "%1$s roků %2$s dnÃ", "YearShort": "yr", @@ -651,12 +902,27 @@ "AddGoal": "PÅ™idat cÃl", "AddNewGoal": "PÅ™idat nový cÃl", "AddNewGoalOrEditExistingGoal": "%sPÅ™idat nový cÃl%s, nebo %sUpravit%s existujÃcà cÃle", + "AllowGoalConvertedMoreThanOncePerVisit": "Povolit konverzi cÃle vÃce než jednou za návÅ¡tÄ›vu", + "AllowMultipleConversionsPerVisit": "Povolit vÃce konverzà za návÅ¡tÄ›vu", "BestCountries": "ZemÄ› s nejvyÅ¡Å¡Ãm poÄtem konverzà jsou:", "BestKeywords": "KlÃÄová slova s nejvyÅ¡Å¡Ãm poÄtem konverzà jsou:", "BestReferrers": "OdkazujÃcà stránky s nejvyÅ¡Å¡Ãm poÄtem konverzà jsou:", "CaseSensitive": "shoda s velikostà pÃsmen", "ClickOutlink": "Kliknout na odkaz na externà web", + "ColumnAverageOrderRevenueDocumentation": "PrůmÄ›rná hodnota objednávky (AOV) je celkový pÅ™Ãjem ze vÅ¡ech objednávek dÄ›lený jejich poÄtem.", + "ColumnAveragePriceDocumentation": "PrůmÄ›rný pÅ™Ãjem z tohoto %s.", + "ColumnAverageQuantityDocumentation": "PrůmÄ›rný poÄet tohoto %s prodaný v elektronických objednávkách.", + "ColumnConversionRateDocumentation": "Procento návÅ¡tÄ›v, které vyvolaly cÃl %s.", + "ColumnConversionRateProductDocumentation": "Konverznà pomÄ›r %s je poÄet objednávek obsahujÃcÃch tento produkt dÄ›leno celkovým poÄtem návÅ¡tÄ›v stránky produktu.", "ColumnConversions": "PÅ™echody", + "ColumnConversionsDocumentation": "PoÄet konverzà pro %s.", + "ColumnOrdersDocumentation": "PoÄet elektronických objednávek, které aspoň jednou obsahovaly %s.", + "ColumnPurchasedProductsDocumentation": "PoÄet zakoupených produktů je souÄet množstvà produktů ze vÅ¡ech elektronických objednávek.", + "ColumnQuantityDocumentation": "Množstvà je celkový poÄet prodaných produktů pro každý %s.", + "ColumnRevenueDocumentation": "Celkový pÅ™Ãjem generovaný %s.", + "ColumnRevenuePerVisitDocumentation": "Celkový pÅ™Ãjem generovaný %s dÄ›lený poÄtem návÅ¡tÄ›v.", + "ColumnVisits": "Celkový poÄet návÅ¡tÄ›v bez ohledu na to, jestli doÅ¡lo k vyvolánà cÃle.", + "ColumnVisitsProductDocumentation": "PoÄet návÅ¡tÄ›v stránky produktu\/kategorie. Toto je také použito k výpoÄtu konverznÃho pomÄ›ru pro %s. Toto měřenà je ve hlášenà pouze, pokud bylo na stránkách produktů\/kategorià nastaveno sledovánà elektronického obchodu.", "Contains": "obsahuje %s", "ConversionRate": "%s frekvence konverzÃ", "Conversions": "%s konverzÃ", @@ -664,9 +930,11 @@ "ConversionsOverviewBy": "PÅ™ehled konverzà podle typu návÅ¡tÄ›vy", "CreateNewGOal": "VytvoÅ™it nový cÃl", "DaysToConv": "Dnů do konverze", + "DefaultGoalConvertedOncePerVisit": "Výchozà cÃl může být zkonvertován pouze jednou za návÅ¡tÄ›vu", "DefaultRevenue": "Výchozà pÅ™Ãjem cÃle je", "DefaultRevenueHelp": "Na pÅ™Ãklad kontaktnà formulář odeslaný návÅ¡tÄ›vnÃkem má průmÄ›rnou cenu $10. Piwik vám pomůže dobÅ™e pochopit chovánà skupin uživatelů", "DeleteGoalConfirm": "Jste si jisti, že chcete vymazat tento cÃl %s?", + "DocumentationRevenueGeneratedByProductSales": "Tržby produktu. NepoÄÃtajà se danÄ›, poplatky za doruÄenà a slevy.", "Download": "Stáhnout soubor", "Ecommerce": "Obchody", "EcommerceAndGoalsMenu": "Obchody a CÃle", @@ -678,20 +946,29 @@ "ExternalWebsiteUrl": "URL externÃho webu", "Filename": "jméno souboru", "GoalConversion": "CÃl konverze", + "GoalConversions": "Konverze cÃle", + "GoalConversionsBy": "Konverze cÃle %s podle typu návÅ¡tÄ›vy", "GoalIsTriggered": "CÃle je zaznamenáván", "GoalIsTriggeredWhen": "CÃl je zaznamenáván, když", "GoalName": "Jméno cÃle", "Goals": "CÃle", "GoalsManagement": "Správa cÃlů", "GoalsOverview": "PÅ™ehled cÃlů", + "GoalsOverviewDocumentation": "Toto je pÅ™ehled vaÅ¡ich konverzà cÃlů. VNe vchozÃm stavu graf zobrazuje souÄet vÅ¡ech konverzÃ. %s Pod grafem jsou zobrazena hlášenà pro každý cÃl. Můžete je zvÄ›tÅ¡it kliknutÃm, pokud chcete.", "GoalX": "CÃl: %s", + "HelpOneConversionPerVisit": "Pokud byla stránka odpovÃdajÃcà cÃli pÅ™i návÅ¡tÄ›vÄ› obnovena nebo zobrazena vÃcekrát, bude cÃl zapoÄÃtán pouze jednou a to pÅ™i prvnÃm zobrazenÃ.", "IsExactly": "je pÅ™esnÄ› %s", "LearnMoreAboutGoalTrackingDocumentation": "VÃce o %s CÃlech hlášenà v Piwiku%s najdete v uživatelské dokumentaci.", "LeftInCart": "%s Zbylo v koÅ¡Ãku", "Manually": "ruÄnÄ›", "ManuallyTriggeredUsingJavascriptFunction": "CÃl je ruÄnÄ› zaznamenáván pomocà JavaScriptového API trackGoal()", "MatchesExpression": "odpovÃdá %s", + "NewGoalDescription": "CÃl v PiÅ¡iku je vaÅ¡e strategie, vaÅ¡e prioria a může to být spousta vÄ›cà (stažená brožura, pÅ™ihlášený odbÄ›r spravodaje, stránavÅ¡tÃvenánka services.html atd.).", + "NewGoalIntro": "Sledovánà konverznÃho pomÄ›ru cÃlů je jeden z nejefektivnÄ›jÅ¡Ãch způsobů měřenà a zlepÅ¡ovánà podnikatelských zájmů.", + "NewGoalYouWillBeAbleTo": "Budete schopni zobrazit a analyzovat výsledky pro každý cÃl, což vám umožnà dozvÄ›dÄ›t se, jak zvýšit poÄet konverzÃ, konverznÃpomÄ›r a pÅ™Ãjem z každé návÅ¡tÄ›vy.", "NewVisitorsConversionRateIs": "PomÄ›r konverze nové pÅ™ÃchozÃch uživatelů je %s", + "NewWhatDoYouWantUsersToDo": "Co majà uživatelé na vaÅ¡ich stránkách dÄ›lat?", + "NoGoalsNeedAccess": "Pouze administrátor nebo uživatel s právy super uživatele může pÅ™idat cÃle pro danou webovou stránku. Požádejte svého administrátora, aby cÃl pro vaÅ¡e webové stránky pÅ™idal. <br>Sledovánà cÃlů pomáhá porozumÄ›t a maximalizovat výkon vaÅ¡ich stránek.", "Optional": "(volitelné)", "OverallConversionRate": "%s celková frekvence konverzà (návÅ¡tÄ›v se splnÄ›ným cÃlem)", "OverallRevenue": "%s celkový pÅ™Ãjem", @@ -703,6 +980,7 @@ "Products": "Produktů", "ProductSKU": "SKU produktu", "ReturningVisitorsConversionRateIs": "PomÄ›r konverze navracejÃcÃch se uživatelů je %s", + "SingleGoalOverviewDocumentation": "Toto je pÅ™ehled konverzà jednoho cÃle. %s Linky lze zvÄ›tÅ¡it kliknutÃm na nÄ›.", "UpdateGoal": "Aktualizovat cÃl", "URL": "URL", "ViewAndEditGoals": "Zobrazit a editovat cÃle", @@ -712,12 +990,47 @@ "VisitUrl": "NavÅ¡tÃvÃt zadanou URL (stránku, nebo skupiny stránek)", "WhenVisitors": "když návÅ¡tÄ›vnÃci", "WhereThe": "když", - "WhereVisitedPageManuallyCallsJavascriptTrackerLearnMore": "kde návÅ¡tÃvená stránka obsahuhe volánà metody JavaScriptu piwikTracker.trackGoal() (%svÃce%s)" + "WhereVisitedPageManuallyCallsJavascriptTrackerLearnMore": "kde návÅ¡tÃvená stránka obsahuhe volánà metody JavaScriptu piwikTracker.trackGoal() (%svÃce%s)", + "YouCanEnableEcommerceReports": "Pro tyto stránky můžete %s povolit na stránce %s." }, "ImageGraph": { + "ColumnOrdinateMissing": "Sloupec %s nebyl v tomto hlášenà nalezen. Zkuste nÄ›které z %s", "PluginDescription": "Generuje nádherné statické PNG grafy pro jakékoli Piwik hlášenÃ." }, + "Insights": { + "ControlComparedToDescription": "Růst ve srovnánà s", + "ControlFilterByDescription": "Zobrazit vÅ¡echny, pouze hybatele, pouze nové nebo ztracené", + "DatePeriodCombinationNotSupported": "Pro tuto kombinaci obdobà a data nenà možné vytvoÅ™it vhledy.", + "DayComparedToPreviousDay": "pÅ™edchozà den", + "DayComparedToPreviousWeek": "stejný den v pÅ™edchozÃm týdnu", + "DayComparedToPreviousYear": "stejný den v pÅ™edchozÃm roce", + "Filter": "Filtr", + "FilterIncreaserAndDecreaser": "ZvyÅ¡ovaÄ & snižovaÄ", + "FilterOnlyDecreaser": "Pouze snižovaÄ", + "FilterOnlyDisappeared": "Pouze ztracenÃ", + "FilterOnlyIncreaser": "Pouze zvyÅ¡ovaÄ", + "FilterOnlyMovers": "Pouze hybatelé", + "FilterOnlyNew": "Pouze novÃ", + "IgnoredChanges": "ZmÄ›ny týkajÃcà se ménÄ› než %s návÅ¡tÄ›v byly ignorovány.", + "MonthComparedToPreviousMonth": "pÅ™edchozà mÄ›sÃc", + "MonthComparedToPreviousYear": "stejný mÄ›sÃc v pÅ™edchozÃm roce", + "MoversAndShakersWidgetTitle": "Hybatelé a tÅ™esatelé", + "NoResultMatchesCriteria": "KritériÃm neodpovÃdajà žádné řádky", + "OverviewWidgetTitle": "PÅ™ehled vhledů", + "TitleConsideredInsightsChanges": "Řádky zvýšené nebo snÞené o aspoň %1$s návÅ¡tÄ›v (%2$s%% z %3$s celkových návÅ¡tÄ›v).", + "TitleConsideredInsightsGrowth": "NásledujÃcà řádky majà růst aspoň %1$s%% ve srovnánà s %2$s.", + "TitleConsideredMoversAndShakersChanges": "Hybatelé byly zváženi pouze pokud vzrostly vÃce než %1$s%% návÅ¡tÄ›v nebo se zmenÅ¡ili o ménÄ› než %2$s%% návÅ¡tÄ›v, nové záznamy pokud se zvýšily o vÃce než %3$s%% návÅ¡tÄ›v (%4$s) a ztracené řádky pouze pokud se zmenÅ¡ili o ménÄ› než %5$s%% návÅ¡tÄ›v (%6$s).", + "TitleConsideredMoversAndShakersGrowth": "%1$s se zmÄ›nili z %2$s na %3$s ve srovnánà s %4$s. Na základÄ› toho je pro každý řádek oÄekáván vývoj %5$s%%.", + "TitleRowChangeDetails": "'%1$s' se zmÄ›nili z %2$s (%3$s) na %4$s (%5$s) %6$s.", + "TitleRowDisappearedDetails": "'%1$s' se snÞili o %2$s a ztratili se v %3$s ve srovnánà s %4$s.", + "TitleRowMoverAndShaker": "Tento řádek mÄ›l vÄ›tÅ¡Ã dopad než průmÄ›r.", + "TitleRowNewDetails": "'%1$s' se zvýšili o %2$s a jsou novà ve srovnánà s %3$s.", + "WeekComparedToPreviousWeek": "pÅ™edchozà týden", + "WidgetCategory": "Vhledy", + "YearComparedToPreviousYear": "pÅ™edchozà rok" + }, "Installation": { + "CollaborativeProject": "Piwik je spoleÄný projekt tvoÅ™ený s láskou lidmi z celého svÄ›ta.", "ConfigurationHelp": "Váš konfiguraÄnà soubor Piwiku je Å¡patnÄ› nastavený. Můžete buÄ odstranit soubor config\/config.ini a znovu zaÄÃt instalaci, nebo opravit nastavenà databáze.", "ConfirmDeleteExistingTables": "Jste si jistÃ, že chcete vymazat tabulky: %s z vaÅ¡Ã databáze? UPOZORNÄšNÃ: DATA Z TÄšCHTO TABULEK NEPÅ®JDOU OBNOVIT!", "Congratulations": "Gratulujeme", @@ -735,33 +1048,54 @@ "Email": "e-mail", "Extension": "pÅ™Ãpona", "Filesystem": "Souborový systém", + "GetInvolved": "Pokud se vám lÃbÃ, co vidÃte, %1$szapojte se%2$s.", "GoBackAndDefinePrefix": "JÃt zpÄ›t a nastavit prefix pro tabulky Piwiku", + "HappyAnalysing": "Šťastné analyzovánÃ!", "Installation": "Instalace", "InstallationStatus": "Stav instalace", + "InsufficientPrivilegesHelp": "Tato privilegia můžete pÅ™idat v nástroji jako je phpMyAdmin, nebo provedenÃm správných SQL dotazů. Pokud nevÃte, jak to udÄ›lat, požádejte svého systémového administrátora, aby vám tato privilegia udÄ›lil.", + "InsufficientPrivilegesMain": "Databáze buÄ neexistuje, a nemohla být vytvoÅ™ena, nebo má databázový uživatel nedostateÄná privilegia. Databázový uživatel musà mÃt následujÃcà privilegia: %s", + "JsTagArchivingHelp1": "Pro stÅ™ednà a velké stránky jsou urÄité optimalizace, které umožňujà Piwiku běžet rychleji, jako tÅ™eba %1$snastavenà automatického archivovánÃ%2$s.", + "JSTracking_EndNote": "Poznámka: Po dokonÄenà procesu instalace můžete vytvoÅ™it vlastnà sledovacà kód na stránce %1$ssledovacà kód%2$s.", + "JSTracking_Intro": "Pokud chcete sledovat Pokud chcete Piwikem sledovat váš provoz na webu, musÃte zajistit, že do každé stránky bude pÅ™idán extra kód.", "LargePiwikInstances": "NápovÄ›da pro velké instalace Piwiku", "Legend": "Legenda", + "LoadDataInfileRecommended": "Pokud váš Piwik server zaznamenává provoz na stránkách s vysokým provozem t. j. 100000 stránek za mÄ›sÃc, doporuÄujeme se pokusit o Å™eÅ¡enà tohoto problému.", + "LoadDataInfileUnavailableHelp": "Použità %1$s velmi zrychlà archivaÄnà proces Piwiku. Pro zpÅ™ÃstupnÄ›nà zkuste aktualizovat PHP a Mysql a ujistÄ›te se, že má databázový uživatel privilegium %2$s.", "NfsFilesystemWarning": "Váš server použÃvá soborový systém NFS.", + "NfsFilesystemWarningSuffixAdmin": "To znamená, že Piwik bude pÅ™i použità sessions založených na souborech velmi pomalý.", + "NfsFilesystemWarningSuffixInstall": "Sessions založené na souborech jsou na NFS velmi pomalé. Proto Piwik použije databázové sessions. Pokud bude k nástÄ›nkám pÅ™istupovat souÄasnÄ› hodnÄ› uživatelů, možná budete muset zvýšit maximálnà poÄet klientských databázových spojenà v konfiguraci databázového serveru.", "NoConfigFound": "KonfiguraÄnà soubor Piwiku nebyl nalezen a snažÃte se vstoupit na stránku Piwiku.<br \/><b> » Můžete <a href='index.php'>teÄ nainstalovat<\/a><\/b><br \/><small>Pokud jste Piwik již instalovali a máte v DB nÄ›jaké tabulky, nemÄ›jte obavy. Můžete je použÃt a zachovat jejich data.!<\/small>", + "NotSupported": "nepodporováno", "Optional": "Volitelné", "Password": "heslo", "PasswordDoNotMatch": "hesla si neodpovÃdajÃ", "PasswordRepeat": "heslo (opakovánÃ)", "PercentDone": "%s %% hotovo", + "PiwikOrgNewsletter": "odesÃlat e-maily s důležitými událostmi v komunitÄ› Piwiku", + "PiwikProNewsletter": "ZajÃmajà mÄ› %spro Piwik%s služby (nejvÃÅ¡e jeden e-mail mÄ›sÃÄnÄ›)", "PleaseFixTheFollowingErrors": "ProsÃm opravte následujÃcà chyby", "PluginDescription": "InstalaÄnà proces Piwiku. Instalace se obvykle použÃvá jednou. V pÅ™ÃpadÄ› vymazánà konfiguraÄnÃho souboru config\/config.inc.php se instalace zahájà znovu", "Requirements": "Požadavky Piwiku", "RestartWebServer": "Po uloženà zmÄ›n restartujte Vás web server.", + "ReusingTables": "Použità existujÃcÃch tabulek", + "SeeBelowForMoreInfo": "Pro vÃce informacà se podÃvejte nÞe.", "SetupWebsite": "Nastavit Web", "SetupWebsiteError": "PÅ™i pÅ™idávánà Webu se vyskytla chyba", "SetupWebSiteName": "jméno webu", "SetupWebsiteSetupSuccess": "Web %s byl úspěšnÄ› vytvoÅ™en", "SetupWebSiteURL": "URL webu", + "SiteSetup": "ProsÃm vytvoÅ™te prvnà stránky, které budou sledovány a analyzovány Piwikem:", + "SiteSetupFootnote": "Poznámka: Jakmile bude instalace Piwiku dokonÄena, budete moct pÅ™idat dalÅ¡Ã stránky ke sledovánÃ.", "SuperUser": "Super uživatel", "SuperUserLogin": "pÅ™ihlaÅ¡ovacà jméno 'super uživatele'", + "SuperUserSetupError": "PÅ™i pÅ™idávánà super uživatele doÅ¡lo k chybÄ›", "SuperUserSetupSuccess": "Super uživatel úspěšnÄ› vytvoÅ™en", "SystemCheck": "Kontrola systému", "SystemCheckAutoUpdateHelp": "Poznámla: Aktualizace pomocà jednoho kliknutà vyžaduje práva pro zápis do adresářů Piwiku a jejich obsahu", "SystemCheckCreateFunctionHelp": "Piwik pro zpÄ›tná volánà využÃvá anonymnà funkce", + "SystemCheckCronArchiveProcess": "ArchivaÄnà cron", + "SystemCheckCronArchiveProcessCLI": "Správa procesů pomocà CLI", "SystemCheckDatabaseHelp": "Piwik vyžaduje buÄ rozÅ¡ÃÅ™enà mysqli, nebo PDO s pdo_mysql rozÅ¡ÃÅ™enÃm", "SystemCheckDebugBacktraceHelp": "View::factory nenà schopna vytvoÅ™it pohled pro volajÃcà modul.", "SystemCheckError": "Vyskytla se chyba - musà být opravena než budete pokraÄovat", @@ -769,11 +1103,16 @@ "SystemCheckExtensions": "DalÅ¡Ã požadovaná rozÅ¡ÃÅ™enÃ", "SystemCheckFileIntegrity": "Integrita souborů", "SystemCheckFunctions": "Vyžadované funkce", + "SystemCheckGDFreeType": "GT > 2.x + Freetype (grafika)", "SystemCheckGDHelp": "Sparkliny (malé grafy) nebudou fungovat.", "SystemCheckGlobHelp": "Tato vestavÄ›ná funkce byla na vaÅ¡em hostiteli zakázaná. Piwik se pokusà tuto funkci emulovat, ale můžete zaznamenat dalÅ¡Ã bezpeÄnostnà omezenÃ. Toto bude mÃt vliv na funÄnost", + "SystemCheckGzcompressHelp": "MusÃte povolit rozÅ¡ÃÅ™enà zlib a funkci gzcompress.", + "SystemCheckGzuncompressHelp": "MusÃte povolit rozÅ¡ÃÅ™enà zlib a funkci gzuncompress.", "SystemCheckIconvHelp": "MusÃte nakonfigurovat a pÅ™ekompilovat PHP s podporou pro \"icont\", --with-iconv", + "SystemCheckJsonHelp": "Piwik pro Ätenà a zápis JSON dat potÅ™ebuje rozÅ¡ÃÅ™enà php5-json.", "SystemCheckMailHelp": "Bez funkce mail(), nebudou odeslány zprávy s odezvou, nebo pÅ™i zapomenutém heslu", "SystemCheckMbstring": "mbstring", + "SystemCheckMbstringHelp": "RozÅ¡ÃÅ™enà mbstring je nutné ke zpracovánà vÃcebajtových znaků v uživatelském rozhranà a odpovÄ›dÃch API. Také zajistÄ›te, aby byla v souboru php.ini hodnota mbstring.func_overload nastavena na 0.", "SystemCheckMemoryLimit": "Limit pamÄ›ti", "SystemCheckMemoryLimitHelp": "Na webech s vysokým provozem, může archivace vyžadovat vÃce pamÄ›ti něž je nynà povoleno.<br \/>Pokud je potÅ™eba podÃvejte se na direktivu memory_limit ve vaÅ¡em souboru php.ini.", "SystemCheckOpenURL": "OtevÅ™Ãt URL", @@ -782,12 +1121,22 @@ "SystemCheckOtherFunctions": "Ostatnà funkce", "SystemCheckPackHelp": "Funkce pack() je nutná ke sledovánà návÅ¡tÄ›vnosti v Piwiku.", "SystemCheckParseIniFileHelp": "Tato vestavÄ›ná funkce byla na vaÅ¡em hostiteli zakázaná. Piwik se pokusà tuto funkci emulovat, ale můžete zaznamenat dalÅ¡Ã bezpeÄnostnà omezenÃ. Výkonnost trackeru bude také omezena.", + "SystemCheckPdoAndMysqliHelp": "Na GNU\/Linux systému můžete zkompilovat PHP s následujÃcÃmi volbami: %1$s PÅ™idejte následujÃcà řádky do php.ini: %2$s", "SystemCheckPhp": "Verze PHP", "SystemCheckPhpPdoAndMysqli": "VÃce informacà na: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.", + "SystemCheckSessionAutostart": "Pro zabránÄ›nà urÄitým problémům nastavte následujÃcà ve vaÅ¡em souboru php.ini: session.auto_start=0", "SystemCheckSplHelp": "MusÃte pÅ™ekompilovat PHP s povolenou standardnà PHP knihovou (ve výchozÃm stavu povolena).", "SystemCheckSummaryNoProblems": "Hurááá! Nejsou zde žádné problémy s nastavenÃm Piwiku. Gratulujeme", + "SystemCheckSummaryThereWereErrors": "Ajaj! Piwik zjistil %1$skritické problémy%2$s s nastavenÃm instalace Piwiku. %3$sTyto problémy musà být okamžitÄ› vyÅ™eÅ¡eny.%4$s", + "SystemCheckSummaryThereWereWarnings": "JVyskytly se problémy s vaÅ¡Ãm systémem. Piwik poběžÃ, ale možná se nevyhnete menÅ¡Ãm problémům.", "SystemCheckTimeLimitHelp": "na webech s vysokým pÅ™enosem, může archivace vyžadovat vÃce Äasu, než je nynà povoleno.<br \/>Pokud je potÅ™eba podÃvejte se na direktivu max_execution_time ve vaÅ¡em souboru php.ini", + "SystemCheckTracker": "Stav sledovánÃ", + "SystemCheckTrackerHelp": "GET požadavek na piwik.php selhal. Zkuste vynechat tuto URL z HTTP autentizace a zakažte mod security (možná budete muset kontaktovat správce webhostingu).", + "SystemCheckWarnDomHelp": "MÄ›li byste povolit \"dom\" rozÅ¡ÃÅ™enà t. j. nainstalovat balÃÄek \"php-dom\" nebo \"php-xml\".", "SystemCheckWarning": "Piwik bude pracovat normálnÄ›, ale nÄ›které funkce budou chybÄ›t", + "SystemCheckWarnJsonHelp": "Pro lepÅ¡Ã výkon byste mÄ›li povolit rozÅ¡ÃÅ™enà \"json\" t. j. nainstalovat balÃÄek \"php-json\".", + "SystemCheckWarnLibXmlHelp": "Protože je vyžadováno dalÅ¡Ãmi php rozÅ¡ÃÅ™enÃmi, mÄ›li byste povolit rozÅ¡ÃÅ™enà \"libxml\" t. j. nainstalovat balÃÄek \"php-libxml\".", + "SystemCheckWarnSimpleXMLHelp": "MÄ›li byste povolit rozÅ¡ÃÅ™enà \"SimpleXML\" t. j. nainstalovat balÃÄek \"php-simplexml\" nebo \"php-xml\".", "SystemCheckWinPdoAndMysqliHelp": "Na serveru s Winwdows můžete do vaÅ¡eho php.ini pÅ™idat následujÃcà řádky: %s", "SystemCheckWriteDirs": "Adresáře s pÅ™Ãstupem k zápisu", "SystemCheckWriteDirsHelp": "Pro opravu této chyby v Linuxu zkuste napsat následujÃcà pÅ™Ãkaz(y)", @@ -798,34 +1147,63 @@ "TablesDeletedSuccess": "Existujicà tabulky Piwiku úspěšnÄ› vymazány", "TablesFound": "V databázi byly nalezeny následujÃcà tabulky", "TablesReuse": "PoužÃt existujicà tabulky", + "TablesUpdatedSuccess": "Databáze byla úspěšnÄ› aktualizována z %1$s na %2$s!", "TablesWarningHelp": "Vyberte buÄ použità existujicÃch tabulek, nebo Äistou instalaci, která v databázi smaže existujÃcà data.", "TablesWithSameNamesFound": "NÄ›které %1$s tabulky ve vaÅ¡Ã databázi %2$s majà stejná jména jako tabulky, které se snažà vytvoÅ™it Piwik", "Timezone": "Äasová zóna webu", + "WeHopeYouWillEnjoyPiwik": "Doufáme, že si užijete použÃvánà Piwiku tak, jako si my užÃváme jeho vývoj.", "Welcome": "VÃtejte!", - "WelcomeHelp": "<p>Piwik je open source program pro analýzu webu, pomocà kterého můžete jednoduÅ¡e zÃskat informace, které chcete od vaÅ¡Ãch návÅ¡tÄ›vnÃků.<\/p><p>Tento proces je rozdÄ›len to %s jednoduchých kroků a zabere pÅ™ibližne 5 minut.<\/p>" + "WelcomeHelp": "<p>Piwik je open source program pro analýzu webu, pomocà kterého můžete jednoduÅ¡e zÃskat informace, které chcete od vaÅ¡Ãch návÅ¡tÄ›vnÃků.<\/p><p>Tento proces je rozdÄ›len to %s jednoduchých kroků a zabere pÅ™ibližne 5 minut.<\/p>", + "WelcomeToCommunity": "VÃtejte v komunitÄ› Piwiku!" }, "LanguagesManager": { "AboutPiwikTranslations": "O pÅ™ekladech Piwiku", "PluginDescription": "Tento zásuvný modul zobrazà seznam jazyků pro rozhranà Piwiku. Vybraný jazyk bude uložen v nastavenÃch každého uživatele" }, "Live": { + "AbandonedCartSummary": "%1$s%2$s opuÅ¡tÄ›ných koÅ¡Ãků%3$s a %4$s opuÅ¡tÄ›ných položek %5$scelkem za %6$s%7$s.", + "AveragePageGenerationTime": "Pro tohoto návÅ¡tÄ›vnÃka se každá stránka naÄetla v průmÄ›ru za %1$s.", + "CalculatedOverNPageViews": "VypoÄÃtáno na základÄ› %1$s poslednÃch zobrazenà stránek tohoto návÅ¡tÄ›vnÃka.", + "ClickToViewMoreAboutVisit": "KliknÄ›te pro zobrazenà vÃce informacà o této návÅ¡tÄ›vÄ›", + "ConvertedNGoals": "Zkonvertováno %s cÃlů", + "EcommerceSummaryConversions": "%1$s%2$s objednávek celkem za %3$s%4$s, zakoupeno %5$s položek.", + "FirstVisit": "Prvnà návÅ¡tÄ›va", "GoalType": "Typ", + "HideMap": "skrýt mapu", + "KeywordRankedOnSearchResultForThisVisitor": "KlÃÄové slovo %1$s ohodnoceno %2$s na %3$s stránce výsledků vyhledávánà pro tohoto návÅ¡tÄ›vnÃka", "LastHours": "PoslednÃch %s hodin", "LastMinutes": "PoslednÃch %s minut", + "LastVisit": "Poslednà návÅ¡tÄ›va", "LinkVisitorLog": "Zobrazit detailnà pohled na návÅ¡tÄ›vnÃky", + "LoadMoreVisits": "NaÄÃst vÃce návÅ¡tÄ›v", "MorePagesNotDisplayed": "dalÅ¡Ã stránky tohoto návÅ¡tÄ›vnÃka nejsou zobrazeny", "NbVisitor": "1 návÅ¡tÄ›vnÃk", "NbVisitors": "%s návÅ¡tÄ›vnÃků", + "NextVisitor": "DalÅ¡Ã návÅ¡tÄ›vnÃk", + "NoMoreVisits": "Pro tohoto návÅ¡tÄ›vnÃka už nejsou k dispozici dalÅ¡Ã návÅ¡tÄ›vy.", + "PageRefreshed": "PoÄet po sobÄ› jdoucÃch zobrazenÃ\/obnovenà stránky", "PluginDescription": "Sledujte VaÅ¡e uživatele živÄ› v reálném Äase", + "PreviousVisitor": "PÅ™edchozà návÅ¡tÄ›vnÃk", "RealTimeVisitorCount": "PoÄet návÅ¡tÄ›vnÃků v reálném Äase", "Referrer_URL": "OdkazujÃcà URL", + "ShowMap": "Zobrazit mapu", "SimpleRealTimeWidget_Message": "%s a %s v poslednÃch %s.", + "ViewVisitorProfile": "Zobrazit profil návÅ¡tÄ›vnÃka", + "VisitedPages": "NavÅ¡tÃvené stránky", "VisitorLog": "Pohled na návÅ¡tÄ›vnÃky", - "VisitorsInRealTime": "NávstÄ›v v reálném Äase" + "VisitorLogDocumentation": "Tato tabulka zobrazuje poslednà návÅ¡tÄ›vy v daném obdobÃ. NajetÃm na datum návÅ¡tÄ›vy zobrazÃte Äas, kdy tento návÅ¡tÄ›vnÃk navÅ¡tÃvil stránky naposledy. %s Pokud obdobà zahrnuje dneÅ¡ek, můžete vidÄ›t návÅ¡tÄ›vnÃky v reálném Äase! %s Zde zobrazovaná data jsou vždy živá bez ohledu na to, jak a kdy probÃhá archivaÄnà cron úloha.", + "VisitorProfile": "Profil návÅ¡tÄ›vnÃka", + "VisitorsInRealTime": "NávstÄ›v v reálném Äase", + "VisitorsLastVisit": "K poslednà návÅ¡tÄ›vÄ› tohoto návÅ¡tÄ›vnÃka doÅ¡lo pÅ™ed %s dny.", + "VisitsFrom": "%1$s%2$s návÅ¡tÄ›v%3$s z", + "VisitSummary": "Strávil celkem %1$s%2$s na stránkách%3$s a %4$szobrazil %5$s stránek za %6$s návÅ¡tÄ›v.%7$s" }, "Login": { + "ConfirmationLinkSent": "Do vaÅ¡Ã e-mailové schránky byl odeslán potvrzovacà e-mail. Pro potvrzenà požadavku na zmÄ›nu hesla navÅ¡tivte odkaz v e-mailu uvedený.", "ContactAdmin": "Možná pÅ™ÃÄina: Váš hosting zakázal funkci mail().. <br \/>ProsÃm kontaktujte vaÅ¡eho administrátora Piwiku.", + "ExceptionInvalidSuperUserAccessAuthenticationMethod": "Uživatel se Super uživatelským pÅ™Ãstupem nemůže být autentizován mechanismem %s.", "ExceptionPasswordMD5HashExpected": "Parametr hesla je oÄekáván jako MD5 hash hesla", + "InvalidNonceOrHeadersOrReferrer": "ZabezpeÄenà formuláře selhalo. ProsÃm obnovte formulář a zkontrolujte, že máte povolené cookies. Pokud použÃváte proxy server, %smusÃte nakonfigurovat Piwik aby pÅ™ijÃmal proxy hlaviÄku%s, která pÅ™eposÃlá hlaviÄku hosta. Zkontrolujte také, že je správnÄ› posÃlána hlaviÄka referrer.", "InvalidOrExpiredToken": "KlÃÄ je neplatný, nebo vyprÅ¡el", "InvalidUsernameEmail": "Neplatné uživatelské jméno a\/nebo e-mailová adresa", "LogIn": "PÅ™ihlásit", @@ -836,6 +1214,7 @@ "PasswordChanged": "VaÅ¡e heslo bylo zmÄ›nÄ›no.", "PasswordRepeat": "Heslo (pro kontrolu)", "PasswordsDoNotMatch": "Hesla si neodpovÃdajÃ", + "PluginDescription": "Zásuvný modul pÅ™ihlaÅ¡ovánÃ, který pro prvotnÃho super uživatele Äte údaje ze souboru config\/config.ini.php a pro dalÅ¡Ã uživatele z databáze. Může být jednoduÅ¡e nahrazen jinou metodou autentizace (OpenId, htaccess atd.).", "RememberMe": "Zapamatovat si", "ResetPasswordInstructions": "Zadejte nové heslo k VaÅ¡emu úÄtu." }, @@ -845,116 +1224,344 @@ "Account": "ÚÄet", "Accounts": "ÚÄty", "AddAccount": "PÅ™idat úÄet", + "AddPiwikDemo": "PÅ™idat demo Piwiku", "Advanced": "RozÅ¡ÃÅ™ené", "AnonymousAccess": "Anonymnà pÅ™Ãstup", "AnonymousTracking": "Anonymnà sledovánÃ", + "AskForAnonymousTrackingPermission": "Pokud je povoleno, Piwik mobile bude odesÃlat anonymnà data o použÃvánà piwik.org. ÚÄelem je pomoci vývojářům lépe pochopit, jak je aplikace použÃvána. Jsou odesÃlány položky menu a nastavenà na které bylo kliknuto, operaÄnà systém a jeho verze a zobrazené chyby v Piwik mobile. Nebudeme sledovat vaÅ¡e analytická data. Tyto údaje nebudou nikdy zveÅ™ejnÄ›ny. OdesÃlánà dat můžete kdykoliv povolit a zakázat v nastavenÃ.", + "ChooseHttpTimeout": "Zvolte Äasový limit HTTP", "ChooseMetric": "Zvolte měřenÃ", "ChooseReport": "Vyberte hlášenÃ", + "ConfirmRemoveAccount": "Chcete odstranit tento úÄet?", + "DefaultReportDate": "Datum hlášenÃ", "EmailUs": "NapiÅ¡te nám", "EnableGraphsLabel": "Zobrazit grafy", + "EvolutionGraph": "Historický graf", + "HelpUsToImprovePiwikMobile": "Chcete ev Piwik mobile povolit anonymnà sledovánà využitÃ?", + "HowtoDeleteAnAccount": "Dlouze stisknÄ›te pro smazánà úÄtu.", + "HowtoDeleteAnAccountOniOS": "Pro smazánà úÄtu Å¡vihnÄ›te zprava do leva.", + "HowtoLoginAnonymous": "Pro anonymnà pÅ™ihlášenà nevyplňujte uživatelské jméno a heslo", + "HttpIsNotSecureWarning": "Váš autorizaÄnà token (token_auth) je v pÅ™ÃpadÄ› použità HTTP poslán v podobÄ› prostého textu. Z tohoto důvodu pro bezpeÄný pÅ™enos dat pÅ™es internet doporuÄujeme HTTPS. Chcete pokraÄovat?", + "HttpTimeout": "ÄŒasový limit HTTP", + "IncompatiblePiwikVersion": "Verze Piwiku, kterou použÃváte, nenà kompatibilnà s Piwik Mobile 2. Aktualizujte instalaci Piwiku a zkuste to znovu, nebo nainstalujte Piwik mobile 1.", "LastUpdated": "Poslednà aktualizace: %s", + "LoadingReport": "NaÄÃtánà %s", + "LoginCredentials": "PověřenÃ", + "LoginToPiwikToChangeSettings": "PÅ™ihlaÅ¡te se k vaÅ¡emu Piwik serveru, pokud chcete mÄ›nit a vytvářet webové stránky a uživatele nebo mÄ›nit obecná nastavenà jako hlášenÃ, které se naÄte jako výchozÃ.", + "LoginUseHttps": "PoužÃt HTTPS", "MultiChartLabel": "Zobrazit multi grafy", "NavigationBack": "ZpÄ›t", + "NetworkError": "Chyba sÃtÄ›", + "NetworkErrorWithStatusCode": "DoÅ¡lo k chybÄ› \"%s\". Požadavek vrátil stavový kód \"%s\". URL byla \"%s\". ProsÃm zkontrolujte vámi zadanou URL a pro vÃce informacà o této chybÄ› a jejÃm možném Å™eÅ¡enà chybové logy zadaného serveru.", + "NetworkErrorWithStatusCodeShort": "Chyba sÃtÄ› %s", "NetworkNotReachable": "SÃÅ¥ je nedosažitelná", + "NoAccountIsSelected": "MusÃte vybrat úÄet. Pokud nenà žádný nastaven, pÅ™idejte ho.", + "NoDataShort": "Žádná data", + "NoPiwikAccount": "Nemáte Piwik úÄet?", + "NoReportsShort": "Žádná hlášenÃ", + "NoVisitorFound": "Žádný návÅ¡tÄ›vnÃk nebyl nalezen", + "NoVisitorsShort": "Žádnà návÅ¡tÄ›vnÃci", "NoWebsiteFound": "Žádný web nenalezen", + "NoWebsitesShort": "Žádné webové stránky", + "PullDownToRefresh": "StáhnÄ›te pro obnovu...", + "RatingDontRemindMe": "Neupozorňovat mÄ›", "RatingNotNow": "Ne nynÃ", + "RatingNow": "Dobrá, teÄ to ohodnotÃm", + "RatingPleaseRateUs": "Piwik mobile je volnÄ› Å¡iÅ™itelný software. Proto bychom ocenili, kdybyste si naÅ¡li mnutu k jeho ohodnocenà v %s. Pokud máte návrh na nÄ›jakou novou vlastnost nebo chcete nahlásit chybu, kontaktujte %s", + "ReleaseToRefresh": "UvolnÄ›te pro obnovenÃ...", "Reloading": "Znovu nahrávám...", + "RequestTimedOutShort": "Chyba Äasového limitu sÃtÄ›", + "RestrictedCompatibility": "Omezená kompatibilita", + "RestrictedCompatibilityExplanation": "Verze Piwiku %s nenà plnÄ› podporována Piwik mobile 2. Můžete se setkat s nÄ›jakými chybami. DoporuÄujeme aktualizovat Piwik na nejnovÄ›jÅ¡Ã verzi nebo se vrátit k Piwik mobile 1.", "SaveSuccessError": "ProsÃm zkontrolujte si vaÅ¡e nastavenÃ", + "SearchWebsite": "Prohledat webové stránky", "ShowAll": "Zobrazit vÅ¡e", + "ShowLess": "Zobrazit ménÄ›", + "StaticGraph": "PÅ™ehledový graf", + "TopVisitedWebsites": "NejvÃce navÅ¡tÄ›vované webové stránky", + "TryIt": "VyzkouÅ¡ejte to!", + "UseSearchBarHint": "Zde je zobrazeno pouze prvnÃch %s webových stránek. K pÅ™Ãstupu k dalÅ¡Ãm použijte vyhledávacà panel.", + "VerifyAccount": "Ověřovánà úÄtu", + "VerifyLoginData": "UjistÄ›te se, že kombinace vaÅ¡eho uživatelského jména a hesla je správná.", "YouAreOffline": "Omlouváme se, momentálnÄ› jste offline" }, "MobileMessaging": { + "Exception_UnknownProvider": "Jméno poskytovatele '%s' nenà známé. Zkuste nÄ›které z %s.", + "MobileReport_AdditionalPhoneNumbers": "VÃce telefonnÃch ÄÃsel můžete pÅ™idat pÅ™ejitÃm na", + "MobileReport_MobileMessagingSettingsLink": "Stránka nastavenà mobilnÃch zpráv", + "MobileReport_NoPhoneNumbers": "ProsÃm aktivujte aspoň jedno telefonnà ÄÃslo pÅ™ejitÃm na", + "MultiSites_Must_Be_Activated": "Pro vytvářenà SMS zpráv se statistikami povolte v Piwiku plugin MultiSites.", "PhoneNumbers": "Telefonnà ÄÃsla", + "PluginDescription": "Vytvářejte a stahujte vlastnà SMS hlášenà a nechte si je zasÃlat do vaÅ¡eho telefonu dennÄ›, týdnnebo Ä› mÄ›sÃÄnÄ›.", + "Settings_APIKey": "KlÃÄ k API", "Settings_CountryCode": "Kód zemÄ›", + "Settings_CredentialNotProvided": "Než budete moct vytvářet a spravovat telefonnà ÄÃsla, musÃte pÅ™ipojit Piwik k vaÅ¡emu SMS úÄtu výše.", + "Settings_CredentialNotProvidedByAdmin": "Než budete moct vytvářet a spravovat telefonnà ÄÃsla, požádejte vaÅ¡eho administrátora, aby pÅ™ipojil Piwik k SMS úÄtu.", + "Settings_CredentialProvided": ";Váš %s SMS úÄet je nastaven správnÄ›.", + "Settings_DeleteAccountConfirm": "Opravdu chcete odstranit tento SMS úÄet?", + "Settings_InvalidActivationCode": "Zadaný kód nebyl platný, prosÃm zkuste to znovu.", + "Settings_LetUsersManageAPICredential": "Povolit uživatelům správu vlastnÃch pověřenà API SMS úÄtů", + "Settings_LetUsersManageAPICredential_No_Help": "VÅ¡ichni uživatelé mohou pÅ™ijÃmat hlášenà prostÅ™ednictvÃm SMS a budou použÃvat kredity vaÅ¡eho úÄtu.", + "Settings_LetUsersManageAPICredential_Yes_Help": "Každý uživatel bude moct nastavit svůj SMS API úÄet an nebude použÃvat váš kredit.", + "Settings_ManagePhoneNumbers": "Spravovat telefonnà ÄÃsla", + "Settings_PhoneActivated": "Telefonnà ÄÃslo ověřeno! Nynà můžete pÅ™ijÃmat SMS se statistikami.", "Settings_PhoneNumber": "Telefonnà ÄÃslo", "Settings_PhoneNumbers_Add": "PÅ™idat nové telefonnà ÄÃslo", + "Settings_PhoneNumbers_CountryCode_Help": "Pokud nevÃte telefonnà kód vaÅ¡Ã zemÄ›, podÃvejte se zde", + "Settings_PhoneNumbers_Help": "Než budete moct pÅ™ijÃmat SMS se statistikami, telefonnà ÄÃslo musà být zadáno nÞe.", + "Settings_PhoneNumbers_HelpAdd": "Po stisknutà \"pÅ™idat\" bude na telefon odeslána SMS s kódem. Uživatel, který obdržà SMS by se mÄ›l pÅ™ihlásit do Piwiku, kliknout na nastavenÃ, pak na Mobilnà zprávy a zadat kód. Poté bude moct dostávat statistiky do svého telefonu.", + "Settings_PleaseSignUp": "Pokud chcetevytvářet SMS hlášenà a dostávat krátké zprávy o statistikách do svého telefonu, zaregistrujte se na SMS API a zadejte svoje informace nÞe.", "Settings_SMSAPIAccount": "Správa SMS API úÄtu", "Settings_SMSProvider": "SMS Provider", + "Settings_SuperAdmin": "Nastavenà super uživatele", + "Settings_SuspiciousPhoneNumber": "Pokud neobdržÃte SMS zprávu, můžete to zkusit bez úvodnà nuly, t. j. %s", + "Settings_UpdateOrDeleteAccount": "Také můžete tento úÄet %saktualizovat%s nebo %ssmazat%s.", + "Settings_ValidatePhoneNumber": "Ověřit", + "Settings_VerificationCodeJustSent": "PrávÄ› jsme na zadané telefonnà ÄÃslo odeslali SMS s kódem. Zadejte ho výše a stisknÄ›te \"ověřit\".", + "SettingsMenu": "Mobilnà zprávy", "SMS_Content_Too_Long": "[pÅ™ÃliÅ¡ dlouhé]", - "TopMenu": "Email & SMS Reporty" + "TopLinkTooltip": "Nechte si webové analýzi zasÃlat na e-mail nebo na váš mobilnà telefon.", + "TopMenu": "Email & SMS Reporty", + "VerificationText": "Kód je %s. Pro ověřenà vaÅ¡eh otelefonnÃho ÄÃsla tento kód zkopÃrujte do formuláře pÅ™Ãstupného na Piwik > %s > %s." }, "MultiSites": { "Evolution": "Vývoj", - "PluginDescription": "Zobrazà souhrn\/statistiky pro vÃce sÃdel. SouÄasnÄ› je spravován jako základnà zásuvný modul Piwiku" + "LoadingWebsites": "NaÄÃtánà webových stránek", + "Pagination": "%s - %s z %s", + "PluginDescription": "Zobrazà souhrn\/statistiky pro vÃce sÃdel. SouÄasnÄ› je spravován jako základnà zásuvný modul Piwiku", + "TopLinkTooltip": "Porovnejte webové analytické statistiky pro vÅ¡echny vaÅ¡e webové stránky." }, "Overlay": { "Clicks": "%s kliknutÃ", + "ClicksFromXLinks": "%1$s kliknutà z nÄ›kterého z %2$s odkazů", "Domain": "Doména", + "ErrorNotLoading": "Sezenà pÅ™ekryvu stránky nemohlo být zatÃm spuÅ¡tÄ›no.", + "ErrorNotLoadingDetails": "Možná nemá naÄtená stránka na pravé stranÄ› sledovacà kód. V tomto pÅ™ÃpadÄ› zkuste spustit pÅ™ekryv pro jinou stránku z hlášenà stránek.", + "ErrorNotLoadingDetailsSSL": "Protože použÃváte Piwik pÅ™es HTTPS, nejpravdÄ›podobnÄ›jÅ¡Ã je, že stránky nepodporujà SSL. Zkuste pÅ™istoupit k Piwiku pÅ™es HTTP.", + "ErrorNotLoadingLink": "KliknÄ›te zde pro vÃce tipů k Å™eÅ¡enà problémů", "Link": "Odkaz", "Location": "UmÃstÄ›nÃ", - "OneClick": "1 kliknutÃ" + "NoData": "V daném obdobà nejsou pro vybranou stránku k dispozici žádná data.", + "OneClick": "1 kliknutÃ", + "OpenFullScreen": "PÅ™ejÃt na celou obrazovku (bez postrannà liÅ¡ty)", + "Overlay": "PÅ™ekryv stránky", + "PluginDescription": "PodÃvejte se na analytická data pÅ™Ãmo na vaÅ¡ich stránkách.", + "RedirectUrlError": "PokouÅ¡Ãte se spustit pÅ™ekryv pro stránku s url \"%s\". %s Žádná doména z nastavenà Piwiku ale neodpovÃdá odkazu.", + "RedirectUrlErrorAdmin": "Doménu můžete jako dalÅ¡Ã URL pÅ™idat v %snastavenÃ%s.", + "RedirectUrlErrorUser": "Požádejte svého administrátora o pÅ™idánà stránky jako dalÅ¡Ã URL:." }, "PrivacyManager": { + "AnonymizeIpDescription": "Zvolte \"ano\", pokud nemá Piwik sledovat plnÄ› kvalifikované IP adresy.", "AnonymizeIpInlineHelp": "Skryje poslednà byte IP adresy návÅ¡tÄ›vnÃka, aby souhlasila se zákony vaÅ¡Ã zemÄ›.", + "AnonymizeIpMaskLengtDescription": "Zvolte, kolik bitů z návÅ¡tÄ›vnÃkovy IP adresy má být maskováno.", + "AnonymizeIpMaskLength": "%s bitů - napÅ™. %s", + "CannotLockSoDeleteLogActions": "Tabulka log_action nebude vyprázdnÄ›n: adejte Mysql uživateli %s privilegium LOCK TABLES.", + "ClickHereSettings": "Pro pÅ™Ãstup k nastavenà %s kliknÄ›te zde.", + "CurrentDBSize": "Aktuálnà velikost databáze", + "DBPurged": "Databáze vyprázdnÄ›na.", + "DeleteBothConfirm": "Chystáte se povolit mazánà dat logů i mazánà dat hlášenÃ. Tato operace trvale odstranà stará data. Opravdu to chcete provést?", + "DeleteDataDescription": "Můžete Piwik nastavit tak, aby po urÄitém Äase mazal data rá stalogů nebo zpracovaná data hlášenÃ. To pomáhá udržet malou databázi.", + "DeleteDataDescription2": "Pokud si to pÅ™ejete, zpracovaných hlášenà mohou zůstat a budou odstranÄ›najen data logů (zobrazenà stránek, návÅ¡tÄ›vy a konverze) budou smazána. Nebo mohou být smazána hlášenà a data logů mohou být zachována.", + "DeleteDataInterval": "Smazat stará data každých", + "DeleteDataSettings": "Smazat staré logy návÅ¡tÄ›vnÃků a hlášenÃ", + "DeleteLogDescription2": "Pokud povolÃte automatické mazánà logů, musÃte zajistit, že jsou zpracovány vÅ¡echna dennà hlášenÃ, aby nedoÅ¡lo ke ztrátÄ› dat.", + "DeleteLogInfo": "Logy z následujÃcÃch tabulek budou smazány: %s", + "DeleteLogsConfirm": "Chystáte se povolit mazánà dat logů. Pokud budou odstranÄ›na stará data logů a nebyla vytvoÅ™ena historická hlášenÃ, nebudete schopen zobrazit stará analytická data. Oprav", "DeleteLogsOlderThan": "Vymazat logy starÅ¡Ã než", + "DeleteMaxRows": "Maximálnà poÄet řádků, které se majà smazat pÅ™i jednom bÄ›hu:", "DeleteMaxRowsNoLimit": "bez limitu", + "DeleteReportsConfirm": "Chystáte se povolit mazánà starých hlášenÃ. Pokud je budete chtÃt zobrazit, budou muset být znovu vytvoÅ™ena. Opravdu to chcete provést?", + "DeleteReportsDetailedInfo": "Data z databázových archivnÃch ÄÃselných tabulek (%s) a archivnÃch tabulek syrových dat (%s) budou odstranÄ›na.", + "DeleteReportsInfo": "Pokud je povoleno, stará hlášenà budou smazána. %sDoporuÄujeme použÃt tuto možnost pouze, je-li velikost vaÅ¡Ã databáze omezená.%s", + "DeleteReportsInfo2": "Pokud nenà povoleno \"%s\", stará hlášenà budou na požádánà znovu vytvoÅ™ena.", + "DeleteReportsInfo3": "Pokud je povoleno \"%s\", data budou nevratnÄ› ztracena.", + "DeleteReportsOlderThan": "Smazat hlášenà starÅ¡Ã než", + "DeleteSchedulingSettings": "Nastavenà plánovánÃ", + "DoNotTrack_Description": "Do not track je návrh technologie a politiky, která umožňuje uživatelům indikovat, že si nepÅ™ejà být stránkami, které navÅ¡tÄ›vujà a to vÄetnÄ› služeb webové analýzi, reklamnÃch služeb a sociálnÃch platforem.", + "DoNotTrack_Disable": "Zakázat podporu Do not track", + "DoNotTrack_Disabled": "Pivik sleduje vÅ¡echny návÅ¡tÄ›vnÃky vÄetnÄ› tÄ›ch, kteřà v možnostech svého webového prohlÞeÄe nastavili, že si nepÅ™ejà být sledováni.", + "DoNotTrack_DisabledMoreInfo": "DoporuÄujeme respektovat soukromà vaÅ¡ich návÅ¡tÄ›vnÃků a podporu Do not track povolit.", + "DoNotTrack_Enable": "Povolit podporu Do not track", + "DoNotTrack_Enabled": "AktuálnÄ› respektujete soukromà vaÅ¡ich návÅ¡tÄ›vnÃků, vÃbornÄ›!", + "DoNotTrack_EnabledMoreInfo": "Pokud uživatelé nastavili \"nepÅ™eji si být sledován\" (Donottrack je povolen), Piwik nebude sledovat tyto návÅ¡tÄ›vy.", + "DoNotTrack_SupportDNTPreference": "Podporovat pÅ™edvolbu Do not track", + "EstimatedDBSizeAfterPurge": "Odhadovaná velikost databáze po vyprázdnÄ›nÃ", + "EstimatedSpaceSaved": "Odhadované uÅ¡etÅ™ené mÃsto", + "GeolocationAnonymizeIpNote": "Poznámka: Geolokace bude mÃt pÅ™ibližnÄ› stejnou pÅ™esnost, když je anonymizován 1 bit. Pokud jsou anonymizovány 2 bity a vÃce, geolokace bude nepÅ™esná.", + "GetPurgeEstimate": "ZÃskat odhad po vyprázdnÄ›nÃ", "KeepBasicMetrics": "Uchovat základnà měřenà (návÅ¡tÄ›vy, zobrazenà stránek, odchody, cÃle, atd.)", + "KeepDataFor": "Uchovávat vÅ¡echna data po", + "KeepReportSegments": "Pro výše uchovávaná data také zachovat segmentovaná hlášenÃ", + "LastDelete": "Poslednà mazánà bylo v", + "LeastDaysInput": "ProsÃm uveÄte poÄet dnà vÄ›tÅ¡Ã než %s.", + "LeastMonthsInput": "ProsÃm uveÄte poÄet mÄ›sÃců vÄ›tÅ¡Ã než %s.", "MenuPrivacySettings": "Ochrana soukromÃ", + "NextDelete": "NásledujÃcà plánované mazánà za", + "PluginDescription": "PÅ™izpůsobà Piwik tak, aby splňoval zákony o soukromà dat.", + "PurgeNow": "Vyprázdnit databázi nynÃ", + "PurgeNowConfirm": "Chystáte se natrvalo odstranit data z vaÅ¡Ã databáze. Opravdu chcete pokraÄovat?", + "PurgingData": "Promazávánà dat...", + "RecommendedForPrivacy": "DoporuÄeno pro soukromÃ", "ReportsDataSavedEstimate": "Velikost databáze", - "TeaserHeadline": "Nastavenà ochrany soukromÃ" + "SaveSettingsBeforePurge": "Nastavenà mazánà dat byla zmÄ›nÄ›na. Uložte je pÅ™ed promazánÃm.", + "SeeAlsoOurOfficialGuidePrivacy": "PodÃvejte se také na náš oficiálnà návod: %ssoukromà webové analýzy%s", + "Teaser": "Na této stránce můžete Piwik nastavit tak, aby splňoval zákony o soukromà s použitÃm %s anonymizovánà IP adresy návÅ¡tÄ›vnÃků%s, %s automatického odstraňovánà starých logů návÅ¡tÄ›vnÃků z databáze%s a %s poskytovánÃm mechanismu vylouÄenà pro vaÅ¡e webové stránky%s.", + "TeaserHeadline": "Nastavenà ochrany soukromÃ", + "UseAnonymizedIpForVisitEnrichment": "Anonymizované IP adresy použÃt i pÅ™i obohacovánà návÅ¡tÄ›v.", + "UseAnonymizedIpForVisitEnrichmentNote": "Zásuvné moduly jako geolokace podle IP a poskytovatel vylepÅ¡ujà metadata o návÅ¡tÄ›vnÃcÃch. Ve výchozÃm stavu tyto zásuvné moduly použÃvajà anonymizované IP adresy. Pokud vyberete \"ne\", pak tyto zásuvné moduly budou použÃvat plné adresy, což způsobà omezenà soukromà ale zlepÅ¡enà výsledků.", + "UseAnonymizeIp": "Anonymizovat IP adresy návÅ¡tÄ›vnÃků", + "UseDeleteLog": "PrůběžnÄ› mazat staré logy návÅ¡tÄ›vnÃků z databáze", + "UseDeleteReports": "PrůběžnÄ› mazat stará hlášenà z databáze" }, "Provider": { "ColumnProvider": "Poskytovatel", "PluginDescription": "Zobrazà poskytovatele pÅ™ipojenà návÅ¡tÄ›vnÃků", + "ProviderReportDocumentation": "Toto hlášenà poskytuje informace o tom, jakého poskytovatele internetového pÅ™ipojenà vaÅ¡i návÅ¡tÄ›vnÃci pÅ™i pÅ™Ãstupu na stránky použili. Pokud kliknete na jméno poskytovatele, zobrazà se podrobnosti. %s Pokud Piwik nebyl schopen poskytovatele zjistit, je zobrazen jako IP.", "SubmenuLocationsProvider": "UmÃstÄ›nà a poskytovatel", "WidgetProviders": "Poskytovatelé" }, "Referrers": { + "AllReferrersReportDocumentation": "Toto hlášenà zobrazuje vÅ¡echny referrery v jednom uceleném hlášenÃ, kde zobrazuje vÅ¡echny webové stránky, klÃÄová slova a kampanÄ›, které vaÅ¡i návÅ¡tÄ›vnÃci pÅ™i hledánà vaÅ¡ich webových stránek použili.", "Campaigns": "KampanÄ›", + "CampaignsDocumentation": "NávÅ¡tÄ›vnÃci, kteřà pÅ™iÅ¡li na vaÅ¡e webové stránky jako výsledek kampanÄ›. %s Pro vÃce informacà si prohlédnÄ›te hlášenà %s.", + "CampaignsReportDocumentation": "Toto hlášenà zobrazuje, jaké kampanÄ› pÅ™ivedly návÅ¡tÄ›vnÃky na vaÅ¡e stránky. %s Pro vÃce informacà o sledovánà kampanà si %spÅ™eÄtÄ›te dokumentaci kampanà na piwik.org%s.", "ColumnCampaign": "Kampaň", "ColumnSearchEngine": "Vyhledávacà stroj", + "ColumnSocial": "Sociálnà sÃÅ¥", "ColumnWebsite": "Web", "ColumnWebsitePage": "Web stránka", "DetailsByReferrerType": "Podrobnosti podle typu refereru", "DirectEntry": "PÅ™Ãmy vstup", + "DirectEntryDocumentation": "NávÅ¡tÄ›vnÃk zadal URL vaÅ¡ich stránek do webového prohlÞeÄe a zaÄal s procházenÃm zde - adresu zadal pÅ™Ãmo.", "Distinct": "JedineÄnà refereÅ™i podle typu", "DistinctCampaigns": "jedineÄné kampanÄ›", "DistinctKeywords": "jedineÄná klÃÄová slova", "DistinctSearchEngines": "jedineÄné vyhledávaÄe", "DistinctWebsites": "jedineÄná weby", + "EvolutionDocumentation": "Toto je pÅ™ehled referrerů, které vedly návÅ¡tÄ›vnÃky na vaÅ¡e webové stránky.", + "EvolutionDocumentationMoreInfo": "Pro vÃce informacà o rozdÃlných typech referrerů nahlédnÄ›te do dokumentace tabulky %s.", "Keywords": "KlÃÄových slov", + "KeywordsReportDocumentation": "Toto hlášenà zobrazuje klÃÄová slova, která uživatelé hledali, než byli odkázáni na vaÅ¡e stránky. %s KliknutÃm na řádek tabulky zobrazÃte distribuci vyhledávaÄů, které byly použity k hledánà tohoto klÃÄového slova.", "PluginDescription": "Zobrazà data refererů: vyhledávacà stroje, klÃÄová slova, weby, správu kampanÃ, pÅ™Ãmé vstupy", + "Referrer": "Referrer", + "ReferrerName": "Jméno referreru", "Referrers": "OdkazujÃcà stránky", + "ReferrersOverview": "PÅ™ehled referrerů", "SearchEngines": "VyhledávacÃch strojů", + "SearchEnginesDocumentation": "NávÅ¡tÄ›vnÃk byl na vaÅ¡e stránky odkázán vyhledávaÄem. %s Pro vÃce informacà si prohlédnÄ›te hlášenà %s.", + "SearchEnginesReportDocumentation": "Toto hlášenà zobrazuje, které vyhledávaÄe odkázali návÅ¡tÄ›vnÃky na vaÅ¡e stránky. %s KliknutÃm na řádek v tabulce zobrazÃte, co uživatelé na daném vyhledávaÄi hledali.", + "SocialFooterMessage": "Toto je podmnožina hlášenà webových stránek zobrazeného vlevo. Filtruje ostatnà stránky, takže můžete pÅ™Ãmo porovnat referrery ze sociálnÃch sÃtÃ.", + "Socials": "Sociálnà sÃtÄ›", + "SocialsReportDocumentation": "Toto hlášenà zobrazuje, jaké sociálnà sÃtÄ› pÅ™ivedly návÅ¡tÄ›vnÃky na vaÅ¡e stránky. <br\/> KliknutÃm na KliknutÃm na řádek tabulky zobrazÃte stránky sociálnà sÃtÄ›, ze kterých návÅ¡tÄ›vnÃci pÅ™iÅ¡li.", "SubmenuSearchEngines": "VyhledávaÄe & klÃÄová slova", "SubmenuWebsites": "Web", "Type": "Typ refereru", "TypeCampaigns": "%s z kampanÃ", "TypeDirectEntries": "%s pÅ™Ãmých vstupů", + "TypeReportDocumentation": "Tato tabulka obsahuje informace o distribuci typů referrerů.", "TypeSearchEngines": "%s z vyhledavaÄů", "TypeWebsites": "%s z web sÃdel", "UsingNDistinctUrls": "(použÃvá %s jedineÄných url)", + "ViewAllReferrers": "Zobrazit vÅ¡echny referrery", + "ViewReferrersBy": "Zobrazit referrery podle %s", "Websites": "Web", + "WebsitesDocumentation": "NávÅ¡tÄ›vnÃk následoval odkaz, který na vaÅ¡e stránky vedl odjinud. %s PodÃvejte se na hlášenà %s, pokud chcete vÄ›dÄ›t vÃce.", + "WebsitesReportDocumentation": "V této tabulce můžete vidÄ›t stránky, které odkázaly návÅ¡tÄ›vnÃky na vaÅ¡e stránky. %s KliknutÃm na řádek v tabulce zobrazÃte URL, na kterých se odkazy nalézajÃ.", "WidgetExternalWebsites": "Seznam externÃch web sÃdel", - "WidgetKeywords": "Seznam klÃÄových slov" + "WidgetGetAll": "VÅ¡echny referrery", + "WidgetKeywords": "Seznam klÃÄových slov", + "WidgetSocials": "Seznam sociálnÃch sÃtÃ", + "WidgetTopKeywordsForPages": "NejÄastÄ›jÅ¡Ã klÃÄová slova pro URL stránky", + "XPercentOfVisits": "%s%% návÅ¡tÄ›v" }, "RowEvolution": { "AvailableMetrics": "Dostupná měřenÃ", + "CompareDocumentation": "KliknÄ›te na odkaz nÞe a otevÅ™ete toto vyskakovacà okno pro jiný řádek ze stejné tabulky kvůli srovnánà vÃce záznamů. <br\/> Použijte shift + kliknutà pro oznaÄenà řádku k porovnánà bez otevÅ™enà tohoto vyskakovacÃho okna.", + "CompareRows": "Porovnat řádky", + "ComparingRecords": "Porovnávánà %s řádků", + "Documentation": "KliknÄ›te na měřenÃ, pokud je chcete zobrazit ve velkém grafu vývoje. Použijte shoft + kliknutà pro zobrazenà vÃce měřenà najednou.", "MetricBetweenText": "mezi %s a %s", "MetricChangeText": "%s za interval", - "MetricsFor": "Měřenà pro %s" + "MetricMinMax": "BÄ›hem tohoto obdobà %1$s se pohyboval(a) mezi %2$s a %3$s", + "MetricsFor": "Měřenà pro %s", + "MultiRowEvolutionTitle": "Vývoj vÃce řádků", + "PickAnotherRow": "Vyberte dalšà řádek pro srovnánÃ", + "PickARow": "Vyberte řádek ke srovnánÃ" }, "ScheduledReports": { "AggregateReportsFormat": "Možnosti zobrazenÃ", + "AggregateReportsFormat_GraphsOnly": "Pouze zobrazit grafy (ne tabulky hlášenÃ)", + "AggregateReportsFormat_TablesAndGraphs": "Zobrazit tabulky hlášenà a grafy pro vÅ¡echna hlášenÃ", + "AggregateReportsFormat_TablesOnly": "(VýchozÃ) zobrazit tabulky hlášenà (grafy pouze pro klÃÄová měřenÃ)", "AlsoSendReportToTheseEmails": "OdesÃlat hlášenà také na tyto e-maily (jeden e-mail na řádek):", + "AreYouSureDeleteReport": "Opravdu chcete odstranit toto hlášenà a jeho plán?", + "CreateAndScheduleReport": "VytvoÅ™it a naplánovat hlášenÃ", "CreateReport": "VytvoÅ™it hlášenÃ", + "CustomVisitorSegment": "Vlastnà segment návÅ¡tÄ›vnÃka", + "DescriptionOnFirstPage": "Popis hlášenà bude zobrazen na prvnà jeho stranÄ›.", + "DisplayFormat_TablesOnly": "Pouze zobrazit tabulky (žádné grafy)", "EmailHello": "Ahoj,", "EmailReports": "Poslat hlášenà na e-mail", "EmailSchedule": "Plánovánà zasÃlánà hlášenÃ", + "EvolutionGraph": "Zobrazit historické grafy pro %s nejvyÅ¡Å¡Ãch hodnot", "FrontPage": "Hlavnà strana", "ManageEmailReports": "Spravovat emailové hlášenÃ", "MonthlyScheduleHelp": "MÄ›sÃÄnà plán: hlášenà bude odesláno prvnà den mÄ›sÃce", + "MustBeLoggedIn": "MusÃte být pÅ™ihlášen, abyste mohl vytvářet vlastnà hlášenÃ.", + "NoRecipients": "Toto hlášenà nemá pÅ™Ãjemce", + "OClock": "hodin", "Pagination": "Stránka %s z %s", "PiwikReports": "Hlášenà Piwiku", "PleaseFindAttachedFile": "ProsÃm najdÄ›te v pÅ™iloženém souboru %1$s hlášenà pro %2$s", + "PleaseFindBelow": "NajdÄ›te nÞe vaÅ¡e %1$s hlášenà pro %2$s.", "PluginDescription": "VytvoÅ™it a uložit vlastnà hlášenà a dostávat dennÃ, týdennà nebo mÄ›sÃÄnà emailové hlášenÃ.", "ReportFormat": "Formát hlášenÃ", + "ReportHour": "ZasÃlat hlášenà v", + "ReportIncludeNWebsites": "Hlášenà bude obsahovat hlavnà měřenà pro webové stránky, které majà aspoň jednnu návÅ¡tÄ›vu z %s aktuálnÄ› dostupných stránek.", + "ReportSent": "Hlášenà posláno", + "ReportsIncluded": "Zahrnuté statistiky", + "ReportType": "Odeslat hlášenà pomocÃ", + "ReportUpdated": "Hlášenà aktualizováno", + "Segment_Deletion_Error": "Tento segment nemůže být smazán nebo zneviditelnÄ›n, protože se použÃvá k vytvářenà e-mailových hlášenà %s. Zkuste to znovu poté, co ho z tÄ›chto hlášenà odstranÃte.", + "Segment_Help": "Můžete zvolit existujÃcà segment, který bude aplikován na data v tomto e-mailovém hlášenÃ. Segmenty můžete vytvářet a upravovat vlastnà segmenty na vaÅ¡Ã nástÄ›nce %s(kliknÄ›te zde pro otevÅ™enÃ)%s, pak kliknÄ›te na box \"%s\", pak \"%s\".", + "SegmentAppliedToReports": "Segment %s je aplikován na hlášenÃ.", "SendReportNow": "Odeslat hlášenà ihned", "SendReportTo": "Odeslat hlášenÃ", "SentToMe": "Odeslat hlášenà mnÄ›", + "TableOfContent": "Seznam hlášenÃ", + "ThereIsNoReportToManage": "Pro stránky %s neexistuje žádné hlášenÃ, které lze spravovat", + "TopLinkTooltip": "Vytvářejte vlastnà hlášenÃ, která budou automaticky doruÄena na vaÅ¡i nebo zákaznÃkovu e-mailovou adresu.", "TopOfReport": "ZpÄ›t nahoru", + "UpdateReport": "Aktualizovat hlášenÃ", "WeeklyScheduleHelp": "Týdennà plán: hlášenà bude odesláno každé pondÄ›lÃ" }, + "SegmentEditor": { + "AddANDorORCondition": "PÅ™idat podmÃnku %s", + "AddNewSegment": "PÅ™idat nový segment", + "AreYouSureDeleteSegment": "Opravdu chcete odstranit tento segment?", + "AutoArchivePreProcessed": "Segmentovaná hlášenà jsou pÅ™edzpracována rychleji (vyžadujà cron)", + "AutoArchiveRealTime": "Segmentovaná hlášenà jsou zpracována v reálném Äase", + "ChooseASegment": "Zvolte segment", + "DataAvailableAtLaterDate": "VaÅ¡e segmentovaná analytická hlášenà budou dostupná pozdÄ›ji. Omlouváme se za tuto nepÅ™Ãjemnost.", + "DefaultAllVisits": "VÅ¡echny návÅ¡tÄ›vy", + "DragDropCondition": "PÅ™etáhnÄ›te podmÃnku", + "LoadingSegmentedDataMayTakeSomeTime": "Zpracovánà segmentovaných dat návÅ¡tÄ›vnÃků může pár minut trvat...", + "OperatorAND": "AND", + "OperatorOR": "OR", + "SaveAndApply": "Uložit & použÃt", + "SegmentDisplayedAllWebsites": "VÅ¡echny webové stránky", + "SegmentDisplayedThisWebsiteOnly": "Pouze tyto webové stránky", + "SegmentIsDisplayedForWebsite": "A zobrazený po", + "SegmentNotApplied": "Segment %s nenà aplikován", + "SegmentNotAppliedMessage": "Požadujete data pro vlastnà segment %s, ale konfigurace Piwiku aktuálnÄ› nedovoluje z důvodů výkonu zpracovánà hlášenà v reálném Äase.", + "SelectSegmentOfVisitors": "Vyberte segment návÅ¡tÄ›vnÃků", + "ThisSegmentIsVisibleTo": "Tento segment je viditelný", + "VisibleToAllUsers": "VÅ¡em uživatelům", + "VisibleToMe": "MnÄ›", + "YouDontHaveAccessToCreateSegments": "Pro vytvářenà a úpravu segmentů nemáte požadovanou pÅ™Ãstupovou úroveň.", + "YouMayChangeSetting": "Jinak můžete nastavenà zmÄ›nit v souboru %s, nebo můžete upravit tento segment a zvolit %s.", + "YouMustBeLoggedInToCreateSegments": "Pro vytvářenà a úpravu vlastnÃch segmentů návÅ¡tÄ›vnÃků musÃte být pÅ™ihlášen." + }, "SEO": { "AlexaRank": "Hodnocenà Alexa", "Bing_IndexedPages": "Stránek zaindexovaných Bingem", @@ -979,8 +1586,12 @@ "DefaultCurrencyForNewWebsites": "Výchozà mÄ›na pro nové weby", "DefaultTimezoneForNewWebsites": "Výchozà Äasová zóna pro nové weby", "DeleteConfirm": "Jste si jisti, že chcete vymazat Web %s?", + "DisableSiteSearch": "Nesledovat vyhledávánà na stránkách", "EcommerceHelp": "Pokud zapnete CÃle, tak hlášenà bude mÃt novou sekci Obchod.", "EnableEcommerce": "Obchod zapnutý", + "EnableSiteSearch": "Sledovánà vyhledávánà na stránkách je povoleno", + "EnableSiteSpecificUserAgentExclude": "Povolit vynechánà user agentů specifické pro stránky.", + "EnableSiteSpecificUserAgentExclude_Help": "Pokud pro různé webové stránky potÅ™ebujete vylouÄit různé uživatelské agenty, zaÅ¡krtnÄ›te toto pole, kliknÄ›te na uložit a pak %1$spÅ™idejte uživatelské agenty výše%2$s.", "ExceptionDeleteSite": "Nenà možné vymazat toto Web, protože je jediné registrované. Nejprve pÅ™idejte nový web, poté jej vymažte.", "ExceptionEmptyName": "Jméno Webu nemůže zůstat prázdné.", "ExceptionInvalidCurrency": "MÄ›na %s je neplatná. ProsÃm zadejte platný symbol mÄ›ny. (napÅ™.: %s)", @@ -990,11 +1601,20 @@ "ExceptionNoUrl": "MusÃte zadat alespoň jednu URL pro web.", "ExcludedIps": "Vynechané IP adresy", "ExcludedParameters": "Vynechané parametry", + "ExcludedUserAgents": "VylouÄenà uživatelÅ¡tà agenti", + "GlobalExcludedUserAgentHelp1": "Vložte seznam uživatelských agentů, které majà být vylouÄeny ze sledovánà Piwikem.", + "GlobalExcludedUserAgentHelp2": "Tuto funkci můžete využÃt k vylouÄenà nÄ›kterých robotů ze sledovánÃ.", "GlobalListExcludedIps": "Globálnà seznam vynechaných IP adres", "GlobalListExcludedQueryParameters": "Globálnà seznam vynechaných URL parametrů", + "GlobalListExcludedUserAgents": "Globálnà seznam uživatelských agentů k vylouÄenÃ", + "GlobalListExcludedUserAgents_Desc": "Pokud Å™etÄ›zec uživatelského agenta obsahuje nÄ›který ze zadaných Å™etÄ›zců, tento návÅ¡tÄ›vnÃk bude vylouÄen z Piwiku.", "GlobalWebsitesSettings": "Globálnà nastavenà sÃdel", "HelpExcludedIps": "Zatejte seznam IP adrese, jednu na řádek, které chcete vynechat ze záznamů Piwiku. Můžete použÃt zástupné znaky napÅ™. %1$s nebo %2$s", "JsTrackingTagHelp": "Zde je JavaScriptový zaznamenávacà tag pro vloženà na vÅ¡echny vaÅ¡e stránky", + "KeepURLFragments": "Sledovánà URL fragmentů stránek", + "KeepURLFragmentsHelp": "Pokud je pole nÞe odÅ¡krtnuté, bude pÅ™i sledovánà z URL fragment (vÅ¡echno po znaku %1$s) odstranÄ›n: %2$s bude zaznamenáno jako %3$s", + "KeepURLFragmentsHelp2": "Toto nastavenà můžete také výše nastavit pro konkrétnà stránky.", + "KeepURLFragmentsLong": "Zachovat URL fragmenty stránek pÅ™i sledovánÃ", "ListOfIpsToBeExcludedOnAllWebsites": "IP adresy uvedené nÞe budou vynechány ze záznamu pro vÅ¡echny weby.", "ListOfQueryParametersToBeExcludedOnAllWebsites": "URL parametry uvedené nÞe budou vynechány z URL pro vÅ¡echny www adresy", "ListOfQueryParametersToExclude": "Zadejte seznam URL parametrů, jeden na řádek, které budou vynechány z hlášenà Piwiku", @@ -1006,12 +1626,23 @@ "PiwikOffersEcommerceAnalytics": "Piwik povolen pro rozÅ¡ÃÅ™enou analytiku a měřenà stránek typu Obchod. ÄŒÃst o %s analytice %s vÃce.", "PiwikWillAutomaticallyExcludeCommonSessionParameters": "Piwik automaticky vynechá běžné parametry sezenà (%s)", "PluginDescription": "Správa sÃdel v Piwiku: PÅ™idat nový web, Upravit existujÃcÃ, Zobrazit JavaScriptový kód pÅ™i umÃstÄ›nà na stránky. VÅ¡echny akce jsou k dispozici také pÅ™es API.", + "SearchCategoryDesc": "Piwik může také sledovat kategorii vyhledávánÃpro každé klÃÄové slovo internÃho vyhledávánÃ.", + "SearchCategoryLabel": "Parametr kategorie", + "SearchCategoryParametersDesc": "Můžete zadat seznam parametrů dotazu oddÄ›lených Äárkou, které urÄujà kategorii.", + "SearchKeywordLabel": "Parametr dotazu", + "SearchKeywordParametersDesc": "Vložte seznam vÅ¡ech parametrů dotazu oddÄ›lených Äárkou, které obsahujà klÃÄové slovo stránek.", + "SearchParametersNote": "Poznámka: Parametry dotazu a kategorie budou pouze pro webové stránky, které majà vyhledávánà na stránkách povolené, ale tyto parametry jsou prázdné.", + "SearchParametersNote2": "Pokud chcete zakázat vyhledávánà na stránkách pro nové stránky, nechte tato dvÄ› pole prázdná.", + "SearchUseDefault": "PoužÃt %svýchozÃ%s parametry vyhledávánà na stránkách", "SelectACity": "Zvolte mÄ›sto", "SelectDefaultCurrency": "Můžete zvolit výchozà mÄ›nu pro nové weby", "SelectDefaultTimezone": "Můžete zvolit výchozà Äasovou zónu pro nové weby", "ShowTrackingTag": "zobrazit zaznamenávacà tagy", "Sites": "Weby", + "SiteSearchUse": "Piwik můžete použÃt ke sledovánà a hlášenà toho, co návÅ¡tÄ›vnÃci hledajà pomocà internÃho vyhledávaÄe.", + "SuperUserAccessCan": "eUživatel se super uživatelským pÅ™Ãstupem může také %sspecifikovat globálnà nastavenÃ%s pro nové webové stránky.", "Timezone": "ÄŒasová zóna", + "TrackingSiteSearch": "Sledovánà internÃho vyhledávánà na stránkách", "TrackingTags": "Zaznamenávacà tagy pro %s", "Urls": "URL", "UTCTimeIs": "UTC Äas je %s", @@ -1019,8 +1650,43 @@ "YouCurrentlyHaveAccessToNWebsites": "MomentálnÄ› máte pÅ™Ãstup k %s stránce\/stránkám.", "YourCurrentIpAddressIs": "VaÅ¡e souÄasná IP adresa je %s" }, + "Transitions": { + "BouncesInline": "%s odrazů", + "DirectEntries": "PÅ™Ãmé záznamy", + "ErrorBack": "PÅ™ejÃt k pÅ™edchozà akci", + "ExitsInline": "%s východy", + "FromCampaigns": "Z kampanÃ", + "FromPreviousPages": "Z internÃch stránek", + "FromPreviousPagesInline": "%s z internÃch stránek", + "FromPreviousSiteSearches": "Z internÃho vyhledávánÃ", + "FromPreviousSiteSearchesInline": "%s z internÃch vyhledávánÃ", + "FromSearchEngines": "Z vyhledávaÄů", + "FromWebsites": "Z webových stránek", + "IncomingTraffic": "PÅ™Ãchozà provoz", + "LoopsInline": "%s obnovenà stránky", + "NoDataForAction": "Pro %s nejsou žádná data", + "NoDataForActionDetails": "BuÄ akce nemÄ›la za obdobà %s žádné zobrazenà stránky, nebo je neplatná.", + "OutgoingTraffic": "Odchozà provoz", + "PluginDescription": "Hlášenà o pÅ™edchozÃch a následujÃcÃch akcÃch pro každou URL stránky.", + "ShareOfAllPageviews": "Tato stránka mÄ›la %s zobrazenà (%s vÅ¡ech zobrazenÃ)", + "ToFollowingPages": "Na internà stránky", + "ToFollowingPagesInline": "%s na internà stránky", + "ToFollowingSiteSearches": "Internà vyhledávánÃ", + "ToFollowingSiteSearchesInline": "%s internÃch vyhledávánÃ", + "XOfAllPageviews": "%s ze vÅ¡ech zobrazenà této stránky", + "XOutOfYVisits": "%s (z %s)" + }, "UserCountry": { + "AssumingNonApache": "Nelze nalézt funkci apache_get_modules,pÅ™ edpokládám jiný server než Apache.", + "CannotFindGeoIPDatabaseInArchive": "V tar archivu %2$s se nepodaÅ™ilo najÃt soubor %1$s!", + "CannotFindGeoIPServerVar": "PromÄ›nná %s nenà nastavena. Váš webový server nemusà být správnÄ› nakonfigurován.", + "CannotFindPeclGeoIPDb": "NepodaÅ™ilo se najÃt databázi zemÃ, regionů nebo mÄ›st pro GEOIP modul PECl. UjistÄ›te se, že vaÅ¡e GEOIP databáze je umÃsÄ›na v adresáři %1$s a je pojmenována %2$s nebo %3$s, jinak si jà GEOIP modul PECl nevÅ¡imne.", + "CannotListContent": "NepodaÅ™ilo se vypsat obsah pro %1$s: %2$s", + "CannotLocalizeLocalIP": "IP adresa %s je mÃstnà a enemůže být geolokována.", + "CannotSetupGeoIPAutoUpdating": "Vypadá to, že vaÅ¡e GEOIP databáze ukládáte vnÄ› Piwiku (vÃme to, protože v podadresáři misc žádné databáze nejsou, ale gEOIP funguje). Piwik nemůže automaticky aktualizovat GEOIP databázi, když nenà uložena v podadresáři misc.", + "CannotUnzipDatFile": "NepodaÅ™ilo se rozbalit dat soubor v %1$s: %2$s", "City": "MÄ›sto", + "CityAndCountry": "%1$s, %2$s", "Continent": "Kontinent", "continent_afr": "Afrika", "continent_amc": "StÅ™edná Amerika", @@ -1304,44 +1970,112 @@ "country_zm": "Zambia", "country_zr": "Zaire", "country_zw": "Zimbabwe", + "CurrentLocationIntro": "Podle tohoto poskytovatele je vaÅ¡e aktuálnà umÃstÄ›nÃ", + "DefaultLocationProviderDesc1": "Výchozà poskytovatel umÃstÄ›nà odhaduje zemi návÅ¡tÄ›vnÃka na základÄ› použitého jazyka.", + "DefaultLocationProviderDesc2": "To nenà pÅ™ÃliÅ¡ pÅ™esné, proto doporuÄujeme %1$sinstalovat a použÃvat %2$sGEOIP%3$s.%4$s", + "DefaultLocationProviderExplanation": "PoužÃváte výchozÃho poskytovatele umÃstÄ›nÃ, což znamená, že se Piwik pokusà odhadnout zemi návÅ¡tÄ›vnÃka na základÄ› použitého jazyka. %1$sPÅ™eÄtÄ›te si%2$s, jak nastavit pÅ™esnÄ›jÅ¡Ã geolokaci.", "DistinctCountries": "%s jedineÄných států", "DownloadingDb": "Stahovánà %s", + "DownloadNewDatabasesEvery": "Aktualizovat databáze každých", + "FatalErrorDuringDownload": "PÅ™i stahovánà souboru doÅ¡lo k fatálnà chybÄ›. NÄ›co může být Å¡patnÄ› s vaÅ¡Ãm internetovým pÅ™ipojenÃm, staženou GEOIP databázÃ, nebo s Piwikem. Zkuste ji stáhnout a nainstalovat ruÄnÄ›.", "FoundApacheModules": "Piwik naÅ¡el tyto Apache moduly", + "FromDifferentCities": "různá mÄ›sta", + "GeoIPCannotFindMbstringExtension": "Nelze najÃt funkci %1$s. UjistÄ›te se, že je modul %2$s nainstalován a povolen.", "GeoIPDatabases": "Databáze GeoIP", + "GeoIPDocumentationSuffix": "Pokud chcete vidÄ›t toto hlášenÃ, musÃte nastavit GEOIP v administraci na záložce geolokace. KomerÄnà %1$sMaxmind%2$s GeoIP databáze majà vÄ›tÅ¡Ã pÅ™esnost než volnÄ› Å¡iÅ™itelné. Pokud chcete vidÄ›t, jak pÅ™esné jsou, kliknÄ›te %3$szde%4$s.", + "GeoIPImplHasAccessTo": "Tato implementace GeoIP má pÅ™Ãstup kn následujÃcÃm typům databázÃ.", + "GeoIPIncorrectDatabaseFormat": "Vypadá to, že vaÅ¡e GeoIP databáze má nesprávný formát. Může být poÅ¡kozena. UjistÄ›te se, že použÃváte binárnà formát a zkuste ji nahradit jinou kopiÃ.", + "GeoIpLocationProviderDesc_Pecl1": "Tento poskytovatel umÃstÄ›nà použÃvá GeoIP databázi a PECl modul k pÅ™esnému a efektivnÃmu nalezenà umÃstÄ›nà vaÅ¡ich návÅ¡tÄ›vnÃků.", + "GeoIpLocationProviderDesc_Pecl2": "Tento poskytovatel nemá žádná omezenÃ, takže to je ten, kterého doporuÄujeme použÃvat.", + "GeoIpLocationProviderDesc_Php1": "Tento poskytovatel umÃstÄ›nà je nejjednoduÅ¡Å¡Ã na instalaci, protože nevyžaduje žádnou konfiguraci serveru (ideálnà pro sdÃlené hostingy). K pÅ™esnému urÄenà umÃstÄ›nà návÅ¡tÄ›vnÃků použÃvá GeoIP databázi a MaxMind php API.", + "GeoIpLocationProviderDesc_Php2": "Pokud majà vaÅ¡e webové stránky velký provoz, můžete zjistit, že je tento poskytovatel polohy pomalý. V takovém pÅ™ÃpadÄ› nainstalujte %1$srozÅ¡ÃÅ™enà PECl%2$s nebo %3$sserverový modul%4$s.", + "GeoIpLocationProviderDesc_ServerBased1": "Tento poskytovatel umÃstÄ›nà využÃvá GeoIP modul, který byl instalován ve vaÅ¡em HTTP serveru. Tento poskytovatel je pÅ™esný a rychlý, ale může být použit pouze s %1$snormálnÃm sledovánà prohlÞeÄů.%2$s", + "GeoIpLocationProviderDesc_ServerBased2": "Pokud musÃte importovat logy nebo dÄ›lat nÄ›co jiného, co vyžaduje nastavovánà IP adres, použijte %1$sPECl implementaci GeoIP (doporuÄeno%2$s nebo %3$sPHP implementaci GeoIP.%4$s", + "GeoIpLocationProviderDesc_ServerBasedAnonWarn": "Poznámka: Anonimizace IP adres nemá vliv na umÃstÄ›nà hlášené tÃmto poskytovatelem. PÅ™ed jeho použÃvánÃm ověřte, že to neodporuje žádným zákonům.", + "GeoIpLocationProviderNotRecomnended": "Geolokace funguje, ale nepoužÃváte doporuÄeného poskytovatele umÃstÄ›nÃ.", + "GeoIPNoServerVars": "Piwik nemůže najÃt žádné GeoIP %s promÄ›nné", + "GeoIPPeclCustomDirNotSet": "PHP ini možnost %s nenà nastavena.", + "GeoIPServerVarsFound": "Piwik detekuje následujÃcà GeoIP %s promÄ›nné", + "GeoIPUpdaterIntro": "Piwik aktuálnÄ› spravuje aktualizace pro následujÃcà GeoIP databáze", + "GeoLiteCityLink": "Pokud použÃváte databázi GeoLite, použijte následujÃcà odkaz: %1$s%2$s%3$s.", "Geolocation": "Geolokace", + "GeolocationPageDesc": "Na této stránce můžete zmÄ›nit, jak Piwik urÄuje umÃstÄ›nà návÅ¡tÄ›vnÃků.", + "getCityDocumentation": "Toto hlášenà zobrazuje mÄ›sta návÅ¡tÄ›vnÃků, když pÅ™istoupili k vaÅ¡im stránkám.", + "getContinentDocumentation": "Toto hlášenà zobrazuje, na kterém kontinentu byli návÅ¡tÄ›vnÃci pÅ™i pÅ™Ãstupu k vaÅ¡im stránkám.", + "getCountryDocumentation": "Toto hlášenà zobrazuje zemi, ve které byli návÅ¡tÄ›vnÃci, když pÅ™istoupili k vaÅ¡im stránkám.", + "getRegionDocumentation": "Toto hlášenà zobrazuje region, ve kterém byli návÅ¡tÄ›vnÃci, když pÅ™istupovali k vaÅ¡im stránkám.", "HowToInstallApacheModule": "Jak nainstalovat GeoIP modul na Apache?", + "HowToInstallGeoIPDatabases": "Jak zÃskám GeoIP databáze?", "HowToInstallGeoIpPecl": "Jak nainstalovat GeoIP PECL rozÅ¡ÃÅ™enÃ?", "HowToInstallNginxModule": "Jak nainstalovat GeoIP modul pro Nginx?", + "HowToSetupGeoIP": "Jak nastavit pÅ™esnou geolokaci s GeoIP", + "HowToSetupGeoIP_Step1": "%1$sstáhnout%2$s databázi mÄ›st GeoLite od %3$sMaxMind%4$s.", + "HowToSetupGeoIP_Step2": "Rozbalte tento soubor a zkopÃrujte výsledek, %1$s, do podadresáře %2$smisc%3$s Piwiku (můžete to provést buÄ pomocà FTP nebo SSH).", + "HowToSetupGeoIP_Step3": "Obnovte tuto obrazovku. %1$sPHP GeoIP%2$s poskytovatel bude %3$snainstalovaný%4$s. Vyberte ho.", + "HowToSetupGeoIP_Step4": "A je hotovo. To znamená, že nynà uvidÃte mÄ›sto a region vaÅ¡ich návÅ¡tÄ›vnÃků spolu s velmi pÅ™esným urÄenà jejich zemÄ›.", + "HowToSetupGeoIPIntro": "Vypadá to, že nemáte nastavenou pÅ™esnou geolokaci. Je to užiteÄná vlastnost a bez nà neuvidÃte pÅ™esné a kompletnà informace o umÃstÄ›nà vaÅ¡ich návÅ¡tÄ›vnÃků. Zde je, jak s nà můžete rychle zaÄÃt:", + "HttpServerModule": "Modul HTTP serveru", + "InvalidGeoIPUpdatePeriod": "Neplatná doba pro aktualizovaÄ GeoIP databáze: %1$s. Platné hodnoty jsou %2$s.", + "IPurchasedGeoIPDBs": "Zakoupil jsem vÃce %1$spÅ™esné databáze od MaxMind%2$s a chci nastavit automatické katualizace.", "ISPDatabase": "Databáze ISP", + "IWantToDownloadFreeGeoIP": "Chci stáhnout volnou GeoIP databázi...", "Latitude": "ZemÄ›pisná Å¡ÃÅ™ka", "Location": "MÃsto", + "LocationDatabase": "Databáze umÃstÄ›nÃ", + "LocationDatabaseHint": "Databáze umÃstÄ›nà je databáze zemÃ, regionů, nebo mÄ›st.", + "LocationProvider": "Poskytovatel umÃstÄ›nÃ", "Longitude": "ZemÄ›pisná délka", + "NoDataForGeoIPReport1": "Pro toto hlášenà nejsou k dispozici žádná data, protože buÄ nejsou k dispozici GeoIP data, nebo nemohly být geolokovány IP adresy návÅ¡tÄ›vnÃků.", + "NoDataForGeoIPReport2": "Pokud chcete umožnit pÅ™esnou geolokaci, změňte nastavenà %1$szde%2$s a použijte %3$sdatabázi na úrovni mÄ›st%4$s.", "Organization": "SpoleÄnost", + "OrgDatabase": "Databáze organizacÃ", + "PeclGeoIPNoDBDir": "PECl modul hledá geoIP databáze v adresáři %1$s, ale ten neexistuje. VytvoÅ™te ho a umÃstÄ›te do nÄ›ho databáze, nebo nastavte php.ini možnost %2$s na správný adresář.", + "PeclGeoLiteError": "VaÅ¡e GeoIP databáze v adresáři %1$s je pojmenována %2$s. Bohužel, PECl modul ji pod tÃmto názvem nenajde. PÅ™ejmenujte ji na %3$s.", + "PiwikNotManagingGeoIPDBs": "Piwik aktuálnÄ› nespravuje žádné GeoIP databáze.", "PluginDescription": "Zobrazà státy návÅ¡tÄ›vnÃků", "Region": "Region", - "SubmenuLocations": "UmÃstÄ›nÃ" + "SetupAutomaticUpdatesOfGeoIP": "Nastavit automatické aktualizace GeoIP databázÃ", + "SubmenuLocations": "UmÃstÄ›nÃ", + "TestIPLocatorFailed": "Piwik se pokusil zjistit mÃstÄ›nà námé IP adresy %1$s, ale server odpovÄ›dÄ›l %2$s. Kdyby byl tento poskytovatel nastaven správnÄ›, odpovÄ›dÄ›l by %3$s.", + "ThisUrlIsNotAValidGeoIPDB": "Stažený soubor nenà platná GeoIP databáze. Zkontrolujte URL, nebo soubor stáhnÄ›te ruÄnÄ›.", + "ToGeolocateOldVisits": "Pokud chcete zÃskat data o umÃstÄ›nà pro staré návÅ¡tÄ›vy, použijte skript popisovaný %1$szde%2$s.", + "UnsupportedArchiveType": "Nalezen nepodporovaný typ archivu %1$s.", + "UpdaterHasNotBeenRun": "Aktualizátor nebyl nikdy spuÅ¡tÄ›n.", + "UpdaterIsNotScheduledToRun": "Nenà plánováno, že v budoucnu poběžÃ.", + "UpdaterScheduledForNextRun": "Je plánováno, že poběžà pÅ™i pÅ™ÃÅ¡tÃm provedenà cron pÅ™Ãkazu core:archive.", + "UpdaterWasLastRun": "Aktualizátor byl naposledy spuÅ¡tÄ›n v %s.", + "UpdaterWillRunNext": "DalÅ¡Ã spuÅ¡tÄ›nà je naplánováno na %s.", + "WidgetLocation": "UmÃstÄ›nà návÅ¡tÄ›vnÃka" }, "UserCountryMap": { + "AndNOthers": "a %s dalÅ¡Ãch", "Cities": "MÄ›sta", "Countries": "ZemÄ›", "DaysAgo": "pÅ™ed %s dny", + "GoalConversions": "%s konverzà cÃle", "Hours": "hodin", "HoursAgo": "pÅ™ed %s hodinami", "map": "mapa", "Minutes": "minut", "MinutesAgo": "pÅ™ed %s minutami", + "None": "Nic", "NoVisit": "Žádná návÅ¡tÄ›va", "RealTimeMap": "Mapa v reálném Äase", "Regions": "Regiony", "Searches": "%s vyhledávánÃ", "Seconds": "sekund", "SecondsAgo": "pÅ™ed %s sekundami", + "ShowingVisits": "Geolokované návÅ¡tÄ›vy poslednÃch", + "Unlocated": "<b>%s<\/b> %p z návÅ¡tÄ›v z %c nebylo možné geolokovat.", "VisitorMap": "Mapa návÅ¡tÄ›vnÃků", "WorldWide": "CelostvÄ›tová" }, "UserSettings": { "BrowserFamilies": "Rodiny Web prohlÞeÄů", + "BrowserLanguage": "Jazyk prohlÞeÄe", "Browsers": "Web prohlÞeÄe", + "BrowserWithNoPluginsEnabled": "%1$s bez povolených zásuvných modulů", + "BrowserWithPluginsEnabled": "%1$s s povolenými zásuvnými moduly %2$s", "ColumnBrowser": "Web prohlÞeÄ", "ColumnBrowserFamily": "Rodina Web prohlÞeÄe", "ColumnBrowserVersion": "Verze prohlÞeÄe", @@ -1419,6 +2153,7 @@ "Language_id": "indonéština", "Language_ie": "interlingue", "Language_ig": "igboÅ¡tina", + "Language_ii": "Jazyk Yi", "Language_ik": "inupiakÅ¡tina", "Language_io": "ido", "Language_is": "islandÅ¡tina", @@ -1544,11 +2279,15 @@ "VisitorSettings": "Nastavenà návÅ¡tÄ›vnÃků", "WideScreen": "Å irokoúhlá obrazovka", "WidgetBrowserFamilies": "ProhlÞeÄe podle rodiny", + "WidgetBrowserFamiliesDocumentation": "Tento graf zobrazuje prohlÞeÄe vaÅ¡ich návÅ¡tÄ›vnÃků odle prodin prohlÞeÄů. %s NejdůležitÄ›jÅ¡Ã informacà pro webové vývojáře je to, jaká vykreslovacà jádra návÅ¡tÄ›vnÃci použÃvajÃ. Název vykreslovacÃho jádra je v popisku následován v závorkách nejÄastÄ›jÅ¡Ãm prohlÞeÄem, který ho použÃvá.", "WidgetBrowsers": "Web prohlÞeÄe návÅ¡tÄ›vnÃků", + "WidgetBrowsersDocumentation": "Toto hlášenà obsahuje informace o tom, jaký druh prohlÞeÄe vaÅ¡i návÅ¡tÄ›vnÃci použili. Každá verze je poÄÃtána samostatnÄ›.", "WidgetBrowserVersion": "Verze webového prohlÞeÄe", "WidgetGlobalVisitors": "Hlavnà nastavenà návÅ¡tÄ›vnÃků", + "WidgetGlobalVisitorsDocumentation": "Toto hlášenà zobrazuje nejÄastÄ›jÅ¡Ã konfigurace, které vaÅ¡i návÅ¡tÄ›vnÃci mÄ›li. Konfigurace je kombinace operaÄnÃho systému, prohlÞeÄe a rozliÅ¡enÃ.", "WidgetOperatingSystems": "OperaÄnà systémy", "WidgetPlugins": "Seznam zásuvných modulů", + "WidgetPluginsDocumentation": "Toto hlášenà zobrazuje zásuvné moduly, které mÄ›li vaÅ¡i návÅ¡tÄ›vnÃci povoleny. Tato informace může být důležitá pÅ™i rozhodovánà o tom, jakým způsobem prezentovat obsah.", "WidgetResolutions": "RozliÅ¡enà obrazovky", "WidgetWidescreen": "Normálnà \/ Å irokoúhlá" }, @@ -1557,37 +2296,56 @@ "Alias": "Alias", "AllWebsites": "VÅ¡echny weby", "AnonymousUserHasViewAccess": "Poznámka: %1$s uživatel má právo k pÅ™Ãstupu k %2$s", + "AnonymousUserHasViewAccess2": "VaÅ¡e analytická hlášenà a informace o návÅ¡tÄ›vnÃcÃch je veÅ™ejnÄ› dostupná.", "ApplyToAllWebsites": "PoužÃt na vÅ¡echny weby", "ChangeAllConfirm": "Jste si jistÃ, že chcete zmÄ›nit '%s' oprávnÄ›nà pro vÅ¡echny weby?", + "ChangePasswordConfirm": "ZmÄ›na hesla také zmÄ›nà uživatelův token_auth. Opravdu chcete pokraÄovat?", "ClickHereToDeleteTheCookie": "KlinÄ›tÄ› zde pro vymazánà cookie a zaznamenávánà vaÅ¡Ãch návÅ¡tÄ›v", "ClickHereToSetTheCookieOnDomain": "KliknÄ›te zde pro nastavenà cookie, která vynechá vaÅ¡e návÅ¡tÄ›vy na webech monitorováných Piwikem na %s", + "ConfirmGrantSuperUserAccess": "Opravdu chcete uživateli %s povolit super uživatelský pÅ™Ãstup?", + "ConfirmProhibitMySuperUserAccess": "%s, opravdu chcete odstranit svůjvlastn à super uživatelský pÅ™Ãstup? PÅ™ijdete o vÅ¡echna oprávnÄ›nà a o pÅ™Ãstup k datům stránek a budete odhlášen z Piwiku.", + "ConfirmProhibitOtherUsersSuperUserAccess": "Opravdu chcete odstranit super uživatelský pÅ™Ãstup pro %s? Tento uživatel pÅ™ijde o vÅ¡echna práva a o pÅ™Ãstup ke vÅ¡em stránkám. Nezapomeňte mu povolit pÅ™Ãstup k tÄ›m, které potÅ™ebuje, je-li to nutné.", "DeleteConfirm": "Jste si jistÃ, že chcete vymazat uživatele %s?", "Email": "E-mail", + "EmailYourAdministrator": "%1$sPoÅ¡lete administrátorovi e-mail o tomto problému%2$s.", "ExceptionAccessValues": "Parametr pÅ™Ãstupu musà mÃt jednu z následujÃcÃch hodnot : [ %s ]", "ExceptionAdminAnonymous": "Nemůžete dát 'admin' pÅ™Ãstup 'anonymous' uživateli.", "ExceptionDeleteDoesNotExist": "Uživatel '%s' neexistuje a proto nemůže být vymazán.", + "ExceptionDeleteOnlyUserWithSuperUserAccess": "Smazánà uživatele %s nenà možné.", "ExceptionEditAnonymous": "'Anonymous' uživatel nemůže být upraven, nebo vymazán. Je použit Piwikem k definici uživatele, který jeÅ¡tÄ› nenà pÅ™ihlášen. NapÅ™Ãklad můžete zveÅ™ejnit vaÅ¡e statistiky udÄ›lenÃm oprávnÄ›nà 'view' uživateli 'anonymous'.", "ExceptionEmailExists": "Uživatel s emailem '%s' již existuje.", "ExceptionInvalidEmail": "Email nemá platný formát.", "ExceptionInvalidLoginFormat": "PÅ™ihlaÅ¡ovacà jméno musà obsahovat mezi %1$s a %2$s znaky a obsahovat pouze pÃsmena, ÄÃsla, nebo znaky '_' nebo '-' nebo '.'", + "ExceptionInvalidPassword": "Délka hesla musà být mezi %1$s a %2$s znaky.", "ExceptionLoginExists": "Uživatelské jméno '%s' již existuje.", "ExceptionPasswordMD5HashExpected": "UsersManager.getTokenAuth oÄekává heslo v podobÄ› MD5 hashe (32 znaků dlouhého Å™etÄ›zce). ProsÃm nejprve zavoltejte metodu md5() na tomto hesle.", + "ExceptionRemoveSuperUserAccessOnlySuperUser": "OdstranÄ›nà super uživatelského pÅ™Ãstupu uživateli %s nenà možné.", + "ExceptionSuperUserAccess": "Tento uživatel již má super uživatelský pÅ™Ãstup, takže má pÅ™Ãstup k datům vÅ¡ech stránek. Můžete super uživatelský pÅ™Ãstup odstranit a zkusit to znovu.", "ExceptionUserDoesNotExist": "Uživatel '%s' neexistuje.", + "ExceptionYouMustGrantSuperUserAccessFirst": "Musà zůstat alespoň jeden uživatel se super uživatelským pÅ™Ãstupem. NejdÅ™Ãve ho nÄ›komu pÅ™idÄ›lte.", "ExcludeVisitsViaCookie": "Vynechat vaÅ¡e navÅ¡tÄ›vy pomocà cookie", "ForAnonymousUsersReportDateToLoadByDefault": "Datum hlášenÃ, které se má naÄÃst jako výchozà pro anonymnà uživatele", "IfYouWouldLikeToChangeThePasswordTypeANewOne": "Pokud chcete zmÄ›nit heslo, zapiÅ¡tÄ› jej. Jinak jej nevyplňujte.", + "InjectedHostCannotChangePwd": "AktuálnÄ› navÅ¡tÄ›vujete Piwik s neznámým hostitelem %1$s. Dokud tento problém nevyÅ™eÅ¡Ãte, nemůžete zmÄ›nit heslo.", + "LastSeen": "Naposledy spatÅ™en", "MainDescription": "NastavenÃ, kteřà uživatelé majà pÅ™Ãstup k Piwik statistikám na vaÅ¡Ãch stránkách. Můžete také nastavit oprávnÄ›nà ke vÅ¡em stránkám najednou.", "ManageAccess": "Správa pÅ™Ãstupu", "MenuAnonymousUserSettings": "Nastavenà anonymnÃho uživatele", "MenuUsers": "Uživatelé", "MenuUserSettings": "Nastavenà uživatele", + "NoteNoAnonymousUserAccessSettingsWontBeUsed2": "Poznámka: Nemůžete mÄ›nit nastavenà v této sekci, protože žádná z vaÅ¡ich stránek nemůže být zobrazena anonymnÃm uživatelem.", + "NoUsersExist": "ZatÃm nejsou žádnà uživatelé.", "PluginDescription": "Správa uživatelů v Piwiku: pÅ™idat nového uživatele, upravit existujÃcÃcho, aktualizace oprávnÄ›nÃ. VÅ¡echny akce jsou k dizpozici pÅ™es API", "PrivAdmin": "Administrátor", "PrivNone": "Žádné oprávnÄ›nÃ", "PrivView": "ZobrazenÃ", "ReportDateToLoadByDefault": "Datum hlášenÃ, které se má naÄÃst jako výchozÃ", "ReportToLoadByDefault": "HlášenÃ, které se má naÄÃst jako výchozÃ", + "SuperUserAccessManagement": "Spravovat super uživatelský pÅ™Ãstup", + "SuperUserAccessManagementGrantMore": "Zde můžete pÅ™idÄ›lit super uživatelský pÅ™Ãstup jiným uživatelům Piwiku. PoužÃvejte tuto funkci opatrnÄ›.", + "SuperUserAccessManagementMainDescription": "Super uživatelé majà nejvyÅ¡Å¡Ã oprávnÄ›nÃ. Mohou vykonávat vÅ¡echny administrativnà operace, jako je pÅ™idávánà stránek k monitorovánÃ, pÅ™idávánà uživatelů, zmÄ›na uživatelských oprávnÄ›nÃ, povolovánà a zakazovánà zásuvných modulů, dokonce jejich instalace z obchodu.", "TheLoginScreen": "PÅ™ihlaÅ¡ovacà obrazovka", + "ThereAreCurrentlyNRegisteredUsers": "AktuálnÄ› je %s registrovaných uživatelů.", "TypeYourPasswordAgain": "ZapiÅ¡tÄ› vaÅ¡e nové heslo znova", "User": "Uživatel", "UsersManagement": "Správa uživatelů", @@ -1601,14 +2359,19 @@ "ColumnActionsByReturningVisits": "Akcà za opakovanou návÅ¡tÄ›vu", "ColumnAverageVisitDurationForReturningVisitors": "PrůmÄ›rná délka návÅ¡tÄ›vy pro navracejÃcÃch se návÅ¡tÄ›vnÃcÃch (v sekundách)", "ColumnAvgActionsPerReturningVisit": "PromÄ›rnů poÄet akcà pro navracejÃcà se návÅ¡tÄ›vnÃky", + "ColumnBounceCountForReturningVisits": "PoÄet odrazů pro vracejÃcà se návÅ¡tÄ›vy", "ColumnBounceRateForReturningVisits": "Frekvence odchodů pro opakované návÅ¡tÄ›vy", + "ColumnMaxActionsInReturningVisit": "Maximum akcà v jedné vracejÃcà se návÅ¡tÄ›vÄ›", + "ColumnNbReturningVisitsConverted": "PoÄet zkonvertovaných vracejÃcÃch se návÅ¡tÄ›v", "ColumnReturningVisits": "OpÄ›tovných návÅ¡tÄ›v", + "ColumnSumVisitLengthReturning": "Celkový Äas strávený vracejÃcÃmi se návÅ¡tÄ›vnÃky (v sekundách)", "ColumnUniqueReturningVisitors": "Unikátnà vracejÃcà se návÅ¡tÄ›vnÃci", "PluginDescription": "Hlásà různé statistiky o navracejÃcÃch se versus nových návÅ¡tÄ›vnÃcÃch", "ReturnActions": "%s akcà za opakovanou návÅ¡tÄ›vu", "ReturnAverageVisitDuration": "%s průmÄ›rná dÄ›lka návÅ¡tÄ›vy pro navracejÃcà se návÅ¡tÄ›vnÃky", "ReturnAvgActions": "%s akcà na navracejÃcÃch se návÅ¡tÄ›vnÃka", "ReturnBounceRate": "%s opakujÃcÃch se návÅ¡tÄ›v odeÅ¡lo (opustilo web po jedné stránce)", + "ReturningVisitDocumentation": "VracejÃcà se návÅ¡tÄ›va je návÅ¡tÄ›vnÃk, který již stránku aspoň jednou navÅ¡tÃvil.", "ReturningVisitsDocumentation": "Toto je pÅ™ehled vracejÃcÃch se návÅ¡tÄ›vnÃků.", "ReturnVisits": "%s opakujÃcÃch se návÅ¡tÄ›v", "SubmenuFrequency": "Frekvence", @@ -1632,10 +2395,15 @@ "VisitsPerDuration": "NávÅ¡tÄ›v za dobu návÅ¡tÄ›vy", "VisitsPerNbOfPages": "NávÅ¡tÄ›v za poÄet stránek", "WidgetLengths": "Doba návÅ¡tÄ›v", + "WidgetLengthsDocumentation": "V tomto hlášenà vidÃte, kolik návÅ¡tÄ›v mÄ›lo urÄitou celkovou délku. NejdÅ™Ãve je toto hlášenà zobrazeno jako tag cloud, ÄastÄ›jÅ¡Ã doby jsou vÄ›tÅ¡Ãm pÃsmem.", "WidgetPages": "Stránek za návÅ¡tÄ›vu", - "WidgetVisitsByDaysSinceLastDocumentation": "V hlášenà můžete vidÄ›t kolik návstÄ›v bylo od návstÄ›vnÃků, kteřà již v minulosti po nÄ›kolika dnech stránku navstÃvili." + "WidgetPagesDocumentation": "V tomto hlášenà je zobrazeno, kolik návÅ¡tÄ›v provedlo urÄité množstvà zobrazenà stránek. NejdÅ™Ãve je toto hlášenà zobrazeno jako tag cloud, ÄastÄ›jÅ¡Ã ÄÃsla majà vÄ›tÅ¡Ã pÃsmo.", + "WidgetVisitsByDaysSinceLast": "NávÅ¡tÄ›vy podle dnů od poslednà návÅ¡tÄ›vy", + "WidgetVisitsByDaysSinceLastDocumentation": "V hlášenà můžete vidÄ›t kolik návstÄ›v bylo od návstÄ›vnÃků, kteřà již v minulosti po nÄ›kolika dnech stránku navstÃvili.", + "WidgetVisitsByNumDocumentation": "V tomto hlášenà vidÃte, kolik návÅ¡tÄ›v bylo n-tou návÅ¡tÄ›vou, t. j. návÅ¡tÄ›vnÃky, kteřà navÅ¡tÃvili vaÅ¡e stránky aspoň n-krát." }, "VisitsSummary": { + "AverageGenerationTime": "%s průmÄ›rný Äas generovánÃ", "AverageVisitDuration": "%s průmÄ›rná doba návÅ¡tÄ›vy", "GenerateQueries": "%s provedeno dotazů", "GenerateTime": "%s sekund k vygenerovánà stránky", @@ -1646,6 +2414,7 @@ "NbKeywordsDescription": "%s unikátnà klÃÄová slova", "NbOutlinksDescription": "%s externÃch odkazů", "NbPageviewsDescription": "%s zobrazenÃ", + "NbSearchesDescription": "Celkem %s vyhledávánà na vaÅ¡ich stránkách", "NbUniqueDownloadsDescription": "%s unikátnÃch straženÃ", "NbUniqueOutlinksDescription": "%s unikátnÃch externÃch odkazů", "NbUniquePageviewsDescription": "%s unikátnÃch zobrazenÃ", @@ -1668,6 +2437,7 @@ "ServerTime": "NávÅ¡tÄ›vy podle serverového Äasu", "SubmenuTimes": "ÄŒasy", "VisitsByDayOfWeek": "NávÅ¡tÄ›vy podle dnů v týdnu", + "WidgetByDayOfWeekDocumentation": "Tento graf zobrazuje, kolik návÅ¡tÄ›v obdržela vaÅ¡e stránka každý den v týdnu.", "WidgetLocalTime": "NávÅ¡tÄ›vy podle lokálnÃho Äasu", "WidgetLocalTimeDocumentation": "Tento graf ukazuje Äas v %s návÅ¡tÄ›vnÃkovo Äasové zónÄ› %s bÄ›hem jÄ›ho návÅ¡tÄ›vy.", "WidgetServerTime": "NávÅ¡tÄ›vy podle serverového Äasu", @@ -1675,6 +2445,7 @@ }, "Widgetize": { "OpenInNewWindow": "OtevÅ™Ãt nové okno", - "PluginDescription": "Tento zásuvný modul zjednoduÅ¡uje export widgetů Piwiku na váš blog, web nebo Igoogle a Netvibes!" + "PluginDescription": "Tento zásuvný modul zjednoduÅ¡uje export widgetů Piwiku na váš blog, web nebo Igoogle a Netvibes!", + "TopLinkTooltip": "Exportujte své Piwik hlášenà jako widgety a použijte eje e vaÅ¡Ã aplikaci jako iframe." } }
\ No newline at end of file diff --git a/lang/da.json b/lang/da.json index 0bec0dcb26..7770291eeb 100644 --- a/lang/da.json +++ b/lang/da.json @@ -1086,6 +1086,8 @@ "PasswordDoNotMatch": "adgangskoder stemmer ikke overens", "PasswordRepeat": "Gentag adgangskode", "PercentDone": "%s %% udført", + "PiwikOrgNewsletter": "e-mail mig de vigtigste Piwik community opdateringer", + "PiwikProNewsletter": "Jeg er interesseret i %sPiwik PRO%s tjenester (ikke mere end 1 e-mail om mÃ¥neden)", "PleaseFixTheFollowingErrors": "Ret følgende fejl", "PluginDescription": "Installation af Piwik. Installationen sker som regel kun én gang. Hvis konfigurationsfilen config\/config.inc.php slettes starter installationen igen.", "Requirements": "Piwik krav", @@ -1136,6 +1138,7 @@ "SystemCheckPdoAndMysqliHelp": "PÃ¥ en linux-server kan php kompileres med følgende valg: %1$sn i php.ini, tilføj følgende linjer: %2$s", "SystemCheckPhp": "PHP version", "SystemCheckPhpPdoAndMysqli": "Mere information pÃ¥: %1$sPHP PDO%2$s og %3$sMYSQLI%4$s.", + "SystemCheckSessionAutostart": "For at forhindre nogle problemer, indstil følgende i php.ini filen: session.auto_start = 0", "SystemCheckSplHelp": "Konfigurer og genstart PHP med standard PHP Biblioteket (SPL) aktiveret (som standard).", "SystemCheckSummaryNoProblems": "SÃ¥dan! Der er ingen problemer med din Piwik opsætning. Giv dig selv et klap pÃ¥ skulderen.", "SystemCheckSummaryThereWereErrors": "Ups! Piwik har opdaget nogle %1$skritiske problemer%2$s med din Piwik opsætning. %3$sDisse problemer skal løses øjeblikkeligt.%4$s", diff --git a/lang/el.json b/lang/el.json index 5fd1315868..2fe13a93f9 100644 --- a/lang/el.json +++ b/lang/el.json @@ -1084,6 +1084,8 @@ "PasswordDoNotMatch": "ο κωδικός δεν ταιÏιάζει", "PasswordRepeat": "Επανάληψη ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης", "PercentDone": "%s %% ΟλοκληÏώθηκε", + "PiwikOrgNewsletter": "στείλε μου e-mail για μεγάλες ενημεÏώσεις της κοινοτικής Îκδοσης του Piwik", + "PiwikProNewsletter": "ΕνδιαφÎÏομαι για υπηÏεσίες του %sPiwik PRO%s (όχι πεÏισσότεÏα από 1 e-mail το μήνα)", "PleaseFixTheFollowingErrors": "ΔιοÏθώστε τα ακόλουθα σφάλματα", "PluginDescription": "Διαδικασία εγκατάστασης του Piwik. Η Εγκατάσταση γίνεται συνήθως μόνο μια φοÏά. Αν το αÏχείο Ïυθμίσεων config\/config.inc.php Îχει διαγÏαφεί, η εγκατάσταση θα ξεκινήσει από την αÏχή.", "Requirements": "Απαιτήσεις Piwik", @@ -1134,6 +1136,7 @@ "SystemCheckPdoAndMysqliHelp": "Σε διακομιστή Linux μποÏείτε να Ïυθμίσετε την php με τις ακόλουθες επιλογÎÏ‚: %1$s στο αÏχείο php.ini, Ï€ÏοσθÎστε τις ακόλουθες γÏαμμÎÏ‚: %2$s", "SystemCheckPhp": "Έκδοση PHP", "SystemCheckPhpPdoAndMysqli": "ΠεÏισσότεÏες πληÏοφοÏίες στο: %1$sPHP PDO%2$s και %3$sMYSQLI%4$s.", + "SystemCheckSessionAutostart": "Για την αποφυγή οÏισμÎνων Ï€Ïοβλημάτων, οÏίστε την παÏακάτω τιμή στο php.ini αÏχείο: session.auto_start=0", "SystemCheckSplHelp": "Î ÏÎπει να Ïυθμίσετε και ξαναεγκαταστήσετε την PHP με τη Βασική Βιβλιοθήκη PHP (SPL) ενεÏγοποιήμÎνη (ως Ï€Ïοεπιλογή).", "SystemCheckSummaryNoProblems": "Δεν υπάÏχουν Ï€Ïοβλήματα με την εγκατάσταση του Piwik. Όλα καλά!", "SystemCheckSummaryThereWereErrors": "Îωχ, το Piwik εντόπισε %1$sκÏίσιμα θÎματα%2$s με την εγκατάσταση του Piwik. %3$sΑυτά τα θÎματα Ï€ÏÎπει να διοÏθωθοÏν άμεσα.%4$s", diff --git a/lang/en.json b/lang/en.json index 9d45aeb686..3f9f4a6aed 100644 --- a/lang/en.json +++ b/lang/en.json @@ -141,6 +141,7 @@ "LatestBetaRelease": "The latest beta release", "LatestStableRelease": "The latest stable release", "LogoNotWriteableInstruction": "To use your custom logo instead of the default Piwik logo, give write permission to this directory: %1$s Piwik needs write access for your logos stored in the files %2$s.", + "FileUploadDisabled": "Uploading files is not enabled in your PHP configuration. To upload your custom logo please set %s in php.ini and restart your webserver.", "LogoUpload": "Select a Logo to upload", "FaviconUpload": "Select a Favicon to upload", "LogoUploadHelp": "Please upload a file in %s formats with a minimum height of %s pixels.", @@ -1172,7 +1173,9 @@ "WeHopeYouWillEnjoyPiwik": "We hope you will enjoy using Piwik as much as we enjoy making it.", "Welcome": "Welcome!", "WelcomeHelp": "<p>Piwik is a free/libre web analytics software that makes it easy to get the information you want from your visitors.<\/p><p>This process is split up into %s easy steps and will take around 5 minutes.<\/p>", - "WelcomeToCommunity": "Welcome to the Piwik community!" + "WelcomeToCommunity": "Welcome to the Piwik community!", + "CannotConnectToDb": "Cannot connect to the database", + "CannotConnectToDbResolvingExplanation": "This may be a temporary issue, try %1$srefreshing the page%2$s. If the problem persists please contact your Piwik administrator." }, "LanguagesManager": { "AboutPiwikTranslations": "About Piwik translations", diff --git a/lang/fr.json b/lang/fr.json index 4292695d61..1c689e60a2 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -104,6 +104,7 @@ "CustomLogoHelpText": "Vous pouvez personnaliser le logo Piwik qui sera affichée dans l'interface utilisateur et les rapports par courriel.", "DevelopmentProcess": "Bien que notre %sprocessus de développement%s inclue des milliers de tests automatisés, les béta testeurs jouent un rôle clef dans la réalisation de la \"politique zéro bug\" de Piwik.", "EmailServerSettings": "Paramètres du serveur mail", + "FaviconUpload": "Sélectionnez un favicon à télécharger", "ForBetaTestersOnly": "Pour les bêta testeurs uniquement", "ImageTracking": "Suivi par Image", "ImageTrackingIntro1": "Quand un visiteur désactive JavaScript, ou quand JavaScript ne peut être utilisé, vous pouvez utiliser le lien de suivi par image pour suivre les visiteurs.", @@ -154,6 +155,7 @@ "PiwikIsInstalledAt": "Piwik est installé à l'adresse", "PluginDescription": "Zone d'administration de Piwik.", "PluginSettingChangeNotAllowed": "Vous n'êtes pas autorisé(e) à modifier la valeur du paramètre \"%s\" du plugin \"%s\"", + "PluginSettingReadNotAllowed": "Vous n'êtes pas autorisé(e) à voir la valeur du paramètre \"%s\" dans le plugin \"%s\"", "PluginSettings": "Paramètres du composant", "PluginSettingsIntro": "Vous pouvez ici modifier les paramètres des composants tierce partie suivants :", "PluginSettingsValueNotAllowed": "La valeur pour le champ \"%s\" du composant \"%s\" n'est pas autorisée.", @@ -446,17 +448,26 @@ "Feedback": { "ContactThePiwikTeam": "Contactez l’Équipe Piwik!", "DoYouHaveBugReportOrFeatureRequest": "Avez-vous un bug à rapporter ou une fonctionnalité à demander?", + "GetInTouch": "Nous apprécions vos commentaires et lisons tous les messages. Peut-être voudriez vous nous informer d'une opportunité commerciale, employer un consultant, nous raconter un succès ou simplement dire bonjour!", "HowToCreateIssue": "Merci de lire la documentation sur la bonne manière d'écrire un %1$srapport de bug%2$s ou %3$sune demande de nouvelle fonctionnalité%4$s. Ensuite, %5$senregistrez-vous%6$s ou %7$sconnectez-vous%8$s sur notre gestionnaire d'incidents puis créez un %9$snouveau ticket%10$s.", "IWantTo": "Je veux:", "LearnWaysToParticipate": "Renseignez vous sur les manières dont vous pouvez %s participer%s", "ManuallySendEmailTo": "Merci d'envoyer manuellement votre message à ", "PluginDescription": "Envoie vos retours à l’Équipe Piwik. Partagez vos idées et suggestions avec nous!", + "PrivacyClaim": "Piwik respecte votre %1$svie privée%2$s et vous donne un contrôle total sur vos données.", + "RateFeatureLeaveMessageDislike": "Nous sommes désolés de voir que vous n'aimez pas ça. N'hésitez pas à nous dire comme nous pouvons améliorer.", + "RateFeatureLeaveMessageLike": "Nous sommes heureux de savoir que vous l'aimez ! S'il vous plaît laissez-nous savoir ce que vous aimez le plus ou si vous avez une demande de fonctionnalité.", "RateFeatureSendFeedbackInformation": "Voter installation Piwik nous enverra (l'équipe Piwik) un e-mail (contenant votre adresse e-mail) afin que nous puissions entrer en contact avec vous si vous avez des questions.", + "RateFeatureThankYouTitle": "Merci d'avoir noté \"%s\" !", + "RateFeatureTitle": "Est-ce que vous aimez la fonctionnalité \"%s\" ? Notez la et laissez un commentaire", "SendFeedback": "Envoyer le retour", "SpecialRequest": "Avez-vous une demande spéciale pour l’Équipe Piwik?", "ThankYou": "Merci d'avoir aidé à améliorer Piwik!", "TopLinkTooltip": "Dites nous ce que vous en pensez, ou demandez un Support Professionnel.", - "VisitTheForums": "Visitez les %s Forums%s" + "ViewAnswersToFAQ": "Voir les réponses aux %squestions fréquemment posées%s", + "ViewUserGuides": "Apprenez comment configurer Piwik et comment analyser de manière efficaces vos données avec notre %1$sguide utilisateur%2$s", + "VisitTheForums": "Visitez les %s Forums%s", + "WantToThankConsiderDonating": "Vous pensez que Piwik est génial et voulez nous remercier?" }, "General": { "AbandonedCarts": "Paniers abandonnés", @@ -624,6 +635,7 @@ "ExceptionUnableToStartSession": "Impossible de démarrer une session.", "ExceptionUndeletableFile": "Impossible de supprimer %s", "ExceptionUnreadableFileDisabledMethod": "Le fichier de configuration {%s} n'a pas pu être lu. votre hébergeur a probablement désactivé %s.", + "ExpandDataTableFooter": "Modifier la visualisation ou configurer le rapport", "Export": "Exporter", "ExportAsImage": "Exporter au format Image", "ExportThisReport": "Exporter ce jeu de données dans d'autres formats", @@ -757,6 +769,7 @@ "Password": "Mot de passe", "Period": "Période", "Piechart": "Camembert", + "PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s est disponible. Veuillez informer %2$sl'administrateur Piwik%3$s.", "PiwikXIsAvailablePleaseUpdateNow": "Piwik %1$s est maintenant disponible. %2$s Merci de mettre à jour!%3$s (voir %4$s les modifications%5$s).", "PleaseSpecifyValue": "Merci de spécifier une valeur pour %s", "PleaseUpdatePiwik": "Merci de mettre à jour Piwik", @@ -998,11 +1011,24 @@ "PluginDescription": "Génère de magnifiques graphiques en image PNG statique pour tous vos rapports Piwik." }, "Insights": { + "ControlComparedToDescription": "Croissance comparée à ", + "ControlFilterByDescription": "Tout afficher, seulement les déplacés, seulement nouveaux ou seulement disparus", + "DatePeriodCombinationNotSupported": "Il n'est pas possible de générer des indicateurs pour cette combinaison de date et de période.", "DayComparedToPreviousDay": "jour précédent", "DayComparedToPreviousWeek": "même jour de la semaine précédente", "DayComparedToPreviousYear": "même jour de l'année précédente", + "Filter": "Filtrer", + "FilterIncreaserAndDecreaser": "Augmentateur & réducteur", + "FilterOnlyDecreaser": "Réducteur uniquement", + "FilterOnlyDisappeared": "Disparus uniquement", + "FilterOnlyIncreaser": "Augmentateur uniquement", + "FilterOnlyMovers": "Déplaceurs uniquement", + "FilterOnlyNew": "Nouveaux uniquement", + "IgnoredChanges": "Les modifications affectant moins de %s ont été ignorées.", "MonthComparedToPreviousMonth": "mois précédent", "MonthComparedToPreviousYear": "même mois de l'année précédente", + "MoversAndShakersWidgetTitle": "Déplaceurs et Shakers", + "NoResultMatchesCriteria": "Aucune ligne ne correspond aux critères", "OverviewWidgetTitle": "Aperçu des idées", "WeekComparedToPreviousWeek": "semaine précédente", "WidgetCategory": "Idées", diff --git a/lang/it.json b/lang/it.json index 50b39708ae..e9cdc1dcb7 100644 --- a/lang/it.json +++ b/lang/it.json @@ -1084,6 +1084,8 @@ "PasswordDoNotMatch": "Le Password non coincidono", "PasswordRepeat": "Password (ripeti)", "PercentDone": "%s %% Fatto", + "PiwikOrgNewsletter": "Inviami per email gli aggiornamenti importanti della comunità di Piwik", + "PiwikProNewsletter": "Sono interessato ai servizi di %sPiwik PRO%s (non più di 1 email al mese)", "PleaseFixTheFollowingErrors": "Per favore, risolvi i seguenti errori", "PluginDescription": "Processo di installazione di Piwik. L'installazione è di solito fatta una sola volta. Se il file di configurazione (config\/config.inc.php) viene cancellato, l'installazione partirà di nuovo.", "Requirements": "Requisiti di Piwik", @@ -1134,6 +1136,7 @@ "SystemCheckPdoAndMysqliHelp": "Su un server Linux puoi compilare PHP con le seguenti opzioni: %1$s Nel tuo php.ini, aggiungi le seguenti linee: %2$s", "SystemCheckPhp": "Versione PHP", "SystemCheckPhpPdoAndMysqli": "Maggiori informazioni a riguardo: %1$sPHP PDO%2$s e %3$sMYSQLI%4$s.", + "SystemCheckSessionAutostart": "Per prevenire alcuni problemi, imposta quanto segue nel tuo file php.ini: session.auto_start=0", "SystemCheckSplHelp": "Devi configurare e ricostruire il PHP con la libreria Standard PHP abilitata (di default).", "SystemCheckSummaryNoProblems": "Evviva! Non ci sono problemi con le impostazioni di Piwik. Datti una pacca sulla spalla.", "SystemCheckSummaryThereWereErrors": "Piwik ha rilevato alcuni %1$sproblemi critici%2$s con la configurazione di Piwik. %3$sQuesti problemi devono essere risolti immediatamente.%4$s", diff --git a/lang/nb.json b/lang/nb.json index 101e3ebb31..74517aca08 100644 --- a/lang/nb.json +++ b/lang/nb.json @@ -113,17 +113,20 @@ "ShortWeekFormat": "%dayFrom% %shortMonthFrom% - %dayTo% %shortMonthTo% %shortYearTo%", "ShowJSCode": "Vis JavaScript-koden til Ã¥ sette inn pÃ¥ din nettside.", "SupportPiwik": "Støtt Piwik!", + "TableNoData": "Ingen data for denne tabellen.", "ThereIsNoDataForThisReport": "Det fins ingen data for denne rapporten.", "WebAnalyticsReports": "Nettstatistikkrapporter", "YouAreUsingTheLatestVersion": "Du bruker den nyeste versjonen av Piwik!" }, "CorePluginsAdmin": { + "ActionActivatePlugin": "Aktiver tillegg", "ActionInstall": "Installer", "ActionUninstall": "Avinstaller", "Activate": "SlÃ¥ pÃ¥", "Activated": "PÃ¥slÃ¥tt", "Active": "PÃ¥", "Activity": "Aktivitet", + "ByInstallingNewPluginFromMarketplace": "ved Ã¥ %sinstallere ett nytt tillegg fra markedsplassen%s", "ByXDevelopers": "av %s utviklere", "Changelog": "Endringslogg", "Deactivate": "SlÃ¥ av", @@ -134,6 +137,7 @@ "InstallingPlugin": "Installerer %s", "LastUpdated": "Sist oppdatert", "MainDescription": "Tillegg kan utvide eller begrense funksjonaliteten i Piwik. NÃ¥r et tillegg har blitt installert, kan du slÃ¥ det av eller pÃ¥ her.", + "Marketplace": "Markedsplass", "NumDownloadsLatestVersion": "Siste versjon: %s nedlastinger", "NumUpdatesAvailable": "%s oppdatering(er) tilgjengelig", "PluginDescription": "Grensesnitt for administrasjon av tillegg", @@ -145,6 +149,7 @@ "Screenshots": "Skjermbilder", "SortByNewest": "nyeste", "Status": "Status", + "StepDownloadingPluginFromMarketplace": "Laster ned tillegg fra markedsplassen", "Support": "Støtte", "Updated": "Oppdatert", "UpdatingPlugin": "Oppdaterer %s", @@ -346,6 +351,7 @@ "ExceptionInvalidDateFormat": "Datoformatet mÃ¥ være %s eller et nøkkelord støttet av %s-funksjonen (se %s for mer informasjon).", "ExceptionInvalidDateRange": "Datoen «%s» er ikke et gyldig datointervall. Riktig format er: %s", "ExceptionInvalidPeriod": "Perioden «%s» er ikke støttet. Prøv en av følgende istedenfor: %s", + "ExceptionInvalidToken": "Token er ikke gyldig.", "ExceptionLanguageFileNotFound": "Fant ikke sprÃ¥kfila «%s».", "ExceptionMissingFile": "Mangler fil: %s", "ExceptionUndeletableFile": "Klarte ikke slette %s", @@ -598,6 +604,7 @@ "UpdateGoal": "Oppdater mÃ¥l", "URL": "URL", "ViewAndEditGoals": "Vis og rediger mÃ¥l", + "ViewGoalsBy": "Vis mÃ¥l etter %s", "WhenVisitors": "nÃ¥r besøkende" }, "Insights": { @@ -631,6 +638,7 @@ "NfsFilesystemWarning": "Din tjeneren bruker et NFS filsystem.", "NfsFilesystemWarningSuffixAdmin": "Dette betyr Piwik vil være svært treg nÃ¥r du bruker filbaserte økter.", "NoConfigFound": "Klarte ikke finne konfigurasjonsfilen for Piwik, og du prøver Ã¥ fÃ¥ tilgang til en Piwik-side. <br \/><b>  »Du kan <a href='index.php'>installere Piwik nÃ¥<\/a><\/b><br \/><small>Hvis du prøvde Ã¥ installere Piwik tidligere og har noen tabeller i databasen, kan du ta det med ro. Du kan bruke de gamle tabellene og beholde dine eksisterende data!<\/small>", + "NotSupported": "støttes ikke", "Optional": "Valgfritt", "Password": "passord", "PasswordDoNotMatch": "passordene stemmer ikke overens", @@ -741,11 +749,15 @@ "LoginCredentials": "PÃ¥loggingsinformasjon", "LoginUseHttps": "Bruk HTTPS", "NavigationBack": "Tilbake", + "NetworkError": "Nettverksfeil", + "NetworkErrorWithStatusCodeShort": "Nettverksfeil %s", "NetworkNotReachable": "Nettverk kan ikke nÃ¥s", "NoDataShort": "Ingen data", + "NoReportsShort": "Ingen rapporter", "PullDownToRefresh": "Trekk ned for Ã¥ oppdatere...", "RatingNotNow": "Ikke nÃ¥", "ReleaseToRefresh": "Slipp for Ã¥ oppdatere...", + "ShowAll": "Vis alle", "VerifyLoginData": "Sørg for at ditt brukernavn- og passordkombinasjon er riktig." }, "MobileMessaging": { @@ -823,6 +835,7 @@ "WidgetKeywords": "Liste over nøkkelord" }, "RowEvolution": { + "ComparingRecords": "Sammenligner %s rader", "MetricBetweenText": "mellom %s og %s" }, "ScheduledReports": { @@ -1427,6 +1440,7 @@ "WideScreen": "Widescreen", "WidgetBrowserFamilies": "Nettlesere etter familie", "WidgetBrowsers": "Besøkendes nettlesere", + "WidgetBrowserVersion": "Nettleserversjon", "WidgetGlobalVisitors": "Besøkendes konfigurasjon", "WidgetOperatingSystems": "Operativsystemer", "WidgetPlugins": "Liste over tillegg", diff --git a/lang/nl.json b/lang/nl.json index 6658bf3c4e..a236a4a651 100644 --- a/lang/nl.json +++ b/lang/nl.json @@ -103,6 +103,7 @@ "CustomLogoHelpText": "U kunt het Piwik logo aanpassen dat wordt weergegeven in de gebruikersinterface en in de e-mail rapportages.", "DevelopmentProcess": "Hoewel ons %s ontwikkel process %s duizenden automatisch tests omvat, spelen Beta testers een belangrijke rol in het \"No bug beleid\" in Piwik.", "EmailServerSettings": "E-mail server instellingen", + "FaviconUpload": "Selecteer een favicon om up te loaden", "ForBetaTestersOnly": "Alleen voor beta testers", "ImageTracking": "Afbeelding tracking", "ImageTrackingIntro1": "Wanneer een bezoeker javaScript heeft uitgeschakeld, of wanneer JavaScript niet kan worden gebruikt, kun je een tracking afbeelding gebruiken om bezoekers te volgen.", @@ -156,6 +157,7 @@ "PluginSettingsIntro": "Hier kunt u instellingen aanpassen voor de volgende plugins van derden:", "PluginSettingsValueNotAllowed": "De waarde voor veld \"%s\" in plugin \"%s\" is niet toegestaan", "SendPluginUpdateCommunication": "Stuur mij een email melding als er een nieuwe plugin update is", + "SendPluginUpdateCommunicationHelp": "Een email wordt verstuurd naar de Super User wanneer er een nieuwe versie voor de plugin is.", "StableReleases": "Indien Piwik een essentieel onderdeel is van uw zaak, dan raaden wij aan om de laatste stabiele versie te draaien. Indien je de laatste beta gebruikt en je ontdekt bugs of hebt een suggestie, %skijk dan hier%s.", "TrackAGoal": "Hou een doel bij.", "TrackingCode": "Tracking code.", @@ -285,6 +287,7 @@ "PluginHomepage": "Plugins", "PluginKeywords": "Sleutelwoorden", "PluginNotCompatibleWith": "%1$s plugin is niet compatibel met %2$s.", + "PluginRequirement": "%1$s vereist %2$s.", "PluginsManagement": "Plugin manager", "PluginUpdateAvailable": "U gebruikt versie %s en een nieuwe versie %s is beschikbaar.", "PluginVersionInfo": "%1$s van %2$s", @@ -339,9 +342,11 @@ "ExceptionArchiveEmpty": "Leeg archief.", "ExceptionArchiveIncompatible": "Incompatibel archief: %s", "ExceptionArchiveIncomplete": "Archief is onvolledig. Sommige bestanden ontbreken (zoals %s)", + "FeedbackRequest": "Voel je vrij om je ideeën en suggesties te delen met het Piwik team:", "HelpMessageContent": "Controleer de %1$s Piwik FAQ %2$s waarin de meest voorkomende upgrade foutmeldingen worden uitgelegd. %3$s Vraag uw systeem beheerder - deze kan u wellicht helpen met deze fout die waarschijnlijk gerelateerd is aan de configuratie van uw webserver of MySQL-database.", "HelpMessageIntroductionWhenError": "Hierboven staat de foutmelding. Hierin zou de oorzaak naar voren moeten komen, mocht u desondanks nog vragen hebben:", "HelpMessageIntroductionWhenWarning": "De upgrade is voltooid, maar met fouten tijdens het proces. Lees de omschrijvingen hierboven voor meer informatie. Voor verdere hulp:", + "IncompatbilePluginsWillBeDisabledInfo": "Let op: sommige plugins zijn niet compitable met Piwik %s. Deze worden uitgeschakeld bij een upgrade.", "InstallingTheLatestVersion": "Bezig om de laatste versie te installeren", "MajorUpdateWarning1": "Dit is een ingrijpende update! Het zal langer dan normaal duren.", "MajorUpdateWarning2": "Het volgende advies vooral voor grote installaties bedoelt.", diff --git a/lang/ro.json b/lang/ro.json index fe5a30e981..5d9626b458 100644 --- a/lang/ro.json +++ b/lang/ro.json @@ -155,6 +155,7 @@ "PiwikIsInstalledAt": "Piwik este instalat în", "PluginDescription": "Zona de administrare Piwik.", "PluginSettingChangeNotAllowed": "Nu iti este permis sa schimbi valoarea setarii \"%s\" in plugin \"%s\"", + "PluginSettingReadNotAllowed": "Nu se poate citi valoare setării \"%s\" din modulul \"%s\"", "PluginSettings": "Setarile pluginului", "PluginSettingsIntro": "Aici poti schimba setarile pentru urmatoarele pluginuri terte (3rd party):", "PluginSettingsValueNotAllowed": "Valoarea pentru campul \"%s\" in plugin \"%s\" nu este permisa", @@ -861,7 +862,7 @@ "TransitionsRowActionTooltip": "Vezi ce au făcut vizitatorii până la ÅŸi după vizionarea acestei pagini", "TransitionsRowActionTooltipTitle": "Treceri Deschise", "TranslatorEmail": "astonsoftware@gmail.com, flo[at]inboxtranslation[dot]com", - "TranslatorName": "astonsoftware, <a href=\"http:\/\/inboxtranslations.com\">Inbox Translation<\/a>", + "TranslatorName": "astonsoftware, <a href=\"http:\/\/inboxtranslations.com\">Inbox Translation<\/a>, <a href=\"http:\/\/marcelbejgu.ro\">Marcel Bejgu<\/a>", "UniquePurchases": "Cumparaturi unice", "Unknown": "Necunoscut", "Upload": "Incarca", @@ -1079,6 +1080,8 @@ "PasswordDoNotMatch": "Parola nu se potriveste", "PasswordRepeat": "Parolă (repetă)", "PercentDone": "%s %% Done", + "PiwikOrgNewsletter": "trimite-mi email-uri cu noutăți importante legate de comunitatea Piwik", + "PiwikProNewsletter": "Sunt interesat(ă) de serviciile %sPiwik PRO%s (nu mai mult de 1 email pe lună)", "PleaseFixTheFollowingErrors": "Vă rugăm să reparati următoarele erori", "PluginDescription": "Procesul de instalare a Piwik.Instalarea se face de obicei o singură dată. ÃŽn cazul în care fiÈ™ierul de configurare de configurare\/config.inc.php este È™ters, instalarea va începe din nou.", "Requirements": "Piwik CerinÈ›e", @@ -1129,6 +1132,7 @@ "SystemCheckPdoAndMysqliHelp": "Pe un server Linux, puteÈ›i compila php cu următoarele opÈ›iuni: %1$s în php.ini dvs., adăugaÈ›i următoarele linii: %2$s", "SystemCheckPhp": "PHP version", "SystemCheckPhpPdoAndMysqli": "Mai multe informatii pe:%1$sPHP PDO%2$s si %3$sMYSQLI%4$s.", + "SystemCheckSessionAutostart": "Pentru a evita unele probleme pune la începutul fiÈ™ierului php.ini: session.auto_start=0", "SystemCheckSplHelp": "AveÈ›i nevoie pentru a configura È™i reconstrui PHP cu PHP Biblioteca Standard (SPL) activata (implicit).", "SystemCheckSummaryNoProblems": "Huzzah! Nu există probleme cu configurarea Piwik. Dă-È›i o palma pe spate.", "SystemCheckSummaryThereWereErrors": "Uh-oh! Piwik a detectat unele probleme %1$s critic %2$s cu configurarea Piwik. %3$s Aceste probleme ar trebui să fie fixate imediat.%4$s", diff --git a/lang/tr.json b/lang/tr.json index cdaff970c3..818460c858 100644 --- a/lang/tr.json +++ b/lang/tr.json @@ -33,6 +33,7 @@ "ExitPageTitles": "Çıkış sayfası baÅŸlıkları", "ExitPageTitlesReportDocumentation": "Bu rapor, belirli bir süre içinde meydana gelen çıkış sayfalarının baÅŸlıkları hakkında bilgi içerir.", "LearnMoreAboutSiteSearchLink": "Ziyaretçilerinizin Arama motoru nasıl kullandığı hakkında daha fazla bilgi edinin.", + "OneSearch": "1 arama", "OutlinkDocumentation": "Bu dış baÄŸlantı linki ziyaretçilerinizin sitenizden uzaklaÅŸtığı diÄŸer alan adlarını kapsar.", "OutlinksReportDocumentation": "Bu rapor, ziyaretçilerin tıkladıkları dış linklerin hiyerarÅŸik listesini gösterir.", "PagesReportDocumentation": "Bu rapor ziyaret edilen sayfa URL'leri hakkında bilgi içerir. %s Tablo hiyerarÅŸik olarak düzenlenmiÅŸtir, URL'ler klasör yapısı ile görüntülenmektedir.", @@ -92,6 +93,7 @@ }, "CoreAdminHome": { "Administration": "Yönetici", + "ArchivingSettings": "ArÅŸivleme ayarları", "BrandingSettings": "Marka ayarları", "CheckReleaseGetVersion": "Yeni sürüm kontrolü yapılırken her zaman ulaşın.", "ClickHereToOptIn": "Ä°zin vermek için tıklayınız.", @@ -100,6 +102,7 @@ "CustomLogoHelpText": "E-posta raporlarında ve kullanıcı arayüzünde kullanılacak olan Piwik logosunu deÄŸiÅŸtirebilirsiniz.", "DevelopmentProcess": "%sdevelopment process%s sırasında binlerce otomasyon testleri Piwik'te beta testerleriniz hatasız kullanım politikası yürütebilir", "EmailServerSettings": "E-Posta sunucusu ayarları", + "FaviconUpload": "Yüklemek için Favicon seçin", "ForBetaTestersOnly": "Yalnızca beta test edenler için", "ImageTracking": "Resimle Ä°zleme", "ImageTrackingIntro1": "Ziyaretçi JavaScript'i devre dışı bıraktığında veya JavaScript kullanılamadığında, ziyaretçileri takip etmek için resim kullanabilirsiniz.", @@ -124,11 +127,14 @@ "JSTracking_PageCustomVarsDesc": "ÖrneÄŸin, deÄŸiÅŸken adı \"Kategori\" ve deÄŸer \"Beyaz Sayfalar\".", "JSTracking_VisitorCustomVars": "Bu ziyaretçi için özel deÄŸiÅŸkenler kullan", "JSTracking_VisitorCustomVarsDesc": "ÖrneÄŸin, deÄŸiÅŸken adı \"Tür\" ve deÄŸer \"Müşteri\".", + "JSTrackingIntro1": "Ziyaretçilerinizi birkaç farklı yolla izleyebilirsiniz. Önerilen yöntem javascript metodudur. Bu metodu kullanmak için buradan oluÅŸturacağınız javascript kodunun, bütün sayfalarınızda yer aldığından emin olun.", "JSTrackingIntro2": "Piwik ile izlemek istediÄŸiniz sitenin tüm sayfalarına Javascript izleme kodunu yapıştırmanız gerekmektedir.", "JSTrackingIntro4": "EÄŸer Javascript izleme kodu kullanmak istemiyorsanız aÅŸağıdaki%2$s linke tıklayarak izleme resmi oluÅŸturabilirsiniz%1$s.", + "JSTrackingIntro5": "EÄŸer daha fazla sayfa görüntülenme sayısını takip etmek istiyorsanız, lütfen %1$sPiwik javascript izleme dökümantasyonunda %2$s listelenen uygun fonksiyonlara göz gezdirin. Bu fonksiyonları kullanarak hedefleri, özel deÄŸerleri, e-ticaret sipariÅŸlerini, terkedilen sepetler ve daha fazlasını takip edebilirsiniz.", "LatestBetaRelease": "En son beta sürümü", "LatestStableRelease": "En son kararlı sürüm", "LogoUpload": "Yüklemek için logo seçiniz", + "LogoUploadHelp": "Lütfen %s formatlarında ve minimum %s piksel yüksekliÄŸinde bir dosya yükleyin.", "MenuDiagnostic": "tehÅŸis", "MenuGeneralSettings": "Genel Ayarlar", "MenuManage": "yönetmek", @@ -137,23 +143,49 @@ "OptOutForYourVisitors": "ziyaretciniz için Piwiki devre dışı bırakmak", "PiwikIsInstalledAt": "Piwikde yüklenir", "PluginDescription": "Piwik yönetici arenasi.", + "PluginSettingChangeNotAllowed": "Bu ayarların \"%s\" deÄŸerlerini deÄŸiÅŸtirmek için \"%s\" eklentisinde gerekli izniniz yok.", + "PluginSettings": "Eklenti ayarları", + "PluginSettingsIntro": "Buradan aÅŸağıdaki 3. parti eklentiler için ayarları deÄŸiÅŸtirebilirsiniz:", + "SendPluginUpdateCommunication": "Yeni bir eklenti güncellemesi olduÄŸunda beni e-posta ile bilgilendir", + "StableReleases": "EÄŸer Piwik iÅŸiniz için kritik bir parçaysa, son ve stabil olan versiyonu kullanmanızı öneririz. EÄŸer en son güncel betayı kullanıyorsanız ve bir hata bulur ya da öneriniz olursa, lütfen ÅŸuraya%s bakın%s.", "TrackAGoal": "Bir hedef izleme", "TrackingCode": "Ä°zleme Kodu", "TrustedHostConfirm": "Güvenilir alan adınızı deÄŸiÅŸtirmek istediÄŸinizden emin misiniz?", "TrustedHostSettings": "Güvenilir Piwik Sunucu adı", + "UpdateSettings": "Ayarları güncelle", "UseCustomLogo": "Özel logo kullan", "ValidPiwikHostname": "Geçerli Alanadı", + "WithOptionalRevenue": "opsiyonel gelir ile", "YouAreOptedIn": "Åžuanda kayıt altındasınız", + "YouAreOptedOut": "Åžu anda dışarıdasınız.", "YouMayOptOut": "Bu web sitesinde toplanan verilerin analizi için ziyaretçi bilgisayarına kaydedilen çerezin daha farklı olmasını tercih edebilirsiniz." }, "CoreHome": { "CategoryNoData": "Bu kategoride veri yok. \"EklenmiÅŸ tüm populasyon\" deneyiniz.", "CheckForUpdates": "Güncellemeleri kontrol et", + "CheckPiwikOut": "Piwik'e göz atın!", + "CloseWidgetDirections": "Widget üstündeki 'X' simgesine tıklayarak bu widgeti kapatabilirsiniz.", + "DataForThisReportHasBeenPurged": "Bu raporda yer alan veriler %s aydan öncesine ait ve rapora dahil edilmemiÅŸtir.", + "DataTableExcludeAggregateRows": "Tüm satırlar gösteriliyor %s Gizle", + "DataTableIncludeAggregateRows": "Bütün satırlar gizlendi %s Göster", + "DateFormat": "%longDay% %day% %longMonth% %longYear%", "Default": "varsayılan", + "DonateCall1": "Piwik'i kullanmak için hiçbir maliyetiniz olmayacak, ama bu bize bu ürünü geliÅŸtirmek için hiçbir maliyeti olmadığı anlamına gelmiyor.", "DonateCall2": "Piwikin geliÅŸmesi ve ilerlemesi için size sürekli ihtiyacı var", + "DonateFormInstructions": "Miktar seçmek için kaydırıcıyı tıklayın, sonra bağış düğmesini tıklatın.", + "ExcludeRowsWithLowPopulation": "Tüm satırlar gösteriliyor %s Az veri olanları çıkart", + "ExternalHelp": "Yardım (yeni sekmede açılır)", + "FlattenDataTable": "Rapor hiyerarÅŸik yapıda %s Düz yap", "HowMuchIsPiwikWorth": "Piwikin deÄŸeri sizin için ne kadar?", + "IncludeRowsWithLowPopulation": "Az veriye sahip satırlar gizlendi %s Satırları göster", + "InjectedHostEmailBody": "Merhaba, bugün Piwik'e eriÅŸmeye çalıştım ve bilinmeyen host uyarısı ile karşılaÅŸtım.", "InjectedHostEmailSubject": "Bilinmeyen bir sunucu Piwik'e eriÅŸti: %s", + "InjectedHostWarningIntro": "Åžu anda Piwik'e %1$s 'den giriÅŸ yapıyorsunuz ama Piwik ÅŸu adreste çalışması için ayarlandı: %2$s.", + "LongMonthFormat": "%longYear%, %longMonth%", + "LongWeekFormat": "%dayFrom% %longMonthFrom% - %dayTo% %longMonthTo% %longYearTo%", + "MakeADifference": "Farklılık yarat: Piwik 2.0'ı finanse etmek için ÅŸimdi %1$s bağışla %2$s", "MakeOneTimeDonation": "Onun yerine bir defalık bağış yapın", + "OnlyForSuperUserAccess": "Bu widget sadece Super User seviyesinde olan kullanıcılara görüntülenir.", "PageOf": "%1$s nin %2$s", "PeriodDay": "Gün", "PeriodDays": "gün", @@ -167,26 +199,89 @@ "PluginDescription": "Web istatistik rapor yapısı.", "ReportGeneratedOn": "%s tarihinde oluÅŸturulan Rapor", "ReportGeneratedXAgo": "%s kadar önce oluÅŸturulan Rapor", + "SharePiwikShort": "Piwik! Ãœcretsiz web takibi ve analizi. Kendi verilerinizle.", "ShareThis": "paylaÅŸ", + "ShortDateFormat": "%shortDay% %day% %shortMonth%", + "ShortDateFormatWithYear": "%day% %shortMonth% %shortYear%", + "ShortMonthFormat": "%shortMonth% %longYear%", + "ShortWeekFormat": "%dayFrom% %shortMonthFrom% - %dayTo% %shortMonthTo% %shortYearTo%", "ShowJSCode": "Eklenecek JavaScript kodu göster", + "SubscribeAndBecomePiwikSupporter": "Piwik Destekçisi olmak için güvenli bir kredi kartı ödeme sayfasına (Paypal) geçin!", "SupportPiwik": "Piwike destek ol", + "TableNoData": "Bu tablo için bir data yok.", "ThereIsNoDataForThisReport": "Bu rapor için veri yok.", - "WebAnalyticsReports": "Web Analiz Raporları" + "ViewAllPiwikVideoTutorials": "Tüm Piwik Yardım Videolarına Bak", + "WebAnalyticsReports": "Web Analiz Raporları", + "YouAreUsingTheLatestVersion": "Piwik'in son versiyonunu kullanıyorsunuz!" }, "CorePluginsAdmin": { + "ActionActivatePlugin": "Eklentiyi etkinleÅŸtir", + "ActionActivateTheme": "Temayı aktif et", + "ActionInstall": "Kur", + "ActionUninstall": "Kaldır", "Activate": "Aktive et", "Activated": "Aktive edildi", "Active": "Aktif", + "Activity": "Aktivite", + "AllowedUploadFormats": "Bu sayfa üzerinden .zip formatında bir eklenti veya tema yükleyebilirsiniz.", "AuthorHomepage": "Yazar Ana sayfası", + "Authors": "Yazarlar", + "BackToExtendPiwik": "Markete geri dön", + "BeCarefulUsingPlugins": "Ä°ncelemediÄŸimiz için Piwik ekibi tarafından hazırlanmayan eklentiler dikkatli kullanılmalıdır.", + "ByXDevelopers": "ÅŸu geliÅŸtiriciler tarafından %s", + "Changelog": "DeÄŸiÅŸiklikler", "Deactivate": "Devre dışı", + "Developer": "GeliÅŸtirici", + "DoMoreContactPiwikAdmins": "Yeni bir eklenti yada tema kurmak için lütfen Piwik yöneticileri iletiÅŸime geçiniz.", + "GetNewFunctionality": "Yeni fonskiyonlara sahip olun", + "History": "GeçmiÅŸ", "Inactive": "Pasif", + "InfoPluginUpdateIsRecommended": "Son geliÅŸmelerden faydalanmak için ÅŸimdi eklentileri güncelleyin.", + "InfoThemeUpdateIsRecommended": "Son versiyonun keyfini çıkarmak için temanızı güncelleyin.", + "InstallingPlugin": "Kuruluyor %s", + "InstallNewPlugins": "Yeni eklenti kur", + "InstallNewThemes": "Yeni tema kur", + "LastCommitTime": "(son iÅŸlem %s)", + "LastUpdated": "Son Güncelleme", "LicenseHomepage": "Lisans Ana sayfası", + "Marketplace": "Pazaryeri", + "MarketplaceSellPluginSubject": "Pazaryeri - Eklenti Sat", + "MenuPlatform": "Platform", + "NoPluginsFound": "Eklenti bulunamadı", + "NoThemesFound": "Tema bulunamadı", + "NoZipFileSelected": "Lütfen bir ZIP dosyası seçin.", + "NumDownloadsLatestVersion": "Son versiyon: %s Ä°ndir", + "NumUpdatesAvailable": "Uygun %s Güncelleme", + "OriginCore": "Çekirdek", + "OriginThirdParty": "Üçüncü parti", "PluginDescription": "Eklenti yönetim arabirimi.", "PluginHomepage": "Eklenti Sayfası", + "PluginKeywords": "Anahtar Kelimeler", "PluginsManagement": "Eklenti Yönetimi", + "PluginUpdateAvailable": "Åžuanda %s versiyonunu kullanıyorsunuz ve yeni %s versiyon mevcut.", + "PluginWebsite": "Eklenti Sitesi", + "Screenshots": "Ekran Görüntüleri", + "SortByAlpha": "alfa", + "SortByNewest": "en yeni", + "SortByPopular": "popüler", "Status": "Durum", + "StepDownloadingPluginFromMarketplace": "Pazaryerinden eklenti indirin", + "StepDownloadingThemeFromMarketplace": "Pazaryerinden tema indirin", + "StepReplaceExistingTheme": "Mevcut temayla yer deÄŸiÅŸtir", + "StepThemeSuccessfullyUpdated": "Temanızı baÅŸarılı bir ÅŸekilde güncellediniz %1$s %2$s.", + "StepUnzippingPlugin": "Eklenti çıkarılıyor", + "StepUnzippingTheme": "Tema çıkarılıyor", + "Support": "Destek", + "TeaserExtendPiwik": "Piwik'i Eklenti ve Temalarla GeniÅŸlet", "Theme": "Tema", - "Version": "Versiyon" + "Themes": "Temalar", + "ThemesManagement": "Temaları Yönet", + "Updated": "Güncellendi", + "UpdatingPlugin": "Güncelleniyor %s", + "UploadZipFile": "ZIP dosyası yükle", + "Version": "Versiyon", + "ViewRepositoryChangelog": "DeÄŸiÅŸikliklere bak", + "Websites": "Web siteler" }, "CoreUpdater": { "ClickHereToViewSqlQueries": "Çalıştırılacak olan SQL sorgularının listesini görmek ve kopyalamak için tıklayın", @@ -204,6 +299,10 @@ "InstallingTheLatestVersion": "Son versiyon yükleniyor", "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:", + "NotificationClickToUpdateThemes": "Temanızı ÅŸimdi güncellemek için burayı tıklayın:", + "NotificationSubjectAvailableCoreUpdate": "Yeni Piwik %s hazır", + "NotificationSubjectAvailablePluginUpdate": "Piwik eklentileriniz için yeni güncellemeler var", "PiwikHasBeenSuccessfullyUpgraded": "Piwik baÅŸarıyla güncellendi!", "PiwikUpdatedSuccessfully": "Piwik baÅŸarıyla güncellendi!", "PiwikWillBeUpgradedFromVersionXToVersionY": "Piwik veritabanı %1$s versiyonundan %2$s versiyonuna güncellenecektir.", @@ -211,6 +310,7 @@ "ReadyToGo": "Hazır mısınız?", "TheFollowingPluginsWillBeUpgradedX": "AÅŸağıdaki eklentiler güncellenecektir: %s.", "ThereIsNewVersionAvailableForUpdate": "Piwik'i güncellemek için yeni bir sürümü mevcut", + "TheUpgradeProcessMayTakeAWhilePleaseBePatient": "Veritabanı güncelleme iÅŸlemi biraz vakit alabilir, bu yüzden lütfen sabırlı olun.", "UnpackingTheUpdate": "Güncelleme dosyaları açılıyor", "UpdateAutomatically": "Otomatik Güncelleme", "UpdateHasBeenCancelledExplanation": "Piwik Tek Tık Güncellemesi iptal edildi. EÄŸer aÅŸağıdali hatayı düzeltemiyorsanız, Piwik'i elle güncellemeniz gerekmektedir. BaÅŸlamak için %1$s lütfen Güncelleme Dökümanını %3$skontrol edin!%2$s", @@ -239,7 +339,9 @@ "Dashboard": "Pano", "DashboardCopied": "Panel baÅŸarılı ÅŸekilde seçilen kullanıcı için kopyalandı", "DashboardName": "Panel adı:", + "DefaultDashboard": "Varsayılan panel - Varsayılan widget seçimleri ve sütunları kullanın", "DeleteWidgetConfirm": "Bu BileÅŸenı panodan silmek istediÄŸinize emin misiniz?", + "EmptyDashboard": "BoÅŸ panel - Favori widgetlarınızı seçin", "LoadingWidget": "BileÅŸen yükleniyor, lütfen bekleyin...", "ManageDashboard": "Paneli düzenle", "Maximise": "Maksimize", @@ -269,12 +371,15 @@ "VisitTheForums": "%sForumları%s ziyaret edin" }, "General": { + "AbandonedCarts": "Terkedilen Sepetler", "AboutPiwikX": "Piwik %s Hakkında", "Action": "Eylem", "Actions": "Eylemler", "Add": "Ekle", "AfterEntry": "buraya girdikten sonra", + "All": "Hepsi", "AllWebsitesDashboard": "Tüm Websitelerin Panosu", + "And": "ve", "API": "API", "ApplyDateRange": "Tarih Aralığını Uygula", "AuthenticationMethodSmtp": "SMTP için kimlik doÄŸrulama yöntemi", @@ -293,6 +398,7 @@ "ClickToChangePeriod": "Aralığı deÄŸiÅŸtirmek için tekrar tıklayın.", "Close": "Kapat", "ColumnActionsPerVisit": "Ziyaret başına eylemler", + "ColumnAverageGenerationTime": "Ortalama oluÅŸturma süresi", "ColumnAverageTimeOnPage": "Sayfada geçirilen ort. süre", "ColumnAvgTimeOnSite": "Sitede geçirilen ortalama süre", "ColumnAvgTimeOnSiteDocumentation": "Bir ziyaretin ortalama süresi.", @@ -305,6 +411,7 @@ "ColumnExitRate": "Çıkış oranı", "ColumnExits": "Çıkışlar", "ColumnExitsDocumentation": "Bu sayfada biten ziyaret sayısı", + "ColumnGenerationTime": "OluÅŸturma süresi", "ColumnKeyword": "Anahtar Kelime", "ColumnLabel": "Etiket", "ColumnMaxActions": "Tek ziyarette maksimum eylem", @@ -321,6 +428,7 @@ "ColumnUniqueExits": "Tekil çıkışlar", "ColumnUniquePageviews": "Tekil sayfa gösterimleri", "ColumnValuePerVisit": "Ziyaret başına deÄŸer", + "ColumnViewedAfterSearch": "Arama sonuçlarından tıklanan", "ColumnVisitDuration": "Ziyaret Süresi (saniye bazında)", "ColumnVisitsWithConversions": "Sitenize gelen ve (alışveriÅŸ, mail listesine kayıt gibi) aktiviteler gösteren ziyaretçileri gör.", "Continue": "Devam", @@ -329,6 +437,7 @@ "CurrentWeek": "Bu hafta", "CurrentYear": "Bu yıl", "Daily": "Günlük", + "DailyReport": "günlük", "DailyReports": "Günlük raporlar", "DailySum": "günlük toplam", "DashboardForASpecificWebsite": "Belirli bir websitesi için Pano", @@ -350,14 +459,18 @@ "DayTu": "Sa", "DayWe": "Ça", "Default": "Varsayılan", + "DefaultAppended": "(varsayılan)", "Delete": "Sil", "Description": "Açıklama", "Desktop": "Masaüstü", "Details": "Detaylar", "Discount": "Ä°ndirim", "DisplaySimpleTable": "Basit tablo göster", + "Documentation": "Dokümantasyon", + "Donate": "Bağışla", "Done": "Yapıldı", "Download": "Ä°ndir", + "DownloadFail_FileExists": "Dosya %s zaten var!", "Downloads": "Ä°ndirilenler", "EcommerceOrders": "ETicaret SipariÅŸleri", "Edit": "Düzenle", @@ -386,8 +499,11 @@ "FileIntegrityWarningExplanation": "Dosya bütünlük kontrolü baÅŸarısız oldu ve hatalar raporlandı. Bu durum genellikle Piwik dosyalarının yüklenmesinde oluÅŸan hatalardan meydana gelmektedir. Sorunu çözmek için tüm Piwik dosyalarını sunucunuza tekrar yüklemeniz ve sayfayı yenilemeniz gerekmektedir.", "First": "Ä°lk", "ForExampleShort": "ÖrneÄŸin", + "Forums": "Forum", "FromReferrer": "ÅŸuradan", + "GeneralInformation": "Genel Bilgiler", "GeneralSettings": "Genel Ayarlar", + "GetStarted": "BaÅŸla", "GiveUsYourFeedback": "Geri Bildirim Verin!", "Goal": "Hedef", "GoTo": "%s'e git", @@ -397,9 +513,11 @@ "Hide": "gizle", "HoursMinutes": "%1$s saat %2$s dak", "Id": "No", + "InfoFor": "%s için bilgi", "Installed": "Yüklendi", "InvalidDateRange": "Geçersiz Tarih Aralığı, Lütfen Tekrar Deneyin", "InvalidResponse": "Alınan veriler baÅŸarısız.", + "IP": "IP", "JsTrackingTag": "JavaScript Takip Kodu", "Language": "Dil", "LastDays": "Son %s gün (bugün dahil)", @@ -431,11 +549,19 @@ "LongMonth_9": "Eylül", "MainMetrics": "Ana ölçümler", "Metadata": "Meta verisi", + "Metrics": "Metrikler", "MinutesSeconds": "%1$s dak %2$ss", + "Mobile": "Mobil", "Monthly": "Aylık", + "MonthlyReport": "aylık", + "MonthlyReports": "Aylık raporlar", + "More": "Daha fazla", + "MoreDetails": "Daha Fazla Detay", + "MoreLowerCase": "daha fazla", "MultiSitesSummary": "Tüm Siteler", "Name": "Ä°sim", "NbActions": "Eylem Sayısı", + "NbSearches": "Site içi Arama Sayısı", "NDays": "%s gün", "Never": "Asla", "NewUpdatePiwikX": "Yeni Güncelleme: Piwik %s", @@ -455,12 +581,17 @@ "NumberOfVisits": "Ziyaret sayısı", "NVisits": "%s ziyaret", "Ok": "Tamam", + "OneAction": "1 aksiyon", "OneDay": "1 gün", "OneMinute": "1 dakika", "OneVisit": "1 ziyaret", "OnlyEnterIfRequired": "SMTP sunucusu için gerekli olan kullanıcı adını giriniz.", "OnlyEnterIfRequiredPassword": "SMTP sunucusu için gerekli olan ÅŸifreyi giriniz.", "OpenSourceWebAnalytics": "Açık kaynak kodlu Web Ä°statistik Servisi", + "OperationContains": "İçerir", + "OperationDoesNotContain": "İçermez", + "OperationEquals": "EÅŸittir", + "OperationIsNot": "DeÄŸil", "OptionalSmtpPort": "Ä°steÄŸe baÄŸlıdır. Åžifresiz 25 için TLS SMTP ve güvenli baÄŸlantı için SSL SMTP 465", "OrCancel": "veya %s Ä°ptal %s", "OriginalLanguageName": "Türkçe", @@ -502,6 +633,7 @@ "Save": "Kaydet", "SaveImageOnYourComputer": "Resmi bilgisayarınıza kaydetmek için, resme saÄŸ tıklayıp \"Farklı kaydet...\" deyin", "Search": "Arama", + "SearchNoResults": "Sonuç yok", "Seconds": "%ssn", "Settings": "Ayarlar", "Shipping": "Teslimat", @@ -532,9 +664,11 @@ "SmtpUsername": "SMTP kullanıcı adı", "Source": "Kaynak", "Subtotal": "Ara toplam", + "Summary": "Özet", "Table": "Tablo", "TagCloud": "Etiket bulutu", "Tax": "Vergi", + "TimeOnPage": "Sayfadaki süre", "Today": "Bugün", "Total": "Toplam", "TotalRevenue": "Toplam Kazanç", diff --git a/misc/package/build.sh b/misc/package/build.sh index bf1b22d86f..de6ae59d99 100755 --- a/misc/package/build.sh +++ b/misc/package/build.sh @@ -182,6 +182,7 @@ else for i in zip tar.gz; do ln -sf $HTTP_PATH/piwik-$VERSION.$i $HTTP_PATH/latest.$i ln -sf $HTTP_PATH/piwik-$VERSION.$i $HTTP_PATH/piwik-latest.$i + ln -sf $HTTP_PATH/piwik-$VERSION.$i $HTTP_PATH/piwik.$i done # record filesize in Mb @@ -211,7 +212,7 @@ If you have any question, feel free to ask. \n\n\ Thank you,\n\n\ Piwik team" | mail -s"New Piwik Version $VERSION" "appgal@microsoft.com,hello@piwik.org" - echo "build finished! http://builds.piwik.org/piwik-latest.zip" + echo "build finished! http://builds.piwik.org/piwik.zip" fi @@ -15,21 +15,21 @@ return typeof f==="function"?m({"":n},""):n}throw new SyntaxError("JSON2.parse") }while(Q.getTimeAlias()<i)}}function K(){var Q;if(!n){n=true;J("load");for(Q=0;Q<A.length;Q++){A[Q]()}}return true}function m(){var R;if(s.addEventListener){O(s,"DOMContentLoaded",function Q(){s.removeEventListener("DOMContentLoaded",Q,false);K()})}else{if(s.attachEvent){s.attachEvent("onreadystatechange",function Q(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",Q);K()}});if(s.documentElement.doScroll&&C===C.top){(function Q(){if(!n){try{s.documentElement.doScroll("left")}catch(S){setTimeout(Q,0);return}K()}}())}}}if((new RegExp("WebKit")).test(e.userAgent)){R=setInterval(function(){if(n||/loaded|complete/.test(s.readyState)){clearInterval(R);K()}},10)}O(C,"load",K,false)}function h(S,R){var Q=s.createElement("script");Q.type="text/javascript";Q.src=S;if(Q.readyState){Q.onreadystatechange=function(){var T=this.readyState;if(T==="loaded"||T==="complete"){Q.onreadystatechange=null;R()}}}else{Q.onload=R}s.getElementsByTagName("head")[0].appendChild(Q)}function v(){var Q=""; try{Q=C.top.document.referrer}catch(S){if(C.parent){try{Q=C.parent.document.referrer}catch(R){Q=""}}}if(Q===""){Q=s.referrer}return Q}function j(Q){var S=new RegExp("^([a-z]+):"),R=S.exec(Q);return R?R[1]:null}function b(Q){var S=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),R=S.exec(Q);return R?R[1]:Q}function D(S,R){var Q="[\\?&#]"+R+"=([^&#]*)";var U=new RegExp(Q);var T=U.exec(S);return T?B(T[1]):""}function q(Q){return g(k(Q))}function N(ag){var S=function(al,W){return(al<<W)|(al>>>(32-W))},ah=function(an){var al="",am,W;for(am=7;am>=0;am--){W=(an>>>(am*4))&15;al+=W.toString(16)}return al},V,aj,ai,R=[],aa=1732584193,Y=4023233417,X=2562383102,U=271733878,T=3285377520,af,ae,ad,ac,ab,ak,Q,Z=[];ag=q(ag);Q=ag.length;for(aj=0;aj<Q-3;aj+=4){ai=ag.charCodeAt(aj)<<24|ag.charCodeAt(aj+1)<<16|ag.charCodeAt(aj+2)<<8|ag.charCodeAt(aj+3);Z.push(ai)}switch(Q&3){case 0:aj=2147483648;break;case 1:aj=ag.charCodeAt(Q-1)<<24|8388608;break;case 2:aj=ag.charCodeAt(Q-2)<<24|ag.charCodeAt(Q-1)<<16|32768; break;case 3:aj=ag.charCodeAt(Q-3)<<24|ag.charCodeAt(Q-2)<<16|ag.charCodeAt(Q-1)<<8|128;break}Z.push(aj);while((Z.length&15)!==14){Z.push(0)}Z.push(Q>>>29);Z.push((Q<<3)&4294967295);for(V=0;V<Z.length;V+=16){for(aj=0;aj<16;aj++){R[aj]=Z[V+aj]}for(aj=16;aj<=79;aj++){R[aj]=S(R[aj-3]^R[aj-8]^R[aj-14]^R[aj-16],1)}af=aa;ae=Y;ad=X;ac=U;ab=T;for(aj=0;aj<=19;aj++){ak=(S(af,5)+((ae&ad)|(~ae&ac))+ab+R[aj]+1518500249)&4294967295;ab=ac;ac=ad;ad=S(ae,30);ae=af;af=ak}for(aj=20;aj<=39;aj++){ak=(S(af,5)+(ae^ad^ac)+ab+R[aj]+1859775393)&4294967295;ab=ac;ac=ad;ad=S(ae,30);ae=af;af=ak}for(aj=40;aj<=59;aj++){ak=(S(af,5)+((ae&ad)|(ae&ac)|(ad&ac))+ab+R[aj]+2400959708)&4294967295;ab=ac;ac=ad;ad=S(ae,30);ae=af;af=ak}for(aj=60;aj<=79;aj++){ak=(S(af,5)+(ae^ad^ac)+ab+R[aj]+3395469782)&4294967295;ab=ac;ac=ad;ad=S(ae,30);ae=af;af=ak}aa=(aa+af)&4294967295;Y=(Y+ae)&4294967295;X=(X+ad)&4294967295;U=(U+ac)&4294967295;T=(T+ab)&4294967295}ak=ah(aa)+ah(Y)+ah(X)+ah(U)+ah(T);return ak.toLowerCase()}function I(S,Q,R){if(S==="translate.googleusercontent.com"){if(R===""){R=Q -}Q=D(Q,"u");S=b(Q)}else{if(S==="cc.bingj.com"||S==="webcache.googleusercontent.com"||S.slice(0,5)==="74.6."){Q=s.links[0].href;S=b(Q)}}return[S,Q,R]}function w(R){var Q=R.length;if(R.charAt(--Q)==="."){R=R.slice(0,Q)}if(R.slice(0,2)==="*."){R=R.slice(1)}return R}function P(R){R=R&&R.text?R.text:R;if(!l(R)){var Q=s.getElementsByTagName("title");if(Q&&u(Q[0])){R=Q[0].text}}return R}function y(Q,R){if(R){return R}if(Q.slice(-9)==="piwik.php"){Q=Q.slice(0,Q.length-9)}return Q}function x(U){var Q="Piwik_Overlay";var X=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)$");var S=X.exec(s.referrer);if(S){var T=S[1];if(T!==String(U)){return false}var W=S[2],R=S[3];C.name=Q+"###"+W+"###"+R}var V=C.name.split("###");return V.length===3&&V[0]===Q}function H(R,W,T){var V=C.name.split("###"),U=V[1],Q=V[2],S=y(R,W);h(S+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(S,T,U,Q)})}function z(ao,aP){var W=I(s.domain,C.location.href,v()),a9=w(W[0]),bo=W[1],aW=W[2],bp=false,aU="GET",U=ao||"",al="",aR="",be=aP||"",aG,aw=s.title,ay="7z|aac|apk|ar[cj]|as[fx]|avi|azw3|bin|csv|deb|dmg|docx?|epub|exe|flv|gif|gz|gzip|hqx|jar|jpe?g|js|mobi|mp(2|3|4|e?g)|mov(ie)?|ms[ip]|od[bfgpst]|og[gv]|pdf|phps|png|pptx?|qtm?|ra[mr]?|rpm|sea|sit|tar|t?bz2?|tgz|torrent|txt|wav|wm[av]|wpd||xlsx?|xml|z|zip",aS=[a9],Z=[],aK=[],an=[],aQ=500,aa,ap,ab,ad,aA=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],av=["pk_kwd","piwik_kwd","utm_term"],bm="_pk_",ag,bn,ae=false,bh,aC,aF,ak=63072000000,am=1800000,aH=15768000000,aD=true,ar=0,Y=false,aL={},V={},bi=200,a2={},bf={},aZ=false,aX=false,aV,aM,ah,az=N,aY,aE; -function a4(by,bv,bu,bx,bt,bw){if(ae){return}var bs;if(bu){bs=new Date();bs.setTime(bs.getTime()+bu)}s.cookie=by+"="+k(bv)+(bu?";expires="+bs.toGMTString():"")+";path="+(bx||"/")+(bt?";domain="+bt:"")+(bw?";secure":"")}function aj(bu){if(ae){return 0}var bs=new RegExp("(^|;)[ ]*"+bu+"=([^;]*)"),bt=bs.exec(s.cookie);return bt?B(bt[2]):0}function bj(bs){var bt;if(ab){bt=new RegExp("#.*");return bs.replace(bt,"")}return bs}function a8(bu,bs){var bv=j(bs),bt;if(bv){return bs}if(bs.slice(0,1)==="/"){return j(bu)+"://"+b(bu)+bs}bu=bj(bu);bt=bu.indexOf("?");if(bt>=0){bu=bu.slice(0,bt)}bt=bu.lastIndexOf("/");if(bt!==bu.length-1){bu=bu.slice(0,bt+1)}return bu+bs}function aT(bv){var bt,bs,bu;for(bt=0;bt<aS.length;bt++){bs=w(aS[bt].toLowerCase());if(bv===bs){return true}if(bs.slice(0,1)==="."){if(bv===bs.slice(1)){return true}bu=bv.length-bs.length;if((bu>0)&&(bv.slice(bu)===bs)){return true}}}return false}function br(bs){var bt=new Image(1,1);bt.onload=function(){r=0};bt.src=U+(U.indexOf("?")<0?"?":"&")+bs -}function a5(bs){try{var bu=C.XMLHttpRequest?new C.XMLHttpRequest():C.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;bu.open("POST",U,true);bu.onreadystatechange=function(){if(this.readyState===4&&this.status!==200){br(bs)}};bu.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");bu.send(bs)}catch(bt){br(bs)}}function aB(bu,bt){var bs=new Date();if(!bh){if(aU==="POST"){a5(bu)}else{br(bu)}i=bs.getTime()+bt}}function a3(bs){return bm+bs+"."+be+"."+aY}function X(){if(ae){return"0"}if(!u(e.cookieEnabled)){var bs=a3("testcookie");a4(bs,"1");return aj(bs)==="1"?"1":"0"}return e.cookieEnabled?"1":"0"}function aN(){aY=az((ag||a9)+(bn||"/")).slice(0,4)}function ai(){var bt=a3("cvar"),bs=aj(bt);if(bs.length){bs=JSON2.parse(bs);if(E(bs)){return bs}}return{}}function T(){if(Y===false){Y=ai()}}function bd(){var bs=new Date();aV=bs.getTime()}function af(bw,bt,bs,bv,bu,bx){a4(a3("id"),bw+"."+bt+"."+bs+"."+bv+"."+bu+"."+bx,ak,bn,ag)}function S(){var bt=new Date(),bs=Math.round(bt.getTime()/1000),bv=aj(a3("id")),bu; -if(bv){bu=bv.split(".");bu.unshift("0")}else{if(!aE){aE=az((e.userAgent||"")+(e.platform||"")+JSON2.stringify(bf)+bt.getTime()+Math.random()).slice(0,16)}bu=["1",aE,bs,0,bs,"",""]}return bu}function Q(){var bs=aj(a3("ref"));if(bs.length){try{bs=JSON2.parse(bs);if(E(bs)){return bs}}catch(bt){}}return["","",0,""]}function R(){var bs=ae;ae=false;a4(a3("id"),"",-86400,bn,ag);a4(a3("ses"),"",-86400,bn,ag);a4(a3("cvar"),"",-86400,bn,ag);a4(a3("ref"),"",-86400,bn,ag);ae=bs}function bc(bw){if(!bw||!E(bw)){return}var bv=[];var bu;for(bu in bw){if(Object.prototype.hasOwnProperty.call(bw,bu)){bv.push(bu)}}var bx={};bv.sort();var bs=bv.length;var bt;for(bt=0;bt<bs;bt++){bx[bv[bt]]=bw[bv[bt]]}return bx}function ax(bu,bS,bT,bv){var bQ,bt=new Date(),bC=Math.round(bt.getTime()/1000),bW,bR,bx,bI,bN,bB,bL,by,bP,bw=1024,bY,bF,bM=Y,bD=a3("ses"),bE=a3("ref"),bZ=a3("cvar"),bJ=S(),bH=aj(bD),bO=Q(),bV=aG||bo,bz,bs;if(ae){R()}if(bh){return""}bW=bJ[0];bR=bJ[1];bI=bJ[2];bx=bJ[3];bN=bJ[4];bB=bJ[5];if(!u(bJ[6])){bJ[6]="" -}bL=bJ[6];if(!u(bv)){bv=""}var bG=s.characterSet||s.charset;if(!bG||bG.toLowerCase()==="utf-8"){bG=null}bz=bO[0];bs=bO[1];by=bO[2];bP=bO[3];if(!bH){var bU=am/1000;if(!bB||(bC-bB)>bU){bx++;bB=bN}if(!aF||!bz.length){for(bQ in aA){if(Object.prototype.hasOwnProperty.call(aA,bQ)){bz=D(bV,aA[bQ]);if(bz.length){break}}}for(bQ in av){if(Object.prototype.hasOwnProperty.call(av,bQ)){bs=D(bV,av[bQ]);if(bs.length){break}}}}bY=b(aW);bF=bP.length?b(bP):"";if(bY.length&&!aT(bY)&&(!aF||!bF.length||aT(bF))){bP=aW}if(bP.length||bz.length){by=bC;bO=[bz,bs,by,bj(bP.slice(0,bw))];a4(bE,JSON2.stringify(bO),aH,bn,ag)}}bu+="&idsite="+be+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+bt.getHours()+"&m="+bt.getMinutes()+"&s="+bt.getSeconds()+"&url="+k(bj(bV))+(aW.length?"&urlref="+k(bj(aW)):"")+"&_id="+bR+"&_idts="+bI+"&_idvc="+bx+"&_idn="+bW+(bz.length?"&_rcn="+k(bz):"")+(bs.length?"&_rck="+k(bs):"")+"&_refts="+by+"&_viewts="+bB+(String(bL).length?"&_ects="+bL:"")+(String(bP).length?"&_ref="+k(bj(bP.slice(0,bw))):"")+(bG?"&cs="+k(bG):""); -for(bQ in bf){if(Object.prototype.hasOwnProperty.call(bf,bQ)){bu+="&"+bQ+"="+bf[bQ]}}if(bS){bu+="&data="+k(JSON2.stringify(bS))}else{if(ad){bu+="&data="+k(JSON2.stringify(ad))}}function bA(b0,b1){var b2=JSON2.stringify(b0);if(b2.length>2){return"&"+b1+"="+k(b2)}return""}var bX=bc(aL);var bK=bc(V);bu+=bA(bX,"cvar");bu+=bA(bK,"e_cvar");if(Y){bu+=bA(Y,"_cvar");for(bQ in bM){if(Object.prototype.hasOwnProperty.call(bM,bQ)){if(Y[bQ][0]===""||Y[bQ][1]===""){delete Y[bQ]}}}a4(bZ,JSON2.stringify(Y),am,bn,ag)}if(aD){if(ar){bu+=">_ms="+ar}else{if(f&&f.timing&&f.timing.requestStart&&f.timing.responseEnd){bu+=">_ms="+(f.timing.responseEnd-f.timing.requestStart)}}}af(bR,bI,bx,bC,bB,u(bv)&&String(bv).length?bv:bL);a4(bD,"*",am,bn,ag);bu+=J(bT);if(aR.length){bu+="&"+aR}return bu}function a7(bv,bu,bz,bw,bs,bC){var bx="idgoal=0",by,bt=new Date(),bA=[],bB;if(String(bv).length){bx+="&ec_id="+k(bv);by=Math.round(bt.getTime()/1000)}bx+="&revenue="+bu;if(String(bz).length){bx+="&ec_st="+bz}if(String(bw).length){bx+="&ec_tx="+bw -}if(String(bs).length){bx+="&ec_sh="+bs}if(String(bC).length){bx+="&ec_dt="+bC}if(a2){for(bB in a2){if(Object.prototype.hasOwnProperty.call(a2,bB)){if(!u(a2[bB][1])){a2[bB][1]=""}if(!u(a2[bB][2])){a2[bB][2]=""}if(!u(a2[bB][3])||String(a2[bB][3]).length===0){a2[bB][3]=0}if(!u(a2[bB][4])||String(a2[bB][4]).length===0){a2[bB][4]=1}bA.push(a2[bB])}}bx+="&ec_items="+k(JSON2.stringify(bA))}bx=ax(bx,ad,"ecommerce",by);aB(bx,aQ)}function a6(bs,bw,bv,bu,bt,bx){if(String(bs).length&&u(bw)){a7(bs,bw,bv,bu,bt,bx)}}function bl(bs){if(u(bs)){a7("",bs,"","","","")}}function aJ(bv,bw){var bs=new Date(),bu=ax("action_name="+k(P(bv||aw)),bw,"log");aB(bu,aQ);if(aa&&ap&&!aX){aX=true;O(s,"click",bd);O(s,"mouseup",bd);O(s,"mousedown",bd);O(s,"mousemove",bd);O(s,"mousewheel",bd);O(C,"DOMMouseScroll",bd);O(C,"scroll",bd);O(s,"keypress",bd);O(s,"keydown",bd);O(s,"keyup",bd);O(C,"resize",bd);O(C,"focus",bd);O(C,"blur",bd);aV=bs.getTime();setTimeout(function bt(){var bx;bs=new Date();if((aV+ap)>bs.getTime()){if(aa<bs.getTime()){bx=ax("ping=1",bw,"ping"); -aB(bx,aQ)}setTimeout(bt,ap)}},ap)}}function ac(bu,bw,bs,bv,bx){if(String(bu).length===0||String(bw).length===0){return false}var bt=ax("e_c="+k(bu)+"&e_a="+k(bw)+(u(bs)?"&e_n="+k(bs):"")+(u(bv)?"&e_v="+k(bv):""),bx,"event");aB(bt,aQ)}function au(bs,bv,bt,bw){var bu=ax("search="+k(bs)+(bv?"&search_cat="+k(bv):"")+(u(bt)?"&search_count="+bt:""),bw,"sitesearch");aB(bu,aQ)}function aO(bs,bv,bu){var bt=ax("idgoal="+bs+(bv?"&revenue="+bv:""),bu,"goal");aB(bt,aQ)}function bb(bt,bs,bv){var bu=ax(bs+"="+k(bj(bt)),bv,"link");aB(bu,aQ)}function bg(bt,bs){if(bt!==""){return bt+bs.charAt(0).toUpperCase()+bs.slice(1)}return bs}function at(bx){var bw,bs,bv=["","webkit","ms","moz"],bu;if(!aC){for(bs=0;bs<bv.length;bs++){bu=bv[bs];if(Object.prototype.hasOwnProperty.call(s,bg(bu,"hidden"))){if(s[bg(bu,"visibilityState")]==="prerender"){bw=true}break}}}if(bw){O(s,bu+"visibilitychange",function bt(){s.removeEventListener(bu+"visibilitychange",bt,false);bx()});return}bx()}function aq(bu,bt){var bv,bs="(^| )(piwik[_-]"+bt; -if(bu){for(bv=0;bv<bu.length;bv++){bs+="|"+bu[bv]}}bs+=")( |$)";return new RegExp(bs)}function ba(bv,bs,bw){var bu=aq(aK,"download"),bt=aq(an,"link"),bx=new RegExp("\\.("+ay+")([?&#]|$)","i");return bt.test(bv)?"link":(bu.test(bv)||bx.test(bs)?"download":(bw?0:"link"))}function a1(bx){var bv,bt,bs;bv=bx.parentNode;while(bv!==null&&u(bv)){bt=bx.tagName.toUpperCase();if(bt==="A"||bt==="AREA"){break}bx=bv;bv=bx.parentNode}if(u(bx.href)){var by=bx.hostname||b(bx.href),bz=by.toLowerCase(),bu=bx.href.replace(by,bz),bw=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto):","i");if(!bw.test(bu)){bs=ba(bx.className,bu,aT(bz));if(bs){bu=g(bu);bb(bu,bs)}}}}function bq(bs){var bt,bu;bs=bs||C.event;bt=bs.which||bs.button;bu=bs.target||bs.srcElement;if(bs.type==="click"){if(bu){a1(bu)}}else{if(bs.type==="mousedown"){if((bt===1||bt===2)&&bu){aM=bt;ah=bu}else{aM=ah=null}}else{if(bs.type==="mouseup"){if(bt===aM&&bu===ah){a1(bu)}aM=ah=null}}}}function a0(bt,bs){if(bs){O(bt,"mouseup",bq,false); -O(bt,"mousedown",bq,false)}else{O(bt,"click",bq,false)}}function aI(bt){if(!aZ){aZ=true;var bu,bs=aq(Z,"ignore"),bv=s.links;if(bv){for(bu=0;bu<bv.length;bu++){if(!bs.test(bv[bu].className)){a0(bv[bu],bt)}}}}}function bk(){var bt,bu,bv={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"},bs=(new RegExp("Mac OS X.*Safari/")).test(e.userAgent)?C.devicePixelRatio||1:1;if(!((new RegExp("MSIE")).test(e.userAgent))){if(e.mimeTypes&&e.mimeTypes.length){for(bt in bv){if(Object.prototype.hasOwnProperty.call(bv,bt)){bu=e.mimeTypes[bv[bt]];bf[bt]=(bu&&bu.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&u(e.javaEnabled)&&e.javaEnabled()){bf.java="1"}if(o(C.GearsFactory)){bf.gears="1"}bf.cookie=X()}bf.res=F.width*bs+"x"+F.height*bs}bk();aN();return{getVisitorId:function(){return(S())[1] -},getVisitorInfo:function(){return S()},getAttributionInfo:function(){return Q()},getAttributionCampaignName:function(){return Q()[0]},getAttributionCampaignKeyword:function(){return Q()[1]},getAttributionReferrerTimestamp:function(){return Q()[2]},getAttributionReferrerUrl:function(){return Q()[3]},setTrackerUrl:function(bs){U=bs},setSiteId:function(bs){be=bs},setCustomData:function(bs,bt){if(E(bs)){ad=bs}else{if(!ad){ad=[]}ad[bs]=bt}},getCustomData:function(){return ad},appendToTrackingUrl:function(bs){aR=bs},getRequest:function(bs){return ax(bs)},setCustomVariable:function(bt,bs,bw,bu){var bv;if(!u(bu)){bu="visit"}if(!u(bs)){return}if(!u(bw)){bw=""}if(bt>0){bs=!l(bs)?String(bs):bs;bw=!l(bw)?String(bw):bw;bv=[bs.slice(0,bi),bw.slice(0,bi)];if(bu==="visit"||bu===2){T();Y[bt]=bv}else{if(bu==="page"||bu===3){aL[bt]=bv}else{if(bu==="event"){V[bt]=bv}}}}},getCustomVariable:function(bt,bu){var bs;if(!u(bu)){bu="visit"}if(bu==="page"||bu===3){bs=aL[bt]}else{if(bu==="event"){bs=V[bt]}else{if(bu==="visit"||bu===2){T(); -bs=Y[bt]}}}if(!u(bs)||(bs&&bs[0]==="")){return false}return bs},deleteCustomVariable:function(bs,bt){if(this.getCustomVariable(bs,bt)){this.setCustomVariable(bs,"","",bt)}},setLinkTrackingTimer:function(bs){aQ=bs},setDownloadExtensions:function(bs){ay=bs},addDownloadExtensions:function(bs){ay+="|"+bs},setDomains:function(bs){aS=l(bs)?[bs]:bs;aS.push(a9)},setIgnoreClasses:function(bs){Z=l(bs)?[bs]:bs},setRequestMethod:function(bs){aU=bs||"GET"},setReferrerUrl:function(bs){aW=bs},setCustomUrl:function(bs){aG=a8(bo,bs)},setDocumentTitle:function(bs){aw=bs},setAPIUrl:function(bs){al=bs},setDownloadClasses:function(bs){aK=l(bs)?[bs]:bs},setLinkClasses:function(bs){an=l(bs)?[bs]:bs},setCampaignNameKey:function(bs){aA=l(bs)?[bs]:bs},setCampaignKeywordKey:function(bs){av=l(bs)?[bs]:bs},discardHashTag:function(bs){ab=bs},setCookieNamePrefix:function(bs){bm=bs;Y=ai()},setCookieDomain:function(bs){ag=w(bs);aN()},setCookiePath:function(bs){bn=bs;aN()},setVisitorCookieTimeout:function(bs){ak=bs*1000 -},setSessionCookieTimeout:function(bs){am=bs*1000},setReferralCookieTimeout:function(bs){aH=bs*1000},setConversionAttributionFirstReferrer:function(bs){aF=bs},disableCookies:function(){ae=true;bf.cookie="0"},deleteCookies:function(){R()},setDoNotTrack:function(bt){var bs=e.doNotTrack||e.msDoNotTrack;bh=bt&&(bs==="yes"||bs==="1");if(bh){this.disableCookies()}},addListener:function(bt,bs){a0(bt,bs)},enableLinkTracking:function(bs){if(n){aI(bs)}else{A.push(function(){aI(bs)})}},enableJSErrorTracking:function(){if(bp){return}bp=true;var bs=C.onerror;C.onerror=function(bx,bv,bu,bw,bt){at(function(){var by="JavaScript Errors";var bz=bv+":"+bu;if(bw){bz+=":"+bw}ac(by,bz,bx)});if(bs){return bs(bx,bv,bu,bw,bt)}return false}},disablePerformanceTracking:function(){aD=false},setGenerationTimeMs:function(bs){ar=parseInt(bs,10)},setHeartBeatTimer:function(bu,bt){var bs=new Date();aa=bs.getTime()+bu*1000;ap=bt*1000},killFrame:function(){if(C.location!==C.top.location){C.top.location=C.location}},redirectFile:function(bs){if(C.location.protocol==="file:"){C.location=bs -}},setCountPreRendered:function(bs){aC=bs},trackGoal:function(bs,bu,bt){at(function(){aO(bs,bu,bt)})},trackLink:function(bt,bs,bu){at(function(){bb(bt,bs,bu)})},trackPageView:function(bs,bt){if(x(be)){at(function(){H(U,al,be)})}else{at(function(){aJ(bs,bt)})}},trackEvent:function(bt,bv,bs,bu){at(function(){ac(bt,bv,bs,bu)})},trackSiteSearch:function(bs,bu,bt){at(function(){au(bs,bu,bt)})},setEcommerceView:function(bv,bs,bu,bt){if(!u(bu)||!bu.length){bu=""}else{if(bu instanceof Array){bu=JSON2.stringify(bu)}}aL[5]=["_pkc",bu];if(u(bt)&&String(bt).length){aL[2]=["_pkp",bt]}if((!u(bv)||!bv.length)&&(!u(bs)||!bs.length)){return}if(u(bv)&&bv.length){aL[3]=["_pks",bv]}if(!u(bs)||!bs.length){bs=""}aL[4]=["_pkn",bs]},addEcommerceItem:function(bw,bs,bu,bt,bv){if(bw.length){a2[bw]=[bw,bs,bu,bt,bv]}},trackEcommerceOrder:function(bs,bw,bv,bu,bt,bx){a6(bs,bw,bv,bu,bt,bx)},trackEcommerceCartUpdate:function(bs){bl(bs)}}}function t(){return{push:L}}O(C,"beforeunload",M,false);m();Date.prototype.getTimeAlias=Date.prototype.getTime; -G=new z();var p={setTrackerUrl:1,setAPIUrl:1,setSiteId:1};var d;for(r=0;r<_paq.length;r++){d=_paq[r][0];if(p[d]){L(_paq[r]);delete _paq[r];if(p[d]>1){if(console!==undefined&&console&&console.error){console.error("The method "+d+' 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/api-reference/tracking-javascript#multiple-piwik-trackers')}}p[d]++}}for(r=0;r<_paq.length;r++){if(_paq[r]){L(_paq[r])}}_paq=new t();c={addPlugin:function(Q,R){a[Q]=R},getTracker:function(Q,R){return new z(Q,R)},getAsyncTracker:function(){return G}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return c})}return c}())}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{return eval("piwik_"+h) -}catch(i){}return}var c,e=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()}}; +}Q=D(Q,"u");S=b(Q)}else{if(S==="cc.bingj.com"||S==="webcache.googleusercontent.com"||S.slice(0,5)==="74.6."){Q=s.links[0].href;S=b(Q)}}return[S,Q,R]}function w(R){var Q=R.length;if(R.charAt(--Q)==="."){R=R.slice(0,Q)}if(R.slice(0,2)==="*."){R=R.slice(1)}return R}function P(R){R=R&&R.text?R.text:R;if(!l(R)){var Q=s.getElementsByTagName("title");if(Q&&u(Q[0])){R=Q[0].text}}return R}function y(Q,R){if(R){return R}if(Q.slice(-9)==="piwik.php"){Q=Q.slice(0,Q.length-9)}return Q}function x(U){var Q="Piwik_Overlay";var X=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)$");var S=X.exec(s.referrer);if(S){var T=S[1];if(T!==String(U)){return false}var W=S[2],R=S[3];C.name=Q+"###"+W+"###"+R}var V=C.name.split("###");return V.length===3&&V[0]===Q}function H(R,W,T){var V=C.name.split("###"),U=V[1],Q=V[2],S=y(R,W);h(S+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(S,T,U,Q)})}function z(ap,aS){var W=I(s.domain,C.location.href,v()),bd=w(W[0]),bs=W[1],a0=W[2],bt=false,aW="GET",aY=aW,aK="application/x-www-form-urlencoded; charset=UTF-8",au=aK,U=ap||"",am="",aU="",bi=aS||"",aI,ay=s.title,aA="7z|aac|apk|ar[cj]|as[fx]|avi|azw3|bin|csv|deb|dmg|docx?|epub|exe|flv|gif|gz|gzip|hqx|jar|jpe?g|js|mobi|mp(2|3|4|e?g)|mov(ie)?|ms[ip]|od[bfgpst]|og[gv]|pdf|phps|png|pptx?|qtm?|ra[mr]?|rpm|sea|sit|tar|t?bz2?|tgz|torrent|txt|wav|wm[av]|wpd||xlsx?|xml|z|zip",aV=[bd],Z=[],aN=[],ao=[],aT=500,aa,aq,ab,ad,aC=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],ax=["pk_kwd","piwik_kwd","utm_term"],bq="_pk_",ag,br,ae=false,bl,aE,aH,al=63072000000,an=1800000,aJ=15768000000,aF=true,at=0,Y=false,aj,aO={},V={},bm=200,a6={},bj={},a3=false,a1=false,aZ,aP,ah,aB=N,a2,aG; +function a8(bC,bz,by,bB,bx,bA){if(ae){return}var bw;if(by){bw=new Date();bw.setTime(bw.getTime()+by)}s.cookie=bC+"="+k(bz)+(by?";expires="+bw.toGMTString():"")+";path="+(bB||"/")+(bx?";domain="+bx:"")+(bA?";secure":"")}function ak(by){if(ae){return 0}var bw=new RegExp("(^|;)[ ]*"+by+"=([^;]*)"),bx=bw.exec(s.cookie);return bx?B(bx[2]):0}function bn(bw){var bx;if(ab){bx=new RegExp("#.*");return bw.replace(bx,"")}return bw}function bc(by,bw){var bz=j(bw),bx;if(bz){return bw}if(bw.slice(0,1)==="/"){return j(by)+"://"+b(by)+bw}by=bn(by);bx=by.indexOf("?");if(bx>=0){by=by.slice(0,bx)}bx=by.lastIndexOf("/");if(bx!==by.length-1){by=by.slice(0,bx+1)}return by+bw}function aX(bz){var bx,bw,by;for(bx=0;bx<aV.length;bx++){bw=w(aV[bx].toLowerCase());if(bz===bw){return true}if(bw.slice(0,1)==="."){if(bz===bw.slice(1)){return true}by=bz.length-bw.length;if((by>0)&&(bz.slice(by)===bw)){return true}}}return false}function bv(bw){var bx=new Image(1,1);bx.onload=function(){r=0};bx.src=U+(U.indexOf("?")<0?"?":"&")+bw +}function a9(bw){try{var by=C.XMLHttpRequest?new C.XMLHttpRequest():C.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;by.open("POST",U,true);by.onreadystatechange=function(){if(this.readyState===4&&this.status!==200){bv(bw)}};by.setRequestHeader("Content-Type",au);by.send(bw)}catch(bx){bv(bw)}}function aD(by,bx){var bw=new Date();if(!bl){if(aY==="POST"){a9(by)}else{bv(by)}i=bw.getTime()+bx}}function a7(bw){return bq+bw+"."+bi+"."+a2}function X(){if(ae){return"0"}if(!u(e.cookieEnabled)){var bw=a7("testcookie");a8(bw,"1");return ak(bw)==="1"?"1":"0"}return e.cookieEnabled?"1":"0"}function aQ(){a2=aB((ag||bd)+(br||"/")).slice(0,4)}function ai(){var bx=a7("cvar"),bw=ak(bx);if(bw.length){bw=JSON2.parse(bw);if(E(bw)){return bw}}return{}}function T(){if(Y===false){Y=ai()}}function bh(){var bw=new Date();aZ=bw.getTime()}function af(bA,bx,bw,bz,by,bB){a8(a7("id"),bA+"."+bx+"."+bw+"."+bz+"."+by+"."+bB,al,br,ag)}function S(){var bx=new Date(),bw=Math.round(bx.getTime()/1000),bz=ak(a7("id")),by; +if(bz){by=bz.split(".");by.unshift("0")}else{if(!aG){aG=aB((e.userAgent||"")+(e.platform||"")+JSON2.stringify(bj)+bx.getTime()+Math.random()).slice(0,16)}by=["1",aG,bw,0,bw,"",""]}return by}function R(){var bw=ak(a7("ref"));if(bw.length){try{bw=JSON2.parse(bw);if(E(bw)){return bw}}catch(bx){}}return["","",0,""]}function Q(){var bw=ae;ae=false;a8(a7("id"),"",-86400,br,ag);a8(a7("ses"),"",-86400,br,ag);a8(a7("cvar"),"",-86400,br,ag);a8(a7("ref"),"",-86400,br,ag);ae=bw}function bg(bA){if(!bA||!E(bA)){return}var bz=[];var by;for(by in bA){if(Object.prototype.hasOwnProperty.call(bA,by)){bz.push(by)}}var bB={};bz.sort();var bw=bz.length;var bx;for(bx=0;bx<bw;bx++){bB[bz[bx]]=bA[bz[bx]]}return bB}function az(by,bW,bX,bz){var bU,bx=new Date(),bG=Math.round(bx.getTime()/1000),b0,bV,bB,bM,bR,bF,bP,bC,bT,bA=1024,b2,bJ,bQ=Y,bH=a7("ses"),bI=a7("ref"),b3=a7("cvar"),bN=S(),bL=ak(bH),bS=R(),bZ=aI||bs,bD,bw;if(ae){Q()}if(bl){return""}b0=bN[0];bV=bN[1];bM=bN[2];bB=bN[3];bR=bN[4];bF=bN[5];if(!u(bN[6])){bN[6]="" +}bP=bN[6];if(!u(bz)){bz=""}var bK=s.characterSet||s.charset;if(!bK||bK.toLowerCase()==="utf-8"){bK=null}bD=bS[0];bw=bS[1];bC=bS[2];bT=bS[3];if(!bL){var bY=an/1000;if(!bF||(bG-bF)>bY){bB++;bF=bR}if(!aH||!bD.length){for(bU in aC){if(Object.prototype.hasOwnProperty.call(aC,bU)){bD=D(bZ,aC[bU]);if(bD.length){break}}}for(bU in ax){if(Object.prototype.hasOwnProperty.call(ax,bU)){bw=D(bZ,ax[bU]);if(bw.length){break}}}}b2=b(a0);bJ=bT.length?b(bT):"";if(b2.length&&!aX(b2)&&(!aH||!bJ.length||aX(bJ))){bT=a0}if(bT.length||bD.length){bC=bG;bS=[bD,bw,bC,bn(bT.slice(0,bA))];a8(bI,JSON2.stringify(bS),aJ,br,ag)}}by+="&idsite="+bi+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+bx.getHours()+"&m="+bx.getMinutes()+"&s="+bx.getSeconds()+"&url="+k(bn(bZ))+(a0.length?"&urlref="+k(bn(a0)):"")+"&_id="+bV+"&_idts="+bM+"&_idvc="+bB+"&_idn="+b0+(bD.length?"&_rcn="+k(bD):"")+(bw.length?"&_rck="+k(bw):"")+"&_refts="+bC+"&_viewts="+bF+(String(bP).length?"&_ects="+bP:"")+(String(bT).length?"&_ref="+k(bn(bT.slice(0,bA))):"")+(bK?"&cs="+k(bK):""); +for(bU in bj){if(Object.prototype.hasOwnProperty.call(bj,bU)){by+="&"+bU+"="+bj[bU]}}if(bW){by+="&data="+k(JSON2.stringify(bW))}else{if(ad){by+="&data="+k(JSON2.stringify(ad))}}function bE(b4,b5){var b6=JSON2.stringify(b4);if(b6.length>2){return"&"+b5+"="+k(b6)}return""}var b1=bg(aO);var bO=bg(V);by+=bE(b1,"cvar");by+=bE(bO,"e_cvar");if(Y){by+=bE(Y,"_cvar");for(bU in bQ){if(Object.prototype.hasOwnProperty.call(bQ,bU)){if(Y[bU][0]===""||Y[bU][1]===""){delete Y[bU]}}}a8(b3,JSON2.stringify(Y),an,br,ag)}if(aF){if(at){by+=">_ms="+at}else{if(f&&f.timing&&f.timing.requestStart&&f.timing.responseEnd){by+=">_ms="+(f.timing.responseEnd-f.timing.requestStart)}}}af(bV,bM,bB,bG,bF,u(bz)&&String(bz).length?bz:bP);a8(bH,"*",an,br,ag);by+=J(bX);if(aU.length){by+="&"+aU}if(o(aj)){by=aj(by)}return by}function bb(bz,by,bD,bA,bw,bG){var bB="idgoal=0",bC,bx=new Date(),bE=[],bF;if(String(bz).length){bB+="&ec_id="+k(bz);bC=Math.round(bx.getTime()/1000)}bB+="&revenue="+by;if(String(bD).length){bB+="&ec_st="+bD +}if(String(bA).length){bB+="&ec_tx="+bA}if(String(bw).length){bB+="&ec_sh="+bw}if(String(bG).length){bB+="&ec_dt="+bG}if(a6){for(bF in a6){if(Object.prototype.hasOwnProperty.call(a6,bF)){if(!u(a6[bF][1])){a6[bF][1]=""}if(!u(a6[bF][2])){a6[bF][2]=""}if(!u(a6[bF][3])||String(a6[bF][3]).length===0){a6[bF][3]=0}if(!u(a6[bF][4])||String(a6[bF][4]).length===0){a6[bF][4]=1}bE.push(a6[bF])}}bB+="&ec_items="+k(JSON2.stringify(bE))}bB=az(bB,ad,"ecommerce",bC);aD(bB,aT)}function ba(bw,bA,bz,by,bx,bB){if(String(bw).length&&u(bA)){bb(bw,bA,bz,by,bx,bB)}}function bp(bw){if(u(bw)){bb("",bw,"","","","")}}function aM(bz,bA){var bw=new Date(),by=az("action_name="+k(P(bz||ay)),bA,"log");aD(by,aT);if(aa&&aq&&!a1){a1=true;O(s,"click",bh);O(s,"mouseup",bh);O(s,"mousedown",bh);O(s,"mousemove",bh);O(s,"mousewheel",bh);O(C,"DOMMouseScroll",bh);O(C,"scroll",bh);O(s,"keypress",bh);O(s,"keydown",bh);O(s,"keyup",bh);O(C,"resize",bh);O(C,"focus",bh);O(C,"blur",bh);aZ=bw.getTime();setTimeout(function bx(){var bB;bw=new Date(); +if((aZ+aq)>bw.getTime()){if(aa<bw.getTime()){bB=az("ping=1",bA,"ping");aD(bB,aT)}setTimeout(bx,aq)}},aq)}}function ac(by,bA,bw,bz,bB){if(String(by).length===0||String(bA).length===0){return false}var bx=az("e_c="+k(by)+"&e_a="+k(bA)+(u(bw)?"&e_n="+k(bw):"")+(u(bz)?"&e_v="+k(bz):""),bB,"event");aD(bx,aT)}function aw(bw,bz,bx,bA){var by=az("search="+k(bw)+(bz?"&search_cat="+k(bz):"")+(u(bx)?"&search_count="+bx:""),bA,"sitesearch");aD(by,aT)}function aR(bw,bz,by){var bx=az("idgoal="+bw+(bz?"&revenue="+bz:""),by,"goal");aD(bx,aT)}function bf(bx,bw,bz){var by=az(bw+"="+k(bn(bx)),bz,"link");aD(by,aT)}function bk(bx,bw){if(bx!==""){return bx+bw.charAt(0).toUpperCase()+bw.slice(1)}return bw}function av(bB){var bA,bw,bz=["","webkit","ms","moz"],by;if(!aE){for(bw=0;bw<bz.length;bw++){by=bz[bw];if(Object.prototype.hasOwnProperty.call(s,bk(by,"hidden"))){if(s[bk(by,"visibilityState")]==="prerender"){bA=true}break}}}if(bA){O(s,by+"visibilitychange",function bx(){s.removeEventListener(by+"visibilitychange",bx,false); +bB()});return}bB()}function ar(by,bx){var bz,bw="(^| )(piwik[_-]"+bx;if(by){for(bz=0;bz<by.length;bz++){bw+="|"+by[bz]}}bw+=")( |$)";return new RegExp(bw)}function be(bz,bw,bA){var by=ar(aN,"download"),bx=ar(ao,"link"),bB=new RegExp("\\.("+aA+")([?&#]|$)","i");return bx.test(bz)?"link":(by.test(bz)||bB.test(bw)?"download":(bA?0:"link"))}function a5(bB){var bz,bx,bw;bz=bB.parentNode;while(bz!==null&&u(bz)){bx=bB.tagName.toUpperCase();if(bx==="A"||bx==="AREA"){break}bB=bz;bz=bB.parentNode}if(u(bB.href)){var bC=bB.hostname||b(bB.href),bD=bC.toLowerCase(),by=bB.href.replace(bC,bD),bA=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto):","i");if(!bA.test(by)){bw=be(bB.className,by,aX(bD));if(bw){by=g(by);bf(by,bw)}}}}function bu(bw){var bx,by;bw=bw||C.event;bx=bw.which||bw.button;by=bw.target||bw.srcElement;if(bw.type==="click"){if(by){a5(by)}}else{if(bw.type==="mousedown"){if((bx===1||bx===2)&&by){aP=bx;ah=by}else{aP=ah=null}}else{if(bw.type==="mouseup"){if(bx===aP&&by===ah){a5(by) +}aP=ah=null}}}}function a4(bx,bw){if(bw){O(bx,"mouseup",bu,false);O(bx,"mousedown",bu,false)}else{O(bx,"click",bu,false)}}function aL(bx){if(!a3){a3=true;var by,bw=ar(Z,"ignore"),bz=s.links;if(bz){for(by=0;by<bz.length;by++){if(!bw.test(bz[by].className)){a4(bz[by],bx)}}}}}function bo(){var bx,by,bz={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"},bw=(new RegExp("Mac OS X.*Safari/")).test(e.userAgent)?C.devicePixelRatio||1:1;if(!((new RegExp("MSIE")).test(e.userAgent))){if(e.mimeTypes&&e.mimeTypes.length){for(bx in bz){if(Object.prototype.hasOwnProperty.call(bz,bx)){by=e.mimeTypes[bz[bx]];bj[bx]=(by&&by.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&u(e.javaEnabled)&&e.javaEnabled()){bj.java="1"}if(o(C.GearsFactory)){bj.gears="1"}bj.cookie=X()}bj.res=F.width*bw+"x"+F.height*bw +}bo();aQ();return{getVisitorId:function(){return(S())[1]},getVisitorInfo:function(){return S()},getAttributionInfo:function(){return R()},getAttributionCampaignName:function(){return R()[0]},getAttributionCampaignKeyword:function(){return R()[1]},getAttributionReferrerTimestamp:function(){return R()[2]},getAttributionReferrerUrl:function(){return R()[3]},setTrackerUrl:function(bw){U=bw},setSiteId:function(bw){bi=bw},setCustomData:function(bw,bx){if(E(bw)){ad=bw}else{if(!ad){ad=[]}ad[bw]=bx}},getCustomData:function(){return ad},setCustomRequestProcessing:function(bw){aj=bw},appendToTrackingUrl:function(bw){aU=bw},getRequest:function(bw){return az(bw)},addPlugin:function(bw,bx){a[bw]=bx},setCustomVariable:function(bx,bw,bA,by){var bz;if(!u(by)){by="visit"}if(!u(bw)){return}if(!u(bA)){bA=""}if(bx>0){bw=!l(bw)?String(bw):bw;bA=!l(bA)?String(bA):bA;bz=[bw.slice(0,bm),bA.slice(0,bm)];if(by==="visit"||by===2){T();Y[bx]=bz}else{if(by==="page"||by===3){aO[bx]=bz}else{if(by==="event"){V[bx]=bz}}}}},getCustomVariable:function(bx,by){var bw; +if(!u(by)){by="visit"}if(by==="page"||by===3){bw=aO[bx]}else{if(by==="event"){bw=V[bx]}else{if(by==="visit"||by===2){T();bw=Y[bx]}}}if(!u(bw)||(bw&&bw[0]==="")){return false}return bw},deleteCustomVariable:function(bw,bx){if(this.getCustomVariable(bw,bx)){this.setCustomVariable(bw,"","",bx)}},setLinkTrackingTimer:function(bw){aT=bw},setDownloadExtensions:function(bw){aA=bw},addDownloadExtensions:function(bw){aA+="|"+bw},setDomains:function(bw){aV=l(bw)?[bw]:bw;aV.push(bd)},setIgnoreClasses:function(bw){Z=l(bw)?[bw]:bw},setRequestMethod:function(bw){aY=bw||aW},setRequestContentType:function(bw){au=bw||aK},setReferrerUrl:function(bw){a0=bw},setCustomUrl:function(bw){aI=bc(bs,bw)},setDocumentTitle:function(bw){ay=bw},setAPIUrl:function(bw){am=bw},setDownloadClasses:function(bw){aN=l(bw)?[bw]:bw},setLinkClasses:function(bw){ao=l(bw)?[bw]:bw},setCampaignNameKey:function(bw){aC=l(bw)?[bw]:bw},setCampaignKeywordKey:function(bw){ax=l(bw)?[bw]:bw},discardHashTag:function(bw){ab=bw},setCookieNamePrefix:function(bw){bq=bw; +Y=ai()},setCookieDomain:function(bw){ag=w(bw);aQ()},setCookiePath:function(bw){br=bw;aQ()},setVisitorCookieTimeout:function(bw){al=bw*1000},setSessionCookieTimeout:function(bw){an=bw*1000},setReferralCookieTimeout:function(bw){aJ=bw*1000},setConversionAttributionFirstReferrer:function(bw){aH=bw},disableCookies:function(){ae=true;bj.cookie="0"},deleteCookies:function(){Q()},setDoNotTrack:function(bx){var bw=e.doNotTrack||e.msDoNotTrack;bl=bx&&(bw==="yes"||bw==="1");if(bl){this.disableCookies()}},addListener:function(bx,bw){a4(bx,bw)},enableLinkTracking:function(bw){if(n){aL(bw)}else{A.push(function(){aL(bw)})}},enableJSErrorTracking:function(){if(bt){return}bt=true;var bw=C.onerror;C.onerror=function(bB,bz,by,bA,bx){av(function(){var bC="JavaScript Errors";var bD=bz+":"+by;if(bA){bD+=":"+bA}ac(bC,bD,bB)});if(bw){return bw(bB,bz,by,bA,bx)}return false}},disablePerformanceTracking:function(){aF=false},setGenerationTimeMs:function(bw){at=parseInt(bw,10)},setHeartBeatTimer:function(by,bx){var bw=new Date(); +aa=bw.getTime()+by*1000;aq=bx*1000},killFrame:function(){if(C.location!==C.top.location){C.top.location=C.location}},redirectFile:function(bw){if(C.location.protocol==="file:"){C.location=bw}},setCountPreRendered:function(bw){aE=bw},trackGoal:function(bw,by,bx){av(function(){aR(bw,by,bx)})},trackLink:function(bx,bw,by){av(function(){bf(bx,bw,by)})},trackPageView:function(bw,bx){if(x(bi)){av(function(){H(U,am,bi)})}else{av(function(){aM(bw,bx)})}},trackEvent:function(bx,bz,bw,by){av(function(){ac(bx,bz,bw,by)})},trackSiteSearch:function(bw,by,bx){av(function(){aw(bw,by,bx)})},setEcommerceView:function(bz,bw,by,bx){if(!u(by)||!by.length){by=""}else{if(by instanceof Array){by=JSON2.stringify(by)}}aO[5]=["_pkc",by];if(u(bx)&&String(bx).length){aO[2]=["_pkp",bx]}if((!u(bz)||!bz.length)&&(!u(bw)||!bw.length)){return}if(u(bz)&&bz.length){aO[3]=["_pks",bz]}if(!u(bw)||!bw.length){bw=""}aO[4]=["_pkn",bw]},addEcommerceItem:function(bA,bw,by,bx,bz){if(bA.length){a6[bA]=[bA,bw,by,bx,bz]}},trackEcommerceOrder:function(bw,bA,bz,by,bx,bB){ba(bw,bA,bz,by,bx,bB) +},trackEcommerceCartUpdate:function(bw){bp(bw)}}}function t(){return{push:L}}O(C,"beforeunload",M,false);m();Date.prototype.getTimeAlias=Date.prototype.getTime;G=new z();var p={setTrackerUrl:1,setAPIUrl:1,setSiteId:1};var d;for(r=0;r<_paq.length;r++){d=_paq[r][0];if(p[d]){L(_paq[r]);delete _paq[r];if(p[d]>1){if(console!==undefined&&console&&console.error){console.error("The method "+d+' 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/api-reference/tracking-javascript#multiple-piwik-trackers')}}p[d]++}}for(r=0;r<_paq.length;r++){if(_paq[r]){L(_paq[r])}}_paq=new t();c={addPlugin:function(Q,R){a[Q]=R},getTracker:function(Q,R){return new z(Q,R)},getAsyncTracker:function(){return G}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return c})}return c}())}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}(function(){var a=(typeof AnalyticsTracker); +if(a==="undefined"){AnalyticsTracker=Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{return eval("piwik_"+h)}catch(i){}return}var c,e=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/API.php b/plugins/API/API.php index 9b2e24b7d7..7e4f7eb62d 100644 --- a/plugins/API/API.php +++ b/plugins/API/API.php @@ -16,13 +16,12 @@ use Piwik\DataTable; use Piwik\DataTable\Filter\ColumnDelete; use Piwik\DataTable\Row; use Piwik\Date; +use Piwik\IP; use Piwik\Metrics; use Piwik\Period; use Piwik\Period\Range; use Piwik\Piwik; -use Piwik\Plugin\Dimension\ActionDimension; use Piwik\Plugin\Dimension\VisitDimension; -use Piwik\Plugin\Dimension\ConversionDimension; use Piwik\Plugins\CoreAdminHome\CustomLogo; use Piwik\Translate; use Piwik\Version; @@ -61,6 +60,18 @@ class API extends \Piwik\Plugin\API } /** + * Returns the most accurate IP address availble for the current user, in + * IPv4 format. This could be the proxy client's IP address. + * + * @return string IP address in presentation format. + */ + public function getIpFromHeader() + { + Piwik::checkUserHasSomeViewAccess(); + return IP::getIpFromHeader(); + } + + /** * Returns the section [APISettings] if defined in config.ini.php * @return array */ diff --git a/plugins/API/Menu.php b/plugins/API/Menu.php index 25df939d35..330fdd2519 100644 --- a/plugins/API/Menu.php +++ b/plugins/API/Menu.php @@ -39,7 +39,7 @@ class Menu extends \Piwik\Plugin\Menu } if (!class_exists("DeviceDetector\\DeviceDetector")) { - throw new \Exception("DeviceDetector could not be found, maybe you are using Piwik from git and need to have update Composer. <br>php composer.phar update"); + throw new \Exception("DeviceDetector could not be found, maybe you are using Piwik from git and need to update Composer. Execute this command: php composer.phar update"); } $ua = new OperatingSystem($_SERVER['HTTP_USER_AGENT']); diff --git a/plugins/CoreAdminHome/API.php b/plugins/CoreAdminHome/API.php index afd4b1b81e..d651c8f1ca 100644 --- a/plugins/CoreAdminHome/API.php +++ b/plugins/CoreAdminHome/API.php @@ -133,6 +133,10 @@ class API extends \Piwik\Plugin\API } } + if(empty($minDate)) { + throw new Exception("Check the 'dates' parameter is a valid date."); + } + // In each table, invalidate day/week/month/year containing this date $archiveTables = ArchiveTableCreator::getTablesArchivesInstalled(); foreach ($archiveTables as $table) { @@ -204,4 +208,15 @@ class API extends \Piwik\Plugin\API return array(); } + /** + * Return true if plugin is activated, false otherwise + * + * @param string $pluginName + * @return bool + */ + public function isPluginActivated($pluginName) + { + Piwik::checkUserHasSomeViewAccess(); + return \Piwik\Plugin\Manager::getInstance()->isPluginActivated($pluginName); + } } diff --git a/plugins/CoreAdminHome/Controller.php b/plugins/CoreAdminHome/Controller.php index 85486b52ed..e50451fd84 100644 --- a/plugins/CoreAdminHome/Controller.php +++ b/plugins/CoreAdminHome/Controller.php @@ -53,12 +53,13 @@ class Controller extends \Piwik\Plugin\ControllerAdmin $view->trustedHosts = Url::getTrustedHostsFromConfig(); $logo = new CustomLogo(); - $view->branding = array('use_custom_logo' => $logo->isEnabled()); - $view->logosWriteable = $logo->isCustomLogoWritable(); - $view->pathUserLogo = CustomLogo::getPathUserLogo(); - $view->pathUserFavicon = CustomLogo::getPathUserFavicon(); - $view->pathUserLogoSmall = CustomLogo::getPathUserLogoSmall(); - $view->pathUserLogoSVG = CustomLogo::getPathUserSvgLogo(); + $view->branding = array('use_custom_logo' => $logo->isEnabled()); + $view->fileUploadEnabled = $logo->isFileUploadEnabled(); + $view->logosWriteable = $logo->isCustomLogoWritable(); + $view->pathUserLogo = CustomLogo::getPathUserLogo(); + $view->pathUserFavicon = CustomLogo::getPathUserFavicon(); + $view->pathUserLogoSmall = CustomLogo::getPathUserLogoSmall(); + $view->pathUserLogoSVG = CustomLogo::getPathUserSvgLogo(); $view->pathUserLogoDirectory = realpath(dirname($view->pathUserLogo) . '/'); } diff --git a/plugins/CoreAdminHome/CustomLogo.php b/plugins/CoreAdminHome/CustomLogo.php index 413141136b..fe7e78ac6e 100644 --- a/plugins/CoreAdminHome/CustomLogo.php +++ b/plugins/CoreAdminHome/CustomLogo.php @@ -78,6 +78,14 @@ class CustomLogo /** * @return bool */ + public function isFileUploadEnabled() + { + return ini_get('file_uploads') == 1; + } + + /** + * @return bool + */ public function isCustomLogoWritable() { if(Config::getInstance()->General['enable_custom_logo_check'] == 0) { @@ -95,8 +103,7 @@ class CustomLogo && is_writeable(PIWIK_DOCUMENT_ROOT . '/' . $this->getPathUserSvgLogo()) && is_writeable(PIWIK_DOCUMENT_ROOT . '/' . $this->getPathUserLogoSmall());; - $serverUploadEnabled = ini_get('file_uploads') == 1; - $isCustomLogoWritable = ($logoFilesWriteable || $directoryWritable) && $serverUploadEnabled; + $isCustomLogoWritable = ($logoFilesWriteable || $directoryWritable) && $this->isFileUploadEnabled(); return $isCustomLogoWritable; } diff --git a/plugins/CoreAdminHome/Tasks.php b/plugins/CoreAdminHome/Tasks.php index f32cbe5a32..649579dc10 100644 --- a/plugins/CoreAdminHome/Tasks.php +++ b/plugins/CoreAdminHome/Tasks.php @@ -8,6 +8,7 @@ */ namespace Piwik\Plugins\CoreAdminHome; +use Piwik\DataAccess\ArchivePurger; use Piwik\DataAccess\ArchiveSelector; use Piwik\DataAccess\ArchiveTableCreator; use Piwik\Date; @@ -33,7 +34,7 @@ class Tasks extends \Piwik\Plugin\Tasks // Somehow we may have archive tables created with older dates, prevent exception from being thrown if($year > 1990) { - ArchiveSelector::purgeOutdatedArchives(Date::factory("$year-$month-15")); + ArchivePurger::purgeOutdatedArchives(Date::factory("$year-$month-15")); } } } diff --git a/plugins/CoreAdminHome/templates/generalSettings.twig b/plugins/CoreAdminHome/templates/generalSettings.twig index 78b2f87f7a..8edbb14cf4 100644 --- a/plugins/CoreAdminHome/templates/generalSettings.twig +++ b/plugins/CoreAdminHome/templates/generalSettings.twig @@ -235,41 +235,56 @@ <div id='logoSettings'> <form id="logoUploadForm" method="post" enctype="multipart/form-data" action="index.php?module=CoreAdminHome&format=json&action=uploadCustomLogo"> <table class="adminTable" style='width:550px;'> - {% if logosWriteable %} - <tr> - <td> - <label for="customLogo">{{ 'CoreAdminHome_LogoUpload'|translate }}:<br/> - <span class="form-description">{{ 'CoreAdminHome_LogoUploadHelp'|translate("JPG / PNG / GIF", 110) }}</span> - </label> - </td> - <td style="width:200px;"> - <input name="customLogo" type="file" id="customLogo"/> - <img src="{{ pathUserLogo }}?r={{ random() }}" id="currentLogo" height="150"/> - </td> - </tr> - <tr> - <td> - <label for="customLogo">{{ 'CoreAdminHome_FaviconUpload'|translate }}:<br/> - <span class="form-description">{{ 'CoreAdminHome_LogoUploadHelp'|translate("JPG / PNG / GIF", 16) }}</span> - </label> - </td> - <td style="width:200px;"> - <input name="customFavicon" type="file" id="customFavicon"/> - <img src="{{ pathUserFavicon }}?r={{ random() }}" id="currentFavicon" width="16" height="16"/> - </td> - </tr> + {% if fileUploadEnabled %} + {% if logosWriteable %} + <tr> + <td> + <label for="customLogo">{{ 'CoreAdminHome_LogoUpload'|translate }}:<br/> + <span class="form-description">{{ 'CoreAdminHome_LogoUploadHelp'|translate("JPG / PNG / GIF", 110) }}</span> + </label> + </td> + <td style="width:200px;"> + <input name="customLogo" type="file" id="customLogo"/> + <img src="{{ pathUserLogo }}?r={{ random() }}" id="currentLogo" height="150"/> + </td> + </tr> + <tr> + <td> + <label for="customLogo">{{ 'CoreAdminHome_FaviconUpload'|translate }}:<br/> + <span class="form-description">{{ 'CoreAdminHome_LogoUploadHelp'|translate("JPG / PNG / GIF", 16) }}</span> + </label> + </td> + <td style="width:200px;"> + <input name="customFavicon" type="file" id="customFavicon"/> + <img src="{{ pathUserFavicon }}?r={{ random() }}" id="currentFavicon" width="16" height="16"/> + </td> + </tr> + {% else %} + <tr> + <td> + <div style="display:inline-block;margin-top:10px;" id="CoreAdminHome_LogoNotWriteable"> + {{ 'CoreAdminHome_LogoNotWriteableInstruction' + |translate("<strong>"~pathUserLogoDirectory~"</strong><br/>", pathUserLogo ~", "~ pathUserLogoSmall ~", "~ pathUserLogoSVG ~"") + |notification({'placeAt': '#CoreAdminHome_LogoNotWriteable', 'noclear': true, 'context': 'warning', 'raw': true}) }} + + + </div> + </td> + </tr> + {% endif %} {% else %} <tr> <td> - <div style="display:inline-block;margin-top:10px;" id="CoreAdminHome_LogoNotWriteable"> - {{ 'CoreAdminHome_LogoNotWriteableInstruction' - |translate("<strong>"~pathUserLogoDirectory~"</strong><br/>", pathUserLogo ~", "~ pathUserLogoSmall ~", "~ pathUserLogoSVG ~"") - |notification({'placeAt': '#CoreAdminHome_LogoNotWriteable', 'noclear': true, 'context': 'warning', 'raw': true}) }} + <div style="display:inline-block;margin-top:10px;" id="CoreAdminHome_FileUploadDisabled"> + {{ 'CoreAdminHome_FileUploadDisabled' + |translate("file_uploads=1") + |notification({'placeAt': '#CoreAdminHome_FileUploadDisabled', 'noclear': true, 'context': 'warning', 'raw': true}) }} </div> </td> </tr> + {% endif %} </table> </form> diff --git a/plugins/CoreConsole/Commands/CoreArchiver.php b/plugins/CoreConsole/Commands/CoreArchiver.php index 71c5d0cfb4..570b1dc74d 100644 --- a/plugins/CoreConsole/Commands/CoreArchiver.php +++ b/plugins/CoreConsole/Commands/CoreArchiver.php @@ -9,6 +9,7 @@ namespace Piwik\Plugins\CoreConsole\Commands; use Piwik\Common; use Piwik\CronArchive; +use Piwik\Log; use Piwik\Plugin\ConsoleCommand; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -34,6 +35,10 @@ class CoreArchiver extends ConsoleCommand throw new \InvalidArgumentException('No valid URL given. If you have specified a valid URL try --piwik-domain instead of --url'); } + if($input->getOption('verbose')) { + Log::getInstance()->setLogLevel(Log::VERBOSE); + } + include PIWIK_INCLUDE_PATH . '/misc/cron/archive.php'; } @@ -43,21 +48,24 @@ class CoreArchiver extends ConsoleCommand $command->setName('core:archive'); $command->setDescription("Runs the CLI archiver. It is an important tool for general maintenance and to keep Piwik very fast."); $command->setHelp("* It is recommended to run the script with the option --url=[piwik-server-url] only. Other options are not required. - Try --piwik-domain if --url does not work for you + Try --piwik-domain if --url does not work for you. * This script should be executed every hour via crontab, or as a daemon. * You can also run it via http:// by specifying the Super User &token_auth=XYZ as a parameter ('Web Cron'), but it is recommended to run it via command line/CLI instead. -* If you have any suggestion about this script, please let the team know at hello@piwik.org +* If you have any suggestion about this script, please let the team know at feedback@piwik.org * Enjoy!"); $command->addOption('url', null, InputOption::VALUE_REQUIRED, "Mandatory option as an alternative to '--piwik-domain'. Must be set to the Piwik base URL.\nFor example: --url=http://analytics.example.org/ or --url=https://example.org/piwik/"); $command->addOption('force-all-websites', null, InputOption::VALUE_NONE, "If specified, the script will trigger archiving on all websites.\nUse with --force-all-periods=[seconds] to also process those websites\nthat had visits in the last [seconds] seconds."); $command->addOption('force-all-periods', null, InputOption::VALUE_OPTIONAL, "Limits archiving to websites with some traffic in the last [seconds] seconds. \nFor example --force-all-periods=86400 will archive websites that had visits in the last 24 hours. \nIf [seconds] is not specified, all websites with visits in the last " . CronArchive::ARCHIVE_SITES_WITH_TRAFFIC_SINCE . "\n seconds (" . round(CronArchive::ARCHIVE_SITES_WITH_TRAFFIC_SINCE / 86400) . " days) will be archived."); $command->addOption('force-timeout-for-periods', null, InputOption::VALUE_OPTIONAL, "The current week/ current month/ current year will be processed at most every [seconds].\nIf not specified, defaults to " . CronArchive::SECONDS_DELAY_BETWEEN_PERIOD_ARCHIVES . "."); - $command->addOption('force-date-last-n', null, InputOption::VALUE_REQUIRED, "This script calls the API with period=lastN. You can force the N in lastN by specifying this value."); - $command->addOption('force-idsites', null, InputOption::VALUE_OPTIONAL, 'If specified, archiving will be processed only for these Sites Ids (comma separated)'); $command->addOption('skip-idsites', null, InputOption::VALUE_OPTIONAL, 'If specified, archiving will be skipped for these websites (in case these website ids would have been archived).'); + $command->addOption('force-idsites', null, InputOption::VALUE_OPTIONAL, 'If specified, archiving will be processed only for these Sites Ids (comma separated)'); + $command->addOption('force-periods', null, InputOption::VALUE_OPTIONAL, "If specified, archiving will be processed only for these Periods (comma separated eg. day,week,month)"); + $command->addOption('force-date-last-n', null, InputOption::VALUE_REQUIRED, "This script calls the API with period=lastN. You can force the N in lastN by specifying this value."); + $command->addOption('force-date-range', null, InputOption::VALUE_OPTIONAL, "If specified, archiving will be processed only for periods included in this date range. Format: YYYY-MM-DD,YYYY-MM-DD"); + $command->addOption('concurrent-requests-per-website', null, InputOption::VALUE_OPTIONAL, "When processing a website and its segments, number of requests to process in parallel", CronArchive::MAX_CONCURRENT_API_REQUESTS); $command->addOption('disable-scheduled-tasks', null, InputOption::VALUE_NONE, "Skips executing Scheduled tasks (sending scheduled reports, db optimization, etc.)."); - $command->addOption('xhprof', null, InputOption::VALUE_NONE, "Enables XHProf profiler for this archive.php run. Requires XHPRof (see tests/README.xhprof.md)."); $command->addOption('accept-invalid-ssl-certificate', null, InputOption::VALUE_NONE, "It is _NOT_ recommended to use this argument. Instead, you should use a valid SSL certificate!\nIt can be useful if you specified --url=https://... or if you are using Piwik with force_ssl=1"); + $command->addOption('xhprof', null, InputOption::VALUE_NONE, "Enables XHProf profiler for this archive.php run. Requires XHPRof (see tests/README.xhprof.md)."); } }
\ No newline at end of file diff --git a/plugins/CoreConsole/Commands/DevelopmentSyncUITestScreenshots.php b/plugins/CoreConsole/Commands/DevelopmentSyncUITestScreenshots.php index 4caa7ceea4..593faf0f17 100644 --- a/plugins/CoreConsole/Commands/DevelopmentSyncUITestScreenshots.php +++ b/plugins/CoreConsole/Commands/DevelopmentSyncUITestScreenshots.php @@ -78,5 +78,31 @@ class DevelopmentSyncUITestScreenshots extends ConsoleCommand PIWIK_DOCUMENT_ROOT . "/" . $downloadTo); } } + + $this->displayGitInstructions($output); + + } + + /** + * @param OutputInterface $output + */ + protected function displayGitInstructions(OutputInterface $output) + { + $output->writeln(''); + $output->writeln('--------------'); + $output->writeln(''); + $output->writeln("If all downloaded screenshots are valid you may push them with these commands:"); + $output->writeln(''); + $commands = "cd tests/PHPUnit/UI/ +git add expected-ui-screenshots/ +git pull +git commit -m'' # WRITE A COMMIT MESSAGE +git push +cd .. +git add UI +git commit -m'' #WRITE A COMMIT MESSAGE +git pull +git push"; + $output->writeln($commands); } } diff --git a/plugins/CoreConsole/Commands/TestsSetupFixture.php b/plugins/CoreConsole/Commands/TestsSetupFixture.php index 5aaa7c83da..c04d057217 100644 --- a/plugins/CoreConsole/Commands/TestsSetupFixture.php +++ b/plugins/CoreConsole/Commands/TestsSetupFixture.php @@ -53,6 +53,8 @@ class TestsSetupFixture extends ConsoleCommand "Used by UI tests. Creates symlinks to root directory in tests/PHPUnit/proxy."); $this->addOption('server-global', null, InputOption::VALUE_REQUIRED, "Used by UI tests. Sets the \$_SERVER global variable from a JSON string."); + $this->addOption('plugins', null, InputOption::VALUE_REQUIRED, + "Used by UI tests. Comma separated list of plugin names to activate and install when setting up a fixture."); } protected function execute(InputInterface $input, OutputInterface $output) @@ -108,6 +110,11 @@ class TestsSetupFixture extends ConsoleCommand $fixture->resetPersistedFixture = true; } + $extraPluginsToLoad = $input->getOption('plugins'); + if ($extraPluginsToLoad) { + $fixture->extraPluginsToLoad = explode(',', $extraPluginsToLoad); + } + if($fixture->createConfig) { Config::getInstance()->setTestEnvironment(); } diff --git a/plugins/CoreHome/CoreHome.php b/plugins/CoreHome/CoreHome.php index cd4741f83e..18ad9f68c2 100644 --- a/plugins/CoreHome/CoreHome.php +++ b/plugins/CoreHome/CoreHome.php @@ -99,6 +99,7 @@ class CoreHome extends \Piwik\Plugin $jsFiles[] = "plugins/CoreHome/angularjs/common/filters/evolution.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/filters/length.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/filters/trim.js"; + $jsFiles[] = "plugins/CoreHome/angularjs/common/filters/pretty-url.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/directives/directive.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/directives/autocomplete-matched.js"; @@ -196,5 +197,16 @@ class CoreHome extends \Piwik\Plugin $translationKeys[] = 'General_Search'; $translationKeys[] = 'General_MoreDetails'; $translationKeys[] = 'General_Help'; + $translationKeys[] = 'General_MoreDetails'; + $translationKeys[] = 'General_Help'; + $translationKeys[] = 'General_Id'; + $translationKeys[] = 'General_Name'; + $translationKeys[] = 'General_JsTrackingTag'; + $translationKeys[] = 'General_Yes'; + $translationKeys[] = 'General_No'; + $translationKeys[] = 'General_Edit'; + $translationKeys[] = 'General_Delete'; + $translationKeys[] = 'General_Default'; + $translationKeys[] = 'General_LoadingData'; } } diff --git a/plugins/CoreHome/angularjs/common/directives/dialog.js b/plugins/CoreHome/angularjs/common/directives/dialog.js index 86762db83f..71157aeb71 100644 --- a/plugins/CoreHome/angularjs/common/directives/dialog.js +++ b/plugins/CoreHome/angularjs/common/directives/dialog.js @@ -15,7 +15,7 @@ * </div> * Will execute the "executeMyFunction" function in the current scope once the yes button is pressed. */ -angular.module('piwikApp.directive').directive('piwikDialog', function(piwik) { +angular.module('piwikApp.directive').directive('piwikDialog', function(piwik, $parse) { return { restrict: 'A', @@ -24,7 +24,7 @@ angular.module('piwikApp.directive').directive('piwikDialog', function(piwik) { element.css('display', 'none'); element.on( "dialogclose", function() { - scope.$eval(attrs.piwikDialog+'=false'); + scope.$apply($parse(attrs.piwikDialog).assign(scope, false)); }); scope.$watch(attrs.piwikDialog, function(newValue, oldValue) { diff --git a/plugins/CoreHome/angularjs/common/filters/pretty-url.js b/plugins/CoreHome/angularjs/common/filters/pretty-url.js new file mode 100644 index 0000000000..f46a64bfaf --- /dev/null +++ b/plugins/CoreHome/angularjs/common/filters/pretty-url.js @@ -0,0 +1,12 @@ +/*! + * Piwik - Web Analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +angular.module('piwikApp.filter').filter('prettyUrl', function() { + return function(input) { + return input.trim().replace('http://', ''); + }; +}); diff --git a/plugins/CoreHome/angularjs/common/services/piwik-api.js b/plugins/CoreHome/angularjs/common/services/piwik-api.js index 31a7c60085..18a635306e 100644 --- a/plugins/CoreHome/angularjs/common/services/piwik-api.js +++ b/plugins/CoreHome/angularjs/common/services/piwik-api.js @@ -162,7 +162,7 @@ angular.module('piwikApp.service').factory('piwikApi', function ($http, $q, $roo */ piwikApi.fetch = function (getParams) { - getParams.module = 'API'; + getParams.module = getParams.module || 'API'; getParams.format = 'JSON'; addParams(getParams, 'GET'); diff --git a/plugins/CoreHome/angularjs/http404check.js b/plugins/CoreHome/angularjs/http404check.js index 472b0861ff..0748fa42c6 100644 --- a/plugins/CoreHome/angularjs/http404check.js +++ b/plugins/CoreHome/angularjs/http404check.js @@ -12,12 +12,12 @@ angular.module('piwikApp').factory('http404CheckInterceptor', function($q) { return { 'responseError': function(rejection) { - if (rejection - && isClientError(rejection) - && rejection.config - && rejection.config.url - && -1 !== rejection.config.url.indexOf('.html') - && -1 !== rejection.config.url.indexOf('plugins')) { + if (rejection && + isClientError(rejection) && + rejection.config && + rejection.config.url && + -1 !== rejection.config.url.indexOf('.html') && + -1 !== rejection.config.url.indexOf('plugins')) { var posEndUrl = rejection.config.url.indexOf('.html') + 5; var url = rejection.config.url.substr(0, posEndUrl); @@ -41,4 +41,4 @@ angular.module('piwikApp').factory('http404CheckInterceptor', function($q) { angular.module('piwikApp').config(['$httpProvider',function($httpProvider) { $httpProvider.interceptors.push('http404CheckInterceptor'); -}]);
\ No newline at end of file +}]); diff --git a/plugins/CoreHome/javascripts/calendar.js b/plugins/CoreHome/javascripts/calendar.js index cf886ee6bd..e96e67374c 100644 --- a/plugins/CoreHome/javascripts/calendar.js +++ b/plugins/CoreHome/javascripts/calendar.js @@ -354,10 +354,6 @@ } }); - // Hack to get around firefox bug. When double clicking a label in firefox, the 'click' - // event of its associated input will not be fired twice. We want to change the period - // if clicking the select period's label OR input, so we catch the click event on the - // label & the input. var reloading = false; var changePeriodOnClick = function (periodInput) { if (reloading) // if a click event resulted in reloading, don't reload again @@ -382,7 +378,7 @@ return false; }; - $("#otherPeriods").find("label").on('click', function (e) { + $("#otherPeriods").find("label,input").on('dblclick', function (e) { var id = $(e.target).attr('for'); changePeriodOnClick($('#' + id)); }); diff --git a/plugins/CoreHome/javascripts/corehome.js b/plugins/CoreHome/javascripts/corehome.js index e9b443af20..0dbfd48cb1 100755 --- a/plugins/CoreHome/javascripts/corehome.js +++ b/plugins/CoreHome/javascripts/corehome.js @@ -149,7 +149,7 @@ } loading.hide(); - report.html($(response)).css('display', 'inline-block'); + report.css('display', 'inline-block').html($(response)); // scroll to report piwikHelper.lazyScrollTo(report, 400); diff --git a/plugins/CoreHome/javascripts/dataTable_rowactions.js b/plugins/CoreHome/javascripts/dataTable_rowactions.js index 37b6d31ec2..b5e7140b8e 100644 --- a/plugins/CoreHome/javascripts/dataTable_rowactions.js +++ b/plugins/CoreHome/javascripts/dataTable_rowactions.js @@ -161,11 +161,10 @@ DataTable_RowAction.prototype.initTr = function (tr) { DataTable_RowAction.prototype.trigger = function (tr, e, subTableLabel) { var label = this.getLabelFromTr(tr); - label = label.trim(); // if we have received the event from the sub table, add the label if (subTableLabel) { var separator = ' > '; // LabelFilter::SEPARATOR_RECURSIVE_LABEL - label += separator + subTableLabel.trim(); + label += separator + subTableLabel; } // handle sub tables in nested reports: forward to parent @@ -214,8 +213,16 @@ DataTable_RowAction.prototype.getLabelFromTr = function (tr) { value = label.text(); } value = value.trim(); + value = encodeURIComponent(value); - return encodeURIComponent(value); + // if tr is a terminal node, we add a '%20' to signfy this. Piwik will notice this and make sure to + // look for a terminal, even if there's a sibling branch node w/ the same label. this is a workaround + // for #4363. + if (!tr.hasClass('subDataTable')) { + value = value + '%20'; + } + + return value; }; /** diff --git a/plugins/CoreHome/templates/_dataTableCell.twig b/plugins/CoreHome/templates/_dataTableCell.twig index cff58d705e..0b040fe86b 100644 --- a/plugins/CoreHome/templates/_dataTableCell.twig +++ b/plugins/CoreHome/templates/_dataTableCell.twig @@ -2,7 +2,7 @@ {% set tooltipIndex = column ~ '_tooltip' %} {% if row.getMetadata(tooltipIndex) %}<span class="cell-tooltip" data-tooltip="{{ row.getMetadata(tooltipIndex) }}">{% endif %} {% if not row.getIdSubDataTable() and column=='label' and row.getMetadata('url') %} - <a target="_blank" href='{% if row.getMetadata('url')|slice(0,4) not in ['http','ftp:'] %}http://{% endif %}{{ row.getMetadata('url')|raw }}'> + <a target="_blank" href='{% if row.getMetadata('url')|slice(0,4) not in ['http','ftp:'] %}http://{% endif %}{{ row.getMetadata('url')|rawSafeDecoded }}'> {% if not row.getMetadata('logo') %} <img class="link" width="10" height="9" src="plugins/Morpheus/images/link.gif"/> {% endif %} diff --git a/plugins/CoreUpdater/Controller.php b/plugins/CoreUpdater/Controller.php index d586c50a51..c2977088aa 100644 --- a/plugins/CoreUpdater/Controller.php +++ b/plugins/CoreUpdater/Controller.php @@ -163,7 +163,7 @@ class Controller extends \Piwik\Plugin\Controller } if (function_exists('opcache_reset')) { - opcache_reset(); // reset the opcode cache (php 5.5.0+) + @opcache_reset(); // reset the opcode cache (php 5.5.0+) } } diff --git a/plugins/CoreVisualizations/JqplotDataGenerator.php b/plugins/CoreVisualizations/JqplotDataGenerator.php index 53771355b5..fc7cdde8a6 100644 --- a/plugins/CoreVisualizations/JqplotDataGenerator.php +++ b/plugins/CoreVisualizations/JqplotDataGenerator.php @@ -138,7 +138,10 @@ class JqplotDataGenerator // the bar charts contain the labels a first series // this series has to be removed from the units - if ($this->graphType == 'bar') { + reset($units); + if ($this->graphType == 'bar' + && key($units) == 'label' + ) { array_shift($units); } diff --git a/plugins/CoreVisualizations/javascripts/jqplot.js b/plugins/CoreVisualizations/javascripts/jqplot.js index 15d2889e6c..66cef5a96e 100644 --- a/plugins/CoreVisualizations/javascripts/jqplot.js +++ b/plugins/CoreVisualizations/javascripts/jqplot.js @@ -633,7 +633,7 @@ RowEvolutionSeriesToggle.prototype.attachEvents = function () { this.seriesPickers.each(function (i) { var el = $(this); - el.click(function (e) { + el.off('click').on('click', function (e) { if (e.shiftKey) { self.toggleSeries(i); diff --git a/plugins/DBStats/lang/cs.json b/plugins/DBStats/lang/cs.json index 9be5ed7444..a74efdea5c 100644 --- a/plugins/DBStats/lang/cs.json +++ b/plugins/DBStats/lang/cs.json @@ -15,6 +15,7 @@ "ReportTables": "Hlášenà tabulek", "RowCount": "PoÄet řádků", "Table": "Tabulka", - "TotalSize": "Celková velikost" + "TotalSize": "Celková velikost", + "TrackerTables": "Sledovacà tabulky" } }
\ No newline at end of file diff --git a/plugins/DBStats/lang/tr.json b/plugins/DBStats/lang/tr.json index 65d80dd984..fb95054e05 100644 --- a/plugins/DBStats/lang/tr.json +++ b/plugins/DBStats/lang/tr.json @@ -5,12 +5,17 @@ "DBSize": "Veritabanı boyutu", "EstimatedSize": "Tahmin edilen boyut", "IndexSize": "Dizin boyutu", + "LearnMore": "Piwik'in verileri nasıl işlediğini ve orta ve yüksek trafiğe sahip sitelerde nasıl iyi çalıştığını öğrenmek için şu dokümana bakın: %s.", "MainDescription": "Piwik tüm web istatistiklerinizi MySQL veritabanında saklar. Piwik tabloları %s kullanıyor.", + "MetricDataByYear": "Yıla Göre Metrik Tablosu", + "MetricTables": "Metrik Tabloları", "OtherTables": "Diğer Tablolar", "PluginDescription": "Bu eklenti Piwik tabloları ile MySQL veritabanı kullanım raporu.", + "ReportDataByYear": "Yıla Göre Rapor Tabloları", "ReportTables": "Rapor Tabloları", "RowCount": "Satır sayısı", "Table": "Tablo", - "TotalSize": "Toplam boyut" + "TotalSize": "Toplam boyut", + "TrackerTables": "İzleyici Tabloları" } }
\ No newline at end of file diff --git a/plugins/DBStats/tests/Mocks/MockDataAccess.php b/plugins/DBStats/tests/Mocks/MockDataAccess.php index 2e52870799..a3b32cefdd 100644 --- a/plugins/DBStats/tests/Mocks/MockDataAccess.php +++ b/plugins/DBStats/tests/Mocks/MockDataAccess.php @@ -28,7 +28,8 @@ class MockDataAccess 'option' => array(200, 16000, 8192), 'session' => array(0, 8192, 8192), 'archive_numeric' => array(8000, 16000, 16000), - 'archive_blob' => array(8000, 128000, 1024) + 'archive_blob' => array(8000, 128000, 1024), + 'segment' => array(3, 4048, 8192), ); public static $numericRowCountsByArchiveName = array( @@ -119,9 +120,9 @@ class MockDataAccess public function getTableNameKey($tableName) { $result = Common::unprefixTable($tableName); - if (strpos($tableName, "archive_numeric")) { + if (strpos($tableName, "archive_numeric") !== false) { $result = "archive_numeric"; - } else if (strpos($tableName, "archive_blob")) { + } else if (strpos($tableName, "archive_blob") !== false) { $result = "archive_blob"; } return $result; @@ -129,7 +130,7 @@ class MockDataAccess public function getRowCountsByArchiveName($tableName, $extraCols) { - if (strpos($tableName, "achive_numeric")) { + if (strpos($tableName, "achive_numeric") !== false) { return self::$numericRowCountsByArchiveName; } else { return self::$blobRowCountsByArchiveName; diff --git a/plugins/Dashboard/Controller.php b/plugins/Dashboard/Controller.php index a0530b6782..f1f6e3a3bd 100644 --- a/plugins/Dashboard/Controller.php +++ b/plugins/Dashboard/Controller.php @@ -14,6 +14,7 @@ use Piwik\Piwik; use Piwik\Session\SessionNamespace; use Piwik\View; use Piwik\WidgetsList; +use Piwik\FrontController; /** * Dashboard Controller @@ -42,7 +43,10 @@ class Controller extends \Piwik\Plugin\Controller $view->availableLayouts = $this->getAvailableLayouts(); $view->dashboardId = Common::getRequestVar('idDashboard', 1, 'int'); - $view->dashboardLayout = $this->getLayout($view->dashboardId); + + // get the layout via FrontController so controller events are posted + $view->dashboardLayout = FrontController::getInstance()->dispatch('Dashboard', 'getDashboardLayout', + array($checkToken = false)); return $view; } @@ -74,9 +78,11 @@ class Controller extends \Piwik\Plugin\Controller return Common::json_encode(WidgetsList::get()); } - public function getDashboardLayout() + public function getDashboardLayout($checkToken = true) { - $this->checkTokenInUrl(); + if ($checkToken) { + $this->checkTokenInUrl(); + } $idDashboard = Common::getRequestVar('idDashboard', 1, 'int'); diff --git a/plugins/Dashboard/Dashboard.php b/plugins/Dashboard/Dashboard.php index 5e11051548..4fcbeb086d 100644 --- a/plugins/Dashboard/Dashboard.php +++ b/plugins/Dashboard/Dashboard.php @@ -88,6 +88,18 @@ class Dashboard extends \Piwik\Plugin ]'; } + /** + * Allows other plugins to modify the default dashboard layout. + * + * @param string &$defaultLayout JSON encoded string of the default dashboard layout. Contains an + * array of columns where each column is an array of widgets. Each + * widget is an associative array w/ the following elements: + * + * * **uniqueId**: The widget's unique ID. + * * **parameters**: The array of query parameters that should be used to get this widget's report. + */ + Piwik::postEvent("Dashboard.changeDefaultDashboardLayout", array(&$defaultLayout)); + $defaultLayout = $this->removeDisabledPluginFromLayout($defaultLayout); return $defaultLayout; diff --git a/plugins/DevicesDetection/lang/cs.json b/plugins/DevicesDetection/lang/cs.json index d4fd5865bb..381ca725d2 100644 --- a/plugins/DevicesDetection/lang/cs.json +++ b/plugins/DevicesDetection/lang/cs.json @@ -1,11 +1,29 @@ { "DevicesDetection": { + "BrowserVersions": "Verze prohlÞeÄů", + "Camera": "Fotoaparát", + "CarBrowser": "ProhlÞeÄ v autÄ›", + "Console": "Konzole", "dataTableLabelBrands": "ZnaÄka", + "dataTableLabelBrowserFamily": "Rodina prohlÞeÄe", "dataTableLabelModels": "Model", + "dataTableLabelSystemVersion": "Verze operaÄnÃho systému", "dataTableLabelTypes": "Typ", + "Device": "ZaÅ™ÃzenÃ", "DeviceBrand": "ZnaÄka zaÅ™ÃzenÃ", + "DeviceDetection": "Detekce zaÅ™ÃzenÃ", "DeviceModel": "Model zaÅ™ÃzenÃ", "DevicesDetection": "ZaÅ™Ãzenà návÅ¡tÄ›vnÃků", - "submenu": "ZaÅ™ÃzenÃ" + "DeviceType": "Typ zaÅ™ÃzenÃ", + "FeaturePhone": "Ukázkový telefon", + "OperatingSystemFamilies": "Rodiny operaÄnÃch systémů", + "OperatingSystemVersions": "Verze operaÄnÃho systému", + "PluginDescription": "Tento zásuvný modul poskytuje rozÅ¡ÃÅ™ené informace o mobilnÃch iaÅ™ÃzenÃch, jako napÅ™. výrobce, model (verze zaÅ™ÃzenÃ), vylepÅ¡enou detekci typu zaÅ™Ãzenà (TV, konzole, Chytré telefony, PC) a dalÅ¡Ã. Tento zásuvný modul pÅ™idává nové hlášenà v sekci návÅ¡tÄ›vnÃci > zaÅ™ÃzenÃ.", + "SmartDisplay": "Chytrý displej", + "Smartphone": "Chytrý telefon", + "submenu": "ZaÅ™ÃzenÃ", + "Tablet": "Tablet", + "TV": "Tv", + "UserAgent": "User-Agent" } }
\ No newline at end of file diff --git a/plugins/DevicesDetection/lang/tr.json b/plugins/DevicesDetection/lang/tr.json new file mode 100644 index 0000000000..dc576b511c --- /dev/null +++ b/plugins/DevicesDetection/lang/tr.json @@ -0,0 +1,22 @@ +{ + "DevicesDetection": { + "BrowserVersions": "Tarayıcı versiyonları", + "Camera": "Kamera", + "CarBrowser": "Araba tarayıcısı", + "Console": "Konsol", + "dataTableLabelBrands": "Marka", + "dataTableLabelBrowserFamily": "Tarayıcı ailesi", + "dataTableLabelModels": "Model", + "dataTableLabelSystemVersion": "İşletim Sistemi versiyonu", + "dataTableLabelTypes": "Tip", + "Device": "Cihaz", + "DeviceBrand": "Cihaz markası", + "DeviceDetection": "Cihaz algılama", + "DeviceModel": "Cihaz modeli", + "DevicesDetection": "Ziyaretçi Cihazları", + "DeviceType": "Cihaz tipi", + "Tablet": "Tablet", + "TV": "Tv", + "UserAgent": "User-Agent" + } +}
\ No newline at end of file diff --git a/plugins/Events/lang/cs.json b/plugins/Events/lang/cs.json new file mode 100644 index 0000000000..1632851039 --- /dev/null +++ b/plugins/Events/lang/cs.json @@ -0,0 +1,31 @@ +{ + "Events": { + "AvgEventValue": "PrůmÄ›rná hodnota události je %s", + "AvgValue": "PrůmÄ›rná hodnota", + "AvgValueDocumentation": "PrůmÄ›r vÅ¡ech hodnot pro tuto událost", + "Event": "Událost", + "EventAction": "Akce události", + "EventActions": "Akce události", + "EventCategories": "Kategorie událostÃ", + "EventCategory": "Kategorie události", + "EventName": "Jméno události", + "EventNames": "Jména událostÃ", + "Events": "Události", + "EventsWithValue": "Události s hodnotou", + "EventsWithValueDocumentation": "PoÄet událostà s nastavenou hodnotou", + "EventValue": "Hodnota události", + "EventValueTooltip": "Celková hodnota události je souÄet %s hodnot událostà %s mezi minimem %s a maximem %s.", + "MaxValue": "Maximálnà hodnota", + "MaxValueDocumentation": "Maximálnà hodnota pro tuto událost", + "MinValue": "Minimálnà hodnota", + "MinValueDocumentation": "Minimálnà hodnota pro tuto událost", + "SecondaryDimension": "Sekundárnà dimenze je %s.", + "SwitchToSecondaryDimension": "PÅ™epnout na %s", + "TopEvents": "NejÄastÄ›jÅ¡Ã události", + "TotalEvents": "Celkem událostÃ", + "TotalEventsDocumentation": "Celkový poÄet událostÃ", + "TotalValue": "Celková hodnota", + "TotalValueDocumentation": "SouÄet hodnot událostÃ", + "ViewEvents": "Zobrazit události" + } +}
\ No newline at end of file diff --git a/plugins/Events/lang/fr.json b/plugins/Events/lang/fr.json index 560de78cc7..894a70bf48 100644 --- a/plugins/Events/lang/fr.json +++ b/plugins/Events/lang/fr.json @@ -1,14 +1,31 @@ { "Events": { + "AvgEventValue": "La valeur moyenne de l'évènement est : %s", "AvgValue": "Valeur moyenne", + "AvgValueDocumentation": "Moyenne de toutes les valeurs pour cet évènement", "Event": "Evènement", "EventAction": "Action de l'évènement", + "EventActions": "Actions de l'évènement", + "EventCategories": "Catégories d'évènement", "EventCategory": "Catégorie d'évènement", "EventName": "Nom d'évènement", + "EventNames": "Noms d'évènement", "Events": "Evènements", + "EventsWithValue": "Evènements avec une valeur", + "EventsWithValueDocumentation": "Nombre d'évènements qui ont une valeur de définie", "EventValue": "Valeur d'évènement", + "EventValueTooltip": "La valeur totale de l'évènement est la somme des %s valeurs d'évènements %s entre un minimum de %s et un maximum de %s.", "MaxValue": "Valeur maximum", + "MaxValueDocumentation": "Valeur maximale pour cet évènement", "MinValue": "Valeur minimum", - "TotalValue": "Valeur totale" + "MinValueDocumentation": "Valeur minimale pour cet évènement", + "SecondaryDimension": "La seconde dimension est %s.", + "SwitchToSecondaryDimension": "Passer à %s", + "TopEvents": "Principaux évènements", + "TotalEvents": "Nombre total d'évènements", + "TotalEventsDocumentation": "Nombre total des évènements", + "TotalValue": "Valeur totale", + "TotalValueDocumentation": "Somme des valeurs d'évènement", + "ViewEvents": "Afficher les évènements" } }
\ No newline at end of file diff --git a/plugins/Events/lang/nl.json b/plugins/Events/lang/nl.json index f04206e860..53bdcb1647 100644 --- a/plugins/Events/lang/nl.json +++ b/plugins/Events/lang/nl.json @@ -11,11 +11,13 @@ "EventNames": "Gebeurtenis Namen", "Events": "Gebeurtenissen", "EventsWithValue": "Gebeurtenissen met een waarde", + "EventsWithValueDocumentation": "Aantal events waar een Event waarde is bepaald", "EventValue": "Gebeurtenis Waarde", "MaxValue": "Maximale waarde", "MaxValueDocumentation": "De maximale waarde voor deze gebeurtenis", "MinValue": "Minimale waarde", "MinValueDocumentation": "De minimale waarde voor deze gebeurtenis", + "SecondaryDimension": "Tweede dimensie is %s.", "SwitchToSecondaryDimension": "Omschakelen naar %s", "TopEvents": "Top Gebeurtenissen", "TotalEvents": "Totaal gebeurtenissen", diff --git a/plugins/Events/lang/tr.json b/plugins/Events/lang/tr.json new file mode 100644 index 0000000000..880b0d3d0b --- /dev/null +++ b/plugins/Events/lang/tr.json @@ -0,0 +1,26 @@ +{ + "Events": { + "AvgEventValue": "Ortalama etkinlik değeri: %s", + "AvgValue": "Ortalama değer", + "AvgValueDocumentation": "Bu etkinlik için ortalama tüm değerler", + "Event": "Etkinlik", + "EventAction": "Etkinlik Aksiyonu", + "EventActions": "Etkinlik Aksiyonu", + "EventCategories": "Etkinlik Kategorileri", + "EventCategory": "Etkinlik Kategorisi", + "EventName": "Etkinlik Adı", + "EventNames": "Etkinlik Adı", + "Events": "Etkinlikler", + "EventsWithValue": "Değeri olan etkinlikler", + "EventsWithValueDocumentation": "Etkinlik değeri ayarlanmış olan etkinlik sayısı", + "EventValue": "Etkinlik Değeri", + "MaxValue": "Maksimum değer", + "MaxValueDocumentation": "Bu etkinlik için maksimum değer", + "MinValue": "Minimum değer", + "MinValueDocumentation": "Bu etkinlik için minimum değer", + "SecondaryDimension": "İkincil boyut %s.", + "TopEvents": "Top Etkinlikler", + "TotalEvents": "Toplam etkinlikler", + "TotalEventsDocumentation": "Toplam etkinlik sayısı" + } +}
\ No newline at end of file diff --git a/plugins/ExampleUI/Menu.php b/plugins/ExampleUI/Menu.php index dade4ad9a6..8714c3eddc 100644 --- a/plugins/ExampleUI/Menu.php +++ b/plugins/ExampleUI/Menu.php @@ -10,6 +10,7 @@ namespace Piwik\Plugins\ExampleUI; use Piwik\Menu\MenuReporting; use Piwik\Menu\MenuTop; +use Piwik\Menu\MenuUser; use Piwik\Plugin\Manager as PluginManager; /** @@ -32,12 +33,13 @@ class Menu extends \Piwik\Plugin\Menu } } - public function configureTopMenu(MenuTop $menu) + public function configureUserMenu(MenuUser $menu) { $urlParams = array('module' => 'ExampleUI', 'action' => 'notifications'); - $menu->add('UI Notifications', null, $urlParams, $displayedForCurrentUser = true, $order = 3); + $menu->add('CorePluginsAdmin_MenuPlatform', 'UI Notifications', $urlParams, $displayedForCurrentUser = true, $order = 3); } + private function addSubMenu(MenuReporting $menu, $subMenu, $action, $order) { $menu->add('UI Framework', $subMenu, array('module' => 'ExampleUI', 'action' => $action), true, $order); diff --git a/plugins/Feedback/Feedback.php b/plugins/Feedback/Feedback.php index 6f56fdc2a4..329f4cccc1 100644 --- a/plugins/Feedback/Feedback.php +++ b/plugins/Feedback/Feedback.php @@ -51,5 +51,6 @@ class Feedback extends \Piwik\Plugin $translationKeys[] = 'Feedback_SendFeedback'; $translationKeys[] = 'Feedback_RateFeatureSendFeedbackInformation'; $translationKeys[] = 'General_Ok'; + $translationKeys[] = 'General_Cancel'; } } diff --git a/plugins/Goals/Goals.php b/plugins/Goals/Goals.php index bde21ee5d8..c7d64fe9ac 100644 --- a/plugins/Goals/Goals.php +++ b/plugins/Goals/Goals.php @@ -270,5 +270,9 @@ class Goals extends \Piwik\Plugin $translationKeys[] = 'Goals_AddGoal'; $translationKeys[] = 'Goals_UpdateGoal'; $translationKeys[] = 'Goals_DeleteGoalConfirm'; + $translationKeys[] = 'Goals_UpdateGoal'; + $translationKeys[] = 'Goals_DeleteGoalConfirm'; + $translationKeys[] = 'Goals_Ecommerce'; + $translationKeys[] = 'Goals_Optional'; } } diff --git a/plugins/Installation/Installation.php b/plugins/Installation/Installation.php index 24e1a767e1..efbf904212 100644 --- a/plugins/Installation/Installation.php +++ b/plugins/Installation/Installation.php @@ -14,6 +14,7 @@ use Piwik\FrontController; use Piwik\Menu\MenuAbstract; use Piwik\Piwik; use Piwik\Translate; +use Piwik\View as PiwikView; /** * @@ -30,12 +31,21 @@ class Installation extends \Piwik\Plugin $hooks = array( 'Config.NoConfigurationFile' => 'dispatch', 'Config.badConfigurationFile' => 'dispatch', + 'Db.cannotConnectToDb' => 'displayDbConnectionMessage', 'Request.dispatch' => 'dispatchIfNotInstalledYet', 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles', ); return $hooks; } + public function displayDbConnectionMessage($exception = null) + { + $view = new PiwikView("@Installation/cannotConnectToDb"); + $view->exceptionMessage = $exception->getMessage(); + + Piwik_ExitWithMessage($view->render()); + } + public function dispatchIfNotInstalledYet(&$module, &$action, &$parameters) { $general = Config::getInstance()->General; diff --git a/plugins/Installation/templates/cannotConnectToDb.twig b/plugins/Installation/templates/cannotConnectToDb.twig new file mode 100644 index 0000000000..1408a050bc --- /dev/null +++ b/plugins/Installation/templates/cannotConnectToDb.twig @@ -0,0 +1,5 @@ +<p>{{ 'Installation_CannotConnectToDb'|translate }}:</p> + +<p><strong>{{ exceptionMessage }}</strong></p> + +<p>{{ 'Installation_CannotConnectToDbResolvingExplanation'|translate('<a href="javascript:window.location.reload()">', '</a>')|raw }}</p>
\ No newline at end of file diff --git a/plugins/LeftMenu/LeftMenu.php b/plugins/LeftMenu/LeftMenu.php index 67d906787c..00b40d9a6f 100755 --- a/plugins/LeftMenu/LeftMenu.php +++ b/plugins/LeftMenu/LeftMenu.php @@ -19,7 +19,7 @@ class LeftMenu extends \Piwik\Plugin ); } - public function addClassToBody($str, $layout) + public function addClassToBody(&$str, $layout) { if (API::getInstance()->isEnabled() && 'dashboard' === $layout) { $str .= ' leftMenuPlugin'; diff --git a/plugins/LeftMenu/lang/cs.json b/plugins/LeftMenu/lang/cs.json new file mode 100644 index 0000000000..222664d7d9 --- /dev/null +++ b/plugins/LeftMenu/lang/cs.json @@ -0,0 +1,10 @@ +{ + "LeftMenu": { + "GlobalSettingDescription": "Definuje systémovou výchozà hodnotu pro vÅ¡echny uživatele.", + "GlobalSettingInlineHelp": "Uživatelé si mohou zakázat\/povolit levé menu nezávisle na systémové výchozà hodnotÄ›.", + "GlobalSettingTitle": "Levé menu je ve výchozÃm stavu povoleno", + "SettingsIntroduction": "Zásuvný modul levé menu pÅ™esune menu hlášenà na levou stranu (je-li povolen). To je pÅ™edevÅ¡Ãm užiteÄné na velkých displejÃch.", + "UserSettingInlineHelp": "Toto povolà nebo zakáže levé menu jen pro vás bez ohledu na jiné uživatele. Super uživatel může nastavit výchozà systémovou hodnotu.", + "UserSettingTitle": "Povolit levé menu hlášenÃ" + } +}
\ No newline at end of file diff --git a/plugins/LeftMenu/lang/ro.json b/plugins/LeftMenu/lang/ro.json new file mode 100644 index 0000000000..64a829c25d --- /dev/null +++ b/plugins/LeftMenu/lang/ro.json @@ -0,0 +1,10 @@ +{ + "LeftMenu": { + "GlobalSettingDescription": "Definește valoarea implicită pentru toți utilizatorii.", + "GlobalSettingInlineHelp": "Utilizatorii pot dezactiva\/activa meniul din stânga independet de valoare implicită.", + "GlobalSettingTitle": "Meniul din stânnga este activat implicit", + "SettingsIntroduction": "Modulul meniului din stânga va muta meniul de raportare din partea de sus în partea stângă dacă este activat. Acesta este folositor în special în cazul ecranelor mari.", + "UserSettingInlineHelp": "Acesta va activa sau dezactiva meniul din stânga doar pentru dumneavoastra și nu va afecta alți utilizatori. Un Super Utilizator va putea schimba modul implicit pentru toți utilizatorii.", + "UserSettingTitle": "Activează meniul de raportare din stânga" + } +}
\ No newline at end of file diff --git a/plugins/Live/templates/getVisitorProfilePopup.twig b/plugins/Live/templates/getVisitorProfilePopup.twig index a96b60ecea..101ca43875 100644 --- a/plugins/Live/templates/getVisitorProfilePopup.twig +++ b/plugins/Live/templates/getVisitorProfilePopup.twig @@ -1,3 +1,6 @@ +{% if not visitorData %} + <div class="pk-emptyDataTable">{{ 'CoreHome_ThereIsNoDataForThisReport'|translate }}</div> +{% else %} <div class="visitor-profile" data-visitor-id="{{ visitorData.lastVisits.getFirstRow().getColumn('visitorId') }}" data-next-visitor="{{ visitorData.nextVisitorId }}" @@ -146,4 +149,5 @@ </div> <script type="text/javascript"> $(function() { require('piwik/UI').VisitorProfileControl.initElements(); }); -</script>
\ No newline at end of file +</script> +{% endif %}
\ No newline at end of file diff --git a/plugins/Login/Controller.php b/plugins/Login/Controller.php index ae4d3e1e4b..395c26d7b4 100644 --- a/plugins/Login/Controller.php +++ b/plugins/Login/Controller.php @@ -284,6 +284,11 @@ class Controller extends \Piwik\Plugin\Controller $fromEmailName = Config::getInstance()->General['login_password_recovery_email_name']; $fromEmailAddress = Config::getInstance()->General['login_password_recovery_email_address']; $mail->setFrom($fromEmailAddress, $fromEmailName); + + $replytoEmailName = Config::getInstance()->General['login_password_recovery_replyto_email_name']; + $replytoEmailAddress = Config::getInstance()->General['login_password_recovery_replyto_email_address']; + $mail->setReplyTo($replytoEmailAddress, $replytoEmailName); + @$mail->send(); } diff --git a/plugins/Login/stylesheets/login.css b/plugins/Login/stylesheets/login.css index fd473bb18a..f24a1982da 100644 --- a/plugins/Login/stylesheets/login.css +++ b/plugins/Login/stylesheets/login.css @@ -75,7 +75,10 @@ text-align: center; color: #666; margin: 0 0 30px 0; - font: normal 26px/1 Verdana, Helvetica; + font-style: normal; + font-weight: normal; + font-size: 26px; + line-height: 1; position: relative; } diff --git a/plugins/Morpheus/javascripts/morpheus.js b/plugins/Morpheus/javascripts/morpheus.js index 8e517fb2da..4b7a295c49 100644 --- a/plugins/Morpheus/javascripts/morpheus.js +++ b/plugins/Morpheus/javascripts/morpheus.js @@ -6,7 +6,9 @@ $(document).ready(function () { function initICheck() { - $('input').iCheck({ + $('input').filter(function () { + return !$(this).parent().is('.form-radio'); + }).iCheck({ checkboxClass: 'form-checkbox', radioClass: 'form-radio', checkedClass: 'checked', diff --git a/plugins/Morpheus/stylesheets/base.less b/plugins/Morpheus/stylesheets/base.less index 2712c435bc..c994155077 100644 --- a/plugins/Morpheus/stylesheets/base.less +++ b/plugins/Morpheus/stylesheets/base.less @@ -1,11 +1,11 @@ /* base.less is a standalone Less file */ /* Variables */ -@import "less/_colors"; +@import "less/_colors.less"; -@import "less/_variables"; +@import "less/_variables.less"; -@import "less/_mixins"; +@import "less/_mixins.less"; /* General styles */ @import "general/_default.less"; diff --git a/plugins/Morpheus/stylesheets/theme.less b/plugins/Morpheus/stylesheets/theme.less index d0e9345c10..582d3c4d58 100644 --- a/plugins/Morpheus/stylesheets/theme.less +++ b/plugins/Morpheus/stylesheets/theme.less @@ -877,13 +877,6 @@ table#users { } } -table#editSites { - .editSite:hover > span, - .deleteSite:hover > span { - text-decoration: underline; - } -} - // previous style overrides #header_message a { text-decoration: underline; diff --git a/plugins/MultiSites/angularjs/dashboard/dashboard-model.js b/plugins/MultiSites/angularjs/dashboard/dashboard-model.js index fbe2b51472..802e1dfe8f 100644 --- a/plugins/MultiSites/angularjs/dashboard/dashboard-model.js +++ b/plugins/MultiSites/angularjs/dashboard/dashboard-model.js @@ -130,8 +130,8 @@ angular.module('piwikApp').factory('multisitesDashboardModel', function (piwikAp if (allSitesUnordered && allSitesUnordered.length) { for (var index in allSitesUnordered) { var site = allSitesUnordered[index]; - if (site && site['nb_pageviews']) { - totalActions += parseInt(site['nb_pageviews'], 10); + if (site && site.nb_pageviews) { + totalActions += parseInt(site.nb_pageviews, 10); } } } @@ -208,6 +208,8 @@ angular.module('piwikApp').factory('multisitesDashboardModel', function (piwikAp { var filteredSites = []; + term = term.toLowerCase(); + for (var index in sitesByGroup) { var site = sitesByGroup[index]; if (site.isGroup) { diff --git a/plugins/PrivacyManager/DoNotTrackHeaderChecker.php b/plugins/PrivacyManager/DoNotTrackHeaderChecker.php index 5ee5642fdd..b8e37a4771 100644 --- a/plugins/PrivacyManager/DoNotTrackHeaderChecker.php +++ b/plugins/PrivacyManager/DoNotTrackHeaderChecker.php @@ -26,9 +26,13 @@ class DoNotTrackHeaderChecker */ public function checkHeaderInTracker(&$exclude) { - if (!$this->isActive() - || $exclude - ) { + if($exclude) { + Common::printDebug("Visit is already excluded, no need to check DoNotTrack support."); + return; + } + + if (!$this->isActive()) { + Common::printDebug("DoNotTrack support is not enabled, skip check"); return; } @@ -43,8 +47,9 @@ class DoNotTrackHeaderChecker return; } + Common::printDebug("DoNotTrack header found!"); + $exclude = true; - Common::printDebug("DoNotTrack found."); $trackingCookie = IgnoreCookie::getTrackingCookie(); $trackingCookie->delete(); @@ -53,6 +58,8 @@ class DoNotTrackHeaderChecker // /.well-known/dnt // per Tracking Preference Expression (draft) header('Tk: 1'); + } else { + Common::printDebug("DoNotTrack header not found"); } } diff --git a/plugins/ScheduledReports/ScheduledReports.php b/plugins/ScheduledReports/ScheduledReports.php index 26c3ef5ecc..41d8306c10 100644 --- a/plugins/ScheduledReports/ScheduledReports.php +++ b/plugins/ScheduledReports/ScheduledReports.php @@ -16,10 +16,12 @@ use Piwik\Mail; use Piwik\Piwik; use Piwik\Plugins\MobileMessaging\MobileMessaging; use Piwik\Plugins\UsersManager\API as APIUsersManager; +use Piwik\Plugins\UsersManager\Model as UserModel; use Piwik\ReportRenderer; use Piwik\ScheduledTime; use Piwik\View; use Zend_Mime; +use Piwik\Config; /** * @@ -267,6 +269,8 @@ class ScheduledReports extends \Piwik\Plugin $mail->setSubject($subject); $attachmentName = $subject; + $this->setReplyToAsSender($mail, $report); + $displaySegmentInfo = false; $segmentInfo = null; $segment = API::getSegment($report['idsegment']); @@ -602,4 +606,16 @@ class ScheduledReports extends \Piwik\Plugin ScheduledTime::PERIOD_RANGE => Piwik::translate('General_RangeReports'), ); } + + protected function setReplyToAsSender(Mail $mail, array $report) + { + if (Config::getInstance()->General['scheduled_reports_replyto_is_user_email_and_alias']) { + if (isset($report['login'])) { + $userModel = new UserModel(); + $user = $userModel->getUser($report['login']); + + $mail->setReplyTo($user['email'], $user['alias']); + } + } + } } diff --git a/plugins/SitesManager/API.php b/plugins/SitesManager/API.php index d669bb781c..c44a269b91 100644 --- a/plugins/SitesManager/API.php +++ b/plugins/SitesManager/API.php @@ -311,12 +311,19 @@ class API extends \Piwik\Plugin\API * Returns the list of websites with the 'admin' access for the current user. * For the superUser it returns all the websites in the database. * + * @param bool $fetchAliasUrls * @return array for each site, an array of information (idsite, name, main_url, etc.) */ - public function getSitesWithAdminAccess() + public function getSitesWithAdminAccess($fetchAliasUrls = false) { $sitesId = $this->getSitesIdWithAdminAccess(); - return $this->getSitesFromIds($sitesId); + $sites = $this->getSitesFromIds($sitesId); + + if ($fetchAliasUrls) + foreach ($sites as &$site) + $site['alias_urls'] = API::getInstance()->getSiteUrlsFromId($site['idsite']); + + return $sites; } /** @@ -1185,7 +1192,7 @@ class API extends \Piwik\Plugin\API * * @ignore */ - public function updateSiteCreatedTime($idSites, $minDate) + public function updateSiteCreatedTime($idSites, Date $minDate) { $idSites = Site::getIdSitesFromIdSitesString($idSites); Piwik::checkUserHasAdminAccess($idSites); @@ -1241,6 +1248,17 @@ class API extends \Piwik\Plugin\API } /** + * Return true if Timezone support is enabled on server + * + * @return bool + */ + public function isTimezoneSupportEnabled() + { + Piwik::checkUserHasSomeViewAccess(); + return SettingsServer::isTimezoneSupportEnabled(); + } + + /** * Returns the list of timezones supported. * Used for addSite and updateSite * diff --git a/plugins/SitesManager/Controller.php b/plugins/SitesManager/Controller.php index d17232c2db..34fe1cc2a3 100644 --- a/plugins/SitesManager/Controller.php +++ b/plugins/SitesManager/Controller.php @@ -31,49 +31,30 @@ class Controller extends \Piwik\Plugin\ControllerAdmin { $view = new View('@SitesManager/index'); - Site::clearCache(); - $sites = API::getInstance()->getSitesWithAdminAccess(); - - foreach ($sites as &$site) { - $site['alias_urls'] = API::getInstance()->getSiteUrlsFromId($site['idsite']); - $site['excluded_ips'] = explode(',', $site['excluded_ips']); - $site['excluded_parameters'] = explode(',', $site['excluded_parameters']); - $site['excluded_user_agents'] = explode(',', $site['excluded_user_agents']); - } - $view->adminSites = $sites; - $view->adminSitesCount = count($sites); - - $timezones = API::getInstance()->getTimezonesList(); - $view->timezoneSupported = SettingsServer::isTimezoneSupportEnabled(); - $view->timezones = Common::json_encode($timezones); - $view->defaultTimezone = API::getInstance()->getDefaultTimezone(); - - $view->currencies = Common::json_encode(API::getInstance()->getCurrencyList()); - $view->defaultCurrency = API::getInstance()->getDefaultCurrency(); + $this->setBasicVariablesView($view); - $view->utcTime = Date::now()->getDatetime(); - $excludedIpsGlobal = API::getInstance()->getExcludedIpsGlobal(); - $view->globalExcludedIps = str_replace(',', "\n", $excludedIpsGlobal); - $excludedQueryParametersGlobal = API::getInstance()->getExcludedQueryParametersGlobal(); - $view->globalExcludedQueryParameters = str_replace(',', "\n", $excludedQueryParametersGlobal); + return $view->render(); + } - $globalExcludedUserAgents = API::getInstance()->getExcludedUserAgentsGlobal(); - $view->globalExcludedUserAgents = str_replace(',', "\n", $globalExcludedUserAgents); + public function getGlobalSettings() { - $view->globalSearchKeywordParameters = API::getInstance()->getSearchKeywordParametersGlobal(); - $view->globalSearchCategoryParameters = API::getInstance()->getSearchCategoryParametersGlobal(); - $view->isSearchCategoryTrackingEnabled = \Piwik\Plugin\Manager::getInstance()->isPluginActivated('CustomVariables'); - $view->allowSiteSpecificUserAgentExclude = - API::getInstance()->isSiteSpecificUserAgentExcludeEnabled(); + Piwik::checkUserHasSomeViewAccess(); - $view->globalKeepURLFragments = API::getInstance()->getKeepURLFragmentsGlobal(); + $response = new ResponseBuilder(Common::getRequestVar('format')); - $view->currentIpAddress = IP::getIpFromHeader(); + $globalSettings = array(); - $view->showAddSite = (boolean)Common::getRequestVar('showaddsite', false); + $globalSettings['keepURLFragmentsGlobal'] = API::getInstance()->getKeepURLFragmentsGlobal(); + $globalSettings['siteSpecificUserAgentExcludeEnabled'] = API::getInstance()->isSiteSpecificUserAgentExcludeEnabled(); + $globalSettings['defaultCurrency'] = API::getInstance()->getDefaultCurrency(); + $globalSettings['searchKeywordParametersGlobal'] = API::getInstance()->getSearchKeywordParametersGlobal(); + $globalSettings['searchCategoryParametersGlobal'] = API::getInstance()->getSearchCategoryParametersGlobal(); + $globalSettings['defaultTimezone'] = API::getInstance()->getDefaultTimezone(); + $globalSettings['excludedIpsGlobal'] = API::getInstance()->getExcludedIpsGlobal(); + $globalSettings['excludedQueryParametersGlobal'] = API::getInstance()->getExcludedQueryParametersGlobal(); + $globalSettings['excludedUserAgentsGlobal'] = API::getInstance()->getExcludedUserAgentsGlobal(); - $this->setBasicVariablesView($view); - return $view->render(); + return $response->getResponse($globalSettings); } /** diff --git a/plugins/SitesManager/SitesManager.php b/plugins/SitesManager/SitesManager.php index a5107cc051..edd72bdb4c 100644 --- a/plugins/SitesManager/SitesManager.php +++ b/plugins/SitesManager/SitesManager.php @@ -44,7 +44,10 @@ class SitesManager extends \Piwik\Plugin */ public function getJsFiles(&$jsFiles) { - $jsFiles[] = "plugins/SitesManager/javascripts/SitesManager.js"; + $jsFiles[] = "plugins/SitesManager/javascripts/sites-manager-recipes.js"; + $jsFiles[] = "plugins/SitesManager/javascripts/sites-manager-directives.js"; + $jsFiles[] = "plugins/SitesManager/javascripts/sites-manager-controller.js"; + $jsFiles[] = "plugins/SitesManager/javascripts/sites-manager-site-controller.js"; } /** @@ -200,5 +203,61 @@ class SitesManager extends \Piwik\Plugin $translationKeys[] = "General_OrCancel"; $translationKeys[] = "SitesManager_OnlyOneSiteAtTime"; $translationKeys[] = "SitesManager_DeleteConfirm"; + $translationKeys[] = "SitesManager_Urls"; + $translationKeys[] = "SitesManager_ExcludedIps"; + $translationKeys[] = "SitesManager_ExcludedParameters"; + $translationKeys[] = "SitesManager_ExcludedUserAgents"; + $translationKeys[] = "SitesManager_Timezone"; + $translationKeys[] = "SitesManager_Currency"; + $translationKeys[] = "SitesManager_ShowTrackingTag"; + $translationKeys[] = "SitesManager_AliasUrlHelp"; + $translationKeys[] = "SitesManager_KeepURLFragmentsLong"; + $translationKeys[] = "SitesManager_HelpExcludedIps"; + $translationKeys[] = "SitesManager_ListOfQueryParametersToExclude"; + $translationKeys[] = "SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters"; + $translationKeys[] = "SitesManager_GlobalExcludedUserAgentHelp1"; + $translationKeys[] = "SitesManager_GlobalListExcludedUserAgents_Desc"; + $translationKeys[] = "SitesManager_GlobalExcludedUserAgentHelp2"; + $translationKeys[] = "SitesManager_WebsitesManagement"; + $translationKeys[] = "SitesManager_MainDescription"; + $translationKeys[] = "SitesManager_YouCurrentlyHaveAccessToNWebsites"; + $translationKeys[] = "SitesManager_SuperUserAccessCan"; + $translationKeys[] = "SitesManager_EnableSiteSearch"; + $translationKeys[] = "SitesManager_DisableSiteSearch"; + $translationKeys[] = "SitesManager_SearchUseDefault"; + $translationKeys[] = "SitesManager_SiteSearchUse"; + $translationKeys[] = "SitesManager_SearchKeywordLabel"; + $translationKeys[] = "SitesManager_SearchCategoryLabel"; + $translationKeys[] = "SitesManager_YourCurrentIpAddressIs"; + $translationKeys[] = "SitesManager_SearchKeywordParametersDesc"; + $translationKeys[] = "SitesManager_SearchCategoryParametersDesc"; + $translationKeys[] = "SitesManager_CurrencySymbolWillBeUsedForGoals"; + $translationKeys[] = "SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward"; + $translationKeys[] = "SitesManager_AdvancedTimezoneSupportNotFound"; + $translationKeys[] = "SitesManager_ChooseCityInSameTimezoneAsYou"; + $translationKeys[] = "SitesManager_UTCTimeIs"; + $translationKeys[] = "SitesManager_EnableEcommerce"; + $translationKeys[] = "SitesManager_NotAnEcommerceSite"; + $translationKeys[] = "SitesManager_EcommerceHelp"; + $translationKeys[] = "SitesManager_PiwikOffersEcommerceAnalytics"; + $translationKeys[] = "SitesManager_GlobalWebsitesSettings"; + $translationKeys[] = "SitesManager_GlobalListExcludedIps"; + $translationKeys[] = "SitesManager_ListOfIpsToBeExcludedOnAllWebsites"; + $translationKeys[] = "SitesManager_GlobalListExcludedQueryParameters"; + $translationKeys[] = "SitesManager_ListOfQueryParametersToBeExcludedOnAllWebsites"; + $translationKeys[] = "SitesManager_GlobalListExcludedUserAgents"; + $translationKeys[] = "SitesManager_EnableSiteSpecificUserAgentExclude_Help"; + $translationKeys[] = "SitesManager_EnableSiteSpecificUserAgentExclude"; + $translationKeys[] = "SitesManager_KeepURLFragments"; + $translationKeys[] = "SitesManager_KeepURLFragmentsHelp"; + $translationKeys[] = "SitesManager_KeepURLFragmentsHelp2"; + $translationKeys[] = "SitesManager_TrackingSiteSearch"; + $translationKeys[] = "SitesManager_SearchParametersNote"; + $translationKeys[] = "SitesManager_SearchParametersNote2"; + $translationKeys[] = "SitesManager_SearchCategoryDesc"; + $translationKeys[] = "SitesManager_DefaultTimezoneForNewWebsites"; + $translationKeys[] = "SitesManager_SelectDefaultTimezone"; + $translationKeys[] = "SitesManager_DefaultCurrencyForNewWebsites"; + $translationKeys[] = "SitesManager_SelectDefaultCurrency"; } } diff --git a/plugins/SitesManager/javascripts/SitesManager.js b/plugins/SitesManager/javascripts/SitesManager.js deleted file mode 100644 index b8ad4c325d..0000000000 --- a/plugins/SitesManager/javascripts/SitesManager.js +++ /dev/null @@ -1,473 +0,0 @@ -/*! - * Piwik - free/libre analytics platform - * - * @link http://piwik.org - * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */ - -// NOTE: if you cannot find the definition of a variable here, look in index.twig -function SitesManager(_timezones, _currencies, _defaultTimezone, _defaultCurrency) { - - var timezones = _timezones; - var currencies = _currencies; - var defaultTimezone = _defaultTimezone; - var defaultCurrency = _defaultCurrency; - var siteBeingEdited = false; - var siteBeingEditedName = ''; - - function sendDeleteSiteAJAX(idSite) { - var ajaxHandler = new ajaxHelper(); - ajaxHandler.addParams({ - idSite: idSite, - module: 'API', - format: 'json', - method: 'SitesManager.deleteSite' - }, 'GET'); - ajaxHandler.redirectOnSuccess(); - ajaxHandler.setLoadingElement(); - ajaxHandler.send(true); - } - - function sendAddSiteAJAX(row) { - var siteName = $(row).find('input#name').val(); - var urls = $(row).find('textarea#urls').val(); - urls = urls.trim().split("\n"); - var excludedIps = $(row).find('textarea#excludedIps').val(); - excludedIps = piwikHelper.getApiFormatTextarea(excludedIps); - var timezone = $(row).find('#timezones option:selected').val(); - var currency = $(row).find('#currencies option:selected').val(); - var excludedQueryParameters = $(row).find('textarea#excludedQueryParameters').val(); - excludedQueryParameters = piwikHelper.getApiFormatTextarea(excludedQueryParameters); - var excludedUserAgents = $(row).find('textarea#excludedUserAgents').val(); - excludedUserAgents = piwikHelper.getApiFormatTextarea(excludedUserAgents); - var keepURLFragments = $('#keepURLFragmentSelect', row).val(); - var ecommerce = $(row).find('#ecommerce option:selected').val(); - var sitesearch = $(row).find('#sitesearch option:selected').val(); - var searchKeywordParameters = $('input#searchKeywordParameters').val(); - var searchCategoryParameters = $('input#searchCategoryParameters').val(); - - var ajaxHandler = new ajaxHelper(); - ajaxHandler.addParams({ - module: 'API', - format: 'json', - method: 'SitesManager.addSite' - }, 'GET'); - ajaxHandler.addParams({ - siteName: siteName, - timezone: timezone, - currency: currency, - ecommerce: ecommerce, - excludedIps: excludedIps, - excludedQueryParameters: excludedQueryParameters, - excludedUserAgents: excludedUserAgents, - keepURLFragments: keepURLFragments, - siteSearch: sitesearch, - searchKeywordParameters: searchKeywordParameters, - searchCategoryParameters: searchCategoryParameters, - urls: urls - }, 'POST'); - ajaxHandler.redirectOnSuccess(); - ajaxHandler.setLoadingElement(); - ajaxHandler.send(true); - } - - function sendUpdateSiteAJAX(row) { - var siteName = $(row).find('input#siteName').val(); - var idSite = $(row).children('#idSite').html(); - var urls = $(row).find('textarea#urls').val(); - urls = urls.trim().split("\n"); - var excludedIps = $(row).find('textarea#excludedIps').val(); - excludedIps = piwikHelper.getApiFormatTextarea(excludedIps); - - var excludedQueryParameters = $(row).find('textarea#excludedQueryParameters').val(); - excludedQueryParameters = piwikHelper.getApiFormatTextarea(excludedQueryParameters); - var excludedUserAgents = $(row).find('textarea#excludedUserAgents').val(); - excludedUserAgents = piwikHelper.getApiFormatTextarea(excludedUserAgents); - var keepURLFragments = $('#keepURLFragmentSelect', row).val(); - var timezone = $(row).find('#timezones option:selected').val(); - var currency = $(row).find('#currencies option:selected').val(); - var ecommerce = $(row).find('#ecommerce option:selected').val(); - var sitesearch = $(row).find('#sitesearch option:selected').val(); - var searchKeywordParameters = $('input#searchKeywordParameters').val(); - var searchCategoryParameters = $('input#searchCategoryParameters').val(); - - var ajaxHandler = new ajaxHelper(); - ajaxHandler.addParams({ - module: 'API', - format: 'json', - method: 'SitesManager.updateSite', - idSite: idSite - }, 'GET'); - ajaxHandler.addParams({ - siteName: siteName, - timezone: timezone, - currency: currency, - ecommerce: ecommerce, - excludedIps: excludedIps, - excludedQueryParameters: excludedQueryParameters, - excludedUserAgents: excludedUserAgents, - keepURLFragments: keepURLFragments, - siteSearch: sitesearch, - searchKeywordParameters: searchKeywordParameters, - searchCategoryParameters: searchCategoryParameters, - urls: urls - }, 'POST'); - ajaxHandler.redirectOnSuccess(); - ajaxHandler.setLoadingElement(); - ajaxHandler.send(true); - } - - function sendGlobalSettingsAJAX() { - var timezone = $('#defaultTimezone').find('option:selected').val(); - var currency = $('#defaultCurrency').find('option:selected').val(); - var excludedIps = $('textarea#globalExcludedIps').val(); - excludedIps = piwikHelper.getApiFormatTextarea(excludedIps); - var excludedQueryParameters = $('textarea#globalExcludedQueryParameters').val(); - excludedQueryParameters = piwikHelper.getApiFormatTextarea(excludedQueryParameters); - var globalExcludedUserAgents = $('textarea#globalExcludedUserAgents').val(); - globalExcludedUserAgents = piwikHelper.getApiFormatTextarea(globalExcludedUserAgents); - var globalKeepURLFragments = $('#globalKeepURLFragments').is(':checked') ? 1 : 0; - var searchKeywordParameters = $('input#globalSearchKeywordParameters').val(); - var searchCategoryParameters = $('input#globalSearchCategoryParameters').val(); - var enableSiteUserAgentExclude = $('input#enableSiteUserAgentExclude').is(':checked') ? 1 : 0; - - var ajaxHandler = new ajaxHelper(); - ajaxHandler.addParams({ - module: 'SitesManager', - format: 'json', - action: 'setGlobalSettings' - }, 'GET'); - ajaxHandler.addParams({ - timezone: timezone, - currency: currency, - excludedIps: excludedIps, - excludedQueryParameters: excludedQueryParameters, - excludedUserAgents: globalExcludedUserAgents, - keepURLFragments: globalKeepURLFragments, - enableSiteUserAgentExclude: enableSiteUserAgentExclude, - searchKeywordParameters: searchKeywordParameters, - searchCategoryParameters: searchCategoryParameters - }, 'POST'); - ajaxHandler.redirectOnSuccess(); - ajaxHandler.setLoadingElement('#ajaxLoadingGlobalSettings'); - ajaxHandler.setErrorElement('#ajaxErrorGlobalSettings'); - ajaxHandler.send(true); - } - - this.init = function () { - $('.addRowSite').click(function () { - piwikHelper.hideAjaxError(); - $('.addRowSite').toggle(); - - var excludedUserAgentCell = ''; - if ($('#exclude-user-agent-header').is(':visible')) { - excludedUserAgentCell = '<td><textarea cols="20" rows="4" id="excludedUserAgents"></textarea><br />' + excludedUserAgentsHelp + '</td>'; - } - - var numberOfRows = $('table#editSites')[0].rows.length; - var newRowId = 'rowNew' + numberOfRows; - var submitButtonHtml = '<input type="submit" class="addsite submit" value="' + _pk_translate('General_Save') + '" />'; - $($.parseHTML(' <tr id="' + newRowId + '">\ - <td> </td>\ - <td><input id="name" value="Name" size="15" /><br/><br/><br/>' + submitButtonHtml + '</td>\ - <td><textarea cols="25" rows="3" id="urls">http://siteUrl.com/\nhttp://siteUrl2.com/</textarea><br />' + aliasUrlsHelp + keepURLFragmentSelectHTML + '</td>\ - <td><textarea cols="20" rows="4" id="excludedIps"></textarea><br />' + excludedIpHelp + '</td>\ - <td><textarea cols="20" rows="4" id="excludedQueryParameters"></textarea><br />' + excludedQueryParametersHelp + '</td>' + - excludedUserAgentCell + - '<td>' + getSitesearchSelector(false) + '</td>\ - <td>' + getTimezoneSelector(defaultTimezone) + '<br />' + timezoneHelp + '</td>\ - <td>' + getCurrencySelector(defaultCurrency) + '<br />' + currencyHelp + '</td>\ - <td>' + getEcommerceSelector(0) + '<br />' + ecommerceHelp + '</td>\ - <td>' + submitButtonHtml + '</td>\ - <td><span class="cancel link_but">' + sprintf(_pk_translate('General_OrCancel'), "", "") + '</span></td>\ - </tr>')) - .appendTo('#editSites') - ; - - piwikHelper.lazyScrollTo('#' + newRowId); - - $('.addsite').click(function () { - sendAddSiteAJAX($('tr#' + newRowId)); - }); - - $('.cancel').click(function () { - piwikHelper.hideAjaxError(); - $(this).parents('tr').remove(); - $('.addRowSite').toggle(); - }); - return false; - }); - - // when click on deleteuser, the we ask for confirmation and then delete the user - $('.deleteSite').click(function () { - piwikHelper.hideAjaxError(); - var idRow = $(this).attr('id'); - var nameToDelete = $(this).parent().parent().find('input#siteName').val() || $(this).parent().parent().find('td#siteName').html(); - var idsiteToDelete = $(this).parent().parent().find('#idSite').html(); - - $('#confirm').find('h2').text(sprintf(_pk_translate('SitesManager_DeleteConfirm'), '"' + nameToDelete + '" (idSite = ' + idsiteToDelete + ')')); - piwikHelper.modalConfirm('#confirm', { yes: function () { - - sendDeleteSiteAJAX(idsiteToDelete); - }}); - } - ); - - var alreadyEdited = []; - $('.editSite') - .click(function () { - piwikHelper.hideAjaxError(); - var idRow = $(this).attr('id'); - if (alreadyEdited[idRow] == 1) return; - if (siteBeingEdited) { - $('#alert').find('h2').text(sprintf(_pk_translate('SitesManager_OnlyOneSiteAtTime'), '"' + $("<div/>").html(siteBeingEditedName).text() + '"')); - piwikHelper.modalConfirm('#alert', {}); - return; - } - siteBeingEdited = true; - - alreadyEdited[idRow] = 1; - $('tr#' + idRow + ' .editableSite').each( - // make the fields editable - // change the EDIT button to VALID button - function (i, n) { - var contentBefore = $(n).html(); - - var idName = $(n).attr('id'); - if (idName == 'siteName') { - siteBeingEditedName = contentBefore; - var contentAfter = '<input id="' + idName + '" value="' + piwikHelper.htmlEntities( piwikHelper.htmlDecode(contentBefore))+ '" size="15" />'; - - var inputSave = $('<br/><input style="margin-top:50px" type="submit" class="submit" value="' + _pk_translate('General_Save') + '" />') - .click(function () { submitUpdateSite($(this).parent()); }); - var spanCancel = $('<div><br/>' + sprintf(_pk_translate('General_OrCancel'), "", "") + '</div>') - .click(function () { piwikHelper.refreshAfter(0); }); - $(n) - .html(contentAfter) - .keypress(submitSiteOnEnter) - .append(inputSave) - .append(spanCancel); - } - else if (idName == 'urls') { - var keepURLFragmentsForSite = $(this).closest('tr').attr('data-keep-url-fragments'); - var contentAfter = '<textarea cols="25" rows="3" id="urls">' + contentBefore.replace(/<br *\/? *> */gi, "\n") + '</textarea>'; - contentAfter += '<br />' + aliasUrlsHelp + keepURLFragmentSelectHTML; - $(n).html(contentAfter).find('select').val(keepURLFragmentsForSite); - } - else if (idName == 'excludedIps') { - var contentAfter = '<textarea cols="20" rows="4" id="excludedIps">' + contentBefore.replace(/<br *\/? *>/gi, "\n") + '</textarea>'; - contentAfter += '<br />' + excludedIpHelp; - $(n).html(contentAfter); - } - else if (idName == 'excludedQueryParameters') { - var contentAfter = '<textarea cols="20" rows="4" id="excludedQueryParameters">' + contentBefore.replace(/<br *\/? *>/gi, "\n") + '</textarea>'; - contentAfter += '<br />' + excludedQueryParametersHelp; - $(n).html(contentAfter); - } - else if (idName == 'excludedUserAgents') { - var contentAfter = '<textarea cols="20" rows="4" id="excludedUserAgents">' + - contentBefore.replace(/<br *\/? *>/gi, "\n") + '</textarea><br />' + excludedUserAgentsHelp; - $(n).html(contentAfter); - } - else if (idName == 'timezone') { - var contentAfter = getTimezoneSelector(contentBefore); - contentAfter += '<br />' + timezoneHelp; - $(n).html(contentAfter); - } - else if (idName == 'currency') { - var contentAfter = getCurrencySelector(contentBefore); - contentAfter += '<br />' + currencyHelp; - $(n).html(contentAfter); - } - else if (idName == 'ecommerce') { - var ecommerceActive = contentBefore.indexOf("ecommerceActive") > 0 ? 1 : 0; - contentAfter = getEcommerceSelector(ecommerceActive) + '<br />' + ecommerceHelp; - $(n).html(contentAfter); - } - else if (idName == 'sitesearch') { - contentAfter = getSitesearchSelector(contentBefore); - $(n).html(contentAfter); - onClickSiteSearchUseDefault(); - } - } - ); - $(this) - .toggle() - .parent() - .prepend($('<input type="submit" class="updateSite submit" value="' + _pk_translate('General_Save') + '" />') - .click(function () { sendUpdateSiteAJAX($('tr#' + idRow)); }) - ); - }); - - $('#globalSettingsSubmit').click(function () { - sendGlobalSettingsAJAX(); - }); - - $('#defaultTimezone').html(getTimezoneSelector(defaultTimezone)); - $('#defaultCurrency').html(getCurrencySelector(defaultCurrency)); - - $('td.editableSite').click(function (event) { - $(this).parent().find('.editSite').click(); - }); - }; - - function getSitesearchSelector(contentBefore) { - var globalKeywordParameters = $('input#globalSearchKeywordParameters').val().trim(); - var globalCategoryParameters = $('input#globalSearchCategoryParameters').val().trim(); - if (contentBefore) { - var enabled = contentBefore.indexOf("sitesearchActive") > 0 ? 1 : 0; - var spanSearch = $(contentBefore).filter('.sskp'); - var searchKeywordParameters = spanSearch.attr('sitesearch_keyword_parameters').trim(); - var searchCategoryParameters = spanSearch.attr('sitesearch_category_parameters').trim(); - var checked = globalKeywordParameters.length && !searchKeywordParameters.trim().length; - } else { - var searchKeywordParameters = globalKeywordParameters; - var searchCategoryParameters = globalCategoryParameters; - var enabled = searchKeywordParameters.length || searchCategoryParameters.length; // default is enabled - var checked = enabled; - } - - var searchGlobalHasValues = globalKeywordParameters.trim().length; - var html = '<select id="sitesearch" onchange="return onClickSiteSearchUseDefault();">'; - var selected = ' selected="selected" '; - html += '<option ' + (enabled ? selected : '') + ' value="1">' + sitesearchEnabled + '</option>'; - html += '<option ' + (enabled ? '' : selected) + ' value="0">' + sitesearchDisabled + '</option>'; - html += '</select>'; - html += '<span style="font-size: 11px;"><br/>'; - - if (searchGlobalHasValues) { - var checkedStr = checked ? ' checked ' : ''; - html += '<span id="sitesearchUseDefault"' + (!enabled ? ' style="display:none" ' : '') + '><input type="checkbox" ' - + checkedStr + ' id="sitesearchUseDefaultCheck" onclick="return onClickSiteSearchUseDefault();"> ' - + sitesearchUseDefault + ' </span>'; - + '</label>'; - - html += '<div ' + ((checked && enabled) ? '' : 'style="display-none"') + ' class="searchDisplayParams form-description">' - + searchKeywordLabel + ' (' + strDefault + ') ' + ': ' - + piwikHelper.htmlEntities( globalKeywordParameters ) - + (globalCategoryParameters.length ? ', ' + searchCategoryLabel + ': ' + piwikHelper.htmlEntities(globalCategoryParameters) : '') - + '</div>'; - } - html += '<div id="sitesearchIntro">' + sitesearchIntro + '</div>'; - - html += '<div id="searchSiteParameters">'; - html += '<br/><label><div style="margin-bottom:3px">' - + piwikHelper.htmlEntities(searchKeywordLabel) - + '</div><input type="text" size="22" id="searchKeywordParameters" value="' - + piwikHelper.htmlEntities(searchKeywordParameters) - + '" style="font-size:9pt;font-family:monospace"></input>' - + searchKeywordHelp + '</label>'; - - // if custom var plugin is disabled, category tracking not supported - if (globalCategoryParameters != 'globalSearchCategoryParametersIsDisabled') { - html += '<br/><label><div style="margin-bottom:3px">' + searchCategoryLabel + '</div><input type="text" size="22" id="searchCategoryParameters" value="' + searchCategoryParameters + '" style="font-size:9pt;font-family:monospace"></input>' + searchCategoryHelp + '</label>'; - } - html += '</div></span>'; - - return html; - } - - function getEcommerceSelector(enabled) { - var html = '<select id="ecommerce">'; - var selected = ' selected="selected" '; - html += '<option ' + (enabled ? '' : selected) + ' value="0">' + ecommerceDisabled + '</option>'; - html += '<option ' + (enabled ? selected : '') + ' value="1">' + ecommerceEnabled + '</option>'; - html += '</select>'; - return html; - } - - function getTimezoneSelector(selectedTimezone) { - var html = '<select id="timezones">'; - for (var continent in timezones) { - html += '<optgroup label="' + continent + '">'; - for (var timezoneId in timezones[continent]) { - var selected = ''; - if (timezoneId == selectedTimezone) { - selected = ' selected="selected" '; - } - html += '<option ' + selected + ' value="' + timezoneId + '">' + timezones[continent][timezoneId] + '</option>'; - } - html += "</optgroup>\n"; - } - html += '</select>'; - return html; - } - - - function getCurrencySelector(selectedCurrency) { - var html = '<select id="currencies">'; - for (var currency in currencies) { - var selected = ''; - if (currency == selectedCurrency) { - selected = ' selected="selected" '; - } - html += '<option ' + selected + ' value="' + currency + '">' + currencies[currency] + '</option>'; - } - html += '</select>'; - return html; - } - - function submitSiteOnEnter(e) { - var key = e.keyCode || e.which; - if (key == 13) { - submitUpdateSite(this); - $(this).find('.addsite').click(); - } - } - - function submitUpdateSite(self) { - $(self).parent().find('.updateSite').click(); - } -} - -function onClickSiteSearchUseDefault() { - // Site Search enabled - if ($('select#sitesearch').val() == "1") { - $('#sitesearchUseDefault').show(); - - // Use default is checked - if ($('#sitesearchUseDefaultCheck').is(':checked')) { - $('#searchSiteParameters').hide(); - $('#sitesearchIntro').show(); - $('#searchKeywordParameters,#searchCategoryParameters').val(''); - $('.searchDisplayParams').show(); - // Use default is unchecked - - } else { - $('#sitesearchIntro').hide(); - $('.searchDisplayParams').hide(); - $('#searchSiteParameters').show(); - } - } else { - $('.searchDisplayParams').hide(); - $('#sitesearchUseDefault').hide(); - $('#searchSiteParameters').hide(); - $('#sitesearchIntro').show(); - } -} - -$(function () { - - // when code element is clicked, select the text - $('.trackingHelp code').click(function() { - // credit where credit is due: - // http://stackoverflow.com/questions/1173194/select-all-div-text-with-single-mouse-click - var range; - if (document.body.createTextRange) // MSIE - { - range = document.body.createTextRange(); - range.moveToElementText(this); - range.select(); - } - else if (window.getSelection) // others - { - range = document.createRange(); - range.selectNodeContents(this); - - var selection = window.getSelection(); - selection.removeAllRanges(); - selection.addRange(range); - } - }) - .click(); -}); diff --git a/plugins/SitesManager/javascripts/sites-manager-controller.js b/plugins/SitesManager/javascripts/sites-manager-controller.js new file mode 100644 index 0000000000..6da2f511e4 --- /dev/null +++ b/plugins/SitesManager/javascripts/sites-manager-controller.js @@ -0,0 +1,244 @@ +/*! + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +angular.module('piwikApp').controller('SitesManagerController', function ($scope, $filter, coreAPI, coreAdminAPI, sitesManagerAPI, piwik, sitesManagerApiHelper) { + + var translate = $filter('translate'); + + var init = function () { + + initModel(); + initActions(); + }; + + var initModel = function() { + + $scope.sites = []; + $scope.hasSuperUserAccess = piwik.hasSuperUserAccess; + $scope.redirectParams = {showaddsite: false}; + + initSelectLists(); + initUtcTime(); + initUserIP(); + initCustomVariablesActivated(); + initIsTimezoneSupportEnabled(); + initGlobalParams(); + }; + + var initActions = function () { + + $scope.cancelEditSite = cancelEditSite; + $scope.addSite = addSite; + $scope.saveGlobalSettings = saveGlobalSettings; + + $scope.informSiteIsBeingEdited = informSiteIsBeingEdited; + $scope.lookupCurrentEditSite = lookupCurrentEditSite; + }; + + var informSiteIsBeingEdited = function() { + + $scope.siteIsBeingEdited = true; + }; + + var initSelectLists = function() { + + initSiteSearchSelectOptions(); + initEcommerceSelectOptions(); + initCurrencyList(); + initTimezones(); + }; + + var initGlobalParams = function() { + + showLoading(); + + sitesManagerAPI.getGlobalSettings(function(globalSettings) { + + $scope.globalSettings = globalSettings; + + $scope.globalSettings.searchKeywordParametersGlobal = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.globalSettings.searchKeywordParametersGlobal); + $scope.globalSettings.searchCategoryParametersGlobal = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.globalSettings.searchCategoryParametersGlobal); + $scope.globalSettings.excludedIpsGlobal = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.globalSettings.excludedIpsGlobal); + $scope.globalSettings.excludedQueryParametersGlobal = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.globalSettings.excludedQueryParametersGlobal); + $scope.globalSettings.excludedUserAgentsGlobal = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.globalSettings.excludedUserAgentsGlobal); + + initKeepURLFragmentsList(); + + initSiteList(); + + triggerAddSiteIfRequested(); + }); + }; + + var triggerAddSiteIfRequested = function() { + + if(piwikHelper.getArrayFromQueryString(String(window.location.search))['showaddsite'] == 1) + addSite(); + }; + + var initEcommerceSelectOptions = function() { + + $scope.eCommerceptions = [ + {key: '0', value: translate('SitesManager_NotAnEcommerceSite')}, + {key: '1', value: translate('SitesManager_EnableEcommerce')} + ]; + }; + + var initUtcTime = function() { + + var currentDate = new Date(); + + $scope.utcTime = new Date( + currentDate.getUTCFullYear(), + currentDate.getUTCMonth(), + currentDate.getUTCDate(), + currentDate.getUTCHours(), + currentDate.getUTCMinutes(), + currentDate.getUTCSeconds() + ); + }; + + var initIsTimezoneSupportEnabled = function() { + + sitesManagerAPI.isTimezoneSupportEnabled(function (timezoneSupportEnabled) { + $scope.timezoneSupportEnabled = timezoneSupportEnabled; + }); + }; + + var initTimezones = function() { + + sitesManagerAPI.getTimezonesList( + + function (timezones) { + + $scope.timezones = []; + + angular.forEach(timezones, function(groupTimezones, timezoneGroup) { + + angular.forEach(groupTimezones, function(label, code) { + + $scope.timezones.push({ + group: timezoneGroup, + code: code, + label:Â label + }); + }); + }); + } + ); + }; + + var initCustomVariablesActivated = function() { + + coreAdminAPI.isPluginActivated( + + function (customVariablesActivated) { + $scope.customVariablesActivated = customVariablesActivated; + }, + + {pluginName: 'CustomVariables'} + ); + }; + + var initUserIP = function() { + + coreAPI.getIpFromHeader(function(ip) { + $scope.currentIpAddress = ip; + }); + }; + + var initSiteSearchSelectOptions = function() { + + $scope.siteSearchOptions = [ + {key: '1', value: translate('SitesManager_EnableSiteSearch')}, + {key: '0', value: translate('SitesManager_DisableSiteSearch')} + ]; + }; + + var initKeepURLFragmentsList = function() { + + $scope.keepURLFragmentsOptions = { + 0: ($scope.globalSettings.keepURLFragmentsGlobal ? translate('General_Yes') : translate('General_No')) + ' (' + translate('General_Default') + ')', + 1: translate('General_Yes'), + 2: translate('General_No') + }; + }; + + var addSite = function() { + $scope.sites.push({}); + }; + + var saveGlobalSettings = function() { + + var ajaxHandler = new ajaxHelper(); + + ajaxHandler.addParams({ + module: 'SitesManager', + format: 'json', + action: 'setGlobalSettings' + }, 'GET'); + + ajaxHandler.addParams({ + timezone: $scope.globalSettings.defaultTimezone, + currency: $scope.globalSettings.defaultCurrency, + excludedIps: $scope.globalSettings.excludedIpsGlobal.join(','), + excludedQueryParameters: $scope.globalSettings.excludedQueryParametersGlobal.join(','), + excludedUserAgents: $scope.globalSettings.excludedUserAgentsGlobal.join(','), + keepURLFragments: $scope.globalSettings.keepURLFragmentsGlobal ? 1 : 0, + enableSiteUserAgentExclude: $scope.globalSettings.siteSpecificUserAgentExcludeEnabled ? 1 : 0, + searchKeywordParameters: $scope.globalSettings.searchKeywordParametersGlobal.join(','), + searchCategoryParameters: $scope.globalSettings.searchCategoryParametersGlobal.join(',') + }, 'POST'); + + ajaxHandler.redirectOnSuccess($scope.redirectParams); + ajaxHandler.setLoadingElement(); + ajaxHandler.send(true); + }; + + var cancelEditSite = function ($event) { + $event.stopPropagation(); + piwikHelper.redirect($scope.redirectParams); + }; + + var lookupCurrentEditSite = function () { + + var sitesInEditMode = $scope.sites.filter(function(site) { + return site.editMode; + }); + + return sitesInEditMode[0]; + }; + + var initSiteList = function () { + + sitesManagerAPI.getSitesWithAdminAccess(function (sites) { + + angular.forEach(sites, function(site) { + $scope.sites.push(site); + }); + + hideLoading(); + }); + }; + + var initCurrencyList = function () { + + sitesManagerAPI.getCurrencyList(function (currencies) { + $scope.currencies = currencies; + }); + }; + + var showLoading = function() { + $scope.loading = true; + }; + + var hideLoading = function() { + $scope.loading = false; + }; + + init(); +}); diff --git a/plugins/SitesManager/javascripts/sites-manager-directives.js b/plugins/SitesManager/javascripts/sites-manager-directives.js new file mode 100644 index 0000000000..2357d3da60 --- /dev/null +++ b/plugins/SitesManager/javascripts/sites-manager-directives.js @@ -0,0 +1,85 @@ +/*! + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +angular.module('piwikApp').directive('sitesManagerMultilineField', function () { + + return { + restrict: 'A', + replace: true, + scope: { + managedValue: '=field', + rows: '@?', + cols: '@?' + }, + templateUrl: 'plugins/SitesManager/templates/directives/multiline-field.html?cb=' + piwik.cacheBuster, + link: function (scope) { + + var separator = '\n'; + + var init = function () { + + scope.field = {}; + scope.onChange = updateManagedScopeValue; + + scope.$watch('managedValue', updateInputValue); + }; + + var updateManagedScopeValue = function () { + scope.managedValue = scope.field.value.trim().split(separator); + }; + + var updateInputValue = function () { + + if(angular.isUndefined(scope.managedValue)) + return; + + scope.field.value = scope.managedValue.join(separator); + }; + + init(); + } + }; +}); + +angular.module('piwikApp').directive('sitesManagerEditTrigger', function () { + + return { + restrict: 'A', + link: function (scope, element) { + + element.bind('click', function(){ + + if(!scope.site.editMode) + scope.$apply(scope.editSite()); + }); + + scope.$watch('site.editMode', function() { + + element.toggleClass('editable-site-field', !scope.site.editMode); + }); + } + }; +}); + +angular.module('piwikApp').directive('sitesManagerScroll', function () { + + return { + restrict: 'A', + link: function (scope, element) { + + scope.$watch('site.editMode', function() { + + if(scope.site.editMode) + scrollToSite(); + }); + + var scrollToSite = function() { + piwikHelper.lazyScrollTo(element[0], 500, true); + }; + } + }; +}); diff --git a/plugins/SitesManager/javascripts/sites-manager-recipes.js b/plugins/SitesManager/javascripts/sites-manager-recipes.js new file mode 100644 index 0000000000..a95fc8bef3 --- /dev/null +++ b/plugins/SitesManager/javascripts/sites-manager-recipes.js @@ -0,0 +1,95 @@ +/*! + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +angular.module('piwikApp').factory('sitesManagerAPI', function SitesManagerAPIFactory(sitesManagerApiHelper) { + + var api = sitesManagerApiHelper; + + return { + getCurrencyList: api.fetchApi('SitesManager.getCurrencyList', api.singleObjectAdaptor), + getSitesWithAdminAccess: api.fetchApi('SitesManager.getSitesWithAdminAccess', api.noop, {fetchAliasUrls: true}), + getTimezonesList: api.fetchApi('SitesManager.getTimezonesList', api.noop), + isTimezoneSupportEnabled: api.fetchApi('SitesManager.isTimezoneSupportEnabled', api.valueAdaptor), + getGlobalSettings: api.fetchAction('SitesManager', 'getGlobalSettings', api.singleObjectAdaptor) + }; +}); + +// can probably be shared +angular.module('piwikApp').factory('coreAPI', function CoreAPIFactory(sitesManagerApiHelper) { + + var api = sitesManagerApiHelper; + + return { + getIpFromHeader: api.fetchApi('API.getIpFromHeader', api.valueAdaptor) + }; +}); + +// can probably be shared +angular.module('piwikApp').factory('coreAdminAPI', function CoreAdminAPIFactory(sitesManagerApiHelper) { + + var api = sitesManagerApiHelper; + + return { + isPluginActivated: api.fetchApi('CoreAdminHome.isPluginActivated', api.valueAdaptor) + }; +}); + +// can probably be renamed and shared +angular.module('piwikApp').factory('sitesManagerApiHelper', function SitesManagerAPIHelperFactory(piwikApi) { + + return { + + fetch: function (endpoint, jsonResponseAdaptor, params) { + + return function (clientHandover, additionalParams) { + + params = angular.extend(params || {}, additionalParams || {}); + + var requestDefinition = angular.extend(endpoint, params); + + var responseHandler = function (response) { + + response = jsonResponseAdaptor(response); + + clientHandover(response); + }; + + piwikApi.fetch(requestDefinition).then(responseHandler); + } + }, + + commaDelimitedFieldToArray: function(value) { + + if(value == null || value == '') + return []; + + return value.split(','); + }, + + fetchApi: function (apiMethod, jsonResponseAdaptor, params) { + + return this.fetch({method: apiMethod}, jsonResponseAdaptor, params); + }, + + fetchAction: function (module, action, jsonResponseAdaptor, params) { + + return this.fetch({module: module, action: action}, jsonResponseAdaptor, params); + }, + + singleObjectAdaptor: function (response) { + return response[0]; + }, + + valueAdaptor: function (response) { + return response.value; + }, + + noop: function (response) { + return response; + } + }; +}); diff --git a/plugins/SitesManager/javascripts/sites-manager-site-controller.js b/plugins/SitesManager/javascripts/sites-manager-site-controller.js new file mode 100644 index 0000000000..c6ea22e45d --- /dev/null +++ b/plugins/SitesManager/javascripts/sites-manager-site-controller.js @@ -0,0 +1,164 @@ +/*! + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +angular.module('piwikApp').controller('SitesManagerSiteController', function ($scope, $filter, sitesManagerApiHelper) { + + var translate = $filter('translate'); + + var init = function () { + + initModel(); + initActions(); + }; + + var initActions = function () { + + $scope.editSite = editSite; + $scope.saveSite = saveSite; + $scope.openDeleteDialog = openDeleteDialog; + $scope.site.delete = deleteSite; + }; + + var initModel = function() { + + if(siteIsNew()) + initNewSite(); + else + initExistingSite(); + + $scope.site.editDialog = {}; + $scope.site.removeDialog = {}; + }; + + var editSite = function () { + + if ($scope.siteIsBeingEdited) { + + $scope.site.editDialog.show = true; + $scope.site.editDialog.title = translate('SitesManager_OnlyOneSiteAtTime', '"' + $scope.lookupCurrentEditSite().name + '"'); + + } else { + + $scope.site.editMode = true; + $scope.informSiteIsBeingEdited(); + } + }; + + var saveSite = function() { + + var sendSiteSearchKeywordParams = $scope.site.sitesearch == '1' && !$scope.site.useDefaultSiteSearchParams; + var sendSearchCategoryParameters = sendSiteSearchKeywordParams && $scope.customVariablesActivated; + + var ajaxHandler = new ajaxHelper(); + ajaxHandler.addParams({ + module: 'API', + format: 'json' + }, 'GET'); + + if(siteIsNew()) { + + ajaxHandler.addParams({ + method: 'SitesManager.addSite' + }, 'GET'); + + } else { + + ajaxHandler.addParams({ + idSite: $scope.site.idsite, + method: 'SitesManager.updateSite' + }, 'GET'); + } + + ajaxHandler.addParams({ + siteName: $scope.site.name, + timezone: $scope.site.timezone, + currency: $scope.site.currency, + ecommerce: $scope.site.ecommerce, + excludedIps: $scope.site.excluded_ips.join(','), + excludedQueryParameters: $scope.site.excluded_parameters.join(','), + excludedUserAgents: $scope.site.excluded_user_agents.join(','), + keepURLFragments: $scope.site.keep_url_fragment, + siteSearch: $scope.site.sitesearch, + searchKeywordParameters: sendSiteSearchKeywordParams ? $scope.site.sitesearch_keyword_parameters.join(',') : null, + searchCategoryParameters: sendSearchCategoryParameters ? $scope.site.sitesearch_category_parameters.join(',') : null, + urls: $scope.site.alias_urls + }, 'POST'); + + ajaxHandler.redirectOnSuccess($scope.redirectParams); + ajaxHandler.setLoadingElement(); + ajaxHandler.send(true); + }; + + var siteIsNew = function() { + return angular.isUndefined($scope.site.idsite); + }; + + var initNewSite = function() { + + $scope.informSiteIsBeingEdited(); + + $scope.site.editMode = true; + $scope.site.name = "Name"; + $scope.site.alias_urls = [ + "http://siteUrl.com/", + "http://siteUrl2.com/" + ]; + $scope.site.keep_url_fragment = "0"; + $scope.site.excluded_ips = []; + $scope.site.excluded_parameters = []; + $scope.site.excluded_user_agents = []; + $scope.site.sitesearch_keyword_parameters = []; + $scope.site.sitesearch_category_parameters = []; + $scope.site.sitesearch = $scope.globalSettings.searchKeywordParametersGlobal.length ? "1" : "0"; + $scope.site.timezone = $scope.globalSettings.defaultTimezone; + $scope.site.currency = $scope.globalSettings.defaultCurrency; + $scope.site.ecommerce = "0"; + + updateSiteWithSiteSearchConfig(); + }; + + var initExistingSite = function() { + + $scope.site.excluded_ips = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_ips); + $scope.site.excluded_parameters = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_parameters); + $scope.site.excluded_user_agents = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_user_agents); + $scope.site.sitesearch_keyword_parameters = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.sitesearch_keyword_parameters); + $scope.site.sitesearch_category_parameters = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.sitesearch_category_parameters); + + updateSiteWithSiteSearchConfig(); + }; + + var updateSiteWithSiteSearchConfig = function() { + + $scope.site.useDefaultSiteSearchParams = + $scope.globalSettings.searchKeywordParametersGlobal.length && !$scope.site.sitesearch_keyword_parameters.length; + }; + + var openDeleteDialog = function() { + + $scope.site.removeDialog.title = translate('SitesManager_DeleteConfirm', '"' + $scope.site.name + '" (idSite = ' + $scope.site.idsite + ')'); + $scope.site.removeDialog.show = true; + }; + + var deleteSite = function() { + + var ajaxHandler = new ajaxHelper(); + + ajaxHandler.addParams({ + idSite: $scope.site.idsite, + module: 'API', + format: 'json', + method: 'SitesManager.deleteSite' + }, 'GET'); + + ajaxHandler.redirectOnSuccess($scope.redirectParams); + ajaxHandler.setLoadingElement(); + ajaxHandler.send(true); + }; + + init(); +}); diff --git a/plugins/SitesManager/stylesheets/SitesManager.less b/plugins/SitesManager/stylesheets/SitesManager.less index 3ff7fee967..de6c74f990 100644 --- a/plugins/SitesManager/stylesheets/SitesManager.less +++ b/plugins/SitesManager/stylesheets/SitesManager.less @@ -25,45 +25,14 @@ vertical-align: middle; } -#editSites { - vertical-align: top; -} - -#editSites h4 { - font-size: .8em; - margin: 1em 0 1em 0; - font-weight: bold; -} - -#editSites .entityTable tr td { - vertical-align: top; - padding-top: 7px; -} - -#editSites .addRowSite:hover, -#editSites .editableSite:hover, -#editSites .addsite:hover, -#editSites .cancel:hover, -#editSites .deleteSite:hover, -#editSites .editSite:hover, -#editSites .updateSite:hover { +td.editable-site-field:hover { cursor: pointer; } -#editSites .addRowSite a { - text-decoration: none; -} - -#editSites .addRowSite { - padding: 1em; - font-weight: bold; -} - -.ecommerceInactive, -.sitesearchInactive { - color: @theme-color-text-lighter; +.link_but:hover { + cursor: pointer; } -#searchSiteParameters { - display: none; +.link_but:hover > span { + text-decoration: underline; }
\ No newline at end of file diff --git a/plugins/SitesManager/templates/dialogs/dialogs.html b/plugins/SitesManager/templates/dialogs/dialogs.html new file mode 100644 index 0000000000..476505e7bf --- /dev/null +++ b/plugins/SitesManager/templates/dialogs/dialogs.html @@ -0,0 +1,3 @@ +<div ng-include="'plugins/SitesManager/templates/dialogs/edit-dialog.html'"></div> + +<div ng-include="'plugins/SitesManager/templates/dialogs/remove-dialog.html'"></div> diff --git a/plugins/SitesManager/templates/dialogs/edit-dialog.html b/plugins/SitesManager/templates/dialogs/edit-dialog.html new file mode 100644 index 0000000000..afb9910869 --- /dev/null +++ b/plugins/SitesManager/templates/dialogs/edit-dialog.html @@ -0,0 +1,6 @@ +<div class="ui-confirm" piwik-dialog="site.editDialog.show"> + + <h2>{{ site.editDialog.title }}</h2> + + <input role="no" type="button" value="{{ 'General_Ok'|translate }}"/> +</div> diff --git a/plugins/SitesManager/templates/dialogs/remove-dialog.html b/plugins/SitesManager/templates/dialogs/remove-dialog.html new file mode 100644 index 0000000000..fee3d6ae89 --- /dev/null +++ b/plugins/SitesManager/templates/dialogs/remove-dialog.html @@ -0,0 +1,7 @@ +<div class="ui-confirm" piwik-dialog="site.removeDialog.show" yes="site.delete()"> + + <h2>{{ site.removeDialog.title }}</h2> + + <input type="button" value="{{ 'General_Yes'|translate }}" role="yes"/> + <input type="button" value="{{ 'General_No'|translate }}" role="no" /> +</div> diff --git a/plugins/SitesManager/templates/directives/multiline-field.html b/plugins/SitesManager/templates/directives/multiline-field.html new file mode 100644 index 0000000000..fed8822dc1 --- /dev/null +++ b/plugins/SitesManager/templates/directives/multiline-field.html @@ -0,0 +1,7 @@ +<textarea + cols="{{ cols }}" + rows="{{ rows }}" + ng-model="field.value" + ng-change="onChange()"> + +</textarea> diff --git a/plugins/SitesManager/templates/global-settings.html b/plugins/SitesManager/templates/global-settings.html new file mode 100644 index 0000000000..049d7b5386 --- /dev/null +++ b/plugins/SitesManager/templates/global-settings.html @@ -0,0 +1,189 @@ +<div ng-show="hasSuperUserAccess"> + + <br/> + + <h2 id="globalSettings">{{ 'SitesManager_GlobalWebsitesSettings' | translate }}</h2> + + <br/> + + <table style="width:600px;" class="adminTable"> + + <tr> + <td colspan="2"> + <strong>{{ 'SitesManager_GlobalListExcludedIps'|translate }}</strong> + + <p>{{ 'SitesManager_ListOfIpsToBeExcludedOnAllWebsites'|translate }} </p> + </td> + </tr> + <tr> + <td> + <div sites-manager-multiline-field field="globalSettings.excludedIpsGlobal" cols="30" rows="3" id="excludedIpsGlobal"></div> + </td> + <td> + <label for="excludedIpsGlobal" ng-include="'plugins/SitesManager/templates/help/excluded-ip-help.html'"> + </label> + </td> + </tr> + + <tr> + <td colspan="2"> + <strong>{{ 'SitesManager_GlobalListExcludedQueryParameters'|translate }}</strong> + + <p>{{ 'SitesManager_ListOfQueryParametersToBeExcludedOnAllWebsites'|translate }} </p> + </td> + </tr> + + <tr> + <td> + <div sites-manager-multiline-field field="globalSettings.excludedQueryParametersGlobal" cols="30" rows="3" id="excludedQueryParametersGlobal"></div> + </td> + <td> + <label for="excludedQueryParametersGlobal" ng-include="'plugins/SitesManager/templates/help/excluded-query-parameters-help.html'"> + </label> + </td> + </tr> + + <tr> + <td colspan="2"> + <strong>{{ 'SitesManager_GlobalListExcludedUserAgents'|translate }}</strong> + + <p>{{ 'SitesManager_GlobalListExcludedUserAgents_Desc'|translate }}</p> + </td> + </tr> + + <tr> + <td> + <div sites-manager-multiline-field field="globalSettings.excludedUserAgentsGlobal" cols="30" rows="3" id="excludedUserAgentsGlobal"></div> + </td> + + <td> + <label for="excludedUserAgentsGlobal" ng-include="'plugins/SitesManager/templates/help/excluded-user-agents-help.html'"> + </label> + </td> + </tr> + + <tr> + <td> + <input type="checkbox" id="siteSpecificUserAgentExcludeEnabled" ng-model="globalSettings.siteSpecificUserAgentExcludeEnabled"> + + <label for="siteSpecificUserAgentExcludeEnabled"> + {{ 'SitesManager_EnableSiteSpecificUserAgentExclude'|translate }} + </label> + </td> + <td> + <div class="ui-inline-help" ng-bind-html="'SitesManager_EnableSiteSpecificUserAgentExclude_Help'|translate:'<a href=\'#excludedUserAgentsGlobal\'>':'</a>'"></div> + </td> + </tr> + + <tr> + <td colspan="2"> + <strong>{{ 'SitesManager_KeepURLFragments'|translate }}</strong> + + <p ng-bind-html="'SitesManager_KeepURLFragmentsHelp'|translate:'<em>#</em>':'<em>example.org/index.html#first_section</em>':'<em>example.org/index.html</em>'"></p> + + <input type="checkbox" id="keepURLFragmentsGlobal" ng-model="globalSettings.keepURLFragmentsGlobal"> + + <label for="keepURLFragmentsGlobal">{{ 'SitesManager_KeepURLFragmentsLong'|translate }}</label> + + <p>{{ 'SitesManager_KeepURLFragmentsHelp2'|translate }}</p> + </td> + </tr> + + <tr> + <td colspan="2"> + + <strong>{{ 'SitesManager_TrackingSiteSearch'|translate }}</strong> + + <p>{{ 'SitesManager_SiteSearchUse' | translate }}</p> + + <span class="form-description" style="font-size:8pt;"> + {{ 'SitesManager_SearchParametersNote'|translate }} {{ 'SitesManager_SearchParametersNote2'|translate }} + </span> + + <br/> + <br/> + </td> + </tr> + + <tr> + <td> + <label>{{ 'SitesManager_SearchKeywordLabel' | translate }} + <input ng-list size="15" ng-model="globalSettings.searchKeywordParametersGlobal"> + </label> + </td> + <td> + <div class="ui-inline-help" style='width: 200px;'> + {{ 'SitesManager_SearchKeywordParametersDesc' | translate }} + </div> + + <br/> + <br/> + </td> + </tr> + + <tr> + <td colspan="2"> + <span ng-hide="customVariablesActivated" class='form-description'>Note: you could also track your Internal Search Engine Categories, but the plugin Custom Variables is required. Please enable the plugin CustomVariables (or ask your Piwik admin).</span> + <span ng-show="customVariablesActivated"> {{ 'Goals_Optional'|translate }} {{ 'SitesManager_SearchCategoryDesc'|translate }} <br/> </span> + + <br/> + </td> + </tr> + + <tr ng-show="customVariablesActivated"> + <td> + <label>{{ 'SitesManager_SearchCategoryLabel' | translate }} + <input ng-list size="15" ng-model="globalSettings.searchCategoryParametersGlobal"> + </label> + </td> + <td> + <div class="ui-inline-help" style='width: 200px;'> + {{ 'Goals_Optional'|translate }} {{ 'SitesManager_SearchCategoryParametersDesc'|translate }} + </div> + </td> + </tr> + + <tr> + <td colspan="2"> + <strong>{{ 'SitesManager_DefaultTimezoneForNewWebsites'|translate }}</strong> + + <p>{{ 'SitesManager_SelectDefaultTimezone'|translate }} </p> + </td> + </tr> + + <tr> + <td> + <select + ng-model="globalSettings.defaultTimezone" + ng-options="t.code as t.label group by t.group for t in timezones"> + </select> + </td> + <td ng-include="'plugins/SitesManager/templates/help/timezone-help.html'"> + </td> + </tr> + + <tr> + <td colspan="2"> + <strong>{{ 'SitesManager_DefaultCurrencyForNewWebsites'|translate }}</strong> + + <p>{{ 'SitesManager_SelectDefaultCurrency'|translate }}</p> + </td> + </tr> + <tr> + <td> + <select + ng-model="globalSettings.defaultCurrency" + ng-options="k as v for (k, v) in currencies"> + </select> + </td> + <td> + <div class="ui-inline-help">{{ 'SitesManager_CurrencySymbolWillBeUsedForGoals' | translate }}</div> + </td> + </tr> + </table> + + <span style="margin-left:20px;"> + <input type="submit" class="submit" ng-click="saveGlobalSettings()" value="{{ 'General_Save'|translate }}"/> + </span> + +</div> diff --git a/plugins/SitesManager/templates/global-settings.twig b/plugins/SitesManager/templates/global-settings.twig deleted file mode 100644 index 2d69ee15e3..0000000000 --- a/plugins/SitesManager/templates/global-settings.twig +++ /dev/null @@ -1,178 +0,0 @@ -{% if isSuperUser %} - <br/> - - <h2 id="globalSettings">{{ 'SitesManager_GlobalWebsitesSettings'|translate }}</h2> - <br/> - <table style="width:600px;" class="adminTable"> - - <tr> - <td colspan="2"> - <strong>{{ 'SitesManager_GlobalListExcludedIps'|translate }}</strong> - - <p>{{ 'SitesManager_ListOfIpsToBeExcludedOnAllWebsites'|translate }} </p> - </td> - </tr> - <tr> - <td> - <textarea cols="30" rows="3" id="globalExcludedIps"> - {{- globalExcludedIps -}} - </textarea> - </td> - <td> - <label for="globalExcludedIps">{{ excludedIpHelp }}</label> - </td> - </tr> - - <tr> - <td colspan="2"> - <strong>{{ 'SitesManager_GlobalListExcludedQueryParameters'|translate }}</strong> - - <p>{{ 'SitesManager_ListOfQueryParametersToBeExcludedOnAllWebsites'|translate }} </p> - </td> - </tr> - - <tr> - <td> - <textarea cols="30" rows="3" id="globalExcludedQueryParameters"> - {{- globalExcludedQueryParameters -}} - </textarea> - </td> - <td> - <label for="globalExcludedQueryParameters">{{ excludedQueryParametersHelp }}</label> - </td> - </tr> - - {# global excluded user agents #} - <tr> - <td colspan="2"> - <strong>{{ 'SitesManager_GlobalListExcludedUserAgents'|translate }}</strong> - - <p>{{ 'SitesManager_GlobalListExcludedUserAgents_Desc'|translate }}</p> - </td> - </tr> - - <tr> - <td> - <textarea cols="30" rows="3" id="globalExcludedUserAgents"> - {{- globalExcludedUserAgents -}} - </textarea> - </td> - <td><label for="globalExcludedUserAgents">{{ excludedUserAgentsHelp }}</label> - </td> - </tr> - - <tr> - <td> - <input type="checkbox" id="enableSiteUserAgentExclude" name="enableSiteUserAgentExclude" - {% if allowSiteSpecificUserAgentExclude %}checked="checked"{% endif %}/> - <label for="enableSiteUserAgentExclude"> - {{ 'SitesManager_EnableSiteSpecificUserAgentExclude'|translate }} - </label> - <span id="enableSiteUserAgentExclude-loading" class="loadingPiwik" style="display:none;"> - <img src="plugins/Morpheus/images/loading-blue.gif"/> - </span> - </td> - <td> - {{ piwik.inlineHelp('SitesManager_EnableSiteSpecificUserAgentExclude_Help'|translate('<a href="#editSites">','</a>'))|raw }} - </td> - </tr> - - {# global keep URL fragments #} - <tr> - <td colspan="2"> - <strong>{{ 'SitesManager_KeepURLFragments'|translate }}</strong> - - <p>{{ 'SitesManager_KeepURLFragmentsHelp'|translate("<em>#</em>","<em>example.org/index.html#first_section</em>","<em>example.org/index.html</em>")|raw }} - </p> - <input type="checkbox" id="globalKeepURLFragments" name="globalKeepURLFragments" - {% if globalKeepURLFragments %}checked="checked"{% endif %}/> - <label for="globalKeepURLFragments">{{ 'SitesManager_KeepURLFragmentsLong'|translate }}</label> - - <p>{{ 'SitesManager_KeepURLFragmentsHelp2'|translate }}</p> - </td> - </tr> - - {# global site search #} - <tr> - <td colspan="2"> - <strong id="globalSiteSearch">{{ 'SitesManager_TrackingSiteSearch'|translate }}</strong> - - <p>{{ sitesearchIntro }}</p> - <span class="form-description" style="font-size:8pt;"> - {{ 'SitesManager_SearchParametersNote'|translate }} {{ 'SitesManager_SearchParametersNote2'|translate }} - </span> - </td> - </tr> - <tr> - <td colspan="2"> - <label>{{ searchKeywordLabel }} - <input type="text" size="15" id="globalSearchKeywordParameters" - value="{{ globalSearchKeywordParameters|raw }}"/> - - <div style='width: 200px;float:right;'>{{ searchKeywordHelp }}</div> - </label> - </td> - </tr> - - <tr> - <td colspan="2"> - {% if not isSearchCategoryTrackingEnabled %} - <input value='globalSearchCategoryParametersIsDisabled' id="globalSearchCategoryParameters" - type='hidden'/> - <span class='form-description'>Note: you could also track your Internal Search Engine Categories, but the plugin Custom Variables is required. Please enable the plugin CustomVariables (or ask your Piwik admin).</span> - {% else %} - {{ 'Goals_Optional'|translate }} {{ 'SitesManager_SearchCategoryDesc'|translate }} <br/> - </td> - </tr> - <tr> - <td colspan="2"> - <label>{{ searchCategoryLabel }} - <input type="text" size="15" id="globalSearchCategoryParameters" - value="{{ globalSearchCategoryParameters|raw }}"/> - - <div style='width: 200px;float:right;'>{{ searchCategoryHelp }}</div> - </label> - {% endif %} - </td> - </tr> - - <tr> - <td colspan="2"> - <strong>{{ 'SitesManager_DefaultTimezoneForNewWebsites'|translate }}</strong> - - <p>{{ 'SitesManager_SelectDefaultTimezone'|translate }} </p> - </td> - </tr> - <tr> - <td> - <div id='defaultTimezone'></div> - </td> - <td> - {{ defaultTimezoneHelp }} - </td> - </tr> - - <tr> - <td colspan="2"> - <strong>{{ 'SitesManager_DefaultCurrencyForNewWebsites'|translate }}</strong> - - <p>{{ 'SitesManager_SelectDefaultCurrency'|translate }}</p> - </td> - </tr> - <tr> - <td> - <div id='defaultCurrency'></div> - </td> - <td> - {{ currencyHelpPlain }} - </td> - </tr> - </table> - - <span style="margin-left:20px;"> - <input type="submit" class="submit" id='globalSettingsSubmit' value="{{ 'General_Save'|translate }}"/> - </span> - - {{ ajax.errorDiv('ajaxErrorGlobalSettings') }} - {{ ajax.loadingDiv('ajaxLoadingGlobalSettings') }} -{% endif %} diff --git a/plugins/SitesManager/templates/help/excluded-ip-help.html b/plugins/SitesManager/templates/help/excluded-ip-help.html new file mode 100644 index 0000000000..d652d1d4d1 --- /dev/null +++ b/plugins/SitesManager/templates/help/excluded-ip-help.html @@ -0,0 +1,8 @@ +<div class="ui-inline-help"> + + {{ 'SitesManager_HelpExcludedIps' | translate : '1.2.3.*' : '1.2.*.*' }} + + <br/><br/> + + <span ng-bind-html="'SitesManager_YourCurrentIpAddressIs'|translate:'<i>' + currentIpAddress + '</i>'"></span> +</div> diff --git a/plugins/SitesManager/templates/help/excluded-query-parameters-help.html b/plugins/SitesManager/templates/help/excluded-query-parameters-help.html new file mode 100644 index 0000000000..33b09e91c9 --- /dev/null +++ b/plugins/SitesManager/templates/help/excluded-query-parameters-help.html @@ -0,0 +1,8 @@ +<div class="ui-inline-help"> + + {{ 'SitesManager_ListOfQueryParametersToExclude'|translate }} + + <br/><br/> + + {{ 'SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters'|translate:'phpsessid, sessionid, ...' }} +</div> diff --git a/plugins/SitesManager/templates/help/excluded-user-agents-help.html b/plugins/SitesManager/templates/help/excluded-user-agents-help.html new file mode 100644 index 0000000000..d85fd6a79c --- /dev/null +++ b/plugins/SitesManager/templates/help/excluded-user-agents-help.html @@ -0,0 +1,8 @@ +<div class="ui-inline-help"> + + {{ 'SitesManager_GlobalExcludedUserAgentHelp1'|translate }} + + <br/><br/> + + {{ 'SitesManager_GlobalListExcludedUserAgents_Desc'|translate }} {{ 'SitesManager_GlobalExcludedUserAgentHelp2'|translate }} +</div> diff --git a/plugins/SitesManager/templates/help/timezone-help.html b/plugins/SitesManager/templates/help/timezone-help.html new file mode 100644 index 0000000000..1787541516 --- /dev/null +++ b/plugins/SitesManager/templates/help/timezone-help.html @@ -0,0 +1,21 @@ +<div class="ui-inline-help"> + + <span ng-switch="timezoneSupportEnabled"> + + <span ng-switch-default> + {{ 'SitesManager_AdvancedTimezoneSupportNotFound'|translate }} + </span> + + <span ng-switch-when="true"> + {{ 'SitesManager_ChooseCityInSameTimezoneAsYou'|translate }} + </span> + </span> + + <br/><br/> + + {{ 'SitesManager_UTCTimeIs'| translate : (utcTime | date :Â 'yyyy-MM-dd HH:mm:ss') }} + + <br/><br/> + + {{ 'SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward'|translate }} +</div> diff --git a/plugins/SitesManager/templates/index.html b/plugins/SitesManager/templates/index.html new file mode 100644 index 0000000000..9ecd346dff --- /dev/null +++ b/plugins/SitesManager/templates/index.html @@ -0,0 +1,11 @@ +<div ng-controller="SitesManagerController"> + + <div ng-include="'plugins/SitesManager/templates/sites-manager-header.html'"></div> + + <div ng-include="'plugins/SitesManager/templates/loading.html'"></div> + + <div ng-include="'plugins/SitesManager/templates/sites-list/sites-list.html'"></div> + + <div ng-include="'plugins/SitesManager/templates/global-settings.html'"></div> + +</div> diff --git a/plugins/SitesManager/templates/index.twig b/plugins/SitesManager/templates/index.twig index 0720410640..40cf84c0f2 100644 --- a/plugins/SitesManager/templates/index.twig +++ b/plugins/SitesManager/templates/index.twig @@ -2,65 +2,6 @@ {% block content %} - {% import 'macros.twig' as piwik %} - {% import 'ajaxMacros.twig' as ajax %} - - {% set excludedIpHelp %} - {{ 'SitesManager_HelpExcludedIps'|translate("1.2.3.*","1.2.*.*") }} - <br/><br/> - {{ 'SitesManager_YourCurrentIpAddressIs'|translate("<i>" ~ currentIpAddress ~ "</i>")|raw }} - {% endset %} - {% set excludedIpHelp=piwik.inlineHelp(excludedIpHelp) %} - - {% set defaultTimezoneHelpPlain %} - {% if timezoneSupported %} - {{ 'SitesManager_ChooseCityInSameTimezoneAsYou'|translate }} - {% else %} - {{ 'SitesManager_AdvancedTimezoneSupportNotFound'|translate }} - {% endif %} - <br/><br/> - {{ 'SitesManager_UTCTimeIs'|translate(utcTime) }} - {% endset %} - {% set defaultTimezoneHelp=piwik.inlineHelp(defaultTimezoneHelpPlain) %} - - {% set currencyHelpPlain %} - {{ piwik.inlineHelp('SitesManager_CurrencySymbolWillBeUsedForGoals'|translate) }} - {% endset %} - - {% set excludedQueryParametersHelp %} - {{ 'SitesManager_ListOfQueryParametersToExclude'|translate }} - <br/><br/> - {{ 'SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters'|translate("phpsessid, sessionid, ...") }} - {% endset %} - {% set excludedQueryParametersHelp=piwik.inlineHelp(excludedQueryParametersHelp) %} - - {% set excludedUserAgentsHelp %} - {{ 'SitesManager_GlobalExcludedUserAgentHelp1'|translate }} - <br/><br/> - {{ 'SitesManager_GlobalListExcludedUserAgents_Desc'|translate }} {{ 'SitesManager_GlobalExcludedUserAgentHelp2'|translate }} - {% endset %} - {% set excludedUserAgentsHelp=piwik.inlineHelp(excludedUserAgentsHelp) %} - - {% set searchCategoryHelpText %} - {{ 'Goals_Optional'|translate }} {{ 'SitesManager_SearchCategoryParametersDesc'|translate }} - {% endset %} - - {% set searchCategoryHelp=piwik.inlineHelp(searchCategoryHelpText) %} - - {% set searchCategoryLabel='SitesManager_SearchCategoryLabel'|translate %} - - {% set searchKeywordHelp=piwik.inlineHelp('SitesManager_SearchKeywordParametersDesc'|translate) %} - - {% set sitesearchIntro='SitesManager_SiteSearchUse'|translate %} - - {% set searchKeywordLabel='SitesManager_SearchKeywordLabel'|translate %} - - {% include '@SitesManager/sites-manager-heading.twig' %} - - {% include '@SitesManager/sites-management.twig' %} - - {% include '@SitesManager/global-settings.twig' %} - - {% include '@SitesManager/init-script.twig' %} + <div ng-include="'plugins/SitesManager/templates/index.html'"></div> {% endblock %} diff --git a/plugins/SitesManager/templates/init-script.twig b/plugins/SitesManager/templates/init-script.twig deleted file mode 100644 index 98a1a5e1dd..0000000000 --- a/plugins/SitesManager/templates/init-script.twig +++ /dev/null @@ -1,63 +0,0 @@ -{% set ecommerceHelpPlain %} - {{ 'SitesManager_EcommerceHelp'|translate }} - <br/> - {{ 'SitesManager_PiwikOffersEcommerceAnalytics'|translate("<a href='http://piwik.org/docs/ecommerce-analytics/' target='_blank'>","</a>")|raw }} -{% endset %} - -{% set timezoneHelpPlain %} - {{ defaultTimezoneHelpPlain }} - <br/><br/> - {{ 'SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward'|translate }} -{% endset %} - -{% set keepURLFragmentSelectHTML %} - <h4 style="display:inline-block;">{{ 'SitesManager_KeepURLFragmentsLong'|translate }}</h4> - - <select id="keepURLFragmentSelect"> - <option value="0"> {% if globalKeepURLFragments %}{{ 'General_Yes'|translate }}{% else %}{{ 'General_No'|translate }}{% endif %} - ({{ 'General_Default'|translate }}) - </option> - <option value="1">{{ 'General_Yes'|translate }}</option> - <option value="2">{{ 'General_No'|translate }}</option> - </select> -{% endset %} - -<script type="text/javascript"> - - var excludedIpHelp = '{{ excludedIpHelp|e('js') }}'; - var aliasUrlsHelp = '{{ piwik.inlineHelp('SitesManager_AliasUrlHelp'|translate)|e('js') }}'; - var excludedQueryParametersHelp = '{{ excludedQueryParametersHelp|e('js') }}'; - var excludedUserAgentsHelp = '{{ excludedUserAgentsHelp|e('js') }}'; - var timezoneHelp = '{{ piwik.inlineHelp(timezoneHelpPlain)|e('js') }}'; - var currencyHelp = '{{ currencyHelpPlain|e('js') }}'; - var ecommerceHelp = '{{ piwik.inlineHelp(ecommerceHelpPlain)|e('js') }}'; - var searchKeywordHelp = '{{ searchKeywordHelp|e('js') }}'; - var searchCategoryHelp = '{{ searchCategoryHelp|e('js') }}'; - var sitesearchDesc = '{{ 'SitesManager_TrackingSiteSearch'|translate|e('js') }}'; - - var ecommerceEnabled = '{{ 'SitesManager_EnableEcommerce'|translate|e('js') }}'; - var ecommerceDisabled = '{{ 'SitesManager_NotAnEcommerceSite'|translate|e('js') }}'; - var sitesearchEnabled = '{{ 'SitesManager_EnableSiteSearch'|translate|e('js') }}'; - var sitesearchDisabled = '{{ 'SitesManager_DisableSiteSearch'|translate|e('js') }}'; - - var keepURLFragmentSelectHTML = '{{ keepURLFragmentSelectHTML|e('js') }}'; - - var searchKeywordLabel = '{{ searchKeywordLabel|e('js') }}'; - var searchCategoryLabel = '{{ searchCategoryLabel|e('js') }}'; - - var sitesearchIntro = '{{ piwik.inlineHelp(sitesearchIntro)|e('js') }}'; - var sitesearchUseDefault = '{% if isSuperUser %}{{ 'SitesManager_SearchUseDefault'|translate('<a href="#globalSiteSearch">','</a>')|e('js') }}{% else %}{{ 'SitesManager_SearchUseDefault'|translate('','')|e('js') }}{% endif %}'; - var strDefault = '{{ 'General_Default'|translate|e('js') }}'; - - var sitesManager = new SitesManager({{ timezones|raw }}, {{ currencies|raw }}, '{{ defaultTimezone|raw }}', '{{ defaultCurrency|raw }}'); - - $(function () { - sitesManager.init(); - }); - - {% if showAddSite %} - $(document).ready(function () { - $('.addRowSite:first').trigger('click'); - }); - {% endif %} -</script>
\ No newline at end of file diff --git a/plugins/SitesManager/templates/loading.html b/plugins/SitesManager/templates/loading.html new file mode 100644 index 0000000000..6aaa13d436 --- /dev/null +++ b/plugins/SitesManager/templates/loading.html @@ -0,0 +1,6 @@ +<div ng-show="loading"> + <div class="loadingPiwik"> + <img src="plugins/Morpheus/images/loading-blue.gif" alt="{{ 'General_LoadingData'|translate }}" /> + {{ 'General_LoadingData'|translate }} + </div> +</div>
\ No newline at end of file diff --git a/plugins/SitesManager/templates/sites-list/add-site-link.html b/plugins/SitesManager/templates/sites-list/add-site-link.html new file mode 100644 index 0000000000..fd17255269 --- /dev/null +++ b/plugins/SitesManager/templates/sites-list/add-site-link.html @@ -0,0 +1,3 @@ +<a ng-show="hasSuperUserAccess && !siteIsBeingEdited" class="addRowSite" ng-click="addSite()"> + {{ 'SitesManager_AddSite'|translate }} +</a> diff --git a/plugins/SitesManager/templates/sites-list/alias-urls-field.html b/plugins/SitesManager/templates/sites-list/alias-urls-field.html new file mode 100644 index 0000000000..456f64c446 --- /dev/null +++ b/plugins/SitesManager/templates/sites-list/alias-urls-field.html @@ -0,0 +1,23 @@ +<span ng-switch-default> + <div ng-repeat="url in site.alias_urls"> + {{ url | prettyUrl }} + </div> +</span> + +<span ng-switch-when="true"> + + <div sites-manager-multiline-field field="site.alias_urls" cols="25" rows="3"></div> + + <div class="ui-inline-help"> + {{ 'SitesManager_AliasUrlHelp' | translate }} + </div> + + <h4 style="display:inline-block;"> + {{ 'SitesManager_KeepURLFragmentsLong'|translate }} + </h4> + + <select ng-options="key as value for (key, value) in keepURLFragmentsOptions" + ng-model="site.keep_url_fragment" + > + </select> +</span> diff --git a/plugins/SitesManager/templates/sites-list/site-fields.html b/plugins/SitesManager/templates/sites-list/site-fields.html new file mode 100644 index 0000000000..7e8e2d4587 --- /dev/null +++ b/plugins/SitesManager/templates/sites-list/site-fields.html @@ -0,0 +1,182 @@ +<td sites-manager-edit-trigger> + {{ site.idsite }} +</td> + +<td ng-switch="site.editMode" sites-manager-edit-trigger> + + <span ng-switch-default> + {{ site.name }} + </span> + + <span ng-switch-when="true"> + + <input type="text" ng-model="site.name"/> + + <br/> + <br/> + + <input type="submit" class="submit" value="{{ 'General_Save' | translate }}" ng-click="saveSite()"/> + + <br/> + <br/> + + <span class="link_but" ng-click="cancelEditSite($event)"> + <span>{{ 'General_OrCancel' | translate:'':'' }}</span> + </span> + </span> + +</td> + +<td + sites-manager-edit-trigger + ng-include="'plugins/SitesManager/templates/sites-list/alias-urls-field.html'" + ng-switch="site.editMode"> +</td> + +<td ng-switch="site.editMode" sites-manager-edit-trigger> + + <span ng-switch-default> + <div ng-repeat="ip in site.excluded_ips"> + {{ ip }} + </div> + </span> + + <span ng-switch-when="true"> + + <div sites-manager-multiline-field field="site.excluded_ips" cols="20" rows="4"></div> + + <div ng-include="'plugins/SitesManager/templates/help/excluded-ip-help.html'"></div> + </span> + +</td> + +<td ng-switch="site.editMode" sites-manager-edit-trigger> + + <span ng-switch-default> + <div ng-repeat="parameter in site.excluded_parameters"> + {{ parameter }} + </div> + </span> + + <span ng-switch-when="true"> + + <div sites-manager-multiline-field field="site.excluded_parameters" cols="20" rows="4"></div> + + <div ng-include="'plugins/SitesManager/templates/help/excluded-query-parameters-help.html'"></div> + </span> + +</td> + +<td ng-show="globalSettings.siteSpecificUserAgentExcludeEnabled" ng-switch="site.editMode" sites-manager-edit-trigger> + + <span ng-switch-default> + <div ng-repeat="userAgent in site.excluded_user_agents"> + {{ userAgent }} + </div> + </span> + + <span ng-switch-when="true"> + + <div sites-manager-multiline-field field="site.excluded_user_agents" cols="20" rows="4"></div> + + <div ng-include="'plugins/SitesManager/templates/help/excluded-user-agents-help.html'"></div> + </span> + +</td> + +<td + sites-manager-edit-trigger + ng-include="'plugins/SitesManager/templates/sites-list/site-search-field.html'" + ng-switch="site.editMode"> +</td> + + +<td ng-switch="site.editMode" sites-manager-edit-trigger> + + <span ng-switch-default> + {{ site.timezone }} + </span> + + <span ng-switch-when="true"> + <select + ng-model="site.timezone" + ng-options="t.code as t.label group by t.group for t in timezones"> + </select> + + <div ng-include="'plugins/SitesManager/templates/help/timezone-help.html'"></div> + + </span> +</td> + +<td ng-switch="site.editMode" sites-manager-edit-trigger> + + <span ng-switch-default> + {{ site.currency }} + </span> + + <span ng-switch-when="true"> + + <select + ng-model="site.currency" + ng-options="k as v for (k, v) in currencies"> + </select> + + <div class="ui-inline-help"> + {{ 'SitesManager_CurrencySymbolWillBeUsedForGoals' | translate }} + </div> + + </span> +</td> + +<td ng-switch="site.editMode" sites-manager-edit-trigger> + + <span ng-switch-default ng-switch="site.ecommerce"> + + <span ng-switch-default>-</span> + <span ng-switch-when="1">{{ 'General_Yes'|translate }}</span> + </span> + + <span ng-switch-when="true"> + + <select ng-options="option.key as option.value for option in eCommerceptions" ng-model="site.ecommerce"> + </select> + + <div class="ui-inline-help"> + {{ 'SitesManager_EcommerceHelp' | translate }} + <br/> + <span ng-bind-html="'SitesManager_PiwikOffersEcommerceAnalytics'|translate:'<a href=\'http://piwik.org/docs/ecommerce-analytics/\' target=\'_blank\'>':'</a>'"></span> + </div> + </span> +</td> + +<td ng-switch="site.editMode"> + + <span ng-switch-default class="link_but" ng-click="editSite()"> + <img src='plugins/Morpheus/images/ico_edit.png' + title="{{ 'General_Edit'|translate }}" + border="0" + /> + <span>{{ 'General_Edit'|translate }}</span> + </span> + + <span ng-switch-when="true"> + + <input type="submit" class="submit" value="{{ 'General_Save' | translate }}" ng-click="saveSite()"/> + </span> +</td> + +<td> + <span ng-show="site.idsite" class="link_but" ng-click="openDeleteDialog()"> + <img + src='plugins/Morpheus/images/ico_delete.png' + title="{{ 'General_Delete'|translate }}" + border="0"/> + <span>{{ 'General_Delete'|translate }}</span> + </span> +</td> + +<td> + <a ng-show="site.idsite" href="?module=CoreAdminHome&action=trackingCodeGenerator&idSite={{ site.idsite }}&updated=false"> + {{ 'SitesManager_ShowTrackingTag'|translate }} + </a> +</td> diff --git a/plugins/SitesManager/templates/sites-list/site-search-field.html b/plugins/SitesManager/templates/sites-list/site-search-field.html new file mode 100644 index 0000000000..c6754804e2 --- /dev/null +++ b/plugins/SitesManager/templates/sites-list/site-search-field.html @@ -0,0 +1,73 @@ +<span ng-switch-default ng-switch="site.sitesearch"> + <span ng-switch-when="1">{{ 'General_Yes'|translate }}</span> + <span ng-switch-default>-</span> +</span> + +<span ng-switch-when="true"> + + <select ng-options="option.key as option.value for option in siteSearchOptions" ng-model="site.sitesearch"> + </select> + + <div ng-show="site.sitesearch" style="font-size: 11px;"> + + <div ng-show="globalSettings.searchKeywordParametersGlobal.length"> + + <input type="checkbox" ng-model="site.useDefaultSiteSearchParams"> + + <span + ng-show="hasSuperUserAccess" + ng-bind-html="'SitesManager_SearchUseDefault'|translate:'<a href=\'#globalSettings\'>':'</a>'"> + </span> + <span ng-hide="hasSuperUserAccess"> + {{ 'SitesManager_SearchUseDefault' | translate:'':'' }} + </span> + + <span ng-show="site.useDefaultSiteSearchParams" class="form-description"> + + {{ 'SitesManager_SearchKeywordLabel' | translate }} + ({{ 'General_Default' | translate }}) : + + <span ng-repeat="param in globalSettings.searchKeywordParametersGlobal"> + {{ param }}<span ng-show="!$last">, </span> + </span> + + <span ng-show="globalSettings.searchCategoryParametersGlobal.length"> + & {{ 'SitesManager_SearchCategoryLabel' | translate }} : + <span ng-repeat="param in globalSettings.searchCategoryParametersGlobal"> + {{ param }}<span ng-show="!$last">, </span> + </span> + </span> + + </span> + + </div> + + <div ng-hide="site.useDefaultSiteSearchParams"> + + <br/> + + <label> + {{ 'SitesManager_SearchKeywordLabel' | translate }} + <input ng-list ng-model="site.sitesearch_keyword_parameters"> + <div class="ui-inline-help"> + {{ 'SitesManager_SearchKeywordParametersDesc' | translate }} + </div> + </label> + + <label ng-show="customVariablesActivated"> + {{ 'SitesManager_SearchCategoryLabel' | translate }} + <input ng-list ng-model="site.sitesearch_category_parameters"> + <div class="ui-inline-help"> + {{ 'Goals_Optional' | translate }} {{ 'SitesManager_SearchCategoryParametersDesc' | translate }} + </div> + </label> + + </div> + + </div> + + <div class="ui-inline-help" ng-show="site.sitesearch == 0 || site.useDefaultSiteSearchParams"> + {{ 'SitesManager_SiteSearchUse' | translate }} + </div> + +</span> diff --git a/plugins/SitesManager/templates/sites-list/sites-list.html b/plugins/SitesManager/templates/sites-list/sites-list.html new file mode 100644 index 0000000000..8252585d22 --- /dev/null +++ b/plugins/SitesManager/templates/sites-list/sites-list.html @@ -0,0 +1,39 @@ +<div class="entityContainer"> + + <div ng-repeat="site in sites" ng-include="'plugins/SitesManager/templates/dialogs/dialogs.html'"></div> + + <div ng-include="'plugins/SitesManager/templates/sites-list/add-site-link.html'"></div> + + <table class="entityTable dataTable"> + <thead> + <tr> + <th>{{ 'General_Id'|translate }}</th> + <th>{{ 'General_Name'|translate }}</th> + <th>{{ 'SitesManager_Urls'|translate }}</th> + <th>{{ 'SitesManager_ExcludedIps'|translate }}</th> + <th>{{ 'SitesManager_ExcludedParameters'|translate }}</th> + <th ng-show="globalSettings.siteSpecificUserAgentExcludeEnabled"> + {{ 'SitesManager_ExcludedUserAgents'|translate }} + </th> + <th>{{ 'Actions_SubmenuSitesearch'|translate }}</th> + <th>{{ 'SitesManager_Timezone'|translate }}</th> + <th>{{ 'SitesManager_Currency'|translate }}</th> + <th>{{ 'Goals_Ecommerce'|translate }}</th> + <th></th> + <th></th> + <th>{{ 'General_JsTrackingTag'|translate }}</th> + </tr> + </thead> + <tbody> + <tr + sites-manager-scroll + ng-controller="SitesManagerSiteController" + ng-repeat="site in sites" + ng-include="'plugins/SitesManager/templates/sites-list/site-fields.html'"> + </tr> + </tbody> + </table> + + <div ng-include="'plugins/SitesManager/templates/sites-list/add-site-link.html'"></div> + +</div> diff --git a/plugins/SitesManager/templates/sites-management.twig b/plugins/SitesManager/templates/sites-management.twig deleted file mode 100644 index 70fcf31d0a..0000000000 --- a/plugins/SitesManager/templates/sites-management.twig +++ /dev/null @@ -1,125 +0,0 @@ -{{ ajax.errorDiv() }} -{{ ajax.loadingDiv() }} - -{% set createNewWebsite %} -<a href="javascript:" class="addRowSite"> - {{ 'SitesManager_AddSite'|translate }} -</a> -{% endset %} - -{% if adminSites|length == 0 %} - {{ 'SitesManager_NoWebsites'|translate }} -{% else %} - - <div class="ui-confirm" id="confirm"> - <h2></h2> - <input role="yes" type="button" value="{{ 'General_Yes'|translate }}"/> - <input role="no" type="button" value="{{ 'General_No'|translate }}"/> - </div> - <div class="entityContainer"> - {% if isSuperUser %} - {{ createNewWebsite }} - {% endif %} - <table class="entityTable dataTable" id="editSites"> - <thead> - <tr> - <th>{{ 'General_Id'|translate }}</th> - <th>{{ 'General_Name'|translate }}</th> - <th>{{ 'SitesManager_Urls'|translate }}</th> - <th>{{ 'SitesManager_ExcludedIps'|translate }}</th> - <th>{{ 'SitesManager_ExcludedParameters'|translate|replace({" ":"<br />"})|raw }}</th> - <th id='exclude-user-agent-header' - {% if not allowSiteSpecificUserAgentExclude %}style="display:none;"{% endif %}>{{ 'SitesManager_ExcludedUserAgents'|translate }}</th> - <th>{{ 'Actions_SubmenuSitesearch'|translate }}</th> - <th>{{ 'SitesManager_Timezone'|translate }}</th> - <th>{{ 'SitesManager_Currency'|translate }}</th> - <th>{{ 'Goals_Ecommerce'|translate }}</th> - <th></th> - <th></th> - <th>{{ 'General_JsTrackingTag'|translate }}</th> - </tr> - </thead> - <tbody> - {% for i,site in adminSites %} - <tr id="row{{ site.idsite }}" data-keep-url-fragments="{{ site.keep_url_fragment }}"> - <td id="idSite">{{ site.idsite }}</td> - <td id="siteName" class="editableSite"> - {{- site.name|raw -}} - </td> - <td id="urls" class="editableSite"> - {%- for url in site.alias_urls -%} - {{- url|trim|replace({'http://': ''})|raw -}}<br /> - {%- endfor -%} - </td> - <td id="excludedIps" class="editableSite"> - {%- for ip in site.excluded_ips -%} - {{- ip -}}<br/> - {%- endfor -%} - </td> - <td id="excludedQueryParameters" class="editableSite"> - {%- for parameter in site.excluded_parameters -%} - {{- parameter|raw -}}<br /> - {%- endfor -%} - </td> - <td id="excludedUserAgents" class="editableSite" - {% if not allowSiteSpecificUserAgentExclude %}style="display:none;"{% endif %}> - {%- for ua in site.excluded_user_agents -%} - {{- ua|raw -}}<br /> - {%- endfor -%} - </td> - <td id="sitesearch" class="editableSite"> - {% if site.sitesearch %} - <span class="sitesearchActive">{{ 'General_Yes'|translate }}</span> - {% else %} - <span class="sitesearchInactive">-</span> - {% endif %} - <span class="sskp" sitesearch_keyword_parameters="{{- site.sitesearch_keyword_parameters -}}" - sitesearch_category_parameters="{{- site.sitesearch_category_parameters -}}" - id="sitesearch_parameters"> - </span> - </td> - <td id="timezone" class="editableSite">{{ site.timezone }}</td> - <td id="currency" class="editableSite">{{ site.currency }}</td> - <td id="ecommerce" class="editableSite"> - {% if site.ecommerce %} - <span class='ecommerceActive'>{{ 'General_Yes'|translate }}</span> - {% else %} - <span class='ecommerceInactive'>-</span> - {% endif %} - </td> - <td> - <span id="row{{ site.idsite }}" class='editSite link_but'> - <img src='plugins/Morpheus/images/ico_edit.png' title="{{ 'General_Edit'|translate }}" - border="0"/> - <span>{{ 'General_Edit'|translate }}</span> - </span> - </td> - <td> - <span id="row{{ site.idsite }}" class="deleteSite link_but"> - <img src='plugins/Morpheus/images/ico_delete.png' title="{{ 'General_Delete'|translate }}" - border="0"/> - <span>{{ 'General_Delete'|translate }}</span> - </span> - </td> - <td> - <a href='{{ linkTo({'module':'CoreAdminHome','action':'trackingCodeGenerator','idSite':site.idsite,'updated':false }) }}'> - {{ 'SitesManager_ShowTrackingTag'|translate }} - </a> - </td> - </tr> - {% endfor %} - </tbody> - </table> - {% if isSuperUser %} - {{ createNewWebsite }} - {% endif %} - </div> -{% endif %} - -{# Admin users use these values for Site Search column, when editing websites #} -{% if not isSuperUser %} - <input type="hidden" size="15" id="globalSearchKeywordParameters" - value="{{ globalSearchKeywordParameters }}"/> - <input type="hidden" size="15" id="globalSearchCategoryParameters" - value="{{ globalSearchCategoryParameters }}"/> -{% endif %} diff --git a/plugins/SitesManager/templates/sites-manager-header.html b/plugins/SitesManager/templates/sites-manager-header.html new file mode 100644 index 0000000000..968947182f --- /dev/null +++ b/plugins/SitesManager/templates/sites-manager-header.html @@ -0,0 +1,18 @@ +<h2 + piwik-enriched-headline + help-url="http://piwik.org/docs/manage-websites/" + feature-name="{{ 'SitesManager_WebsitesManagement'|translate }}"> + + {{ 'SitesManager_WebsitesManagement'|translate }} +</h2> + +<p> + {{ 'SitesManager_MainDescription'|translate }} + + <span ng-bind-html="'SitesManager_YouCurrentlyHaveAccessToNWebsites'|translate:'<strong>' + sites.length + '</strong>'"></span> + + <span ng-show="hasSuperUserAccess"> + <br/> + <span ng-bind-html="'SitesManager_SuperUserAccessCan'|translate:'<a href=\'#globalSettings\'>':'</a>'"></span> + </span> +</p> diff --git a/plugins/SitesManager/templates/sites-manager-heading.twig b/plugins/SitesManager/templates/sites-manager-heading.twig deleted file mode 100644 index da72ec0c53..0000000000 --- a/plugins/SitesManager/templates/sites-manager-heading.twig +++ /dev/null @@ -1,12 +0,0 @@ -<h2 piwik-enriched-headline help-url="http://piwik.org/docs/manage-websites/"> - {{ 'SitesManager_WebsitesManagement'|translate }} -</h2> - -<p> - {{ 'SitesManager_MainDescription'|translate }} - {{ 'SitesManager_YouCurrentlyHaveAccessToNWebsites'|translate("<strong>" ~ adminSitesCount ~ "</strong>")|raw }} - {% if isSuperUser %} - <br/> - {{ 'SitesManager_SuperUserAccessCan'|translate("<a href='#globalSettings'>","</a>")|raw }} - {% endif %} -</p>
\ No newline at end of file diff --git a/tests/PHPUnit/Core/HttpTest.php b/tests/PHPUnit/Core/HttpTest.php index e7cc44beef..5589a5c358 100644 --- a/tests/PHPUnit/Core/HttpTest.php +++ b/tests/PHPUnit/Core/HttpTest.php @@ -7,6 +7,9 @@ */ use Piwik\Http; +/** + * @group HttpTest + */ class HttpTest extends PHPUnit_Framework_TestCase { /** @@ -57,14 +60,13 @@ class HttpTest extends PHPUnit_Framework_TestCase /** * @group Core - * * @dataProvider getMethodsToTest */ public function testCustomByteRange($method) { $result = Http::sendHttpRequestBy( $method, - 'http://builds.piwik.org/piwik-latest.zip', + 'http://localhost/piwik.js', 30, $userAgent = null, $destinationPath = null, @@ -80,7 +82,7 @@ class HttpTest extends PHPUnit_Framework_TestCase $this->assertEquals(206, $result['status']); $this->assertTrue(isset($result['headers']['Content-Range'])); $this->assertEquals('bytes 10-20/', substr($result['headers']['Content-Range'], 0, 12)); - $this->assertEquals('application/zip', $result['headers']['Content-Type']); + $this->assertEquals('application/x-javascript', $result['headers']['Content-Type']); } } diff --git a/tests/PHPUnit/Fixture.php b/tests/PHPUnit/Fixture.php index bb6ce31018..c8e3529365 100644 --- a/tests/PHPUnit/Fixture.php +++ b/tests/PHPUnit/Fixture.php @@ -70,6 +70,7 @@ class Fixture extends PHPUnit_Framework_Assert public $printToScreen = false; public $testCaseClass = false; + public $extraPluginsToLoad = array(); public $testEnvironment = null; @@ -182,7 +183,7 @@ class Fixture extends PHPUnit_Framework_Assert Cache::deleteTrackerCache(); - static::loadAllPlugins($this->getTestEnvironment(), $this->testCaseClass); + static::loadAllPlugins($this->getTestEnvironment(), $this->testCaseClass, $this->extraPluginsToLoad); $updater = new Updater(); $componentsWithUpdateFile = CoreUpdater::getComponentUpdates($updater); @@ -285,20 +286,26 @@ class Fixture extends PHPUnit_Framework_Assert Translate::unloadEnglishTranslation(); } - public static function loadAllPlugins($testEnvironment = null, $testCaseClass = false) + public static function loadAllPlugins($testEnvironment = null, $testCaseClass = false, $extraPluginsToLoad = array()) { + $message = 'Load all plugins '; Log::getInstance()->customLogToFileForDebuggingIfYouStillSeeThisHereRemoveIt($message, false); + + if (empty($testEnvironment)) { + $testEnvironment = new Piwik_TestingEnvironment(); + } + DbHelper::createTables(); $pluginsManager = \Piwik\Plugin\Manager::getInstance(); - $plugins = $pluginsManager->getPluginsToLoadDuringTests(); + $plugins = $testEnvironment->getCoreAndSupportedPlugins(); // make sure the plugin that executed this method is included in the plugins to load - $extraPlugins = array( + $extraPlugins = array_merge($extraPluginsToLoad, array( \Piwik\Plugin::getPluginNameFromBacktrace(debug_backtrace()), \Piwik\Plugin::getPluginNameFromNamespace($testCaseClass) - ); + )); foreach ($extraPlugins as $pluginName) { if (empty($pluginName)) { continue; diff --git a/tests/PHPUnit/Integration/ArchiveCronTest.php b/tests/PHPUnit/Integration/ArchiveCronTest.php index 63778ce34c..25c8ff418a 100644 --- a/tests/PHPUnit/Integration/ArchiveCronTest.php +++ b/tests/PHPUnit/Integration/ArchiveCronTest.php @@ -15,6 +15,7 @@ use Piwik\Plugins\SitesManager\API; * This tests that, when archiving is disabled, * then Piwik API will return data that was pre-processed during archive.php run * + * @group ArchiveCronTest */ class Test_Piwik_Integration_ArchiveCronTest extends IntegrationTestCase { diff --git a/tests/PHPUnit/Integration/ArchiveWebTest.php b/tests/PHPUnit/Integration/ArchiveWebTest.php index 49c61792c7..c284a1ab12 100644 --- a/tests/PHPUnit/Integration/ArchiveWebTest.php +++ b/tests/PHPUnit/Integration/ArchiveWebTest.php @@ -11,6 +11,7 @@ use Piwik\Option; /** * Tests to call the archive.php script via web and check there is no error, * @group Integration + * @group ArchiveWebTest */ class Test_Piwik_Integration_ArchiveWebTest extends IntegrationTestCase { @@ -21,7 +22,7 @@ class Test_Piwik_Integration_ArchiveWebTest extends IntegrationTestCase if(self::isMysqli() && self::isTravisCI()) { $this->markTestSkipped('Skipping on Mysqli as it randomly fails.'); } - self::$fixture->setUp(); + self::deleteArchiveTables(); $host = Fixture::getRootUrl(); @@ -30,7 +31,7 @@ class Test_Piwik_Integration_ArchiveWebTest extends IntegrationTestCase $urlTmp = Option::get('piwikUrl'); Option::set('piwikUrl', $host . 'tests/PHPUnit/proxy/index.php'); - $streamContext = stream_context_create(array('http' => array('timeout' => 180))); + $streamContext = stream_context_create(array('http' => array('timeout' => 600))); $url = $host . 'tests/PHPUnit/proxy/archive.php?token_auth=' . $token . '&forcelogtoscreen=1'; $output = file_get_contents($url, 0, $streamContext); diff --git a/tests/PHPUnit/Integration/BackwardsCompatibility1XTest.php b/tests/PHPUnit/Integration/BackwardsCompatibility1XTest.php index 12d3ab1868..da23211edf 100644 --- a/tests/PHPUnit/Integration/BackwardsCompatibility1XTest.php +++ b/tests/PHPUnit/Integration/BackwardsCompatibility1XTest.php @@ -14,6 +14,8 @@ use Piwik\Updater; /** * Tests that Piwik 2.0 works w/ data from Piwik 1.12. + * + * @group BackwardsCompatibility1XTest */ class Test_Piwik_Integration_BackwardsCompatibility1XTest extends IntegrationTestCase { @@ -119,4 +121,4 @@ class Test_Piwik_Integration_BackwardsCompatibility1XTest extends IntegrationTes Test_Piwik_Integration_BackwardsCompatibility1XTest::$fixture = new Piwik_Test_Fixture_SqlDump(); Test_Piwik_Integration_BackwardsCompatibility1XTest::$fixture->dumpUrl = PIWIK_INCLUDE_PATH . Test_Piwik_Integration_BackwardsCompatibility1XTest::FIXTURE_LOCATION; -Test_Piwik_Integration_BackwardsCompatibility1XTest::$fixture->tablesPrefix = 'piwiktests_';
\ No newline at end of file +Test_Piwik_Integration_BackwardsCompatibility1XTest::$fixture->tablesPrefix = '';
\ No newline at end of file diff --git a/tests/PHPUnit/Integration/Core/TravisEnvironmentTest.php b/tests/PHPUnit/Integration/Core/TravisEnvironmentTest.php index e14dfedae3..7b6b233ef4 100644 --- a/tests/PHPUnit/Integration/Core/TravisEnvironmentTest.php +++ b/tests/PHPUnit/Integration/Core/TravisEnvironmentTest.php @@ -20,12 +20,13 @@ class Core_TravisEnvironmentTest extends DatabaseTestCase return; } - $this->assertTrue(in_array($mysqlAdapter, array('PDO_MYSQL', 'MYSQLI'))); + $this->assertTrue(in_array($mysqlAdapter, array('PDO_MYSQL', 'PDO\MYSQL', 'MYSQLI'))); $db = Piwik\Db::get(); switch ($mysqlAdapter) { case 'PDO_MYSQL': + case 'PDO\MYSQL': $this->assertInstanceOf('\Piwik\Db\Adapter\Pdo\Mysql', $db); break; case 'MYSQLI': diff --git a/tests/PHPUnit/Integration/LabelFilterTest.php b/tests/PHPUnit/Integration/LabelFilterTest.php index 5cdfe146a0..b8695f274b 100644 --- a/tests/PHPUnit/Integration/LabelFilterTest.php +++ b/tests/PHPUnit/Integration/LabelFilterTest.php @@ -9,6 +9,8 @@ /** * Tests the class LabelFilter. * This is not possible as unit test, since it loads data from the archive. + * + * @group LabelFilterTest */ class Test_Piwik_Integration_LabelFilter extends IntegrationTestCase { diff --git a/tests/PHPUnit/Integration/PrivacyManagerTest.php b/tests/PHPUnit/Integration/PrivacyManagerTest.php index 04a1c65faa..c8a6d975b0 100644 --- a/tests/PHPUnit/Integration/PrivacyManagerTest.php +++ b/tests/PHPUnit/Integration/PrivacyManagerTest.php @@ -65,12 +65,12 @@ class PrivacyManagerTest extends IntegrationTestCase // Temporarily disable the purge of old archives so that getNumeric('nb_visits') // in _addReportData does not trigger the data purge of data we've just imported - Rules::$purgeDisabledByTests = true; + \Piwik\ArchiveProcessor\Rules::disablePurgeOutdatedArchives(); self::_addLogData(); self::_addReportData(); - Rules::$purgeDisabledByTests = false; + \Piwik\ArchiveProcessor\Rules::enablePurgeOutdatedArchives(); self::$dbData = self::getDbTablesWithData(); } diff --git a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getIpFromHeader.xml b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getIpFromHeader.xml new file mode 100644 index 0000000000..7c42ec92e0 --- /dev/null +++ b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getIpFromHeader.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result>127.0.0.1</result>
\ No newline at end of file diff --git a/tests/PHPUnit/IntegrationTestCase.php b/tests/PHPUnit/IntegrationTestCase.php index 8ca26efcff..aa4ca74026 100755 --- a/tests/PHPUnit/IntegrationTestCase.php +++ b/tests/PHPUnit/IntegrationTestCase.php @@ -17,6 +17,7 @@ use Piwik\DbHelper; use Piwik\ReportRenderer; use Piwik\Translate; use Piwik\UrlHelper; +use Piwik\Log; require_once PIWIK_INCLUDE_PATH . '/libs/PiwikTracker/PiwikTracker.php'; @@ -72,6 +73,8 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase public static function setUpBeforeClass() { + Log::debug("Setting up " . get_called_class()); + if (!isset(static::$fixture)) { $fixture = new Fixture(); } else { @@ -89,6 +92,8 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase public static function tearDownAfterClass() { + Log::debug("Tearing down " . get_called_class()); + if (!isset(static::$fixture)) { $fixture = new Fixture(); } else { @@ -537,7 +542,7 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase } } - protected function _testApiUrl($testName, $apiId, $requestUrl, $compareAgainst) + protected function _testApiUrl($testName, $apiId, $requestUrl, $compareAgainst, $xmlFieldsToRemove = array()) { $isTestLogImportReverseChronological = strpos($testName, 'ImportedInRandomOrderTest') === false; $isLiveMustDeleteDates = (strpos($requestUrl, 'Live.getLastVisits') !== false @@ -561,6 +566,10 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase } $response = $this->normalizePdfContent($response); + if (!empty($xmlFieldsToRemove)) { + $response = $this->removeXmlFields($response, $xmlFieldsToRemove); + } + $expected = $this->loadExpectedFile($expectedFilePath); $expectedContent = $expected; $expected = $this->normalizePdfContent($expected); @@ -675,6 +684,11 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase 'prettyDate', 'serverDateTimePrettyFirstAction' ); + return $this->removeXmlFields($input, $toRemove); + } + + protected function removeXmlFields($input, $toRemove) + { foreach ($toRemove as $xml) { $input = $this->removeXmlElement($input, $xml); } @@ -815,7 +829,7 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase { // make sure that the reports we process here are not directly deleted in ArchiveProcessor/PluginsArchiver // (because we process reports in the past, they would sometimes be invalid, and would have been deleted) - Rules::$purgeDisabledByTests = true; + \Piwik\ArchiveProcessor\Rules::disablePurgeOutdatedArchives(); $testName = 'test_' . static::getOutputPrefix(); $this->missingExpectedFiles = array(); @@ -860,6 +874,7 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase isset($params['fileExtension']) ? $params['fileExtension'] : false); $compareAgainst = isset($params['compareAgainst']) ? ('test_' . $params['compareAgainst']) : false; + $xmlFieldsToRemove = @$params['xmlFieldsToRemove']; foreach ($requestUrls as $apiId => $requestUrl) { // this is a hack @@ -869,11 +884,11 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase } } - $this->_testApiUrl($testName . $testSuffix, $apiId, $requestUrl, $compareAgainst); + $this->_testApiUrl($testName . $testSuffix, $apiId, $requestUrl, $compareAgainst, $xmlFieldsToRemove); } // Restore normal purge behavior - Rules::$purgeDisabledByTests = false; + \Piwik\ArchiveProcessor\Rules::enablePurgeOutdatedArchives(); // change the language back to en if ($this->lastLanguage != 'en') { @@ -940,7 +955,7 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase { $result = array(); foreach (DbHelper::getTablesInstalled() as $tableName) { - $result[$tableName] = Db::fetchAll("SELECT * FROM $tableName"); + $result[$tableName] = Db::fetchAll("SELECT * FROM `$tableName`"); } return $result; } @@ -992,7 +1007,7 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase $rowsSql[] = "(" . implode(',', $values) . ")"; } - $sql = "INSERT INTO $table VALUES " . implode(',', $rowsSql); + $sql = "INSERT INTO `$table` VALUES " . implode(',', $rowsSql); Db::query($sql, $bind); } } @@ -1003,7 +1018,9 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase public static function deleteArchiveTables() { foreach (ArchiveTableCreator::getTablesArchivesInstalled() as $table) { - Db::query("DROP TABLE IF EXISTS $table"); + Log::debug("Dropping table $table"); + + Db::query("DROP TABLE IF EXISTS `$table`"); } ArchiveTableCreator::refreshTableList($forceReload = true); diff --git a/tests/PHPUnit/TestingEnvironment.php b/tests/PHPUnit/TestingEnvironment.php index 363c8a89b9..d2e8ad5c76 100644 --- a/tests/PHPUnit/TestingEnvironment.php +++ b/tests/PHPUnit/TestingEnvironment.php @@ -4,6 +4,7 @@ use Piwik\Common; use Piwik\Config; use Piwik\Piwik; use Piwik\Option; +use Piwik\Plugin\Manager as PluginManager; require_once PIWIK_INCLUDE_PATH . "/core/Config.php"; @@ -69,6 +70,8 @@ class Piwik_TestingEnvironment public function save() { + @mkdir(PIWIK_INCLUDE_PATH . '/tmp'); + $overridePath = PIWIK_INCLUDE_PATH . '/tmp/testingPathOverride.json'; file_put_contents($overridePath, json_encode($this->behaviorOverrideProperties)); } @@ -82,7 +85,9 @@ class Piwik_TestingEnvironment public function logVariables() { try { - if (isset($_SERVER['QUERY_STRING'])) { + if (isset($_SERVER['QUERY_STRING']) + && !$this->dontUseTestConfig + ) { \Piwik\Log::verbose("Test Environment Variables for (%s):\n%s", $_SERVER['QUERY_STRING'], print_r($this->behaviorOverrideProperties, true)); } } catch (Exception $ex) { @@ -90,6 +95,27 @@ class Piwik_TestingEnvironment } } + public function getCoreAndSupportedPlugins() + { + $disabledPlugins = PluginManager::getInstance()->getCorePluginsDisabledByDefault(); + $disabledPlugins[] = 'LoginHttpAuth'; + $disabledPlugins[] = 'ExampleVisualization'; + $disabledPlugins[] = 'PleineLune'; + + $disabledPlugins = array_diff($disabledPlugins, array( + 'DBStats', 'ExampleUI', 'ExampleCommand', 'ExampleSettingsPlugin' + )); + + return array_filter(PluginManager::getInstance()->readPluginsDirectory(), function ($pluginName) use ($disabledPlugins) { + if (in_array($pluginName, $disabledPlugins)) { + return false; + } + + return PluginManager::getInstance()->isPluginBundledWithCore($pluginName) + || PluginManager::getInstance()->isPluginOfficialAndNotBundledWithCore($pluginName); + }); + } + public static function addHooks() { $testingEnvironment = new Piwik_TestingEnvironment(); @@ -128,7 +154,7 @@ class Piwik_TestingEnvironment } $manager = \Piwik\Plugin\Manager::getInstance(); - $pluginsToLoad = $manager->getPluginsToLoadDuringTests(); + $pluginsToLoad = $testingEnvironment->getCoreAndSupportedPlugins(); if (!empty($testingEnvironment->pluginsToLoad)) { $pluginsToLoad = array_unique(array_merge($pluginsToLoad, $testingEnvironment->pluginsToLoad)); } @@ -137,7 +163,7 @@ class Piwik_TestingEnvironment $config->Plugins = array('Plugins' => $pluginsToLoad); - $trackerPluginsToLoad = array_filter($pluginsToLoad, function ($plugin) use ($manager) { + $trackerPluginsToLoad = array_filter($config->Plugins['Plugins'], function ($plugin) use ($manager) { return $manager->isTrackerPlugin($manager->loadPlugin($plugin)); }); @@ -164,6 +190,10 @@ class Piwik_TestingEnvironment }); } Piwik::addAction('Request.dispatch', function() use ($testingEnvironment) { + if (empty($_GET['ignoreClearAllViewDataTableParameters'])) { // TODO: should use testingEnvironment variable, not query param + \Piwik\ViewDataTable\Manager::clearAllViewDataTableParameters(); + } + if ($testingEnvironment->optionsOverride) { foreach ($testingEnvironment->optionsOverride as $name => $value) { Option::set($name, $value); diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI -Subproject 9f85062d38add9dc867aacd023e9e25879c98a7 +Subproject d1e74f222b172c6c6498c4f35168a07a952c9dd diff --git a/tests/PHPUnit/config.ini.travis.php b/tests/PHPUnit/config.ini.travis.php index c82be7b22b..40ca106158 100644 --- a/tests/PHPUnit/config.ini.travis.php +++ b/tests/PHPUnit/config.ini.travis.php @@ -7,8 +7,9 @@ host = localhost username = root password = dbname = piwik_tests -adapter = PDO_MYSQL -tables_prefix = piwiktests_ +adapter = PDO\MYSQL +; no table prefix for tests on travis +tables_prefix = ;charset = utf8 [database_tests] @@ -16,8 +17,9 @@ host = localhost username = root password = dbname = piwik_tests -adapter = PDO_MYSQL -tables_prefix = piwiktests_ +adapter = PDO\MYSQL +; no table prefix for tests on travis +tables_prefix = [log] log_writers[] = file diff --git a/tests/PHPUnit/proxy/includes.php b/tests/PHPUnit/proxy/includes.php index 3530b26934..6e3acc8af5 100644 --- a/tests/PHPUnit/proxy/includes.php +++ b/tests/PHPUnit/proxy/includes.php @@ -31,5 +31,5 @@ require_once $vendorDirectory . '/piwik/device-detector/DeviceDetector.php'; // Make sure Data processed in cron core:archive command is not being purged instantly (useful for: Integration/ArchiveCronTest) if(\Piwik\SettingsServer::isArchivePhpTriggered()) { - \Piwik\ArchiveProcessor\Rules::$purgeDisabledByTests = true; + \Piwik\ArchiveProcessor\Rules::disablePurgeOutdatedArchives(); }
\ No newline at end of file diff --git a/tests/PHPUnit/proxy/index.php b/tests/PHPUnit/proxy/index.php index 7d199a5615..594ad5da36 100644 --- a/tests/PHPUnit/proxy/index.php +++ b/tests/PHPUnit/proxy/index.php @@ -8,10 +8,6 @@ require realpath(dirname(__FILE__)) . "/includes.php"; Piwik_TestingEnvironment::addHooks(); -if (empty($_GET['ignoreClearAllViewDataTableParameters'])) { - \Piwik\ViewDataTable\Manager::clearAllViewDataTableParameters(); -} - \Piwik\Profiler::setupProfilerXHProf(); include PIWIK_INCLUDE_PATH . '/index.php';
\ No newline at end of file diff --git a/tests/PHPUnit/travis-helper.sh b/tests/PHPUnit/travis-helper.sh index 97db77f841..f8bc0fec89 100644 --- a/tests/PHPUnit/travis-helper.sh +++ b/tests/PHPUnit/travis-helper.sh @@ -47,6 +47,9 @@ local count=0 while [ $count -lt $timeout ]; do count=$(($count + 1)) #echo -ne "Still running ($count of $timeout): $@\r" + + # print invisible character + echo -ne "\xE2\x80\x8B" sleep 60 done diff --git a/tests/angularjs/scripts/install-ubuntu.sh b/tests/angularjs/scripts/install-ubuntu.sh index d0e319d81b..7f9e9a1cd9 100755 --- a/tests/angularjs/scripts/install-ubuntu.sh +++ b/tests/angularjs/scripts/install-ubuntu.sh @@ -26,8 +26,9 @@ cd $DIR travis_retry sudo apt-get -qq install python-software-properties travis_retry sudo apt-add-repository -y ppa:chris-lea/node.js > /dev/null travis_retry sudo apt-get -qq update -travis_retry sudo apt-get -qq install nodejs -travis_retry sudo apt-get -qq install npm +#travis_retry sudo apt-get -qq install nodejs +#travis_retry sudo apt-get -qq install npm + cd .. -sudo npm config set loglevel error -sudo npm install .
\ No newline at end of file +npm config set loglevel error +npm install .
\ No newline at end of file diff --git a/tests/javascript/index.php b/tests/javascript/index.php index dd0cdefe4c..3a9b383362 100644 --- a/tests/javascript/index.php +++ b/tests/javascript/index.php @@ -8,37 +8,37 @@ require_once(dirname(__FILE__).'/SQLite.php'); if(file_exists("stub.tpl")) { - echo file_get_contents("stub.tpl"); + echo file_get_contents("stub.tpl"); } ?> <script type="text/javascript"> function getToken() { - return "<?php $token = md5(uniqid(mt_rand(), true)); echo $token; ?>"; + return "<?php $token = md5(uniqid(mt_rand(), true)); echo $token; ?>"; } <?php $sqlite = false; if (file_exists("enable_sqlite")) { - if (class_exists('SQLite')) { - $sqlite = true; - } + if (class_exists('SQLite')) { + $sqlite = true; + } } if(!$sqlite) { - echo 'alert("WARNING: Javascript integration tests require sqlite, \n1) ensure this PHP extension is enabled to make sure you run all tests \napt-get install php5-sqlite \n2) Then please create an empty file enable_sqlite in tests/javascript/enable_sqlite \n3) Re-execute this page and make sure this popup does not display ");'; + echo 'alert("WARNING: Javascript integration tests require sqlite, \n1) ensure this PHP extension is enabled to make sure you run all tests \napt-get install php5-sqlite \n2) Then please create an empty file enable_sqlite in tests/javascript/enable_sqlite \n3) Re-execute this page and make sure this popup does not display ");'; } if ($sqlite) { echo ' var _paq = _paq || []; function testCallingTrackPageViewBeforeSetTrackerUrlWorks() { - _paq.push(["setCustomData", { "token" : getToken() }]); - _paq.push(["trackPageView", "Asynchronous Tracker ONE"]); - _paq.push(["setSiteId", 1]); - _paq.push(["setTrackerUrl", "piwik.php"]); + _paq.push(["setCustomData", { "token" : getToken() }]); + _paq.push(["trackPageView", "Asynchronous Tracker ONE"]); + _paq.push(["setSiteId", 1]); + _paq.push(["setTrackerUrl", "piwik.php"]); } function testTrackPageViewAsync() { - _paq.push(["trackPageView", "Asynchronous tracking TWO"]); + _paq.push(["trackPageView", "Asynchronous tracking TWO"]); } testCallingTrackPageViewBeforeSetTrackerUrlWorks(); @@ -57,96 +57,96 @@ testTrackPageViewAsync(); <script src="jslint/jslint.js" type="text/javascript"></script> <script type="text/javascript"> function _e(id){ - if (document.getElementById) - return document.getElementById(id); - if (document.layers) - return document[id]; - if (document.all) - return document.all[id]; + if (document.getElementById) + return document.getElementById(id); + if (document.layers) + return document[id]; + if (document.all) + return document.all[id]; } function loadJash() { - var jashDiv = _e('jashDiv'); + var jashDiv = _e('jashDiv'); - jashDiv.innerHTML = ''; - document.body.appendChild(document.createElement('script')).src='jash/Jash.js'; + jashDiv.innerHTML = ''; + document.body.appendChild(document.createElement('script')).src='jash/Jash.js'; } function dropCookie(cookieName, path, domain) { - var expiryDate = new Date(); - - expiryDate.setTime(expiryDate.getTime() - 3600); - document.cookie = cookieName + '=;expires=' + expiryDate.toGMTString() + - ';path=' + (path ? path : '') + - (domain ? ';domain=' + domain : ''); - document.cookie = cookieName + ';expires=' + expiryDate.toGMTString() + - ';path=' + (path ? path : '') + - (domain ? ';domain=' + domain : ''); + var expiryDate = new Date(); + + expiryDate.setTime(expiryDate.getTime() - 3600); + document.cookie = cookieName + '=;expires=' + expiryDate.toGMTString() + + ';path=' + (path ? path : '') + + (domain ? ';domain=' + domain : ''); + document.cookie = cookieName + ';expires=' + expiryDate.toGMTString() + + ';path=' + (path ? path : '') + + (domain ? ';domain=' + domain : ''); } function deleteCookies() { - // aggressively delete cookies - - // 1. get all cookies - var - cookies = (document.cookie).split(';'), - aCookie, - cookiePattern = new RegExp('^ *([^=]*)='), - cookieMatch, - cookieName, - domain, - domains = [], - path, - paths = []; - - cookies.push( '=' ); - - // 2. construct list of domains - domain = document.domain; - if (domain.substring(0, 1) !== '.') { - domain = '.' + domain; - } - domains.push( domain ); - while ((i = domain.indexOf('.')) >= 0) { - domain = domain.substring(i+1); - domains.push( domain ); - } - domains.push( '' ); - domains.push( null ); - - // 3. construct list of paths - path = window.location.pathname; - while ((i = path.lastIndexOf('/')) >= 0) { - paths.push(path + '/'); - paths.push(path); - path = path.substring(0, i); - } - paths.push( '/' ); - paths.push( '' ); - paths.push( null ); - - // 4. iterate through cookies - for (aCookie in cookies) { - if (Object.prototype.hasOwnProperty.call(cookies, aCookie)) { - - // 5. extract cookie name - cookieMatch = cookiePattern.exec(cookies[aCookie]); - if (cookieMatch) { - cookieName = cookieMatch[1]; - - // 6. iterate through domains - for (i = 0; i < domains.length; i++) { - - // 7. iterate through paths - for (j = 0; j < paths.length; j++) { - - // 8. drop cookie - dropCookie(cookieName, paths[j], domains[i]); - } - } - } - } - } + // aggressively delete cookies + + // 1. get all cookies + var + cookies = (document.cookie).split(';'), + aCookie, + cookiePattern = new RegExp('^ *([^=]*)='), + cookieMatch, + cookieName, + domain, + domains = [], + path, + paths = []; + + cookies.push( '=' ); + + // 2. construct list of domains + domain = document.domain; + if (domain.substring(0, 1) !== '.') { + domain = '.' + domain; + } + domains.push( domain ); + while ((i = domain.indexOf('.')) >= 0) { + domain = domain.substring(i+1); + domains.push( domain ); + } + domains.push( '' ); + domains.push( null ); + + // 3. construct list of paths + path = window.location.pathname; + while ((i = path.lastIndexOf('/')) >= 0) { + paths.push(path + '/'); + paths.push(path); + path = path.substring(0, i); + } + paths.push( '/' ); + paths.push( '' ); + paths.push( null ); + + // 4. iterate through cookies + for (aCookie in cookies) { + if (Object.prototype.hasOwnProperty.call(cookies, aCookie)) { + + // 5. extract cookie name + cookieMatch = cookiePattern.exec(cookies[aCookie]); + if (cookieMatch) { + cookieName = cookieMatch[1]; + + // 6. iterate through domains + for (i = 0; i < domains.length; i++) { + + // 7. iterate through paths + for (j = 0; j < paths.length; j++) { + + // 8. drop cookie + dropCookie(cookieName, paths[j], domains[i]); + } + } + } + } + } } </script> </head> @@ -188,239 +188,242 @@ var hasLoaded = false; function PiwikTest() { hasLoaded = true; - module('externals'); + module('externals'); - test("JSLint", function() { - expect(1); - var src = '<?php - $src = file_get_contents('../../js/piwik.js'); - $src = strtr($src, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n','</'=>'<\/')); - echo "$src"; ?>'; - ok( JSLINT(src), "JSLint" ); -// alert(JSLINT.report(true)); - }); + test("JSLint", function() { + expect(1); + var src = '<?php + $src = file_get_contents('../../js/piwik.js'); + $src = strtr($src, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n','</'=>'<\/')); + echo "$src"; ?>'; + ok( JSLINT(src), "JSLint" ); +// alert(JSLINT.report(true)); + }); + + test("JSON", function() { + expect(49); + + var tracker = Piwik.getTracker(), dummy; + + equal( typeof JSON2.stringify, 'function', 'JSON.stringify function' ); + equal( typeof JSON2.stringify(dummy), 'undefined', 'undefined' ); + + equal( JSON2.stringify(null), 'null', 'null' ); + equal( JSON2.stringify(true), 'true', 'true' ); + equal( JSON2.stringify(false), 'false', 'false' ); + ok( JSON2.stringify(0) === '0', 'Number 0' ); + ok( JSON2.stringify(1) === '1', 'Number 1' ); + ok( JSON2.stringify(-1) === '-1', 'Number -1' ); + ok( JSON2.stringify(42) === '42', 'Number 42' ); + + ok( JSON2.stringify(1.0) === '1.0' + || JSON2.stringify(1.0) === '1', 'float 1.0' ); + + equal( JSON2.stringify(1.1), '1.1', 'float 1.1' ); + equal( JSON2.stringify(""), '""', 'empty string' ); + equal( JSON2.stringify('"'), '"' + '\\' + '"' + '"', 'string "' ); + equal( JSON2.stringify('\\'), '"' + '\\\\' + '"', 'string \\' ); + + equal( JSON2.stringify("1"), '"1"', 'string "1"' ); + equal( JSON2.stringify("ABC"), '"ABC"', 'string ABC' ); + equal( JSON2.stringify("\x40\x41\x42\x43"), '"@ABC"', '\\x hex string @ABC' ); + + ok( JSON2.stringify("\u60a8\u597d") == '"您好"' + || JSON2.stringify("\u60a8\u597d") == '"\\u60a8\\u597d"', '\\u Unicode string 您好' ); + + ok( JSON2.stringify("ßéà êö您好") == '"ßéà êö您好"' + || JSON2.stringify("ßéà êö您好") == '"\\u00df\\u00e9\\u00e0\\u00ea\\u00f6\\u60a8\\u597d"', 'string non-ASCII text' ); + + equal( JSON2.stringify("20060228T08:00:00"), '"20060228T08:00:00"', 'string "20060228T08:00:00"' ); + + var d = new Date(); + d.setTime(1240013340000); + ok( JSON2.stringify(d) === '"2009-04-18T00:09:00Z"' + || JSON2.stringify(d) === '"2009-04-18T00:09:00.000Z"', 'Date'); - test("JSON", function() { - expect(49); + equal( JSON2.stringify([1, 2, 3]), '[1,2,3]', 'Array of numbers' ); + equal( JSON2.stringify({'key' : 'value'}), '{"key":"value"}', 'Object (members)' ); + equal( JSON2.stringify( + [ {'domains' : ['example.com', 'example.ca']}, + {'names' : ['Sean', 'Cathy'] } ] + ), '[{"domains":["example.com","example.ca"]},{"names":["Sean","Cathy"]}]', 'Nested members' ); - var tracker = Piwik.getTracker(), dummy; + equal( typeof eval('('+dummy+')'), 'undefined', 'eval undefined' ); - equal( typeof JSON2.stringify, 'function', 'JSON.stringify function' ); - equal( typeof JSON2.stringify(dummy), 'undefined', 'undefined' ); + equal( typeof JSON2.parse, 'function', 'JSON.parse function' ); - equal( JSON2.stringify(null), 'null', 'null' ); - equal( JSON2.stringify(true), 'true', 'true' ); - equal( JSON2.stringify(false), 'false', 'false' ); - ok( JSON2.stringify(0) === '0', 'Number 0' ); - ok( JSON2.stringify(1) === '1', 'Number 1' ); - ok( JSON2.stringify(-1) === '-1', 'Number -1' ); - ok( JSON2.stringify(42) === '42', 'Number 42' ); + // these throw a SyntaxError +// equal( typeof JSON2.parse('undefined'), 'undefined', 'undefined' ); +// equal( typeof JSON2.parse(dummy), 'undefined', 'undefined' ); +// equal( JSON2.parse('undefined'), dummy, 'undefined' ); +// equal( JSON2.parse('undefined'), undefined, 'undefined' ); - ok( JSON2.stringify(1.0) === '1.0' - || JSON2.stringify(1.0) === '1', 'float 1.0' ); + strictEqual( JSON2.parse('null'), null, 'null' ); + strictEqual( JSON2.parse('true'), true, 'true' ); + strictEqual( JSON2.parse('false'), false, 'false' ); - equal( JSON2.stringify(1.1), '1.1', 'float 1.1' ); - equal( JSON2.stringify(""), '""', 'empty string' ); - equal( JSON2.stringify('"'), '"' + '\\' + '"' + '"', 'string "' ); - equal( JSON2.stringify('\\'), '"' + '\\\\' + '"', 'string \\' ); + equal( JSON2.parse('0'), 0, 'Number 0' ); + equal( JSON2.parse('1'), 1, 'Number 1' ); + equal( JSON2.parse('-1'), -1, 'Number -1' ); + equal( JSON2.parse('42'), 42, 'Number 42' ); - equal( JSON2.stringify("1"), '"1"', 'string "1"' ); - equal( JSON2.stringify("ABC"), '"ABC"', 'string ABC' ); - equal( JSON2.stringify("\x40\x41\x42\x43"), '"@ABC"', '\\x hex string @ABC' ); + ok( JSON2.parse('1.0') === 1.0 + || JSON2.parse('1.0') === 1, 'float 1.0' ); - ok( JSON2.stringify("\u60a8\u597d") == '"您好"' - || JSON2.stringify("\u60a8\u597d") == '"\\u60a8\\u597d"', '\\u Unicode string 您好' ); + equal( JSON2.parse('1.1'), 1.1, 'float 1.1' ); + equal( JSON2.parse('""'), "", 'empty string' ); + equal( JSON2.parse('"' + '\\' + '"' + '"'), '"', 'string "' ); + equal( JSON2.parse('"\\\\"'), '\\', 'string \\' ); - ok( JSON2.stringify("ßéà êö您好") == '"ßéà êö您好"' - || JSON2.stringify("ßéà êö您好") == '"\\u00df\\u00e9\\u00e0\\u00ea\\u00f6\\u60a8\\u597d"', 'string non-ASCII text' ); + equal( JSON2.parse('"1"'), "1", 'string "1"' ); + equal( JSON2.parse('"ABC"'), "ABC", 'string ABC' ); + equal( JSON2.parse('"@ABC"'), "\x40\x41\x42\x43", 'Hex string @ABC' ); - equal( JSON2.stringify("20060228T08:00:00"), '"20060228T08:00:00"', 'string "20060228T08:00:00"' ); + ok( JSON2.parse('"您好"') == "\u60a8\u597d" + && JSON2.parse('"\\u60a8\\u597d"') == "您好", 'Unicode string 您好' ); - var d = new Date(); - d.setTime(1240013340000); - ok( JSON2.stringify(d) === '"2009-04-18T00:09:00Z"' - || JSON2.stringify(d) === '"2009-04-18T00:09:00.000Z"', 'Date'); + ok( JSON2.parse('"ßéà êö您好"') == "ßéà êö您好" + && JSON2.parse('"\\u00df\\u00e9\\u00e0\\u00ea\\u00f6\\u60a8\\u597d"') == "ßéà êö您好", 'string non-ASCII text' ); - equal( JSON2.stringify([1, 2, 3]), '[1,2,3]', 'Array of numbers' ); - equal( JSON2.stringify({'key' : 'value'}), '{"key":"value"}', 'Object (members)' ); - equal( JSON2.stringify( - [ {'domains' : ['example.com', 'example.ca']}, - {'names' : ['Sean', 'Cathy'] } ] - ), '[{"domains":["example.com","example.ca"]},{"names":["Sean","Cathy"]}]', 'Nested members' ); + equal( JSON2.parse('"20060228T08:00:00"'), "20060228T08:00:00", 'string "20060228T08:00:00"' ); - equal( typeof eval('('+dummy+')'), 'undefined', 'eval undefined' ); + // these aren't converted back to Date objects + equal( JSON2.parse('"2009-04-18T00:09:00Z"'), "2009-04-18T00:09:00Z", 'string "2009-04-18T00:09:00Z"' ); + equal( JSON2.parse('"2009-04-18T00:09:00.000Z"'), "2009-04-18T00:09:00.000Z", 'string "2009-04-18T00:09:00.000Z"' ); - equal( typeof JSON2.parse, 'function', 'JSON.parse function' ); - - // these throw a SyntaxError -// equal( typeof JSON2.parse('undefined'), 'undefined', 'undefined' ); -// equal( typeof JSON2.parse(dummy), 'undefined', 'undefined' ); -// equal( JSON2.parse('undefined'), dummy, 'undefined' ); -// equal( JSON2.parse('undefined'), undefined, 'undefined' ); - - strictEqual( JSON2.parse('null'), null, 'null' ); - strictEqual( JSON2.parse('true'), true, 'true' ); - strictEqual( JSON2.parse('false'), false, 'false' ); - - equal( JSON2.parse('0'), 0, 'Number 0' ); - equal( JSON2.parse('1'), 1, 'Number 1' ); - equal( JSON2.parse('-1'), -1, 'Number -1' ); - equal( JSON2.parse('42'), 42, 'Number 42' ); - - ok( JSON2.parse('1.0') === 1.0 - || JSON2.parse('1.0') === 1, 'float 1.0' ); - - equal( JSON2.parse('1.1'), 1.1, 'float 1.1' ); - equal( JSON2.parse('""'), "", 'empty string' ); - equal( JSON2.parse('"' + '\\' + '"' + '"'), '"', 'string "' ); - equal( JSON2.parse('"\\\\"'), '\\', 'string \\' ); - - equal( JSON2.parse('"1"'), "1", 'string "1"' ); - equal( JSON2.parse('"ABC"'), "ABC", 'string ABC' ); - equal( JSON2.parse('"@ABC"'), "\x40\x41\x42\x43", 'Hex string @ABC' ); - - ok( JSON2.parse('"您好"') == "\u60a8\u597d" - && JSON2.parse('"\\u60a8\\u597d"') == "您好", 'Unicode string 您好' ); - - ok( JSON2.parse('"ßéà êö您好"') == "ßéà êö您好" - && JSON2.parse('"\\u00df\\u00e9\\u00e0\\u00ea\\u00f6\\u60a8\\u597d"') == "ßéà êö您好", 'string non-ASCII text' ); - - equal( JSON2.parse('"20060228T08:00:00"'), "20060228T08:00:00", 'string "20060228T08:00:00"' ); - - // these aren't converted back to Date objects - equal( JSON2.parse('"2009-04-18T00:09:00Z"'), "2009-04-18T00:09:00Z", 'string "2009-04-18T00:09:00Z"' ); - equal( JSON2.parse('"2009-04-18T00:09:00.000Z"'), "2009-04-18T00:09:00.000Z", 'string "2009-04-18T00:09:00.000Z"' ); - - deepEqual( JSON2.parse('[1,2,3]'), [1, 2, 3], 'Array of numbers' ); - deepEqual( JSON2.parse('{"key":"value"}'), {'key' : 'value'}, 'Object (members)' ); - deepEqual( JSON2.parse('[{"domains":["example.com","example.ca"]},{"names":["Sean","Cathy"]}]'), - [ {'domains' : ['example.com', 'example.ca']}, {'names' : ['Sean', 'Cathy'] } ], 'Nested members' ); - }); - - module("core"); - - test("Basic requirements", function() { - expect(3); - - equal( typeof encodeURIComponent, 'function', 'encodeURIComponent' ); - ok( RegExp, "RegExp" ); - ok( Piwik, "Piwik" ); - }); - - test("Test API - addPlugin(), getTracker(), getHook(), and hook", function() { - expect(6); - - ok( Piwik.addPlugin, "Piwik.addPlugin" ); - - var tracker = Piwik.getTracker(); - - equal( typeof tracker, 'object', "Piwik.getTracker()" ); - equal( typeof tracker.getHook, 'function', "test Tracker getHook" ); - equal( typeof tracker.hook, 'object', "test Tracker hook" ); - equal( typeof tracker.getHook('test'), 'object', "test Tracker getHook('test')" ); - equal( typeof tracker.hook.test, 'object', "test Tracker hook.test" ); - }); - - test("API methods", function() { - expect(54); - - equal( typeof Piwik.addPlugin, 'function', 'addPlugin' ); - equal( typeof Piwik.getTracker, 'function', 'getTracker' ); - equal( typeof Piwik.getAsyncTracker, 'function', 'getAsyncTracker' ); - - var tracker; - - tracker = Piwik.getAsyncTracker(); - ok(tracker instanceof Object, 'getAsyncTracker'); - - tracker = Piwik.getTracker(); - ok(tracker instanceof Object, 'getTracker'); - - equal( typeof tracker.getVisitorId, 'function', 'getVisitorId' ); - equal( typeof tracker.getVisitorInfo, 'function', 'getVisitorInfo' ); - equal( typeof tracker.getAttributionInfo, 'function', 'getAttributionInfo' ); - equal( typeof tracker.getAttributionReferrerTimestamp, 'function', 'getAttributionReferrerTimestamp' ); - equal( typeof tracker.getAttributionReferrerUrl, 'function', 'getAttributionReferrerUrl' ); - equal( typeof tracker.getAttributionCampaignName, 'function', 'getAttributionCampaignName' ); - equal( typeof tracker.getAttributionCampaignKeyword, 'function', 'getAttributionCampaignKeyword' ); - equal( typeof tracker.setTrackerUrl, 'function', 'setTrackerUrl' ); - equal( typeof tracker.getRequest, 'function', 'getRequest' ); - equal( typeof tracker.setSiteId, 'function', 'setSiteId' ); - equal( typeof tracker.setCustomData, 'function', 'setCustomData' ); - equal( typeof tracker.getCustomData, 'function', 'getCustomData' ); - equal( typeof tracker.setCustomVariable, 'function', 'setCustomVariable' ); - equal( typeof tracker.getCustomVariable, 'function', 'getCustomVariable' ); - equal( typeof tracker.deleteCustomVariable, 'function', 'deleteCustomVariable' ); - equal( typeof tracker.setLinkTrackingTimer, 'function', 'setLinkTrackingTimer' ); - equal( typeof tracker.setDownloadExtensions, 'function', 'setDownloadExtensions' ); - equal( typeof tracker.addDownloadExtensions, 'function', 'addDownloadExtensions' ); - equal( typeof tracker.setDomains, 'function', 'setDomains' ); - equal( typeof tracker.setIgnoreClasses, 'function', 'setIgnoreClasses' ); - equal( typeof tracker.setRequestMethod, 'function', 'setRequestMethod' ); - equal( typeof tracker.setReferrerUrl, 'function', 'setReferrerUrl' ); - equal( typeof tracker.setCustomUrl, 'function', 'setCustomUrl' ); - equal( typeof tracker.setDocumentTitle, 'function', 'setDocumentTitle' ); - equal( typeof tracker.setDownloadClasses, 'function', 'setDownloadClasses' ); - equal( typeof tracker.setLinkClasses, 'function', 'setLinkClasses' ); - equal( typeof tracker.setCampaignNameKey, 'function', 'setCampaignNameKey' ); - equal( typeof tracker.setCampaignKeywordKey, 'function', 'setCampaignKeywordKey' ); - equal( typeof tracker.discardHashTag, 'function', 'discardHashTag' ); - equal( typeof tracker.setCookieNamePrefix, 'function', 'setCookieNamePrefix' ); - equal( typeof tracker.setCookieDomain, 'function', 'setCookieDomain' ); - equal( typeof tracker.setCookiePath, 'function', 'setCookiePath' ); - equal( typeof tracker.setVisitorCookieTimeout, 'function', 'setVisitorCookieTimeout' ); - equal( typeof tracker.setSessionCookieTimeout, 'function', 'setSessionCookieTimeout' ); - equal( typeof tracker.setReferralCookieTimeout, 'function', 'setReferralCookieTimeout' ); - equal( typeof tracker.setConversionAttributionFirstReferrer, 'function', 'setConversionAttributionFirstReferrer' ); - equal( typeof tracker.addListener, 'function', 'addListener' ); - equal( typeof tracker.enableLinkTracking, 'function', 'enableLinkTracking' ); - equal( typeof tracker.setHeartBeatTimer, 'function', 'setHeartBeatTimer' ); - equal( typeof tracker.killFrame, 'function', 'killFrame' ); - equal( typeof tracker.redirectFile, 'function', 'redirectFile' ); - equal( typeof tracker.setCountPreRendered, 'function', 'setCountPreRendered' ); - equal( typeof tracker.trackGoal, 'function', 'trackGoal' ); - equal( typeof tracker.trackLink, 'function', 'trackLink' ); - equal( typeof tracker.trackPageView, 'function', 'trackPageView' ); - // ecommerce - equal( typeof tracker.setEcommerceView, 'function', 'setEcommerceView' ); - equal( typeof tracker.addEcommerceItem, 'function', 'addEcommerceItem' ); - equal( typeof tracker.trackEcommerceOrder, 'function', 'trackEcommerceOrder' ); - equal( typeof tracker.trackEcommerceCartUpdate, 'function', 'trackEcommerceCartUpdate' ); - }); - - module("API and internals"); - - test("Tracker is_a functions", function() { - expect(22); - - var tracker = Piwik.getTracker(); - - equal( typeof tracker.hook.test._isDefined, 'function', 'isDefined' ); - ok( tracker.hook.test._isDefined(tracker), 'isDefined true' ); - ok( tracker.hook.test._isDefined(tracker.hook), 'isDefined(obj.exists) true' ); - ok( !tracker.hook.test._isDefined(tracker.non_existant_property), 'isDefined(obj.missing) false' ); - - equal( typeof tracker.hook.test._isFunction, 'function', 'isFunction' ); - ok( tracker.hook.test._isFunction(tracker.hook.test._isFunction), 'isFunction(isFunction)' ); - ok( tracker.hook.test._isFunction(function () { }), 'isFunction(function)' ); - - equal( typeof tracker.hook.test._isObject, 'function', 'isObject' ); - ok( tracker.hook.test._isObject(null), 'isObject(null)' ); // null is an object! - ok( tracker.hook.test._isObject(new Object), 'isObject(Object)' ); - ok( tracker.hook.test._isObject(window), 'isObject(window)' ); - ok( !tracker.hook.test._isObject('string'), 'isObject("string")' ); - ok( tracker.hook.test._isObject(new String), 'isObject(String)' ); // String is an object! - - equal( typeof tracker.hook.test._isString, 'function', 'isString' ); - ok( tracker.hook.test._isString(''), 'isString(emptyString)' ); - ok( tracker.hook.test._isString('abc'), 'isString("abc")' ); - ok( tracker.hook.test._isString('123'), 'isString("123")' ); - ok( !tracker.hook.test._isString(123), 'isString(123)' ); - ok( !tracker.hook.test._isString(null), 'isString(null)' ); - ok( !tracker.hook.test._isString(window), 'isString(window)' ); - ok( !tracker.hook.test._isString(function () { }), 'isString(function)' ); - ok( tracker.hook.test._isString(new String), 'isString(String)' ); // String is a string - }); + deepEqual( JSON2.parse('[1,2,3]'), [1, 2, 3], 'Array of numbers' ); + deepEqual( JSON2.parse('{"key":"value"}'), {'key' : 'value'}, 'Object (members)' ); + deepEqual( JSON2.parse('[{"domains":["example.com","example.ca"]},{"names":["Sean","Cathy"]}]'), + [ {'domains' : ['example.com', 'example.ca']}, {'names' : ['Sean', 'Cathy'] } ], 'Nested members' ); + }); + + module("core"); + + test("Basic requirements", function() { + expect(3); + + equal( typeof encodeURIComponent, 'function', 'encodeURIComponent' ); + ok( RegExp, "RegExp" ); + ok( Piwik, "Piwik" ); + }); + + test("Test API - addPlugin(), getTracker(), getHook(), and hook", function() { + expect(6); + + ok( Piwik.addPlugin, "Piwik.addPlugin" ); + + var tracker = Piwik.getTracker(); + + equal( typeof tracker, 'object', "Piwik.getTracker()" ); + equal( typeof tracker.getHook, 'function', "test Tracker getHook" ); + equal( typeof tracker.hook, 'object', "test Tracker hook" ); + equal( typeof tracker.getHook('test'), 'object', "test Tracker getHook('test')" ); + equal( typeof tracker.hook.test, 'object', "test Tracker hook.test" ); + }); + + test("API methods", function() { + expect(57); + + equal( typeof Piwik.addPlugin, 'function', 'addPlugin' ); + equal( typeof Piwik.getTracker, 'function', 'getTracker' ); + equal( typeof Piwik.getAsyncTracker, 'function', 'getAsyncTracker' ); + + var tracker; + + tracker = Piwik.getAsyncTracker(); + ok(tracker instanceof Object, 'getAsyncTracker'); + + tracker = Piwik.getTracker(); + ok(tracker instanceof Object, 'getTracker'); + + equal( typeof tracker.getVisitorId, 'function', 'getVisitorId' ); + equal( typeof tracker.getVisitorInfo, 'function', 'getVisitorInfo' ); + equal( typeof tracker.getAttributionInfo, 'function', 'getAttributionInfo' ); + equal( typeof tracker.getAttributionReferrerTimestamp, 'function', 'getAttributionReferrerTimestamp' ); + equal( typeof tracker.getAttributionReferrerUrl, 'function', 'getAttributionReferrerUrl' ); + equal( typeof tracker.getAttributionCampaignName, 'function', 'getAttributionCampaignName' ); + equal( typeof tracker.getAttributionCampaignKeyword, 'function', 'getAttributionCampaignKeyword' ); + equal( typeof tracker.setTrackerUrl, 'function', 'setTrackerUrl' ); + equal( typeof tracker.getRequest, 'function', 'getRequest' ); + equal( typeof tracker.addPlugin, 'function', 'addPlugin' ); + equal( typeof tracker.setSiteId, 'function', 'setSiteId' ); + equal( typeof tracker.setCustomData, 'function', 'setCustomData' ); + equal( typeof tracker.getCustomData, 'function', 'getCustomData' ); + equal( typeof tracker.setCustomRequestProcessing, 'function', 'setCustomRequestProcessing' ); + equal( typeof tracker.setCustomVariable, 'function', 'setCustomVariable' ); + equal( typeof tracker.getCustomVariable, 'function', 'getCustomVariable' ); + equal( typeof tracker.deleteCustomVariable, 'function', 'deleteCustomVariable' ); + equal( typeof tracker.setLinkTrackingTimer, 'function', 'setLinkTrackingTimer' ); + equal( typeof tracker.setDownloadExtensions, 'function', 'setDownloadExtensions' ); + equal( typeof tracker.addDownloadExtensions, 'function', 'addDownloadExtensions' ); + equal( typeof tracker.setDomains, 'function', 'setDomains' ); + equal( typeof tracker.setIgnoreClasses, 'function', 'setIgnoreClasses' ); + equal( typeof tracker.setRequestMethod, 'function', 'setRequestMethod' ); + equal( typeof tracker.setRequestContentType, 'function', 'setRequestContentType' ); + equal( typeof tracker.setReferrerUrl, 'function', 'setReferrerUrl' ); + equal( typeof tracker.setCustomUrl, 'function', 'setCustomUrl' ); + equal( typeof tracker.setDocumentTitle, 'function', 'setDocumentTitle' ); + equal( typeof tracker.setDownloadClasses, 'function', 'setDownloadClasses' ); + equal( typeof tracker.setLinkClasses, 'function', 'setLinkClasses' ); + equal( typeof tracker.setCampaignNameKey, 'function', 'setCampaignNameKey' ); + equal( typeof tracker.setCampaignKeywordKey, 'function', 'setCampaignKeywordKey' ); + equal( typeof tracker.discardHashTag, 'function', 'discardHashTag' ); + equal( typeof tracker.setCookieNamePrefix, 'function', 'setCookieNamePrefix' ); + equal( typeof tracker.setCookieDomain, 'function', 'setCookieDomain' ); + equal( typeof tracker.setCookiePath, 'function', 'setCookiePath' ); + equal( typeof tracker.setVisitorCookieTimeout, 'function', 'setVisitorCookieTimeout' ); + equal( typeof tracker.setSessionCookieTimeout, 'function', 'setSessionCookieTimeout' ); + equal( typeof tracker.setReferralCookieTimeout, 'function', 'setReferralCookieTimeout' ); + equal( typeof tracker.setConversionAttributionFirstReferrer, 'function', 'setConversionAttributionFirstReferrer' ); + equal( typeof tracker.addListener, 'function', 'addListener' ); + equal( typeof tracker.enableLinkTracking, 'function', 'enableLinkTracking' ); + equal( typeof tracker.setHeartBeatTimer, 'function', 'setHeartBeatTimer' ); + equal( typeof tracker.killFrame, 'function', 'killFrame' ); + equal( typeof tracker.redirectFile, 'function', 'redirectFile' ); + equal( typeof tracker.setCountPreRendered, 'function', 'setCountPreRendered' ); + equal( typeof tracker.trackGoal, 'function', 'trackGoal' ); + equal( typeof tracker.trackLink, 'function', 'trackLink' ); + equal( typeof tracker.trackPageView, 'function', 'trackPageView' ); + // ecommerce + equal( typeof tracker.setEcommerceView, 'function', 'setEcommerceView' ); + equal( typeof tracker.addEcommerceItem, 'function', 'addEcommerceItem' ); + equal( typeof tracker.trackEcommerceOrder, 'function', 'trackEcommerceOrder' ); + equal( typeof tracker.trackEcommerceCartUpdate, 'function', 'trackEcommerceCartUpdate' ); + }); + + module("API and internals"); + + test("Tracker is_a functions", function() { + expect(22); + + var tracker = Piwik.getTracker(); + + equal( typeof tracker.hook.test._isDefined, 'function', 'isDefined' ); + ok( tracker.hook.test._isDefined(tracker), 'isDefined true' ); + ok( tracker.hook.test._isDefined(tracker.hook), 'isDefined(obj.exists) true' ); + ok( !tracker.hook.test._isDefined(tracker.non_existant_property), 'isDefined(obj.missing) false' ); + + equal( typeof tracker.hook.test._isFunction, 'function', 'isFunction' ); + ok( tracker.hook.test._isFunction(tracker.hook.test._isFunction), 'isFunction(isFunction)' ); + ok( tracker.hook.test._isFunction(function () { }), 'isFunction(function)' ); + + equal( typeof tracker.hook.test._isObject, 'function', 'isObject' ); + ok( tracker.hook.test._isObject(null), 'isObject(null)' ); // null is an object! + ok( tracker.hook.test._isObject(new Object), 'isObject(Object)' ); + ok( tracker.hook.test._isObject(window), 'isObject(window)' ); + ok( !tracker.hook.test._isObject('string'), 'isObject("string")' ); + ok( tracker.hook.test._isObject(new String), 'isObject(String)' ); // String is an object! + + equal( typeof tracker.hook.test._isString, 'function', 'isString' ); + ok( tracker.hook.test._isString(''), 'isString(emptyString)' ); + ok( tracker.hook.test._isString('abc'), 'isString("abc")' ); + ok( tracker.hook.test._isString('123'), 'isString("123")' ); + ok( !tracker.hook.test._isString(123), 'isString(123)' ); + ok( !tracker.hook.test._isString(null), 'isString(null)' ); + ok( !tracker.hook.test._isString(window), 'isString(window)' ); + ok( !tracker.hook.test._isString(function () { }), 'isString(function)' ); + ok( tracker.hook.test._isString(new String), 'isString(String)' ); // String is a string + }); test("AnalyticsTracker alias", function() { @@ -432,56 +435,56 @@ function PiwikTest() { - test("Tracker encode, decode, urldecode wrappers", function() { - expect(6); - - var tracker = Piwik.getTracker(); - - equal( typeof tracker.hook.test._encode, 'function', 'encodeWrapper' ); - equal( typeof tracker.hook.test._decode, 'function', 'decodeWrapper' ); - equal( typeof tracker.hook.test._urldecode, 'function', 'urldecodeWrapper' ); + test("Tracker encode, decode, urldecode wrappers", function() { + expect(6); - equal( tracker.hook.test._encode("&=?;/#"), '%26%3D%3F%3B%2F%23', 'encodeWrapper()' ); - equal( tracker.hook.test._decode("%26%3D%3F%3B%2F%23"), '&=?;/#', 'decodeWrapper()' ); - equal( tracker.hook.test._urldecode("mailto:%69%6e%66%6f@%65%78%61%6d%70%6c%65.%63%6f%6d"), 'mailto:info@example.com', 'decodeWrapper()' ); - }); + var tracker = Piwik.getTracker(); - test("Tracker getHostName(), getParameter(), urlFixup(), domainFixup(), titleFixup() and purify()", function() { - expect(57); + equal( typeof tracker.hook.test._encode, 'function', 'encodeWrapper' ); + equal( typeof tracker.hook.test._decode, 'function', 'decodeWrapper' ); + equal( typeof tracker.hook.test._urldecode, 'function', 'urldecodeWrapper' ); - var tracker = Piwik.getTracker(); + equal( tracker.hook.test._encode("&=?;/#"), '%26%3D%3F%3B%2F%23', 'encodeWrapper()' ); + equal( tracker.hook.test._decode("%26%3D%3F%3B%2F%23"), '&=?;/#', 'decodeWrapper()' ); + equal( tracker.hook.test._urldecode("mailto:%69%6e%66%6f@%65%78%61%6d%70%6c%65.%63%6f%6d"), 'mailto:info@example.com', 'decodeWrapper()' ); + }); - equal( typeof tracker.hook.test._getHostName, 'function', 'getHostName' ); - equal( typeof tracker.hook.test._getParameter, 'function', 'getParameter' ); + test("Tracker getHostName(), getParameter(), urlFixup(), domainFixup(), titleFixup() and purify()", function() { + expect(57); - equal( tracker.hook.test._getHostName('http://example.com'), 'example.com', 'http://example.com'); - equal( tracker.hook.test._getHostName('http://example.com/'), 'example.com', 'http://example.com/'); - equal( tracker.hook.test._getHostName('http://example.com/index'), 'example.com', 'http://example.com/index'); - equal( tracker.hook.test._getHostName('http://example.com/index?q=xyz'), 'example.com', 'http://example.com/index?q=xyz'); - equal( tracker.hook.test._getHostName('http://example.com/?q=xyz'), 'example.com', 'http://example.com/?q=xyz'); - equal( tracker.hook.test._getHostName('http://example.com/?q=xyz#hash'), 'example.com', 'http://example.com/?q=xyz#hash'); - equal( tracker.hook.test._getHostName('http://example.com#hash'), 'example.com', 'http://example.com#hash'); - equal( tracker.hook.test._getHostName('http://example.com/#hash'), 'example.com', 'http://example.com/#hash'); - equal( tracker.hook.test._getHostName('http://example.com:80'), 'example.com', 'http://example.com:80'); - equal( tracker.hook.test._getHostName('http://example.com:80/'), 'example.com', 'http://example.com:80/'); - equal( tracker.hook.test._getHostName('https://example.com/'), 'example.com', 'https://example.com/'); - equal( tracker.hook.test._getHostName('http://user@example.com/'), 'example.com', 'http://user@example.com/'); - equal( tracker.hook.test._getHostName('http://user:password@example.com/'), 'example.com', 'http://user:password@example.com/'); + var tracker = Piwik.getTracker(); - equal( tracker.hook.test._getParameter('http://piwik.org/', 'q'), '', 'no query'); - equal( tracker.hook.test._getParameter('http://piwik.org/?q=test', 'q'), 'test', '?q'); - equal( tracker.hook.test._getParameter('http://piwik.org/?q=test#aq=not', 'q'), 'test', '?q'); - equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2', 'q'), 'test2', '&q'); + equal( typeof tracker.hook.test._getHostName, 'function', 'getHostName' ); + equal( typeof tracker.hook.test._getParameter, 'function', 'getParameter' ); + + equal( tracker.hook.test._getHostName('http://example.com'), 'example.com', 'http://example.com'); + equal( tracker.hook.test._getHostName('http://example.com/'), 'example.com', 'http://example.com/'); + equal( tracker.hook.test._getHostName('http://example.com/index'), 'example.com', 'http://example.com/index'); + equal( tracker.hook.test._getHostName('http://example.com/index?q=xyz'), 'example.com', 'http://example.com/index?q=xyz'); + equal( tracker.hook.test._getHostName('http://example.com/?q=xyz'), 'example.com', 'http://example.com/?q=xyz'); + equal( tracker.hook.test._getHostName('http://example.com/?q=xyz#hash'), 'example.com', 'http://example.com/?q=xyz#hash'); + equal( tracker.hook.test._getHostName('http://example.com#hash'), 'example.com', 'http://example.com#hash'); + equal( tracker.hook.test._getHostName('http://example.com/#hash'), 'example.com', 'http://example.com/#hash'); + equal( tracker.hook.test._getHostName('http://example.com:80'), 'example.com', 'http://example.com:80'); + equal( tracker.hook.test._getHostName('http://example.com:80/'), 'example.com', 'http://example.com:80/'); + equal( tracker.hook.test._getHostName('https://example.com/'), 'example.com', 'https://example.com/'); + equal( tracker.hook.test._getHostName('http://user@example.com/'), 'example.com', 'http://user@example.com/'); + equal( tracker.hook.test._getHostName('http://user:password@example.com/'), 'example.com', 'http://user:password@example.com/'); + + equal( tracker.hook.test._getParameter('http://piwik.org/', 'q'), '', 'no query'); + equal( tracker.hook.test._getParameter('http://piwik.org/?q=test', 'q'), 'test', '?q'); + equal( tracker.hook.test._getParameter('http://piwik.org/?q=test#aq=not', 'q'), 'test', '?q'); + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2', 'q'), 'test2', '&q'); // getParameter in hash tag equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#aq=not', 'q'), 'test2', '&q'); - equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#aq=not', 'aq'), 'not', '#aq'); - equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#bq=yes&aq=not', 'bq'), 'yes', '#bq'); - equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#pk_campaign=campaign', 'pk_campaign'), 'campaign', '#pk_campaign'); - equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#bq=yes&aq=not', 'q'), 'test2', '#q'); + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#aq=not', 'aq'), 'not', '#aq'); + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#bq=yes&aq=not', 'bq'), 'yes', '#bq'); + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#pk_campaign=campaign', 'pk_campaign'), 'campaign', '#pk_campaign'); + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#bq=yes&aq=not', 'q'), 'test2', '#q'); // URL decoded - equal( tracker.hook.test._getParameter('http://piwik.org/?q=http%3a%2f%2flocalhost%2f%3fr%3d1%26q%3dfalse', 'q'), 'http://localhost/?r=1&q=false', 'url'); + equal( tracker.hook.test._getParameter('http://piwik.org/?q=http%3a%2f%2flocalhost%2f%3fr%3d1%26q%3dfalse', 'q'), 'http://localhost/?r=1&q=false', 'url'); equal( tracker.hook.test._getParameter('http://piwik.org/?q=http%3a%2f%2flocalhost%2f%3fr%3d1%26q%3dfalse¬q=not', 'q'), 'http://localhost/?r=1&q=false', 'url'); // non existing parameters @@ -489,237 +492,237 @@ function PiwikTest() { equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#bq=yes&aq=not', 'bq='), "", '#q'); equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#bq=yes&aq=not', 'sp='), "", '#q'); - equal( typeof tracker.hook.test._urlFixup, 'function', 'urlFixup' ); - - deepEqual( tracker.hook.test._urlFixup( 'webcache.googleusercontent.com', 'http://webcache.googleusercontent.com/search?q=cache:CD2SncROLs4J:piwik.org/blog/2010/04/piwik-0-6-security-advisory/+piwik+security&cd=1&hl=en&ct=clnk', '' ), - ['piwik.org', 'http://piwik.org/qa', ''], 'webcache.googleusercontent.com' ); - - deepEqual( tracker.hook.test._urlFixup( 'cc.bingj.com', 'http://cc.bingj.com/cache.aspx?q=web+analytics&d=5020318678516316&mkt=en-CA&setlang=en-CA&w=6ea8ea88,ff6c44df', '' ), - ['piwik.org', 'http://piwik.org/qa', ''], 'cc.bingj.com' ); + equal( typeof tracker.hook.test._urlFixup, 'function', 'urlFixup' ); + + deepEqual( tracker.hook.test._urlFixup( 'webcache.googleusercontent.com', 'http://webcache.googleusercontent.com/search?q=cache:CD2SncROLs4J:piwik.org/blog/2010/04/piwik-0-6-security-advisory/+piwik+security&cd=1&hl=en&ct=clnk', '' ), + ['piwik.org', 'http://piwik.org/qa', ''], 'webcache.googleusercontent.com' ); + + deepEqual( tracker.hook.test._urlFixup( 'cc.bingj.com', 'http://cc.bingj.com/cache.aspx?q=web+analytics&d=5020318678516316&mkt=en-CA&setlang=en-CA&w=6ea8ea88,ff6c44df', '' ), + ['piwik.org', 'http://piwik.org/qa', ''], 'cc.bingj.com' ); + + deepEqual( tracker.hook.test._urlFixup( '74.6.239.185', 'http://74.6.239.185/search/srpcache?ei=UTF-8&p=piwik&fr=yfp-t-964&fp_ip=ca&u=http://cc.bingj.com/cache.aspx?q=piwik&d=4770519086662477&mkt=en-US&setlang=en-US&w=f4bc05d8,8c8af2e3&icp=1&.intl=us&sig=PXmPDNqapxSQ.scsuhIpZA--', '' ), + ['piwik.org', 'http://piwik.org/qa', ''], 'yahoo cache (1)' ); + + deepEqual( tracker.hook.test._urlFixup( '74.6.239.84', 'http://74.6.239.84/search/srpcache?ei=UTF-8&p=web+analytics&fr=yfp-t-715&u=http://cc.bingj.com/cache.aspx?q=web+analytics&d=5020318680482405&mkt=en-CA&setlang=en-CA&w=a68d7af0,873cfeb0&icp=1&.intl=ca&sig=x6MgjtrDYvsxi8Zk2ZX.tw--', '' ), + ['piwik.org', 'http://piwik.org/qa', ''], 'yahoo cache (2)' ); + + deepEqual( tracker.hook.test._urlFixup( 'translate.googleusercontent.com', 'http://translate.googleusercontent.com/translate_c?hl=en&ie=UTF-8&sl=en&tl=fr&u=http://piwik.org/&prev=_t&rurl=translate.google.com&twu=1&usg=ALkJrhirI_ijXXT7Ja_aDGndEJbE7pJqpQ', '' ), + ['piwik.org', 'http://piwik.org/', 'http://translate.googleusercontent.com/translate_c?hl=en&ie=UTF-8&sl=en&tl=fr&u=http://piwik.org/&prev=_t&rurl=translate.google.com&twu=1&usg=ALkJrhirI_ijXXT7Ja_aDGndEJbE7pJqpQ'], 'translate.googleusercontent.com' ); - deepEqual( tracker.hook.test._urlFixup( '74.6.239.185', 'http://74.6.239.185/search/srpcache?ei=UTF-8&p=piwik&fr=yfp-t-964&fp_ip=ca&u=http://cc.bingj.com/cache.aspx?q=piwik&d=4770519086662477&mkt=en-US&setlang=en-US&w=f4bc05d8,8c8af2e3&icp=1&.intl=us&sig=PXmPDNqapxSQ.scsuhIpZA--', '' ), - ['piwik.org', 'http://piwik.org/qa', ''], 'yahoo cache (1)' ); + equal( typeof tracker.hook.test._domainFixup, 'function', 'domainFixup' ); - deepEqual( tracker.hook.test._urlFixup( '74.6.239.84', 'http://74.6.239.84/search/srpcache?ei=UTF-8&p=web+analytics&fr=yfp-t-715&u=http://cc.bingj.com/cache.aspx?q=web+analytics&d=5020318680482405&mkt=en-CA&setlang=en-CA&w=a68d7af0,873cfeb0&icp=1&.intl=ca&sig=x6MgjtrDYvsxi8Zk2ZX.tw--', '' ), - ['piwik.org', 'http://piwik.org/qa', ''], 'yahoo cache (2)' ); + equal( tracker.hook.test._domainFixup( 'localhost' ), 'localhost', 'domainFixup: localhost' ); + equal( tracker.hook.test._domainFixup( 'localhost.' ), 'localhost', 'domainFixup: localhost.' ); + equal( tracker.hook.test._domainFixup( 'localhost.localdomain' ), 'localhost.localdomain', 'domainFixup: localhost.localdomain' ); + equal( tracker.hook.test._domainFixup( 'localhost.localdomain.' ), 'localhost.localdomain', 'domainFixup: localhost.localdomain.' ); + equal( tracker.hook.test._domainFixup( '127.0.0.1' ), '127.0.0.1', 'domainFixup: 127.0.0.1' ); + equal( tracker.hook.test._domainFixup( 'www.example.com' ), 'www.example.com', 'domainFixup: www.example.com' ); + equal( tracker.hook.test._domainFixup( 'www.example.com.' ), 'www.example.com', 'domainFixup: www.example.com.' ); + equal( tracker.hook.test._domainFixup( '.example.com' ), '.example.com', 'domainFixup: .example.com' ); + equal( tracker.hook.test._domainFixup( '.example.com.' ), '.example.com', 'domainFixup: .example.com.' ); + equal( tracker.hook.test._domainFixup( '*.example.com' ), '.example.com', 'domainFixup: *.example.com' ); + equal( tracker.hook.test._domainFixup( '*.example.com.' ), '.example.com', 'domainFixup: *.example.com.' ); + + equal( typeof tracker.hook.test._titleFixup, 'function', 'titleFixup' ); + equal( tracker.hook.test._titleFixup( 'hello' ), 'hello', 'hello string' ); + equal( tracker.hook.test._titleFixup( document.title ), 'piwik.js: Unit Tests', 'hello string' ); + + equal( typeof tracker.hook.test._purify, 'function', 'purify' ); + + equal( tracker.hook.test._purify('http://example.com'), 'http://example.com', 'http://example.com'); + equal( tracker.hook.test._purify('http://example.com#hash'), 'http://example.com#hash', 'http://example.com#hash'); + equal( tracker.hook.test._purify('http://example.com/?q=xyz#hash'), 'http://example.com/?q=xyz#hash', 'http://example.com/?q=xyz#hash'); + + tracker.discardHashTag(true); + + equal( tracker.hook.test._purify('http://example.com'), 'http://example.com', 'http://example.com'); + equal( tracker.hook.test._purify('http://example.com#hash'), 'http://example.com', 'http://example.com#hash'); + equal( tracker.hook.test._purify('http://example.com/?q=xyz#hash'), 'http://example.com/?q=xyz', 'http://example.com/?q=xyz#hash'); + }); - deepEqual( tracker.hook.test._urlFixup( 'translate.googleusercontent.com', 'http://translate.googleusercontent.com/translate_c?hl=en&ie=UTF-8&sl=en&tl=fr&u=http://piwik.org/&prev=_t&rurl=translate.google.com&twu=1&usg=ALkJrhirI_ijXXT7Ja_aDGndEJbE7pJqpQ', '' ), - ['piwik.org', 'http://piwik.org/', 'http://translate.googleusercontent.com/translate_c?hl=en&ie=UTF-8&sl=en&tl=fr&u=http://piwik.org/&prev=_t&rurl=translate.google.com&twu=1&usg=ALkJrhirI_ijXXT7Ja_aDGndEJbE7pJqpQ'], 'translate.googleusercontent.com' ); + // support for setCustomUrl( relativeURI ) + test("getProtocolScheme and resolveRelativeReference", function() { + expect(27); - equal( typeof tracker.hook.test._domainFixup, 'function', 'domainFixup' ); + var tracker = Piwik.getTracker(); - equal( tracker.hook.test._domainFixup( 'localhost' ), 'localhost', 'domainFixup: localhost' ); - equal( tracker.hook.test._domainFixup( 'localhost.' ), 'localhost', 'domainFixup: localhost.' ); - equal( tracker.hook.test._domainFixup( 'localhost.localdomain' ), 'localhost.localdomain', 'domainFixup: localhost.localdomain' ); - equal( tracker.hook.test._domainFixup( 'localhost.localdomain.' ), 'localhost.localdomain', 'domainFixup: localhost.localdomain.' ); - equal( tracker.hook.test._domainFixup( '127.0.0.1' ), '127.0.0.1', 'domainFixup: 127.0.0.1' ); - equal( tracker.hook.test._domainFixup( 'www.example.com' ), 'www.example.com', 'domainFixup: www.example.com' ); - equal( tracker.hook.test._domainFixup( 'www.example.com.' ), 'www.example.com', 'domainFixup: www.example.com.' ); - equal( tracker.hook.test._domainFixup( '.example.com' ), '.example.com', 'domainFixup: .example.com' ); - equal( tracker.hook.test._domainFixup( '.example.com.' ), '.example.com', 'domainFixup: .example.com.' ); - equal( tracker.hook.test._domainFixup( '*.example.com' ), '.example.com', 'domainFixup: *.example.com' ); - equal( tracker.hook.test._domainFixup( '*.example.com.' ), '.example.com', 'domainFixup: *.example.com.' ); - - equal( typeof tracker.hook.test._titleFixup, 'function', 'titleFixup' ); - equal( tracker.hook.test._titleFixup( 'hello' ), 'hello', 'hello string' ); - equal( tracker.hook.test._titleFixup( document.title ), 'piwik.js: Unit Tests', 'hello string' ); - - equal( typeof tracker.hook.test._purify, 'function', 'purify' ); + equal( typeof tracker.hook.test._getProtocolScheme, 'function', "getProtocolScheme" ); + + ok( tracker.hook.test._getProtocolScheme('http://example.com') === 'http', 'http://' ); + ok( tracker.hook.test._getProtocolScheme('https://example.com') === 'https', 'https://' ); + ok( tracker.hook.test._getProtocolScheme('file://somefile.txt') === 'file', 'file://' ); + ok( tracker.hook.test._getProtocolScheme('mailto:somebody@example.com') === 'mailto', 'mailto:' ); + ok( tracker.hook.test._getProtocolScheme('javascript:alert(document.cookie)') === 'javascript', 'javascript:' ); + ok( tracker.hook.test._getProtocolScheme('') === null, 'empty string' ); + ok( tracker.hook.test._getProtocolScheme(':') === null, 'unspecified scheme' ); + ok( tracker.hook.test._getProtocolScheme('scheme') === null, 'missing colon' ); + + + equal( typeof tracker.hook.test._resolveRelativeReference, 'function', 'resolveRelativeReference' ); + + var i, j, data = [ + // unsupported +// ['http://example.com/index.php/pathinfo?query', 'test.php', 'http://example.com/test.php'], +// ['http://example.com/subdir/index.php', '../test.php', 'http://example.com/test.php'], + + // already absolute + ['http://example.com/', 'http://example.com', 'http://example.com'], + ['http://example.com/', 'https://example.com/', 'https://example.com/'], + ['http://example.com/', 'http://example.com/index', 'http://example.com/index'], + + // relative to root + ['http://example.com/', '', 'http://example.com/'], + ['http://example.com/', '/', 'http://example.com/'], + ['http://example.com/', '/test.php', 'http://example.com/test.php'], + ['http://example.com/index', '/test.php', 'http://example.com/test.php'], + ['http://example.com/index?query=x', '/test.php', 'http://example.com/test.php'], + ['http://example.com/index?query=x#hash', '/test.php', 'http://example.com/test.php'], + ['http://example.com/?query', '/test.php', 'http://example.com/test.php'], + ['http://example.com/#hash', '/test.php', 'http://example.com/test.php'], + + // relative to current document + ['http://example.com/subdir/', 'test.php', 'http://example.com/subdir/test.php'], + ['http://example.com/subdir/index', 'test.php', 'http://example.com/subdir/test.php'], + ['http://example.com/subdir/index?query=x', 'test.php', 'http://example.com/subdir/test.php'], + ['http://example.com/subdir/index?query=x#hash', 'test.php', 'http://example.com/subdir/test.php'], + ['http://example.com/subdir/?query', 'test.php', 'http://example.com/subdir/test.php'], + ['http://example.com/subdir/#hash', 'test.php', 'http://example.com/subdir/test.php'] + ]; + + for (i = 0; i < data.length; i++) { + j = data[i]; + equal( tracker.hook.test._resolveRelativeReference(j[0], j[1]), j[2], j[2] ); + } + }); - equal( tracker.hook.test._purify('http://example.com'), 'http://example.com', 'http://example.com'); - equal( tracker.hook.test._purify('http://example.com#hash'), 'http://example.com#hash', 'http://example.com#hash'); - equal( tracker.hook.test._purify('http://example.com/?q=xyz#hash'), 'http://example.com/?q=xyz#hash', 'http://example.com/?q=xyz#hash'); + test("Tracker setDomains() and isSiteHostName()", function() { + expect(13); - tracker.discardHashTag(true); + var tracker = Piwik.getTracker(); - equal( tracker.hook.test._purify('http://example.com'), 'http://example.com', 'http://example.com'); - equal( tracker.hook.test._purify('http://example.com#hash'), 'http://example.com', 'http://example.com#hash'); - equal( tracker.hook.test._purify('http://example.com/?q=xyz#hash'), 'http://example.com/?q=xyz', 'http://example.com/?q=xyz#hash'); - }); + equal( typeof tracker.hook.test._isSiteHostName, 'function', "isSiteHostName" ); - // support for setCustomUrl( relativeURI ) - test("getProtocolScheme and resolveRelativeReference", function() { - expect(27); + // test wildcards + tracker.setDomains( ['*.Example.com'] ); - var tracker = Piwik.getTracker(); + // skip test if testing on localhost + ok( window.location.hostname != 'localhost' ? !tracker.hook.test._isSiteHostName('localhost') : true, '!isSiteHostName("localhost")' ); - equal( typeof tracker.hook.test._getProtocolScheme, 'function', "getProtocolScheme" ); + ok( !tracker.hook.test._isSiteHostName('google.com'), '!isSiteHostName("google.com")' ); + ok( tracker.hook.test._isSiteHostName('example.com'), 'isSiteHostName("example.com")' ); + ok( tracker.hook.test._isSiteHostName('www.example.com'), 'isSiteHostName("www.example.com")' ); + ok( tracker.hook.test._isSiteHostName('www.sub.example.com'), 'isSiteHostName("www.sub.example.com")' ); - ok( tracker.hook.test._getProtocolScheme('http://example.com') === 'http', 'http://' ); - ok( tracker.hook.test._getProtocolScheme('https://example.com') === 'https', 'https://' ); - ok( tracker.hook.test._getProtocolScheme('file://somefile.txt') === 'file', 'file://' ); - ok( tracker.hook.test._getProtocolScheme('mailto:somebody@example.com') === 'mailto', 'mailto:' ); - ok( tracker.hook.test._getProtocolScheme('javascript:alert(document.cookie)') === 'javascript', 'javascript:' ); - ok( tracker.hook.test._getProtocolScheme('') === null, 'empty string' ); - ok( tracker.hook.test._getProtocolScheme(':') === null, 'unspecified scheme' ); - ok( tracker.hook.test._getProtocolScheme('scheme') === null, 'missing colon' ); + tracker.setDomains( 'dev.piwik.org' ); + ok( !tracker.hook.test._isSiteHostName('piwik.org'), '!isSiteHostName("piwik.org")' ); + ok( tracker.hook.test._isSiteHostName('dev.piwik.org'), 'isSiteHostName("dev.piwik.org")' ); + ok( !tracker.hook.test._isSiteHostName('piwik.example.org'), '!isSiteHostName("piwik.example.org")'); + ok( !tracker.hook.test._isSiteHostName('dev.piwik.org.com'), '!isSiteHostName("dev.piwik.org.com")'); + tracker.setDomains( '.piwik.org' ); + ok( tracker.hook.test._isSiteHostName('piwik.org'), 'isSiteHostName("piwik.org")' ); + ok( tracker.hook.test._isSiteHostName('dev.piwik.org'), 'isSiteHostName("dev.piwik.org")' ); + ok( !tracker.hook.test._isSiteHostName('piwik.org.com'), '!isSiteHostName("piwik.org.com")'); + }); - equal( typeof tracker.hook.test._resolveRelativeReference, 'function', 'resolveRelativeReference' ); + test("Tracker getClassesRegExp()", function() { + expect(3); - var i, j, data = [ - // unsupported -// ['http://example.com/index.php/pathinfo?query', 'test.php', 'http://example.com/test.php'], -// ['http://example.com/subdir/index.php', '../test.php', 'http://example.com/test.php'], + var tracker = Piwik.getTracker(); - // already absolute - ['http://example.com/', 'http://example.com', 'http://example.com'], - ['http://example.com/', 'https://example.com/', 'https://example.com/'], - ['http://example.com/', 'http://example.com/index', 'http://example.com/index'], + equal( typeof tracker.hook.test._getClassesRegExp, 'function', "getClassesRegExp" ); - // relative to root - ['http://example.com/', '', 'http://example.com/'], - ['http://example.com/', '/', 'http://example.com/'], - ['http://example.com/', '/test.php', 'http://example.com/test.php'], - ['http://example.com/index', '/test.php', 'http://example.com/test.php'], - ['http://example.com/index?query=x', '/test.php', 'http://example.com/test.php'], - ['http://example.com/index?query=x#hash', '/test.php', 'http://example.com/test.php'], - ['http://example.com/?query', '/test.php', 'http://example.com/test.php'], - ['http://example.com/#hash', '/test.php', 'http://example.com/test.php'], + var download = tracker.hook.test._getClassesRegExp([], 'download'); + ok( download.test('piwik_download'), 'piwik_download (default)' ); - // relative to current document - ['http://example.com/subdir/', 'test.php', 'http://example.com/subdir/test.php'], - ['http://example.com/subdir/index', 'test.php', 'http://example.com/subdir/test.php'], - ['http://example.com/subdir/index?query=x', 'test.php', 'http://example.com/subdir/test.php'], - ['http://example.com/subdir/index?query=x#hash', 'test.php', 'http://example.com/subdir/test.php'], - ['http://example.com/subdir/?query', 'test.php', 'http://example.com/subdir/test.php'], - ['http://example.com/subdir/#hash', 'test.php', 'http://example.com/subdir/test.php'] - ]; + var outlink = tracker.hook.test._getClassesRegExp([], 'link'); + ok( outlink.test('piwik_link'), 'piwik_link (default)' ); - for (i = 0; i < data.length; i++) { - j = data[i]; - equal( tracker.hook.test._resolveRelativeReference(j[0], j[1]), j[2], j[2] ); - } - }); + }); - test("Tracker setDomains() and isSiteHostName()", function() { - expect(13); - - var tracker = Piwik.getTracker(); + test("Tracker setIgnoreClasses() and getClassesRegExp(ignore)", function() { + expect(14); - equal( typeof tracker.hook.test._isSiteHostName, 'function', "isSiteHostName" ); - - // test wildcards - tracker.setDomains( ['*.Example.com'] ); - - // skip test if testing on localhost - ok( window.location.hostname != 'localhost' ? !tracker.hook.test._isSiteHostName('localhost') : true, '!isSiteHostName("localhost")' ); - - ok( !tracker.hook.test._isSiteHostName('google.com'), '!isSiteHostName("google.com")' ); - ok( tracker.hook.test._isSiteHostName('example.com'), 'isSiteHostName("example.com")' ); - ok( tracker.hook.test._isSiteHostName('www.example.com'), 'isSiteHostName("www.example.com")' ); - ok( tracker.hook.test._isSiteHostName('www.sub.example.com'), 'isSiteHostName("www.sub.example.com")' ); - - tracker.setDomains( 'dev.piwik.org' ); - ok( !tracker.hook.test._isSiteHostName('piwik.org'), '!isSiteHostName("piwik.org")' ); - ok( tracker.hook.test._isSiteHostName('dev.piwik.org'), 'isSiteHostName("dev.piwik.org")' ); - ok( !tracker.hook.test._isSiteHostName('piwik.example.org'), '!isSiteHostName("piwik.example.org")'); - ok( !tracker.hook.test._isSiteHostName('dev.piwik.org.com'), '!isSiteHostName("dev.piwik.org.com")'); - - tracker.setDomains( '.piwik.org' ); - ok( tracker.hook.test._isSiteHostName('piwik.org'), 'isSiteHostName("piwik.org")' ); - ok( tracker.hook.test._isSiteHostName('dev.piwik.org'), 'isSiteHostName("dev.piwik.org")' ); - ok( !tracker.hook.test._isSiteHostName('piwik.org.com'), '!isSiteHostName("piwik.org.com")'); - }); - - test("Tracker getClassesRegExp()", function() { - expect(3); - - var tracker = Piwik.getTracker(); - - equal( typeof tracker.hook.test._getClassesRegExp, 'function', "getClassesRegExp" ); - - var download = tracker.hook.test._getClassesRegExp([], 'download'); - ok( download.test('piwik_download'), 'piwik_download (default)' ); - - var outlink = tracker.hook.test._getClassesRegExp([], 'link'); - ok( outlink.test('piwik_link'), 'piwik_link (default)' ); - - }); - - test("Tracker setIgnoreClasses() and getClassesRegExp(ignore)", function() { - expect(14); - - var tracker = Piwik.getTracker(); - - var ignore = tracker.hook.test._getClassesRegExp([], 'ignore'); - ok( ignore.test('piwik_ignore'), '[1] piwik_ignore' ); - ok( !ignore.test('pk_ignore'), '[1] !pk_ignore' ); - ok( !ignore.test('apiwik_ignore'), '!apiwik_ignore' ); - ok( !ignore.test('piwik_ignorez'), '!piwik_ignorez' ); - ok( ignore.test('abc piwik_ignore xyz'), 'abc piwik_ignore xyz' ); - - tracker.setIgnoreClasses( 'my_download' ); - ignore = tracker.hook.test._getClassesRegExp(['my_download'], 'ignore'); - ok( ignore.test('piwik_ignore'), '[2] piwik_ignore' ); - ok( !ignore.test('pk_ignore'), '[2] !pk_ignore' ); - ok( ignore.test('my_download'), 'my_download' ); - ok( ignore.test('abc piwik_ignore xyz'), 'abc piwik_ignore xyz' ); - ok( ignore.test('abc my_download xyz'), 'abc my_download xyz' ); - - tracker.setIgnoreClasses( ['my_download', 'my_outlink'] ); - ignore = tracker.hook.test._getClassesRegExp(['my_download','my_outlink'], 'ignore'); - ok( ignore.test('piwik_ignore'), '[3] piwik_ignore' ); - ok( !ignore.test('pk_ignore'), '[3] !pk_ignore' ); - ok( ignore.test('my_download'), 'my_download' ); - ok( ignore.test('my_outlink'), 'my_outlink' ); - }); - - test("Tracker hasCookies(), getCookie(), setCookie()", function() { - expect(2); - - var tracker = Piwik.getTracker(); - - ok( tracker.hook.test._hasCookies() == '1', 'hasCookies()' ); - - var cookieName = '_pk_test_harness' + Math.random(), - expectedValue = String(Math.random()); - tracker.hook.test._setCookie( cookieName, expectedValue ); - equal( tracker.hook.test._getCookie( cookieName ), expectedValue, 'getCookie(), setCookie()' ); - }); - - test("Tracker setDownloadExtensions(), addDownloadExtensions(), setDownloadClasses(), setLinkClasses(), and getLinkType()", function() { - expect(25); + var tracker = Piwik.getTracker(); - var tracker = Piwik.getTracker(); + var ignore = tracker.hook.test._getClassesRegExp([], 'ignore'); + ok( ignore.test('piwik_ignore'), '[1] piwik_ignore' ); + ok( !ignore.test('pk_ignore'), '[1] !pk_ignore' ); + ok( !ignore.test('apiwik_ignore'), '!apiwik_ignore' ); + ok( !ignore.test('piwik_ignorez'), '!piwik_ignorez' ); + ok( ignore.test('abc piwik_ignore xyz'), 'abc piwik_ignore xyz' ); + + tracker.setIgnoreClasses( 'my_download' ); + ignore = tracker.hook.test._getClassesRegExp(['my_download'], 'ignore'); + ok( ignore.test('piwik_ignore'), '[2] piwik_ignore' ); + ok( !ignore.test('pk_ignore'), '[2] !pk_ignore' ); + ok( ignore.test('my_download'), 'my_download' ); + ok( ignore.test('abc piwik_ignore xyz'), 'abc piwik_ignore xyz' ); + ok( ignore.test('abc my_download xyz'), 'abc my_download xyz' ); + + tracker.setIgnoreClasses( ['my_download', 'my_outlink'] ); + ignore = tracker.hook.test._getClassesRegExp(['my_download','my_outlink'], 'ignore'); + ok( ignore.test('piwik_ignore'), '[3] piwik_ignore' ); + ok( !ignore.test('pk_ignore'), '[3] !pk_ignore' ); + ok( ignore.test('my_download'), 'my_download' ); + ok( ignore.test('my_outlink'), 'my_outlink' ); + }); - equal( typeof tracker.hook.test._getLinkType, 'function', 'getLinkType' ); + test("Tracker hasCookies(), getCookie(), setCookie()", function() { + expect(2); - equal( tracker.hook.test._getLinkType('something', 'goofy.html', false), 'link', 'implicit link' ); - equal( tracker.hook.test._getLinkType('something', 'goofy.pdf', false), 'download', 'external PDF files are downloads' ); - equal( tracker.hook.test._getLinkType('something', 'goofy.pdf', true), 'download', 'local PDF are downloads' ); - equal( tracker.hook.test._getLinkType('something', 'goofy-with-dash.pdf', true), 'download', 'local PDF are downloads' ); + var tracker = Piwik.getTracker(); - equal( tracker.hook.test._getLinkType('piwik_download', 'piwiktest.ext', true), 'download', 'piwik_download' ); - equal( tracker.hook.test._getLinkType('abc piwik_download xyz', 'piwiktest.ext', true), 'download', 'abc piwik_download xyz' ); - equal( tracker.hook.test._getLinkType('piwik_link', 'piwiktest.asp', true), 'link', 'piwik_link' ); - equal( tracker.hook.test._getLinkType('abc piwik_link xyz', 'piwiktest.asp', true), 'link', 'abc piwik_link xyz' ); - equal( tracker.hook.test._getLinkType('something', 'piwiktest.txt', true), 'download', 'download extension' ); - equal( tracker.hook.test._getLinkType('something', 'piwiktest.ext', true), 0, '[1] link (default)' ); + ok( tracker.hook.test._hasCookies() == '1', 'hasCookies()' ); - equal( tracker.hook.test._getLinkType('something', 'file.zip', true), 'download', 'download file.zip' ); - equal( tracker.hook.test._getLinkType('something', 'index.php?name=file.zip#anchor', true), 'download', 'download file.zip (anchor)' ); - equal( tracker.hook.test._getLinkType('something', 'index.php?name=file.zip&redirect=yes', true), 'download', 'download file.zip (is param)' ); - equal( tracker.hook.test._getLinkType('something', 'file.zip?mirror=true', true), 'download', 'download file.zip (with param)' ); + var cookieName = '_pk_test_harness' + Math.random(), + expectedValue = String(Math.random()); + tracker.hook.test._setCookie( cookieName, expectedValue ); + equal( tracker.hook.test._getCookie( cookieName ), expectedValue, 'getCookie(), setCookie()' ); + }); - tracker.setDownloadExtensions('pk'); - equal( tracker.hook.test._getLinkType('something', 'piwiktest.pk', true), 'download', '[1] .pk == download extension' ); - equal( tracker.hook.test._getLinkType('something', 'piwiktest.txt', true), 0, '.txt =! download extension' ); - - tracker.addDownloadExtensions('xyz'); - equal( tracker.hook.test._getLinkType('something', 'piwiktest.pk', true), 'download', '[2] .pk == download extension' ); - equal( tracker.hook.test._getLinkType('something', 'piwiktest.xyz', true), 'download', '.xyz == download extension' ); + test("Tracker setDownloadExtensions(), addDownloadExtensions(), setDownloadClasses(), setLinkClasses(), and getLinkType()", function() { + expect(25); - tracker.setDownloadClasses(['a', 'b']); - equal( tracker.hook.test._getLinkType('abc piwik_download', 'piwiktest.ext', true), 'download', 'download (default)' ); - equal( tracker.hook.test._getLinkType('abc a', 'piwiktest.ext', true), 'download', 'download (a)' ); - equal( tracker.hook.test._getLinkType('b abc', 'piwiktest.ext', true), 'download', 'download (b)' ); + var tracker = Piwik.getTracker(); - tracker.setLinkClasses(['c', 'd']); - equal( tracker.hook.test._getLinkType('abc piwik_link', 'piwiktest.ext', true), 'link', 'link (default)' ); - equal( tracker.hook.test._getLinkType('abc c', 'piwiktest.ext', true), 'link', 'link (c)' ); - equal( tracker.hook.test._getLinkType('d abc', 'piwiktest.ext', true), 'link', 'link (d)' ); - }); + equal( typeof tracker.hook.test._getLinkType, 'function', 'getLinkType' ); + + equal( tracker.hook.test._getLinkType('something', 'goofy.html', false), 'link', 'implicit link' ); + equal( tracker.hook.test._getLinkType('something', 'goofy.pdf', false), 'download', 'external PDF files are downloads' ); + equal( tracker.hook.test._getLinkType('something', 'goofy.pdf', true), 'download', 'local PDF are downloads' ); + equal( tracker.hook.test._getLinkType('something', 'goofy-with-dash.pdf', true), 'download', 'local PDF are downloads' ); + + equal( tracker.hook.test._getLinkType('piwik_download', 'piwiktest.ext', true), 'download', 'piwik_download' ); + equal( tracker.hook.test._getLinkType('abc piwik_download xyz', 'piwiktest.ext', true), 'download', 'abc piwik_download xyz' ); + equal( tracker.hook.test._getLinkType('piwik_link', 'piwiktest.asp', true), 'link', 'piwik_link' ); + equal( tracker.hook.test._getLinkType('abc piwik_link xyz', 'piwiktest.asp', true), 'link', 'abc piwik_link xyz' ); + equal( tracker.hook.test._getLinkType('something', 'piwiktest.txt', true), 'download', 'download extension' ); + equal( tracker.hook.test._getLinkType('something', 'piwiktest.ext', true), 0, '[1] link (default)' ); + + equal( tracker.hook.test._getLinkType('something', 'file.zip', true), 'download', 'download file.zip' ); + equal( tracker.hook.test._getLinkType('something', 'index.php?name=file.zip#anchor', true), 'download', 'download file.zip (anchor)' ); + equal( tracker.hook.test._getLinkType('something', 'index.php?name=file.zip&redirect=yes', true), 'download', 'download file.zip (is param)' ); + equal( tracker.hook.test._getLinkType('something', 'file.zip?mirror=true', true), 'download', 'download file.zip (with param)' ); + + tracker.setDownloadExtensions('pk'); + equal( tracker.hook.test._getLinkType('something', 'piwiktest.pk', true), 'download', '[1] .pk == download extension' ); + equal( tracker.hook.test._getLinkType('something', 'piwiktest.txt', true), 0, '.txt =! download extension' ); + + tracker.addDownloadExtensions('xyz'); + equal( tracker.hook.test._getLinkType('something', 'piwiktest.pk', true), 'download', '[2] .pk == download extension' ); + equal( tracker.hook.test._getLinkType('something', 'piwiktest.xyz', true), 'download', '.xyz == download extension' ); + + tracker.setDownloadClasses(['a', 'b']); + equal( tracker.hook.test._getLinkType('abc piwik_download', 'piwiktest.ext', true), 'download', 'download (default)' ); + equal( tracker.hook.test._getLinkType('abc a', 'piwiktest.ext', true), 'download', 'download (a)' ); + equal( tracker.hook.test._getLinkType('b abc', 'piwiktest.ext', true), 'download', 'download (b)' ); + + tracker.setLinkClasses(['c', 'd']); + equal( tracker.hook.test._getLinkType('abc piwik_link', 'piwiktest.ext', true), 'link', 'link (default)' ); + equal( tracker.hook.test._getLinkType('abc c', 'piwiktest.ext', true), 'link', 'link (c)' ); + equal( tracker.hook.test._getLinkType('d abc', 'piwiktest.ext', true), 'link', 'link (d)' ); + }); test("utf8_encode(), sha1()", function() { expect(6); @@ -744,179 +747,263 @@ function PiwikTest() { equal( tracker.getRequest('hello=world').indexOf('hello=world&idsite=&rec=1&r='), 0); }); - test("prefixPropertyName()", function() { - expect(3); - - var tracker = Piwik.getTracker(); - - equal( typeof tracker.hook.test._prefixPropertyName, 'function', 'prefixPropertyName' ); - equal( tracker.hook.test._prefixPropertyName('', 'hidden'), 'hidden', 'no prefix' ); - equal( tracker.hook.test._prefixPropertyName('webkit', 'hidden'), 'webkitHidden', 'webkit prefix' ); - }); - - test("Internal timers and setLinkTrackingTimer()", function() { - expect(5); - - var tracker = Piwik.getTracker(); - - ok( ! ( _paq instanceof Array ), "async tracker proxy not an array" ); - equal( typeof tracker, typeof _paq, "async tracker proxy" ); - - var startTime, stopTime; - - equal( typeof tracker.hook.test._beforeUnloadHandler, 'function', 'beforeUnloadHandler' ); - - startTime = new Date(); - tracker.hook.test._beforeUnloadHandler(); - stopTime = new Date(); - ok( (stopTime.getTime() - startTime.getTime()) < 500, 'beforeUnloadHandler()' ); - - tracker.setLinkTrackingTimer(2000); - startTime = new Date(); - tracker.trackPageView(); - tracker.hook.test._beforeUnloadHandler(); - stopTime = new Date(); - ok( (stopTime.getTime() - startTime.getTime()) >= 2000, 'setLinkTrackingTimer()' ); - }); - - test("Overlay URL Normalizer", function() { - expect(11); - - var test = function(testCases) { - for (var i = 0; i < testCases.length; i++) { - var observed = Piwik_Overlay_UrlNormalizer.normalize(testCases[i][0]); - var expected = testCases[i][1]; - equal(observed, expected, testCases[i][0]); - } - }; - - Piwik_Overlay_UrlNormalizer.initialize(); - Piwik_Overlay_UrlNormalizer.setExcludedParameters(['excluded1', 'excluded2', 'excluded3']); - - Piwik_Overlay_UrlNormalizer.setBaseHref(false); - - Piwik_Overlay_UrlNormalizer.setCurrentDomain('example.com'); - Piwik_Overlay_UrlNormalizer.setCurrentUrl('https://www.example.com/current/test.html?asdfasdf'); - - test([ - [ - 'relative/path/', - 'example.com/current/relative/path/' - ], [ - 'http://www.example2.com/path/foo.html', - 'example2.com/path/foo.html' - ] - ]); - - Piwik_Overlay_UrlNormalizer.setCurrentDomain('www.example3.com'); - Piwik_Overlay_UrlNormalizer.setCurrentUrl('http://example3.com/current/folder/'); - - test([[ - 'relative.html', - 'example3.com/current/folder/relative.html' - ]]); - - - Piwik_Overlay_UrlNormalizer.setBaseHref('http://example.com/base/'); - - test([ - [ - 'http://www.example2.com/my/test/path.html?id=2&excluded2=foo#MyAnchor', - 'example2.com/my/test/path.html?id=2#MyAnchor' - ], [ - '/my/test/foo/../path.html?excluded1=foo&excluded2=foo&excluded3=foo', - 'example3.com/my/test/path.html' - ], [ - 'path/./test//test///foo.bar?excluded2=foo&id=3', - 'example.com/base/path/test/test/foo.bar?id=3' - ], [ - 'path/./test//test///foo.bar?excluded2=foo#Anchor', - 'example.com/base/path/test/test/foo.bar#Anchor' - ], [ - 'https://example2.com//test.html?id=3&excluded1=foo&bar=baz#asdf', - 'example2.com/test.html?id=3&bar=baz#asdf' - ], [ - '#', - '' - ], [ - '#Anchor', - '' - ], [ - '/', - 'example3.com/' - ] - ]); - }); + // support for setCustomRequestProcessing( customRequestContentProcessingLogic ) + test("Tracker setCustomRequestProcessing() and getRequest()", function() { + expect(4); + + var tracker = Piwik.getTracker("trackerUrl", "42"); + + tracker.setCustomRequestProcessing(function(request){ + var pairs = request.split('&'); + var result = {}; + pairs.forEach(function(pair) { + pair = pair.split('='); + result[pair[0]] = decodeURIComponent(pair[1] || ''); + }); + return JSON.stringify(result); + }); + + var json = JSON.parse(tracker.getRequest('hello=world')); + equal( json.hello, 'world'); + equal( json.idsite, '42' ); + equal( json.rec, 1); + ok( json.r.length > 0 ); + }); + + // support for addPlugin( pluginName, pluginObj ) + test("Tracker addPlugin() and getRequest()", function() { + expect(12); + + var tracker = Piwik.getTracker(); + + var litp = (function() { + var lastInteractionType = ""; + function ecommerce() { lastInteractionType = "ecommerce"; } + function event() { lastInteractionType = "event"; } + function goal() { lastInteractionType = "goal"; } + function link() { lastInteractionType = "link"; } + function load() { lastInteractionType = "load"; } + function log() { lastInteractionType = "log"; } + function ping() { lastInteractionType = "ping"; } + function sitesearch() { lastInteractionType = "sitesearch"; } + function unload() { lastInteractionType = "unload"; } + function getLastInteractionType() { return lastInteractionType; } + + return { + ecommerce: ecommerce, + event : event, + goal : goal, + link : link, + load : load, + log : log, + ping: ping, + sitesearch : sitesearch, + unload : unload, + getLastInteractionType: getLastInteractionType + }; + })(); + + tracker.addPlugin("interactionTypePlugin", litp); + + ok(litp.getLastInteractionType() !== 'ecommerce'); + tracker.trackEcommerceOrder("ORDER ID YES", 666.66); + ok(litp.getLastInteractionType() === 'ecommerce'); + + ok(litp.getLastInteractionType() !== 'event'); + tracker.trackEvent("Event Category", "Event Action"); + ok(litp.getLastInteractionType() === 'event'); + + ok(litp.getLastInteractionType() !== 'goal'); + tracker.trackGoal(42); + ok(litp.getLastInteractionType() === 'goal'); + + ok(litp.getLastInteractionType() !== 'link'); + tracker.trackLink("http://example.ca", "link"); + ok(litp.getLastInteractionType() === 'link'); + + ok(litp.getLastInteractionType() !== 'log'); + tracker.trackPageView(); + ok(litp.getLastInteractionType() === 'log'); + + ok(litp.getLastInteractionType() !== 'sitesearch'); + tracker.trackSiteSearch("search Keyword"); + ok(litp.getLastInteractionType() === 'sitesearch'); + }); + + test("prefixPropertyName()", function() { + expect(3); + + var tracker = Piwik.getTracker(); + + equal( typeof tracker.hook.test._prefixPropertyName, 'function', 'prefixPropertyName' ); + equal( tracker.hook.test._prefixPropertyName('', 'hidden'), 'hidden', 'no prefix' ); + equal( tracker.hook.test._prefixPropertyName('webkit', 'hidden'), 'webkitHidden', 'webkit prefix' ); + }); + + test("Internal timers and setLinkTrackingTimer()", function() { + expect(5); + + var tracker = Piwik.getTracker(); + + ok( ! ( _paq instanceof Array ), "async tracker proxy not an array" ); + equal( typeof tracker, typeof _paq, "async tracker proxy" ); + + var startTime, stopTime; + + equal( typeof tracker.hook.test._beforeUnloadHandler, 'function', 'beforeUnloadHandler' ); + + startTime = new Date(); + tracker.hook.test._beforeUnloadHandler(); + stopTime = new Date(); + var msSinceStarted = (stopTime.getTime() - startTime.getTime()); + ok( msSinceStarted < 510, 'beforeUnloadHandler(): ' + msSinceStarted + ' was greater than 510 ' ); + + tracker.setLinkTrackingTimer(2000); + startTime = new Date(); + tracker.trackPageView(); + tracker.hook.test._beforeUnloadHandler(); + stopTime = new Date(); + ok( (stopTime.getTime() - startTime.getTime()) >= 2000, 'setLinkTrackingTimer()' ); + }); + + test("Overlay URL Normalizer", function() { + expect(11); + + var test = function(testCases) { + for (var i = 0; i < testCases.length; i++) { + var observed = Piwik_Overlay_UrlNormalizer.normalize(testCases[i][0]); + var expected = testCases[i][1]; + equal(observed, expected, testCases[i][0]); + } + }; + + Piwik_Overlay_UrlNormalizer.initialize(); + Piwik_Overlay_UrlNormalizer.setExcludedParameters(['excluded1', 'excluded2', 'excluded3']); + + Piwik_Overlay_UrlNormalizer.setBaseHref(false); + + Piwik_Overlay_UrlNormalizer.setCurrentDomain('example.com'); + Piwik_Overlay_UrlNormalizer.setCurrentUrl('https://www.example.com/current/test.html?asdfasdf'); + + test([ + [ + 'relative/path/', + 'example.com/current/relative/path/' + ], [ + 'http://www.example2.com/path/foo.html', + 'example2.com/path/foo.html' + ] + ]); + + Piwik_Overlay_UrlNormalizer.setCurrentDomain('www.example3.com'); + Piwik_Overlay_UrlNormalizer.setCurrentUrl('http://example3.com/current/folder/'); + + test([[ + 'relative.html', + 'example3.com/current/folder/relative.html' + ]]); + + + Piwik_Overlay_UrlNormalizer.setBaseHref('http://example.com/base/'); + + test([ + [ + 'http://www.example2.com/my/test/path.html?id=2&excluded2=foo#MyAnchor', + 'example2.com/my/test/path.html?id=2#MyAnchor' + ], [ + '/my/test/foo/../path.html?excluded1=foo&excluded2=foo&excluded3=foo', + 'example3.com/my/test/path.html' + ], [ + 'path/./test//test///foo.bar?excluded2=foo&id=3', + 'example.com/base/path/test/test/foo.bar?id=3' + ], [ + 'path/./test//test///foo.bar?excluded2=foo#Anchor', + 'example.com/base/path/test/test/foo.bar#Anchor' + ], [ + 'https://example2.com//test.html?id=3&excluded1=foo&bar=baz#asdf', + 'example2.com/test.html?id=3&bar=baz#asdf' + ], [ + '#', + '' + ], [ + '#Anchor', + '' + ], [ + '/', + 'example3.com/' + ] + ]); + }); <?php if ($sqlite) { - ?> - - module("request", { - setup: function () { - ok(true, "request.setup"); - - deleteCookies(); - ok(document.cookie === "", "deleteCookies"); - }, - teardown: function () { - ok(true, "request.teardown"); - } - }); - - test("tracking", function() { - expect(97); - - /* - * Prevent Opera and HtmlUnit from performing the default action (i.e., load the href URL) - */ - var stopEvent = function (evt) { - evt = evt || window.event; - -// evt.cancelBubble = true; - evt.returnValue = false; - - if (evt.preventDefault) - evt.preventDefault(); -// if (evt.stopPropagation) -// evt.stopPropagation(); - -// return false; - }; - - var tracker = Piwik.getTracker(); - tracker.setTrackerUrl("piwik.php"); - tracker.setSiteId(1); - - function wait(msecs) - { - var start = new Date().getTime(); - var cur = start - while(cur - start < msecs) - { - cur = new Date().getTime(); - } - } - - var visitorIdStart = tracker.getVisitorId(); - // need to wait at least 1 second so that the cookie would be different, if it wasnt persisted - wait(2000); - var visitorIdStart2 = tracker.getVisitorId(); - ok( visitorIdStart == visitorIdStart2, "getVisitorId() same when called twice with more than 1 second delay"); - var customUrl = "http://localhost.localdomain/?utm_campaign=YEAH&utm_term=RIGHT!"; - tracker.setCustomUrl(customUrl); - - tracker.setCustomData({ "token" : getToken() }); - var data = tracker.getCustomData(); - ok( getToken() != "" && data.token == data["token"] && data.token == getToken(), "setCustomData() , getCustomData()" ); - - // Custom variables with integer/float values - tracker.setCustomVariable(1, 1, 2, "visit"); - deepEqual( tracker.getCustomVariable(1, "visit"), ["1", "2"], "setCustomVariable() with integer name/value" ); - tracker.setCustomVariable(1, 1, 0, "visit"); - deepEqual( tracker.getCustomVariable(1, "visit"), ["1", "0"], "setCustomVariable() with integer name/value" ); - tracker.setCustomVariable(2, 1.05, 2.11, "visit"); - deepEqual( tracker.getCustomVariable(2, "visit"), ["1.05", "2.11"], "setCustomVariable() with integer name/value" ); + ?> + + module("request", { + setup: function () { + ok(true, "request.setup"); + + deleteCookies(); + ok(document.cookie === "", "deleteCookies"); + }, + teardown: function () { + ok(true, "request.teardown"); + } + }); + + test("tracking", function() { + expect(97); + + /* + * Prevent Opera and HtmlUnit from performing the default action (i.e., load the href URL) + */ + var stopEvent = function (evt) { + evt = evt || window.event; + +// evt.cancelBubble = true; + evt.returnValue = false; + + if (evt.preventDefault) + evt.preventDefault(); +// if (evt.stopPropagation) +// evt.stopPropagation(); + +// return false; + }; + + var tracker = Piwik.getTracker(); + tracker.setTrackerUrl("piwik.php"); + tracker.setSiteId(1); + + function wait(msecs) + { + var start = new Date().getTime(); + var cur = start + while(cur - start < msecs) + { + cur = new Date().getTime(); + } + } + + var visitorIdStart = tracker.getVisitorId(); + // need to wait at least 1 second so that the cookie would be different, if it wasnt persisted + wait(2000); + var visitorIdStart2 = tracker.getVisitorId(); + ok( visitorIdStart == visitorIdStart2, "getVisitorId() same when called twice with more than 1 second delay"); + var customUrl = "http://localhost.localdomain/?utm_campaign=YEAH&utm_term=RIGHT!"; + tracker.setCustomUrl(customUrl); + + tracker.setCustomData({ "token" : getToken() }); + var data = tracker.getCustomData(); + ok( getToken() != "" && data.token == data["token"] && data.token == getToken(), "setCustomData() , getCustomData()" ); + + // Custom variables with integer/float values + tracker.setCustomVariable(1, 1, 2, "visit"); + deepEqual( tracker.getCustomVariable(1, "visit"), ["1", "2"], "setCustomVariable() with integer name/value" ); + tracker.setCustomVariable(1, 1, 0, "visit"); + deepEqual( tracker.getCustomVariable(1, "visit"), ["1", "0"], "setCustomVariable() with integer name/value" ); + tracker.setCustomVariable(2, 1.05, 2.11, "visit"); + deepEqual( tracker.getCustomVariable(2, "visit"), ["1.05", "2.11"], "setCustomVariable() with integer name/value" ); // custom variables with undefined names or values tracker.setCustomVariable(5);// setting a custom variable with no name and no value should not error @@ -926,123 +1013,123 @@ if ($sqlite) { deepEqual( tracker.getCustomVariable(5), ["new name", ""], "getting a custom variable with no value" ); tracker.deleteCustomVariable(5); - tracker.setDocumentTitle("PiwikTest"); + tracker.setDocumentTitle("PiwikTest"); - var referrerUrl = "http://referrer.example.com/page/sub?query=test&test2=test3"; - tracker.setReferrerUrl(referrerUrl); + var referrerUrl = "http://referrer.example.com/page/sub?query=test&test2=test3"; + tracker.setReferrerUrl(referrerUrl); - referrerTimestamp = Math.round(new Date().getTime() / 1000); - tracker.trackPageView(); + referrerTimestamp = Math.round(new Date().getTime() / 1000); + tracker.trackPageView(); - tracker.trackPageView("CustomTitleTest"); + tracker.trackPageView("CustomTitleTest"); - var customUrlShouldNotChangeCampaign = "http://localhost.localdomain/?utm_campaign=NONONONONONONO&utm_term=PLEASE NO!"; - tracker.setCustomUrl(customUrl); + var customUrlShouldNotChangeCampaign = "http://localhost.localdomain/?utm_campaign=NONONONONONONO&utm_term=PLEASE NO!"; + tracker.setCustomUrl(customUrl); - tracker.trackPageView(); + tracker.trackPageView(); - tracker.trackLink("http://example.ca", "link", { "token" : getToken() }); + tracker.trackLink("http://example.ca", "link", { "token" : getToken() }); - // async tracker proxy - _paq.push(["trackLink", "http://example.fr/async.zip", "download", { "token" : getToken() }]); + // async tracker proxy + _paq.push(["trackLink", "http://example.fr/async.zip", "download", { "token" : getToken() }]); - // push function - _paq.push([ function(t) { - tracker.trackLink("http://example.de", "link", { "token" : t }); - }, getToken() ]); + // push function + _paq.push([ function(t) { + tracker.trackLink("http://example.de", "link", { "token" : t }); + }, getToken() ]); - tracker.setRequestMethod("POST"); - tracker.trackGoal(42, 69, { "token" : getToken(), "boy" : "Michael", "girl" : "Mandy"}); + tracker.setRequestMethod("POST"); + tracker.trackGoal(42, 69, { "token" : getToken(), "boy" : "Michael", "girl" : "Mandy"}); - piwik_log("CompatibilityLayer", 1, "piwik.php", { "token" : getToken() }); + piwik_log("CompatibilityLayer", 1, "piwik.php", { "token" : getToken() }); - tracker.hook.test._addEventListener(_e("click8"), "click", stopEvent); - QUnit.triggerEvent( _e("click8"), "click" ); + tracker.hook.test._addEventListener(_e("click8"), "click", stopEvent); + QUnit.triggerEvent( _e("click8"), "click" ); - tracker.enableLinkTracking(); + tracker.enableLinkTracking(); - tracker.setRequestMethod("GET"); - var buttons = new Array("click1", "click2", "click3", "click4", "click5", "click6", "click7"); - for (var i=0; i < buttons.length; i++) { - tracker.hook.test._addEventListener(_e(buttons[i]), "click", stopEvent); - QUnit.triggerEvent( _e(buttons[i]), "click" ); - } + tracker.setRequestMethod("GET"); + var buttons = new Array("click1", "click2", "click3", "click4", "click5", "click6", "click7"); + for (var i=0; i < buttons.length; i++) { + tracker.hook.test._addEventListener(_e(buttons[i]), "click", stopEvent); + QUnit.triggerEvent( _e(buttons[i]), "click" ); + } - var xhr = window.XMLHttpRequest ? new window.XMLHttpRequest() : - window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : - null; + var xhr = window.XMLHttpRequest ? new window.XMLHttpRequest() : + window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : + null; - var clickDiv = _e("clickDiv"), - anchor = document.createElement("a"); + var clickDiv = _e("clickDiv"), + anchor = document.createElement("a"); - anchor.id = "click9"; - anchor.href = "http://example.us"; - clickDiv.innerHTML = ""; - clickDiv.appendChild(anchor); - tracker.addListener(anchor); - tracker.hook.test._addEventListener(anchor, "click", stopEvent); - QUnit.triggerEvent( _e("click9"), "click" ); + anchor.id = "click9"; + anchor.href = "http://example.us"; + clickDiv.innerHTML = ""; + clickDiv.appendChild(anchor); + tracker.addListener(anchor); + tracker.hook.test._addEventListener(anchor, "click", stopEvent); + QUnit.triggerEvent( _e("click9"), "click" ); - var visitorId1, visitorId2; + var visitorId1, visitorId2; - _paq.push([ function() { - visitorId1 = Piwik.getAsyncTracker().getVisitorId(); - }]); - visitorId2 = tracker.getVisitorId(); - ok( visitorId1 && visitorId1 != "" && visitorId2 && visitorId2 != "" && (visitorId1 == visitorId2), "getVisitorId()" ); + _paq.push([ function() { + visitorId1 = Piwik.getAsyncTracker().getVisitorId(); + }]); + visitorId2 = tracker.getVisitorId(); + ok( visitorId1 && visitorId1 != "" && visitorId2 && visitorId2 != "" && (visitorId1 == visitorId2), "getVisitorId()" ); - var visitorInfo1, visitorInfo2; + var visitorInfo1, visitorInfo2; - // Visitor INFO + Attribution INFO tests - tracker.setReferrerUrl(referrerUrl); - _paq.push([ function() { - visitorInfo1 = Piwik.getAsyncTracker().getVisitorInfo(); - attributionInfo1 = Piwik.getAsyncTracker().getAttributionInfo(); - referrer1 = Piwik.getAsyncTracker().getAttributionReferrerUrl(); - }]); - visitorInfo2 = tracker.getVisitorInfo(); - ok( visitorInfo1 && visitorInfo2 && visitorInfo1.length == visitorInfo2.length, "getVisitorInfo()" ); - for (var i = 0; i < 6; i++) { - ok( visitorInfo1[i] == visitorInfo2[i], "(loadVisitorId())["+i+"]" ); - } + // Visitor INFO + Attribution INFO tests + tracker.setReferrerUrl(referrerUrl); + _paq.push([ function() { + visitorInfo1 = Piwik.getAsyncTracker().getVisitorInfo(); + attributionInfo1 = Piwik.getAsyncTracker().getAttributionInfo(); + referrer1 = Piwik.getAsyncTracker().getAttributionReferrerUrl(); + }]); + visitorInfo2 = tracker.getVisitorInfo(); + ok( visitorInfo1 && visitorInfo2 && visitorInfo1.length == visitorInfo2.length, "getVisitorInfo()" ); + for (var i = 0; i < 6; i++) { + ok( visitorInfo1[i] == visitorInfo2[i], "(loadVisitorId())["+i+"]" ); + } - attributionInfo2 = tracker.getAttributionInfo(); - ok( attributionInfo1 && attributionInfo2 && attributionInfo1.length == attributionInfo2.length, "getAttributionInfo()" ); - referrer2 = tracker.getAttributionReferrerUrl(); - ok( referrer2 == referrerUrl, "getAttributionReferrerUrl()" ); - ok( referrer1 == referrerUrl, "async getAttributionReferrerUrl()" ); - referrerTimestamp2 = tracker.getAttributionReferrerTimestamp(); - ok( referrerTimestamp2 == referrerTimestamp, "tracker.getAttributionReferrerTimestamp()" ); - campaignName2 = tracker.getAttributionCampaignName(); - campaignKeyword2 = tracker.getAttributionCampaignKeyword(); - ok( campaignName2 == "YEAH", "getAttributionCampaignName()"); - ok( campaignKeyword2 == "RIGHT!", "getAttributionCampaignKeyword()"); + attributionInfo2 = tracker.getAttributionInfo(); + ok( attributionInfo1 && attributionInfo2 && attributionInfo1.length == attributionInfo2.length, "getAttributionInfo()" ); + referrer2 = tracker.getAttributionReferrerUrl(); + ok( referrer2 == referrerUrl, "getAttributionReferrerUrl()" ); + ok( referrer1 == referrerUrl, "async getAttributionReferrerUrl()" ); + referrerTimestamp2 = tracker.getAttributionReferrerTimestamp(); + ok( referrerTimestamp2 == referrerTimestamp, "tracker.getAttributionReferrerTimestamp()" ); + campaignName2 = tracker.getAttributionCampaignName(); + campaignKeyword2 = tracker.getAttributionCampaignKeyword(); + ok( campaignName2 == "YEAH", "getAttributionCampaignName()"); + ok( campaignKeyword2 == "RIGHT!", "getAttributionCampaignKeyword()"); - // Test visitor ID at the start is the same at the end - var visitorIdEnd = tracker.getVisitorId(); - ok( visitorIdStart == visitorIdEnd, "tracker.getVisitorId() same at the start and end of process"); + // Test visitor ID at the start is the same at the end + var visitorIdEnd = tracker.getVisitorId(); + ok( visitorIdStart == visitorIdEnd, "tracker.getVisitorId() same at the start and end of process"); - // Custom variables - tracker.setCookieNamePrefix("PREFIX"); + // Custom variables + tracker.setCookieNamePrefix("PREFIX"); tracker.setCustomVariable(1, "cookiename", "cookievalue"); - deepEqual( tracker.getCustomVariable(1), ["cookiename", "cookievalue"], "setCustomVariable(cvarExists), getCustomVariable()" ); - tracker.setCustomVariable(2, "cookiename2", "cookievalue2", "visit"); - deepEqual( tracker.getCustomVariable(2), ["cookiename2", "cookievalue2"], "setCustomVariable(cvarExists), getCustomVariable()" ); - deepEqual( tracker.getCustomVariable(2, "visit"), ["cookiename2", "cookievalue2"], "setCustomVariable(cvarExists), getCustomVariable()" ); - deepEqual( tracker.getCustomVariable(2, 2), ["cookiename2", "cookievalue2"], "GA compability - setCustomVariable(cvarExists), getCustomVariable()" ); - tracker.setCustomVariable(2, "cookiename2PAGE", "cookievalue2PAGE", "page"); - deepEqual( tracker.getCustomVariable(2, "page"), ["cookiename2PAGE", "cookievalue2PAGE"], "setCustomVariable(cvarExists), getCustomVariable()" ); - deepEqual( tracker.getCustomVariable(2, 3), ["cookiename2PAGE", "cookievalue2PAGE"], "GA compability - setCustomVariable(cvarExists), getCustomVariable()" ); - tracker.setCustomVariable(2, "cookiename2EVENT", "cookievalue2EVENT", "event"); - deepEqual( tracker.getCustomVariable(2, "event"), ["cookiename2EVENT", "cookievalue2EVENT"], "CustomVariable and event scope" ); - - tracker.trackPageView("SaveCustomVariableCookie"); - - // test Site Search - tracker.trackSiteSearch("No result keyword éà ", "Search cat", 0); - tracker.trackSiteSearch("Keyword with 10 results", false, 10); - tracker.trackSiteSearch("search Keyword"); + deepEqual( tracker.getCustomVariable(1), ["cookiename", "cookievalue"], "setCustomVariable(cvarExists), getCustomVariable()" ); + tracker.setCustomVariable(2, "cookiename2", "cookievalue2", "visit"); + deepEqual( tracker.getCustomVariable(2), ["cookiename2", "cookievalue2"], "setCustomVariable(cvarExists), getCustomVariable()" ); + deepEqual( tracker.getCustomVariable(2, "visit"), ["cookiename2", "cookievalue2"], "setCustomVariable(cvarExists), getCustomVariable()" ); + deepEqual( tracker.getCustomVariable(2, 2), ["cookiename2", "cookievalue2"], "GA compability - setCustomVariable(cvarExists), getCustomVariable()" ); + tracker.setCustomVariable(2, "cookiename2PAGE", "cookievalue2PAGE", "page"); + deepEqual( tracker.getCustomVariable(2, "page"), ["cookiename2PAGE", "cookievalue2PAGE"], "setCustomVariable(cvarExists), getCustomVariable()" ); + deepEqual( tracker.getCustomVariable(2, 3), ["cookiename2PAGE", "cookievalue2PAGE"], "GA compability - setCustomVariable(cvarExists), getCustomVariable()" ); + tracker.setCustomVariable(2, "cookiename2EVENT", "cookievalue2EVENT", "event"); + deepEqual( tracker.getCustomVariable(2, "event"), ["cookiename2EVENT", "cookievalue2EVENT"], "CustomVariable and event scope" ); + + tracker.trackPageView("SaveCustomVariableCookie"); + + // test Site Search + tracker.trackSiteSearch("No result keyword éà ", "Search cat", 0); + tracker.trackSiteSearch("Keyword with 10 results", false, 10); + tracker.trackSiteSearch("search Keyword"); // Testing Custom events tracker.setCustomVariable(1, "cvarEventName", "cvarEventValue", "event"); @@ -1050,70 +1137,70 @@ if ($sqlite) { tracker.trackEvent("Event Category2", "Event Action2", "Event Name2"); tracker.trackEvent("Event Category3", "Event Action3", "Event Name3", 3.333); - //Ecommerce views - tracker.setEcommerceView( "", false, ["CATEGORY1","CATEGORY2"] ); - deepEqual( tracker.getCustomVariable(3, "page"), false, "Ecommerce view SKU"); - tracker.setEcommerceView( "SKUMultiple", false, ["CATEGORY1","CATEGORY2"] ); - deepEqual( tracker.getCustomVariable(4, "page"), ["_pkn",""], "Ecommerce view Name"); - deepEqual( tracker.getCustomVariable(5, "page"), ["_pkc","[\"CATEGORY1\",\"CATEGORY2\"]"], "Ecommerce view Category"); - tracker.trackPageView("MultipleCategories"); - - var tracker2 = Piwik.getTracker(); - tracker2.setTrackerUrl("piwik.php"); - tracker2.setSiteId(1); - tracker2.setCustomData({ "token" : getToken() }); - tracker2.setCookieNamePrefix("PREFIX"); - deepEqual( tracker2.getCustomVariable(1), ["cookiename", "cookievalue"], "getCustomVariable(cvarExists) from cookie" ); - ok( /PREFIX/.test( document.cookie ), "setCookieNamePrefix()" ); - - tracker2.deleteCustomVariable(1); - //console.log(tracker2.getCustomVariable(1)); - ok( tracker2.getCustomVariable(1) === false, "VISIT deleteCustomVariable(), getCustomVariable() === false" ); - tracker2.deleteCustomVariable(2, "page"); - //console.log(tracker2.getCustomVariable(2, "page")); - ok( tracker2.getCustomVariable(2, "page") === false, "PAGE deleteCustomVariable(), getCustomVariable() === false" ); - tracker2.trackPageView("DeleteCustomVariableCookie"); - - var tracker3 = Piwik.getTracker(); - tracker3.setTrackerUrl("piwik.php"); - tracker3.setSiteId(1); - tracker3.setCustomData({ "token" : getToken() }); - tracker3.setCookieNamePrefix("PREFIX"); - ok( tracker3.getCustomVariable(1) === false, "getCustomVariable(cvarDeleted) from cookie === false" ); - - // Ecommerce Views - tracker3.setEcommerceView( "SKU", "NAME HERE", "CATEGORY HERE" ); - deepEqual( tracker3.getCustomVariable(3, "page"), ["_pks","SKU"], "Ecommerce view SKU"); - deepEqual( tracker3.getCustomVariable(4, "page"), ["_pkn","NAME HERE"], "Ecommerce view Name"); - deepEqual( tracker3.getCustomVariable(5, "page"), ["_pkc","CATEGORY HERE"], "Ecommerce view Category"); - tracker3.trackPageView("EcommerceView"); - - //Ecommerce tests - tracker3.addEcommerceItem("SKU PRODUCT", "PRODUCT NAME", "PRODUCT CATEGORY", 11.1111, 2); - tracker3.addEcommerceItem("SKU PRODUCT", "random", "random PRODUCT CATEGORY", 11.1111, 2); - tracker3.addEcommerceItem("SKU ONLY SKU", "", "", "", ""); - tracker3.addEcommerceItem("SKU ONLY NAME", "PRODUCT NAME 2", "", ""); - tracker3.addEcommerceItem("SKU NO PRICE NO QUANTITY", "PRODUCT NAME 3", "CATEGORY", "", "" ); - tracker3.addEcommerceItem("SKU ONLY" ); - tracker3.trackEcommerceCartUpdate( 555.55 ); - tracker3.trackEcommerceOrder( "ORDER ID YES", 666.66, 333, 222, 111, 1 ); - - // do not track - tracker3.setDoNotTrack(false); - - // Append tracking url parameter - tracker3.appendToTrackingUrl("appended=1&appended2=value"); + //Ecommerce views + tracker.setEcommerceView( "", false, ["CATEGORY1","CATEGORY2"] ); + deepEqual( tracker.getCustomVariable(3, "page"), false, "Ecommerce view SKU"); + tracker.setEcommerceView( "SKUMultiple", false, ["CATEGORY1","CATEGORY2"] ); + deepEqual( tracker.getCustomVariable(4, "page"), ["_pkn",""], "Ecommerce view Name"); + deepEqual( tracker.getCustomVariable(5, "page"), ["_pkc","[\"CATEGORY1\",\"CATEGORY2\"]"], "Ecommerce view Category"); + tracker.trackPageView("MultipleCategories"); + + var tracker2 = Piwik.getTracker(); + tracker2.setTrackerUrl("piwik.php"); + tracker2.setSiteId(1); + tracker2.setCustomData({ "token" : getToken() }); + tracker2.setCookieNamePrefix("PREFIX"); + deepEqual( tracker2.getCustomVariable(1), ["cookiename", "cookievalue"], "getCustomVariable(cvarExists) from cookie" ); + ok( /PREFIX/.test( document.cookie ), "setCookieNamePrefix()" ); + + tracker2.deleteCustomVariable(1); + //console.log(tracker2.getCustomVariable(1)); + ok( tracker2.getCustomVariable(1) === false, "VISIT deleteCustomVariable(), getCustomVariable() === false" ); + tracker2.deleteCustomVariable(2, "page"); + //console.log(tracker2.getCustomVariable(2, "page")); + ok( tracker2.getCustomVariable(2, "page") === false, "PAGE deleteCustomVariable(), getCustomVariable() === false" ); + tracker2.trackPageView("DeleteCustomVariableCookie"); + + var tracker3 = Piwik.getTracker(); + tracker3.setTrackerUrl("piwik.php"); + tracker3.setSiteId(1); + tracker3.setCustomData({ "token" : getToken() }); + tracker3.setCookieNamePrefix("PREFIX"); + ok( tracker3.getCustomVariable(1) === false, "getCustomVariable(cvarDeleted) from cookie === false" ); + + // Ecommerce Views + tracker3.setEcommerceView( "SKU", "NAME HERE", "CATEGORY HERE" ); + deepEqual( tracker3.getCustomVariable(3, "page"), ["_pks","SKU"], "Ecommerce view SKU"); + deepEqual( tracker3.getCustomVariable(4, "page"), ["_pkn","NAME HERE"], "Ecommerce view Name"); + deepEqual( tracker3.getCustomVariable(5, "page"), ["_pkc","CATEGORY HERE"], "Ecommerce view Category"); + tracker3.trackPageView("EcommerceView"); + + //Ecommerce tests + tracker3.addEcommerceItem("SKU PRODUCT", "PRODUCT NAME", "PRODUCT CATEGORY", 11.1111, 2); + tracker3.addEcommerceItem("SKU PRODUCT", "random", "random PRODUCT CATEGORY", 11.1111, 2); + tracker3.addEcommerceItem("SKU ONLY SKU", "", "", "", ""); + tracker3.addEcommerceItem("SKU ONLY NAME", "PRODUCT NAME 2", "", ""); + tracker3.addEcommerceItem("SKU NO PRICE NO QUANTITY", "PRODUCT NAME 3", "CATEGORY", "", "" ); + tracker3.addEcommerceItem("SKU ONLY" ); + tracker3.trackEcommerceCartUpdate( 555.55 ); + tracker3.trackEcommerceOrder( "ORDER ID YES", 666.66, 333, 222, 111, 1 ); + + // do not track + tracker3.setDoNotTrack(false); + + // Append tracking url parameter + tracker3.appendToTrackingUrl("appended=1&appended2=value"); // Track pageview - tracker3.trackPageView("DoTrack"); + tracker3.trackPageView("DoTrack"); - // Firefox 9: navigator.doNotTrack is read-only - navigator.doNotTrack = "yes"; - if (navigator.doNotTrack === "yes") - { - tracker3.setDoNotTrack(true); - tracker3.trackPageView("DoNotTrack"); - } + // Firefox 9: navigator.doNotTrack is read-only + navigator.doNotTrack = "yes"; + if (navigator.doNotTrack === "yes") + { + tracker3.setDoNotTrack(true); + tracker3.trackPageView("DoNotTrack"); + } // Testing JavaScriptErrorTracking START var oldOnError = window.onerror; @@ -1144,138 +1231,138 @@ if ($sqlite) { // Testing JavaScriptErrorTracking END - stop(); - setTimeout(function() { - xhr.open("GET", "piwik.php?requests=" + getToken(), false); - xhr.send(null); - results = xhr.responseText; - equal( (/<span\>([0-9]+)\<\/span\>/.exec(results))[1], "30", "count tracking events" ); - - // tracking requests - ok( /PiwikTest/.test( results ), "trackPageView(), setDocumentTitle()" ); - ok( results.indexOf("tests/javascript/piwik.php?action_name=Asynchronous%20Tracker%20ONE&idsite=1&rec=1") >= 0 , "async trackPageView() called before setTrackerUrl() should work" ); - ok( /Asynchronous%20tracking%20TWO/.test( results ), "async trackPageView() called after another trackPageView()" ); - ok( /CustomTitleTest/.test( results ), "trackPageView(customTitle)" ); - ok( ! /click.example.com/.test( results ), "click: ignore href=javascript" ); - ok( /example.ca/.test( results ), "trackLink()" ); - ok( /example.fr/.test( results ), "async trackLink()" ); - ok( /example.de/.test( results ), "push function" ); - ok( /example.us/.test( results ), "addListener()" ); - - ok( /example.net/.test( results ), "setRequestMethod(GET), click: implicit outlink (by outbound URL)" ); - ok( /example.html/.test( results ), "click: explicit outlink" ); - ok( /example.pdf/.test( results ), "click: implicit download (by file extension)" ); - ok( /example.word/.test( results ), "click: explicit download" ); - - ok( ! /example.exe/.test( results ), "enableLinkTracking()" ); - ok( ! /example.php/.test( results ), "click: ignored example.php" ); - ok( ! /example.org/.test( results ), "click: ignored example.org" ); - ok( /idgoal=42.*?revenue=69.*?Michael.*?Mandy/.test( results ), "setRequestMethod(POST), trackGoal()" ); - ok( /CompatibilityLayer/.test( results ), "piwik_log(): compatibility layer" ); - ok( /localhost.localdomain/.test( results ), "setCustomUrl()" ); - ok( /referrer.example.com/.test( results ), "setReferrerUrl()" ); - ok( /cookiename/.test( results ) && /cookievalue/.test( results ), "tracking request contains custom variable" ); - ok( /DeleteCustomVariableCookie/.test( results ), "tracking request deleting custom variable" ); - ok( /DoTrack/.test( results ), "setDoNotTrack(false)" ); - ok( ! /DoNotTrack/.test( results ), "setDoNotTrack(true)" ); - - // Test Custom variables - ok( /SaveCustomVariableCookie.*&cvar=%7B%222%22%3A%5B%22cookiename2PAGE%22%2C%22cookievalue2PAGE%22%5D%7D.*&_cvar=%7B%221%22%3A%5B%22cookiename%22%2C%22cookievalue%22%5D%2C%222%22%3A%5B%22cookiename2%22%2C%22cookievalue2%22%5D%7D/.test(results), "test custom vars are set"); - - // Test campaign parameters set - ok( /&_rcn=YEAH&_rck=RIGHT!/.test( results), "Test campaign parameters found"); - ok( /&_ref=http%3A%2F%2Freferrer.example.com%2Fpage%2Fsub%3Fquery%3Dtest%26test2%3Dtest3/.test( results), "Test cookie Ref URL found "); - - // Test site search - ok( /search=No%20result%20keyword%20%C3%A9%C3%A0&search_cat=Search%20cat&search_count=0&idsite=1/.test(results), "site search, cat, 0 result "); - ok( /search=Keyword%20with%2010%20results&search_count=10&idsite=1/.test(results), "site search, no cat, 10 results "); - ok( /search=search%20Keyword&idsite=1/.test(results), "site search, no cat, no results count "); - - // Test events - ok( /(e_c=Event%20Category&e_a=Event%20Action&idsite=1).*(&e_cvar=%7B%221%22%3A%5B%22cvarEventName%22%2C%22cvarEventValue%22%5D%2C%222%22%3A%5B%22cookiename2EVENT%22%2C%22cookievalue2EVENT%22%5D%7D)/.test(results), "event Category + Action + Custom Variable"); - ok( /e_c=Event%20Category2&e_a=Event%20Action2&e_n=Event%20Name2&idsite=1/.test(results), "event Category + Action + Name"); - ok( /e_c=Event%20Category3&e_a=Event%20Action3&e_n=Event%20Name3&e_v=3.333&idsite=1/.test(results), "event Category + Action + Name + Value"); - - // ecommerce view - ok( /(EcommerceView).*(&cvar=%7B%225%22%3A%5B%22_pkc%22%2C%22CATEGORY%20HERE%22%5D%2C%223%22%3A%5B%22_pks%22%2C%22SKU%22%5D%2C%224%22%3A%5B%22_pkn%22%2C%22NAME%20HERE%22%5D%7D)/.test(results) - || /(EcommerceView).*(&cvar=%7B%223%22%3A%5B%22_pks%22%2C%22SKU%22%5D%2C%224%22%3A%5B%22_pkn%22%2C%22NAME%20HERE%22%5D%2C%225%22%3A%5B%22_pkc%22%2C%22CATEGORY%20HERE%22%5D%7D)/.test(results), "ecommerce view"); - - // ecommerce view multiple categories - ok( /(MultipleCategories).*(&cvar=%7B%222%22%3A%5B%22cookiename2PAGE%22%2C%22cookievalue2PAGE%22%5D%2C%225%22%3A%5B%22_pkc%22%2C%22%5B%5C%22CATEGORY1%5C%22%2C%5C%22CATEGORY2%5C%22%5D%22%5D%2C%223%22%3A%5B%22_pks%22%2C%22SKUMultiple%22%5D%2C%224%22%3A%5B%22_pkn%22%2C%22%22%5D%7D)/.test(results) - || /(MultipleCategories).*(&cvar=%7B%222%22%3A%5B%22cookiename2PAGE%22%2C%22cookievalue2PAGE%22%5D%2C%223%22%3A%5B%22_pks%22%2C%22SKUMultiple%22%5D%2C%224%22%3A%5B%22_pkn%22%2C%22%22%5D%2C%225%22%3A%5B%22_pkc%22%2C%22%5B%5C%22CATEGORY1%5C%22%2C%5C%22CATEGORY2%5C%22%5D%22%5D%7D)/.test(results), "ecommerce view multiple categories"); - - // Ecommerce order - ok( /idgoal=0&ec_id=ORDER%20ID%20YES&revenue=666.66&ec_st=333&ec_tx=222&ec_sh=111&ec_dt=1&ec_items=%5B%5B%22SKU%20PRODUCT%22%2C%22random%22%2C%22random%20PRODUCT%20CATEGORY%22%2C11.1111%2C2%5D%2C%5B%22SKU%20ONLY%20SKU%22%2C%22%22%2C%22%22%2C0%2C1%5D%2C%5B%22SKU%20ONLY%20NAME%22%2C%22PRODUCT%20NAME%202%22%2C%22%22%2C0%2C1%5D%2C%5B%22SKU%20NO%20PRICE%20NO%20QUANTITY%22%2C%22PRODUCT%20NAME%203%22%2C%22CATEGORY%22%2C0%2C1%5D%2C%5B%22SKU%20ONLY%22%2C%22%22%2C%22%22%2C0%2C1%5D%5D/.test( results ), "logEcommerceOrder() with items" ); - - // Not set for the first ecommerce order - ok( ! /idgoal=0&ec_id=ORDER%20ID.*_ects=1/.test(results), "Ecommerce last timestamp set"); - - // Ecommerce last timestamp set properly for subsequent page view - ok( /DoTrack.*_ects=1/.test(results), "Ecommerce last timestamp set"); - - // Cart update - ok( /idgoal=0&revenue=555.55&ec_items=%5B%5B%22SKU%20PRODUCT%22%2C%22random%22%2C%22random%20PRODUCT%20CATEGORY%22%2C11.1111%2C2%5D%2C%5B%22SKU%20ONLY%20SKU%22%2C%22%22%2C%22%22%2C0%2C1%5D%2C%5B%22SKU%20ONLY%20NAME%22%2C%22PRODUCT%20NAME%202%22%2C%22%22%2C0%2C1%5D%2C%5B%22SKU%20NO%20PRICE%20NO%20QUANTITY%22%2C%22PRODUCT%20NAME%203%22%2C%22CATEGORY%22%2C0%2C1%5D%2C%5B%22SKU%20ONLY%22%2C%22%22%2C%22%22%2C0%2C1%5D%5D/.test( results ), "logEcommerceCartUpdate() with items" ); - - // parameters inserted by plugin hooks - ok( /testlog/.test( results ), "plugin hook log" ); - ok( /testlink/.test( results ), "plugin hook link" ); - ok( /testgoal/.test( results ), "plugin hook goal" ); - - // Testing the Tracking URL append - ok( /&appended=1&appended2=value/.test( results ), "appendToTrackingUrl(query) function"); + stop(); + setTimeout(function() { + xhr.open("GET", "piwik.php?requests=" + getToken(), false); + xhr.send(null); + results = xhr.responseText; + equal( (/<span\>([0-9]+)\<\/span\>/.exec(results))[1], "30", "count tracking events" ); + + // tracking requests + ok( /PiwikTest/.test( results ), "trackPageView(), setDocumentTitle()" ); + ok( results.indexOf("tests/javascript/piwik.php?action_name=Asynchronous%20Tracker%20ONE&idsite=1&rec=1") >= 0 , "async trackPageView() called before setTrackerUrl() should work" ); + ok( /Asynchronous%20tracking%20TWO/.test( results ), "async trackPageView() called after another trackPageView()" ); + ok( /CustomTitleTest/.test( results ), "trackPageView(customTitle)" ); + ok( ! /click.example.com/.test( results ), "click: ignore href=javascript" ); + ok( /example.ca/.test( results ), "trackLink()" ); + ok( /example.fr/.test( results ), "async trackLink()" ); + ok( /example.de/.test( results ), "push function" ); + ok( /example.us/.test( results ), "addListener()" ); + + ok( /example.net/.test( results ), "setRequestMethod(GET), click: implicit outlink (by outbound URL)" ); + ok( /example.html/.test( results ), "click: explicit outlink" ); + ok( /example.pdf/.test( results ), "click: implicit download (by file extension)" ); + ok( /example.word/.test( results ), "click: explicit download" ); + + ok( ! /example.exe/.test( results ), "enableLinkTracking()" ); + ok( ! /example.php/.test( results ), "click: ignored example.php" ); + ok( ! /example.org/.test( results ), "click: ignored example.org" ); + ok( /idgoal=42.*?revenue=69.*?Michael.*?Mandy/.test( results ), "setRequestMethod(POST), trackGoal()" ); + ok( /CompatibilityLayer/.test( results ), "piwik_log(): compatibility layer" ); + ok( /localhost.localdomain/.test( results ), "setCustomUrl()" ); + ok( /referrer.example.com/.test( results ), "setReferrerUrl()" ); + ok( /cookiename/.test( results ) && /cookievalue/.test( results ), "tracking request contains custom variable" ); + ok( /DeleteCustomVariableCookie/.test( results ), "tracking request deleting custom variable" ); + ok( /DoTrack/.test( results ), "setDoNotTrack(false)" ); + ok( ! /DoNotTrack/.test( results ), "setDoNotTrack(true)" ); + + // Test Custom variables + ok( /SaveCustomVariableCookie.*&cvar=%7B%222%22%3A%5B%22cookiename2PAGE%22%2C%22cookievalue2PAGE%22%5D%7D.*&_cvar=%7B%221%22%3A%5B%22cookiename%22%2C%22cookievalue%22%5D%2C%222%22%3A%5B%22cookiename2%22%2C%22cookievalue2%22%5D%7D/.test(results), "test custom vars are set"); + + // Test campaign parameters set + ok( /&_rcn=YEAH&_rck=RIGHT!/.test( results), "Test campaign parameters found"); + ok( /&_ref=http%3A%2F%2Freferrer.example.com%2Fpage%2Fsub%3Fquery%3Dtest%26test2%3Dtest3/.test( results), "Test cookie Ref URL found "); + + // Test site search + ok( /search=No%20result%20keyword%20%C3%A9%C3%A0&search_cat=Search%20cat&search_count=0&idsite=1/.test(results), "site search, cat, 0 result "); + ok( /search=Keyword%20with%2010%20results&search_count=10&idsite=1/.test(results), "site search, no cat, 10 results "); + ok( /search=search%20Keyword&idsite=1/.test(results), "site search, no cat, no results count "); + + // Test events + ok( /(e_c=Event%20Category&e_a=Event%20Action&idsite=1).*(&e_cvar=%7B%221%22%3A%5B%22cvarEventName%22%2C%22cvarEventValue%22%5D%2C%222%22%3A%5B%22cookiename2EVENT%22%2C%22cookievalue2EVENT%22%5D%7D)/.test(results), "event Category + Action + Custom Variable"); + ok( /e_c=Event%20Category2&e_a=Event%20Action2&e_n=Event%20Name2&idsite=1/.test(results), "event Category + Action + Name"); + ok( /e_c=Event%20Category3&e_a=Event%20Action3&e_n=Event%20Name3&e_v=3.333&idsite=1/.test(results), "event Category + Action + Name + Value"); + + // ecommerce view + ok( /(EcommerceView).*(&cvar=%7B%225%22%3A%5B%22_pkc%22%2C%22CATEGORY%20HERE%22%5D%2C%223%22%3A%5B%22_pks%22%2C%22SKU%22%5D%2C%224%22%3A%5B%22_pkn%22%2C%22NAME%20HERE%22%5D%7D)/.test(results) + || /(EcommerceView).*(&cvar=%7B%223%22%3A%5B%22_pks%22%2C%22SKU%22%5D%2C%224%22%3A%5B%22_pkn%22%2C%22NAME%20HERE%22%5D%2C%225%22%3A%5B%22_pkc%22%2C%22CATEGORY%20HERE%22%5D%7D)/.test(results), "ecommerce view"); + + // ecommerce view multiple categories + ok( /(MultipleCategories).*(&cvar=%7B%222%22%3A%5B%22cookiename2PAGE%22%2C%22cookievalue2PAGE%22%5D%2C%225%22%3A%5B%22_pkc%22%2C%22%5B%5C%22CATEGORY1%5C%22%2C%5C%22CATEGORY2%5C%22%5D%22%5D%2C%223%22%3A%5B%22_pks%22%2C%22SKUMultiple%22%5D%2C%224%22%3A%5B%22_pkn%22%2C%22%22%5D%7D)/.test(results) + || /(MultipleCategories).*(&cvar=%7B%222%22%3A%5B%22cookiename2PAGE%22%2C%22cookievalue2PAGE%22%5D%2C%223%22%3A%5B%22_pks%22%2C%22SKUMultiple%22%5D%2C%224%22%3A%5B%22_pkn%22%2C%22%22%5D%2C%225%22%3A%5B%22_pkc%22%2C%22%5B%5C%22CATEGORY1%5C%22%2C%5C%22CATEGORY2%5C%22%5D%22%5D%7D)/.test(results), "ecommerce view multiple categories"); + + // Ecommerce order + ok( /idgoal=0&ec_id=ORDER%20ID%20YES&revenue=666.66&ec_st=333&ec_tx=222&ec_sh=111&ec_dt=1&ec_items=%5B%5B%22SKU%20PRODUCT%22%2C%22random%22%2C%22random%20PRODUCT%20CATEGORY%22%2C11.1111%2C2%5D%2C%5B%22SKU%20ONLY%20SKU%22%2C%22%22%2C%22%22%2C0%2C1%5D%2C%5B%22SKU%20ONLY%20NAME%22%2C%22PRODUCT%20NAME%202%22%2C%22%22%2C0%2C1%5D%2C%5B%22SKU%20NO%20PRICE%20NO%20QUANTITY%22%2C%22PRODUCT%20NAME%203%22%2C%22CATEGORY%22%2C0%2C1%5D%2C%5B%22SKU%20ONLY%22%2C%22%22%2C%22%22%2C0%2C1%5D%5D/.test( results ), "logEcommerceOrder() with items" ); + + // Not set for the first ecommerce order + ok( ! /idgoal=0&ec_id=ORDER%20ID.*_ects=1/.test(results), "Ecommerce last timestamp set"); + + // Ecommerce last timestamp set properly for subsequent page view + ok( /DoTrack.*_ects=1/.test(results), "Ecommerce last timestamp set"); + + // Cart update + ok( /idgoal=0&revenue=555.55&ec_items=%5B%5B%22SKU%20PRODUCT%22%2C%22random%22%2C%22random%20PRODUCT%20CATEGORY%22%2C11.1111%2C2%5D%2C%5B%22SKU%20ONLY%20SKU%22%2C%22%22%2C%22%22%2C0%2C1%5D%2C%5B%22SKU%20ONLY%20NAME%22%2C%22PRODUCT%20NAME%202%22%2C%22%22%2C0%2C1%5D%2C%5B%22SKU%20NO%20PRICE%20NO%20QUANTITY%22%2C%22PRODUCT%20NAME%203%22%2C%22CATEGORY%22%2C0%2C1%5D%2C%5B%22SKU%20ONLY%22%2C%22%22%2C%22%22%2C0%2C1%5D%5D/.test( results ), "logEcommerceCartUpdate() with items" ); + + // parameters inserted by plugin hooks + ok( /testlog/.test( results ), "plugin hook log" ); + ok( /testlink/.test( results ), "plugin hook link" ); + ok( /testgoal/.test( results ), "plugin hook goal" ); + + // Testing the Tracking URL append + ok( /&appended=1&appended2=value/.test( results ), "appendToTrackingUrl(query) function"); // Testing the JavaScript Error Tracking - ok( /e_c=JavaScript%20Errors&e_a=http%3A%2F%2Fpiwik.org%2Fpath%2Fto%2Ffile.js%3Fcb%3D34343%3A44%3A12&e_n=Uncaught%20Error%3A%20The%20message&idsite=1/.test( results ), "enableJSErrorTracking() function with predefined onerror event"); - ok( /e_c=JavaScript%20Errors&e_a=http%3A%2F%2Fpiwik.org%2Fpath%2Fto%2Ffile.js%3Fcb%3D3kfkf%3A45&e_n=Second%20Error%3A%20With%20less%20data&idsite=1/.test( results ), "enableJSErrorTracking() function without predefined onerror event and less parameters"); + ok( /e_c=JavaScript%20Errors&e_a=http%3A%2F%2Fpiwik.org%2Fpath%2Fto%2Ffile.js%3Fcb%3D34343%3A44%3A12&e_n=Uncaught%20Error%3A%20The%20message&idsite=1/.test( results ), "enableJSErrorTracking() function with predefined onerror event"); + ok( /e_c=JavaScript%20Errors&e_a=http%3A%2F%2Fpiwik.org%2Fpath%2Fto%2Ffile.js%3Fcb%3D3kfkf%3A45&e_n=Second%20Error%3A%20With%20less%20data&idsite=1/.test( results ), "enableJSErrorTracking() function without predefined onerror event and less parameters"); - start(); - }, 5000); - }); - <?php + start(); + }, 5000); + }); + <?php } ?> } function addEventListener(element, eventType, eventHandler, useCapture) { - if (element.addEventListener) { - element.addEventListener(eventType, eventHandler, useCapture); - return true; - } - if (element.attachEvent) { - return element.attachEvent('on' + eventType, eventHandler); - } - element['on' + eventType] = eventHandler; + if (element.addEventListener) { + element.addEventListener(eventType, eventHandler, useCapture); + return true; + } + if (element.attachEvent) { + return element.attachEvent('on' + eventType, eventHandler); + } + element['on' + eventType] = eventHandler; } (function (f) { - if (document.addEventListener) { - addEventListener(document, 'DOMContentLoaded', function ready() { - document.removeEventListener('DOMContentLoaded', ready, false); - f(); - }); - } else if (document.attachEvent) { - document.attachEvent('onreadystatechange', function ready() { - if (document.readyState === 'complete') { - document.detachEvent('onreadystatechange', ready); - f(); - } - }); - - if (document.documentElement.doScroll && window === top) { - (function ready() { - if (!hasLoaded) { - try { - document.documentElement.doScroll('left'); - } catch (error) { - setTimeout(ready, 0); - return; - } - f(); - } - }()); - } - } - addEventListener(window, 'load', f, false); + if (document.addEventListener) { + addEventListener(document, 'DOMContentLoaded', function ready() { + document.removeEventListener('DOMContentLoaded', ready, false); + f(); + }); + } else if (document.attachEvent) { + document.attachEvent('onreadystatechange', function ready() { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', ready); + f(); + } + }); + + if (document.documentElement.doScroll && window === top) { + (function ready() { + if (!hasLoaded) { + try { + document.documentElement.doScroll('left'); + } catch (error) { + setTimeout(ready, 0); + return; + } + f(); + } + }()); + } + } + addEventListener(window, 'load', f, false); })(PiwikTest); </script> diff --git a/tests/lib/screenshot-testing/support/diff-viewer.js b/tests/lib/screenshot-testing/support/diff-viewer.js index b78ad64b17..f68eddf8d1 100644 --- a/tests/lib/screenshot-testing/support/diff-viewer.js +++ b/tests/lib/screenshot-testing/support/diff-viewer.js @@ -66,7 +66,7 @@ DiffViewerGenerator.prototype.generate = function (callback) { var expectedHtml = ''; if (!options['assume-artifacts']) { - expectedUrl = '../expected-ui-screenshots/' + filename; + expectedUrl = this.getUrlForPath(entry.expected); } expectedHtml += '<a href="' + expectedUrl + '">Expected</a> '; diff --git a/tests/lib/screenshot-testing/support/page-renderer.js b/tests/lib/screenshot-testing/support/page-renderer.js index 1dc4d06633..960879b655 100644 --- a/tests/lib/screenshot-testing/support/page-renderer.js +++ b/tests/lib/screenshot-testing/support/page-renderer.js @@ -229,11 +229,21 @@ PageRenderer.prototype.capture = function (outputPath, callback, selector) { function setClipRect (page, selector) { if (!selector) { - return; } var result = page.evaluate(function(selector) { + function isInvalidBoundingRect (rect) { + var docWidth = $(document).width(), + docHeight = $(document).height(); + + return !rect.width || !rect.height + || rect.left < 0 || rect.left > docWidth + || rect.top < 0 || rect.top > docHeight + || rect.right < 0 || rect.right > docWidth + || rect.bottom < 0 || rect.bottom > docHeight; + } + var element = window.jQuery(selector); if (element && element.length) { @@ -242,7 +252,7 @@ PageRenderer.prototype.capture = function (outputPath, callback, selector) { element.each(function (index, node) { var rect = node.getBoundingClientRect(); - if (!rect.width || !rect.height) { + if (isInvalidBoundingRect(rect)) { // element is not visible return; } diff --git a/tests/lib/screenshot-testing/support/test-environment.js b/tests/lib/screenshot-testing/support/test-environment.js index 4527b868d4..36807dac89 100644 --- a/tests/lib/screenshot-testing/support/test-environment.js +++ b/tests/lib/screenshot-testing/support/test-environment.js @@ -144,6 +144,10 @@ TestingEnvironment.prototype.setupFixture = function (fixtureClass, done) { droppedOnce = true; } + if (options['plugin']) { + args.push('--plugins=' + options['plugin']); + } + var self = this; this.executeConsoleCommand('tests:setup-fixture', args, function (code) { self.reload(); diff --git a/tests/resources/piwik-1.13-dump.sql b/tests/resources/piwik-1.13-dump.sql index fe38f2ae81..a79143de7a 100644 --- a/tests/resources/piwik-1.13-dump.sql +++ b/tests/resources/piwik-1.13-dump.sql @@ -20,13 +20,13 @@ -- -- --- Table structure for table `piwiktests_access` +-- Table structure for table `access` -- -DROP TABLE IF EXISTS `piwiktests_access`; +DROP TABLE IF EXISTS `access`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_access` ( +CREATE TABLE `access` ( `login` varchar(100) NOT NULL, `idsite` int(10) unsigned NOT NULL, `access` varchar(10) DEFAULT NULL, @@ -35,22 +35,22 @@ CREATE TABLE `piwiktests_access` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_access` +-- Dumping data for table `access` -- -LOCK TABLES `piwiktests_access` WRITE; -/*!40000 ALTER TABLE `piwiktests_access` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_access` ENABLE KEYS */; +LOCK TABLES `access` WRITE; +/*!40000 ALTER TABLE `access` DISABLE KEYS */; +/*!40000 ALTER TABLE `access` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_archive_blob_2012_03` +-- Table structure for table `archive_blob_2012_03` -- -DROP TABLE IF EXISTS `piwiktests_archive_blob_2012_03`; +DROP TABLE IF EXISTS `archive_blob_2012_03`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_archive_blob_2012_03` ( +CREATE TABLE `archive_blob_2012_03` ( `idarchive` int(10) unsigned NOT NULL, `name` varchar(255) NOT NULL, `idsite` int(10) unsigned DEFAULT NULL, @@ -65,23 +65,23 @@ CREATE TABLE `piwiktests_archive_blob_2012_03` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_archive_blob_2012_03` +-- Dumping data for table `archive_blob_2012_03` -- -LOCK TABLES `piwiktests_archive_blob_2012_03` WRITE; -/*!40000 ALTER TABLE `piwiktests_archive_blob_2012_03` DISABLE KEYS */; -INSERT INTO `piwiktests_archive_blob_2012_03` VALUES (1,'Actions_actions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ’ËnÂ0EÅõª]yì„ÇxÙ.Q[A»F&±‚EH*Š*Ä¿×NÌËB°!’™;wìøh&¸3ÈäŠ>ÒO³5ËÙ›jÔ—šz6©¶§lºYÔú\"ஶM©T(º~… œœ -Ô\\TÖ8DúºÐé²Ú4T\Zäv[Ç@H×jP0™!‹@ÄìüsÞ,¸lOomî8!FÞÊÙ!\0?^™´ÁÞm\nîläþ‚÷å¾À!9€AL™®ufl?iLSè§$WÑÀÐÃñïäþá Ûk^`á!/ÀàÌnκd@;V5ƶÒç]‘wEFCZï-*þT¢ÖCÆUµ4eNTCÕJÿ¨\\“g•+S¾DQtŸÛ%5ÆÅ\rj‡ªˆÏ©%Çä*ñ\0£E<°(¦:ÊŒ´~Þ’©Õ¦ÈÈ\\“µÎMÝh;VDÕä{2¾fÄ‚‘â7GŠ‡#å„«zà‚Äm5;'),(1,'Actions_actions_26',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ]ŽA‚0…ÿŠÙÝeÝ\0c{õ¬D½“Bˆ.‚& !†ðßݦÁÅC·~o}¯cÔ8YTt@“¡ÈíhoÅŽŸ|沩‹ãcüÑih[î^§Þ¢Äh>~Fȼœ¢h¸¬An$A±Ê‡®ºroï)¥ ‹Úĵ†|’E£() &ñB\0ýÿjþØDã°@«¾©*€Ž=Ié³ÿ(£ÂÉu†ö4»{\r¾y@X¢'),(1,'Actions_actions_url',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ’ÝKÃ0ÀÿÉ»m.×nî‚øⳊó}d6¸bkKÛ±±ÿÝ4ÙGf] !÷™»_NQJÛœ¸|&{ÉWùçìQuêMÍ={V\'iº,KÕlm[s°w&¡‹W4éµ)±BÍuÁdK&_œezÍdNÂlð÷QýqÇ͉\\Ú<\"郤}¬ B+ž)v}>åŠCbËÆb‹®«)ŽõZ•u¡£ªùˆ;Ê\'¹³aÿï lø¡ÿhÑ•¿38\'À8X1P@â¹Cz.³wÙx5{Ä5 %!$L}HµjT©;ÝÜOÕ²Èn²¼µùÃáàa8ANcŸßÄwÂØ\n}ÖÄXFÂ…3òŸH§8Lz qïð\Z_€á˜{ÛU>c|i23â`ÂýŽ±s>ñ…ï^a:WÁØ? ŽO¦ö²Éik;·ôn¡§ñ\rêXZ'),(1,'Actions_actions_url_30',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ]OOÃ0Å¿‹ï´q¼?¾rÜ\'oŠhD«Viª¦}w’¨\'ù9~/yÊ–/ž¼0í^ýÙž4ê‡{wxÏÿô¾ƒ†`äËœ8(ÓM¯Œ»ÜÞ2ôzt=H\Z!†vZ©ÓÙ5]@<ÛTX×½A’<“‘âc\Z¤M–JyØõ-\Z¸¯Æñ±kjøs5lÙÔ°½Ã5ToñS´%””´gèbœ¸mÝ·Sïš1|¶sƒ[¥O$ÏrMûæÃ/ƒ‰k¸'),(1,'Actions_downloads',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœEŒÍ\nÂ0„ßeïJ“ø;{õ¬¢ÞËVŠS*R$äÝÝEÐÃßÌ<rDÅ„è§x¯wò”‹4©OýôOçW×Éð&8äQ®Ä‚ðÝÖ.AIš6Ø‚ö7ï‡q„W9Ó‚ÚÚs±(¨•¬ó.Š3Ç{.Â2%'),(1,'Actions_downloads_28',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœuNA‚0üËÞµÒ5Ó«g5ê,†@c‘Jˆþn+‰zñ0³;“ìÌ2$Fƒ•>@AG3˜[¶cÏÎm‘šá«Î}]sû $»@t%ÍPó=#n\n²œ–t)A±¯—lî²/:¿|\ZGÚ@$¿ø*ÐFê)JžË¨oß¡jª¼wÂÅg—M[þ+ Jïõæ\"‰Ë#¥KV'),(1,'Actions_outlink',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœµŽ9Â@…ÿËô†=™ÖZEíÃDY²q%‡ABþ»»`“ÖbóÞ|Œ\Z‹‚Ž¨×\'ÛÛ2ßsËW.œÉϾÿ¹KWU\\\0%M¸ñ|ϘÆ4Cp\\64Âݼ“W|šøúdQ…’±Ôlt,4Æ£À!t1T\Z§ðl\nÁw³Ï²YD“3šÛ´Ý„¶’t ñvõcÿ'),(1,'Actions_outlink_27',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœMŽ¹Â0Dÿe{rØ ÅlK\rè£\rD`‘Kq¡(ÿŽM„ ˜=f5O+P˜\r\">@oAG3™g¶“^.’—Evj¦ßvªJº!Æl]¡+±@¯yAêÝTJ^”Ä (´cMl œâ©¯©]I“ˆAC÷A(Çxô}‹0¼cÐú÷‚¦»¯\\—ѼçÅõMì‡7ε?;'),(1,'Actions_outlink_29',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ]MA‚0üËÞµ@ŘéÕ³\ZõNC¤¡XSJˆ!üÝVŒ\Z;;3Ùad5µ‡\\ƒzÐM±eÏg.MUíðU§¾mÙ=)Æ.\0]H1äüÏÈ£›ƒ—•!.V a}]¹ÂöÞè[CJ#“þÎÇ’š¢æ¹E‚z÷J“ÖÞß!Ä;[Zwý/ÏRíÔö\"ä «›G³'),(1,'Actions_sitesearch',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(1,'CustomVariables_valueByName',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(1,'DevicesDetection_brands',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-Œ»Â0EÿÅ;R“¾¯×΀{åÒ‘Z©C”džÇÏc<R@Å7¸tgxÏ“ò”%nóãsÒ®^Ä‚ú¯›¶ (ˉwT â\0Wð…Z”†Wôš[ÛwÞ”®¨ýOÍÖˆ¾IÙ®®œ5_œ_ÌÐ/«'),(1,'DevicesDetection_browsers',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-Œ»Â0EÿÅ;R“Ò×+ê¨b¯\\艡•:DùwlšáøylG\n¨øw=Â>ÓU6yÊ—iüj ± >tAoÓe^\"ñªhˆ\\Áj¥WÎüF§¹±}ëMi‹ÚýÕl BÊvuã¬ùä¬ø-U09'),(1,'DevicesDetection_browserVersions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;¨IhZ®WÔPÅ^¹Ð!\"C‘:Dùwbšáøúq,°H\rß`Î {ØÂ{ºÈW2Çe\Z?Á ¥Ð“Xàv]Ðë¶E™—H¼Âƒ†ÝјŠ¸B_8ñ]ÉVïÞªâ«ÚýÕ¬ƒ AÊúuå\\ò`´ùØì1'),(1,'DevicesDetection_models',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-Œ»Â0EÿÅ;R“¾¯×΀{åÒ‘Z©C”džÇÏc<R@Å7¸tgxÏ“ò”%nóãsÒ®^Ä‚ú¯›¶ (ˉwT â\0Wð…Z”†Wôš[ÛwÞ”®¨ýOÍÖˆ¾IÙ®®œ5_œ_ÌÐ/«'),(1,'DevicesDetection_os',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;R“Ò×+3l•\"\"1´R‡(ÿŽ\rŽ¯ÇPñ\0waïé,›ÜdŽËtý쇴j¡\'± þë‚Þ¶\r(ʼDâU/tŒÄ®àµÒ+G~¡ÓlìÞzSÚ¢v?5Û ¨²}]8kœ5_mÕ0'),(1,'DevicesDetection_osVersions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;R“Ò´\\¯Ì!$ºU.tˆˆÔ¡H¢ü;1d8¾~,R@ÃW˜È‡=¼§³|ä.s\\¦ÛºÒV\n=‰í_ºí@Qæ%op ÇèyôĦb+ma(ù…¾d§wgUqUíjÖAÐ eýºp.y0Ú|õ1“'),(1,'DevicesDetection_types',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»ƒ0EÿÅ; åÑëµs©;2-CÔHZ‰!Ê¿c—ÇëcG\n¨y„»‚aïå&?™eÛ2}v‚Cúj¡\'± 9uÁ`iŠ²n‘ØÂ\0Wð…F”¿ÐkoíÞySº¢ö5Û\"¨‘²}Ý9k¯œ\rXK/#'),(1,'Goal_1_days_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(1,'Goal_1_visits_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊKx–ôL‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßñÊþs›¦zºLPîò„¥q_–yɯÆ$³ŽgI¡lËk¹1Á<úÌýÁ¼\r0(°`ƒEŒ\n,Ú` “K6XƬÀ²\rÖa§À:¬Ç^õXd42h’)¡×ìY´ˆdŸ19gQ$Y~€Ô–Se\" 9ZùµDú„7Žð¤R'),(1,'Goal_2_days_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(1,'Goal_2_visits_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊK\Zx(¤©L‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßöÊþSMS=]&(w¹B‚Ò¸/K¿ƒòjLÒëx–ʶ¼–Š æÑÿ`ôó6XÀ xY°Á\"Fm°„I%,cV`Ùë°S`\rÖc¯Àz,2Hš 4É”Ðkf„,¶ˆdŸ19g±H²ü\0Y[NZ,ÉÑʯ Ò\'¼Žƒ¤R'),(1,'Goal_days_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ=1àÿp4͵w¦›8«ˆ»Tq(8œàpøߊ›%CKHýàBIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“Np†R…¿Û«Äw7 Œõt¡Lº”&ƒŽXžMH÷™µâ²)ÏOÇ\"¤þCÑŠ\rˆ} F6 Îê°3 ä%L”} ŒÙ€z¨ÇÞ€¨¬GZ:HZSBEé 5fÓòˆ¬B\"š˜GHôz‰‘³õbä‘z4ÎiW†ô.^.ºù'),(1,'Goal_visits_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ=Â@àÿp\\î«mngq/Wq(*8ÿ»©â&dÉpÇKîàYÂ[™\"/#»r`êŽãs¼õ»ú¨ç:L×þt/³\\pR9|¿Wöë41Lu¸NPfyB‚2r+‡Êk½*;^$…²/¯ÏÄòèÈÛ@Ãrÿ¡`EŒ\nm „I’\r”1+P¶\Zl¨±Zl¨5€\"C‡¤mCg I¦„^Û²hÉ>cršeQY¶\\ªÈ©˜EIFŽ6~«`Hkx¥‘šî'),(1,'Provider_hostnameExt',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-Œ»Â0EÿÅ;R“¾¯×΀{åÒ‘Z©C”džÇÏc<R@Å7¸tgxÏ“ò”%nóãsÒ®^Ä‚ú¯›¶ (ˉwT â\0Wð…Z”†Wôš[ÛwÞ”®¨ýOÍÖˆ¾IÙ®®œ5_œ_ÌÐ/«'),(1,'Referers_keywordByCampaign',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(1,'Referers_keywordBySearchEngine',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ]Ž?Â@Å?‹Ù…æÎû²:«ˆ‹SIµàaá†\nÊ}w{º8$<~y‰Â`q¨änAW7»OwÒ¯Þµ‡îægc™ÖFO…͸‚«h× Qûa$™Ð€úö~GâÀ¥LQ[ô ¯¤µÄ‡fcSf7Ûþ[5i5‡cqÚìÄA±þ2lm¢ö,g ?@Ô'),(1,'Referers_keywordBySearchEngine_33',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-ŒË\nÂ@Eÿ%{¡ÓZ7[×*⾤uÀà€â(]óïNê,rO8$WÐ\")\Z>ÁíAgõ1ä#Wƒ.Ï™àb šˆÝÿ\\°3Ûƒ‚Œ>Ç\"èõ}Ow‰žXáê´•]åšo{¶Å¦úíÂl!h²½9®œ-?22e'),(1,'Referers_searchEngineByKeyword',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ]ŽÍ\nÂ@„ß%w¡»u¥\\=«ˆ÷’ÖJWé¡ì»ÛýéÅC2dø2‰@cq¨øÕ‚.nvÏî(¹I?Úîúš \n‹_\rÄ‚:ãUEÛ€FéíHìÑ€Þßixˆ·Äª”.ZÝó=©áäpØØ”\ZãõvGýê´\Z‚CSœ6;q¬…×&Q;Å\'?öêB'),(1,'Referers_searchEngineByKeyword_35',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-Œ±‚@D¿ÅíM8ÄÙÖZ ±±\"’¸ñ’+0¡¸Ü¿Ëâ;o2™A‰¨(øwuºêg¸ÊW2úyèÃJpˆË&4ª]ÐZZƒ¼Œ³\'^Ѐžòá@¬pùÊÌ*óį5ÛŠ¢Éùyg2ˆÉ^nœ6™’Â1)'),(1,'Referers_type',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ;Â0„ÿKv¤:éƒ^Vf@ˆ½r¡CD$*u¨ú߉C2ðœ;§;ËÃ`v(ìÔBíÝä.݆G>rï‡îpó-<ê¤,g;ƒ\n‘+(Ïýà•uС(UžMê¥=Ç^YI;ÔÙWÉN—ÓKTÇè²8¬“Ò>ù0‹˜·ÑBÿ\01_@šÒ$ª5%–≅~±”ú\rF¤O4+’áuÛx$'),(1,'Referers_urlByWebsite',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœMŽOÂ0Å¿KîÊÒýqK®žUÄûȶ\nÅÁvýî¦k/¡/¿¼TÈÐæ(ã+aCps«{µgùÈCºÑ¶÷yBÚÞZ Ê#.„Y°K‚Q:;+¢ÌbŸv±Ë±Ÿ\'`G˜dRÏU\'UÁÃÞËàW&Œ*¹úÜÃÃüÿí˜6PaØ{Gu²šdÅ-ýšx^ïØùÂþ<·DJ'),(1,'Referers_urlByWebsite_38',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-NM‚0ý+fw v1^<«1ÞIÁ*‹[X¶)Âwï£ïµIr%dâ|ì*ù®OèñŽ¢úÖ8Œ.k™@(æu„]LK`\nRL†Î{ijéI–lÒö:5ø¢¤óúhТ>|Q}h¾[¹^ÓÊlÉ1!/È-¶ñøkó*U%âsÍÅ !ƒqŠWg1]óh~oÒD'),(1,'UserCountry_city',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ}Ž1‚@…ÿKwz(¯«³\ZãNŠ0\\$qÀ„Ü÷\nœ£Ã»6ׯïUá°r7 [˜Ã«=ëGÚC{ÏÆ2¥‡ž$\n¿á\n.ì»Ú\r#É„DÀ»Ü.ŸtJ*¥Ç1ÕÊæµ3¤Î¸®‡pŽÈ.þçÖ£tûƒ°Ä¸ÅYtcKÞ–Ì7¾¬Ìù™GHn'),(1,'UserCountry_country',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ}ŽÍ\nÂ@„ß%w¡Ùm«\\=«ˆ÷’Ú\n‹Á\n=”}w7ýñèa6aóe&\n‡) “3¸]žõQ?zÓ¦ïêëk$0¦!=t\'QøWpfߨצëI†äD7I\0¯r«|Ò!)—ûT›—ÎrÃÍr>…·ÍÅÿÜZäN¢u–—8‹®lÉÛ’ù¦“£Ñ§™Ù±5_`tIH'),(1,'UserCountry_region',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ}Ž1‚@…ÿKwz(¯«³\ZãNŠ0\\$qÀ„Ü÷\nœ£Ã»6ׯïUá°r7 [˜Ã«=ëGÚC{ÏÆ2¥‡ž$\n¿á\n.ì»Ú\r#É„DÀ»Ü.ŸtJ*¥Ç1ÕÊæµ3¤Î¸®‡pŽÈ.þçÖ£tûƒ°Ä¸ÅYtcKÞ–Ì7¾¬Ìù™GHn'),(1,'UserSettings_browser',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;¨IhZ®WÔPÅ^¹Ð!\"C‘:Dùwbšáøúq,°H\rß`Î {ØÂ{ºÈW2Çe\Z?Á ¥Ð“Xàv]Ðë¶E™—H¼Âƒ†ÝјŠ¸B_8ñ]ÉVïÞªâ«ÚýÕ¬ƒ AÊúuå\\ò`´ùØì1'),(1,'UserSettings_browserType',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»ƒ0EÿÅ{%Ê£×kç¡îÈШŠˆÄ@%†(ÿÞ˜f8öµ},°ˆ?an Á~îò•—ÌÁMãvâž-Ä‚ú¯zÝ6 ³Ägþ¸e݈=LÁêLŸ¹ò]îÞ[«J[ÔîT“‚\n1é׃Sî£áüÕ1¹'),(1,'UserSettings_configuration',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹Ë\nÂ@Eÿ%{afúôf+]jAw%Õ.](Túï&:‹“ä&\'‚€áø¿õqÏá o¹È8OÃyY 饅îÄ‚â¯ZÛV YÆi&VCÃõÖs×±w¡ü4uKá3!S(RòöÊîu0¥ÎjóS7‡´Ùב7í;oÃÐÅ3Æ'),(1,'UserSettings_language',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-ŒË\nÂ@Eÿ%{¡3µo¶®U¤û’j…Á¡ºæßMê,Nž\'x¤€Š¯p\'Ð-lá=žå+ƒLqïŸàV\rô Ô]ÐÛ´E™æH¼ê#z-Ä®àµÒ+G~¢ÓÜؾõ¦´Eív5[#¨²]]8k>8+~Gá0…'),(1,'UserSettings_os',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;R“Ò×+3l•\"\"1´R‡(ÿŽ\rŽ¯ÇPñ\0waïé,›ÜdŽËtý쇴j¡\'± þë‚Þ¶\r(ʼDâU/tŒÄ®àµÒ+G~¡ÓlìÞzSÚ¢v?5Û ¨²}]8kœ5_mÕ0'),(1,'UserSettings_plugin',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÓÁj1àw™{a“U«“«ç¶Hï2îŽ:nl4ÙºñÝ;êÅ‹0—0Lþð1!!4Ï‚•ûD3Cø’Aºåœzú¦•çå\"€šHº@Ž°¾Ç íµ;Fð´b.éÚ58Aënù\nÜEÐh¶Â³Vµûp—[çuL뵧´}àìÎàF;:Q†VЦDnú3®sT@ÔãÇ_iº^öœAŽ¦BˆLþàés朔@- ?mÒž[¡ö½ÌkÝ0Å”ÁMKL©‘$þÄÑËfÛg¨³êD!t¿äÍ\\‹Z[>'),(1,'UserSettings_resolution',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;R“¶I¸^™!öÊ…‘Z©HQþ2?®9¢ãÌt{|M\'Ùä.sZ¦Û{\'äU=ˆý_„šŽ $ó’ˆW\rÈtvøxˆ#LÃ6z%(?áµõîlU\\SýO-utÈ¥~¹h?˜:|9¿1—'),(1,'UserSettings_wideScreen',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹Á‚0†ß¥w6dà¿«g5†;)ÊaqJ&–½»-îðµýÛ¯‹Pù+Ì t[x\rgþrÏcœ†û¼Ò*…äõ_gtºm@‘Ç)’_á@Ÿyy³„\0S°…Zè„£¢•ÞèÝYU\\QÛ]Í\ZRÖ¯‹ÏÒF‡C¦2:'),(1,'VisitorInterest_daysSinceLastVisit',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ±j1àwtXÖÙ—È[)tKK)]§x0=Rèn8òîUÒ¥KAP-F‰#óW¡,[—Pž„öÏ}íÓC=××zœÛôò¹‚l‹ð¥\nÿ´W‰×Û$0×c›¡hÇ(ðØNí«ÎÓ¡o}éçJ—XnãåÒ…t4Ȧ—C¹Ünþo³@À`À¢FH¿°ðÆ>XÄhÀŒ‘\rXòÁXöÁ&6ú`³Ûù`#Žlï€\r;$ËÒÈ#R´¦„,žGŒhÍ„Ùäy$IÖ¢QM GšhDS$älZ¡G¤è9§»xo\0‘®Å7¦ëë\''),(1,'VisitorInterest_pageGap',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÒ=Â0àÿràxËG?.›8«ˆ{I¥C°àP¡Cé7‹‹pÃ-á%yááÈ%&â%³‰¦–ášçüìNéîöšKc*< &vßzb»Ý†1õÃq*/@H3Û¸÷K^3Sé\Z^Jrñ×ýF³h0ó³:˜C\'ÀœæÑ0¯ƒ,è`Ö‚©0ÏÐ Áhµ‚V2•å—|[£Ä´’éZÎÒÁÒ>JC>'),(1,'VisitorInterest_timeGap',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÓÁ\nÂ0\0Ð x,$m×méM<«ˆ÷щ‡âÀÄÆþÝl^¼{)!¤<’´‰‰xÎŒñÄÔ2œó”Ý!½Ò5õý»<\'`©å€ÄÄîSžØ®ÙŠaHý}€8²g@C1³Û‚¸d&)Fž%rñ—-ó¿&1‘qßþàlΑ \ZÎàCaZçxµLÓ¢±^Ve@ÁŒWuÊ€‚É5`]Ì´*°)\06‚jPóÛB¯¦AÚÙ½¢ECkðw‹HW'),(1,'VisitorInterest_visitsByVisitCount',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ±\n1àw 8šôÚ»K7qVw©âP<pPp8|w£..B†,å§øhéýU(ÉÜ$”Ð(°mv9¬ê½îëq:v×É|ÓNPªÄïx~ï&©Ï”›~B‚Ò„Ëg^ó³ élYS,ëòüì¸`ŒlÀØ‹°ð‹>X‡ë|°„É€%,c6`Ùë±7`½6à`À¬‘,/dtÐ4SB¶¼òhÍœ1‹çQ$Yÿ\0`=ʤ×\r„l=\ZEȼ4€HïðJ8ÄÀ'),(1,'VisitTime_localTime',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ–»jÄ0EÿE}@wlù1nS\'Ë’~Ñ&[˜R$°…ñ¿ÇòªL—SŒ®%ÑÁÅa²[òuö8½ºF§ù>^žóO~Ë×åv9݃Ë×ï} ïaÊÞ<Ú³å4yXòõ¶„ivYYjYf¯a¯vúð~ÏTÞwVZºÚÚ[Ùd¾nå«—i;Nþë5±ÅJªG¦š]ÍþÈ?‘ŒøS,R ‹ÔH\r‹”\0¤–Eê\0¤Ä\"õ\0RÇ\"\r\0RÏ\"\0ÒÀ\"‰Pø3þ,p!‡.Âá‚)Ââ‚)Âã‚)Â䂽)Âå‚Í)Âæ¢ÝIø\\°<ºÑÓ/atƒåi„Ñ\rž€\r™Êa£?©<üî‚ä'),(1,'VisitTime_serverTime',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ–=kÃ0Eÿ‹ö‚î³å§µs[Bö 4D\r\ZÈüßkÙ¯Öi¡á’lYz:ñ“JÐKVŸ½º—|Îo»ÇtJÛ´Ž»ÍûÙ)ôò1uîÕŤղ<)|™ê†´?.fJgMl¬¦ÖNŽ‡ye¾‘ò¨‰¥Òt;—+uñu\0®v/ÕZKǬMõ6µìš`Ʋüi^Jù%,,Ž·,ø–EþÊ‚UÜN\"ÿOÒýâío9¼Áø9Ç2^çðöÊüm¤Š€.RM@.R U\\¤†€Ts‘ZRà\"u¤†‹ÔZ.îøb¬˜:2ÓÚ_1õd&†ÀA68(\n\'Û ‰ƒì\'04²¡À9ÈŽCå`[Š!s°5ÅÐ9Èž†Ï…ì)a]ÈÿšÂ0ºÿ6…at!ýåâPÛ**'),(3,'Referers_keywordByCampaign',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(3,'Referers_keywordBySearchEngine',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœ]Ž±Â0D¿ïHuB+z^™!¦Ê…JDDÊP¤Uþ&MûäÓóÙ\nƒÙ¡’¸]Ýä>ÝI¿z×ÞÝ-LÆ<.ž$\n»â\n®’]ƒ¼öƒ\'Ñ€úaGâÀ¥LQ[ô ¯¬µ¤‡fcsf\n7Ûþ[5y5F‡cqÚÕIƒbù\'ØšŒíYÎQ¬A'),(3,'Referers_keywordBySearchEngine_132',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœ-ŒË\nÂ@Eÿ%{¡ÓZ7[×*⾤uÀà€â(]óïNê,rO8$WÐ\")\Z>ÁíAgõ1ä#Wƒ.Ï™àb šˆÝÿ\\°3Ûƒ‚Œ>Ç\"èõ}Ow‰žXáê´•]åšo{¶Å¦úíÂl!h²½9®œ-?22e'),(3,'Referers_searchEngineByKeyword',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœ]ŽAÂ0…ÿKîÂÚn²½\\=«ˆ÷‘Í‚Å‚b•Fÿ»k×]<$<¾¼D 1;T|‚ê@g7¹G\\eð¶¿<\'‚–F#±À¬¸@UÉn@^ë‰ZÐëûï,±ƒ*¥‹š¢5ß²6œ‚ö›SS¼ÞUWcth‹ÓN\ZËG±À¦ÎØNñ‘ã7ÎBB'),(3,'Referers_searchEngineByKeyword_134',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœ-Œ±‚@D¿ÅíM8ÄÙÖZ ±±\"’¸ñ’+0¡¸Ü¿Ëâ;o2™A‰¨(øwuºêg¸ÊW2úyèÃJpˆË&4ª]ÐZZƒ¼Œ³\'^Ѐžòá@¬pùÊÌ*óį5ÛŠ¢Éùyg2ˆÉ^nœ6™’Â1)'),(3,'Referers_type',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœ]N1Â0ü‹w¤:¥¨½¬Ì€{åB‹H u¨òwâ4Y:œ}>Ý,pX¿‚ÐM}gùÉC¦0÷ÏB`¬ß4èI^Ðnv7&w ÓÈ+\\TÞ–}ô¯¼;oiÅ©zs•uºZλ¨ËÑ}Q†M±CÞˆf¾dËüQ=l'),(3,'Referers_urlByWebsite',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Actions_actions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ’ËNÃ0EÅx‹F~¤Œ—°¬\0µ°®œÄJ¦ jR*Tõß±7‹–M#Ù\ZÏÜñÄGWÂŽ\Zˆx>üªz³z’|“i©V‹ú0œ–ûíVî¾0P86fÃx×/r›.eªJ,\Z˜~\\«lSï[,40³¨]}À…mÕÀ‰ÈD”Çäçg5œz1gÂÝîdö:΃M¼”‘s@ý\0Ö»àd7 Ž&²AI2\'—¾‰8$A\r\n¤«l§rmúQ«ÛRÝ]†Bg‹!óO¦Â£øa=AÎHw˜âL±©LXWd]‘¸¶3r:ëû`ÏŽ»+\Z²âFƒæu½ÑUd‹ÖõV}ÈB¡{YH]=DQô¯›<Âølç*Æ#ƒ|€1¹ƒß\0F²ˆ§†ÅReu•#ÇàS«\Z¡f]ïË¥\níT¡›Vc!Ù ÷Åü2›„¦bWMÅBSu äO#jƒo¬Ÿ6:'),(5,'Actions_actions_1097',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ]NÍ‚0~³»ËºÑöêY‰z\'…]M@BáÝÝPqáÐíûë·1j,*: IP¤¶··lÇO>s^•ÙñÑÿÙ©«kn^‡Ö¢Äh>ûŒx9FQq^V‚\\$B±J»¦¸rkï)¥ ‹Ú\rø™!ß`Ñ(š\n”ù¨š‚‰è¥klƒ¸V!ù©‰èÀ8$ðûÒ&T“™ŒÞfT88dhO£»×àÁo—XÖ'),(5,'Actions_actions_url',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ“_OÂ0À¿Šé»[¯·!\\c|ñYøNŠ4²¸¹eBøî¶+ŒÒ舑%½Ü¿¶w¿Þ¥´ËˆËg±—l}ÎU«ÞÔ<׳×r}²¦«¢Põ–Ю1‚½3©Ý~EëM‰åj®s&2çÅÙ×Bo˜ÌH˜võ\nZ1æF\"—ÝN ‘ØdÙ]\0!Â(èΓ{+”«‰ê®\n˜[¶mEq¬7ª¨r•õGÌl:Ê\'¹ï¶ý¿}€°àG\0Ѳ-~‡pŽ€@pŒbà€ÔK?ð0kÔ{†#Æ?ÂñŠö(‰kPJBJ˜ú”*U«B·º¾Ÿ.ËU¾¸YdM•«ífgÃr˜xé‚;ã®3ìA‰‰Œ„\näç¨ÇP§8Œz sï\rð\Zo€á½iËZ_œÑñ0áþ¶K>†4ô ]ªàGˆþÊÔÿ¡9íºÎ-mSƒÅp–Ç7’º['),(5,'Actions_actions_url_1130',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ]OÁnà ýîK0n³Í¾î¼Umï•[¡-Q\"BÔMUÿ½@·å`ð{~~ð„]iþ lHmÜÙ}Þ$È^Ž=l‡ó?ÚÍ}/þGÐeŠ‡:)Âû¾4‰^“êäh;ÅQ‚¤êqö§V&[µ¡WìÈÄ‚T98BÍy_W€«$Eàüd`–S\\ðZÈ.Á¯‘ÎÀX—\0þ¾ôR²Í\\ÓXîùc¶Ùç˜øLª\ra¤º¶ßÒÿYOaðv?\Z ¿ó5ÞOš¾ykì'),(5,'Actions_downloads',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœEŒÁ\nÂ0DÿeïJ“hÅÙ«gõ^¶R$˜Ri•\"!ÿî.‚f˜70#ðÈjÐ1ÎñÞìä)iSל†ùOçWßËø&8äI®Ä‚ðÝVÖ®AIÚ.OØ‚ö·Æq„W9Ó/µçb(¨5Yç\\¸(,ï¹|\0ïÏ2†'),(5,'Actions_downloads_1163',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœuNA‚0üËÞµÒ5Ó«g5ê,†@c‘Jˆþn‰ž<ÌìÌ&;³‰Ñ`£OP[ÐÙæ‘Øós[d—fø¹k_×ܾ Æ.ÝI3ÔrÏHã6YÎKºƒ” áØW‚K6OaÙ_¿#m ’ˆ¯Pv³›ž\"ñÒ¦@};§ª=¨òÞA¿]7mù¯%$(}ÔS˜«$ŠañK‡'),(5,'Actions_outlink',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœµŽË‚@Eÿ¥{É”ÔvËZº\'E‰™0ˆá!1„w†„¸aë¢7½·!M£!ÅGÒ ÁɦÌRéä*¹-²s=üÜ¥¯*i>@HcënÀ²ÜE> ¬ä…všà^¼ƒ—\ZÔÍØPè\n}…‹ÑNâHñäBŠF×ùqŸð4Çÿ ê¾³æY¶«p¸À¡ÚÂmg¸\rò§/âÎdÎ'),(5,'Actions_outlink_1196',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœEN»Â@û—ìôq×28+3 `¯R¨àD_º¾„ªþ;wƒ;‘fƒˆOÐ{ÐÙL椗›äe‘]šéï®CU‰ýbÌ#ºô–¤~›‚JÉ‹’¸C\n»±&6P±‡úí(M\"/×/ždëÖ Á®Ê•¼ú¾E>Š1hýAcŸ[±Ëh>òâæ.öâ?l'),(5,'Actions_outlink_1197',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ]MA‚0üËÞµ@ŘéÕ³\ZõNC¤¡XSJˆ!üÝŒ&vvf³3ÃÈ0j$ê¹ô ›bÏž¯\\šª8Ûá§.}Û²{RŒ]\0º‘bÈÅÏÈã5.+C*|l@Âúºr…í½Ñ†”F&ó%2B²‹8k5Eà¥F‚z7ÇÉ@kïŸâ×»ÿ7³T5…½J#yåóGä'),(5,'Actions_sitesearch',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'CustomVariables_valueByName',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'DevicesDetection_brands',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(5,'DevicesDetection_browsers',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-Œ½Â@ƒß%;Rs¥?8+ê±W)t8qC+u8Ý»“@‡Ï¶,\'Š€QÉ|ÝâßãYW}è”æñþÙŒ¼˜Ð“DQÿçŠÞÛ”tšÉbhH\"ÂNmôÆQ^è̃ÛÀfG£Û§Ì¿¢¸(*äâç)æöðYœ0j'),(5,'DevicesDetection_browserVersions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹±Â0CÿåvP/¡iñ¨# Ä^]¡CD$†\"uˆòï\\ ó-ËV8äˆF.à#è\Z×ø\ZOúÑ»Nioï•ÀÈ‹ =Hþ?WôµmAI§9‘, a¿$nýq\':óÖààØ,ÔhtÛ”ùW”*Š¹ÔûYŠùŽkø1@'),(5,'DevicesDetection_models',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(5,'DevicesDetection_os',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹½Â@ƒß%;Rs¥?8+3T ¶*…\'Nb(R‡Ó½; tølËq9¢’3ø\0\Zâ\Z_ãQ?zÕ)Íãå½y1¡‰¢þϽ·\r(é4\'’Å.t»$a£6zc/OtæÁm`³Ö£ÑmSæ_Q\\rñ÷“ó{øš0Þ'),(5,'DevicesDetection_osVersions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹±\nÂ@Dÿe{!{1—8ÛZë!‚éÂFS¤ˆâÈ¿»§)ÞÌ0Ì(rD%Wð â\ZßÃY?z×1MÃm^ Œ¼˜Ð“DQÿ犮´\r(é8%’ôèƒô$ÂíÔFgå…Ö¼1Ø;6ó%\Zí>eþ[E…¼•ûE6ó—ð5–1Ä'),(5,'DevicesDetection_types',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹;Â@ƒÿKv¤æJ8+3Eˆ½JÉ“@êpºÿÞ:|¶eÙŠ€QÉ\0¾€îq‹¯ñª_}ê”ÖññÞŒü1¡™DQÿçŠÞÛ”tZ‰—á 6zã,:óÆà6°YëÑèŽ)ó¯(.Š\n¹øý&ÅüÄvƒ|/T'),(5,'Goals_ItemsCategory',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goals_ItemsCategory_Cart',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goals_ItemsName',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goals_ItemsName_Cart',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goals_ItemsSku',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goals_ItemsSku_Cart',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goal_-1_days_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goal_-1_visits_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goal_0_days_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goal_0_visits_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goal_1_days_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(5,'Goal_1_visits_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊKx–ôL‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßñÊþs›¦zºLPîò„¥q_–yɯÆ$³ŽgI¡lËk¹1Á<úÌýÁ¼\r0(°`ƒEŒ\n,Ú` “K6XƬÀ²\rÖa§À:¬Ç^õXd42h’)¡×ìY´ˆdŸ19gQ$Y~€Ô–Se\" 9ZùµDú„7Žð¤R'),(5,'Goal_2_days_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(5,'Goal_2_visits_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊK\Zx(¤©L‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßöÊþSMS=]&(w¹B‚Ò¸/K¿ƒòjLÒëx–ʶ¼–Š æÑÿ`ôó6XÀ xY°Á\"Fm°„I%,cV`Ùë°S`\rÖc¯Àz,2Hš 4É”Ðkf„,¶ˆdŸ19g±H²ü\0Y[NZ,ÉÑʯ Ò\'¼Žƒ¤R'),(5,'Goal_days_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ=1àÿp4͵w¦›8«ˆ»Tq(8œàpøߊ›%CKHýàBIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“Np†R…¿Û«Äw7 Œõt¡Lº”&ƒŽXžMH÷™µâ²)ÏOÇ\"¤þCÑŠ\rˆ} F6 Îê°3 ä%L”} ŒÙ€z¨ÇÞ€¨¬GZ:HZSBEé 5fÓòˆ¬B\"š˜GHôz‰‘³õbä‘z4ÎiW†ô.^.ºù'),(5,'Goal_visits_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ=Â@àÿp\\î«mngq/Wq(*8ÿ»©â&dÉpÇKîàYÂ[™\"/#»r`êŽãs¼õ»ú¨ç:L×þt/³\\pR9|¿Wöë41Lu¸NPfyB‚2r+‡Êk½*;^$…²/¯ÏÄòèÈÛ@Ãrÿ¡`EŒ\nm „I’\r”1+P¶\Zl¨±Zl¨5€\"C‡¤mCg I¦„^Û²hÉ>cršeQY¶\\ªÈ©˜EIFŽ6~«`Hkx¥‘šî'),(5,'Provider_hostnameExt',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(5,'Referers_keywordByCampaign',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Referers_keywordBySearchEngine',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ]Ž½\nÂ@„ŸÅí…ìåo¶µV«°Ñ€‡+\"¤÷îÞ]ÎÆbfa˜oX…ÁêPÉlA·¸wÔÞt˜Æþêc£ÑƒDQouW)nA“ãD2£ÝõåýŽÄÁDqT]n#Ï|[I¸CWrÎ[iÔüÖù5\rÁáP[Æx«†dŠøP(”±Mö,\' _Ö&Ao'),(5,'Referers_keywordBySearchEngine_1294',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹MÂ0DÿËÞ…¦µ~Ì^=«ˆ÷²ŠQzùïfkóÞ2ìZ$EÃ\'¸=謳>†ƒ|ä*cðÃå9R, ‰XÐýß;k{PÑâX\nz}ßÓ]¢\'V´%®¤«^ómq϶Wlj¿v8\rR¶í‘sñÊÙña£2–'),(5,'Referers_searchEngineByKeyword',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ]ŽÁ\nÂ0DÿeïB7µÚÎ^=«ˆ÷²ƒ‹Qz(ùw“4^<Ì,3U,…œÀ\rèlgûhúÖ«vãÐ^ž3±¸`Ô“(ʵ®à\"ÆhÔnIjÐôyõwu‰… â 2ßÜÒ$,v9çD‹XóãóßÔ¤©÷uNšãµê£)ÂK>¯J³Oƒ\rËQü¾B¨'),(5,'Referers_searchEngineByKeyword_1327',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹±\nÂ@D¿Åí…lb¢Î¶ÖFÄÆ*l4àâÁR÷﹋WÌ{Ë°£¨•ôà3èf‹}‡‹þô¡£›†»_Œ0\'ЋDÑüߧܶ §ãäHft §~¼ß‘êNiŠòÞÜJ^ºÒ‹yƒÄE…óö*1yÏùXÁ1Z'),(5,'Referers_type',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ?Â0Å¿Kv¡—ô}YUĽ\\µC0à`¡CÉw7‰×Á\nº8Ü]x¼÷Èa0;ö\0j¡Žnr·nÇ#Ÿ¹÷CwºO\n„ù—º(Ë‹AE’+(Ïýà•uÐ2ÇÈ-í5ßʦ”C-:åŠÔ¥—RZEuŽ†à°¥•2zYCZŒøRû쥘I#$PI`Š7úSêšRÿÀÙPz<W8x†'),(5,'Referers_urlByWebsite',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœMNË\nÂ@ü—Ü•fûÐM®žUÄ{IÛW\nUè¡ì¿›íVð0 ™ÌL\"dhñTð…Ð\\ýìŸíI>r—.¸ö6Î@HË[ôÀBe–a‘èš Hç°JT3¹‡›Ü´ïÇ°\'£@E©8(*Ö^\'¾1iÕpÊÓq\rMéø;ƒn\\ÓªÇèé¸Q6S:dqÌvý-n¾ÒfÇùÌñÀDß'),(5,'Referers_urlByWebsite_1392',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ%MM‚0ý+dw v1^<«1ÞIÁ*‹[X¶)ÂwƒÃ{}mŠPÀ$!Wà`79ÊOsFl5÷adÀarXÇB¹®#ìcZSØ’b\"è`zï\rd™¥Y²i7èÌà›ÒÞë“A‹úøCõ¥Qú>qƒ¦ÄìÈ1!¡àeÀ.`+žË¬b^±ªE|½ÖÑó…Ä !‡iŽç1‡¹áQü°mDÞ'),(5,'UserCountry_city',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ}N»Â@û—ìHÍõuVf@ˆ½J¡Ã‰JÔ¡º\'é••ÁgëbÇQ¬…\\Á-è—øîÎ:ëCûqèÀX\'{èI¢(³]Á…× Qûa$™P€H\"ÂŽÒp2TòÂѸ6pبqéðEÛü[Íû¨Ü9Xº\n’\\ý±°¤”뼺õÐ6ÎÞ”ìâä±Ëf>°‹/æ%HŸ'),(5,'UserCountry_country',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ}NÁ\nÂ0ý—Ü…¥Ý¦K®žUÄûÈtB± l£ÿnÒΫ‡×÷hÞË‹£5PÅgÂŽà–ðêò‘›qì¯ïiõ;°/v!¬ì»!ˆ2ŒxÖM𜀹\r^qPÔü ½r£ÀÖ¡RkÒ`«ò ø[ŽÛÈoì4];N¦þXS*uVÝY(‹7•½9Yì”Í;4ñ®,Iy'),(5,'UserCountry_region',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ}N»Â@û—ìHÍõuVf@ˆ½J¡Ã‰JÔ¡º\'é••ÁgëbÇQ¬…\\Á-è—øîÎ:ëCûqèÀX\'{èI¢(³]Á…× Qûa$™P€H\"ÂŽÒp2TòÂѸ6pبqéðEÛü[Íû¨Ü9Xº\n’\\ý±°¤”뼺õÐ6ÎÞ”ìâä±Ëf>°‹/æ%HŸ'),(5,'UserSettings_browser',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹±Â0CÿåvP/¡iñ¨# Ä^]¡CD$†\"uˆòï\\ ó-ËV8äˆF.à#è\Z×ø\ZOúÑ»Nioï•ÀÈ‹ =Hþ?WôµmAI§9‘, a¿$nýq\':óÖààØ,ÔhtÛ”ùW”*Š¹ÔûYŠùŽkø1@'),(5,'UserSettings_browserType',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹½\nÃ0ƒßåöBÎi~ª[;·¥t—ÔC†2¿{Ïi†OBR8¤€Jîàè¶0WýêKÇè‡ç²i5¡‰DQÿ犾´\r(êè#Éž?~š’\0wP½q–7:óÆàÖ±Y[¢ÑSæ½ÈER.÷›dó—ð*«1ê'),(5,'UserSettings_configuration',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹½\nÂ@„ße{!{ù¹s¶•”\ZDÐ.l4Åa …B„#ïøff‡Y…CŠ(äÞƒº¸Ägз^t˜Æþ</Fz™ÐDQþçŠÛ\Z4é0N$¶°ãzë¤m…W}|H\"ÜFi£’¼ympãجÉÑðÛ”ùW¬YÒšß²šï8‡/\0¨3÷'),(5,'UserSettings_language',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-ŒÍ\nÂ@„ß%w¡ÙÚ\'WÏ*⽤ZaqAh…–}wíᛆI9¢’3ø\0ºÄ5¾†£~ô¦cš†ë{%0òbBwEýŸ+zoPÒqJ$‹=¢çL6j£7öò@gÞÜ6k=\ZÝ6eþÅEQ!??I1ß±‡/tt0¶'),(5,'UserSettings_os',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹½Â@ƒß%;Rs¥?8+3T ¶*…\'Nb(R‡Ó½; tølËq9¢’3ø\0\Zâ\Z_ãQ?zÕ)Íãå½y1¡‰¢þϽ·\r(é4\'’Å.t»$a£6zc/OtæÁm`³Ö£ÑmSæ_Q\\rñ÷“ó{øš0Þ'),(5,'UserSettings_plugin',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÓÁj1àw™{a“U«“«ç¶Hï2îŽ:nl4ÙºñÝ;êÅ‹0—0Lþð1!!4Ï‚•ûD3Cø’Aºåœzú¦•çå\"€šHº@Ž°¾Ç íµ;Fð´b.éÚ58Aënù\nÜEÐh¶Â³Vµûp—[çuL뵧´}àìÎàF;:Q†VЦDnú3®sT@ÔãÇ_iº^öœAŽ¦BˆLþàés朔@- ?mÒž[¡ö½ÌkÝ0Å”ÁMKL©‘$þÄÑËfÛg¨³êD!t¿äÍ\\‹Z[>'),(5,'UserSettings_resolution',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹Á\nÂ0DÿeïB6m“8¹zVïe«=Z¨òïn´‡733‹’`â|]Ó–^ãIV¹Ë”çñöÞŒ²¨Ðƒ¢ ûÏ¡µ(Ë4gŠ‹ÄÆöïÅ»Ó)Aéã^}PØYVs-*~Ÿ2ÿŠÚD`Pj»ŸcU?p_gd1È'),(5,'UserSettings_wideScreen',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹±Â0DÿÅ;RÒ´\\Vf@ˆ½r¡CD R‹Ô!Ê¿cC‡ww>9¢\ngðt‰k|öGùÈM†4ö×i%0ò¢Bw\n‚ú?tÖ6 $Ø(,ð ÷4¿D·Q+²´êÂÞ±š·¨´Û”ùWA…\\ìýŠúŽ-|qî2k'),(5,'VisitorInterest_daysSinceLastVisit',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ±j1àwtXÖÙ—È[)tKK)]§x0=Rèn8òîUÒ¥KAP-F‰#óW¡,[—Pž„öÏ}íÓC=××zœÛôò¹‚l‹ð¥\nÿ´W‰×Û$0×c›¡hÇ(ðØNí«ÎÓ¡o}éçJ—XnãåÒ…t4Ȧ—C¹Ünþo³@À`À¢FH¿°ðÆ>XÄhÀŒ‘\rXòÁXöÁ&6ú`³Ûù`#Žlï€\r;$ËÒÈ#R´¦„,žGŒhÍ„Ùäy$IÖ¢QM GšhDS$älZ¡G¤è9§»xo\0‘®Å7¦ëë\''),(5,'VisitorInterest_pageGap',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÒ=Â0àÿràxËG?.›8«ˆ{I¥C°àP¡Cé7‹‹pÃ-á%yááÈ%&â%³‰¦–ášçüìNéîöšKc*< &vßzb»Ý†1õÃq*/@H3Û¸÷K^3Sé\Z^Jrñ×ýF³h0ó³:˜C\'ÀœæÑ0¯ƒ,è`Ö‚©0ÏÐ Áhµ‚V2•å—|[£Ä´’éZÎÒÁÒ>JC>'),(5,'VisitorInterest_timeGap',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÓÁ\nÂ0\0Ð x,$m×méM<«ˆ÷щ‡âÀÄÆþÝl^¼{)!¤<’´‰‰xÎŒñÄÔ2œó”Ý!½Ò5õý»<\'`©å€ÄÄîSžØ®ÙŠaHý}€8²g@C1³Û‚¸d&)Fž%rñ—-ó¿&1‘qßþàlΑ \ZÎàCaZçxµLÓ¢±^Ve@ÁŒWuÊ€‚É5`]Ì´*°)\06‚jPóÛB¯¦AÚÙ½¢ECkðw‹HW'),(5,'VisitorInterest_visitsByVisitCount',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ±\n1àw 8šôÚ»K7qVw©âP<pPp8|w£..B†,å§øhéýU(ÉÜ$”Ð(°mv9¬ê½îëq:v×É|ÓNPªÄïx~ï&©Ï”›~B‚Ò„Ëg^ó³ élYS,ëòüì¸`ŒlÀØ‹°ð‹>X‡ë|°„É€%,c6`Ùë±7`½6à`À¬‘,/dtÐ4SB¶¼òhÍœ1‹çQ$Yÿ\0`=ʤ×\r„l=\ZEȼ4€HïðJ8ÄÀ'),(5,'VisitTime_localTime',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ–±jÄ0ÿE}@O¶,{ݦNBHè’+L)rp…ñ¿Gò)]ºL±ûÄ\"£ÁÅ°ÙB´m1??›&s/Ëmù<=æk~Ëçõrzýº9“mߥ¹w7gëî׳u\ZÍù|Yݼ˜Bi¿Õ•\ZKõ󇥒±^‚JõX*µ«Ò1ØkËæmÛëçOó~LþÏåÛ;¾aùëž±åÐ2µ<˜üßLøW0S0˜©˜:˜)L=Ì4\0LfJ\0Ó\03\0S‚™&€i„™DÈ|¢¡“‹V¹—Ó2asÑêásÑòatÑúátÑauÑ\náuá%Ì.Ú¢P{ÀbÂí¶h Üè¥8 ›:íöÕÃ@|'),(5,'VisitTime_serverTime',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ–=kÃ0Eÿ‹ö‚î³å§µsB÷ 4D\rZÈüß+Y\n¤qii¸ƒlùYz>ñƒŠÓsT럣šM<Å·Ýcø/a?wÛ÷“Qèù#Ì«ñA›²<(l.;5SØ\'ã£é y’F“FŸFëËÙåz\'ùVçs‡t¹´ÉýpiŒ«Ý¥ÛA[ñóu¨¥±”êãàç²=ÑÌyßÓ²”<r“5j[Ãà[ù-VYðGù”á6‰Al¥±Kr¾bëK³&û3SC`™©%0 ™É˜\Z2SG`jÉL=É‘™SGf\Z L=™ w|;VPêŽÀ\njdC1T¶ËA‘9ÛR`èlO!t°M†ÒÁvRÝVƒ®+†ØÁö•0Ì.l_ CíÂþû†Û…ýÿ)·ÛíÈ“/\'.Â'),(32,'Actions_actions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ’MoÂ0†ÿJ–Óv Jâòå·#Ú&ØÎ(´Q‰(íDËЄøïKÓÐnÑ`\"%rì×±òèU8Ä£A&_FH_ÍÁl–OªVoj•ëå¼<ô·Å~»U»/Š•=hB¥BhûrhÒC¤¹ZéœÊ\n\'H×:Ù”ûšJƒÂnÞì.\0Ù´\Z&Sd‡˜ý\\¸ƒîu\'kž|ꥂîˆnäЧæPÈðh#pÆäÉ¥o@\"Ip‹‚˜\"ÙéÔØ~R›:×w—¡ð‰Çâ(ü—¹tã8ýD„@D¤—Ö^Æ´Sal+#ÑE[d®íŒœOºþ\0سc%nÁŠ‡¬ÀjȬ,7¦ÈˆªÉºÜê•ir¯2eŠ‡(Šþu“çÀ\\Áv®B°éå=ŒÑupÓE<¶,:)‹”8ŸFÈ€TërŸ§d¥ÉNg¦ªµ5QyŸÏ.³™²ÀT⪩Dhª6áüÉ`À›àè6-'),(32,'Actions_actions_2200',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ]NÍ‚0~³»ËºÑöêY‰z\'…]M@BáÝÝPqáÐíûë·1j,*: IP¤¶··lÇO>s^•ÙñÑÿÙ©«kn^‡Ö¢Äh>ûŒx9FQq^V‚\\$B±J»¦¸rkï)¥ ‹Ú\rø™!ß`Ñ(š\n”ù¨š‚‰è¥klƒ¸V!ù©‰èÀ8$ðûÒ&T“™ŒÞfT88dhO£»×àÁo—XÖ'),(32,'Actions_actions_url',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ“ßOƒ0ÇÿÓw¡×ƒ9®1¾ø¬Æù¾tB„\0˶,ûߥíƺFYŒ#é¥w÷íûôPÓ.\'.Ÿ \'Ä^òuþ9TzS‹\"›¿Vë“7[•¥j¶Œ€vmoØ;“ŠÐ®W”èhL¬P‹¬`²¥~¿0ÿJ³\r“9‰~€Ãµ™òÞ\"—f%„ˆ´AšÀ8ÂÏ¢\0³ŸÜk£ìíت1·€„زëj\nÃl£ÊºÈ‚ªù™–£|’{³ìÿåøõ?–]ù;„s\\à‚c½\0ÄŽüÀ£“!ú31ýŽsi‡’¸¥È§„±Ké¡V*³.kîgËjU¤7iÞÖ…Úþ¡‡p´‡Ðï!€Ä‘n;ãè¢>36)l’Ÿ£ž^@ã8ê‘Ê7Àk¼úoÐÏÛ®j²‹=š\0#î~`a[ñ 4ø a\0m¥‚\'p8@GÆîÍig*מ· y|“['),(32,'Actions_actions_url_2209',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ]OÁnà ýîK0n³Í¾î¼Umï•[¡-Q\"BÔMUÿ½@·å`ð{~~ð„]iþ lHmÜÙ}Þ$È^Ž=l‡ó?ÚÍ}/þGÐeŠ‡:)Âû¾4‰^“êäh;ÅQ‚¤êqö§V&[µ¡WìÈÄ‚T98BÍy_W€«$Eàüd`–S\\ðZÈ.Á¯‘ÎÀX—\0þ¾ôR²Í\\ÓXîùc¶Ùç˜øLª\ra¤º¶ßÒÿYOaðv?\Z ¿ó5ÞOš¾ykì'),(32,'Actions_downloads',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœEŒÍ\nÂ0„ßeïJ³ñwöêYE½— ¦TZ¥HÈ»›EÐÃó\rÌ() ’ü\ntS¸×;}êE›ØÖ§~úÓùÕu:¼ i,FW…ÿîk— ¨MIFlAû›÷Ã$€‹œé|±5K6TTH%YÇì6’Ìœì%\0ïç2ˆ'),(32,'Actions_downloads_2218',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœuNA‚0üËÞµÒ5Ó«g5ê,†@c‘Jˆþn‰ž<ÌìÌ&;³‰Ñ`£OP[ÐÙæ‘Øós[d—fø¹k_×ܾ Æ.ÝI3ÔrÏHã6YÎKºƒ” áØW‚K6OaÙ_¿#m ’ˆ¯Pv³›ž\"ñÒ¦@};§ª=¨òÞA¿]7mù¯%$(}ÔS˜«$ŠañK‡'),(32,'Actions_outlink',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœµŽ»\nÂ@EÿezÃ>\r3µŠÚ‡‰Y²1’‡AÂþ»»Å&Å\\æÞyp5ÎQoNf2u±ç¯\\Úª8·ÓÏ]Ʀáî(qî½À\rˆã=c\ZÒÁrYY ¿¡îÕ;y…§IÛ=€*_2”ŠF{ÉRA.ξ¡RjGn‰ÿA§Úq°æY÷«p2ÂI‘¯ÂåÜFÒÜßödÆ'),(32,'Actions_outlink_2227',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœEN»Â@û—ìôq×28+3 `¯R¨àD_º¾„ªþ;wƒ;‘fƒˆOÐ{ÐÙL椗›äe‘]šéï®CU‰ýbÌ#ºô–¤~›‚JÉ‹’¸C\n»±&6P±‡úí(M\"/×/ždëÖ Á®Ê•¼ú¾E>Š1hýAcŸ[±Ëh>òâæ.öâ?l'),(32,'Actions_outlink_2228',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ]MA‚0üËÞµ@ŘéÕ³\ZõNC¤¡XSJˆ!üÝŒ&vvf³3ÃÈ0j$ê¹ô ›bÏž¯\\šª8Ûá§.}Û²{RŒ]\0º‘bÈÅÏÈã5.+C*|l@Âúºr…í½Ñ†”F&ó%2B²‹8k5Eà¥F‚z7ÇÉ@kïŸâ×»ÿ7³T5…½J#yåóGä'),(32,'Actions_sitesearch',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'CustomVariables_valueByName',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'DevicesDetection_brands',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(32,'DevicesDetection_browsers',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-Œ½Â@ƒß%;Rs¥?8+ê±W)t8qC+u8Ý»“@‡Ï¶,\'Š€QÉ|ÝâßãYW}è”æñþÙŒ¼˜Ð“DQÿçŠÞÛ”tšÉbhH\"ÂNmôÆQ^è̃ÛÀfG£Û§Ì¿¢¸(*äâç)æöðYœ0j'),(32,'DevicesDetection_browserVersions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹±Â0CÿåvP/¡iñ¨# Ä^]¡CD$†\"uˆòï\\ ó-ËV8äˆF.à#è\Z×ø\ZOúÑ»Nioï•ÀÈ‹ =Hþ?WôµmAI§9‘, a¿$nýq\':óÖààØ,ÔhtÛ”ùW”*Š¹ÔûYŠùŽkø1@'),(32,'DevicesDetection_models',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(32,'DevicesDetection_os',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹½Â@ƒß%;Rs¥?8+3T ¶*…\'Nb(R‡Ó½; tølËq9¢’3ø\0\Zâ\Z_ãQ?zÕ)Íãå½y1¡‰¢þϽ·\r(é4\'’Å.t»$a£6zc/OtæÁm`³Ö£ÑmSæ_Q\\rñ÷“ó{øš0Þ'),(32,'DevicesDetection_osVersions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹±\nÂ@Dÿe{!{1—8ÛZë!‚éÂFS¤ˆâÈ¿»§)ÞÌ0Ì(rD%Wð â\ZßÃY?z×1MÃm^ Œ¼˜Ð“DQÿ犮´\r(é8%’ôèƒô$ÂíÔFgå…Ö¼1Ø;6ó%\Zí>eþ[E…¼•ûE6ó—ð5–1Ä'),(32,'DevicesDetection_types',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹;Â@ƒÿKv¤æJ8+3Eˆ½JÉ“@êpºÿÞ:|¶eÙŠ€QÉ\0¾€îq‹¯ñª_}ê”ÖññÞŒü1¡™DQÿçŠÞÛ”tZ‰—á 6zã,:óÆà6°YëÑèŽ)ó¯(.Š\n¹øý&ÅüÄvƒ|/T'),(32,'Goals_ItemsCategory',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goals_ItemsCategory_Cart',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goals_ItemsName',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goals_ItemsName_Cart',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goals_ItemsSku',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goals_ItemsSku_Cart',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goal_-1_days_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goal_-1_visits_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goal_0_days_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goal_0_visits_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goal_1_days_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(32,'Goal_1_visits_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊKx–ôL‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßñÊþs›¦zºLPîò„¥q_–yɯÆ$³ŽgI¡lËk¹1Á<úÌýÁ¼\r0(°`ƒEŒ\n,Ú` “K6XƬÀ²\rÖa§À:¬Ç^õXd42h’)¡×ìY´ˆdŸ19gQ$Y~€Ô–Se\" 9ZùµDú„7Žð¤R'),(32,'Goal_2_days_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(32,'Goal_2_visits_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊK\Zx(¤©L‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßöÊþSMS=]&(w¹B‚Ò¸/K¿ƒòjLÒëx–ʶ¼–Š æÑÿ`ôó6XÀ xY°Á\"Fm°„I%,cV`Ùë°S`\rÖc¯Àz,2Hš 4É”Ðkf„,¶ˆdŸ19g±H²ü\0Y[NZ,ÉÑʯ Ò\'¼Žƒ¤R'),(32,'Goal_days_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ=1àÿp4͵w¦›8«ˆ»Tq(8œàpøߊ›%CKHýàBIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“Np†R…¿Û«Äw7 Œõt¡Lº”&ƒŽXžMH÷™µâ²)ÏOÇ\"¤þCÑŠ\rˆ} F6 Îê°3 ä%L”} ŒÙ€z¨ÇÞ€¨¬GZ:HZSBEé 5fÓòˆ¬B\"š˜GHôz‰‘³õbä‘z4ÎiW†ô.^.ºù'),(32,'Goal_visits_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ=Â@àÿp\\î«mngq/Wq(*8ÿ»©â&dÉpÇKîàYÂ[™\"/#»r`êŽãs¼õ»ú¨ç:L×þt/³\\pR9|¿Wöë41Lu¸NPfyB‚2r+‡Êk½*;^$…²/¯ÏÄòèÈÛ@Ãrÿ¡`EŒ\nm „I’\r”1+P¶\Zl¨±Zl¨5€\"C‡¤mCg I¦„^Û²hÉ>cršeQY¶\\ªÈ©˜EIFŽ6~«`Hkx¥‘šî'),(32,'Provider_hostnameExt',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(32,'Referers_keywordByCampaign',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Referers_keywordBySearchEngine',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ]Ž½\nÂ@„ŸÅí…ì f¶µŽ\"6Va£)\"¤÷îÞŸÅÌÂ0ß°\nƒÍ¡’3¸]ÜêÞýI?zÓa\Zûë¼ÛŒ$\n›ë\n®b\\ƒ&ƉdAºëkžw$&ˆƒl¹y¦[KÄš’sÚŠ£æ·Î¨I¨÷Ç’´eŒsÕGS„‡|¦Œ©mö,ø/ÕõAk'),(32,'Referers_keywordBySearchEngine_2253',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹MÂ0DÿËÞ…¦µ~Ì^=«ˆ÷²ŠQzùïfkóÞ2ìZ$EÃ\'¸=謳>†ƒ|ä*cðÃå9R, ‰XÐýß;k{PÑâX\nz}ßÓ]¢\'V´%®¤«^ómq϶Wlj¿v8\rR¶í‘sñÊÙña£2–'),(32,'Referers_searchEngineByKeyword',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ]ŽÁ\nÂ@Dÿ%w¡Imi\'WÏ*⽤Zp± X¥‡²ÿîîv½x˜ 3‹C¡p:ºÙÝ»½ílý8t§ÇL`,S0º\Zʵnà\"Æh´~I\'4 ççu¹Ù4:H•ùnõšn¥àPçœ-båÇç¿©¤©÷MNÚãµê£ÂK~]‰Ô’Ö½ú/¾xB§'),(32,'Referers_searchEngineByKeyword_2262',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹±\nÂ@D¿Åí…lb¢Î¶ÖFÄÆ*l4àâÁR÷﹋WÌ{Ë°£¨•ôà3èf‹}‡‹þô¡£›†»_Œ0\'ЋDÑüߧܶ §ãäHft §~¼ß‘êNiŠòÞÜJ^ºÒ‹yƒÄE…óö*1yÏùXÁ1Z'),(32,'Referers_type',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ?Â0Å¿Kv¡—ô}YUĽ\\µC0à`¡CÉw7‰×Á\nº8Ü]x¼÷Èa0;ö\0j¡Žnr·nÇ#Ÿ¹÷CwºO\n„ù—º(Ë‹AE’+(Ïýà•uÐ2ÇÈ-í5ßʦ”C-:åŠÔ¥—RZEuŽ†à°¥•2zYCZŒøRû쥘I#$PI`Š7úSêšRÿÀÙPz<W8x†'),(32,'Referers_urlByWebsite',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœMNË\nÂ@ü—Ü•fû²ÉÕ³Šx/i»Âb¥°\n=”ýw³»\n&!“™I„mŽ\n>v·ºG”·Üd˜m]V ¤í¥F`¡2Ë…°ˆtM0Ë`g`•¨ÆÛ»õÖïÇå ìÈ(PQ*ZEÅSêuäW\rÇ<ShLÇßüscJ›¨2‚£Ã—ê2¥C‡l×ßBöÓvɱC>qø\0ûDä'),(32,'Referers_urlByWebsite_2279',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ%MM‚0ý+dw v1^<«1ÞIÁ*‹[X¶)ÂwƒÃ{}mŠPÀ$!Wà`79ÊOsFl5÷adÀarXÇB¹®#ìcZSØ’b\"è`zï\rd™¥Y²i7èÌà›ÒÞë“A‹úøCõ¥Qú>qƒ¦ÄìÈ1!¡àeÀ.`+žË¬b^±ªE|½ÖÑó…Ä !‡iŽç1‡¹áQü°mDÞ'),(32,'UserCountry_city',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ}N»Â@û—ìHÍõuVf@ˆ½J¡Ã‰JÔ¡º\'é••ÁgëbÇQ¬…\\Á-è—øîÎ:ëCûqèÀX\'{èI¢(³]Á…× Qûa$™P€H\"ÂŽÒp2TòÂѸ6pبqéðEÛü[Íû¨Ü9Xº\n’\\ý±°¤”뼺õÐ6ÎÞ”ìâä±Ëf>°‹/æ%HŸ'),(32,'UserCountry_country',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ}NÁ\nÂ0ý—Ü…¥Ý¦K®žUÄûÈtB± l£ÿnÒΫ‡×÷hÞË‹£5PÅgÂŽà–ðêò‘›qì¯ïiõ;°/v!¬ì»!ˆ2ŒxÖM𜀹\r^qPÔü ½r£ÀÖ¡RkÒ`«ò ø[ŽÛÈoì4];N¦þXS*uVÝY(‹7•½9Yì”Í;4ñ®,Iy'),(32,'UserCountry_region',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ}N»Â@û—ìHÍõuVf@ˆ½J¡Ã‰JÔ¡º\'é••ÁgëbÇQ¬…\\Á-è—øîÎ:ëCûqèÀX\'{èI¢(³]Á…× Qûa$™P€H\"ÂŽÒp2TòÂѸ6pبqéðEÛü[Íû¨Ü9Xº\n’\\ý±°¤”뼺õÐ6ÎÞ”ìâä±Ëf>°‹/æ%HŸ'),(32,'UserSettings_browser',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹±Â0CÿåvP/¡iñ¨# Ä^]¡CD$†\"uˆòï\\ ó-ËV8äˆF.à#è\Z×ø\ZOúÑ»Nioï•ÀÈ‹ =Hþ?WôµmAI§9‘, a¿$nýq\':óÖààØ,ÔhtÛ”ùW”*Š¹ÔûYŠùŽkø1@'),(32,'UserSettings_browserType',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹½\nÃ0ƒßåöBÎi~ª[;·¥t—ÔC†2¿{Ïi†OBR8¤€Jîàè¶0WýêKÇè‡ç²i5¡‰DQÿ犾´\r(êè#Éž?~š’\0wP½q–7:óÆàÖ±Y[¢ÑSæ½ÈER.÷›dó—ð*«1ê'),(32,'UserSettings_configuration',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹½\nÂ@„ße{!{ù¹s¶•”\ZDÐ.l4Åa …B„#ïøff‡Y…CŠ(äÞƒº¸Ägз^t˜Æþ</Fz™ÐDQþçŠÛ\Z4é0N$¶°ãzë¤m…W}|H\"ÜFi£’¼ympãجÉÑðÛ”ùW¬YÒšß²šï8‡/\0¨3÷'),(32,'UserSettings_language',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-ŒÍ\nÂ@„ß%w¡ÙÚ\'WÏ*⽤ZaqAh…–}wíᛆI9¢’3ø\0ºÄ5¾†£~ô¦cš†ë{%0òbBwEýŸ+zoPÒqJ$‹=¢çL6j£7öò@gÞÜ6k=\ZÝ6eþÅEQ!??I1ß±‡/tt0¶'),(32,'UserSettings_os',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹½Â@ƒß%;Rs¥?8+3T ¶*…\'Nb(R‡Ó½; tølËq9¢’3ø\0\Zâ\Z_ãQ?zÕ)Íãå½y1¡‰¢þϽ·\r(é4\'’Å.t»$a£6zc/OtæÁm`³Ö£ÑmSæ_Q\\rñ÷“ó{øš0Þ'),(32,'UserSettings_plugin',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÓÁj1àw™{a“U«“«ç¶Hï2îŽ:nl4ÙºñÝ;êÅ‹0—0Lþð1!!4Ï‚•ûD3Cø’Aºåœzú¦•çå\"€šHº@Ž°¾Ç íµ;Fð´b.éÚ58Aënù\nÜEÐh¶Â³Vµûp—[çuL뵧´}àìÎàF;:Q†VЦDnú3®sT@ÔãÇ_iº^öœAŽ¦BˆLþàés朔@- ?mÒž[¡ö½ÌkÝ0Å”ÁMKL©‘$þÄÑËfÛg¨³êD!t¿äÍ\\‹Z[>'),(32,'UserSettings_resolution',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹Á\nÂ0DÿeïB6m“8¹zVïe«=Z¨òïn´‡733‹’`â|]Ó–^ãIV¹Ë”çñöÞŒ²¨Ðƒ¢ ûÏ¡µ(Ë4gŠ‹ÄÆöïÅ»Ó)Aéã^}PØYVs-*~Ÿ2ÿŠÚD`Pj»ŸcU?p_gd1È'),(32,'UserSettings_wideScreen',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹±Â0DÿÅ;RÒ´\\Vf@ˆ½r¡CD R‹Ô!Ê¿cC‡ww>9¢\ngðt‰k|öGùÈM†4ö×i%0ò¢Bw\n‚ú?tÖ6 $Ø(,ð ÷4¿D·Q+²´êÂÞ±š·¨´Û”ùWA…\\ìýŠúŽ-|qî2k'),(32,'VisitorInterest_daysSinceLastVisit',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ±j1àwtXÖÙ—È[)tKK)]§x0=Rèn8òîUÒ¥KAP-F‰#óW¡,[—Pž„öÏ}íÓC=××zœÛôò¹‚l‹ð¥\nÿ´W‰×Û$0×c›¡hÇ(ðØNí«ÎÓ¡o}éçJ—XnãåÒ…t4Ȧ—C¹Ünþo³@À`À¢FH¿°ðÆ>XÄhÀŒ‘\rXòÁXöÁ&6ú`³Ûù`#Žlï€\r;$ËÒÈ#R´¦„,žGŒhÍ„Ùäy$IÖ¢QM GšhDS$älZ¡G¤è9§»xo\0‘®Å7¦ëë\''),(32,'VisitorInterest_pageGap',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÒ=Â0àÿràxËG?.›8«ˆ{I¥C°àP¡Cé7‹‹pÃ-á%yááÈ%&â%³‰¦–ášçüìNéîöšKc*< &vßzb»Ý†1õÃq*/@H3Û¸÷K^3Sé\Z^Jrñ×ýF³h0ó³:˜C\'ÀœæÑ0¯ƒ,è`Ö‚©0ÏÐ Áhµ‚V2•å—|[£Ä´’éZÎÒÁÒ>JC>'),(32,'VisitorInterest_timeGap',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÓÁ\nÂ0\0Ð x,$m×méM<«ˆ÷щ‡âÀÄÆþÝl^¼{)!¤<’´‰‰xÎŒñÄÔ2œó”Ý!½Ò5õý»<\'`©å€ÄÄîSžØ®ÙŠaHý}€8²g@C1³Û‚¸d&)Fž%rñ—-ó¿&1‘qßþàlΑ \ZÎàCaZçxµLÓ¢±^Ve@ÁŒWuÊ€‚É5`]Ì´*°)\06‚jPóÛB¯¦AÚÙ½¢ECkðw‹HW'),(32,'VisitorInterest_visitsByVisitCount',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ±\n1àw 8šôÚ»K7qVw©âP<pPp8|w£..B†,å§øhéýU(ÉÜ$”Ð(°mv9¬ê½îëq:v×É|ÓNPªÄïx~ï&©Ï”›~B‚Ò„Ëg^ó³ élYS,ëòüì¸`ŒlÀØ‹°ð‹>X‡ë|°„É€%,c6`Ùë±7`½6à`À¬‘,/dtÐ4SB¶¼òhÍœ1‹çQ$Yÿ\0`=ʤ×\r„l=\ZEȼ4€HïðJ8ÄÀ'),(32,'VisitTime_localTime',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ–±jÄ0ÿE}@O¶,{ݦNBHè’+L)rp…ñ¿Gò)]ºL±ûÄ\"£ÁÅ°ÙB´m1??›&s/Ëmù<=æk~Ëçõrzýº9“mߥ¹w7gëî׳u\ZÍù|Yݼ˜Bi¿Õ•\ZKõ󇥒±^‚JõX*µ«Ò1ØkËæmÛëçOó~LþÏåÛ;¾aùëž±åÐ2µ<˜üßLøW0S0˜©˜:˜)L=Ì4\0LfJ\0Ó\03\0S‚™&€i„™DÈ|¢¡“‹V¹—Ó2asÑêásÑòatÑúátÑauÑ\náuá%Ì.Ú¢P{ÀbÂí¶h Üè¥8 ›:íöÕÃ@|'),(32,'VisitTime_serverTime',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ–=kÃ0Eÿ‹ö‚î³å§µsB÷ 4D\rZÈüß+Y\n¤qii¸ƒlùYz>ñƒŠÓsT럣šM<Å·Ýcø/a?wÛ÷“Qèù#Ì«ñA›²<(l.;5SØ\'ã£é y’F“FŸFëËÙåz\'ùVçs‡t¹´ÉýpiŒ«Ý¥ÛA[ñóu¨¥±”êãàç²=ÑÌyßÓ²”<r“5j[Ãà[ù-VYðGù”á6‰Al¥±Kr¾bëK³&û3SC`™©%0 ™É˜\Z2SG`jÉL=É‘™SGf\Z L=™ w|;VPêŽÀ\njdC1T¶ËA‘9ÛR`èlO!t°M†ÒÁvRÝVƒ®+†ØÁö•0Ì.l_ CíÂþû†Û…ýÿ)·ÛíÈ“/\'.Â'); -/*!40000 ALTER TABLE `piwiktests_archive_blob_2012_03` ENABLE KEYS */; +LOCK TABLES `archive_blob_2012_03` WRITE; +/*!40000 ALTER TABLE `archive_blob_2012_03` DISABLE KEYS */; +INSERT INTO `archive_blob_2012_03` VALUES (1,'Actions_actions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ’ËnÂ0EÅõª]yì„ÇxÙ.Q[A»F&±‚EH*Š*Ä¿×NÌËB°!’™;wìøh&¸3ÈäŠ>ÒO³5ËÙ›jÔ—šz6©¶§lºYÔú\"ஶM©T(º~… œœ -Ô\\TÖ8DúºÐé²Ú4T\Zäv[Ç@H×jP0™!‹@ÄìüsÞ,¸lOomî8!FÞÊÙ!\0?^™´ÁÞm\nîläþ‚÷å¾À!9€AL™®ufl?iLSè§$WÑÀÐÃñïäþá Ûk^`á!/ÀàÌnκd@;V5ƶÒç]‘wEFCZï-*þT¢ÖCÆUµ4eNTCÕJÿ¨\\“g•+S¾DQtŸÛ%5ÆÅ\rj‡ªˆÏ©%Çä*ñ\0£E<°(¦:ÊŒ´~Þ’©Õ¦ÈÈ\\“µÎMÝh;VDÕä{2¾fÄ‚‘â7GŠ‡#å„«zà‚Äm5;'),(1,'Actions_actions_26',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ]ŽA‚0…ÿŠÙÝeÝ\0c{õ¬D½“Bˆ.‚& !†ðßݦÁÅC·~o}¯cÔ8YTt@“¡ÈíhoÅŽŸ|沩‹ãcüÑih[î^§Þ¢Äh>~Fȼœ¢h¸¬An$A±Ê‡®ºroï)¥ ‹Úĵ†|’E£() &ñB\0ýÿjþØDã°@«¾©*€Ž=Ié³ÿ(£ÂÉu†ö4»{\r¾y@X¢'),(1,'Actions_actions_url',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ’ÝKÃ0ÀÿÉ»m.×nî‚øⳊó}d6¸bkKÛ±±ÿÝ4ÙGf] !÷™»_NQJÛœ¸|&{ÉWùçìQuêMÍ={V\'iº,KÕlm[s°w&¡‹W4éµ)±BÍuÁdK&_œezÍdNÂlð÷QýqÇ͉\\Ú<\"郤}¬ B+ž)v}>åŠCbËÆb‹®«)ŽõZ•u¡£ªùˆ;Ê\'¹³aÿï lø¡ÿhÑ•¿38\'À8X1P@â¹Cz.³wÙx5{Ä5 %!$L}HµjT©;ÝÜOÕ²Èn²¼µùÃáàa8ANcŸßÄwÂØ\n}ÖÄXFÂ…3òŸH§8Lz qïð\Z_€á˜{ÛU>c|i23â`ÂýŽ±s>ñ…ï^a:WÁØ? ŽO¦ö²Éik;·ôn¡§ñ\rêXZ'),(1,'Actions_actions_url_30',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ]OOÃ0Å¿‹ï´q¼?¾rÜ\'oŠhD«Viª¦}w’¨\'ù9~/yÊ–/ž¼0í^ýÙž4ê‡{wxÏÿô¾ƒ†`äËœ8(ÓM¯Œ»ÜÞ2ôzt=H\Z!†vZ©ÓÙ5]@<ÛTX×½A’<“‘âc\Z¤M–JyØõ-\Z¸¯Æñ±kjøs5lÙÔ°½Ã5ToñS´%””´gèbœ¸mÝ·Sïš1|¶sƒ[¥O$ÏrMûæÃ/ƒ‰k¸'),(1,'Actions_downloads',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœEŒÍ\nÂ0„ßeïJ“ø;{õ¬¢ÞËVŠS*R$äÝÝEÐÃßÌ<rDÅ„è§x¯wò”‹4©OýôOçW×Éð&8äQ®Ä‚ðÝÖ.AIš6Ø‚ö7ï‡q„W9Ó‚ÚÚs±(¨•¬ó.Š3Ç{.Â2%'),(1,'Actions_downloads_28',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœuNA‚0üËÞµÒ5Ó«g5ê,†@c‘Jˆþn+‰zñ0³;“ìÌ2$Fƒ•>@AG3˜[¶cÏÎm‘šá«Î}]sû $»@t%ÍPó=#n\n²œ–t)A±¯—lî²/:¿|\ZGÚ@$¿ø*ÐFê)JžË¨oß¡jª¼wÂÅg—M[þ+ Jïõæ\"‰Ë#¥KV'),(1,'Actions_outlink',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœµŽ9Â@…ÿËô†=™ÖZEíÃDY²q%‡ABþ»»`“ÖbóÞ|Œ\Z‹‚Ž¨×\'ÛÛ2ßsËW.œÉϾÿ¹KWU\\\0%M¸ñ|ϘÆ4Cp\\64Âݼ“W|šøúdQ…’±Ôlt,4Æ£À!t1T\Z§ðl\nÁw³Ï²YD“3šÛ´Ý„¶’t ñvõcÿ'),(1,'Actions_outlink_27',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœMŽ¹Â0Dÿe{rØ ÅlK\rè£\rD`‘Kq¡(ÿŽM„ ˜=f5O+P˜\r\">@oAG3™g¶“^.’—Evj¦ßvªJº!Æl]¡+±@¯yAêÝTJ^”Ä (´cMl œâ©¯©]I“ˆAC÷A(Çxô}‹0¼cÐú÷‚¦»¯\\—ѼçÅõMì‡7ε?;'),(1,'Actions_outlink_29',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ]MA‚0üËÞµ@ŘéÕ³\ZõNC¤¡XSJˆ!üÝVŒ\Z;;3Ùad5µ‡\\ƒzÐM±eÏg.MUíðU§¾mÙ=)Æ.\0]H1äüÏÈ£›ƒ—•!.V a}]¹ÂöÞè[CJ#“þÎÇ’š¢æ¹E‚z÷J“ÖÞß!Ä;[Zwý/ÏRíÔö\"ä «›G³'),(1,'Actions_sitesearch',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(1,'CustomVariables_valueByName',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(1,'DevicesDetection_brands',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-Œ»Â0EÿÅ;R“¾¯×΀{åÒ‘Z©C”džÇÏc<R@Å7¸tgxÏ“ò”%nóãsÒ®^Ä‚ú¯›¶ (ˉwT â\0Wð…Z”†Wôš[ÛwÞ”®¨ýOÍÖˆ¾IÙ®®œ5_œ_ÌÐ/«'),(1,'DevicesDetection_browsers',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-Œ»Â0EÿÅ;R“Ò×+ê¨b¯\\艡•:DùwlšáøylG\n¨øw=Â>ÓU6yÊ—iüj ± >tAoÓe^\"ñªhˆ\\Áj¥WÎüF§¹±}ëMi‹ÚýÕl BÊvuã¬ùä¬ø-U09'),(1,'DevicesDetection_browserVersions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;¨IhZ®WÔPÅ^¹Ð!\"C‘:Dùwbšáøúq,°H\rß`Î {ØÂ{ºÈW2Çe\Z?Á ¥Ð“Xàv]Ðë¶E™—H¼Âƒ†ÝјŠ¸B_8ñ]ÉVïÞªâ«ÚýÕ¬ƒ AÊúuå\\ò`´ùØì1'),(1,'DevicesDetection_models',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-Œ»Â0EÿÅ;R“¾¯×΀{åÒ‘Z©C”džÇÏc<R@Å7¸tgxÏ“ò”%nóãsÒ®^Ä‚ú¯›¶ (ˉwT â\0Wð…Z”†Wôš[ÛwÞ”®¨ýOÍÖˆ¾IÙ®®œ5_œ_ÌÐ/«'),(1,'DevicesDetection_os',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;R“Ò×+3l•\"\"1´R‡(ÿŽ\rŽ¯ÇPñ\0waïé,›ÜdŽËtý쇴j¡\'± þë‚Þ¶\r(ʼDâU/tŒÄ®àµÒ+G~¡ÓlìÞzSÚ¢v?5Û ¨²}]8kœ5_mÕ0'),(1,'DevicesDetection_osVersions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;R“Ò´\\¯Ì!$ºU.tˆˆÔ¡H¢ü;1d8¾~,R@ÃW˜È‡=¼§³|ä.s\\¦ÛºÒV\n=‰í_ºí@Qæ%op ÇèyôĦb+ma(ù…¾d§wgUqUíjÖAÐ eýºp.y0Ú|õ1“'),(1,'DevicesDetection_types',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»ƒ0EÿÅ; åÑëµs©;2-CÔHZ‰!Ê¿c—ÇëcG\n¨y„»‚aïå&?™eÛ2}v‚Cúj¡\'± 9uÁ`iŠ²n‘ØÂ\0Wð…F”¿ÐkoíÞySº¢ö5Û\"¨‘²}Ý9k¯œ\rXK/#'),(1,'Goal_1_days_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(1,'Goal_1_visits_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊKx–ôL‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßñÊþs›¦zºLPîò„¥q_–yɯÆ$³ŽgI¡lËk¹1Á<úÌýÁ¼\r0(°`ƒEŒ\n,Ú` “K6XƬÀ²\rÖa§À:¬Ç^õXd42h’)¡×ìY´ˆdŸ19gQ$Y~€Ô–Se\" 9ZùµDú„7Žð¤R'),(1,'Goal_2_days_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(1,'Goal_2_visits_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊK\Zx(¤©L‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßöÊþSMS=]&(w¹B‚Ò¸/K¿ƒòjLÒëx–ʶ¼–Š æÑÿ`ôó6XÀ xY°Á\"Fm°„I%,cV`Ùë°S`\rÖc¯Àz,2Hš 4É”Ðkf„,¶ˆdŸ19g±H²ü\0Y[NZ,ÉÑʯ Ò\'¼Žƒ¤R'),(1,'Goal_days_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ=1àÿp4͵w¦›8«ˆ»Tq(8œàpøߊ›%CKHýàBIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“Np†R…¿Û«Äw7 Œõt¡Lº”&ƒŽXžMH÷™µâ²)ÏOÇ\"¤þCÑŠ\rˆ} F6 Îê°3 ä%L”} ŒÙ€z¨ÇÞ€¨¬GZ:HZSBEé 5fÓòˆ¬B\"š˜GHôz‰‘³õbä‘z4ÎiW†ô.^.ºù'),(1,'Goal_visits_until_conv',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ=Â@àÿp\\î«mngq/Wq(*8ÿ»©â&dÉpÇKîàYÂ[™\"/#»r`êŽãs¼õ»ú¨ç:L×þt/³\\pR9|¿Wöë41Lu¸NPfyB‚2r+‡Êk½*;^$…²/¯ÏÄòèÈÛ@Ãrÿ¡`EŒ\nm „I’\r”1+P¶\Zl¨±Zl¨5€\"C‡¤mCg I¦„^Û²hÉ>cršeQY¶\\ªÈ©˜EIFŽ6~«`Hkx¥‘šî'),(1,'Provider_hostnameExt',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-Œ»Â0EÿÅ;R“¾¯×΀{åÒ‘Z©C”džÇÏc<R@Å7¸tgxÏ“ò”%nóãsÒ®^Ä‚ú¯›¶ (ˉwT â\0Wð…Z”†Wôš[ÛwÞ”®¨ýOÍÖˆ¾IÙ®®œ5_œ_ÌÐ/«'),(1,'Referers_keywordByCampaign',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(1,'Referers_keywordBySearchEngine',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ]Ž?Â@Å?‹Ù…æÎû²:«ˆ‹SIµàaá†\nÊ}w{º8$<~y‰Â`q¨änAW7»OwÒ¯Þµ‡îægc™ÖFO…͸‚«h× Qûa$™Ð€úö~GâÀ¥LQ[ô ¯¤µÄ‡fcSf7Ûþ[5i5‡cqÚìÄA±þ2lm¢ö,g ?@Ô'),(1,'Referers_keywordBySearchEngine_33',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-ŒË\nÂ@Eÿ%{¡ÓZ7[×*⾤uÀà€â(]óïNê,rO8$WÐ\")\Z>ÁíAgõ1ä#Wƒ.Ï™àb šˆÝÿ\\°3Ûƒ‚Œ>Ç\"èõ}Ow‰žXáê´•]åšo{¶Å¦úíÂl!h²½9®œ-?22e'),(1,'Referers_searchEngineByKeyword',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ]ŽÍ\nÂ@„ß%w¡»u¥\\=«ˆ÷’ÖJWé¡ì»ÛýéÅC2dø2‰@cq¨øÕ‚.nvÏî(¹I?Úîúš \n‹_\rÄ‚:ãUEÛ€FéíHìÑ€Þßixˆ·Äª”.ZÝó=©áäpØØ”\ZãõvGýê´\Z‚CSœ6;q¬…×&Q;Å\'?öêB'),(1,'Referers_searchEngineByKeyword_35',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-Œ±‚@D¿ÅíM8ÄÙÖZ ±±\"’¸ñ’+0¡¸Ü¿Ëâ;o2™A‰¨(øwuºêg¸ÊW2úyèÃJpˆË&4ª]ÐZZƒ¼Œ³\'^Ѐžòá@¬pùÊÌ*óį5ÛŠ¢Éùyg2ˆÉ^nœ6™’Â1)'),(1,'Referers_type',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ;Â0„ÿKv¤:éƒ^Vf@ˆ½r¡CD$*u¨ú߉C2ðœ;§;ËÃ`v(ìÔBíÝä.݆G>rï‡îpó-<ê¤,g;ƒ\n‘+(Ïýà•uС(UžMê¥=Ç^YI;ÔÙWÉN—ÓKTÇè²8¬“Ò>ù0‹˜·ÑBÿ\01_@šÒ$ª5%–≅~±”ú\rF¤O4+’áuÛx$'),(1,'Referers_urlByWebsite',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœMŽOÂ0Å¿KîÊÒýqK®žUÄûȶ\nÅÁvýî¦k/¡/¿¼TÈÐæ(ã+aCps«{µgùÈCºÑ¶÷yBÚÞZ Ê#.„Y°K‚Q:;+¢ÌbŸv±Ë±Ÿ\'`G˜dRÏU\'UÁÃÞËàW&Œ*¹úÜÃÃüÿí˜6PaØ{Gu²šdÅ-ýšx^ïØùÂþ<·DJ'),(1,'Referers_urlByWebsite_38',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-NM‚0ý+fw v1^<«1ÞIÁ*‹[X¶)Âwï£ïµIr%dâ|ì*ù®OèñŽ¢úÖ8Œ.k™@(æu„]LK`\nRL†Î{ijéI–lÒö:5ø¢¤óúhТ>|Q}h¾[¹^ÓÊlÉ1!/È-¶ñøkó*U%âsÍÅ !ƒqŠWg1]óh~oÒD'),(1,'UserCountry_city',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ}Ž1‚@…ÿKwz(¯«³\ZãNŠ0\\$qÀ„Ü÷\nœ£Ã»6ׯïUá°r7 [˜Ã«=ëGÚC{ÏÆ2¥‡ž$\n¿á\n.ì»Ú\r#É„DÀ»Ü.ŸtJ*¥Ç1ÕÊæµ3¤Î¸®‡pŽÈ.þçÖ£tûƒ°Ä¸ÅYtcKÞ–Ì7¾¬Ìù™GHn'),(1,'UserCountry_country',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ}ŽÍ\nÂ@„ß%w¡Ùm«\\=«ˆ÷’Ú\n‹Á\n=”}w7ýñèa6aóe&\n‡) “3¸]žõQ?zÓ¦ïêëk$0¦!=t\'QøWpfߨצëI†äD7I\0¯r«|Ò!)—ûT›—ÎrÃÍr>…·ÍÅÿÜZäN¢u–—8‹®lÉÛ’ù¦“£Ñ§™Ù±5_`tIH'),(1,'UserCountry_region',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ}Ž1‚@…ÿKwz(¯«³\ZãNŠ0\\$qÀ„Ü÷\nœ£Ã»6ׯïUá°r7 [˜Ã«=ëGÚC{ÏÆ2¥‡ž$\n¿á\n.ì»Ú\r#É„DÀ»Ü.ŸtJ*¥Ç1ÕÊæµ3¤Î¸®‡pŽÈ.þçÖ£tûƒ°Ä¸ÅYtcKÞ–Ì7¾¬Ìù™GHn'),(1,'UserSettings_browser',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;¨IhZ®WÔPÅ^¹Ð!\"C‘:Dùwbšáøúq,°H\rß`Î {ØÂ{ºÈW2Çe\Z?Á ¥Ð“Xàv]Ðë¶E™—H¼Âƒ†ÝјŠ¸B_8ñ]ÉVïÞªâ«ÚýÕ¬ƒ AÊúuå\\ò`´ùØì1'),(1,'UserSettings_browserType',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»ƒ0EÿÅ{%Ê£×kç¡îÈШŠˆÄ@%†(ÿÞ˜f8öµ},°ˆ?an Á~îò•—ÌÁMãvâž-Ä‚ú¯zÝ6 ³Ägþ¸e݈=LÁêLŸ¹ò]îÞ[«J[ÔîT“‚\n1é׃Sî£áüÕ1¹'),(1,'UserSettings_configuration',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹Ë\nÂ@Eÿ%{afúôf+]jAw%Õ.](Túï&:‹“ä&\'‚€áø¿õqÏá o¹È8OÃyY 饅îÄ‚â¯ZÛV YÆi&VCÃõÖs×±w¡ü4uKá3!S(RòöÊîu0¥ÎjóS7‡´Ùב7í;oÃÐÅ3Æ'),(1,'UserSettings_language',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-ŒË\nÂ@Eÿ%{¡3µo¶®U¤û’j…Á¡ºæßMê,Nž\'x¤€Š¯p\'Ð-lá=žå+ƒLqïŸàV\rô Ô]ÐÛ´E™æH¼ê#z-Ä®àµÒ+G~¢ÓÜؾõ¦´Eív5[#¨²]]8k>8+~Gá0…'),(1,'UserSettings_os',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;R“Ò×+3l•\"\"1´R‡(ÿŽ\rŽ¯ÇPñ\0waïé,›ÜdŽËtý쇴j¡\'± þë‚Þ¶\r(ʼDâU/tŒÄ®àµÒ+G~¡ÓlìÞzSÚ¢v?5Û ¨²}]8kœ5_mÕ0'),(1,'UserSettings_plugin',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÓÁj1àw™{a“U«“«ç¶Hï2îŽ:nl4ÙºñÝ;êÅ‹0—0Lþð1!!4Ï‚•ûD3Cø’Aºåœzú¦•çå\"€šHº@Ž°¾Ç íµ;Fð´b.éÚ58Aënù\nÜEÐh¶Â³Vµûp—[çuL뵧´}àìÎàF;:Q†VЦDnú3®sT@ÔãÇ_iº^öœAŽ¦BˆLþàés朔@- ?mÒž[¡ö½ÌkÝ0Å”ÁMKL©‘$þÄÑËfÛg¨³êD!t¿äÍ\\‹Z[>'),(1,'UserSettings_resolution',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹»Â0EÿÅ;R“¶I¸^™!öÊ…‘Z©HQþ2?®9¢ãÌt{|M\'Ùä.sZ¦Û{\'äU=ˆý_„šŽ $ó’ˆW\rÈtvøxˆ#LÃ6z%(?áµõîlU\\SýO-utÈ¥~¹h?˜:|9¿1—'),(1,'UserSettings_wideScreen',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ-‹Á‚0†ß¥w6dà¿«g5†;)ÊaqJ&–½»-îðµýÛ¯‹Pù+Ì t[x\rgþrÏcœ†û¼Ò*…äõ_gtºm@‘Ç)’_á@Ÿyy³„\0S°…Zè„£¢•ÞèÝYU\\QÛ]Í\ZRÖ¯‹ÏÒF‡C¦2:'),(1,'VisitorInterest_daysSinceLastVisit',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ±j1àwtXÖÙ—È[)tKK)]§x0=Rèn8òîUÒ¥KAP-F‰#óW¡,[—Pž„öÏ}íÓC=××zœÛôò¹‚l‹ð¥\nÿ´W‰×Û$0×c›¡hÇ(ðØNí«ÎÓ¡o}éçJ—XnãåÒ…t4Ȧ—C¹Ünþo³@À`À¢FH¿°ðÆ>XÄhÀŒ‘\rXòÁXöÁ&6ú`³Ûù`#Žlï€\r;$ËÒÈ#R´¦„,žGŒhÍ„Ùäy$IÖ¢QM GšhDS$älZ¡G¤è9§»xo\0‘®Å7¦ëë\''),(1,'VisitorInterest_pageGap',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÒ=Â0àÿràxËG?.›8«ˆ{I¥C°àP¡Cé7‹‹pÃ-á%yááÈ%&â%³‰¦–ášçüìNéîöšKc*< &vßzb»Ý†1õÃq*/@H3Û¸÷K^3Sé\Z^Jrñ×ýF³h0ó³:˜C\'ÀœæÑ0¯ƒ,è`Ö‚©0ÏÐ Áhµ‚V2•å—|[£Ä´’éZÎÒÁÒ>JC>'),(1,'VisitorInterest_timeGap',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÓÁ\nÂ0\0Ð x,$m×méM<«ˆ÷щ‡âÀÄÆþÝl^¼{)!¤<’´‰‰xÎŒñÄÔ2œó”Ý!½Ò5õý»<\'`©å€ÄÄîSžØ®ÙŠaHý}€8²g@C1³Û‚¸d&)Fž%rñ—-ó¿&1‘qßþàlΑ \ZÎàCaZçxµLÓ¢±^Ve@ÁŒWuÊ€‚É5`]Ì´*°)\06‚jPóÛB¯¦AÚÙ½¢ECkðw‹HW'),(1,'VisitorInterest_visitsByVisitCount',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœÔ±\n1àw 8šôÚ»K7qVw©âP<pPp8|w£..B†,å§øhéýU(ÉÜ$”Ð(°mv9¬ê½îëq:v×É|ÓNPªÄïx~ï&©Ï”›~B‚Ò„Ëg^ó³ élYS,ëòüì¸`ŒlÀØ‹°ð‹>X‡ë|°„É€%,c6`Ùë±7`½6à`À¬‘,/dtÐ4SB¶¼òhÍœ1‹çQ$Yÿ\0`=ʤ×\r„l=\ZEȼ4€HïðJ8ÄÀ'),(1,'VisitTime_localTime',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ–»jÄ0EÿE}@wlù1nS\'Ë’~Ñ&[˜R$°…ñ¿ÇòªL—SŒ®%ÑÁÅa²[òuö8½ºF§ù>^žóO~Ë×åv9݃Ë×ï} ïaÊÞ<Ú³å4yXòõ¶„ivYYjYf¯a¯vúð~ÏTÞwVZºÚÚ[Ùd¾nå«—i;Nþë5±ÅJªG¦š]ÍþÈ?‘ŒøS,R ‹ÔH\r‹”\0¤–Eê\0¤Ä\"õ\0RÇ\"\r\0RÏ\"\0ÒÀ\"‰Pø3þ,p!‡.Âá‚)Ââ‚)Âã‚)Â䂽)Âå‚Í)Âæ¢ÝIø\\°<ºÑÓ/atƒåi„Ñ\rž€\r™Êa£?©<üî‚ä'),(1,'VisitTime_serverTime',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41','xœ–=kÃ0Eÿ‹ö‚î³å§µs[Bö 4D\r\ZÈüßkÙ¯Öi¡á’lYz:ñ“JÐKVŸ½º—|Îo»ÇtJÛ´Ž»ÍûÙ)ôò1uîÕŤղ<)|™ê†´?.fJgMl¬¦ÖNŽ‡ye¾‘ò¨‰¥Òt;—+uñu\0®v/ÕZKǬMõ6µìš`Ʋüi^Jù%,,Ž·,ø–EþÊ‚UÜN\"ÿOÒýâío9¼Áø9Ç2^çðöÊüm¤Š€.RM@.R U\\¤†€Ts‘ZRà\"u¤†‹ÔZ.îøb¬˜:2ÓÚ_1õd&†ÀA68(\n\'Û ‰ƒì\'04²¡À9ÈŽCå`[Š!s°5ÅÐ9Èž†Ï…ì)a]ÈÿšÂ0ºÿ6…at!ýåâPÛ**'),(3,'Referers_keywordByCampaign',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(3,'Referers_keywordBySearchEngine',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœ]Ž±Â0D¿ïHuB+z^™!¦Ê…JDDÊP¤Uþ&MûäÓóÙ\nƒÙ¡’¸]Ýä>ÝI¿z×ÞÝ-LÆ<.ž$\n»â\n®’]ƒ¼öƒ\'Ñ€úaGâÀ¥LQ[ô ¯¬µ¤‡fcsf\n7Ûþ[5y5F‡cqÚÕIƒbù\'ØšŒíYÎQ¬A'),(3,'Referers_keywordBySearchEngine_132',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœ-ŒË\nÂ@Eÿ%{¡ÓZ7[×*⾤uÀà€â(]óïNê,rO8$WÐ\")\Z>ÁíAgõ1ä#Wƒ.Ï™àb šˆÝÿ\\°3Ûƒ‚Œ>Ç\"èõ}Ow‰žXáê´•]åšo{¶Å¦úíÂl!h²½9®œ-?22e'),(3,'Referers_searchEngineByKeyword',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœ]ŽAÂ0…ÿKîÂÚn²½\\=«ˆ÷‘Í‚Å‚b•Fÿ»k×]<$<¾¼D 1;T|‚ê@g7¹G\\eð¶¿<\'‚–F#±À¬¸@UÉn@^ë‰ZÐëûï,±ƒ*¥‹š¢5ß²6œ‚ö›SS¼ÞUWcth‹ÓN\ZËG±À¦ÎØNñ‘ã7ÎBB'),(3,'Referers_searchEngineByKeyword_134',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœ-Œ±‚@D¿ÅíM8ÄÙÖZ ±±\"’¸ñ’+0¡¸Ü¿Ëâ;o2™A‰¨(øwuºêg¸ÊW2úyèÃJpˆË&4ª]ÐZZƒ¼Œ³\'^Ѐžòá@¬pùÊÌ*óį5ÛŠ¢Éùyg2ˆÉ^nœ6™’Â1)'),(3,'Referers_type',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœ]N1Â0ü‹w¤:¥¨½¬Ì€{åB‹H u¨òwâ4Y:œ}>Ý,pX¿‚ÐM}gùÉC¦0÷ÏB`¬ß4èI^Ðnv7&w ÓÈ+\\TÞ–}ô¯¼;oiÅ©zs•uºZλ¨ËÑ}Q†M±CÞˆf¾dËüQ=l'),(3,'Referers_urlByWebsite',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Actions_actions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ’ËNÃ0EÅx‹F~¤Œ—°¬\0µ°®œÄJ¦ jR*Tõß±7‹–M#Ù\ZÏÜñÄGWÂŽ\Zˆx>üªz³z’|“i©V‹ú0œ–ûíVî¾0P86fÃx×/r›.eªJ,\Z˜~\\«lSï[,40³¨]}À…mÕÀ‰ÈD”Çäçg5œz1gÂÝîdö:΃M¼”‘s@ý\0Ö»àd7 Ž&²AI2\'—¾‰8$A\r\n¤«l§rmúQ«ÛRÝ]†Bg‹!óO¦Â£øa=AÎHw˜âL±©LXWd]‘¸¶3r:ëû`ÏŽ»+\Z²âFƒæu½ÑUd‹ÖõV}ÈB¡{YH]=DQô¯›<Âølç*Æ#ƒ|€1¹ƒß\0F²ˆ§†ÅReu•#ÇàS«\Z¡f]ïË¥\níT¡›Vc!Ù ÷Åü2›„¦bWMÅBSu äO#jƒo¬Ÿ6:'),(5,'Actions_actions_1097',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ]NÍ‚0~³»ËºÑöêY‰z\'…]M@BáÝÝPqáÐíûë·1j,*: IP¤¶··lÇO>s^•ÙñÑÿÙ©«kn^‡Ö¢Äh>ûŒx9FQq^V‚\\$B±J»¦¸rkï)¥ ‹Ú\rø™!ß`Ñ(š\n”ù¨š‚‰è¥klƒ¸V!ù©‰èÀ8$ðûÒ&T“™ŒÞfT88dhO£»×àÁo—XÖ'),(5,'Actions_actions_url',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ“_OÂ0À¿Šé»[¯·!\\c|ñYøNŠ4²¸¹eBøî¶+ŒÒ舑%½Ü¿¶w¿Þ¥´ËˆËg±—l}ÎU«ÞÔ<׳×r}²¦«¢Põ–Ю1‚½3©Ý~EëM‰åj®s&2çÅÙ×Bo˜ÌH˜võ\nZ1æF\"—ÝN ‘ØdÙ]\0!Â(èΓ{+”«‰ê®\n˜[¶mEq¬7ª¨r•õGÌl:Ê\'¹ï¶ý¿}€°àG\0Ѳ-~‡pŽ€@pŒbà€ÔK?ð0kÔ{†#Æ?ÂñŠö(‰kPJBJ˜ú”*U«B·º¾Ÿ.ËU¾¸YdM•«ífgÃr˜xé‚;ã®3ìA‰‰Œ„\näç¨ÇP§8Œz sï\rð\Zo€á½iËZ_œÑñ0áþ¶K>†4ô ]ªàGˆþÊÔÿ¡9íºÎ-mSƒÅp–Ç7’º['),(5,'Actions_actions_url_1130',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ]OÁnà ýîK0n³Í¾î¼Umï•[¡-Q\"BÔMUÿ½@·å`ð{~~ð„]iþ lHmÜÙ}Þ$È^Ž=l‡ó?ÚÍ}/þGÐeŠ‡:)Âû¾4‰^“êäh;ÅQ‚¤êqö§V&[µ¡WìÈÄ‚T98BÍy_W€«$Eàüd`–S\\ðZÈ.Á¯‘ÎÀX—\0þ¾ôR²Í\\ÓXîùc¶Ùç˜øLª\ra¤º¶ßÒÿYOaðv?\Z ¿ó5ÞOš¾ykì'),(5,'Actions_downloads',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœEŒÁ\nÂ0DÿeïJ“hÅÙ«gõ^¶R$˜Ri•\"!ÿî.‚f˜70#ðÈjÐ1ÎñÞìä)iSל†ùOçWßËø&8äI®Ä‚ðÝVÖ®AIÚ.OØ‚ö·Æq„W9Ó/µçb(¨5Yç\\¸(,ï¹|\0ïÏ2†'),(5,'Actions_downloads_1163',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœuNA‚0üËÞµÒ5Ó«g5ê,†@c‘Jˆþn‰ž<ÌìÌ&;³‰Ñ`£OP[ÐÙæ‘Øós[d—fø¹k_×ܾ Æ.ÝI3ÔrÏHã6YÎKºƒ” áØW‚K6OaÙ_¿#m ’ˆ¯Pv³›ž\"ñÒ¦@};§ª=¨òÞA¿]7mù¯%$(}ÔS˜«$ŠañK‡'),(5,'Actions_outlink',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœµŽË‚@Eÿ¥{É”ÔvËZº\'E‰™0ˆá!1„w†„¸aë¢7½·!M£!ÅGÒ ÁɦÌRéä*¹-²s=üÜ¥¯*i>@HcënÀ²ÜE> ¬ä…všà^¼ƒ—\ZÔÍØPè\n}…‹ÑNâHñäBŠF×ùqŸð4Çÿ ê¾³æY¶«p¸À¡ÚÂmg¸\rò§/âÎdÎ'),(5,'Actions_outlink_1196',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœEN»Â@û—ìôq×28+3 `¯R¨àD_º¾„ªþ;wƒ;‘fƒˆOÐ{ÐÙL椗›äe‘]šéï®CU‰ýbÌ#ºô–¤~›‚JÉ‹’¸C\n»±&6P±‡úí(M\"/×/ždëÖ Á®Ê•¼ú¾E>Š1hýAcŸ[±Ëh>òâæ.öâ?l'),(5,'Actions_outlink_1197',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ]MA‚0üËÞµ@ŘéÕ³\ZõNC¤¡XSJˆ!üÝŒ&vvf³3ÃÈ0j$ê¹ô ›bÏž¯\\šª8Ûá§.}Û²{RŒ]\0º‘bÈÅÏÈã5.+C*|l@Âúºr…í½Ñ†”F&ó%2B²‹8k5Eà¥F‚z7ÇÉ@kïŸâ×»ÿ7³T5…½J#yåóGä'),(5,'Actions_sitesearch',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'CustomVariables_valueByName',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'DevicesDetection_brands',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(5,'DevicesDetection_browsers',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-Œ½Â@ƒß%;Rs¥?8+ê±W)t8qC+u8Ý»“@‡Ï¶,\'Š€QÉ|ÝâßãYW}è”æñþÙŒ¼˜Ð“DQÿçŠÞÛ”tšÉbhH\"ÂNmôÆQ^è̃ÛÀfG£Û§Ì¿¢¸(*äâç)æöðYœ0j'),(5,'DevicesDetection_browserVersions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹±Â0CÿåvP/¡iñ¨# Ä^]¡CD$†\"uˆòï\\ ó-ËV8äˆF.à#è\Z×ø\ZOúÑ»Nioï•ÀÈ‹ =Hþ?WôµmAI§9‘, a¿$nýq\':óÖààØ,ÔhtÛ”ùW”*Š¹ÔûYŠùŽkø1@'),(5,'DevicesDetection_models',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(5,'DevicesDetection_os',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹½Â@ƒß%;Rs¥?8+3T ¶*…\'Nb(R‡Ó½; tølËq9¢’3ø\0\Zâ\Z_ãQ?zÕ)Íãå½y1¡‰¢þϽ·\r(é4\'’Å.t»$a£6zc/OtæÁm`³Ö£ÑmSæ_Q\\rñ÷“ó{øš0Þ'),(5,'DevicesDetection_osVersions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹±\nÂ@Dÿe{!{1—8ÛZë!‚éÂFS¤ˆâÈ¿»§)ÞÌ0Ì(rD%Wð â\ZßÃY?z×1MÃm^ Œ¼˜Ð“DQÿ犮´\r(é8%’ôèƒô$ÂíÔFgå…Ö¼1Ø;6ó%\Zí>eþ[E…¼•ûE6ó—ð5–1Ä'),(5,'DevicesDetection_types',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹;Â@ƒÿKv¤æJ8+3Eˆ½JÉ“@êpºÿÞ:|¶eÙŠ€QÉ\0¾€îq‹¯ñª_}ê”ÖññÞŒü1¡™DQÿçŠÞÛ”tZ‰—á 6zã,:óÆà6°YëÑèŽ)ó¯(.Š\n¹øý&ÅüÄvƒ|/T'),(5,'Goals_ItemsCategory',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goals_ItemsCategory_Cart',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goals_ItemsName',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goals_ItemsName_Cart',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goals_ItemsSku',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goals_ItemsSku_Cart',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goal_-1_days_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goal_-1_visits_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goal_0_days_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goal_0_visits_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Goal_1_days_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(5,'Goal_1_visits_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊKx–ôL‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßñÊþs›¦zºLPîò„¥q_–yɯÆ$³ŽgI¡lËk¹1Á<úÌýÁ¼\r0(°`ƒEŒ\n,Ú` “K6XƬÀ²\rÖa§À:¬Ç^õXd42h’)¡×ìY´ˆdŸ19gQ$Y~€Ô–Se\" 9ZùµDú„7Žð¤R'),(5,'Goal_2_days_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(5,'Goal_2_visits_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊK\Zx(¤©L‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßöÊþSMS=]&(w¹B‚Ò¸/K¿ƒòjLÒëx–ʶ¼–Š æÑÿ`ôó6XÀ xY°Á\"Fm°„I%,cV`Ùë°S`\rÖc¯Àz,2Hš 4É”Ðkf„,¶ˆdŸ19g±H²ü\0Y[NZ,ÉÑʯ Ò\'¼Žƒ¤R'),(5,'Goal_days_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ=1àÿp4͵w¦›8«ˆ»Tq(8œàpøߊ›%CKHýàBIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“Np†R…¿Û«Äw7 Œõt¡Lº”&ƒŽXžMH÷™µâ²)ÏOÇ\"¤þCÑŠ\rˆ} F6 Îê°3 ä%L”} ŒÙ€z¨ÇÞ€¨¬GZ:HZSBEé 5fÓòˆ¬B\"š˜GHôz‰‘³õbä‘z4ÎiW†ô.^.ºù'),(5,'Goal_visits_until_conv',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ=Â@àÿp\\î«mngq/Wq(*8ÿ»©â&dÉpÇKîàYÂ[™\"/#»r`êŽãs¼õ»ú¨ç:L×þt/³\\pR9|¿Wöë41Lu¸NPfyB‚2r+‡Êk½*;^$…²/¯ÏÄòèÈÛ@Ãrÿ¡`EŒ\nm „I’\r”1+P¶\Zl¨±Zl¨5€\"C‡¤mCg I¦„^Û²hÉ>cršeQY¶\\ªÈ©˜EIFŽ6~«`Hkx¥‘šî'),(5,'Provider_hostnameExt',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(5,'Referers_keywordByCampaign',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(5,'Referers_keywordBySearchEngine',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ]Ž½\nÂ@„ŸÅí…ìåo¶µV«°Ñ€‡+\"¤÷îÞ]ÎÆbfa˜oX…ÁêPÉlA·¸wÔÞt˜Æþêc£ÑƒDQouW)nA“ãD2£ÝõåýŽÄÁDqT]n#Ï|[I¸CWrÎ[iÔüÖù5\rÁáP[Æx«†dŠøP(”±Mö,\' _Ö&Ao'),(5,'Referers_keywordBySearchEngine_1294',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹MÂ0DÿËÞ…¦µ~Ì^=«ˆ÷²ŠQzùïfkóÞ2ìZ$EÃ\'¸=謳>†ƒ|ä*cðÃå9R, ‰XÐýß;k{PÑâX\nz}ßÓ]¢\'V´%®¤«^ómq϶Wlj¿v8\rR¶í‘sñÊÙña£2–'),(5,'Referers_searchEngineByKeyword',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ]ŽÁ\nÂ0DÿeïB7µÚÎ^=«ˆ÷²ƒ‹Qz(ùw“4^<Ì,3U,…œÀ\rèlgûhúÖ«vãÐ^ž3±¸`Ô“(ʵ®à\"ÆhÔnIjÐôyõwu‰… â 2ßÜÒ$,v9çD‹XóãóßÔ¤©÷uNšãµê£)ÂK>¯J³Oƒ\rËQü¾B¨'),(5,'Referers_searchEngineByKeyword_1327',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹±\nÂ@D¿Åí…lb¢Î¶ÖFÄÆ*l4àâÁR÷﹋WÌ{Ë°£¨•ôà3èf‹}‡‹þô¡£›†»_Œ0\'ЋDÑüߧܶ §ãäHft §~¼ß‘êNiŠòÞÜJ^ºÒ‹yƒÄE…óö*1yÏùXÁ1Z'),(5,'Referers_type',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ?Â0Å¿Kv¡—ô}YUĽ\\µC0à`¡CÉw7‰×Á\nº8Ü]x¼÷Èa0;ö\0j¡Žnr·nÇ#Ÿ¹÷CwºO\n„ù—º(Ë‹AE’+(Ïýà•uÐ2ÇÈ-í5ßʦ”C-:åŠÔ¥—RZEuŽ†à°¥•2zYCZŒøRû쥘I#$PI`Š7úSêšRÿÀÙPz<W8x†'),(5,'Referers_urlByWebsite',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœMNË\nÂ@ü—Ü•fûÐM®žUÄ{IÛW\nUè¡ì¿›íVð0 ™ÌL\"dhñTð…Ð\\ýìŸíI>r—.¸ö6Î@HË[ôÀBe–a‘èš Hç°JT3¹‡›Ü´ïÇ°\'£@E©8(*Ö^\'¾1iÕpÊÓq\rMéø;ƒn\\ÓªÇèé¸Q6S:dqÌvý-n¾ÒfÇùÌñÀDß'),(5,'Referers_urlByWebsite_1392',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ%MM‚0ý+dw v1^<«1ÞIÁ*‹[X¶)ÂwƒÃ{}mŠPÀ$!Wà`79ÊOsFl5÷adÀarXÇB¹®#ìcZSØ’b\"è`zï\rd™¥Y²i7èÌà›ÒÞë“A‹úøCõ¥Qú>qƒ¦ÄìÈ1!¡àeÀ.`+žË¬b^±ªE|½ÖÑó…Ä !‡iŽç1‡¹áQü°mDÞ'),(5,'UserCountry_city',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ}N»Â@û—ìHÍõuVf@ˆ½J¡Ã‰JÔ¡º\'é••ÁgëbÇQ¬…\\Á-è—øîÎ:ëCûqèÀX\'{èI¢(³]Á…× Qûa$™P€H\"ÂŽÒp2TòÂѸ6pبqéðEÛü[Íû¨Ü9Xº\n’\\ý±°¤”뼺õÐ6ÎÞ”ìâä±Ëf>°‹/æ%HŸ'),(5,'UserCountry_country',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ}NÁ\nÂ0ý—Ü…¥Ý¦K®žUÄûÈtB± l£ÿnÒΫ‡×÷hÞË‹£5PÅgÂŽà–ðêò‘›qì¯ïiõ;°/v!¬ì»!ˆ2ŒxÖM𜀹\r^qPÔü ½r£ÀÖ¡RkÒ`«ò ø[ŽÛÈoì4];N¦þXS*uVÝY(‹7•½9Yì”Í;4ñ®,Iy'),(5,'UserCountry_region',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ}N»Â@û—ìHÍõuVf@ˆ½J¡Ã‰JÔ¡º\'é••ÁgëbÇQ¬…\\Á-è—øîÎ:ëCûqèÀX\'{èI¢(³]Á…× Qûa$™P€H\"ÂŽÒp2TòÂѸ6pبqéðEÛü[Íû¨Ü9Xº\n’\\ý±°¤”뼺õÐ6ÎÞ”ìâä±Ëf>°‹/æ%HŸ'),(5,'UserSettings_browser',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹±Â0CÿåvP/¡iñ¨# Ä^]¡CD$†\"uˆòï\\ ó-ËV8äˆF.à#è\Z×ø\ZOúÑ»Nioï•ÀÈ‹ =Hþ?WôµmAI§9‘, a¿$nýq\':óÖààØ,ÔhtÛ”ùW”*Š¹ÔûYŠùŽkø1@'),(5,'UserSettings_browserType',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹½\nÃ0ƒßåöBÎi~ª[;·¥t—ÔC†2¿{Ïi†OBR8¤€Jîàè¶0WýêKÇè‡ç²i5¡‰DQÿ犾´\r(êè#Éž?~š’\0wP½q–7:óÆàÖ±Y[¢ÑSæ½ÈER.÷›dó—ð*«1ê'),(5,'UserSettings_configuration',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹½\nÂ@„ße{!{ù¹s¶•”\ZDÐ.l4Åa …B„#ïøff‡Y…CŠ(äÞƒº¸Ägз^t˜Æþ</Fz™ÐDQþçŠÛ\Z4é0N$¶°ãzë¤m…W}|H\"ÜFi£’¼ympãجÉÑðÛ”ùW¬YÒšß²šï8‡/\0¨3÷'),(5,'UserSettings_language',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-ŒÍ\nÂ@„ß%w¡ÙÚ\'WÏ*⽤ZaqAh…–}wíᛆI9¢’3ø\0ºÄ5¾†£~ô¦cš†ë{%0òbBwEýŸ+zoPÒqJ$‹=¢çL6j£7öò@gÞÜ6k=\ZÝ6eþÅEQ!??I1ß±‡/tt0¶'),(5,'UserSettings_os',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹½Â@ƒß%;Rs¥?8+3T ¶*…\'Nb(R‡Ó½; tølËq9¢’3ø\0\Zâ\Z_ãQ?zÕ)Íãå½y1¡‰¢þϽ·\r(é4\'’Å.t»$a£6zc/OtæÁm`³Ö£ÑmSæ_Q\\rñ÷“ó{øš0Þ'),(5,'UserSettings_plugin',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÓÁj1àw™{a“U«“«ç¶Hï2îŽ:nl4ÙºñÝ;êÅ‹0—0Lþð1!!4Ï‚•ûD3Cø’Aºåœzú¦•çå\"€šHº@Ž°¾Ç íµ;Fð´b.éÚ58Aënù\nÜEÐh¶Â³Vµûp—[çuL뵧´}àìÎàF;:Q†VЦDnú3®sT@ÔãÇ_iº^öœAŽ¦BˆLþàés朔@- ?mÒž[¡ö½ÌkÝ0Å”ÁMKL©‘$þÄÑËfÛg¨³êD!t¿äÍ\\‹Z[>'),(5,'UserSettings_resolution',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹Á\nÂ0DÿeïB6m“8¹zVïe«=Z¨òïn´‡733‹’`â|]Ó–^ãIV¹Ë”çñöÞŒ²¨Ðƒ¢ ûÏ¡µ(Ë4gŠ‹ÄÆöïÅ»Ó)Aéã^}PØYVs-*~Ÿ2ÿŠÚD`Pj»ŸcU?p_gd1È'),(5,'UserSettings_wideScreen',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ-‹±Â0DÿÅ;RÒ´\\Vf@ˆ½r¡CD R‹Ô!Ê¿cC‡ww>9¢\ngðt‰k|öGùÈM†4ö×i%0ò¢Bw\n‚ú?tÖ6 $Ø(,ð ÷4¿D·Q+²´êÂÞ±š·¨´Û”ùWA…\\ìýŠúŽ-|qî2k'),(5,'VisitorInterest_daysSinceLastVisit',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ±j1àwtXÖÙ—È[)tKK)]§x0=Rèn8òîUÒ¥KAP-F‰#óW¡,[—Pž„öÏ}íÓC=××zœÛôò¹‚l‹ð¥\nÿ´W‰×Û$0×c›¡hÇ(ðØNí«ÎÓ¡o}éçJ—XnãåÒ…t4Ȧ—C¹Ünþo³@À`À¢FH¿°ðÆ>XÄhÀŒ‘\rXòÁXöÁ&6ú`³Ûù`#Žlï€\r;$ËÒÈ#R´¦„,žGŒhÍ„Ùäy$IÖ¢QM GšhDS$älZ¡G¤è9§»xo\0‘®Å7¦ëë\''),(5,'VisitorInterest_pageGap',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÒ=Â0àÿràxËG?.›8«ˆ{I¥C°àP¡Cé7‹‹pÃ-á%yááÈ%&â%³‰¦–ášçüìNéîöšKc*< &vßzb»Ý†1õÃq*/@H3Û¸÷K^3Sé\Z^Jrñ×ýF³h0ó³:˜C\'ÀœæÑ0¯ƒ,è`Ö‚©0ÏÐ Áhµ‚V2•å—|[£Ä´’éZÎÒÁÒ>JC>'),(5,'VisitorInterest_timeGap',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÓÁ\nÂ0\0Ð x,$m×méM<«ˆ÷щ‡âÀÄÆþÝl^¼{)!¤<’´‰‰xÎŒñÄÔ2œó”Ý!½Ò5õý»<\'`©å€ÄÄîSžØ®ÙŠaHý}€8²g@C1³Û‚¸d&)Fž%rñ—-ó¿&1‘qßþàlΑ \ZÎàCaZçxµLÓ¢±^Ve@ÁŒWuÊ€‚É5`]Ì´*°)\06‚jPóÛB¯¦AÚÙ½¢ECkðw‹HW'),(5,'VisitorInterest_visitsByVisitCount',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœÔ±\n1àw 8šôÚ»K7qVw©âP<pPp8|w£..B†,å§øhéýU(ÉÜ$”Ð(°mv9¬ê½îëq:v×É|ÓNPªÄïx~ï&©Ï”›~B‚Ò„Ëg^ó³ élYS,ëòüì¸`ŒlÀØ‹°ð‹>X‡ë|°„É€%,c6`Ùë±7`½6à`À¬‘,/dtÐ4SB¶¼òhÍœ1‹çQ$Yÿ\0`=ʤ×\r„l=\ZEȼ4€HïðJ8ÄÀ'),(5,'VisitTime_localTime',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ–±jÄ0ÿE}@O¶,{ݦNBHè’+L)rp…ñ¿Gò)]ºL±ûÄ\"£ÁÅ°ÙB´m1??›&s/Ëmù<=æk~Ëçõrzýº9“mߥ¹w7gëî׳u\ZÍù|Yݼ˜Bi¿Õ•\ZKõ󇥒±^‚JõX*µ«Ò1ØkËæmÛëçOó~LþÏåÛ;¾aùëž±åÐ2µ<˜üßLøW0S0˜©˜:˜)L=Ì4\0LfJ\0Ó\03\0S‚™&€i„™DÈ|¢¡“‹V¹—Ó2asÑêásÑòatÑúátÑauÑ\náuá%Ì.Ú¢P{ÀbÂí¶h Üè¥8 ›:íöÕÃ@|'),(5,'VisitTime_serverTime',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44','xœ–=kÃ0Eÿ‹ö‚î³å§µsB÷ 4D\rZÈüß+Y\n¤qii¸ƒlùYz>ñƒŠÓsT럣šM<Å·Ýcø/a?wÛ÷“Qèù#Ì«ñA›²<(l.;5SØ\'ã£é y’F“FŸFëËÙåz\'ùVçs‡t¹´ÉýpiŒ«Ý¥ÛA[ñóu¨¥±”êãàç²=ÑÌyßÓ²”<r“5j[Ãà[ù-VYðGù”á6‰Al¥±Kr¾bëK³&û3SC`™©%0 ™É˜\Z2SG`jÉL=É‘™SGf\Z L=™ w|;VPêŽÀ\njdC1T¶ËA‘9ÛR`èlO!t°M†ÒÁvRÝVƒ®+†ØÁö•0Ì.l_ CíÂþû†Û…ýÿ)·ÛíÈ“/\'.Â'),(32,'Actions_actions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ’MoÂ0†ÿJ–Óv Jâòå·#Ú&ØÎ(´Q‰(íDËЄøïKÓÐnÑ`\"%rì×±òèU8Ä£A&_FH_ÍÁl–OªVoj•ëå¼<ô·Å~»U»/Š•=hB¥BhûrhÒC¤¹ZéœÊ\n\'H×:Ù”ûšJƒÂnÞì.\0Ù´\Z&Sd‡˜ý\\¸ƒîu\'kž|ꥂîˆnäЧæPÈðh#pÆäÉ¥o@\"Ip‹‚˜\"ÙéÔØ~R›:×w—¡ð‰Çâ(ü—¹tã8ýD„@D¤—Ö^Æ´Sal+#ÑE[d®íŒœOºþ\0سc%nÁŠ‡¬ÀjȬ,7¦ÈˆªÉºÜê•ir¯2eŠ‡(Šþu“çÀ\\Áv®B°éå=ŒÑupÓE<¶,:)‹”8ŸFÈ€TërŸ§d¥ÉNg¦ªµ5QyŸÏ.³™²ÀT⪩Dhª6áüÉ`À›àè6-'),(32,'Actions_actions_2200',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ]NÍ‚0~³»ËºÑöêY‰z\'…]M@BáÝÝPqáÐíûë·1j,*: IP¤¶··lÇO>s^•ÙñÑÿÙ©«kn^‡Ö¢Äh>ûŒx9FQq^V‚\\$B±J»¦¸rkï)¥ ‹Ú\rø™!ß`Ñ(š\n”ù¨š‚‰è¥klƒ¸V!ù©‰èÀ8$ðûÒ&T“™ŒÞfT88dhO£»×àÁo—XÖ'),(32,'Actions_actions_url',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ“ßOƒ0ÇÿÓw¡×ƒ9®1¾ø¬Æù¾tB„\0˶,ûߥíƺFYŒ#é¥w÷íûôPÓ.\'.Ÿ \'Ä^òuþ9TzS‹\"›¿Vë“7[•¥j¶Œ€vmoØ;“ŠÐ®W”èhL¬P‹¬`²¥~¿0ÿJ³\r“9‰~€Ãµ™òÞ\"—f%„ˆ´AšÀ8ÂÏ¢\0³ŸÜk£ìíت1·€„زëj\nÃl£ÊºÈ‚ªù™–£|’{³ìÿåøõ?–]ù;„s\\à‚c½\0ÄŽüÀ£“!ú31ýŽsi‡’¸¥È§„±Ké¡V*³.kîgËjU¤7iÞÖ…Úþ¡‡p´‡Ðï!€Ä‘n;ãè¢>36)l’Ÿ£ž^@ã8ê‘Ê7Àk¼úoÐÏÛ®j²‹=š\0#î~`a[ñ 4ø a\0m¥‚\'p8@GÆîÍig*מ· y|“['),(32,'Actions_actions_url_2209',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ]OÁnà ýîK0n³Í¾î¼Umï•[¡-Q\"BÔMUÿ½@·å`ð{~~ð„]iþ lHmÜÙ}Þ$È^Ž=l‡ó?ÚÍ}/þGÐeŠ‡:)Âû¾4‰^“êäh;ÅQ‚¤êqö§V&[µ¡WìÈÄ‚T98BÍy_W€«$Eàüd`–S\\ðZÈ.Á¯‘ÎÀX—\0þ¾ôR²Í\\ÓXîùc¶Ùç˜øLª\ra¤º¶ßÒÿYOaðv?\Z ¿ó5ÞOš¾ykì'),(32,'Actions_downloads',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœEŒÍ\nÂ0„ßeïJ³ñwöêYE½— ¦TZ¥HÈ»›EÐÃó\rÌ() ’ü\ntS¸×;}êE›ØÖ§~úÓùÕu:¼ i,FW…ÿîk— ¨MIFlAû›÷Ã$€‹œé|±5K6TTH%YÇì6’Ìœì%\0ïç2ˆ'),(32,'Actions_downloads_2218',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœuNA‚0üËÞµÒ5Ó«g5ê,†@c‘Jˆþn‰ž<ÌìÌ&;³‰Ñ`£OP[ÐÙæ‘Øós[d—fø¹k_×ܾ Æ.ÝI3ÔrÏHã6YÎKºƒ” áØW‚K6OaÙ_¿#m ’ˆ¯Pv³›ž\"ñÒ¦@};§ª=¨òÞA¿]7mù¯%$(}ÔS˜«$ŠañK‡'),(32,'Actions_outlink',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœµŽ»\nÂ@EÿezÃ>\r3µŠÚ‡‰Y²1’‡AÂþ»»Å&Å\\æÞyp5ÎQoNf2u±ç¯\\Úª8·ÓÏ]Ʀáî(qî½À\rˆã=c\ZÒÁrYY ¿¡îÕ;y…§IÛ=€*_2”ŠF{ÉRA.ξ¡RjGn‰ÿA§Úq°æY÷«p2ÂI‘¯ÂåÜFÒÜßödÆ'),(32,'Actions_outlink_2227',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœEN»Â@û—ìôq×28+3 `¯R¨àD_º¾„ªþ;wƒ;‘fƒˆOÐ{ÐÙL椗›äe‘]šéï®CU‰ýbÌ#ºô–¤~›‚JÉ‹’¸C\n»±&6P±‡úí(M\"/×/ždëÖ Á®Ê•¼ú¾E>Š1hýAcŸ[±Ëh>òâæ.öâ?l'),(32,'Actions_outlink_2228',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ]MA‚0üËÞµ@ŘéÕ³\ZõNC¤¡XSJˆ!üÝŒ&vvf³3ÃÈ0j$ê¹ô ›bÏž¯\\šª8Ûá§.}Û²{RŒ]\0º‘bÈÅÏÈã5.+C*|l@Âúºr…í½Ñ†”F&ó%2B²‹8k5Eà¥F‚z7ÇÉ@kïŸâ×»ÿ7³T5…½J#yåóGä'),(32,'Actions_sitesearch',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'CustomVariables_valueByName',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'DevicesDetection_brands',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(32,'DevicesDetection_browsers',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-Œ½Â@ƒß%;Rs¥?8+ê±W)t8qC+u8Ý»“@‡Ï¶,\'Š€QÉ|ÝâßãYW}è”æñþÙŒ¼˜Ð“DQÿçŠÞÛ”tšÉbhH\"ÂNmôÆQ^è̃ÛÀfG£Û§Ì¿¢¸(*äâç)æöðYœ0j'),(32,'DevicesDetection_browserVersions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹±Â0CÿåvP/¡iñ¨# Ä^]¡CD$†\"uˆòï\\ ó-ËV8äˆF.à#è\Z×ø\ZOúÑ»Nioï•ÀÈ‹ =Hþ?WôµmAI§9‘, a¿$nýq\':óÖààØ,ÔhtÛ”ùW”*Š¹ÔûYŠùŽkø1@'),(32,'DevicesDetection_models',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(32,'DevicesDetection_os',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹½Â@ƒß%;Rs¥?8+3T ¶*…\'Nb(R‡Ó½; tølËq9¢’3ø\0\Zâ\Z_ãQ?zÕ)Íãå½y1¡‰¢þϽ·\r(é4\'’Å.t»$a£6zc/OtæÁm`³Ö£ÑmSæ_Q\\rñ÷“ó{øš0Þ'),(32,'DevicesDetection_osVersions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹±\nÂ@Dÿe{!{1—8ÛZë!‚éÂFS¤ˆâÈ¿»§)ÞÌ0Ì(rD%Wð â\ZßÃY?z×1MÃm^ Œ¼˜Ð“DQÿ犮´\r(é8%’ôèƒô$ÂíÔFgå…Ö¼1Ø;6ó%\Zí>eþ[E…¼•ûE6ó—ð5–1Ä'),(32,'DevicesDetection_types',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹;Â@ƒÿKv¤æJ8+3Eˆ½JÉ“@êpºÿÞ:|¶eÙŠ€QÉ\0¾€îq‹¯ñª_}ê”ÖññÞŒü1¡™DQÿçŠÞÛ”tZ‰—á 6zã,:óÆà6°YëÑèŽ)ó¯(.Š\n¹øý&ÅüÄvƒ|/T'),(32,'Goals_ItemsCategory',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goals_ItemsCategory_Cart',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goals_ItemsName',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goals_ItemsName_Cart',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goals_ItemsSku',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goals_ItemsSku_Cart',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goal_-1_days_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goal_-1_visits_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goal_0_days_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goal_0_visits_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Goal_1_days_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(32,'Goal_1_visits_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊKx–ôL‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßñÊþs›¦zºLPîò„¥q_–yɯÆ$³ŽgI¡lËk¹1Á<úÌýÁ¼\r0(°`ƒEŒ\n,Ú` “K6XƬÀ²\rÖa§À:¬Ç^õXd42h’)¡×ìY´ˆdŸ19gQ$Y~€Ô–Se\" 9ZùµDú„7Žð¤R'),(32,'Goal_2_days_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ±\n1àw 8šæÚ;ÓMœUÄ]ª8Np8|w£..B†,%´6å¯BIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“.p†R…¿íUâ{7 Œõt¡Lz”&Cùô”gÒÞ ³V\\6åùÙqÁé°èƒEŒŒ}0F6`ÖagÀ’–0°ìƒe̬÷Ázì\rØà€u’ehKMkJÈÁÀ‘GŠhÍ„ÙäyIÖ¢IM G˜ôú ‘³e‚ä‘(zEÎiWé]¼\0ødÅ'),(32,'Goal_2_visits_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ=1àÿp4ýº»tgq?ª8ÿ»ñ\\\\„YÊK\Zx(¤©L‘çƮ옆}{¶ë¸©z¬§é2nO`âù.œ¡TßöÊþSMS=]&(w¹B‚Ò¸/K¿ƒòjLÒëx–ʶ¼–Š æÑÿ`ôó6XÀ xY°Á\"Fm°„I%,cV`Ùë°S`\rÖc¯Àz,2Hš 4É”Ðkf„,¶ˆdŸ19g±H²ü\0Y[NZ,ÉÑʯ Ò\'¼Žƒ¤R'),(32,'Goal_days_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ=1àÿp4͵w¦›8«ˆ»Tq(8œàpøߊ›%CKHýàBIæ&¡l…–»öh×ãºÞë¡žÆËq{€Ì“Np†R…¿Û«Äw7 Œõt¡Lº”&ƒŽXžMH÷™µâ²)ÏOÇ\"¤þCÑŠ\rˆ} F6 Îê°3 ä%L”} ŒÙ€z¨ÇÞ€¨¬GZ:HZSBEé 5fÓòˆ¬B\"š˜GHôz‰‘³õbä‘z4ÎiW†ô.^.ºù'),(32,'Goal_visits_until_conv',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ=Â@àÿp\\î«mngq/Wq(*8ÿ»©â&dÉpÇKîàYÂ[™\"/#»r`êŽãs¼õ»ú¨ç:L×þt/³\\pR9|¿Wöë41Lu¸NPfyB‚2r+‡Êk½*;^$…²/¯ÏÄòèÈÛ@Ãrÿ¡`EŒ\nm „I’\r”1+P¶\Zl¨±Zl¨5€\"C‡¤mCg I¦„^Û²hÉ>cršeQY¶\\ªÈ©˜EIFŽ6~«`Hkx¥‘šî'),(32,'Provider_hostnameExt',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-Œ½Â@ƒß%;Rs¥?8+3Tˆ½J¡Ã‰“Z©ÃéÞ½ tølËr¢È•ÜÁзø¯ºêS§4ïF`äÅ„^$Šú?WôÞ6 ¤ÓœHT ’ˆpP½q–7:óÆà6°YëÑèŽ)ó¯(.jrñó›ó{Øø‰/Ü'),(32,'Referers_keywordByCampaign',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœK´2´ªÎ´Ò5´ö³®\0\ZÄ'),(32,'Referers_keywordBySearchEngine',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ]Ž½\nÂ@„ŸÅí…ì f¶µŽ\"6Va£)\"¤÷îÞŸÅÌÂ0ß°\nƒÍ¡’3¸]ÜêÞýI?zÓa\Zûë¼ÛŒ$\n›ë\n®b\\ƒ&ƉdAºëkžw$&ˆƒl¹y¦[KÄš’sÚŠ£æ·Î¨I¨÷Ç’´eŒsÕGS„‡|¦Œ©mö,ø/ÕõAk'),(32,'Referers_keywordBySearchEngine_2253',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹MÂ0DÿËÞ…¦µ~Ì^=«ˆ÷²ŠQzùïfkóÞ2ìZ$EÃ\'¸=謳>†ƒ|ä*cðÃå9R, ‰XÐýß;k{PÑâX\nz}ßÓ]¢\'V´%®¤«^ómq϶Wlj¿v8\rR¶í‘sñÊÙña£2–'),(32,'Referers_searchEngineByKeyword',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ]ŽÁ\nÂ@Dÿ%w¡Imi\'WÏ*⽤Zp± X¥‡²ÿîîv½x˜ 3‹C¡p:ºÙÝ»½ílý8t§ÇL`,S0º\Zʵnà\"Æh´~I\'4 ççu¹Ù4:H•ùnõšn¥àPçœ-båÇç¿©¤©÷MNÚãµê£ÂK~]‰Ô’Ö½ú/¾xB§'),(32,'Referers_searchEngineByKeyword_2262',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹±\nÂ@D¿Åí…lb¢Î¶ÖFÄÆ*l4àâÁR÷﹋WÌ{Ë°£¨•ôà3èf‹}‡‹þô¡£›†»_Œ0\'ЋDÑüߧܶ §ãäHft §~¼ß‘êNiŠòÞÜJ^ºÒ‹yƒÄE…óö*1yÏùXÁ1Z'),(32,'Referers_type',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ?Â0Å¿Kv¡—ô}YUĽ\\µC0à`¡CÉw7‰×Á\nº8Ü]x¼÷Èa0;ö\0j¡Žnr·nÇ#Ÿ¹÷CwºO\n„ù—º(Ë‹AE’+(Ïýà•uÐ2ÇÈ-í5ßʦ”C-:åŠÔ¥—RZEuŽ†à°¥•2zYCZŒøRû쥘I#$PI`Š7úSêšRÿÀÙPz<W8x†'),(32,'Referers_urlByWebsite',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœMNË\nÂ@ü—Ü•fû²ÉÕ³Šx/i»Âb¥°\n=”ýw³»\n&!“™I„mŽ\n>v·ºG”·Üd˜m]V ¤í¥F`¡2Ë…°ˆtM0Ë`g`•¨ÆÛ»õÖïÇå ìÈ(PQ*ZEÅSêuäW\rÇ<ShLÇßüscJ›¨2‚£Ã—ê2¥C‡l×ßBöÓvɱC>qø\0ûDä'),(32,'Referers_urlByWebsite_2279',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ%MM‚0ý+dw v1^<«1ÞIÁ*‹[X¶)ÂwƒÃ{}mŠPÀ$!Wà`79ÊOsFl5÷adÀarXÇB¹®#ìcZSØ’b\"è`zï\rd™¥Y²i7èÌà›ÒÞë“A‹úøCõ¥Qú>qƒ¦ÄìÈ1!¡àeÀ.`+žË¬b^±ªE|½ÖÑó…Ä !‡iŽç1‡¹áQü°mDÞ'),(32,'UserCountry_city',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ}N»Â@û—ìHÍõuVf@ˆ½J¡Ã‰JÔ¡º\'é••ÁgëbÇQ¬…\\Á-è—øîÎ:ëCûqèÀX\'{èI¢(³]Á…× Qûa$™P€H\"ÂŽÒp2TòÂѸ6pبqéðEÛü[Íû¨Ü9Xº\n’\\ý±°¤”뼺õÐ6ÎÞ”ìâä±Ëf>°‹/æ%HŸ'),(32,'UserCountry_country',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ}NÁ\nÂ0ý—Ü…¥Ý¦K®žUÄûÈtB± l£ÿnÒΫ‡×÷hÞË‹£5PÅgÂŽà–ðêò‘›qì¯ïiõ;°/v!¬ì»!ˆ2ŒxÖM𜀹\r^qPÔü ½r£ÀÖ¡RkÒ`«ò ø[ŽÛÈoì4];N¦þXS*uVÝY(‹7•½9Yì”Í;4ñ®,Iy'),(32,'UserCountry_region',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ}N»Â@û—ìHÍõuVf@ˆ½J¡Ã‰JÔ¡º\'é••ÁgëbÇQ¬…\\Á-è—øîÎ:ëCûqèÀX\'{èI¢(³]Á…× Qûa$™P€H\"ÂŽÒp2TòÂѸ6pبqéðEÛü[Íû¨Ü9Xº\n’\\ý±°¤”뼺õÐ6ÎÞ”ìâä±Ëf>°‹/æ%HŸ'),(32,'UserSettings_browser',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹±Â0CÿåvP/¡iñ¨# Ä^]¡CD$†\"uˆòï\\ ó-ËV8äˆF.à#è\Z×ø\ZOúÑ»Nioï•ÀÈ‹ =Hþ?WôµmAI§9‘, a¿$nýq\':óÖààØ,ÔhtÛ”ùW”*Š¹ÔûYŠùŽkø1@'),(32,'UserSettings_browserType',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹½\nÃ0ƒßåöBÎi~ª[;·¥t—ÔC†2¿{Ïi†OBR8¤€Jîàè¶0WýêKÇè‡ç²i5¡‰DQÿ犾´\r(êè#Éž?~š’\0wP½q–7:óÆàÖ±Y[¢ÑSæ½ÈER.÷›dó—ð*«1ê'),(32,'UserSettings_configuration',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹½\nÂ@„ße{!{ù¹s¶•”\ZDÐ.l4Åa …B„#ïøff‡Y…CŠ(äÞƒº¸Ägз^t˜Æþ</Fz™ÐDQþçŠÛ\Z4é0N$¶°ãzë¤m…W}|H\"ÜFi£’¼ympãجÉÑðÛ”ùW¬YÒšß²šï8‡/\0¨3÷'),(32,'UserSettings_language',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-ŒÍ\nÂ@„ß%w¡ÙÚ\'WÏ*⽤ZaqAh…–}wíᛆI9¢’3ø\0ºÄ5¾†£~ô¦cš†ë{%0òbBwEýŸ+zoPÒqJ$‹=¢çL6j£7öò@gÞÜ6k=\ZÝ6eþÅEQ!??I1ß±‡/tt0¶'),(32,'UserSettings_os',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹½Â@ƒß%;Rs¥?8+3T ¶*…\'Nb(R‡Ó½; tølËq9¢’3ø\0\Zâ\Z_ãQ?zÕ)Íãå½y1¡‰¢þϽ·\r(é4\'’Å.t»$a£6zc/OtæÁm`³Ö£ÑmSæ_Q\\rñ÷“ó{øš0Þ'),(32,'UserSettings_plugin',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÓÁj1àw™{a“U«“«ç¶Hï2îŽ:nl4ÙºñÝ;êÅ‹0—0Lþð1!!4Ï‚•ûD3Cø’Aºåœzú¦•çå\"€šHº@Ž°¾Ç íµ;Fð´b.éÚ58Aënù\nÜEÐh¶Â³Vµûp—[çuL뵧´}àìÎàF;:Q†VЦDnú3®sT@ÔãÇ_iº^öœAŽ¦BˆLþàés朔@- ?mÒž[¡ö½ÌkÝ0Å”ÁMKL©‘$þÄÑËfÛg¨³êD!t¿äÍ\\‹Z[>'),(32,'UserSettings_resolution',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹Á\nÂ0DÿeïB6m“8¹zVïe«=Z¨òïn´‡733‹’`â|]Ó–^ãIV¹Ë”çñöÞŒ²¨Ðƒ¢ ûÏ¡µ(Ë4gŠ‹ÄÆöïÅ»Ó)Aéã^}PØYVs-*~Ÿ2ÿŠÚD`Pj»ŸcU?p_gd1È'),(32,'UserSettings_wideScreen',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ-‹±Â0DÿÅ;RÒ´\\Vf@ˆ½r¡CD R‹Ô!Ê¿cC‡ww>9¢\ngðt‰k|öGùÈM†4ö×i%0ò¢Bw\n‚ú?tÖ6 $Ø(,ð ÷4¿D·Q+²´êÂÞ±š·¨´Û”ùWA…\\ìýŠúŽ-|qî2k'),(32,'VisitorInterest_daysSinceLastVisit',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ±j1àwtXÖÙ—È[)tKK)]§x0=Rèn8òîUÒ¥KAP-F‰#óW¡,[—Pž„öÏ}íÓC=××zœÛôò¹‚l‹ð¥\nÿ´W‰×Û$0×c›¡hÇ(ðØNí«ÎÓ¡o}éçJ—XnãåÒ…t4Ȧ—C¹Ünþo³@À`À¢FH¿°ðÆ>XÄhÀŒ‘\rXòÁXöÁ&6ú`³Ûù`#Žlï€\r;$ËÒÈ#R´¦„,žGŒhÍ„Ùäy$IÖ¢QM GšhDS$älZ¡G¤è9§»xo\0‘®Å7¦ëë\''),(32,'VisitorInterest_pageGap',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÒ=Â0àÿràxËG?.›8«ˆ{I¥C°àP¡Cé7‹‹pÃ-á%yááÈ%&â%³‰¦–ášçüìNéîöšKc*< &vßzb»Ý†1õÃq*/@H3Û¸÷K^3Sé\Z^Jrñ×ýF³h0ó³:˜C\'ÀœæÑ0¯ƒ,è`Ö‚©0ÏÐ Áhµ‚V2•å—|[£Ä´’éZÎÒÁÒ>JC>'),(32,'VisitorInterest_timeGap',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÓÁ\nÂ0\0Ð x,$m×méM<«ˆ÷щ‡âÀÄÆþÝl^¼{)!¤<’´‰‰xÎŒñÄÔ2œó”Ý!½Ò5õý»<\'`©å€ÄÄîSžØ®ÙŠaHý}€8²g@C1³Û‚¸d&)Fž%rñ—-ó¿&1‘qßþàlΑ \ZÎàCaZçxµLÓ¢±^Ve@ÁŒWuÊ€‚É5`]Ì´*°)\06‚jPóÛB¯¦AÚÙ½¢ECkðw‹HW'),(32,'VisitorInterest_visitsByVisitCount',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœÔ±\n1àw 8šôÚ»K7qVw©âP<pPp8|w£..B†,å§øhéýU(ÉÜ$”Ð(°mv9¬ê½îëq:v×É|ÓNPªÄïx~ï&©Ï”›~B‚Ò„Ëg^ó³ élYS,ëòüì¸`ŒlÀØ‹°ð‹>X‡ë|°„É€%,c6`Ùë±7`½6à`À¬‘,/dtÐ4SB¶¼òhÍœ1‹çQ$Yÿ\0`=ʤ×\r„l=\ZEȼ4€HïðJ8ÄÀ'),(32,'VisitTime_localTime',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ–±jÄ0ÿE}@O¶,{ݦNBHè’+L)rp…ñ¿Gò)]ºL±ûÄ\"£ÁÅ°ÙB´m1??›&s/Ëmù<=æk~Ëçõrzýº9“mߥ¹w7gëî׳u\ZÍù|Yݼ˜Bi¿Õ•\ZKõ󇥒±^‚JõX*µ«Ò1ØkËæmÛëçOó~LþÏåÛ;¾aùëž±åÐ2µ<˜üßLøW0S0˜©˜:˜)L=Ì4\0LfJ\0Ó\03\0S‚™&€i„™DÈ|¢¡“‹V¹—Ó2asÑêásÑòatÑúátÑauÑ\náuá%Ì.Ú¢P{ÀbÂí¶h Üè¥8 ›:íöÕÃ@|'),(32,'VisitTime_serverTime',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46','xœ–=kÃ0Eÿ‹ö‚î³å§µsB÷ 4D\rZÈüß+Y\n¤qii¸ƒlùYz>ñƒŠÓsT럣šM<Å·Ýcø/a?wÛ÷“Qèù#Ì«ñA›²<(l.;5SØ\'ã£é y’F“FŸFëËÙåz\'ùVçs‡t¹´ÉýpiŒ«Ý¥ÛA[ñóu¨¥±”êãàç²=ÑÌyßÓ²”<r“5j[Ãà[ù-VYðGù”á6‰Al¥±Kr¾bëK³&û3SC`™©%0 ™É˜\Z2SG`jÉL=É‘™SGf\Z L=™ w|;VPêŽÀ\njdC1T¶ËA‘9ÛR`èlO!t°M†ÒÁvRÝVƒ®+†ØÁö•0Ì.l_ CíÂþû†Û…ýÿ)·ÛíÈ“/\'.Â'); +/*!40000 ALTER TABLE `archive_blob_2012_03` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_archive_blob_2012_04` +-- Table structure for table `archive_blob_2012_04` -- -DROP TABLE IF EXISTS `piwiktests_archive_blob_2012_04`; +DROP TABLE IF EXISTS `archive_blob_2012_04`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_archive_blob_2012_04` ( +CREATE TABLE `archive_blob_2012_04` ( `idarchive` int(10) unsigned NOT NULL, `name` varchar(255) NOT NULL, `idsite` int(10) unsigned DEFAULT NULL, @@ -96,22 +96,22 @@ CREATE TABLE `piwiktests_archive_blob_2012_04` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_archive_blob_2012_04` +-- Dumping data for table `archive_blob_2012_04` -- -LOCK TABLES `piwiktests_archive_blob_2012_04` WRITE; -/*!40000 ALTER TABLE `piwiktests_archive_blob_2012_04` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_archive_blob_2012_04` ENABLE KEYS */; +LOCK TABLES `archive_blob_2012_04` WRITE; +/*!40000 ALTER TABLE `archive_blob_2012_04` DISABLE KEYS */; +/*!40000 ALTER TABLE `archive_blob_2012_04` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_archive_numeric_2012_03` +-- Table structure for table `archive_numeric_2012_03` -- -DROP TABLE IF EXISTS `piwiktests_archive_numeric_2012_03`; +DROP TABLE IF EXISTS `archive_numeric_2012_03`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_archive_numeric_2012_03` ( +CREATE TABLE `archive_numeric_2012_03` ( `idarchive` int(10) unsigned NOT NULL, `name` varchar(255) NOT NULL, `idsite` int(10) unsigned DEFAULT NULL, @@ -127,23 +127,23 @@ CREATE TABLE `piwiktests_archive_numeric_2012_03` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_archive_numeric_2012_03` +-- Dumping data for table `archive_numeric_2012_03` -- -LOCK TABLES `piwiktests_archive_numeric_2012_03` WRITE; -/*!40000 ALTER TABLE `piwiktests_archive_numeric_2012_03` DISABLE KEYS */; -INSERT INTO `piwiktests_archive_numeric_2012_03` VALUES (1,'Actions_nb_downloads',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Actions_nb_hits_with_time_generation',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',4),(1,'Actions_nb_outlinks',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',3),(1,'Actions_nb_pageviews',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',4),(1,'Actions_nb_uniq_downloads',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Actions_nb_uniq_outlinks',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',2),(1,'Actions_nb_uniq_pageviews',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',4),(1,'Actions_sum_time_generation',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',0.62),(1,'bounce_count',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'bounce_count_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'done',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_1_conversion_rate',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',50),(1,'Goal_1_nb_conversions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_1_nb_visits_converted',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_1_revenue',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',42),(1,'Goal_2_conversion_rate',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',50),(1,'Goal_2_nb_conversions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_2_nb_visits_converted',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_2_revenue',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_conversion_rate',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',100),(1,'Goal_nb_conversions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',2),(1,'Goal_nb_visits_converted',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',2),(1,'Goal_revenue',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',43),(1,'max_actions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',7),(1,'max_actions_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'nb_actions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',8),(1,'nb_actions_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'nb_uniq_visitors',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'nb_uniq_visitors_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'nb_visits',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',2),(1,'nb_visits_converted',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',2),(1,'nb_visits_converted_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'nb_visits_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Referers_distinctKeywords',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Referers_distinctSearchEngines',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Referers_distinctWebsites',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Referers_distinctWebsitesUrls',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'sum_visit_length',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1621),(1,'UserCountry_distinctCountries',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(2,'done',1,'2012-03-05','2012-03-05',1,'2013-10-08 21:55:42',1),(3,'done986ba94bab425ed6e45ffd3f8dc6572d.Referers',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(3,'Referers_distinctKeywords',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(3,'Referers_distinctSearchEngines',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'bounce_count',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'done986ba94bab425ed6e45ffd3f8dc6572d.VisitsSummary',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'max_actions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'nb_actions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'nb_uniq_visitors',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'nb_visits',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'nb_visits_converted',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(5,'Actions_nb_downloads',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Actions_nb_hits_with_time_generation',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',4),(5,'Actions_nb_outlinks',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',3),(5,'Actions_nb_pageviews',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',4),(5,'Actions_nb_uniq_downloads',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Actions_nb_uniq_outlinks',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',2),(5,'Actions_nb_uniq_pageviews',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',4),(5,'Actions_sum_time_generation',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',0.62),(5,'bounce_count',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'bounce_count_returning',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'done',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_1_conversion_rate',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',50),(5,'Goal_1_nb_conversions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_1_nb_visits_converted',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_1_revenue',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',42),(5,'Goal_2_conversion_rate',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',50),(5,'Goal_2_nb_conversions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_2_nb_visits_converted',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_2_revenue',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_conversion_rate',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',100),(5,'Goal_nb_conversions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',2),(5,'Goal_nb_visits_converted',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',2),(5,'Goal_revenue',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',43),(5,'max_actions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',7),(5,'max_actions_returning',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'nb_actions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',8),(5,'nb_actions_returning',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'nb_uniq_visitors',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'nb_visits',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',2),(5,'nb_visits_converted',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',2),(5,'nb_visits_converted_returning',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'nb_visits_returning',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Referers_distinctKeywords',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Referers_distinctSearchEngines',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Referers_distinctWebsites',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Referers_distinctWebsitesUrls',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'sum_visit_length',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1621),(5,'UserCountry_distinctCountries',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(6,'done',1,'2012-03-04','2012-03-04',1,'2013-10-08 21:55:43',1),(7,'done',1,'2012-03-07','2012-03-07',1,'2013-10-08 21:55:43',1),(8,'done',1,'2012-03-08','2012-03-08',1,'2013-10-08 21:55:43',1),(9,'done',1,'2012-03-09','2012-03-09',1,'2013-10-08 21:55:43',1),(10,'done',1,'2012-03-10','2012-03-10',1,'2013-10-08 21:55:43',1),(11,'done',1,'2012-03-11','2012-03-11',1,'2013-10-08 21:55:43',1),(12,'done',1,'2012-03-12','2012-03-12',1,'2013-10-08 21:55:43',1),(13,'done',1,'2012-03-13','2012-03-13',1,'2013-10-08 21:55:43',1),(14,'done',1,'2012-03-14','2012-03-14',1,'2013-10-08 21:55:43',1),(15,'done',1,'2012-03-15','2012-03-15',1,'2013-10-08 21:55:43',1),(16,'done',1,'2012-03-16','2012-03-16',1,'2013-10-08 21:55:43',1),(17,'done',1,'2012-03-17','2012-03-17',1,'2013-10-08 21:55:43',1),(18,'done',1,'2012-03-18','2012-03-18',1,'2013-10-08 21:55:43',1),(19,'done',1,'2012-03-19','2012-03-19',1,'2013-10-08 21:55:43',1),(20,'done',1,'2012-03-20','2012-03-20',1,'2013-10-08 21:55:43',1),(21,'done',1,'2012-03-21','2012-03-21',1,'2013-10-08 21:55:43',1),(22,'done',1,'2012-03-22','2012-03-22',1,'2013-10-08 21:55:43',1),(23,'done',1,'2012-03-23','2012-03-23',1,'2013-10-08 21:55:43',1),(24,'done',1,'2012-03-24','2012-03-24',1,'2013-10-08 21:55:43',1),(25,'done',1,'2012-03-25','2012-03-25',1,'2013-10-08 21:55:43',1),(26,'done',1,'2012-03-26','2012-03-26',1,'2013-10-08 21:55:43',1),(27,'done',1,'2012-03-27','2012-03-27',1,'2013-10-08 21:55:44',1),(28,'done',1,'2012-03-28','2012-03-28',1,'2013-10-08 21:55:44',1),(29,'done',1,'2012-03-29','2012-03-29',1,'2013-10-08 21:55:44',1),(30,'done',1,'2012-03-30','2012-03-30',1,'2013-10-08 21:55:44',1),(31,'done',1,'2012-03-31','2012-03-31',1,'2013-10-08 21:55:44',1),(32,'Actions_nb_downloads',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Actions_nb_hits_with_time_generation',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',4),(32,'Actions_nb_outlinks',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',3),(32,'Actions_nb_pageviews',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',4),(32,'Actions_nb_uniq_downloads',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Actions_nb_uniq_outlinks',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',2),(32,'Actions_nb_uniq_pageviews',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',4),(32,'Actions_sum_time_generation',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',0.62),(32,'bounce_count',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'bounce_count_returning',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'done',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_1_conversion_rate',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',50),(32,'Goal_1_nb_conversions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_1_nb_visits_converted',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_1_revenue',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',42),(32,'Goal_2_conversion_rate',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',50),(32,'Goal_2_nb_conversions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_2_nb_visits_converted',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_2_revenue',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_conversion_rate',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',100),(32,'Goal_nb_conversions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',2),(32,'Goal_nb_visits_converted',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',2),(32,'Goal_revenue',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',43),(32,'max_actions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',7),(32,'max_actions_returning',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'nb_actions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',8),(32,'nb_actions_returning',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'nb_uniq_visitors',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'nb_visits',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',2),(32,'nb_visits_converted',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',2),(32,'nb_visits_converted_returning',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'nb_visits_returning',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Referers_distinctKeywords',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Referers_distinctSearchEngines',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Referers_distinctWebsites',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Referers_distinctWebsitesUrls',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'sum_visit_length',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1621),(32,'UserCountry_distinctCountries',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1); -/*!40000 ALTER TABLE `piwiktests_archive_numeric_2012_03` ENABLE KEYS */; +LOCK TABLES `archive_numeric_2012_03` WRITE; +/*!40000 ALTER TABLE `archive_numeric_2012_03` DISABLE KEYS */; +INSERT INTO `archive_numeric_2012_03` VALUES (1,'Actions_nb_downloads',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Actions_nb_hits_with_time_generation',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',4),(1,'Actions_nb_outlinks',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',3),(1,'Actions_nb_pageviews',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',4),(1,'Actions_nb_uniq_downloads',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Actions_nb_uniq_outlinks',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',2),(1,'Actions_nb_uniq_pageviews',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',4),(1,'Actions_sum_time_generation',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',0.62),(1,'bounce_count',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'bounce_count_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'done',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_1_conversion_rate',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',50),(1,'Goal_1_nb_conversions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_1_nb_visits_converted',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_1_revenue',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',42),(1,'Goal_2_conversion_rate',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',50),(1,'Goal_2_nb_conversions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_2_nb_visits_converted',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_2_revenue',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Goal_conversion_rate',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',100),(1,'Goal_nb_conversions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',2),(1,'Goal_nb_visits_converted',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',2),(1,'Goal_revenue',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',43),(1,'max_actions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',7),(1,'max_actions_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'nb_actions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',8),(1,'nb_actions_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'nb_uniq_visitors',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'nb_uniq_visitors_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'nb_visits',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',2),(1,'nb_visits_converted',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',2),(1,'nb_visits_converted_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'nb_visits_returning',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Referers_distinctKeywords',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Referers_distinctSearchEngines',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Referers_distinctWebsites',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'Referers_distinctWebsitesUrls',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(1,'sum_visit_length',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1621),(1,'UserCountry_distinctCountries',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:41',1),(2,'done',1,'2012-03-05','2012-03-05',1,'2013-10-08 21:55:42',1),(3,'done986ba94bab425ed6e45ffd3f8dc6572d.Referers',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(3,'Referers_distinctKeywords',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(3,'Referers_distinctSearchEngines',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'bounce_count',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'done986ba94bab425ed6e45ffd3f8dc6572d.VisitsSummary',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'max_actions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'nb_actions',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'nb_uniq_visitors',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'nb_visits',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(4,'nb_visits_converted',1,'2012-03-06','2012-03-06',1,'2013-10-08 21:55:42',1),(5,'Actions_nb_downloads',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Actions_nb_hits_with_time_generation',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',4),(5,'Actions_nb_outlinks',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',3),(5,'Actions_nb_pageviews',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',4),(5,'Actions_nb_uniq_downloads',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Actions_nb_uniq_outlinks',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',2),(5,'Actions_nb_uniq_pageviews',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',4),(5,'Actions_sum_time_generation',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',0.62),(5,'bounce_count',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'bounce_count_returning',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'done',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_1_conversion_rate',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',50),(5,'Goal_1_nb_conversions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_1_nb_visits_converted',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_1_revenue',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',42),(5,'Goal_2_conversion_rate',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',50),(5,'Goal_2_nb_conversions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_2_nb_visits_converted',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_2_revenue',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Goal_conversion_rate',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',100),(5,'Goal_nb_conversions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',2),(5,'Goal_nb_visits_converted',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',2),(5,'Goal_revenue',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',43),(5,'max_actions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',7),(5,'max_actions_returning',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'nb_actions',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',8),(5,'nb_actions_returning',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'nb_uniq_visitors',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'nb_visits',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',2),(5,'nb_visits_converted',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',2),(5,'nb_visits_converted_returning',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'nb_visits_returning',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Referers_distinctKeywords',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Referers_distinctSearchEngines',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Referers_distinctWebsites',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'Referers_distinctWebsitesUrls',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(5,'sum_visit_length',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1621),(5,'UserCountry_distinctCountries',1,'2012-03-01','2012-03-31',3,'2013-10-08 21:55:44',1),(6,'done',1,'2012-03-04','2012-03-04',1,'2013-10-08 21:55:43',1),(7,'done',1,'2012-03-07','2012-03-07',1,'2013-10-08 21:55:43',1),(8,'done',1,'2012-03-08','2012-03-08',1,'2013-10-08 21:55:43',1),(9,'done',1,'2012-03-09','2012-03-09',1,'2013-10-08 21:55:43',1),(10,'done',1,'2012-03-10','2012-03-10',1,'2013-10-08 21:55:43',1),(11,'done',1,'2012-03-11','2012-03-11',1,'2013-10-08 21:55:43',1),(12,'done',1,'2012-03-12','2012-03-12',1,'2013-10-08 21:55:43',1),(13,'done',1,'2012-03-13','2012-03-13',1,'2013-10-08 21:55:43',1),(14,'done',1,'2012-03-14','2012-03-14',1,'2013-10-08 21:55:43',1),(15,'done',1,'2012-03-15','2012-03-15',1,'2013-10-08 21:55:43',1),(16,'done',1,'2012-03-16','2012-03-16',1,'2013-10-08 21:55:43',1),(17,'done',1,'2012-03-17','2012-03-17',1,'2013-10-08 21:55:43',1),(18,'done',1,'2012-03-18','2012-03-18',1,'2013-10-08 21:55:43',1),(19,'done',1,'2012-03-19','2012-03-19',1,'2013-10-08 21:55:43',1),(20,'done',1,'2012-03-20','2012-03-20',1,'2013-10-08 21:55:43',1),(21,'done',1,'2012-03-21','2012-03-21',1,'2013-10-08 21:55:43',1),(22,'done',1,'2012-03-22','2012-03-22',1,'2013-10-08 21:55:43',1),(23,'done',1,'2012-03-23','2012-03-23',1,'2013-10-08 21:55:43',1),(24,'done',1,'2012-03-24','2012-03-24',1,'2013-10-08 21:55:43',1),(25,'done',1,'2012-03-25','2012-03-25',1,'2013-10-08 21:55:43',1),(26,'done',1,'2012-03-26','2012-03-26',1,'2013-10-08 21:55:43',1),(27,'done',1,'2012-03-27','2012-03-27',1,'2013-10-08 21:55:44',1),(28,'done',1,'2012-03-28','2012-03-28',1,'2013-10-08 21:55:44',1),(29,'done',1,'2012-03-29','2012-03-29',1,'2013-10-08 21:55:44',1),(30,'done',1,'2012-03-30','2012-03-30',1,'2013-10-08 21:55:44',1),(31,'done',1,'2012-03-31','2012-03-31',1,'2013-10-08 21:55:44',1),(32,'Actions_nb_downloads',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Actions_nb_hits_with_time_generation',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',4),(32,'Actions_nb_outlinks',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',3),(32,'Actions_nb_pageviews',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',4),(32,'Actions_nb_uniq_downloads',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Actions_nb_uniq_outlinks',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',2),(32,'Actions_nb_uniq_pageviews',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',4),(32,'Actions_sum_time_generation',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',0.62),(32,'bounce_count',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'bounce_count_returning',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'done',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_1_conversion_rate',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',50),(32,'Goal_1_nb_conversions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_1_nb_visits_converted',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_1_revenue',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',42),(32,'Goal_2_conversion_rate',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',50),(32,'Goal_2_nb_conversions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_2_nb_visits_converted',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_2_revenue',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Goal_conversion_rate',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',100),(32,'Goal_nb_conversions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',2),(32,'Goal_nb_visits_converted',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',2),(32,'Goal_revenue',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',43),(32,'max_actions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',7),(32,'max_actions_returning',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'nb_actions',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',8),(32,'nb_actions_returning',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'nb_uniq_visitors',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'nb_visits',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',2),(32,'nb_visits_converted',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',2),(32,'nb_visits_converted_returning',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'nb_visits_returning',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Referers_distinctKeywords',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Referers_distinctSearchEngines',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Referers_distinctWebsites',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'Referers_distinctWebsitesUrls',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1),(32,'sum_visit_length',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1621),(32,'UserCountry_distinctCountries',1,'2012-03-01','2012-03-07',2,'2013-10-08 21:55:46',1); +/*!40000 ALTER TABLE `archive_numeric_2012_03` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_archive_numeric_2012_04` +-- Table structure for table `archive_numeric_2012_04` -- -DROP TABLE IF EXISTS `piwiktests_archive_numeric_2012_04`; +DROP TABLE IF EXISTS `archive_numeric_2012_04`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_archive_numeric_2012_04` ( +CREATE TABLE `archive_numeric_2012_04` ( `idarchive` int(10) unsigned NOT NULL, `name` varchar(255) NOT NULL, `idsite` int(10) unsigned DEFAULT NULL, @@ -159,23 +159,23 @@ CREATE TABLE `piwiktests_archive_numeric_2012_04` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_archive_numeric_2012_04` +-- Dumping data for table `archive_numeric_2012_04` -- -LOCK TABLES `piwiktests_archive_numeric_2012_04` WRITE; -/*!40000 ALTER TABLE `piwiktests_archive_numeric_2012_04` DISABLE KEYS */; -INSERT INTO `piwiktests_archive_numeric_2012_04` VALUES (1,'done',1,'2012-04-01','2012-04-30',3,'2013-10-08 21:55:45',1),(2,'done',1,'2012-04-01','2012-04-01',1,'2013-10-08 21:55:45',1),(3,'done',1,'2012-04-02','2012-04-02',1,'2013-10-08 21:55:45',1),(4,'done',1,'2012-04-03','2012-04-03',1,'2013-10-08 21:55:45',1),(5,'done',1,'2012-04-04','2012-04-04',1,'2013-10-08 21:55:45',1),(6,'done',1,'2012-04-05','2012-04-05',1,'2013-10-08 21:55:45',1),(7,'done',1,'2012-04-06','2012-04-06',1,'2013-10-08 21:55:45',1),(8,'done',1,'2012-04-07','2012-04-07',1,'2013-10-08 21:55:45',1),(9,'done',1,'2012-04-08','2012-04-08',1,'2013-10-08 21:55:45',1),(10,'done',1,'2012-04-09','2012-04-09',1,'2013-10-08 21:55:45',1),(11,'done',1,'2012-04-10','2012-04-10',1,'2013-10-08 21:55:45',1),(12,'done',1,'2012-04-11','2012-04-11',1,'2013-10-08 21:55:45',1),(13,'done',1,'2012-04-12','2012-04-12',1,'2013-10-08 21:55:45',1),(14,'done',1,'2012-04-13','2012-04-13',1,'2013-10-08 21:55:45',1),(15,'done',1,'2012-04-14','2012-04-14',1,'2013-10-08 21:55:45',1),(16,'done',1,'2012-04-15','2012-04-15',1,'2013-10-08 21:55:45',1),(17,'done',1,'2012-04-16','2012-04-16',1,'2013-10-08 21:55:45',1),(18,'done',1,'2012-04-17','2012-04-17',1,'2013-10-08 21:55:45',1),(19,'done',1,'2012-04-18','2012-04-18',1,'2013-10-08 21:55:45',1),(20,'done',1,'2012-04-19','2012-04-19',1,'2013-10-08 21:55:45',1),(21,'done',1,'2012-04-20','2012-04-20',1,'2013-10-08 21:55:45',1),(22,'done',1,'2012-04-21','2012-04-21',1,'2013-10-08 21:55:45',1),(23,'done',1,'2012-04-22','2012-04-22',1,'2013-10-08 21:55:45',1),(24,'done',1,'2012-04-23','2012-04-23',1,'2013-10-08 21:55:45',1),(25,'done',1,'2012-04-24','2012-04-24',1,'2013-10-08 21:55:45',1),(26,'done',1,'2012-04-25','2012-04-25',1,'2013-10-08 21:55:45',1),(27,'done',1,'2012-04-26','2012-04-26',1,'2013-10-08 21:55:45',1),(28,'done',1,'2012-04-27','2012-04-27',1,'2013-10-08 21:55:45',1),(29,'done',1,'2012-04-28','2012-04-28',1,'2013-10-08 21:55:45',1),(30,'done',1,'2012-04-29','2012-04-29',1,'2013-10-08 21:55:45',1),(31,'done',1,'2012-04-30','2012-04-30',1,'2013-10-08 21:55:45',1); -/*!40000 ALTER TABLE `piwiktests_archive_numeric_2012_04` ENABLE KEYS */; +LOCK TABLES `archive_numeric_2012_04` WRITE; +/*!40000 ALTER TABLE `archive_numeric_2012_04` DISABLE KEYS */; +INSERT INTO `archive_numeric_2012_04` VALUES (1,'done',1,'2012-04-01','2012-04-30',3,'2013-10-08 21:55:45',1),(2,'done',1,'2012-04-01','2012-04-01',1,'2013-10-08 21:55:45',1),(3,'done',1,'2012-04-02','2012-04-02',1,'2013-10-08 21:55:45',1),(4,'done',1,'2012-04-03','2012-04-03',1,'2013-10-08 21:55:45',1),(5,'done',1,'2012-04-04','2012-04-04',1,'2013-10-08 21:55:45',1),(6,'done',1,'2012-04-05','2012-04-05',1,'2013-10-08 21:55:45',1),(7,'done',1,'2012-04-06','2012-04-06',1,'2013-10-08 21:55:45',1),(8,'done',1,'2012-04-07','2012-04-07',1,'2013-10-08 21:55:45',1),(9,'done',1,'2012-04-08','2012-04-08',1,'2013-10-08 21:55:45',1),(10,'done',1,'2012-04-09','2012-04-09',1,'2013-10-08 21:55:45',1),(11,'done',1,'2012-04-10','2012-04-10',1,'2013-10-08 21:55:45',1),(12,'done',1,'2012-04-11','2012-04-11',1,'2013-10-08 21:55:45',1),(13,'done',1,'2012-04-12','2012-04-12',1,'2013-10-08 21:55:45',1),(14,'done',1,'2012-04-13','2012-04-13',1,'2013-10-08 21:55:45',1),(15,'done',1,'2012-04-14','2012-04-14',1,'2013-10-08 21:55:45',1),(16,'done',1,'2012-04-15','2012-04-15',1,'2013-10-08 21:55:45',1),(17,'done',1,'2012-04-16','2012-04-16',1,'2013-10-08 21:55:45',1),(18,'done',1,'2012-04-17','2012-04-17',1,'2013-10-08 21:55:45',1),(19,'done',1,'2012-04-18','2012-04-18',1,'2013-10-08 21:55:45',1),(20,'done',1,'2012-04-19','2012-04-19',1,'2013-10-08 21:55:45',1),(21,'done',1,'2012-04-20','2012-04-20',1,'2013-10-08 21:55:45',1),(22,'done',1,'2012-04-21','2012-04-21',1,'2013-10-08 21:55:45',1),(23,'done',1,'2012-04-22','2012-04-22',1,'2013-10-08 21:55:45',1),(24,'done',1,'2012-04-23','2012-04-23',1,'2013-10-08 21:55:45',1),(25,'done',1,'2012-04-24','2012-04-24',1,'2013-10-08 21:55:45',1),(26,'done',1,'2012-04-25','2012-04-25',1,'2013-10-08 21:55:45',1),(27,'done',1,'2012-04-26','2012-04-26',1,'2013-10-08 21:55:45',1),(28,'done',1,'2012-04-27','2012-04-27',1,'2013-10-08 21:55:45',1),(29,'done',1,'2012-04-28','2012-04-28',1,'2013-10-08 21:55:45',1),(30,'done',1,'2012-04-29','2012-04-29',1,'2013-10-08 21:55:45',1),(31,'done',1,'2012-04-30','2012-04-30',1,'2013-10-08 21:55:45',1); +/*!40000 ALTER TABLE `archive_numeric_2012_04` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_goal` +-- Table structure for table `goal` -- -DROP TABLE IF EXISTS `piwiktests_goal`; +DROP TABLE IF EXISTS `goal`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_goal` ( +CREATE TABLE `goal` ( `idsite` int(11) NOT NULL, `idgoal` int(11) NOT NULL, `name` varchar(50) NOT NULL, @@ -191,23 +191,23 @@ CREATE TABLE `piwiktests_goal` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_goal` +-- Dumping data for table `goal` -- -LOCK TABLES `piwiktests_goal` WRITE; -/*!40000 ALTER TABLE `piwiktests_goal` DISABLE KEYS */; -INSERT INTO `piwiktests_goal` VALUES (1,1,'triggered js','manually','','',0,0,0,0),(1,2,'matching purchase.htm','url','(.*)store\\/purchase\\.(.*)','regex',0,0,1,0); -/*!40000 ALTER TABLE `piwiktests_goal` ENABLE KEYS */; +LOCK TABLES `goal` WRITE; +/*!40000 ALTER TABLE `goal` DISABLE KEYS */; +INSERT INTO `goal` VALUES (1,1,'triggered js','manually','','',0,0,0,0),(1,2,'matching purchase.htm','url','(.*)store\\/purchase\\.(.*)','regex',0,0,1,0); +/*!40000 ALTER TABLE `goal` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_log_action` +-- Table structure for table `log_action` -- -DROP TABLE IF EXISTS `piwiktests_log_action`; +DROP TABLE IF EXISTS `log_action`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_log_action` ( +CREATE TABLE `log_action` ( `idaction` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` text, `hash` int(10) unsigned NOT NULL, @@ -219,23 +219,23 @@ CREATE TABLE `piwiktests_log_action` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_log_action` +-- Dumping data for table `log_action` -- -LOCK TABLES `piwiktests_log_action` WRITE; -/*!40000 ALTER TABLE `piwiktests_log_action` DISABLE KEYS */; -INSERT INTO `piwiktests_log_action` VALUES (1,'incredible title!',1144878801,4,NULL),(2,'example.org/index.htm?parameter=Should display',2166859444,1,0),(3,'Second page view - should be registered as URL',2682029514,4,NULL),(4,'example.org/',1864320163,1,0),(5,'http://dev.piwik.org/svn',2559417213,2,NULL),(6,'http://piwik.org/path/again/latest.zip',28974788,3,NULL),(7,'http://outlinks.org/other_outlink',3160118093,2,NULL),(8,'Looking at homepage (again)...',3922357482,4,NULL),(9,'example.org/index.htm',1534659805,1,0),(10,'Checkout/Purchasing...',2307476306,4,NULL),(11,'example.org/store/purchase.htm',795443427,1,0); -/*!40000 ALTER TABLE `piwiktests_log_action` ENABLE KEYS */; +LOCK TABLES `log_action` WRITE; +/*!40000 ALTER TABLE `log_action` DISABLE KEYS */; +INSERT INTO `log_action` VALUES (1,'incredible title!',1144878801,4,NULL),(2,'example.org/index.htm?parameter=Should display',2166859444,1,0),(3,'Second page view - should be registered as URL',2682029514,4,NULL),(4,'example.org/',1864320163,1,0),(5,'http://dev.piwik.org/svn',2559417213,2,NULL),(6,'http://piwik.org/path/again/latest.zip',28974788,3,NULL),(7,'http://outlinks.org/other_outlink',3160118093,2,NULL),(8,'Looking at homepage (again)...',3922357482,4,NULL),(9,'example.org/index.htm',1534659805,1,0),(10,'Checkout/Purchasing...',2307476306,4,NULL),(11,'example.org/store/purchase.htm',795443427,1,0); +/*!40000 ALTER TABLE `log_action` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_log_conversion` +-- Table structure for table `log_conversion` -- -DROP TABLE IF EXISTS `piwiktests_log_conversion`; +DROP TABLE IF EXISTS `log_conversion`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_log_conversion` ( +CREATE TABLE `log_conversion` ( `idvisit` int(10) unsigned NOT NULL, `idsite` int(10) unsigned NOT NULL, `idvisitor` binary(8) NOT NULL, @@ -282,23 +282,23 @@ CREATE TABLE `piwiktests_log_conversion` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_log_conversion` +-- Dumping data for table `log_conversion` -- -LOCK TABLES `piwiktests_log_conversion` WRITE; -/*!40000 ALTER TABLE `piwiktests_log_conversion` DISABLE KEYS */; -INSERT INTO `piwiktests_log_conversion` VALUES (1,1,'¬¬nÂ5','2012-03-06 11:40:33',NULL,NULL,'2012-03-06',3,'referer.com','',0,1,0,0,'fr',NULL,NULL,NULL,NULL,'http://example.org/',1,0,NULL,NULL,42,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,1,'¬¬nÂ5','2012-03-06 12:22:33',11,8,'2012-03-06',2,'Yahoo!','purchase',1,2,0,0,'fr',NULL,NULL,NULL,NULL,'http://example.org/store/purchase.htm',2,0,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -/*!40000 ALTER TABLE `piwiktests_log_conversion` ENABLE KEYS */; +LOCK TABLES `log_conversion` WRITE; +/*!40000 ALTER TABLE `log_conversion` DISABLE KEYS */; +INSERT INTO `log_conversion` VALUES (1,1,'¬¬nÂ5','2012-03-06 11:40:33',NULL,NULL,'2012-03-06',3,'referer.com','',0,1,0,0,'fr',NULL,NULL,NULL,NULL,'http://example.org/',1,0,NULL,NULL,42,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,1,'¬¬nÂ5','2012-03-06 12:22:33',11,8,'2012-03-06',2,'Yahoo!','purchase',1,2,0,0,'fr',NULL,NULL,NULL,NULL,'http://example.org/store/purchase.htm',2,0,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +/*!40000 ALTER TABLE `log_conversion` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_log_conversion_item` +-- Table structure for table `log_conversion_item` -- -DROP TABLE IF EXISTS `piwiktests_log_conversion_item`; +DROP TABLE IF EXISTS `log_conversion_item`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_log_conversion_item` ( +CREATE TABLE `log_conversion_item` ( `idsite` int(10) unsigned NOT NULL, `idvisitor` binary(8) NOT NULL, `server_time` datetime NOT NULL, @@ -320,22 +320,22 @@ CREATE TABLE `piwiktests_log_conversion_item` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_log_conversion_item` +-- Dumping data for table `log_conversion_item` -- -LOCK TABLES `piwiktests_log_conversion_item` WRITE; -/*!40000 ALTER TABLE `piwiktests_log_conversion_item` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_log_conversion_item` ENABLE KEYS */; +LOCK TABLES `log_conversion_item` WRITE; +/*!40000 ALTER TABLE `log_conversion_item` DISABLE KEYS */; +/*!40000 ALTER TABLE `log_conversion_item` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_log_link_visit_action` +-- Table structure for table `log_link_visit_action` -- -DROP TABLE IF EXISTS `piwiktests_log_link_visit_action`; +DROP TABLE IF EXISTS `log_link_visit_action`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_log_link_visit_action` ( +CREATE TABLE `log_link_visit_action` ( `idlink_va` int(11) unsigned NOT NULL AUTO_INCREMENT, `idsite` int(10) unsigned NOT NULL, `idvisitor` binary(8) NOT NULL, @@ -364,23 +364,23 @@ CREATE TABLE `piwiktests_log_link_visit_action` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_log_link_visit_action` +-- Dumping data for table `log_link_visit_action` -- -LOCK TABLES `piwiktests_log_link_visit_action` WRITE; -/*!40000 ALTER TABLE `piwiktests_log_link_visit_action` DISABLE KEYS */; -INSERT INTO `piwiktests_log_link_visit_action` VALUES (1,1,'¬¬nÂ5','2012-03-06 11:22:33',1,2,0,1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,234),(2,1,'¬¬nÂ5','2012-03-06 11:25:33',1,4,2,3,1,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,224),(3,1,'¬¬nÂ5','2012-03-06 11:28:33',1,5,4,NULL,3,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(4,1,'¬¬nÂ5','2012-03-06 11:34:33',1,6,5,NULL,3,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,1,'¬¬nÂ5','2012-03-06 11:35:45',1,7,6,NULL,3,72,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(6,1,'¬¬nÂ5','2012-03-06 11:37:33',1,5,7,NULL,3,108,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(7,1,'¬¬nÂ5','2012-03-06 11:49:33',1,9,5,8,3,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,23),(8,1,'¬¬nÂ5','2012-03-06 12:22:33',2,11,0,10,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,134); -/*!40000 ALTER TABLE `piwiktests_log_link_visit_action` ENABLE KEYS */; +LOCK TABLES `log_link_visit_action` WRITE; +/*!40000 ALTER TABLE `log_link_visit_action` DISABLE KEYS */; +INSERT INTO `log_link_visit_action` VALUES (1,1,'¬¬nÂ5','2012-03-06 11:22:33',1,2,0,1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,234),(2,1,'¬¬nÂ5','2012-03-06 11:25:33',1,4,2,3,1,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,224),(3,1,'¬¬nÂ5','2012-03-06 11:28:33',1,5,4,NULL,3,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(4,1,'¬¬nÂ5','2012-03-06 11:34:33',1,6,5,NULL,3,360,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,1,'¬¬nÂ5','2012-03-06 11:35:45',1,7,6,NULL,3,72,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(6,1,'¬¬nÂ5','2012-03-06 11:37:33',1,5,7,NULL,3,108,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(7,1,'¬¬nÂ5','2012-03-06 11:49:33',1,9,5,8,3,180,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,23),(8,1,'¬¬nÂ5','2012-03-06 12:22:33',2,11,0,10,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,134); +/*!40000 ALTER TABLE `log_link_visit_action` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_log_profiling` +-- Table structure for table `log_profiling` -- -DROP TABLE IF EXISTS `piwiktests_log_profiling`; +DROP TABLE IF EXISTS `log_profiling`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_log_profiling` ( +CREATE TABLE `log_profiling` ( `query` text NOT NULL, `count` int(10) unsigned DEFAULT NULL, `sum_time_ms` float DEFAULT NULL, @@ -389,22 +389,22 @@ CREATE TABLE `piwiktests_log_profiling` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_log_profiling` +-- Dumping data for table `log_profiling` -- -LOCK TABLES `piwiktests_log_profiling` WRITE; -/*!40000 ALTER TABLE `piwiktests_log_profiling` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_log_profiling` ENABLE KEYS */; +LOCK TABLES `log_profiling` WRITE; +/*!40000 ALTER TABLE `log_profiling` DISABLE KEYS */; +/*!40000 ALTER TABLE `log_profiling` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_log_visit` +-- Table structure for table `log_visit` -- -DROP TABLE IF EXISTS `piwiktests_log_visit`; +DROP TABLE IF EXISTS `log_visit`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_log_visit` ( +CREATE TABLE `log_visit` ( `idvisit` int(10) unsigned NOT NULL AUTO_INCREMENT, `idsite` int(10) unsigned NOT NULL, `idvisitor` binary(8) NOT NULL, @@ -474,23 +474,23 @@ CREATE TABLE `piwiktests_log_visit` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_log_visit` +-- Dumping data for table `log_visit` -- -LOCK TABLES `piwiktests_log_visit` WRITE; -/*!40000 ALTER TABLE `piwiktests_log_visit` DISABLE KEYS */; -INSERT INTO `piwiktests_log_visit` VALUES (1,1,'¬¬nÂ5','12:34:06',0,1,0,0,0,'2012-03-06 11:22:33','2012-03-06 11:49:33',9,8,2,1,7,0,1621,1,0,3,'referer.com','http://referer.com/page.htm?param=valuewith some spaces','','|hQâ²C^','WXP','XP','FF','3.6',0,NULL,NULL,'1024x768',0,1,1,0,0,0,0,0,0,1,'œ','fr','fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,1,'¬¬nÂ5','12:34:06',1,2,0,0,0,'2012-03-06 12:22:33','2012-03-06 12:22:33',11,10,11,10,1,0,0,1,0,2,'Yahoo!','http://search.yahoo.com/search?p=purchase','purchase','|hQâ²C^','WXP','XP','FF','3.6',0,NULL,NULL,'1024x768',0,1,1,0,0,0,0,0,0,1,'œ','fr','fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -/*!40000 ALTER TABLE `piwiktests_log_visit` ENABLE KEYS */; +LOCK TABLES `log_visit` WRITE; +/*!40000 ALTER TABLE `log_visit` DISABLE KEYS */; +INSERT INTO `log_visit` VALUES (1,1,'¬¬nÂ5','12:34:06',0,1,0,0,0,'2012-03-06 11:22:33','2012-03-06 11:49:33',9,8,2,1,7,0,1621,1,0,3,'referer.com','http://referer.com/page.htm?param=valuewith some spaces','','|hQâ²C^','WXP','XP','FF','3.6',0,NULL,NULL,'1024x768',0,1,1,0,0,0,0,0,0,1,'œ','fr','fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,1,'¬¬nÂ5','12:34:06',1,2,0,0,0,'2012-03-06 12:22:33','2012-03-06 12:22:33',11,10,11,10,1,0,0,1,0,2,'Yahoo!','http://search.yahoo.com/search?p=purchase','purchase','|hQâ²C^','WXP','XP','FF','3.6',0,NULL,NULL,'1024x768',0,1,1,0,0,0,0,0,0,1,'œ','fr','fr',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +/*!40000 ALTER TABLE `log_visit` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_logger_api_call` +-- Table structure for table `logger_api_call` -- -DROP TABLE IF EXISTS `piwiktests_logger_api_call`; +DROP TABLE IF EXISTS `logger_api_call`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_logger_api_call` ( +CREATE TABLE `logger_api_call` ( `idlogger_api_call` int(10) unsigned NOT NULL AUTO_INCREMENT, `class_name` varchar(255) DEFAULT NULL, `method_name` varchar(255) DEFAULT NULL, @@ -505,22 +505,22 @@ CREATE TABLE `piwiktests_logger_api_call` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_logger_api_call` +-- Dumping data for table `logger_api_call` -- -LOCK TABLES `piwiktests_logger_api_call` WRITE; -/*!40000 ALTER TABLE `piwiktests_logger_api_call` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_logger_api_call` ENABLE KEYS */; +LOCK TABLES `logger_api_call` WRITE; +/*!40000 ALTER TABLE `logger_api_call` DISABLE KEYS */; +/*!40000 ALTER TABLE `logger_api_call` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_logger_error` +-- Table structure for table `logger_error` -- -DROP TABLE IF EXISTS `piwiktests_logger_error`; +DROP TABLE IF EXISTS `logger_error`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_logger_error` ( +CREATE TABLE `logger_error` ( `idlogger_error` int(10) unsigned NOT NULL AUTO_INCREMENT, `timestamp` timestamp NULL DEFAULT NULL, `message` text, @@ -533,22 +533,22 @@ CREATE TABLE `piwiktests_logger_error` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_logger_error` +-- Dumping data for table `logger_error` -- -LOCK TABLES `piwiktests_logger_error` WRITE; -/*!40000 ALTER TABLE `piwiktests_logger_error` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_logger_error` ENABLE KEYS */; +LOCK TABLES `logger_error` WRITE; +/*!40000 ALTER TABLE `logger_error` DISABLE KEYS */; +/*!40000 ALTER TABLE `logger_error` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_logger_exception` +-- Table structure for table `logger_exception` -- -DROP TABLE IF EXISTS `piwiktests_logger_exception`; +DROP TABLE IF EXISTS `logger_exception`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_logger_exception` ( +CREATE TABLE `logger_exception` ( `idlogger_exception` int(10) unsigned NOT NULL AUTO_INCREMENT, `timestamp` timestamp NULL DEFAULT NULL, `message` text, @@ -561,22 +561,22 @@ CREATE TABLE `piwiktests_logger_exception` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_logger_exception` +-- Dumping data for table `logger_exception` -- -LOCK TABLES `piwiktests_logger_exception` WRITE; -/*!40000 ALTER TABLE `piwiktests_logger_exception` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_logger_exception` ENABLE KEYS */; +LOCK TABLES `logger_exception` WRITE; +/*!40000 ALTER TABLE `logger_exception` DISABLE KEYS */; +/*!40000 ALTER TABLE `logger_exception` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_logger_message` +-- Table structure for table `logger_message` -- -DROP TABLE IF EXISTS `piwiktests_logger_message`; +DROP TABLE IF EXISTS `logger_message`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_logger_message` ( +CREATE TABLE `logger_message` ( `idlogger_message` int(10) unsigned NOT NULL AUTO_INCREMENT, `timestamp` timestamp NULL DEFAULT NULL, `message` text, @@ -585,22 +585,22 @@ CREATE TABLE `piwiktests_logger_message` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_logger_message` +-- Dumping data for table `logger_message` -- -LOCK TABLES `piwiktests_logger_message` WRITE; -/*!40000 ALTER TABLE `piwiktests_logger_message` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_logger_message` ENABLE KEYS */; +LOCK TABLES `logger_message` WRITE; +/*!40000 ALTER TABLE `logger_message` DISABLE KEYS */; +/*!40000 ALTER TABLE `logger_message` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_option` +-- Table structure for table `option` -- -DROP TABLE IF EXISTS `piwiktests_option`; +DROP TABLE IF EXISTS `option`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_option` ( +CREATE TABLE `option` ( `option_name` varchar(255) NOT NULL, `option_value` longtext NOT NULL, `autoload` tinyint(4) NOT NULL DEFAULT '1', @@ -610,23 +610,23 @@ CREATE TABLE `piwiktests_option` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_option` +-- Dumping data for table `option` -- -LOCK TABLES `piwiktests_option` WRITE; -/*!40000 ALTER TABLE `piwiktests_option` DISABLE KEYS */; -INSERT INTO `piwiktests_option` VALUES ('lastPurge_piwiktests_archive_blob_2012_03','1381269344',0),('lastPurge_piwiktests_archive_blob_2012_04','1381269345',0),('MobileMessaging_DelegatedManagement','false',0),('SitesManager_EnableSiteSpecificUserAgentExclude','',0),('version_Actions', '1.12',1),('version_Annotations', '1.12',1),('version_API', '1.12',1),('version_core', '1.12',1),('version_CoreAdminHome', '1.12',1),('version_CoreHome', '1.12',1),('version_CorePluginsAdmin', '1.12',1),('version_CoreUpdater', '1.12',1),('version_CustomVariables', '1.12',1),('version_Dashboard', '1.12',1),('version_DoNotTrack', '1.12',1),('version_ExampleAPI', '0.1',1),('version_ExamplePlugin', '0.1',1),('version_ExampleRssWidget', '0.1',1),('version_Feedback', '1.12',1),('version_Goals', '1.12',1),('version_ImageGraph', '1.12',1),('version_Installation', '1.12',1),('version_LanguagesManager', '1.12',1),('version_Live', '1.12',1),('version_Login', '1.12',1),('version_MobileMessaging', '1.12',1),('version_MultiSites', '1.12',1),('version_Overlay', '1.12',1),('version_PDFReports', '1.12',1),('version_PrivacyManager', '1.12',1),('version_Provider', '1.12',1),('version_Proxy', '1.12',1),('version_Referers', '1.12',1),('version_SegmentEditor', '1.12',1),('version_SEO', '1.12',1),('version_SitesManager', '1.12',1),('version_Transitions', '1.12',1),('version_UserCountry', '1.12',1),('version_UserCountryMap', '1.12',1),('version_UserSettings', '1.12',1),('version_UsersManager', '1.12',1),('version_VisitFrequency', '1.12',1),('version_VisitorGenerator', '1.12',1),('version_VisitorInterest', '1.12',1),('version_VisitsSummary', '1.12',1),('version_VisitTime', '1.12',1),('version_Widgetize', '1.12',1); -/*!40000 ALTER TABLE `piwiktests_option` ENABLE KEYS */; +LOCK TABLES `option` WRITE; +/*!40000 ALTER TABLE `option` DISABLE KEYS */; +INSERT INTO `option` VALUES ('lastPurge_archive_blob_2012_03','1381269344',0),('lastPurge_archive_blob_2012_04','1381269345',0),('MobileMessaging_DelegatedManagement','false',0),('SitesManager_EnableSiteSpecificUserAgentExclude','',0),('version_Actions', '1.12',1),('version_Annotations', '1.12',1),('version_API', '1.12',1),('version_core', '1.12',1),('version_CoreAdminHome', '1.12',1),('version_CoreHome', '1.12',1),('version_CorePluginsAdmin', '1.12',1),('version_CoreUpdater', '1.12',1),('version_CustomVariables', '1.12',1),('version_Dashboard', '1.12',1),('version_DoNotTrack', '1.12',1),('version_ExampleAPI', '0.1',1),('version_ExamplePlugin', '0.1',1),('version_ExampleRssWidget', '0.1',1),('version_Feedback', '1.12',1),('version_Goals', '1.12',1),('version_ImageGraph', '1.12',1),('version_Installation', '1.12',1),('version_LanguagesManager', '1.12',1),('version_Live', '1.12',1),('version_Login', '1.12',1),('version_MobileMessaging', '1.12',1),('version_MultiSites', '1.12',1),('version_Overlay', '1.12',1),('version_PDFReports', '1.12',1),('version_PrivacyManager', '1.12',1),('version_Provider', '1.12',1),('version_Proxy', '1.12',1),('version_Referers', '1.12',1),('version_SegmentEditor', '1.12',1),('version_SEO', '1.12',1),('version_SitesManager', '1.12',1),('version_Transitions', '1.12',1),('version_UserCountry', '1.12',1),('version_UserCountryMap', '1.12',1),('version_UserSettings', '1.12',1),('version_UsersManager', '1.12',1),('version_VisitFrequency', '1.12',1),('version_VisitorGenerator', '1.12',1),('version_VisitorInterest', '1.12',1),('version_VisitsSummary', '1.12',1),('version_VisitTime', '1.12',1),('version_Widgetize', '1.12',1); +/*!40000 ALTER TABLE `option` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_report` +-- Table structure for table `report` -- -DROP TABLE IF EXISTS `piwiktests_report`; +DROP TABLE IF EXISTS `report`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_report` ( +CREATE TABLE `report` ( `idreport` int(11) NOT NULL AUTO_INCREMENT, `idsite` int(11) NOT NULL, `login` varchar(100) NOT NULL, @@ -646,22 +646,22 @@ CREATE TABLE `piwiktests_report` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_report` +-- Dumping data for table `report` -- -LOCK TABLES `piwiktests_report` WRITE; -/*!40000 ALTER TABLE `piwiktests_report` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_report` ENABLE KEYS */; +LOCK TABLES `report` WRITE; +/*!40000 ALTER TABLE `report` DISABLE KEYS */; +/*!40000 ALTER TABLE `report` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_segment` +-- Table structure for table `segment` -- -DROP TABLE IF EXISTS `piwiktests_segment`; +DROP TABLE IF EXISTS `segment`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_segment` ( +CREATE TABLE `segment` ( `idsegment` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `definition` text NOT NULL, @@ -677,22 +677,22 @@ CREATE TABLE `piwiktests_segment` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_segment` +-- Dumping data for table `segment` -- -LOCK TABLES `piwiktests_segment` WRITE; -/*!40000 ALTER TABLE `piwiktests_segment` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_segment` ENABLE KEYS */; +LOCK TABLES `segment` WRITE; +/*!40000 ALTER TABLE `segment` DISABLE KEYS */; +/*!40000 ALTER TABLE `segment` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_session` +-- Table structure for table `session` -- -DROP TABLE IF EXISTS `piwiktests_session`; +DROP TABLE IF EXISTS `session`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_session` ( +CREATE TABLE `session` ( `id` char(32) NOT NULL, `modified` int(11) DEFAULT NULL, `lifetime` int(11) DEFAULT NULL, @@ -702,22 +702,22 @@ CREATE TABLE `piwiktests_session` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_session` +-- Dumping data for table `session` -- -LOCK TABLES `piwiktests_session` WRITE; -/*!40000 ALTER TABLE `piwiktests_session` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_session` ENABLE KEYS */; +LOCK TABLES `session` WRITE; +/*!40000 ALTER TABLE `session` DISABLE KEYS */; +/*!40000 ALTER TABLE `session` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_site` +-- Table structure for table `site` -- -DROP TABLE IF EXISTS `piwiktests_site`; +DROP TABLE IF EXISTS `site`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_site` ( +CREATE TABLE `site` ( `idsite` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(90) NOT NULL, `main_url` varchar(255) NOT NULL, @@ -738,23 +738,23 @@ CREATE TABLE `piwiktests_site` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_site` +-- Dumping data for table `site` -- -LOCK TABLES `piwiktests_site` WRITE; -/*!40000 ALTER TABLE `piwiktests_site` DISABLE KEYS */; -INSERT INTO `piwiktests_site` VALUES (1,'new name','http://site.com','2010-03-05 16:22:33',0,0,'','','UTC','USD','','excluded_parameter,anotherParameter','mozilla','',0); -/*!40000 ALTER TABLE `piwiktests_site` ENABLE KEYS */; +LOCK TABLES `site` WRITE; +/*!40000 ALTER TABLE `site` DISABLE KEYS */; +INSERT INTO `site` VALUES (1,'new name','http://site.com','2010-03-05 16:22:33',0,0,'','','UTC','USD','','excluded_parameter,anotherParameter','mozilla','',0); +/*!40000 ALTER TABLE `site` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_site_url` +-- Table structure for table `site_url` -- -DROP TABLE IF EXISTS `piwiktests_site_url`; +DROP TABLE IF EXISTS `site_url`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_site_url` ( +CREATE TABLE `site_url` ( `idsite` int(10) unsigned NOT NULL, `url` varchar(255) NOT NULL, PRIMARY KEY (`idsite`,`url`) @@ -762,22 +762,22 @@ CREATE TABLE `piwiktests_site_url` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_site_url` +-- Dumping data for table `site_url` -- -LOCK TABLES `piwiktests_site_url` WRITE; -/*!40000 ALTER TABLE `piwiktests_site_url` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_site_url` ENABLE KEYS */; +LOCK TABLES `site_url` WRITE; +/*!40000 ALTER TABLE `site_url` DISABLE KEYS */; +/*!40000 ALTER TABLE `site_url` ENABLE KEYS */; UNLOCK TABLES; -- --- Table structure for table `piwiktests_user` +-- Table structure for table `user` -- -DROP TABLE IF EXISTS `piwiktests_user`; +DROP TABLE IF EXISTS `user`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `piwiktests_user` ( +CREATE TABLE `user` ( `login` varchar(100) NOT NULL, `password` char(32) NOT NULL, `alias` varchar(45) NOT NULL, @@ -790,12 +790,12 @@ CREATE TABLE `piwiktests_user` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Dumping data for table `piwiktests_user` +-- Dumping data for table `user` -- -LOCK TABLES `piwiktests_user` WRITE; -/*!40000 ALTER TABLE `piwiktests_user` DISABLE KEYS */; -/*!40000 ALTER TABLE `piwiktests_user` ENABLE KEYS */; +LOCK TABLES `user` WRITE; +/*!40000 ALTER TABLE `user` DISABLE KEYS */; +/*!40000 ALTER TABLE `user` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/tests/travis/prepare.sh b/tests/travis/prepare.sh index db6a8f1c58..f6fd159ee9 100755 --- a/tests/travis/prepare.sh +++ b/tests/travis/prepare.sh @@ -13,7 +13,7 @@ fi # Copy Piwik configuration echo "Install config.ini.php" -sed "s/PDO_MYSQL/${MYSQL_ADAPTER}/g" ./tests/PHPUnit/config.ini.travis.php > ./config/config.ini.php +sed "s/PDO\\\MYSQL/${MYSQL_ADAPTER}/g" ./tests/PHPUnit/config.ini.travis.php > ./config/config.ini.php # Prepare phpunit.xml echo "Adjusting phpunit.xml" |