diff --git a/www/CHANGELOG.md b/www/CHANGELOG.md
index 8a397f03..dc17106d 100644
--- a/www/CHANGELOG.md
+++ b/www/CHANGELOG.md
@@ -887,7 +887,7 @@ The folder containing expected screenshots was renamed from `expected-ui-screens
## Piwik 2.16.2
### New APIs
- * Multiple JavaScript trackers can now be created easily via `_paq.push(['addTracker', piwikUrl, piwikSiteId])`. All tracking requests will be then sent to all added Piwik trackers. [Learn more.](http://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers)
+ * Multiple JavaScript trackers can now be created easily via `_paq.push(['addTracker', piwikUrl, piwikSiteId])`. All tracking requests will be then sent to all added Piwik trackers. [Learn more.](https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers)
* It is possible to get an asynchronously created tracker instance (`addTracker`) via the method `Piwik.getAsyncTracker(optionalPiwikUrl, optionalPiwikSiteId)`. This allows you to get the tracker instance and to send different tracking requests to this Piwik instance and to configure it differently than other tracker instances.
* Added a new API method `Goals.getGoal($idSite, $idGoal)` to fetch a single goal.
diff --git a/www/core/API/DocumentationGenerator.php b/www/core/API/DocumentationGenerator.php
index 3cd382f1..f89011ba 100644
--- a/www/core/API/DocumentationGenerator.php
+++ b/www/core/API/DocumentationGenerator.php
@@ -59,7 +59,7 @@ public function getApiDocumentationAsString($outputExampleUrls = true)
}
/**
- * Used on developer.piwik.org
+ * Used on developer.matomo.org
*
* @param bool|true $outputExampleUrls
* @param string $prefixUrls
diff --git a/www/core/API/Request.php b/www/core/API/Request.php
index 34d70f82..5b82a34d 100644
--- a/www/core/API/Request.php
+++ b/www/core/API/Request.php
@@ -71,7 +71,7 @@
* ));
* echo "This DataTable has " . $dataTable->getRowsCount() . " rows.";
*
- * @see http://piwik.org/docs/analytics-api
+ * @see https://piwik.org/docs/analytics-api
* @api
*/
class Request
diff --git a/www/core/Application/Environment.php b/www/core/Application/Environment.php
index 6ca75dd3..728f22f8 100644
--- a/www/core/Application/Environment.php
+++ b/www/core/Application/Environment.php
@@ -125,7 +125,7 @@ public function getContainer()
}
/**
- * @link http://php-di.org/doc/container-configuration.html
+ * @link https://php-di.org/doc/container-configuration.html
*/
private function createContainer()
{
diff --git a/www/core/CliMulti.php b/www/core/CliMulti.php
index f3776eda..941371eb 100644
--- a/www/core/CliMulti.php
+++ b/www/core/CliMulti.php
@@ -134,7 +134,7 @@ public function handleSignal(int $signal): void
*
* @param string[] $piwikUrls An array of urls, for instance:
*
- * `array('http://www.example.com/piwik?module=API...')`
+ * `array('https://www.example.com/matomo?module=API...')`
*
* **Make sure query parameter values are properly encoded in the URLs.**
*
diff --git a/www/core/Common.php b/www/core/Common.php
index f5afbad0..20ea6491 100644
--- a/www/core/Common.php
+++ b/www/core/Common.php
@@ -337,7 +337,7 @@ public static function safe_unserialize($string, $allowedClasses = [], $rethrow
*
* **Implementation Details**
*
- * - [htmlspecialchars](http://php.net/manual/en/function.htmlspecialchars.php) is used to escape text.
+ * - [htmlspecialchars](https://php.net/manual/en/function.htmlspecialchars.php) is used to escape text.
* - Single quotes are not escaped so **Piwik's amazing community** will still be
* **Piwik's amazing community**.
* - Use of the `magic_quotes` setting will not break this method.
@@ -678,7 +678,7 @@ public static function getRandomString($length = 16, $alphabet = "abcdefghijklmn
* Convert hexadecimal representation into binary data.
* !! Will emit warning if input string is not hex!!
*
- * @see http://php.net/bin2hex
+ * @see https://php.net/bin2hex
*
* @param string $str Hexadecimal representation
* @return string
diff --git a/www/core/Console.php b/www/core/Console.php
index 1afb10d6..0fa3e0b2 100644
--- a/www/core/Console.php
+++ b/www/core/Console.php
@@ -277,7 +277,7 @@ protected function initEnvironment(OutputInterface $output)
* Register the console output into the logger.
*
* Ideally, this should be done automatically with events:
- * @see http://symfony.com/fr/doc/current/components/console/events.html
+ * @see https://symfony.com/fr/doc/current/components/console/events.html
* @see Symfony\Bridge\Monolog\Handler\ConsoleHandler::onCommand()
* But it would require to install Symfony's Event Dispatcher.
*/
diff --git a/www/core/Container/ContainerFactory.php b/www/core/Container/ContainerFactory.php
index a1b35536..63eab87e 100644
--- a/www/core/Container/ContainerFactory.php
+++ b/www/core/Container/ContainerFactory.php
@@ -56,7 +56,7 @@ public function __construct(PluginList $pluginList, GlobalSettingsProvider $sett
}
/**
- * @link http://php-di.org/doc/container-configuration.html
+ * @link https://php-di.org/doc/container-configuration.html
* @throws \Exception
* @return Container
*/
diff --git a/www/core/Cookie.php b/www/core/Cookie.php
index a8d2debc..7920fdb5 100644
--- a/www/core/Cookie.php
+++ b/www/core/Cookie.php
@@ -125,7 +125,7 @@ protected function getDefaultExpire()
* setcookie() replacement -- we don't use the built-in function because
* it is buggy for some PHP versions.
*
- * @link http://php.net/setcookie
+ * @link https://php.net/setcookie
*
* @param string $Name Name of cookie
* @param string $Value Value of cookie
diff --git a/www/core/DataTable.php b/www/core/DataTable.php
index 07d2549e..d3d39bb1 100644
--- a/www/core/DataTable.php
+++ b/www/core/DataTable.php
@@ -85,7 +85,7 @@
*
* All predefined filters exist in the **Piwik\DataTable\BaseFilter** namespace.
*
- * _Note: For convenience, [anonymous functions](http://www.php.net/manual/en/functions.anonymous.php)
+ * _Note: For convenience, [anonymous functions](https://www.php.net/manual/en/functions.anonymous.php)
* can be used as DataTable filters._
*
* ### Applying Filters
@@ -1826,7 +1826,7 @@ public function setMaximumAllowedRows($maximumAllowedRows)
* a subtable is encountered w/o the required label, a new row is created
* with the label, and a new subtable is added to the row.
*
- * Read [http://en.wikipedia.org/wiki/Tree_(data_structure)#Traversal_methods](http://en.wikipedia.org/wiki/Tree_(data_structure)#Traversal_methods)
+ * Read [https://en.wikipedia.org/wiki/Tree_(data_structure)#Traversal_methods](https://en.wikipedia.org/wiki/Tree_(data_structure)#Traversal_methods)
* for more information about tree walking.
*
* @param array $path The path to walk. An array of label values. The first element
diff --git a/www/core/DataTable/Filter/ColumnCallbackAddColumn.php b/www/core/DataTable/Filter/ColumnCallbackAddColumn.php
index 05ce2cd0..69321acc 100644
--- a/www/core/DataTable/Filter/ColumnCallbackAddColumn.php
+++ b/www/core/DataTable/Filter/ColumnCallbackAddColumn.php
@@ -57,7 +57,7 @@ class ColumnCallbackAddColumn extends BaseFilter
* @param string $columnToAdd The name of the column to add.
* @param callable $functionToApply The callback to apply to each row of a DataTable. The columns
* specified in `$columns` are passed to this callback.
- * @param array $functionParameters deprecated - use an [anonymous function](http://php.net/manual/en/functions.anonymous.php)
+ * @param array $functionParameters deprecated - use an [anonymous function](https://php.net/manual/en/functions.anonymous.php)
* instead.
*/
public function __construct($table, $columns, $columnToAdd, $functionToApply, $functionParameters = array())
diff --git a/www/core/DataTable/Filter/ColumnCallbackAddMetadata.php b/www/core/DataTable/Filter/ColumnCallbackAddMetadata.php
index 6be4d8c0..ca6ad0c2 100644
--- a/www/core/DataTable/Filter/ColumnCallbackAddMetadata.php
+++ b/www/core/DataTable/Filter/ColumnCallbackAddMetadata.php
@@ -37,7 +37,7 @@ class ColumnCallbackAddMetadata extends BaseFilter
* @param string|array $columnsToRead The columns to read from each row and pass on to the callback.
* @param string $metadataToAdd The name of the metadata field that will be added to each row.
* @param callable $functionToApply The callback to apply for each row.
- * @param array $functionParameters deprecated - use an [anonymous function](http://php.net/manual/en/functions.anonymous.php)
+ * @param array $functionParameters deprecated - use an [anonymous function](https://php.net/manual/en/functions.anonymous.php)
* instead.
* @param bool $applyToSummaryRow Whether the callback should be applied to the summary row or not.
*/
diff --git a/www/core/DataTable/Filter/ColumnCallbackDeleteRow.php b/www/core/DataTable/Filter/ColumnCallbackDeleteRow.php
index 2c9f968f..27a1bfe4 100644
--- a/www/core/DataTable/Filter/ColumnCallbackDeleteRow.php
+++ b/www/core/DataTable/Filter/ColumnCallbackDeleteRow.php
@@ -38,7 +38,7 @@ class ColumnCallbackDeleteRow extends BaseFilter
* passed to the callback.
* @param callback $function The callback that determines whether a row should be deleted
* or not. Should return `true` if the row should be deleted.
- * @param array $functionParams deprecated - use an [anonymous function](http://php.net/manual/en/functions.anonymous.php)
+ * @param array $functionParams deprecated - use an [anonymous function](https://php.net/manual/en/functions.anonymous.php)
* instead.
*/
public function __construct($table, $columnsToFilter, $function, $functionParams = [])
diff --git a/www/core/DataTable/Filter/ColumnCallbackReplace.php b/www/core/DataTable/Filter/ColumnCallbackReplace.php
index 542c9130..58b5235b 100644
--- a/www/core/DataTable/Filter/ColumnCallbackReplace.php
+++ b/www/core/DataTable/Filter/ColumnCallbackReplace.php
@@ -47,7 +47,7 @@ class ColumnCallbackReplace extends BaseFilter
* and then replaced with the callback's result.
* @param callable $functionToApply The function to execute. Must take the column value as a parameter
* and return a value that will be used to replace the original.
- * @param array|null $functionParameters deprecated - use an [anonymous function](http://php.net/manual/en/functions.anonymous.php)
+ * @param array|null $functionParameters deprecated - use an [anonymous function](https://php.net/manual/en/functions.anonymous.php)
* instead.
* @param array $extraColumnParameters Extra column values that should be passed to the callback, but
* shouldn't be replaced.
diff --git a/www/core/DataTable/Filter/GroupBy.php b/www/core/DataTable/Filter/GroupBy.php
index 4e9fe3f9..39e03a0b 100644
--- a/www/core/DataTable/Filter/GroupBy.php
+++ b/www/core/DataTable/Filter/GroupBy.php
@@ -54,7 +54,7 @@ class GroupBy extends BaseFilter
* @param string $groupByColumn The column name to reduce.
* @param callable $reduceFunction The reduce function. This must alter the `$groupByColumn`
* column in some way. If not set then the filter will group by the raw column value.
- * @param array $parameters deprecated - use an [anonymous function](http://php.net/manual/en/functions.anonymous.php)
+ * @param array $parameters deprecated - use an [anonymous function](https://php.net/manual/en/functions.anonymous.php)
* instead.
*/
public function __construct($table, $groupByColumn, $reduceFunction = null, $parameters = array())
diff --git a/www/core/DataTable/Filter/MetadataCallbackReplace.php b/www/core/DataTable/Filter/MetadataCallbackReplace.php
index 9f72a6c5..1582b216 100644
--- a/www/core/DataTable/Filter/MetadataCallbackReplace.php
+++ b/www/core/DataTable/Filter/MetadataCallbackReplace.php
@@ -34,7 +34,7 @@ class MetadataCallbackReplace extends ColumnCallbackReplace
* and then replaced with the callback's result.
* @param callable $functionToApply The function to execute. Must take the metadata value as a parameter
* and return a value that will be used to replace the original.
- * @param array|null $functionParameters deprecated - use an [anonymous function](http://php.net/manual/en/functions.anonymous.php)
+ * @param array|null $functionParameters deprecated - use an [anonymous function](https://php.net/manual/en/functions.anonymous.php)
* instead.
* @param array $extraColumnParameters Extra column values that should be passed to the callback, but
* shouldn't be replaced.
diff --git a/www/core/DataTable/Filter/SafeDecodeLabel.php b/www/core/DataTable/Filter/SafeDecodeLabel.php
index 40c79cec..9fe580df 100644
--- a/www/core/DataTable/Filter/SafeDecodeLabel.php
+++ b/www/core/DataTable/Filter/SafeDecodeLabel.php
@@ -48,7 +48,7 @@ public static function decodeLabelSafe($value)
// ENT_IGNORE so that if utf8 string has some errors, we simply discard invalid code unit sequences
$style = ENT_QUOTES | ENT_IGNORE;
- // See changes in 5.4: http://nikic.github.com/2012/01/28/htmlspecialchars-improvements-in-PHP-5-4.html
+ // See changes in 5.4: https://nikic.github.com/2012/01/28/htmlspecialchars-improvements-in-PHP-5-4.html
// Note: at some point we should change ENT_IGNORE to ENT_SUBSTITUTE
$value = htmlspecialchars($value, $style, 'UTF-8');
diff --git a/www/core/DataTable/Filter/Sort.php b/www/core/DataTable/Filter/Sort.php
index 0a78b063..9eefff02 100644
--- a/www/core/DataTable/Filter/Sort.php
+++ b/www/core/DataTable/Filter/Sort.php
@@ -17,7 +17,7 @@
/**
* Sorts a {@link DataTable} based on the value of a specific column.
*
- * It is possible to specify a natural sorting (see [php.net/natsort](http://php.net/natsort) for details).
+ * It is possible to specify a natural sorting (see [php.net/natsort](https://php.net/natsort) for details).
*
* @api
*/
@@ -38,7 +38,7 @@ class Sort extends BaseFilter
* @param DataTable $table The table to eventually filter.
* @param string $columnToSort The name of the column to sort by.
* @param string $order order `'asc'` or `'desc'`.
- * @param bool $naturalSort Whether to use a natural sort or not (see {@link http://php.net/natsort}).
+ * @param bool $naturalSort Whether to use a natural sort or not (see {@link https://php.net/natsort}).
* @param bool $recursiveSort Whether to sort all subtables or not.
* @param bool|callback $doSortBySecondaryColumn If true will sort by a secondary column. The column is automatically
* detected and will be either nb_visits or label, if possible.
diff --git a/www/core/DataTable/Filter/Truncate.php b/www/core/DataTable/Filter/Truncate.php
index 4717a86d..c28b4f31 100644
--- a/www/core/DataTable/Filter/Truncate.php
+++ b/www/core/DataTable/Filter/Truncate.php
@@ -129,7 +129,7 @@ private function addSummaryRow($table)
// case when the last row is a summary row, it is not indexed by $count but by DataTable::ID_SUMMARY_ROW
$summaryRow = $table->getRowFromId(DataTable::ID_SUMMARY_ROW);
- //FIXME: I'm not sure why it could return false, but it was reported in: http://forum.piwik.org/read.php?2,89324,page=1#msg-89442
+ //FIXME: I'm not sure why it could return false, but it was reported in: https://forum.piwik.org/read.php?2,89324,page=1#msg-89442
if ($summaryRow) {
$newRow->sumRow($summaryRow, $enableCopyMetadata = false, $aggregationOps);
}
diff --git a/www/core/Date.php b/www/core/Date.php
index f5fd96a4..a0dc2e49 100644
--- a/www/core/Date.php
+++ b/www/core/Date.php
@@ -477,7 +477,7 @@ public function isLeapYear()
}
/**
- * Converts this date to the requested string format. See {@link http://php.net/date}
+ * Converts this date to the requested string format. See {@link https://php.net/date}
* for the list of format strings.
*
* @param string $format
@@ -1141,7 +1141,7 @@ public static function secondsToDays($secs)
private static function getInvalidDateFormatException($dateString)
{
- $message = Piwik::translate('General_ExceptionInvalidDateFormat', array("YYYY-MM-DD, or 'today' or 'yesterday'", "strtotime", "http://php.net/strtotime"));
+ $message = Piwik::translate('General_ExceptionInvalidDateFormat', array("YYYY-MM-DD, or 'today' or 'yesterday'", "strtotime", "https://php.net/strtotime"));
return new Exception($message . ": " . var_export($dateString, true));
}
diff --git a/www/core/Db.php b/www/core/Db.php
index fe6aeb15..dc0fddbe 100644
--- a/www/core/Db.php
+++ b/www/core/Db.php
@@ -239,7 +239,7 @@ public static function destroyDatabaseObject()
* Executes an unprepared SQL query. Recommended for DDL statements like `CREATE`,
* `DROP` and `ALTER`. The return value is DBMS-specific. For MySQLI, it returns the
* number of rows affected. For PDO, it returns a
- * [Zend_Db_Statement](http://framework.zend.com/manual/1.12/en/zend.db.statement.html) object.
+ * [Zend_Db_Statement](https://framework.zend.com/manual/1.12/en/zend.db.statement.html) object.
*
* @param string $sql The SQL query.
* @throws \Exception If there is an error in the SQL.
@@ -267,7 +267,7 @@ public static function exec($sql)
}
/**
- * Executes an SQL query and returns the [Zend_Db_Statement](http://framework.zend.com/manual/1.12/en/zend.db.statement.html)
+ * Executes an SQL query and returns the [Zend_Db_Statement](https://framework.zend.com/manual/1.12/en/zend.db.statement.html)
* for the query.
*
* This method is meant for non-query SQL statements like `INSERT` and `UPDATE. If you want to fetch
diff --git a/www/core/Db/Adapter/Mysqli.php b/www/core/Db/Adapter/Mysqli.php
index cfc838ab..bc206a50 100644
--- a/www/core/Db/Adapter/Mysqli.php
+++ b/www/core/Db/Adapter/Mysqli.php
@@ -221,7 +221,7 @@ public static function isMysqliErrorNumber($e, $connection, $errno)
* Execute unprepared SQL query and throw away the result
*
* Workaround some SQL statements not compatible with prepare().
- * See http://framework.zend.com/issues/browse/ZF-1398
+ * See https://framework.zend.com/issues/browse/ZF-1398
*
* @param string $sqlQuery
* @return int Number of rows affected (SELECT/INSERT/UPDATE/DELETE)
diff --git a/www/core/Db/Adapter/Pdo/Mysql.php b/www/core/Db/Adapter/Pdo/Mysql.php
index c85ad542..c38eaf0c 100644
--- a/www/core/Db/Adapter/Pdo/Mysql.php
+++ b/www/core/Db/Adapter/Pdo/Mysql.php
@@ -78,11 +78,11 @@ public function getConnection()
/**
* Before MySQL 5.1.17, server-side prepared statements
* do not use the query cache.
- * @see http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html
+ * @see https://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html
*
* MySQL also does not support preparing certain DDL and SHOW
* statements.
- * @see http://framework.zend.com/issues/browse/ZF-1398
+ * @see https://framework.zend.com/issues/browse/ZF-1398
*/
$this->_connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
@@ -296,7 +296,7 @@ public function getClientVersion()
/**
* Override _dsn() to ensure host and port to not be passed along
* if unix_socket is set since setting both causes unexpected behaviour
- * @see http://php.net/manual/en/ref.pdo-mysql.connection.php
+ * @see https://php.net/manual/en/ref.pdo-mysql.connection.php
*/
protected function _dsn() // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore
{
diff --git a/www/core/Db/BatchInsert.php b/www/core/Db/BatchInsert.php
index c25d7b19..ad01f0a6 100644
--- a/www/core/Db/BatchInsert.php
+++ b/www/core/Db/BatchInsert.php
@@ -227,7 +227,7 @@ public static function createTableFromCSVFile($tableName, $fields, $filePath, $f
/*
* Second attempt: using the LOCAL keyword means the client reads the file and sends it to the server;
* the LOCAL keyword may trigger a known PHP PDO\MYSQL bug when MySQL not built with --enable-local-infile
- * @see http://bugs.php.net/bug.php?id=54158
+ * @see https://bugs.php.net/bug.php?id=54158
*/
$openBaseDir = ini_get('open_basedir');
$safeMode = ini_get('safe_mode');
diff --git a/www/core/Filesystem.php b/www/core/Filesystem.php
index 92b19a92..845fefe6 100644
--- a/www/core/Filesystem.php
+++ b/www/core/Filesystem.php
@@ -82,7 +82,7 @@ public static function isValidFilename($filename)
/**
* Get canonicalized absolute path
- * See http://php.net/realpath
+ * See https://php.net/realpath
*
* @param string $path
* @return string canonicalized absolute path
@@ -183,11 +183,11 @@ public static function checkIfFileSystemIsNFS()
/**
* Recursively find pathnames that match a pattern.
*
- * See {@link http://php.net/manual/en/function.glob.php glob} for more info.
+ * See {@link https://php.net/manual/en/function.glob.php glob} for more info.
*
* @param string $sDir directory The directory to glob in.
* @param string $sPattern pattern The pattern to match paths against.
- * @param int $nFlags `glob()` . See {@link http://php.net/manual/en/function.glob.php glob()}.
+ * @param int $nFlags `glob()` . See {@link https://php.net/manual/en/function.glob.php glob()}.
* @return array The list of paths that match the pattern.
* @api
*/
diff --git a/www/core/FrontController.php b/www/core/FrontController.php
index ff781bda..15877c1a 100644
--- a/www/core/FrontController.php
+++ b/www/core/FrontController.php
@@ -59,7 +59,7 @@
* return $realtimeMap->render();
* }
*
- * For a detailed explanation, see the documentation [here](https://developer.piwik.org/guides/how-piwik-works).
+ * For a detailed explanation, see the documentation [here](https://developer.matomo.org/guides/how-piwik-works).
*
* @method static \Piwik\FrontController getInstance()
*/
diff --git a/www/core/Http.php b/www/core/Http.php
index e8f17478..66ce9c7d 100644
--- a/www/core/Http.php
+++ b/www/core/Http.php
@@ -882,7 +882,7 @@ private static function buildHeadersForPost($requestBody)
* {
* $outputPath = PIWIK_INCLUDE_PATH . '/tmp/averybigfile.zip';
* $isStart = Common::getRequestVar('isStart', 1, 'int');
- * Http::downloadChunk("http://bigfiles.com/averybigfile.zip", $outputPath, $isStart == 1);
+ * Http::downloadChunk("https://bigfiles.com/averybigfile.zip", $outputPath, $isStart == 1);
* }
* ```
*
diff --git a/www/core/Intl/Data/Resources/currencies.php b/www/core/Intl/Data/Resources/currencies.php
index ee2fb950..b7866e2a 100644
--- a/www/core/Intl/Data/Resources/currencies.php
+++ b/www/core/Intl/Data/Resources/currencies.php
@@ -10,7 +10,7 @@
/**
* International currencies in circulation.
*
- * @see http://en.wikipedia.org/wiki/List_of_circulating_currencies
+ * @see https://en.wikipedia.org/wiki/List_of_circulating_currencies
*/
return array(
// 'ISO-4217 CODE' => array('currency symbol', 'description'),
diff --git a/www/core/Nonce.php b/www/core/Nonce.php
index a10829ff..ff220f3a 100644
--- a/www/core/Nonce.php
+++ b/www/core/Nonce.php
@@ -20,7 +20,7 @@
*
* Nonces in Piwik are stored as a session variable and have a configurable expiration.
*
- * Learn more about nonces [here](http://en.wikipedia.org/wiki/Cryptographic_nonce).
+ * Learn more about nonces [here](https://en.wikipedia.org/wiki/Cryptographic_nonce).
*
* @api
*/
diff --git a/www/core/NumberFormatter.php b/www/core/NumberFormatter.php
index f6a1780d..18421720 100644
--- a/www/core/NumberFormatter.php
+++ b/www/core/NumberFormatter.php
@@ -378,7 +378,7 @@ protected function formatNumberWithPattern($pattern, $value, $maximumFractionDig
*
* @return string
*
- * @see http://cldr.unicode.org/translation/number-symbols
+ * @see https://cldr.unicode.org/translation/number-symbols
*/
protected function replaceSymbols($value)
{
diff --git a/www/core/Plugin.php b/www/core/Plugin.php
index baafa969..e4c6e303 100644
--- a/www/core/Plugin.php
+++ b/www/core/Plugin.php
@@ -526,7 +526,7 @@ public function schedulePluginReArchiving()
* Extracts the plugin name from a backtrace array. Returns `false` if we can't find one.
*
* @param array $backtrace The result of {@link debug_backtrace()} or
- * [Exception::getTrace()](http://www.php.net/manual/en/exception.gettrace.php).
+ * [Exception::getTrace()](https://www.php.net/manual/en/exception.gettrace.php).
* @return string|false
*/
public static function getPluginNameFromBacktrace($backtrace)
diff --git a/www/core/ProxyHttp.php b/www/core/ProxyHttp.php
index 19dd4faa..345f9ea3 100644
--- a/www/core/ProxyHttp.php
+++ b/www/core/ProxyHttp.php
@@ -245,7 +245,7 @@ public static function isPhpOutputCompressed()
* Cache-Control: no-store,max-age=0,must-revalidate
* Pragma: no-cache
*
- * @see http://support.microsoft.com/kb/316431/
+ * @see https://support.microsoft.com/kb/316431/
* @see RFC2616
*
* @param string $override One of "public", "private", "no-cache", or "no-store". (optional)
diff --git a/www/core/QuickForm2.php b/www/core/QuickForm2.php
index 4958b5a3..ab2df5f6 100644
--- a/www/core/QuickForm2.php
+++ b/www/core/QuickForm2.php
@@ -21,7 +21,7 @@
* For an example, @see Piwik\Plugins\Login\FormLogin
*
* @see HTML_QuickForm2, libs/HTML/QuickForm2.php
- * @link http://pear.php.net/package/HTML_QuickForm2/
+ * @link https://pear.php.net/package/HTML_QuickForm2/
*/
abstract class QuickForm2 extends HTML_QuickForm2
{
diff --git a/www/core/Scheduler/Schedule/Schedule.php b/www/core/Scheduler/Schedule/Schedule.php
index 38ca191b..d6d5a3a4 100644
--- a/www/core/Scheduler/Schedule/Schedule.php
+++ b/www/core/Scheduler/Schedule/Schedule.php
@@ -29,14 +29,14 @@ abstract class Schedule
public const PERIOD_RANGE = 'range';
/**
- * @link http://php.net/manual/en/function.date.php, format string : 'G'
+ * @link https://php.net/manual/en/function.date.php, format string : 'G'
* Defaults to midnight
* @var integer
*/
protected $hour = 0;
/**
- * For weekly scheduling : http://php.net/manual/en/function.date.php, format string : 'N', defaults to Monday
+ * For weekly scheduling : https://php.net/manual/en/function.date.php, format string : 'N', defaults to Monday
* For monthly scheduling : day of the month (1 to 31) (note: will be capped at the latest day available the
* month), defaults to first day of the month
* @var integer
diff --git a/www/core/SettingsPiwik.php b/www/core/SettingsPiwik.php
index 92428e55..a6ce4b33 100644
--- a/www/core/SettingsPiwik.php
+++ b/www/core/SettingsPiwik.php
@@ -175,7 +175,7 @@ public static function getWebsitesCountToDisplay(): int
}
/**
- * Returns the URL to this Piwik instance, eg. **http://demo.piwik.org/** or **http://example.org/piwik/**.
+ * Returns the URL to this Piwik instance, eg. **https://demo.piwik.org/** or **https://example.org/piwik/**.
*
* @return string|false return false if no value is configured and we are in PHP CLI mode
* @api
@@ -416,7 +416,7 @@ public static function checkPiwikServerWorking(string $piwikServerUrl, bool $acc
/**
* Returns true if Piwik is deployed using git
- * FAQ: http://piwik.org/faq/how-to-install/faq_18271/
+ * FAQ: https://piwik.org/faq/how-to-install/faq_18271/
*
* @return bool
*/
diff --git a/www/core/SettingsServer.php b/www/core/SettingsServer.php
index 5332b69f..80d2f681 100644
--- a/www/core/SettingsServer.php
+++ b/www/core/SettingsServer.php
@@ -226,7 +226,7 @@ public static function getPostMaxUploadSize()
}
/**
- * @see http://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes
+ * @see https://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes
* @param $value
* @return false|float|int
*/
diff --git a/www/core/Tracker/Db/Pdo/Mysql.php b/www/core/Tracker/Db/Pdo/Mysql.php
index f3cc6902..e302b625 100644
--- a/www/core/Tracker/Db/Pdo/Mysql.php
+++ b/www/core/Tracker/Db/Pdo/Mysql.php
@@ -428,7 +428,7 @@ private function establishConnection(): void
/*
* Lazy initialization via MYSQL_ATTR_INIT_COMMAND depends
* on mysqlnd support, PHP version, and OS.
- * see ZF-7428 and http://bugs.php.net/bug.php?id=47224
+ * see ZF-7428 and https://bugs.php.net/bug.php?id=47224
*/
if (!empty($this->charset)) {
$sql = "SET NAMES '" . $this->charset . "'";
diff --git a/www/core/Tracker/GoalManager.php b/www/core/Tracker/GoalManager.php
index 36f779a2..14fb60cf 100644
--- a/www/core/Tracker/GoalManager.php
+++ b/www/core/Tracker/GoalManager.php
@@ -778,7 +778,7 @@ protected function insertNewConversion($conversion, $visitInformation, Request $
*
* This event can be used to modify conversion information or to add new information to be persisted.
*
- * This event is deprecated, use [Dimensions](http://developer.piwik.org/guides/dimensions) instead.
+ * This event is deprecated, use [Dimensions](https://developer.matomo.org/guides/dimensions) instead.
*
* @param array $conversion The conversion entity. Read [this](/guides/persistence-and-the-mysql-backend#conversions)
* to see what it contains.
diff --git a/www/core/Tracker/PageUrl.php b/www/core/Tracker/PageUrl.php
index 2fa0d70d..910b6a7f 100644
--- a/www/core/Tracker/PageUrl.php
+++ b/www/core/Tracker/PageUrl.php
@@ -194,8 +194,8 @@ protected static function cleanupHostAndHashTag($parsedUrl, $idSite = false)
/**
* Converts Matrix URL format
- * from http://example.org/thing;paramA=1;paramB=6542
- * to http://example.org/thing?paramA=1¶mB=6542
+ * from https://example.org/thing;paramA=1;paramB=6542
+ * to https://example.org/thing?paramA=1¶mB=6542
*
* @param string $originalUrl
* @return string
diff --git a/www/core/Tracker/TrackerCodeGenerator.php b/www/core/Tracker/TrackerCodeGenerator.php
index e6aaa87a..34589c30 100644
--- a/www/core/Tracker/TrackerCodeGenerator.php
+++ b/www/core/Tracker/TrackerCodeGenerator.php
@@ -36,7 +36,7 @@ public function forceMatomoEndpoint()
/**
* @param int $idSite
- * @param string $piwikUrl http://path/to/piwik/site/
+ * @param string $piwikUrl https://path/to/piwik/site/
* @param bool $mergeSubdomains
* @param bool $groupPageTitlesByDomain
* @param bool $mergeAliasUrls
diff --git a/www/core/Tracker/VisitorRecognizer.php b/www/core/Tracker/VisitorRecognizer.php
index d29966b0..ac0f79ab 100644
--- a/www/core/Tracker/VisitorRecognizer.php
+++ b/www/core/Tracker/VisitorRecognizer.php
@@ -33,7 +33,7 @@ class VisitorRecognizer
private $visitFieldsToSelect;
/**
- * See http://piwik.org/faq/how-to/faq_175/.
+ * See https://piwik.org/faq/how-to/faq_175/.
*
* @var bool
*/
@@ -295,7 +295,7 @@ private function getVisitorFieldsPersist()
*
* Plugins can use this event to load additional visit entity properties for later use during tracking.
*
- * This event is deprecated, use [Dimensions](http://developer.piwik.org/guides/dimensions) instead.
+ * This event is deprecated, use [Dimensions](https://developer.matomo.org/guides/dimensions) instead.
*
* @deprecated
*/
diff --git a/www/core/Twig.php b/www/core/Twig.php
index 369c9d9f..20d35db7 100644
--- a/www/core/Twig.php
+++ b/www/core/Twig.php
@@ -139,6 +139,7 @@ public function __construct()
$this->addFilterSafelink();
$this->addFilterTrackMatomoLink();
$this->addFilterImplode();
+ $this->addFilterPreventLinking();
$this->twig->addFilter(new TwigFilter('ucwords', 'ucwords'));
$this->twig->addFilter(new TwigFilter('lcfirst', 'lcfirst'));
$this->twig->addFilter(new TwigFilter('ucfirst', 'ucfirst'));
@@ -284,7 +285,7 @@ private function addFunctionExternalLink()
{
$externalLink = new TwigFunction('externallink', function ($url) {
// Add tracking parameters if a matomo.org link
- $url = Url::addCampaignParametersToMatomoLink($url);
+ $url = Url::addCampaignParametersToMatomoLink($url);
return "";
});
@@ -648,6 +649,18 @@ private function addFilterImplode()
$this->twig->addFilter($implode);
}
+ private function addFilterPreventLinking()
+ {
+ $preventLinking = new TwigFilter('preventLinking', function ($string) {
+ while (preg_match('/\w+\.\w+/i', $string, $matches)) {
+ $string = str_replace($matches[0], str_replace('.', '.', $matches[0]), $string);
+ }
+
+ return $string;
+ }, ['is_safe' => ['all']]);
+ $this->twig->addFilter($preventLinking);
+ }
+
private function addTestIsNumeric()
{
$test = new TwigTest(
diff --git a/www/core/UpdateCheck.php b/www/core/UpdateCheck.php
index d06ab28e..53885282 100644
--- a/www/core/UpdateCheck.php
+++ b/www/core/UpdateCheck.php
@@ -69,7 +69,7 @@ public static function check($force = false, $interval = null)
/**
* Get the latest available version number for the currently active release channel. Eg '2.15.0-b4' or '2.15.0'.
- * Should return a semantic version number in format MAJOR.MINOR.PATCH (http://semver.org/).
+ * Should return a semantic version number in format MAJOR.MINOR.PATCH (https://semver.org/).
* Returns an empty string in case one cannot connect to the remote server.
* @return string
*/
diff --git a/www/core/UpdateCheck/ReleaseChannel.php b/www/core/UpdateCheck/ReleaseChannel.php
index 18c0b920..f84f6aa9 100644
--- a/www/core/UpdateCheck/ReleaseChannel.php
+++ b/www/core/UpdateCheck/ReleaseChannel.php
@@ -43,7 +43,7 @@ public function doesPreferStable()
/**
* Get the latest available version number for this release channel. Eg '2.15.0-b4' or '2.15.0'. Should be
- * a semantic version number in format MAJOR.MINOR.PATCH (http://semver.org/). Returning an empty string in case
+ * a semantic version number in format MAJOR.MINOR.PATCH (https://semver.org/). Returning an empty string in case
* one cannot connect to the remote server can be acceptable.
* @return string
*/
diff --git a/www/core/Updates/0.9.1.php b/www/core/Updates/0.9.1.php
index f9f910fe..4e9169ba 100644
--- a/www/core/Updates/0.9.1.php
+++ b/www/core/Updates/0.9.1.php
@@ -34,7 +34,7 @@ public function getMigrations(Updater $updater)
if (!SettingsServer::isTimezoneSupportEnabled()) {
return array();
}
- // @see http://bugs.php.net/46111
+ // @see https://bugs.php.net/46111
$timezones = timezone_identifiers_list();
$brokenTZ = array();
diff --git a/www/core/Updates/2.0-a13.php b/www/core/Updates/2.0-a13.php
index 94f40be9..df3ff2f8 100644
--- a/www/core/Updates/2.0-a13.php
+++ b/www/core/Updates/2.0-a13.php
@@ -53,7 +53,7 @@ public function getMigrations(Updater $updater)
$migrations[] = $this->migration->db->sql($query, $errorCodeTableNotFound);
$query = 'UPDATE `' . Common::prefixTable('option') . '` SET `option_name` = \'version_ScheduledReports\' WHERE `option_name` = \'version_PDFReports\' ';
- $migrations[] = $this->migration->db->sql($query, Updater\Migration\Db::ERROR_CODE_DUPLICATE_ENTRY); // http://forum.piwik.org/read.php?2,106895
+ $migrations[] = $this->migration->db->sql($query, Updater\Migration\Db::ERROR_CODE_DUPLICATE_ENTRY); // https://forum.piwik.org/read.php?2,106895
$migrations[] = $this->migration->plugin->activate('Referrers');
$migrations[] = $this->migration->plugin->activate('ScheduledReports');
diff --git a/www/core/Url.php b/www/core/Url.php
index 03e7fd69..4c4a8bfc 100644
--- a/www/core/Url.php
+++ b/www/core/Url.php
@@ -54,7 +54,7 @@ class Url
/**
* Returns the current URL.
*
- * @return string eg, `"http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
+ * @return string eg, `"https://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
* @api
*/
public static function getCurrentUrl()
@@ -70,8 +70,8 @@ public static function getCurrentUrl()
*
* @param bool $checkTrustedHost Whether to do trusted host check. Should ALWAYS be true,
* except in {@link Piwik\Plugin\Controller}.
- * @return string eg, `"http://example.org/dir1/dir2/index.php"` if the current URL is
- * `"http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`.
+ * @return string eg, `"https://example.org/dir1/dir2/index.php"` if the current URL is
+ * `"https://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`.
* @api
*/
public static function getCurrentUrlWithoutQueryString($checkTrustedHost = true)
@@ -85,8 +85,8 @@ public static function getCurrentUrlWithoutQueryString($checkTrustedHost = true)
* Returns the current URL without the query string and without the name of the file
* being executed.
*
- * @return string eg, `"http://example.org/dir1/dir2/"` if the current URL is
- * `"http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`.
+ * @return string eg, `"https://example.org/dir1/dir2/"` if the current URL is
+ * `"https://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`.
* @api
*/
public static function getCurrentUrlWithoutFileName()
@@ -100,7 +100,7 @@ public static function getCurrentUrlWithoutFileName()
* Returns the path to the script being executed. The script file name is not included.
*
* @return string eg, `"/dir1/dir2/"` if the current URL is
- * `"http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
+ * `"https://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
* @api
*/
public static function getCurrentScriptPath()
@@ -122,7 +122,7 @@ public static function getCurrentScriptPath()
*
* @param bool $removePathInfo If true (default value) then the PATH_INFO will be stripped.
* @return string eg, `"/dir1/dir2/index.php"` if the current URL is
- * `"http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
+ * `"https://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
* @api
*/
public static function getCurrentScriptName($removePathInfo = true)
@@ -141,7 +141,7 @@ public static function getCurrentScriptName($removePathInfo = true)
if (!empty($_SERVER['REQUEST_URI'])) {
$url .= $_SERVER['REQUEST_URI'];
- // strip http://host (Apache+Rails anomaly)
+ // strip https://host (Apache+Rails anomaly)
if (preg_match('~^https?://[^/]+($|/.*)~D', $url, $matches)) {
$url = $matches[1];
}
@@ -160,7 +160,7 @@ public static function getCurrentScriptName($removePathInfo = true)
/**
* SCRIPT_NAME is our fallback, though it may not be set correctly
*
- * @see http://php.net/manual/en/reserved.variables.php
+ * @see https://php.net/manual/en/reserved.variables.php
*/
if (empty($url)) {
if (isset($_SERVER['SCRIPT_NAME'])) {
@@ -254,7 +254,7 @@ public static function isValidHost($host = false): bool
$untrustedHost = mb_strtolower($host);
$untrustedHost = rtrim($untrustedHost, '.');
- $hostRegex = mb_strtolower('/(^|.)' . implode('$|', $trustedHosts) . '$/');
+ $hostRegex = mb_strtolower('/(^|\.)' . implode('$|', $trustedHosts) . '$/');
$result = preg_match($hostRegex, $untrustedHost);
return 0 !== $result;
@@ -305,7 +305,7 @@ protected static function saveHostsnameInConfig($host, $domain, $key)
*
* @param bool $checkIfTrusted Whether to do trusted host check. Should ALWAYS be true,
* except in Controller.
- * @return string|bool eg, `"demo.piwik.org"` or false if no host found.
+ * @return string|bool eg, `"demo.matomo.org"` or false if no host found.
*/
public static function getHost($checkIfTrusted = true)
{
@@ -377,7 +377,7 @@ public static function setHost($host)
* @param bool $checkTrustedHost Whether to do trusted host check. Should ALWAYS be true,
* except in Controller.
* @return string eg, `"example.org"` if the current URL is
- * `"http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
+ * `"https://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
* @api
*/
public static function getCurrentHost($default = 'unknown', $checkTrustedHost = true)
@@ -403,7 +403,7 @@ public static function getCurrentHost($default = 'unknown', $checkTrustedHost =
* Returns the query string of the current URL.
*
* @return string eg, `"?param1=value1¶m2=value2"` if the current URL is
- * `"http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
+ * `"https://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
* @api
*/
public static function getCurrentQueryString()
@@ -422,7 +422,7 @@ public static function getCurrentQueryString()
* Returns an array mapping query parameter names with query parameter values for
* the current URL.
*
- * @return array If current URL is `"http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
+ * @return array If current URL is `"https://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"`
* this will return:
*
* array(
@@ -633,7 +633,7 @@ public static function getTrustedHostsFromConfig()
{
$hosts = self::getHostsFromConfig('General', 'trusted_hosts');
- // Case user wrote in the config, http://example.com/test instead of example.com
+ // Case user wrote in the config, https://example.com/test instead of example.com
foreach ($hosts as &$host) {
if (UrlHelper::isLookLikeUrl($host)) {
$host = parse_url($host, PHP_URL_HOST);
@@ -704,7 +704,7 @@ public static function getHostFromUrl($url)
/**
* Checks whether any of the given URLs has the given host. If not, we will also check whether any URL uses a
- * subdomain of the given host. For instance if host is "example.com" and a URL is "http://www.example.com" we
+ * subdomain of the given host. For instance if host is "example.com" and a URL is "https://www.example.com" we
* consider this as valid and return true. The always trusted hosts such as "127.0.0.1" are considered valid as well.
*
* @param $host
diff --git a/www/core/UrlHelper.php b/www/core/UrlHelper.php
index b5f30db5..1450452a 100644
--- a/www/core/UrlHelper.php
+++ b/www/core/UrlHelper.php
@@ -164,12 +164,12 @@ public static function isLookLikeSafeUrl($url)
}
/**
- * Returns a URL created from the result of the [parse_url](http://php.net/manual/en/function.parse-url.php)
+ * Returns a URL created from the result of the [parse_url](https://php.net/manual/en/function.parse-url.php)
* function.
*
- * Copied from the PHP comments at [http://php.net/parse_url](http://php.net/parse_url).
+ * Copied from the PHP comments at [https://php.net/parse_url](https://php.net/parse_url).
*
- * @param array $parsed Result of [parse_url](http://php.net/manual/en/function.parse-url.php).
+ * @param array $parsed Result of [parse_url](https://php.net/manual/en/function.parse-url.php).
* @return false|string The URL or `false` if `$parsed` isn't an array.
* @api
*/
@@ -299,7 +299,7 @@ public static function getParameterFromQueryString($urlQuery, $parameter)
* @param string $url The URL.
* @param array $additionalParamsToAdd If not empty the given parameters will be added to the query.
* @param bool $preserveAnchor If true then do not remove any #anchor from the url, default false
- * @return string eg, `/test/index.php?module=CoreHome` if `$url` is `http://piwik.org/test/index.php?module=CoreHome`.
+ * @return string eg, `/test/index.php?module=CoreHome` if `$url` is `https://piwik.org/test/index.php?module=CoreHome`.
* @api
*/
public static function getPathAndQueryFromUrl($url, array $additionalParamsToAdd = [], bool $preserveAnchor = false)
@@ -336,7 +336,7 @@ public static function getPathAndQueryFromUrl($url, array $additionalParamsToAdd
/**
* Returns the query part from any valid url and adds additional parameters to the query part if needed.
*
- * @param string $url Any url eg `"http://example.com/piwik/?foo=bar"`
+ * @param string $url Any url eg `"https://example.com/piwik/?foo=bar"`
* @param array $additionalParamsToAdd If not empty the given parameters will be added to the query.
*
* @return string eg. `"foo=bar&foo2=bar2"`
diff --git a/www/core/View.php b/www/core/View.php
index 2ecb047f..8bc01197 100644
--- a/www/core/View.php
+++ b/www/core/View.php
@@ -26,7 +26,7 @@
}
/**
- * Encapsulates and manages a [Twig](http://twig.sensiolabs.org/) template.
+ * Encapsulates and manages a [Twig](https://twig.sensiolabs.org/) template.
*
* View lets you set properties that will be passed on to a Twig template.
* View will also set several properties that will be available in all Twig
diff --git a/www/js/piwik.js b/www/js/piwik.js
index bbdf165d..d002fd0f 100644
--- a/www/js/piwik.js
+++ b/www/js/piwik.js
@@ -3418,11 +3418,15 @@ if (typeof window.Matomo !== 'object') {
// Safari and Opera
// IE6/IE7 navigator.javaEnabled can't be aliased, so test directly
// on Edge navigator.javaEnabled() always returns `true`, so ignore it
- if (!((new RegExp('Edge[ /](\\d+[\\.\\d]+)')).test(navigatorAlias.userAgent)) &&
- typeof navigator.javaEnabled !== 'unknown' &&
- isDefined(navigatorAlias.javaEnabled) &&
- navigatorAlias.javaEnabled()) {
- browserFeatures.java = '1';
+ try {
+ if (!((new RegExp('Edge[ /](\\d+[\\.\\d]+)')).test(navigatorAlias.userAgent)) &&
+ typeof navigator.javaEnabled !== 'unknown' &&
+ isDefined(navigatorAlias.javaEnabled) &&
+ navigatorAlias.javaEnabled()) {
+ browserFeatures.java = '1';
+ }
+ } catch (ignore) {
+ // suppress error
}
if (!isDefined(windowAlias.showModalDialog) && isDefined(navigatorAlias.cookieEnabled)) {
diff --git a/www/js/piwik.min.js b/www/js/piwik.min.js
index a5b7d962..c3e85967 100644
--- a/www/js/piwik.min.js
+++ b/www/js/piwik.min.js
@@ -37,41 +37,41 @@ try{bu=K.title}catch(cU){bu=""}function aL(dN){if(bx&&dN!==da){return 0}var dL=n
dP.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dR=m&&bh(dM,dN,dL);if(!dR&&dL){cF(dM,dN)}else{if(typeof dN==="function"){dN({request:dM,trackerUrl:aM,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dN==="function")){dN({request:dM,trackerUrl:aM,success:true,xhr:this})}}};dP.setRequestHeader("Content-Type",cR);dP.withCredentials=true;dP.send(dM)}catch(dO){dQ=m&&bh(dM,dN,dL);if(!dQ&&dL){cF(dM,dN)}else{if(typeof dN==="function"){dN({request:dM,trackerUrl:aM,success:false})}}}cI()},50)}function cv(dM){var dL=new Date();var dN=dL.getTime()+dM;if(!s||dN>s){s=dN}}function bl(){bn=true;cT=new Date().getTime()}function dF(){var dL=new Date().getTime();return !cT||(dL-cT)>bg}function aH(){if(dF()){b4()}}function a5(){if(K.visibilityState==="hidden"&&dF()){b4()}else{if(K.visibilityState==="visible"){cT=new Date().getTime()}}}function dJ(){if(aW||!bg){return}aW=true;at(X,"focus",bl);at(X,"blur",aH);at(X,"visibilitychange",a5);ag++;v.addPlugin("HeartBeat"+ag,{unload:function(){if(aW&&dF()){b4()
}}})}function c0(dP){var dM=new Date();var dL=dM.getTime();dq=dL;if(cZ&&dL=dL.length){return[dL]}var dM=0;var dN=dL.length;var dO=[];for(dM;dM=dM&&dL<=(dM+ba)){return true}}return false}function dI(dL){if(!db){return""}var dP=e(dL,aD);if(!dP){return""}dP=String(dP);var dN=new RegExp("^[a-zA-Z0-9]+$");if(dP.length===32&&dN.test(dP)){var dM=dP.substr(16,32);
-if(du(dM)){var dO=dP.substr(0,16);return dO}}return""}function dc(){if(!b0){b0=dI(bZ)}var dN=new Date(),dL=Math.round(dN.getTime()/1000),dM=a2("id"),dQ=aL(dM),dP,dO;if(dQ){dP=dQ.split(".");dP.unshift("0");if(b0.length){dP[1]=b0}return dP}if(b0.length){dO=b0}else{if("0"===ci()){dO=""}else{dO=df()}}dP=["1",dO,dL];return dP}function a9(){var dO=dc(),dM=dO[0],dN=dO[1],dL=dO[2];return{newVisitor:dM,uuid:dN,createTs:dL}}function aP(){var dO=new Date(),dM=dO.getTime(),dP=a9().createTs;var dL=parseInt(dP,10);var dN=(dL*1000)+c8-dM;return dN}function aV(dL){if(!cj){return}var dN=new Date(),dM=Math.round(dN.getTime()/1000);if(!N(dL)){dL=a9()}var dO=dL.uuid+"."+dL.createTs+".";dG(a2("id"),dO,aP(),bC,dp,b5,aR)}function bX(){var dL=aL(a2("ref"));if(dL.length){try{dL=X.JSON.parse(dL);if(aa(dL)){return dL}}catch(dM){}}return["","",0,""]}function bJ(dN){var dM=bv+"testcookie_domain";var dL="testvalue";dG(dM,dL,10000,null,dN,b5,aR);if(aL(dM)===dL){cc(dM,null,dN);return true}return false}function aN(){var dM=bx;
-bx=false;var dL,dN;for(dL=0;dL2){return"&"+d5+"="+u(d6)}return""}var d2=dK(b9);var dU=dK(cC);dM+=dP(d2,"cvar");dM+=dP(dU,"e_cvar");if(aZ){dM+=dP(aZ,"_cvar");for(dX in dW){if(Object.prototype.hasOwnProperty.call(dW,dX)){if(aZ[dX][0]===""||aZ[dX][1]===""){delete aZ[dX]}}}if(b3){dG(dS,X.JSON.stringify(aZ),cE,bC,dp,b5,aR)
-}}if(bd&&bR&&!bs){dM=aI(dM);bs=true}if(aU){dM+="&pv_id="+aU}aV(dT);cs();dM+=ah(dZ,{tracker:bV,request:dM});if(dr.length){dM+="&"+dr}if(au()){dM+="&tracker_install_check="+q}if(D(cq)){dM=cq(dM)}return dM}b4=function bi(){var dL=new Date();dL=dL.getTime();if(!dq){return false}if(dq+bg<=dL){bV.ping();return true}return false};function bD(dO,dN,dS,dP,dL,dV){var dR="idgoal=0",dM=new Date(),dT=[],dU,dQ=String(dO).length;if(dQ){dR+="&ec_id="+u(dO)}dR+="&revenue="+dN;if(String(dS).length){dR+="&ec_st="+dS}if(String(dP).length){dR+="&ec_tx="+dP}if(String(dL).length){dR+="&ec_sh="+dL}if(String(dV).length){dR+="&ec_dt="+dV}if(ds){for(dU in ds){if(Object.prototype.hasOwnProperty.call(ds,dU)){if(!N(ds[dU][1])){ds[dU][1]=""}if(!N(ds[dU][2])){ds[dU][2]=""}if(!N(ds[dU][3])||String(ds[dU][3]).length===0){ds[dU][3]=0}if(!N(ds[dU][4])||String(ds[dU][4]).length===0){ds[dU][4]=1}dT.push(ds[dU])}}dR+="&ec_items="+u(X.JSON.stringify(dT))}dR=cL(dR,aw,"ecommerce");bS(dR,bW);if(dQ){ds={}}}function cb(dL,dP,dO,dN,dM,dQ){if(String(dL).length&&N(dP)){bD(dL,dP,dO,dN,dM,dQ)
-}}function bF(dL){if(N(dL)){bD("",dL,"","","","")}}function cd(dM,dO,dN){if(!bN){aU=br()}var dL=cL("action_name="+u(aq(dM||bu)),dO,"log");if(bd&&!bs){dL=aI(dL)}bS(dL,bW,dN)}function bb(dN,dM){var dO,dL="(^| )(piwik[_-]"+dM+"|matomo[_-]"+dM;if(dN){for(dO=0;dO0){dP=parseInt(dP,10);dS(dP)}})}var bQ={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dL=this.requests;this.requests=[];if(dL.length===1){bS(dL[0],bW)}else{dH(dL,bW)}},canQueue:function(){return !m&&this.enabled},pushMultiple:function(dM){if(!this.canQueue()){dH(dM,bW);return}var dL;for(dL=0;dL0){if(!N(dM)){dM=""}if(!y(dM)){dM=String(dM)}bz[dL]=dM}};this.getCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0&&Object.prototype.hasOwnProperty.call(bz,dL)){return bz[dL]}};this.deleteCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0){delete bz[dL]}};this.setCustomVariable=function(dM,dL,dP,dN){var dO;if(!N(dN)){dN="visit"}if(!N(dL)){return}if(!N(dP)){dP=""}if(dM>0){dL=!y(dL)?String(dL):dL;dP=!y(dP)?String(dP):dP;dO=[dL.slice(0,bG),dP.slice(0,bG)];if(dN==="visit"||dN===2){c3();aZ[dM]=dO}else{if(dN==="page"||dN===3){b9[dM]=dO}else{if(dN==="event"){cC[dM]=dO}}}}};this.getCustomVariable=function(dM,dN){var dL;if(!N(dN)){dN="visit"}if(dN==="page"||dN===3){dL=b9[dM]}else{if(dN==="event"){dL=cC[dM]}else{if(dN==="visit"||dN===2){c3();
-dL=aZ[dM]}}}if(!N(dL)||(dL&&dL[0]==="")){return false}return dL};this.deleteCustomVariable=function(dL,dM){if(this.getCustomVariable(dL,dM)){this.setCustomVariable(dL,"","",dM)}};this.deleteCustomVariables=function(dL){if(dL==="page"||dL===3){b9={}}else{if(dL==="event"){cC={}}else{if(dL==="visit"||dL===2){aZ={}}}}};this.storeCustomVariablesInCookie=function(){b3=true};this.setLinkTrackingTimer=function(dL){bW=dL};this.getLinkTrackingTimer=function(){return bW};this.setDownloadExtensions=function(dL){if(y(dL)){dL=dL.split("|")}dy=dL};this.addDownloadExtensions=function(dM){var dL;if(y(dM)){dM=dM.split("|")}for(dL=0;dL1&&av!=="addTracker"&&av!=="enableLinkTracking"){ap("The method "+av+' 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')
-}aA[av]++}}}}return az}var F=["addTracker","enableFileTracking","forgetCookieConsentGiven","requireCookieConsent","disableBrowserFeatureDetection","disableCampaignParameters","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","disableAlwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking","setPagePerformanceTiming","setExcludedQueryParams","setExcludedReferrers"];function ai(aw,av){var au=new U(aw,av);M.push(au);_paq=c(_paq,F);for(I=0;I<_paq.length;I++){if(_paq[I]){ak(_paq[I])}}_paq=new L();v.trigger("TrackerAdded",[au]);return au}at(X,"beforeunload",an,false);at(X,"visibilitychange",function(){if(m){return}if(K.visibilityState==="hidden"){ah("unload")
-}},false);at(X,"online",function(){if(N(g.serviceWorker)){g.serviceWorker.ready.then(function(au){if(au&&au.sync){return au.sync.register("matomoSync")}},function(){})}},false);at(X,"message",function(az){if(!az||!az.origin){return}var aB,ax,av;var aC=d(az.origin);var ay=v.getAsyncTrackers();for(ax=0;ax=dM&&dL<=(dM+ba)){return true}}return false}function dI(dL){if(!db){return""}var dP=e(dL,aD);if(!dP){return""}dP=String(dP);var dN=new RegExp("^[a-zA-Z0-9]+$");
+if(dP.length===32&&dN.test(dP)){var dM=dP.substr(16,32);if(du(dM)){var dO=dP.substr(0,16);return dO}}return""}function dc(){if(!b0){b0=dI(bZ)}var dN=new Date(),dL=Math.round(dN.getTime()/1000),dM=a2("id"),dQ=aL(dM),dP,dO;if(dQ){dP=dQ.split(".");dP.unshift("0");if(b0.length){dP[1]=b0}return dP}if(b0.length){dO=b0}else{if("0"===ci()){dO=""}else{dO=df()}}dP=["1",dO,dL];return dP}function a9(){var dO=dc(),dM=dO[0],dN=dO[1],dL=dO[2];return{newVisitor:dM,uuid:dN,createTs:dL}}function aP(){var dO=new Date(),dM=dO.getTime(),dP=a9().createTs;var dL=parseInt(dP,10);var dN=(dL*1000)+c8-dM;return dN}function aV(dL){if(!cj){return}var dN=new Date(),dM=Math.round(dN.getTime()/1000);if(!N(dL)){dL=a9()}var dO=dL.uuid+"."+dL.createTs+".";dG(a2("id"),dO,aP(),bC,dp,b5,aR)}function bX(){var dL=aL(a2("ref"));if(dL.length){try{dL=X.JSON.parse(dL);if(aa(dL)){return dL}}catch(dM){}}return["","",0,""]}function bJ(dN){var dM=bv+"testcookie_domain";var dL="testvalue";dG(dM,dL,10000,null,dN,b5,aR);if(aL(dM)===dL){cc(dM,null,dN);
+return true}return false}function aN(){var dM=bx;bx=false;var dL,dN;for(dL=0;dL2){return"&"+d5+"="+u(d6)}return""}var d2=dK(b9);var dU=dK(cC);dM+=dP(d2,"cvar");dM+=dP(dU,"e_cvar");if(aZ){dM+=dP(aZ,"_cvar");for(dX in dW){if(Object.prototype.hasOwnProperty.call(dW,dX)){if(aZ[dX][0]===""||aZ[dX][1]===""){delete aZ[dX]}}}if(b3){dG(dS,X.JSON.stringify(aZ),cE,bC,dp,b5,aR)}}if(bd&&bR&&!bs){dM=aI(dM);bs=true}if(aU){dM+="&pv_id="+aU}aV(dT);cs();dM+=ah(dZ,{tracker:bV,request:dM});if(dr.length){dM+="&"+dr}if(au()){dM+="&tracker_install_check="+q}if(D(cq)){dM=cq(dM)}return dM}b4=function bi(){var dL=new Date();dL=dL.getTime();if(!dq){return false}if(dq+bg<=dL){bV.ping();return true}return false};function bD(dO,dN,dS,dP,dL,dV){var dR="idgoal=0",dM=new Date(),dT=[],dU,dQ=String(dO).length;if(dQ){dR+="&ec_id="+u(dO)}dR+="&revenue="+dN;if(String(dS).length){dR+="&ec_st="+dS}if(String(dP).length){dR+="&ec_tx="+dP}if(String(dL).length){dR+="&ec_sh="+dL}if(String(dV).length){dR+="&ec_dt="+dV}if(ds){for(dU in ds){if(Object.prototype.hasOwnProperty.call(ds,dU)){if(!N(ds[dU][1])){ds[dU][1]=""
+}if(!N(ds[dU][2])){ds[dU][2]=""}if(!N(ds[dU][3])||String(ds[dU][3]).length===0){ds[dU][3]=0}if(!N(ds[dU][4])||String(ds[dU][4]).length===0){ds[dU][4]=1}dT.push(ds[dU])}}dR+="&ec_items="+u(X.JSON.stringify(dT))}dR=cL(dR,aw,"ecommerce");bS(dR,bW);if(dQ){ds={}}}function cb(dL,dP,dO,dN,dM,dQ){if(String(dL).length&&N(dP)){bD(dL,dP,dO,dN,dM,dQ)}}function bF(dL){if(N(dL)){bD("",dL,"","","","")}}function cd(dM,dO,dN){if(!bN){aU=br()}var dL=cL("action_name="+u(aq(dM||bu)),dO,"log");if(bd&&!bs){dL=aI(dL)}bS(dL,bW,dN)}function bb(dN,dM){var dO,dL="(^| )(piwik[_-]"+dM+"|matomo[_-]"+dM;if(dN){for(dO=0;dO0){dP=parseInt(dP,10);dS(dP)}})}var bQ={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dL=this.requests;this.requests=[];if(dL.length===1){bS(dL[0],bW)}else{dH(dL,bW)}},canQueue:function(){return !m&&this.enabled},pushMultiple:function(dM){if(!this.canQueue()){dH(dM,bW);return}var dL;for(dL=0;dL0){if(!N(dM)){dM=""}if(!y(dM)){dM=String(dM)}bz[dL]=dM}};this.getCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0&&Object.prototype.hasOwnProperty.call(bz,dL)){return bz[dL]}};this.deleteCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0){delete bz[dL]}};this.setCustomVariable=function(dM,dL,dP,dN){var dO;if(!N(dN)){dN="visit"}if(!N(dL)){return}if(!N(dP)){dP=""}if(dM>0){dL=!y(dL)?String(dL):dL;dP=!y(dP)?String(dP):dP;dO=[dL.slice(0,bG),dP.slice(0,bG)];if(dN==="visit"||dN===2){c3();aZ[dM]=dO}else{if(dN==="page"||dN===3){b9[dM]=dO
+}else{if(dN==="event"){cC[dM]=dO}}}}};this.getCustomVariable=function(dM,dN){var dL;if(!N(dN)){dN="visit"}if(dN==="page"||dN===3){dL=b9[dM]}else{if(dN==="event"){dL=cC[dM]}else{if(dN==="visit"||dN===2){c3();dL=aZ[dM]}}}if(!N(dL)||(dL&&dL[0]==="")){return false}return dL};this.deleteCustomVariable=function(dL,dM){if(this.getCustomVariable(dL,dM)){this.setCustomVariable(dL,"","",dM)}};this.deleteCustomVariables=function(dL){if(dL==="page"||dL===3){b9={}}else{if(dL==="event"){cC={}}else{if(dL==="visit"||dL===2){aZ={}}}}};this.storeCustomVariablesInCookie=function(){b3=true};this.setLinkTrackingTimer=function(dL){bW=dL};this.getLinkTrackingTimer=function(){return bW};this.setDownloadExtensions=function(dL){if(y(dL)){dL=dL.split("|")}dy=dL};this.addDownloadExtensions=function(dM){var dL;if(y(dM)){dM=dM.split("|")}for(dL=0;dL1&&av!=="addTracker"&&av!=="enableLinkTracking"){ap("The method "+av+' 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')}aA[av]++}}}}return az}var F=["addTracker","enableFileTracking","forgetCookieConsentGiven","requireCookieConsent","disableBrowserFeatureDetection","disableCampaignParameters","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","disableAlwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking","setPagePerformanceTiming","setExcludedQueryParams","setExcludedReferrers"];
+function ai(aw,av){var au=new U(aw,av);M.push(au);_paq=c(_paq,F);for(I=0;I<_paq.length;I++){if(_paq[I]){ak(_paq[I])}}_paq=new L();v.trigger("TrackerAdded",[au]);return au}at(X,"beforeunload",an,false);at(X,"visibilitychange",function(){if(m){return}if(K.visibilityState==="hidden"){ah("unload")}},false);at(X,"online",function(){if(N(g.serviceWorker)){g.serviceWorker.ready.then(function(au){if(au&&au.sync){return au.sync.register("matomoSync")}},function(){})}},false);at(X,"message",function(az){if(!az||!az.origin){return}var aB,ax,av;var aC=d(az.origin);var ay=v.getAsyncTrackers();for(ax=0;ax=200&&this.status<300)){var dR=m&&bh(dM,dN,dL);if(!dR&&dL){cF(dM,dN)}else{if(typeof dN==="function"){dN({request:dM,trackerUrl:aM,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dN==="function")){dN({request:dM,trackerUrl:aM,success:true,xhr:this})}}};dP.setRequestHeader("Content-Type",cR);dP.withCredentials=true;dP.send(dM)}catch(dO){dQ=m&&bh(dM,dN,dL);if(!dQ&&dL){cF(dM,dN)}else{if(typeof dN==="function"){dN({request:dM,trackerUrl:aM,success:false})}}}cI()},50)}function cv(dM){var dL=new Date();var dN=dL.getTime()+dM;if(!s||dN>s){s=dN}}function bl(){bn=true;cT=new Date().getTime()}function dF(){var dL=new Date().getTime();return !cT||(dL-cT)>bg}function aH(){if(dF()){b4()}}function a5(){if(K.visibilityState==="hidden"&&dF()){b4()}else{if(K.visibilityState==="visible"){cT=new Date().getTime()}}}function dJ(){if(aW||!bg){return}aW=true;at(X,"focus",bl);at(X,"blur",aH);at(X,"visibilitychange",a5);ag++;v.addPlugin("HeartBeat"+ag,{unload:function(){if(aW&&dF()){b4()
}}})}function c0(dP){var dM=new Date();var dL=dM.getTime();dq=dL;if(cZ&&dL=dL.length){return[dL]}var dM=0;var dN=dL.length;var dO=[];for(dM;dM=dM&&dL<=(dM+ba)){return true}}return false}function dI(dL){if(!db){return""}var dP=e(dL,aD);if(!dP){return""}dP=String(dP);var dN=new RegExp("^[a-zA-Z0-9]+$");if(dP.length===32&&dN.test(dP)){var dM=dP.substr(16,32);
-if(du(dM)){var dO=dP.substr(0,16);return dO}}return""}function dc(){if(!b0){b0=dI(bZ)}var dN=new Date(),dL=Math.round(dN.getTime()/1000),dM=a2("id"),dQ=aL(dM),dP,dO;if(dQ){dP=dQ.split(".");dP.unshift("0");if(b0.length){dP[1]=b0}return dP}if(b0.length){dO=b0}else{if("0"===ci()){dO=""}else{dO=df()}}dP=["1",dO,dL];return dP}function a9(){var dO=dc(),dM=dO[0],dN=dO[1],dL=dO[2];return{newVisitor:dM,uuid:dN,createTs:dL}}function aP(){var dO=new Date(),dM=dO.getTime(),dP=a9().createTs;var dL=parseInt(dP,10);var dN=(dL*1000)+c8-dM;return dN}function aV(dL){if(!cj){return}var dN=new Date(),dM=Math.round(dN.getTime()/1000);if(!N(dL)){dL=a9()}var dO=dL.uuid+"."+dL.createTs+".";dG(a2("id"),dO,aP(),bC,dp,b5,aR)}function bX(){var dL=aL(a2("ref"));if(dL.length){try{dL=X.JSON.parse(dL);if(aa(dL)){return dL}}catch(dM){}}return["","",0,""]}function bJ(dN){var dM=bv+"testcookie_domain";var dL="testvalue";dG(dM,dL,10000,null,dN,b5,aR);if(aL(dM)===dL){cc(dM,null,dN);return true}return false}function aN(){var dM=bx;
-bx=false;var dL,dN;for(dL=0;dL2){return"&"+d5+"="+u(d6)}return""}var d2=dK(b9);var dU=dK(cC);dM+=dP(d2,"cvar");dM+=dP(dU,"e_cvar");if(aZ){dM+=dP(aZ,"_cvar");for(dX in dW){if(Object.prototype.hasOwnProperty.call(dW,dX)){if(aZ[dX][0]===""||aZ[dX][1]===""){delete aZ[dX]}}}if(b3){dG(dS,X.JSON.stringify(aZ),cE,bC,dp,b5,aR)
-}}if(bd&&bR&&!bs){dM=aI(dM);bs=true}if(aU){dM+="&pv_id="+aU}aV(dT);cs();dM+=ah(dZ,{tracker:bV,request:dM});if(dr.length){dM+="&"+dr}if(au()){dM+="&tracker_install_check="+q}if(D(cq)){dM=cq(dM)}return dM}b4=function bi(){var dL=new Date();dL=dL.getTime();if(!dq){return false}if(dq+bg<=dL){bV.ping();return true}return false};function bD(dO,dN,dS,dP,dL,dV){var dR="idgoal=0",dM=new Date(),dT=[],dU,dQ=String(dO).length;if(dQ){dR+="&ec_id="+u(dO)}dR+="&revenue="+dN;if(String(dS).length){dR+="&ec_st="+dS}if(String(dP).length){dR+="&ec_tx="+dP}if(String(dL).length){dR+="&ec_sh="+dL}if(String(dV).length){dR+="&ec_dt="+dV}if(ds){for(dU in ds){if(Object.prototype.hasOwnProperty.call(ds,dU)){if(!N(ds[dU][1])){ds[dU][1]=""}if(!N(ds[dU][2])){ds[dU][2]=""}if(!N(ds[dU][3])||String(ds[dU][3]).length===0){ds[dU][3]=0}if(!N(ds[dU][4])||String(ds[dU][4]).length===0){ds[dU][4]=1}dT.push(ds[dU])}}dR+="&ec_items="+u(X.JSON.stringify(dT))}dR=cL(dR,aw,"ecommerce");bS(dR,bW);if(dQ){ds={}}}function cb(dL,dP,dO,dN,dM,dQ){if(String(dL).length&&N(dP)){bD(dL,dP,dO,dN,dM,dQ)
-}}function bF(dL){if(N(dL)){bD("",dL,"","","","")}}function cd(dM,dO,dN){if(!bN){aU=br()}var dL=cL("action_name="+u(aq(dM||bu)),dO,"log");if(bd&&!bs){dL=aI(dL)}bS(dL,bW,dN)}function bb(dN,dM){var dO,dL="(^| )(piwik[_-]"+dM+"|matomo[_-]"+dM;if(dN){for(dO=0;dO0){dP=parseInt(dP,10);dS(dP)}})}var bQ={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dL=this.requests;this.requests=[];if(dL.length===1){bS(dL[0],bW)}else{dH(dL,bW)}},canQueue:function(){return !m&&this.enabled},pushMultiple:function(dM){if(!this.canQueue()){dH(dM,bW);return}var dL;for(dL=0;dL0){if(!N(dM)){dM=""}if(!y(dM)){dM=String(dM)}bz[dL]=dM}};this.getCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0&&Object.prototype.hasOwnProperty.call(bz,dL)){return bz[dL]}};this.deleteCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0){delete bz[dL]}};this.setCustomVariable=function(dM,dL,dP,dN){var dO;if(!N(dN)){dN="visit"}if(!N(dL)){return}if(!N(dP)){dP=""}if(dM>0){dL=!y(dL)?String(dL):dL;dP=!y(dP)?String(dP):dP;dO=[dL.slice(0,bG),dP.slice(0,bG)];if(dN==="visit"||dN===2){c3();aZ[dM]=dO}else{if(dN==="page"||dN===3){b9[dM]=dO}else{if(dN==="event"){cC[dM]=dO}}}}};this.getCustomVariable=function(dM,dN){var dL;if(!N(dN)){dN="visit"}if(dN==="page"||dN===3){dL=b9[dM]}else{if(dN==="event"){dL=cC[dM]}else{if(dN==="visit"||dN===2){c3();
-dL=aZ[dM]}}}if(!N(dL)||(dL&&dL[0]==="")){return false}return dL};this.deleteCustomVariable=function(dL,dM){if(this.getCustomVariable(dL,dM)){this.setCustomVariable(dL,"","",dM)}};this.deleteCustomVariables=function(dL){if(dL==="page"||dL===3){b9={}}else{if(dL==="event"){cC={}}else{if(dL==="visit"||dL===2){aZ={}}}}};this.storeCustomVariablesInCookie=function(){b3=true};this.setLinkTrackingTimer=function(dL){bW=dL};this.getLinkTrackingTimer=function(){return bW};this.setDownloadExtensions=function(dL){if(y(dL)){dL=dL.split("|")}dy=dL};this.addDownloadExtensions=function(dM){var dL;if(y(dM)){dM=dM.split("|")}for(dL=0;dL1&&av!=="addTracker"&&av!=="enableLinkTracking"){ap("The method "+av+' 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')
-}aA[av]++}}}}return az}var F=["addTracker","enableFileTracking","forgetCookieConsentGiven","requireCookieConsent","disableBrowserFeatureDetection","disableCampaignParameters","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","disableAlwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking","setPagePerformanceTiming","setExcludedQueryParams","setExcludedReferrers"];function ai(aw,av){var au=new U(aw,av);M.push(au);_paq=c(_paq,F);for(I=0;I<_paq.length;I++){if(_paq[I]){ak(_paq[I])}}_paq=new L();v.trigger("TrackerAdded",[au]);return au}at(X,"beforeunload",an,false);at(X,"visibilitychange",function(){if(m){return}if(K.visibilityState==="hidden"){ah("unload")
-}},false);at(X,"online",function(){if(N(g.serviceWorker)){g.serviceWorker.ready.then(function(au){if(au&&au.sync){return au.sync.register("matomoSync")}},function(){})}},false);at(X,"message",function(az){if(!az||!az.origin){return}var aB,ax,av;var aC=d(az.origin);var ay=v.getAsyncTrackers();for(ax=0;ax=dM&&dL<=(dM+ba)){return true}}return false}function dI(dL){if(!db){return""}var dP=e(dL,aD);if(!dP){return""}dP=String(dP);var dN=new RegExp("^[a-zA-Z0-9]+$");
+if(dP.length===32&&dN.test(dP)){var dM=dP.substr(16,32);if(du(dM)){var dO=dP.substr(0,16);return dO}}return""}function dc(){if(!b0){b0=dI(bZ)}var dN=new Date(),dL=Math.round(dN.getTime()/1000),dM=a2("id"),dQ=aL(dM),dP,dO;if(dQ){dP=dQ.split(".");dP.unshift("0");if(b0.length){dP[1]=b0}return dP}if(b0.length){dO=b0}else{if("0"===ci()){dO=""}else{dO=df()}}dP=["1",dO,dL];return dP}function a9(){var dO=dc(),dM=dO[0],dN=dO[1],dL=dO[2];return{newVisitor:dM,uuid:dN,createTs:dL}}function aP(){var dO=new Date(),dM=dO.getTime(),dP=a9().createTs;var dL=parseInt(dP,10);var dN=(dL*1000)+c8-dM;return dN}function aV(dL){if(!cj){return}var dN=new Date(),dM=Math.round(dN.getTime()/1000);if(!N(dL)){dL=a9()}var dO=dL.uuid+"."+dL.createTs+".";dG(a2("id"),dO,aP(),bC,dp,b5,aR)}function bX(){var dL=aL(a2("ref"));if(dL.length){try{dL=X.JSON.parse(dL);if(aa(dL)){return dL}}catch(dM){}}return["","",0,""]}function bJ(dN){var dM=bv+"testcookie_domain";var dL="testvalue";dG(dM,dL,10000,null,dN,b5,aR);if(aL(dM)===dL){cc(dM,null,dN);
+return true}return false}function aN(){var dM=bx;bx=false;var dL,dN;for(dL=0;dL2){return"&"+d5+"="+u(d6)}return""}var d2=dK(b9);var dU=dK(cC);dM+=dP(d2,"cvar");dM+=dP(dU,"e_cvar");if(aZ){dM+=dP(aZ,"_cvar");for(dX in dW){if(Object.prototype.hasOwnProperty.call(dW,dX)){if(aZ[dX][0]===""||aZ[dX][1]===""){delete aZ[dX]}}}if(b3){dG(dS,X.JSON.stringify(aZ),cE,bC,dp,b5,aR)}}if(bd&&bR&&!bs){dM=aI(dM);bs=true}if(aU){dM+="&pv_id="+aU}aV(dT);cs();dM+=ah(dZ,{tracker:bV,request:dM});if(dr.length){dM+="&"+dr}if(au()){dM+="&tracker_install_check="+q}if(D(cq)){dM=cq(dM)}return dM}b4=function bi(){var dL=new Date();dL=dL.getTime();if(!dq){return false}if(dq+bg<=dL){bV.ping();return true}return false};function bD(dO,dN,dS,dP,dL,dV){var dR="idgoal=0",dM=new Date(),dT=[],dU,dQ=String(dO).length;if(dQ){dR+="&ec_id="+u(dO)}dR+="&revenue="+dN;if(String(dS).length){dR+="&ec_st="+dS}if(String(dP).length){dR+="&ec_tx="+dP}if(String(dL).length){dR+="&ec_sh="+dL}if(String(dV).length){dR+="&ec_dt="+dV}if(ds){for(dU in ds){if(Object.prototype.hasOwnProperty.call(ds,dU)){if(!N(ds[dU][1])){ds[dU][1]=""
+}if(!N(ds[dU][2])){ds[dU][2]=""}if(!N(ds[dU][3])||String(ds[dU][3]).length===0){ds[dU][3]=0}if(!N(ds[dU][4])||String(ds[dU][4]).length===0){ds[dU][4]=1}dT.push(ds[dU])}}dR+="&ec_items="+u(X.JSON.stringify(dT))}dR=cL(dR,aw,"ecommerce");bS(dR,bW);if(dQ){ds={}}}function cb(dL,dP,dO,dN,dM,dQ){if(String(dL).length&&N(dP)){bD(dL,dP,dO,dN,dM,dQ)}}function bF(dL){if(N(dL)){bD("",dL,"","","","")}}function cd(dM,dO,dN){if(!bN){aU=br()}var dL=cL("action_name="+u(aq(dM||bu)),dO,"log");if(bd&&!bs){dL=aI(dL)}bS(dL,bW,dN)}function bb(dN,dM){var dO,dL="(^| )(piwik[_-]"+dM+"|matomo[_-]"+dM;if(dN){for(dO=0;dO0){dP=parseInt(dP,10);dS(dP)}})}var bQ={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dL=this.requests;this.requests=[];if(dL.length===1){bS(dL[0],bW)}else{dH(dL,bW)}},canQueue:function(){return !m&&this.enabled},pushMultiple:function(dM){if(!this.canQueue()){dH(dM,bW);return}var dL;for(dL=0;dL0){if(!N(dM)){dM=""}if(!y(dM)){dM=String(dM)}bz[dL]=dM}};this.getCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0&&Object.prototype.hasOwnProperty.call(bz,dL)){return bz[dL]}};this.deleteCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0){delete bz[dL]}};this.setCustomVariable=function(dM,dL,dP,dN){var dO;if(!N(dN)){dN="visit"}if(!N(dL)){return}if(!N(dP)){dP=""}if(dM>0){dL=!y(dL)?String(dL):dL;dP=!y(dP)?String(dP):dP;dO=[dL.slice(0,bG),dP.slice(0,bG)];if(dN==="visit"||dN===2){c3();aZ[dM]=dO}else{if(dN==="page"||dN===3){b9[dM]=dO
+}else{if(dN==="event"){cC[dM]=dO}}}}};this.getCustomVariable=function(dM,dN){var dL;if(!N(dN)){dN="visit"}if(dN==="page"||dN===3){dL=b9[dM]}else{if(dN==="event"){dL=cC[dM]}else{if(dN==="visit"||dN===2){c3();dL=aZ[dM]}}}if(!N(dL)||(dL&&dL[0]==="")){return false}return dL};this.deleteCustomVariable=function(dL,dM){if(this.getCustomVariable(dL,dM)){this.setCustomVariable(dL,"","",dM)}};this.deleteCustomVariables=function(dL){if(dL==="page"||dL===3){b9={}}else{if(dL==="event"){cC={}}else{if(dL==="visit"||dL===2){aZ={}}}}};this.storeCustomVariablesInCookie=function(){b3=true};this.setLinkTrackingTimer=function(dL){bW=dL};this.getLinkTrackingTimer=function(){return bW};this.setDownloadExtensions=function(dL){if(y(dL)){dL=dL.split("|")}dy=dL};this.addDownloadExtensions=function(dM){var dL;if(y(dM)){dM=dM.split("|")}for(dL=0;dL1&&av!=="addTracker"&&av!=="enableLinkTracking"){ap("The method "+av+' 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')}aA[av]++}}}}return az}var F=["addTracker","enableFileTracking","forgetCookieConsentGiven","requireCookieConsent","disableBrowserFeatureDetection","disableCampaignParameters","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","disableAlwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking","setPagePerformanceTiming","setExcludedQueryParams","setExcludedReferrers"];
+function ai(aw,av){var au=new U(aw,av);M.push(au);_paq=c(_paq,F);for(I=0;I<_paq.length;I++){if(_paq[I]){ak(_paq[I])}}_paq=new L();v.trigger("TrackerAdded",[au]);return au}at(X,"beforeunload",an,false);at(X,"visibilitychange",function(){if(m){return}if(K.visibilityState==="hidden"){ah("unload")}},false);at(X,"online",function(){if(N(g.serviceWorker)){g.serviceWorker.ready.then(function(au){if(au&&au.sync){return au.sync.register("matomoSync")}},function(){})}},false);at(X,"message",function(az){if(!az||!az.origin){return}var aB,ax,av;var aC=d(az.origin);var ay=v.getAsyncTrackers();for(ax=0;axYou must specify the Super User token_auth as a parameter to this script, eg. ?token_auth=XYZ
if you wish to run this script through the browser.
However it is recommended to run it via cron in the command line, since it can take a long time to run.
In a shell, execute for example the following to trigger archiving on the local Piwik server:
-$ /path/to/php /path/to/piwik/console core:archive --url=http://your-website.org/path/to/piwik/
+$ /path/to/php /path/to/piwik/console core:archive --url=https://your-website.org/path/to/piwik/
\n\n";
exit;
}
diff --git a/www/misc/cron/archive.sh b/www/misc/cron/archive.sh
index e05b83ea..9288d179 100644
--- a/www/misc/cron/archive.sh
+++ b/www/misc/cron/archive.sh
@@ -2,7 +2,7 @@
# =======================================================================
# WARNING: this script archive.sh is DEPRECATED!
#
-# => Replace your cron with `/usr/bin/php /path/to/piwik/console core:archive --url=http://example.org/piwik/`
+# => Replace your cron with `/usr/bin/php /path/to/piwik/console core:archive --url=https://example.org/piwik/`
#
# See documentation at https://piwik.org/setup-auto-archiving/
# =======================================================================
@@ -30,7 +30,7 @@ ARCHIVE=`act_path ${0}`
PIWIK_CRON_FOLDER=`dirname ${ARCHIVE}`
PIWIK_PATH="$PIWIK_CRON_FOLDER"/../../console
-CONSOLE_CMD="$PHP_BIN -q $PIWIK_PATH core:archive --url=http://example.org"
+CONSOLE_CMD="$PHP_BIN -q $PIWIK_PATH core:archive --url=https://example.org"
MESSAGE="\n\n WARNING: this script archive.sh is DEPRECATED! \n\nPlease update your cron as explained in the documentation: https://matomo.org/docs/setup-auto-archiving/ \n\n"
diff --git a/www/misc/others/uninstall-delete-matomo-directory.php b/www/misc/others/uninstall-delete-matomo-directory.php
index 172cdfcb..d5312d66 100644
--- a/www/misc/others/uninstall-delete-matomo-directory.php
+++ b/www/misc/others/uninstall-delete-matomo-directory.php
@@ -5,9 +5,9 @@
// 1) Download and upload this file to your webserver
// 2) Remove the 2nd line (the "exit;")
// 3) Put this file in the folder that contains the matomo/ directory (above the matomo/ directory)
-// For example if the matomo/ folder is at http://your-site/matomo/ you put the file in http://your-site/uninstall-delete-matomo-directory.php
-// 4) Go with your browser to http://your-site/uninstall-delete-matomo-directory.php
-// 5) The folder http://your-site/matomo/ should now be deleted!
+// For example if the matomo/ folder is at https://your-site/matomo/ you put the file in https://your-site/uninstall-delete-matomo-directory.php
+// 4) Go with your browser to https://your-site/uninstall-delete-matomo-directory.php
+// 5) The folder https://your-site/matomo/ should now be deleted!
// We hope you enjoyed Matomo. If you have any feedback why you stopped using Matomo,
// please let us know at hello@matomo.org - we are interested by your experience
function unlinkRecursive($dir)
diff --git a/www/piwik.js b/www/piwik.js
index a5b7d962..c3e85967 100644
--- a/www/piwik.js
+++ b/www/piwik.js
@@ -37,41 +37,41 @@ try{bu=K.title}catch(cU){bu=""}function aL(dN){if(bx&&dN!==da){return 0}var dL=n
dP.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dR=m&&bh(dM,dN,dL);if(!dR&&dL){cF(dM,dN)}else{if(typeof dN==="function"){dN({request:dM,trackerUrl:aM,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dN==="function")){dN({request:dM,trackerUrl:aM,success:true,xhr:this})}}};dP.setRequestHeader("Content-Type",cR);dP.withCredentials=true;dP.send(dM)}catch(dO){dQ=m&&bh(dM,dN,dL);if(!dQ&&dL){cF(dM,dN)}else{if(typeof dN==="function"){dN({request:dM,trackerUrl:aM,success:false})}}}cI()},50)}function cv(dM){var dL=new Date();var dN=dL.getTime()+dM;if(!s||dN>s){s=dN}}function bl(){bn=true;cT=new Date().getTime()}function dF(){var dL=new Date().getTime();return !cT||(dL-cT)>bg}function aH(){if(dF()){b4()}}function a5(){if(K.visibilityState==="hidden"&&dF()){b4()}else{if(K.visibilityState==="visible"){cT=new Date().getTime()}}}function dJ(){if(aW||!bg){return}aW=true;at(X,"focus",bl);at(X,"blur",aH);at(X,"visibilitychange",a5);ag++;v.addPlugin("HeartBeat"+ag,{unload:function(){if(aW&&dF()){b4()
}}})}function c0(dP){var dM=new Date();var dL=dM.getTime();dq=dL;if(cZ&&dL=dL.length){return[dL]}var dM=0;var dN=dL.length;var dO=[];for(dM;dM=dM&&dL<=(dM+ba)){return true}}return false}function dI(dL){if(!db){return""}var dP=e(dL,aD);if(!dP){return""}dP=String(dP);var dN=new RegExp("^[a-zA-Z0-9]+$");if(dP.length===32&&dN.test(dP)){var dM=dP.substr(16,32);
-if(du(dM)){var dO=dP.substr(0,16);return dO}}return""}function dc(){if(!b0){b0=dI(bZ)}var dN=new Date(),dL=Math.round(dN.getTime()/1000),dM=a2("id"),dQ=aL(dM),dP,dO;if(dQ){dP=dQ.split(".");dP.unshift("0");if(b0.length){dP[1]=b0}return dP}if(b0.length){dO=b0}else{if("0"===ci()){dO=""}else{dO=df()}}dP=["1",dO,dL];return dP}function a9(){var dO=dc(),dM=dO[0],dN=dO[1],dL=dO[2];return{newVisitor:dM,uuid:dN,createTs:dL}}function aP(){var dO=new Date(),dM=dO.getTime(),dP=a9().createTs;var dL=parseInt(dP,10);var dN=(dL*1000)+c8-dM;return dN}function aV(dL){if(!cj){return}var dN=new Date(),dM=Math.round(dN.getTime()/1000);if(!N(dL)){dL=a9()}var dO=dL.uuid+"."+dL.createTs+".";dG(a2("id"),dO,aP(),bC,dp,b5,aR)}function bX(){var dL=aL(a2("ref"));if(dL.length){try{dL=X.JSON.parse(dL);if(aa(dL)){return dL}}catch(dM){}}return["","",0,""]}function bJ(dN){var dM=bv+"testcookie_domain";var dL="testvalue";dG(dM,dL,10000,null,dN,b5,aR);if(aL(dM)===dL){cc(dM,null,dN);return true}return false}function aN(){var dM=bx;
-bx=false;var dL,dN;for(dL=0;dL2){return"&"+d5+"="+u(d6)}return""}var d2=dK(b9);var dU=dK(cC);dM+=dP(d2,"cvar");dM+=dP(dU,"e_cvar");if(aZ){dM+=dP(aZ,"_cvar");for(dX in dW){if(Object.prototype.hasOwnProperty.call(dW,dX)){if(aZ[dX][0]===""||aZ[dX][1]===""){delete aZ[dX]}}}if(b3){dG(dS,X.JSON.stringify(aZ),cE,bC,dp,b5,aR)
-}}if(bd&&bR&&!bs){dM=aI(dM);bs=true}if(aU){dM+="&pv_id="+aU}aV(dT);cs();dM+=ah(dZ,{tracker:bV,request:dM});if(dr.length){dM+="&"+dr}if(au()){dM+="&tracker_install_check="+q}if(D(cq)){dM=cq(dM)}return dM}b4=function bi(){var dL=new Date();dL=dL.getTime();if(!dq){return false}if(dq+bg<=dL){bV.ping();return true}return false};function bD(dO,dN,dS,dP,dL,dV){var dR="idgoal=0",dM=new Date(),dT=[],dU,dQ=String(dO).length;if(dQ){dR+="&ec_id="+u(dO)}dR+="&revenue="+dN;if(String(dS).length){dR+="&ec_st="+dS}if(String(dP).length){dR+="&ec_tx="+dP}if(String(dL).length){dR+="&ec_sh="+dL}if(String(dV).length){dR+="&ec_dt="+dV}if(ds){for(dU in ds){if(Object.prototype.hasOwnProperty.call(ds,dU)){if(!N(ds[dU][1])){ds[dU][1]=""}if(!N(ds[dU][2])){ds[dU][2]=""}if(!N(ds[dU][3])||String(ds[dU][3]).length===0){ds[dU][3]=0}if(!N(ds[dU][4])||String(ds[dU][4]).length===0){ds[dU][4]=1}dT.push(ds[dU])}}dR+="&ec_items="+u(X.JSON.stringify(dT))}dR=cL(dR,aw,"ecommerce");bS(dR,bW);if(dQ){ds={}}}function cb(dL,dP,dO,dN,dM,dQ){if(String(dL).length&&N(dP)){bD(dL,dP,dO,dN,dM,dQ)
-}}function bF(dL){if(N(dL)){bD("",dL,"","","","")}}function cd(dM,dO,dN){if(!bN){aU=br()}var dL=cL("action_name="+u(aq(dM||bu)),dO,"log");if(bd&&!bs){dL=aI(dL)}bS(dL,bW,dN)}function bb(dN,dM){var dO,dL="(^| )(piwik[_-]"+dM+"|matomo[_-]"+dM;if(dN){for(dO=0;dO0){dP=parseInt(dP,10);dS(dP)}})}var bQ={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dL=this.requests;this.requests=[];if(dL.length===1){bS(dL[0],bW)}else{dH(dL,bW)}},canQueue:function(){return !m&&this.enabled},pushMultiple:function(dM){if(!this.canQueue()){dH(dM,bW);return}var dL;for(dL=0;dL0){if(!N(dM)){dM=""}if(!y(dM)){dM=String(dM)}bz[dL]=dM}};this.getCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0&&Object.prototype.hasOwnProperty.call(bz,dL)){return bz[dL]}};this.deleteCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0){delete bz[dL]}};this.setCustomVariable=function(dM,dL,dP,dN){var dO;if(!N(dN)){dN="visit"}if(!N(dL)){return}if(!N(dP)){dP=""}if(dM>0){dL=!y(dL)?String(dL):dL;dP=!y(dP)?String(dP):dP;dO=[dL.slice(0,bG),dP.slice(0,bG)];if(dN==="visit"||dN===2){c3();aZ[dM]=dO}else{if(dN==="page"||dN===3){b9[dM]=dO}else{if(dN==="event"){cC[dM]=dO}}}}};this.getCustomVariable=function(dM,dN){var dL;if(!N(dN)){dN="visit"}if(dN==="page"||dN===3){dL=b9[dM]}else{if(dN==="event"){dL=cC[dM]}else{if(dN==="visit"||dN===2){c3();
-dL=aZ[dM]}}}if(!N(dL)||(dL&&dL[0]==="")){return false}return dL};this.deleteCustomVariable=function(dL,dM){if(this.getCustomVariable(dL,dM)){this.setCustomVariable(dL,"","",dM)}};this.deleteCustomVariables=function(dL){if(dL==="page"||dL===3){b9={}}else{if(dL==="event"){cC={}}else{if(dL==="visit"||dL===2){aZ={}}}}};this.storeCustomVariablesInCookie=function(){b3=true};this.setLinkTrackingTimer=function(dL){bW=dL};this.getLinkTrackingTimer=function(){return bW};this.setDownloadExtensions=function(dL){if(y(dL)){dL=dL.split("|")}dy=dL};this.addDownloadExtensions=function(dM){var dL;if(y(dM)){dM=dM.split("|")}for(dL=0;dL1&&av!=="addTracker"&&av!=="enableLinkTracking"){ap("The method "+av+' 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')
-}aA[av]++}}}}return az}var F=["addTracker","enableFileTracking","forgetCookieConsentGiven","requireCookieConsent","disableBrowserFeatureDetection","disableCampaignParameters","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","disableAlwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking","setPagePerformanceTiming","setExcludedQueryParams","setExcludedReferrers"];function ai(aw,av){var au=new U(aw,av);M.push(au);_paq=c(_paq,F);for(I=0;I<_paq.length;I++){if(_paq[I]){ak(_paq[I])}}_paq=new L();v.trigger("TrackerAdded",[au]);return au}at(X,"beforeunload",an,false);at(X,"visibilitychange",function(){if(m){return}if(K.visibilityState==="hidden"){ah("unload")
-}},false);at(X,"online",function(){if(N(g.serviceWorker)){g.serviceWorker.ready.then(function(au){if(au&&au.sync){return au.sync.register("matomoSync")}},function(){})}},false);at(X,"message",function(az){if(!az||!az.origin){return}var aB,ax,av;var aC=d(az.origin);var ay=v.getAsyncTrackers();for(ax=0;ax=dM&&dL<=(dM+ba)){return true}}return false}function dI(dL){if(!db){return""}var dP=e(dL,aD);if(!dP){return""}dP=String(dP);var dN=new RegExp("^[a-zA-Z0-9]+$");
+if(dP.length===32&&dN.test(dP)){var dM=dP.substr(16,32);if(du(dM)){var dO=dP.substr(0,16);return dO}}return""}function dc(){if(!b0){b0=dI(bZ)}var dN=new Date(),dL=Math.round(dN.getTime()/1000),dM=a2("id"),dQ=aL(dM),dP,dO;if(dQ){dP=dQ.split(".");dP.unshift("0");if(b0.length){dP[1]=b0}return dP}if(b0.length){dO=b0}else{if("0"===ci()){dO=""}else{dO=df()}}dP=["1",dO,dL];return dP}function a9(){var dO=dc(),dM=dO[0],dN=dO[1],dL=dO[2];return{newVisitor:dM,uuid:dN,createTs:dL}}function aP(){var dO=new Date(),dM=dO.getTime(),dP=a9().createTs;var dL=parseInt(dP,10);var dN=(dL*1000)+c8-dM;return dN}function aV(dL){if(!cj){return}var dN=new Date(),dM=Math.round(dN.getTime()/1000);if(!N(dL)){dL=a9()}var dO=dL.uuid+"."+dL.createTs+".";dG(a2("id"),dO,aP(),bC,dp,b5,aR)}function bX(){var dL=aL(a2("ref"));if(dL.length){try{dL=X.JSON.parse(dL);if(aa(dL)){return dL}}catch(dM){}}return["","",0,""]}function bJ(dN){var dM=bv+"testcookie_domain";var dL="testvalue";dG(dM,dL,10000,null,dN,b5,aR);if(aL(dM)===dL){cc(dM,null,dN);
+return true}return false}function aN(){var dM=bx;bx=false;var dL,dN;for(dL=0;dL2){return"&"+d5+"="+u(d6)}return""}var d2=dK(b9);var dU=dK(cC);dM+=dP(d2,"cvar");dM+=dP(dU,"e_cvar");if(aZ){dM+=dP(aZ,"_cvar");for(dX in dW){if(Object.prototype.hasOwnProperty.call(dW,dX)){if(aZ[dX][0]===""||aZ[dX][1]===""){delete aZ[dX]}}}if(b3){dG(dS,X.JSON.stringify(aZ),cE,bC,dp,b5,aR)}}if(bd&&bR&&!bs){dM=aI(dM);bs=true}if(aU){dM+="&pv_id="+aU}aV(dT);cs();dM+=ah(dZ,{tracker:bV,request:dM});if(dr.length){dM+="&"+dr}if(au()){dM+="&tracker_install_check="+q}if(D(cq)){dM=cq(dM)}return dM}b4=function bi(){var dL=new Date();dL=dL.getTime();if(!dq){return false}if(dq+bg<=dL){bV.ping();return true}return false};function bD(dO,dN,dS,dP,dL,dV){var dR="idgoal=0",dM=new Date(),dT=[],dU,dQ=String(dO).length;if(dQ){dR+="&ec_id="+u(dO)}dR+="&revenue="+dN;if(String(dS).length){dR+="&ec_st="+dS}if(String(dP).length){dR+="&ec_tx="+dP}if(String(dL).length){dR+="&ec_sh="+dL}if(String(dV).length){dR+="&ec_dt="+dV}if(ds){for(dU in ds){if(Object.prototype.hasOwnProperty.call(ds,dU)){if(!N(ds[dU][1])){ds[dU][1]=""
+}if(!N(ds[dU][2])){ds[dU][2]=""}if(!N(ds[dU][3])||String(ds[dU][3]).length===0){ds[dU][3]=0}if(!N(ds[dU][4])||String(ds[dU][4]).length===0){ds[dU][4]=1}dT.push(ds[dU])}}dR+="&ec_items="+u(X.JSON.stringify(dT))}dR=cL(dR,aw,"ecommerce");bS(dR,bW);if(dQ){ds={}}}function cb(dL,dP,dO,dN,dM,dQ){if(String(dL).length&&N(dP)){bD(dL,dP,dO,dN,dM,dQ)}}function bF(dL){if(N(dL)){bD("",dL,"","","","")}}function cd(dM,dO,dN){if(!bN){aU=br()}var dL=cL("action_name="+u(aq(dM||bu)),dO,"log");if(bd&&!bs){dL=aI(dL)}bS(dL,bW,dN)}function bb(dN,dM){var dO,dL="(^| )(piwik[_-]"+dM+"|matomo[_-]"+dM;if(dN){for(dO=0;dO0){dP=parseInt(dP,10);dS(dP)}})}var bQ={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dL=this.requests;this.requests=[];if(dL.length===1){bS(dL[0],bW)}else{dH(dL,bW)}},canQueue:function(){return !m&&this.enabled},pushMultiple:function(dM){if(!this.canQueue()){dH(dM,bW);return}var dL;for(dL=0;dL0){if(!N(dM)){dM=""}if(!y(dM)){dM=String(dM)}bz[dL]=dM}};this.getCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0&&Object.prototype.hasOwnProperty.call(bz,dL)){return bz[dL]}};this.deleteCustomDimension=function(dL){dL=parseInt(dL,10);if(dL>0){delete bz[dL]}};this.setCustomVariable=function(dM,dL,dP,dN){var dO;if(!N(dN)){dN="visit"}if(!N(dL)){return}if(!N(dP)){dP=""}if(dM>0){dL=!y(dL)?String(dL):dL;dP=!y(dP)?String(dP):dP;dO=[dL.slice(0,bG),dP.slice(0,bG)];if(dN==="visit"||dN===2){c3();aZ[dM]=dO}else{if(dN==="page"||dN===3){b9[dM]=dO
+}else{if(dN==="event"){cC[dM]=dO}}}}};this.getCustomVariable=function(dM,dN){var dL;if(!N(dN)){dN="visit"}if(dN==="page"||dN===3){dL=b9[dM]}else{if(dN==="event"){dL=cC[dM]}else{if(dN==="visit"||dN===2){c3();dL=aZ[dM]}}}if(!N(dL)||(dL&&dL[0]==="")){return false}return dL};this.deleteCustomVariable=function(dL,dM){if(this.getCustomVariable(dL,dM)){this.setCustomVariable(dL,"","",dM)}};this.deleteCustomVariables=function(dL){if(dL==="page"||dL===3){b9={}}else{if(dL==="event"){cC={}}else{if(dL==="visit"||dL===2){aZ={}}}}};this.storeCustomVariablesInCookie=function(){b3=true};this.setLinkTrackingTimer=function(dL){bW=dL};this.getLinkTrackingTimer=function(){return bW};this.setDownloadExtensions=function(dL){if(y(dL)){dL=dL.split("|")}dy=dL};this.addDownloadExtensions=function(dM){var dL;if(y(dM)){dM=dM.split("|")}for(dL=0;dL1&&av!=="addTracker"&&av!=="enableLinkTracking"){ap("The method "+av+' 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')}aA[av]++}}}}return az}var F=["addTracker","enableFileTracking","forgetCookieConsentGiven","requireCookieConsent","disableBrowserFeatureDetection","disableCampaignParameters","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","disableAlwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking","setPagePerformanceTiming","setExcludedQueryParams","setExcludedReferrers"];
+function ai(aw,av){var au=new U(aw,av);M.push(au);_paq=c(_paq,F);for(I=0;I<_paq.length;I++){if(_paq[I]){ak(_paq[I])}}_paq=new L();v.trigger("TrackerAdded",[au]);return au}at(X,"beforeunload",an,false);at(X,"visibilitychange",function(){if(m){return}if(K.visibilityState==="hidden"){ah("unload")}},false);at(X,"online",function(){if(N(g.serviceWorker)){g.serviceWorker.ready.then(function(au){if(au&&au.sync){return au.sync.register("matomoSync")}},function(){})}},false);at(X,"message",function(az){if(!az||!az.origin){return}var aB,ax,av;var aC=d(az.origin);var ay=v.getAsyncTrackers();for(ax=0;axMetadata API: it gives information about all other available APIs methods, as well as providing
+ * This API is the Metadata API: it gives information about all other available APIs methods, as well as providing
* human readable and more complete outputs than normal API methods.
*
* Some of the information that is returned by the Metadata API:
@@ -50,7 +50,7 @@
*
the method "getSuggestedValuesForSegment" returns top suggested values for a particular segment. It uses the Live.getLastVisitsDetails API to fetch the most recently used values, and will return the most often used values first.
*
* The Metadata API is for example used by the Matomo Mobile App to automatically display all Matomo reports, with translated report & columns names and nicely formatted values.
- * More information on the Metadata API documentation page
+ * More information on the Metadata API documentation page
*
* @method static \Piwik\Plugins\API\API getInstance()
*/
diff --git a/www/plugins/API/Controller.php b/www/plugins/API/Controller.php
index 676e3125..eb630290 100644
--- a/www/plugins/API/Controller.php
+++ b/www/plugins/API/Controller.php
@@ -65,9 +65,13 @@ public function listAllMethods()
$ApiDocumentation = new DocumentationGenerator();
$prefixUrls = Common::getRequestVar('prefixUrl', 'https://demo.matomo.org/', 'string');
- $hostname = parse_url($prefixUrls, PHP_URL_HOST);
- if (empty($hostname) || !UrlHelper::isLookLikeUrl($prefixUrls) || strpos($prefixUrls, 'http') !== 0 || !Url::isValidHost($hostname)) {
+ $parsedUrl = parse_url($prefixUrls);
+ if (empty($parsedUrl['host']) || !UrlHelper::isLookLikeUrl($prefixUrls) || strpos($prefixUrls, 'http') !== 0 || !Url::isValidHost($parsedUrl['host'])) {
$prefixUrls = '';
+ } else {
+ // We put together the url based on the parsed parameters manually to ensure it might not contain unexpected locations
+ // unescaped slashes in username or password part for example have unexpected results in browsers
+ $prefixUrls = UrlHelper::getParseUrlReverse($parsedUrl);
}
return $ApiDocumentation->getApiDocumentationAsStringForDeveloperReference($outputExampleUrls = true, $prefixUrls);
}
diff --git a/www/plugins/Actions/API.php b/www/plugins/Actions/API.php
index a705baa7..fb7f8919 100644
--- a/www/plugins/Actions/API.php
+++ b/www/plugins/Actions/API.php
@@ -28,7 +28,7 @@
* The Actions API lets you request reports for all your Visitor Actions: Page URLs, Page titles, Events, Content Tracking,
* File Downloads and Clicks on external websites.
*
- * For example, "getPageTitles" will return all your page titles along with standard Actions metrics for each row.
+ * For example, "getPageTitles" will return all your page titles along with standard Actions metrics for each row.
*
* It is also possible to request data for a specific Page Title with "getPageTitle"
* and setting the parameter pageName to the page title you wish to request.
diff --git a/www/plugins/Actions/ArchivingHelper.php b/www/plugins/Actions/ArchivingHelper.php
index 630c665c..2858a76a 100644
--- a/www/plugins/Actions/ArchivingHelper.php
+++ b/www/plugins/Actions/ArchivingHelper.php
@@ -113,8 +113,8 @@ public static function updateActionsTableWithRowQuery($query, $fieldQueried, $ac
// Here we do ensure that, the Metadata URL set for a given row, is the one from the Pageview with the most hits.
// This is to ensure that when, different URLs are loaded with the same page name.
- // For example http://piwik.org and http://id.piwik.org are reported in Piwik > Actions > Pages with /index
- // But, we must make sure http://piwik.org is used to link & for transitions
+ // For example https://piwik.org and https://id.piwik.org are reported in Piwik > Actions > Pages with /index
+ // But, we must make sure https://piwik.org is used to link & for transitions
// Note: this code is partly duplicated from Row->sumRowMetadata()
if (
!is_null($url)
@@ -594,13 +594,13 @@ public static function getUnknownActionName($type)
* NOTE: before calling this function make sure ArchivingHelper::reloadConfig(); is called
*
* for downloads:
- * we explode link http://piwik.org/some/path/piwik.zip into an array( 'piwik.org', '/some/path/piwik.zip' );
+ * we explode link https://piwik.org/some/path/piwik.zip into an array( 'piwik.org', '/some/path/piwik.zip' );
*
* for outlinks:
- * we explode link http://dev.piwik.org/some/path into an array( 'dev.piwik.org', '/some/path' );
+ * we explode link https://dev.piwik.org/some/path into an array( 'dev.piwik.org', '/some/path' );
*
* for action urls:
- * we explode link http://piwik.org/some/path into an array( 'some', 'path' );
+ * we explode link https://piwik.org/some/path into an array( 'some', 'path' );
*
* for action names:
* we explode name 'Piwik / Category 1 / Category 2' into an array('Matomo', 'Category 1', 'Category 2');
diff --git a/www/plugins/Actions/Columns/ActionType.php b/www/plugins/Actions/Columns/ActionType.php
index 83f28a7a..c81cd365 100644
--- a/www/plugins/Actions/Columns/ActionType.php
+++ b/www/plugins/Actions/Columns/ActionType.php
@@ -19,7 +19,7 @@
/**
* This example dimension only defines a name and does not track any data. It's supposed to be only used in reports.
*
- * See {@link http://developer.piwik.org/api-reference/Piwik/Columns\Dimension} for more information.
+ * See {@link https://developer.matomo.org/api-reference/Piwik/Columns\Dimension} for more information.
*/
class ActionType extends ActionDimension
{
diff --git a/www/plugins/BulkTracking/Tracker/Requests.php b/www/plugins/BulkTracking/Tracker/Requests.php
index 81f120a5..2a1eacf4 100644
--- a/www/plugins/BulkTracking/Tracker/Requests.php
+++ b/www/plugins/BulkTracking/Tracker/Requests.php
@@ -43,7 +43,7 @@ private function checkTokenAuthNotEmpty($token)
{
if (empty($token)) {
throw new Exception("token_auth must be specified when using Bulk Tracking Import. "
- . " See Tracking Doc");
+ . " See Tracking Doc");
}
}
diff --git a/www/plugins/Contents/Reports/GetContentNames.php b/www/plugins/Contents/Reports/GetContentNames.php
index 56bb1f17..b0559b7c 100644
--- a/www/plugins/Contents/Reports/GetContentNames.php
+++ b/www/plugins/Contents/Reports/GetContentNames.php
@@ -16,7 +16,7 @@
/**
* This class defines a new report.
*
- * See {@link http://developer.piwik.org/api-reference/Piwik/Plugin/Report} for more information.
+ * See {@link https://developer.matomo.org/api-reference/Piwik/Plugin/Report} for more information.
*/
class GetContentNames extends Base
{
diff --git a/www/plugins/Contents/Reports/GetContentPieces.php b/www/plugins/Contents/Reports/GetContentPieces.php
index 0260220b..42d28a85 100644
--- a/www/plugins/Contents/Reports/GetContentPieces.php
+++ b/www/plugins/Contents/Reports/GetContentPieces.php
@@ -16,7 +16,7 @@
/**
* This class defines a new report.
*
- * See {@link http://developer.piwik.org/api-reference/Piwik/Plugin/Report} for more information.
+ * See {@link https://developer.matomo.org/api-reference/Piwik/Plugin/Report} for more information.
*/
class GetContentPieces extends Base
{
diff --git a/www/plugins/CoreHome/javascripts/uiControl.js b/www/plugins/CoreHome/javascripts/uiControl.js
index 33530c4e..d3dc6b33 100644
--- a/www/plugins/CoreHome/javascripts/uiControl.js
+++ b/www/plugins/CoreHome/javascripts/uiControl.js
@@ -112,7 +112,7 @@
* Handle the widget resize event, if we're currently in a widget.
*
* TODO: should use proper resize detection (see
- * http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/ )
+ * https://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/ )
* with timeouts (since resizing widgets can be expensive)
*/
onWidgetResize: function (handler) {
diff --git a/www/plugins/CoreHome/templates/ReportRenderer/_htmlReportBody.twig b/www/plugins/CoreHome/templates/ReportRenderer/_htmlReportBody.twig
index c69ecd20..56c68cc8 100644
--- a/www/plugins/CoreHome/templates/ReportRenderer/_htmlReportBody.twig
+++ b/www/plugins/CoreHome/templates/ReportRenderer/_htmlReportBody.twig
@@ -2,8 +2,8 @@
{% set styleTableHeader = "border-bottom:1px solid rgb(231,231,231);font-size: 15px;text-align: left;font-weight:normal;padding:13px 0 13px 10px;" ~ fontStyle %}
{% set styleTableCell = "border-bottom:1px solid rgb(231,231,231);font-size: 15px;font-variant-numeric: tabular-nums;padding:17px 15px;" ~ fontStyle %}
-
- {{ reportName }}
+
+ {{ reportName|escape|preventLinking }}
{% if reportRows is empty %}
diff --git a/www/plugins/CoreHome/templates/ReportRenderer/_htmlReportHeader.twig b/www/plugins/CoreHome/templates/ReportRenderer/_htmlReportHeader.twig
index a9b44fa6..bcaee4d7 100644
--- a/www/plugins/CoreHome/templates/ReportRenderer/_htmlReportHeader.twig
+++ b/www/plugins/CoreHome/templates/ReportRenderer/_htmlReportHeader.twig
@@ -6,18 +6,18 @@
{% if isAttachedFile is defined and isAttachedFile %}
- {{ 'ScheduledReports_PleaseFindAttachedFile'|translate(frequency, reportTitle) }}
+ {{ 'ScheduledReports_PleaseFindAttachedFile'|translate(frequency, reportTitle|escape|preventLinking)|raw }}
{% else %}
- {{'ScheduledReports_PleaseFindBelow'|translate(period,reportTitle)}}
+ {{ 'ScheduledReports_PleaseFindBelow'|translate(period, reportTitle|escape|preventLinking)|raw }}
{% endif %}
-
{{ description }}
+
{{ description|escape|preventLinking }}
{{ 'General_DateRange'|translate }} {{ prettyDate }}
{{ 'ScheduledReports_SentFromX'|translate(piwikUrl) }}
{% if displaySegment %}
- {{ 'ScheduledReports_CustomVisitorSegment'|translate }} {{ segmentName }}
+ {{ 'ScheduledReports_CustomVisitorSegment'|translate }} {{ segmentName|escape|preventLinking }}
{% endif %}
diff --git a/www/plugins/CoreHome/vue/dist/CoreHome.umd.js b/www/plugins/CoreHome/vue/dist/CoreHome.umd.js
index 1bf85321..b05e0ebb 100644
--- a/www/plugins/CoreHome/vue/dist/CoreHome.umd.js
+++ b/www/plugins/CoreHome/vue/dist/CoreHome.umd.js
@@ -455,7 +455,7 @@ function todayIsInRange(dateRange) {
}
function getWeekNumber(date) {
// Algorithm from https://www.w3resource.com/javascript-exercises/javascript-date-exercise-24.php
- // and updated based on http://www.java2s.com/example/nodejs/date/get-the-iso-week-date-week-number.html
+ // and updated based on https://www.java2s.com/example/nodejs/date/get-the-iso-week-date-week-number.html
// for legibility
// Create a copy of the date object
var dt = new Date(date.valueOf()); // ISO week date weeks start on Monday so correct the day number
@@ -3908,24 +3908,24 @@ function onTransitionEndHandler(el, binding) {
});
}
});
-// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue?vue&type=template&id=5e16ac38
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue?vue&type=template&id=65383a0a
-var EnrichedHeadlinevue_type_template_id_5e16ac38_hoisted_1 = {
+var EnrichedHeadlinevue_type_template_id_65383a0a_hoisted_1 = {
key: 0,
class: "title",
tabindex: "6"
};
-var EnrichedHeadlinevue_type_template_id_5e16ac38_hoisted_2 = ["href", "title"];
-var EnrichedHeadlinevue_type_template_id_5e16ac38_hoisted_3 = {
+var EnrichedHeadlinevue_type_template_id_65383a0a_hoisted_2 = ["href", "title"];
+var EnrichedHeadlinevue_type_template_id_65383a0a_hoisted_3 = {
class: "iconsBar"
};
-var EnrichedHeadlinevue_type_template_id_5e16ac38_hoisted_4 = ["href", "title"];
+var EnrichedHeadlinevue_type_template_id_65383a0a_hoisted_4 = ["href", "title"];
-var EnrichedHeadlinevue_type_template_id_5e16ac38_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+var EnrichedHeadlinevue_type_template_id_65383a0a_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
class: "icon-help"
}, null, -1);
-var _hoisted_6 = [EnrichedHeadlinevue_type_template_id_5e16ac38_hoisted_5];
+var _hoisted_6 = [EnrichedHeadlinevue_type_template_id_65383a0a_hoisted_5];
var _hoisted_7 = ["title"];
var _hoisted_8 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
@@ -3943,7 +3943,7 @@ var _hoisted_11 = {
var _hoisted_12 = ["innerHTML"];
var _hoisted_13 = ["innerHTML"];
var _hoisted_14 = ["href"];
-function EnrichedHeadlinevue_type_template_id_5e16ac38_render(_ctx, _cache, $props, $setup, $data, $options) {
+function EnrichedHeadlinevue_type_template_id_65383a0a_render(_ctx, _cache, $props, $setup, $data, $options) {
return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", {
class: "enrichedHeadline",
onMouseenter: _cache[1] || (_cache[1] = function ($event) {
@@ -3953,19 +3953,19 @@ function EnrichedHeadlinevue_type_template_id_5e16ac38_render(_ctx, _cache, $pro
return _ctx.showIcons = false;
}),
ref: "root"
- }, [!_ctx.editUrl ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", EnrichedHeadlinevue_type_template_id_5e16ac38_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderSlot"])(_ctx.$slots, "default")])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.editUrl ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("a", {
+ }, [!_ctx.editUrl ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", EnrichedHeadlinevue_type_template_id_65383a0a_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderSlot"])(_ctx.$slots, "default")])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.editUrl ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("a", {
key: 1,
class: "title",
href: _ctx.editUrl,
title: _ctx.translate('CoreHome_ClickToEditX', _ctx.htmlEntities(_ctx.actualFeatureName))
- }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderSlot"])(_ctx.$slots, "default")], 8, EnrichedHeadlinevue_type_template_id_5e16ac38_hoisted_2)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", EnrichedHeadlinevue_type_template_id_5e16ac38_hoisted_3, [_ctx.helpUrl && !_ctx.actualInlineHelp ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("a", {
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderSlot"])(_ctx.$slots, "default")], 8, EnrichedHeadlinevue_type_template_id_65383a0a_hoisted_2)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", EnrichedHeadlinevue_type_template_id_65383a0a_hoisted_3, [_ctx.helpUrl && !_ctx.actualInlineHelp ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("a", {
key: 0,
rel: "noreferrer noopener",
target: "_blank",
class: "helpIcon",
href: _ctx.helpUrl,
title: _ctx.translate('CoreHome_ExternalHelp')
- }, _hoisted_6, 8, EnrichedHeadlinevue_type_template_id_5e16ac38_hoisted_4)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.actualInlineHelp ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("a", {
+ }, _hoisted_6, 8, EnrichedHeadlinevue_type_template_id_65383a0a_hoisted_4)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.actualInlineHelp ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("a", {
key: 1,
onClick: _cache[0] || (_cache[0] = function ($event) {
return _ctx.showInlineHelp = !_ctx.showInlineHelp;
@@ -3990,7 +3990,7 @@ function EnrichedHeadlinevue_type_template_id_5e16ac38_render(_ctx, _cache, $pro
href: _ctx.helpUrl
}, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_MoreDetails')), 9, _hoisted_14)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.showInlineHelp]])], 544);
}
-// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue?vue&type=template&id=5e16ac38
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue?vue&type=template&id=65383a0a
// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue?vue&type=script&lang=ts
@@ -4008,7 +4008,7 @@ function EnrichedHeadlinevue_type_template_id_5e16ac38_render(_ctx, _cache, $pro
* 309 Visits)
* -> custom featurename
*
- * All Websites Dashboard
+ * All Websites Dashboard
* -> shows help icon and links to external url
*
* All Websites
@@ -4134,7 +4134,7 @@ function EnrichedHeadlinevue_type_template_id_5e16ac38_render(_ctx, _cache, $pro
-EnrichedHeadlinevue_type_script_lang_ts.render = EnrichedHeadlinevue_type_template_id_5e16ac38_render
+EnrichedHeadlinevue_type_script_lang_ts.render = EnrichedHeadlinevue_type_template_id_65383a0a_render
/* harmony default export */ var EnrichedHeadline = (EnrichedHeadlinevue_type_script_lang_ts);
// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/ContentBlock/ContentBlock.vue?vue&type=template&id=3f63a484
diff --git a/www/plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue b/www/plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue
index 6785113d..952d0694 100644
--- a/www/plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue
+++ b/www/plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue
@@ -93,7 +93,7 @@ interface EnrichedHeadlineData {
* 309 Visits)
* -> custom featurename
*
- * All Websites Dashboard
+ * All Websites Dashboard
* -> shows help icon and links to external url
*
* All Websites
diff --git a/www/plugins/CoreHome/vue/src/Periods/utilities.ts b/www/plugins/CoreHome/vue/src/Periods/utilities.ts
index e8afc7ab..d63e3d17 100644
--- a/www/plugins/CoreHome/vue/src/Periods/utilities.ts
+++ b/www/plugins/CoreHome/vue/src/Periods/utilities.ts
@@ -87,7 +87,7 @@ export function todayIsInRange(dateRange: Date[]): boolean {
export function getWeekNumber(date: Date): number {
// Algorithm from https://www.w3resource.com/javascript-exercises/javascript-date-exercise-24.php
- // and updated based on http://www.java2s.com/example/nodejs/date/get-the-iso-week-date-week-number.html
+ // and updated based on https://www.java2s.com/example/nodejs/date/get-the-iso-week-date-week-number.html
// for legibility
// Create a copy of the date object
diff --git a/www/plugins/CorePluginsAdmin/CorePluginsAdmin.php b/www/plugins/CorePluginsAdmin/CorePluginsAdmin.php
index dfc78188..286922b6 100644
--- a/www/plugins/CorePluginsAdmin/CorePluginsAdmin.php
+++ b/www/plugins/CorePluginsAdmin/CorePluginsAdmin.php
@@ -166,5 +166,10 @@ public function getClientSideTranslationKeys(&$translations)
$translations[] = 'CorePluginsAdmin_PluginFreeTrialStarted';
$translations[] = 'CorePluginsAdmin_PluginFreeTrialStartedAccountCreatedMessage';
$translations[] = 'CorePluginsAdmin_PluginFreeTrialStartedAccountCreatedTitle';
+ $translations[] = 'General_Confirm';
+ $translations[] = 'General_Cancel';
+ $translations[] = 'UsersManager_ConfirmThisChange';
+ $translations[] = 'UsersManager_ConfirmWithPassword';
+ $translations[] = 'UsersManager_YourCurrentPassword';
}
}
diff --git a/www/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php b/www/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
index ee22ed3c..802ca950 100644
--- a/www/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
+++ b/www/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
@@ -22,7 +22,7 @@ class Chart
public $properties;
// the data kept here conforms to the jqplot data layout
- // @see http://www.jqplot.com/docs/files/jqPlotOptions-txt.html
+ // @see https://www.jqplot.com/docs/files/jqPlotOptions-txt.html
protected $series = [];
protected $data = [];
protected $axes = [];
@@ -161,7 +161,7 @@ public function render()
$this->checkDataStateAvailableForAllTicks();
- // See http://www.jqplot.com/docs/files/jqPlotOptions-txt.html
+ // See https://www.jqplot.com/docs/files/jqPlotOptions-txt.html
$data = [
'params' => [
'axes' => &$this->axes,
diff --git a/www/plugins/CustomDimensions/Dimension/Extraction.php b/www/plugins/CustomDimensions/Dimension/Extraction.php
index 181e85d8..3b7d07bf 100644
--- a/www/plugins/CustomDimensions/Dimension/Extraction.php
+++ b/www/plugins/CustomDimensions/Dimension/Extraction.php
@@ -114,7 +114,7 @@ private function extractValue($value)
$regex = $this->formatPattern();
if (preg_match($regex, (string) $value, $matches)) {
- // we could improve performance here I reckon by combining all patterns of all configs see eg http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html
+ // we could improve performance here I reckon by combining all patterns of all configs see eg https://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html
if (array_key_exists(1, $matches)) {
return $matches[1];
diff --git a/www/plugins/CustomDimensions/GetCustomDimension.php b/www/plugins/CustomDimensions/GetCustomDimension.php
index 7b869b10..ca1544b5 100644
--- a/www/plugins/CustomDimensions/GetCustomDimension.php
+++ b/www/plugins/CustomDimensions/GetCustomDimension.php
@@ -31,7 +31,7 @@
/**
* This class defines a new report.
*
- * See {@link http://developer.piwik.org/api-reference/Piwik/Plugin/Report} for more information.
+ * See {@link https://developer.matomo.org/api-reference/Piwik/Plugin/Report} for more information.
*/
class GetCustomDimension extends Report
{
diff --git a/www/plugins/CustomDimensions/Menu.php b/www/plugins/CustomDimensions/Menu.php
index 534593d0..3fba3912 100644
--- a/www/plugins/CustomDimensions/Menu.php
+++ b/www/plugins/CustomDimensions/Menu.php
@@ -17,7 +17,7 @@
/**
* This class allows you to add, remove or rename menu items.
* To configure a menu (such as Admin Menu, Reporting Menu, User Menu...) simply call the corresponding methods as
- * described in the API-Reference http://developer.piwik.org/api-reference/Piwik/Menu/MenuAbstract
+ * described in the API-Reference https://developer.matomo.org/api-reference/Piwik/Menu/MenuAbstract
*/
class Menu extends \Piwik\Plugin\Menu
{
diff --git a/www/plugins/DBStats/API.php b/www/plugins/DBStats/API.php
index 8f0042d4..428407cb 100644
--- a/www/plugins/DBStats/API.php
+++ b/www/plugins/DBStats/API.php
@@ -58,7 +58,7 @@ public function getGeneralInformation()
/**
* Gets general database info that is not specific to any table.
*
- * @return array See http://dev.mysql.com/doc/refman/5.1/en/show-status.html .
+ * @return array See https://dev.mysql.com/doc/refman/5.1/en/show-status.html .
*/
public function getDBStatus()
{
diff --git a/www/plugins/DBStats/MySQLMetadataProvider.php b/www/plugins/DBStats/MySQLMetadataProvider.php
index bad9045a..479b239c 100644
--- a/www/plugins/DBStats/MySQLMetadataProvider.php
+++ b/www/plugins/DBStats/MySQLMetadataProvider.php
@@ -47,7 +47,7 @@ public function __construct(MySQLMetadataDataAccess $dataAccess)
* Gets general database info that is not specific to any table.
*
* @throws Exception
- * @return array See http://dev.mysql.com/doc/refman/5.1/en/show-status.html .
+ * @return array See https://dev.mysql.com/doc/refman/5.1/en/show-status.html .
*/
public function getDBStatus()
{
@@ -59,7 +59,7 @@ public function getDBStatus()
*
* @param string $table The name of the table. Should not be prefixed (ie, 'log_visit' is
* correct, 'matomo_log_visit' is not).
- * @return array See http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html .
+ * @return array See https://dev.mysql.com/doc/refman/5.1/en/show-table-status.html .
*/
public function getTableStatus($table)
{
@@ -79,7 +79,7 @@ public function getTableStatus($table)
*
* @param string $matchingRegex Regex used to filter out tables whose name doesn't
* match it.
- * @return array The table information. See http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html
+ * @return array The table information. See https://dev.mysql.com/doc/refman/5.5/en/show-table-status.html
* for specifics.
*/
public function getAllTablesStatus($matchingRegex = null)
@@ -111,7 +111,7 @@ public function getAllTablesStatus($matchingRegex = null)
/**
* Returns table statuses for every log table.
*
- * @return array An array of status arrays. See http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html.
+ * @return array An array of status arrays. See https://dev.mysql.com/doc/refman/5.5/en/show-table-status.html.
*/
public function getAllLogTableStatus()
{
@@ -122,7 +122,7 @@ public function getAllLogTableStatus()
/**
* Returns table statuses for every numeric archive table.
*
- * @return array An array of status arrays. See http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html.
+ * @return array An array of status arrays. See https://dev.mysql.com/doc/refman/5.5/en/show-table-status.html.
*/
public function getAllNumericArchiveStatus()
{
@@ -133,7 +133,7 @@ public function getAllNumericArchiveStatus()
/**
* Returns table statuses for every blob archive table.
*
- * @return array An array of status arrays. See http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html.
+ * @return array An array of status arrays. See https://dev.mysql.com/doc/refman/5.5/en/show-table-status.html.
*/
public function getAllBlobArchiveStatus()
{
@@ -144,7 +144,7 @@ public function getAllBlobArchiveStatus()
/**
* Returns table statuses for every admin table.
*
- * @return array An array of status arrays. See http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html.
+ * @return array An array of status arrays. See https://dev.mysql.com/doc/refman/5.5/en/show-table-status.html.
*/
public function getAllAdminTableStatus()
{
diff --git a/www/plugins/Dashboard/API.php b/www/plugins/Dashboard/API.php
index 414b07dc..ebf6345f 100644
--- a/www/plugins/Dashboard/API.php
+++ b/www/plugins/Dashboard/API.php
@@ -13,7 +13,7 @@
use Piwik\Piwik;
/**
- * This API is the Dashboard API: it gives information about dashboards.
+ * This API is the Dashboard API: it gives information about dashboards.
*
* @method static \Piwik\Plugins\Dashboard\API getInstance()
*/
diff --git a/www/plugins/Diagnostics/Diagnostic/DbAdapterCheck.php b/www/plugins/Diagnostics/Diagnostic/DbAdapterCheck.php
index 7fe0f0b0..73bee308 100644
--- a/www/plugins/Diagnostics/Diagnostic/DbAdapterCheck.php
+++ b/www/plugins/Diagnostics/Diagnostic/DbAdapterCheck.php
@@ -95,9 +95,9 @@ private function getLongErrorMessage()
$message .= $this->translator->translate('Installation_RestartWebServer') . '
';
$message .= $this->translator->translate('Installation_SystemCheckPhpPdoAndMysqli', array(
- '',
+ '',
'',
- '',
+ '',
'',
));
$message .= '';
diff --git a/www/plugins/Diagnostics/Diagnostic/TimezoneCheck.php b/www/plugins/Diagnostics/Diagnostic/TimezoneCheck.php
index b32efcc3..a57e9b6b 100644
--- a/www/plugins/Diagnostics/Diagnostic/TimezoneCheck.php
+++ b/www/plugins/Diagnostics/Diagnostic/TimezoneCheck.php
@@ -38,7 +38,7 @@ public function execute()
$comment = sprintf(
'%s
%s.',
$this->translator->translate('SitesManager_AdvancedTimezoneSupportNotFound'),
- 'Timezone PHP documentation'
+ 'Timezone PHP documentation'
);
return array(DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_WARNING, $comment));
diff --git a/www/plugins/Diagnostics/Menu.php b/www/plugins/Diagnostics/Menu.php
index dd32d7e4..8ecfa6eb 100644
--- a/www/plugins/Diagnostics/Menu.php
+++ b/www/plugins/Diagnostics/Menu.php
@@ -15,7 +15,7 @@
/**
* This class allows you to add, remove or rename menu items.
* To configure a menu (such as Admin Menu, Reporting Menu, User Menu...) simply call the corresponding methods as
- * described in the API-Reference http://developer.piwik.org/api-reference/Piwik/Menu/MenuAbstract
+ * described in the API-Reference https://developer.matomo.org/api-reference/Piwik/Menu/MenuAbstract
*/
class Menu extends \Piwik\Plugin\Menu
{
diff --git a/www/plugins/Events/API.php b/www/plugins/Events/API.php
index 92df1cfb..7ee3d3a0 100644
--- a/www/plugins/Events/API.php
+++ b/www/plugins/Events/API.php
@@ -17,7 +17,7 @@
/**
* The Events API lets you request reports about your users' Custom Events.
*
- * Events are tracked using the Javascript Tracker trackEvent() function, or using the [Tracking HTTP API](http://developer.matomo.org/api-reference/tracking-api).
+ * Events are tracked using the Javascript Tracker trackEvent() function, or using the [Tracking HTTP API](https://developer.matomo.org/api-reference/tracking-api).
*
*
An event is defined by an event category (Videos, Music, Games...),
* an event action (Play, Pause, Duration, Add Playlist, Downloaded, Clicked...),
diff --git a/www/plugins/GeoIp2/LocationProvider/GeoIp2.php b/www/plugins/GeoIp2/LocationProvider/GeoIp2.php
index 313f0c5b..aae84b9b 100644
--- a/www/plugins/GeoIp2/LocationProvider/GeoIp2.php
+++ b/www/plugins/GeoIp2/LocationProvider/GeoIp2.php
@@ -159,13 +159,12 @@ public static function getGeoIPDatabaseTypeFromFilename($filename)
*/
public static function getRegionNameFromCodes($countryCode, $regionCode)
{
- $regionNames = self::getRegionNames();
-
+ $regionNames = self::getRegions();
$countryCode = strtoupper($countryCode);
$regionCode = strtoupper($regionCode);
- if (isset($regionNames[$countryCode][$regionCode])) {
- return $regionNames[$countryCode][$regionCode];
+ if (isset($regionNames[$countryCode][$regionCode]['name'])) {
+ return $regionNames[$countryCode][$regionCode]['name'];
} else {
return Piwik::translate('General_Unknown');
}
diff --git a/www/plugins/GeoIp2/data/regionMapping.php b/www/plugins/GeoIp2/data/regionMapping.php
index c1992987..e3492dc6 100644
--- a/www/plugins/GeoIp2/data/regionMapping.php
+++ b/www/plugins/GeoIp2/data/regionMapping.php
@@ -498,7 +498,7 @@
'25' => 'FP', // Freeport
'26' => 'CS', // Fresh Creek [is now roughly Central Andros]
'27' => 'CE', // Governor's Harbour [is now roughly Central Eleuthera]
- '28' => 'HT', // Green Turtle Cay - mapped to GT by wikidata, but removed in 2010 - now HT according to geonames (http://www.geonames.org/maps/google_26.758_-77.325.html)
+ '28' => 'HT', // Green Turtle Cay - mapped to GT by wikidata, but removed in 2010 - now HT according to geonames (https://www.geonames.org/maps/google_26.758_-77.325.html)
'29' => 'EG', // High Rock [is now roughly East Grand Bahama]
'30' => 'SA', // Kemps Bay [now in South Andros]
'31' => '', // Marsh Harbour
diff --git a/www/plugins/Goals/API.php b/www/plugins/Goals/API.php
index 068935a0..c9c474d1 100644
--- a/www/plugins/Goals/API.php
+++ b/www/plugins/Goals/API.php
@@ -38,7 +38,7 @@
* Goals API lets you Manage existing goals, via "updateGoal" and "deleteGoal", create new Goals via "addGoal",
* or list existing Goals for one or several websites via "getGoals"
*
- * If you are tracking Ecommerce orders and products on your site, the functions "getItemsSku", "getItemsName" and "getItemsCategory"
+ * If you are tracking Ecommerce orders and products on your site, the functions "getItemsSku", "getItemsName" and "getItemsCategory"
* will return the list of products purchased on your site, either grouped by Product SKU, Product Name or Product Category. For each name, SKU or category, the following
* metrics are returned: Total revenue, Total quantity, average price, average quantity, number of orders (or abandoned carts) containing this product, number of visits on the Product page,
* Conversion rate.
@@ -50,7 +50,7 @@
* If you wish to request specific metrics about Ecommerce goals, you can set the parameter &idGoal=ecommerceAbandonedCart to get metrics about abandoned carts (including Lost revenue, and number of items left in the cart)
* or &idGoal=ecommerceOrder to get metrics about Ecommerce orders (number of orders, visits with an order, subtotal, tax, shipping, discount, revenue, items ordered)
*
- * See also the documentation about Tracking Goals in Matomo.
+ * See also the documentation about Tracking Goals in Matomo.
*
* @method static \Piwik\Plugins\Goals\API getInstance()
*/
diff --git a/www/plugins/Live/API.php b/www/plugins/Live/API.php
index 7f0013c4..d9008056 100644
--- a/www/plugins/Live/API.php
+++ b/www/plugins/Live/API.php
@@ -26,7 +26,7 @@
require_once PIWIK_INCLUDE_PATH . '/plugins/UserCountry/functions.php';
/**
- * The Live! API lets you access complete visit level information about your visitors. Combined with the power of Segmentation,
+ * The Live! API lets you access complete visit level information about your visitors. Combined with the power of Segmentation,
* you will be able to request visits filtered by any criteria.
*
* The method "getLastVisitsDetails" will return extensive RAW data for each visit, which includes: server time, visitId, visitorId,
@@ -38,12 +38,12 @@
* browser, type of screen, resolution, supported browser plugins (flash, java, silverlight, pdf, etc.), various dates & times format to make
* it easier for API users... and more!
*
- * With the parameter '&segment=' you can filter the
+ * With the parameter '&segment=' you can filter the
* returned visits by any criteria (visitor IP, visitor ID, country, keyword used, time of day, etc.).
*
* The method "getCounters" is used to return a simple counter: visits, number of actions, number of converted visits, in the last N minutes.
*
- * See also the documentation about Real time widget and visitor level reports in Matomo.
+ * See also the documentation about Real time widget and visitor level reports in Matomo.
* You may also be interested in steps to export your RAW data to a data warehouse.
* @method static \Piwik\Plugins\Live\API getInstance()
*/
@@ -414,7 +414,13 @@ private function addFilterToCleanVisitors(
$visitorDetailsArray['actionDetails'] = array();
if (!$doNotFetchActions) {
- $bulkFetchedActions = isset($actionsByVisitId[$visitorDetailsArray['idVisit']]) ? $actionsByVisitId[$visitorDetailsArray['idVisit']] : array();
+ $bulkFetchedActions = [];
+
+ if (isset($actionsByVisitId[$visitorDetailsArray['idVisit']])) {
+ $bulkFetchedActions = $actionsByVisitId[$visitorDetailsArray['idVisit']];
+ unset($actionsByVisitId[$visitorDetailsArray['idVisit']]);
+ }
+
$visitorDetailsArray = Visitor::enrichVisitorArrayWithActions($visitorDetailsArray, $bulkFetchedActions);
}
diff --git a/www/plugins/Live/templates/index.twig b/www/plugins/Live/templates/index.twig
index 857651f2..ca8e40b6 100644
--- a/www/plugins/Live/templates/index.twig
+++ b/www/plugins/Live/templates/index.twig
@@ -1,7 +1,7 @@
getLogin();
if (empty($login) || $login == 'anonymous') {
- $login = Common::getRequestVar('form_login', false);
+ $login = \Piwik\Request::fromRequest()->getStringParameter('form_login', '');
if (Piwik::getAction() === 'logme') {
- $login = Common::getRequestVar('login', $login);
+ $login = \Piwik\Request::fromRequest()->getStringParameter('login', $login);
}
}
diff --git a/www/plugins/Marketplace/Api/Service.php b/www/plugins/Marketplace/Api/Service.php
index 5ba1b5b5..99bf8ee3 100644
--- a/www/plugins/Marketplace/Api/Service.php
+++ b/www/plugins/Marketplace/Api/Service.php
@@ -189,7 +189,7 @@ public function fetch(
}
/**
- * Get the domain that is used in order to access the Marketplace. Eg http://plugins.piwik.org
+ * Get the domain that is used in order to access the Marketplace. Eg https://plugins.matomo.org
* @return string
*/
public function getDomain()
diff --git a/www/plugins/Marketplace/Emails/RequestTrialNotificationEmail.php b/www/plugins/Marketplace/Emails/RequestTrialNotificationEmail.php
index 0b92a818..6abbdd03 100644
--- a/www/plugins/Marketplace/Emails/RequestTrialNotificationEmail.php
+++ b/www/plugins/Marketplace/Emails/RequestTrialNotificationEmail.php
@@ -4,7 +4,7 @@
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
declare(strict_types=1);
diff --git a/www/plugins/Marketplace/PluginTrial/Notification.php b/www/plugins/Marketplace/PluginTrial/Notification.php
index cb5291f7..5260ace0 100644
--- a/www/plugins/Marketplace/PluginTrial/Notification.php
+++ b/www/plugins/Marketplace/PluginTrial/Notification.php
@@ -4,7 +4,7 @@
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Marketplace\PluginTrial;
diff --git a/www/plugins/Marketplace/PluginTrial/Request.php b/www/plugins/Marketplace/PluginTrial/Request.php
index a188be80..649651c9 100644
--- a/www/plugins/Marketplace/PluginTrial/Request.php
+++ b/www/plugins/Marketplace/PluginTrial/Request.php
@@ -4,7 +4,7 @@
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Marketplace\PluginTrial;
diff --git a/www/plugins/Marketplace/PluginTrial/Service.php b/www/plugins/Marketplace/PluginTrial/Service.php
index 3beae886..5f4d2077 100644
--- a/www/plugins/Marketplace/PluginTrial/Service.php
+++ b/www/plugins/Marketplace/PluginTrial/Service.php
@@ -4,7 +4,7 @@
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Marketplace\PluginTrial;
diff --git a/www/plugins/Marketplace/PluginTrial/Storage.php b/www/plugins/Marketplace/PluginTrial/Storage.php
index 9aa0f882..2dba1feb 100644
--- a/www/plugins/Marketplace/PluginTrial/Storage.php
+++ b/www/plugins/Marketplace/PluginTrial/Storage.php
@@ -4,7 +4,7 @@
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Marketplace\PluginTrial;
diff --git a/www/plugins/Marketplace/vue/src/RequestTrial/RequestTrial.vue b/www/plugins/Marketplace/vue/src/RequestTrial/RequestTrial.vue
index 35b23cc4..996cac6b 100644
--- a/www/plugins/Marketplace/vue/src/RequestTrial/RequestTrial.vue
+++ b/www/plugins/Marketplace/vue/src/RequestTrial/RequestTrial.vue
@@ -1,7 +1,7 @@
diff --git a/www/plugins/PagePerformance/JqplotDataGenerator/Chart.php b/www/plugins/PagePerformance/JqplotDataGenerator/Chart.php
index 8435f904..ad5f2eaf 100644
--- a/www/plugins/PagePerformance/JqplotDataGenerator/Chart.php
+++ b/www/plugins/PagePerformance/JqplotDataGenerator/Chart.php
@@ -17,7 +17,7 @@
class Chart extends \Piwik\Plugins\CoreVisualizations\JqplotDataGenerator\Chart
{
// the data kept here conforms to the jqplot data layout
- // @see http://www.jqplot.com/docs/files/jqPlotOptions-txt.html
+ // @see https://www.jqplot.com/docs/files/jqPlotOptions-txt.html
protected $series = [];
protected $data = [];
protected $axes = [];
@@ -92,7 +92,7 @@ public function render()
{
ProxyHttp::overrideCacheControlHeaders();
- // See http://www.jqplot.com/docs/files/jqPlotOptions-txt.html
+ // See https://www.jqplot.com/docs/files/jqPlotOptions-txt.html
$data = [
'params' => [
'axes' => &$this->axes,
diff --git a/www/plugins/Referrers/Columns/Base.php b/www/plugins/Referrers/Columns/Base.php
index 6fda58e6..97286235 100644
--- a/www/plugins/Referrers/Columns/Base.php
+++ b/www/plugins/Referrers/Columns/Base.php
@@ -388,7 +388,7 @@ protected function detectCampaignFromString($string)
}
}
- if (empty($campaignName)) {
+ if (empty($campaignName) || !is_string($campaignName)) {
return false;
}
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_CAMPAIGN;
diff --git a/www/plugins/Referrers/SearchEngine.php b/www/plugins/Referrers/SearchEngine.php
index 53760b75..6d9ee9e6 100644
--- a/www/plugins/Referrers/SearchEngine.php
+++ b/www/plugins/Referrers/SearchEngine.php
@@ -183,7 +183,7 @@ public function getDefinitionByHost($host)
* - trimmed: extra spaces before and after are removed
*
* The function returns false when a keyword couldn't be found.
- * eg. if the url is "http://www.google.com/partners.html" this will return false,
+ * eg. if the url is "https://www.google.com/partners.html" this will return false,
* as the google keyword parameter couldn't be found.
*
* @see unit tests in /tests/core/Common.test.php
@@ -486,7 +486,7 @@ public function getLogoFromUrl($url)
*
* @param string $url Domain name, e.g., search.piwik.org
* @param string $keyword Keyword, e.g., web+analytics
- * @return string URL, e.g., http://search.piwik.org/q=web+analytics
+ * @return string URL, e.g., https://search.matomo.org/q=web+analytics
*/
public function getBackLinkFromUrlAndKeyword($url, $keyword)
{
diff --git a/www/plugins/ScheduledReports/API.php b/www/plugins/ScheduledReports/API.php
index 0d645d71..487e68a5 100644
--- a/www/plugins/ScheduledReports/API.php
+++ b/www/plugins/ScheduledReports/API.php
@@ -43,7 +43,7 @@
*
* You can also get the list of all existing reports via "getReports", create new reports via "addReport",
* or manage existing reports with "updateReport" and "deleteReport".
- * See also the documentation about Scheduled Email reports in Matomo.
+ * See also the documentation about Scheduled Email reports in Matomo.
*
* @method static \Piwik\Plugins\ScheduledReports\API getInstance()
*/
@@ -1069,6 +1069,8 @@ public static function getSegment($idSegment)
$segment = APISegmentEditor::getInstance()->get($idSegment);
if ($segment) {
+ // segment name is returned sanitized
+ $segment['name'] = Common::unsanitizeInputValue($segment['name']);
return $segment;
}
}
diff --git a/www/plugins/ScheduledReports/Controller.php b/www/plugins/ScheduledReports/Controller.php
index 84009bb9..61834b32 100644
--- a/www/plugins/ScheduledReports/Controller.php
+++ b/www/plugins/ScheduledReports/Controller.php
@@ -123,7 +123,7 @@ public function index()
);
$allSegments = SegmentEditor::getAllSegmentsForSite($this->idSite);
foreach ($allSegments as $savedSegment) {
- $savedSegmentsById[$savedSegment['idsegment']] = $savedSegment['name'];
+ $savedSegmentsById[$savedSegment['idsegment']] = Common::unsanitizeInputValue($savedSegment['name']);
}
$view->savedSegmentsById = $savedSegmentsById;
$view->segmentEditorActivated = true;
diff --git a/www/plugins/ScheduledReports/ScheduledReports.php b/www/plugins/ScheduledReports/ScheduledReports.php
index b80a86da..5618af3a 100644
--- a/www/plugins/ScheduledReports/ScheduledReports.php
+++ b/www/plugins/ScheduledReports/ScheduledReports.php
@@ -217,7 +217,7 @@ public function validateReportParameters(&$parameters, $reportType)
}
}
- // based on http://www.php.net/manual/en/filter.filters.validate.php -> FILTER_VALIDATE_BOOLEAN
+ // based on https://www.php.net/manual/en/filter.filters.validate.php -> FILTER_VALIDATE_BOOLEAN
private static function valueIsTrue($value)
{
return $value == 'true' || $value == 1 || $value == '1' || $value === true;
diff --git a/www/plugins/SitesManager/API.php b/www/plugins/SitesManager/API.php
index 700c1722..72e65075 100644
--- a/www/plugins/SitesManager/API.php
+++ b/www/plugins/SitesManager/API.php
@@ -14,6 +14,8 @@
use Matomo\Network\IPUtils;
use Piwik\Access;
use Piwik\Common;
+use Piwik\Concurrency\Lock;
+use Piwik\Concurrency\LockBackend;
use Piwik\Config;
use Piwik\Container\StaticContainer;
use Piwik\DataAccess\Model as CoreModel;
@@ -56,7 +58,7 @@
* Some methods will affect all websites globally: "setGlobalExcludedIps" will set the list of IPs to be excluded on all websites,
* "setGlobalExcludedQueryParameters" will set the list of URL parameters to remove from URLs for all websites.
* The existing values can be fetched via "getExcludedIpsGlobal" and "getExcludedQueryParametersGlobal".
- * See also the documentation about Managing Websites in Matomo.
+ * See also the documentation about Managing Websites in Matomo.
* @method static \Piwik\Plugins\SitesManager\API getInstance()
*/
class API extends \Piwik\Plugin\API
@@ -858,7 +860,7 @@ private function postUpdateWebsite($idSite)
/**
* Delete a website from the database, given its Id. The method deletes the actual site as well as some associated
* data. However, it does not delete any logs or archives that belong to this website. You can delete logs and
- * archives for a site manually as described in this FAQ: http://matomo.org/faq/how-to/faq_73/ .
+ * archives for a site manually as described in this FAQ: https://matomo.org/faq/how-to/faq_73/ .
*
* Requires Super User access.
*
@@ -875,30 +877,34 @@ public function deleteSite($idSite, $passwordConfirmation = null)
$this->confirmCurrentUserPassword($passwordConfirmation);
}
- $idSites = $this->getSitesId();
- if (!in_array($idSite, $idSites)) {
- throw new Exception("website id = $idSite not found");
- }
- $nbSites = count($idSites);
- if ($nbSites == 1) {
- throw new Exception($this->translator->translate("SitesManager_ExceptionDeleteSite"));
- }
-
- $this->getModel()->deleteSite($idSite);
-
- $coreModel = new CoreModel();
- $coreModel->deleteInvalidationsForSites([$idSite]);
+ $lock = new Lock(StaticContainer::get(LockBackend::class), 'SitesManager.deleteSite');
+ // we use the same lock id for all requests to ensure only one site is removed at a time and the check for one remaining site can't be bypassed
+ $lock->execute('delete', function () use ($idSite) {
+ $idSites = $this->getSitesId();
+ if (!in_array($idSite, $idSites)) {
+ throw new Exception("website id = $idSite not found");
+ }
+ $nbSites = count($idSites);
+ if ($nbSites == 1) {
+ throw new Exception($this->translator->translate("SitesManager_ExceptionDeleteSite"));
+ }
- /**
- * Triggered after a site has been deleted.
- *
- * Plugins can use this event to remove site specific values or settings, such as removing all
- * goals that belong to a specific website. If you store any data related to a website you
- * should clean up that information here.
- *
- * @param int $idSite The ID of the site being deleted.
- */
- Piwik::postEvent('SitesManager.deleteSite.end', [$idSite]);
+ $this->getModel()->deleteSite($idSite);
+
+ $coreModel = new CoreModel();
+ $coreModel->deleteInvalidationsForSites([$idSite]);
+
+ /**
+ * Triggered after a site has been deleted.
+ *
+ * Plugins can use this event to remove site specific values or settings, such as removing all
+ * goals that belong to a specific website. If you store any data related to a website you
+ * should clean up that information here.
+ *
+ * @param int $idSite The ID of the site being deleted.
+ */
+ Piwik::postEvent('SitesManager.deleteSite.end', [$idSite]);
+ });
}
private function checkValidTimezone($timezone)
diff --git a/www/plugins/TagManager/lang/fr.json b/www/plugins/TagManager/lang/fr.json
index 7770893f..b8e8b2b4 100644
--- a/www/plugins/TagManager/lang/fr.json
+++ b/www/plugins/TagManager/lang/fr.json
@@ -3,7 +3,7 @@
"ActivelySyncGtmDataLayerDescription": "Si cette option est activée, toute nouvelle valeur ajoutée au data layer (dataLayer) de Google Tag Manager sera synchronisée avec le data layer (_mtm) de Matomo Tag Manager.",
"ActivelySyncGtmDataLayerTitle": "Synchronisation active avec le data layer de Google Tag Manager",
"AddThisParentSelectorDescription": "Optionnel : Saisissez un sélecteur CSS pour cibler l'élément auquel ajouter les Outils Contextuels.",
- "AddThisParentSelectorTitle": "Inline Tools Parent Selector",
+ "AddThisParentSelectorTitle": "Outils alignés Sélecteur de parents",
"AddThisTagDescription": "Ajoutez le bouton de réseaux sociaux \"AddThis\" et plus encore à votre site web.",
"AddThisTagPubIdDescription": "Créez un nouveau site dans Shareaholic et collez l'ID du site ici",
"AddThisTagPubIdTitle": "AddThis PubId",
@@ -28,7 +28,7 @@
"BackupVersionNameHelp": "Si vous définissez un nom de version, une nouvelle version avec ce nom sera créée afin de sauvegarder la version actuellement en brouillon.",
"BingUETTagDescription": "Ajoute la balise universelle de suivi d'évènement Bing Publicité à votre site web afin que vous puissiez suivre la conversion de vos compagnes Bing.",
"BingUETTagHelp": "La balise suit ce que font vos clients après avoir cliqué sur votre annonce Bing.",
- "BingUETTagIdDescription": "Indiquez l'identifiant Bing Ads. Celui-ci apparaît dans le code de suivi disponible dans votre gestionnaire de campagnes Bing Ads.",
+ "BingUETTagIdDescription": "Vous pouvez trouver l'ID de la publicité Bing lors de la création d'un nouveau code de suivi dans le gestionnaire de campagnes publicitaires Bing.",
"BingUETTagIdPlaceholder": "Par exemple : 1234567890",
"BingUETTagIdTitle": "ID",
"BingUETTagName": "Balise Publicité UET Bing",
@@ -128,6 +128,7 @@
"ConfigureWhenTagDoes": "Configurez quand la balise doit faire cela",
"ConfigureX": "Configurer %s",
"ConfirmImportContainerVersion": "Êtes-vous sûr(e) de vouloir importer cette donnée ? Le brouillon actuel sera écrasé avec cette version importée.",
+ "ConsentManagement": "Gestion du consentement",
"ConsentManagementPlatform": "Plateforme de gestion du consentement",
"ConstantValuePlaceholder": "Une valeur constante (par exemple : Livres)",
"ConstantVariableDescription": "La variable est définie à une valeur fixe.",
@@ -196,6 +197,7 @@
"CustomEventTriggerEventNameDescription": "Le nom de l'événement envoyé à la couche de données (Data Layer). Par exemple, vous pouvez envoyer un événement en ajoutant ceci à votre site web : _mtm.push({\"event\" : \"my-custom-event\"}) ;",
"CustomEventTriggerHelp": "Permet aux développeurs de définir manuellement quand ce déclencheur devrait être déclenché en envoyant un évènement à la couche de données. De cette manière vous pouvez par exemple exécuter certaines actions quand un produit est ajouté au panier ou lorsqu'un utilisateur s'identifie.",
"CustomEventTriggerName": "Évènement personnalisé",
+ "CustomHTMLTagNameInlineHelpText": "%1$sRemarque :%2$s Si vous ciblez des utilisateurs en Europe, sachez que le déclenchement de balises de reciblage comme Google Ads Remarketing nécessite le consentement de l'utilisateur conformément au RGPD. %3$sEn savoir plus%4$s.",
"CustomHtmlHtmlPositionDescription": "Choisissez dans quelle section de vos pages web le code doit être inséré.",
"CustomHtmlHtmlPositionTitle": "Emplacement du code dans la page",
"CustomHtmlTagDescription": "Vous permet d'incorporer n'importe quel code HTML, JavaScript ou CSS personnalisé.",
@@ -354,6 +356,7 @@
"ErrorContainerVersionDoesNotExist": "La version de conteneur demandée n'existe pas.",
"ErrorContainerVersionImportIncomplete": "Impossible d'importer le conteneur. La version spécifiée de conteneur est incomplète. Assurez-vous qu'il contienne son contexte, ses balises, ses déclencheurs et ses informations de variables.",
"ErrorContainerVersionImportWrongContext": "Le contexte du conteneur courant est \"%1$s\" mais le conteneur importé a le contexte \"%2$s\". Impossible d'importer cette version.",
+ "ErrorDeleteReferencedVariable": "Cette variable est utilisée ailleurs et ne peut pas être supprimée. Veuillez supprimer toutes les références à celle-ci, puis réessayez.",
"ErrorEndDateBeforeStartDate": "La date de début doit être plus tôt que la date de fin.",
"ErrorEnvironmentDoesNotExist": "L'environment \"%s\" n'existe pas.",
"ErrorEnvironmentInvalidLength": "L'environnement \"%1$s\" n'a pas une longueur valide. Veuillez utiliser entre %2$s et %3$s caractères.",
@@ -531,6 +534,7 @@
"GoogleAnalytics4EventNameDescription": "Indiquez le nom de l’événement. %1$sEn savoir plus%2$s.",
"GoogleAnalytics4EventNameTitle": "Nom de l'événement",
"GoogleAnalytics4EventTagDescription": "Envoyer un événement à Google Analytics 4. Cette balise nécessite la configuration préalable d'une balise Google Analytics 4 (GA4).",
+ "GoogleAnalytics4EventTagDescriptionNew": "Envoyez un événement à Google Analytics 4. Cette balise nécessite que la balise Google Tag (gtag.js) soit configurée.",
"GoogleAnalytics4EventTagName": "Google Analytics : Evénement GA4",
"GoogleAnalytics4MeasurementIdDescription": "Saisissez votre ID de mesure. %1$sEn savoir plus%2$s.",
"GoogleAnalytics4MeasurementIdTitle": "ID de mesure",
@@ -543,6 +547,14 @@
"GoogleAnalyticsUniversalTagPropertyIdTitle": "Identifiant de propriété",
"GoogleAnalyticsUniversalTagTrackingTypeDescription": "Seul le type de suivi \"Page vue (Pageview)\" est actuellement pris en charge.",
"GoogleAnalyticsUniversalTagTrackingTypeTitle": "Type de suivi",
+ "GoogleConsentModeV2TagConsentActionDescription": "Sélectionnez 'défaut' pour définir les valeurs par défaut et 'mise à jour' pour gérer le consentement des utilisateurs.",
+ "GoogleConsentModeV2TagConsentActionTitle": "Action du mode de consentement",
+ "GoogleConsentModeV2TagConsentStateTitle": "État du consentement",
+ "GoogleConsentModeV2TagConsentTypeTitle": "Type de consentement",
+ "GoogleConsentModeV2TagConsentTypesDescription": "L'état du consentement doit être défini sur « refusé » avant que l'utilisateur ne donne son consentement. Une fois le consentement obtenu, vous pouvez déclencher cette balise avec le mode d'action défini sur « mise à jour » et tous les états de consentement définis sur « accordé » pour tous les types de consentement. (Tous les types de consentement sont disponibles dans la documentation de Google). L'état du consentement doit être soit « refusé », soit « accordé » ; aucune autre valeur n'est autorisée. %1$sEn savoir plus%2$s.",
+ "GoogleConsentModeV2TagConsentTypesTitle": "État du consentement",
+ "GoogleConsentModeV2TagDescription": "Le mode de consentement v2 vous permet de communiquer à Google le statut de consentement de vos utilisateurs concernant les cookies ou les identifiants d'application.",
+ "GoogleConsentModeV2TagName": "Mode de consentement Google",
"GoogleTagTagDescription": "La balise Google fournit aux produits Google que vous utilisez des données pour mesurer l'efficacité de votre site web et de vos publicités.",
"GoogleTagTagIdDescription": "Il s'agit d'un identifiant que vous ajoutez à votre page pour charger une balise Google spécifique. %1$sEn savoir plus.%2$s",
"GoogleTagTagIdTitle": "Identifiant de la balise (Tag ID)",
@@ -579,6 +591,7 @@
"HotjarHJIDDescription": "Votre identifiant de site Hotjar. Vous pouvez l'obtenir dans la sections \"Sites\" de votre compte Hotjar.",
"HotjarHJSV": "Version du script Hotjar",
"HotjarHJSVDescription": "Version du code Hotjar.",
+ "HotjarSnippetVersion": "Version du snippet Hotjar",
"HotjarTagDescription": "Outils de cartes de chaleur et d'analyse du comportement des utilisateurs de sites web.",
"HotjarTagName": "Hotjar",
"IgnoreGtmDataLaterDescription": "Si cette option est activée, Matamo Tag Manager va exclure les valeurs du data layer de Google Tag Manager (dataLayer). Pour des raisons de compatibilité, cette option est désactivée par défaut afin de conserver les valeurs par défaut de Google Tag Manager.",
@@ -650,6 +663,8 @@
"ManageVersionsHelp3": "En savoir plus sur les %1$sversions%2$s ou %3$sMatomo Tag Manager%4$s, et regardez la %5$série de vidéos de formation%6$s.",
"ManageX": "Gérer %s",
"MatomoConfigurationFieldHelp": "Choisissez une variable de configuration Matomo afin de suivre les données sur un site spécifique (cet élément pourra être modifié dans le menu \"Variables\" du gestionnaire de balises Matomo).",
+ "MatomoConfigurationMatomoAddDownloadExtensionsDescription": "Spécifiez des extensions de fichier supplémentaires à reconnaître comme des téléchargements. Exemple : doc ou doc,xls",
+ "MatomoConfigurationMatomoAddDownloadExtensionsTitle": "Ajouter des extensions de téléchargement",
"MatomoConfigurationMatomoAlwaysUseSendBeaconDescription": "Permet l'utilisation de la balise d'envoi au lieu d'une demande ajax normale. Cela signifie que lorsqu'un utilisateur clique par exemple sur un lien externe, la navigation vers cette page sera beaucoup plus rapide.",
"MatomoConfigurationMatomoAlwaysUseSendBeaconTitle": "Toujours utiliser sendBeacon",
"MatomoConfigurationMatomoAppendToTrackingUrlDescription": "Ajoutez une chaîne personnalisée à la fin de la requête HTTP vers matomo.php (ou le point de suivi correspondant que vous avez sélectionné).",
@@ -671,6 +686,8 @@
"MatomoConfigurationMatomoCrossDomainLinkingTimeoutTitle": "Délai d'association inter-domaines",
"MatomoConfigurationMatomoCustomCookieTimeOutsEnableDescription": "Permet de configurer des durées de vie personnalisées pour différents cookies Matomo.",
"MatomoConfigurationMatomoCustomCookieTimeOutsEnableTitle": "Activer la configuration de durées de vie personnalisées pour les cookies",
+ "MatomoConfigurationMatomoCustomDataDescription": "Optionnel, définissez des données personnalisées dans votre requête de suivi.",
+ "MatomoConfigurationMatomoCustomDataTitle": "Données personnalisées",
"MatomoConfigurationMatomoCustomDimensionsDescription": "Si besoin, vous pouvez définir ici une ou plusieurs dimensions personnalisées.",
"MatomoConfigurationMatomoCustomDimensionsException": "La valeur doit être un tableau",
"MatomoConfigurationMatomoCustomDimensionsTitle": "Dimensions personnalisées",
@@ -687,6 +704,8 @@
"MatomoConfigurationMatomoDisableCookiesTitle": "Désactiver les cookies",
"MatomoConfigurationMatomoDisablePerformanceTrackingDescription": "Désactiver le suivi des performances de page (temps de chargement, etc.).",
"MatomoConfigurationMatomoDisablePerformanceTrackingTitle": "Désactiver le suivi des performances",
+ "MatomoConfigurationMatomoDiscardHashTagDescription": "Si activé, la partie hash tag (ancre) des URL ne sera pas enregistrée.",
+ "MatomoConfigurationMatomoDiscardHashTagTitle": "Ignorer le HashTag",
"MatomoConfigurationMatomoDomainsDescription": "Utilisé pour détecter les liens sortants. Ajoutez des noms d'hôtes ou des domaines à traiter comme locaux. Pour les sous-domaines joker, vous pouvez utiliser : \".exemple.com\" ou \"*.exemple.com\". Vous pouvez également spécifier un chemin le long d'un domaine : \"*.example.com/subsite1\".",
"MatomoConfigurationMatomoDomainsException": "La valeur doit être un tableau",
"MatomoConfigurationMatomoDomainsTitle": "Domaines",
@@ -711,6 +730,8 @@
"MatomoConfigurationMatomoEnableMediaAnalyticsTitle": "Activer le suivi des médias",
"MatomoConfigurationMatomoForceRequestMethodDescription": "Permet de forcer la méthode de requête à GET ou POST.",
"MatomoConfigurationMatomoForceRequestMethodTitle": "Forcer la méthode de requête",
+ "MatomoConfigurationMatomoForgetConsentGivenDescription": "Supprimez le consentement d'un utilisateur, qu'il s'agisse d'un consentement unique ou mémorisé. Après avoir appelé cette méthode, l'utilisateur devra à nouveau donner son consentement pour être suivi.",
+ "MatomoConfigurationMatomoForgetConsentGivenTitle": "Oublier le consentement accordé",
"MatomoConfigurationMatomoHeartBeatTimeDescription": "Intervalle de temps, en secondes, entre l'envoi de signaux (ou 'pings') permettant de confirmer qu'un utilisateur est toujours actif sur la page. Cet intervalle ne peut pas être inférieur à 5 secondes.",
"MatomoConfigurationMatomoHeartBeatTimePlaceholder": "Par exemple : 15",
"MatomoConfigurationMatomoHeartBeatTimeTitle": "Intervalle entre chaque ping (en secondes)",
@@ -723,11 +744,19 @@
"MatomoConfigurationMatomoJsEndpointCustomTitle": "Chemin du traceur JavaScript personnalisé",
"MatomoConfigurationMatomoJsEndpointDescription": "Ici, vous pouvez configurer le chemin source du JavaScript Matomo Tracker, si vous n'utilisez pas l'option \"Bundle Tracker\".",
"MatomoConfigurationMatomoJsEndpointTitle": "Chemin d'accès Javascript du tracker",
+ "MatomoConfigurationMatomoKillFrameDescription": "Activez un frame-buster pour empêcher la page web suivie d'être encadrée/affichée dans un iframe.",
+ "MatomoConfigurationMatomoKillFrameTitle": "Activer la suppression des cadres (Kill Frame)",
"MatomoConfigurationMatomoReferralCookieTimeOutDescription": "Durée de vie du cookie 'Referral' en jours complets. Par défaut, le cookie de suivi Matomo expire après 6 mois, soit 182 jours.",
"MatomoConfigurationMatomoReferralCookieTimeOutPlaceholder": "Par exemple : 182",
"MatomoConfigurationMatomoReferralCookieTimeOutTitle": "Durée de vie du cookie 'Referral'",
"MatomoConfigurationMatomoRegisterAsDefaultTrackerDescription": "Lorsqu'il est activé, le tracker sera enregistré comme le tracker par défaut pour le site web, et recevra toutes les commandes qui sont poussées dans la variable globale _paq. Utile si vous souhaitez utiliser la configuration du tracker depuis le conteneur avec votre propre code JavaScript _paq.push().",
"MatomoConfigurationMatomoRegisterAsDefaultTrackerTitle": "S'inscrire comme traceur par défaut",
+ "MatomoConfigurationMatomoRememberConsentGivenDescription": "Indiquez que l'utilisateur actuel a donné son consentement et mémorisez ce consentement à l'aide d'un cookie dans le navigateur. Lors de sa prochaine visite sur le site, Matomo se souviendra de son consentement et effectuera le suivi. Si vous activez cette option, il n'est pas nécessaire d'activer l'option « Définir le consentement accordé ».",
+ "MatomoConfigurationMatomoRememberConsentGivenForHoursDescription": "Définissez éventuellement après combien d'heures le consentement doit expirer. Par défaut, le consentement est valide pendant 30 ans, sauf si l'utilisateur ou le navigateur supprime les cookies avant cette échéance.",
+ "MatomoConfigurationMatomoRememberConsentGivenForHoursTitle": "Expirer le consentement",
+ "MatomoConfigurationMatomoRememberConsentGivenTitle": "Mémoriser le consentement accordé",
+ "MatomoConfigurationMatomoRemoveDownloadExtensionsDescription": "Spécifiez les extensions de fichier à supprimer de la liste des extensions de fichiers de téléchargement. Exemple : doc ou doc,xls",
+ "MatomoConfigurationMatomoRemoveDownloadExtensionsTitle": "Supprimer des extensions de téléchargement",
"MatomoConfigurationMatomoRequestContentTypeDescription": "Définir la valeur de l'en-tête Content-Type pour les requêtes POST.",
"MatomoConfigurationMatomoRequestContentTypePlaceholder": "Par exemple : application/x-www-form-urlencoded; charset=UTF-8",
"MatomoConfigurationMatomoRequestContentTypeTitle": "Content-Type (Type de contenu)",
@@ -740,6 +769,40 @@
"MatomoConfigurationMatomoSessionCookieTimeOutDescription": "Durée de vie du cookie de 'Session' en minutes.",
"MatomoConfigurationMatomoSessionCookieTimeOutPlaceholder": "Par exemple : 30",
"MatomoConfigurationMatomoSessionCookieTimeOutTitle": "Durée de vie du cookie de 'Session'",
+ "MatomoConfigurationMatomoSetApiUrlDescription": "Spécifiez l'URL de l'endpoint de l'API HTTP de Matomo. Elle pointe vers le répertoire racine de Matomo, par exemple : `https://matomo.example.org/` ou `https://example.org/matomo/`. Cette fonction est uniquement utile lorsque le rapport « Overlay » ne fonctionne pas. Par défaut, vous n'avez pas besoin d'utiliser cette fonction.",
+ "MatomoConfigurationMatomoSetApiUrlTitle": "Définissez l'URL de l'API",
+ "MatomoConfigurationMatomoSetCampaignKeywordKeyDescription": "Définissez le ou les paramètres du mot-clé de la campagne.",
+ "MatomoConfigurationMatomoSetCampaignKeywordKeyTitle": "Définirssez la clé du nom du mot-clé de la campagne",
+ "MatomoConfigurationMatomoSetCampaignNameKeyDescription": "Définissez le ou les paramètres du nom de la campagne.",
+ "MatomoConfigurationMatomoSetCampaignNameKeyTitle": "Définissez la clé du nom de la campagne",
+ "MatomoConfigurationMatomoSetConsentGiveDescription": "Indiquez que l'utilisateur actuel a donné son consentement. Ce consentement est valable uniquement pour la session en cours, et l'utilisateur devra à nouveau donner son consentement lors d'une session ultérieure. Pour mémoriser le consentement, consultez l'option « Mémoriser le consentement accordé » ci-dessous.",
+ "MatomoConfigurationMatomoSetConsentGiveTitle": "Définissez le consentement accordé",
+ "MatomoConfigurationMatomoSetConversionAttributionDescription": "Si activé, la conversion sera attribuée au premier référent. Par défaut, la conversion est attribuée au référent le plus récent.",
+ "MatomoConfigurationMatomoSetConversionAttributionTitle": "Définir l'attribution des conversions au premier référent",
+ "MatomoConfigurationMatomoSetCountPreRenderedDescription": "Si activé, les sites en état de pré-rendu seront comptabilisés.",
+ "MatomoConfigurationMatomoSetCountPreRenderedTitle": "Activer le comptage des sites en état de pré-rendu",
+ "MatomoConfigurationMatomoSetDoNotTrackDescription": "Si activé, le suivi des utilisateurs ayant choisi de ne pas être suivis via le paramètre « Ne pas suivre » (Do Not Track) proposé par Mozilla ne sera pas effectué.",
+ "MatomoConfigurationMatomoSetDoNotTrackTitle": "Définir Ne pas suivre (Do Not Track)",
+ "MatomoConfigurationMatomoSetDownloadClassesDescription": "Définissez les classes à traiter comme des téléchargements (en plus de matomo_download)",
+ "MatomoConfigurationMatomoSetDownloadClassesTitle": "Définissez les classes de téléchargement",
+ "MatomoConfigurationMatomoSetDownloadExtensionsDescription": "Définissez une liste d'extensions de fichiers à reconnaître comme des téléchargements. Exemple : doc ou doc,xls",
+ "MatomoConfigurationMatomoSetDownloadExtensionsTitle": "Définir les extensions de téléchargement",
+ "MatomoConfigurationMatomoSetExcludedQueryParamsDescription": "Définissez les paramètres de requête à exclure de l'URL. Exemple: uuid ou uuid1,uuid2",
+ "MatomoConfigurationMatomoSetExcludedQueryParamsTitle": "Définissez les paramètres de requête à exclure de l'URL.",
+ "MatomoConfigurationMatomoSetExcludedReferrersDescription": "Définissez un tableau de noms d'hôtes ou de domaines à ignorer en tant que référents. Pour les sous-domaines génériques, vous pouvez utiliser .example.com ou *.example.com",
+ "MatomoConfigurationMatomoSetExcludedReferrersTitle": "Définissez le référent exclu",
+ "MatomoConfigurationMatomoSetIgnoreClassesDescription": "Définissez les classes à ignorer si elles sont présentes dans un lien (en plus de `matomo_ignore` et `piwik_ignore`). Exemple : classA ou classA,classB",
+ "MatomoConfigurationMatomoSetIgnoreClassesTitle": "Définir les classes à ignorer",
+ "MatomoConfigurationMatomoSetLinkClassesDescription": "Définissez les classes à traiter comme des liens sortants (en plus de piwik_link). Exemple : class1 ou class1,class2",
+ "MatomoConfigurationMatomoSetLinkClassesTitle": "Définissez les classes de lien",
+ "MatomoConfigurationMatomoSetLinkTrackingTimerDescription": "Définissez le délai de suivi des liens en millisecondes.",
+ "MatomoConfigurationMatomoSetLinkTrackingTimerTitle": "Définir le minuteur de suivi des liens",
+ "MatomoConfigurationMatomoSetPageViewIdDescription": "Remplacez l'ID de la page vue pour chaque utilisation de `logPageView()`. Ne l'utilisez pas si vous appelez `trackPageView()` plusieurs fois pendant le suivi (par exemple, lors du suivi d'une application composée d'une seule page).",
+ "MatomoConfigurationMatomoSetPageViewIdTitle": "Définissez l'ID de la vue de page",
+ "MatomoConfigurationMatomoSetReferrerUrlDescription": "Remplacez le Http-Referer détecté. Nous vous recommandons d'appeler cette méthode tôt dans votre code de suivi, avant d'appeler `trackPageView`, si elle doit s'appliquer à toutes les requêtes de suivi.",
+ "MatomoConfigurationMatomoSetReferrerUrlTitle": "Définir l'URL du référent",
+ "MatomoConfigurationMatomoSetRequestQueueIntervalDescription": "Définit après combien de millisecondes une requête en file d'attente sera exécutée après son ajout initial. Plus la valeur est élevée, plus les requêtes de suivi peuvent être envoyées ensemble en une seule fois. L'intervalle doit être d'au moins 1000 ms (1000 ms = 1 s) et est défini par défaut à 2,5 secondes.",
+ "MatomoConfigurationMatomoSetRequestQueueIntervalTitle": "Définir l'intervalle de la file d'attente des requêtes",
"MatomoConfigurationMatomoSetSecureCookieDescription": "Activez le drapeau Secure pour tous les cookies de première partie. Cette option doit être utilisée lorsque votre site web est uniquement accessible en HTTPS, afin que tous les cookies de suivi soient toujours transmis via une connexion sécurisée.",
"MatomoConfigurationMatomoSetSecureCookieTitle": "Activer le cookie sécurisé",
"MatomoConfigurationMatomoTrackAllContentImpressionsDescription": "Active la fonctionnalité de suivi du contenu en analysant l'ensemble du DOM pour tous les blocs de contenu et suit toutes les impressions une fois la page chargée.",
@@ -761,6 +824,7 @@
"MatomoConfigurationMatomoVisitorCookieTimeOutDescription": "Durée de vie du cookie pk_id en jours complets. Par défaut, le cookie de suivi Matomo expire après 13 mois (365 + 28 jours = 393 jours).",
"MatomoConfigurationMatomoVisitorCookieTimeOutPlaceholder": "Par exemple : 393",
"MatomoConfigurationMatomoVisitorCookieTimeOutTitle": "Durée de vie du cookie 'Visiteur'",
+ "MatomoConfigurationNonNumericValueException": "Valeur invalide, seules les valeurs numériques sont autorisées.",
"MatomoConfigurationVariableDescription": "Définit une configuration pour les statistiques Matomo.",
"MatomoConfigurationVariableName": "Configuration Matomo",
"MatomoTagCustomDimensionsDescription": "Définissez une valeur pour une ou plusieurs dimensions personnalisées (facultatif).",
diff --git a/www/plugins/TagManager/lang/nl.json b/www/plugins/TagManager/lang/nl.json
index c46c3ac2..46d49980 100644
--- a/www/plugins/TagManager/lang/nl.json
+++ b/www/plugins/TagManager/lang/nl.json
@@ -1,5 +1,7 @@
{
"TagManager": {
+ "ActivelySyncGtmDataLayerDescription": "Indien ingeschakeld, zal elke nieuwe waarde die naar de Google Tag Manager gegevenslaag geschreven wordt, ook gesynchroniseerd worden naar de Matomo Tag Manager gegevenslaag.",
+ "ActivelySyncGtmDataLayerTitle": "Synchroniseer actief van de Google Tag Manager gegevenslaag",
"AddThisParentSelectorDescription": "Voer optioneel een CSS selector in voor het element waar de Inline Tools moeten worden toegevoegd.",
"AddThisParentSelectorTitle": "Inline Tools ouderselectie",
"AddThisTagDescription": "Voeg de AddThis social media buttons en meer toe aan je website.",
@@ -7,6 +9,7 @@
"AddThisTagPubIdTitle": "AddThis PubId",
"AllDownloadsClickTriggerDescription": "Geactiveerd wanneer er op een link wordt geklikt die naar een downloadbaar bestand linkt, dit zowel voor links, midden als rechts klikken.",
"AllDownloadsClickTriggerDownloadExtensionsDescription": "Door komma's gescheiden lijst van bestandsextensies die als een download worden beschouwd.",
+ "AllDownloadsClickTriggerDownloadExtensionsPlaceholder": "bvb. 7z,aac,apk,arc,arj,asf,asx,avi,azw3,bin,csv,deb,dm",
"AllDownloadsClickTriggerDownloadExtensionsTitle": "Download extensies",
"AllDownloadsClickTriggerHelp": "Wordt geactiveerd wanneer een gebruiker op een \"A\" - of \"AREA\" -element klikt en de link verwijst naar een bestand met een downloadbare bestand extensie. Om het volgen van specifieke knopklikken mogelijk te maken, voegt u in de geavanceerde instellingen voorwaarden toe op basis van een \"ClickButton\"-variabele.",
"AllDownloadsClickTriggerName": "Alle Download Klik",
@@ -18,11 +21,14 @@
"AllLinksClickTriggerName": "Alle Link Clicks",
"AutoGenerated": "Automatisch gegenereerd",
"AutoGeneratedContainerDescription": "Deze container is automatisch gemaakt toen de website was gecreëerd.",
+ "AxeptioProjectIdDescription": "Voer uw Project ID in. Je kan deze vinden in het instellingenmenu van uw Axeptio project.",
+ "AxeptioProjectIdTitle": "Project ID",
"BackupVersionName": "Backup versie naam",
"BackupVersionNameHelp": "Wanneer je een nieuwe naam aanmaakt, een nieuwe versie met deze naam zal worden aangemaakt om de huidige versie te back uppen.",
"BingUETTagDescription": "Voegt de Bing Ads Universal Event Tracking Tag toe aan uw website, zodat conversie tracking toe gepast wordt op uw Bing-advertentiecampagnes.",
"BingUETTagHelp": "De tag houdt bij wat bezoekers doen nadat ze hebben geklikt op je Bing advertentie.",
"BingUETTagIdDescription": "U kunt de Bing Ad ID vinden wanneer u een nieuwe trackingcode maakt in het Bing Ad campagnebeheer.",
+ "BingUETTagIdPlaceholder": "bvb. 1234567890",
"BingUETTagIdTitle": "ID",
"BingUETTagName": "Bing Ads UET Tag",
"BlockTriggerHelp": "Deze tag wordt niet uitgevoerd zodra een van deze triggers is geactiveerd. Op deze manier kan je er bijvoorbeeld voor zorgen dat je deze tag niet uitvoert op bepaalde pagina's, of wanneer een gebruiker een bepaalde scrollpositie heeft bereikt.",
@@ -72,14 +78,22 @@
"ChooseTriggerToContinue": "Selecteer een type trigger om door te gaan",
"ChooseVariable": "Kies een variabele",
"ChooseVariableToContinue": "Selecteer een variabele type om door te gaan",
+ "ChooseWebsite": "Kies website",
"ClickButtonVariableDescription": "Aangeklikte knop (links / midden / rechts)",
"ClickButtonVariableName": "Klik op de knop",
"ClickClassesVariableDescription": "De waarde van alle CSS-class namen van een element wanneer een klik trigger werd geactiveerd.",
"ClickClassesVariableName": "Klik Klassen",
+ "ClickDataAttributeDataAttributePlaceholder": "bvb. attribute-suffix",
"ClickDestinationUrlVariableDescription": "De waarde van de link-URL (href) van een element wanneer een klik trigger werd geactiveerd.",
"ClickDestinationUrlVariableName": "Klik bestemming URL",
"ClickElementVariableDescription": "Een exemplaar van het element waarop is geklikt.",
"ClickElementVariableName": "Click element",
+ "ClickHtmlAttributeAttributeDescription": "De naam van het attribuut, zoals title, value, alt, of elk ander HTML-attribuut.",
+ "ClickHtmlAttributeAttributePlaceholder": "bvb. value",
+ "ClickHtmlAttributeAttributeTitle": "Naam aangeklikt HTML-attribuut",
+ "ClickHtmlAttributeVariableDescription": "Leest de aangepaste waarde van het aangeklikte HTML-attribuut.",
+ "ClickHtmlAttributeVariableHelp": "Met behulp van deze variabele kun je elke waarde bevragen die beschikbaar is binnen het aangeklikte HTML-attribuut.",
+ "ClickHtmlAttributeVariableName": "Aangeklikt HTML-attribuut",
"ClickIdVariableDescription": "De waarde van de ID attribuut van een element wanneer een klik trigger werd geactiveerd.",
"ClickIdVariableName": "Klik ID",
"ClickNodeNameVariableDescription": "De naam van een element wanneer een klik trigger werd geactiveerd. Bijvoorbeeld \"P\" of \"DIV\"",
@@ -108,15 +122,20 @@
"ConfigureWhenTagDoes": "Configureer wanneer de tag dit moet doen",
"ConfigureX": "Configureer 1%s",
"ConfirmImportContainerVersion": "Weet je zeker dat je deze data wilt importeren? De huidige werkende draft wordt overschreven met deze geïmporteerde versie.",
+ "ConstantValuePlaceholder": "Een constante waarde (bvb. Boeken)",
"ConstantVariableDescription": "De variabele is ingesteld op een vaste waarde.",
"ConstantVariableName": "Constant",
"Container": "Container",
"ContainerContextHelp": "Definieert in welke context de container wordt ingezet. Momenteel worden alleen \"Web\" -containers ondersteund.",
+ "ContainerDashboardDescription": "Met Matomo Tag Manager (MTM) kun je uw trackingconfiguraties aanpassen zonder wijzigingen aan te brengen aan uw website. Het container dashboard biedt een overzicht van tags, triggers en variabelen die in de container gemaakt zijn, en een lijst met de meest recent opgeslagen versies van de container. %1$sLees meer%2$s.",
"ContainerDescriptionHelp": "Optioneel kan je het doel van deze container beschrijven. Dit is vooral handig als je meerdere containers per locatie heeft.",
+ "ContainerDescriptionPlaceholder": "De beschrijving van de container",
"ContainerIdVariableDescription": "Geeft het ID van deze container, bijvoorbeeld \"ab2Dk432\".",
"ContainerIdVariableName": "Container ID",
+ "ContainerLowercase": "container",
"ContainerMetaInformation": "ID \"%1$s\" in context \"%2$s\" gemaakt op %3$s.",
"ContainerNameHelp": "Met de containernaam kan je een unieke naam voor deze container definiëren. Houd er rekening mee dat deze naam ook beschikbaar zal zijn als een variabele en daarom openbaar zichtbaar is in de broncode van de tag.",
+ "ContainerNamePlaceholder": "De naam van de container",
"ContainerRevisionVariableDescription": "Retourneert de correctie van deze container, bijvoorbeeld \"5\".",
"ContainerRevisionVariableName": "Container revisie",
"ContainerUsageBenefits": "Elke container bevat een set tags die aan je site worden toegevoegd. Zodra je een container hebt gemaakt, ontvang je een HTML-fragment dat je in je website kunt plaatsen. Normaal gesproken heb je slechts één container per locatie. Je kunt echter meerdere containers per site configureren, bijvoorbeeld als één site in Matomo meerdere sites vertegenwoordigt of als verschillende teams verantwoordelijk zijn voor verschillende delen van een site.",
@@ -127,13 +146,22 @@
"Context": "Context",
"ContextWeb": "Web",
"ContextWebInstallInstructions": "Om deze container te installeren, kopieer en plak de volgende code zo hoog mogelijk in %1$s van elke pagina van de website.",
+ "CookieVariableCookieNamePlaceholder": "bvb. cookieName",
"CookieVariableCookieNameTitle": "Cookienaam",
"CookieVariableDescription": "Leest een waarde van een cookie",
"CookieVariableName": "First-Party Cookie",
"CookieVariableUrlDecodeDescription": "Indien ingeschakeld, wordt de waarde gedecodeerd",
"CookieVariableUrlDecodeTitle": "URI-decodeer cookie",
+ "CookieYesTagWebsiteKeyTitle": "Website sleutel",
+ "CookiebotTagDescription": "Cookiebot CMP zorgt dat het gebruik van cookies en online tracking voor uw website in overeenstemming is met de GDPR-regelgeving.",
+ "CookiebotTagIdDescription": "Voer de domein groep ID in die bij de 'Your Script\"-sectie van de Cookiebot-website staat aangegeven.",
+ "CookiebotTagIdTitle": "Domein group ID",
"CopyCodePasteInHeader": "Kopieer het code snippet en plak het onmiddellijk vóór afsluiten van de %1$s tag van uw website.",
+ "CopyContainerDescription": "Selecteer de website om deze container naar te kopiëren. Dit zal een exacte kopie maken van alle instellingen, tags, triggers en variabelen in de gekozen website.",
+ "CopyContainerNote": "%1$sOpmerking:%2$s De gekopieerde container kan aanpassingen nodig hebben als deze aangepaste code bevat of specifieke verwijzingen naar de originele website. Controleer de instellingen om compatibiliteit te garanderen.",
"CopyX": "Kopieer %s",
+ "CopyXDescription": "Om deze %1$s te dupliceren, selecteer de website en container waar je de %1$s aan wilt toevoegen. Dit zal een exacte kopie maken van alle instellingen van de %1$s.",
+ "CopyXSuccess": "Een kopie is succesvol aangemaakt. %1$sNavigeer nu naar de nieuwe %2$s %3$s.",
"CopyXTo": "Kopieer %s naar:",
"CreateNewContainer": "Nieuwe container aanmaken",
"CreateNewContainerNow": "Nu een nieuwe container aanmaken",
@@ -174,11 +202,13 @@
"CustomImageTagSrcTitle": "Afbeelding URL",
"CustomJsFunctionVariableDescription": "Voert een JavaScript-functie uit om de waarde te verkrijgen.",
"CustomJsFunctionVariableJsFunctionDescription": "De waarde moet beginnen met \"function() { \" en eindigen met \"return yourValue; }\". U moet een functie definiëren en een waarde teruggeven. Wij raden u ten zeerste aan de geplakte Javascript-functie te testen om Javascript-fouten op uw website te voorkomen.",
+ "CustomJsFunctionVariableJsFunctionPlaceholder": "bvb. function () { return \"\"; }",
"CustomJsFunctionVariableJsFunctionTitle": "Javascript functie",
"CustomJsFunctionVariableName": "Aangepast Javascript",
- "CustomRequestProcessingVariableDescription": "Een aangepaste functie om te gebruiken met een Matomo Tracker die alle trackingvragen kan verwerken.",
+ "CustomRequestProcessingVariableDescription": "Een aangepaste functie om te gebruiken met een Matomo Tracker die alle tracking requests kan verwerken.",
"CustomRequestProcessingVariableJsFunctionDescription": "De functie zal worden aangeroepen zodra het verzoek is voorbereid (query parameter string), en voordat het contentverzoek wordt verzonden. Als de terugkeerwaarde onwaar evalueert, zal er geen verzoek worden verzonden. Moet beginnen met \"function(request){\".",
"CustomRequestProcessingVariableJsFunctionTitle": "Javascript functie",
+ "CustomRequestProcessingVariableName": "Aangepaste functie voor Request-verwerking",
"CustomTitle": "Aangepaste titel",
"CustomTitleHelp": "Optioneel, specifieer een aangepaste documenttitel die moet worden gevolgd in plaats van de standaard documenttitel.",
"CustomUrl": "Aangepaste URL",
@@ -207,22 +237,30 @@
"DataLayerVariableHelp": "Met deze variabele heeft u toegang tot elke waarde die is opgeslagen in de dataLayer. Je kan ook zelf waarden naar de dataLayer pushen en ze op deze manier achteraf openen.",
"DataLayerVariableName": "Gegevens-Laag",
"DataLayerVariableNameDescription": "De naam van een variabele die is opgeslagen in de datalaag. Indien u de waarde van een genest object wilt benaderen, kunt u de waarde van een object benaderen door elke eigenschap te scheiden met een punt, bijvoorbeeld \"object1.myPropertyOfObject1\".",
+ "DataLayerVariableNamePlaceholder": "bvb. object1.myPropertyOfObject1",
"DataLayerVariableNameTitle": "Datalaag naam variabele",
"DebugUrlNoUrlErrorMessage": "Voer een URL in om de foutopsporing te starten.",
"DebugUrlSameUrlErrorMessage": "Reeds fouten voor dezelfde site aan het opsporen, bezoek de %1$ssite%2$s of voer een nieuwe URL in voor foutopsporing.",
"DefaultContainer": "Standaard Container",
"DefaultValue": "Standaard waarde",
"DefaultValueHelp": "Je kan een standaardwaarde configureren die wordt gebruikt als de variabele geen waarde retourneert. Houd er rekening mee dat een lege tekenreeks ('') wordt beschouwd als een waarde en niet terugvalt naar de standaardwaarde, configureer indien nodig een zoekwaarde voor dit geval. Merk ook op dat de standaardwaarde wordt toegepast voordat de opzoektabel wordt geëvalueerd.",
+ "DefaultValuePlaceholder": "Waarde die gebruikt moet worden indien de variabele leeg is (bvb. Onbekend)",
"DeleteContainerConfirm": "Weet je zeker dat je deze container wilt verwijderen? De verwijdering kan niet ongedaan gemaakt worden. Zorg er ook voor dat je alle ingesloten codefragmenten voor deze container van de website verwijdert, aangezien de containerbestanden niet langer beschikbaar zijn nadat de container verwijderd is.",
"DeleteTagConfirm": "Weet je zeker dat je deze tag wilt verwijderen? Deze actie kan niet ongedaan gemaakt worden.",
"DeleteTriggerConfirm": "Weet je zeker dat je deze trigger wilt verwijderen? Deze actie kan niet ongedaan gemaakt worden.",
"DeleteVariableConfirm": "Weet je zeker dat je deze variabele wilt verwijderen? Deze actie kan niet ongedaan gemaakt worden.",
"DeleteVersionConfirm": "Weet je zeker dat je deze versie wilt verwijderen? Deze actie kan niet ongedaan gemaakt worden.",
+ "DeleteWebsiteExplanationLine1": "Deze actie zal ook alle Matomo Tag Manager containers verwijderen die geassocieerd zijn met deze site.",
+ "DeleteWebsiteExplanationLine2": "Om een kopij van de containerconfiguraties te bewaren, klik op de containernaam hieronder en exporteer de gewenste versie:",
+ "DeleteWebsiteExplanationLine3": "Klik op Bevestigen als je klaar bent om deze website te verwijderen.",
"DeleteX": "Verwijder %s",
+ "Description": "Beschrijving (optioneel)",
"DetectingChanges": "Veranderingen detecteren…",
"DiffAdded": "Toegevoegd",
+ "DiffAddedPaused": "Toegevoegd in gepauzeerde status",
"DiffDeleted": "Verwijderd",
"DiffModified": "Gewijzigd",
+ "DiffPaused": "Gepauzeerd",
"DisablePreview": "Preview uitschakelen",
"DisablingPreviewPleaseWait": "Preview wordt uitgeschakeld, even geduld a.u.b…",
"DnsLookupTimeVariableDescription": "De tijd die nodig was om de DNS in milliseconden op te zoeken.",
@@ -241,6 +279,7 @@
"DriftHelp": "Met deze tag kan je het Drift-contactformulier aan je website toevoegen.",
"DriftTagDescription": "Ontdek een efficiëntere plaatsing van uw bots met Drift Javascript-tags.",
"DriftTagDriftIdDescription": "De Drift ID is de tekst tussen haakjes zonder aanhalingstekens aan het einde van het JS fragment: drift.load('mdp4r5w7rh3y');",
+ "DriftTagDriftIdPlaceholder": "bvb. mdp4r5w7rh3y",
"DriftTagDriftIdTitle": "Drift ID",
"DriftTagName": "Drift",
"EditContainer": "Wijzig container",
@@ -254,29 +293,36 @@
"EditVersions": "Wijzig versies",
"EditX": "Wijzig %s",
"ElementVisibilityTriggerCssSelectorDescription": "Met een CSS-selector kunt u een element selecteren op id, className, elementnamen, enz. Als meerdere elementen met deze selector overeenkomen, wordt het eerste overeenkomende element gebruikt om de waarde uit te halen. Voorbeelden van geldige selectoren zijn \".classname\", \"#id\" of \"li a\".",
+ "ElementVisibilityTriggerCssSelectorPlaceholder": "bvb. #submitOrderBtnId",
"ElementVisibilityTriggerCssSelectorTitle": "CSS-selector",
"ElementVisibilityTriggerDescription": "Geactiveerd wanneer een specifiek element zichtbaar wordt.",
"ElementVisibilityTriggerElementIDDescription": "Het id-attribuut specificeert een unieke id voor een HTML-element. Voeg hier de waarde in van een id-attribuut van een willekeurig element binnen uw website.",
"ElementVisibilityTriggerElementIDTitle": "Element-ID",
+ "ElementVisibilityTriggerElementIdPlaceholder": "bvb. submitOrderBtnId",
"ElementVisibilityTriggerFireTriggerWhenTitle": "Activeer deze trigger",
+ "ElementVisibilityTriggerMinPercentVisiblePlaceholder": "bvb. 50",
"ElementVisibilityTriggerMinPercentVisibleTitle": "Minimaal percentage zichtbaar",
"ElementVisibilityTriggerName": "Element Zichtbaarheid",
"ElementVisibilityTriggerSelectionMethodDescription": "Selecteer de manier waarop u een element wilt identificeren dat u wilt selecteren.",
"ElementVisibilityTriggerSelectionMethodTitle": "Selectiemethode",
"EmarsysTagCommandCategoryDescription": "Rapporteer de categorie waarin de bezoeker momenteel bladert.",
+ "EmarsysTagCommandCategoryPlaceholder": "Categorie die overeenkomt met de productencatalogus (bvb. Fietsen > Racefietsen)",
"EmarsysTagCommandCategoryTitle": "categorie",
"EmarsysTagCommandCategoryTitleOptional": "Categorie (optioneel)",
"EmarsysTagCommandGoDescription": "Opdrachten in de wachtrij uitvoeren, d.w.z. naar de aanbevelingsservice sturen voor verwerking.",
"EmarsysTagCommandGoTitle": "ga",
"EmarsysTagCommandTagDescription": "Voeg een willekeurige tag toe aan de huidige gebeurtenis. De tag wordt verzameld en is later beschikbaar vanuit andere Emarsys producten.",
+ "EmarsysTagCommandTagPlaceholder": "Naam van het gedefinieerde gegevensveld (bvb. content_pageview)",
"EmarsysTagCommandTagTitle": "tag",
"EmarsysTagCommandTagTitleOptional": "Tag (optioneel)",
"EmarsysTagCommandViewDescription": "Rapporteer een productweergave.",
+ "EmarsysTagCommandViewPlaceholder": "ID van het bekeken item (bvb. item_3)",
"EmarsysTagCommandViewTitle": "bekijken",
"EmarsysTagCommandViewTitleOptional": "Weergave (optioneel)",
"EmarsysTagDescription": "Emarsys is het grootste onafhankelijke marketingplatform ter wereld.",
"EmarsysTagHelp": "Deze tag voegt de asynchrone Emarsys-code toe aan uw website.",
"EmarsysTagMerchantIdDescription": "Uw Emarsys Merchant ID",
+ "EmarsysTagMerchantIdPlaceholder": "bvb. ABC123456789",
"EmarsysTagMerchantIdTitle": "Emarsys Merchant ID",
"EmarsysTagName": "Emarsys",
"EnablePreviewDebug": "Preview / Debug",
@@ -405,6 +451,7 @@
"FacebookPixelTagDescription": "De Facebook Pixel is een web analytics en advertentie service die wordt aangeboden door Facebook.",
"FacebookPixelTagHelp": "Met deze tag kunt u paginaweergaven van een website volgen in je Facebook Ads-account. Log in op je Facebook Ads-account om het Pixel ID te verkrijgen.",
"FacebookPixelTagName": "Facebook Pixel",
+ "FacebookPixelTagPixelIdPlaceholder": "bvb. 123456789012345",
"FacebookPixelTagPixelIdTitle": "Pixel ID",
"Filter": "Filter",
"FireDelay": "Vuur vertraging",
@@ -480,6 +527,8 @@
"GoogleAnalyticsUniversalTagPropertyIdTitle": "Property ID",
"GoogleAnalyticsUniversalTagTrackingTypeDescription": "Momenteel wordt enkel het trackingtype \"Paginaweergave\" ondersteund.",
"GoogleAnalyticsUniversalTagTrackingTypeTitle": "Volgtype",
+ "GoogleTagTagDescription": "De Google tag voorziet de Google producten die je gebruikt van gegevens om de effectiviteit van uw website en advertenties te meten.",
+ "GoogleTagTagIdDescription": "Een tag ID is een identificator die je op jouw pagina plaatst om een bepaalde Google tag te laden. %1$sLees meer.%2$s",
"HideAdvancedSettings": "Verberg geavanceerde instellingen",
"HistoryChangeTriggerDescription": "Geactiveerd wanneer de huidige URL verandert.",
"HistoryChangeTriggerName": "Geschiedenis Verandering",
@@ -508,6 +557,10 @@
"HoneybadgerTagHelp": "Deze tag voegt de officiële Honeybadger Javascript SDK toe aan je website.",
"HoneybadgerTagRevisionDescription": "(optioneel) de versie van uw project",
"HoneybadgerTagRevisionTitle": "Code revisie",
+ "HotjarHJIDDescription": "Uw Hotjar Site ID. Je vindt de Hotjar Site ID onder de Sites-sectie van uw Hotjar-account.",
+ "HotjarHJSV": "Hotjar snippet versie",
+ "HotjarHJSVDescription": "Hotjar code snippet versie.",
+ "HotjarSnippetVersion": "Hotjar snippet versie",
"IgnoreGtmDataLaterDescription": "Indien aangevinkt, sluit Matomo Tag Manager gegevenslaagwaarden uit die reeds zijn ingesteld door Google Tag Manager. Om compatibiliteitsredenen is de standaard om gegevenslaagwaarden, die zijn ingesteld door Google Tag Manager, te behouden.",
"IgnoreGtmDataLaterTitle": "Negeer de Google Tag Manager gegevenslaag",
"Import": "Importeren",
@@ -525,10 +578,12 @@
"JavaScriptVariableDescription": "Leest de waarde van globale JavaScript waarde uit.",
"JavaScriptVariableName": "JavaScript Variabele",
"JavaScriptVariableNameDescription": "De naam van een variabele die beschikbaar is binnen het globale bereik. Als u toegang wilt tot de waarde van een genest object, kunt u dit doen door elke eigenschap te scheiden met een punt, bijvoorbeeld \"document.referrer\".",
+ "JavaScriptVariableNamePlaceholder": "bvb. document.referrer",
"JavaScriptVariableNameTitle": "Javascript variabele naam",
"LastUpdated": "Laatst bijgewerkt",
"LastVersions": "Laatste versies",
"LearnMore": "Meer weten",
+ "LearnMoreFullStop": "%1$sLees meer%2$s.",
"LinkedinInsightTagConversionIdDescription": "Een optionele conversie ID indien je een specifieke conversie wenst te volgen wanneer deze tag uitgevoerd wordt.",
"LinkedinInsightTagConversionIdHelpText": "Als je niet zeker bent waar de conversie ID te vinden, raadpleeg de %1$sLinkedIn documentatie%2$s voor meer informatie.",
"LinkedinInsightTagConversionIdTitle": "LinkedIn Conversie ID (optioneel)",
@@ -536,14 +591,17 @@
"LinkedinInsightTagHelp": "De tag maakt gedetailleerde campagnerapportage en informatie over de bezoekers van je website in LinkedIn mogelijk. Hiermee kan je conversies bijhouden, websitebezoekers opnieuw targeten en aanvullende inzichten verkrijgen over LinkedIn-leden die interactie hebben met je LinkedIn-advertenties.",
"LinkedinInsightTagName": "LinkedIn Insight Tag",
"LinkedinInsightTagPartnerIdDescription": "U kunt de partner ID vinden door in te loggen op uw LinkedIn campagnebeheer, en te klikken op \"Account Assets\" gevolgd door \"Insight Tag\". Als \"Insight Tag\" niet beschikbaar is, stel dan de Insight Tag in door te klikken op \"Conversion Tracking\". Daar kunt u een domein invoeren en de configuratie voortzetten. U vindt de partner ID in de regel `_linkedin_partner_id = \"123456\"`. In dit voorbeeld zou de ID \"123456\" zijn.",
+ "LinkedinInsightTagPartnerIdPlaceholder": "bvb. 123456",
"LinkedinInsightTagPartnerIdTitle": "LinkedIn partner ID",
"LivezillaDynamicTagDescription": "Met Livezilla kunt u bezoekers op uw website volgen en ermee chatten.",
"LivezillaDynamicTagDomainDescription": "Voer het domein in waar Livezilla geïnstalleerd is. Bijvoorbeeld: https://www.example.com",
+ "LivezillaDynamicTagDomainPlaceholder": "bvb. https://www.example.com",
"LivezillaDynamicTagDomainTitle": "Livezilla-domein",
"LivezillaDynamicTagDynamicDeferDescription": "In de meeste gevallen dient u deze geactiveerd te laten.",
"LivezillaDynamicTagDynamicDeferTitle": "Livezilla script \"defer\"?",
"LivezillaDynamicTagHelp": "Met deze tag kan je de Dynamic Code-integratie van Livezilla toevoegen om met klanten te chatten of gewoon de website volgen.",
"LivezillaDynamicTagIdDescription": "Voeg de Livezilla ID in van uw dynamische code sectie.",
+ "LivezillaDynamicTagIdPlaceholder": "bvb. 1234abcd",
"LivezillaDynamicTagIdTitle": "Livezilla ID",
"LivezillaDynamicTagName": "Livezilla Chat / Monitoring",
"LocalDateVariableDescription": "De lokale datum van de huidige gebruiker, bijvoorbeeld \"ma 19 mrt 2018\".",
@@ -572,6 +630,8 @@
"ManageVersionsHelp3": "Meer informatie over %1$sversies%2$s of %3$sMatomo Tag Manager%4$s, en bekijk de %5$straining video reeks%6$s.",
"ManageX": "%s beheren",
"MatomoConfigurationFieldHelp": "Wijs een Matomo-configuratie toe om gegevens naar een specifieke site te volgen.",
+ "MatomoConfigurationMatomoAddDownloadExtensionsDescription": "Specifieer extra bestandsextensies die als download herkend worden. Bijvoorbeeld: doc of doc,xls",
+ "MatomoConfigurationMatomoAddDownloadExtensionsTitle": "Download extensie toevoegen",
"MatomoConfigurationMatomoAlwaysUseSendBeaconDescription": "Maakt gebruik van sendBeacon mogelijk in plaats van een gewoon ajax-verzoek. Dit betekent dat wanneer een gebruiker bijvoorbeeld op een uitgaande link klikt, de navigatie naar deze pagina veel sneller verloopt.",
"MatomoConfigurationMatomoAlwaysUseSendBeaconTitle": "Gebruik altijd sendBeacon",
"MatomoConfigurationMatomoAppendToTrackingUrlDescription": "Een aangepaste tekenreeks toevoegen aan het einde van het HTTP-verzoek aan matomo.php? (of uw geselecteerde respectieve tracking-eindpunt).",
@@ -581,12 +641,15 @@
"MatomoConfigurationMatomoCookieDomainInlineHelp": "De standaard is het huidige documentdomein. Als uw website bijvoorbeeld zowel op www.example.com als op example.com kan worden bezocht, gebruikt u: \".example.com\" of \"*.example.com\". %1$sOpmerking: de variabele wordt enkel geëvalueerd op het moment dat de tracker wordt aangemaakt, zorg ervoor dat u de variabele daarvoor hebt gedefinieerd.%2$s",
"MatomoConfigurationMatomoCookieDomainTitle": "Cookie domein",
"MatomoConfigurationMatomoCookieNamePrefixDescription": "De naamprefix voor de cookies.",
+ "MatomoConfigurationMatomoCookieNamePrefixPlaceholder": "bvb. _pk_",
"MatomoConfigurationMatomoCookieNamePrefixTitle": "Cookie naamprefix",
"MatomoConfigurationMatomoCookiePathDescription": "Bij het volgen van veel submappen in afzonderlijke websites voorkomt het cookie-pad dat het aantal cookies snel toeneemt en dat de browser een deel van de cookies verwijdert. Dit zorgt voor optimale nauwkeurigheid van de gegevens en verbetert de prestaties voor uw gebruikers (er worden minder cookies verzonden bij elk verzoek).",
+ "MatomoConfigurationMatomoCookiePathPlaceholder": "bvb. /",
"MatomoConfigurationMatomoCookiePathTitle": "Cookie pad",
"MatomoConfigurationMatomoCookieSameSiteDescription": "Stel het SameSite-attribuut voor cookies in op een aangepaste waarde. U zou dit kunnen gebruiken als uw site in een iframe draait, omdat deze dan alleen toegang heeft tot de cookies als SameSite is ingesteld op \"None\". Het kiezen van \"Geen\" werkt alleen op HTTPS en zal automatisch ook de beveiligde cookie instellen. Als uw site beschikbaar is onder http en https, kan het gebruik van \"Geen\" leiden tot dubbele of onvolledige bezoeken.",
"MatomoConfigurationMatomoCookieSameSiteTitle": "Zelfde site cookie",
"MatomoConfigurationMatomoCrossDomainLinkingTimeoutDescription": "Stel de cross domain linking timout in (seconden). Standaard worden de twee bezoeken over domeinen aan elkaar gelinkt wanneer de link aangeklikt wordt en de pagina geladen wordt binnen de 180 seconden timeout.",
+ "MatomoConfigurationMatomoCrossDomainLinkingTimeoutPlaceholder": "bvb. 180",
"MatomoConfigurationMatomoCrossDomainLinkingTimeoutTitle": "Cross Domain Linking time-out",
"MatomoConfigurationMatomoCustomCookieTimeOutDescription": "Time-out in volledige dagen. Standaard verloopt de Matomo tracking cookie in 13 maanden (365 + 28 dagen) = 393 dagen.",
"MatomoConfigurationMatomoCustomCookieTimeOutEnableDescription": "Hiermee kunt u een aangepaste tijd in volledige dagen instellen voor het _pk_id cookie.",
@@ -594,6 +657,8 @@
"MatomoConfigurationMatomoCustomCookieTimeOutTitle": "De pk_id vervaltijd in volledige dagen",
"MatomoConfigurationMatomoCustomCookieTimeOutsEnableDescription": "Laat toe om aangepaste time-outs in te stellen voor verschillende cookies.",
"MatomoConfigurationMatomoCustomCookieTimeOutsEnableTitle": "Schakel aangepaste Cookie time-outs in",
+ "MatomoConfigurationMatomoCustomDataDescription": "Stel optioneel aangepaste gegevens in voor uw tracking verzoek.",
+ "MatomoConfigurationMatomoCustomDataTitle": "Aangepaste gegevens",
"MatomoConfigurationMatomoCustomDimensionsDescription": "Stel optioneel een of meerdere aangepaste dimensies in.",
"MatomoConfigurationMatomoCustomDimensionsException": "Waarde moet een array zijn",
"MatomoConfigurationMatomoCustomDimensionsTitle": "Aangepaste dimensies",
@@ -635,19 +700,25 @@
"MatomoConfigurationMatomoForceRequestMethodDescription": "Schakelt het forceren van de Request-methode in voor GET ofwel POST.",
"MatomoConfigurationMatomoForceRequestMethodTitle": "Forceer Request methode",
"MatomoConfigurationMatomoHeartBeatTimeDescription": "De intervaltijd in seconden om pings te sturen. Dit kan niet korter zijn dan 5s.",
+ "MatomoConfigurationMatomoHeartBeatTimePlaceholder": "bvb. 15",
"MatomoConfigurationMatomoIDSiteDescription": "De idSite waarin u gegevens wilt volgen. De idSite van de huidige website is vooraf geconfigureerd. U kunt ook de idSite van een andere website vinden onder \"Beheer → Beheer Meetbaar/Websites\".",
"MatomoConfigurationMatomoIDSiteException": "De idSite kan alleen idSites en variabelen bevatten.",
"MatomoConfigurationMatomoIDSiteTitle": "Matomo idSite",
"MatomoConfigurationMatomoJsEndpointCustom": "Aangepast",
"MatomoConfigurationMatomoJsEndpointCustomDescription": "Je kunt hier een niet-standaard pad configureren om de tracker van op te halen. Deze wordt toegevoegd aan de Matomo-URL. Het mag niet beginnen met '/'. Houd er rekening mee dat je, aangezien dit niet standaard is, de verzoeken daar zelf moet afhandelen!",
+ "MatomoConfigurationMatomoJsEndpointCustomPlaceholder": "bvb. custom.js",
"MatomoConfigurationMatomoJsEndpointCustomTitle": "Aangepast Tracker Javascript pad",
"MatomoConfigurationMatomoJsEndpointDescription": "Hier kunt u het bronpad van de Matomo Tracker JavaScript configureren, als u de \"Bundel Tracker\" optie niet gebruikt.",
"MatomoConfigurationMatomoJsEndpointTitle": "Tracker Javascript-pad",
"MatomoConfigurationMatomoReferralCookieTimeOutDescription": "Timeout van het referral cookie in volledige dagen. Standaard verloopt het Matomo tracking cookie binnen 6 maanden = 182 dagen.",
+ "MatomoConfigurationMatomoReferralCookieTimeOutPlaceholder": "bvb. 128",
"MatomoConfigurationMatomoReferralCookieTimeOutTitle": "Referral Cookie time-out",
"MatomoConfigurationMatomoRegisterAsDefaultTrackerDescription": "Indien ingeschakeld, wordt de tracker geregistreerd als de standaard tracker voor de website, en ontvangt alle commando's die in de globale _paq variabele worden geplaatst. Handig als u de tracker config van de container wilt gebruiken met uw eigen _paq.push() Javascript code.",
"MatomoConfigurationMatomoRegisterAsDefaultTrackerTitle": "Registreer als standaardtracker",
+ "MatomoConfigurationMatomoRemoveDownloadExtensionsDescription": "Specifieer bestandsextensies om te verwijderen uit de lijst van download bestandsextensies. Bijvoorbeeld: doc of doc,xls",
+ "MatomoConfigurationMatomoRemoveDownloadExtensionsTitle": "Verwijder download extensies",
"MatomoConfigurationMatomoRequestContentTypeDescription": "Stel de waarde van de Content-Type header in voor POST requests.",
+ "MatomoConfigurationMatomoRequestContentTypePlaceholder": "bvb. application/x-www-form-urlencoded; charset=UTF-8",
"MatomoConfigurationMatomoRequestMethodInlineHelp": "Om de POST-Request-methode te gebruiken, 1) is de Matomo-host dezelfde als de host van de gevolgde website (Matomo geïnstalleerd in hetzelfde domein als uw gevolgde website), ofwel 2) als Matomo niet op dezelfde host is geïnstalleerd als uw website, moet u CORS (Cross domain requests) inschakelen, zoals uitgelegd in deze %1$sFAQ%2$s. Houd er rekening mee dat wanneer Matomo sendBeacon() gebruikt voor het verzenden van trackingverzoeken (wat standaard is ingeschakeld), het gegevens via POST zal verzenden. Als je wilt dat Matomo nooit POST-verzoeken verzendt, kun je deze methode gebruiken om GET te forceren, waardoor sendBeacon automatisch wordt uitgeschakeld.%3$s",
"MatomoConfigurationMatomoRequestMethodTitle": "Request-methode",
"MatomoConfigurationMatomoRequireConsentDescription": "Volg enkel wanneer de gebruiker toestemming heeft gegeven voor tracking. In een toestemmingsscherm moet u \"window._paq=window._paq||[];window._paq.push(['rememberConsentGiven']);\" aanroepen wanneer de gebruiker toestemming geeft.",
@@ -655,15 +726,29 @@
"MatomoConfigurationMatomoRequireCookieConsentDescription": "Gebruik cookies enkel indien de gebruiker toestemming heeft gegeven, anders volgt u de gebruiker zonder cookies. In een toestemmingsscherm moet u \"window._paq=window._paq||[];window._paq.push(['rememberCookieConsentGiven']);\" aanroepen wanneer de gebruiker toestemming geeft voor cookies.",
"MatomoConfigurationMatomoRequireCookieConsentTitle": "Toestemming voor cookies nodig",
"MatomoConfigurationMatomoSessionCookieTimeOutDescription": "Time-out van het sessiecookie in minuten.",
+ "MatomoConfigurationMatomoSessionCookieTimeOutPlaceholder": "bvb. 30",
"MatomoConfigurationMatomoSessionCookieTimeOutTitle": "Sessiecookie time-out",
+ "MatomoConfigurationMatomoSetApiUrlTitle": "Stel de API URL in",
+ "MatomoConfigurationMatomoSetCampaignNameKeyDescription": "Parameter(s) campagnenaam instellen.",
+ "MatomoConfigurationMatomoSetDownloadClassesDescription": "Stel klasses in die als download behandeld moeten worden (als toevoeging op matomo_download)",
+ "MatomoConfigurationMatomoSetDownloadExtensionsDescription": "Stel een lijst van bestandsextensies in die als download herkend worden. Bijvoorbeeld: doc of doc,xls",
+ "MatomoConfigurationMatomoSetDownloadExtensionsTitle": "Download extensies instellen",
+ "MatomoConfigurationMatomoSetExcludedReferrersDescription": "Stel een reeks hostnamen of domeinen in die genegeerd dienen te worden als referrers. Voor wildcard subdomeinen kan je .example.com of *.example.com gebruiken",
+ "MatomoConfigurationMatomoSetIgnoreClassesDescription": "Stel de klasses in om te negeren indien ze aanwezig zijn in een link (bovenop matomo_ignore en piwik_ignore). Bijvoorbeeld classA of classA,classB",
+ "MatomoConfigurationMatomoSetLinkClassesDescription": "Stel klasses in die behandeld moeten worden als uitgaande linken. Bijvoorbeeld class1 of class1,class2",
+ "MatomoConfigurationMatomoSetReferrerUrlDescription": "Overschrijf de gedetecteerde HTTP-Referer. We raden aan om deze methode vroeg in uw tracking code aan te roepen vóór je de trackPageView aanroept, indien deze op alle tracking verzoeken moet toegepast worden.",
+ "MatomoConfigurationMatomoSetReferrerUrlTitle": "Stel de Referrer URL in",
"MatomoConfigurationMatomoSetSecureCookieDescription": "Schakel de vlag veilig cookie in op alle first party cookies. Dit moet worden gebruikt wanneer uw website alleen beschikbaar is onder HTTPS, zodat alle tracking cookies altijd over een beveiligde verbinding worden verzonden.",
"MatomoConfigurationMatomoSetSecureCookieTitle": "Schakel veilig cookie in",
"MatomoConfigurationMatomoTrackAllContentImpressionsDescription": "Schakelt de inhoud volgen functie in door de hele DOM te scannen op alle inhoudsblokken en houdt alle vertoningen bij zodra de pagina is geladen.",
"MatomoConfigurationMatomoTrackAllContentImpressionsTitle": "Alle inhoudsvertoningen volgen",
+ "MatomoConfigurationMatomoTrackBotsDescription": "Standaard volgt Matomo geen bezoeken door bots om zo nauwkeurige bezoekersstatistieken te kunnen tonen. Schakel dit in om het volgen van bezoeken door bots toe te voegen.",
+ "MatomoConfigurationMatomoTrackBotsTitle": "Volg Bots",
"MatomoConfigurationMatomoTrackVisibleContentImpressionsDescription": "Schakelt de inhoud volgen functie in door de hele DOM te scannen op alle inhoudsblokken, maar houdt alleen inhoudsvertoningen bij zodra de gebruiker naar de inhoud scrolt en de inhoud daadwerkelijk zichtbaar is.",
"MatomoConfigurationMatomoTrackVisibleContentImpressionsTitle": "Zichtbare inhoudsvertoningen volgen",
"MatomoConfigurationMatomoTrackingEndpointCustom": "Aangepast",
"MatomoConfigurationMatomoTrackingEndpointCustomDescription": "Je kunt hier een niet-standaard pad configureren voor het volgen van verzoeken. Deze wordt toegevoegd aan de Matomo-URL. Het mag niet beginnen met '/'. Houd er rekening mee dat je, aangezien dit niet standaard is, de verzoeken daar zelf moet afhandelen!",
+ "MatomoConfigurationMatomoTrackingEndpointCustomPlaceholder": "bvb. custom.php",
"MatomoConfigurationMatomoTrackingEndpointCustomTitle": "Aangepast Tracking Request doel pad",
"MatomoConfigurationMatomoTrackingEndpointDescription": "Hier kunt u het doelpad voor volgverzoeken configureren.",
"MatomoConfigurationMatomoTrackingEndpointTitle": "Tracking Request doel pad",
@@ -672,12 +757,20 @@
"MatomoConfigurationMatomoUserIdDescription": "Stelt een gebruikers-ID in voor deze gebruiker (zoals een e-mailadres of een gebruikersnaam).",
"MatomoConfigurationMatomoUserIdTitle": "Gebruik ID",
"MatomoConfigurationMatomoVisitorCookieTimeOutDescription": "Time-out voor pk_id in volledige dagen. Standaard vervalt het Matomo tracking cookie binnen 13 maanden (365 + 28 dagen) = 393 dagen.",
+ "MatomoConfigurationMatomoVisitorCookieTimeOutPlaceholder": "bvb. 393",
"MatomoConfigurationMatomoVisitorCookieTimeOutTitle": "Bezoekercookie time-out",
"MatomoConfigurationVariableDescription": "Definieert een configuratie voor Matomo Analytics.",
"MatomoConfigurationVariableName": "Matomo-configuratie",
"MatomoTagCustomDimensionsDescription": "Optioneel, stel een waarde in voor een of meerdere aangepaste dimensies.",
"MatomoTagDescription": "Matomo is het toonaangevende open source analytics platform.",
"MatomoTagEcommerceViewCategoryName": "Categorienaam",
+ "MatomoTagEcommerceViewCategoryNameHelp": "De categoriepagina die wordt bekeken. Op de pagina van een item, is dit de categorie van het item.",
+ "MatomoTagEcommerceViewIsEcommerceViewHelpOnPrem": "E-commerce plug-in is vereist.",
+ "MatomoTagEcommerceViewIsEcommerceViewHelpV2": "Registreert de huidige paginaweergave als een item (product) weergave of een E-commerce Categorie paginaweergave.",
+ "MatomoTagEcommerceViewPrice": "Prijs",
+ "MatomoTagEcommerceViewProductName": "Productnaam",
+ "MatomoTagEcommerceViewProductNameHelp": "Naam van het bekeken item. Op een categoriepagina moet dit leeg zijn.",
+ "MatomoTagEcommerceViewProductSKUHelp": "De SKU code van een item die weergegeven wordt. Op een categoriepagina moet deze leeg zijn.",
"MatomoTagHelp": "Met deze tag kunt u paginaweergaven en gebeurtenissen volgen in uw Matomo. u kunt de tracking aanpassen aan uw eigen wensen.",
"MatomoTagManager": "Matomo tag manager",
"MatomoTagManagerTrackingInfoLine1": "Indien u meerdere bronnen voor websites van derden insluit op uw website, dan is het volgen van uw website met behulp van de %1$sMatomo tag manager%2$s waarschijnlijk een betere keuze in plaats van de gewone Javascript-tracking.",
@@ -721,10 +814,14 @@
"PageUrlVariableName": "Pagina-URL",
"PageViewTriggerDescription": "Geactiveerd zodra de Tag Manager binnen de pagina wordt uitgevoerd.",
"PageViewTriggerName": "Paginaweergave",
+ "PauseTagConfirm": "Ben je zeker dat je deze tag wilt pauzeren?",
+ "PauseX": "Pauzeer %s",
+ "PausedTag": "Fantastisch! De tag is succesvol gepauzeerd.",
"PingdomRUMTagDescription": "Met Pingdom Real User Monitoring (RUM) kunt u prestatiegegevens verzamelen van daadwerkelijke bezoekers van uw site.",
"PingdomRUMTagHelp": "Deze tag laat u de Pingdom Real User Monitoring (RUM) toevoegen aan uw site.",
"PingdomRUMTagIdDescription": "U kunt de site-ID krijgen door in te loggen bij Pingdom, naar \"Monitoring\" te gaan en te klikken op \"Real User Monitoring\". Elke toegevoegde site krijgt zijn eigen site-ID.",
"PingdomRUMTagIdTitle": "Pingdom RUM Site ID",
+ "PlaceholderZero": "bvb. 0",
"PluginDescription": "Beheer en verenig al uw tracking en marketing snippets op één plaats.",
"PreConfiguredInfoTitle": "Voorgeconfigureerde variabelen zijn variabelen die meteen gebruikt kunnen worden, ze kunnen niet worden aangemaakt, bewerkt of geconfigureerd. Ze werken out-of-the-box en u kunt ze gebruiken in tags, triggers en variabelen indien nodig.",
"PreconfiguredVariables": "Voorgeconfigureerde variabelen",
@@ -736,6 +833,7 @@
"PreviewModeVariableName": "Voorbeeldmodus",
"Priority": "Prioriteit",
"PriorityHelp": "Hoe lager de prioriteit, hoe eerder deze tag kan worden geactiveerd wanneer anders meerdere tags tegelijk zouden worden geactiveerd.",
+ "PriorityPlaceholder": "bvb. 999",
"Publish": "Publiceren",
"PublishLiveEnvironmentCapabilityRequired": "Merk op dat alleen een \"Admin\" gebruiker, of een gebruiker met de \"%1$s\" mogelijkheid kan publiceren naar de \"Live\" omgeving.",
"PublishRelease": "Publiceer release",
@@ -744,6 +842,7 @@
"RandomNumberVariableDescription": "Geeft een willekeurig getal terug telkens wanneer de waarde van de variabele wordt opgehaald.",
"RandomNumberVariableName": "Willekeurig Nummer",
"RaygunTagApiKeyDescription": "Wanneer u een nieuwe applicatie aanmaakt in uw Raygun dashboard, wordt uw app API-sleutel weergegeven bovenaan de pagina met instructies. U kunt de API-sleutel ook vinden door op de knop \"Application Settings\" te klikken in de zijbalk van het Raygun dashboard.",
+ "RaygunTagApiKeyPlaceholder": "bvb. 1234567890abcdef1234567890abcdef",
"RaygunTagApiKeyTitle": "Raygun apiKey",
"RaygunTagDescription": "Error, crash en performance monitoring software.",
"RaygunTagEnablePulseDescription": "Identificeer automatisch front-end prestatieproblemen die trage laadtijden van pagina's veroorzaken. Bekijk wat uw gebruikers in de browser zien en ontdek waarom gebruikers een slechte kwaliteitservaring hadden.",
@@ -762,6 +861,9 @@
"ReleasedBy": "Vrijgegeven door",
"ReleasedOn": "Vrijgegeven op",
"ReleasesOverview": "Releases overzicht",
+ "ResumeTagConfirm": "Ben je zeker dat je deze tag opnieuw wilt activeren?",
+ "ResumeX": "Hervat %s",
+ "ResumedTag": "Fantastisch! De tag is succesvol hervat.",
"Revision": "Correctie",
"SPAFollowStep1": "Selecteer de juiste container voor uw website.%1$sOpmerking:%2$s Matomo configureert automatisch een container wanneer u een site toevoegt. Standaard is deze container geselecteerd in de onderstaande velden. Als u van plan bent om een enkele container voor meerdere websites te gebruiken, zorg er dan voor dat u die specifieke container selecteert. U kunt %3$shier uw containers beheren%4$s.",
"SPAFollowStep10": "Stel het \"%1$s\"-veld in als volgt:",
@@ -806,6 +908,7 @@
"SelectAVariable": "Selecteer een variabele",
"SelectContainerForWebsite": "Selecteer de container die je wilt gebruiken voor je website. Matomo voorziet automatisch een container voor elke site, en pre-selecteert die standaard. Als je een bestaande container wilt hergebruiken, selecteer die dan hieronder.",
"SentryRavenTagDSNDescription": "De DSN (Data Source Name) van uw sentry.io project. Het zou er moeten uitzien zoals 'https://@sentry.io/'.",
+ "SentryRavenTagDSNPlaceholder": "bvb. https://12345abc@sentry.io/1234567",
"SentryRavenTagDSNTitle": "Sentry.io DSN",
"SentryRavenTagDescription": "Sentry.io is een open-source foutopvolgsysteem waarmee u fouten op uw website kunt detecteren.",
"SentryRavenTagHelp": "Deze tag voegt Raven.js toe, de officiële Javascript SDK. Ga ermee aan de slag door u aan te melden op sentry.io of uw eigen tracking instance op te zetten.",
@@ -823,6 +926,12 @@
"SettingElementVisibilityObserveDomChangesDescription": "Schakel in indien u dynamische DOM-elementen wilt volgen. %1$sOpmerking: dit kan de website vertragen wanneer er veel DOM veranderingen zijn%2$s",
"SettingElementVisibilityObserveDomChangesTitle": "Observeer DOM-wijzigingen",
"SettingEnvironmentDescription": "Definieer één of meerdere extra omgevingen. Merk op dat indien u een omgeving verwijdert, de gegenereerde containerbestanden die voor een specifieke omgeving bestaan ook worden gewist en niet langer beschikbaar zijn.",
+ "SettingRestrictAccessAdmin": "Gebruikers met minstens de beheerdersrechten",
+ "SettingRestrictAccessDescription": "Definieer wie de Matomo Tag Manager sectie kan bekijken. Dit kan handig zijn wanneer er veel gebruikers met bekijkrechten zijn, of indien de configuratie van uw Tag Manager erg complex is.",
+ "SettingRestrictAccessSuperUser": "Gebruikers met minstens de supergebruikersrechten",
+ "SettingRestrictAccessTitle": "Beperk de toegang tot Matomo Tag Manager",
+ "SettingRestrictAccessView": "Gebruikers met minstens de bekijkrechten",
+ "SettingRestrictAccessWrite": "Gebruikers met minstens de schrijfrechten",
"ShareaholicTagAppIdDescription": "Als u een In-Page App wilt toevoegen voert u hier de App ID in. Het is ongeveer acht cijfers lang. De App ID is niet nodig voor de Total Share Counter.",
"ShareaholicTagAppIdTitle": "In-Page app ID",
"ShareaholicTagDescription": "Contentmarketingplatform & hulpmiddelen voor websiteverkeer",
@@ -849,11 +958,14 @@
"StartDate": "Startdatum",
"Tag": "Tag",
"TagDescriptionHelp": "Met de tagbeschrijving kunt u een korte uitleg geven over waar de tag voor dient.",
+ "TagDescriptionPlaceholder": "De beschrijving van de tag",
"TagEndDateHelp": "Indien ingesteld, wordt deze tag alleen geactiveerd tot deze einddatum. De opgegeven datum wordt verondersteld in %1$suw lokale tijdzone%2$s te zijn.",
"TagFireTriggerRequirement": "U moet ten minste één fire trigger kiezen.",
"TagManager": "Tag manager",
"TagManagerTrackingInfo": "Weet u niet wat een Tag Manager is? Bekijk dan onze handleiding %1$sAan de slag%2$s. Als u meerdere bronnen van derden-websites in uw website insluit, dan is het volgen van uw website met behulp van de %3$sTag Manager%4$s wellicht een betere keuze dan het gebruik van de gewone Javascript-tracking.",
"TagNameHelp": "Met de tagnaam kunt u een unieke naam voor deze tag definiëren om hem snel te identificeren. Merk op dat deze naam publiekelijk zichtbaar zal zijn in de broncode van de tag wanneer u een voorbeeld van deze container bekijkt / debugt.",
+ "TagNameHelpV2": "Definieer een unieke tag-naam. Opmerking: Deze is publiek zichtbaar wanneer de container in voorbeeld/debug mode is.",
+ "TagNamePlaceholder": "De naam van de tag",
"TagStartDateHelp": "Indien ingesteld, wordt deze tag pas na deze begindatum geactiveerd. De opgegeven datum wordt verondersteld in %1$suw lokale tijdzone%2$s te zijn.",
"TagUsageBenefits": "Een tag is een stukje code dat op uw site kan worden uitgevoerd. Meestal wordt een tag gebruikt om gegevens naar een derde partij te sturen (bijvoorbeeld trackinggegevens) of om inhoud van een derde partij in uw website op te nemen (bijvoorbeeld sociale widgets of enquêtes). U kunt zoveel tags toevoegen als u wilt en een tag wordt uitgevoerd zodra aan de voorwaarde van een gekoppelde trigger is voldaan.",
"Tags": "Tags",
@@ -866,9 +978,11 @@
"TawkToTagDescription": "Met Tawk.to kunt u bezoekers op uw website volgen en met hen chatten.",
"TawkToTagHelp": "Met deze tag kun je het Tawk.to contactformulier aan uw website toevoegen.",
"TawkToTagIdDescription": "U kunt de site ID krijgen door in te loggen op Tawk.to, naar \"Administration\" te gaan en te klikken op \"Property Settings\". De site ID bestaat meestal uit ongeveer 25 tekens, bijvoorbeeld \"123451c27295ad739e46b6b1\".",
+ "TawkToTagIdPlaceholder": "bvb. 123451c27295ad739e46b6b1",
"TawkToTagIdTitle": "tawk.to site ID",
"TawkToTagWidgetIdDescription": "U kunt de widget ID krijgen door in te loggen op Tawk.to, naar \"Administration\" te gaan, op \"Chat Widget\" te klikken en een geschikte widget te selecteren. De widget ID kan worden opgevraagd via \"Direct Chat Link\" zoals https://tawk.to/chat/{SITE_ID}/{WIDGET_ID}.",
"TawkToTagWidgetIdTitle": "tawk.to widget ID",
+ "ThemeColorPlaceholder": "Hexadecimale kleur (bvb. #11ee33)",
"ThemeColorTagDescription": "Stijl de UI van ondersteunde browsers.",
"ThemeColorTagHelp": "Deze tag ondersteunt Chrome op Android en andere browsers die 'theme-color' begrijpen.",
"ThemeColorTagName": "Thema kleur",
@@ -882,6 +996,7 @@
"TimerTriggerEventNameDescription": "U kunt optioneel de naam van deze gebeurtenis wijzigen. Dit kan handig zijn als u bijvoorbeeld meerdere timers op de pagina heeft en verschillende logica wilt uitvoeren op basis van de naam van de timer.",
"TimerTriggerHelp": "Gebruik deze trigger om een periodieke actie te uitvoeren.",
"TimerTriggerName": "Timer",
+ "TimerTriggerTriggerIntervalPlaceholder": "bvb. 3000",
"TimerTriggerTriggerIntervalTitle": "Trigger-interval",
"TimerTriggerTriggerLimitDescription": "Geef \"0\" als u de trigger niet wilt beperken.",
"TimerTriggerTriggerLimitTitle": "Triggerlimiet",
@@ -893,6 +1008,7 @@
"TriggerCannotBeDeleted": "Deze trigger kan niet verwijderd worden",
"TriggerConditionNode": "Opmerking: sommige variabelen werken misschien niet zoals u verwacht. Bijvoorbeeld het gebruik van een klikvariabele in combinatie met een formuliervariabele kan alleen werken als u ook een klik-trigger aan uw container heeft toegevoegd. Dit geldt typisch voor variabelen in de categorieën Klikken, Formulieren, Geschiedenis, Fouten, Scrollen en Zichtbaarheid, die meestal alleen in hun respectieve trigger moeten worden gebruikt.",
"TriggerConditionsHelp": "U kunt verder beperken wanneer deze trigger moet worden geactiveerd door één of meer voorwaarden op te geven. Alleen wanneer aan AL deze voorwaarden is voldaan, wordt de trigger daadwerkelijk geactiveerd (niet wanneer slechts aan één ervan is voldaan). Alleen activeren wanneer aan al deze voorwaarden is voldaan:",
+ "TriggerConditionsHelpText": "%1$sLees meer%2$s over het volgen van interacties op geneste elementen.",
"TriggerDescriptionHelp": "Met de triggerbeschrijving kunt u een korte uitleg geven over het doel van de trigger.",
"TriggerNameHelp": "Met de triggernaam kunt u een unieke naam voor deze trigger definiëren om hem snel te identificeren. Merk op dat deze naam publiekelijk zichtbaar is in de broncode van de trigger wanneer u een voorbeeld van deze container bekijkt / debugt.",
"TriggerUsageBenefits": "Met triggers kunt u bepalen bij welke gebeurtenis een bepaalde tag moet worden geactiveerd of geblokkeerd. Bijvoorbeeld wanneer op een bepaald element is geklikt, of wanneer een bezoeker een bepaalde scrollpositie heeft bereikt. Bovendien kunt u een filter opgeven om verder te beperken wanneer een bepaalde trigger wel of niet moet worden geactiveerd.",
@@ -908,11 +1024,12 @@
"Unlimited": "Ongelimiteerd",
"UpdatePreview": "Update preview",
"UpdatedX": "Fantastisch! %sis succesvol bijgewerkt.",
- "UpdatingData": "Updating data…",
+ "UpdatingData": "Gegevens bijwerken…",
"UpdatingDebugSiteUrlPleaseWait": "Site-URL voor foutopsporing wordt bijgewerkt, even geduld…",
"UrlParameterVariableDescription": "Krijgt de waarde van een specifieke URL parameter.",
"UrlParameterVariableName": "URL Parameter",
"UrlParameterVariableNameDescription": "Wanneer uw pagina bijvoorbeeld URL-parameters heeft zoals \"?lang=NZ\" en u de waarde \"NZ\" wilt krijgen, moet u \"lang\" invoeren.",
+ "UrlParameterVariableNamePlaceholder": "bvb. lang",
"UrlParameterVariableNameTitle": "URL-parameternaam",
"UrlVariableDescription": "Krijgt de waarde van de huidige pagina URL.",
"UrlVariableName": "URL Variabele",
@@ -930,7 +1047,10 @@
"VariableBeingUsedNeedsRemove": "Om deze variabele te verwijderen, verwijdert u de variabele van de plaatsen waarnaar wordt verwezen en probeert u het opnieuw.",
"VariableCannotBeDeleted": "Deze variabele kan niet worden verwijderd",
"VariableDescriptionHelp": "In de beschrijving van de variabele kunt u een korte uitleg geven over waarvoor die variabele dient.",
+ "VariableDescriptionPlaceholder": "De beschrijving van de variabele",
+ "VariableLowercase": "variabele",
"VariableNameHelp": "Met de variabele naam kunt u een unieke naam voor deze variabele definiëren om die snel te identificeren. Merk op dat deze naam publiekelijk zichtbaar zal zijn in de broncode van de variabele wanneer u een voorbeeld van deze container bekijkt / debugt.",
+ "VariableNamePlaceholder": "De naam van de variabele",
"VariableUsageBenefits": "Met variabelen kunt u gegevens ophalen die gebruikt kunnen worden door tags en triggers. Matomo Tag Manager wordt geleverd met een set voorgedefinieerde variabelen die u meteen kunt gebruiken, en een aantal andere variabelen die u naar wens kunt configureren.",
"Variables": "Variabelen",
"VariablesActionDescription": "Opties om een variabele te bewerken of te verwijderen.",
@@ -943,6 +1063,8 @@
"VersionAlreadyPublishedToAllEnvironments": "Deze versie kan niet worden gepubliceerd naar een andere omgeving",
"VersionDescription": "Versie omschrijving",
"VersionDescriptionHelp": "Optioneel kunt u deze nieuwe versie in meer detail beschrijven. Wij raden u aan te vermelden wat u in deze versie heeft aangepast. Bijvoorbeeld of je een bepaald probleem hebt opgelost of een nieuwe tag hebt toegevoegd. Dit helpt u om elke versie beter te begrijpen, bijvoorbeeld als u moet terugdraaien naar een bepaalde versie.",
+ "VersionDescriptionOptional": "Versie beschrijving (optioneel)",
+ "VersionDescriptionPlaceholder": "De beschrijving van de versie",
"VersionEditWithNoAccessMessage": "Toevoegen of bewerken van versies vereist de \"Tag Manager: gebruik Aangepaste Sjablonen\" mogelijkheid. Als je denkt dat je deze mogelijkheid nodig hebt, neem dan contact op met je Matomo-beheerder. %1$sLees meer%2$s",
"VersionEnvironmentHelp": "Om de huidige versie in uw site te integreren moet u deze publiceren naar een omgeving, meestal de \"Live\" omgeving. Als u een specifiek beoordelingsproces heeft, of testomgevingen, wilt u misschien eerst een versie publiceren naar een \"staging\" of \"test\" omgeving voordat u deze uitrolt naar uw live productiesysteem om er zeker van te zijn dat alles werkt zoals u verwacht. U kunt deze versie ook op elk later moment naar een omgeving publiceren.",
"VersionImportContentTitle": "Plak de JSON geformatteerde data welke je net hebt geëxporteerd",
@@ -951,6 +1073,7 @@
"VersionImportSuccess": "Versie succesvol geïmporteerd",
"VersionName": "Versie naam",
"VersionNameHelp": "Geef deze versie een naam waarmee u deze specifieke versie gemakkelijk kunt identificeren. U kunt elk gewenst naamgevingsschema gebruiken. Wij raden aan een schema zoals \"1.0\" te gebruiken, waarbij u het laatste nummer verhoogt wanneer u kleine wijzigingen aanbrengt, zoals het herstellen van een configuratie, en het eerste nummer wanneer u bijvoorbeeld een nieuwe tag toevoegt. Zo kunt u gemakkelijk al uw versies bijhouden. Merk op dat deze naam ook beschikbaar zal zijn als variabele en dus publiekelijk zichtbaar in de broncode van de tag.",
+ "VersionNamePlaceholder": "bvb. 1.0.0",
"VersionPublishSuccess": "De versie is succesvol gepubliceerd",
"VersionRevision": "Versie revisie",
"VersionUsageBenefits": "Met versies kunt u een kopie opslaan van de huidige configuratie van een container, zodat u terug kunt gaan naar een eerdere versie als dat nodig is. Dit maakt het gemakkelijker om fouten te herstellen, en laat u eenvoudig alle eerder ingezette tags, triggers en variabelen terugvinden. Zodra u tevreden bent met uw huidige configuratie, kunt u deze publiceren naar een specifieke omgeving. U kunt bijvoorbeeld uw tag eerst uitrollen naar een \"test\" of \"staging\" omgeving om er zeker van te zijn dat de huidige configuratie werkt voordat u deze beschikbaar maakt voor iedereen die de live omgeving gebruikt.",
@@ -975,6 +1098,7 @@
"VisibleElementUrlVariableDescription": "De waarde van de link URL (href) van een overeenkomstig element toen de zichtbaar element-trigger geactiveerd werd.",
"VisibleElementUrlVariableName": "Bestemmings-URL zichtbaar element",
"VisualWebsiteOptimizerTagAccountIdDescription": "Uw Visual Website Optimizer account ID",
+ "VisualWebsiteOptimizerTagAccountIdPlaceholder": "bvb. 123456",
"VisualWebsiteOptimizerTagAccountIdTitle": "Visual Website Optimizer account ID",
"VisualWebsiteOptimizerTagDescription": "Visual Website Optimizer is een alles-in-één platform voor A/B-testen en conversieoptimalisatie.",
"VisualWebsiteOptimizerTagHelp": "Deze tag voegt de asynchrone VWO Smart Code toe aan uw website.",
@@ -986,6 +1110,7 @@
"WindowLeaveTriggerHelp": "Deze trigger wordt geactiveerd wanneer de gebruiker mogelijk op het punt staat de website te verlaten en de muis buiten de huidige webpagina beweegt, bijvoorbeeld naar de URL-adresregel van de browser of andere knoppen. Dit kan nuttig zijn om uw bezoeker betrokken te houden en niet te verliezen, bijvoorbeeld door het tonen van een exit popup. Misschien bent u ook geïnteresseerd in de \"Window Unload\" trigger die wordt geactiveerd zodra de gebruiker de huidige pagina daadwerkelijk heeft verlaten.",
"WindowLeaveTriggerName": "Venster verlaten",
"WindowLeaveTriggerTriggerLimitDescription": "Geef\"0\" in als u niet wilt beperken hoe vaak de trigger geactiveerd wordt",
+ "WindowLeaveTriggerTriggerLimitPlaceholder": "bvb. 1",
"WindowLeaveTriggerTriggerLimitTitle": "Triggerlimiet",
"WindowLoadedTriggerDescription": "Wordt geactiveerd wanneer de pagina volledig geladen is, inclusief alle afbeeldingen enz.",
"WindowLoadedTriggerHelp": "Dit is de fase van het laden van een webpagina wanneer de pagina volgens de browser volledig is geladen. In de meeste gevallen betekent dit dat ook alle afbeeldingen zijn geladen, en alle stijlen zijn toegepast, enz. Deze trigger wordt altijd geactiveerd op een bepaald punt na \"DOM Ready\".",
@@ -994,6 +1119,7 @@
"WindowUnloadTriggerHelp": "Deze trigger identificeert de gebeurtenis wanneer een gebruiker daadwerkelijk de huidige pagina sluit, vergeleken met de trigger \"Venster verlaten\" die activeert wanneer de gebruiker op het punt staat uw pagina te verlaten. Hetzij door te navigeren naar een andere pagina binnen het huidige browsertabblad, hetzij door het tabblad volledig te sluiten.",
"WindowUnloadTriggerName": "Window unload",
"ZendeskChatTagChatIdDescription": "U kunt de site ID krijgen door in te loggen op Zendesk Chat, naar \"Settings\" te gaan en te klikken op \"Widget\". De site ID heeft meestal ongeveer 32 tekens en is de tekst die direct na \"https://v2.zopim.com/?\" komt, bijvoorbeeld \"123451c27295ad739e46b6b1\".",
+ "ZendeskChatTagChatIdPlaceholder": "bvb. 123451c27295ad739e46b6b1",
"ZendeskChatTagChatIdTitle": "Zendesk Chat ID",
"ZendeskChatTagDescription": "Bereik uw klanten, direct via web, mobiel en berichten.",
"ZendeskChatTagHelp": "Met deze tag kunt u het Zendesk Chat formulier toevoegen aan uw website.",
diff --git a/www/plugins/UsersManager/API.php b/www/plugins/UsersManager/API.php
index ae168015..bcc267bd 100644
--- a/www/plugins/UsersManager/API.php
+++ b/www/plugins/UsersManager/API.php
@@ -48,7 +48,7 @@
* Existing Permissions are listed given a login via "getSitesAccessFromUser", or a website ID via "getUsersAccessFromSite",
* or you can list all users and websites for a given permission via "getUsersSitesFromAccess". Permissions are set and updated
* via the method "setUserAccess".
- * See also the documentation about Managing Users in Matomo.
+ * See also the documentation about Managing Users in Matomo.
*/
class API extends \Piwik\Plugin\API
{
diff --git a/www/plugins/UsersManager/Controller.php b/www/plugins/UsersManager/Controller.php
index bdcdd0f6..6ecc848d 100644
--- a/www/plugins/UsersManager/Controller.php
+++ b/www/plugins/UsersManager/Controller.php
@@ -220,7 +220,7 @@ public function userSettings()
$userLogin = Piwik::getCurrentUserLogin();
$user = Request::processRequest('UsersManager.getUser', array('userLogin' => $userLogin));
- $view->userEmail = $user['email'];
+ $view->userEmail = $user['email'] ?? '';
$view->userTokenAuth = Piwik::getCurrentUserTokenAuth();
$view->setIgnoreCookieNonce = Nonce::getNonce(self::NONCE_SET_IGNORE_COOKIE);
$view->isUsersAdminEnabled = UsersManager::isUsersAdminEnabled();
diff --git a/www/plugins/UsersManager/Model.php b/www/plugins/UsersManager/Model.php
index d4ef9936..7cd7a54e 100644
--- a/www/plugins/UsersManager/Model.php
+++ b/www/plugins/UsersManager/Model.php
@@ -33,7 +33,7 @@
* Existing Permissions are listed given a login via "getSitesAccessFromUser", or a website ID via "getUsersAccessFromSite",
* or you can list all users and websites for a given permission via "getUsersSitesFromAccess". Permissions are set and updated
* via the method "setUserAccess".
- * See also the documentation about Managing Users in Piwik.
+ * See also the documentation about Managing Users in Piwik.
*/
class Model
{
diff --git a/www/vendor/autoload.php b/www/vendor/autoload.php
index 326cc797..7df26080 100644
--- a/www/vendor/autoload.php
+++ b/www/vendor/autoload.php
@@ -14,10 +14,7 @@
echo $err;
}
}
- trigger_error(
- $err,
- E_USER_ERROR
- );
+ throw new RuntimeException($err);
}
require_once __DIR__ . '/composer/autoload_real.php';
diff --git a/www/vendor/composer/InstalledVersions.php b/www/vendor/composer/InstalledVersions.php
index 6d29bff6..2052022f 100644
--- a/www/vendor/composer/InstalledVersions.php
+++ b/www/vendor/composer/InstalledVersions.php
@@ -26,6 +26,12 @@
*/
class InstalledVersions
{
+ /**
+ * @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
+ * @internal
+ */
+ private static $selfDir = null;
+
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null
@@ -322,6 +328,18 @@ public static function reload($data)
self::$installedIsLocalDir = false;
}
+ /**
+ * @return string
+ */
+ private static function getSelfDir()
+ {
+ if (self::$selfDir === null) {
+ self::$selfDir = strtr(__DIR__, '\\', '/');
+ }
+
+ return self::$selfDir;
+ }
+
/**
* @return array[]
* @psalm-return list}>
@@ -336,7 +354,7 @@ private static function getInstalled()
$copiedLocalDir = false;
if (self::$canGetVendors) {
- $selfDir = strtr(__DIR__, '\\', '/');
+ $selfDir = self::getSelfDir();
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
$vendorDir = strtr($vendorDir, '\\', '/');
if (isset(self::$installedByVendor[$vendorDir])) {