Version Description
Download this release
Release Info
Developer | matomoteam |
Plugin | Matomo Analytics – Ethical Stats. Powerful Insights. |
Version | 4.0.2 |
Comparing to | |
See all releases |
Code changes from version 4.0.1 to 4.0.2
- app/core/Archive/ArchivePurger.php +4 -4
- app/core/CronArchive.php +74 -29
- app/core/CronArchive/QueueConsumer.php +24 -22
- app/core/CronArchive/SegmentArchiving.php +15 -0
- app/core/DataAccess/Model.php +6 -4
- app/core/Version.php +1 -1
- app/js/piwik.min.js +10 -10
- app/matomo.js +10 -10
- app/piwik.js +10 -10
- app/plugins/Widgetize/Controller.php +4 -4
- app/vendor/autoload.php +1 -1
- app/vendor/composer/InstalledVersions.php +16 -6
- app/vendor/composer/autoload_real.php +7 -7
- app/vendor/composer/autoload_static.php +6 -6
- app/vendor/composer/installed.php +6 -6
- assets/js/asset_manager_core_js.js +8 -8
- classes/WpMatomo/API.php +2 -0
- matomo.php +1 -1
- plugins/WordPress/WpAssetManager.php +2 -2
- readme.txt +1 -1
app/core/Archive/ArchivePurger.php
CHANGED
@@ -139,10 +139,10 @@ class ArchivePurger
|
|
139 |
$this->logger->debug("No outdated archives found in archive numeric table for {date}.", array('date' => $dateStart));
|
140 |
}
|
141 |
|
142 |
-
$this->logger->debug("Purging temporary archives: done [ purged archives older than {date} in {yearMonth} ] [Deleted IDs: {deletedIds}]", array(
|
143 |
'date' => $purgeArchivesOlderThan,
|
144 |
'yearMonth' => $dateStart->toString('Y-m'),
|
145 |
-
'deletedIds' =>
|
146 |
));
|
147 |
|
148 |
return $deletedRowCount;
|
@@ -191,8 +191,8 @@ class ArchivePurger
|
|
191 |
)
|
192 |
);
|
193 |
|
194 |
-
$this->logger->debug("[Deleted IDs: {deletedIds}]", array(
|
195 |
-
'deletedIds' =>
|
196 |
));
|
197 |
} else {
|
198 |
$this->logger->debug(
|
139 |
$this->logger->debug("No outdated archives found in archive numeric table for {date}.", array('date' => $dateStart));
|
140 |
}
|
141 |
|
142 |
+
$this->logger->debug("Purging temporary archives: done [ purged archives older than {date} in {yearMonth} ] [Deleted IDs count: {deletedIds}]", array(
|
143 |
'date' => $purgeArchivesOlderThan,
|
144 |
'yearMonth' => $dateStart->toString('Y-m'),
|
145 |
+
'deletedIds' => count($idArchivesToDelete),
|
146 |
));
|
147 |
|
148 |
return $deletedRowCount;
|
191 |
)
|
192 |
);
|
193 |
|
194 |
+
$this->logger->debug("[Deleted IDs count: {deletedIds}]", array(
|
195 |
+
'deletedIds' => count($idArchivesToDelete),
|
196 |
));
|
197 |
} else {
|
198 |
$this->logger->debug(
|
app/core/CronArchive.php
CHANGED
@@ -26,8 +26,8 @@ use Piwik\DataAccess\ArchiveSelector;
|
|
26 |
use Piwik\DataAccess\ArchiveTableCreator;
|
27 |
use Piwik\DataAccess\Model;
|
28 |
use Piwik\DataAccess\RawLogDao;
|
|
|
29 |
use Piwik\Metrics\Formatter;
|
30 |
-
use Piwik\Period\Factory;
|
31 |
use Piwik\Period\Factory as PeriodFactory;
|
32 |
use Piwik\CronArchive\SegmentArchiving;
|
33 |
use Piwik\Period\Range;
|
@@ -236,6 +236,8 @@ class CronArchive
|
|
236 |
$this->rawLogDao = new RawLogDao();
|
237 |
|
238 |
$this->cliMultiRequestParser = new RequestParser($this->makeCliMulti()->supportsAsync());
|
|
|
|
|
239 |
}
|
240 |
|
241 |
private function isMaintenanceModeEnabled()
|
@@ -361,7 +363,14 @@ class CronArchive
|
|
361 |
flush();
|
362 |
}
|
363 |
|
364 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
365 |
if ($archivesToProcess === null) {
|
366 |
break;
|
367 |
}
|
@@ -406,6 +415,12 @@ class CronArchive
|
|
406 |
}
|
407 |
|
408 |
$idSite = $archive['idsite'];
|
|
|
|
|
|
|
|
|
|
|
|
|
409 |
$dateStr = $archive['period'] == Range::PERIOD_ID ? ($archive['date1'] . ',' . $archive['date2']) : $archive['date1'];
|
410 |
$period = PeriodFactory::build($this->periodIdsToLabels[$archive['period']], $dateStr);
|
411 |
$params = new Parameters(new Site($idSite), $period, new Segment($segment, [$idSite], $period->getDateStart(), $period->getDateEnd()));
|
@@ -769,20 +784,12 @@ class CronArchive
|
|
769 |
//Concurrent transaction logic will end up with duplicates set. Adding array_unique to the siteIds.
|
770 |
$siteIds = array_unique($siteIds);
|
771 |
|
772 |
-
$period = Factory::build('day', $date);
|
773 |
-
|
774 |
$siteIdsToInvalidate = [];
|
775 |
foreach ($siteIds as $idSite) {
|
776 |
if ($idSite != $idSiteToInvalidate) {
|
777 |
continue;
|
778 |
}
|
779 |
|
780 |
-
$params = new Parameters(new Site($idSite), $period, new Segment('', [$idSite], $period->getDateStart(), $period->getDateEnd()));
|
781 |
-
if ($this->isThereExistingValidPeriod($params)) {
|
782 |
-
$this->logger->debug(' Found usable archive for date range {date} for site {idSite}, skipping invalidation for now.', ['date' => $date, 'idSite' => $idSite]);
|
783 |
-
continue;
|
784 |
-
}
|
785 |
-
|
786 |
$siteIdsToInvalidate[] = $idSite;
|
787 |
}
|
788 |
|
@@ -794,7 +801,7 @@ class CronArchive
|
|
794 |
|
795 |
try {
|
796 |
$this->logger->debug(' Will invalidate archived reports for ' . $date . ' for following websites ids: ' . $listSiteIds);
|
797 |
-
$this->
|
798 |
} catch (Exception $e) {
|
799 |
$message = ExceptionToTextProcessor::getMessageAndWholeBacktrace($e);
|
800 |
$this->logger->info(' Failed to invalidate archived reports: ' . $message);
|
@@ -813,21 +820,15 @@ class CronArchive
|
|
813 |
|
814 |
foreach ($dates as $date) {
|
815 |
try {
|
816 |
-
|
817 |
} catch (\Exception $ex) {
|
818 |
$this->logger->debug(" Found invalid range date in [General] archiving_custom_ranges: {date}", ['date' => $date]);
|
819 |
continue;
|
820 |
}
|
821 |
|
822 |
-
$params = new Parameters(new Site($idSiteToInvalidate), $period, new Segment('', [$idSiteToInvalidate], $period->getDateStart(), $period->getDateEnd()));
|
823 |
-
if ($this->isThereExistingValidPeriod($params)) {
|
824 |
-
$this->logger->debug(' Found usable archive for custom date range {date} for site {idSite}, skipping archiving.', ['date' => $date, 'idSite' => $idSiteToInvalidate]);
|
825 |
-
continue;
|
826 |
-
}
|
827 |
-
|
828 |
$this->logger->debug(' Invalidating custom date range ({date}) for site {idSite}', ['idSite' => $idSiteToInvalidate, 'date' => $date]);
|
829 |
|
830 |
-
$this->
|
831 |
}
|
832 |
|
833 |
// for new segments, invalidate past dates
|
@@ -855,18 +856,13 @@ class CronArchive
|
|
855 |
$this->logger->debug("Done invalidating");
|
856 |
}
|
857 |
|
858 |
-
|
859 |
{
|
860 |
-
$
|
861 |
-
|
862 |
-
$date = Date::factory($dateStr);
|
863 |
$period = PeriodFactory::build('day', $date);
|
864 |
|
865 |
$params = new Parameters(new Site($idSite), $period, new Segment('', [$idSite], $period->getDateStart(), $period->getDateEnd()));
|
866 |
-
if ($this->isThereExistingValidPeriod($params, $isYesterday)) {
|
867 |
-
$this->logger->debug(" Found existing valid archive for $dateStr, skipping invalidation...");
|
868 |
-
return;
|
869 |
-
}
|
870 |
|
871 |
$loader = new Loader($params);
|
872 |
if ($loader->canSkipThisArchive()) {
|
@@ -879,13 +875,52 @@ class CronArchive
|
|
879 |
'date' => $date->getDatetime(),
|
880 |
]);
|
881 |
|
882 |
-
$this->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
883 |
}
|
884 |
|
885 |
-
public function isThereExistingValidPeriod(Parameters $params
|
886 |
{
|
887 |
$today = Date::factoryInTimezone('today', Site::getTimezoneFor($params->getSite()->getId()));
|
888 |
|
|
|
|
|
889 |
$isPeriodIncludesToday = $params->getPeriod()->isDateInPeriod($today);
|
890 |
$minArchiveProcessedTime = $isPeriodIncludesToday ? Date::now()->subSeconds(Rules::getPeriodArchiveTimeToLiveDefault($params->getPeriod()->getLabel())) : null;
|
891 |
|
@@ -1252,4 +1287,14 @@ class CronArchive
|
|
1252 |
]);
|
1253 |
}
|
1254 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1255 |
}
|
26 |
use Piwik\DataAccess\ArchiveTableCreator;
|
27 |
use Piwik\DataAccess\Model;
|
28 |
use Piwik\DataAccess\RawLogDao;
|
29 |
+
use Piwik\Exception\UnexpectedWebsiteFoundException;
|
30 |
use Piwik\Metrics\Formatter;
|
|
|
31 |
use Piwik\Period\Factory as PeriodFactory;
|
32 |
use Piwik\CronArchive\SegmentArchiving;
|
33 |
use Piwik\Period\Range;
|
236 |
$this->rawLogDao = new RawLogDao();
|
237 |
|
238 |
$this->cliMultiRequestParser = new RequestParser($this->makeCliMulti()->supportsAsync());
|
239 |
+
|
240 |
+
$this->archiveFilter = new ArchiveFilter();
|
241 |
}
|
242 |
|
243 |
private function isMaintenanceModeEnabled()
|
363 |
flush();
|
364 |
}
|
365 |
|
366 |
+
try {
|
367 |
+
$archivesToProcess = $queueConsumer->getNextArchivesToProcess();
|
368 |
+
} catch (UnexpectedWebsiteFoundException $ex) {
|
369 |
+
$this->logger->debug("Site {$queueConsumer->getIdSite()} was deleted, skipping to next...");
|
370 |
+
$queueConsumer->skipToNextSite();
|
371 |
+
continue;
|
372 |
+
}
|
373 |
+
|
374 |
if ($archivesToProcess === null) {
|
375 |
break;
|
376 |
}
|
415 |
}
|
416 |
|
417 |
$idSite = $archive['idsite'];
|
418 |
+
if (!$this->siteExists($idSite)) {
|
419 |
+
$this->logger->debug("Site $idSite no longer exists, no longer launching archiving.");
|
420 |
+
$this->deleteInvalidatedArchives($archive);
|
421 |
+
continue;
|
422 |
+
}
|
423 |
+
|
424 |
$dateStr = $archive['period'] == Range::PERIOD_ID ? ($archive['date1'] . ',' . $archive['date2']) : $archive['date1'];
|
425 |
$period = PeriodFactory::build($this->periodIdsToLabels[$archive['period']], $dateStr);
|
426 |
$params = new Parameters(new Site($idSite), $period, new Segment($segment, [$idSite], $period->getDateStart(), $period->getDateEnd()));
|
784 |
//Concurrent transaction logic will end up with duplicates set. Adding array_unique to the siteIds.
|
785 |
$siteIds = array_unique($siteIds);
|
786 |
|
|
|
|
|
787 |
$siteIdsToInvalidate = [];
|
788 |
foreach ($siteIds as $idSite) {
|
789 |
if ($idSite != $idSiteToInvalidate) {
|
790 |
continue;
|
791 |
}
|
792 |
|
|
|
|
|
|
|
|
|
|
|
|
|
793 |
$siteIdsToInvalidate[] = $idSite;
|
794 |
}
|
795 |
|
801 |
|
802 |
try {
|
803 |
$this->logger->debug(' Will invalidate archived reports for ' . $date . ' for following websites ids: ' . $listSiteIds);
|
804 |
+
$this->invalidateWithSegments($siteIdsToInvalidate, $date, $period = 'day');
|
805 |
} catch (Exception $e) {
|
806 |
$message = ExceptionToTextProcessor::getMessageAndWholeBacktrace($e);
|
807 |
$this->logger->info(' Failed to invalidate archived reports: ' . $message);
|
820 |
|
821 |
foreach ($dates as $date) {
|
822 |
try {
|
823 |
+
PeriodFactory::build('range', $date);
|
824 |
} catch (\Exception $ex) {
|
825 |
$this->logger->debug(" Found invalid range date in [General] archiving_custom_ranges: {date}", ['date' => $date]);
|
826 |
continue;
|
827 |
}
|
828 |
|
|
|
|
|
|
|
|
|
|
|
|
|
829 |
$this->logger->debug(' Invalidating custom date range ({date}) for site {idSite}', ['idSite' => $idSiteToInvalidate, 'date' => $date]);
|
830 |
|
831 |
+
$this->invalidateWithSegments($idSiteToInvalidate, $date, 'range', $_forceInvalidateNonexistant = true);
|
832 |
}
|
833 |
|
834 |
// for new segments, invalidate past dates
|
856 |
$this->logger->debug("Done invalidating");
|
857 |
}
|
858 |
|
859 |
+
public function invalidateRecentDate($dateStr, $idSite)
|
860 |
{
|
861 |
+
$timezone = Site::getTimezoneFor($idSite);
|
862 |
+
$date = Date::factoryInTimezone($dateStr, $timezone);
|
|
|
863 |
$period = PeriodFactory::build('day', $date);
|
864 |
|
865 |
$params = new Parameters(new Site($idSite), $period, new Segment('', [$idSite], $period->getDateStart(), $period->getDateEnd()));
|
|
|
|
|
|
|
|
|
866 |
|
867 |
$loader = new Loader($params);
|
868 |
if ($loader->canSkipThisArchive()) {
|
875 |
'date' => $date->getDatetime(),
|
876 |
]);
|
877 |
|
878 |
+
$this->invalidateWithSegments([$idSite], $date->toString(), 'day');
|
879 |
+
}
|
880 |
+
|
881 |
+
private function invalidateWithSegments($idSites, $date, $period, $_forceInvalidateNonexistant = false)
|
882 |
+
{
|
883 |
+
if ($date instanceof Date) {
|
884 |
+
$date = $date->toString();
|
885 |
+
}
|
886 |
+
|
887 |
+
$periodObj = PeriodFactory::build($period, $date);
|
888 |
+
|
889 |
+
if ($period == 'range') {
|
890 |
+
$date = [$date]; // so we don't split on the ',' in invalidateArchivedReports
|
891 |
+
}
|
892 |
+
|
893 |
+
if (!is_array($idSites)) {
|
894 |
+
$idSites = [$idSites];
|
895 |
+
}
|
896 |
+
|
897 |
+
foreach ($idSites as $idSite) {
|
898 |
+
$params = new Parameters(new Site($idSite), $periodObj, new Segment('', [$idSite], $periodObj->getDateStart(), $periodObj->getDateEnd()));
|
899 |
+
if ($this->isThereExistingValidPeriod($params)) {
|
900 |
+
$this->logger->debug(' Found usable archive for {archive}, skipping invalidation.', ['archive' => $params]);
|
901 |
+
} else {
|
902 |
+
$this->getApiToInvalidateArchivedReport()->invalidateArchivedReports($idSite, $date, $period, $segment = false, $cascadeDown = false,
|
903 |
+
$_forceInvalidateNonexistant);
|
904 |
+
}
|
905 |
+
|
906 |
+
foreach ($this->segmentArchiving->getAllSegmentsToArchive($idSite) as $segment) {
|
907 |
+
$params = new Parameters(new Site($idSite), $periodObj, new Segment($segment['definition'], [$idSite], $periodObj->getDateStart(), $periodObj->getDateEnd()));
|
908 |
+
if ($this->isThereExistingValidPeriod($params)) {
|
909 |
+
$this->logger->debug(' Found usable archive for {archive}, skipping invalidation.', ['archive' => $params]);
|
910 |
+
} else {
|
911 |
+
$this->getApiToInvalidateArchivedReport()->invalidateArchivedReports($idSite, $date, $period, $segment['definition'],
|
912 |
+
$cascadeDown = false, $_forceInvalidateNonexistant);
|
913 |
+
}
|
914 |
+
}
|
915 |
+
}
|
916 |
}
|
917 |
|
918 |
+
public function isThereExistingValidPeriod(Parameters $params)
|
919 |
{
|
920 |
$today = Date::factoryInTimezone('today', Site::getTimezoneFor($params->getSite()->getId()));
|
921 |
|
922 |
+
$isYesterday = $params->getPeriod()->getLabel() == 'day' && $params->getPeriod()->getDateStart()->toString() == Date::factory('yesterday')->toString();
|
923 |
+
|
924 |
$isPeriodIncludesToday = $params->getPeriod()->isDateInPeriod($today);
|
925 |
$minArchiveProcessedTime = $isPeriodIncludesToday ? Date::now()->subSeconds(Rules::getPeriodArchiveTimeToLiveDefault($params->getPeriod()->getLabel())) : null;
|
926 |
|
1287 |
]);
|
1288 |
}
|
1289 |
}
|
1290 |
+
|
1291 |
+
private function siteExists($idSite)
|
1292 |
+
{
|
1293 |
+
try {
|
1294 |
+
new Site($idSite);
|
1295 |
+
return true;
|
1296 |
+
} catch (\UnexpectedValueException $ex) {
|
1297 |
+
return false;
|
1298 |
+
}
|
1299 |
+
}
|
1300 |
}
|
app/core/CronArchive/QueueConsumer.php
CHANGED
@@ -18,6 +18,7 @@ use Piwik\CronArchive;
|
|
18 |
use Piwik\DataAccess\ArchiveSelector;
|
19 |
use Piwik\DataAccess\Model;
|
20 |
use Piwik\Date;
|
|
|
21 |
use Piwik\Period;
|
22 |
use Piwik\Period\Factory as PeriodFactory;
|
23 |
use Piwik\Piwik;
|
@@ -100,6 +101,11 @@ class QueueConsumer
|
|
100 |
*/
|
101 |
private $siteTimer;
|
102 |
|
|
|
|
|
|
|
|
|
|
|
103 |
public function __construct(LoggerInterface $logger, $websiteIdArchiveList, $countOfProcesses, $pid, Model $model,
|
104 |
SegmentArchiving $segmentArchiving, CronArchive $cronArchive, RequestParser $cliMultiRequestParser,
|
105 |
ArchiveFilter $archiveFilter = null)
|
@@ -123,12 +129,6 @@ class QueueConsumer
|
|
123 |
|
124 |
public function getNextArchivesToProcess()
|
125 |
{
|
126 |
-
// in case a site is deleted while archiving is running
|
127 |
-
if (!empty($this->idSite) && !$this->isSiteExists($this->idSite)) {
|
128 |
-
$this->logger->debug("Site ID = {$this->idSite} was deleted during archiving process, moving on.");
|
129 |
-
$this->idSite = null;
|
130 |
-
}
|
131 |
-
|
132 |
if (empty($this->idSite)) {
|
133 |
$this->idSite = $this->getNextIdSiteToArchive();
|
134 |
if (empty($this->idSite)) { // no sites left to archive, stop
|
@@ -156,6 +156,8 @@ class QueueConsumer
|
|
156 |
// NOTE: we do this on every site iteration so we don't end up processing say a single user entered invalidation,
|
157 |
// and then stop until the next hour.
|
158 |
$this->cronArchive->invalidateArchivedReportsForSitesThatNeedToBeArchivedAgain($this->idSite);
|
|
|
|
|
159 |
}
|
160 |
|
161 |
// we don't want to invalidate different periods together or segment archives w/ no-segment archives
|
@@ -226,12 +228,15 @@ class QueueConsumer
|
|
226 |
continue;
|
227 |
}
|
228 |
|
229 |
-
$archivedTime = $this->usableArchiveExists($invalidatedArchive);
|
230 |
-
if ($
|
231 |
$now = Date::now()->getDatetime();
|
232 |
$this->logger->debug("Found invalidation with usable archive (not yet outdated, ts_archived of existing = $archivedTime, now = $now) skipping until archive is out of date: $invalidationDesc");
|
233 |
$this->addInvalidationToExclude($invalidatedArchive);
|
234 |
continue;
|
|
|
|
|
|
|
235 |
}
|
236 |
|
237 |
$alreadyInProgressId = $this->model->isArchiveAlreadyInProgress($invalidatedArchive);
|
@@ -329,7 +334,7 @@ class QueueConsumer
|
|
329 |
while ($iterations < 100) {
|
330 |
$invalidationsToExclude = array_merge($this->invalidationsToExclude, $extraInvalidationsToIgnore);
|
331 |
|
332 |
-
$nextArchive = $this->model->getNextInvalidatedArchive($idSite, $invalidationsToExclude);
|
333 |
if (empty($nextArchive)) {
|
334 |
break;
|
335 |
}
|
@@ -490,13 +495,9 @@ class QueueConsumer
|
|
490 |
$this->invalidationsToExclude[$idinvalidation] = $idinvalidation;
|
491 |
}
|
492 |
|
493 |
-
|
494 |
{
|
495 |
-
|
496 |
-
return 'all';
|
497 |
-
} else {
|
498 |
-
return 'segment';
|
499 |
-
}
|
500 |
}
|
501 |
|
502 |
private function addInvalidationToExclude(array $invalidatedArchive)
|
@@ -538,27 +539,28 @@ class QueueConsumer
|
|
538 |
$params = new Parameters($site, $period, $segment);
|
539 |
|
540 |
// if latest archive includes today and is usable (DONE_OK or DONE_INVALIDATED and recent enough), skip
|
541 |
-
$today = Date::factoryInTimezone('today', Site::getTimezoneFor($site->getId()))
|
542 |
$isArchiveIncludesToday = $period->isDateInPeriod($today);
|
543 |
if (!$isArchiveIncludesToday) {
|
544 |
-
return false;
|
545 |
}
|
546 |
|
547 |
// if valid archive already exists, do not re-archive
|
548 |
$minDateTimeProcessedUTC = Date::now()->subSeconds(Rules::getPeriodArchiveTimeToLiveDefault($periodLabel));
|
549 |
$archiveIdAndVisits = ArchiveSelector::getArchiveIdAndVisits($params, $minDateTimeProcessedUTC, $includeInvalidated = false);
|
550 |
|
|
|
|
|
551 |
$idArchive = $archiveIdAndVisits[0];
|
552 |
if (empty($idArchive)) {
|
553 |
-
return false;
|
554 |
}
|
555 |
|
556 |
-
return
|
557 |
}
|
558 |
|
559 |
-
|
560 |
{
|
561 |
-
$
|
562 |
-
return !empty($site);
|
563 |
}
|
564 |
}
|
18 |
use Piwik\DataAccess\ArchiveSelector;
|
19 |
use Piwik\DataAccess\Model;
|
20 |
use Piwik\Date;
|
21 |
+
use Piwik\Exception\UnexpectedWebsiteFoundException;
|
22 |
use Piwik\Period;
|
23 |
use Piwik\Period\Factory as PeriodFactory;
|
24 |
use Piwik\Piwik;
|
101 |
*/
|
102 |
private $siteTimer;
|
103 |
|
104 |
+
/**
|
105 |
+
* @var string
|
106 |
+
*/
|
107 |
+
private $currentSiteArchivingStartTime;
|
108 |
+
|
109 |
public function __construct(LoggerInterface $logger, $websiteIdArchiveList, $countOfProcesses, $pid, Model $model,
|
110 |
SegmentArchiving $segmentArchiving, CronArchive $cronArchive, RequestParser $cliMultiRequestParser,
|
111 |
ArchiveFilter $archiveFilter = null)
|
129 |
|
130 |
public function getNextArchivesToProcess()
|
131 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
if (empty($this->idSite)) {
|
133 |
$this->idSite = $this->getNextIdSiteToArchive();
|
134 |
if (empty($this->idSite)) { // no sites left to archive, stop
|
156 |
// NOTE: we do this on every site iteration so we don't end up processing say a single user entered invalidation,
|
157 |
// and then stop until the next hour.
|
158 |
$this->cronArchive->invalidateArchivedReportsForSitesThatNeedToBeArchivedAgain($this->idSite);
|
159 |
+
|
160 |
+
$this->currentSiteArchivingStartTime = Date::now()->getDatetime();
|
161 |
}
|
162 |
|
163 |
// we don't want to invalidate different periods together or segment archives w/ no-segment archives
|
228 |
continue;
|
229 |
}
|
230 |
|
231 |
+
list($isUsableExists, $archivedTime) = $this->usableArchiveExists($invalidatedArchive);
|
232 |
+
if ($isUsableExists) {
|
233 |
$now = Date::now()->getDatetime();
|
234 |
$this->logger->debug("Found invalidation with usable archive (not yet outdated, ts_archived of existing = $archivedTime, now = $now) skipping until archive is out of date: $invalidationDesc");
|
235 |
$this->addInvalidationToExclude($invalidatedArchive);
|
236 |
continue;
|
237 |
+
} else {
|
238 |
+
$now = Date::now()->getDatetime();
|
239 |
+
$this->logger->debug("No usable archive exists (ts_archived of existing = $archivedTime, now = $now).");
|
240 |
}
|
241 |
|
242 |
$alreadyInProgressId = $this->model->isArchiveAlreadyInProgress($invalidatedArchive);
|
334 |
while ($iterations < 100) {
|
335 |
$invalidationsToExclude = array_merge($this->invalidationsToExclude, $extraInvalidationsToIgnore);
|
336 |
|
337 |
+
$nextArchive = $this->model->getNextInvalidatedArchive($idSite, $this->currentSiteArchivingStartTime, $invalidationsToExclude);
|
338 |
if (empty($nextArchive)) {
|
339 |
break;
|
340 |
}
|
495 |
$this->invalidationsToExclude[$idinvalidation] = $idinvalidation;
|
496 |
}
|
497 |
|
498 |
+
public function skipToNextSite()
|
499 |
{
|
500 |
+
$this->idSite = null;
|
|
|
|
|
|
|
|
|
501 |
}
|
502 |
|
503 |
private function addInvalidationToExclude(array $invalidatedArchive)
|
539 |
$params = new Parameters($site, $period, $segment);
|
540 |
|
541 |
// if latest archive includes today and is usable (DONE_OK or DONE_INVALIDATED and recent enough), skip
|
542 |
+
$today = Date::factoryInTimezone('today', Site::getTimezoneFor($site->getId()));
|
543 |
$isArchiveIncludesToday = $period->isDateInPeriod($today);
|
544 |
if (!$isArchiveIncludesToday) {
|
545 |
+
return [false, null];
|
546 |
}
|
547 |
|
548 |
// if valid archive already exists, do not re-archive
|
549 |
$minDateTimeProcessedUTC = Date::now()->subSeconds(Rules::getPeriodArchiveTimeToLiveDefault($periodLabel));
|
550 |
$archiveIdAndVisits = ArchiveSelector::getArchiveIdAndVisits($params, $minDateTimeProcessedUTC, $includeInvalidated = false);
|
551 |
|
552 |
+
$tsArchived = !empty($archiveIdAndVisits[4]) ? Date::factory($archiveIdAndVisits[4])->getDatetime() : null;
|
553 |
+
|
554 |
$idArchive = $archiveIdAndVisits[0];
|
555 |
if (empty($idArchive)) {
|
556 |
+
return [false, $tsArchived];
|
557 |
}
|
558 |
|
559 |
+
return [true, $tsArchived];
|
560 |
}
|
561 |
|
562 |
+
public function getIdSite()
|
563 |
{
|
564 |
+
return $this->idSite;
|
|
|
565 |
}
|
566 |
}
|
app/core/CronArchive/SegmentArchiving.php
CHANGED
@@ -279,6 +279,21 @@ class SegmentArchiving
|
|
279 |
return $this->segmentListCache->fetch('all');
|
280 |
}
|
281 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
private function isSegmentForSite($segment, $idSite)
|
283 |
{
|
284 |
return $segment['enable_only_idsite'] == 0
|
279 |
return $this->segmentListCache->fetch('all');
|
280 |
}
|
281 |
|
282 |
+
public function getAllSegmentsToArchive($idSite)
|
283 |
+
{
|
284 |
+
$segments = [];
|
285 |
+
foreach ($this->getAllSegments() as $segment) {
|
286 |
+
if (!$this->isAutoArchivingEnabledFor($segment)
|
287 |
+
|| !$this->isSegmentForSite($segment, $idSite)
|
288 |
+
) {
|
289 |
+
continue;
|
290 |
+
}
|
291 |
+
|
292 |
+
$segments[] = $segment;
|
293 |
+
}
|
294 |
+
return $segments;
|
295 |
+
}
|
296 |
+
|
297 |
private function isSegmentForSite($segment, $idSite)
|
298 |
{
|
299 |
return $segment['enable_only_idsite'] == 0
|
app/core/DataAccess/Model.php
CHANGED
@@ -705,19 +705,21 @@ class Model
|
|
705 |
/**
|
706 |
* Gets the next invalidated archive that should be archived in a table.
|
707 |
*
|
708 |
-
* @param
|
709 |
-
* @param
|
|
|
710 |
* @param bool $useLimit Whether to limit the result set to one result or not. Used in tests only.
|
711 |
*/
|
712 |
-
public function getNextInvalidatedArchive($idSite, $idInvalidationsToExclude = null, $useLimit = true)
|
713 |
{
|
714 |
$table = Common::prefixTable('archive_invalidations');
|
715 |
$sql = "SELECT idinvalidation, idarchive, idsite, date1, date2, period, `name`, report
|
716 |
FROM `$table`
|
717 |
-
WHERE idsite = ? AND status != ?";
|
718 |
$bind = [
|
719 |
$idSite,
|
720 |
ArchiveInvalidator::INVALIDATION_STATUS_IN_PROGRESS,
|
|
|
721 |
];
|
722 |
|
723 |
if (!empty($idInvalidationsToExclude)) {
|
705 |
/**
|
706 |
* Gets the next invalidated archive that should be archived in a table.
|
707 |
*
|
708 |
+
* @param int $idSite
|
709 |
+
* @param string $archivingStartTime
|
710 |
+
* @param int[]|null $idInvalidationsToExclude
|
711 |
* @param bool $useLimit Whether to limit the result set to one result or not. Used in tests only.
|
712 |
*/
|
713 |
+
public function getNextInvalidatedArchive($idSite, $archivingStartTime, $idInvalidationsToExclude = null, $useLimit = true)
|
714 |
{
|
715 |
$table = Common::prefixTable('archive_invalidations');
|
716 |
$sql = "SELECT idinvalidation, idarchive, idsite, date1, date2, period, `name`, report
|
717 |
FROM `$table`
|
718 |
+
WHERE idsite = ? AND status != ? AND ts_invalidated <= ?";
|
719 |
$bind = [
|
720 |
$idSite,
|
721 |
ArchiveInvalidator::INVALIDATION_STATUS_IN_PROGRESS,
|
722 |
+
$archivingStartTime,
|
723 |
];
|
724 |
|
725 |
if (!empty($idInvalidationsToExclude)) {
|
app/core/Version.php
CHANGED
@@ -20,7 +20,7 @@ final class Version
|
|
20 |
* The current Matomo version.
|
21 |
* @var string
|
22 |
*/
|
23 |
-
const VERSION = '4.0.
|
24 |
const MAJOR_VERSION = 4;
|
25 |
|
26 |
public function isStableVersion($version)
|
20 |
* The current Matomo version.
|
21 |
* @var string
|
22 |
*/
|
23 |
+
const VERSION = '4.0.4-b1';
|
24 |
const MAJOR_VERSION = 4;
|
25 |
|
26 |
public function isStableVersion($version)
|
app/js/piwik.min.js
CHANGED
@@ -54,16 +54,16 @@ this.requests=[];if(di.length===1){bH(di[0],bL)}else{de(di,bL)}},canQueue:functi
|
|
54 |
};this.setTrackerUrl=function(di){aE=di};this.getTrackerUrl=function(){return aE};this.getMatomoUrl=function(){return W(this.getTrackerUrl(),bJ)};this.getPiwikUrl=function(){return this.getMatomoUrl()};this.addTracker=function(dk,dj){if(!J(dk)||null===dk){dk=this.getTrackerUrl()}var di=new P(dk,dj);I.push(di);t.trigger("TrackerAdded",[this]);return di};this.getSiteId=function(){return b7};this.setSiteId=function(di){b4(di)};this.resetUserId=function(){bA=""};this.setUserId=function(di){if(Y(di)){bA=di}};this.setVisitorId=function(dj){var di=/[0-9A-Fa-f]{16}/g;if(w(dj)&&di.test(dj)){bP=dj}else{ak("Invalid visitorId set"+dj)}};this.getUserId=function(){return bA};this.setCustomData=function(di,dj){if(V(di)){ao=di}else{if(!ao){ao={}}ao[di]=dj}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(di){cc=di};this.appendToTrackingUrl=function(di){cZ=di};this.getRequest=function(di){return cr(di)};this.addPlugin=function(di,dj){b[di]=dj};this.setCustomDimension=function(di,dj){di=parseInt(di,10);
|
55 |
if(di>0){if(!J(dj)){dj=""}if(!w(dj)){dj=String(dj)}bo[di]=dj}};this.getCustomDimension=function(di){di=parseInt(di,10);if(di>0&&Object.prototype.hasOwnProperty.call(bo,di)){return bo[di]}};this.deleteCustomDimension=function(di){di=parseInt(di,10);if(di>0){delete bo[di]}};this.setCustomVariable=function(dj,di,dm,dk){var dl;if(!J(dk)){dk="visit"}if(!J(di)){return}if(!J(dm)){dm=""}if(dj>0){di=!w(di)?String(di):di;dm=!w(dm)?String(dm):dm;dl=[di.slice(0,bv),dm.slice(0,bv)];if(dk==="visit"||dk===2){cF();aR[dj]=dl}else{if(dk==="page"||dk===3){bX[dj]=dl}else{if(dk==="event"){cm[dj]=dl}}}}};this.getCustomVariable=function(dj,dk){var di;if(!J(dk)){dk="visit"}if(dk==="page"||dk===3){di=bX[dj]}else{if(dk==="event"){di=cm[dj]}else{if(dk==="visit"||dk===2){cF();di=aR[dj]}}}if(!J(di)||(di&&di[0]==="")){return false}return di};this.deleteCustomVariable=function(di,dj){if(this.getCustomVariable(di,dj)){this.setCustomVariable(di,"","",dj)}};this.deleteCustomVariables=function(di){if(di==="page"||di===3){bX={}
|
56 |
}else{if(di==="event"){cm={}}else{if(di==="visit"||di===2){aR={}}}}};this.storeCustomVariablesInCookie=function(){bR=true};this.setLinkTrackingTimer=function(di){bL=di};this.getLinkTrackingTimer=function(){return bL};this.setDownloadExtensions=function(di){if(w(di)){di=di.split("|")}c6=di};this.addDownloadExtensions=function(dj){var di;if(w(dj)){dj=dj.split("|")}for(di=0;di<dj.length;di++){c6.push(dj[di])}};this.removeDownloadExtensions=function(dk){var dj,di=[];if(w(dk)){dk=dk.split("|")}for(dj=0;dj<c6.length;dj++){if(M(dk,c6[dj])===-1){di.push(c6[dj])}}c6=di};this.setDomains=function(di){ay=w(di)?[di]:di;var dm=false,dk=0,dj;for(dk;dk<ay.length;dk++){dj=String(ay[dk]);if(cH(cU,L(dj))){dm=true;break}var dl=cl(dj);if(dl&&dl!=="/"&&dl!=="/*"){dm=true;break}}if(!dm){ay.push(cU)}};this.enableCrossDomainLinking=function(){cN=true};this.disableCrossDomainLinking=function(){cN=false};this.isCrossDomainLinkingEnabled=function(){return cN};this.setCrossDomainLinkingTimeout=function(di){a0=di};this.getCrossDomainLinkingUrlParameter=function(){return s(av)+"="+s(bt())
|
57 |
-
};this.setIgnoreClasses=function(di){bB=w(di)?[di]:di};this.setRequestMethod=function(di){c9=di
|
58 |
-
if(di===0){return null}return di};this.setCookiePath=function(di){br=di;bj()};this.getCookiePath=function(di){return br};this.setVisitorCookieTimeout=function(di){cK=di*1000};this.setSessionCookieTimeout=function(di){cn=di*1000};this.getSessionCookieTimeout=function(){return cn};this.setReferralCookieTimeout=function(di){c5=di*1000};this.setConversionAttributionFirstReferrer=function(di){bx=di};this.setSecureCookie=function(di){if(di&&location.protocol!=="https:"){ak("Error in setSecureCookie: You cannot use `Secure` on http.");return}bT=di};this.setCookieSameSite=function(di){di=String(di);di=di.charAt(0).toUpperCase()+di.toLowerCase().slice(1);if(di!=="None"&&di!=="Lax"&&di!=="Strict"){ak("Ignored value for sameSite. Please use either Lax, None, or Strict.");
|
59 |
-
};this.setCookieConsentGiven=function(){if(bn&&!cQ){bn=false;if(b7&&aw){aN();var di=cr("ping=1",null,"ping");bH(di,bL)}}};this.requireCookieConsent=function(){if(this.getRememberedCookieConsent()){return false}this.disableCookies();return true};this.getRememberedCookieConsent=function(){return aD(cD)};this.forgetCookieConsentGiven=function(){bZ(cD,br,cX);this.disableCookies()};this.rememberCookieConsentGiven=function(dj){if(dj){dj=dj*60*60*1000}else{dj=30*365*24*60*60*1000}this.setCookieConsentGiven();var di=new Date().getTime();dd(cD,di,dj,br,cX,bT,aJ)};this.deleteCookies=function(){aF()};this.setDoNotTrack=function(dj){var di=g.doNotTrack||g.msDoNotTrack;cQ=dj&&(di==="yes"||di==="1");if(cQ){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cW=true
|
60 |
-
}cS=true;var di=S.onerror;S.onerror=function(dn,dl,dk,dm,dj){ch(function(){var dp="JavaScript Errors";var dq=dl+":"+dk;if(dm){dq+=":"+dm}at(dp,dq,dn)});if(di){return di(dn,dl,dk,dm,dj)}return false}};this.disablePerformanceTracking=function(){a3=false};this.enableHeartBeatTimer=function(di){di=Math.max(di||15,5);a6=di*1000;if(cY!==null){df()}};this.disableHeartBeatTimer=function(){if(a6||aO){if(S.removeEventListener){S.removeEventListener("focus",bb);S.removeEventListener("blur",az)}else{if(S.detachEvent){S.detachEvent("onfocus",bb);S.detachEvent("onblur",az)}}}a6=null;aO=false};this.killFrame=function(){if(S.location!==S.top.location){S.top.location=S.location}};this.redirectFile=function(di){if(S.location.protocol==="file:"){S.location=di
|
61 |
-
cL=[];if(N(b7)){ch(function(){Z(aE,bJ,b7)})}else{ch(function(){cq++;b1(di,dk,dj)})}};this.trackAllContentImpressions=function(){if(N(b7)){return}ch(function(){p(function(){var di=v.findContentNodes();var dj=cz(di);bE.pushMultiple(dj)})})};this.trackVisibleContentImpressions=function(di,dj){if(N(b7)){return}if(!J(di)){di=true}if(!J(dj)){dj=750}aT(di,dj,this);ch(function(){m(function(){var dk=v.findContentNodes();var dl=ba(dk);bE.pushMultiple(dl)})})};this.trackContentImpression=function(dk,di,dj){if(N(b7)){return}dk=a(dk);di=a(di);dj=a(dj);if(!dk){return}di=di||"Unknown";ch(function(){var dl=aG(dk,di,dj);bE.push(dl)})};this.trackContentImpressionsWithinNode=function(di){if(N(b7)||!di){return}ch(function(){if(cf){m(function(){var dj=v.findContentNodesWithinNode(di);
|
62 |
-
dj=a(dj);if(!dk||!dl){return}di=di||"Unknown";ch(function(){var dm=aQ(dk,dl,di,dj);if(dm){bE.push(dm)}})};this.trackContentInteractionNode=function(dk,dj){if(N(b7)||!dk){return}var di=null;ch(function(){di=da(dk,dj);if(di){bE.push(di)}});return di};this.logAllContentBlocksOnPage=function(){var dk=v.findContentNodes();var di=v.collectContent(dk);var dj=typeof console;if(dj!=="undefined"&&console&&console.log){console.log(di)}};this.trackEvent=function(dj,dl,di,dk,dn,dm){ch(function(){at(dj,dl,di,dk,dn,dm)})};this.trackSiteSearch=function(di,dk,dj,dl){cb=[];ch(function(){b9(di,dk,dj,dl)})};this.setEcommerceView=function(dm,di,dk,dj){cs={};if(Y(dk)){dk=String(dk)}if(!J(dk)||dk===null||dk===false||!dk.length){dk=""}else{if(dk instanceof Array){dk=S.JSON.stringify(dk)
|
63 |
-
};this.addEcommerceItem=function(dm,di,dk,dj,dl){if(Y(dm)){c0[dm]=[String(dm),di,dk,dj,dl]}};this.removeEcommerceItem=function(di){if(Y(di)){di=String(di);delete c0[di]}};this.clearEcommerceCart=function(){c0={}};this.trackEcommerceOrder=function(di,dm,dl,dk,dj,dn){b0(di,dm,dl,dk,dj,dn)};this.trackEcommerceCartUpdate=function(di){bu(di)};this.trackRequest=function(dj,dl,dk,di){ch(function(){var dm=cr(dj,dl,di);bH(dm,bL,dk)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bE.enabled=false};this.setRequestQueueInterval=function(di){if(di<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bE.interval=di};this.queueRequest=function(di){ch(function(){var dj=cr(di);
|
64 |
-
};this.requireConsent=function(){cA=true;bD=this.hasRememberedConsent();if(!bD){bn=true}x++;b["CoreConsent"+x]={unload:function(){if(!bD){aF()}}}};this.setConsentGiven=function(dj){bD=true;bZ(cM,br,cX);var dk,di;for(dk=0;dk<cL.length;dk++){di=typeof cL[dk];if(di==="string"){bH(cL[dk],bL)}else{if(di==="object"){de(cL[dk],bL)}}}cL=[];if(!J(dj)||dj){this.setCookieConsentGiven()}};this.rememberConsentGiven=function(dk){if(dk){dk=dk*60*60*1000}else{dk=30*365*24*60*60*1000}var di=true;this.setConsentGiven(di);var dj=new Date().getTime();dd(be,dj,dk,br,cX,bT,aJ)};this.forgetConsentGiven=function(){var di=30*365*24*60*60*1000;bZ(be,br,cX);dd(cM,new Date().getTime(),di,br,cX,bT,aJ);this.forgetCookieConsentGiven();this.requireConsent()
|
65 |
-
var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Matomo trackers documentation: https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","forgetCookieConsentGiven","requireCookieConsent","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking"];
|
66 |
-
I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)&&J(g.serviceWorker.ready)){g.serviceWorker.ready.then(function(ao){return ao.sync.register("matomoSync")})}},false);an(S,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getMatomoUrl());if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
54 |
};this.setTrackerUrl=function(di){aE=di};this.getTrackerUrl=function(){return aE};this.getMatomoUrl=function(){return W(this.getTrackerUrl(),bJ)};this.getPiwikUrl=function(){return this.getMatomoUrl()};this.addTracker=function(dk,dj){if(!J(dk)||null===dk){dk=this.getTrackerUrl()}var di=new P(dk,dj);I.push(di);t.trigger("TrackerAdded",[this]);return di};this.getSiteId=function(){return b7};this.setSiteId=function(di){b4(di)};this.resetUserId=function(){bA=""};this.setUserId=function(di){if(Y(di)){bA=di}};this.setVisitorId=function(dj){var di=/[0-9A-Fa-f]{16}/g;if(w(dj)&&di.test(dj)){bP=dj}else{ak("Invalid visitorId set"+dj)}};this.getUserId=function(){return bA};this.setCustomData=function(di,dj){if(V(di)){ao=di}else{if(!ao){ao={}}ao[di]=dj}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(di){cc=di};this.appendToTrackingUrl=function(di){cZ=di};this.getRequest=function(di){return cr(di)};this.addPlugin=function(di,dj){b[di]=dj};this.setCustomDimension=function(di,dj){di=parseInt(di,10);
|
55 |
if(di>0){if(!J(dj)){dj=""}if(!w(dj)){dj=String(dj)}bo[di]=dj}};this.getCustomDimension=function(di){di=parseInt(di,10);if(di>0&&Object.prototype.hasOwnProperty.call(bo,di)){return bo[di]}};this.deleteCustomDimension=function(di){di=parseInt(di,10);if(di>0){delete bo[di]}};this.setCustomVariable=function(dj,di,dm,dk){var dl;if(!J(dk)){dk="visit"}if(!J(di)){return}if(!J(dm)){dm=""}if(dj>0){di=!w(di)?String(di):di;dm=!w(dm)?String(dm):dm;dl=[di.slice(0,bv),dm.slice(0,bv)];if(dk==="visit"||dk===2){cF();aR[dj]=dl}else{if(dk==="page"||dk===3){bX[dj]=dl}else{if(dk==="event"){cm[dj]=dl}}}}};this.getCustomVariable=function(dj,dk){var di;if(!J(dk)){dk="visit"}if(dk==="page"||dk===3){di=bX[dj]}else{if(dk==="event"){di=cm[dj]}else{if(dk==="visit"||dk===2){cF();di=aR[dj]}}}if(!J(di)||(di&&di[0]==="")){return false}return di};this.deleteCustomVariable=function(di,dj){if(this.getCustomVariable(di,dj)){this.setCustomVariable(di,"","",dj)}};this.deleteCustomVariables=function(di){if(di==="page"||di===3){bX={}
|
56 |
}else{if(di==="event"){cm={}}else{if(di==="visit"||di===2){aR={}}}}};this.storeCustomVariablesInCookie=function(){bR=true};this.setLinkTrackingTimer=function(di){bL=di};this.getLinkTrackingTimer=function(){return bL};this.setDownloadExtensions=function(di){if(w(di)){di=di.split("|")}c6=di};this.addDownloadExtensions=function(dj){var di;if(w(dj)){dj=dj.split("|")}for(di=0;di<dj.length;di++){c6.push(dj[di])}};this.removeDownloadExtensions=function(dk){var dj,di=[];if(w(dk)){dk=dk.split("|")}for(dj=0;dj<c6.length;dj++){if(M(dk,c6[dj])===-1){di.push(c6[dj])}}c6=di};this.setDomains=function(di){ay=w(di)?[di]:di;var dm=false,dk=0,dj;for(dk;dk<ay.length;dk++){dj=String(ay[dk]);if(cH(cU,L(dj))){dm=true;break}var dl=cl(dj);if(dl&&dl!=="/"&&dl!=="/*"){dm=true;break}}if(!dm){ay.push(cU)}};this.enableCrossDomainLinking=function(){cN=true};this.disableCrossDomainLinking=function(){cN=false};this.isCrossDomainLinkingEnabled=function(){return cN};this.setCrossDomainLinkingTimeout=function(di){a0=di};this.getCrossDomainLinkingUrlParameter=function(){return s(av)+"="+s(bt())
|
57 |
+
};this.setIgnoreClasses=function(di){bB=w(di)?[di]:di};this.setRequestMethod=function(di){if(di){c9=String(di).toUpperCase()}else{c9=ci}if(c9==="GET"){this.disableAlwaysUseSendBeacon()}};this.setRequestContentType=function(di){cw=di||aI};this.setGenerationTimeMs=function(di){ak("setGenerationTimeMs is no longer supported since Matomo 4. The call will be ignored. There is currently no replacement yet.")};this.setReferrerUrl=function(di){bp=di};this.setCustomUrl=function(di){a5=bW(bO,di)};this.getCurrentUrl=function(){return a5||bO};this.setDocumentTitle=function(di){bk=di};this.setAPIUrl=function(di){bJ=di};this.setDownloadClasses=function(di){bM=w(di)?[di]:di};this.setLinkClasses=function(di){a9=w(di)?[di]:di};this.setCampaignNameKey=function(di){cp=w(di)?[di]:di};this.setCampaignKeywordKey=function(di){bI=w(di)?[di]:di};this.discardHashTag=function(di){bQ=di};this.setCookieNamePrefix=function(di){bl=di;if(aR){aR=bY()}};this.setCookieDomain=function(di){var dj=L(di);if(by(dj)){cX=dj;bj()
|
58 |
+
}};this.getCookieDomain=function(){return cX};this.hasCookies=function(){return"1"===b6()};this.setSessionCookie=function(dk,dj,di){if(!dk){throw new Error("Missing cookie name")}if(!J(di)){di=cn}bw.push(dk);dd(aU(dk),dj,di,br,cX,bT,aJ)};this.getCookie=function(dj){var di=aD(aU(dj));if(di===0){return null}return di};this.setCookiePath=function(di){br=di;bj()};this.getCookiePath=function(di){return br};this.setVisitorCookieTimeout=function(di){cK=di*1000};this.setSessionCookieTimeout=function(di){cn=di*1000};this.getSessionCookieTimeout=function(){return cn};this.setReferralCookieTimeout=function(di){c5=di*1000};this.setConversionAttributionFirstReferrer=function(di){bx=di};this.setSecureCookie=function(di){if(di&&location.protocol!=="https:"){ak("Error in setSecureCookie: You cannot use `Secure` on http.");return}bT=di};this.setCookieSameSite=function(di){di=String(di);di=di.charAt(0).toUpperCase()+di.toLowerCase().slice(1);if(di!=="None"&&di!=="Lax"&&di!=="Strict"){ak("Ignored value for sameSite. Please use either Lax, None, or Strict.");
|
59 |
+
return}if(di==="None"){if(location.protocol==="https:"){this.setSecureCookie(true)}else{ak("sameSite=None cannot be used on http, reverted to sameSite=Lax.");di="Lax"}}aJ=di};this.disableCookies=function(){bn=true;if(b7){aF()}};this.areCookiesEnabled=function(){return !bn};this.setCookieConsentGiven=function(){if(bn&&!cQ){bn=false;if(b7&&aw){aN();var di=cr("ping=1",null,"ping");bH(di,bL)}}};this.requireCookieConsent=function(){if(this.getRememberedCookieConsent()){return false}this.disableCookies();return true};this.getRememberedCookieConsent=function(){return aD(cD)};this.forgetCookieConsentGiven=function(){bZ(cD,br,cX);this.disableCookies()};this.rememberCookieConsentGiven=function(dj){if(dj){dj=dj*60*60*1000}else{dj=30*365*24*60*60*1000}this.setCookieConsentGiven();var di=new Date().getTime();dd(cD,di,dj,br,cX,bT,aJ)};this.deleteCookies=function(){aF()};this.setDoNotTrack=function(dj){var di=g.doNotTrack||g.msDoNotTrack;cQ=dj&&(di==="yes"||di==="1");if(cQ){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cW=true
|
60 |
+
};this.disableAlwaysUseSendBeacon=function(){cW=false};this.addListener=function(dj,di){aq(dj,di)};this.enableLinkTracking=function(dj){c8=true;var di=this;ch(function(){p(function(){bF(dj,di)});m(function(){bF(dj,di)})})};this.enableJSErrorTracking=function(){if(cS){return}cS=true;var di=S.onerror;S.onerror=function(dn,dl,dk,dm,dj){ch(function(){var dp="JavaScript Errors";var dq=dl+":"+dk;if(dm){dq+=":"+dm}at(dp,dq,dn)});if(di){return di(dn,dl,dk,dm,dj)}return false}};this.disablePerformanceTracking=function(){a3=false};this.enableHeartBeatTimer=function(di){di=Math.max(di||15,5);a6=di*1000;if(cY!==null){df()}};this.disableHeartBeatTimer=function(){if(a6||aO){if(S.removeEventListener){S.removeEventListener("focus",bb);S.removeEventListener("blur",az)}else{if(S.detachEvent){S.detachEvent("onfocus",bb);S.detachEvent("onblur",az)}}}a6=null;aO=false};this.killFrame=function(){if(S.location!==S.top.location){S.top.location=S.location}};this.redirectFile=function(di){if(S.location.protocol==="file:"){S.location=di
|
61 |
+
}};this.setCountPreRendered=function(di){bf=di};this.trackGoal=function(di,dl,dk,dj){ch(function(){cT(di,dl,dk,dj)})};this.trackLink=function(dj,di,dl,dk){ch(function(){c1(dj,di,dl,dk)})};this.getNumTrackedPageViews=function(){return cq};this.trackPageView=function(di,dk,dj){cb=[];cL=[];if(N(b7)){ch(function(){Z(aE,bJ,b7)})}else{ch(function(){cq++;b1(di,dk,dj)})}};this.trackAllContentImpressions=function(){if(N(b7)){return}ch(function(){p(function(){var di=v.findContentNodes();var dj=cz(di);bE.pushMultiple(dj)})})};this.trackVisibleContentImpressions=function(di,dj){if(N(b7)){return}if(!J(di)){di=true}if(!J(dj)){dj=750}aT(di,dj,this);ch(function(){m(function(){var dk=v.findContentNodes();var dl=ba(dk);bE.pushMultiple(dl)})})};this.trackContentImpression=function(dk,di,dj){if(N(b7)){return}dk=a(dk);di=a(di);dj=a(dj);if(!dk){return}di=di||"Unknown";ch(function(){var dl=aG(dk,di,dj);bE.push(dl)})};this.trackContentImpressionsWithinNode=function(di){if(N(b7)||!di){return}ch(function(){if(cf){m(function(){var dj=v.findContentNodesWithinNode(di);
|
62 |
+
var dk=ba(dj);bE.pushMultiple(dk)})}else{p(function(){var dj=v.findContentNodesWithinNode(di);var dk=cz(dj);bE.pushMultiple(dk)})}})};this.trackContentInteraction=function(dk,dl,di,dj){if(N(b7)){return}dk=a(dk);dl=a(dl);di=a(di);dj=a(dj);if(!dk||!dl){return}di=di||"Unknown";ch(function(){var dm=aQ(dk,dl,di,dj);if(dm){bE.push(dm)}})};this.trackContentInteractionNode=function(dk,dj){if(N(b7)||!dk){return}var di=null;ch(function(){di=da(dk,dj);if(di){bE.push(di)}});return di};this.logAllContentBlocksOnPage=function(){var dk=v.findContentNodes();var di=v.collectContent(dk);var dj=typeof console;if(dj!=="undefined"&&console&&console.log){console.log(di)}};this.trackEvent=function(dj,dl,di,dk,dn,dm){ch(function(){at(dj,dl,di,dk,dn,dm)})};this.trackSiteSearch=function(di,dk,dj,dl){cb=[];ch(function(){b9(di,dk,dj,dl)})};this.setEcommerceView=function(dm,di,dk,dj){cs={};if(Y(dk)){dk=String(dk)}if(!J(dk)||dk===null||dk===false||!dk.length){dk=""}else{if(dk instanceof Array){dk=S.JSON.stringify(dk)
|
63 |
+
}}var dl="_pkc";cs[dl]=dk;if(J(dj)&&dj!==null&&dj!==false&&String(dj).length){dl="_pkp";cs[dl]=dj}if(!Y(dm)&&!Y(di)){return}if(Y(dm)){dl="_pks";cs[dl]=dm}if(!Y(di)){di=""}dl="_pkn";cs[dl]=di};this.getEcommerceItems=function(){return JSON.parse(JSON.stringify(c0))};this.addEcommerceItem=function(dm,di,dk,dj,dl){if(Y(dm)){c0[dm]=[String(dm),di,dk,dj,dl]}};this.removeEcommerceItem=function(di){if(Y(di)){di=String(di);delete c0[di]}};this.clearEcommerceCart=function(){c0={}};this.trackEcommerceOrder=function(di,dm,dl,dk,dj,dn){b0(di,dm,dl,dk,dj,dn)};this.trackEcommerceCartUpdate=function(di){bu(di)};this.trackRequest=function(dj,dl,dk,di){ch(function(){var dm=cr(dj,dl,di);bH(dm,bL,dk)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bE.enabled=false};this.setRequestQueueInterval=function(di){if(di<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bE.interval=di};this.queueRequest=function(di){ch(function(){var dj=cr(di);
|
64 |
+
bE.push(dj)})};this.isConsentRequired=function(){return cA};this.getRememberedConsent=function(){var di=aD(be);if(aD(cM)){if(di){bZ(be,br,cX)}return null}if(!di||di===0){return null}return di};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()};this.requireConsent=function(){cA=true;bD=this.hasRememberedConsent();if(!bD){bn=true}x++;b["CoreConsent"+x]={unload:function(){if(!bD){aF()}}}};this.setConsentGiven=function(dj){bD=true;bZ(cM,br,cX);var dk,di;for(dk=0;dk<cL.length;dk++){di=typeof cL[dk];if(di==="string"){bH(cL[dk],bL)}else{if(di==="object"){de(cL[dk],bL)}}}cL=[];if(!J(dj)||dj){this.setCookieConsentGiven()}};this.rememberConsentGiven=function(dk){if(dk){dk=dk*60*60*1000}else{dk=30*365*24*60*60*1000}var di=true;this.setConsentGiven(di);var dj=new Date().getTime();dd(be,dj,dk,br,cX,bT,aJ)};this.forgetConsentGiven=function(){var di=30*365*24*60*60*1000;bZ(be,br,cX);dd(cM,new Date().getTime(),di,br,cX,bT,aJ);this.forgetCookieConsentGiven();this.requireConsent()
|
65 |
+
};this.isUserOptedOut=function(){return !bD};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=function(){this.setConsentGiven(false)};m(function(){setTimeout(function(){bG=true},0)});t.trigger("TrackerSetup",[this])}function H(){return{push:af}}function c(au,at){var av={};var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Matomo trackers documentation: https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","forgetCookieConsentGiven","requireCookieConsent","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking"];
|
66 |
+
function ad(aq,ap){var ao=new P(aq,ap);I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)&&J(g.serviceWorker.ready)){g.serviceWorker.ready.then(function(ao){return ao.sync.register("matomoSync")})}},false);an(S,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getMatomoUrl());if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
app/matomo.js
CHANGED
@@ -54,16 +54,16 @@ this.requests=[];if(di.length===1){bH(di[0],bL)}else{de(di,bL)}},canQueue:functi
|
|
54 |
};this.setTrackerUrl=function(di){aE=di};this.getTrackerUrl=function(){return aE};this.getMatomoUrl=function(){return W(this.getTrackerUrl(),bJ)};this.getPiwikUrl=function(){return this.getMatomoUrl()};this.addTracker=function(dk,dj){if(!J(dk)||null===dk){dk=this.getTrackerUrl()}var di=new P(dk,dj);I.push(di);t.trigger("TrackerAdded",[this]);return di};this.getSiteId=function(){return b7};this.setSiteId=function(di){b4(di)};this.resetUserId=function(){bA=""};this.setUserId=function(di){if(Y(di)){bA=di}};this.setVisitorId=function(dj){var di=/[0-9A-Fa-f]{16}/g;if(w(dj)&&di.test(dj)){bP=dj}else{ak("Invalid visitorId set"+dj)}};this.getUserId=function(){return bA};this.setCustomData=function(di,dj){if(V(di)){ao=di}else{if(!ao){ao={}}ao[di]=dj}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(di){cc=di};this.appendToTrackingUrl=function(di){cZ=di};this.getRequest=function(di){return cr(di)};this.addPlugin=function(di,dj){b[di]=dj};this.setCustomDimension=function(di,dj){di=parseInt(di,10);
|
55 |
if(di>0){if(!J(dj)){dj=""}if(!w(dj)){dj=String(dj)}bo[di]=dj}};this.getCustomDimension=function(di){di=parseInt(di,10);if(di>0&&Object.prototype.hasOwnProperty.call(bo,di)){return bo[di]}};this.deleteCustomDimension=function(di){di=parseInt(di,10);if(di>0){delete bo[di]}};this.setCustomVariable=function(dj,di,dm,dk){var dl;if(!J(dk)){dk="visit"}if(!J(di)){return}if(!J(dm)){dm=""}if(dj>0){di=!w(di)?String(di):di;dm=!w(dm)?String(dm):dm;dl=[di.slice(0,bv),dm.slice(0,bv)];if(dk==="visit"||dk===2){cF();aR[dj]=dl}else{if(dk==="page"||dk===3){bX[dj]=dl}else{if(dk==="event"){cm[dj]=dl}}}}};this.getCustomVariable=function(dj,dk){var di;if(!J(dk)){dk="visit"}if(dk==="page"||dk===3){di=bX[dj]}else{if(dk==="event"){di=cm[dj]}else{if(dk==="visit"||dk===2){cF();di=aR[dj]}}}if(!J(di)||(di&&di[0]==="")){return false}return di};this.deleteCustomVariable=function(di,dj){if(this.getCustomVariable(di,dj)){this.setCustomVariable(di,"","",dj)}};this.deleteCustomVariables=function(di){if(di==="page"||di===3){bX={}
|
56 |
}else{if(di==="event"){cm={}}else{if(di==="visit"||di===2){aR={}}}}};this.storeCustomVariablesInCookie=function(){bR=true};this.setLinkTrackingTimer=function(di){bL=di};this.getLinkTrackingTimer=function(){return bL};this.setDownloadExtensions=function(di){if(w(di)){di=di.split("|")}c6=di};this.addDownloadExtensions=function(dj){var di;if(w(dj)){dj=dj.split("|")}for(di=0;di<dj.length;di++){c6.push(dj[di])}};this.removeDownloadExtensions=function(dk){var dj,di=[];if(w(dk)){dk=dk.split("|")}for(dj=0;dj<c6.length;dj++){if(M(dk,c6[dj])===-1){di.push(c6[dj])}}c6=di};this.setDomains=function(di){ay=w(di)?[di]:di;var dm=false,dk=0,dj;for(dk;dk<ay.length;dk++){dj=String(ay[dk]);if(cH(cU,L(dj))){dm=true;break}var dl=cl(dj);if(dl&&dl!=="/"&&dl!=="/*"){dm=true;break}}if(!dm){ay.push(cU)}};this.enableCrossDomainLinking=function(){cN=true};this.disableCrossDomainLinking=function(){cN=false};this.isCrossDomainLinkingEnabled=function(){return cN};this.setCrossDomainLinkingTimeout=function(di){a0=di};this.getCrossDomainLinkingUrlParameter=function(){return s(av)+"="+s(bt())
|
57 |
-
};this.setIgnoreClasses=function(di){bB=w(di)?[di]:di};this.setRequestMethod=function(di){c9=di
|
58 |
-
if(di===0){return null}return di};this.setCookiePath=function(di){br=di;bj()};this.getCookiePath=function(di){return br};this.setVisitorCookieTimeout=function(di){cK=di*1000};this.setSessionCookieTimeout=function(di){cn=di*1000};this.getSessionCookieTimeout=function(){return cn};this.setReferralCookieTimeout=function(di){c5=di*1000};this.setConversionAttributionFirstReferrer=function(di){bx=di};this.setSecureCookie=function(di){if(di&&location.protocol!=="https:"){ak("Error in setSecureCookie: You cannot use `Secure` on http.");return}bT=di};this.setCookieSameSite=function(di){di=String(di);di=di.charAt(0).toUpperCase()+di.toLowerCase().slice(1);if(di!=="None"&&di!=="Lax"&&di!=="Strict"){ak("Ignored value for sameSite. Please use either Lax, None, or Strict.");
|
59 |
-
};this.setCookieConsentGiven=function(){if(bn&&!cQ){bn=false;if(b7&&aw){aN();var di=cr("ping=1",null,"ping");bH(di,bL)}}};this.requireCookieConsent=function(){if(this.getRememberedCookieConsent()){return false}this.disableCookies();return true};this.getRememberedCookieConsent=function(){return aD(cD)};this.forgetCookieConsentGiven=function(){bZ(cD,br,cX);this.disableCookies()};this.rememberCookieConsentGiven=function(dj){if(dj){dj=dj*60*60*1000}else{dj=30*365*24*60*60*1000}this.setCookieConsentGiven();var di=new Date().getTime();dd(cD,di,dj,br,cX,bT,aJ)};this.deleteCookies=function(){aF()};this.setDoNotTrack=function(dj){var di=g.doNotTrack||g.msDoNotTrack;cQ=dj&&(di==="yes"||di==="1");if(cQ){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cW=true
|
60 |
-
}cS=true;var di=S.onerror;S.onerror=function(dn,dl,dk,dm,dj){ch(function(){var dp="JavaScript Errors";var dq=dl+":"+dk;if(dm){dq+=":"+dm}at(dp,dq,dn)});if(di){return di(dn,dl,dk,dm,dj)}return false}};this.disablePerformanceTracking=function(){a3=false};this.enableHeartBeatTimer=function(di){di=Math.max(di||15,5);a6=di*1000;if(cY!==null){df()}};this.disableHeartBeatTimer=function(){if(a6||aO){if(S.removeEventListener){S.removeEventListener("focus",bb);S.removeEventListener("blur",az)}else{if(S.detachEvent){S.detachEvent("onfocus",bb);S.detachEvent("onblur",az)}}}a6=null;aO=false};this.killFrame=function(){if(S.location!==S.top.location){S.top.location=S.location}};this.redirectFile=function(di){if(S.location.protocol==="file:"){S.location=di
|
61 |
-
cL=[];if(N(b7)){ch(function(){Z(aE,bJ,b7)})}else{ch(function(){cq++;b1(di,dk,dj)})}};this.trackAllContentImpressions=function(){if(N(b7)){return}ch(function(){p(function(){var di=v.findContentNodes();var dj=cz(di);bE.pushMultiple(dj)})})};this.trackVisibleContentImpressions=function(di,dj){if(N(b7)){return}if(!J(di)){di=true}if(!J(dj)){dj=750}aT(di,dj,this);ch(function(){m(function(){var dk=v.findContentNodes();var dl=ba(dk);bE.pushMultiple(dl)})})};this.trackContentImpression=function(dk,di,dj){if(N(b7)){return}dk=a(dk);di=a(di);dj=a(dj);if(!dk){return}di=di||"Unknown";ch(function(){var dl=aG(dk,di,dj);bE.push(dl)})};this.trackContentImpressionsWithinNode=function(di){if(N(b7)||!di){return}ch(function(){if(cf){m(function(){var dj=v.findContentNodesWithinNode(di);
|
62 |
-
dj=a(dj);if(!dk||!dl){return}di=di||"Unknown";ch(function(){var dm=aQ(dk,dl,di,dj);if(dm){bE.push(dm)}})};this.trackContentInteractionNode=function(dk,dj){if(N(b7)||!dk){return}var di=null;ch(function(){di=da(dk,dj);if(di){bE.push(di)}});return di};this.logAllContentBlocksOnPage=function(){var dk=v.findContentNodes();var di=v.collectContent(dk);var dj=typeof console;if(dj!=="undefined"&&console&&console.log){console.log(di)}};this.trackEvent=function(dj,dl,di,dk,dn,dm){ch(function(){at(dj,dl,di,dk,dn,dm)})};this.trackSiteSearch=function(di,dk,dj,dl){cb=[];ch(function(){b9(di,dk,dj,dl)})};this.setEcommerceView=function(dm,di,dk,dj){cs={};if(Y(dk)){dk=String(dk)}if(!J(dk)||dk===null||dk===false||!dk.length){dk=""}else{if(dk instanceof Array){dk=S.JSON.stringify(dk)
|
63 |
-
};this.addEcommerceItem=function(dm,di,dk,dj,dl){if(Y(dm)){c0[dm]=[String(dm),di,dk,dj,dl]}};this.removeEcommerceItem=function(di){if(Y(di)){di=String(di);delete c0[di]}};this.clearEcommerceCart=function(){c0={}};this.trackEcommerceOrder=function(di,dm,dl,dk,dj,dn){b0(di,dm,dl,dk,dj,dn)};this.trackEcommerceCartUpdate=function(di){bu(di)};this.trackRequest=function(dj,dl,dk,di){ch(function(){var dm=cr(dj,dl,di);bH(dm,bL,dk)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bE.enabled=false};this.setRequestQueueInterval=function(di){if(di<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bE.interval=di};this.queueRequest=function(di){ch(function(){var dj=cr(di);
|
64 |
-
};this.requireConsent=function(){cA=true;bD=this.hasRememberedConsent();if(!bD){bn=true}x++;b["CoreConsent"+x]={unload:function(){if(!bD){aF()}}}};this.setConsentGiven=function(dj){bD=true;bZ(cM,br,cX);var dk,di;for(dk=0;dk<cL.length;dk++){di=typeof cL[dk];if(di==="string"){bH(cL[dk],bL)}else{if(di==="object"){de(cL[dk],bL)}}}cL=[];if(!J(dj)||dj){this.setCookieConsentGiven()}};this.rememberConsentGiven=function(dk){if(dk){dk=dk*60*60*1000}else{dk=30*365*24*60*60*1000}var di=true;this.setConsentGiven(di);var dj=new Date().getTime();dd(be,dj,dk,br,cX,bT,aJ)};this.forgetConsentGiven=function(){var di=30*365*24*60*60*1000;bZ(be,br,cX);dd(cM,new Date().getTime(),di,br,cX,bT,aJ);this.forgetCookieConsentGiven();this.requireConsent()
|
65 |
-
var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Matomo trackers documentation: https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","forgetCookieConsentGiven","requireCookieConsent","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking"];
|
66 |
-
I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)&&J(g.serviceWorker.ready)){g.serviceWorker.ready.then(function(ao){return ao.sync.register("matomoSync")})}},false);an(S,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getMatomoUrl());if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
54 |
};this.setTrackerUrl=function(di){aE=di};this.getTrackerUrl=function(){return aE};this.getMatomoUrl=function(){return W(this.getTrackerUrl(),bJ)};this.getPiwikUrl=function(){return this.getMatomoUrl()};this.addTracker=function(dk,dj){if(!J(dk)||null===dk){dk=this.getTrackerUrl()}var di=new P(dk,dj);I.push(di);t.trigger("TrackerAdded",[this]);return di};this.getSiteId=function(){return b7};this.setSiteId=function(di){b4(di)};this.resetUserId=function(){bA=""};this.setUserId=function(di){if(Y(di)){bA=di}};this.setVisitorId=function(dj){var di=/[0-9A-Fa-f]{16}/g;if(w(dj)&&di.test(dj)){bP=dj}else{ak("Invalid visitorId set"+dj)}};this.getUserId=function(){return bA};this.setCustomData=function(di,dj){if(V(di)){ao=di}else{if(!ao){ao={}}ao[di]=dj}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(di){cc=di};this.appendToTrackingUrl=function(di){cZ=di};this.getRequest=function(di){return cr(di)};this.addPlugin=function(di,dj){b[di]=dj};this.setCustomDimension=function(di,dj){di=parseInt(di,10);
|
55 |
if(di>0){if(!J(dj)){dj=""}if(!w(dj)){dj=String(dj)}bo[di]=dj}};this.getCustomDimension=function(di){di=parseInt(di,10);if(di>0&&Object.prototype.hasOwnProperty.call(bo,di)){return bo[di]}};this.deleteCustomDimension=function(di){di=parseInt(di,10);if(di>0){delete bo[di]}};this.setCustomVariable=function(dj,di,dm,dk){var dl;if(!J(dk)){dk="visit"}if(!J(di)){return}if(!J(dm)){dm=""}if(dj>0){di=!w(di)?String(di):di;dm=!w(dm)?String(dm):dm;dl=[di.slice(0,bv),dm.slice(0,bv)];if(dk==="visit"||dk===2){cF();aR[dj]=dl}else{if(dk==="page"||dk===3){bX[dj]=dl}else{if(dk==="event"){cm[dj]=dl}}}}};this.getCustomVariable=function(dj,dk){var di;if(!J(dk)){dk="visit"}if(dk==="page"||dk===3){di=bX[dj]}else{if(dk==="event"){di=cm[dj]}else{if(dk==="visit"||dk===2){cF();di=aR[dj]}}}if(!J(di)||(di&&di[0]==="")){return false}return di};this.deleteCustomVariable=function(di,dj){if(this.getCustomVariable(di,dj)){this.setCustomVariable(di,"","",dj)}};this.deleteCustomVariables=function(di){if(di==="page"||di===3){bX={}
|
56 |
}else{if(di==="event"){cm={}}else{if(di==="visit"||di===2){aR={}}}}};this.storeCustomVariablesInCookie=function(){bR=true};this.setLinkTrackingTimer=function(di){bL=di};this.getLinkTrackingTimer=function(){return bL};this.setDownloadExtensions=function(di){if(w(di)){di=di.split("|")}c6=di};this.addDownloadExtensions=function(dj){var di;if(w(dj)){dj=dj.split("|")}for(di=0;di<dj.length;di++){c6.push(dj[di])}};this.removeDownloadExtensions=function(dk){var dj,di=[];if(w(dk)){dk=dk.split("|")}for(dj=0;dj<c6.length;dj++){if(M(dk,c6[dj])===-1){di.push(c6[dj])}}c6=di};this.setDomains=function(di){ay=w(di)?[di]:di;var dm=false,dk=0,dj;for(dk;dk<ay.length;dk++){dj=String(ay[dk]);if(cH(cU,L(dj))){dm=true;break}var dl=cl(dj);if(dl&&dl!=="/"&&dl!=="/*"){dm=true;break}}if(!dm){ay.push(cU)}};this.enableCrossDomainLinking=function(){cN=true};this.disableCrossDomainLinking=function(){cN=false};this.isCrossDomainLinkingEnabled=function(){return cN};this.setCrossDomainLinkingTimeout=function(di){a0=di};this.getCrossDomainLinkingUrlParameter=function(){return s(av)+"="+s(bt())
|
57 |
+
};this.setIgnoreClasses=function(di){bB=w(di)?[di]:di};this.setRequestMethod=function(di){if(di){c9=String(di).toUpperCase()}else{c9=ci}if(c9==="GET"){this.disableAlwaysUseSendBeacon()}};this.setRequestContentType=function(di){cw=di||aI};this.setGenerationTimeMs=function(di){ak("setGenerationTimeMs is no longer supported since Matomo 4. The call will be ignored. There is currently no replacement yet.")};this.setReferrerUrl=function(di){bp=di};this.setCustomUrl=function(di){a5=bW(bO,di)};this.getCurrentUrl=function(){return a5||bO};this.setDocumentTitle=function(di){bk=di};this.setAPIUrl=function(di){bJ=di};this.setDownloadClasses=function(di){bM=w(di)?[di]:di};this.setLinkClasses=function(di){a9=w(di)?[di]:di};this.setCampaignNameKey=function(di){cp=w(di)?[di]:di};this.setCampaignKeywordKey=function(di){bI=w(di)?[di]:di};this.discardHashTag=function(di){bQ=di};this.setCookieNamePrefix=function(di){bl=di;if(aR){aR=bY()}};this.setCookieDomain=function(di){var dj=L(di);if(by(dj)){cX=dj;bj()
|
58 |
+
}};this.getCookieDomain=function(){return cX};this.hasCookies=function(){return"1"===b6()};this.setSessionCookie=function(dk,dj,di){if(!dk){throw new Error("Missing cookie name")}if(!J(di)){di=cn}bw.push(dk);dd(aU(dk),dj,di,br,cX,bT,aJ)};this.getCookie=function(dj){var di=aD(aU(dj));if(di===0){return null}return di};this.setCookiePath=function(di){br=di;bj()};this.getCookiePath=function(di){return br};this.setVisitorCookieTimeout=function(di){cK=di*1000};this.setSessionCookieTimeout=function(di){cn=di*1000};this.getSessionCookieTimeout=function(){return cn};this.setReferralCookieTimeout=function(di){c5=di*1000};this.setConversionAttributionFirstReferrer=function(di){bx=di};this.setSecureCookie=function(di){if(di&&location.protocol!=="https:"){ak("Error in setSecureCookie: You cannot use `Secure` on http.");return}bT=di};this.setCookieSameSite=function(di){di=String(di);di=di.charAt(0).toUpperCase()+di.toLowerCase().slice(1);if(di!=="None"&&di!=="Lax"&&di!=="Strict"){ak("Ignored value for sameSite. Please use either Lax, None, or Strict.");
|
59 |
+
return}if(di==="None"){if(location.protocol==="https:"){this.setSecureCookie(true)}else{ak("sameSite=None cannot be used on http, reverted to sameSite=Lax.");di="Lax"}}aJ=di};this.disableCookies=function(){bn=true;if(b7){aF()}};this.areCookiesEnabled=function(){return !bn};this.setCookieConsentGiven=function(){if(bn&&!cQ){bn=false;if(b7&&aw){aN();var di=cr("ping=1",null,"ping");bH(di,bL)}}};this.requireCookieConsent=function(){if(this.getRememberedCookieConsent()){return false}this.disableCookies();return true};this.getRememberedCookieConsent=function(){return aD(cD)};this.forgetCookieConsentGiven=function(){bZ(cD,br,cX);this.disableCookies()};this.rememberCookieConsentGiven=function(dj){if(dj){dj=dj*60*60*1000}else{dj=30*365*24*60*60*1000}this.setCookieConsentGiven();var di=new Date().getTime();dd(cD,di,dj,br,cX,bT,aJ)};this.deleteCookies=function(){aF()};this.setDoNotTrack=function(dj){var di=g.doNotTrack||g.msDoNotTrack;cQ=dj&&(di==="yes"||di==="1");if(cQ){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cW=true
|
60 |
+
};this.disableAlwaysUseSendBeacon=function(){cW=false};this.addListener=function(dj,di){aq(dj,di)};this.enableLinkTracking=function(dj){c8=true;var di=this;ch(function(){p(function(){bF(dj,di)});m(function(){bF(dj,di)})})};this.enableJSErrorTracking=function(){if(cS){return}cS=true;var di=S.onerror;S.onerror=function(dn,dl,dk,dm,dj){ch(function(){var dp="JavaScript Errors";var dq=dl+":"+dk;if(dm){dq+=":"+dm}at(dp,dq,dn)});if(di){return di(dn,dl,dk,dm,dj)}return false}};this.disablePerformanceTracking=function(){a3=false};this.enableHeartBeatTimer=function(di){di=Math.max(di||15,5);a6=di*1000;if(cY!==null){df()}};this.disableHeartBeatTimer=function(){if(a6||aO){if(S.removeEventListener){S.removeEventListener("focus",bb);S.removeEventListener("blur",az)}else{if(S.detachEvent){S.detachEvent("onfocus",bb);S.detachEvent("onblur",az)}}}a6=null;aO=false};this.killFrame=function(){if(S.location!==S.top.location){S.top.location=S.location}};this.redirectFile=function(di){if(S.location.protocol==="file:"){S.location=di
|
61 |
+
}};this.setCountPreRendered=function(di){bf=di};this.trackGoal=function(di,dl,dk,dj){ch(function(){cT(di,dl,dk,dj)})};this.trackLink=function(dj,di,dl,dk){ch(function(){c1(dj,di,dl,dk)})};this.getNumTrackedPageViews=function(){return cq};this.trackPageView=function(di,dk,dj){cb=[];cL=[];if(N(b7)){ch(function(){Z(aE,bJ,b7)})}else{ch(function(){cq++;b1(di,dk,dj)})}};this.trackAllContentImpressions=function(){if(N(b7)){return}ch(function(){p(function(){var di=v.findContentNodes();var dj=cz(di);bE.pushMultiple(dj)})})};this.trackVisibleContentImpressions=function(di,dj){if(N(b7)){return}if(!J(di)){di=true}if(!J(dj)){dj=750}aT(di,dj,this);ch(function(){m(function(){var dk=v.findContentNodes();var dl=ba(dk);bE.pushMultiple(dl)})})};this.trackContentImpression=function(dk,di,dj){if(N(b7)){return}dk=a(dk);di=a(di);dj=a(dj);if(!dk){return}di=di||"Unknown";ch(function(){var dl=aG(dk,di,dj);bE.push(dl)})};this.trackContentImpressionsWithinNode=function(di){if(N(b7)||!di){return}ch(function(){if(cf){m(function(){var dj=v.findContentNodesWithinNode(di);
|
62 |
+
var dk=ba(dj);bE.pushMultiple(dk)})}else{p(function(){var dj=v.findContentNodesWithinNode(di);var dk=cz(dj);bE.pushMultiple(dk)})}})};this.trackContentInteraction=function(dk,dl,di,dj){if(N(b7)){return}dk=a(dk);dl=a(dl);di=a(di);dj=a(dj);if(!dk||!dl){return}di=di||"Unknown";ch(function(){var dm=aQ(dk,dl,di,dj);if(dm){bE.push(dm)}})};this.trackContentInteractionNode=function(dk,dj){if(N(b7)||!dk){return}var di=null;ch(function(){di=da(dk,dj);if(di){bE.push(di)}});return di};this.logAllContentBlocksOnPage=function(){var dk=v.findContentNodes();var di=v.collectContent(dk);var dj=typeof console;if(dj!=="undefined"&&console&&console.log){console.log(di)}};this.trackEvent=function(dj,dl,di,dk,dn,dm){ch(function(){at(dj,dl,di,dk,dn,dm)})};this.trackSiteSearch=function(di,dk,dj,dl){cb=[];ch(function(){b9(di,dk,dj,dl)})};this.setEcommerceView=function(dm,di,dk,dj){cs={};if(Y(dk)){dk=String(dk)}if(!J(dk)||dk===null||dk===false||!dk.length){dk=""}else{if(dk instanceof Array){dk=S.JSON.stringify(dk)
|
63 |
+
}}var dl="_pkc";cs[dl]=dk;if(J(dj)&&dj!==null&&dj!==false&&String(dj).length){dl="_pkp";cs[dl]=dj}if(!Y(dm)&&!Y(di)){return}if(Y(dm)){dl="_pks";cs[dl]=dm}if(!Y(di)){di=""}dl="_pkn";cs[dl]=di};this.getEcommerceItems=function(){return JSON.parse(JSON.stringify(c0))};this.addEcommerceItem=function(dm,di,dk,dj,dl){if(Y(dm)){c0[dm]=[String(dm),di,dk,dj,dl]}};this.removeEcommerceItem=function(di){if(Y(di)){di=String(di);delete c0[di]}};this.clearEcommerceCart=function(){c0={}};this.trackEcommerceOrder=function(di,dm,dl,dk,dj,dn){b0(di,dm,dl,dk,dj,dn)};this.trackEcommerceCartUpdate=function(di){bu(di)};this.trackRequest=function(dj,dl,dk,di){ch(function(){var dm=cr(dj,dl,di);bH(dm,bL,dk)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bE.enabled=false};this.setRequestQueueInterval=function(di){if(di<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bE.interval=di};this.queueRequest=function(di){ch(function(){var dj=cr(di);
|
64 |
+
bE.push(dj)})};this.isConsentRequired=function(){return cA};this.getRememberedConsent=function(){var di=aD(be);if(aD(cM)){if(di){bZ(be,br,cX)}return null}if(!di||di===0){return null}return di};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()};this.requireConsent=function(){cA=true;bD=this.hasRememberedConsent();if(!bD){bn=true}x++;b["CoreConsent"+x]={unload:function(){if(!bD){aF()}}}};this.setConsentGiven=function(dj){bD=true;bZ(cM,br,cX);var dk,di;for(dk=0;dk<cL.length;dk++){di=typeof cL[dk];if(di==="string"){bH(cL[dk],bL)}else{if(di==="object"){de(cL[dk],bL)}}}cL=[];if(!J(dj)||dj){this.setCookieConsentGiven()}};this.rememberConsentGiven=function(dk){if(dk){dk=dk*60*60*1000}else{dk=30*365*24*60*60*1000}var di=true;this.setConsentGiven(di);var dj=new Date().getTime();dd(be,dj,dk,br,cX,bT,aJ)};this.forgetConsentGiven=function(){var di=30*365*24*60*60*1000;bZ(be,br,cX);dd(cM,new Date().getTime(),di,br,cX,bT,aJ);this.forgetCookieConsentGiven();this.requireConsent()
|
65 |
+
};this.isUserOptedOut=function(){return !bD};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=function(){this.setConsentGiven(false)};m(function(){setTimeout(function(){bG=true},0)});t.trigger("TrackerSetup",[this])}function H(){return{push:af}}function c(au,at){var av={};var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Matomo trackers documentation: https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","forgetCookieConsentGiven","requireCookieConsent","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking"];
|
66 |
+
function ad(aq,ap){var ao=new P(aq,ap);I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)&&J(g.serviceWorker.ready)){g.serviceWorker.ready.then(function(ao){return ao.sync.register("matomoSync")})}},false);an(S,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getMatomoUrl());if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
app/piwik.js
CHANGED
@@ -54,16 +54,16 @@ this.requests=[];if(di.length===1){bH(di[0],bL)}else{de(di,bL)}},canQueue:functi
|
|
54 |
};this.setTrackerUrl=function(di){aE=di};this.getTrackerUrl=function(){return aE};this.getMatomoUrl=function(){return W(this.getTrackerUrl(),bJ)};this.getPiwikUrl=function(){return this.getMatomoUrl()};this.addTracker=function(dk,dj){if(!J(dk)||null===dk){dk=this.getTrackerUrl()}var di=new P(dk,dj);I.push(di);t.trigger("TrackerAdded",[this]);return di};this.getSiteId=function(){return b7};this.setSiteId=function(di){b4(di)};this.resetUserId=function(){bA=""};this.setUserId=function(di){if(Y(di)){bA=di}};this.setVisitorId=function(dj){var di=/[0-9A-Fa-f]{16}/g;if(w(dj)&&di.test(dj)){bP=dj}else{ak("Invalid visitorId set"+dj)}};this.getUserId=function(){return bA};this.setCustomData=function(di,dj){if(V(di)){ao=di}else{if(!ao){ao={}}ao[di]=dj}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(di){cc=di};this.appendToTrackingUrl=function(di){cZ=di};this.getRequest=function(di){return cr(di)};this.addPlugin=function(di,dj){b[di]=dj};this.setCustomDimension=function(di,dj){di=parseInt(di,10);
|
55 |
if(di>0){if(!J(dj)){dj=""}if(!w(dj)){dj=String(dj)}bo[di]=dj}};this.getCustomDimension=function(di){di=parseInt(di,10);if(di>0&&Object.prototype.hasOwnProperty.call(bo,di)){return bo[di]}};this.deleteCustomDimension=function(di){di=parseInt(di,10);if(di>0){delete bo[di]}};this.setCustomVariable=function(dj,di,dm,dk){var dl;if(!J(dk)){dk="visit"}if(!J(di)){return}if(!J(dm)){dm=""}if(dj>0){di=!w(di)?String(di):di;dm=!w(dm)?String(dm):dm;dl=[di.slice(0,bv),dm.slice(0,bv)];if(dk==="visit"||dk===2){cF();aR[dj]=dl}else{if(dk==="page"||dk===3){bX[dj]=dl}else{if(dk==="event"){cm[dj]=dl}}}}};this.getCustomVariable=function(dj,dk){var di;if(!J(dk)){dk="visit"}if(dk==="page"||dk===3){di=bX[dj]}else{if(dk==="event"){di=cm[dj]}else{if(dk==="visit"||dk===2){cF();di=aR[dj]}}}if(!J(di)||(di&&di[0]==="")){return false}return di};this.deleteCustomVariable=function(di,dj){if(this.getCustomVariable(di,dj)){this.setCustomVariable(di,"","",dj)}};this.deleteCustomVariables=function(di){if(di==="page"||di===3){bX={}
|
56 |
}else{if(di==="event"){cm={}}else{if(di==="visit"||di===2){aR={}}}}};this.storeCustomVariablesInCookie=function(){bR=true};this.setLinkTrackingTimer=function(di){bL=di};this.getLinkTrackingTimer=function(){return bL};this.setDownloadExtensions=function(di){if(w(di)){di=di.split("|")}c6=di};this.addDownloadExtensions=function(dj){var di;if(w(dj)){dj=dj.split("|")}for(di=0;di<dj.length;di++){c6.push(dj[di])}};this.removeDownloadExtensions=function(dk){var dj,di=[];if(w(dk)){dk=dk.split("|")}for(dj=0;dj<c6.length;dj++){if(M(dk,c6[dj])===-1){di.push(c6[dj])}}c6=di};this.setDomains=function(di){ay=w(di)?[di]:di;var dm=false,dk=0,dj;for(dk;dk<ay.length;dk++){dj=String(ay[dk]);if(cH(cU,L(dj))){dm=true;break}var dl=cl(dj);if(dl&&dl!=="/"&&dl!=="/*"){dm=true;break}}if(!dm){ay.push(cU)}};this.enableCrossDomainLinking=function(){cN=true};this.disableCrossDomainLinking=function(){cN=false};this.isCrossDomainLinkingEnabled=function(){return cN};this.setCrossDomainLinkingTimeout=function(di){a0=di};this.getCrossDomainLinkingUrlParameter=function(){return s(av)+"="+s(bt())
|
57 |
-
};this.setIgnoreClasses=function(di){bB=w(di)?[di]:di};this.setRequestMethod=function(di){c9=di
|
58 |
-
if(di===0){return null}return di};this.setCookiePath=function(di){br=di;bj()};this.getCookiePath=function(di){return br};this.setVisitorCookieTimeout=function(di){cK=di*1000};this.setSessionCookieTimeout=function(di){cn=di*1000};this.getSessionCookieTimeout=function(){return cn};this.setReferralCookieTimeout=function(di){c5=di*1000};this.setConversionAttributionFirstReferrer=function(di){bx=di};this.setSecureCookie=function(di){if(di&&location.protocol!=="https:"){ak("Error in setSecureCookie: You cannot use `Secure` on http.");return}bT=di};this.setCookieSameSite=function(di){di=String(di);di=di.charAt(0).toUpperCase()+di.toLowerCase().slice(1);if(di!=="None"&&di!=="Lax"&&di!=="Strict"){ak("Ignored value for sameSite. Please use either Lax, None, or Strict.");
|
59 |
-
};this.setCookieConsentGiven=function(){if(bn&&!cQ){bn=false;if(b7&&aw){aN();var di=cr("ping=1",null,"ping");bH(di,bL)}}};this.requireCookieConsent=function(){if(this.getRememberedCookieConsent()){return false}this.disableCookies();return true};this.getRememberedCookieConsent=function(){return aD(cD)};this.forgetCookieConsentGiven=function(){bZ(cD,br,cX);this.disableCookies()};this.rememberCookieConsentGiven=function(dj){if(dj){dj=dj*60*60*1000}else{dj=30*365*24*60*60*1000}this.setCookieConsentGiven();var di=new Date().getTime();dd(cD,di,dj,br,cX,bT,aJ)};this.deleteCookies=function(){aF()};this.setDoNotTrack=function(dj){var di=g.doNotTrack||g.msDoNotTrack;cQ=dj&&(di==="yes"||di==="1");if(cQ){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cW=true
|
60 |
-
}cS=true;var di=S.onerror;S.onerror=function(dn,dl,dk,dm,dj){ch(function(){var dp="JavaScript Errors";var dq=dl+":"+dk;if(dm){dq+=":"+dm}at(dp,dq,dn)});if(di){return di(dn,dl,dk,dm,dj)}return false}};this.disablePerformanceTracking=function(){a3=false};this.enableHeartBeatTimer=function(di){di=Math.max(di||15,5);a6=di*1000;if(cY!==null){df()}};this.disableHeartBeatTimer=function(){if(a6||aO){if(S.removeEventListener){S.removeEventListener("focus",bb);S.removeEventListener("blur",az)}else{if(S.detachEvent){S.detachEvent("onfocus",bb);S.detachEvent("onblur",az)}}}a6=null;aO=false};this.killFrame=function(){if(S.location!==S.top.location){S.top.location=S.location}};this.redirectFile=function(di){if(S.location.protocol==="file:"){S.location=di
|
61 |
-
cL=[];if(N(b7)){ch(function(){Z(aE,bJ,b7)})}else{ch(function(){cq++;b1(di,dk,dj)})}};this.trackAllContentImpressions=function(){if(N(b7)){return}ch(function(){p(function(){var di=v.findContentNodes();var dj=cz(di);bE.pushMultiple(dj)})})};this.trackVisibleContentImpressions=function(di,dj){if(N(b7)){return}if(!J(di)){di=true}if(!J(dj)){dj=750}aT(di,dj,this);ch(function(){m(function(){var dk=v.findContentNodes();var dl=ba(dk);bE.pushMultiple(dl)})})};this.trackContentImpression=function(dk,di,dj){if(N(b7)){return}dk=a(dk);di=a(di);dj=a(dj);if(!dk){return}di=di||"Unknown";ch(function(){var dl=aG(dk,di,dj);bE.push(dl)})};this.trackContentImpressionsWithinNode=function(di){if(N(b7)||!di){return}ch(function(){if(cf){m(function(){var dj=v.findContentNodesWithinNode(di);
|
62 |
-
dj=a(dj);if(!dk||!dl){return}di=di||"Unknown";ch(function(){var dm=aQ(dk,dl,di,dj);if(dm){bE.push(dm)}})};this.trackContentInteractionNode=function(dk,dj){if(N(b7)||!dk){return}var di=null;ch(function(){di=da(dk,dj);if(di){bE.push(di)}});return di};this.logAllContentBlocksOnPage=function(){var dk=v.findContentNodes();var di=v.collectContent(dk);var dj=typeof console;if(dj!=="undefined"&&console&&console.log){console.log(di)}};this.trackEvent=function(dj,dl,di,dk,dn,dm){ch(function(){at(dj,dl,di,dk,dn,dm)})};this.trackSiteSearch=function(di,dk,dj,dl){cb=[];ch(function(){b9(di,dk,dj,dl)})};this.setEcommerceView=function(dm,di,dk,dj){cs={};if(Y(dk)){dk=String(dk)}if(!J(dk)||dk===null||dk===false||!dk.length){dk=""}else{if(dk instanceof Array){dk=S.JSON.stringify(dk)
|
63 |
-
};this.addEcommerceItem=function(dm,di,dk,dj,dl){if(Y(dm)){c0[dm]=[String(dm),di,dk,dj,dl]}};this.removeEcommerceItem=function(di){if(Y(di)){di=String(di);delete c0[di]}};this.clearEcommerceCart=function(){c0={}};this.trackEcommerceOrder=function(di,dm,dl,dk,dj,dn){b0(di,dm,dl,dk,dj,dn)};this.trackEcommerceCartUpdate=function(di){bu(di)};this.trackRequest=function(dj,dl,dk,di){ch(function(){var dm=cr(dj,dl,di);bH(dm,bL,dk)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bE.enabled=false};this.setRequestQueueInterval=function(di){if(di<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bE.interval=di};this.queueRequest=function(di){ch(function(){var dj=cr(di);
|
64 |
-
};this.requireConsent=function(){cA=true;bD=this.hasRememberedConsent();if(!bD){bn=true}x++;b["CoreConsent"+x]={unload:function(){if(!bD){aF()}}}};this.setConsentGiven=function(dj){bD=true;bZ(cM,br,cX);var dk,di;for(dk=0;dk<cL.length;dk++){di=typeof cL[dk];if(di==="string"){bH(cL[dk],bL)}else{if(di==="object"){de(cL[dk],bL)}}}cL=[];if(!J(dj)||dj){this.setCookieConsentGiven()}};this.rememberConsentGiven=function(dk){if(dk){dk=dk*60*60*1000}else{dk=30*365*24*60*60*1000}var di=true;this.setConsentGiven(di);var dj=new Date().getTime();dd(be,dj,dk,br,cX,bT,aJ)};this.forgetConsentGiven=function(){var di=30*365*24*60*60*1000;bZ(be,br,cX);dd(cM,new Date().getTime(),di,br,cX,bT,aJ);this.forgetCookieConsentGiven();this.requireConsent()
|
65 |
-
var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Matomo trackers documentation: https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","forgetCookieConsentGiven","requireCookieConsent","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking"];
|
66 |
-
I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)&&J(g.serviceWorker.ready)){g.serviceWorker.ready.then(function(ao){return ao.sync.register("matomoSync")})}},false);an(S,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getMatomoUrl());if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
54 |
};this.setTrackerUrl=function(di){aE=di};this.getTrackerUrl=function(){return aE};this.getMatomoUrl=function(){return W(this.getTrackerUrl(),bJ)};this.getPiwikUrl=function(){return this.getMatomoUrl()};this.addTracker=function(dk,dj){if(!J(dk)||null===dk){dk=this.getTrackerUrl()}var di=new P(dk,dj);I.push(di);t.trigger("TrackerAdded",[this]);return di};this.getSiteId=function(){return b7};this.setSiteId=function(di){b4(di)};this.resetUserId=function(){bA=""};this.setUserId=function(di){if(Y(di)){bA=di}};this.setVisitorId=function(dj){var di=/[0-9A-Fa-f]{16}/g;if(w(dj)&&di.test(dj)){bP=dj}else{ak("Invalid visitorId set"+dj)}};this.getUserId=function(){return bA};this.setCustomData=function(di,dj){if(V(di)){ao=di}else{if(!ao){ao={}}ao[di]=dj}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(di){cc=di};this.appendToTrackingUrl=function(di){cZ=di};this.getRequest=function(di){return cr(di)};this.addPlugin=function(di,dj){b[di]=dj};this.setCustomDimension=function(di,dj){di=parseInt(di,10);
|
55 |
if(di>0){if(!J(dj)){dj=""}if(!w(dj)){dj=String(dj)}bo[di]=dj}};this.getCustomDimension=function(di){di=parseInt(di,10);if(di>0&&Object.prototype.hasOwnProperty.call(bo,di)){return bo[di]}};this.deleteCustomDimension=function(di){di=parseInt(di,10);if(di>0){delete bo[di]}};this.setCustomVariable=function(dj,di,dm,dk){var dl;if(!J(dk)){dk="visit"}if(!J(di)){return}if(!J(dm)){dm=""}if(dj>0){di=!w(di)?String(di):di;dm=!w(dm)?String(dm):dm;dl=[di.slice(0,bv),dm.slice(0,bv)];if(dk==="visit"||dk===2){cF();aR[dj]=dl}else{if(dk==="page"||dk===3){bX[dj]=dl}else{if(dk==="event"){cm[dj]=dl}}}}};this.getCustomVariable=function(dj,dk){var di;if(!J(dk)){dk="visit"}if(dk==="page"||dk===3){di=bX[dj]}else{if(dk==="event"){di=cm[dj]}else{if(dk==="visit"||dk===2){cF();di=aR[dj]}}}if(!J(di)||(di&&di[0]==="")){return false}return di};this.deleteCustomVariable=function(di,dj){if(this.getCustomVariable(di,dj)){this.setCustomVariable(di,"","",dj)}};this.deleteCustomVariables=function(di){if(di==="page"||di===3){bX={}
|
56 |
}else{if(di==="event"){cm={}}else{if(di==="visit"||di===2){aR={}}}}};this.storeCustomVariablesInCookie=function(){bR=true};this.setLinkTrackingTimer=function(di){bL=di};this.getLinkTrackingTimer=function(){return bL};this.setDownloadExtensions=function(di){if(w(di)){di=di.split("|")}c6=di};this.addDownloadExtensions=function(dj){var di;if(w(dj)){dj=dj.split("|")}for(di=0;di<dj.length;di++){c6.push(dj[di])}};this.removeDownloadExtensions=function(dk){var dj,di=[];if(w(dk)){dk=dk.split("|")}for(dj=0;dj<c6.length;dj++){if(M(dk,c6[dj])===-1){di.push(c6[dj])}}c6=di};this.setDomains=function(di){ay=w(di)?[di]:di;var dm=false,dk=0,dj;for(dk;dk<ay.length;dk++){dj=String(ay[dk]);if(cH(cU,L(dj))){dm=true;break}var dl=cl(dj);if(dl&&dl!=="/"&&dl!=="/*"){dm=true;break}}if(!dm){ay.push(cU)}};this.enableCrossDomainLinking=function(){cN=true};this.disableCrossDomainLinking=function(){cN=false};this.isCrossDomainLinkingEnabled=function(){return cN};this.setCrossDomainLinkingTimeout=function(di){a0=di};this.getCrossDomainLinkingUrlParameter=function(){return s(av)+"="+s(bt())
|
57 |
+
};this.setIgnoreClasses=function(di){bB=w(di)?[di]:di};this.setRequestMethod=function(di){if(di){c9=String(di).toUpperCase()}else{c9=ci}if(c9==="GET"){this.disableAlwaysUseSendBeacon()}};this.setRequestContentType=function(di){cw=di||aI};this.setGenerationTimeMs=function(di){ak("setGenerationTimeMs is no longer supported since Matomo 4. The call will be ignored. There is currently no replacement yet.")};this.setReferrerUrl=function(di){bp=di};this.setCustomUrl=function(di){a5=bW(bO,di)};this.getCurrentUrl=function(){return a5||bO};this.setDocumentTitle=function(di){bk=di};this.setAPIUrl=function(di){bJ=di};this.setDownloadClasses=function(di){bM=w(di)?[di]:di};this.setLinkClasses=function(di){a9=w(di)?[di]:di};this.setCampaignNameKey=function(di){cp=w(di)?[di]:di};this.setCampaignKeywordKey=function(di){bI=w(di)?[di]:di};this.discardHashTag=function(di){bQ=di};this.setCookieNamePrefix=function(di){bl=di;if(aR){aR=bY()}};this.setCookieDomain=function(di){var dj=L(di);if(by(dj)){cX=dj;bj()
|
58 |
+
}};this.getCookieDomain=function(){return cX};this.hasCookies=function(){return"1"===b6()};this.setSessionCookie=function(dk,dj,di){if(!dk){throw new Error("Missing cookie name")}if(!J(di)){di=cn}bw.push(dk);dd(aU(dk),dj,di,br,cX,bT,aJ)};this.getCookie=function(dj){var di=aD(aU(dj));if(di===0){return null}return di};this.setCookiePath=function(di){br=di;bj()};this.getCookiePath=function(di){return br};this.setVisitorCookieTimeout=function(di){cK=di*1000};this.setSessionCookieTimeout=function(di){cn=di*1000};this.getSessionCookieTimeout=function(){return cn};this.setReferralCookieTimeout=function(di){c5=di*1000};this.setConversionAttributionFirstReferrer=function(di){bx=di};this.setSecureCookie=function(di){if(di&&location.protocol!=="https:"){ak("Error in setSecureCookie: You cannot use `Secure` on http.");return}bT=di};this.setCookieSameSite=function(di){di=String(di);di=di.charAt(0).toUpperCase()+di.toLowerCase().slice(1);if(di!=="None"&&di!=="Lax"&&di!=="Strict"){ak("Ignored value for sameSite. Please use either Lax, None, or Strict.");
|
59 |
+
return}if(di==="None"){if(location.protocol==="https:"){this.setSecureCookie(true)}else{ak("sameSite=None cannot be used on http, reverted to sameSite=Lax.");di="Lax"}}aJ=di};this.disableCookies=function(){bn=true;if(b7){aF()}};this.areCookiesEnabled=function(){return !bn};this.setCookieConsentGiven=function(){if(bn&&!cQ){bn=false;if(b7&&aw){aN();var di=cr("ping=1",null,"ping");bH(di,bL)}}};this.requireCookieConsent=function(){if(this.getRememberedCookieConsent()){return false}this.disableCookies();return true};this.getRememberedCookieConsent=function(){return aD(cD)};this.forgetCookieConsentGiven=function(){bZ(cD,br,cX);this.disableCookies()};this.rememberCookieConsentGiven=function(dj){if(dj){dj=dj*60*60*1000}else{dj=30*365*24*60*60*1000}this.setCookieConsentGiven();var di=new Date().getTime();dd(cD,di,dj,br,cX,bT,aJ)};this.deleteCookies=function(){aF()};this.setDoNotTrack=function(dj){var di=g.doNotTrack||g.msDoNotTrack;cQ=dj&&(di==="yes"||di==="1");if(cQ){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cW=true
|
60 |
+
};this.disableAlwaysUseSendBeacon=function(){cW=false};this.addListener=function(dj,di){aq(dj,di)};this.enableLinkTracking=function(dj){c8=true;var di=this;ch(function(){p(function(){bF(dj,di)});m(function(){bF(dj,di)})})};this.enableJSErrorTracking=function(){if(cS){return}cS=true;var di=S.onerror;S.onerror=function(dn,dl,dk,dm,dj){ch(function(){var dp="JavaScript Errors";var dq=dl+":"+dk;if(dm){dq+=":"+dm}at(dp,dq,dn)});if(di){return di(dn,dl,dk,dm,dj)}return false}};this.disablePerformanceTracking=function(){a3=false};this.enableHeartBeatTimer=function(di){di=Math.max(di||15,5);a6=di*1000;if(cY!==null){df()}};this.disableHeartBeatTimer=function(){if(a6||aO){if(S.removeEventListener){S.removeEventListener("focus",bb);S.removeEventListener("blur",az)}else{if(S.detachEvent){S.detachEvent("onfocus",bb);S.detachEvent("onblur",az)}}}a6=null;aO=false};this.killFrame=function(){if(S.location!==S.top.location){S.top.location=S.location}};this.redirectFile=function(di){if(S.location.protocol==="file:"){S.location=di
|
61 |
+
}};this.setCountPreRendered=function(di){bf=di};this.trackGoal=function(di,dl,dk,dj){ch(function(){cT(di,dl,dk,dj)})};this.trackLink=function(dj,di,dl,dk){ch(function(){c1(dj,di,dl,dk)})};this.getNumTrackedPageViews=function(){return cq};this.trackPageView=function(di,dk,dj){cb=[];cL=[];if(N(b7)){ch(function(){Z(aE,bJ,b7)})}else{ch(function(){cq++;b1(di,dk,dj)})}};this.trackAllContentImpressions=function(){if(N(b7)){return}ch(function(){p(function(){var di=v.findContentNodes();var dj=cz(di);bE.pushMultiple(dj)})})};this.trackVisibleContentImpressions=function(di,dj){if(N(b7)){return}if(!J(di)){di=true}if(!J(dj)){dj=750}aT(di,dj,this);ch(function(){m(function(){var dk=v.findContentNodes();var dl=ba(dk);bE.pushMultiple(dl)})})};this.trackContentImpression=function(dk,di,dj){if(N(b7)){return}dk=a(dk);di=a(di);dj=a(dj);if(!dk){return}di=di||"Unknown";ch(function(){var dl=aG(dk,di,dj);bE.push(dl)})};this.trackContentImpressionsWithinNode=function(di){if(N(b7)||!di){return}ch(function(){if(cf){m(function(){var dj=v.findContentNodesWithinNode(di);
|
62 |
+
var dk=ba(dj);bE.pushMultiple(dk)})}else{p(function(){var dj=v.findContentNodesWithinNode(di);var dk=cz(dj);bE.pushMultiple(dk)})}})};this.trackContentInteraction=function(dk,dl,di,dj){if(N(b7)){return}dk=a(dk);dl=a(dl);di=a(di);dj=a(dj);if(!dk||!dl){return}di=di||"Unknown";ch(function(){var dm=aQ(dk,dl,di,dj);if(dm){bE.push(dm)}})};this.trackContentInteractionNode=function(dk,dj){if(N(b7)||!dk){return}var di=null;ch(function(){di=da(dk,dj);if(di){bE.push(di)}});return di};this.logAllContentBlocksOnPage=function(){var dk=v.findContentNodes();var di=v.collectContent(dk);var dj=typeof console;if(dj!=="undefined"&&console&&console.log){console.log(di)}};this.trackEvent=function(dj,dl,di,dk,dn,dm){ch(function(){at(dj,dl,di,dk,dn,dm)})};this.trackSiteSearch=function(di,dk,dj,dl){cb=[];ch(function(){b9(di,dk,dj,dl)})};this.setEcommerceView=function(dm,di,dk,dj){cs={};if(Y(dk)){dk=String(dk)}if(!J(dk)||dk===null||dk===false||!dk.length){dk=""}else{if(dk instanceof Array){dk=S.JSON.stringify(dk)
|
63 |
+
}}var dl="_pkc";cs[dl]=dk;if(J(dj)&&dj!==null&&dj!==false&&String(dj).length){dl="_pkp";cs[dl]=dj}if(!Y(dm)&&!Y(di)){return}if(Y(dm)){dl="_pks";cs[dl]=dm}if(!Y(di)){di=""}dl="_pkn";cs[dl]=di};this.getEcommerceItems=function(){return JSON.parse(JSON.stringify(c0))};this.addEcommerceItem=function(dm,di,dk,dj,dl){if(Y(dm)){c0[dm]=[String(dm),di,dk,dj,dl]}};this.removeEcommerceItem=function(di){if(Y(di)){di=String(di);delete c0[di]}};this.clearEcommerceCart=function(){c0={}};this.trackEcommerceOrder=function(di,dm,dl,dk,dj,dn){b0(di,dm,dl,dk,dj,dn)};this.trackEcommerceCartUpdate=function(di){bu(di)};this.trackRequest=function(dj,dl,dk,di){ch(function(){var dm=cr(dj,dl,di);bH(dm,bL,dk)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bE.enabled=false};this.setRequestQueueInterval=function(di){if(di<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bE.interval=di};this.queueRequest=function(di){ch(function(){var dj=cr(di);
|
64 |
+
bE.push(dj)})};this.isConsentRequired=function(){return cA};this.getRememberedConsent=function(){var di=aD(be);if(aD(cM)){if(di){bZ(be,br,cX)}return null}if(!di||di===0){return null}return di};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()};this.requireConsent=function(){cA=true;bD=this.hasRememberedConsent();if(!bD){bn=true}x++;b["CoreConsent"+x]={unload:function(){if(!bD){aF()}}}};this.setConsentGiven=function(dj){bD=true;bZ(cM,br,cX);var dk,di;for(dk=0;dk<cL.length;dk++){di=typeof cL[dk];if(di==="string"){bH(cL[dk],bL)}else{if(di==="object"){de(cL[dk],bL)}}}cL=[];if(!J(dj)||dj){this.setCookieConsentGiven()}};this.rememberConsentGiven=function(dk){if(dk){dk=dk*60*60*1000}else{dk=30*365*24*60*60*1000}var di=true;this.setConsentGiven(di);var dj=new Date().getTime();dd(be,dj,dk,br,cX,bT,aJ)};this.forgetConsentGiven=function(){var di=30*365*24*60*60*1000;bZ(be,br,cX);dd(cM,new Date().getTime(),di,br,cX,bT,aJ);this.forgetCookieConsentGiven();this.requireConsent()
|
65 |
+
};this.isUserOptedOut=function(){return !bD};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=function(){this.setConsentGiven(false)};m(function(){setTimeout(function(){bG=true},0)});t.trigger("TrackerSetup",[this])}function H(){return{push:af}}function c(au,at){var av={};var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];if(av[ap]>1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Matomo trackers documentation: https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","forgetCookieConsentGiven","requireCookieConsent","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking"];
|
66 |
+
function ad(aq,ap){var ao=new P(aq,ap);I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)&&J(g.serviceWorker.ready)){g.serviceWorker.ready.then(function(ao){return ao.sync.register("matomoSync")})}},false);an(S,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getMatomoUrl());if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
app/plugins/Widgetize/Controller.php
CHANGED
@@ -9,6 +9,7 @@
|
|
9 |
namespace Piwik\Plugins\Widgetize;
|
10 |
|
11 |
use Piwik\Access;
|
|
|
12 |
use Piwik\Common;
|
13 |
use Piwik\Container\StaticContainer;
|
14 |
use Piwik\FrontController;
|
@@ -31,11 +32,10 @@ class Controller extends \Piwik\Plugin\Controller
|
|
31 |
|
32 |
public function iframe()
|
33 |
{
|
|
|
34 |
$token_auth = Common::getRequestVar('token_auth', '', 'string');
|
35 |
-
|
36 |
-
|
37 |
-
&& Access::getInstance()->isUserHasSomeWriteAccess()) {
|
38 |
-
throw new \Exception(Piwik::translate('Widgetize_ViewAccessRequired'));
|
39 |
}
|
40 |
|
41 |
$this->init();
|
9 |
namespace Piwik\Plugins\Widgetize;
|
10 |
|
11 |
use Piwik\Access;
|
12 |
+
use Piwik\API\Request;
|
13 |
use Piwik\Common;
|
14 |
use Piwik\Container\StaticContainer;
|
15 |
use Piwik\FrontController;
|
32 |
|
33 |
public function iframe()
|
34 |
{
|
35 |
+
// also called by FrontController, we call it explicitly as a safety measure in case something changes in the future
|
36 |
$token_auth = Common::getRequestVar('token_auth', '', 'string');
|
37 |
+
if (!empty($token_auth)) {
|
38 |
+
Request::checkTokenAuthIsNotLimited('Widgetize', 'iframe');
|
|
|
|
|
39 |
}
|
40 |
|
41 |
$this->init();
|
app/vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInit99d6ebaba5ed92b541ba43a3db60d098::getLoader();
|
app/vendor/composer/InstalledVersions.php
CHANGED
@@ -1,5 +1,15 @@
|
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
namespace Composer;
|
4 |
|
5 |
use Composer\Semver\VersionParser;
|
@@ -14,12 +24,12 @@ class InstalledVersions
|
|
14 |
private static $installed = array (
|
15 |
'root' =>
|
16 |
array (
|
17 |
-
'pretty_version' => '4.0.
|
18 |
-
'version' => '4.0.
|
19 |
'aliases' =>
|
20 |
array (
|
21 |
),
|
22 |
-
'reference' => '
|
23 |
'name' => 'matomo/matomo',
|
24 |
),
|
25 |
'versions' =>
|
@@ -116,12 +126,12 @@ private static $installed = array (
|
|
116 |
),
|
117 |
'matomo/matomo' =>
|
118 |
array (
|
119 |
-
'pretty_version' => '4.0.
|
120 |
-
'version' => '4.0.
|
121 |
'aliases' =>
|
122 |
array (
|
123 |
),
|
124 |
-
'reference' => '
|
125 |
),
|
126 |
'matomo/matomo-php-tracker' =>
|
127 |
array (
|
1 |
<?php
|
2 |
|
3 |
+
|
4 |
+
|
5 |
+
|
6 |
+
|
7 |
+
|
8 |
+
|
9 |
+
|
10 |
+
|
11 |
+
|
12 |
+
|
13 |
namespace Composer;
|
14 |
|
15 |
use Composer\Semver\VersionParser;
|
24 |
private static $installed = array (
|
25 |
'root' =>
|
26 |
array (
|
27 |
+
'pretty_version' => '4.0.4-b1',
|
28 |
+
'version' => '4.0.4.0-beta1',
|
29 |
'aliases' =>
|
30 |
array (
|
31 |
),
|
32 |
+
'reference' => 'de127131c5f6c4a87e8f751ae4f0e98a0546e074',
|
33 |
'name' => 'matomo/matomo',
|
34 |
),
|
35 |
'versions' =>
|
126 |
),
|
127 |
'matomo/matomo' =>
|
128 |
array (
|
129 |
+
'pretty_version' => '4.0.4-b1',
|
130 |
+
'version' => '4.0.4.0-beta1',
|
131 |
'aliases' =>
|
132 |
array (
|
133 |
),
|
134 |
+
'reference' => 'de127131c5f6c4a87e8f751ae4f0e98a0546e074',
|
135 |
),
|
136 |
'matomo/matomo-php-tracker' =>
|
137 |
array (
|
app/vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -22,9 +22,9 @@ class ComposerAutoloaderInit6bb4c047c53a986f196efa0e07a5cf56
|
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
25 |
-
spl_autoload_register(array('
|
26 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
27 |
-
spl_autoload_unregister(array('
|
28 |
|
29 |
$includePaths = require __DIR__ . '/include_paths.php';
|
30 |
$includePaths[] = get_include_path();
|
@@ -34,7 +34,7 @@ class ComposerAutoloaderInit6bb4c047c53a986f196efa0e07a5cf56
|
|
34 |
if ($useStaticLoader) {
|
35 |
require __DIR__ . '/autoload_static.php';
|
36 |
|
37 |
-
call_user_func(\Composer\Autoload\
|
38 |
} else {
|
39 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
40 |
foreach ($map as $namespace => $path) {
|
@@ -55,19 +55,19 @@ class ComposerAutoloaderInit6bb4c047c53a986f196efa0e07a5cf56
|
|
55 |
$loader->register(false);
|
56 |
|
57 |
if ($useStaticLoader) {
|
58 |
-
$includeFiles = Composer\Autoload\
|
59 |
} else {
|
60 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
61 |
}
|
62 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
63 |
-
|
64 |
}
|
65 |
|
66 |
return $loader;
|
67 |
}
|
68 |
}
|
69 |
|
70 |
-
function
|
71 |
{
|
72 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
73 |
require $file;
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit99d6ebaba5ed92b541ba43a3db60d098
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
25 |
+
spl_autoload_register(array('ComposerAutoloaderInit99d6ebaba5ed92b541ba43a3db60d098', 'loadClassLoader'), true, false);
|
26 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
27 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit99d6ebaba5ed92b541ba43a3db60d098', 'loadClassLoader'));
|
28 |
|
29 |
$includePaths = require __DIR__ . '/include_paths.php';
|
30 |
$includePaths[] = get_include_path();
|
34 |
if ($useStaticLoader) {
|
35 |
require __DIR__ . '/autoload_static.php';
|
36 |
|
37 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit99d6ebaba5ed92b541ba43a3db60d098::getInitializer($loader));
|
38 |
} else {
|
39 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
40 |
foreach ($map as $namespace => $path) {
|
55 |
$loader->register(false);
|
56 |
|
57 |
if ($useStaticLoader) {
|
58 |
+
$includeFiles = Composer\Autoload\ComposerStaticInit99d6ebaba5ed92b541ba43a3db60d098::$files;
|
59 |
} else {
|
60 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
61 |
}
|
62 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
63 |
+
composerRequire99d6ebaba5ed92b541ba43a3db60d098($fileIdentifier, $file);
|
64 |
}
|
65 |
|
66 |
return $loader;
|
67 |
}
|
68 |
}
|
69 |
|
70 |
+
function composerRequire99d6ebaba5ed92b541ba43a3db60d098($fileIdentifier, $file)
|
71 |
{
|
72 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
73 |
require $file;
|
app/vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'04c6c5c2f7095ccf6c481d3e53e1776f' => __DIR__ . '/..' . '/mustangostang/spyc/Spyc.php',
|
@@ -3190,11 +3190,11 @@ class ComposerStaticInit6bb4c047c53a986f196efa0e07a5cf56
|
|
3190 |
public static function getInitializer(ClassLoader $loader)
|
3191 |
{
|
3192 |
return \Closure::bind(function () use ($loader) {
|
3193 |
-
$loader->prefixLengthsPsr4 =
|
3194 |
-
$loader->prefixDirsPsr4 =
|
3195 |
-
$loader->prefixesPsr0 =
|
3196 |
-
$loader->fallbackDirsPsr0 =
|
3197 |
-
$loader->classMap =
|
3198 |
|
3199 |
}, null, ClassLoader::class);
|
3200 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit99d6ebaba5ed92b541ba43a3db60d098
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'04c6c5c2f7095ccf6c481d3e53e1776f' => __DIR__ . '/..' . '/mustangostang/spyc/Spyc.php',
|
3190 |
public static function getInitializer(ClassLoader $loader)
|
3191 |
{
|
3192 |
return \Closure::bind(function () use ($loader) {
|
3193 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit99d6ebaba5ed92b541ba43a3db60d098::$prefixLengthsPsr4;
|
3194 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit99d6ebaba5ed92b541ba43a3db60d098::$prefixDirsPsr4;
|
3195 |
+
$loader->prefixesPsr0 = ComposerStaticInit99d6ebaba5ed92b541ba43a3db60d098::$prefixesPsr0;
|
3196 |
+
$loader->fallbackDirsPsr0 = ComposerStaticInit99d6ebaba5ed92b541ba43a3db60d098::$fallbackDirsPsr0;
|
3197 |
+
$loader->classMap = ComposerStaticInit99d6ebaba5ed92b541ba43a3db60d098::$classMap;
|
3198 |
|
3199 |
}, null, ClassLoader::class);
|
3200 |
}
|
app/vendor/composer/installed.php
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
<?php return array (
|
2 |
'root' =>
|
3 |
array (
|
4 |
-
'pretty_version' => '4.0.
|
5 |
-
'version' => '4.0.
|
6 |
'aliases' =>
|
7 |
array (
|
8 |
),
|
9 |
-
'reference' => '
|
10 |
'name' => 'matomo/matomo',
|
11 |
),
|
12 |
'versions' =>
|
@@ -103,12 +103,12 @@
|
|
103 |
),
|
104 |
'matomo/matomo' =>
|
105 |
array (
|
106 |
-
'pretty_version' => '4.0.
|
107 |
-
'version' => '4.0.
|
108 |
'aliases' =>
|
109 |
array (
|
110 |
),
|
111 |
-
'reference' => '
|
112 |
),
|
113 |
'matomo/matomo-php-tracker' =>
|
114 |
array (
|
1 |
<?php return array (
|
2 |
'root' =>
|
3 |
array (
|
4 |
+
'pretty_version' => '4.0.4-b1',
|
5 |
+
'version' => '4.0.4.0-beta1',
|
6 |
'aliases' =>
|
7 |
array (
|
8 |
),
|
9 |
+
'reference' => 'de127131c5f6c4a87e8f751ae4f0e98a0546e074',
|
10 |
'name' => 'matomo/matomo',
|
11 |
),
|
12 |
'versions' =>
|
103 |
),
|
104 |
'matomo/matomo' =>
|
105 |
array (
|
106 |
+
'pretty_version' => '4.0.4-b1',
|
107 |
+
'version' => '4.0.4.0-beta1',
|
108 |
'aliases' =>
|
109 |
array (
|
110 |
),
|
111 |
+
'reference' => 'de127131c5f6c4a87e8f751ae4f0e98a0546e074',
|
112 |
),
|
113 |
'matomo/matomo-php-tracker' =>
|
114 |
array (
|
assets/js/asset_manager_core_js.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
/* Matomo Javascript - cb=
|
2 |
|
3 |
/*!
|
4 |
* Matomo - free/libre analytics platform
|
@@ -808,7 +808,7 @@ url+=$.param(parameters);var ajaxCall={type:'POST',async:true,url:url,dataType:t
|
|
808 |
if(response&&response.result=='error'&&!that.useRegularCallbackInCaseOfError){var placeAt=null;var type='toast';if($(that.errorElement).length&&response.message){$(that.errorElement).show();placeAt=that.errorElement;type=null;}
|
809 |
if(response.message){var UI=require('piwik/UI');var notification=new UI.Notification();notification.show(response.message,{placeat:placeAt,context:'error',type:type,id:'ajaxHelper'});notification.scrollToNotification();}}else{that.callback(response,status,request);}
|
810 |
--globalAjaxQueue.active;var piwik=window.piwik;if(piwik&&piwik.ajaxRequestFinished){piwik.ajaxRequestFinished();}},data:this._mixinDefaultPostParams(this.postParams)};if(this.timeout!==null){ajaxCall.timeout=this.timeout;}
|
811 |
-
return $.ajax(ajaxCall);};this._isRequestToApiMethod=function(){return(this.getParams&&this.getParams['module']==='API'&&this.getParams['method'])||(this.postParams&&this.postParams['module']==='API'&&this.postParams['method']);};this._isWidgetizedRequest=function(){return(broadcast.getValueFromUrl('module')=='Widgetize');};this._getDefaultPostParams=function(){if(this.withToken||this._isRequestToApiMethod()||piwik.shouldPropagateTokenAuth){return{token_auth:piwik.token_auth,force_api_session:
|
812 |
return{};};this._mixinDefaultPostParams=function(params){var defaultParams=this._getDefaultPostParams();for(var index in defaultParams){if(!params[index]){params[index]=defaultParams[index];}}
|
813 |
return params;};this._mixinDefaultGetParams=function(params){var piwikUrl=piwikHelper.getAngularDependency('piwikUrl');var segment=piwikUrl.getSearchParam('segment');var defaultParams={idSite:piwik.idSite||broadcast.getValueFromUrl('idSite'),period:piwik.period||broadcast.getValueFromUrl('period'),segment:segment};if(params.token_auth){params.token_auth=null;delete params.token_auth;}
|
814 |
for(var key in defaultParams){if(this._useGETDefaultParameter(key)&&!params[key]&&!this.postParams[key]&&defaultParams[key]){params[key]=defaultParams[key];}}
|
@@ -838,7 +838,7 @@ if(hash){if(/^popover=/.test(hash)){var hashParts=['',hash.replace(/^popover=/,'
|
|
838 |
var hashUrl=hashParts[0];var popoverParam='';if(hashParts.length>1){popoverParam=hashParts[1];popoverParam=decodeURIComponent(popoverParam);popoverParam=popoverParam.replace(/\$/g,'%');popoverParam=decodeURIComponent(popoverParam);}
|
839 |
var pageUrlUpdated=(popoverParam==''||(broadcast.currentHashUrl!==false&&broadcast.currentHashUrl!=hashUrl));var popoverParamUpdated=(popoverParam!=''&&hashUrl==broadcast.currentHashUrl);if(broadcast.currentHashUrl===false){pageUrlUpdated=true;popoverParamUpdated=(popoverParam!='');}
|
840 |
if(!broadcast.isWidgetizedDashboard()&&(pageUrlUpdated||broadcast.forceReload)){Piwik_Popover.close();if(hashUrl!=broadcast.currentHashUrl||broadcast.forceReload){broadcast.loadAjaxContent(hashUrl);$('.top_controls .dashboard-manager').hide();$('#dashboardWidgetsArea').dashboard('destroy');require('piwik/UI').UIControl.cleanupUnusedControls();}}
|
841 |
-
broadcast.forceReload=false;broadcast.currentHashUrl=hashUrl;broadcast.currentPopoverParameter=popoverParam;Piwik_Popover.close();if(popoverParamUpdated){var popoverParamParts=popoverParam.split(':');var handlerName=popoverParamParts[0];popoverParamParts.shift();var param=popoverParamParts.join(':');if(typeof broadcast.popoverHandlers[handlerName]!='undefined'&&!broadcast.isLoginPage()){broadcast.popoverHandlers[handlerName](param);}}}else{Piwik_Popover.close();if(!broadcast.isWidgetizedDashboard()){$('.pageWrap #content:not(.admin)').empty();}}},isWidgetizedDashboard:function(){return broadcast.getValueFromUrl('module')=='Widgetize'&&broadcast.getValueFromUrl('moduleToWidgetize')=='Dashboard';},isLoginPage:function(){return!!$('body#loginPage').length;},propagateAjax:function(ajaxUrl,disableHistory){broadcast.init();globalAjaxQueue.abort();var currentHashStr=broadcast.getHash();ajaxUrl=ajaxUrl.replace(/^\?|&#/,'');var params_vals=ajaxUrl.split("&");for(var i=0;i<params_vals.length;i++){currentHashStr=broadcast.updateParamValue(params_vals[i],currentHashStr);}
|
842 |
var action=broadcast.getParamValue('action',currentHashStr);if(action!='goalReport'&&action!='ecommerceReport'&&action!='products'&&action!='sales'&&(''+ajaxUrl).indexOf('&idGoal=')===-1){currentHashStr=broadcast.updateParamValue('idGoal=',currentHashStr);}
|
843 |
var module=broadcast.getParamValue('module',currentHashStr);if(module!='Dashboard'){currentHashStr=broadcast.updateParamValue('idDashboard=',currentHashStr);}
|
844 |
if(module!='CustomDimensions'){currentHashStr=broadcast.updateParamValue('idDimension=',currentHashStr);}
|
@@ -1245,7 +1245,7 @@ angular.module('piwikApp.service').run(initPiwikService);initPiwikService.$injec
|
|
1245 |
var hasBlockedContent=false;(function(){angular.module('piwikApp.service').factory('piwikApi',piwikApiService);piwikApiService.$inject=['$http','$q','$rootScope','piwik','$window','piwikUrl'];function piwikApiService($http,$q,$rootScope,piwik,$window,piwikUrl){var url='index.php';var format='json';var getParams={};var postParams={};var allRequests=[];function addParams(params){if(typeof params=='string'){params=piwik.broadcast.getValuesFromUrl(params);}
|
1246 |
var arrayParams=['compareSegments','comparePeriods','compareDates'];for(var key in params){if(arrayParams.indexOf(key)!==-1&&!params[key]){continue;}
|
1247 |
getParams[key]=params[key];}}
|
1248 |
-
function withTokenInUrl(){postParams['token_auth']=piwik.token_auth;postParams['force_api_session']=
|
1249 |
function isRequestToApiMethod(){return getParams&&getParams['module']==='API'&&getParams['method'];}
|
1250 |
function reset(){getParams={};postParams={};}
|
1251 |
function isErrorResponse(response){return response&&angular.isObject(response)&&response.result=='error';}
|
@@ -1257,7 +1257,7 @@ function onError(response){var message='Something went wrong';if(response&&(resp
|
|
1257 |
return $q.reject(message);}
|
1258 |
var deferred=$q.defer(),requestPromise=deferred.promise;var headers={'Content-Type':'application/x-www-form-urlencoded','cache-control':'no-cache'};var requestFormat=format;if(getParams.format&&getParams.format.toLowerCase()!=='json'&&getParams.format.toLowerCase()!=='json'){requestFormat=getParams.format;}
|
1259 |
var ajaxCall={method:'POST',url:url+'?'+$.param(mixinDefaultGetParams(getParams)),responseType:requestFormat,data:$.param(getPostParams(postParams)),timeout:requestPromise,headers:headers};var promise=$http(ajaxCall).then(onSuccess,onError);var addAbortMethod=function(to,deferred){return{then:function(){return addAbortMethod(to.then.apply(to,arguments),deferred);},'finally':function(){return addAbortMethod(to.finally.apply(to,arguments),deferred);},'catch':function(){return addAbortMethod(to.catch.apply(to,arguments),deferred);},abort:function(){deferred.resolve();return this;}};};var request=addAbortMethod(promise,deferred);allRequests.push(request);return request.finally(function(){var index=allRequests.indexOf(request);if(index!==-1){allRequests.splice(index,1);}});}
|
1260 |
-
function getPostParams(params){if(isRequestToApiMethod()||piwik.shouldPropagateTokenAuth){params.token_auth=piwik.token_auth;params.force_api_session=
|
1261 |
return params;}
|
1262 |
function mixinDefaultGetParams(getParamsToMixin){var segment=piwikUrl.getSearchParam('segment');if(segment){segment=decodeURIComponent(segment);}
|
1263 |
var defaultParams={idSite:piwik.idSite||piwikUrl.getSearchParam('idSite'),period:piwik.period||piwikUrl.getSearchParam('period'),segment:segment};if(getParamsToMixin.token_auth){getParamsToMixin.token_auth=null;delete getParamsToMixin.token_auth;}
|
@@ -1268,7 +1268,7 @@ function abortAll(){reset();allRequests.forEach(function(request){request.abort(
|
|
1268 |
function abort(){abortAll();}
|
1269 |
function fetch(getParams,options){getParams.module=getParams.module||'API';if(!getParams.format){getParams.format='JSON';}
|
1270 |
addParams(getParams);var promise=send(options);reset();return promise;}
|
1271 |
-
function post(getParams,_postParams_,options){if(_postParams_){if(postParams&&postParams.token_auth&&!_postParams_.token_auth){_postParams_.token_auth=postParams.token_auth;_postParams_.force_api_session=
|
1272 |
postParams=_postParams_;}
|
1273 |
return fetch(getParams,options);}
|
1274 |
function addPostParams(_postParams_){if(_postParams_){angular.merge(postParams,_postParams_);}}
|
@@ -3392,7 +3392,7 @@ for(c=this,g=c.ll(t,r),t=g[0],r=g[1],h=c.rad(c.clon(t)),f=c.rad(r),u=Math.sin(f)
|
|
3392 |
(function(){window.UserCountryMap=window.UserCountryMap||{};var VisitorMap=window.UserCountryMap.VisitorMap=function(config,theWidget){this.config=config;this.theWidget=theWidget||false;this.run();};$.extend(VisitorMap.prototype,{run:function(){var self=this,config=self.config,colorManager=piwik.ColorManager,colorNames=['no-data-color','one-country-color','color-range-start-choropleth','color-range-start-normal','color-range-end-choropleth','color-range-end-normal','country-highlight-color','unknown-region-fill-color','unknown-region-stroke-color','region-stroke-color','invisible-region-background','city-label-color','city-stroke-color','city-highlight-stroke-color','city-highlight-fill-color','city-highlight-label-color','city-label-fill-color','city-selected-color','city-selected-label-color','region-layer-stroke-color','country-selected-color','region-selected-color','region-highlight-color'],colors=colorManager.getColors('visitor-map',colorNames),noDataColor=colors['no-data-color'],oneCountryColor=colors['one-country-color'],colorRangeStartChoropleth=colors['color-range-start-choropleth'],colorRangeStartNormal=colors['color-range-start-normal'],colorRangeEndChoropleth=colors['color-range-end-choropleth'],colorRangeEndNormal=colors['color-range-end-normal'],specialMetricsColorScale=colorManager.getColors('visitor-map',['special-metrics-color-scale-1','special-metrics-color-scale-2','special-metrics-color-scale-3','special-metrics-color-scale-4'],true),countryHighlightColor=colors['country-highlight-color'],countrySelectedColor=colors['country-selected-color'],unknownRegionFillColor=colors['unknown-region-fill-color'],unknownRegionStrokeColor=colors['unknown-region-stroke-color'],regionStrokeColor=colors['region-stroke-color'],regionSelectedColor=colors['region-selected-color'],regionHighlightColor=colors['region-highlight-color'],invisibleRegionBackgroundColor=colors['invisible-region-background'],cityLabelColor=colors['city-label-color'],cityLabelFillColor=colors['city-label-fill-color'],cityStrokeColor=colors['city-stroke-color'],cityHighlightStrokeColor=colors['city-highlight-stroke-color'],cityHighlightFillColor=colors['city-highlight-fill-color'],cityHighlightLabelColor=colors['city-highlight-label-color'],citySelectedColor=colors['city-selected-color'],citySelectedLabelColor=colors['city-selected-label-color'],regionLayerStrokeColor=colors['region-layer-stroke-color'],hasUserZoomed=false;function $$(selector){return $(selector,self.theWidget?self.theWidget.element:undefined);}
|
3393 |
var mapContainer=$$('.UserCountryMap_map').get(0),map=self.map=$K.map(mapContainer),main=$$('.UserCountryMap_container'),width=main.width(),_=config._;config.noDataColor=noDataColor;self.widget=$$('.widgetUserCountryMapvisitorMap').parent();function _reportParams(module,action,countryFilter){var params=$.extend(config.reqParams,{module:'API',method:'API.getProcessedReport',apiModule:module,apiAction:action,filter_limit:-1,limit:-1,format_metrics:0,showRawMetrics:1});if(countryFilter){$.extend(params,{filter_column:'country',filter_sort_column:'nb_visits',filter_pattern:countryFilter});}
|
3394 |
return params;}
|
3395 |
-
function ajax(params,dataType){dataType=dataType||'json';params=$.extend({},params);var token_auth=''+params.token_auth;delete params['token_auth'];return $.ajax({url:'index.php?'+$.param(params),dataType:dataType,data:{token_auth:token_auth,force_api_session:
|
3396 |
function minmax(values){values=values.sort(function(a,b){return Number(a)-Number(b);});return{min:values[0],max:values[values.length-1],median:values[Math.floor(values.length*0.5)],p33:values[Math.floor(values.length*0.33)],p66:values[Math.floor(values.length*0.66)],p90:values[Math.floor(values.length*0.9)]};}
|
3397 |
function formatNumber(v,metric,first){v=Number(v);if(v>1000000){return(v / 1000000).toFixed(1)+'m';}
|
3398 |
if(v>1000){return(v / 1000).toFixed(1)+'k';}
|
@@ -3491,7 +3491,7 @@ map.container.height(h-2);map.resize(w,h);if(w<355)$('.UserCountryMap .tableIcon
|
|
3491 |
if($('#dashboardWidgetsArea').length){var $widgetContent=$element.closest('.widgetContent');var self=this;$widgetContent.on('widget:maximise',function(){self.resize();}).on('widget:minimise',function(){self.resize();});}
|
3492 |
this.uniqueId='RealTimeMap_map-'+this._controlId;$('.RealTimeMap_map',$element).attr('id',this.uniqueId);this.map=$K.map('#'+this.uniqueId);$element.focus();},_initStandaloneMap:function(){var $rootScope=piwikHelper.getAngularDependency('$rootScope');$rootScope.$emit('hidePeriodSelector');$('.realTimeMap_overlay').css('top','0px');$('.realTimeMap_datetime').css('top','20px');},run:function(){var self=this,config=self.config,_=config._,map=self.map,maxVisits=config.maxVisits||100,changeVisitAlpha=typeof config.changeVisitAlpha==='undefined'?true:config.changeVisitAlpha,removeOldVisits=typeof config.removeOldVisits==='undefined'?true:config.removeOldVisits,doNotRefreshVisits=typeof config.doNotRefreshVisits==='undefined'?false:config.doNotRefreshVisits,enableAnimation=typeof config.enableAnimation==='undefined'?true:config.enableAnimation,forceNowValue=typeof config.forceNowValue==='undefined'?false:+config.forceNowValue,lastTimestamp=-1,lastVisits=[],visitSymbols,tokenAuth=''+config.reqParams.token_auth,oldest,isFullscreenWidget=$('.widget').parent().get(0)==document.body,now,nextReqTimer,symbolFadeInTimer=[],colorMode='default',currentMap='world',yesterday=false,userHasZoomed=false,colorManager=piwik.ColorManager,colors=colorManager.getColors('realtime-map',['white-bg','white-fill','black-bg','black-fill','visit-stroke','website-referrer-color','direct-referrer-color','search-referrer-color','live-widget-highlight','live-widget-unhighlight','symbol-animate-fill','region-stroke-color']),currentTheme='white',colorTheme={white:{bg:colors['white-bg'],fill:colors['white-fill']},black:{bg:colors['black-bg'],fill:colors['black-fill']}},visitStrokeColor=colors['visit-stroke'],referrerColorWebsite=colors['referrer-color-website'],referrerColorDirect=colors['referrer-color-direct'],referrerColorSearch=colors['referrer-color-search'],liveWidgetHighlightColor=colors['live-widget-highlight'],liveWidgetUnhighlightColor=colors['live-widget-unhighlight'],symbolAnimateFill=colors['symbol-animate-fill'];self.widget=$('#widgetRealTimeMaprealtimeMap').parent();var preset=self.widget.dashboardWidget('getWidgetObject').parameters;if(preset){currentTheme=preset.colorTheme;colorMode=preset.colorMode;currentMap=preset.lastMap;}
|
3493 |
function _reportParams(firstRun){return $.extend(config.reqParams,{module:'API',method:'Live.getLastVisitsDetails',filter_limit:maxVisits,showColumns:['latitude','longitude','actions','lastActionTimestamp','visitLocalTime','city','country','countryCode','referrerType','referrerName','referrerTypeName','browserIcon','operatingSystemIcon','deviceType','deviceModel','countryFlag','idVisit','actionDetails','continentCode','actions','searches','goalConversions','visitorId','userId'].join(','),minTimestamp:firstRun?0:lastTimestamp});}
|
3494 |
-
function ajax(params){delete params['token_auth'];return $.ajax({url:'index.php?'+$.param(params),dataType:'json',data:{token_auth:tokenAuth,force_api_session:
|
3495 |
function _updateMap(svgUrl,callback){if(svgUrl===undefined)return;map.loadMap(config.svgBasePath+svgUrl,function(){map.clear();self.resize();callback();$('.ui-tooltip').remove();},{padding:-3});}
|
3496 |
function onResizeLazy(){clearTimeout(self._resizeTimer);self._resizeTimer=setTimeout(self.resize.bind(self),300);}
|
3497 |
function age(r){var nowSecs=Math.floor(now);var o=(r.lastActionTimestamp-oldest)/(nowSecs-oldest);return Math.min(1,Math.max(0,o));}
|
1 |
+
/* Matomo Javascript - cb=f05b184e20179434052ab810627efe71*/
|
2 |
|
3 |
/*!
|
4 |
* Matomo - free/libre analytics platform
|
808 |
if(response&&response.result=='error'&&!that.useRegularCallbackInCaseOfError){var placeAt=null;var type='toast';if($(that.errorElement).length&&response.message){$(that.errorElement).show();placeAt=that.errorElement;type=null;}
|
809 |
if(response.message){var UI=require('piwik/UI');var notification=new UI.Notification();notification.show(response.message,{placeat:placeAt,context:'error',type:type,id:'ajaxHelper'});notification.scrollToNotification();}}else{that.callback(response,status,request);}
|
810 |
--globalAjaxQueue.active;var piwik=window.piwik;if(piwik&&piwik.ajaxRequestFinished){piwik.ajaxRequestFinished();}},data:this._mixinDefaultPostParams(this.postParams)};if(this.timeout!==null){ajaxCall.timeout=this.timeout;}
|
811 |
+
return $.ajax(ajaxCall);};this._isRequestToApiMethod=function(){return(this.getParams&&this.getParams['module']==='API'&&this.getParams['method'])||(this.postParams&&this.postParams['module']==='API'&&this.postParams['method']);};this._isWidgetizedRequest=function(){return(broadcast.getValueFromUrl('module')=='Widgetize');};this._getDefaultPostParams=function(){if(this.withToken||this._isRequestToApiMethod()||piwik.shouldPropagateTokenAuth){return{token_auth:piwik.token_auth,force_api_session:broadcast.isWidgetizeRequestWithoutSession()?0:1};}
|
812 |
return{};};this._mixinDefaultPostParams=function(params){var defaultParams=this._getDefaultPostParams();for(var index in defaultParams){if(!params[index]){params[index]=defaultParams[index];}}
|
813 |
return params;};this._mixinDefaultGetParams=function(params){var piwikUrl=piwikHelper.getAngularDependency('piwikUrl');var segment=piwikUrl.getSearchParam('segment');var defaultParams={idSite:piwik.idSite||broadcast.getValueFromUrl('idSite'),period:piwik.period||broadcast.getValueFromUrl('period'),segment:segment};if(params.token_auth){params.token_auth=null;delete params.token_auth;}
|
814 |
for(var key in defaultParams){if(this._useGETDefaultParameter(key)&&!params[key]&&!this.postParams[key]&&defaultParams[key]){params[key]=defaultParams[key];}}
|
838 |
var hashUrl=hashParts[0];var popoverParam='';if(hashParts.length>1){popoverParam=hashParts[1];popoverParam=decodeURIComponent(popoverParam);popoverParam=popoverParam.replace(/\$/g,'%');popoverParam=decodeURIComponent(popoverParam);}
|
839 |
var pageUrlUpdated=(popoverParam==''||(broadcast.currentHashUrl!==false&&broadcast.currentHashUrl!=hashUrl));var popoverParamUpdated=(popoverParam!=''&&hashUrl==broadcast.currentHashUrl);if(broadcast.currentHashUrl===false){pageUrlUpdated=true;popoverParamUpdated=(popoverParam!='');}
|
840 |
if(!broadcast.isWidgetizedDashboard()&&(pageUrlUpdated||broadcast.forceReload)){Piwik_Popover.close();if(hashUrl!=broadcast.currentHashUrl||broadcast.forceReload){broadcast.loadAjaxContent(hashUrl);$('.top_controls .dashboard-manager').hide();$('#dashboardWidgetsArea').dashboard('destroy');require('piwik/UI').UIControl.cleanupUnusedControls();}}
|
841 |
+
broadcast.forceReload=false;broadcast.currentHashUrl=hashUrl;broadcast.currentPopoverParameter=popoverParam;Piwik_Popover.close();if(popoverParamUpdated){var popoverParamParts=popoverParam.split(':');var handlerName=popoverParamParts[0];popoverParamParts.shift();var param=popoverParamParts.join(':');if(typeof broadcast.popoverHandlers[handlerName]!='undefined'&&!broadcast.isLoginPage()){broadcast.popoverHandlers[handlerName](param);}}}else{Piwik_Popover.close();if(!broadcast.isWidgetizedDashboard()){$('.pageWrap #content:not(.admin)').empty();}}},isWidgetizedDashboard:function(){return broadcast.getValueFromUrl('module')=='Widgetize'&&broadcast.getValueFromUrl('moduleToWidgetize')=='Dashboard';},isWidgetizeRequestWithoutSession:function(){return broadcast.getValueFromUrl('module')=='Widgetize'&&broadcast.getValueFromUrl('module')=='iframe'&&broadcast.getValueFromUrl('force_api_session')!='1';},isLoginPage:function(){return!!$('body#loginPage').length;},propagateAjax:function(ajaxUrl,disableHistory){broadcast.init();globalAjaxQueue.abort();var currentHashStr=broadcast.getHash();ajaxUrl=ajaxUrl.replace(/^\?|&#/,'');var params_vals=ajaxUrl.split("&");for(var i=0;i<params_vals.length;i++){currentHashStr=broadcast.updateParamValue(params_vals[i],currentHashStr);}
|
842 |
var action=broadcast.getParamValue('action',currentHashStr);if(action!='goalReport'&&action!='ecommerceReport'&&action!='products'&&action!='sales'&&(''+ajaxUrl).indexOf('&idGoal=')===-1){currentHashStr=broadcast.updateParamValue('idGoal=',currentHashStr);}
|
843 |
var module=broadcast.getParamValue('module',currentHashStr);if(module!='Dashboard'){currentHashStr=broadcast.updateParamValue('idDashboard=',currentHashStr);}
|
844 |
if(module!='CustomDimensions'){currentHashStr=broadcast.updateParamValue('idDimension=',currentHashStr);}
|
1245 |
var hasBlockedContent=false;(function(){angular.module('piwikApp.service').factory('piwikApi',piwikApiService);piwikApiService.$inject=['$http','$q','$rootScope','piwik','$window','piwikUrl'];function piwikApiService($http,$q,$rootScope,piwik,$window,piwikUrl){var url='index.php';var format='json';var getParams={};var postParams={};var allRequests=[];function addParams(params){if(typeof params=='string'){params=piwik.broadcast.getValuesFromUrl(params);}
|
1246 |
var arrayParams=['compareSegments','comparePeriods','compareDates'];for(var key in params){if(arrayParams.indexOf(key)!==-1&&!params[key]){continue;}
|
1247 |
getParams[key]=params[key];}}
|
1248 |
+
function withTokenInUrl(){postParams['token_auth']=piwik.token_auth;postParams['force_api_session']=piwik.broadcast.isWidgetizeRequestWithoutSession()?0:1;}
|
1249 |
function isRequestToApiMethod(){return getParams&&getParams['module']==='API'&&getParams['method'];}
|
1250 |
function reset(){getParams={};postParams={};}
|
1251 |
function isErrorResponse(response){return response&&angular.isObject(response)&&response.result=='error';}
|
1257 |
return $q.reject(message);}
|
1258 |
var deferred=$q.defer(),requestPromise=deferred.promise;var headers={'Content-Type':'application/x-www-form-urlencoded','cache-control':'no-cache'};var requestFormat=format;if(getParams.format&&getParams.format.toLowerCase()!=='json'&&getParams.format.toLowerCase()!=='json'){requestFormat=getParams.format;}
|
1259 |
var ajaxCall={method:'POST',url:url+'?'+$.param(mixinDefaultGetParams(getParams)),responseType:requestFormat,data:$.param(getPostParams(postParams)),timeout:requestPromise,headers:headers};var promise=$http(ajaxCall).then(onSuccess,onError);var addAbortMethod=function(to,deferred){return{then:function(){return addAbortMethod(to.then.apply(to,arguments),deferred);},'finally':function(){return addAbortMethod(to.finally.apply(to,arguments),deferred);},'catch':function(){return addAbortMethod(to.catch.apply(to,arguments),deferred);},abort:function(){deferred.resolve();return this;}};};var request=addAbortMethod(promise,deferred);allRequests.push(request);return request.finally(function(){var index=allRequests.indexOf(request);if(index!==-1){allRequests.splice(index,1);}});}
|
1260 |
+
function getPostParams(params){if(isRequestToApiMethod()||piwik.shouldPropagateTokenAuth){params.token_auth=piwik.token_auth;params.force_api_session=piwik.broadcast.isWidgetizeRequestWithoutSession()?0:1;}
|
1261 |
return params;}
|
1262 |
function mixinDefaultGetParams(getParamsToMixin){var segment=piwikUrl.getSearchParam('segment');if(segment){segment=decodeURIComponent(segment);}
|
1263 |
var defaultParams={idSite:piwik.idSite||piwikUrl.getSearchParam('idSite'),period:piwik.period||piwikUrl.getSearchParam('period'),segment:segment};if(getParamsToMixin.token_auth){getParamsToMixin.token_auth=null;delete getParamsToMixin.token_auth;}
|
1268 |
function abort(){abortAll();}
|
1269 |
function fetch(getParams,options){getParams.module=getParams.module||'API';if(!getParams.format){getParams.format='JSON';}
|
1270 |
addParams(getParams);var promise=send(options);reset();return promise;}
|
1271 |
+
function post(getParams,_postParams_,options){if(_postParams_){if(postParams&&postParams.token_auth&&!_postParams_.token_auth){_postParams_.token_auth=postParams.token_auth;_postParams_.force_api_session=piwik.broadcast.isWidgetizeRequestWithoutSession()?0:1;}
|
1272 |
postParams=_postParams_;}
|
1273 |
return fetch(getParams,options);}
|
1274 |
function addPostParams(_postParams_){if(_postParams_){angular.merge(postParams,_postParams_);}}
|
3392 |
(function(){window.UserCountryMap=window.UserCountryMap||{};var VisitorMap=window.UserCountryMap.VisitorMap=function(config,theWidget){this.config=config;this.theWidget=theWidget||false;this.run();};$.extend(VisitorMap.prototype,{run:function(){var self=this,config=self.config,colorManager=piwik.ColorManager,colorNames=['no-data-color','one-country-color','color-range-start-choropleth','color-range-start-normal','color-range-end-choropleth','color-range-end-normal','country-highlight-color','unknown-region-fill-color','unknown-region-stroke-color','region-stroke-color','invisible-region-background','city-label-color','city-stroke-color','city-highlight-stroke-color','city-highlight-fill-color','city-highlight-label-color','city-label-fill-color','city-selected-color','city-selected-label-color','region-layer-stroke-color','country-selected-color','region-selected-color','region-highlight-color'],colors=colorManager.getColors('visitor-map',colorNames),noDataColor=colors['no-data-color'],oneCountryColor=colors['one-country-color'],colorRangeStartChoropleth=colors['color-range-start-choropleth'],colorRangeStartNormal=colors['color-range-start-normal'],colorRangeEndChoropleth=colors['color-range-end-choropleth'],colorRangeEndNormal=colors['color-range-end-normal'],specialMetricsColorScale=colorManager.getColors('visitor-map',['special-metrics-color-scale-1','special-metrics-color-scale-2','special-metrics-color-scale-3','special-metrics-color-scale-4'],true),countryHighlightColor=colors['country-highlight-color'],countrySelectedColor=colors['country-selected-color'],unknownRegionFillColor=colors['unknown-region-fill-color'],unknownRegionStrokeColor=colors['unknown-region-stroke-color'],regionStrokeColor=colors['region-stroke-color'],regionSelectedColor=colors['region-selected-color'],regionHighlightColor=colors['region-highlight-color'],invisibleRegionBackgroundColor=colors['invisible-region-background'],cityLabelColor=colors['city-label-color'],cityLabelFillColor=colors['city-label-fill-color'],cityStrokeColor=colors['city-stroke-color'],cityHighlightStrokeColor=colors['city-highlight-stroke-color'],cityHighlightFillColor=colors['city-highlight-fill-color'],cityHighlightLabelColor=colors['city-highlight-label-color'],citySelectedColor=colors['city-selected-color'],citySelectedLabelColor=colors['city-selected-label-color'],regionLayerStrokeColor=colors['region-layer-stroke-color'],hasUserZoomed=false;function $$(selector){return $(selector,self.theWidget?self.theWidget.element:undefined);}
|
3393 |
var mapContainer=$$('.UserCountryMap_map').get(0),map=self.map=$K.map(mapContainer),main=$$('.UserCountryMap_container'),width=main.width(),_=config._;config.noDataColor=noDataColor;self.widget=$$('.widgetUserCountryMapvisitorMap').parent();function _reportParams(module,action,countryFilter){var params=$.extend(config.reqParams,{module:'API',method:'API.getProcessedReport',apiModule:module,apiAction:action,filter_limit:-1,limit:-1,format_metrics:0,showRawMetrics:1});if(countryFilter){$.extend(params,{filter_column:'country',filter_sort_column:'nb_visits',filter_pattern:countryFilter});}
|
3394 |
return params;}
|
3395 |
+
function ajax(params,dataType){dataType=dataType||'json';params=$.extend({},params);var token_auth=''+params.token_auth;delete params['token_auth'];return $.ajax({url:'index.php?'+$.param(params),dataType:dataType,data:{token_auth:token_auth,force_api_session:broadcast.isWidgetizeRequestWithoutSession()?0:1},type:'POST'});}
|
3396 |
function minmax(values){values=values.sort(function(a,b){return Number(a)-Number(b);});return{min:values[0],max:values[values.length-1],median:values[Math.floor(values.length*0.5)],p33:values[Math.floor(values.length*0.33)],p66:values[Math.floor(values.length*0.66)],p90:values[Math.floor(values.length*0.9)]};}
|
3397 |
function formatNumber(v,metric,first){v=Number(v);if(v>1000000){return(v / 1000000).toFixed(1)+'m';}
|
3398 |
if(v>1000){return(v / 1000).toFixed(1)+'k';}
|
3491 |
if($('#dashboardWidgetsArea').length){var $widgetContent=$element.closest('.widgetContent');var self=this;$widgetContent.on('widget:maximise',function(){self.resize();}).on('widget:minimise',function(){self.resize();});}
|
3492 |
this.uniqueId='RealTimeMap_map-'+this._controlId;$('.RealTimeMap_map',$element).attr('id',this.uniqueId);this.map=$K.map('#'+this.uniqueId);$element.focus();},_initStandaloneMap:function(){var $rootScope=piwikHelper.getAngularDependency('$rootScope');$rootScope.$emit('hidePeriodSelector');$('.realTimeMap_overlay').css('top','0px');$('.realTimeMap_datetime').css('top','20px');},run:function(){var self=this,config=self.config,_=config._,map=self.map,maxVisits=config.maxVisits||100,changeVisitAlpha=typeof config.changeVisitAlpha==='undefined'?true:config.changeVisitAlpha,removeOldVisits=typeof config.removeOldVisits==='undefined'?true:config.removeOldVisits,doNotRefreshVisits=typeof config.doNotRefreshVisits==='undefined'?false:config.doNotRefreshVisits,enableAnimation=typeof config.enableAnimation==='undefined'?true:config.enableAnimation,forceNowValue=typeof config.forceNowValue==='undefined'?false:+config.forceNowValue,lastTimestamp=-1,lastVisits=[],visitSymbols,tokenAuth=''+config.reqParams.token_auth,oldest,isFullscreenWidget=$('.widget').parent().get(0)==document.body,now,nextReqTimer,symbolFadeInTimer=[],colorMode='default',currentMap='world',yesterday=false,userHasZoomed=false,colorManager=piwik.ColorManager,colors=colorManager.getColors('realtime-map',['white-bg','white-fill','black-bg','black-fill','visit-stroke','website-referrer-color','direct-referrer-color','search-referrer-color','live-widget-highlight','live-widget-unhighlight','symbol-animate-fill','region-stroke-color']),currentTheme='white',colorTheme={white:{bg:colors['white-bg'],fill:colors['white-fill']},black:{bg:colors['black-bg'],fill:colors['black-fill']}},visitStrokeColor=colors['visit-stroke'],referrerColorWebsite=colors['referrer-color-website'],referrerColorDirect=colors['referrer-color-direct'],referrerColorSearch=colors['referrer-color-search'],liveWidgetHighlightColor=colors['live-widget-highlight'],liveWidgetUnhighlightColor=colors['live-widget-unhighlight'],symbolAnimateFill=colors['symbol-animate-fill'];self.widget=$('#widgetRealTimeMaprealtimeMap').parent();var preset=self.widget.dashboardWidget('getWidgetObject').parameters;if(preset){currentTheme=preset.colorTheme;colorMode=preset.colorMode;currentMap=preset.lastMap;}
|
3493 |
function _reportParams(firstRun){return $.extend(config.reqParams,{module:'API',method:'Live.getLastVisitsDetails',filter_limit:maxVisits,showColumns:['latitude','longitude','actions','lastActionTimestamp','visitLocalTime','city','country','countryCode','referrerType','referrerName','referrerTypeName','browserIcon','operatingSystemIcon','deviceType','deviceModel','countryFlag','idVisit','actionDetails','continentCode','actions','searches','goalConversions','visitorId','userId'].join(','),minTimestamp:firstRun?0:lastTimestamp});}
|
3494 |
+
function ajax(params){delete params['token_auth'];return $.ajax({url:'index.php?'+$.param(params),dataType:'json',data:{token_auth:tokenAuth,force_api_session:broadcast.isWidgetizeRequestWithoutSession()?0:1},type:'POST'});}
|
3495 |
function _updateMap(svgUrl,callback){if(svgUrl===undefined)return;map.loadMap(config.svgBasePath+svgUrl,function(){map.clear();self.resize();callback();$('.ui-tooltip').remove();},{padding:-3});}
|
3496 |
function onResizeLazy(){clearTimeout(self._resizeTimer);self._resizeTimer=setTimeout(self.resize.bind(self),300);}
|
3497 |
function age(r){var nowSecs=Math.floor(now);var o=(r.lastActionTimestamp-oldest)/(nowSecs-oldest);return Math.min(1,Math.max(0,o));}
|
classes/WpMatomo/API.php
CHANGED
@@ -50,6 +50,8 @@ class API {
|
|
50 |
$this->register_route( 'CoreAdminHome', 'runScheduledTasks' );
|
51 |
$this->register_route( 'Dashboard', 'getDashboards' );
|
52 |
$this->register_route( 'ImageGraph', 'get' );
|
|
|
|
|
53 |
$this->register_route( 'LanguagesManager', 'getAvailableLanguages' );
|
54 |
$this->register_route( 'LanguagesManager', 'getAvailableLanguagesInfo' );
|
55 |
$this->register_route( 'LanguagesManager', 'getAvailableLanguageNames' );
|
50 |
$this->register_route( 'CoreAdminHome', 'runScheduledTasks' );
|
51 |
$this->register_route( 'Dashboard', 'getDashboards' );
|
52 |
$this->register_route( 'ImageGraph', 'get' );
|
53 |
+
$this->register_route( 'VisitsSummary', 'getVisits' );
|
54 |
+
$this->register_route( 'VisitsSummary', 'getUniqueVisitors' );
|
55 |
$this->register_route( 'LanguagesManager', 'getAvailableLanguages' );
|
56 |
$this->register_route( 'LanguagesManager', 'getAvailableLanguagesInfo' );
|
57 |
$this->register_route( 'LanguagesManager', 'getAvailableLanguageNames' );
|
matomo.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Description: The #1 Google Analytics alternative that gives you full control over your data and protects the privacy for your users. Free, secure and open.
|
5 |
* Author: Matomo
|
6 |
* Author URI: https://matomo.org
|
7 |
-
* Version: 4.0.
|
8 |
* Domain Path: /languages
|
9 |
* WC requires at least: 2.4.0
|
10 |
* WC tested up to: 4.6.0
|
4 |
* Description: The #1 Google Analytics alternative that gives you full control over your data and protects the privacy for your users. Free, secure and open.
|
5 |
* Author: Matomo
|
6 |
* Author URI: https://matomo.org
|
7 |
+
* Version: 4.0.2
|
8 |
* Domain Path: /languages
|
9 |
* WC requires at least: 2.4.0
|
10 |
* WC tested up to: 4.6.0
|
plugins/WordPress/WpAssetManager.php
CHANGED
@@ -42,10 +42,10 @@ class WpAssetManager extends AssetManager
|
|
42 |
$jsFiles[] = "jquery/jquery.js";
|
43 |
$jsFiles[] = "node_modules/materialize-css/dist/js/materialize.min.js";
|
44 |
$jsFiles[] = 'jquery/ui/widget.min.js';
|
45 |
-
$jsFiles[] = 'jquery/ui/selectable.min.js';
|
46 |
-
$jsFiles[] = 'jquery/ui/autocomplete.min.js';
|
47 |
$jsFiles[] = 'jquery/ui/core.min.js';
|
48 |
$jsFiles[] = 'jquery/ui/mouse.min.js';
|
|
|
|
|
49 |
$jsFiles[] = 'jquery/ui/position.min.js';
|
50 |
$jsFiles[] = 'jquery/ui/resizable.min.js';
|
51 |
$jsFiles[] = 'jquery/ui/datepicker.min.js';
|
42 |
$jsFiles[] = "jquery/jquery.js";
|
43 |
$jsFiles[] = "node_modules/materialize-css/dist/js/materialize.min.js";
|
44 |
$jsFiles[] = 'jquery/ui/widget.min.js';
|
|
|
|
|
45 |
$jsFiles[] = 'jquery/ui/core.min.js';
|
46 |
$jsFiles[] = 'jquery/ui/mouse.min.js';
|
47 |
+
$jsFiles[] = 'jquery/ui/selectable.min.js';
|
48 |
+
$jsFiles[] = 'jquery/ui/autocomplete.min.js';
|
49 |
$jsFiles[] = 'jquery/ui/position.min.js';
|
50 |
$jsFiles[] = 'jquery/ui/resizable.min.js';
|
51 |
$jsFiles[] = 'jquery/ui/datepicker.min.js';
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
|
|
4 |
Tags: matomo,piwik,analytics,statistics,stats,tracking,ecommerce
|
5 |
Requires at least: 4.8
|
6 |
Tested up to: 5.6
|
7 |
-
Stable tag: 4.0.
|
8 |
Requires PHP: 7.2.5
|
9 |
License: GPLv3 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
4 |
Tags: matomo,piwik,analytics,statistics,stats,tracking,ecommerce
|
5 |
Requires at least: 4.8
|
6 |
Tested up to: 5.6
|
7 |
+
Stable tag: 4.0.2
|
8 |
Requires PHP: 7.2.5
|
9 |
License: GPLv3 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|