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;dL0){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;dL0){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;dL0){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;dL0){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;dL0){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;dL0){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 @@