Matomo Analytics – Ethical Stats. Powerful Insights. - Version 4.0.2

Version Description

Download this release

Release Info

Developer matomoteam
Plugin Icon 128x128 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 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' => implode(',', $idArchivesToDelete)
146
  ));
147
 
148
  return $deletedRowCount;
@@ -191,8 +191,8 @@ class ArchivePurger
191
  )
192
  );
193
 
194
- $this->logger->debug("[Deleted IDs: {deletedIds}]", array(
195
- 'deletedIds' => implode(',', $idArchivesToDelete)
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
- $archivesToProcess = $queueConsumer->getNextArchivesToProcess();
 
 
 
 
 
 
 
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->getApiToInvalidateArchivedReport()->invalidateArchivedReports($siteIdsToInvalidate, $date);
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
- $period = PeriodFactory::build('range', $date);
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->getApiToInvalidateArchivedReport()->invalidateArchivedReports($idSiteToInvalidate, [$date], 'range', $segment = null, $cascadeDown = false, $_forceInvalidateNonexistant = true);
831
  }
832
 
833
  // for new segments, invalidate past dates
@@ -855,18 +856,13 @@ class CronArchive
855
  $this->logger->debug("Done invalidating");
856
  }
857
 
858
- private function invalidateRecentDate($dateStr, $idSite)
859
  {
860
- $isYesterday = $dateStr == 'yesterday';
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->getApiToInvalidateArchivedReport()->invalidateArchivedReports($idSite, $date->toString(), 'day');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
883
  }
884
 
885
- public function isThereExistingValidPeriod(Parameters $params, $isYesterday = false)
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 ($archivedTime) {
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
- private function getDoneFlagType($name)
494
  {
495
- if ($name == 'done') {
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()))->subSeconds(1);
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 Date::factory($archiveIdAndVisits[4])->getDatetime();
557
  }
558
 
559
- private function isSiteExists($idSite)
560
  {
561
- $site = API::getInstance()->getSiteFromId($idSite);
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 string[] $tables
709
- * @param int $count
 
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.3';
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||ci};this.setRequestContentType=function(di){cw=di||aI};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()}};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));
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.");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
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};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
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}};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=[];
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);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);
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)}}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))
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);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()
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()};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={};
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"];function ad(aq,ap){var ao=new P(aq,ap);
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||ci};this.setRequestContentType=function(di){cw=di||aI};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()}};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));
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.");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
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};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
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}};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=[];
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);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);
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)}}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))
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);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()
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()};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={};
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"];function ad(aq,ap){var ao=new P(aq,ap);
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||ci};this.setRequestContentType=function(di){cw=di||aI};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()}};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));
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.");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
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};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
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}};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=[];
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);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);
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)}}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))
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);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()
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()};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={};
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"];function ad(aq,ap){var ao=new P(aq,ap);
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
- if ($token_auth !== ''
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 ComposerAutoloaderInit6bb4c047c53a986f196efa0e07a5cf56::getLoader();
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.3',
18
- 'version' => '4.0.3.0',
19
  'aliases' =>
20
  array (
21
  ),
22
- 'reference' => 'f4dd5624a1f56602ea449668a40e00b70f0e28f4',
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.3',
120
- 'version' => '4.0.3.0',
121
  'aliases' =>
122
  array (
123
  ),
124
- 'reference' => 'f4dd5624a1f56602ea449668a40e00b70f0e28f4',
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 ComposerAutoloaderInit6bb4c047c53a986f196efa0e07a5cf56
6
  {
7
  private static $loader;
8
 
@@ -22,9 +22,9 @@ class ComposerAutoloaderInit6bb4c047c53a986f196efa0e07a5cf56
22
  return self::$loader;
23
  }
24
 
25
- spl_autoload_register(array('ComposerAutoloaderInit6bb4c047c53a986f196efa0e07a5cf56', 'loadClassLoader'), true, false);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
- spl_autoload_unregister(array('ComposerAutoloaderInit6bb4c047c53a986f196efa0e07a5cf56', 'loadClassLoader'));
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\ComposerStaticInit6bb4c047c53a986f196efa0e07a5cf56::getInitializer($loader));
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\ComposerStaticInit6bb4c047c53a986f196efa0e07a5cf56::$files;
59
  } else {
60
  $includeFiles = require __DIR__ . '/autoload_files.php';
61
  }
62
  foreach ($includeFiles as $fileIdentifier => $file) {
63
- composerRequire6bb4c047c53a986f196efa0e07a5cf56($fileIdentifier, $file);
64
  }
65
 
66
  return $loader;
67
  }
68
  }
69
 
70
- function composerRequire6bb4c047c53a986f196efa0e07a5cf56($fileIdentifier, $file)
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 ComposerStaticInit6bb4c047c53a986f196efa0e07a5cf56
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 = ComposerStaticInit6bb4c047c53a986f196efa0e07a5cf56::$prefixLengthsPsr4;
3194
- $loader->prefixDirsPsr4 = ComposerStaticInit6bb4c047c53a986f196efa0e07a5cf56::$prefixDirsPsr4;
3195
- $loader->prefixesPsr0 = ComposerStaticInit6bb4c047c53a986f196efa0e07a5cf56::$prefixesPsr0;
3196
- $loader->fallbackDirsPsr0 = ComposerStaticInit6bb4c047c53a986f196efa0e07a5cf56::$fallbackDirsPsr0;
3197
- $loader->classMap = ComposerStaticInit6bb4c047c53a986f196efa0e07a5cf56::$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.3',
5
- 'version' => '4.0.3.0',
6
  'aliases' =>
7
  array (
8
  ),
9
- 'reference' => 'f4dd5624a1f56602ea449668a40e00b70f0e28f4',
10
  'name' => 'matomo/matomo',
11
  ),
12
  'versions' =>
@@ -103,12 +103,12 @@
103
  ),
104
  'matomo/matomo' =>
105
  array (
106
- 'pretty_version' => '4.0.3',
107
- 'version' => '4.0.3.0',
108
  'aliases' =>
109
  array (
110
  ),
111
- 'reference' => 'f4dd5624a1f56602ea449668a40e00b70f0e28f4',
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=7af1ae523e1bfcb0ca4e03470a9b1ecc*/
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:'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,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']='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,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='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,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='1';}
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:'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,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:'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));}
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.1
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.1
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