Version Description
Download this release
Release Info
Developer | matomoteam |
Plugin | Matomo Analytics – Ethical Stats. Powerful Insights. |
Version | 4.4.1 |
Comparing to | |
See all releases |
Code changes from version 4.3.1 to 4.4.1
- app/LEGALNOTICE +3 -3
- app/README.md +2 -2
- app/config/global.ini.php +21 -1
- app/config/global.php +8 -0
- app/core/API/ApiRenderer.php +1 -1
- app/core/Archive/ArchiveInvalidator.php +1 -10
- app/core/ArchiveProcessor.php +13 -1
- app/core/ArchiveProcessor/Loader.php +2 -12
- app/core/AssetManager/UIAssetCacheBuster.php +7 -4
- app/core/CliMulti/Output.php +2 -2
- app/core/CliMulti/Process.php +44 -23
- app/core/Common.php +10 -32
- app/core/Concurrency/Lock.php +2 -3
- app/core/Config.php +7 -6
- app/core/CronArchive.php +3 -3
- app/core/DataAccess/ArchivingDbAdapter.php +1 -22
- app/core/DataAccess/LogAggregator.php +3 -7
- app/core/DataAccess/Model.php +62 -39
- app/core/DataTable.php +18 -1
- app/core/DataTable/Filter/PivotByDimension.php +4 -0
- app/core/DataTable/Renderer/Csv.php +1 -1
- app/core/DataTable/Row.php +12 -1
- app/core/Date.php +1 -1
- app/core/Db.php +23 -0
- app/core/Db/Adapter.php +41 -6
- app/core/Db/BatchInsert.php +2 -1
- app/core/DeviceDetector/DeviceDetectorFactory.php +1 -1
- app/core/EventDispatcher.php +9 -1
- app/core/Exception/NotYetInstalledException.php +8 -0
- app/core/Filesystem.php +7 -4
- app/core/FrontController.php +2 -1
- app/core/Http.php +59 -6
- app/core/IP.php +40 -14
- app/core/Log.php +6 -2
- app/core/LogDeleter.php +2 -1
- app/core/Mail.php +21 -1
- app/core/Option.php +1 -1
- app/core/Piwik.php +1 -1
- app/core/Plugin/Manager.php +1 -0
- app/core/Profiler.php +8 -2
- app/core/Site.php +4 -0
- app/core/Tracker.php +3 -1
- app/core/Tracker/Failures.php +1 -1
- app/core/Tracker/GoalManager.php +1 -1
- app/core/Tracker/PageUrl.php +2 -2
- app/core/Tracker/Request.php +24 -14
- app/core/Tracker/TrackerConfig.php +11 -1
- app/core/Tracker/Visit.php +2 -2
- app/core/Tracker/VisitorRecognizer.php +1 -1
- app/core/Twig.php +1 -1
- app/core/Updates/4.0.0-b1.php +120 -44
- app/core/Updates/4.0.0-b3.php +60 -0
- app/core/Updates/4.0.0-rc3.php +44 -0
- app/core/Updates/4.0.0-rc4.php +68 -0
- app/core/Updates/4.0.1-b1.php +56 -0
- app/core/Updates/4.0.4-b1.php +64 -0
- app/core/Updates/4.4.0-b1.php +42 -0
- app/core/Url.php +6 -6
- app/core/Validators/CharacterLength.php +1 -1
- app/core/Version.php +1 -1
- app/js/piwik.min.js +36 -36
- app/lang/ar.json +0 -3
- app/lang/be.json +0 -3
- app/lang/bg.json +0 -3
- app/lang/ca.json +0 -3
- app/lang/cs.json +37 -27
- app/lang/da.json +0 -4
- app/lang/de.json +118 -25
- app/lang/el.json +30 -10
- app/lang/en.json +26 -7
- app/lang/es-ar.json +114 -16
- app/lang/es.json +24 -9
- app/lang/et.json +0 -2
- app/lang/eu.json +0 -2
- app/lang/fa.json +0 -3
- app/lang/fi.json +2 -5
- app/lang/fr.json +2 -6
- app/lang/hi.json +0 -3
- app/lang/hu.json +0 -3
- app/lang/id.json +0 -3
- app/lang/it.json +28 -13
- app/lang/ja.json +2 -6
- app/lang/ka.json +0 -3
- app/lang/ko.json +0 -3
- app/lang/lt.json +0 -3
- app/lang/lv.json +0 -3
- app/lang/nb.json +0 -3
- app/lang/nl.json +2 -5
- app/lang/nn.json +0 -2
- app/lang/pl.json +0 -3
- app/lang/pt-br.json +46 -9
- app/lang/pt.json +2 -6
- app/lang/ro.json +0 -3
- app/lang/ru.json +0 -3
- app/lang/sk.json +0 -1
- app/lang/sq.json +38 -8
- app/lang/sr.json +4 -6
- app/lang/sv.json +2 -6
- app/lang/th.json +0 -3
- app/lang/tl.json +0 -3
- app/lang/tr.json +30 -10
- app/lang/uk.json +0 -3
- app/lang/vi.json +0 -3
- app/lang/zh-cn.json +2 -6
- app/lang/zh-tw.json +15 -9
- app/libs/Zend/Db/Adapter/Mysqli.php +1 -0
- app/libs/upgradephp/upgrade.php +0 -26
- app/matomo.js +36 -36
- app/piwik.js +36 -36
- app/plugins/API/Controller.php +1 -1
- app/plugins/API/Filter/DataComparisonFilter.php +1 -1
- app/plugins/API/Filter/DataComparisonFilter/ComparisonRowGenerator.php +2 -2
- app/plugins/Actions/Actions/ActionSiteSearch.php +3 -3
- app/plugins/Actions/DataTable/Filter/Actions.php +1 -1
- app/plugins/Actions/VisitorDetails.php +1 -1
- app/plugins/CoreAdminHome/Commands/InvalidateReportData.php +6 -4
- app/plugins/CoreAdminHome/Commands/VersionInfo.php +30 -0
- app/plugins/CoreAdminHome/Controller.php +1 -0
- app/plugins/CoreAdminHome/Emails/RecoveryCodesRegeneratedEmail.php +21 -0
- app/plugins/CoreAdminHome/Emails/RecoveryCodesShowedEmail.php +21 -0
- app/plugins/CoreAdminHome/Emails/SecurityNotificationEmail.php +85 -0
- app/plugins/CoreAdminHome/Emails/SettingsChangedEmail.php +43 -0
- app/plugins/CoreAdminHome/Emails/TokenAuthCreatedEmail.php +33 -0
- app/plugins/CoreAdminHome/Emails/TokenAuthDeletedEmail.php +43 -0
- app/plugins/CoreAdminHome/Emails/TwoFactorAuthDisabledEmail.php +21 -0
- app/plugins/CoreAdminHome/Emails/TwoFactorAuthEnabledEmail.php +21 -0
- app/plugins/CoreAdminHome/Emails/UserCreatedEmail.php +33 -0
- app/plugins/CoreAdminHome/Emails/UserDeletedEmail.php +33 -0
- app/plugins/CoreAdminHome/OptOutManager.php +10 -3
- app/plugins/CoreAdminHome/templates/_securityNotificationEmail.twig +2 -0
- app/plugins/CoreAdminHome/templates/generalSettings.twig +4 -1
- app/plugins/CoreConsole/Commands/CoreArchiver.php +6 -2
- app/plugins/CoreConsole/Commands/GenerateSystemCheck.php +106 -0
- app/plugins/CoreHome/Columns/UserId.php +1 -1
- app/plugins/CoreHome/Columns/VisitorId.php +11 -5
- app/plugins/CoreHome/DataTableRowAction/RowEvolution.php +2 -2
- app/plugins/CoreHome/Tracker/VisitRequestProcessor.php +2 -2
- app/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.html +2 -0
- app/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.less +9 -0
- app/plugins/CoreHome/templates/_dataTable.twig +1 -0
- app/plugins/CorePluginsAdmin/API.php +50 -0
- app/plugins/CorePluginsAdmin/Commands/ActivatePlugin.php +5 -0
- app/plugins/CorePluginsAdmin/Controller.php +6 -6
- app/plugins/CorePluginsAdmin/angularjs/form-field/field-site.html +2 -0
- app/plugins/CoreVisualizations/Visualizations/Cloud.php +2 -2
- app/plugins/CoreVisualizations/Visualizations/Sparklines.php +10 -3
- app/plugins/CustomDimensions/Tracker/CustomDimensionsRequestProcessor.php +1 -1
- app/plugins/Dashboard/stylesheets/widget.less +3 -1
- app/plugins/DevicesDetection/Columns/BrowserName.php +2 -2
- app/plugins/DevicesDetection/Columns/Os.php +2 -2
- app/plugins/Diagnostics/Diagnostic/CronArchivingCheck.php +9 -1
- app/plugins/Diagnostics/Diagnostic/CronArchivingLastRunCheck.php +8 -2
- app/plugins/Diagnostics/Diagnostic/DiagnosticResult.php +10 -5
- app/plugins/Diagnostics/Diagnostic/PhpExtensionsCheck.php +4 -12
- app/plugins/Diagnostics/Diagnostic/PhpSettingsCheck.php +1 -0
- app/plugins/Diagnostics/Diagnostic/RequiredPrivateDirectories.php +2 -2
- app/plugins/GeoIp2/GeoIP2AutoUpdater.php +1 -1
- app/plugins/GeoIp2/LocationProvider/GeoIp2/Php.php +1 -1
- app/plugins/Insights/DataTable/Filter/Insight.php +12 -1
- app/plugins/Installation/templates/_systemCheckSection.twig +1 -1
- app/plugins/Intl/Commands/GenerateIntl.php +1 -1
- app/plugins/Login/Controller.php +13 -0
- app/plugins/Login/Login.php +7 -4
- app/plugins/MobileMessaging/SMSProvider.php +1 -1
- app/plugins/Monolog/Processor/ExceptionToTextProcessor.php +16 -0
- app/plugins/Monolog/config/config.php +38 -0
- app/plugins/Morpheus/fonts/matomo.svg +1 -0
- app/plugins/Morpheus/fonts/matomo.ttf +0 -0
- app/plugins/Morpheus/fonts/matomo.woff +0 -0
- app/plugins/Morpheus/fonts/matomo.woff2 +0 -0
- app/plugins/Morpheus/stylesheets/base/icons.css +4 -1
- app/plugins/Morpheus/templates/demo.twig +2 -1
- app/plugins/Morpheus/templates/javascriptCode.twig +3 -3
- app/plugins/MultiSites/API.php +18 -3
- app/plugins/MultiSites/angularjs/site/site.directive.html +2 -2
- app/plugins/Overlay/client/client.js-e +0 -258
- app/plugins/Overlay/javascripts/Piwik_Overlay.js +6 -1
- app/plugins/PrivacyManager/LogDataPurger.php +7 -0
- app/plugins/Referrers/Columns/Base.php +13 -13
- app/plugins/Referrers/Columns/Campaign.php +1 -7
- app/plugins/Referrers/Columns/ReferrerUrl.php +2 -2
- app/plugins/Referrers/Columns/Website.php +1 -14
- app/plugins/Referrers/SearchEngine.php +3 -7
- app/plugins/ScheduledReports/Controller.php +2 -2
- app/plugins/SegmentEditor/SegmentFormatter.php +1 -1
- app/plugins/SegmentEditor/SegmentSelectorControl.php +1 -1
- app/plugins/SitesManager/Controller.php +20 -11
- app/plugins/SitesManager/GtmSiteTypeGuesser.php +16 -2
- app/plugins/SitesManager/SiteUrls.php +2 -2
- app/plugins/SitesManager/SitesManager.php +6 -0
- app/plugins/TagManager/Context/WebContext.php +2 -2
- app/plugins/TagManager/Template/Tag/MatomoTag.web.js +1 -1
- app/plugins/TwoFactorAuth/Controller.php +33 -0
- app/plugins/TwoFactorAuth/Dao/RecoveryCodeDao.php +1 -1
- app/plugins/UserCountry/API.php +6 -24
- app/plugins/UserCountry/LocationProvider.php +8 -7
- app/plugins/UsersManager/API.php +55 -16
- app/plugins/UsersManager/Controller.php +27 -0
- app/plugins/UsersManager/Model.php +9 -0
- app/plugins/UsersManager/UsersManager.php +1 -1
- app/vendor/autoload.php +1 -1
- app/vendor/composer/ClassLoader.php +3 -1
- app/vendor/composer/InstalledVersions.php +326 -721
- app/vendor/composer/autoload_classmap.php +53 -31
- app/vendor/composer/autoload_files.php +1 -0
- app/vendor/composer/autoload_psr4.php +2 -1
- app/vendor/composer/autoload_real.php +7 -7
- app/vendor/composer/autoload_static.php +66 -38
- app/vendor/composer/installed.php +450 -455
- app/vendor/matomo/cache/README.md +25 -2
- app/vendor/matomo/cache/src/Backend/BaseDecorator.php +62 -0
- app/vendor/matomo/cache/src/Backend/DefaultTimeoutDecorated.php +43 -0
- app/vendor/matomo/cache/src/Backend/Factory.php +29 -0
- app/vendor/matomo/cache/src/Backend/File.php +10 -0
- app/vendor/matomo/cache/src/Backend/KeyPrefixDecorated.php +58 -0
- app/vendor/matomo/device-detector/DeviceDetector.php +4 -2
- app/vendor/matomo/device-detector/Parser/Client/Browser.php +8 -3
- app/vendor/matomo/device-detector/Parser/Device/AbstractDeviceParser.php +57 -0
- app/vendor/matomo/device-detector/Parser/Device/HbbTv.php +1 -1
- app/vendor/matomo/device-detector/Parser/Device/ShellTv.php +66 -0
- app/vendor/matomo/device-detector/README.md +6 -5
- app/vendor/matomo/device-detector/regexes/bots.yml +120 -10
- app/vendor/matomo/device-detector/regexes/client/browsers.yml +50 -5
- app/vendor/matomo/device-detector/regexes/client/mobile_apps.yml +61 -2
- app/vendor/matomo/device-detector/regexes/client/pim.yml +35 -0
- app/vendor/matomo/device-detector/regexes/device/car_browsers.yml +1 -1
- app/vendor/matomo/device-detector/regexes/device/mobiles.yml +558 -228
app/LEGALNOTICE
CHANGED
@@ -217,7 +217,7 @@ THIRD-PARTY COMPONENTS AND LIBRARIES
|
|
217 |
Link: http://raphaeljs.com/
|
218 |
License: MIT (Expat)
|
219 |
|
220 |
-
Name: iFrame Resizer
|
221 |
Link: https://github.com/davidjbradshaw/iframe-resizer
|
222 |
License: MIT
|
223 |
|
@@ -279,7 +279,7 @@ THIRD-PARTY CONTENT
|
|
279 |
License: GPL
|
280 |
By: Alessandro Rei - http://www.kde-look.org/usermanager/search.php?username=mentalrey
|
281 |
|
282 |
-
Name: Material icons ("icon-info2", "icon-outline", "icon-settings", "icon-form", "icon-play", "icon-pause", "icon-replay", "icon-skip-next", "icon-skip-forward", "icon-stop", "icon-fast-forward", "icon-fast-rewind", "icon-bug", "icon-upload", "icon-segmented-visits-log") in plugins/Morpheus/fonts, and plugins/Morpheus/images/compare.svg
|
283 |
Link: https://design.google.com/icons/
|
284 |
License: Apache License Version 2.0
|
285 |
|
@@ -294,6 +294,6 @@ THIRD-PARTY CONTENT
|
|
294 |
Notes:
|
295 |
- the "New BSD" license refers to either the "Modified BSD" and "Simplified BSD"
|
296 |
licenses (2- or 3-clause), which are GPL compatible.
|
297 |
-
- icons for browsers, operating systems, browser plugins, brands, search engines, social media websites
|
298 |
and flags of countries are nominative use of third-party trademarks when
|
299 |
referring to the corresponding product or entity
|
217 |
Link: http://raphaeljs.com/
|
218 |
License: MIT (Expat)
|
219 |
|
220 |
+
Name: iFrame Resizer
|
221 |
Link: https://github.com/davidjbradshaw/iframe-resizer
|
222 |
License: MIT
|
223 |
|
279 |
License: GPL
|
280 |
By: Alessandro Rei - http://www.kde-look.org/usermanager/search.php?username=mentalrey
|
281 |
|
282 |
+
Name: Material icons ("icon-info2", "icon-outline", "icon-settings", "icon-form", "icon-play", "icon-pause", "icon-replay", "icon-skip-next", "icon-skip-forward", "icon-stop", "icon-fast-forward", "icon-fast-rewind", "icon-bug", "icon-upload", "icon-segmented-visits-log", "icon-clock") in plugins/Morpheus/fonts, and plugins/Morpheus/images/compare.svg
|
283 |
Link: https://design.google.com/icons/
|
284 |
License: Apache License Version 2.0
|
285 |
|
294 |
Notes:
|
295 |
- the "New BSD" license refers to either the "Modified BSD" and "Simplified BSD"
|
296 |
licenses (2- or 3-clause), which are GPL compatible.
|
297 |
+
- icons for browsers, operating systems, browser plugins, brands, search engines, social media websites
|
298 |
and flags of countries are nominative use of third-party trademarks when
|
299 |
referring to the corresponding product or entity
|
app/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
# Matomo (formerly Piwik) - matomo.org
|
2 |
|
3 |
-
[![Latest Stable Version](https://poser.pugx.org/
|
4 |
-
[![Latest Unstable Version](https://poser.pugx.org/
|
5 |
[![License](https://poser.pugx.org/piwik/piwik/license)](https://matomo.org/free-software/)
|
6 |
|
7 |
## Code Status
|
1 |
# Matomo (formerly Piwik) - matomo.org
|
2 |
|
3 |
+
[![Latest Stable Version](https://poser.pugx.org/matomo/matomo/v/stable)](https://matomo.org/download/)
|
4 |
+
[![Latest Unstable Version](https://poser.pugx.org/matomo/matomo/v/unstable)](https://builds.matomo.org/)
|
5 |
[![License](https://poser.pugx.org/piwik/piwik/license)](https://matomo.org/free-software/)
|
6 |
|
7 |
## Code Status
|
app/config/global.ini.php
CHANGED
@@ -57,6 +57,11 @@ password =
|
|
57 |
dbname =
|
58 |
port = 3306
|
59 |
|
|
|
|
|
|
|
|
|
|
|
60 |
[database_tests]
|
61 |
host = localhost
|
62 |
username = "@USERNAME@"
|
@@ -87,7 +92,7 @@ port =
|
|
87 |
enable_logging = 0
|
88 |
|
89 |
[log]
|
90 |
-
; possible values for log: screen, database, file
|
91 |
log_writers[] = screen
|
92 |
|
93 |
; log level, everything logged w/ this level or one of greater severity
|
@@ -100,10 +105,16 @@ log_level = WARN
|
|
100 |
; this allows you to log more information to one backend vs another.
|
101 |
; log_level_screen =
|
102 |
; log_level_file =
|
|
|
|
|
103 |
|
104 |
; if configured to log in a file, log entries will be made to this file
|
105 |
logger_file_path = tmp/logs/matomo.log
|
106 |
|
|
|
|
|
|
|
|
|
107 |
[Cache]
|
108 |
; available backends are 'file', 'array', 'null', 'redis', 'chained'
|
109 |
; 'array' will cache data only during one request
|
@@ -482,6 +493,10 @@ login_allowlist_apply_to_reporting_api_requests = 1
|
|
482 |
; Uncomment the next line to set a URL to redirect the user to after they log out of Matomo.
|
483 |
; login_logout_url = http://...
|
484 |
|
|
|
|
|
|
|
|
|
485 |
; Set to 1 to disable the framebuster on standard Non-widgets pages (a click-jacking countermeasure).
|
486 |
; Default is 0 (i.e., bust frames on all non Widget pages such as Login, API, Widgets, Email reports, etc.).
|
487 |
enable_framed_pages = 0
|
@@ -632,6 +647,11 @@ multi_server_environment = 0
|
|
632 |
; By enabling this flag the header HTTP_X_FORWARDED_URI will be considered for the current script name.
|
633 |
proxy_uri_header = 0
|
634 |
|
|
|
|
|
|
|
|
|
|
|
635 |
; Whether to enable trusted host checking. This can be disabled if you're running Matomo
|
636 |
; on several URLs and do not wish to constantly edit the trusted host list.
|
637 |
enable_trusted_host_check = 1
|
57 |
dbname =
|
58 |
port = 3306
|
59 |
|
60 |
+
; If you are using Amazon Aurora you can enable aurora_read_only_read_committed to prevent purge lag which happens
|
61 |
+
; when internal garbage collection is blocked by long-running archiving queries. The setting will be only applied
|
62 |
+
; if you are using Amazon Aurora and have configured a reader database.
|
63 |
+
aurora_readonly_read_committed =
|
64 |
+
|
65 |
[database_tests]
|
66 |
host = localhost
|
67 |
username = "@USERNAME@"
|
92 |
enable_logging = 0
|
93 |
|
94 |
[log]
|
95 |
+
; possible values for log: screen, database, file, errorlog, syslog
|
96 |
log_writers[] = screen
|
97 |
|
98 |
; log level, everything logged w/ this level or one of greater severity
|
105 |
; this allows you to log more information to one backend vs another.
|
106 |
; log_level_screen =
|
107 |
; log_level_file =
|
108 |
+
; log_level_errorlog =
|
109 |
+
; log_level_syslog =
|
110 |
|
111 |
; if configured to log in a file, log entries will be made to this file
|
112 |
logger_file_path = tmp/logs/matomo.log
|
113 |
|
114 |
+
; if configured to log to syslog, mark them with this identifier string.
|
115 |
+
; This acts as an easy-to-find tag in the syslog.
|
116 |
+
logger_syslog_ident = 'matomo'
|
117 |
+
|
118 |
[Cache]
|
119 |
; available backends are 'file', 'array', 'null', 'redis', 'chained'
|
120 |
; 'array' will cache data only during one request
|
493 |
; Uncomment the next line to set a URL to redirect the user to after they log out of Matomo.
|
494 |
; login_logout_url = http://...
|
495 |
|
496 |
+
; By default the logme functionality to automatically log in users using url params is disabled
|
497 |
+
; You can enable that by setting this to "1". See https://matomo.org/faq/how-to/faq_30/ for more details
|
498 |
+
login_allow_logme = 0
|
499 |
+
|
500 |
; Set to 1 to disable the framebuster on standard Non-widgets pages (a click-jacking countermeasure).
|
501 |
; Default is 0 (i.e., bust frames on all non Widget pages such as Login, API, Widgets, Email reports, etc.).
|
502 |
enable_framed_pages = 0
|
647 |
; By enabling this flag the header HTTP_X_FORWARDED_URI will be considered for the current script name.
|
648 |
proxy_uri_header = 0
|
649 |
|
650 |
+
; If set to 1 we use the last IP in the list of proxy IPs when determining the client IP. Using the last IP can be more
|
651 |
+
; secure when using proxy headers in combination with a load balancer. By default the first IP is read according to RFC7239
|
652 |
+
; which is required when the client sends the IP through a proxy header as well as the load balancer.
|
653 |
+
proxy_ip_read_last_in_list = 0
|
654 |
+
|
655 |
; Whether to enable trusted host checking. This can be disabled if you're running Matomo
|
656 |
; on several URLs and do not wish to constantly edit the trusted host list.
|
657 |
enable_trusted_host_check = 1
|
app/config/global.php
CHANGED
@@ -175,6 +175,14 @@ return array(
|
|
175 |
return $ipsResolved;
|
176 |
},
|
177 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
'Piwik\Tracker\VisitorRecognizer' => DI\autowire()
|
179 |
->constructorParameter('trustCookiesOnly', DI\get('ini.Tracker.trust_visitors_cookies'))
|
180 |
->constructorParameter('visitStandardLength', DI\get('ini.Tracker.visit_standard_length'))
|
175 |
return $ipsResolved;
|
176 |
},
|
177 |
|
178 |
+
/**
|
179 |
+
* This defines a list of hostnames Matomo's Http class will deny requests to. Wildcards (*) can be used in the
|
180 |
+
* beginning to match any subdomain level or in the end to match any tlds
|
181 |
+
*/
|
182 |
+
'http.blocklist.hosts' => [
|
183 |
+
'*.amazonaws.com',
|
184 |
+
],
|
185 |
+
|
186 |
'Piwik\Tracker\VisitorRecognizer' => DI\autowire()
|
187 |
->constructorParameter('trustCookiesOnly', DI\get('ini.Tracker.trust_visitors_cookies'))
|
188 |
->constructorParameter('visitStandardLength', DI\get('ini.Tracker.visit_standard_length'))
|
app/core/API/ApiRenderer.php
CHANGED
@@ -120,7 +120,7 @@ abstract class ApiRenderer
|
|
120 |
*/
|
121 |
public static function factory($format, $request)
|
122 |
{
|
123 |
-
if (
|
124 |
$format = 'json';
|
125 |
}
|
126 |
$formatToCheck = '\\' . ucfirst(strtolower($format));
|
120 |
*/
|
121 |
public static function factory($format, $request)
|
122 |
{
|
123 |
+
if (mb_strtolower($format) === 'json2') {
|
124 |
$format = 'json';
|
125 |
}
|
126 |
$formatToCheck = '\\' . ucfirst(strtolower($format));
|
app/core/Archive/ArchiveInvalidator.php
CHANGED
@@ -9,10 +9,7 @@
|
|
9 |
|
10 |
namespace Piwik\Archive;
|
11 |
|
12 |
-
use Piwik\Access;
|
13 |
use Piwik\Archive\ArchiveInvalidator\InvalidationResult;
|
14 |
-
use Piwik\ArchiveProcessor\ArchivingStatus;
|
15 |
-
use Piwik\ArchiveProcessor\Loader;
|
16 |
use Piwik\ArchiveProcessor\Rules;
|
17 |
use Piwik\Config;
|
18 |
use Piwik\Container\StaticContainer;
|
@@ -73,11 +70,6 @@ class ArchiveInvalidator
|
|
73 |
*/
|
74 |
private $model;
|
75 |
|
76 |
-
/**
|
77 |
-
* @var ArchivingStatus
|
78 |
-
*/
|
79 |
-
private $archivingStatus;
|
80 |
-
|
81 |
/**
|
82 |
* @var SegmentArchiving
|
83 |
*/
|
@@ -93,10 +85,9 @@ class ArchiveInvalidator
|
|
93 |
*/
|
94 |
private $allIdSitesCache;
|
95 |
|
96 |
-
public function __construct(Model $model,
|
97 |
{
|
98 |
$this->model = $model;
|
99 |
-
$this->archivingStatus = $archivingStatus;
|
100 |
$this->segmentArchiving = null;
|
101 |
$this->logger = $logger;
|
102 |
}
|
9 |
|
10 |
namespace Piwik\Archive;
|
11 |
|
|
|
12 |
use Piwik\Archive\ArchiveInvalidator\InvalidationResult;
|
|
|
|
|
13 |
use Piwik\ArchiveProcessor\Rules;
|
14 |
use Piwik\Config;
|
15 |
use Piwik\Container\StaticContainer;
|
70 |
*/
|
71 |
private $model;
|
72 |
|
|
|
|
|
|
|
|
|
|
|
73 |
/**
|
74 |
* @var SegmentArchiving
|
75 |
*/
|
85 |
*/
|
86 |
private $allIdSitesCache;
|
87 |
|
88 |
+
public function __construct(Model $model, LoggerInterface $logger)
|
89 |
{
|
90 |
$this->model = $model;
|
|
|
91 |
$this->segmentArchiving = null;
|
92 |
$this->logger = $logger;
|
93 |
}
|
app/core/ArchiveProcessor.php
CHANGED
@@ -12,12 +12,14 @@ use Exception;
|
|
12 |
use Piwik\Archive\DataTableFactory;
|
13 |
use Piwik\ArchiveProcessor\Parameters;
|
14 |
use Piwik\ArchiveProcessor\Rules;
|
|
|
15 |
use Piwik\DataAccess\ArchiveWriter;
|
16 |
use Piwik\DataAccess\LogAggregator;
|
17 |
use Piwik\DataTable\Manager;
|
18 |
use Piwik\DataTable\Map;
|
19 |
use Piwik\DataTable\Row;
|
20 |
use Piwik\Segment\SegmentExpression;
|
|
|
21 |
|
22 |
/**
|
23 |
* Used by {@link Piwik\Plugin\Archiver} instances to insert and aggregate archive data.
|
@@ -202,14 +204,24 @@ class ArchiveProcessor
|
|
202 |
$columnsToRenameAfterAggregation = null,
|
203 |
$countRowsRecursive = true)
|
204 |
{
|
|
|
|
|
|
|
205 |
if (!is_array($recordNames)) {
|
206 |
$recordNames = array($recordNames);
|
207 |
}
|
208 |
|
|
|
|
|
209 |
$nameToCount = array();
|
210 |
foreach ($recordNames as $recordName) {
|
211 |
$latestUsedTableId = Manager::getInstance()->getMostRecentTableId();
|
212 |
|
|
|
|
|
|
|
|
|
|
|
213 |
$table = $this->aggregateDataTableRecord($recordName, $columnsAggregationOperation, $columnsToRenameAfterAggregation);
|
214 |
|
215 |
$nameToCount[$recordName]['level0'] = $table->getRowsCount();
|
@@ -582,7 +594,7 @@ class ArchiveProcessor
|
|
582 |
if (empty($columnsToRenameAfterAggregation)) {
|
583 |
return;
|
584 |
}
|
585 |
-
|
586 |
foreach ($table->getRows() as $row) {
|
587 |
foreach ($columnsToRenameAfterAggregation as $oldName => $newName) {
|
588 |
$row->renameColumn($oldName, $newName);
|
12 |
use Piwik\Archive\DataTableFactory;
|
13 |
use Piwik\ArchiveProcessor\Parameters;
|
14 |
use Piwik\ArchiveProcessor\Rules;
|
15 |
+
use Piwik\Container\StaticContainer;
|
16 |
use Piwik\DataAccess\ArchiveWriter;
|
17 |
use Piwik\DataAccess\LogAggregator;
|
18 |
use Piwik\DataTable\Manager;
|
19 |
use Piwik\DataTable\Map;
|
20 |
use Piwik\DataTable\Row;
|
21 |
use Piwik\Segment\SegmentExpression;
|
22 |
+
use Psr\Log\LoggerInterface;
|
23 |
|
24 |
/**
|
25 |
* Used by {@link Piwik\Plugin\Archiver} instances to insert and aggregate archive data.
|
204 |
$columnsToRenameAfterAggregation = null,
|
205 |
$countRowsRecursive = true)
|
206 |
{
|
207 |
+
/** @var LoggerInterface $logger */
|
208 |
+
$logger = StaticContainer::get(LoggerInterface::class);
|
209 |
+
|
210 |
if (!is_array($recordNames)) {
|
211 |
$recordNames = array($recordNames);
|
212 |
}
|
213 |
|
214 |
+
$archiveDescription = $this->params . '';
|
215 |
+
|
216 |
$nameToCount = array();
|
217 |
foreach ($recordNames as $recordName) {
|
218 |
$latestUsedTableId = Manager::getInstance()->getMostRecentTableId();
|
219 |
|
220 |
+
$logger->debug("aggregating record {record} [archive = {archive}]", [
|
221 |
+
'record' => $recordName,
|
222 |
+
'archive' => $archiveDescription,
|
223 |
+
]);
|
224 |
+
|
225 |
$table = $this->aggregateDataTableRecord($recordName, $columnsAggregationOperation, $columnsToRenameAfterAggregation);
|
226 |
|
227 |
$nameToCount[$recordName]['level0'] = $table->getRowsCount();
|
594 |
if (empty($columnsToRenameAfterAggregation)) {
|
595 |
return;
|
596 |
}
|
597 |
+
|
598 |
foreach ($table->getRows() as $row) {
|
599 |
foreach ($columnsToRenameAfterAggregation as $oldName => $newName) {
|
600 |
$row->renameColumn($oldName, $newName);
|
app/core/ArchiveProcessor/Loader.php
CHANGED
@@ -154,18 +154,8 @@ class Loader
|
|
154 |
$this->logger->info("initiating archiving via core:archive for " . $this->params);
|
155 |
}
|
156 |
|
157 |
-
|
158 |
-
$
|
159 |
-
$locked = $archivingStatus->archiveStarted($this->params);
|
160 |
-
|
161 |
-
try {
|
162 |
-
list($visits, $visitsConverted) = $this->prepareCoreMetricsArchive($visits, $visitsConverted);
|
163 |
-
list($idArchive, $visits) = $this->prepareAllPluginsArchive($visits, $visitsConverted);
|
164 |
-
} finally {
|
165 |
-
if ($locked) {
|
166 |
-
$archivingStatus->archiveFinished();
|
167 |
-
}
|
168 |
-
}
|
169 |
|
170 |
if ($this->isThereSomeVisits($visits) || PluginsArchiver::doesAnyPluginArchiveWithoutVisits()) {
|
171 |
return [[$idArchive], $visits];
|
154 |
$this->logger->info("initiating archiving via core:archive for " . $this->params);
|
155 |
}
|
156 |
|
157 |
+
list($visits, $visitsConverted) = $this->prepareCoreMetricsArchive($visits, $visitsConverted);
|
158 |
+
list($idArchive, $visits) = $this->prepareAllPluginsArchive($visits, $visitsConverted);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
|
160 |
if ($this->isThereSomeVisits($visits) || PluginsArchiver::doesAnyPluginArchiveWithoutVisits()) {
|
161 |
return [[$idArchive], $visits];
|
app/core/AssetManager/UIAssetCacheBuster.php
CHANGED
@@ -33,14 +33,17 @@ class UIAssetCacheBuster extends Singleton
|
|
33 |
|
34 |
$masterFile = PIWIK_INCLUDE_PATH . '/.git/refs/heads/master';
|
35 |
$currentGitHash = file_exists($masterFile) ? @file_get_contents($masterFile) : null;
|
|
|
36 |
|
37 |
-
$plugins = !$pluginNames ?
|
38 |
sort($plugins);
|
39 |
|
40 |
$pluginsInfo = '';
|
41 |
foreach ($plugins as $pluginName) {
|
42 |
-
|
43 |
-
|
|
|
|
|
44 |
}
|
45 |
|
46 |
$cacheBuster = md5($pluginsInfo . PHP_VERSION . Version::VERSION . trim($currentGitHash));
|
@@ -51,7 +54,7 @@ class UIAssetCacheBuster extends Singleton
|
|
51 |
|
52 |
$cachedCacheBuster = $cacheBuster;
|
53 |
}
|
54 |
-
|
55 |
return $cachedCacheBuster;
|
56 |
}
|
57 |
|
33 |
|
34 |
$masterFile = PIWIK_INCLUDE_PATH . '/.git/refs/heads/master';
|
35 |
$currentGitHash = file_exists($masterFile) ? @file_get_contents($masterFile) : null;
|
36 |
+
$manager = Manager::getInstance();
|
37 |
|
38 |
+
$plugins = !$pluginNames ? $manager->getActivatedPlugins() : $pluginNames;
|
39 |
sort($plugins);
|
40 |
|
41 |
$pluginsInfo = '';
|
42 |
foreach ($plugins as $pluginName) {
|
43 |
+
if ($manager->isPluginLoaded($pluginName)) {
|
44 |
+
$plugin = $manager->getLoadedPlugin($pluginName);
|
45 |
+
$pluginsInfo .= $plugin->getPluginName() . $plugin->getVersion() . ',';
|
46 |
+
}
|
47 |
}
|
48 |
|
49 |
$cacheBuster = md5($pluginsInfo . PHP_VERSION . Version::VERSION . trim($currentGitHash));
|
54 |
|
55 |
$cachedCacheBuster = $cacheBuster;
|
56 |
}
|
57 |
+
|
58 |
return $cachedCacheBuster;
|
59 |
}
|
60 |
|
app/core/CliMulti/Output.php
CHANGED
@@ -63,8 +63,8 @@ class Output
|
|
63 |
$search = '#!/usr/bin/env php';
|
64 |
if (!empty($content)
|
65 |
&& is_string($content)
|
66 |
-
&&
|
67 |
-
$content = trim(
|
68 |
}
|
69 |
return $content;
|
70 |
}
|
63 |
$search = '#!/usr/bin/env php';
|
64 |
if (!empty($content)
|
65 |
&& is_string($content)
|
66 |
+
&& mb_substr(trim($content), 0, strlen($search)) === $search) {
|
67 |
+
$content = trim(mb_substr(trim($content), strlen($search)));
|
68 |
}
|
69 |
return $content;
|
70 |
}
|
app/core/CliMulti/Process.php
CHANGED
@@ -22,6 +22,9 @@ use Piwik\SettingsServer;
|
|
22 |
*/
|
23 |
class Process
|
24 |
{
|
|
|
|
|
|
|
25 |
private $finished = null;
|
26 |
private $pidFile = '';
|
27 |
private $timeCreation = null;
|
@@ -188,42 +191,67 @@ class Process
|
|
188 |
|
189 |
public static function isSupported()
|
190 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
191 |
if (defined('PIWIK_TEST_MODE')
|
192 |
&& self::isForcingAsyncProcessMode()
|
193 |
) {
|
194 |
-
|
195 |
}
|
196 |
|
197 |
if (SettingsServer::isWindows()) {
|
198 |
-
|
199 |
}
|
200 |
|
201 |
if (self::isMethodDisabled('shell_exec')) {
|
202 |
-
|
|
|
203 |
}
|
204 |
|
205 |
-
|
206 |
-
|
|
|
207 |
}
|
208 |
|
209 |
if (self::isSystemNotSupported()) {
|
210 |
-
|
211 |
}
|
212 |
|
213 |
-
if (!self::
|
214 |
-
return
|
|
|
|
|
|
|
|
|
|
|
215 |
}
|
216 |
|
217 |
-
|
218 |
-
|
219 |
-
return false;
|
220 |
}
|
221 |
|
222 |
if (!self::isProcFSMounted() && !SettingsServer::isMac()) {
|
223 |
-
|
224 |
}
|
225 |
|
226 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
227 |
}
|
228 |
|
229 |
private static function isSystemNotSupported()
|
@@ -254,18 +282,11 @@ class Process
|
|
254 |
private static function returnsSuccessCode($command)
|
255 |
{
|
256 |
$exec = $command . ' > /dev/null 2>&1; echo $?';
|
257 |
-
$returnCode = shell_exec($exec);
|
258 |
$returnCode = trim($returnCode);
|
259 |
return 0 == (int) $returnCode;
|
260 |
}
|
261 |
|
262 |
-
private static function commandExists($command)
|
263 |
-
{
|
264 |
-
$result = @shell_exec('which ' . escapeshellarg($command) . ' 2> /dev/null');
|
265 |
-
|
266 |
-
return !empty($result);
|
267 |
-
}
|
268 |
-
|
269 |
/**
|
270 |
* ps -e requires /proc
|
271 |
* @return bool
|
@@ -283,7 +304,7 @@ class Process
|
|
283 |
|
284 |
public static function getListOfRunningProcesses()
|
285 |
{
|
286 |
-
$processes =
|
287 |
if (empty($processes)) {
|
288 |
return array();
|
289 |
}
|
@@ -295,7 +316,7 @@ class Process
|
|
295 |
*/
|
296 |
public static function getRunningProcesses()
|
297 |
{
|
298 |
-
$ids = explode("\n", trim(
|
299 |
|
300 |
$ids = array_map('intval', $ids);
|
301 |
$ids = array_filter($ids, function ($id) {
|
22 |
*/
|
23 |
class Process
|
24 |
{
|
25 |
+
const PS_COMMAND = 'ps x';
|
26 |
+
const AWK_COMMAND = 'awk \'! /defunct/ {print $1}\'';
|
27 |
+
|
28 |
private $finished = null;
|
29 |
private $pidFile = '';
|
30 |
private $timeCreation = null;
|
191 |
|
192 |
public static function isSupported()
|
193 |
{
|
194 |
+
$reasons = self::isSupportedWithReason();
|
195 |
+
return empty($reasons);
|
196 |
+
}
|
197 |
+
|
198 |
+
public static function isSupportedWithReason()
|
199 |
+
{
|
200 |
+
$reasons = [];
|
201 |
+
|
202 |
if (defined('PIWIK_TEST_MODE')
|
203 |
&& self::isForcingAsyncProcessMode()
|
204 |
) {
|
205 |
+
$reasons[] = 'forcing multicurl use for tests';
|
206 |
}
|
207 |
|
208 |
if (SettingsServer::isWindows()) {
|
209 |
+
$reasons[] = 'not supported on windows';
|
210 |
}
|
211 |
|
212 |
if (self::isMethodDisabled('shell_exec')) {
|
213 |
+
$reasons[] = 'shell_exec is disabled';
|
214 |
+
return $reasons; // shell_exec is used for almost every other check
|
215 |
}
|
216 |
|
217 |
+
$getMyPidDisabled = self::isMethodDisabled('getmypid');
|
218 |
+
if ($getMyPidDisabled) {
|
219 |
+
$reasons[] = 'getmypid is disabled';
|
220 |
}
|
221 |
|
222 |
if (self::isSystemNotSupported()) {
|
223 |
+
$reasons[] = 'system returned by `uname -a` is not supported';
|
224 |
}
|
225 |
|
226 |
+
if (!self::psExistsAndRunsCorrectly()) {
|
227 |
+
$reasons[] = 'shell_exec(' . self::PS_COMMAND . '" 2> /dev/null") did not return a success code';
|
228 |
+
} else if (!$getMyPidDisabled) {
|
229 |
+
$pid = @getmypid();
|
230 |
+
if (empty($pid) || !in_array($pid, self::getRunningProcesses())) {
|
231 |
+
$reasons[] = 'could not find our pid (from getmypid()) in the output of `' . self::PS_COMMAND . '`';
|
232 |
+
}
|
233 |
}
|
234 |
|
235 |
+
if (!self::awkExistsAndRunsCorrectly()) {
|
236 |
+
$reasons[] = 'awk is not available or did not run as we would expect it to';
|
|
|
237 |
}
|
238 |
|
239 |
if (!self::isProcFSMounted() && !SettingsServer::isMac()) {
|
240 |
+
$reasons[] = 'procfs is not mounted';
|
241 |
}
|
242 |
|
243 |
+
return $reasons;
|
244 |
+
}
|
245 |
+
|
246 |
+
private static function psExistsAndRunsCorrectly()
|
247 |
+
{
|
248 |
+
return self::returnsSuccessCode(self::PS_COMMAND . ' 2>/dev/null');
|
249 |
+
}
|
250 |
+
|
251 |
+
private static function awkExistsAndRunsCorrectly()
|
252 |
+
{
|
253 |
+
$testResult = @shell_exec('echo " 537 s000 Ss 0:00.05 login -pfl theuser /bin/bash -c exec -la bash /bin/bash" | ' . self::AWK_COMMAND . ' 2>/dev/null');
|
254 |
+
return trim($testResult) == '537';
|
255 |
}
|
256 |
|
257 |
private static function isSystemNotSupported()
|
282 |
private static function returnsSuccessCode($command)
|
283 |
{
|
284 |
$exec = $command . ' > /dev/null 2>&1; echo $?';
|
285 |
+
$returnCode = @shell_exec($exec);
|
286 |
$returnCode = trim($returnCode);
|
287 |
return 0 == (int) $returnCode;
|
288 |
}
|
289 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
290 |
/**
|
291 |
* ps -e requires /proc
|
292 |
* @return bool
|
304 |
|
305 |
public static function getListOfRunningProcesses()
|
306 |
{
|
307 |
+
$processes = @shell_exec(self::PS_COMMAND . ' 2>/dev/null');
|
308 |
if (empty($processes)) {
|
309 |
return array();
|
310 |
}
|
316 |
*/
|
317 |
public static function getRunningProcesses()
|
318 |
{
|
319 |
+
$ids = explode("\n", trim(shell_exec(self::PS_COMMAND . ' 2>/dev/null | ' . self::AWK_COMMAND . ' 2>/dev/null')));
|
320 |
|
321 |
$ids = array_map('intval', $ids);
|
322 |
$ids = array_filter($ids, function ($id) {
|
app/core/Common.php
CHANGED
@@ -184,21 +184,13 @@ class Common
|
|
184 |
*
|
185 |
* @param string $string
|
186 |
* @param int $start
|
187 |
-
* @param int
|
188 |
* @return string
|
189 |
-
* @
|
190 |
*/
|
191 |
-
public static function mb_substr($string, $start)
|
192 |
{
|
193 |
-
$length
|
194 |
-
? func_get_arg(2)
|
195 |
-
: self::mb_strlen($string);
|
196 |
-
|
197 |
-
if (function_exists('mb_substr')) {
|
198 |
-
return mb_substr($string, $start, $length, 'UTF-8');
|
199 |
-
}
|
200 |
-
|
201 |
-
return substr($string, $start, $length);
|
202 |
}
|
203 |
|
204 |
/**
|
@@ -233,15 +225,11 @@ class Common
|
|
233 |
*
|
234 |
* @param string $string
|
235 |
* @return int
|
236 |
-
* @
|
237 |
*/
|
238 |
public static function mb_strlen($string)
|
239 |
{
|
240 |
-
|
241 |
-
return mb_strlen($string, 'UTF-8');
|
242 |
-
}
|
243 |
-
|
244 |
-
return strlen($string);
|
245 |
}
|
246 |
|
247 |
/**
|
@@ -251,16 +239,11 @@ class Common
|
|
251 |
*
|
252 |
* @param string $string
|
253 |
* @return string
|
254 |
-
* @
|
255 |
*/
|
256 |
public static function mb_strtolower($string)
|
257 |
{
|
258 |
-
|
259 |
-
return mb_strtolower($string, 'UTF-8');
|
260 |
-
}
|
261 |
-
|
262 |
-
// return unchanged string as using `strtolower` might cause unicode problems
|
263 |
-
return $string;
|
264 |
}
|
265 |
|
266 |
/**
|
@@ -270,16 +253,11 @@ class Common
|
|
270 |
*
|
271 |
* @param string $string
|
272 |
* @return string
|
273 |
-
* @
|
274 |
*/
|
275 |
public static function mb_strtoupper($string)
|
276 |
{
|
277 |
-
|
278 |
-
return mb_strtoupper($string, 'UTF-8');
|
279 |
-
}
|
280 |
-
|
281 |
-
// return unchanged string as using `strtoupper` might cause unicode problems
|
282 |
-
return $string;
|
283 |
}
|
284 |
|
285 |
/**
|
184 |
*
|
185 |
* @param string $string
|
186 |
* @param int $start
|
187 |
+
* @param int|null $length optional length
|
188 |
* @return string
|
189 |
+
* @deprecated since 4.4 - directly use mb_substr instead
|
190 |
*/
|
191 |
+
public static function mb_substr($string, $start, $length = null)
|
192 |
{
|
193 |
+
return mb_substr($string, $start, $length, 'UTF-8');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
}
|
195 |
|
196 |
/**
|
225 |
*
|
226 |
* @param string $string
|
227 |
* @return int
|
228 |
+
* @deprecated since 4.4 - directly use mb_strlen instead
|
229 |
*/
|
230 |
public static function mb_strlen($string)
|
231 |
{
|
232 |
+
return mb_strlen($string, 'UTF-8');
|
|
|
|
|
|
|
|
|
233 |
}
|
234 |
|
235 |
/**
|
239 |
*
|
240 |
* @param string $string
|
241 |
* @return string
|
242 |
+
* @deprecated since 4.4 - directly use mb_strtolower instead
|
243 |
*/
|
244 |
public static function mb_strtolower($string)
|
245 |
{
|
246 |
+
return mb_strtolower($string, 'UTF-8');
|
|
|
|
|
|
|
|
|
|
|
247 |
}
|
248 |
|
249 |
/**
|
253 |
*
|
254 |
* @param string $string
|
255 |
* @return string
|
256 |
+
* @deprecated since 4.4 - directly use mb_strtoupper instead
|
257 |
*/
|
258 |
public static function mb_strtoupper($string)
|
259 |
{
|
260 |
+
return mb_strtoupper($string, 'UTF-8');
|
|
|
|
|
|
|
|
|
|
|
261 |
}
|
262 |
|
263 |
/**
|
app/core/Concurrency/Lock.php
CHANGED
@@ -8,7 +8,6 @@
|
|
8 |
*/
|
9 |
namespace Piwik\Concurrency;
|
10 |
|
11 |
-
use Piwik\ArchiveProcessor\ArchivingStatus;
|
12 |
use Piwik\Common;
|
13 |
use Piwik\Date;
|
14 |
|
@@ -82,11 +81,11 @@ class Lock
|
|
82 |
{
|
83 |
$this->lockKey = $this->lockKeyStart . $id;
|
84 |
|
85 |
-
if (
|
86 |
// Lock key might be too long for DB column, so we hash it but leave the start of the original as well
|
87 |
// to make it more readable
|
88 |
$md5Len = 32;
|
89 |
-
$this->lockKey =
|
90 |
}
|
91 |
|
92 |
$lockValue = substr(Common::generateUniqId(), 0, 12);
|
8 |
*/
|
9 |
namespace Piwik\Concurrency;
|
10 |
|
|
|
11 |
use Piwik\Common;
|
12 |
use Piwik\Date;
|
13 |
|
81 |
{
|
82 |
$this->lockKey = $this->lockKeyStart . $id;
|
83 |
|
84 |
+
if (mb_strlen($this->lockKey) > self::MAX_KEY_LEN) {
|
85 |
// Lock key might be too long for DB column, so we hash it but leave the start of the original as well
|
86 |
// to make it more readable
|
87 |
$md5Len = 32;
|
88 |
+
$this->lockKey = mb_substr($id, 0, self::MAX_KEY_LEN - $md5Len - 1) . md5($id);
|
89 |
}
|
90 |
|
91 |
$lockValue = substr(Common::generateUniqId(), 0, 12);
|
app/core/Config.php
CHANGED
@@ -139,7 +139,7 @@ class Config
|
|
139 |
if (!empty($GLOBALS['CONFIG_INI_PATH_RESOLVER']) && is_callable($GLOBALS['CONFIG_INI_PATH_RESOLVER'])) {
|
140 |
return call_user_func($GLOBALS['CONFIG_INI_PATH_RESOLVER']);
|
141 |
}
|
142 |
-
|
143 |
$path = self::getByDomainConfigPath();
|
144 |
if ($path) {
|
145 |
return $path;
|
@@ -220,13 +220,14 @@ class Config
|
|
220 |
|
221 |
/**
|
222 |
* Returns the hostname of the current request (without port number)
|
|
|
|
|
223 |
*
|
224 |
* @return string
|
225 |
*/
|
226 |
-
public static function getHostname()
|
227 |
{
|
228 |
-
|
229 |
-
$host = Url::getHost($checkIfTrusted = false);
|
230 |
|
231 |
// Remove any port number to get actual hostname
|
232 |
$host = Url::getHostSanitized($host);
|
@@ -309,7 +310,7 @@ class Config
|
|
309 |
public function deleteLocalConfig()
|
310 |
{
|
311 |
$configLocal = $this->getLocalPath();
|
312 |
-
|
313 |
if(file_exists($configLocal)){
|
314 |
@unlink($configLocal);
|
315 |
}
|
@@ -345,7 +346,7 @@ class Config
|
|
345 |
{
|
346 |
return $this->settings->getIniFileChain()->getFrom($this->getCommonPath(), $name);
|
347 |
}
|
348 |
-
|
349 |
/**
|
350 |
* @api
|
351 |
*/
|
139 |
if (!empty($GLOBALS['CONFIG_INI_PATH_RESOLVER']) && is_callable($GLOBALS['CONFIG_INI_PATH_RESOLVER'])) {
|
140 |
return call_user_func($GLOBALS['CONFIG_INI_PATH_RESOLVER']);
|
141 |
}
|
142 |
+
|
143 |
$path = self::getByDomainConfigPath();
|
144 |
if ($path) {
|
145 |
return $path;
|
220 |
|
221 |
/**
|
222 |
* Returns the hostname of the current request (without port number)
|
223 |
+
* @param bool $checkIfTrusted Check trusted requires config which is maybe not ready yet,
|
224 |
+
* make sure the config is ready when you call with true
|
225 |
*
|
226 |
* @return string
|
227 |
*/
|
228 |
+
public static function getHostname($checkIfTrusted = false)
|
229 |
{
|
230 |
+
$host = Url::getHost($checkIfTrusted);
|
|
|
231 |
|
232 |
// Remove any port number to get actual hostname
|
233 |
$host = Url::getHostSanitized($host);
|
310 |
public function deleteLocalConfig()
|
311 |
{
|
312 |
$configLocal = $this->getLocalPath();
|
313 |
+
|
314 |
if(file_exists($configLocal)){
|
315 |
@unlink($configLocal);
|
316 |
}
|
346 |
{
|
347 |
return $this->settings->getIniFileChain()->getFrom($this->getCommonPath(), $name);
|
348 |
}
|
349 |
+
|
350 |
/**
|
351 |
* @api
|
352 |
*/
|
app/core/CronArchive.php
CHANGED
@@ -673,11 +673,11 @@ class CronArchive
|
|
673 |
{
|
674 |
if (!defined('PIWIK_ARCHIVE_NO_TRUNCATE')) {
|
675 |
$m = str_replace(array("\n", "\t"), " ", $m);
|
676 |
-
if (
|
677 |
$numCharactersKeepFromEnd = 100;
|
678 |
-
$m =
|
679 |
. ' ... ' .
|
680 |
-
|
681 |
}
|
682 |
}
|
683 |
$this->errors[] = $m;
|
673 |
{
|
674 |
if (!defined('PIWIK_ARCHIVE_NO_TRUNCATE')) {
|
675 |
$m = str_replace(array("\n", "\t"), " ", $m);
|
676 |
+
if (mb_strlen($m) > self::TRUNCATE_ERROR_MESSAGE_SUMMARY) {
|
677 |
$numCharactersKeepFromEnd = 100;
|
678 |
+
$m = mb_substr($m, 0, self::TRUNCATE_ERROR_MESSAGE_SUMMARY - $numCharactersKeepFromEnd)
|
679 |
. ' ... ' .
|
680 |
+
mb_substr($m, -1 * $numCharactersKeepFromEnd);
|
681 |
}
|
682 |
}
|
683 |
$this->errors[] = $m;
|
app/core/DataAccess/ArchivingDbAdapter.php
CHANGED
@@ -9,8 +9,6 @@
|
|
9 |
|
10 |
namespace Piwik\DataAccess;
|
11 |
|
12 |
-
use Piwik\ArchiveProcessor\ArchivingStatus;
|
13 |
-
use Piwik\Concurrency\Lock;
|
14 |
use Piwik\Config;
|
15 |
use Piwik\Db\AdapterInterface;
|
16 |
use Piwik\DbHelper;
|
@@ -23,11 +21,6 @@ class ArchivingDbAdapter
|
|
23 |
*/
|
24 |
private $wrapped;
|
25 |
|
26 |
-
/**
|
27 |
-
* @var Lock
|
28 |
-
*/
|
29 |
-
private $archivingLock;
|
30 |
-
|
31 |
/**
|
32 |
* @var LoggerInterface
|
33 |
*/
|
@@ -38,10 +31,9 @@ class ArchivingDbAdapter
|
|
38 |
*/
|
39 |
private $maxExecutionTime;
|
40 |
|
41 |
-
public function __construct($wrapped,
|
42 |
{
|
43 |
$this->wrapped = $wrapped;
|
44 |
-
$this->archivingLock = $archivingLock;
|
45 |
$this->logger = $logger;
|
46 |
$this->maxExecutionTime = (float) Config::getInstance()->General['archiving_query_max_execution_time'];
|
47 |
}
|
@@ -53,7 +45,6 @@ class ArchivingDbAdapter
|
|
53 |
|
54 |
public function exec($sql)
|
55 |
{
|
56 |
-
$this->reexpireLock();
|
57 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
58 |
$this->logSql($sql);
|
59 |
|
@@ -62,7 +53,6 @@ class ArchivingDbAdapter
|
|
62 |
|
63 |
public function query($sql)
|
64 |
{
|
65 |
-
$this->reexpireLock();
|
66 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
67 |
$this->logSql($sql);
|
68 |
|
@@ -71,7 +61,6 @@ class ArchivingDbAdapter
|
|
71 |
|
72 |
public function fetchAll($sql)
|
73 |
{
|
74 |
-
$this->reexpireLock();
|
75 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
76 |
$this->logSql($sql);
|
77 |
|
@@ -80,7 +69,6 @@ class ArchivingDbAdapter
|
|
80 |
|
81 |
public function fetchRow($sql)
|
82 |
{
|
83 |
-
$this->reexpireLock();
|
84 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
85 |
$this->logSql($sql);
|
86 |
|
@@ -89,7 +77,6 @@ class ArchivingDbAdapter
|
|
89 |
|
90 |
public function fetchOne($sql)
|
91 |
{
|
92 |
-
$this->reexpireLock();
|
93 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
94 |
$this->logSql($sql);
|
95 |
|
@@ -98,7 +85,6 @@ class ArchivingDbAdapter
|
|
98 |
|
99 |
public function fetchAssoc($sql)
|
100 |
{
|
101 |
-
$this->reexpireLock();
|
102 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
103 |
$this->logSql($sql);
|
104 |
|
@@ -112,11 +98,4 @@ class ArchivingDbAdapter
|
|
112 |
$this->logger->debug($sql);
|
113 |
}
|
114 |
}
|
115 |
-
|
116 |
-
private function reexpireLock()
|
117 |
-
{
|
118 |
-
if ($this->archivingLock) {
|
119 |
-
$this->archivingLock->reexpireLock();
|
120 |
-
}
|
121 |
-
}
|
122 |
}
|
9 |
|
10 |
namespace Piwik\DataAccess;
|
11 |
|
|
|
|
|
12 |
use Piwik\Config;
|
13 |
use Piwik\Db\AdapterInterface;
|
14 |
use Piwik\DbHelper;
|
21 |
*/
|
22 |
private $wrapped;
|
23 |
|
|
|
|
|
|
|
|
|
|
|
24 |
/**
|
25 |
* @var LoggerInterface
|
26 |
*/
|
31 |
*/
|
32 |
private $maxExecutionTime;
|
33 |
|
34 |
+
public function __construct($wrapped, LoggerInterface $logger = null)
|
35 |
{
|
36 |
$this->wrapped = $wrapped;
|
|
|
37 |
$this->logger = $logger;
|
38 |
$this->maxExecutionTime = (float) Config::getInstance()->General['archiving_query_max_execution_time'];
|
39 |
}
|
45 |
|
46 |
public function exec($sql)
|
47 |
{
|
|
|
48 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
49 |
$this->logSql($sql);
|
50 |
|
53 |
|
54 |
public function query($sql)
|
55 |
{
|
|
|
56 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
57 |
$this->logSql($sql);
|
58 |
|
61 |
|
62 |
public function fetchAll($sql)
|
63 |
{
|
|
|
64 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
65 |
$this->logSql($sql);
|
66 |
|
69 |
|
70 |
public function fetchRow($sql)
|
71 |
{
|
|
|
72 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
73 |
$this->logSql($sql);
|
74 |
|
77 |
|
78 |
public function fetchOne($sql)
|
79 |
{
|
|
|
80 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
81 |
$this->logSql($sql);
|
82 |
|
85 |
|
86 |
public function fetchAssoc($sql)
|
87 |
{
|
|
|
88 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
89 |
$this->logSql($sql);
|
90 |
|
98 |
$this->logger->debug($sql);
|
99 |
}
|
100 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
}
|
app/core/DataAccess/LogAggregator.php
CHANGED
@@ -8,7 +8,6 @@
|
|
8 |
*/
|
9 |
namespace Piwik\DataAccess;
|
10 |
|
11 |
-
use Piwik\ArchiveProcessor\ArchivingStatus;
|
12 |
use Piwik\ArchiveProcessor\Parameters;
|
13 |
use Piwik\Common;
|
14 |
use Piwik\Config;
|
@@ -212,10 +211,10 @@ class LogAggregator
|
|
212 |
$bind = $this->getGeneralQueryBindParams();
|
213 |
$tableName = self::LOG_TABLE_SEGMENT_TEMPORARY_PREFIX . md5(json_encode($bind) . $this->segment->getString());
|
214 |
|
215 |
-
$lengthPrefix =
|
216 |
$maxLength = Db\Schema\Mysql::MAX_TABLE_NAME_LENGTH - $lengthPrefix;
|
217 |
|
218 |
-
return
|
219 |
}
|
220 |
|
221 |
public function cleanup()
|
@@ -1240,9 +1239,6 @@ class LogAggregator
|
|
1240 |
|
1241 |
public function getDb()
|
1242 |
{
|
1243 |
-
|
1244 |
-
$archivingStatus = StaticContainer::get(ArchivingStatus::class);
|
1245 |
-
$archivingLock = $archivingStatus->getCurrentArchivingLock();
|
1246 |
-
return new ArchivingDbAdapter(Db::getReader(), $archivingLock, $this->logger);
|
1247 |
}
|
1248 |
}
|
8 |
*/
|
9 |
namespace Piwik\DataAccess;
|
10 |
|
|
|
11 |
use Piwik\ArchiveProcessor\Parameters;
|
12 |
use Piwik\Common;
|
13 |
use Piwik\Config;
|
211 |
$bind = $this->getGeneralQueryBindParams();
|
212 |
$tableName = self::LOG_TABLE_SEGMENT_TEMPORARY_PREFIX . md5(json_encode($bind) . $this->segment->getString());
|
213 |
|
214 |
+
$lengthPrefix = mb_strlen(Common::prefixTable(''));
|
215 |
$maxLength = Db\Schema\Mysql::MAX_TABLE_NAME_LENGTH - $lengthPrefix;
|
216 |
|
217 |
+
return mb_substr($tableName, 0, $maxLength);
|
218 |
}
|
219 |
|
220 |
public function cleanup()
|
1239 |
|
1240 |
public function getDb()
|
1241 |
{
|
1242 |
+
return new ArchivingDbAdapter(Db::getReader(), $this->logger);
|
|
|
|
|
|
|
1243 |
}
|
1244 |
}
|
app/core/DataAccess/Model.php
CHANGED
@@ -10,7 +10,6 @@ namespace Piwik\DataAccess;
|
|
10 |
|
11 |
use Exception;
|
12 |
use Piwik\Archive\ArchiveInvalidator;
|
13 |
-
use Piwik\ArchiveProcessor\ArchivingStatus;
|
14 |
use Piwik\ArchiveProcessor\Parameters;
|
15 |
use Piwik\ArchiveProcessor\Rules;
|
16 |
use Piwik\Common;
|
@@ -35,15 +34,9 @@ class Model
|
|
35 |
*/
|
36 |
private $logger;
|
37 |
|
38 |
-
/**
|
39 |
-
* @var ArchivingStatus
|
40 |
-
*/
|
41 |
-
private $archivingStatus;
|
42 |
-
|
43 |
public function __construct(LoggerInterface $logger = null)
|
44 |
{
|
45 |
$this->logger = $logger ?: StaticContainer::get('Psr\Log\LoggerInterface');
|
46 |
-
$this->archivingStatus = StaticContainer::get(ArchivingStatus::class);
|
47 |
}
|
48 |
|
49 |
/**
|
@@ -204,17 +197,18 @@ class Model
|
|
204 |
// except for archives that are DONE_IN_PROGRESS.
|
205 |
$archivesToCreateInvalidationRowsFor = [];
|
206 |
foreach ($archivesToInvalidate as $row) {
|
207 |
-
|
208 |
-
continue;
|
209 |
-
}
|
210 |
-
|
211 |
-
$archivesToCreateInvalidationRowsFor[$row['idsite']][$row['period']][$row['date1']][$row['date2']] = $row['idarchive'];
|
212 |
}
|
213 |
|
214 |
$now = Date::now()->getDatetime();
|
215 |
|
216 |
$existingInvalidations = $this->getExistingInvalidations($idSites, $periodCondition, $nameCondition);
|
217 |
|
|
|
|
|
|
|
|
|
|
|
218 |
$dummyArchives = [];
|
219 |
foreach ($idSites as $idSite) {
|
220 |
try {
|
@@ -238,23 +232,42 @@ class Model
|
|
238 |
$date1 = $period->getDateStart()->toString();
|
239 |
$date2 = $period->getDateEnd()->toString();
|
240 |
|
241 |
-
|
242 |
-
if
|
243 |
-
|
244 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
245 |
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
|
|
258 |
}
|
259 |
}
|
260 |
|
@@ -314,8 +327,8 @@ class Model
|
|
314 |
|
315 |
/** @var Period $period */
|
316 |
$dateConditions[] = "(date1 <= ? AND ? <= date2)";
|
317 |
-
$bind[] = $period->getDateStart();
|
318 |
-
$bind[] = $period->getDateEnd();
|
319 |
|
320 |
$dateConditionsSql = implode(" OR ", $dateConditions);
|
321 |
$periodConditions[] = "(period = 5 AND ($dateConditionsSql))";
|
@@ -676,16 +689,20 @@ class Model
|
|
676 |
return true;
|
677 |
}
|
678 |
|
679 |
-
//
|
680 |
-
//
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
if (!$lock->isLocked()) {
|
686 |
-
return false; // we couldn't claim the lock, archive is in progress
|
687 |
}
|
688 |
|
|
|
|
|
|
|
|
|
|
|
|
|
689 |
// remove similar invalidations w/ lesser idinvalidation values
|
690 |
$bind = [
|
691 |
$invalidation['idsite'],
|
@@ -747,7 +764,7 @@ class Model
|
|
747 |
public function getNextInvalidatedArchive($idSite, $archivingStartTime, $idInvalidationsToExclude = null, $useLimit = true)
|
748 |
{
|
749 |
$table = Common::prefixTable('archive_invalidations');
|
750 |
-
$sql = "SELECT
|
751 |
FROM `$table`
|
752 |
WHERE idsite = ? AND status != ? AND ts_invalidated <= ?";
|
753 |
$bind = [
|
@@ -964,4 +981,10 @@ class Model
|
|
964 |
$position = strpos($pair, '.');
|
965 |
return $position === false || $position === strlen($pair) - 1;
|
966 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
967 |
}
|
10 |
|
11 |
use Exception;
|
12 |
use Piwik\Archive\ArchiveInvalidator;
|
|
|
13 |
use Piwik\ArchiveProcessor\Parameters;
|
14 |
use Piwik\ArchiveProcessor\Rules;
|
15 |
use Piwik\Common;
|
34 |
*/
|
35 |
private $logger;
|
36 |
|
|
|
|
|
|
|
|
|
|
|
37 |
public function __construct(LoggerInterface $logger = null)
|
38 |
{
|
39 |
$this->logger = $logger ?: StaticContainer::get('Psr\Log\LoggerInterface');
|
|
|
40 |
}
|
41 |
|
42 |
/**
|
197 |
// except for archives that are DONE_IN_PROGRESS.
|
198 |
$archivesToCreateInvalidationRowsFor = [];
|
199 |
foreach ($archivesToInvalidate as $row) {
|
200 |
+
$archivesToCreateInvalidationRowsFor[$row['idsite']][$row['period']][$row['date1']][$row['date2']][$row['name']] = $row['idarchive'];
|
|
|
|
|
|
|
|
|
201 |
}
|
202 |
|
203 |
$now = Date::now()->getDatetime();
|
204 |
|
205 |
$existingInvalidations = $this->getExistingInvalidations($idSites, $periodCondition, $nameCondition);
|
206 |
|
207 |
+
$hashesOfAllSegmentsToArchiveInCoreArchive = Rules::getSegmentsToProcess($idSites);
|
208 |
+
$hashesOfAllSegmentsToArchiveInCoreArchive = array_map(function ($definition) {
|
209 |
+
return Segment::getSegmentHash($definition);
|
210 |
+
}, $hashesOfAllSegmentsToArchiveInCoreArchive);
|
211 |
+
|
212 |
$dummyArchives = [];
|
213 |
foreach ($idSites as $idSite) {
|
214 |
try {
|
232 |
$date1 = $period->getDateStart()->toString();
|
233 |
$date2 = $period->getDateEnd()->toString();
|
234 |
|
235 |
+
// we insert rows for the doneFlag we want to invalidate + any others we invalidated when doing the LIKE above.
|
236 |
+
// if we invalidated something in the archive tables, we want to make sure it appears in the invalidation queue,
|
237 |
+
// so we'll eventually reprocess it.
|
238 |
+
$doneFlagsFound = $archivesToCreateInvalidationRowsFor[$idSite][$period->getId()][$date1][$date2] ?? [];
|
239 |
+
$doneFlagsFound = array_keys($doneFlagsFound);
|
240 |
+
$doneFlagsToCheck = array_merge([$doneFlag], $doneFlagsFound);
|
241 |
+
$doneFlagsToCheck = array_unique($doneFlagsToCheck);
|
242 |
+
|
243 |
+
foreach ($doneFlagsToCheck as $doneFlagToCheck) {
|
244 |
+
$key = $this->makeExistingInvalidationArrayKey($idSite, $date1, $date2, $period->getId(), $doneFlagToCheck, $name);
|
245 |
+
if (!empty($existingInvalidations[$key])) {
|
246 |
+
continue; // avoid adding duplicates where possible
|
247 |
+
}
|
248 |
+
|
249 |
+
$hash = $this->getHashFromDoneFlag($doneFlagToCheck);
|
250 |
+
if ($doneFlagToCheck != $doneFlag
|
251 |
+
&& (empty($hash)
|
252 |
+
|| !in_array($hash, $hashesOfAllSegmentsToArchiveInCoreArchive)
|
253 |
+
|| strpos($doneFlagToCheck, '.') !== false)
|
254 |
+
) {
|
255 |
+
continue; // the done flag is for a segment that is not auto archive or a plugin specific archive, so we don't want to process it.
|
256 |
+
}
|
257 |
|
258 |
+
$idArchive = $archivesToCreateInvalidationRowsFor[$idSite][$period->getId()][$date1][$date2][$doneFlagToCheck] ?? null;
|
259 |
+
|
260 |
+
$dummyArchives[] = [
|
261 |
+
'idarchive' => $idArchive,
|
262 |
+
'name' => $doneFlagToCheck,
|
263 |
+
'report' => $name,
|
264 |
+
'idsite' => $idSite,
|
265 |
+
'date1' => $period->getDateStart()->getDatetime(),
|
266 |
+
'date2' => $period->getDateEnd()->getDatetime(),
|
267 |
+
'period' => $period->getId(),
|
268 |
+
'ts_invalidated' => $now,
|
269 |
+
];
|
270 |
+
}
|
271 |
}
|
272 |
}
|
273 |
|
327 |
|
328 |
/** @var Period $period */
|
329 |
$dateConditions[] = "(date1 <= ? AND ? <= date2)";
|
330 |
+
$bind[] = $period->getDateStart()->getDatetime();
|
331 |
+
$bind[] = $period->getDateEnd()->getDatetime();
|
332 |
|
333 |
$dateConditionsSql = implode(" OR ", $dateConditions);
|
334 |
$periodConditions[] = "(period = 5 AND ($dateConditionsSql))";
|
689 |
return true;
|
690 |
}
|
691 |
|
692 |
+
// archive was not originally started or was started within 24 hours, we assume it's ongoing and another process
|
693 |
+
// (on this machine or another) is actively archiving it.
|
694 |
+
if (empty($invalidation['ts_started'])
|
695 |
+
|| $invalidation['ts_started'] > Date::now()->subDay(1)->getTimestamp()
|
696 |
+
) {
|
697 |
+
return false;
|
|
|
|
|
698 |
}
|
699 |
|
700 |
+
// archive was started over 24 hours ago, we assume it failed and take it over
|
701 |
+
Db::query("UPDATE `$table` SET `status` = ?, ts_started = NOW() WHERE idinvalidation = ?", [
|
702 |
+
ArchiveInvalidator::INVALIDATION_STATUS_IN_PROGRESS,
|
703 |
+
$invalidation['idinvalidation'],
|
704 |
+
]);
|
705 |
+
|
706 |
// remove similar invalidations w/ lesser idinvalidation values
|
707 |
$bind = [
|
708 |
$invalidation['idsite'],
|
764 |
public function getNextInvalidatedArchive($idSite, $archivingStartTime, $idInvalidationsToExclude = null, $useLimit = true)
|
765 |
{
|
766 |
$table = Common::prefixTable('archive_invalidations');
|
767 |
+
$sql = "SELECT *
|
768 |
FROM `$table`
|
769 |
WHERE idsite = ? AND status != ? AND ts_invalidated <= ?";
|
770 |
$bind = [
|
981 |
$position = strpos($pair, '.');
|
982 |
return $position === false || $position === strlen($pair) - 1;
|
983 |
}
|
984 |
+
|
985 |
+
private function getHashFromDoneFlag($doneFlag)
|
986 |
+
{
|
987 |
+
preg_match('/^done([a-zA-Z0-9]+)/', $doneFlag, $matches);
|
988 |
+
return $matches[1] ?? '';
|
989 |
+
}
|
990 |
}
|
app/core/DataTable.php
CHANGED
@@ -432,6 +432,11 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess
|
|
432 |
return $this->totalsRow;
|
433 |
}
|
434 |
|
|
|
|
|
|
|
|
|
|
|
435 |
/**
|
436 |
* Returns the name of the column this table was sorted by (if any).
|
437 |
*
|
@@ -1352,7 +1357,19 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess
|
|
1352 |
}
|
1353 |
|
1354 |
if (isset($this->summaryRow)) {
|
1355 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1356 |
}
|
1357 |
|
1358 |
if (!empty($metadata)) {
|
432 |
return $this->totalsRow;
|
433 |
}
|
434 |
|
435 |
+
public function getSummaryRow()
|
436 |
+
{
|
437 |
+
return $this->summaryRow;
|
438 |
+
}
|
439 |
+
|
440 |
/**
|
441 |
* Returns the name of the column this table was sorted by (if any).
|
442 |
*
|
1357 |
}
|
1358 |
|
1359 |
if (isset($this->summaryRow)) {
|
1360 |
+
$id = self::ID_SUMMARY_ROW;
|
1361 |
+
$row = $this->summaryRow;
|
1362 |
+
|
1363 |
+
// duplicating code above so we don't create a new array w/ getRows() above in this function which is
|
1364 |
+
// used heavily in matomo.
|
1365 |
+
if (isset($consecutiveSubtableIds[$id])) {
|
1366 |
+
$backup = $row->subtableId;
|
1367 |
+
$row->subtableId = $consecutiveSubtableIds[$id];
|
1368 |
+
$rows[$id] = $row->export();
|
1369 |
+
$row->subtableId = $backup;
|
1370 |
+
} else {
|
1371 |
+
$rows[$id] = $row->export();
|
1372 |
+
}
|
1373 |
}
|
1374 |
|
1375 |
if (!empty($metadata)) {
|
app/core/DataTable/Filter/PivotByDimension.php
CHANGED
@@ -349,6 +349,10 @@ class PivotByDimension extends BaseFilter
|
|
349 |
}
|
350 |
}
|
351 |
|
|
|
|
|
|
|
|
|
352 |
$this->thisReport = $report;
|
353 |
|
354 |
$this->subtableDimension = $this->thisReport->getSubtableDimension();
|
349 |
}
|
350 |
}
|
351 |
|
352 |
+
if (empty($report)) {
|
353 |
+
throw new \Exception("This report does not support pivot.");
|
354 |
+
}
|
355 |
+
|
356 |
$this->thisReport = $report;
|
357 |
|
358 |
$this->subtableDimension = $this->thisReport->getSubtableDimension();
|
app/core/DataTable/Renderer/Csv.php
CHANGED
@@ -151,7 +151,7 @@ class Csv extends Renderer
|
|
151 |
// when in xml we would output <result date="2008-01-15" />
|
152 |
if (!empty($returned)) {
|
153 |
foreach ($returned as &$row) {
|
154 |
-
$row = $currentLinePrefix . $this->separator . $row;
|
155 |
}
|
156 |
$str .= "\n" . implode("\n", $returned);
|
157 |
}
|
151 |
// when in xml we would output <result date="2008-01-15" />
|
152 |
if (!empty($returned)) {
|
153 |
foreach ($returned as &$row) {
|
154 |
+
$row = $this->formatValue($currentLinePrefix) . $this->separator . $row;
|
155 |
}
|
156 |
$str .= "\n" . implode("\n", $returned);
|
157 |
}
|
app/core/DataTable/Row.php
CHANGED
@@ -643,8 +643,10 @@ class Row extends \ArrayObject
|
|
643 |
$thisColumnValue = 0;
|
644 |
} else if (!is_numeric($thisColumnValue)) {
|
645 |
$label = $this->getColumn('label');
|
|
|
|
|
646 |
throw new \Exception(sprintf('Trying to sum unsupported operands for column %s in row with label = %s: %s + %s',
|
647 |
-
$columnName, $label,
|
648 |
}
|
649 |
|
650 |
return $thisColumnValue + $columnToSumValue;
|
@@ -779,4 +781,13 @@ class Row extends \ArrayObject
|
|
779 |
StaticContainer::get(LoggerInterface::class)->warning("{exception}", ['exception' => $ex]);
|
780 |
}
|
781 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
782 |
}
|
643 |
$thisColumnValue = 0;
|
644 |
} else if (!is_numeric($thisColumnValue)) {
|
645 |
$label = $this->getColumn('label');
|
646 |
+
$thisColumnDescription = $this->getColumnValueDescriptionForError($thisColumnValue);
|
647 |
+
$columnToSumValueDescription = $this->getColumnValueDescriptionForError($columnToSumValue);
|
648 |
throw new \Exception(sprintf('Trying to sum unsupported operands for column %s in row with label = %s: %s + %s',
|
649 |
+
$columnName, $label, $thisColumnDescription, $columnToSumValueDescription));
|
650 |
}
|
651 |
|
652 |
return $thisColumnValue + $columnToSumValue;
|
781 |
StaticContainer::get(LoggerInterface::class)->warning("{exception}", ['exception' => $ex]);
|
782 |
}
|
783 |
}
|
784 |
+
|
785 |
+
private function getColumnValueDescriptionForError($value)
|
786 |
+
{
|
787 |
+
$result = gettype($value);
|
788 |
+
if (is_array($result)) {
|
789 |
+
$result .= ' ' . json_encode($value);
|
790 |
+
}
|
791 |
+
return $result;
|
792 |
+
}
|
793 |
}
|
app/core/Date.php
CHANGED
@@ -800,7 +800,7 @@ class Date
|
|
800 |
}
|
801 |
|
802 |
if ($ucfirst) {
|
803 |
-
$out =
|
804 |
}
|
805 |
|
806 |
return $out;
|
800 |
}
|
801 |
|
802 |
if ($ucfirst) {
|
803 |
+
$out = mb_strtoupper(mb_substr($out, 0, 1)) . mb_substr($out, 1);
|
804 |
}
|
805 |
|
806 |
return $out;
|
app/core/Db.php
CHANGED
@@ -184,6 +184,10 @@ class Db
|
|
184 |
|
185 |
$db = @Adapter::factory($dbConfig['adapter'], $dbConfig);
|
186 |
|
|
|
|
|
|
|
|
|
187 |
self::$readerConnection = $db;
|
188 |
}
|
189 |
|
@@ -805,6 +809,8 @@ class Db
|
|
805 |
|
806 |
private static function logSql($functionName, $sql, $parameters = array())
|
807 |
{
|
|
|
|
|
808 |
if (self::$logQueries === false
|
809 |
|| @Config::getInstance()->Debug['log_sql_queries'] != 1
|
810 |
) {
|
@@ -815,6 +821,23 @@ class Db
|
|
815 |
Log::debug("Db::%s() executing SQL: %s", $functionName, $sql);
|
816 |
}
|
817 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
818 |
/**
|
819 |
* @param bool $enable
|
820 |
*/
|
184 |
|
185 |
$db = @Adapter::factory($dbConfig['adapter'], $dbConfig);
|
186 |
|
187 |
+
if (!empty($dbConfig['aurora_readonly_read_committed'])) {
|
188 |
+
$db->exec('set session aurora_read_replica_read_committed = ON;set session transaction isolation level read committed;');
|
189 |
+
}
|
190 |
+
|
191 |
self::$readerConnection = $db;
|
192 |
}
|
193 |
|
809 |
|
810 |
private static function logSql($functionName, $sql, $parameters = array())
|
811 |
{
|
812 |
+
self::checkBoundParametersIfInDevMode($sql, $parameters);
|
813 |
+
|
814 |
if (self::$logQueries === false
|
815 |
|| @Config::getInstance()->Debug['log_sql_queries'] != 1
|
816 |
) {
|
821 |
Log::debug("Db::%s() executing SQL: %s", $functionName, $sql);
|
822 |
}
|
823 |
|
824 |
+
private static function checkBoundParametersIfInDevMode($sql, $parameters)
|
825 |
+
{
|
826 |
+
if (!Development::isEnabled()) {
|
827 |
+
return;
|
828 |
+
}
|
829 |
+
|
830 |
+
if (!is_array($parameters)) {
|
831 |
+
$parameters = [$parameters];
|
832 |
+
}
|
833 |
+
|
834 |
+
foreach ($parameters as $index => $parameter) {
|
835 |
+
if ($parameter instanceof Date) {
|
836 |
+
throw new \Exception("Found bound parameter (index = $index) is Date instance which will not work correctly in following SQL: $sql");
|
837 |
+
}
|
838 |
+
}
|
839 |
+
}
|
840 |
+
|
841 |
/**
|
842 |
* @param bool $enable
|
843 |
*/
|
app/core/Db/Adapter.php
CHANGED
@@ -9,6 +9,7 @@
|
|
9 |
namespace Piwik\Db;
|
10 |
|
11 |
use Zend_Db_Table;
|
|
|
12 |
|
13 |
/**
|
14 |
*/
|
@@ -45,14 +46,24 @@ class Adapter
|
|
45 |
$infos[$key] = $val;
|
46 |
}
|
47 |
|
48 |
-
$adapter
|
49 |
|
50 |
if ($connect) {
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
}
|
57 |
|
58 |
return $adapter;
|
@@ -129,4 +140,28 @@ class Adapter
|
|
129 |
{
|
130 |
return strtolower($adapterName) === 'pdo/mysql';
|
131 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
}
|
9 |
namespace Piwik\Db;
|
10 |
|
11 |
use Zend_Db_Table;
|
12 |
+
use Piwik\Piwik;
|
13 |
|
14 |
/**
|
15 |
*/
|
46 |
$infos[$key] = $val;
|
47 |
}
|
48 |
|
49 |
+
$adapter = new $className($infos);
|
50 |
|
51 |
if ($connect) {
|
52 |
+
try {
|
53 |
+
$adapter->getConnection();
|
54 |
+
|
55 |
+
Zend_Db_Table::setDefaultAdapter($adapter);
|
56 |
+
// we don't want the connection information to appear in the logs
|
57 |
+
$adapter->resetConfig();
|
58 |
+
} catch(\Exception $e) {
|
59 |
+
// we don't want certain exceptions to leak information
|
60 |
+
$msg = self::overriddenExceptionMessage($e->getMessage());
|
61 |
+
if ('' !== $msg) {
|
62 |
+
throw new \Exception($msg);
|
63 |
+
}
|
64 |
+
|
65 |
+
throw $e;
|
66 |
+
}
|
67 |
}
|
68 |
|
69 |
return $adapter;
|
140 |
{
|
141 |
return strtolower($adapterName) === 'pdo/mysql';
|
142 |
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Intercepts certain exception messages and replaces leaky ones with ones that don't reveal too much info
|
146 |
+
* @param string $message
|
147 |
+
* @return string
|
148 |
+
*/
|
149 |
+
public static function overriddenExceptionMessage($message)
|
150 |
+
{
|
151 |
+
$safeMessageMap = array(
|
152 |
+
// add any exception search terms and their replacement message here
|
153 |
+
'[2006]' => Piwik::translate('General_ExceptionDatabaseUnavailable'),
|
154 |
+
'MySQL server has gone away' => Piwik::translate('General_ExceptionDatabaseUnavailable'),
|
155 |
+
'[1698]' => Piwik::translate('General_ExceptionDatabaseAccess'),
|
156 |
+
'Access denied' => Piwik::translate('General_ExceptionDatabaseAccess')
|
157 |
+
);
|
158 |
+
|
159 |
+
foreach ($safeMessageMap as $search_term => $safeMessage) {
|
160 |
+
if (strpos($message, $search_term) !== false) {
|
161 |
+
return $safeMessage;
|
162 |
+
}
|
163 |
+
}
|
164 |
+
|
165 |
+
return '';
|
166 |
+
}
|
167 |
}
|
app/core/Db/BatchInsert.php
CHANGED
@@ -31,12 +31,13 @@ class BatchInsert
|
|
31 |
*/
|
32 |
public static function tableInsertBatchIterate($tableName, $fields, $values, $ignoreWhenDuplicate = true)
|
33 |
{
|
|
|
34 |
$fieldList = '(' . join(',', $fields) . ')';
|
35 |
$ignore = $ignoreWhenDuplicate ? 'IGNORE' : '';
|
36 |
|
37 |
foreach ($values as $row) {
|
38 |
$row = array_values($row);
|
39 |
-
$query = "INSERT $ignore INTO " . $tableName . "
|
40 |
$fieldList
|
41 |
VALUES (" . Common::getSqlStringFieldsArray($row) . ")";
|
42 |
Db::query($query, $row);
|
31 |
*/
|
32 |
public static function tableInsertBatchIterate($tableName, $fields, $values, $ignoreWhenDuplicate = true)
|
33 |
{
|
34 |
+
$tableName = preg_replace('/[^a-zA-Z\d_-]/', '', $tableName);
|
35 |
$fieldList = '(' . join(',', $fields) . ')';
|
36 |
$ignore = $ignoreWhenDuplicate ? 'IGNORE' : '';
|
37 |
|
38 |
foreach ($values as $row) {
|
39 |
$row = array_values($row);
|
40 |
+
$query = "INSERT $ignore INTO `" . $tableName . "`
|
41 |
$fieldList
|
42 |
VALUES (" . Common::getSqlStringFieldsArray($row) . ")";
|
43 |
Db::query($query, $row);
|
app/core/DeviceDetector/DeviceDetectorFactory.php
CHANGED
@@ -39,7 +39,7 @@ class DeviceDetectorFactory
|
|
39 |
|
40 |
public static function getNormalizedUserAgent($userAgent)
|
41 |
{
|
42 |
-
return
|
43 |
}
|
44 |
|
45 |
/**
|
39 |
|
40 |
public static function getNormalizedUserAgent($userAgent)
|
41 |
{
|
42 |
+
return mb_substr(trim($userAgent), 0, 500);
|
43 |
}
|
44 |
|
45 |
/**
|
app/core/EventDispatcher.php
CHANGED
@@ -176,11 +176,19 @@ class EventDispatcher
|
|
176 |
public function postPendingEventsTo($plugin)
|
177 |
{
|
178 |
foreach ($this->pendingEvents as $eventInfo) {
|
179 |
-
|
180 |
$this->postEvent($eventName, $eventParams, $pending = false, array($plugin));
|
181 |
}
|
182 |
}
|
183 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
private function getCallbackFunctionAndGroupNumber($hookInfo)
|
185 |
{
|
186 |
if (is_array($hookInfo)
|
176 |
public function postPendingEventsTo($plugin)
|
177 |
{
|
178 |
foreach ($this->pendingEvents as $eventInfo) {
|
179 |
+
[$eventName, $eventParams] = $eventInfo;
|
180 |
$this->postEvent($eventName, $eventParams, $pending = false, array($plugin));
|
181 |
}
|
182 |
}
|
183 |
|
184 |
+
/**
|
185 |
+
* @internal For testing purpose only
|
186 |
+
*/
|
187 |
+
public function clearCache()
|
188 |
+
{
|
189 |
+
$this->pluginHooks = [];
|
190 |
+
}
|
191 |
+
|
192 |
private function getCallbackFunctionAndGroupNumber($hookInfo)
|
193 |
{
|
194 |
if (is_array($hookInfo)
|
app/core/Exception/NotYetInstalledException.php
CHANGED
@@ -8,6 +8,14 @@
|
|
8 |
*/
|
9 |
namespace Piwik\Exception;
|
10 |
|
|
|
|
|
|
|
|
|
11 |
class NotYetInstalledException extends InvalidRequestParameterException
|
12 |
{
|
|
|
|
|
|
|
|
|
13 |
}
|
8 |
*/
|
9 |
namespace Piwik\Exception;
|
10 |
|
11 |
+
use Piwik\Common;
|
12 |
+
use Piwik\Url;
|
13 |
+
use Throwable;
|
14 |
+
|
15 |
class NotYetInstalledException extends InvalidRequestParameterException
|
16 |
{
|
17 |
+
public function __construct($message = "", $code = 0, Throwable $previous = null)
|
18 |
+
{
|
19 |
+
parent::__construct($message, $code, $previous);
|
20 |
+
}
|
21 |
}
|
app/core/Filesystem.php
CHANGED
@@ -41,7 +41,7 @@ class Filesystem
|
|
41 |
TrackerCache::deleteTrackerCache();
|
42 |
PiwikCache::flushAll();
|
43 |
self::clearPhpCaches();
|
44 |
-
|
45 |
$pluginManager = Plugin\Manager::getInstance();
|
46 |
$plugins = $pluginManager->getLoadedPlugins();
|
47 |
foreach ($plugins as $plugin) {
|
@@ -152,6 +152,7 @@ class Filesystem
|
|
152 |
// check if filesystem is NFS
|
153 |
if ($returnCode == 0
|
154 |
&& count($output) > 1
|
|
|
155 |
) {
|
156 |
return true;
|
157 |
}
|
@@ -161,9 +162,11 @@ class Filesystem
|
|
161 |
$output = @shell_exec($command);
|
162 |
if ($output) {
|
163 |
$commandFailed = (false !== strpos($output, "no file systems processed"));
|
164 |
-
$output =
|
|
|
165 |
if (!$commandFailed
|
166 |
-
&& count($
|
|
|
167 |
// check if filesystem is NFS
|
168 |
return true;
|
169 |
}
|
@@ -184,7 +187,7 @@ class Filesystem
|
|
184 |
* @return array The list of paths that match the pattern.
|
185 |
* @api
|
186 |
*/
|
187 |
-
public static function globr($sDir, $sPattern, $nFlags =
|
188 |
{
|
189 |
if (($aFiles = \_glob("$sDir/$sPattern", $nFlags)) == false) {
|
190 |
$aFiles = array();
|
41 |
TrackerCache::deleteTrackerCache();
|
42 |
PiwikCache::flushAll();
|
43 |
self::clearPhpCaches();
|
44 |
+
|
45 |
$pluginManager = Plugin\Manager::getInstance();
|
46 |
$plugins = $pluginManager->getLoadedPlugins();
|
47 |
foreach ($plugins as $plugin) {
|
152 |
// check if filesystem is NFS
|
153 |
if ($returnCode == 0
|
154 |
&& count($output) > 1
|
155 |
+
&& preg_match('/\bnfs\d?\b/', implode("\n", $output))
|
156 |
) {
|
157 |
return true;
|
158 |
}
|
162 |
$output = @shell_exec($command);
|
163 |
if ($output) {
|
164 |
$commandFailed = (false !== strpos($output, "no file systems processed"));
|
165 |
+
$output = trim($output);
|
166 |
+
$outputArray = explode("\n", $output);
|
167 |
if (!$commandFailed
|
168 |
+
&& count($outputArray) > 1
|
169 |
+
&& preg_match('/\bnfs\d?\b/', $output)) {
|
170 |
// check if filesystem is NFS
|
171 |
return true;
|
172 |
}
|
187 |
* @return array The list of paths that match the pattern.
|
188 |
* @api
|
189 |
*/
|
190 |
+
public static function globr($sDir, $sPattern, $nFlags = 0)
|
191 |
{
|
192 |
if (($aFiles = \_glob("$sDir/$sPattern", $nFlags)) == false) {
|
193 |
$aFiles = array();
|
app/core/FrontController.php
CHANGED
@@ -409,7 +409,8 @@ class FrontController extends Singleton
|
|
409 |
&& Piwik::isUserIsAnonymous()
|
410 |
&& $authAdapter->getLogin() === 'anonymous' //double checking the login
|
411 |
&& Piwik::isUserHasSomeViewAccess()
|
412 |
-
&& Session::isSessionStarted()
|
|
|
413 |
// usually the session would be started when someone logs in using login controller. But in this
|
414 |
// case we need to init session here for anoynymous users
|
415 |
$init = StaticContainer::get(SessionInitializer::class);
|
409 |
&& Piwik::isUserIsAnonymous()
|
410 |
&& $authAdapter->getLogin() === 'anonymous' //double checking the login
|
411 |
&& Piwik::isUserHasSomeViewAccess()
|
412 |
+
&& Session::isSessionStarted()
|
413 |
+
&& Session::isWritable()) { // only if session was started and writable, don't do it eg for API
|
414 |
// usually the session would be started when someone logs in using login controller. But in this
|
415 |
// case we need to init session here for anoynymous users
|
416 |
$init = StaticContainer::get(SessionInitializer::class);
|
app/core/Http.php
CHANGED
@@ -10,6 +10,7 @@ namespace Piwik;
|
|
10 |
|
11 |
use Composer\CaBundle\CaBundle;
|
12 |
use Exception;
|
|
|
13 |
|
14 |
/**
|
15 |
* Contains HTTP client related helper methods that can retrieve content from remote servers
|
@@ -67,6 +68,8 @@ class Http
|
|
67 |
* @param string $httpMethod The HTTP method to use. Defaults to `'GET'`.
|
68 |
* @param string $httpUsername HTTP Auth username
|
69 |
* @param string $httpPassword HTTP Auth password
|
|
|
|
|
70 |
*
|
71 |
* @throws Exception if the response cannot be saved to `$destinationPath`, if the HTTP response cannot be sent,
|
72 |
* if there are more than 5 redirects or if the request times out.
|
@@ -92,13 +95,16 @@ class Http
|
|
92 |
$getExtendedInfo = false,
|
93 |
$httpMethod = 'GET',
|
94 |
$httpUsername = null,
|
95 |
-
$httpPassword = null
|
|
|
96 |
{
|
97 |
// create output file
|
98 |
$file = self::ensureDestinationDirectoryExists($destinationPath);
|
99 |
|
100 |
$acceptLanguage = $acceptLanguage ? 'Accept-Language: ' . $acceptLanguage : '';
|
101 |
-
return self::sendHttpRequestBy(self::getTransportMethod(), $aUrl, $timeout, $userAgent, $destinationPath, $file,
|
|
|
|
|
102 |
}
|
103 |
|
104 |
public static function ensureDestinationDirectoryExists($destinationPath)
|
@@ -115,6 +121,30 @@ class Http
|
|
115 |
return null;
|
116 |
}
|
117 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
/**
|
119 |
* Sends an HTTP request using the specified transport method.
|
120 |
*
|
@@ -135,6 +165,8 @@ class Http
|
|
135 |
* @param string $httpPassword HTTP Auth password
|
136 |
* @param array|string $requestBody If $httpMethod is 'POST' this may accept an array of variables or a string that needs to be posted
|
137 |
* @param array $additionalHeaders List of additional headers to set for the request
|
|
|
|
|
138 |
*
|
139 |
* @return string|array true (or string/array) on success; false on HTTP response error code (1xx or 4xx)
|
140 |
*@throws Exception
|
@@ -156,7 +188,8 @@ class Http
|
|
156 |
$httpPassword = null,
|
157 |
$requestBody = null,
|
158 |
$additionalHeaders = array(),
|
159 |
-
$forcePost = null
|
|
|
160 |
) {
|
161 |
if ($followDepth > 5) {
|
162 |
throw new Exception('Too many redirects (' . $followDepth . ')');
|
@@ -187,6 +220,26 @@ class Http
|
|
187 |
));
|
188 |
}
|
189 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
$contentLength = 0;
|
191 |
$fileLength = 0;
|
192 |
|
@@ -218,7 +271,7 @@ class Http
|
|
218 |
$rangeHeader = 'Range: bytes=' . $rangeBytes . "\r\n";
|
219 |
}
|
220 |
|
221 |
-
|
222 |
|
223 |
// other result data
|
224 |
$status = null;
|
@@ -695,7 +748,7 @@ class Http
|
|
695 |
$split = explode("\r\n\r\n", $response, 2);
|
696 |
|
697 |
if(count($split) == 2) {
|
698 |
-
|
699 |
} else {
|
700 |
$response = '';
|
701 |
$header = $split;
|
@@ -972,7 +1025,7 @@ class Http
|
|
972 |
return;
|
973 |
}
|
974 |
|
975 |
-
|
976 |
$name = trim($name);
|
977 |
$headers[$name] = trim($value);
|
978 |
|
10 |
|
11 |
use Composer\CaBundle\CaBundle;
|
12 |
use Exception;
|
13 |
+
use Piwik\Container\StaticContainer;
|
14 |
|
15 |
/**
|
16 |
* Contains HTTP client related helper methods that can retrieve content from remote servers
|
68 |
* @param string $httpMethod The HTTP method to use. Defaults to `'GET'`.
|
69 |
* @param string $httpUsername HTTP Auth username
|
70 |
* @param string $httpPassword HTTP Auth password
|
71 |
+
* @param bool $checkHostIsAllowed whether we should check if the target host is allowed or not. This should only
|
72 |
+
* be set to false when using a hardcoded URL.
|
73 |
*
|
74 |
* @throws Exception if the response cannot be saved to `$destinationPath`, if the HTTP response cannot be sent,
|
75 |
* if there are more than 5 redirects or if the request times out.
|
95 |
$getExtendedInfo = false,
|
96 |
$httpMethod = 'GET',
|
97 |
$httpUsername = null,
|
98 |
+
$httpPassword = null,
|
99 |
+
$checkHostIsAllowed = true)
|
100 |
{
|
101 |
// create output file
|
102 |
$file = self::ensureDestinationDirectoryExists($destinationPath);
|
103 |
|
104 |
$acceptLanguage = $acceptLanguage ? 'Accept-Language: ' . $acceptLanguage : '';
|
105 |
+
return self::sendHttpRequestBy(self::getTransportMethod(), $aUrl, $timeout, $userAgent, $destinationPath, $file,
|
106 |
+
$followDepth, $acceptLanguage, $acceptInvalidSslCertificate = false, $byteRange, $getExtendedInfo, $httpMethod,
|
107 |
+
$httpUsername, $httpPassword, null, [], null, $checkHostIsAllowed);
|
108 |
}
|
109 |
|
110 |
public static function ensureDestinationDirectoryExists($destinationPath)
|
121 |
return null;
|
122 |
}
|
123 |
|
124 |
+
private static function convertWildcardToPattern($wildcardHost)
|
125 |
+
{
|
126 |
+
$flexibleStart = $flexibleEnd = false;
|
127 |
+
if (strpos($wildcardHost, '*.') === 0) {
|
128 |
+
$flexibleStart = true;
|
129 |
+
$wildcardHost = substr($wildcardHost, 2);
|
130 |
+
}
|
131 |
+
if (Common::stringEndsWith($wildcardHost, '.*')) {
|
132 |
+
$flexibleEnd = true;
|
133 |
+
$wildcardHost = substr($wildcardHost, 0, -2);
|
134 |
+
}
|
135 |
+
$pattern = preg_quote($wildcardHost);
|
136 |
+
|
137 |
+
if ($flexibleStart) {
|
138 |
+
$pattern = '.*\.' . $pattern;
|
139 |
+
}
|
140 |
+
|
141 |
+
if ($flexibleEnd) {
|
142 |
+
$pattern .= '\..*';
|
143 |
+
}
|
144 |
+
|
145 |
+
return '/^' . $pattern . '$/i';
|
146 |
+
}
|
147 |
+
|
148 |
/**
|
149 |
* Sends an HTTP request using the specified transport method.
|
150 |
*
|
165 |
* @param string $httpPassword HTTP Auth password
|
166 |
* @param array|string $requestBody If $httpMethod is 'POST' this may accept an array of variables or a string that needs to be posted
|
167 |
* @param array $additionalHeaders List of additional headers to set for the request
|
168 |
+
* @param bool $checkHostIsAllowed whether we should check if the target host is allowed or not. This should only
|
169 |
+
* be set to false when using a hardcoded URL.
|
170 |
*
|
171 |
* @return string|array true (or string/array) on success; false on HTTP response error code (1xx or 4xx)
|
172 |
*@throws Exception
|
188 |
$httpPassword = null,
|
189 |
$requestBody = null,
|
190 |
$additionalHeaders = array(),
|
191 |
+
$forcePost = null,
|
192 |
+
$checkHostIsAllowed = true
|
193 |
) {
|
194 |
if ($followDepth > 5) {
|
195 |
throw new Exception('Too many redirects (' . $followDepth . ')');
|
220 |
));
|
221 |
}
|
222 |
|
223 |
+
if ($checkHostIsAllowed) {
|
224 |
+
$disallowedHosts = StaticContainer::get('http.blocklist.hosts');
|
225 |
+
|
226 |
+
$isBlocked = false;
|
227 |
+
|
228 |
+
foreach ($disallowedHosts as $host) {
|
229 |
+
if (preg_match(self::convertWildcardToPattern($host), $parsedUrl['host']) === 1) {
|
230 |
+
$isBlocked = true;
|
231 |
+
break;
|
232 |
+
}
|
233 |
+
}
|
234 |
+
|
235 |
+
if ($isBlocked) {
|
236 |
+
throw new Exception(sprintf(
|
237 |
+
'Hostname %s is in list of disallowed hosts',
|
238 |
+
$parsedUrl['host']
|
239 |
+
));
|
240 |
+
}
|
241 |
+
}
|
242 |
+
|
243 |
$contentLength = 0;
|
244 |
$fileLength = 0;
|
245 |
|
271 |
$rangeHeader = 'Range: bytes=' . $rangeBytes . "\r\n";
|
272 |
}
|
273 |
|
274 |
+
[$proxyHost, $proxyPort, $proxyUser, $proxyPassword] = self::getProxyConfiguration($aUrl);
|
275 |
|
276 |
// other result data
|
277 |
$status = null;
|
748 |
$split = explode("\r\n\r\n", $response, 2);
|
749 |
|
750 |
if(count($split) == 2) {
|
751 |
+
[$header, $response] = $split;
|
752 |
} else {
|
753 |
$response = '';
|
754 |
$header = $split;
|
1025 |
return;
|
1026 |
}
|
1027 |
|
1028 |
+
[$name, $value] = $parts;
|
1029 |
$name = trim($name);
|
1030 |
$headers[$name] = trim($value);
|
1031 |
|
app/core/IP.php
CHANGED
@@ -78,7 +78,11 @@ class IP
|
|
78 |
$proxyIps = array();
|
79 |
}
|
80 |
|
81 |
-
$
|
|
|
|
|
|
|
|
|
82 |
|
83 |
// examine proxy headers
|
84 |
foreach ($proxyHeaders as $proxyHeader) {
|
@@ -86,7 +90,11 @@ class IP
|
|
86 |
// this may be buggy if someone has proxy IPs and proxy host headers configured as
|
87 |
// `$_SERVER[$proxyHeader]` could be eg $_SERVER['HTTP_X_FORWARDED_HOST'] and
|
88 |
// include an actual host name, not an IP
|
89 |
-
|
|
|
|
|
|
|
|
|
90 |
if (strlen($proxyIp) && stripos($proxyIp, 'unknown') === false) {
|
91 |
return $proxyIp;
|
92 |
}
|
@@ -107,20 +115,38 @@ class IP
|
|
107 |
{
|
108 |
$p = strrpos($csv, ',');
|
109 |
if ($p !== false) {
|
110 |
-
$elements =
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
}
|
116 |
-
$ip = \Matomo\Network\IP::fromStringIP(IPUtils::sanitizeIp($element));
|
117 |
-
if (empty($excludedIps) || (!in_array($element, $excludedIps) && !$ip->isInRanges($excludedIps))) {
|
118 |
-
return $element;
|
119 |
-
}
|
120 |
-
}
|
121 |
|
122 |
-
|
|
|
|
|
|
|
|
|
|
|
123 |
}
|
124 |
return trim(Common::sanitizeInputValue($csv));
|
125 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
}
|
78 |
$proxyIps = array();
|
79 |
}
|
80 |
|
81 |
+
$shouldReadLastProxyIp = Config::getInstance()->General['proxy_ip_read_last_in_list'] == 1;
|
82 |
+
|
83 |
+
if (!$shouldReadLastProxyIp) {
|
84 |
+
$proxyIps[] = $default;
|
85 |
+
}
|
86 |
|
87 |
// examine proxy headers
|
88 |
foreach ($proxyHeaders as $proxyHeader) {
|
90 |
// this may be buggy if someone has proxy IPs and proxy host headers configured as
|
91 |
// `$_SERVER[$proxyHeader]` could be eg $_SERVER['HTTP_X_FORWARDED_HOST'] and
|
92 |
// include an actual host name, not an IP
|
93 |
+
if ($shouldReadLastProxyIp) {
|
94 |
+
$proxyIp = self::getLastIpFromList($_SERVER[$proxyHeader], $proxyIps);
|
95 |
+
} else {
|
96 |
+
$proxyIp = self::getFirstIpFromList($_SERVER[$proxyHeader], $proxyIps);
|
97 |
+
}
|
98 |
if (strlen($proxyIp) && stripos($proxyIp, 'unknown') === false) {
|
99 |
return $proxyIp;
|
100 |
}
|
115 |
{
|
116 |
$p = strrpos($csv, ',');
|
117 |
if ($p !== false) {
|
118 |
+
$elements = self::getIpsFromList($csv, $excludedIps);
|
119 |
+
return reset($elements) ?: '';
|
120 |
+
}
|
121 |
+
return trim(Common::sanitizeInputValue($csv));
|
122 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
|
124 |
+
public static function getLastIpFromList($csv, $excludedIps = null)
|
125 |
+
{
|
126 |
+
$p = strrpos($csv, ',');
|
127 |
+
if ($p !== false) {
|
128 |
+
$elements = self::getIpsFromList($csv, $excludedIps);
|
129 |
+
return end($elements) ?: '';
|
130 |
}
|
131 |
return trim(Common::sanitizeInputValue($csv));
|
132 |
}
|
133 |
+
|
134 |
+
private static function getIpsFromList(string $csv, ?array $excludedIps)
|
135 |
+
{
|
136 |
+
$result = [];
|
137 |
+
|
138 |
+
$elements = explode(',', $csv);
|
139 |
+
foreach ($elements as $ipString) {
|
140 |
+
$element = trim(Common::sanitizeInputValue($ipString));
|
141 |
+
if(empty($element)) {
|
142 |
+
continue;
|
143 |
+
}
|
144 |
+
$ip = \Matomo\Network\IP::fromStringIP(IPUtils::sanitizeIp($element));
|
145 |
+
if (empty($excludedIps) || (!in_array($element, $excludedIps) && !$ip->isInRanges($excludedIps))) {
|
146 |
+
$result[] = $element;
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
return $result;
|
151 |
+
}
|
152 |
}
|
app/core/Log.php
CHANGED
@@ -38,8 +38,9 @@ use Psr\Log\LoggerInterface;
|
|
38 |
* The following configuration options can be set:
|
39 |
*
|
40 |
* - `log_writers[]`: This is an array of log writer IDs. The three log writers provided
|
41 |
-
* by Piwik core are **file**, **screen
|
42 |
-
* get more by installing plugins. The default
|
|
|
43 |
* - `log_level`: The current log level. Can be **ERROR**, **WARN**, **INFO**, **DEBUG**,
|
44 |
* or **VERBOSE**. Log entries made with a log level that is as or more
|
45 |
* severe than the current log level will be outputted. Others will be
|
@@ -48,6 +49,9 @@ use Psr\Log\LoggerInterface;
|
|
48 |
* to log to or a path to a directory to store logs in. If a
|
49 |
* directory, the file name is piwik.log. Can be relative to
|
50 |
* Piwik's root dir or an absolute path. Defaults to **tmp/logs**.
|
|
|
|
|
|
|
51 |
*
|
52 |
*
|
53 |
* @deprecated Inject and use Psr\Log\LoggerInterface instead of this class.
|
38 |
* The following configuration options can be set:
|
39 |
*
|
40 |
* - `log_writers[]`: This is an array of log writer IDs. The three log writers provided
|
41 |
+
* by Piwik core are **file**, **screen**, **database**, **errorlog**,
|
42 |
+
* and **syslog**. You can get more by installing plugins. The default
|
43 |
+
* value is **screen**.
|
44 |
* - `log_level`: The current log level. Can be **ERROR**, **WARN**, **INFO**, **DEBUG**,
|
45 |
* or **VERBOSE**. Log entries made with a log level that is as or more
|
46 |
* severe than the current log level will be outputted. Others will be
|
49 |
* to log to or a path to a directory to store logs in. If a
|
50 |
* directory, the file name is piwik.log. Can be relative to
|
51 |
* Piwik's root dir or an absolute path. Defaults to **tmp/logs**.
|
52 |
+
* - `logger_syslog_ident`: If configured to log to syslog, mark them with this
|
53 |
+
* identifier string. This acts as an easy-to-find tag in
|
54 |
+
* the syslog.
|
55 |
*
|
56 |
*
|
57 |
* @deprecated Inject and use Psr\Log\LoggerInterface instead of this class.
|
app/core/LogDeleter.php
CHANGED
@@ -96,7 +96,8 @@ class LogDeleter
|
|
96 |
$logsDeleted = 0;
|
97 |
$logPurger = $this;
|
98 |
$this->rawLogDao->forAllLogs('log_visit', $fields, $conditions, $iterationStep, function ($logs) use ($logPurger, &$logsDeleted, $afterChunkDeleted) {
|
99 |
-
$ids = array_map(function ($row) { return reset($row); }, $logs);
|
|
|
100 |
$logsDeleted += $logPurger->deleteVisits($ids);
|
101 |
|
102 |
if (!empty($afterChunkDeleted)) {
|
96 |
$logsDeleted = 0;
|
97 |
$logPurger = $this;
|
98 |
$this->rawLogDao->forAllLogs('log_visit', $fields, $conditions, $iterationStep, function ($logs) use ($logPurger, &$logsDeleted, $afterChunkDeleted) {
|
99 |
+
$ids = array_map(function ($row) { return (int) (reset($row)); }, $logs);
|
100 |
+
sort($ids);
|
101 |
$logsDeleted += $logPurger->deleteVisits($ids);
|
102 |
|
103 |
if (!empty($afterChunkDeleted)) {
|
app/core/Mail.php
CHANGED
@@ -8,10 +8,13 @@
|
|
8 |
*/
|
9 |
namespace Piwik;
|
10 |
|
|
|
|
|
11 |
use Piwik\Container\StaticContainer;
|
12 |
use Piwik\Email\ContentGenerator;
|
13 |
use Piwik\Plugins\CoreAdminHome\CustomLogo;
|
14 |
use Piwik\Translation\Translator;
|
|
|
15 |
|
16 |
/**
|
17 |
* Class for sending mails
|
@@ -267,7 +270,7 @@ class Mail
|
|
267 |
/**
|
268 |
* Sends the mail
|
269 |
*
|
270 |
-
* @return bool
|
271 |
* @throws \DI\NotFoundException
|
272 |
*/
|
273 |
public function send()
|
@@ -289,6 +292,23 @@ class Mail
|
|
289 |
return StaticContainer::get('Piwik\Mail\Transport')->send($mail);
|
290 |
}
|
291 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
292 |
/**
|
293 |
* Enables SMTP debugging
|
294 |
*
|
8 |
*/
|
9 |
namespace Piwik;
|
10 |
|
11 |
+
use DI\NotFoundException;
|
12 |
+
use DI\DependencyException;
|
13 |
use Piwik\Container\StaticContainer;
|
14 |
use Piwik\Email\ContentGenerator;
|
15 |
use Piwik\Plugins\CoreAdminHome\CustomLogo;
|
16 |
use Piwik\Translation\Translator;
|
17 |
+
use Psr\Log\LoggerInterface;
|
18 |
|
19 |
/**
|
20 |
* Class for sending mails
|
270 |
/**
|
271 |
* Sends the mail
|
272 |
*
|
273 |
+
* @return bool|null returns null if sending the mail was aborted by the Mail.send event
|
274 |
* @throws \DI\NotFoundException
|
275 |
*/
|
276 |
public function send()
|
292 |
return StaticContainer::get('Piwik\Mail\Transport')->send($mail);
|
293 |
}
|
294 |
|
295 |
+
/**
|
296 |
+
* If the send email process throws an exception, we catch it and log it
|
297 |
+
*
|
298 |
+
* @return void
|
299 |
+
* @throws NotFoundException
|
300 |
+
* @throws DependencyException
|
301 |
+
*/
|
302 |
+
public function safeSend()
|
303 |
+
{
|
304 |
+
try {
|
305 |
+
$this->send();
|
306 |
+
} catch (\Exception $e) {
|
307 |
+
// we do nothing but log if the email send was unsuccessful
|
308 |
+
StaticContainer::get(LoggerInterface::class)->warning('Could not send {class} email: {exception}', ['class' => get_class($this), 'exception' => $e]);
|
309 |
+
}
|
310 |
+
}
|
311 |
+
|
312 |
/**
|
313 |
* Enables SMTP debugging
|
314 |
*
|
app/core/Option.php
CHANGED
@@ -181,7 +181,7 @@ class Option
|
|
181 |
}
|
182 |
|
183 |
$value = Db::fetchOne('SELECT option_value FROM `' . Common::prefixTable('option') . '` ' .
|
184 |
-
'WHERE option_name = ?', $name);
|
185 |
|
186 |
$this->all[$name] = $value;
|
187 |
return $value;
|
181 |
}
|
182 |
|
183 |
$value = Db::fetchOne('SELECT option_value FROM `' . Common::prefixTable('option') . '` ' .
|
184 |
+
'WHERE option_name = ?', [$name]);
|
185 |
|
186 |
$this->all[$name] = $value;
|
187 |
return $value;
|
app/core/Piwik.php
CHANGED
@@ -176,7 +176,7 @@ class Piwik
|
|
176 |
public static function getCurrentUserEmail()
|
177 |
{
|
178 |
$user = APIUsersManager::getInstance()->getUser(Piwik::getCurrentUserLogin());
|
179 |
-
return $user['email'];
|
180 |
}
|
181 |
|
182 |
/**
|
176 |
public static function getCurrentUserEmail()
|
177 |
{
|
178 |
$user = APIUsersManager::getInstance()->getUser(Piwik::getCurrentUserLogin());
|
179 |
+
return $user['email'] ?? '';
|
180 |
}
|
181 |
|
182 |
/**
|
app/core/Plugin/Manager.php
CHANGED
@@ -1184,6 +1184,7 @@ class Manager
|
|
1184 |
if (isset($this->loadedPlugins[$pluginName])) {
|
1185 |
return $this->loadedPlugins[$pluginName];
|
1186 |
}
|
|
|
1187 |
$newPlugin = $this->makePluginClass($pluginName);
|
1188 |
|
1189 |
$this->addLoadedPlugin($pluginName, $newPlugin);
|
1184 |
if (isset($this->loadedPlugins[$pluginName])) {
|
1185 |
return $this->loadedPlugins[$pluginName];
|
1186 |
}
|
1187 |
+
|
1188 |
$newPlugin = $this->makePluginClass($pluginName);
|
1189 |
|
1190 |
$this->addLoadedPlugin($pluginName, $newPlugin);
|
app/core/Profiler.php
CHANGED
@@ -100,12 +100,18 @@ class Profiler
|
|
100 |
|
101 |
private static function maxSumMsFirst($a, $b)
|
102 |
{
|
103 |
-
|
|
|
|
|
|
|
104 |
}
|
105 |
|
106 |
private static function sortTimeDesc($a, $b)
|
107 |
{
|
108 |
-
|
|
|
|
|
|
|
109 |
}
|
110 |
|
111 |
/**
|
100 |
|
101 |
private static function maxSumMsFirst($a, $b)
|
102 |
{
|
103 |
+
if ($a['sum_time_ms'] == $b['sum_time_ms']) {
|
104 |
+
return 0;
|
105 |
+
}
|
106 |
+
return ($a['sum_time_ms'] < $b['sum_time_ms']) ? -1 : 1;
|
107 |
}
|
108 |
|
109 |
private static function sortTimeDesc($a, $b)
|
110 |
{
|
111 |
+
if ($a['sumTimeMs'] == $b['sumTimeMs']) {
|
112 |
+
return 0;
|
113 |
+
}
|
114 |
+
return ($a['sumTimeMs'] < $b['sumTimeMs']) ? -1 : 1;
|
115 |
}
|
116 |
|
117 |
/**
|
app/core/Site.php
CHANGED
@@ -422,6 +422,10 @@ class Site
|
|
422 |
*/
|
423 |
public static function getIdSitesFromIdSitesString($ids, $_restrictSitesToLogin = false)
|
424 |
{
|
|
|
|
|
|
|
|
|
425 |
if ($ids === 'all') {
|
426 |
return API::getInstance()->getSitesIdWithAtLeastViewAccess($_restrictSitesToLogin);
|
427 |
}
|
422 |
*/
|
423 |
public static function getIdSitesFromIdSitesString($ids, $_restrictSitesToLogin = false)
|
424 |
{
|
425 |
+
if (empty($ids)) {
|
426 |
+
return [];
|
427 |
+
}
|
428 |
+
|
429 |
if ($ids === 'all') {
|
430 |
return API::getInstance()->getSitesIdWithAtLeastViewAccess($_restrictSitesToLogin);
|
431 |
}
|
app/core/Tracker.php
CHANGED
@@ -223,7 +223,9 @@ class Tracker
|
|
223 |
try {
|
224 |
self::$db = TrackerDb::connectPiwikTrackerDb();
|
225 |
} catch (Exception $e) {
|
226 |
-
|
|
|
|
|
227 |
}
|
228 |
}
|
229 |
|
223 |
try {
|
224 |
self::$db = TrackerDb::connectPiwikTrackerDb();
|
225 |
} catch (Exception $e) {
|
226 |
+
$code = $e->getCode();
|
227 |
+
// Note: PDOException might return a string as code, but we can't use this for DbException
|
228 |
+
throw new DbException($e->getMessage(), is_int($code) ? $code : 0);
|
229 |
}
|
230 |
}
|
231 |
|
app/core/Tracker/Failures.php
CHANGED
@@ -101,7 +101,7 @@ class Failures
|
|
101 |
if (!empty($token) && $value === $token) {
|
102 |
$params[$key] = '__TOKEN_AUTH__'; // user accidentally posted the token in a wrong field
|
103 |
} elseif (!empty($value) && is_string($value)
|
104 |
-
&&
|
105 |
&& ctype_xdigit($value)) {
|
106 |
$params[$key] = '__TOKEN_AUTH__'; // user maybe posted a token in a different field... it looks like it might be a token
|
107 |
}
|
101 |
if (!empty($token) && $value === $token) {
|
102 |
$params[$key] = '__TOKEN_AUTH__'; // user accidentally posted the token in a wrong field
|
103 |
} elseif (!empty($value) && is_string($value)
|
104 |
+
&& mb_strlen($value) >= 29 && mb_strlen($value) <= 36
|
105 |
&& ctype_xdigit($value)) {
|
106 |
$params[$key] = '__TOKEN_AUTH__'; // user maybe posted a token in a different field... it looks like it might be a token
|
107 |
}
|
app/core/Tracker/GoalManager.php
CHANGED
@@ -731,7 +731,7 @@ class GoalManager
|
|
731 |
if (empty($lastActionTime)) {
|
732 |
$conversion['buster'] = $this->makeRandomMySqlUnsignedInt(10);
|
733 |
} else {
|
734 |
-
$conversion['buster'] = $this->makeRandomMySqlUnsignedInt(2) .
|
735 |
}
|
736 |
}
|
737 |
|
731 |
if (empty($lastActionTime)) {
|
732 |
$conversion['buster'] = $this->makeRandomMySqlUnsignedInt(10);
|
733 |
} else {
|
734 |
+
$conversion['buster'] = $this->makeRandomMySqlUnsignedInt(2) . mb_substr($visitProperties->getProperty('visit_last_action_time'), 2);
|
735 |
}
|
736 |
}
|
737 |
|
app/core/Tracker/PageUrl.php
CHANGED
@@ -179,7 +179,7 @@ class PageUrl
|
|
179 |
}
|
180 |
|
181 |
if (!empty($parsedUrl['host'])) {
|
182 |
-
$parsedUrl['host'] =
|
183 |
}
|
184 |
|
185 |
if (!empty($parsedUrl['fragment'])) {
|
@@ -365,7 +365,7 @@ class PageUrl
|
|
365 |
$hostSiteCache = false;
|
366 |
|
367 |
foreach ($siteUrlCache as $siteUrl) {
|
368 |
-
if (strpos(
|
369 |
$hostSiteCache = true;
|
370 |
break;
|
371 |
}
|
179 |
}
|
180 |
|
181 |
if (!empty($parsedUrl['host'])) {
|
182 |
+
$parsedUrl['host'] = mb_strtolower($parsedUrl['host']);
|
183 |
}
|
184 |
|
185 |
if (!empty($parsedUrl['fragment'])) {
|
365 |
$hostSiteCache = false;
|
366 |
|
367 |
foreach ($siteUrlCache as $siteUrl) {
|
368 |
+
if (strpos(mb_strtolower($siteUrl), mb_strtolower('https://' . $host)) === 0) {
|
369 |
$hostSiteCache = true;
|
370 |
break;
|
371 |
}
|
app/core/Tracker/Request.php
CHANGED
@@ -73,7 +73,6 @@ class Request
|
|
73 |
$this->tokenAuth = $tokenAuth;
|
74 |
$this->timestamp = time();
|
75 |
$this->isEmptyRequest = empty($params);
|
76 |
-
$this->customTimestampDoesNotRequireTokenauthWhenNewerThan = (int) TrackerConfig::getConfigValue('tracking_requests_require_authentication_when_custom_timestamp_newer_than');
|
77 |
|
78 |
// When the 'url' and referrer url parameter are not given, we might be in the 'Simple Image Tracker' mode.
|
79 |
// The URL can default to the Referrer, which will be in this case
|
@@ -90,6 +89,9 @@ class Request
|
|
90 |
|
91 |
// check for 4byte utf8 characters in all tracking params and replace them with � if not support by database
|
92 |
$this->params = $this->replaceUnsupportedUtf8Chars($this->params);
|
|
|
|
|
|
|
93 |
}
|
94 |
|
95 |
protected function replaceUnsupportedUtf8Chars($value, $key=false)
|
@@ -148,7 +150,7 @@ class Request
|
|
148 |
*/
|
149 |
protected function authenticateTrackingApi($tokenAuth)
|
150 |
{
|
151 |
-
$shouldAuthenticate = TrackerConfig::getConfigValue('tracking_requests_require_authentication');
|
152 |
|
153 |
if ($shouldAuthenticate) {
|
154 |
try {
|
@@ -238,11 +240,10 @@ class Request
|
|
238 |
|
239 |
public function isRequestExcluded()
|
240 |
{
|
241 |
-
$
|
242 |
-
$tracker = $config->Tracker;
|
243 |
|
244 |
-
if (!empty($
|
245 |
-
$excludedRequests = explode(',', $
|
246 |
$pattern = '/^(.+?)('.SegmentExpression::MATCH_EQUAL.'|'
|
247 |
.SegmentExpression::MATCH_NOT_EQUAL.'|'
|
248 |
.SegmentExpression::MATCH_CONTAINS.'|'
|
@@ -262,8 +263,8 @@ class Request
|
|
262 |
$valueRightMember = urldecode($matches[3]);
|
263 |
}
|
264 |
$actual = Common::getRequestVar($leftMember, '', 'string', $this->params);
|
265 |
-
$actual =
|
266 |
-
$valueRightMember =
|
267 |
switch ($operation) {
|
268 |
case SegmentExpression::MATCH_EQUAL:
|
269 |
if ($actual === $valueRightMember) {
|
@@ -587,6 +588,15 @@ class Request
|
|
587 |
return $idSite;
|
588 |
}
|
589 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
590 |
public function getIdSite()
|
591 |
{
|
592 |
if (isset($this->idSiteCache)) {
|
@@ -625,7 +635,7 @@ class Request
|
|
625 |
|
626 |
public function shouldUseThirdPartyCookie()
|
627 |
{
|
628 |
-
return
|
629 |
}
|
630 |
|
631 |
public function getThirdPartyCookieVisitorId()
|
@@ -685,22 +695,22 @@ class Request
|
|
685 |
|
686 |
protected function getCookieName()
|
687 |
{
|
688 |
-
return TrackerConfig::getConfigValue('cookie_name');
|
689 |
}
|
690 |
|
691 |
protected function getCookieExpire()
|
692 |
{
|
693 |
-
return $this->getCurrentTimestamp() + TrackerConfig::getConfigValue('cookie_expire');
|
694 |
}
|
695 |
|
696 |
protected function getCookiePath()
|
697 |
{
|
698 |
-
return TrackerConfig::getConfigValue('cookie_path');
|
699 |
}
|
700 |
|
701 |
protected function getCookieDomain()
|
702 |
{
|
703 |
-
return TrackerConfig::getConfigValue('cookie_domain');
|
704 |
}
|
705 |
|
706 |
/**
|
@@ -716,7 +726,7 @@ class Request
|
|
716 |
{
|
717 |
$found = false;
|
718 |
|
719 |
-
if (TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid')) {
|
720 |
// If User ID is set it takes precedence
|
721 |
$userId = $this->getForcedUserId();
|
722 |
if ($userId) {
|
73 |
$this->tokenAuth = $tokenAuth;
|
74 |
$this->timestamp = time();
|
75 |
$this->isEmptyRequest = empty($params);
|
|
|
76 |
|
77 |
// When the 'url' and referrer url parameter are not given, we might be in the 'Simple Image Tracker' mode.
|
78 |
// The URL can default to the Referrer, which will be in this case
|
89 |
|
90 |
// check for 4byte utf8 characters in all tracking params and replace them with � if not support by database
|
91 |
$this->params = $this->replaceUnsupportedUtf8Chars($this->params);
|
92 |
+
|
93 |
+
$this->customTimestampDoesNotRequireTokenauthWhenNewerThan = (int) TrackerConfig::getConfigValue('tracking_requests_require_authentication_when_custom_timestamp_newer_than',
|
94 |
+
$this->getIdSiteIfExists());
|
95 |
}
|
96 |
|
97 |
protected function replaceUnsupportedUtf8Chars($value, $key=false)
|
150 |
*/
|
151 |
protected function authenticateTrackingApi($tokenAuth)
|
152 |
{
|
153 |
+
$shouldAuthenticate = TrackerConfig::getConfigValue('tracking_requests_require_authentication', $this->getIdSiteIfExists());
|
154 |
|
155 |
if ($shouldAuthenticate) {
|
156 |
try {
|
240 |
|
241 |
public function isRequestExcluded()
|
242 |
{
|
243 |
+
$excludedRequests = TrackerConfig::getConfigValue('exclude_requests', $this->getIdSiteIfExists());
|
|
|
244 |
|
245 |
+
if (!empty($excludedRequests)) {
|
246 |
+
$excludedRequests = explode(',', $excludedRequests);
|
247 |
$pattern = '/^(.+?)('.SegmentExpression::MATCH_EQUAL.'|'
|
248 |
.SegmentExpression::MATCH_NOT_EQUAL.'|'
|
249 |
.SegmentExpression::MATCH_CONTAINS.'|'
|
263 |
$valueRightMember = urldecode($matches[3]);
|
264 |
}
|
265 |
$actual = Common::getRequestVar($leftMember, '', 'string', $this->params);
|
266 |
+
$actual = mb_strtolower($actual);
|
267 |
+
$valueRightMember = mb_strtolower($valueRightMember);
|
268 |
switch ($operation) {
|
269 |
case SegmentExpression::MATCH_EQUAL:
|
270 |
if ($actual === $valueRightMember) {
|
588 |
return $idSite;
|
589 |
}
|
590 |
|
591 |
+
public function getIdSiteIfExists()
|
592 |
+
{
|
593 |
+
try {
|
594 |
+
return $this->getIdSite();
|
595 |
+
} catch (UnexpectedWebsiteFoundException $ex) {
|
596 |
+
return null;
|
597 |
+
}
|
598 |
+
}
|
599 |
+
|
600 |
public function getIdSite()
|
601 |
{
|
602 |
if (isset($this->idSiteCache)) {
|
635 |
|
636 |
public function shouldUseThirdPartyCookie()
|
637 |
{
|
638 |
+
return TrackerConfig::getConfigValue('use_third_party_id_cookie', $this->getIdSiteIfExists());
|
639 |
}
|
640 |
|
641 |
public function getThirdPartyCookieVisitorId()
|
695 |
|
696 |
protected function getCookieName()
|
697 |
{
|
698 |
+
return TrackerConfig::getConfigValue('cookie_name', $this->getIdSiteIfExists());
|
699 |
}
|
700 |
|
701 |
protected function getCookieExpire()
|
702 |
{
|
703 |
+
return $this->getCurrentTimestamp() + TrackerConfig::getConfigValue('cookie_expire', $this->getIdSiteIfExists());
|
704 |
}
|
705 |
|
706 |
protected function getCookiePath()
|
707 |
{
|
708 |
+
return TrackerConfig::getConfigValue('cookie_path', $this->getIdSiteIfExists());
|
709 |
}
|
710 |
|
711 |
protected function getCookieDomain()
|
712 |
{
|
713 |
+
return TrackerConfig::getConfigValue('cookie_domain', $this->getIdSiteIfExists());
|
714 |
}
|
715 |
|
716 |
/**
|
726 |
{
|
727 |
$found = false;
|
728 |
|
729 |
+
if (TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid', $this->getIdSiteIfExists())) {
|
730 |
// If User ID is set it takes precedence
|
731 |
$userId = $this->getForcedUserId();
|
732 |
if ($userId) {
|
app/core/Tracker/TrackerConfig.php
CHANGED
@@ -25,9 +25,13 @@ class TrackerConfig
|
|
25 |
Config::getInstance()->Tracker = $section;
|
26 |
}
|
27 |
|
28 |
-
public static function getConfigValue($name)
|
29 |
{
|
30 |
$config = self::getConfig();
|
|
|
|
|
|
|
|
|
31 |
return $config[$name];
|
32 |
}
|
33 |
|
@@ -35,4 +39,10 @@ class TrackerConfig
|
|
35 |
{
|
36 |
return Config::getInstance()->Tracker;
|
37 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
}
|
25 |
Config::getInstance()->Tracker = $section;
|
26 |
}
|
27 |
|
28 |
+
public static function getConfigValue($name, $idSite = null)
|
29 |
{
|
30 |
$config = self::getConfig();
|
31 |
+
if (!empty($idSite)) {
|
32 |
+
$siteSpecificConfig = self::getSiteSpecificConfig($idSite);
|
33 |
+
$config = array_merge($config, $siteSpecificConfig);
|
34 |
+
}
|
35 |
return $config[$name];
|
36 |
}
|
37 |
|
39 |
{
|
40 |
return Config::getInstance()->Tracker;
|
41 |
}
|
42 |
+
|
43 |
+
private static function getSiteSpecificConfig($idSite)
|
44 |
+
{
|
45 |
+
$key = 'Tracker_' . $idSite;
|
46 |
+
return Config::getInstance()->$key;
|
47 |
+
}
|
48 |
}
|
app/core/Tracker/Visit.php
CHANGED
@@ -411,7 +411,7 @@ class Visit implements VisitInterface
|
|
411 |
|
412 |
private static function toCanonicalHost($host)
|
413 |
{
|
414 |
-
$hostLower =
|
415 |
return str_replace('www.', '', $hostLower);
|
416 |
}
|
417 |
|
@@ -586,7 +586,7 @@ class Visit implements VisitInterface
|
|
586 |
$valuesToUpdate['idvisitor'] = $this->request->getVisitorId();
|
587 |
}
|
588 |
|
589 |
-
if (TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid')) {
|
590 |
// User ID takes precedence and overwrites idvisitor value
|
591 |
$userId = $this->request->getForcedUserId();
|
592 |
if ($userId) {
|
411 |
|
412 |
private static function toCanonicalHost($host)
|
413 |
{
|
414 |
+
$hostLower = mb_strtolower($host);
|
415 |
return str_replace('www.', '', $hostLower);
|
416 |
}
|
417 |
|
586 |
$valuesToUpdate['idvisitor'] = $this->request->getVisitorId();
|
587 |
}
|
588 |
|
589 |
+
if (TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid', $this->request->getIdSiteIfExists())) {
|
590 |
// User ID takes precedence and overwrites idvisitor value
|
591 |
$userId = $this->request->getForcedUserId();
|
592 |
if ($userId) {
|
app/core/Tracker/VisitorRecognizer.php
CHANGED
@@ -104,7 +104,7 @@ class VisitorRecognizer
|
|
104 |
$shouldMatchOneFieldOnly = $this->shouldLookupOneVisitorFieldOnly($isVisitorIdToLookup, $request);
|
105 |
list($timeLookBack, $timeLookAhead) = $this->getWindowLookupThisVisit($request);
|
106 |
|
107 |
-
$maxActions = TrackerConfig::getConfigValue('create_new_visit_after_x_actions');
|
108 |
|
109 |
$visitRow = $this->model->findVisitor($idSite, $configId, $idVisitor, $userId, $persistedVisitAttributes, $shouldMatchOneFieldOnly, $isVisitorIdToLookup, $timeLookBack, $timeLookAhead);
|
110 |
|
104 |
$shouldMatchOneFieldOnly = $this->shouldLookupOneVisitorFieldOnly($isVisitorIdToLookup, $request);
|
105 |
list($timeLookBack, $timeLookAhead) = $this->getWindowLookupThisVisit($request);
|
106 |
|
107 |
+
$maxActions = TrackerConfig::getConfigValue('create_new_visit_after_x_actions', $request->getIdSiteIfExists());
|
108 |
|
109 |
$visitRow = $this->model->findVisitor($idSite, $configId, $idVisitor, $userId, $persistedVisitAttributes, $shouldMatchOneFieldOnly, $isVisitorIdToLookup, $timeLookBack, $timeLookAhead);
|
110 |
|
app/core/Twig.php
CHANGED
@@ -26,7 +26,7 @@ use Twig\TwigTest;
|
|
26 |
|
27 |
function piwik_filter_truncate($string, $size)
|
28 |
{
|
29 |
-
if (
|
30 |
return $string;
|
31 |
} else {
|
32 |
preg_match('/^(&(?:[a-z\d]+|#\d+|#x[a-f\d]+);|.){'.$size.'}/i', $string, $shortenString);
|
26 |
|
27 |
function piwik_filter_truncate($string, $size)
|
28 |
{
|
29 |
+
if (mb_strlen(html_entity_decode($string)) <= $size) {
|
30 |
return $string;
|
31 |
} else {
|
32 |
preg_match('/^(&(?:[a-z\d]+|#\d+|#x[a-f\d]+);|.){'.$size.'}/i', $string, $shortenString);
|
app/core/Updates/4.0.0-b1.php
CHANGED
@@ -10,9 +10,11 @@
|
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
use Piwik\DataAccess\TableMetadata;
|
13 |
-
use Piwik\
|
|
|
14 |
use Piwik\DbHelper;
|
15 |
use Piwik\Plugin\Manager;
|
|
|
16 |
use Piwik\Plugins\CoreHome\Columns\Profilable;
|
17 |
use Piwik\Plugins\CoreHome\Columns\VisitorSecondsSinceFirst;
|
18 |
use Piwik\Plugins\CoreHome\Columns\VisitorSecondsSinceOrder;
|
@@ -28,6 +30,7 @@ use Piwik\Common;
|
|
28 |
use Piwik\Config;
|
29 |
use Piwik\Plugins\UserCountry\LocationProvider;
|
30 |
use Piwik\Plugins\VisitorInterest\Columns\VisitorSecondsSinceLast;
|
|
|
31 |
use Piwik\Updater;
|
32 |
use Piwik\Updates as PiwikUpdates;
|
33 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
@@ -55,35 +58,12 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
55 |
|
56 |
$migrations = [];
|
57 |
|
58 |
-
|
59 |
-
$
|
60 |
-
|
61 |
-
|
62 |
-
'description' => 'VARCHAR('.Model::MAX_LENGTH_TOKEN_DESCRIPTION.') NOT NULL',
|
63 |
-
'password' => 'VARCHAR(191) NOT NULL',
|
64 |
-
'system_token' => 'TINYINT(1) NOT NULL DEFAULT 0',
|
65 |
-
'hash_algo' => 'VARCHAR(30) NOT NULL',
|
66 |
-
'last_used' => 'DATETIME NULL',
|
67 |
-
'date_created' => ' DATETIME NOT NULL',
|
68 |
-
'date_expired' => ' DATETIME NULL',
|
69 |
-
), 'idusertokenauth');
|
70 |
-
$migrations[] = $this->migration->db->addUniqueKey('user_token_auth', 'password', 'uniq_password');
|
71 |
-
|
72 |
-
$migrations[] = $this->migration->db->dropIndex('user', 'uniq_keytoken');
|
73 |
-
|
74 |
-
$userModel = new Model();
|
75 |
-
foreach ($userModel->getUsers(array()) as $user) {
|
76 |
-
if (!empty($user['token_auth'])) {
|
77 |
-
$migrations[] = $this->migration->db->insert('user_token_auth', array(
|
78 |
-
'login' => $user['login'],
|
79 |
-
'description' => 'Created by Matomo 4 migration',
|
80 |
-
'password' => $userModel->hashTokenAuth($user['token_auth']),
|
81 |
-
'date_created' => Date::now()->getDatetime()
|
82 |
-
));
|
83 |
-
}
|
84 |
-
}
|
85 |
|
86 |
-
|
87 |
|
88 |
// invalidations table
|
89 |
$migrations[] = $this->migration->db->createTable('archive_invalidations', [
|
@@ -95,7 +75,6 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
95 |
'date2' => 'DATE NOT NULL',
|
96 |
'period' => 'TINYINT UNSIGNED NOT NULL',
|
97 |
'ts_invalidated' => 'DATETIME NOT NULL',
|
98 |
-
'ts_started' => 'DATETIME NULL',
|
99 |
'status' => 'TINYINT(1) UNSIGNED DEFAULT 0',
|
100 |
'report' => 'VARCHAR(255) NULL',
|
101 |
], ['idinvalidation']);
|
@@ -103,13 +82,41 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
103 |
$migrations[] = $this->migration->db->addIndex('archive_invalidations', ['idsite', 'date1', 'period'], 'index_idsite_dates_period_name');
|
104 |
|
105 |
$migrations[] = $this->migration->db->dropColumn('user', 'alias');
|
106 |
-
$migrations[] = $this->migration->db->dropColumn('user', 'token_auth');
|
107 |
|
108 |
-
|
109 |
-
|
|
|
|
|
|
|
|
|
110 |
|
|
|
|
|
111 |
$migrations[] = $this->migration->db->changeColumn('log_link_visit_action', 'interaction_position', 'pageview_position', 'MEDIUMINT UNSIGNED DEFAULT NULL');
|
112 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
// Move the site search fields of log_visit out of custom variables into their own fields
|
114 |
$columnsToAdd['log_link_visit_action']['search_cat'] = 'VARCHAR(200) NULL';
|
115 |
$columnsToAdd['log_link_visit_action']['search_count'] = 'INTEGER(10) UNSIGNED NULL';
|
@@ -152,6 +159,19 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
152 |
}
|
153 |
}
|
154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
// init seconds_to_... columns
|
156 |
$logVisitColumns = $tableMetadata->getColumns(Common::prefixTable('log_visit'));
|
157 |
$hasDaysColumnInVisit = in_array('visitor_days_since_first', $logVisitColumns);
|
@@ -172,11 +192,6 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
172 |
visitor_seconds_since_order = visitor_days_since_order * 86400");
|
173 |
}
|
174 |
|
175 |
-
if (Manager::getInstance()->isPluginInstalled('CustomVariables')) {
|
176 |
-
$visitActionTable = Common::prefixTable('log_link_visit_action');
|
177 |
-
$migrations[] = $this->migration->db->sql("UPDATE $visitActionTable SET search_cat = if(custom_var_k4 = '_pk_scat', custom_var_v4, search_cat), search_count = if(custom_var_k5 = '_pk_scount', custom_var_v5, search_count) WHERE custom_var_k4 = '_pk_scat' or custom_var_k5 = '_pk_scount'");
|
178 |
-
}
|
179 |
-
|
180 |
// remove old days_to_... columns
|
181 |
$migrations[] = $this->migration->db->dropColumns('log_visit', [
|
182 |
'config_gears',
|
@@ -196,6 +211,9 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
196 |
$migrations[] = $this->migration->config->set('mail', 'type', 'Cram-md5');
|
197 |
}
|
198 |
|
|
|
|
|
|
|
199 |
$migrations[] = $this->migration->plugin->activate('PagePerformance');
|
200 |
if (!Manager::getInstance()->isPluginActivated('CustomDimensions')) {
|
201 |
$migrations[] = $this->migration->plugin->activate('CustomDimensions');
|
@@ -211,18 +229,76 @@ class Updates_4_0_0_b1 extends PiwikUpdates
|
|
211 |
$migrations[] = $this->migration->config->set('General', 'datatable_archiving_maximum_rows_subtable_custom_dimensions', $configSubTableLimit);
|
212 |
}
|
213 |
|
214 |
-
$migrations[] = $this->migration->db->changeColumnType('session', 'id', 'VARCHAR(191)');
|
215 |
-
$migrations[] = $this->migration->db->changeColumnType('site_url', 'url', 'VARCHAR(190)');
|
216 |
-
$migrations[] = $this->migration->db->changeColumnType('option', 'option_name', 'VARCHAR(191)');
|
217 |
-
|
218 |
-
$migrations[] = $this->migration->db->changeColumnType('log_action', 'name', 'VARCHAR(4096)');
|
219 |
-
$migrations[] = $this->migration->db->changeColumnType('log_conversion', 'url', 'VARCHAR(4096)');
|
220 |
return $migrations;
|
221 |
}
|
222 |
|
223 |
public function doUpdate(Updater $updater)
|
224 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
225 |
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
}
|
227 |
|
228 |
protected function usesGeoIpLegacyLocationProvider()
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
use Piwik\DataAccess\TableMetadata;
|
13 |
+
use Piwik\Updater\Migration\Custom as CustomMigration;
|
14 |
+
use Piwik\Db;
|
15 |
use Piwik\DbHelper;
|
16 |
use Piwik\Plugin\Manager;
|
17 |
+
use Piwik\Plugins\CoreAdminHome\Commands\MigrateTokenAuths;
|
18 |
use Piwik\Plugins\CoreHome\Columns\Profilable;
|
19 |
use Piwik\Plugins\CoreHome\Columns\VisitorSecondsSinceFirst;
|
20 |
use Piwik\Plugins\CoreHome\Columns\VisitorSecondsSinceOrder;
|
30 |
use Piwik\Config;
|
31 |
use Piwik\Plugins\UserCountry\LocationProvider;
|
32 |
use Piwik\Plugins\VisitorInterest\Columns\VisitorSecondsSinceLast;
|
33 |
+
use Piwik\SettingsPiwik;
|
34 |
use Piwik\Updater;
|
35 |
use Piwik\Updates as PiwikUpdates;
|
36 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
58 |
|
59 |
$migrations = [];
|
60 |
|
61 |
+
$domain = Config::getLocalConfigPath() === Config::getDefaultLocalConfigPath() ? '' : Config::getHostname();
|
62 |
+
$domainArg = !empty($domain) ? "--matomo-domain=". escapeshellarg($domain) . " " : '';
|
63 |
+
$toString = sprintf('./console %score:matomo4-migrate-token-auths', $domainArg);
|
64 |
+
$custom = new CustomMigration(array(MigrateTokenAuths::class, 'migrate'), $toString);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
|
66 |
+
$migrations[] = $custom;
|
67 |
|
68 |
// invalidations table
|
69 |
$migrations[] = $this->migration->db->createTable('archive_invalidations', [
|
75 |
'date2' => 'DATE NOT NULL',
|
76 |
'period' => 'TINYINT UNSIGNED NOT NULL',
|
77 |
'ts_invalidated' => 'DATETIME NOT NULL',
|
|
|
78 |
'status' => 'TINYINT(1) UNSIGNED DEFAULT 0',
|
79 |
'report' => 'VARCHAR(255) NULL',
|
80 |
], ['idinvalidation']);
|
82 |
$migrations[] = $this->migration->db->addIndex('archive_invalidations', ['idsite', 'date1', 'period'], 'index_idsite_dates_period_name');
|
83 |
|
84 |
$migrations[] = $this->migration->db->dropColumn('user', 'alias');
|
|
|
85 |
|
86 |
+
// prevent possible duplicates when shorting session id
|
87 |
+
$migrations[] = $this->migration->db->sql('DELETE FROM `' . Common::prefixTable('session') . '` WHERE length(id) > 190');
|
88 |
+
|
89 |
+
$migrations[] = $this->migration->db->changeColumnType('session', 'id', 'VARCHAR(191)');
|
90 |
+
$migrations[] = $this->migration->db->changeColumnType('site_url', 'url', 'VARCHAR(190)');
|
91 |
+
$migrations[] = $this->migration->db->changeColumnType('option', 'option_name', 'VARCHAR(191)');
|
92 |
|
93 |
+
$migrations[] = $this->migration->db->changeColumnType('log_action', 'name', 'VARCHAR(4096)');
|
94 |
+
$migrations[] = $this->migration->db->changeColumnType('log_conversion', 'url', 'VARCHAR(4096)');
|
95 |
$migrations[] = $this->migration->db->changeColumn('log_link_visit_action', 'interaction_position', 'pageview_position', 'MEDIUMINT UNSIGNED DEFAULT NULL');
|
96 |
|
97 |
+
$customTrackerPluginActive = false;
|
98 |
+
if (in_array('CustomPiwikJs', Config::getInstance()->Plugins['Plugins'])) {
|
99 |
+
$customTrackerPluginActive = true;
|
100 |
+
}
|
101 |
+
|
102 |
+
$migrations[] = $this->migration->plugin->activate('BulkTracking');
|
103 |
+
$migrations[] = $this->migration->plugin->deactivate('CustomPiwikJs');
|
104 |
+
$migrations[] = $this->migration->plugin->uninstall('CustomPiwikJs');
|
105 |
+
|
106 |
+
if ($customTrackerPluginActive) {
|
107 |
+
$migrations[] = $this->migration->plugin->activate('CustomJsTracker');
|
108 |
+
}
|
109 |
+
|
110 |
+
// Prepare all installed tables for utf8mb4 conversions. e.g. make some indexed fields smaller so they don't exceed the maximum key length
|
111 |
+
$allTables = DbHelper::getTablesInstalled();
|
112 |
+
|
113 |
+
foreach ($allTables as $table) {
|
114 |
+
if (preg_match('/archive_/', $table) == 1) {
|
115 |
+
$tableNameUnprefixed = Common::unprefixTable($table);
|
116 |
+
$migrations[] = $this->migration->db->changeColumnType($tableNameUnprefixed, 'name', 'VARCHAR(190)');
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
120 |
// Move the site search fields of log_visit out of custom variables into their own fields
|
121 |
$columnsToAdd['log_link_visit_action']['search_cat'] = 'VARCHAR(200) NULL';
|
122 |
$columnsToAdd['log_link_visit_action']['search_count'] = 'INTEGER(10) UNSIGNED NULL';
|
159 |
}
|
160 |
}
|
161 |
|
162 |
+
if (Manager::getInstance()->isPluginInstalled('CustomVariables')) {
|
163 |
+
$visitActionTable = Common::prefixTable('log_link_visit_action');
|
164 |
+
$migrations[] = $this->migration->db->sql("UPDATE $visitActionTable SET search_cat = if(custom_var_k4 = '_pk_scat', custom_var_v4, search_cat), search_count = if(custom_var_k5 = '_pk_scount', custom_var_v5, search_count) WHERE custom_var_k4 = '_pk_scat' or custom_var_k5 = '_pk_scount'");
|
165 |
+
}
|
166 |
+
|
167 |
+
if ($this->usesGeoIpLegacyLocationProvider()) {
|
168 |
+
// activate GeoIp2 plugin for users still using GeoIp2 Legacy (others might have it disabled on purpose)
|
169 |
+
$migrations[] = $this->migration->plugin->activate('GeoIp2');
|
170 |
+
}
|
171 |
+
|
172 |
+
// remove old options
|
173 |
+
$migrations[] = $this->migration->db->sql('DELETE FROM `' . Common::prefixTable('option') . '` WHERE option_name IN ("geoip.updater_period", "geoip.loc_db_url", "geoip.isp_db_url", "geoip.org_db_url")');
|
174 |
+
|
175 |
// init seconds_to_... columns
|
176 |
$logVisitColumns = $tableMetadata->getColumns(Common::prefixTable('log_visit'));
|
177 |
$hasDaysColumnInVisit = in_array('visitor_days_since_first', $logVisitColumns);
|
192 |
visitor_seconds_since_order = visitor_days_since_order * 86400");
|
193 |
}
|
194 |
|
|
|
|
|
|
|
|
|
|
|
195 |
// remove old days_to_... columns
|
196 |
$migrations[] = $this->migration->db->dropColumns('log_visit', [
|
197 |
'config_gears',
|
211 |
$migrations[] = $this->migration->config->set('mail', 'type', 'Cram-md5');
|
212 |
}
|
213 |
|
214 |
+
// keep piwik_ignore for existing installs
|
215 |
+
$migrations[] = $this->migration->config->set('Tracker', 'ignore_visits_cookie_name', 'piwik_ignore');
|
216 |
+
|
217 |
$migrations[] = $this->migration->plugin->activate('PagePerformance');
|
218 |
if (!Manager::getInstance()->isPluginActivated('CustomDimensions')) {
|
219 |
$migrations[] = $this->migration->plugin->activate('CustomDimensions');
|
229 |
$migrations[] = $this->migration->config->set('General', 'datatable_archiving_maximum_rows_subtable_custom_dimensions', $configSubTableLimit);
|
230 |
}
|
231 |
|
|
|
|
|
|
|
|
|
|
|
|
|
232 |
return $migrations;
|
233 |
}
|
234 |
|
235 |
public function doUpdate(Updater $updater)
|
236 |
{
|
237 |
+
$salt = SettingsPiwik::getSalt();
|
238 |
+
$sessions = Db::fetchAll('SELECT id from ' . Common::prefixTable('session'));
|
239 |
+
|
240 |
+
foreach ($sessions as $session) {
|
241 |
+
if (!empty($session['id']) && mb_strlen($session['id']) != 128) {
|
242 |
+
$bind = [ hash('sha512', $session['id'] . $salt), $session['id'] ];
|
243 |
+
try {
|
244 |
+
Db::query(sprintf('UPDATE %s SET id = ? WHERE id = ?', Common::prefixTable('session')), $bind);
|
245 |
+
} catch (\Exception $e) {
|
246 |
+
// ignore possible duplicate key errors
|
247 |
+
}
|
248 |
+
}
|
249 |
+
}
|
250 |
+
|
251 |
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
252 |
+
|
253 |
+
if ($this->usesGeoIpLegacyLocationProvider()) {
|
254 |
+
// switch to default provider if GeoIp Legacy was still in use
|
255 |
+
LocationProvider::setCurrentProvider(LocationProvider\DefaultProvider::ID);
|
256 |
+
}
|
257 |
+
|
258 |
+
// eg the case when not updating from most recent Matomo 3.X and when not using the UI updater
|
259 |
+
// afterwards the should receive a notification that the plugins are outdated
|
260 |
+
self::ensureCorePluginsThatWereMovedToMarketplaceCanBeUpdated();
|
261 |
+
ServerFilesGenerator::createFilesForSecurity();
|
262 |
+
}
|
263 |
+
|
264 |
+
public static function ensureCorePluginsThatWereMovedToMarketplaceCanBeUpdated()
|
265 |
+
{
|
266 |
+
$plugins = ['Provider', 'CustomVariables'];
|
267 |
+
$pluginManager = Manager::getInstance();
|
268 |
+
foreach ($plugins as $plugin) {
|
269 |
+
if ($pluginManager->isPluginThirdPartyAndBogus($plugin)) {
|
270 |
+
$pluginDir = Manager::getPluginDirectory($plugin);
|
271 |
+
|
272 |
+
if (is_dir($pluginDir) &&
|
273 |
+
file_exists($pluginDir . '/' . $plugin . '.php')
|
274 |
+
&& !file_exists($pluginDir . '/plugin.json')
|
275 |
+
&& is_writable($pluginDir)) {
|
276 |
+
file_put_contents($pluginDir . '/plugin.json', '{
|
277 |
+
"name": "'.$plugin.'",
|
278 |
+
"description": "'.$plugin.'",
|
279 |
+
"version": "3.14.1",
|
280 |
+
"theme": false,
|
281 |
+
"require": {
|
282 |
+
"piwik": ">=3.0.0,<4.0.0-b1"
|
283 |
+
},
|
284 |
+
"authors": [
|
285 |
+
{
|
286 |
+
"name": "Matomo",
|
287 |
+
"email": "hello@matomo.org",
|
288 |
+
"homepage": "https:\/\/matomo.org"
|
289 |
+
}
|
290 |
+
],
|
291 |
+
"homepage": "https:\/\/matomo.org",
|
292 |
+
"license": "GPL v3+",
|
293 |
+
"keywords": ["'.$plugin.'"]
|
294 |
+
}');
|
295 |
+
// otherwise cached information might be used and it won't be loaded otherwise within same request
|
296 |
+
$pluginObj = $pluginManager->loadPlugin($plugin);
|
297 |
+
$pluginObj->reloadPluginInformation();
|
298 |
+
$pluginManager->unloadPlugin($pluginObj); // prevent any events being posted to it somehow
|
299 |
+
}
|
300 |
+
}
|
301 |
+
}
|
302 |
}
|
303 |
|
304 |
protected function usesGeoIpLegacyLocationProvider()
|
app/core/Updates/4.0.0-b3.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Updates;
|
11 |
+
|
12 |
+
use Piwik\Config;
|
13 |
+
use Piwik\Updater;
|
14 |
+
use Piwik\Updates as PiwikUpdates;
|
15 |
+
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Update for version 4.0.0-b3.
|
19 |
+
*/
|
20 |
+
class Updates_4_0_0_b3 extends PiwikUpdates
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* @var MigrationFactory
|
24 |
+
*/
|
25 |
+
private $migration;
|
26 |
+
|
27 |
+
public function __construct(MigrationFactory $factory)
|
28 |
+
{
|
29 |
+
$this->migration = $factory;
|
30 |
+
}
|
31 |
+
|
32 |
+
public function getMigrations(Updater $updater)
|
33 |
+
{
|
34 |
+
$migrations = [];
|
35 |
+
|
36 |
+
$config = Config::getInstance();
|
37 |
+
$general = $config->General;
|
38 |
+
if (empty($general['login_whitelist_apply_to_reporting_api_requests'])) {
|
39 |
+
$migrations[] = $this->migration->config->set('General', 'login_allowlist_apply_to_reporting_api_requests', '0');
|
40 |
+
}
|
41 |
+
|
42 |
+
return $migrations;
|
43 |
+
}
|
44 |
+
|
45 |
+
public function doUpdate(Updater $updater)
|
46 |
+
{
|
47 |
+
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
48 |
+
|
49 |
+
$config = Config::getInstance();
|
50 |
+
$general = $config->General;
|
51 |
+
if (!empty($general['login_whitelist_ip'])) {
|
52 |
+
// the migration->config->set does not support arrays yet so we do it here.
|
53 |
+
$general['login_allowlist_ip'] = $general['login_whitelist_ip'];
|
54 |
+
$config->General = $general;
|
55 |
+
$config->forceSave();
|
56 |
+
}
|
57 |
+
|
58 |
+
}
|
59 |
+
|
60 |
+
}
|
app/core/Updates/4.0.0-rc3.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Updates;
|
11 |
+
|
12 |
+
use Piwik\Config;
|
13 |
+
use Piwik\Updater;
|
14 |
+
use Piwik\Updates as PiwikUpdates;
|
15 |
+
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Update for version 4.0.0-b3.
|
19 |
+
*/
|
20 |
+
class Updates_4_0_0_rc3 extends PiwikUpdates
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* @var MigrationFactory
|
24 |
+
*/
|
25 |
+
private $migration;
|
26 |
+
|
27 |
+
public function __construct(MigrationFactory $factory)
|
28 |
+
{
|
29 |
+
$this->migration = $factory;
|
30 |
+
}
|
31 |
+
|
32 |
+
public function getMigrations(Updater $updater)
|
33 |
+
{
|
34 |
+
$migrations = [];
|
35 |
+
$migrations[] = $this->migration->db->addColumn('archive_invalidations', 'ts_started', 'DATETIME NULL');
|
36 |
+
return $migrations;
|
37 |
+
}
|
38 |
+
|
39 |
+
public function doUpdate(Updater $updater)
|
40 |
+
{
|
41 |
+
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
42 |
+
}
|
43 |
+
|
44 |
+
}
|
app/core/Updates/4.0.0-rc4.php
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Updates;
|
11 |
+
|
12 |
+
use Piwik\Config;
|
13 |
+
use Piwik\Container\StaticContainer;
|
14 |
+
use Piwik\DataAccess\ArchiveTableCreator;
|
15 |
+
use Piwik\Date;
|
16 |
+
use Piwik\DbHelper;
|
17 |
+
use Piwik\Plugin\ReleaseChannels;
|
18 |
+
use Piwik\Updater;
|
19 |
+
use Piwik\Updates as PiwikUpdates;
|
20 |
+
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Update for version 4.0.0-rc4.
|
24 |
+
*/
|
25 |
+
class Updates_4_0_0_rc4 extends PiwikUpdates
|
26 |
+
{
|
27 |
+
/**
|
28 |
+
* @var MigrationFactory
|
29 |
+
*/
|
30 |
+
private $migration;
|
31 |
+
|
32 |
+
public function __construct(MigrationFactory $factory)
|
33 |
+
{
|
34 |
+
$this->migration = $factory;
|
35 |
+
}
|
36 |
+
|
37 |
+
public function getMigrations(Updater $updater)
|
38 |
+
{
|
39 |
+
$migrations = [];
|
40 |
+
|
41 |
+
$migrations[] = $this->migration->plugin->deactivate('ExampleTheme');
|
42 |
+
|
43 |
+
$channel = StaticContainer::get(ReleaseChannels::class)->getActiveReleaseChannel()->getId();
|
44 |
+
$isBeta = stripos($channel, 'beta') !== false;
|
45 |
+
|
46 |
+
if ($isBeta) {
|
47 |
+
$dates = ['2020-01-01', '2020-11-01', '2020-10-01'];
|
48 |
+
foreach ($dates as $date) {
|
49 |
+
$date = Date::factory($date);
|
50 |
+
$numericTable = ArchiveTableCreator::getBlobTable($date);
|
51 |
+
$blobTable = ArchiveTableCreator::getNumericTable($date);
|
52 |
+
|
53 |
+
if (DbHelper::tableExists($blobTable) && DbHelper::tableExists($numericTable)) {
|
54 |
+
$migrations[] = $this->migration->db->sql(
|
55 |
+
"DELETE FROM `$blobTable` WHERE idarchive NOT IN (SELECT idarchive FROM `$numericTable`)", []);
|
56 |
+
}
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
return $migrations;
|
61 |
+
}
|
62 |
+
|
63 |
+
public function doUpdate(Updater $updater)
|
64 |
+
{
|
65 |
+
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
66 |
+
}
|
67 |
+
|
68 |
+
}
|
app/core/Updates/4.0.1-b1.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Updates;
|
11 |
+
|
12 |
+
use Piwik\Common;
|
13 |
+
use Piwik\Config;
|
14 |
+
use Piwik\Container\StaticContainer;
|
15 |
+
use Piwik\DataAccess\ArchiveTableCreator;
|
16 |
+
use Piwik\Date;
|
17 |
+
use Piwik\DbHelper;
|
18 |
+
use Piwik\Plugin\ReleaseChannels;
|
19 |
+
use Piwik\SettingsPiwik;
|
20 |
+
use Piwik\Updater;
|
21 |
+
use Piwik\Updates as PiwikUpdates;
|
22 |
+
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
23 |
+
|
24 |
+
class Updates_4_0_1_b1 extends PiwikUpdates
|
25 |
+
{
|
26 |
+
/**
|
27 |
+
* @var MigrationFactory
|
28 |
+
*/
|
29 |
+
private $migration;
|
30 |
+
|
31 |
+
public function __construct(MigrationFactory $factory)
|
32 |
+
{
|
33 |
+
$this->migration = $factory;
|
34 |
+
}
|
35 |
+
|
36 |
+
public function getMigrations(Updater $updater)
|
37 |
+
{
|
38 |
+
$migrations = [];
|
39 |
+
|
40 |
+
$table = Common::prefixTable('user_token_auth');
|
41 |
+
$migrations[] = $this->migration->db->sql('UPDATE ' . $table . ' SET hash_algo = "sha512" where hash_algo is null or hash_algo = "" ');
|
42 |
+
|
43 |
+
if (SettingsPiwik::isGitDeployment()) {
|
44 |
+
return $migrations;
|
45 |
+
}
|
46 |
+
|
47 |
+
$migrations[] = $this->migration->plugin->uninstall('ExampleTheme');
|
48 |
+
return $migrations;
|
49 |
+
}
|
50 |
+
|
51 |
+
public function doUpdate(Updater $updater)
|
52 |
+
{
|
53 |
+
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
54 |
+
}
|
55 |
+
|
56 |
+
}
|
app/core/Updates/4.0.4-b1.php
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Updates;
|
11 |
+
|
12 |
+
use Piwik\SettingsPiwik;
|
13 |
+
use Piwik\Updater;
|
14 |
+
use Piwik\Updates as PiwikUpdates;
|
15 |
+
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
16 |
+
|
17 |
+
class Updates_4_0_4_b1 extends PiwikUpdates
|
18 |
+
{
|
19 |
+
/**
|
20 |
+
* @var MigrationFactory
|
21 |
+
*/
|
22 |
+
private $migration;
|
23 |
+
|
24 |
+
public function __construct(MigrationFactory $factory)
|
25 |
+
{
|
26 |
+
$this->migration = $factory;
|
27 |
+
}
|
28 |
+
|
29 |
+
public function getMigrations(Updater $updater)
|
30 |
+
{
|
31 |
+
$migrations = [];
|
32 |
+
|
33 |
+
if (SettingsPiwik::isGitDeployment()) {
|
34 |
+
return $migrations;
|
35 |
+
}
|
36 |
+
|
37 |
+
$migrations[] = $this->migration->plugin->deactivate('ExamplePlugin');
|
38 |
+
$migrations[] = $this->migration->plugin->deactivate('ExampleLogTables');
|
39 |
+
$migrations[] = $this->migration->plugin->deactivate('ExampleUI');
|
40 |
+
$migrations[] = $this->migration->plugin->deactivate('ExampleReport');
|
41 |
+
$migrations[] = $this->migration->plugin->deactivate('ExampleAPI');
|
42 |
+
$migrations[] = $this->migration->plugin->deactivate('ExampleCommand');
|
43 |
+
$migrations[] = $this->migration->plugin->deactivate('ExampleSettingsPlugin');
|
44 |
+
$migrations[] = $this->migration->plugin->deactivate('ExampleTracker');
|
45 |
+
$migrations[] = $this->migration->plugin->deactivate('ExampleVisualization');
|
46 |
+
|
47 |
+
$migrations[] = $this->migration->plugin->uninstall('ExamplePlugin');
|
48 |
+
$migrations[] = $this->migration->plugin->uninstall('ExampleLogTables');
|
49 |
+
$migrations[] = $this->migration->plugin->uninstall('ExampleUI');
|
50 |
+
$migrations[] = $this->migration->plugin->uninstall('ExampleReport');
|
51 |
+
$migrations[] = $this->migration->plugin->uninstall('ExampleAPI');
|
52 |
+
$migrations[] = $this->migration->plugin->uninstall('ExampleCommand');
|
53 |
+
$migrations[] = $this->migration->plugin->uninstall('ExampleSettingsPlugin');
|
54 |
+
$migrations[] = $this->migration->plugin->uninstall('ExampleTracker');
|
55 |
+
$migrations[] = $this->migration->plugin->uninstall('ExampleVisualization');
|
56 |
+
return $migrations;
|
57 |
+
}
|
58 |
+
|
59 |
+
public function doUpdate(Updater $updater)
|
60 |
+
{
|
61 |
+
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
62 |
+
}
|
63 |
+
|
64 |
+
}
|
app/core/Updates/4.4.0-b1.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Updates;
|
11 |
+
|
12 |
+
use Piwik\Updater;
|
13 |
+
use Piwik\Updates as PiwikUpdates;
|
14 |
+
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Update for version 4.4.0-b1.
|
18 |
+
*/
|
19 |
+
class Updates_4_4_0_b1 extends PiwikUpdates
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* @var MigrationFactory
|
23 |
+
*/
|
24 |
+
private $migration;
|
25 |
+
|
26 |
+
public function __construct(MigrationFactory $factory)
|
27 |
+
{
|
28 |
+
$this->migration = $factory;
|
29 |
+
}
|
30 |
+
|
31 |
+
public function getMigrations(Updater $updater)
|
32 |
+
{
|
33 |
+
$migrations = [];
|
34 |
+
$migrations[] = $this->migration->config->set('General', 'login_allow_logme', '1');
|
35 |
+
return $migrations;
|
36 |
+
}
|
37 |
+
|
38 |
+
public function doUpdate(Updater $updater)
|
39 |
+
{
|
40 |
+
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
41 |
+
}
|
42 |
+
}
|
app/core/Url.php
CHANGED
@@ -240,10 +240,10 @@ class Url
|
|
240 |
}
|
241 |
$trustedHosts = str_replace("/", "\\/", $trustedHosts);
|
242 |
|
243 |
-
$untrustedHost =
|
244 |
$untrustedHost = rtrim($untrustedHost, '.');
|
245 |
|
246 |
-
$hostRegex =
|
247 |
|
248 |
$result = preg_match($hostRegex, $untrustedHost);
|
249 |
return 0 !== $result;
|
@@ -666,7 +666,7 @@ class Url
|
|
666 |
return;
|
667 |
}
|
668 |
|
669 |
-
return
|
670 |
}
|
671 |
|
672 |
/**
|
@@ -684,11 +684,11 @@ class Url
|
|
684 |
return false;
|
685 |
}
|
686 |
|
687 |
-
$host =
|
688 |
|
689 |
if (!empty($urls)) {
|
690 |
foreach ($urls as $url) {
|
691 |
-
if (
|
692 |
return true;
|
693 |
}
|
694 |
|
@@ -723,7 +723,7 @@ class Url
|
|
723 |
*/
|
724 |
public static function getLocalHostnames()
|
725 |
{
|
726 |
-
return array('localhost', '127.0.0.1', '::1', '[::1]');
|
727 |
}
|
728 |
|
729 |
/**
|
240 |
}
|
241 |
$trustedHosts = str_replace("/", "\\/", $trustedHosts);
|
242 |
|
243 |
+
$untrustedHost = mb_strtolower($host);
|
244 |
$untrustedHost = rtrim($untrustedHost, '.');
|
245 |
|
246 |
+
$hostRegex = mb_strtolower('/(^|.)' . implode('$|', $trustedHosts) . '$/');
|
247 |
|
248 |
$result = preg_match($hostRegex, $untrustedHost);
|
249 |
return 0 !== $result;
|
666 |
return;
|
667 |
}
|
668 |
|
669 |
+
return mb_strtolower($parsedUrl['host']);
|
670 |
}
|
671 |
|
672 |
/**
|
684 |
return false;
|
685 |
}
|
686 |
|
687 |
+
$host = mb_strtolower($host);
|
688 |
|
689 |
if (!empty($urls)) {
|
690 |
foreach ($urls as $url) {
|
691 |
+
if (mb_strtolower($url) === $host) {
|
692 |
return true;
|
693 |
}
|
694 |
|
723 |
*/
|
724 |
public static function getLocalHostnames()
|
725 |
{
|
726 |
+
return array('localhost', '127.0.0.1', '::1', '[::1]', '[::]', '0000::1', '0177.0.0.1', '2130706433', '[0:0:0:0:0:ffff:127.0.0.1]');
|
727 |
}
|
728 |
|
729 |
/**
|
app/core/Validators/CharacterLength.php
CHANGED
@@ -44,7 +44,7 @@ class CharacterLength extends BaseValidator
|
|
44 |
return;
|
45 |
}
|
46 |
|
47 |
-
$lenValue =
|
48 |
|
49 |
if (isset($this->min) && $this->min > $lenValue) {
|
50 |
throw new Exception(Piwik::translate('General_ValidatorErrorCharacterTooShort', array($lenValue, $this->min)));
|
44 |
return;
|
45 |
}
|
46 |
|
47 |
+
$lenValue = mb_strlen($value);
|
48 |
|
49 |
if (isset($this->min) && $this->min > $lenValue) {
|
50 |
throw new Exception(Piwik::translate('General_ValidatorErrorCharacterTooShort', array($lenValue, $this->min)));
|
app/core/Version.php
CHANGED
@@ -20,7 +20,7 @@ final class Version
|
|
20 |
* The current Matomo version.
|
21 |
* @var string
|
22 |
*/
|
23 |
-
const VERSION = '4.
|
24 |
const MAJOR_VERSION = 4;
|
25 |
|
26 |
public function isStableVersion($version)
|
20 |
* The current Matomo version.
|
21 |
* @var string
|
22 |
*/
|
23 |
+
const VERSION = '4.4.1';
|
24 |
const MAJOR_VERSION = 4;
|
25 |
|
26 |
public function isStableVersion($version)
|
app/js/piwik.min.js
CHANGED
@@ -28,42 +28,42 @@ ao=ae.findFirstNodeHavingAttribute(ap,this.CONTENT_PIECE_ATTR);if(!ao){ao=ae.fin
|
|
28 |
}}}var av=ae.findNodesByTagName(at,"embed");if(av&&av.length){return this.findMediaUrlInNode(av[0])}}},trim:function(ao){return a(ao)},isOrWasNodeInViewport:function(au){if(!au||!au.getBoundingClientRect||au.nodeType!==1){return true}var at=au.getBoundingClientRect();var ar=G.documentElement||{};var aq=at.top<0;if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(S.innerWidth&&ap>S.innerWidth){ap=S.innerWidth}var ao=ar.clientHeight;if(S.innerHeight&&ao>S.innerHeight){ao=S.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=i(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+s(ao)}if(ap){if(at){at+="&"}at+="c_n="+s(ap)}if(aq){if(at){at+="&"}at+="c_p="+s(aq)}if(ar){if(at){at+="&"}at+="c_t="+s(ar)}if(at){at+="&ca=1"}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+s(ao)+"&c_p="+s(ap);if(aq){ar+="&c_t="+s(aq)
|
29 |
}if(ar){ar+="&ca=1"}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||S.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap
|
30 |
}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(ao){if(ae.hasNodeAttribute(ao,this.CONTENT_IGNOREINTERACTION_ATTR)){return true}if(ae.hasNodeCssClass(ao,this.CONTENT_IGNOREINTERACTION_CLASS)){return true}if(ae.hasNodeCssClass(ao,this.LEGACY_CONTENT_IGNOREINTERACTION_CLASS)){return true}return false}};function W(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(Q(ap,"matomo.php")){ap=f(ap,"matomo.php".length)
|
31 |
-
}else{if(Q(ap,"piwik.php")){ap=f(ap,"piwik.php".length)}else{if(Q(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(Q(ap,"/js/")){ap=f(ap,"js/".length)}return ap}function N(av){var ax="Matomo_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment
|
32 |
-
}catch(ao){return true}}function P(ce,ca){var bK=this,be="mtm_consent",cE="mtm_cookie_consent",cN="mtm_consent_removed",b5=aa(G.domain,S.location.href,K()),cV=L(b5[0]),bO=o(b5[1]),bp=o(b5[2]),cT=false,ci="GET",
|
33 |
-
try{bk=G.title}catch(cz){bk=""}function
|
34 |
-
}function cl(
|
35 |
-
}}}return false}function co(
|
36 |
-
}setTimeout(function(){if(l&&a7(
|
37 |
-
an(S,"blur",az);ab++;t.addPlugin("HeartBeat"+ab,{unload:function(){if(aO&&
|
38 |
-
})}function aU(
|
39 |
-
}else{
|
40 |
-
if(
|
41 |
-
return true}return false}function aF(){var
|
42 |
-
}if(
|
43 |
-
if(bn){aF()}if(cR){return""}var
|
44 |
-
}}var
|
45 |
-
if(
|
46 |
-
if(a3&&!bi){
|
47 |
-
if(
|
48 |
-
if(!
|
49 |
-
return cr(
|
50 |
-
}return
|
51 |
-
}return false}function cH(
|
52 |
-
if(
|
53 |
-
this.requests=[];if(
|
54 |
-
};this.setTrackerUrl=function(
|
55 |
-
if(
|
56 |
-
}else{if(
|
57 |
-
};this.setIgnoreClasses=function(
|
58 |
-
}};this.getCookieDomain=function(){return
|
59 |
-
return}if(
|
60 |
-
};this.disableAlwaysUseSendBeacon=function(){
|
61 |
-
}};this.setCountPreRendered=function(
|
62 |
-
var dl=
|
63 |
-
}}
|
64 |
-
|
65 |
-
};this.isUserOptedOut=function(){return !
|
66 |
-
function ad(aq,ap){var ao=new P(aq,ap);I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
28 |
}}}var av=ae.findNodesByTagName(at,"embed");if(av&&av.length){return this.findMediaUrlInNode(av[0])}}},trim:function(ao){return a(ao)},isOrWasNodeInViewport:function(au){if(!au||!au.getBoundingClientRect||au.nodeType!==1){return true}var at=au.getBoundingClientRect();var ar=G.documentElement||{};var aq=at.top<0;if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(S.innerWidth&&ap>S.innerWidth){ap=S.innerWidth}var ao=ar.clientHeight;if(S.innerHeight&&ao>S.innerHeight){ao=S.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=i(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+s(ao)}if(ap){if(at){at+="&"}at+="c_n="+s(ap)}if(aq){if(at){at+="&"}at+="c_p="+s(aq)}if(ar){if(at){at+="&"}at+="c_t="+s(ar)}if(at){at+="&ca=1"}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+s(ao)+"&c_p="+s(ap);if(aq){ar+="&c_t="+s(aq)
|
29 |
}if(ar){ar+="&ca=1"}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||S.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap
|
30 |
}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(ao){if(ae.hasNodeAttribute(ao,this.CONTENT_IGNOREINTERACTION_ATTR)){return true}if(ae.hasNodeCssClass(ao,this.CONTENT_IGNOREINTERACTION_CLASS)){return true}if(ae.hasNodeCssClass(ao,this.LEGACY_CONTENT_IGNOREINTERACTION_CLASS)){return true}return false}};function W(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(Q(ap,"matomo.php")){ap=f(ap,"matomo.php".length)
|
31 |
+
}else{if(Q(ap,"piwik.php")){ap=f(ap,"piwik.php".length)}else{if(Q(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(Q(ap,"/js/")){ap=f(ap,"js/".length)}return ap}function N(av){var ax="Matomo_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=[^&]*)?");var aq=ap.exec(G.referrer);if(aq){var at=aq[1];if(at!==String(av)){return false}var au=aq[2],ao=aq[3],ar=aq[4];if(!ar){ar=""}else{if(ar.indexOf("&segment=")===0){ar=ar.substr("&segment=".length)}}S.name=ax+"###"+au+"###"+ao+"###"+ar}var aw=S.name.split("###");return aw.length===4&&aw[0]===ax}function Z(ap,av,aq){var au=S.name.split("###"),at=au[1],ao=au[2],ar=au[3],aw=W(ap,av);n(aw+"plugins/Overlay/client/client.js?v=1",function(){Matomo_Overlay_Client.initialize(aw,aq,at,ao,ar)})}function u(){var aq;try{aq=S.frameElement}catch(ap){return true}if(J(aq)){return(aq&&String(aq.nodeName).toLowerCase()==="iframe")?true:false}try{return S.self!==S.top
|
32 |
+
}catch(ao){return true}}function P(ce,ca){var bK=this,be="mtm_consent",cE="mtm_cookie_consent",cN="mtm_consent_removed",b5=aa(G.domain,S.location.href,K()),cV=L(b5[0]),bO=o(b5[1]),bp=o(b5[2]),cT=false,ci="GET",db=ci,aI="application/x-www-form-urlencoded; charset=UTF-8",cx=aI,aE=ce||"",bJ="",c1="",b7=ca||"",bA="",bP="",a5,bk="",c8=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","rtf","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ay=[cV],bB=[],bM=[],a9=[],bL=500,cY=true,cK,a6,bS,bQ,ao,cp=["pk_campaign","mtm_campaign","piwik_campaign","matomo_campaign","utm_campaign","utm_source","utm_medium"],bI=["pk_kwd","mtm_kwd","piwik_kwd","matomo_kwd","utm_term"],bl="_pk_",av="pk_vid",a0=180,cZ,br,bT=false,aJ="Lax",bn=false,cR,bf,bx,cL=33955200000,cn=1800000,c7=15768000000,a3=true,bG=false,bi=false,bR=false,aR=false,cc,bX={},cm={},bo={},bv=200,ct={},c2={},c9={},cb=[],cf=false,cC=false,ap=false,da=false,cO=false,aO=false,bd=u(),cy=null,c0=null,aS,bD,b8=am,bq,aM,bC=false,cq=0,bw=["id","ses","cvar","ref"],cB=false,bE=null,cM=[],cs=[],ax=T++,aw=false;
|
33 |
+
try{bk=G.title}catch(cz){bk=""}function aD(dm){if(bn){return 0}var dk=new RegExp("(^|;)[ ]*"+dm+"=([^;]*)"),dl=dk.exec(G.cookie);return dl?R(dl[2]):0}bE=!aD(cN);function df(dp,dq,dt,ds,dm,dn,dr){if(bn&&dp!==cN){return}var dl;if(dt){dl=new Date();dl.setTime(dl.getTime()+dt)}if(!dr){dr="Lax"}G.cookie=dp+"="+s(dq)+(dt?";expires="+dl.toGMTString():"")+";path="+(ds||"/")+(dm?";domain="+dm:"")+(dn?";secure":"")+";SameSite="+dr;if((!dt||dt>=0)&&aD(dp)!==dq){var dk="There was an error setting cookie `"+dp+"`. Please check domain and path.";ak(dk)}}function b3(dk){var dl;dk=j(dk,av);if(bQ){dl=new RegExp("#.*");return dk.replace(dl,"")}return dk}function bW(dm,dk){var dn=r(dk),dl;if(dn){return dk}if(dk.slice(0,1)==="/"){return r(dm)+"://"+d(dm)+dk}dm=b3(dm);dl=dm.indexOf("?");if(dl>=0){dm=dm.slice(0,dl)}dl=dm.lastIndexOf("/");if(dl!==dm.length-1){dm=dm.slice(0,dl+1)}return dm+dk}function cI(dm,dk){var dl;dm=String(dm).toLowerCase();dk=String(dk).toLowerCase();if(dm===dk){return true}if(dk.slice(0,1)==="."){if(dm===dk.slice(1)){return true
|
34 |
+
}dl=dm.length-dk.length;if((dl>0)&&(dm.slice(dl)===dk)){return true}}return false}function cl(dk){var dl=document.createElement("a");if(dk.indexOf("//")!==0&&dk.indexOf("http")!==0){if(dk.indexOf("*")===0){dk=dk.substr(1)}if(dk.indexOf(".")===0){dk=dk.substr(1)}dk="http://"+dk}dl.href=v.toAbsoluteUrl(dk);if(dl.pathname){return dl.pathname}return""}function a4(dl,dk){if(!aj(dk,"/")){dk="/"+dk}if(!aj(dl,"/")){dl="/"+dl}var dm=(dk==="/"||dk==="/*");if(dm){return true}if(dl===dk){return true}dk=String(dk).toLowerCase();dl=String(dl).toLowerCase();if(Q(dk,"*")){dk=dk.slice(0,-1);dm=(!dk||dk==="/");if(dm){return true}if(dl===dk){return true}return dl.indexOf(dk)===0}if(!Q(dl,"/")){dl+="/"}if(!Q(dk,"/")){dk+="/"}return dl.indexOf(dk)===0}function ar(dp,dr){var dl,dk,dm,dn,dq;for(dl=0;dl<ay.length;dl++){dn=L(ay[dl]);dq=cl(ay[dl]);if(cI(dp,dn)&&a4(dr,dq)){return true}}return false}function aW(dn){var dl,dk,dm;for(dl=0;dl<ay.length;dl++){dk=L(ay[dl].toLowerCase());if(dn===dk){return true}if(dk.slice(0,1)==="."){if(dn===dk.slice(1)){return true
|
35 |
+
}dm=dn.length-dk.length;if((dm>0)&&(dn.slice(dm)===dk)){return true}}}return false}function co(dk,dm){dk=dk.replace("send_image=0","send_image=1");var dl=new Image(1,1);dl.onload=function(){E=0;if(typeof dm==="function"){dm({request:dk,trackerUrl:aE,success:true})}};dl.onerror=function(){if(typeof dm==="function"){dm({request:dk,trackerUrl:aE,success:false})}};dl.src=aE+(aE.indexOf("?")<0?"?":"&")+dk}function cF(dk){if(db==="POST"){return true}return dk&&(dk.length>2000||dk.indexOf('{"requests"')===0)}function aL(){return"object"===typeof g&&"function"===typeof g.sendBeacon&&"function"===typeof Blob}function a7(dp,ds,dr){var dm=aL();if(!dm){return false}var dn={type:"application/x-www-form-urlencoded; charset=UTF-8"};var dt=false;var dl=aE;try{var dk=new Blob([dp],dn);if(dr&&!cF(dp)){dk=new Blob([],dn);dl=dl+(dl.indexOf("?")<0?"?":"&")+dp}dt=g.sendBeacon(dl,dk)}catch(dq){return false}if(dt&&typeof ds==="function"){ds({request:dp,trackerUrl:aE,success:true,isSendBeacon:true})}return dt}function c6(dl,dm,dk){if(!J(dk)||null===dk){dk=true
|
36 |
+
}if(l&&a7(dl,dm,dk)){return}setTimeout(function(){if(l&&a7(dl,dm,dk)){return}var dq;try{var dp=S.XMLHttpRequest?new S.XMLHttpRequest():S.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;dp.open("POST",aE,true);dp.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dr=l&&a7(dl,dm,dk);if(!dr&&dk){co(dl,dm)}else{if(typeof dm==="function"){dm({request:dl,trackerUrl:aE,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dm==="function")){dm({request:dl,trackerUrl:aE,success:true,xhr:this})}}};dp.setRequestHeader("Content-Type",cx);dp.withCredentials=true;dp.send(dl)}catch(dn){dq=l&&a7(dl,dm,dk);if(!dq&&dk){co(dl,dm)}else{if(typeof dm==="function"){dm({request:dl,trackerUrl:aE,success:false})}}}},50)}function cg(dl){var dk=new Date();var dm=dk.getTime()+dl;if(!q||dm>q){q=dm}}function bb(){bd=true;cy=new Date().getTime()}function de(){var dk=new Date().getTime();return !cy||(dk-cy)>a6}function az(){if(de()){bS()}}function dh(){if(aO||!a6){return
|
37 |
+
}aO=true;an(S,"focus",bb);an(S,"blur",az);ab++;t.addPlugin("HeartBeat"+ab,{unload:function(){if(aO&&de()){bS()}}})}function cD(dp){var dl=new Date();var dk=dl.getTime();c0=dk;if(cC&&dk<cC){var dm=cC-dk;setTimeout(dp,dm);cg(dm+50);cC+=50;return}if(cC===false){var dn=800;cC=dk+dn}dp()}function aP(){if(aD(cN)){bE=false}else{if(aD(be)){bE=true}}}function bH(dl,dk,dm){aP();if(!bE){cM.push(dl);return}aw=true;if(!cR&&dl){if(cB&&bE){dl+="&consent=1"}cD(function(){if(cY&&a7(dl,dm,true)){cg(100);return}if(cF(dl)){c6(dl,dm)}else{co(dl,dm)}cg(dk)})}if(!aO){dh()}}function ck(dk){if(cR){return false}return(dk&&dk.length)}function c5(dk,dp){if(!dp||dp>=dk.length){return[dk]}var dl=0;var dm=dk.length;var dn=[];for(dl;dl<dm;dl+=dp){dn.push(dk.slice(dl,dl+dp))}return dn}function dg(dl,dk){if(!ck(dl)){return}if(!bE){cM.push(dl);return}aw=true;cD(function(){var dp=c5(dl,50);var dm=0,dn;for(dm;dm<dp.length;dm++){dn='{"requests":["?'+dp[dm].join('","?')+'"],"send_image":0}';if(cY&&a7(dn,null,false)){cg(100)}else{c6(dn,null,false)
|
38 |
+
}}cg(dk)})}function aU(dk){return bl+dk+"."+b7+"."+bq}function bZ(dm,dl,dk){df(dm,"",-86400,dl,dk)}function b6(){if(bn){return"0"}if(!J(S.showModalDialog)&&J(g.cookieEnabled)){return g.cookieEnabled?"1":"0"}var dk=bl+"testcookie";df(dk,"1",undefined,br,cZ,bT,aJ);var dl=aD(dk)==="1"?"1":"0";bZ(dk);return dl}function bj(){bq=b8((cZ||cV)+(br||"/")).slice(0,4)}function cJ(){if(J(c9.res)){return c9}var dl,dn,dp={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",fla:"application/x-shockwave-flash",java:"application/x-java-vm",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(g.userAgent))){if(g.mimeTypes&&g.mimeTypes.length){for(dl in dp){if(Object.prototype.hasOwnProperty.call(dp,dl)){dn=g.mimeTypes[dp[dl]];c9[dl]=(dn&&dn.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(g.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&J(g.javaEnabled)&&g.javaEnabled()){c9.java="1"}if(!J(S.showModalDialog)&&J(g.cookieEnabled)){c9.cookie=g.cookieEnabled?"1":"0"
|
39 |
+
}else{c9.cookie=b6()}}var dm=parseInt(X.width,10);var dk=parseInt(X.height,10);c9.res=parseInt(dm,10)+"x"+parseInt(dk,10);return c9}function bY(){var dl=aU("cvar"),dk=aD(dl);if(dk&&dk.length){dk=S.JSON.parse(dk);if(V(dk)){return dk}}return{}}function cG(){if(aR===false){aR=bY()}}function cS(){var dk=cJ();return b8((g.userAgent||"")+(g.platform||"")+S.JSON.stringify(dk)+(new Date()).getTime()+Math.random()).slice(0,16)}function aB(){var dk=cJ();return b8((g.userAgent||"")+(g.platform||"")+S.JSON.stringify(dk)).slice(0,6)}function bg(){return Math.floor((new Date()).getTime()/1000)}function aK(){var dl=bg();var dm=aB();var dk=String(dl)+dm;return dk}function c4(dm){dm=String(dm);var dq=aB();var dn=dq.length;var dp=dm.substr(-1*dn,dn);var dl=parseInt(dm.substr(0,dm.length-dn),10);if(dl&&dp&&dp===dq){var dk=bg();if(a0<=0){return true}if(dk>=dl&&dk<=(dl+a0)){return true}}return false}function di(dk){if(!cO){return""}var dp=e(dk,av);if(!dp){return""}dp=String(dp);var dm=new RegExp("^[a-zA-Z0-9]+$");
|
40 |
+
if(dp.length===32&&dm.test(dp)){var dl=dp.substr(16,32);if(c4(dl)){var dn=dp.substr(0,16);return dn}}return""}function cP(){if(!bP){bP=di(bO)}var dm=new Date(),dk=Math.round(dm.getTime()/1000),dl=aU("id"),dq=aD(dl),dp,dn;if(dq){dp=dq.split(".");dp.unshift("0");if(bP.length){dp[1]=bP}return dp}if(bP.length){dn=bP}else{if("0"===b6()){dn=""}else{dn=cS()}}dp=["1",dn,dk];return dp}function aZ(){var dn=cP(),dl=dn[0],dm=dn[1],dk=dn[2];return{newVisitor:dl,uuid:dm,createTs:dk}}function aH(){var dn=new Date(),dl=dn.getTime(),dp=aZ().createTs;var dk=parseInt(dp,10);var dm=(dk*1000)+cL-dl;return dm}function aN(dk){if(!b7){return}var dm=new Date(),dl=Math.round(dm.getTime()/1000);if(!J(dk)){dk=aZ()}var dn=dk.uuid+"."+dk.createTs+".";df(aU("id"),dn,aH(),br,cZ,bT,aJ)}function bN(){var dk=aD(aU("ref"));if(dk.length){try{dk=S.JSON.parse(dk);if(V(dk)){return dk}}catch(dl){}}return["","",0,""]}function by(dm){var dl=bl+"testcookie_domain";var dk="testvalue";df(dl,dk,10000,null,dm,bT,aJ);if(aD(dl)===dk){bZ(dl,null,dm);
|
41 |
+
return true}return false}function aF(){var dl=bn;bn=false;var dk,dm;for(dk=0;dk<bw.length;dk++){dm=aU(bw[dk]);if(dm!==cN&&dm!==be&&0!==aD(dm)){bZ(dm,br,cZ)}}bn=dl}function b4(dk){b7=dk}function dj(dp){if(!dp||!V(dp)){return}var dn=[];var dm;for(dm in dp){if(Object.prototype.hasOwnProperty.call(dp,dm)){dn.push(dm)}}var dq={};dn.sort();var dk=dn.length;var dl;for(dl=0;dl<dk;dl++){dq[dn[dl]]=dp[dn[dl]]}return dq}function cd(){df(aU("ses"),"1",cn,br,cZ,bT,aJ)}function bh(){var dn="";var dl="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var dm=dl.length;var dk;for(dk=0;dk<6;dk++){dn+=dl.charAt(Math.floor(Math.random()*dm))}return dn}function aA(dl){if(!h){return dl}var dm=(typeof h.timing==="object")&&h.timing?h.timing:undefined;if(!dm){dm=(typeof h.getEntriesByType==="function")&&h.getEntriesByType("navigation")?h.getEntriesByType("navigation")[0]:undefined}if(!dm){return dl}var dk="";if(dm.connectEnd&&dm.fetchStart){if(dm.connectEnd<dm.fetchStart){return}dk+="&pf_net="+Math.round(dm.connectEnd-dm.fetchStart)
|
42 |
+
}if(dm.responseStart&&dm.requestStart){if(dm.responseStart<dm.requestStart){return}dk+="&pf_srv="+Math.round(dm.responseStart-dm.requestStart)}if(dm.responseStart&&dm.responseEnd){if(dm.responseEnd<dm.responseStart){return}dk+="&pf_tfr="+Math.round(dm.responseEnd-dm.responseStart)}if(J(dm.domLoading)){if(dm.domInteractive&&dm.domLoading){if(dm.domInteractive<dm.domLoading){return}dk+="&pf_dm1="+Math.round(dm.domInteractive-dm.domLoading)}}else{if(dm.domInteractive&&dm.responseEnd){if(dm.domInteractive<dm.responseEnd){return}dk+="&pf_dm1="+Math.round(dm.domInteractive-dm.responseEnd)}}if(dm.domComplete&&dm.domInteractive){if(dm.domComplete<dm.domInteractive){return}dk+="&pf_dm2="+Math.round(dm.domComplete-dm.domInteractive)}if(dm.loadEventEnd&&dm.loadEventStart){if(dm.loadEventEnd<dm.loadEventStart){return}dk+="&pf_onl="+Math.round(dm.loadEventEnd-dm.loadEventStart)}return dl+dk}function cr(dm,dH,dI){var dG,dl=new Date(),du=Math.round(dl.getTime()/1000),dr,dE,dn=1024,dN,dv,dD=aR,dp=aU("ses"),dB=aU("ref"),dy=aU("cvar"),dz=aD(dp),dF=bN(),dJ=a5||bO,ds,dk;
|
43 |
+
if(bn){aF()}if(cR){return""}var dA=aZ();var dx=G.characterSet||G.charset;if(!dx||dx.toLowerCase()==="utf-8"){dx=null}ds=dF[0];dk=dF[1];dr=dF[2];dE=dF[3];if(!dz){if(!bx||!ds.length){for(dG in cp){if(Object.prototype.hasOwnProperty.call(cp,dG)){ds=e(dJ,cp[dG]);if(ds.length){break}}}for(dG in bI){if(Object.prototype.hasOwnProperty.call(bI,dG)){dk=e(dJ,bI[dG]);if(dk.length){break}}}}dN=d(bp);dv=dE.length?d(dE):"";if(dN.length&&!aW(dN)&&(!bx||!dv.length||aW(dv))){dE=bp}if(dE.length||ds.length){dr=du;dF=[ds,dk,dr,b3(dE.slice(0,dn))];df(dB,S.JSON.stringify(dF),c7,br,cZ,bT,aJ)}}dm+="&idsite="+b7+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+dl.getHours()+"&m="+dl.getMinutes()+"&s="+dl.getSeconds()+"&url="+s(b3(dJ))+(bp.length?"&urlref="+s(b3(bp)):"")+(Y(bA)?"&uid="+s(bA):"")+"&_id="+dA.uuid+"&_idn="+dA.newVisitor+(ds.length?"&_rcn="+s(ds):"")+(dk.length?"&_rck="+s(dk):"")+"&_refts="+dr+(String(dE).length?"&_ref="+s(b3(dE.slice(0,dn))):"")+(dx?"&cs="+s(dx):"")+"&send_image=0";var dM=cJ();for(dG in dM){if(Object.prototype.hasOwnProperty.call(dM,dG)){dm+="&"+dG+"="+dM[dG]
|
44 |
+
}}var dL=[];if(dH){for(dG in dH){if(Object.prototype.hasOwnProperty.call(dH,dG)&&/^dimension\d+$/.test(dG)){var dq=dG.replace("dimension","");dL.push(parseInt(dq,10));dL.push(String(dq));dm+="&"+dG+"="+s(dH[dG]);delete dH[dG]}}}if(dH&&B(dH)){dH=null}for(dG in ct){if(Object.prototype.hasOwnProperty.call(ct,dG)){dm+="&"+dG+"="+s(ct[dG])}}for(dG in bo){if(Object.prototype.hasOwnProperty.call(bo,dG)){var dw=(-1===M(dL,dG));if(dw){dm+="&dimension"+dG+"="+s(bo[dG])}}}if(dH){dm+="&data="+s(S.JSON.stringify(dH))}else{if(ao){dm+="&data="+s(S.JSON.stringify(ao))}}function dt(dO,dP){var dQ=S.JSON.stringify(dO);if(dQ.length>2){return"&"+dP+"="+s(dQ)}return""}var dK=dj(bX);var dC=dj(cm);dm+=dt(dK,"cvar");dm+=dt(dC,"e_cvar");if(aR){dm+=dt(aR,"_cvar");for(dG in dD){if(Object.prototype.hasOwnProperty.call(dD,dG)){if(aR[dG][0]===""||aR[dG][1]===""){delete aR[dG]}}}if(bR){df(dy,S.JSON.stringify(aR),cn,br,cZ,bT,aJ)}}if(a3&&bG&&!bi){dm=aA(dm);bi=true}if(aM){dm+="&pv_id="+aM}aN(dA);cd();dm+=ac(dI,{tracker:bK,request:dm});
|
45 |
+
if(c1.length){dm+="&"+c1}if(A(cc)){dm=cc(dm)}return dm}bS=function a8(){var dk=new Date();dk=dk.getTime();if(!c0){return false}if(c0+a6<=dk){bK.ping();return true}return false};function bs(dn,dm,ds,dp,dk,dv){var dr="idgoal=0",dl=new Date(),dt=[],du,dq=String(dn).length;if(dq){dr+="&ec_id="+s(dn)}dr+="&revenue="+dm;if(String(ds).length){dr+="&ec_st="+ds}if(String(dp).length){dr+="&ec_tx="+dp}if(String(dk).length){dr+="&ec_sh="+dk}if(String(dv).length){dr+="&ec_dt="+dv}if(c2){for(du in c2){if(Object.prototype.hasOwnProperty.call(c2,du)){if(!J(c2[du][1])){c2[du][1]=""}if(!J(c2[du][2])){c2[du][2]=""}if(!J(c2[du][3])||String(c2[du][3]).length===0){c2[du][3]=0}if(!J(c2[du][4])||String(c2[du][4]).length===0){c2[du][4]=1}dt.push(c2[du])}}dr+="&ec_items="+s(S.JSON.stringify(dt))}dr=cr(dr,ao,"ecommerce");bH(dr,bL);if(dq){c2={}}}function b0(dk,dp,dn,dm,dl,dq){if(String(dk).length&&J(dp)){bs(dk,dp,dn,dm,dl,dq)}}function bu(dk){if(J(dk)){bs("",dk,"","","","")}}function b1(dl,dn,dm){if(!bC){aM=bh()}var dk=cr("action_name="+s(al(dl||bk)),dn,"log");
|
46 |
+
if(a3&&!bi){dk=aA(dk)}bH(dk,bL,dm)}function a1(dm,dl){var dn,dk="(^| )(piwik[_-]"+dl+"|matomo[_-]"+dl;if(dm){for(dn=0;dn<dm.length;dn++){dk+="|"+dm[dn]}}dk+=")( |$)";return new RegExp(dk)}function aV(dk){return(aE&&dk&&0===String(dk).indexOf(aE))}function cv(dp,dk,dq,dl){if(aV(dk)){return 0}var dn=a1(bM,"download"),dm=a1(a9,"link"),dr=new RegExp("\\.("+c8.join("|")+")([?&#]|$)","i");if(dm.test(dp)){return"link"}if(dl||dn.test(dp)||dr.test(dk)){return"download"}if(dq){return 0}return"link"}function au(dl){var dk;dk=dl.parentNode;while(dk!==null&&J(dk)){if(ae.isLinkElement(dl)){break}dl=dk;dk=dl.parentNode}return dl}function dd(dq){dq=au(dq);if(!ae.hasNodeAttribute(dq,"href")){return}if(!J(dq.href)){return}var dp=ae.getAttributeValueFromNode(dq,"href");var dl=dq.pathname||cl(dq.href);var dr=dq.hostname||d(dq.href);var ds=dr.toLowerCase();var dm=dq.href.replace(dr,ds);var dn=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!dn.test(dm)){var dk=cv(dq.className,dm,ar(ds,dl),ae.hasNodeAttribute(dq,"download"));
|
47 |
+
if(dk){return{type:dk,href:dm}}}}function aQ(dk,dl,dm,dn){var dp=v.buildInteractionRequestParams(dk,dl,dm,dn);if(!dp){return}return cr(dp,null,"contentInteraction")}function bc(dk,dl){if(!dk||!dl){return false}var dm=v.findTargetNode(dk);if(v.shouldIgnoreInteraction(dm)){return false}dm=v.findTargetNodeNoDefault(dk);if(dm&&!U(dm,dl)){return false}return true}function cu(dm,dl,dp){if(!dm){return}var dk=v.findParentContentNode(dm);if(!dk){return}if(!bc(dk,dm)){return}var dn=v.buildContentBlock(dk);if(!dn){return}if(!dn.target&&dp){dn.target=dp}return v.buildInteractionRequestParams(dl,dn.name,dn.piece,dn.target)}function aX(dl){if(!cb||!cb.length){return false}var dk,dm;for(dk=0;dk<cb.length;dk++){dm=cb[dk];if(dm&&dm.name===dl.name&&dm.piece===dl.piece&&dm.target===dl.target){return true}}return false}function aY(dk){return function(dp){if(!dk){return}var dm=v.findParentContentNode(dk);var dl;if(dp){dl=dp.target||dp.srcElement}if(!dl){dl=dk}if(!bc(dm,dl)){return}if(!dm){return false}var dq=v.findTargetNode(dm);
|
48 |
+
if(!dq||v.shouldIgnoreInteraction(dq)){return false}var dn=dd(dq);if(da&&dn&&dn.type){return dn.type}return bK.trackContentInteractionNode(dl,"click")}}function b2(dm){if(!dm||!dm.length){return}var dk,dl;for(dk=0;dk<dm.length;dk++){dl=v.findTargetNode(dm[dk]);if(dl&&!dl.contentInteractionTrackingSetupDone){dl.contentInteractionTrackingSetupDone=true;an(dl,"click",aY(dl))}}}function bz(dm,dn){if(!dm||!dm.length){return[]}var dk,dl;for(dk=0;dk<dm.length;dk++){if(aX(dm[dk])){dm.splice(dk,1);dk--}else{cb.push(dm[dk])}}if(!dm||!dm.length){return[]}b2(dn);var dp=[];for(dk=0;dk<dm.length;dk++){dl=cr(v.buildImpressionRequestParams(dm[dk].name,dm[dk].piece,dm[dk].target),undefined,"contentImpressions");if(dl){dp.push(dl)}}return dp}function cA(dl){var dk=v.collectContent(dl);return bz(dk,dl)}function ba(dl){if(!dl||!dl.length){return[]}var dk;for(dk=0;dk<dl.length;dk++){if(!v.isNodeVisible(dl[dk])){dl.splice(dk,1);dk--}}if(!dl||!dl.length){return[]}return cA(dl)}function aG(dm,dk,dl){var dn=v.buildImpressionRequestParams(dm,dk,dl);
|
49 |
+
return cr(dn,null,"contentImpression")}function dc(dn,dl){if(!dn){return}var dk=v.findParentContentNode(dn);var dm=v.buildContentBlock(dk);if(!dm){return}if(!dl){dl="Unknown"}return aQ(dl,dm.name,dm.piece,dm.target)}function cQ(dl,dn,dk,dm){return"e_c="+s(dl)+"&e_a="+s(dn)+(J(dk)?"&e_n="+s(dk):"")+(J(dm)?"&e_v="+s(dm):"")+"&ca=1"}function at(dm,dp,dk,dn,dr,dq){if(!Y(dm)||!Y(dp)){ak("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");return false}var dl=cr(cQ(dm,dp,dk,dn),dr,"event");bH(dl,bL,dq)}function b9(dk,dn,dl,dp){var dm=cr("search="+s(dk)+(dn?"&search_cat="+s(dn):"")+(J(dl)?"&search_count="+dl:""),dp,"sitesearch");bH(dm,bL)}function cU(dk,dp,dn,dm){var dl=cr("idgoal="+dk+(dp?"&revenue="+dp:""),dn,"goal");bH(dl,bL,dm)}function c3(dn,dk,ds,dr,dm){var dq=dk+"="+s(b3(dn));var dl=cu(dm,"click",dn);if(dl){dq+="&"+dl}var dp=cr(dq,ds,"link");bH(dp,bL,dr)}function bV(dl,dk){if(dl!==""){return dl+dk.charAt(0).toUpperCase()+dk.slice(1)
|
50 |
+
}return dk}function ch(dq){var dp,dk,dn=["","webkit","ms","moz"],dm;if(!bf){for(dk=0;dk<dn.length;dk++){dm=dn[dk];if(Object.prototype.hasOwnProperty.call(G,bV(dm,"hidden"))){if(G[bV(dm,"visibilityState")]==="prerender"){dp=true}break}}}if(dp){an(G,dm+"visibilitychange",function dl(){G.removeEventListener(dm+"visibilitychange",dl,false);dq()});return}dq()}function bt(){var dl=bK.getVisitorId();var dk=aK();return dl+dk}function cj(dk){if(!dk){return}if(!ae.hasNodeAttribute(dk,"href")){return}var dl=ae.getAttributeValueFromNode(dk,"href");if(!dl||aV(dl)){return}if(!bK.getVisitorId()){return}dl=j(dl,av);var dm=bt();dl=F(dl,av,dm);ae.setAnyAttribute(dk,"href",dl)}function bm(dn){var dp=ae.getAttributeValueFromNode(dn,"href");if(!dp){return false}dp=String(dp);var dl=dp.indexOf("//")===0||dp.indexOf("http://")===0||dp.indexOf("https://")===0;if(!dl){return false}var dk=dn.pathname||cl(dn.href);var dm=(dn.hostname||d(dn.href)).toLowerCase();if(ar(dm,dk)){if(!cI(cV,L(dm))){return true}return false
|
51 |
+
}return false}function cH(dk){var dl=dd(dk);if(dl&&dl.type){dl.href=o(dl.href);c3(dl.href,dl.type,undefined,null,dk);return}if(cO){dk=au(dk);if(bm(dk)){cj(dk)}}}function cw(){return G.all&&!G.addEventListener}function cW(dk){var dm=dk.which;var dl=(typeof dk.button);if(!dm&&dl!=="undefined"){if(cw()){if(dk.button&1){dm=1}else{if(dk.button&2){dm=3}else{if(dk.button&4){dm=2}}}}else{if(dk.button===0||dk.button==="0"){dm=1}else{if(dk.button&1){dm=2}else{if(dk.button&2){dm=3}}}}}return dm}function bU(dk){switch(cW(dk)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function a2(dk){return dk.target||dk.srcElement}function cX(dk){return dk==="A"||dk==="AREA"}function aC(dk){function dl(dn){var dp=a2(dn);var dq=dp.nodeName;var dm=a1(bB,"ignore");while(!cX(dq)&&dp&&dp.parentNode){dp=dp.parentNode;dq=dp.nodeName}if(dp&&cX(dq)&&!dm.test(dp.className)){return dp}}return function(dp){dp=dp||S.event;var dq=dl(dp);if(!dq){return}var dn=bU(dp);if(dp.type==="click"){var dm=false;if(dk&&dn==="middle"){dm=true
|
52 |
+
}if(dq&&!dm){cH(dq)}}else{if(dp.type==="mousedown"){if(dn==="middle"&&dq){aS=dn;bD=dq}else{aS=bD=null}}else{if(dp.type==="mouseup"){if(dn===aS&&dq===bD){cH(dq)}aS=bD=null}else{if(dp.type==="contextmenu"){cH(dq)}}}}}}function aq(dn,dm,dk){var dl=typeof dm;if(dl==="undefined"){dm=true}an(dn,"click",aC(dm),dk);if(dm){an(dn,"mouseup",aC(dm),dk);an(dn,"mousedown",aC(dm),dk);an(dn,"contextmenu",aC(dm),dk)}}function aT(dl,dp,dq){if(cf){return true}cf=true;var dr=false;var dn,dm;function dk(){dr=true}m(function(){function ds(du){setTimeout(function(){if(!cf){return}dr=false;dq.trackVisibleContentImpressions();ds(du)},du)}function dt(du){setTimeout(function(){if(!cf){return}if(dr){dr=false;dq.trackVisibleContentImpressions()}dt(du)},du)}if(dl){dn=["scroll","resize"];for(dm=0;dm<dn.length;dm++){if(G.addEventListener){G.addEventListener(dn[dm],dk,false)}else{S.attachEvent("on"+dn[dm],dk)}}dt(100)}if(dp&&dp>0){dp=parseInt(dp,10);ds(dp)}})}var bF={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dk=this.requests;
|
53 |
+
this.requests=[];if(dk.length===1){bH(dk[0],bL)}else{dg(dk,bL)}},canQueue:function(){return !l&&this.enabled},pushMultiple:function(dl){if(!this.canQueue()){dg(dl,bL);return}var dk;for(dk=0;dk<dl.length;dk++){this.push(dl[dk])}},push:function(dk){if(!dk){return}if(!this.canQueue()){bH(dk,bL);return}bF.requests.push(dk);if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.timeout=setTimeout(function(){bF.timeout=null;bF.sendRequests()},bF.interval);var dl="RequestQueue"+ax;if(!Object.prototype.hasOwnProperty.call(b,dl)){b[dl]={unload:function(){if(bF.timeout){clearTimeout(bF.timeout)}bF.sendRequests()}}}}};bj();aN();this.hasConsent=function(){return bE};this.getVisitorId=function(){return aZ().uuid};this.getVisitorInfo=function(){return cP()};this.getAttributionInfo=function(){return bN()};this.getAttributionCampaignName=function(){return bN()[0]};this.getAttributionCampaignKeyword=function(){return bN()[1]};this.getAttributionReferrerTimestamp=function(){return bN()[2]};this.getAttributionReferrerUrl=function(){return bN()[3]
|
54 |
+
};this.setTrackerUrl=function(dk){aE=dk};this.getTrackerUrl=function(){return aE};this.getMatomoUrl=function(){return W(this.getTrackerUrl(),bJ)};this.getPiwikUrl=function(){return this.getMatomoUrl()};this.addTracker=function(dm,dl){if(!J(dm)||null===dm){dm=this.getTrackerUrl()}var dk=new P(dm,dl);I.push(dk);t.trigger("TrackerAdded",[this]);return dk};this.getSiteId=function(){return b7};this.setSiteId=function(dk){b4(dk)};this.resetUserId=function(){bA=""};this.setUserId=function(dk){if(Y(dk)){bA=dk}};this.setVisitorId=function(dl){var dk=/[0-9A-Fa-f]{16}/g;if(w(dl)&&dk.test(dl)){bP=dl}else{ak("Invalid visitorId set"+dl)}};this.getUserId=function(){return bA};this.setCustomData=function(dk,dl){if(V(dk)){ao=dk}else{if(!ao){ao={}}ao[dk]=dl}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(dk){cc=dk};this.appendToTrackingUrl=function(dk){c1=dk};this.getRequest=function(dk){return cr(dk)};this.addPlugin=function(dk,dl){b[dk]=dl};this.setCustomDimension=function(dk,dl){dk=parseInt(dk,10);
|
55 |
+
if(dk>0){if(!J(dl)){dl=""}if(!w(dl)){dl=String(dl)}bo[dk]=dl}};this.getCustomDimension=function(dk){dk=parseInt(dk,10);if(dk>0&&Object.prototype.hasOwnProperty.call(bo,dk)){return bo[dk]}};this.deleteCustomDimension=function(dk){dk=parseInt(dk,10);if(dk>0){delete bo[dk]}};this.setCustomVariable=function(dl,dk,dp,dm){var dn;if(!J(dm)){dm="visit"}if(!J(dk)){return}if(!J(dp)){dp=""}if(dl>0){dk=!w(dk)?String(dk):dk;dp=!w(dp)?String(dp):dp;dn=[dk.slice(0,bv),dp.slice(0,bv)];if(dm==="visit"||dm===2){cG();aR[dl]=dn}else{if(dm==="page"||dm===3){bX[dl]=dn}else{if(dm==="event"){cm[dl]=dn}}}}};this.getCustomVariable=function(dl,dm){var dk;if(!J(dm)){dm="visit"}if(dm==="page"||dm===3){dk=bX[dl]}else{if(dm==="event"){dk=cm[dl]}else{if(dm==="visit"||dm===2){cG();dk=aR[dl]}}}if(!J(dk)||(dk&&dk[0]==="")){return false}return dk};this.deleteCustomVariable=function(dk,dl){if(this.getCustomVariable(dk,dl)){this.setCustomVariable(dk,"","",dl)}};this.deleteCustomVariables=function(dk){if(dk==="page"||dk===3){bX={}
|
56 |
+
}else{if(dk==="event"){cm={}}else{if(dk==="visit"||dk===2){aR={}}}}};this.storeCustomVariablesInCookie=function(){bR=true};this.setLinkTrackingTimer=function(dk){bL=dk};this.getLinkTrackingTimer=function(){return bL};this.setDownloadExtensions=function(dk){if(w(dk)){dk=dk.split("|")}c8=dk};this.addDownloadExtensions=function(dl){var dk;if(w(dl)){dl=dl.split("|")}for(dk=0;dk<dl.length;dk++){c8.push(dl[dk])}};this.removeDownloadExtensions=function(dm){var dl,dk=[];if(w(dm)){dm=dm.split("|")}for(dl=0;dl<c8.length;dl++){if(M(dm,c8[dl])===-1){dk.push(c8[dl])}}c8=dk};this.setDomains=function(dk){ay=w(dk)?[dk]:dk;var dp=false,dm=0,dl;for(dm;dm<ay.length;dm++){dl=String(ay[dm]);if(cI(cV,L(dl))){dp=true;break}var dn=cl(dl);if(dn&&dn!=="/"&&dn!=="/*"){dp=true;break}}if(!dp){ay.push(cV)}};this.enableCrossDomainLinking=function(){cO=true};this.disableCrossDomainLinking=function(){cO=false};this.isCrossDomainLinkingEnabled=function(){return cO};this.setCrossDomainLinkingTimeout=function(dk){a0=dk};this.getCrossDomainLinkingUrlParameter=function(){return s(av)+"="+s(bt())
|
57 |
+
};this.setIgnoreClasses=function(dk){bB=w(dk)?[dk]:dk};this.setRequestMethod=function(dk){if(dk){db=String(dk).toUpperCase()}else{db=ci}if(db==="GET"){this.disableAlwaysUseSendBeacon()}};this.setRequestContentType=function(dk){cx=dk||aI};this.setGenerationTimeMs=function(dk){ak("setGenerationTimeMs is no longer supported since Matomo 4. The call will be ignored. There is currently no replacement yet.")};this.setReferrerUrl=function(dk){bp=dk};this.setCustomUrl=function(dk){a5=bW(bO,dk)};this.getCurrentUrl=function(){return a5||bO};this.setDocumentTitle=function(dk){bk=dk};this.setPageViewId=function(dk){aM=dk;bC=true};this.setAPIUrl=function(dk){bJ=dk};this.setDownloadClasses=function(dk){bM=w(dk)?[dk]:dk};this.setLinkClasses=function(dk){a9=w(dk)?[dk]:dk};this.setCampaignNameKey=function(dk){cp=w(dk)?[dk]:dk};this.setCampaignKeywordKey=function(dk){bI=w(dk)?[dk]:dk};this.discardHashTag=function(dk){bQ=dk};this.setCookieNamePrefix=function(dk){bl=dk;if(aR){aR=bY()}};this.setCookieDomain=function(dk){var dl=L(dk);
|
58 |
+
if(!bn&&!by(dl)){ak("Can't write cookie on domain "+dk)}else{cZ=dl;bj()}};this.getCookieDomain=function(){return cZ};this.hasCookies=function(){return"1"===b6()};this.setSessionCookie=function(dm,dl,dk){if(!dm){throw new Error("Missing cookie name")}if(!J(dk)){dk=cn}bw.push(dm);df(aU(dm),dl,dk,br,cZ,bT,aJ)};this.getCookie=function(dl){var dk=aD(aU(dl));if(dk===0){return null}return dk};this.setCookiePath=function(dk){br=dk;bj()};this.getCookiePath=function(dk){return br};this.setVisitorCookieTimeout=function(dk){cL=dk*1000};this.setSessionCookieTimeout=function(dk){cn=dk*1000};this.getSessionCookieTimeout=function(){return cn};this.setReferralCookieTimeout=function(dk){c7=dk*1000};this.setConversionAttributionFirstReferrer=function(dk){bx=dk};this.setSecureCookie=function(dk){if(dk&&location.protocol!=="https:"){ak("Error in setSecureCookie: You cannot use `Secure` on http.");return}bT=dk};this.setCookieSameSite=function(dk){dk=String(dk);dk=dk.charAt(0).toUpperCase()+dk.toLowerCase().slice(1);
|
59 |
+
if(dk!=="None"&&dk!=="Lax"&&dk!=="Strict"){ak("Ignored value for sameSite. Please use either Lax, None, or Strict.");return}if(dk==="None"){if(location.protocol==="https:"){this.setSecureCookie(true)}else{ak("sameSite=None cannot be used on http, reverted to sameSite=Lax.");dk="Lax"}}aJ=dk};this.disableCookies=function(){bn=true;if(b7){aF()}};this.areCookiesEnabled=function(){return !bn};this.setCookieConsentGiven=function(){if(bn&&!cR){bn=false;if(b7&&aw){aN();var dk=cr("ping=1",null,"ping");bH(dk,bL)}}};this.requireCookieConsent=function(){if(this.getRememberedCookieConsent()){return false}this.disableCookies();return true};this.getRememberedCookieConsent=function(){return aD(cE)};this.forgetCookieConsentGiven=function(){bZ(cE,br,cZ);this.disableCookies()};this.rememberCookieConsentGiven=function(dl){if(dl){dl=dl*60*60*1000}else{dl=30*365*24*60*60*1000}this.setCookieConsentGiven();var dk=new Date().getTime();df(cE,dk,dl,br,cZ,bT,aJ)};this.deleteCookies=function(){aF()};this.setDoNotTrack=function(dl){var dk=g.doNotTrack||g.msDoNotTrack;
|
60 |
+
cR=dl&&(dk==="yes"||dk==="1");if(cR){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cY=true};this.disableAlwaysUseSendBeacon=function(){cY=false};this.addListener=function(dl,dk){aq(dl,dk,false)};this.enableLinkTracking=function(dl){if(da){return}da=true;var dk=this;p(function(){ap=true;var dm=G.body;aq(dm,dl,true)})};this.enableJSErrorTracking=function(){if(cT){return}cT=true;var dk=S.onerror;S.onerror=function(dq,dn,dm,dp,dl){ch(function(){var dr="JavaScript Errors";var ds=dn+":"+dm;if(dp){ds+=":"+dp}if(M(cs,dr+ds+dq)===-1){cs.push(dr+ds+dq);at(dr,ds,dq)}});if(dk){return dk(dq,dn,dm,dp,dl)}return false}};this.disablePerformanceTracking=function(){a3=false};this.enableHeartBeatTimer=function(dk){dk=Math.max(dk||15,5);a6=dk*1000;if(c0!==null){dh()}};this.disableHeartBeatTimer=function(){if(a6||aO){if(S.removeEventListener){S.removeEventListener("focus",bb);S.removeEventListener("blur",az)}else{if(S.detachEvent){S.detachEvent("onfocus",bb);S.detachEvent("onblur",az)}}}a6=null;
|
61 |
+
aO=false};this.killFrame=function(){if(S.location!==S.top.location){S.top.location=S.location}};this.redirectFile=function(dk){if(S.location.protocol==="file:"){S.location=dk}};this.setCountPreRendered=function(dk){bf=dk};this.trackGoal=function(dk,dn,dm,dl){ch(function(){cU(dk,dn,dm,dl)})};this.trackLink=function(dl,dk,dn,dm){ch(function(){c3(dl,dk,dn,dm)})};this.getNumTrackedPageViews=function(){return cq};this.trackPageView=function(dk,dm,dl){cb=[];cM=[];cs=[];if(N(b7)){ch(function(){Z(aE,bJ,b7)})}else{ch(function(){cq++;b1(dk,dm,dl)})}};this.trackAllContentImpressions=function(){if(N(b7)){return}ch(function(){p(function(){var dk=v.findContentNodes();var dl=cA(dk);bF.pushMultiple(dl)})})};this.trackVisibleContentImpressions=function(dk,dl){if(N(b7)){return}if(!J(dk)){dk=true}if(!J(dl)){dl=750}aT(dk,dl,this);ch(function(){m(function(){var dm=v.findContentNodes();var dn=ba(dm);bF.pushMultiple(dn)})})};this.trackContentImpression=function(dm,dk,dl){if(N(b7)){return}dm=a(dm);dk=a(dk);dl=a(dl);
|
62 |
+
if(!dm){return}dk=dk||"Unknown";ch(function(){var dn=aG(dm,dk,dl);bF.push(dn)})};this.trackContentImpressionsWithinNode=function(dk){if(N(b7)||!dk){return}ch(function(){if(cf){m(function(){var dl=v.findContentNodesWithinNode(dk);var dm=ba(dl);bF.pushMultiple(dm)})}else{p(function(){var dl=v.findContentNodesWithinNode(dk);var dm=cA(dl);bF.pushMultiple(dm)})}})};this.trackContentInteraction=function(dm,dn,dk,dl){if(N(b7)){return}dm=a(dm);dn=a(dn);dk=a(dk);dl=a(dl);if(!dm||!dn){return}dk=dk||"Unknown";ch(function(){var dp=aQ(dm,dn,dk,dl);if(dp){bF.push(dp)}})};this.trackContentInteractionNode=function(dm,dl){if(N(b7)||!dm){return}var dk=null;ch(function(){dk=dc(dm,dl);if(dk){bF.push(dk)}});return dk};this.logAllContentBlocksOnPage=function(){var dm=v.findContentNodes();var dk=v.collectContent(dm);var dl=typeof console;if(dl!=="undefined"&&console&&console.log){console.log(dk)}};this.trackEvent=function(dl,dn,dk,dm,dq,dp){ch(function(){at(dl,dn,dk,dm,dq,dp)})};this.trackSiteSearch=function(dk,dm,dl,dn){cb=[];
|
63 |
+
ch(function(){b9(dk,dm,dl,dn)})};this.setEcommerceView=function(dp,dk,dm,dl){ct={};if(Y(dm)){dm=String(dm)}if(!J(dm)||dm===null||dm===false||!dm.length){dm=""}else{if(dm instanceof Array){dm=S.JSON.stringify(dm)}}var dn="_pkc";ct[dn]=dm;if(J(dl)&&dl!==null&&dl!==false&&String(dl).length){dn="_pkp";ct[dn]=dl}if(!Y(dp)&&!Y(dk)){return}if(Y(dp)){dn="_pks";ct[dn]=dp}if(!Y(dk)){dk=""}dn="_pkn";ct[dn]=dk};this.getEcommerceItems=function(){return JSON.parse(JSON.stringify(c2))};this.addEcommerceItem=function(dp,dk,dm,dl,dn){if(Y(dp)){c2[dp]=[String(dp),dk,dm,dl,dn]}};this.removeEcommerceItem=function(dk){if(Y(dk)){dk=String(dk);delete c2[dk]}};this.clearEcommerceCart=function(){c2={}};this.trackEcommerceOrder=function(dk,dp,dn,dm,dl,dq){b0(dk,dp,dn,dm,dl,dq)};this.trackEcommerceCartUpdate=function(dk){bu(dk)};this.trackRequest=function(dl,dn,dm,dk){ch(function(){var dp=cr(dl,dn,dk);bH(dp,bL,dm)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bF.enabled=false
|
64 |
+
};this.setRequestQueueInterval=function(dk){if(dk<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bF.interval=dk};this.queueRequest=function(dk){ch(function(){var dl=cr(dk);bF.push(dl)})};this.isConsentRequired=function(){return cB};this.getRememberedConsent=function(){var dk=aD(be);if(aD(cN)){if(dk){bZ(be,br,cZ)}return null}if(!dk||dk===0){return null}return dk};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()};this.requireConsent=function(){cB=true;bE=this.hasRememberedConsent();if(!bE){bn=true}x++;b["CoreConsent"+x]={unload:function(){if(!bE){aF()}}}};this.setConsentGiven=function(dl){bE=true;bZ(cN,br,cZ);var dm,dk;for(dm=0;dm<cM.length;dm++){dk=typeof cM[dm];if(dk==="string"){bH(cM[dm],bL)}else{if(dk==="object"){dg(cM[dm],bL)}}}cM=[];if(!J(dl)||dl){this.setCookieConsentGiven()}};this.rememberConsentGiven=function(dm){if(dm){dm=dm*60*60*1000}else{dm=30*365*24*60*60*1000}var dk=true;this.setConsentGiven(dk);var dl=new Date().getTime();
|
65 |
+
df(be,dl,dm,br,cZ,bT,aJ)};this.forgetConsentGiven=function(){var dk=30*365*24*60*60*1000;bZ(be,br,cZ);df(cN,new Date().getTime(),dk,br,cZ,bT,aJ);this.forgetCookieConsentGiven();this.requireConsent()};this.isUserOptedOut=function(){return !bE};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=function(){this.setConsentGiven(false)};m(function(){setTimeout(function(){bG=true},0)});t.trigger("TrackerSetup",[this])}function H(){return{push:af}}function c(au,at){var av={};var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];if(av[ap]>1&&ap!=="addTracker"&&ap!=="enableLinkTracking"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Matomo trackers documentation: https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","forgetCookieConsentGiven","requireCookieConsent","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking"];
|
66 |
+
function ad(aq,ap){var ao=new P(aq,ap);I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)){g.serviceWorker.ready.then(function(ao){if(ao&&ao.sync){return ao.sync.register("matomoSync")}},function(){})}},false);an(S,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getMatomoUrl());if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
app/lang/ar.json
CHANGED
@@ -1050,9 +1050,7 @@
|
|
1050 |
"SystemCheckGzcompressHelp": "تحتاج إلى تفعيل إضافة zlib ودالة gzcompress.",
|
1051 |
"SystemCheckGzuncompressHelp": "تحتاج إلى تفعيل إضافة zlib ودالة gzcompress.",
|
1052 |
"SystemCheckHashHelp": "تحتاج إلى إعداد وإعادة بناء PHP مع تمكين دعم دالة hash() بأن تستثني الخيار --disable-hash .",
|
1053 |
-
"SystemCheckIconvHelp": "تحتاج إلى إعداد وإعادة بناء PHP مع تفعيل دعم iconv: --with-iconv.",
|
1054 |
"SystemCheckMailHelp": "لن يتم إرسال رسائل التغذية الراجعة وكلمات المرور المفقودة بدون mail().",
|
1055 |
-
"SystemCheckMbstring": "mbstring",
|
1056 |
"SystemCheckMemoryLimit": "حد الذاكرة",
|
1057 |
"SystemCheckMemoryLimitHelp": "في المواقع ذات الزيارات الكبيرة، فإن عملية الأرشفة تتطلب ذاكرة أعلى مما هو مسموح به حالياً. إذا تطلب الأمر، قم بتغيير memory_limit في ملف php.ini الخاص بك.",
|
1058 |
"SystemCheckNoErrorsOrWarnings": "لا توجد أي أخطاء أو تحذيرات",
|
@@ -1067,7 +1065,6 @@
|
|
1067 |
"SystemCheckPdoAndMysqliHelp": "على ملقم لينوكس يمكنك ضبط PHP بالإعدادات التالية: %1$s في ملف php.ini أضف السطور التالية: %2$s",
|
1068 |
"SystemCheckPhp": "إصدار PHP",
|
1069 |
"SystemCheckPhpPdoAndMysqli": "لمزيد من المعلومات عن: %1$sPHP PDO%2$s و %3$sMYSQLI%4$s.",
|
1070 |
-
"SystemCheckSplHelp": "ستحتاج لضبط وإعادة بناء PHP وتكون مكتبة PHP القياسية SPL فيها مفعلة (افتراضياً).",
|
1071 |
"SystemCheckSettings": "إعدادات PHP المطلوبة (php.ini)",
|
1072 |
"SystemCheckSummaryNoProblems": "رائع! لاتوجد أية مشاكل في وضع Matomo الحالي عندك. إتبسط ياعمّ !",
|
1073 |
"SystemCheckSummaryThereWereErrors": "أوه ! اكتشف Matomo بعض %1$s المشاكل الهامة %2$s في بيئة Matomo لديك. %3$s يجب إصلاح هذه المشاكل حالاً.%4$s",
|
1050 |
"SystemCheckGzcompressHelp": "تحتاج إلى تفعيل إضافة zlib ودالة gzcompress.",
|
1051 |
"SystemCheckGzuncompressHelp": "تحتاج إلى تفعيل إضافة zlib ودالة gzcompress.",
|
1052 |
"SystemCheckHashHelp": "تحتاج إلى إعداد وإعادة بناء PHP مع تمكين دعم دالة hash() بأن تستثني الخيار --disable-hash .",
|
|
|
1053 |
"SystemCheckMailHelp": "لن يتم إرسال رسائل التغذية الراجعة وكلمات المرور المفقودة بدون mail().",
|
|
|
1054 |
"SystemCheckMemoryLimit": "حد الذاكرة",
|
1055 |
"SystemCheckMemoryLimitHelp": "في المواقع ذات الزيارات الكبيرة، فإن عملية الأرشفة تتطلب ذاكرة أعلى مما هو مسموح به حالياً. إذا تطلب الأمر، قم بتغيير memory_limit في ملف php.ini الخاص بك.",
|
1056 |
"SystemCheckNoErrorsOrWarnings": "لا توجد أي أخطاء أو تحذيرات",
|
1065 |
"SystemCheckPdoAndMysqliHelp": "على ملقم لينوكس يمكنك ضبط PHP بالإعدادات التالية: %1$s في ملف php.ini أضف السطور التالية: %2$s",
|
1066 |
"SystemCheckPhp": "إصدار PHP",
|
1067 |
"SystemCheckPhpPdoAndMysqli": "لمزيد من المعلومات عن: %1$sPHP PDO%2$s و %3$sMYSQLI%4$s.",
|
|
|
1068 |
"SystemCheckSettings": "إعدادات PHP المطلوبة (php.ini)",
|
1069 |
"SystemCheckSummaryNoProblems": "رائع! لاتوجد أية مشاكل في وضع Matomo الحالي عندك. إتبسط ياعمّ !",
|
1070 |
"SystemCheckSummaryThereWereErrors": "أوه ! اكتشف Matomo بعض %1$s المشاكل الهامة %2$s في بيئة Matomo لديك. %3$s يجب إصلاح هذه المشاكل حالاً.%4$s",
|
app/lang/be.json
CHANGED
@@ -543,9 +543,7 @@
|
|
543 |
"SystemCheckGlobHelp": "Гэтая убудаваная функцыя адключана на вашым хосце. Matomo паспрабуе эмуляваць гэтую функцыю, але могуць паўстаць дадатковыя абмежаванні бяспекі. Функцыянальныя магчымасці могуць быць закрануты.",
|
544 |
"SystemCheckGzcompressHelp": "Вам неабходна ўключыць пашырэнне zlib і функцыю gzcompress.",
|
545 |
"SystemCheckGzuncompressHelp": "Вам неабходна ўключыць пашырэнне zlib і функцыю gzuncompress.",
|
546 |
-
"SystemCheckIconvHelp": "Вам неабходна сканфігураваць PHP на падтрымку \"iconv\", і перакампіляваць з параметрам --with-iconv.",
|
547 |
"SystemCheckMailHelp": "Функцыі водгукаў о Matomo і аднаўленне пароляў не будуць працаваць без mail().",
|
548 |
-
"SystemCheckMbstring": "mbstring",
|
549 |
"SystemCheckMemoryLimit": "Абмежаванне памяці",
|
550 |
"SystemCheckMemoryLimitHelp": "На вэб-сайтах з высокім трафікам, працэс архівавання можа запатрабаваць больш памяці, чым дазволена. Пры неабходнасці, змяніце memory_limit дырэктыву ў файле php.ini.",
|
551 |
"SystemCheckOpenURL": "адкрыць URL-адрас",
|
@@ -557,7 +555,6 @@
|
|
557 |
"SystemCheckPdoAndMysqliHelp": "На Linux серверы вы можаце скампіляваць php з наступнымі параметрамі:%1$s у вашым php.ini, дадаць наступныя радкі: %2$s",
|
558 |
"SystemCheckPhp": "Версія PHP",
|
559 |
"SystemCheckPhpPdoAndMysqli": "Больш падрабязная інфармацыя па: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
560 |
-
"SystemCheckSplHelp": "Вам неабходна сканфігураваць і перасабраць PHP з уключанай стандартнай бібліятэкай (значэнне па змаўчанні).",
|
561 |
"SystemCheckTimeLimitHelp": "На вэб-сайтах з высокім трафікам, працэс архівавання можа спатрабаваць больш часу, чым дазволена. Калі неабходна, змяніце дырэктыву max_execution_time ў файле php.ini.",
|
562 |
"SystemCheckTracker": "Статус адсочвання",
|
563 |
"SystemCheckWarnDomHelp": "Вы павінны ўключыць пашырэнне \"dom\" (Напр., усталяваць пакеты \"php-dom\" і\/або \"php-xml\")",
|
543 |
"SystemCheckGlobHelp": "Гэтая убудаваная функцыя адключана на вашым хосце. Matomo паспрабуе эмуляваць гэтую функцыю, але могуць паўстаць дадатковыя абмежаванні бяспекі. Функцыянальныя магчымасці могуць быць закрануты.",
|
544 |
"SystemCheckGzcompressHelp": "Вам неабходна ўключыць пашырэнне zlib і функцыю gzcompress.",
|
545 |
"SystemCheckGzuncompressHelp": "Вам неабходна ўключыць пашырэнне zlib і функцыю gzuncompress.",
|
|
|
546 |
"SystemCheckMailHelp": "Функцыі водгукаў о Matomo і аднаўленне пароляў не будуць працаваць без mail().",
|
|
|
547 |
"SystemCheckMemoryLimit": "Абмежаванне памяці",
|
548 |
"SystemCheckMemoryLimitHelp": "На вэб-сайтах з высокім трафікам, працэс архівавання можа запатрабаваць больш памяці, чым дазволена. Пры неабходнасці, змяніце memory_limit дырэктыву ў файле php.ini.",
|
549 |
"SystemCheckOpenURL": "адкрыць URL-адрас",
|
555 |
"SystemCheckPdoAndMysqliHelp": "На Linux серверы вы можаце скампіляваць php з наступнымі параметрамі:%1$s у вашым php.ini, дадаць наступныя радкі: %2$s",
|
556 |
"SystemCheckPhp": "Версія PHP",
|
557 |
"SystemCheckPhpPdoAndMysqli": "Больш падрабязная інфармацыя па: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
|
|
558 |
"SystemCheckTimeLimitHelp": "На вэб-сайтах з высокім трафікам, працэс архівавання можа спатрабаваць больш часу, чым дазволена. Калі неабходна, змяніце дырэктыву max_execution_time ў файле php.ini.",
|
559 |
"SystemCheckTracker": "Статус адсочвання",
|
560 |
"SystemCheckWarnDomHelp": "Вы павінны ўключыць пашырэнне \"dom\" (Напр., усталяваць пакеты \"php-dom\" і\/або \"php-xml\")",
|
app/lang/bg.json
CHANGED
@@ -1088,9 +1088,7 @@
|
|
1088 |
"SystemCheckGlobHelp": "Вградената функция е изключена от Вашият хостинг. Matomo ще се опитва да подражава на тази функция, но може да се сблъска с допълнителни ограничения за сигурност. Функционалността може да бъде засегната.",
|
1089 |
"SystemCheckGzcompressHelp": "Трябва да активирате zlib и gzcompress разширенията.",
|
1090 |
"SystemCheckGzuncompressHelp": "Трябва да активирате zlib и gzcompress разширенията.",
|
1091 |
-
"SystemCheckIconvHelp": "Трябва да конфигурирате и възстановите PHP с \"iconv\" активна поддръжка, --with-iconc",
|
1092 |
"SystemCheckMailHelp": "Модулите Обратна връзка и Забравена парола не биха работили без mail() функцията на PHP.",
|
1093 |
-
"SystemCheckMbstring": "mbstring",
|
1094 |
"SystemCheckMemoryLimit": "Лимит на паметта",
|
1095 |
"SystemCheckMemoryLimitHelp": "За силно натоварените сайтове, времето за архивиране на данните отнема повече ресурси. Ако е необходимо моля редактирайте memory_limit директивата в php.ini.",
|
1096 |
"SystemCheckOpenURL": "Отворен адрес(URL)",
|
@@ -1102,7 +1100,6 @@
|
|
1102 |
"SystemCheckPdoAndMysqliHelp": "За Linux сървър компилирайте php със следните опции: %1$s във Вашия php.ini, добавете следните редове: %2$s",
|
1103 |
"SystemCheckPhp": "PHP версия",
|
1104 |
"SystemCheckPhpPdoAndMysqli": "Повече информация: %1$sPHP PDO%2$s и %3$sMYSQLI%4$s.",
|
1105 |
-
"SystemCheckSplHelp": "Трябва да конфигурирате PHP - Standard PHP Library (SPL) да се поддържа (по подразбиране).",
|
1106 |
"SystemCheckSummaryNoProblems": "Ура-а-а! Няма проблем с настройката на вашия Matomo. Успокойте се, всичко е наред.",
|
1107 |
"SystemCheckSummaryThereWereWarnings": "Има проблеми, които засягат вашата система. Matomo ще работи, но може да срещнете някои дребни трудности при работа.",
|
1108 |
"SystemCheckTimeLimitHelp": "За силно натоварените сайтове, времето за архивиране на данните отнема повече време. Ако е необходимо моля редактирайте max_execution_time директивата в php.ini файла.",
|
1088 |
"SystemCheckGlobHelp": "Вградената функция е изключена от Вашият хостинг. Matomo ще се опитва да подражава на тази функция, но може да се сблъска с допълнителни ограничения за сигурност. Функционалността може да бъде засегната.",
|
1089 |
"SystemCheckGzcompressHelp": "Трябва да активирате zlib и gzcompress разширенията.",
|
1090 |
"SystemCheckGzuncompressHelp": "Трябва да активирате zlib и gzcompress разширенията.",
|
|
|
1091 |
"SystemCheckMailHelp": "Модулите Обратна връзка и Забравена парола не биха работили без mail() функцията на PHP.",
|
|
|
1092 |
"SystemCheckMemoryLimit": "Лимит на паметта",
|
1093 |
"SystemCheckMemoryLimitHelp": "За силно натоварените сайтове, времето за архивиране на данните отнема повече ресурси. Ако е необходимо моля редактирайте memory_limit директивата в php.ini.",
|
1094 |
"SystemCheckOpenURL": "Отворен адрес(URL)",
|
1100 |
"SystemCheckPdoAndMysqliHelp": "За Linux сървър компилирайте php със следните опции: %1$s във Вашия php.ini, добавете следните редове: %2$s",
|
1101 |
"SystemCheckPhp": "PHP версия",
|
1102 |
"SystemCheckPhpPdoAndMysqli": "Повече информация: %1$sPHP PDO%2$s и %3$sMYSQLI%4$s.",
|
|
|
1103 |
"SystemCheckSummaryNoProblems": "Ура-а-а! Няма проблем с настройката на вашия Matomo. Успокойте се, всичко е наред.",
|
1104 |
"SystemCheckSummaryThereWereWarnings": "Има проблеми, които засягат вашата система. Matomo ще работи, но може да срещнете някои дребни трудности при работа.",
|
1105 |
"SystemCheckTimeLimitHelp": "За силно натоварените сайтове, времето за архивиране на данните отнема повече време. Ако е необходимо моля редактирайте max_execution_time директивата в php.ini файла.",
|
app/lang/ca.json
CHANGED
@@ -945,9 +945,7 @@
|
|
945 |
"SystemCheckGlobHelp": "Aquesta funció s'ha deshabilitat al vostre host. El Matomo probarà d'emular aquesta funció però pot trobar-se amb altres restriccions de seguretat. Això impactarà a la funcionalitat.",
|
946 |
"SystemCheckGzcompressHelp": "Heu d'activar l'extensió zlib i la funció gzcompress.",
|
947 |
"SystemCheckGzuncompressHelp": "Heu d'activar l'extensió zlib i la funcció gzuncompress.",
|
948 |
-
"SystemCheckIconvHelp": "Heu de configurar i tornar a contruir el PHP amb el suport per \"iconv\" activat, --with-iconv.",
|
949 |
"SystemCheckMailHelp": "Les opinions i els missatges de pèrdua de la contrassenya no s'enviaran sense la funció mail().",
|
950 |
-
"SystemCheckMbstring": "mbstring",
|
951 |
"SystemCheckMemoryLimit": "Límit de memòria",
|
952 |
"SystemCheckMemoryLimitHelp": "En un lloc web amb trànsit elevat, la creació de l'arxiu pot necessitar més memòria de l'acceptada actualment.<br \/>Feu una ullada al 'memory_limit' del vostre fitxer php.ini si és necessari.",
|
953 |
"SystemCheckOpenURL": "Obre l'adreça",
|
@@ -959,7 +957,6 @@
|
|
959 |
"SystemCheckPdoAndMysqliHelp": "En un servidor Linux podeu compilar el php amb les següents opcions: %1$s Al fitxer php.ini, afegiu les línies: %2$s",
|
960 |
"SystemCheckPhp": "Versió del PHP",
|
961 |
"SystemCheckPhpPdoAndMysqli": "Trobareu més informació a %1$sPHP PDO%2$s i %3$sMYSQLI%4$s.",
|
962 |
-
"SystemCheckSplHelp": "Heu de configurar i recompilar el PHP amb la biblioteca Standard PHP Library (SPL) activada (per defecte).",
|
963 |
"SystemCheckSummaryNoProblems": "Urra!! No hi ha cap problema amb la vostra configuració de Matomo.",
|
964 |
"SystemCheckSummaryThereWereErrors": "Ohhh! El Matomo ha trobat algunes %1$s incidències crítiques %2$s amb la vostra configuració de Matomo. %3$s Aquestes incidències s'han de solucionar inmediatament. %4$s",
|
965 |
"SystemCheckSummaryThereWereWarnings": "Hi ha alguna incidència amb el vostre sistema. El Matomo funcionarà, però podeu tenir alguns problemes menors.",
|
945 |
"SystemCheckGlobHelp": "Aquesta funció s'ha deshabilitat al vostre host. El Matomo probarà d'emular aquesta funció però pot trobar-se amb altres restriccions de seguretat. Això impactarà a la funcionalitat.",
|
946 |
"SystemCheckGzcompressHelp": "Heu d'activar l'extensió zlib i la funció gzcompress.",
|
947 |
"SystemCheckGzuncompressHelp": "Heu d'activar l'extensió zlib i la funcció gzuncompress.",
|
|
|
948 |
"SystemCheckMailHelp": "Les opinions i els missatges de pèrdua de la contrassenya no s'enviaran sense la funció mail().",
|
|
|
949 |
"SystemCheckMemoryLimit": "Límit de memòria",
|
950 |
"SystemCheckMemoryLimitHelp": "En un lloc web amb trànsit elevat, la creació de l'arxiu pot necessitar més memòria de l'acceptada actualment.<br \/>Feu una ullada al 'memory_limit' del vostre fitxer php.ini si és necessari.",
|
951 |
"SystemCheckOpenURL": "Obre l'adreça",
|
957 |
"SystemCheckPdoAndMysqliHelp": "En un servidor Linux podeu compilar el php amb les següents opcions: %1$s Al fitxer php.ini, afegiu les línies: %2$s",
|
958 |
"SystemCheckPhp": "Versió del PHP",
|
959 |
"SystemCheckPhpPdoAndMysqli": "Trobareu més informació a %1$sPHP PDO%2$s i %3$sMYSQLI%4$s.",
|
|
|
960 |
"SystemCheckSummaryNoProblems": "Urra!! No hi ha cap problema amb la vostra configuració de Matomo.",
|
961 |
"SystemCheckSummaryThereWereErrors": "Ohhh! El Matomo ha trobat algunes %1$s incidències crítiques %2$s amb la vostra configuració de Matomo. %3$s Aquestes incidències s'han de solucionar inmediatament. %4$s",
|
962 |
"SystemCheckSummaryThereWereWarnings": "Hi ha alguna incidència amb el vostre sistema. El Matomo funcionarà, però podeu tenir alguns problemes menors.",
|
app/lang/cs.json
CHANGED
@@ -639,18 +639,18 @@
|
|
639 |
"ColumnActionURL": "URL akce",
|
640 |
"ColumnClicks": "Prokliků",
|
641 |
"ColumnClicksDocumentation": "Počet kliknutí na odkaz v závislosti na čase.",
|
642 |
-
"ColumnDownloadURL": "URL
|
643 |
-
"ColumnDownloadURLs": "
|
644 |
"ColumnEntryPageTitle": "Titulek vstupní stránky",
|
645 |
"ColumnEntryPageURL": "URL vstupní stránky",
|
646 |
"ColumnEntryPageURLs": "URL vstupních stránek",
|
647 |
"ColumnExitPageTitle": "Titulek výstupní stránky",
|
648 |
"ColumnExitPageURL": "URL výstupní stránky",
|
649 |
-
"ColumnExitPageURLs": "URL
|
650 |
"ColumnNoResultKeyword": "Hledané klíčové slovo nebylo nalezeno",
|
651 |
"ColumnPageName": "Jméno stránky",
|
652 |
-
"ColumnPagesPerSearch": "
|
653 |
-
"ColumnPagesPerSearchDocumentation": "
|
654 |
"ColumnPageURL": "URL stránky",
|
655 |
"ColumnSearchCategory": "Hledání kategorie",
|
656 |
"ColumnSearches": "Vyhledávání",
|
@@ -667,41 +667,41 @@
|
|
667 |
"ColumnInteractionPosition": "Pozice interakce",
|
668 |
"ColumnPageViewPosition": "Pozice zobrazení stránek",
|
669 |
"ActionsInVisit": "Akce během návštěvy",
|
670 |
-
"DownloadsReportDocumentation": "V tomto
|
671 |
-
"EntryPagesReportDocumentation": "
|
672 |
"EntryPageTitles": "Titulky vstupních stránek",
|
673 |
"EntryPageTitlesReportDocumentation": "Toto hlášení obsahuje informace o titulcích vstupních stránek, které byly použity v daném období.",
|
674 |
-
"ExitPagesReportDocumentation": "Toto hlášení obsahujje informace o výstupních stránkách, které se za dané časové období vyskytly. Výstupní stránka je poslední stránka, kterou návštěvník během své návštěvy navštíví. %s URL jsou zobrazeny ve složkové struktuře.",
|
675 |
-
"ExitPageTitles": "
|
676 |
-
"ExitPageTitlesReportDocumentation": "
|
677 |
-
"MainMetricsReportDocumentation": "Tento přehled poskytuje velmi základní přehled o tom, jaké akce
|
678 |
"OneSearch": "1 Vyhledávání",
|
679 |
-
"OutlinkDocumentation": "Externí odkaz je odkaz, který vede z vašich stránek na jinou
|
680 |
-
"OutlinksReportDocumentation": "Toto hlášení zobrazuje hyerarchický seznam
|
681 |
-
"PagesReportDocumentation": "
|
682 |
"PageTitlesReportDocumentation": "Toto hlášení obsahuje informace o titulcích navštívených stránek. %1$s Titulek je HTML tag %2$s, který většina prohlížečů zobrazuje v titulku okna.",
|
683 |
"PageUrls": "URL stránky",
|
684 |
"PageViewsByVisitor": "Počet zobrazení této stránky návštěvníkem během všech návštěv",
|
685 |
"PluginDescription": "Podává hlášení o zobrazení a titulcích stránek. Umožňuje měřit váš interní vyhledávač. Automaticky sleduje kliky na externí odkazy a soubory ke stažení.",
|
686 |
"RevisitedPages": "Stránky navštívené více než jednou",
|
687 |
-
"SiteSearchCategories1": "
|
688 |
-
"SiteSearchCategories2": "Například elektronické obchody mívají filtr kategorií, aby mohli
|
689 |
"SiteSearchFollowingPagesDoc": "Když návštěvníci hledají na vašich stránkách, snaží se nalézt určitou stránku, obsah, produkt, nebo službu. Toto hlášení zobrazuje stránky, na které bylo klikáno nejčastěji po interním vyhledávání. Jinak řečeno, jedná se o stránky, které byly nejvíce hledány návštěvníky, kteří už byli na vašich stránkách.",
|
690 |
"SiteSearchIntro": "Sledování vyhledávání na vašich stránkách je velmi efektivní způsob, jak se dozvědět více o tom, co vaši návštěvníci na stránkách hledají, jaký obsah by je mohl zajímat, jaké produkty by si mohli chtít koupit, a jak jim obecně zpříjemnit pobyt na vašich stránkách.",
|
691 |
"SiteSearchCategory": "Kategorie (Vyhledávání na webu)",
|
692 |
"SiteSearchCategories": "Kategorie (Vyhledávání na webu)",
|
693 |
-
"SiteSearchKeyword": "
|
694 |
"SiteSearchKeywords": "Klíčová slova (vyhledávání na webu)",
|
695 |
"SiteSearchKeywordCount": "Počet klíčových slov (Vyhledávání)",
|
696 |
"SiteSearchKeywordCounts": "Počty klíčových slov (Vyhledávání)",
|
697 |
-
"SiteSearchKeywordsDocumentation": "
|
698 |
-
"SiteSearchKeywordsNoResultDocumentation": "Toto hlášení shrnuje klíčová slova, pro která nebyl vrácen žádný výsledek. Možná by bylo možné vylepšit vyhledávací algoritmus, nebo návštěvníci hledají
|
699 |
"SubmenuPagesEntry": "Vstupní stránky",
|
700 |
"SubmenuPagesExit": "Odchozí stránky",
|
701 |
"SubmenuPageTitles": "Titulky stránek",
|
702 |
"SubmenuSitesearch": "Vyhledat stránku",
|
703 |
-
"WidgetEntryPageTitles": "
|
704 |
-
"WidgetExitPageTitles": "
|
705 |
"WidgetPagesEntry": "Vstupní stránky",
|
706 |
"WidgetPagesExit": "Výstupní stránky",
|
707 |
"WidgetPageTitles": "Titulky stránek",
|
@@ -713,8 +713,22 @@
|
|
713 |
"ActionType": "Typ akce",
|
714 |
"ActionTypes": "Typy akcí",
|
715 |
"Behaviour": "Chování",
|
716 |
-
"TimeSpentInReferringAction": "Čas strávený odkazující akci",
|
717 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
718 |
},
|
719 |
"Annotations": {
|
720 |
"AddAnnotationsFor": "Přidat anotace k %s...",
|
@@ -1670,11 +1684,8 @@
|
|
1670 |
"SystemCheckGzcompressHelp": "Musíte povolit rozšíření zlib a funkci gzcompress.",
|
1671 |
"SystemCheckGzuncompressHelp": "Musíte povolit rozšíření zlib a funkci gzuncompress.",
|
1672 |
"SystemCheckHashHelp": "Je nutné, aby jste znovu nakonfigurovali a sestavili PHP s povolenou podporou hash(), vynecháním volby --disable-hash.",
|
1673 |
-
"SystemCheckIconvHelp": "Musíte nakonfigurovat a překompilovat PHP s podporou pro \"icont\", --with-iconv",
|
1674 |
"SystemCheckJsonHelp": "Pro čtení a zápis dat JSON je pro Matomo nutné rozšíření php-json.",
|
1675 |
"SystemCheckMailHelp": "Bez funkce mail(), nebudou odeslány zprávy s odezvou, nebo při zapomenutém heslu",
|
1676 |
-
"SystemCheckMbstring": "mbstring",
|
1677 |
-
"SystemCheckMbstringHelp": "Rozšíření mbstring je vyžadováno pro zpracování vícebajtových znaků v uživatelském rozhraní a odpovědích API. Zkontrolujte také, zda je parametr mbstring.func_overload je v php.ini nastaven na hodnotu „0“.",
|
1678 |
"SystemCheckMemoryLimit": "Limit paměti",
|
1679 |
"SystemCheckMemoryLimitHelp": "Na webech s vysokým provozem, může archivace vyžadovat více paměti něž je nyní povoleno.<br \/>Pokud je potřeba, podívejte se na direktivu memory_limit ve vašem souboru php.ini.",
|
1680 |
"SystemCheckNoErrorsOrWarnings": "Nejsou zde žádné chyby nebo varování",
|
@@ -1690,7 +1701,6 @@
|
|
1690 |
"SystemCheckPdoAndMysqliHelp": "Na GNU\/Linux systému můžete zkompilovat PHP s následujícími volbami: %1$s Přidejte následující řádky do php.ini: %2$s",
|
1691 |
"SystemCheckPhp": "Verze PHP",
|
1692 |
"SystemCheckPhpPdoAndMysqli": "Více informací na: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
1693 |
-
"SystemCheckSplHelp": "Musíte překompilovat PHP s povolenou standardní PHP knihovou (ve výchozím stavu povolena).",
|
1694 |
"SystemCheckSettings": "Požadovaná konfigurace PHP (php.ini)",
|
1695 |
"SystemCheckSummaryNoProblems": "Hurááá! Nejsou zde žádné problémy s nastavením Matomou. Gratulujeme!",
|
1696 |
"SystemCheckSummaryThereWereErrors": "Ajaj! Matomo zjistil %1$skritické problémy%2$s s nastavením instalace Matomou. %3$sTyto problémy musí být okamžitě vyřešeny.%4$s",
|
639 |
"ColumnActionURL": "URL akce",
|
640 |
"ColumnClicks": "Prokliků",
|
641 |
"ColumnClicksDocumentation": "Počet kliknutí na odkaz v závislosti na čase.",
|
642 |
+
"ColumnDownloadURL": "Stažení URL",
|
643 |
+
"ColumnDownloadURLs": "Stáhnout adresy URL",
|
644 |
"ColumnEntryPageTitle": "Titulek vstupní stránky",
|
645 |
"ColumnEntryPageURL": "URL vstupní stránky",
|
646 |
"ColumnEntryPageURLs": "URL vstupních stránek",
|
647 |
"ColumnExitPageTitle": "Titulek výstupní stránky",
|
648 |
"ColumnExitPageURL": "URL výstupní stránky",
|
649 |
+
"ColumnExitPageURLs": "URL výstupních stránek",
|
650 |
"ColumnNoResultKeyword": "Hledané klíčové slovo nebylo nalezeno",
|
651 |
"ColumnPageName": "Jméno stránky",
|
652 |
+
"ColumnPagesPerSearch": "Stránky s výsledky vyhledávání",
|
653 |
+
"ColumnPagesPerSearchDocumentation": "Návštěvníci budou hledat na vašem webu a někdy kliknutím na tlačítko „další“ zobrazíte další výsledky. Toto je průměrný počet stránek s výsledky vyhledávání zobrazených pro toto klíčové slovo.",
|
654 |
"ColumnPageURL": "URL stránky",
|
655 |
"ColumnSearchCategory": "Hledání kategorie",
|
656 |
"ColumnSearches": "Vyhledávání",
|
667 |
"ColumnInteractionPosition": "Pozice interakce",
|
668 |
"ColumnPageViewPosition": "Pozice zobrazení stránek",
|
669 |
"ActionsInVisit": "Akce během návštěvy",
|
670 |
+
"DownloadsReportDocumentation": "V tomto reportu můžete vidět soubory, které byly staženy. %s Matomo počítá jako stažené jen ty, na které bylo kliknuto. Bez ohledu na to, jestli bylo stažení dokončeno nebo přerušeno.",
|
671 |
+
"EntryPagesReportDocumentation": "Tento report obsahuje informace o vstupních stránkách, které byly za dané časové období použity. Vstupní stránka je první stránka, kterou uživatel navštíví. %s Vstupní URL jsou zobrazeny ve složkové struktuře.",
|
672 |
"EntryPageTitles": "Titulky vstupních stránek",
|
673 |
"EntryPageTitlesReportDocumentation": "Toto hlášení obsahuje informace o titulcích vstupních stránek, které byly použity v daném období.",
|
674 |
+
"ExitPagesReportDocumentation": "Toto hlášení obsahujje informace o výstupních stránkách, které se za dané časové období vyskytly. Výstupní stránka je poslední stránka, kterou návštěvník během své návštěvy navštíví. %s Výstupní URL jsou zobrazeny ve složkové struktuře.",
|
675 |
+
"ExitPageTitles": "Titulek výstupní stránky",
|
676 |
+
"ExitPageTitlesReportDocumentation": "Tento report obsahuje informace o titulcích výstupních stránek za dané období.",
|
677 |
+
"MainMetricsReportDocumentation": "Tento přehled poskytuje velmi základní přehled o tom, jaké akce návštěvníci na vašem webu provádějí.",
|
678 |
"OneSearch": "1 Vyhledávání",
|
679 |
+
"OutlinkDocumentation": "Externí odkaz je odkaz, který vede pryč z vašich stránek (na jinou doménu).",
|
680 |
+
"OutlinksReportDocumentation": "Toto hlášení zobrazuje hyerarchický seznam externích URL, na které vaši návštěvníci klikli.",
|
681 |
+
"PagesReportDocumentation": "Tento report obsahuje informace o navštívených URL. %s Tabulka je organizována hyerarchicky jako strom složek.",
|
682 |
"PageTitlesReportDocumentation": "Toto hlášení obsahuje informace o titulcích navštívených stránek. %1$s Titulek je HTML tag %2$s, který většina prohlížečů zobrazuje v titulku okna.",
|
683 |
"PageUrls": "URL stránky",
|
684 |
"PageViewsByVisitor": "Počet zobrazení této stránky návštěvníkem během všech návštěv",
|
685 |
"PluginDescription": "Podává hlášení o zobrazení a titulcích stránek. Umožňuje měřit váš interní vyhledávač. Automaticky sleduje kliky na externí odkazy a soubory ke stažení.",
|
686 |
"RevisitedPages": "Stránky navštívené více než jednou",
|
687 |
+
"SiteSearchCategories1": "Tento report shrnuje kategorie, které návštěvníci vybrali při vyhledávání na stránkách.",
|
688 |
+
"SiteSearchCategories2": "Například elektronické obchody mívají filtr kategorií, aby mohli zákazníci zvolit, ve které kategorii bude provedeno hledání.",
|
689 |
"SiteSearchFollowingPagesDoc": "Když návštěvníci hledají na vašich stránkách, snaží se nalézt určitou stránku, obsah, produkt, nebo službu. Toto hlášení zobrazuje stránky, na které bylo klikáno nejčastěji po interním vyhledávání. Jinak řečeno, jedná se o stránky, které byly nejvíce hledány návštěvníky, kteří už byli na vašich stránkách.",
|
690 |
"SiteSearchIntro": "Sledování vyhledávání na vašich stránkách je velmi efektivní způsob, jak se dozvědět více o tom, co vaši návštěvníci na stránkách hledají, jaký obsah by je mohl zajímat, jaké produkty by si mohli chtít koupit, a jak jim obecně zpříjemnit pobyt na vašich stránkách.",
|
691 |
"SiteSearchCategory": "Kategorie (Vyhledávání na webu)",
|
692 |
"SiteSearchCategories": "Kategorie (Vyhledávání na webu)",
|
693 |
+
"SiteSearchKeyword": "Klíčové slovo (Vyhledávání)",
|
694 |
"SiteSearchKeywords": "Klíčová slova (vyhledávání na webu)",
|
695 |
"SiteSearchKeywordCount": "Počet klíčových slov (Vyhledávání)",
|
696 |
"SiteSearchKeywordCounts": "Počty klíčových slov (Vyhledávání)",
|
697 |
+
"SiteSearchKeywordsDocumentation": "Tento report shrnuje klíčová slova, která byla použita návštěvníky při hledání pomocí interního vyhledávače.",
|
698 |
+
"SiteSearchKeywordsNoResultDocumentation": "Toto hlášení shrnuje klíčová slova, pro která nebyl vrácen žádný výsledek. Možná by bylo možné vylepšit vyhledávací algoritmus, nebo návštěvníci hledají obsah, který (zatím) není na vašich stránkách?",
|
699 |
"SubmenuPagesEntry": "Vstupní stránky",
|
700 |
"SubmenuPagesExit": "Odchozí stránky",
|
701 |
"SubmenuPageTitles": "Titulky stránek",
|
702 |
"SubmenuSitesearch": "Vyhledat stránku",
|
703 |
+
"WidgetEntryPageTitles": "Titulky vstupní stránky",
|
704 |
+
"WidgetExitPageTitles": "Titulky výstupní stránky",
|
705 |
"WidgetPagesEntry": "Vstupní stránky",
|
706 |
"WidgetPagesExit": "Výstupní stránky",
|
707 |
"WidgetPageTitles": "Titulky stránek",
|
713 |
"ActionType": "Typ akce",
|
714 |
"ActionTypes": "Typy akcí",
|
715 |
"Behaviour": "Chování",
|
716 |
+
"TimeSpentInReferringAction": "Čas strávený v odkazující akci",
|
717 |
+
"PagesSubcategoryHelp1": "Tento report obsahuje informace o navštívených stránkách URL.",
|
718 |
+
"PagesSubcategoryHelp2": "Tabulka je uspořádána hierarchicky, adresy URL jsou zobrazeny jako struktura složek.",
|
719 |
+
"PagesSubcategoryHelp3": "Použijte ikonu plus a mínus vlevo k navigaci.",
|
720 |
+
"EntryPagesSubcategoryHelp1": "Tato sestava obsahuje informace o vstupních stránkách, které byly použity během zadaného období. Vstupní stránka je první stránka, kterou si uživatel prohlíží během své návštěvy.",
|
721 |
+
"EntryPagesSubcategoryHelp2": "Vstupní adresy URL se zobrazují jako struktura složek.",
|
722 |
+
"ExitPagesSubcategoryHelp1": "Tato sestava obsahuje informace o výstupních stránkách, které se objevily během zadaného období. Výstupní stránka je poslední stránka, kterou si uživatel prohlíží během své návštěvy.",
|
723 |
+
"ExitPagesSubcategoryHelp2": "Výstupní adresy URL se zobrazují jako struktura složek.",
|
724 |
+
"PageTitlesSubcategoryHelp1": "Tento report obsahuje informace o titulcích stránek, které byly navštíveny.",
|
725 |
+
"PageTitlesSubcategoryHelp2": "Titulek stránky je HTML &lt;title&gt; Štítek, který většina prohlížečů zobrazuje v názvu okna.",
|
726 |
+
"SiteSearchSubcategoryHelp1": "Sekce Vyhledávání stránek ukazuje, jaká klíčová slova návštěvníci používají při vyhledávání na vašem webu. Zobrazuje také, které stránky si uživatelé prohlížejí po provedení vyhledávání a která klíčová slova pro vyhledávání na webu nevracejí vůbec žádné výsledky.",
|
727 |
+
"SiteSearchSubcategoryHelp2": "Tyto přehledy vám mohou poskytnout představu o chybějícím obsahu na vašem webu, nahlédnout do toho, co vaši návštěvníci hledají a nemohou najít, atd.",
|
728 |
+
"SiteSearchSubcategoryHelp3": "Další informace naleznete v Site Search Guide.",
|
729 |
+
"OutlinksSubcategoryHelp1": "Tento přehled zobrazuje hierarchický seznam odchozích adres URL, na které klikli vaši návštěvníci. Externí link je odkaz, který vede návštěvníka pryč z vašeho webu (do jiné domény).",
|
730 |
+
"DownloadsSubcategoryHelp1": "V tomto přehledu uvidíte, které soubory si vaši návštěvníci stáhli.",
|
731 |
+
"DownloadsSubcategoryHelp2": "To, co Matomo počítá jako stahování, je kliknutí na odkaz ke stažení. Zda bylo stahování dokončeno nebo ne, Matomo neví."
|
732 |
},
|
733 |
"Annotations": {
|
734 |
"AddAnnotationsFor": "Přidat anotace k %s...",
|
1684 |
"SystemCheckGzcompressHelp": "Musíte povolit rozšíření zlib a funkci gzcompress.",
|
1685 |
"SystemCheckGzuncompressHelp": "Musíte povolit rozšíření zlib a funkci gzuncompress.",
|
1686 |
"SystemCheckHashHelp": "Je nutné, aby jste znovu nakonfigurovali a sestavili PHP s povolenou podporou hash(), vynecháním volby --disable-hash.",
|
|
|
1687 |
"SystemCheckJsonHelp": "Pro čtení a zápis dat JSON je pro Matomo nutné rozšíření php-json.",
|
1688 |
"SystemCheckMailHelp": "Bez funkce mail(), nebudou odeslány zprávy s odezvou, nebo při zapomenutém heslu",
|
|
|
|
|
1689 |
"SystemCheckMemoryLimit": "Limit paměti",
|
1690 |
"SystemCheckMemoryLimitHelp": "Na webech s vysokým provozem, může archivace vyžadovat více paměti něž je nyní povoleno.<br \/>Pokud je potřeba, podívejte se na direktivu memory_limit ve vašem souboru php.ini.",
|
1691 |
"SystemCheckNoErrorsOrWarnings": "Nejsou zde žádné chyby nebo varování",
|
1701 |
"SystemCheckPdoAndMysqliHelp": "Na GNU\/Linux systému můžete zkompilovat PHP s následujícími volbami: %1$s Přidejte následující řádky do php.ini: %2$s",
|
1702 |
"SystemCheckPhp": "Verze PHP",
|
1703 |
"SystemCheckPhpPdoAndMysqli": "Více informací na: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
|
|
1704 |
"SystemCheckSettings": "Požadovaná konfigurace PHP (php.ini)",
|
1705 |
"SystemCheckSummaryNoProblems": "Hurááá! Nejsou zde žádné problémy s nastavením Matomou. Gratulujeme!",
|
1706 |
"SystemCheckSummaryThereWereErrors": "Ajaj! Matomo zjistil %1$skritické problémy%2$s s nastavením instalace Matomou. %3$sTyto problémy musí být okamžitě vyřešeny.%4$s",
|
app/lang/da.json
CHANGED
@@ -1615,10 +1615,7 @@
|
|
1615 |
"SystemCheckGzcompressHelp": "zlib udvidelsen og gzcompress funktionen skal aktiveres.",
|
1616 |
"SystemCheckGzuncompressHelp": "zlib udvidelsen og gzuncompress funktionen skal aktiveres.",
|
1617 |
"SystemCheckHashHelp": "Du mangler at konfigurere og genopbygge PHP med hash() understøttelse aktiveret ved at ekskludere valget --disable-hash.",
|
1618 |
-
"SystemCheckIconvHelp": "PHP skal konfigureres og genstartes med \"iconv\" støtte aktiveret, --with-iconv.",
|
1619 |
"SystemCheckMailHelp": "Tilbagemelding og Glemt adgangskode vil ikke blive sendt uden mail() funktion",
|
1620 |
-
"SystemCheckMbstring": "mbstring",
|
1621 |
-
"SystemCheckMbstringHelp": "Udvidelsen mbstring er krævet for at håndtere multibyte karakterer i brugergrænsefladen og i API responser. Tjek venligst også at mbstring.func_overload er sat til \"0\" i php.ini.",
|
1622 |
"SystemCheckMemoryLimit": "Hukommelsesgrænse",
|
1623 |
"SystemCheckMemoryLimitHelp": "På et stærkt trafikeret hjemmesider, kan arkiveringsprocessen kræve mere hukommelse end der er tilladt.<br \/>Se på memory_limit i php.ini filen hvis nødvendig.",
|
1624 |
"SystemCheckNoErrorsOrWarnings": "Der er ingen fejl eller advarsler",
|
@@ -1634,7 +1631,6 @@
|
|
1634 |
"SystemCheckPdoAndMysqliHelp": "På en linux-server kan php kompileres med følgende valg: %1$sn i php.ini, tilføj følgende linjer: %2$s",
|
1635 |
"SystemCheckPhp": "PHP-version",
|
1636 |
"SystemCheckPhpPdoAndMysqli": "Mere information på: %1$sPHP PDO%2$s og %3$sMYSQLI%4$s.",
|
1637 |
-
"SystemCheckSplHelp": "Konfigurer og genstart PHP med standard-PHP-biblioteket (SPL) aktiveret (som standard).",
|
1638 |
"SystemCheckSettings": "Obligatorisk PHP-konfiguration (php.ini)",
|
1639 |
"SystemCheckSummaryNoProblems": "Sådan! Der er ingen problemer med din Matomo opsætning. Giv dig selv et klap på skulderen.",
|
1640 |
"SystemCheckSummaryThereWereErrors": "Ups! Matomo har opdaget nogle %1$skritiske problemer%2$s med din Matomo opsætning. %3$sDisse problemer skal løses øjeblikkeligt.%4$s",
|
1615 |
"SystemCheckGzcompressHelp": "zlib udvidelsen og gzcompress funktionen skal aktiveres.",
|
1616 |
"SystemCheckGzuncompressHelp": "zlib udvidelsen og gzuncompress funktionen skal aktiveres.",
|
1617 |
"SystemCheckHashHelp": "Du mangler at konfigurere og genopbygge PHP med hash() understøttelse aktiveret ved at ekskludere valget --disable-hash.",
|
|
|
1618 |
"SystemCheckMailHelp": "Tilbagemelding og Glemt adgangskode vil ikke blive sendt uden mail() funktion",
|
|
|
|
|
1619 |
"SystemCheckMemoryLimit": "Hukommelsesgrænse",
|
1620 |
"SystemCheckMemoryLimitHelp": "På et stærkt trafikeret hjemmesider, kan arkiveringsprocessen kræve mere hukommelse end der er tilladt.<br \/>Se på memory_limit i php.ini filen hvis nødvendig.",
|
1621 |
"SystemCheckNoErrorsOrWarnings": "Der er ingen fejl eller advarsler",
|
1631 |
"SystemCheckPdoAndMysqliHelp": "På en linux-server kan php kompileres med følgende valg: %1$sn i php.ini, tilføj følgende linjer: %2$s",
|
1632 |
"SystemCheckPhp": "PHP-version",
|
1633 |
"SystemCheckPhpPdoAndMysqli": "Mere information på: %1$sPHP PDO%2$s og %3$sMYSQLI%4$s.",
|
|
|
1634 |
"SystemCheckSettings": "Obligatorisk PHP-konfiguration (php.ini)",
|
1635 |
"SystemCheckSummaryNoProblems": "Sådan! Der er ingen problemer med din Matomo opsætning. Giv dig selv et klap på skulderen.",
|
1636 |
"SystemCheckSummaryThereWereErrors": "Ups! Matomo har opdaget nogle %1$skritiske problemer%2$s med din Matomo opsætning. %3$sDisse problemer skal løses øjeblikkeligt.%4$s",
|
app/lang/de.json
CHANGED
@@ -16,6 +16,7 @@
|
|
16 |
"Apply": "Anwenden",
|
17 |
"ArchivingInlineHelp": "Für Websites mit mittlerem bis hohem Verkehrsaufkommen wird empfohlen, die durch den Browser ausgelöste Archivierung zu deaktivieren. Stattdessen wird empfohlen, dass Sie einen Cronjob aufsetzen, der die Berichte einmal pro Stunde abarbeitet.",
|
18 |
"ArchivingTriggerDescription": "Für größere Matomo-Installationen sollten Sie %1$seinen Cronjob erstellen%2$s, der die Berichte automatisch abarbeitet.",
|
|
|
19 |
"AuthenticationMethodSmtp": "Authentifizierungsmethode für SMTP",
|
20 |
"AverageOrderValue": "Durchschnittlicher Bestellwert",
|
21 |
"AveragePrice": "Durchschnittlicher Preis",
|
@@ -176,6 +177,8 @@
|
|
176 |
"ExceptionDatabaseVersion": "Ihre %1$s-Version ist %2$s, aber Matomo benötigt mindestens %3$s",
|
177 |
"ExceptionDatabaseVersionNewerThanCodebase": "Ihre Matomo Codebase läuft auf der alten Version %1$s und wir haben erkannt, dass Ihre Matomo Datenbank bereits auf die neuere Version %2$s aktualisiert wurde.",
|
178 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Möglicherweise sind die Matomo Administratoren gerade daran, den Aktualisierungsprozess abzuschließen. Bitte versuchen Sie es in ein paar Minuten noch einmal.",
|
|
|
|
|
179 |
"ExceptionFileIntegrity": "Integritätsprüfung fehlgeschlagen: %s",
|
180 |
"ExceptionFilesizeMismatch": "Unterschiedliche Dateigröße: %1$s (erwartete Größe: %2$s, gefunden: %3$s)",
|
181 |
"ExceptionIncompatibleClientServerVersions": "Ihre %1$s-Client Version ist %2$s, die aber mit der Server-Version %3$s inkompatibel ist.",
|
@@ -211,6 +214,7 @@
|
|
211 |
"ExceptionReportNotEnabled": "Der gesuchte Bericht ist nicht aktiviert. Das bedeutet normalerweise entweder, dass das Plugin, welches den Bericht definiert, deaktiviert ist oder Sie haben nicht die benötigten Berechtigungen, um diesen Bericht einzusehen.",
|
212 |
"ExceptionWidgetNotEnabled": "Das gesuchte Widget ist nicht aktiviert. Das bedeutet normalerweise entweder, dass das Plugin, welches das Widget definiert, deaktiviert ist oder Sie haben nicht die benötigten Berechtigungen, um dieses Widget zu einzusehen.",
|
213 |
"ExceptionNotSupportedBrowserTitle": "Ihr Browser wird nicht unterstützt",
|
|
|
214 |
"ExpandDataTableFooter": "Ändern Sie die Darstellung oder konfigurieren den Bericht",
|
215 |
"Export": "Export",
|
216 |
"ExportAsImage": "Als Bild exportieren",
|
@@ -488,6 +492,7 @@
|
|
488 |
"WarningFileIntegrityNoMd5file": "Durch die fehlende md5_file() Funktion konnte die Integritätsprüfung nicht durchgeführt werden.",
|
489 |
"WarningPasswordStored": "%1$sWarnung:%2$s Dieses Passwort wird in der Konfigurationsdatei gespeichert und ist so für jeden sichtbar, der auf diese Datei Zugriff hat.",
|
490 |
"WarningDebugOnDemandEnabled": "Der Tracker befindet sich im %1$s Modus. Aus Sicherheitsgründen sollte dieser nur für einen kurzen Zeitraum aktiv sein. Um Ihn zu deaktivieren setzen Sie %2$s auf %3$s in %4$s",
|
|
|
491 |
"Website": "Website",
|
492 |
"Weekly": "Wöchentlich",
|
493 |
"WeeklyReport": "wöchentlich",
|
@@ -522,7 +527,8 @@
|
|
522 |
"Custom": "Benutzerdefiniert",
|
523 |
"PreviousPeriod": "Vorheriger Zeitraum",
|
524 |
"PreviousYear": "vorheriges Jahr",
|
525 |
-
"ViewAccessRequired": "Der verwendete token_auth hat zu viele Rechte, um für nicht-API URL Anfragen verwendet zu werden. Bitte verwenden Sie ein programmspezifisches Passwort für einen Benutzer, der ausschließlich über Ansichtszugriff verfügt."
|
|
|
526 |
},
|
527 |
"Mobile": {
|
528 |
"AboutPiwikMobile": "Über Matomo Mobile",
|
@@ -718,10 +724,16 @@
|
|
718 |
"PagesSubcategoryHelp1": "Dieser Bericht enthält Informationen über die Seiten URLs, welche besucht wurden.",
|
719 |
"PagesSubcategoryHelp2": "Die Tabelle ist hierarchisch organisiert, die URLs werden als Verzeichnisstruktur angezeigt.",
|
720 |
"PagesSubcategoryHelp3": "Benutzen Sie zur Navigation die Symbole Plus und Minus auf der linken Seite.",
|
|
|
721 |
"EntryPagesSubcategoryHelp2": "Die Einstiegs-URLs werden als Verzeichnisstruktur angezeigt.",
|
|
|
722 |
"ExitPagesSubcategoryHelp2": "Die Ausstiegs-URLs werden als Verzeichnisstruktur angezeigt.",
|
723 |
"PageTitlesSubcategoryHelp1": "Dieser Bericht enthält Informationen über die Titel der Seiten, welche besucht wurden.",
|
|
|
|
|
|
|
724 |
"SiteSearchSubcategoryHelp3": "Weitere Informationen finden Sie in der Anleitung zur internen Suche.",
|
|
|
725 |
"DownloadsSubcategoryHelp1": "In diesem Bericht können Sie sehen, welche Dateien Ihre Besucher heruntergeladen haben.",
|
726 |
"DownloadsSubcategoryHelp2": "Als Download zählt bei Matomo der Klick auf einen Download-Link. Ob der Download abgeschlossen wurde oder nicht, ist Matomo nicht bekannt."
|
727 |
},
|
@@ -907,7 +919,24 @@
|
|
907 |
"TrackingFailuresEmail1": "Dies ist nur um Sie wissen zu lassen, dass in den letzten Tagen %s verschiedene Arten von Tracking Fehlschlägen aufgetreten sind.",
|
908 |
"TrackingFailuresEmail2": "%1$sHier klicken%2$s, um alle Tracking Fehlschläge anzuzeigen.",
|
909 |
"ImportFromGoogleAnalytics": "Von Google Analytics importieren",
|
910 |
-
"ImportFromGoogleAnalyticsDescription": "Wenn Sie über ein Google Analytics-Konto verfügen und zu Matomo wechseln, können Sie Ihre vorhandenen Daten mithilfe des %1$sGoogleAnalyticsImporter-Plugins%2$s importieren."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
911 |
},
|
912 |
"CoreHome": {
|
913 |
"CategoryNoData": "Keine Daten in dieser Kategorie. Probieren Sie \"Gesamte Daten einbeziehen\"",
|
@@ -1015,6 +1044,7 @@
|
|
1015 |
"CustomLimit": "Eigenes Limit",
|
1016 |
"ExportFormat": "Exportformat",
|
1017 |
"ExportTooltip": "Hinweis: Um die generierte Export-URL zu verwenden, müssen Sie einen Authentifizierungstoken angeben. Sie können diese Token unter Admin -> Sicherheit -> Authentifizierungstoken konfigurieren.",
|
|
|
1018 |
"ExpandSubtables": "Erweitere Untertabellen",
|
1019 |
"StandardReport": "Standard Bericht",
|
1020 |
"FlattenReport": "Flacher Bericht",
|
@@ -1025,10 +1055,14 @@
|
|
1025 |
"Profilable": "Profilierbar",
|
1026 |
"SearchOnMatomo": "Suche '%1$s' auf Matomo.org",
|
1027 |
"ReportingCategoryHelpPrefix": "Wie kann die \"%1$s > %2$s\" Berichtsseite mir helfen?",
|
|
|
1028 |
"VisitorsCategoryHelp2": "Zusätzlich zu generellen Informationen über Ihre Besucher können Sie das %1$sBesucher-Log%2$sauch verwenden um zu sehen, was bei jedem individuellen Besuch passiert ist.",
|
1029 |
"VisitorsOverviewHelp": "Die Besucherübersicht hilft Ihnen, die Popularität Ihrer Website zu verstehen. Dazu stellt sie Diagramme bereit, die zeigen, wie viele Besuche Ihre Website über einen ausgewählten Zeitraum erhält und wie hoch das durchschnittliche Engagement für wichtige Funktionen wie Suchen und Downloads ist.",
|
|
|
|
|
1030 |
"EngagementSubcategoryHelp1": "Der Bereich \"Engagement\" bietet Berichte, die dabei helfen, zu quantifizieren, wie viele neue und wiederkehrende Besucher Sie haben. Sie können auch Berichte einsehen, die die durchschnittliche Zeit und Anzahl der Seiten pro Besuch aufschlüsseln, sowie die Anzahl der Besuche eines Besuchers auf Ihrer Website und die übliche Anzahl an Tagen zwischen den Besuchen.",
|
1031 |
-
"EngagementSubcategoryHelp2": "Dies kann Ihnen helfen, neben der Maximierung Ihrer Reichweite auch die Häufigkeit und die Interaktionsrate zu optimieren."
|
|
|
1032 |
},
|
1033 |
"CorePluginsAdmin": {
|
1034 |
"ActionUninstall": "Deinstallieren",
|
@@ -1214,7 +1248,9 @@
|
|
1214 |
"ReceiveEmailBecauseIsSuperUser": "Sie erhalten diese E-Mail, weil Sie ein Super User folgender Matomo Installation sind: %s",
|
1215 |
"ConvertToUtf8mb4": "Datenbank in den UTF8mb4 Zeichensatz konvertieren",
|
1216 |
"TriggerDatabaseConversion": "Datenbankkonversion im Hintergrund ausführen",
|
1217 |
-
"Utf8mb4ConversionHelp": "Ihre Datenbank verwendet aktuell nicht den utf8mb4 Zeichensatz. Dies verunmöglicht es, 4-Byte-Zeichen wie Emojis, wenig gebräuchliche Zeichen asiatischer Sprachen, diverse historische Schriftzeichen oder mathematische Symbole zu speichern. Diese werden im Moment mit %1$sersetzt. <br \/><br \/>Ihre Datenbank unterstützt den utf8mb4 Zeichensatz und es wäre möglich, sie zu konvertieren.<br \/><br \/>Wenn Sie in der Lage sind, Konsolenkommandos auszuführen, empfehlen wir Ihnen, den folgenden Befehl auszuführen: %2$s<br \/><br \/>Alternativ können Sie die Umwandlung hier aktivieren. Sie wird dann automatisch als planmäßige Aufgabe im Hintergrund durchgeführt. <br \/><br \/>Achtung: Die Datenbankkonvertierung kann einige Stunden dauern, abhängig von der Datenbankgröße. Da während dieser Zeit das Tracking möglicherweise nicht funktionieren wird, empfehlen wir für größere Installationen die Hintergrundkonvertierung nicht.<br \/><br \/>Sie finden mehr Informationen über dieses Thema in diesen %3$sFAQ%4$s."
|
|
|
|
|
1218 |
},
|
1219 |
"CustomDimensions": {
|
1220 |
"CustomDimensions": "Benutzerdefinierte Dimensionen",
|
@@ -1415,7 +1451,13 @@
|
|
1415 |
"CronArchivingRunDetails": "Bitte überprüfen Sie, ob Sie einen Crontab eingerichtet haben, der den %1$s Konsolenbefehl aufruft, und ob Sie einen %2$s konfiguriert haben, um Fehler per E-Mail zu erhalten, wenn die Archivierung fehlschlägt. Sie können auch versuchen, den Konsolenbefehl auszuführen, um Ihre Berichte manuell zu archivieren: %3$s. %4$s Mehr erfahren.%5$s",
|
1416 |
"CronArchivingRanSuccessfullyXAgo": "Der Archivierungsprozess wurde vor %1$s erfolgreich abgeschlossen.",
|
1417 |
"BrowserTriggeredArchivingEnabled": "Für eine optimale Leistung und ein schnelles Matomo wird dringend empfohlen, einen Crontab einzurichten, um Ihre Berichte automatisch zu archivieren und das Auslösen durch den Browser in den Matomo-Einstellungen zu deaktivieren. %1$sErfahren Sie mehr.%2$s",
|
1418 |
-
"NoDataForReportArchivingNotRun": "Die Archivierung Ihrer Berichte wurde in letzter Zeit nicht durchgeführt, %1$serfahren Sie mehr darüber, wie Sie Ihre Berichte erzeugen können.%2$s"
|
|
|
|
|
|
|
|
|
|
|
|
|
1419 |
},
|
1420 |
"Ecommerce": {
|
1421 |
"PluginDescription": "Mit E-Commerce haben Sie die Möglichkeit festzuhalten, dass ein Besucher Produkte in den Warenkorb legt, und wann es zu einem Verkauf kommt. Zusätzlich lassen sich auch Besuche von Produkt- sowie Kategorieseiten und verlassene Warenkörbe erfassen.",
|
@@ -1436,8 +1478,13 @@
|
|
1436 |
"VisitorProfileLTV": "Generierter Gesamtumsatz von %1$s.",
|
1437 |
"VisitorProfileItemsAndOrders": "%1$s Artikel in %2$s E-Commerce Bestellungen gekauft.",
|
1438 |
"VisitorProfileAbandonedCartSummary": "%1$s verwaiste Warenkörbe mit %2$s Artikeln und einem Gesamtwert von %3$s.",
|
|
|
1439 |
"EcommerceOverviewSubcategoryHelp2": "Klicken Sie auf eine einzelne Metrik innerhalb des Sparkline-Diagramms, um sie im Entwicklungsdiagramm in voller Größe zu betrachten.",
|
1440 |
-
"
|
|
|
|
|
|
|
|
|
1441 |
},
|
1442 |
"Events": {
|
1443 |
"PluginDescription": "Speichert Ereignisse und stellt Berichte über die Aktivität der Besucher bereit",
|
@@ -1479,7 +1526,7 @@
|
|
1479 |
},
|
1480 |
"Feedback": {
|
1481 |
"DoYouHaveBugReportOrFeatureRequest": "Möchten Sie einen Fehler melden oder haben Sie eine Idee für eine neue Funktion?",
|
1482 |
-
"HowToCreateTicket": "Bitte lesen Sie die Empfehlungen wie man
|
1483 |
"IWantTo": "Ich möchte:",
|
1484 |
"LearnWaysToParticipate": "Lernen Sie alle Möglichkeiten kennen, wie Sie %1$s uns unterstützen können%2$s",
|
1485 |
"ManuallySendEmailTo": "Senden Sie Ihre Nachricht manuell an",
|
@@ -1492,6 +1539,7 @@
|
|
1492 |
"RateFeatureTitle": "Gefällt Ihnen das Feature '%s'? Bitte bewerten Sie es und hinterlassen einen Kommentar!",
|
1493 |
"SendFeedback": "Feedback absenden",
|
1494 |
"ThankYou": "Danke für Ihre Unterstützung, Matomo zu verbessern!",
|
|
|
1495 |
"TopLinkTooltip": "Teilen Sie uns Ihre Meinung mit, oder fordern professionelle Unterstützung an.",
|
1496 |
"ViewAnswersToFAQ": "Antworten zu %1$sFrequently Asked Questions%2$s ansehen",
|
1497 |
"FAQs": "FAQs",
|
@@ -1509,7 +1557,7 @@
|
|
1509 |
"ContactUs": "Kontaktieren Sie uns",
|
1510 |
"VisitTheForums": "Besuchen Sie die %1$s Foren%2$s und erhalten Sie Hilfe von der Matomo Community",
|
1511 |
"Forums": "Forum",
|
1512 |
-
"ReviewMatomoTitle": "
|
1513 |
"PleaseLeaveExternalReviewForMatomo": "Teilen Sie Ihre Überlegungen auf einer dieser Seiten und inspirieren Sie so andere, Ihrer Datenrevolution zu folgen.",
|
1514 |
"RemindMeLater": "Erinnere mich später daran",
|
1515 |
"NeverAskMeAgain": "Nie mehr fragen",
|
@@ -1520,7 +1568,13 @@
|
|
1520 |
"PurgeOldData": "Ich möchte einige alte Daten entfernen",
|
1521 |
"SearchHelpResources": "matomo.org Hilfequellen durchsuchen",
|
1522 |
"PopularHelpTopics": "Beliebte Hilfethemen",
|
1523 |
-
"ReferMatomo": "Matomo empfehlen"
|
|
|
|
|
|
|
|
|
|
|
|
|
1524 |
},
|
1525 |
"GeoIp2": {
|
1526 |
"AssumingNonApache": "Die apache_get_modules Funktion wurde nicht gefunden. Es wird daher von einem Nicht-Apache Webserver ausgegangen.",
|
@@ -1837,6 +1891,7 @@
|
|
1837 |
"SystemCheckEvalHelp": "Wird von HTML QuickForm und der Template-Engine Smarty benötigt.",
|
1838 |
"SystemCheckExtensions": "Weitere erforderliche Anforderungen",
|
1839 |
"SystemCheckFileIntegrity": "Dateiintegrität",
|
|
|
1840 |
"SystemCheckFunctions": "Erforderliche Funktionen",
|
1841 |
"SystemCheckFunctionHelp": "Sie müssen diese eingebaute Funktion aktivieren",
|
1842 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (graphics)",
|
@@ -1845,11 +1900,8 @@
|
|
1845 |
"SystemCheckGzcompressHelp": "Sie müssen die zlib Erweiterung und die gzcompress Funktion aktivieren.",
|
1846 |
"SystemCheckGzuncompressHelp": "Sie müssen die zlib Erweiterung und die gzuncompress Funktion aktivieren.",
|
1847 |
"SystemCheckHashHelp": "Sie müssen PHP mit der hash() Funktionalität kompilieren, indem Sie die Option --disable-hash entfernen.",
|
1848 |
-
"SystemCheckIconvHelp": "Sie müssen PHP mit \"iconv\" Unterstützung konfigurieren und neu bauen ( --with-iconv).",
|
1849 |
"SystemCheckJsonHelp": "Die php-json Erweiterung wird von Matomo benötigt, um JSON Daten zu lesen und zu schreiben.",
|
1850 |
"SystemCheckMailHelp": "Feedback und Nachrichten zu verlorenen Passwörtern können nicht ohne mail() versendet werden.",
|
1851 |
-
"SystemCheckMbstring": "mbstring",
|
1852 |
-
"SystemCheckMbstringHelp": "Die mbstring-Erweiterung wird benötigt, um multibyte-Zeichen in der Benutzeroberfläche und in den API-Antworten zu verarbeiten. Bitte überprüfen Sie ebenfalls, ob mbstring.func_overload in der php.ini auf \"0\" gesetzt ist.",
|
1853 |
"SystemCheckMemoryLimit": "Speicherlimit",
|
1854 |
"SystemCheckMemoryLimitHelp": "Auf einer stark frequentierten Website könnte es passieren, dass die Archivierung mehr Speicher erfordert als erlaubt. Falls erforderlich, ändern Sie den memory_limit Wert in ihrer php.ini Datei.",
|
1855 |
"SystemCheckMemoryNoMemoryLimitSet": "Es ist kein Speicherlimit gesetzt",
|
@@ -1866,7 +1918,7 @@
|
|
1866 |
"SystemCheckPdoAndMysqliHelp": "Auf einem Linux-Server können Sie PHP mit den folgenden Optionen kompilieren: %1$s In Ihrer php.ini fügen Sie dann die folgenden Zeilen ein: %2$s",
|
1867 |
"SystemCheckPhp": "PHP-Version",
|
1868 |
"SystemCheckPhpPdoAndMysqli": "Weitere Informationen unter: %1$sPHP PDO%2$s und %3$sMYSQLI%4$s.",
|
1869 |
-
"
|
1870 |
"SystemCheckSettings": "Benötigte PHP Konfiguration (php.ini)",
|
1871 |
"SystemCheckSummaryNoProblems": "Gratulation! Es gibt keine Probleme mit Ihrer Matomo Installation. Sie können sich selbst auf die Schulter klopfen.",
|
1872 |
"SystemCheckSummaryThereWereErrors": "Ohje! Matomo hat einige %1$skritische Fehler%2$s mit Ihrer Installation festgestellt. %3$sDiese sollten schnellstmöglich behoben werden.%4$s",
|
@@ -1876,7 +1928,9 @@
|
|
1876 |
"SystemCheckTrackerHelp": "GET-Request zu matomo.php fehlgeschlagen. Versuchen Sie, diese URL in die Whitelist der HTTP-Authentifizierung aufzunehmen und deaktivieren Sie mod_security (ggf. müssen Sie hierzu Ihren Hoster kontaktieren). Nähere Informationen hierzu entnehmen Sie bitte dem Fehler-Log des Webservers.",
|
1877 |
"SystemCheckWarnDomHelp": "Sie sollten die \"dom\" Erweiterung aktivieren (z.Bsp. installieren Sie das \"php-dom\" und\/oder das \"php-xml\" Paket).",
|
1878 |
"SystemCheckWarning": "Matomo wird funktionieren, aber einige Funktionen werden fehlen",
|
|
|
1879 |
"SystemCheckWarnLibXmlHelp": "Sie müssen die \"libxml\" Erweiterung aktivieren (z.B. installieren Sie das \"php-libxml\" Paket), wie es auch von anderen PHP-Erweiterungen benötigt wird.",
|
|
|
1880 |
"SystemCheckWarnSimpleXMLHelp": "Sie sollten die \"SimpleXML\" Erweiterung aktivieren (z.Bsp. installieren Sie das \"php-simplexml\" und\/oder \"php-xml\" Paket).",
|
1881 |
"SystemCheckWinPdoAndMysqliHelp": "Auf einem Windows-Server können Sie die folgenden Zeilen in Ihre php.ini einfügen: %s",
|
1882 |
"SystemCheckWriteDirs": "Verzeichnisse mit Schreibzugriff",
|
@@ -3067,7 +3121,7 @@
|
|
3067 |
"SimpleRealTimeWidget_Message": "%1$s und %2$s in den letzten %3$s.",
|
3068 |
"ViewVisitorProfile": "Besucherprofil ansehen",
|
3069 |
"DisableVisitorProfile": "Nur Besucherprofil deaktivieren",
|
3070 |
-
"DisableVisitorProfileDescription": "Hier können Sie das Besucherprofil-Feature deaktivieren. Alle Besuche-Logs, welche auf dieses
|
3071 |
"VisitedPages": "Besuchte Seiten",
|
3072 |
"RevisitedPages": "Seiten die mehrmals angesehen wurden",
|
3073 |
"ToggleActions": "Sichtbarkeit aller Aktionen umschalten",
|
@@ -3097,6 +3151,8 @@
|
|
3097 |
"ClickToSeeAllContents": "Klicken um sämtliche Inhaltsinteraktionen\/Impressionen zu sehen",
|
3098 |
"VisitorLogSubcategoryHelp1": "Das Besuchsprotokoll zeigt Ihnen jeden Besuch, den Ihre Website erhält, im Detail an. Sie können sehen, welche Aktionen jeder Besucher durchgeführt hat, wie er auf Ihre Website gekommen ist, ein bisschen darüber, wer er ist, und mehr (unter Einhaltung Ihrer lokalen Datenschutzbestimmungen).",
|
3099 |
"VisitorLogSubcategoryHelp2": "Während andere Berichte in Matomo zeigen, wie sich Ihre Besucher auf einer aggregierten Ebene verhalten, bietet das Besuchsprotokoll granulare Details. Sie können auch Segmente verwenden, um es auf bestimmte Arten von Besuchen einzugrenzen, um Ihre Besucher besser zu verstehen.",
|
|
|
|
|
3100 |
"RealTimeHelp2": "Dieser Bericht wird alle 5 Sekunden aktualisiert und zeigt neue Besuche (oder vorhandene Besucher, die eine neue Seite aufrufen) am Anfang der Liste mit einem Einblendeffekt an."
|
3101 |
},
|
3102 |
"Login": {
|
@@ -3144,7 +3200,14 @@
|
|
3144 |
"WrongPasswordEntered": "Bitte geben Sie das korrekte Passwort ein.",
|
3145 |
"ConfirmPasswordToContinue": "Bitte bestätigen Sie Ihr Passwort um fortzufahren",
|
3146 |
"PluginDescription": "Unterstützt Authentifizierung via Benutzername und Passwort sowie Password Reset Funktionalität. Die Authentifizierungsmethode kann durch ein anderes Login Plugin wie LoginLdap (verfügbar im Marketplace) geändert werden.",
|
3147 |
-
"RememberMe": "Angemeldet bleiben"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3148 |
},
|
3149 |
"Marketplace": {
|
3150 |
"ActivateLicenseKey": "Aktivieren",
|
@@ -3337,7 +3400,8 @@
|
|
3337 |
"PluginDescription": "Sehen Sie Ihre Analysedaten als ein Overlay auf Ihrer aktuellen Website an. Lassen Sie sich anzeigen wie oft Ihre Benutzer auf welchen Link geklickt haben. Hinweis: Benötigt das Transitions-Plugin.",
|
3338 |
"RedirectUrlError": "Sie versuchen, eine Seiten Overlay Sitzung für die URL \"%1$s\" zu starten. %2$s Keine der in den Matomo Einstellungen hinterlegten Domains passt zu diesem Link.",
|
3339 |
"RedirectUrlErrorAdmin": "Sie können diese Domain %1$sin den Einstellungen%2$s als zusätzliche URL hinzufügen.",
|
3340 |
-
"RedirectUrlErrorUser": "Bitten Sie Ihren Administrator diese Domain als zusätzliche URL hinzuzufügen."
|
|
|
3341 |
},
|
3342 |
"PagePerformance": {
|
3343 |
"ColumnAveragePageLoadTime": "Durchschn. Seitenladezeit",
|
@@ -3376,7 +3440,9 @@
|
|
3376 |
"HelpNote": "Einige dieser Metriken sind möglicherweise nicht immer verfügbar. Sie finden mehr Informationen darüber in unserem %1$sOnline Guide%2$s.",
|
3377 |
"RowActionTitle": "Leistungsbericht für Seite öffnen",
|
3378 |
"RowActionDescription": "Zeigt Seitenleistungsbericht für diese Zeile",
|
3379 |
-
"PagePerformanceTitle": "Seitenleistung für Seite mit %1$s \"%2$s\""
|
|
|
|
|
3380 |
},
|
3381 |
"PrivacyManager": {
|
3382 |
"AnonymizeData": "Daten anonymisieren",
|
@@ -3649,9 +3715,19 @@
|
|
3649 |
"VisitorsFromDirectEntry": "Besucher von Direktzugriffen",
|
3650 |
"VisitorsFromWebsites": "Besucher von Webseiten",
|
3651 |
"VisitorsFromCampaigns": "Besucher von Kampagnen",
|
|
|
|
|
|
|
|
|
|
|
|
|
3652 |
"WebsitesSubcategoryHelp1": "In dieser Tabelle können Sie sehen, welche Websites Besucher auf Ihre Website gelenkt haben.",
|
|
|
3653 |
"SocialsSubcategoryHelp": "In dieser Tabelle können Sie sehen, welche Websites Besucher auf Ihre Website gelenkt haben.",
|
3654 |
-
"
|
|
|
|
|
|
|
3655 |
},
|
3656 |
"Resolution": {
|
3657 |
"ColumnConfiguration": "Konfiguration",
|
@@ -3779,7 +3855,7 @@
|
|
3779 |
"UnprocessedSegmentInVisitorLog1": "%1$sEinstweilen können Sie das Visitor Log verwenden%2$s um zu testen ob Ihr Segment Ihre Benutzer korrekt erfasst, in dem Sie es dort anwenden.",
|
3780 |
"UnprocessedSegmentInVisitorLog2": "Wenn angewandt, können Sie sofort sehen welche Besucher und Aktionen von Ihrem Segment betroffen sind.",
|
3781 |
"UnprocessedSegmentInVisitorLog3": "Dies kann Ihnen helfen sicherzustellen, dass Ihr Segment die erwarteten Benutzer und Aktionen registriert.",
|
3782 |
-
"UnprocessedSegmentApiError1": "Das Segment '%1$s' ist auf '%2$s' gesetzt, aber Matomo ist aktuell nicht konfiguriert um segmentierte Berichte in API Anfragen auszuführen.",
|
3783 |
"UnprocessedSegmentApiError2": "Um in Zukunft Daten für diesen Bericht zu sehen, werden Sie Ihr Segment ändern müssen und die Option mit Namen '%s' anwählen.",
|
3784 |
"UnprocessedSegmentApiError3": "Dann nach ein paar Stunden werden Ihre Segmentdaten über die API verfügbar sein. (Falls nicht, liegt ein Problem vor.)",
|
3785 |
"CustomUnprocessedSegmentApiError1": "Das gesuchte Segment wurde noch nicht im Segment Editor erstellt und dementsprechend konnten die Berichtdaten nicht aufbereitet werden.",
|
@@ -3872,11 +3948,19 @@
|
|
3872 |
"Sites": "Websites",
|
3873 |
"SiteSearchUse": "Matomo kann auswerten, wonach Besucher in der internen Suche der Website suchen.",
|
3874 |
"SiteWithoutDataTitle": "Es wurden bisher noch keine Daten gesammelt, untenstehendes Setup beachten",
|
|
|
3875 |
"SiteWithoutDataSetupTracking": "Bitte fügen Sie den folgenden %1$sTracking Code%2$s auf ihrer Website ein, insofern Sie dies noch nicht getan haben.",
|
3876 |
"SiteWithoutDataMessageDisappears": "Diese Nachricht wird verschwinden, sobald die ersten Daten für diese Website aufgezeichnet wurden.",
|
3877 |
"SiteWithoutDataIgnoreMessage": "Diese Nachricht für eine Stunde verbergen",
|
|
|
3878 |
"SiteWithoutDataOtherWays": "Andere Wege",
|
3879 |
"SiteWithoutDataOtherIntegrations": "Andere Integrationen",
|
|
|
|
|
|
|
|
|
|
|
|
|
3880 |
"SuperUserAccessCan": "Ein Nutzer mit Hauptadministrator-Berechtigung kann ebenfalls %1$sglobale Einstellungen%2$s für neue Websites vornehmen.",
|
3881 |
"Timezone": "Zeitzone",
|
3882 |
"TrackingSiteSearch": "Die interne Suche auswerten",
|
@@ -3888,6 +3972,8 @@
|
|
3888 |
"OnlyMatchedUrlsAllowedHelp": "Wenn aktiviert zeichnet Matomo nur noch interne Aktionen auf bei denen die Seiten-URL eine der bekannten URLs der Website ist. Dies hindert andere daran Ihre Analyse mit URLs von anderen Websites zu verfälschen.",
|
3889 |
"OnlyMatchedUrlsAllowedHelpExamples": "Domain und Pfadangabe müssen exakt übereinstimmen und jede gültige Subdomain muss separat definiert werden. Sind die bekannten URLs beispielsweise 'http:\/\/example.com\/path' und 'http:\/\/good.example.com', werden Tracking-Anfragen von 'http:\/\/example.com\/otherpath' oder 'http:\/\/bad.example.com' ignoriert.",
|
3890 |
"WebsitesManagement": "Websiteverwaltung",
|
|
|
|
|
3891 |
"XManagement": "%s verwalten",
|
3892 |
"ChooseMeasurableTypeHeadline": "Was möchten Sie messen?",
|
3893 |
"YouCurrentlyHaveAccessToNWebsites": "Sie haben derzeit Zugriff auf %s Websites.",
|
@@ -3900,7 +3986,8 @@
|
|
3900 |
"EmailInstructionsSiteDetailsHeading": "Einzelheiten Ihrer Seite",
|
3901 |
"EmailInstructionsSiteDetails": "Sie benötigen diese Angaben, um die API oder SDKs zum Verfolgen von Matomo-Besuchen zu verwenden.",
|
3902 |
"EmailInstructionsYourSiteId": "Ihre Seiten-ID: %1$s",
|
3903 |
-
"EmailInstructionsYourTrackingUrl": "Ihre Tracking-URL: %1$s"
|
|
|
3904 |
},
|
3905 |
"TagManager": {
|
3906 |
"AddThisTagDescription": "Fügen Sie die AddThis Social Media Buttons und mehr zu Ihrer Website hinzu.",
|
@@ -4437,6 +4524,7 @@
|
|
4437 |
"WeekdayVariableDescription": "Liefert den lokalen Wochentag, z. B. Montag, Dienstag, Mittwoch, ...",
|
4438 |
"WeekdayVariableName": "Wochentag",
|
4439 |
"WindowLeaveTriggerDescription": "Wird ausgelöst wenn der Benutzer daran ist die aktuelle Seite zu verlassen, indem die Maus ausserhalb des Fensters positioniert wird.",
|
|
|
4440 |
"WindowLeaveTriggerName": "Fenster verlassen",
|
4441 |
"WindowLoadedTriggerDescription": "Wird ausgelöst wenn die Seite mit allen Bildern usw. geladen wurde.",
|
4442 |
"WindowLoadedTriggerHelp": "Diese Phase des Ladens ist wenn eine Seite für den Browser komplett geladen ist. In den meisten Fällen bedeutet das auch dass alle Bilder geladen sind und dass alle Style angewendet werden usw. Dieser Trigger wird immer irgendwann nach dem \"DOM Ready\" ausgelöst.",
|
@@ -4584,7 +4672,9 @@
|
|
4584 |
"RecoveryCodesAllUsed": "Alle Recovery Codes wurden verwendet, es wird wärmstens empfohlen Ihre Recovery Codes zu regenerieren.",
|
4585 |
"RecoveryCodesRegenerated": "Recovery Codes wurden regeneriert. Stellen Sie sicher, dass die neu generierten Codes heruntergeladen oder ausgedruckt werden.",
|
4586 |
"GenerateNewRecoveryCodes": "Einen neuen Wiederherstellungscode generieren",
|
4587 |
-
"GenerateNewRecoveryCodesInfo": "Wenn Sie neue Recovery Codes generieren, werden Ihre alten nicht mehr funktionieren. Stellen Sie sicher dass Sie die neuen Codes herunterladen oder ausdrucken."
|
|
|
|
|
4588 |
},
|
4589 |
"UserCountry": {
|
4590 |
"CannotLocalizeLocalIP": "Die IP-Adresse %s ist eine lokale Adresse. Der Standort kann daher nicht ermittelt werden.",
|
@@ -4631,7 +4721,8 @@
|
|
4631 |
"ToGeolocateOldVisits": "Für Standortdaten für vergangene Besuche verwenden Sie bitte das %1$shier beschriebene Skript%2$s.",
|
4632 |
"WidgetLocation": "Besucherstandort",
|
4633 |
"GeoIpDbIpAccuracyNote": "Bemerkung: Die DBIP Datenbanken sind frei und können automatisch heruntergeladen werden, aber Geolocation Resultate (insbesondere Städte-Resultate) sind nicht so akkurat wie die von MaxMind. Bei MaxMind hingegen benötigen Sie auch für die freie Geolocation Datenbank ein Benutzerkonto, Sie können den Prozess %1$shier%2$s starten",
|
4634 |
-
"MaxMindLinkExplanation": "Wenn Sie die Geolocation Datenbanken von MaxMind verwenden und Sie nicht wissen wie Ihre Download URL zu generieren ist, %1$sklicken Sie hier um zu lernen wie%2$s."
|
|
|
4635 |
},
|
4636 |
"UserCountryMap": {
|
4637 |
"PluginDescription": "Dieses Plugin stellt die Widgets \"Besucherkarte\" sowie \"Besucherkarte in Echtzeit\" bereit. Hinweis: Hierfür muss das Plugin \"UserCountry\" aktiviert sein.",
|
@@ -4656,7 +4747,8 @@
|
|
4656 |
"WithUnknownRegion": "%s mit unbekannter Region",
|
4657 |
"WithUnknownCity": "%s mit unbekannter Stadt",
|
4658 |
"NoVisitsInfo": "Es werden aktuell keine Besuche angezeigt, weil für diesen Zeitraum kein Besuch mit korrekten Geolocation Informationen (Längengrad & Breitengrad) existiert.",
|
4659 |
-
"NoVisitsInfo2": "Um das Problem zu lösen, stellen Sie sicher, dass Sie einen GeoIP Geolocation Provider mit einer GeoIP Stadt Datenbank verwenden. Wenn dies Ihr Problem nicht löst, dann ist es möglich (wenn auch unwahrscheinlich) dass Ihre Besuche IP Adressen haben, die nicht geolokalisiert werden können."
|
|
|
4660 |
},
|
4661 |
"UserId": {
|
4662 |
"UserId": "Benutzer-ID",
|
@@ -4721,7 +4813,7 @@
|
|
4721 |
"ExceptionEditAnonymous": "Der anonyme Benutzer kann nicht bearbeitet oder gelöscht werden. Er wird von Matomo benutzt, um einen Benutzer zu definieren, der sich noch nicht angemeldet hat. Zum Beispiel können Sie Ihre Statistiken öffentlich machen, indem Sie dem Benutzer 'anonymous' das Recht 'view' geben.",
|
4722 |
"ExceptionEmailExists": "Ein Benutzer mit der E-Mail-Adresse '%s' existiert bereits.",
|
4723 |
"ExceptionEmailExistsAsLogin": "Die E-Mail-Adresse '%s' wird bereits als Nutzername verwendet.",
|
4724 |
-
"ExceptionLoginExistsAsEmail": "Der
|
4725 |
"ExceptionInvalidEmail": "Die E-Mail-Adresse hat ein ungültiges Format.",
|
4726 |
"ExceptionInvalidLoginFormat": "Der Benutzername muss zwischen %1$s und %2$s Zeichen lang sein und darf nur Buchstaben, Zahlen oder die Zeichen '_', '-', '.', '@' oder '+' enthalten.",
|
4727 |
"ExceptionInvalidPassword": "Das Passwort muss mindestens %1$s Zeichen lang sein.",
|
@@ -4858,7 +4950,8 @@
|
|
4858 |
"NewsletterSignupTitle": "Newsletter-Anmeldung",
|
4859 |
"NewsletterSignupMessage": "Abonnieren Sie unseren Newsletter, um regelmäßig Informationen über Matomo zu erhalten. Deabonnieren ist jederzeit möglich. Dieser Dienst verwendet MadMimi. Erfahren Sie mehr in unserer %1$sDatenschutzerklärung%2$s.",
|
4860 |
"NewsletterSignupFailureMessage": "Hoppla, etwas ist schief gelaufen. Wir konnten Sie nicht für unseren Newsletter registrieren.",
|
4861 |
-
"NewsletterSignupSuccessMessage": "Super, Sie wurden erfolgreich registriert! Wir werden in Kürze von uns hören lassen."
|
|
|
4862 |
},
|
4863 |
"VisitFrequency": {
|
4864 |
"ColumnActionsByNewVisits": "Aktionen bei neuen Besuchen",
|
16 |
"Apply": "Anwenden",
|
17 |
"ArchivingInlineHelp": "Für Websites mit mittlerem bis hohem Verkehrsaufkommen wird empfohlen, die durch den Browser ausgelöste Archivierung zu deaktivieren. Stattdessen wird empfohlen, dass Sie einen Cronjob aufsetzen, der die Berichte einmal pro Stunde abarbeitet.",
|
18 |
"ArchivingTriggerDescription": "Für größere Matomo-Installationen sollten Sie %1$seinen Cronjob erstellen%2$s, der die Berichte automatisch abarbeitet.",
|
19 |
+
"ArchivingTriggerSegment": "Die Verwendung benutzerspezifischer Segmente wird weiterhin die Aufbereitung der Archive auslösen.",
|
20 |
"AuthenticationMethodSmtp": "Authentifizierungsmethode für SMTP",
|
21 |
"AverageOrderValue": "Durchschnittlicher Bestellwert",
|
22 |
"AveragePrice": "Durchschnittlicher Preis",
|
177 |
"ExceptionDatabaseVersion": "Ihre %1$s-Version ist %2$s, aber Matomo benötigt mindestens %3$s",
|
178 |
"ExceptionDatabaseVersionNewerThanCodebase": "Ihre Matomo Codebase läuft auf der alten Version %1$s und wir haben erkannt, dass Ihre Matomo Datenbank bereits auf die neuere Version %2$s aktualisiert wurde.",
|
179 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Möglicherweise sind die Matomo Administratoren gerade daran, den Aktualisierungsprozess abzuschließen. Bitte versuchen Sie es in ein paar Minuten noch einmal.",
|
180 |
+
"ExceptionDatabaseUnavailable": "Der MySQL Server ist nicht mehr erreichbar",
|
181 |
+
"ExceptionDatabaseAccess": "Datenbankzugriff verweigert",
|
182 |
"ExceptionFileIntegrity": "Integritätsprüfung fehlgeschlagen: %s",
|
183 |
"ExceptionFilesizeMismatch": "Unterschiedliche Dateigröße: %1$s (erwartete Größe: %2$s, gefunden: %3$s)",
|
184 |
"ExceptionIncompatibleClientServerVersions": "Ihre %1$s-Client Version ist %2$s, die aber mit der Server-Version %3$s inkompatibel ist.",
|
214 |
"ExceptionReportNotEnabled": "Der gesuchte Bericht ist nicht aktiviert. Das bedeutet normalerweise entweder, dass das Plugin, welches den Bericht definiert, deaktiviert ist oder Sie haben nicht die benötigten Berechtigungen, um diesen Bericht einzusehen.",
|
215 |
"ExceptionWidgetNotEnabled": "Das gesuchte Widget ist nicht aktiviert. Das bedeutet normalerweise entweder, dass das Plugin, welches das Widget definiert, deaktiviert ist oder Sie haben nicht die benötigten Berechtigungen, um dieses Widget zu einzusehen.",
|
216 |
"ExceptionNotSupportedBrowserTitle": "Ihr Browser wird nicht unterstützt",
|
217 |
+
"ExceptionNotSupportedBrowserText": "Ihr Browser wird aus Sicherheitsgründen nicht unterstützt. Bitte aktualisieren Sie auf eine neuere Version.",
|
218 |
"ExpandDataTableFooter": "Ändern Sie die Darstellung oder konfigurieren den Bericht",
|
219 |
"Export": "Export",
|
220 |
"ExportAsImage": "Als Bild exportieren",
|
492 |
"WarningFileIntegrityNoMd5file": "Durch die fehlende md5_file() Funktion konnte die Integritätsprüfung nicht durchgeführt werden.",
|
493 |
"WarningPasswordStored": "%1$sWarnung:%2$s Dieses Passwort wird in der Konfigurationsdatei gespeichert und ist so für jeden sichtbar, der auf diese Datei Zugriff hat.",
|
494 |
"WarningDebugOnDemandEnabled": "Der Tracker befindet sich im %1$s Modus. Aus Sicherheitsgründen sollte dieser nur für einen kurzen Zeitraum aktiv sein. Um Ihn zu deaktivieren setzen Sie %2$s auf %3$s in %4$s",
|
495 |
+
"WarningDevelopmentModeOnButNotGitInstalled": "Sie verwenden Matomo aktuell im Entwicklermodus, aber es wurde nicht über git installiert. Es wird nicht empfohlen, den Entwicklermodus in produktiver Umgebung zu nutzen.",
|
496 |
"Website": "Website",
|
497 |
"Weekly": "Wöchentlich",
|
498 |
"WeeklyReport": "wöchentlich",
|
527 |
"Custom": "Benutzerdefiniert",
|
528 |
"PreviousPeriod": "Vorheriger Zeitraum",
|
529 |
"PreviousYear": "vorheriges Jahr",
|
530 |
+
"ViewAccessRequired": "Der verwendete token_auth hat zu viele Rechte, um für nicht-API URL Anfragen verwendet zu werden. Bitte verwenden Sie ein programmspezifisches Passwort für einen Benutzer, der ausschließlich über Ansichtszugriff verfügt.",
|
531 |
+
"Reasons": "Gründe"
|
532 |
},
|
533 |
"Mobile": {
|
534 |
"AboutPiwikMobile": "Über Matomo Mobile",
|
724 |
"PagesSubcategoryHelp1": "Dieser Bericht enthält Informationen über die Seiten URLs, welche besucht wurden.",
|
725 |
"PagesSubcategoryHelp2": "Die Tabelle ist hierarchisch organisiert, die URLs werden als Verzeichnisstruktur angezeigt.",
|
726 |
"PagesSubcategoryHelp3": "Benutzen Sie zur Navigation die Symbole Plus und Minus auf der linken Seite.",
|
727 |
+
"EntryPagesSubcategoryHelp1": "Dieser Bericht enthält Informationen über die Einstiegsseiten im gewählten Zeitraum. Die Einstiegsseite ist die erste Seite, die während eines Besuches aufgerufen wird.",
|
728 |
"EntryPagesSubcategoryHelp2": "Die Einstiegs-URLs werden als Verzeichnisstruktur angezeigt.",
|
729 |
+
"ExitPagesSubcategoryHelp1": "Dieser Bericht enthält Informationen über die Ausstiegsseiten im gewählten Zeitraum. Die Ausstiegsseite ist die letzte Seite, die während eines Besuches aufgerufen wird.",
|
730 |
"ExitPagesSubcategoryHelp2": "Die Ausstiegs-URLs werden als Verzeichnisstruktur angezeigt.",
|
731 |
"PageTitlesSubcategoryHelp1": "Dieser Bericht enthält Informationen über die Titel der Seiten, welche besucht wurden.",
|
732 |
+
"PageTitlesSubcategoryHelp2": "Der Seitentitel ist der HTML <title> Tag, welcher von den meisten Browsern in deren Fenstertitel angezeigt wird.",
|
733 |
+
"SiteSearchSubcategoryHelp1": "Der Bereich \"Interne Suche\" zeigt, welche Suchworte Besucher verwenden, wenn sie auf Ihrer Webseite suchen. Er zeigt auch auf welche Seiten Benutzer gehen, nachdem sie gesucht haben und welche Suchbegriffe gar keine Resultate erzeugt hatten.",
|
734 |
+
"SiteSearchSubcategoryHelp2": "Dieser Bericht kann Ihnen Hinweise darauf geben, welche Inhalte auf Ihrer Seite eventuell fehlen, in dem er aufzeigt, was Ihre Besucher suchen, aber nicht so einfach finden.",
|
735 |
"SiteSearchSubcategoryHelp3": "Weitere Informationen finden Sie in der Anleitung zur internen Suche.",
|
736 |
+
"OutlinksSubcategoryHelp1": "Dieser Bericht zeigt eine hierarchisch angeordnete Liste von ausgehenden Links, die von ihren Besuchern angeklickt wurden. Ein ausgehender Link ist ein Link, der den Besucher von Ihrer Webseite wegführt (zu einer anderen Domain).",
|
737 |
"DownloadsSubcategoryHelp1": "In diesem Bericht können Sie sehen, welche Dateien Ihre Besucher heruntergeladen haben.",
|
738 |
"DownloadsSubcategoryHelp2": "Als Download zählt bei Matomo der Klick auf einen Download-Link. Ob der Download abgeschlossen wurde oder nicht, ist Matomo nicht bekannt."
|
739 |
},
|
919 |
"TrackingFailuresEmail1": "Dies ist nur um Sie wissen zu lassen, dass in den letzten Tagen %s verschiedene Arten von Tracking Fehlschlägen aufgetreten sind.",
|
920 |
"TrackingFailuresEmail2": "%1$sHier klicken%2$s, um alle Tracking Fehlschläge anzuzeigen.",
|
921 |
"ImportFromGoogleAnalytics": "Von Google Analytics importieren",
|
922 |
+
"ImportFromGoogleAnalyticsDescription": "Wenn Sie über ein Google Analytics-Konto verfügen und zu Matomo wechseln, können Sie Ihre vorhandenen Daten mithilfe des %1$sGoogleAnalyticsImporter-Plugins%2$s importieren.",
|
923 |
+
"SecurityNotificationEmailSubject": "Sicherheitsbenachrichtigung",
|
924 |
+
"SecurityNotificationRecoveryCodesShowedBody": "Jemand hat sich die Wiederherstellungscodes Ihres Benutzerkontos für Zwei-Faktor-Authentifikation angeschaut.",
|
925 |
+
"SecurityNotificationRecoveryCodesRegeneratedBody": "Jemand hat neue Wiederherstellungscodes für Zwei-Faktor-Authentifikation für Ihr Benutzerkonto generiert.",
|
926 |
+
"SecurityNotificationTwoFactorAuthEnabledBody": "Jemand hat die Zwei-Faktor-Authentifikation in Ihrem Benutzerkonto aktiviert.",
|
927 |
+
"SecurityNotificationTwoFactorAuthDisabledBody": "Jemand hat die Zwei-Faktor-Authentifikation in Ihrem Benutzerkonto deaktiviert.",
|
928 |
+
"SecurityNotificationTokenAuthCreatedBody": "Jemand hat einen Authentifizierungs-Token (Beschreibung: %s) in Ihrem Benutzerkonto erstellt. Wenn Sie das nicht waren, löschen Sie den Token.",
|
929 |
+
"SecurityNotificationTokenAuthDeletedBody": "Jemand hat einen Authentifizierungs-Token (Beschreibung: %s) in Ihrem Benutzerkonto gelöscht.",
|
930 |
+
"SecurityNotificationAllTokenAuthDeletedBody": "Jemand hat alle Authentifizierungs-Token Ihres Benutzerkontos gelöscht.",
|
931 |
+
"SecurityNotificationSettingsChangedByUserBody": "Jemand hat die Systemeinstellungen verändert. Betroffene Einstellungen: %s.",
|
932 |
+
"SecurityNotificationSettingsChangedByOtherSuperUserBody": "Ein anderer Hauptadministrator (%1$s) hat die Systemeinstellungen verändert. Betroffene Einstellungen: %2$s. Wenn Sie die Aktivität nachvollziehen können, fahren Sie fort. Wenn nicht, kontaktieren Sie bitte den anderen Hauptadministrator.",
|
933 |
+
"SecurityNotificationUserCreatedBody": "Jemand hat einen neuen Benutzer (Login: %s) in Ihrem Benutzerkonto erstellt.",
|
934 |
+
"SecurityNotificationUserDeletedBody": "Jemand hat einen Benutzer (Login: %s) in Ihrem Benutzerkonto gelöscht.",
|
935 |
+
"SecurityNotificationIfItWasYou": "Wenn Sie das waren, fahren Sie fort. Wenn Sie sich über diese Aktivität nicht sicher sind, setzen Sie bitte Ihr Passwort zurück.",
|
936 |
+
"SecurityNotificationCheckTwoFactor": "Bitte prüfen Sie Ihre App oder Ihr Gerät zur Zwei-Faktor Authentifizierung.",
|
937 |
+
"BruteForce": "Brute Force",
|
938 |
+
"TwoFactorAuth": "Zwei-Faktor Authentifizierung",
|
939 |
+
"Cors": "CORS"
|
940 |
},
|
941 |
"CoreHome": {
|
942 |
"CategoryNoData": "Keine Daten in dieser Kategorie. Probieren Sie \"Gesamte Daten einbeziehen\"",
|
1044 |
"CustomLimit": "Eigenes Limit",
|
1045 |
"ExportFormat": "Exportformat",
|
1046 |
"ExportTooltip": "Hinweis: Um die generierte Export-URL zu verwenden, müssen Sie einen Authentifizierungstoken angeben. Sie können diese Token unter Admin -> Sicherheit -> Authentifizierungstoken konfigurieren.",
|
1047 |
+
"ExportTooltipWithLink": "Hinweis: Um die generierte Export URL zu verwenden, müssen Sie einen App Token Auth angeben. Sie können diese Token in %1$s[Admin -> Security -> Auths Tokens]%2$s konfigurieren. Ersetzen Sie %3$s in der Export URL durch Ihren Auth Token. Warnung: Niemals die URL mit dem effektiven Token jemandem weitergeben.",
|
1048 |
"ExpandSubtables": "Erweitere Untertabellen",
|
1049 |
"StandardReport": "Standard Bericht",
|
1050 |
"FlattenReport": "Flacher Bericht",
|
1055 |
"Profilable": "Profilierbar",
|
1056 |
"SearchOnMatomo": "Suche '%1$s' auf Matomo.org",
|
1057 |
"ReportingCategoryHelpPrefix": "Wie kann die \"%1$s > %2$s\" Berichtsseite mir helfen?",
|
1058 |
+
"VisitorsCategoryHelp1": "Die Besucherseiten sagen Ihnen Dinge darüber wer Ihre Besucher sind. Dinge wie woher Ihre Besucher kommen, welche Geräte und Browser sie verwenden und wann sie Ihre Webseite generell besuchen. Verstehen Sie, wer Ihr Publikum im Allgemeinen ist, und achten Sie auf Sonderfälle um zu sehen wie Ihr Publikum wachsen könnte.",
|
1059 |
"VisitorsCategoryHelp2": "Zusätzlich zu generellen Informationen über Ihre Besucher können Sie das %1$sBesucher-Log%2$sauch verwenden um zu sehen, was bei jedem individuellen Besuch passiert ist.",
|
1060 |
"VisitorsOverviewHelp": "Die Besucherübersicht hilft Ihnen, die Popularität Ihrer Website zu verstehen. Dazu stellt sie Diagramme bereit, die zeigen, wie viele Besuche Ihre Website über einen ausgewählten Zeitraum erhält und wie hoch das durchschnittliche Engagement für wichtige Funktionen wie Suchen und Downloads ist.",
|
1061 |
+
"DevicesSubcategoryHelp": "Der Gerätebereich hilft aufzuzeigen, welche Technologien Ihre Besucher verwenden, wenn Sie Ihre Seite besuchen. Sie werden Berichte der Gerätetypen und spezifische Modelle sehen, was Ihnen ermöglicht, Ihre Seite für die beliebtesten Geräte zu optimieren.",
|
1062 |
+
"SoftwareSubcategoryHelp": "Der Softwarebereich zeigt das Betriebssystem, Browser und Plugins welche Ihre Besucher verwenden, um Ihre Seite zu besuchen, sodass Sie Ihre Seite so optimieren können, dass sie mit den meisten Konfigurationen vollständig kompatibel ist.",
|
1063 |
"EngagementSubcategoryHelp1": "Der Bereich \"Engagement\" bietet Berichte, die dabei helfen, zu quantifizieren, wie viele neue und wiederkehrende Besucher Sie haben. Sie können auch Berichte einsehen, die die durchschnittliche Zeit und Anzahl der Seiten pro Besuch aufschlüsseln, sowie die Anzahl der Besuche eines Besuchers auf Ihrer Website und die übliche Anzahl an Tagen zwischen den Besuchen.",
|
1064 |
+
"EngagementSubcategoryHelp2": "Dies kann Ihnen helfen, neben der Maximierung Ihrer Reichweite auch die Häufigkeit und die Interaktionsrate zu optimieren.",
|
1065 |
+
"PeriodHasOnlyRawData": "Anscheinend wurden für diesen Zeitbereich noch keine Berichte generiert. Möchten Sie sehen was aktuell passiert? Schauen Sie im %1$sBesucher-Log%2$s oder wählen Sie einen anderen Zeitbereich, bis die Berichte generiert sind."
|
1066 |
},
|
1067 |
"CorePluginsAdmin": {
|
1068 |
"ActionUninstall": "Deinstallieren",
|
1248 |
"ReceiveEmailBecauseIsSuperUser": "Sie erhalten diese E-Mail, weil Sie ein Super User folgender Matomo Installation sind: %s",
|
1249 |
"ConvertToUtf8mb4": "Datenbank in den UTF8mb4 Zeichensatz konvertieren",
|
1250 |
"TriggerDatabaseConversion": "Datenbankkonversion im Hintergrund ausführen",
|
1251 |
+
"Utf8mb4ConversionHelp": "Ihre Datenbank verwendet aktuell nicht den utf8mb4 Zeichensatz. Dies verunmöglicht es, 4-Byte-Zeichen wie Emojis, wenig gebräuchliche Zeichen asiatischer Sprachen, diverse historische Schriftzeichen oder mathematische Symbole zu speichern. Diese werden im Moment mit %1$sersetzt. <br \/><br \/>Ihre Datenbank unterstützt den utf8mb4 Zeichensatz und es wäre möglich, sie zu konvertieren.<br \/><br \/>Wenn Sie in der Lage sind, Konsolenkommandos auszuführen, empfehlen wir Ihnen, den folgenden Befehl auszuführen: %2$s<br \/><br \/>Alternativ können Sie die Umwandlung hier aktivieren. Sie wird dann automatisch als planmäßige Aufgabe im Hintergrund durchgeführt. <br \/><br \/>Achtung: Die Datenbankkonvertierung kann einige Stunden dauern, abhängig von der Datenbankgröße. Da während dieser Zeit das Tracking möglicherweise nicht funktionieren wird, empfehlen wir für größere Installationen die Hintergrundkonvertierung nicht.<br \/><br \/>Sie finden mehr Informationen über dieses Thema in diesen %3$sFAQ%4$s.",
|
1252 |
+
"SkipCacheClearDesc": "Überspringt das Leeren des Caches vor dem Aktualisieren. Das ist nur hilfreich, wenn Sie sicher sind, dass die Instanzen, welche diesen Befehl ausführen, noch gar keinen Cache erzeugt haben, und wenn das Leeren des Caches für viele Matomo Konten zu einem Ressourcen-Engpass führen kann.",
|
1253 |
+
"SkipCacheClear": "Cache leeren überspringen."
|
1254 |
},
|
1255 |
"CustomDimensions": {
|
1256 |
"CustomDimensions": "Benutzerdefinierte Dimensionen",
|
1451 |
"CronArchivingRunDetails": "Bitte überprüfen Sie, ob Sie einen Crontab eingerichtet haben, der den %1$s Konsolenbefehl aufruft, und ob Sie einen %2$s konfiguriert haben, um Fehler per E-Mail zu erhalten, wenn die Archivierung fehlschlägt. Sie können auch versuchen, den Konsolenbefehl auszuführen, um Ihre Berichte manuell zu archivieren: %3$s. %4$s Mehr erfahren.%5$s",
|
1452 |
"CronArchivingRanSuccessfullyXAgo": "Der Archivierungsprozess wurde vor %1$s erfolgreich abgeschlossen.",
|
1453 |
"BrowserTriggeredArchivingEnabled": "Für eine optimale Leistung und ein schnelles Matomo wird dringend empfohlen, einen Crontab einzurichten, um Ihre Berichte automatisch zu archivieren und das Auslösen durch den Browser in den Matomo-Einstellungen zu deaktivieren. %1$sErfahren Sie mehr.%2$s",
|
1454 |
+
"NoDataForReportArchivingNotRun": "Die Archivierung Ihrer Berichte wurde in letzter Zeit nicht durchgeführt, %1$serfahren Sie mehr darüber, wie Sie Ihre Berichte erzeugen können.%2$s",
|
1455 |
+
"RequiredPrivateDirectories": "Verzeichnisse, welche privat sein müssen",
|
1456 |
+
"PrivateDirectoryManualCheck": "Bitte öffnen Sie die URLs manuell in einem Browser um zu sehen, ob Sie Zugang dazu haben. Wenn Sie können, sollten Sie Ihre Serverkonfiguration so ändern, dass diese Dateien\/Verzeichnisse nicht via Browser aus dem Internet oder Intranet verfügbar sind.",
|
1457 |
+
"PrivateDirectoryInternetDisabled": "Wir konnten bei den folgenden URLs nicht prüfen, ob sie erreichbar sind, weil Internet Features aktuell auf dieser Matomo Installation deaktiviert sind.",
|
1458 |
+
"PrivateDirectoryIsAccessible": "Wir haben festgestellt, dass auf die oben aufgelisteten URLs über den Browser zugegriffen werden kann, was aber NICHT so sein sollte. Der Zugriff kann ein mögliches Sicherheitsrisiko darstellen, weil der Inhalt Informationen über Ihren Server und potenziell über Ihre Benutzer enthält. Bitte beschränken Sie den Zugriff auf diese URLs.",
|
1459 |
+
"ConfigIniAccessible": "Wir haben auch herausgefunden, dass Matomos Konfigurationsverzeichnis öffentlich zugänglich ist. Zwar können Angreifer die Konfigurationsdatei nicht lesen, jedoch sind Ihre MySQL Anmeldeinformationen und andere Informationen für jeden zugänglich, wenn Ihr Webserver aus irgend einem Grund aufhört, PHP Dateien auszuführen. Bitte prüfen Sie Ihre Webserverkonfiguration und verwehren Sie den Zugriff zu diesem Verzeichnis.",
|
1460 |
+
"AllPrivateDirectoriesAreInaccessible": "Alle privaten Verzeichnisse sind nicht aus dem Internet zugänglich."
|
1461 |
},
|
1462 |
"Ecommerce": {
|
1463 |
"PluginDescription": "Mit E-Commerce haben Sie die Möglichkeit festzuhalten, dass ein Besucher Produkte in den Warenkorb legt, und wann es zu einem Verkauf kommt. Zusätzlich lassen sich auch Besuche von Produkt- sowie Kategorieseiten und verlassene Warenkörbe erfassen.",
|
1478 |
"VisitorProfileLTV": "Generierter Gesamtumsatz von %1$s.",
|
1479 |
"VisitorProfileItemsAndOrders": "%1$s Artikel in %2$s E-Commerce Bestellungen gekauft.",
|
1480 |
"VisitorProfileAbandonedCartSummary": "%1$s verwaiste Warenkörbe mit %2$s Artikeln und einem Gesamtwert von %3$s.",
|
1481 |
+
"EcommerceOverviewSubcategoryHelp1": "Der E-Commerce Übersichtsbereich ist der beste Ort, um eine hochwertige Sicht über die Performance Ihres Shops zu erhalten. Auf einen Blick sehen Sie, wie viele Verkäufe Sie tätigen, wie viel Einnahmen Sie erzielen, und die Umsatzrate Ihrer Webseite.",
|
1482 |
"EcommerceOverviewSubcategoryHelp2": "Klicken Sie auf eine einzelne Metrik innerhalb des Sparkline-Diagramms, um sie im Entwicklungsdiagramm in voller Größe zu betrachten.",
|
1483 |
+
"SalesSubcategoryHelp1": "Dieser Bereich enthält eine umfangreiche Sammlung von Berichten, um Ihnen bei der Analyse der unterschiedlichen Konditionen zu helfen, was am häufigsten zu Verkäufen führt, wie der Verkehr und Kampagnenursprung, Benutzerzeiten und Orte, sowie dafür verwendete Geräte.",
|
1484 |
+
"SalesSubcategoryHelp2": "Sie können auch lernen wie genau mit welcher Dimension Einnahmen generiert wurden, wie spezifische Verkehrstypen oder Tracking Kampagnen.",
|
1485 |
+
"EcommerceLogSubcategoryHelp1": "Das E-Commerce Log enthält detaillierte sessionbezogene Daten, sodass Sie die komplette Session jedes Benutzers nachverfolgen können, der einen Kauf getätigt oder abgebrochen hat. Dies kann helfen zu verstehen was Benutzer machen, bevor und nachdem Sie etwas kaufen, für die Verkaufsmöglichkeitenoptimierung.",
|
1486 |
+
"EcommerceLogSubcategoryHelp2": "Die Daten auf dieser Seite werden in Echtzeit aktualisiert",
|
1487 |
+
"ProductSubcategoryHelp": "Die Produkteansicht kann Ihnen dabei helfen Produkte und Kategorien zu identifizieren, die über- oder unterperformen, um Trends und Möglichkeiten im Bezug auf Ihre Produkteselektion und Verkaufsbereiche zu erkennen."
|
1488 |
},
|
1489 |
"Events": {
|
1490 |
"PluginDescription": "Speichert Ereignisse und stellt Berichte über die Aktivität der Besucher bereit",
|
1526 |
},
|
1527 |
"Feedback": {
|
1528 |
"DoYouHaveBugReportOrFeatureRequest": "Möchten Sie einen Fehler melden oder haben Sie eine Idee für eine neue Funktion?",
|
1529 |
+
"HowToCreateTicket": "Bitte lesen Sie die Empfehlungen wie man einen guten %1$sProblembericht%2$s oder einen %3$sVerbesserungsvorschlag%4$s erstellt. Dann registrieren Sie sich oder loggen Sie sich bei %5$sunserem Fehlermeldesystem%6$s an und erstellen Sie einen %7$sneuen Fall%8$s.",
|
1530 |
"IWantTo": "Ich möchte:",
|
1531 |
"LearnWaysToParticipate": "Lernen Sie alle Möglichkeiten kennen, wie Sie %1$s uns unterstützen können%2$s",
|
1532 |
"ManuallySendEmailTo": "Senden Sie Ihre Nachricht manuell an",
|
1539 |
"RateFeatureTitle": "Gefällt Ihnen das Feature '%s'? Bitte bewerten Sie es und hinterlassen einen Kommentar!",
|
1540 |
"SendFeedback": "Feedback absenden",
|
1541 |
"ThankYou": "Danke für Ihre Unterstützung, Matomo zu verbessern!",
|
1542 |
+
"ThankYouForSpreading": "Danke dafür, dass Sie uns weiterempfehlen und dazu beitragen, das Web sicherer zu machen.",
|
1543 |
"TopLinkTooltip": "Teilen Sie uns Ihre Meinung mit, oder fordern professionelle Unterstützung an.",
|
1544 |
"ViewAnswersToFAQ": "Antworten zu %1$sFrequently Asked Questions%2$s ansehen",
|
1545 |
"FAQs": "FAQs",
|
1557 |
"ContactUs": "Kontaktieren Sie uns",
|
1558 |
"VisitTheForums": "Besuchen Sie die %1$s Foren%2$s und erhalten Sie Hilfe von der Matomo Community",
|
1559 |
"Forums": "Forum",
|
1560 |
+
"ReviewMatomoTitle": "Mögen Sie Matomo?",
|
1561 |
"PleaseLeaveExternalReviewForMatomo": "Teilen Sie Ihre Überlegungen auf einer dieser Seiten und inspirieren Sie so andere, Ihrer Datenrevolution zu folgen.",
|
1562 |
"RemindMeLater": "Erinnere mich später daran",
|
1563 |
"NeverAskMeAgain": "Nie mehr fragen",
|
1568 |
"PurgeOldData": "Ich möchte einige alte Daten entfernen",
|
1569 |
"SearchHelpResources": "matomo.org Hilfequellen durchsuchen",
|
1570 |
"PopularHelpTopics": "Beliebte Hilfethemen",
|
1571 |
+
"ReferMatomo": "Matomo empfehlen",
|
1572 |
+
"ReferBannerTitle": "Konnte Matomo Sie überzeugen?",
|
1573 |
+
"ReferBannerLonger": "Bitte helfen Sie dabei, uns bekannt zu machen, damit mehr Leute Kontrolle über deren Analysedaten bekommen.",
|
1574 |
+
"ReferBannerEmailShareSubject": "Verweisen Sie sie jetzt auf Matomo Analytics, damit sie die Kontrolle zurückerhalten!",
|
1575 |
+
"ReferBannerEmailShareBody": "Ich verwende Matomo - eine ethische Alternative zu Google Analytics - welche mir 100%%Datenhoheit gibt und die Daten meiner Webseitenbesucher schützt.\nIch teile diese Nachricht in der Hoffnung das du dir die Macht von Google zurückholst und mit deinen eigenen Daten wie mit deinem anderen Eigentum umgehst.\n\nSchau dir Matomo an, auf https:\/\/matomo.org",
|
1576 |
+
"ReferBannerSocialShareText": "Wenn Sie Google Analytics verwenden, behalten Sie Kontrolle über Ihre Daten, in dem Sie jetzt auf eine ethische Alternative wie Matomo wechseln!",
|
1577 |
+
"WontShowAgain": "Wir werden diese Nachricht nicht mehr anzeigen."
|
1578 |
},
|
1579 |
"GeoIp2": {
|
1580 |
"AssumingNonApache": "Die apache_get_modules Funktion wurde nicht gefunden. Es wird daher von einem Nicht-Apache Webserver ausgegangen.",
|
1891 |
"SystemCheckEvalHelp": "Wird von HTML QuickForm und der Template-Engine Smarty benötigt.",
|
1892 |
"SystemCheckExtensions": "Weitere erforderliche Anforderungen",
|
1893 |
"SystemCheckFileIntegrity": "Dateiintegrität",
|
1894 |
+
"SystemCheckFilterHelp": "Sie müssen PHP mit aktiviertem \"filter\" Support (--disable-filter nicht verwenden) konfigurieren und neu starten.",
|
1895 |
"SystemCheckFunctions": "Erforderliche Funktionen",
|
1896 |
"SystemCheckFunctionHelp": "Sie müssen diese eingebaute Funktion aktivieren",
|
1897 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (graphics)",
|
1900 |
"SystemCheckGzcompressHelp": "Sie müssen die zlib Erweiterung und die gzcompress Funktion aktivieren.",
|
1901 |
"SystemCheckGzuncompressHelp": "Sie müssen die zlib Erweiterung und die gzuncompress Funktion aktivieren.",
|
1902 |
"SystemCheckHashHelp": "Sie müssen PHP mit der hash() Funktionalität kompilieren, indem Sie die Option --disable-hash entfernen.",
|
|
|
1903 |
"SystemCheckJsonHelp": "Die php-json Erweiterung wird von Matomo benötigt, um JSON Daten zu lesen und zu schreiben.",
|
1904 |
"SystemCheckMailHelp": "Feedback und Nachrichten zu verlorenen Passwörtern können nicht ohne mail() versendet werden.",
|
|
|
|
|
1905 |
"SystemCheckMemoryLimit": "Speicherlimit",
|
1906 |
"SystemCheckMemoryLimitHelp": "Auf einer stark frequentierten Website könnte es passieren, dass die Archivierung mehr Speicher erfordert als erlaubt. Falls erforderlich, ändern Sie den memory_limit Wert in ihrer php.ini Datei.",
|
1907 |
"SystemCheckMemoryNoMemoryLimitSet": "Es ist kein Speicherlimit gesetzt",
|
1918 |
"SystemCheckPdoAndMysqliHelp": "Auf einem Linux-Server können Sie PHP mit den folgenden Optionen kompilieren: %1$s In Ihrer php.ini fügen Sie dann die folgenden Zeilen ein: %2$s",
|
1919 |
"SystemCheckPhp": "PHP-Version",
|
1920 |
"SystemCheckPhpPdoAndMysqli": "Weitere Informationen unter: %1$sPHP PDO%2$s und %3$sMYSQLI%4$s.",
|
1921 |
+
"SystemCheckSessionHelp": "Sie müssen PHP mit aktiviertem \"session\" Support (--disable-session nicht verwenden) konfigurieren und neu starten.",
|
1922 |
"SystemCheckSettings": "Benötigte PHP Konfiguration (php.ini)",
|
1923 |
"SystemCheckSummaryNoProblems": "Gratulation! Es gibt keine Probleme mit Ihrer Matomo Installation. Sie können sich selbst auf die Schulter klopfen.",
|
1924 |
"SystemCheckSummaryThereWereErrors": "Ohje! Matomo hat einige %1$skritische Fehler%2$s mit Ihrer Installation festgestellt. %3$sDiese sollten schnellstmöglich behoben werden.%4$s",
|
1928 |
"SystemCheckTrackerHelp": "GET-Request zu matomo.php fehlgeschlagen. Versuchen Sie, diese URL in die Whitelist der HTTP-Authentifizierung aufzunehmen und deaktivieren Sie mod_security (ggf. müssen Sie hierzu Ihren Hoster kontaktieren). Nähere Informationen hierzu entnehmen Sie bitte dem Fehler-Log des Webservers.",
|
1929 |
"SystemCheckWarnDomHelp": "Sie sollten die \"dom\" Erweiterung aktivieren (z.Bsp. installieren Sie das \"php-dom\" und\/oder das \"php-xml\" Paket).",
|
1930 |
"SystemCheckWarning": "Matomo wird funktionieren, aber einige Funktionen werden fehlen",
|
1931 |
+
"SystemCheckWarnJsonHelp": "Sie sollten die \"json\" Erweiterung aktivieren (z. B. das \"php-json\" Package installieren).",
|
1932 |
"SystemCheckWarnLibXmlHelp": "Sie müssen die \"libxml\" Erweiterung aktivieren (z.B. installieren Sie das \"php-libxml\" Paket), wie es auch von anderen PHP-Erweiterungen benötigt wird.",
|
1933 |
+
"SystemCheckWarnOpensslHelp": "Sie sollten die \"openssl\" Erweiterung aktivieren, um sichere Updates zu ermöglichen.",
|
1934 |
"SystemCheckWarnSimpleXMLHelp": "Sie sollten die \"SimpleXML\" Erweiterung aktivieren (z.Bsp. installieren Sie das \"php-simplexml\" und\/oder \"php-xml\" Paket).",
|
1935 |
"SystemCheckWinPdoAndMysqliHelp": "Auf einem Windows-Server können Sie die folgenden Zeilen in Ihre php.ini einfügen: %s",
|
1936 |
"SystemCheckWriteDirs": "Verzeichnisse mit Schreibzugriff",
|
3121 |
"SimpleRealTimeWidget_Message": "%1$s und %2$s in den letzten %3$s.",
|
3122 |
"ViewVisitorProfile": "Besucherprofil ansehen",
|
3123 |
"DisableVisitorProfile": "Nur Besucherprofil deaktivieren",
|
3124 |
+
"DisableVisitorProfileDescription": "Hier können Sie das Besucherprofil-Feature deaktivieren. Alle Besuche-Logs, welche auf dieses Feature verweisen, werden weiterhin funktionieren.",
|
3125 |
"VisitedPages": "Besuchte Seiten",
|
3126 |
"RevisitedPages": "Seiten die mehrmals angesehen wurden",
|
3127 |
"ToggleActions": "Sichtbarkeit aller Aktionen umschalten",
|
3151 |
"ClickToSeeAllContents": "Klicken um sämtliche Inhaltsinteraktionen\/Impressionen zu sehen",
|
3152 |
"VisitorLogSubcategoryHelp1": "Das Besuchsprotokoll zeigt Ihnen jeden Besuch, den Ihre Website erhält, im Detail an. Sie können sehen, welche Aktionen jeder Besucher durchgeführt hat, wie er auf Ihre Website gekommen ist, ein bisschen darüber, wer er ist, und mehr (unter Einhaltung Ihrer lokalen Datenschutzbestimmungen).",
|
3153 |
"VisitorLogSubcategoryHelp2": "Während andere Berichte in Matomo zeigen, wie sich Ihre Besucher auf einer aggregierten Ebene verhalten, bietet das Besuchsprotokoll granulare Details. Sie können auch Segmente verwenden, um es auf bestimmte Arten von Besuchen einzugrenzen, um Ihre Besucher besser zu verstehen.",
|
3154 |
+
"VisitorLogSubcategoryHelp3": "Weitere Informationen finden Sie in der Anleitung zum Besucherlog.",
|
3155 |
+
"RealTimeHelp1": "Der Echtzeitbesuche-Bericht zeigen die Besucherströme Ihrer Webseite in Echtzeit. Er enthält einen Echtzeitzähler Ihrer Besuche und Seitenansichten in den letzten 24 Stunden und den letzten 30 Minuten.",
|
3156 |
"RealTimeHelp2": "Dieser Bericht wird alle 5 Sekunden aktualisiert und zeigt neue Besuche (oder vorhandene Besucher, die eine neue Seite aufrufen) am Anfang der Liste mit einem Einblendeffekt an."
|
3157 |
},
|
3158 |
"Login": {
|
3200 |
"WrongPasswordEntered": "Bitte geben Sie das korrekte Passwort ein.",
|
3201 |
"ConfirmPasswordToContinue": "Bitte bestätigen Sie Ihr Passwort um fortzufahren",
|
3202 |
"PluginDescription": "Unterstützt Authentifizierung via Benutzername und Passwort sowie Password Reset Funktionalität. Die Authentifizierungsmethode kann durch ein anderes Login Plugin wie LoginLdap (verfügbar im Marketplace) geändert werden.",
|
3203 |
+
"RememberMe": "Angemeldet bleiben",
|
3204 |
+
"SuspiciousLoginAttemptsInLastHourEmailSubject": "Wir haben verdächtige Anmeldeversuche bei Ihrem Benutzerkonto festgestellt...",
|
3205 |
+
"SuspiciousLoginAttemptsInLastHourEmail1": "Wir haben eine verdächtig hohe Anzahl von Anmeldeversuchen bei Ihrem Matomo Benutzerkonto in der letzten Stunde festgestellt, speziell %1$sAnmeldeversuche von %2$sunterschiedlichen IP-Adressen. Wir vermuten, dass jemand versucht, Ihr Benutzerkonto zu hacken.",
|
3206 |
+
"SuspiciousLoginAttemptsInLastHourEmail2": "Um Matomo abzusichern, empfehlen wir, folgende Vorsichtsmaßnahmen vorzunehmen:",
|
3207 |
+
"SuspiciousLoginAttemptsInLastHourEmail3": "Stellen Sie sicher, dass Sie ein sicheres Passwort verwenden, zufällig generiert und mit einer angemessenen Länge (zum Beispiel mindestens 30 Zeichen).",
|
3208 |
+
"SuspiciousLoginAttemptsInLastHourEmail4": "Installieren und aktivieren Sie Zwei-Faktor-Authentifizierung, sodass Angreifer mehr Informationen als nur Ihr Passwort benötigen um sich einzuloggen.",
|
3209 |
+
"SuspiciousLoginAttemptsInLastHourEmail5": "Zusätzlich dazu, wenn Ihr Matomo eine limitierte Anzahl von Benutzern oder IP Adressen verwendet durch die Zugriff nötig ist, kann es sinnvoll sein, eine Liste mit erlaubten IP Adressen zu definieren. %1$sWeitere Informationen dazu in unserer Dokumentation%2$s",
|
3210 |
+
"LoginNotAllowedBecauseUserLoginBlocked": "Die Login Funktionalität wurde temporär deaktiviert weil wir eine verdächtige hohe Anzahl fehlgeschlagener Anmeldeversuche in der letzten Stunde registriert haben."
|
3211 |
},
|
3212 |
"Marketplace": {
|
3213 |
"ActivateLicenseKey": "Aktivieren",
|
3400 |
"PluginDescription": "Sehen Sie Ihre Analysedaten als ein Overlay auf Ihrer aktuellen Website an. Lassen Sie sich anzeigen wie oft Ihre Benutzer auf welchen Link geklickt haben. Hinweis: Benötigt das Transitions-Plugin.",
|
3401 |
"RedirectUrlError": "Sie versuchen, eine Seiten Overlay Sitzung für die URL \"%1$s\" zu starten. %2$s Keine der in den Matomo Einstellungen hinterlegten Domains passt zu diesem Link.",
|
3402 |
"RedirectUrlErrorAdmin": "Sie können diese Domain %1$sin den Einstellungen%2$s als zusätzliche URL hinzufügen.",
|
3403 |
+
"RedirectUrlErrorUser": "Bitten Sie Ihren Administrator diese Domain als zusätzliche URL hinzuzufügen.",
|
3404 |
+
"ErrorNoSiteUrls": "WARNUNG: Diese Webseite hat in Matomo keine Seiten URLs definiert. Das kann beim Overlay und anderen Features zu unerwarteten Nebeneffekten führen oder sie unbrauchbar machen. Um das zu korrigieren, fügen Sie für diese Webseite eine URL in den Einstellungen im Matomo Administrationsbereich ein."
|
3405 |
},
|
3406 |
"PagePerformance": {
|
3407 |
"ColumnAveragePageLoadTime": "Durchschn. Seitenladezeit",
|
3440 |
"HelpNote": "Einige dieser Metriken sind möglicherweise nicht immer verfügbar. Sie finden mehr Informationen darüber in unserem %1$sOnline Guide%2$s.",
|
3441 |
"RowActionTitle": "Leistungsbericht für Seite öffnen",
|
3442 |
"RowActionDescription": "Zeigt Seitenleistungsbericht für diese Zeile",
|
3443 |
+
"PagePerformanceTitle": "Seitenleistung für Seite mit %1$s \"%2$s\"",
|
3444 |
+
"PerformanceSubcategoryHelp1": "Der Performance Bereich kann Ihnen helfen herauszufinden, wie schnell Ihre Webseite insgesamt ist und zeigt auf, ob spezifische Seiten signifikant vom Durchschnitt abweichen.",
|
3445 |
+
"PerformanceSubcategoryHelp2": "Sie finden auch Berichte, welche exakt zeigen, wie lang welche Seite auf Ihrer Webseite braucht, um zu laden und was zur Ladezeit wie viel beisteuert."
|
3446 |
},
|
3447 |
"PrivacyManager": {
|
3448 |
"AnonymizeData": "Daten anonymisieren",
|
3715 |
"VisitorsFromDirectEntry": "Besucher von Direktzugriffen",
|
3716 |
"VisitorsFromWebsites": "Besucher von Webseiten",
|
3717 |
"VisitorsFromCampaigns": "Besucher von Kampagnen",
|
3718 |
+
"ReferrersOverviewSubcategoryHelp1": "Die Aquisitionsübersicht zeigt Ihnen den Prozentsatz Ihres Datenverkehrs von allen Quellen über einen ausgewählten Zeitbereich.",
|
3719 |
+
"ReferrersOverviewSubcategoryHelp2": "Sie können auch auf einen spezifischen Kanal klicken um ihn mit dem Evolution Graph anzuzeigen. Das kann helfen zu entdecken welche Kanäle den meisten Datenverkehr auf Ihre Seite erzeugen wie auch potenzielle Muster über die Zeit hinweg aufzeigen. Zum Beispiel, dass ein bestimmter Kanal an Wochenenden besser funktioniert.",
|
3720 |
+
"AllReferrersSubcategory1": "Dieser Bereich zeigt die Anzahl der Besuche welche von verschiedenen Kanaltypen und Referrers zu Ihnen kommen. Klicken Sie auf den Plus oder Minus Button um sich die Referrer pro Typ anzeigen zu lassen.",
|
3721 |
+
"AllReferrersSubcategory2": "Sie können auch die Anzahl der ausgeführten Aktionen Ihrer Datenverkehrsquellen analysieren, in dem Sie die Tabelle mit der Ansicht der Besucherengagements aktivieren.",
|
3722 |
+
"SearchEnginesSubcategoryHelp1": "Dieser Bereich hilft Ihnen beim Analysieren Ihrer Suchmaschinenoptimierung und -performance. Sie können Ihre beliebtesten Suchworte analysieren mit Hilfe des Suchwort-Berichts oder sehen welche Suchworte auf spezifischen Suchmaschinen wie gut funktionieren, um weitere zielgerichtete Analysen und Optimierungen vorzunehmen.",
|
3723 |
+
"SearchEnginesSubcategoryHelp2": "%1$sMatomo Cloud%2$s und %3$sSearch Engine Keywords Performance%4$s Benutzer erhalten die besten Resultate mit diesem Bericht.",
|
3724 |
"WebsitesSubcategoryHelp1": "In dieser Tabelle können Sie sehen, welche Websites Besucher auf Ihre Website gelenkt haben.",
|
3725 |
+
"WebsitesSubcategoryHelp2": "Wenn Sie auf eine Zeile in der Tabelle klicken, können Sie sehen bei welchen URLs die Links zu Ihrer Webseite aktiv sind.",
|
3726 |
"SocialsSubcategoryHelp": "In dieser Tabelle können Sie sehen, welche Websites Besucher auf Ihre Website gelenkt haben.",
|
3727 |
+
"CampaignsSubcategoryHelp": "Der Kampagnen-Tracking Bereich erlaubt Ihnen zu analysieren, welche Besuche mit welchen unterschiedlichen Tracking Werten verknüpft sind, welche mit Ihren digitalen Kampagnen verlinkt sind. Damit kann man Dinge aufzeigen wie zum Beispiel wie viel Datenverkehr Ihre Kampagnen erzeugen, welche Werbemittel am besten funktionieren, wie engagiert Kampagnenbesucher sind, und ob die Kampagne zu Verkäufen führt oder nicht.",
|
3728 |
+
"EcommerceLogSubcategoryHelp1": "Das Ecommerce Log enthält detaillierte sessionbezogene Daten, so dass Sie die komplette Session jedes Benutzers nachverfolgen können, der einen Kauf getätigt oder abgebrochen hat. Dies kann helfen zu verstehen was Benutzer machen, bevor und nachdem Sie etwas kaufen, für die Verkaufsmöglichkeitenoptimierung.",
|
3729 |
+
"EcommerceLogSubcategoryHelp2": "Die Daten auf dieser Seite werden in Echtzeit aktualisiert",
|
3730 |
+
"ProductSubcategoryHelp": "Die Produkteansicht kann Ihnen dabei helfen Produkte und Kategorien zu identifizieren, die über- oder unterperformen, um Trends und Möglichkeiten im Bezug auf Ihre Produkteselektion und Verkaufsbereiche zu erkennen."
|
3731 |
},
|
3732 |
"Resolution": {
|
3733 |
"ColumnConfiguration": "Konfiguration",
|
3855 |
"UnprocessedSegmentInVisitorLog1": "%1$sEinstweilen können Sie das Visitor Log verwenden%2$s um zu testen ob Ihr Segment Ihre Benutzer korrekt erfasst, in dem Sie es dort anwenden.",
|
3856 |
"UnprocessedSegmentInVisitorLog2": "Wenn angewandt, können Sie sofort sehen welche Besucher und Aktionen von Ihrem Segment betroffen sind.",
|
3857 |
"UnprocessedSegmentInVisitorLog3": "Dies kann Ihnen helfen sicherzustellen, dass Ihr Segment die erwarteten Benutzer und Aktionen registriert.",
|
3858 |
+
"UnprocessedSegmentApiError1": "Das Segment '%1$s' ist auf '%2$s' gesetzt, aber Matomo ist aktuell nicht konfiguriert, um segmentierte Berichte in API Anfragen auszuführen.",
|
3859 |
"UnprocessedSegmentApiError2": "Um in Zukunft Daten für diesen Bericht zu sehen, werden Sie Ihr Segment ändern müssen und die Option mit Namen '%s' anwählen.",
|
3860 |
"UnprocessedSegmentApiError3": "Dann nach ein paar Stunden werden Ihre Segmentdaten über die API verfügbar sein. (Falls nicht, liegt ein Problem vor.)",
|
3861 |
"CustomUnprocessedSegmentApiError1": "Das gesuchte Segment wurde noch nicht im Segment Editor erstellt und dementsprechend konnten die Berichtdaten nicht aufbereitet werden.",
|
3948 |
"Sites": "Websites",
|
3949 |
"SiteSearchUse": "Matomo kann auswerten, wonach Besucher in der internen Suche der Website suchen.",
|
3950 |
"SiteWithoutDataTitle": "Es wurden bisher noch keine Daten gesammelt, untenstehendes Setup beachten",
|
3951 |
+
"SiteWithoutDataDescription": "Ein letzter Schritt um Ihren Web Traffic mit Matomo zu tracken und hilfreiche Einsichten zu gewinnen. Sie müssen zusätzlichen Code in Ihrer Webseite oder mobilen App platzieren, falls Sie das nicht bereits getan haben. Wählen Sie die untenstehende Option oder %1$ssenden Sie alle Instruktionen einem Teammitglied%2$s.",
|
3952 |
"SiteWithoutDataSetupTracking": "Bitte fügen Sie den folgenden %1$sTracking Code%2$s auf ihrer Website ein, insofern Sie dies noch nicht getan haben.",
|
3953 |
"SiteWithoutDataMessageDisappears": "Diese Nachricht wird verschwinden, sobald die ersten Daten für diese Website aufgezeichnet wurden.",
|
3954 |
"SiteWithoutDataIgnoreMessage": "Diese Nachricht für eine Stunde verbergen",
|
3955 |
+
"SiteWithoutDataChoosePreferredWay": "Wählen Sie Ihre bevorzugte Art des Setups",
|
3956 |
"SiteWithoutDataOtherWays": "Andere Wege",
|
3957 |
"SiteWithoutDataOtherIntegrations": "Andere Integrationen",
|
3958 |
+
"SiteWithoutDataGoogleTagManager": "Google Tag Manager",
|
3959 |
+
"SiteWithoutDataMatomoTagManager": "Matomo Tag Manager",
|
3960 |
+
"SiteWithoutDataMatomoTagManagerNotActive": "Sie wissen nicht, was ein Tag Manager ist? Informieren Sie sich in unserem %1$sTag Manager Leitfaden%2$s. Wenn Sie mehrere Ressourcen aus 3rd Party Webseiten in Ihre Webseite einbinden, dann ist das Tracking Ihrer Webseite mithilfe eines Tag Managers eventuell eine bessere Lösung als das normale JavaScript tracking.",
|
3961 |
+
"SiteWithoutDataGoogleTagManagerDescription": "Sie können Matomo mit dem Google Tag Manager verwenden. Um das Matomo Tracking im Google Tag Manager einzurichten, folgen Sie den Instruktionen dieser %1$sAnleitung%2$s.",
|
3962 |
+
"SiteWithoutDataDetectedSite": "Wir haben festgestellt, dass Sie eine %1$s Seite verwenden. Folgen Sie bitte den Instruktionen dieser %2$sAnleitung%3$s.",
|
3963 |
+
"SiteWithoutDataDetectedGtm": "Wir haben außerdem entdeckt, dass Sie den Google Tag Manager verwenden. Wenn Sie vorhaben, Matomo unter Verwendung des GTM aufzusetzen, folgen Sie bitte dieser %2$sAnleitung%3$s.",
|
3964 |
"SuperUserAccessCan": "Ein Nutzer mit Hauptadministrator-Berechtigung kann ebenfalls %1$sglobale Einstellungen%2$s für neue Websites vornehmen.",
|
3965 |
"Timezone": "Zeitzone",
|
3966 |
"TrackingSiteSearch": "Die interne Suche auswerten",
|
3972 |
"OnlyMatchedUrlsAllowedHelp": "Wenn aktiviert zeichnet Matomo nur noch interne Aktionen auf bei denen die Seiten-URL eine der bekannten URLs der Website ist. Dies hindert andere daran Ihre Analyse mit URLs von anderen Websites zu verfälschen.",
|
3973 |
"OnlyMatchedUrlsAllowedHelpExamples": "Domain und Pfadangabe müssen exakt übereinstimmen und jede gültige Subdomain muss separat definiert werden. Sind die bekannten URLs beispielsweise 'http:\/\/example.com\/path' und 'http:\/\/good.example.com', werden Tracking-Anfragen von 'http:\/\/example.com\/otherpath' oder 'http:\/\/bad.example.com' ignoriert.",
|
3974 |
"WebsitesManagement": "Websiteverwaltung",
|
3975 |
+
"WebsiteUpdated": "Webseite aktualisiert",
|
3976 |
+
"WebsiteCreated": "Webseite erstellt",
|
3977 |
"XManagement": "%s verwalten",
|
3978 |
"ChooseMeasurableTypeHeadline": "Was möchten Sie messen?",
|
3979 |
"YouCurrentlyHaveAccessToNWebsites": "Sie haben derzeit Zugriff auf %s Websites.",
|
3986 |
"EmailInstructionsSiteDetailsHeading": "Einzelheiten Ihrer Seite",
|
3987 |
"EmailInstructionsSiteDetails": "Sie benötigen diese Angaben, um die API oder SDKs zum Verfolgen von Matomo-Besuchen zu verwenden.",
|
3988 |
"EmailInstructionsYourSiteId": "Ihre Seiten-ID: %1$s",
|
3989 |
+
"EmailInstructionsYourTrackingUrl": "Ihre Tracking-URL: %1$s",
|
3990 |
+
"DetectingYourSite": "Durchsuche Ihre Seite"
|
3991 |
},
|
3992 |
"TagManager": {
|
3993 |
"AddThisTagDescription": "Fügen Sie die AddThis Social Media Buttons und mehr zu Ihrer Website hinzu.",
|
4524 |
"WeekdayVariableDescription": "Liefert den lokalen Wochentag, z. B. Montag, Dienstag, Mittwoch, ...",
|
4525 |
"WeekdayVariableName": "Wochentag",
|
4526 |
"WindowLeaveTriggerDescription": "Wird ausgelöst wenn der Benutzer daran ist die aktuelle Seite zu verlassen, indem die Maus ausserhalb des Fensters positioniert wird.",
|
4527 |
+
"WindowLeaveTriggerHelp": "Dieser Trigger wird ausgelöst, wenn der Benutzer möglicherweise vor hat, die Website zu verlassen und den Mauszeiger ausserhalb der Website platziert, zum Beispiel zur Browser URL Adresszeile oder einem anderen Knopf. Das kann hilfreich sein um die Aufmerksamkeit Ihres Besuchers zu behalten und den Besucher nicht zu verlieren, in dem zum Beispiel ein Exit-Popup gezeigt wird. Sie sind möglicherweise auch am \"Fenster Unload\" Trigger interessiert, welcher ausgelöst wird, sobald der Benutzer die aktuelle Seite effektiv verlässt.",
|
4528 |
"WindowLeaveTriggerName": "Fenster verlassen",
|
4529 |
"WindowLoadedTriggerDescription": "Wird ausgelöst wenn die Seite mit allen Bildern usw. geladen wurde.",
|
4530 |
"WindowLoadedTriggerHelp": "Diese Phase des Ladens ist wenn eine Seite für den Browser komplett geladen ist. In den meisten Fällen bedeutet das auch dass alle Bilder geladen sind und dass alle Style angewendet werden usw. Dieser Trigger wird immer irgendwann nach dem \"DOM Ready\" ausgelöst.",
|
4672 |
"RecoveryCodesAllUsed": "Alle Recovery Codes wurden verwendet, es wird wärmstens empfohlen Ihre Recovery Codes zu regenerieren.",
|
4673 |
"RecoveryCodesRegenerated": "Recovery Codes wurden regeneriert. Stellen Sie sicher, dass die neu generierten Codes heruntergeladen oder ausgedruckt werden.",
|
4674 |
"GenerateNewRecoveryCodes": "Einen neuen Wiederherstellungscode generieren",
|
4675 |
+
"GenerateNewRecoveryCodesInfo": "Wenn Sie neue Recovery Codes generieren, werden Ihre alten nicht mehr funktionieren. Stellen Sie sicher dass Sie die neuen Codes herunterladen oder ausdrucken.",
|
4676 |
+
"RequireTwoFAForAll": "Zwei-Faktor Authentifizierung für alle benötigt",
|
4677 |
+
"RequireTwoFAForAllInformation": "Wenn angewählt, muss jeder Benutzer sich per Zwei-Faktor Authentifizierung anmelden. 2FA zu erzwingen hat zur Folge, dass alle Benutzer Zugang zu einem Gerät haben müssen, auf welchem eine Authentifizierungs-App installierbar ist. Sie können diese Funktion nur aktivieren wenn Sie die Zwei-Faktor-Authentifizierung bereits bei sich aktiviert haben."
|
4678 |
},
|
4679 |
"UserCountry": {
|
4680 |
"CannotLocalizeLocalIP": "Die IP-Adresse %s ist eine lokale Adresse. Der Standort kann daher nicht ermittelt werden.",
|
4721 |
"ToGeolocateOldVisits": "Für Standortdaten für vergangene Besuche verwenden Sie bitte das %1$shier beschriebene Skript%2$s.",
|
4722 |
"WidgetLocation": "Besucherstandort",
|
4723 |
"GeoIpDbIpAccuracyNote": "Bemerkung: Die DBIP Datenbanken sind frei und können automatisch heruntergeladen werden, aber Geolocation Resultate (insbesondere Städte-Resultate) sind nicht so akkurat wie die von MaxMind. Bei MaxMind hingegen benötigen Sie auch für die freie Geolocation Datenbank ein Benutzerkonto, Sie können den Prozess %1$shier%2$s starten",
|
4724 |
+
"MaxMindLinkExplanation": "Wenn Sie die Geolocation Datenbanken von MaxMind verwenden und Sie nicht wissen wie Ihre Download URL zu generieren ist, %1$sklicken Sie hier um zu lernen wie%2$s.",
|
4725 |
+
"LocationsSubcategoryHelp": "Der Orte Abschnitt ist der beste Weg herauszufinden wo Personen sind, wenn Sie Ihre Seite besuchen. Er zeigt Länder, Kontinente, Regionen und Städte auf, von denen Ihre Besucher kommen, in Tabellen- und Kartenform. Zusätzlich dazu können Sie sehen welche Browsersprachen eingestellt sind, was dabei hilft internationale Besucher aus alternativen Standorten zu identifizieren."
|
4726 |
},
|
4727 |
"UserCountryMap": {
|
4728 |
"PluginDescription": "Dieses Plugin stellt die Widgets \"Besucherkarte\" sowie \"Besucherkarte in Echtzeit\" bereit. Hinweis: Hierfür muss das Plugin \"UserCountry\" aktiviert sein.",
|
4747 |
"WithUnknownRegion": "%s mit unbekannter Region",
|
4748 |
"WithUnknownCity": "%s mit unbekannter Stadt",
|
4749 |
"NoVisitsInfo": "Es werden aktuell keine Besuche angezeigt, weil für diesen Zeitraum kein Besuch mit korrekten Geolocation Informationen (Längengrad & Breitengrad) existiert.",
|
4750 |
+
"NoVisitsInfo2": "Um das Problem zu lösen, stellen Sie sicher, dass Sie einen GeoIP Geolocation Provider mit einer GeoIP Stadt Datenbank verwenden. Wenn dies Ihr Problem nicht löst, dann ist es möglich (wenn auch unwahrscheinlich) dass Ihre Besuche IP Adressen haben, die nicht geolokalisiert werden können.",
|
4751 |
+
"RealTimeMapHelp": "Die Echtzeit-Karte zeigt den Ort der Besucher auf Ihrer Seite von den letzten 30 Minuten. Große orange Kreise repräsentieren kürzliche Besuche, während kleinere Kreise die älteren Besuche anzeigen. Diese Daten aktualisieren alle fünf Sekunden, und neue Besucher werden mit einem Flash-Effekt dargestellt."
|
4752 |
},
|
4753 |
"UserId": {
|
4754 |
"UserId": "Benutzer-ID",
|
4813 |
"ExceptionEditAnonymous": "Der anonyme Benutzer kann nicht bearbeitet oder gelöscht werden. Er wird von Matomo benutzt, um einen Benutzer zu definieren, der sich noch nicht angemeldet hat. Zum Beispiel können Sie Ihre Statistiken öffentlich machen, indem Sie dem Benutzer 'anonymous' das Recht 'view' geben.",
|
4814 |
"ExceptionEmailExists": "Ein Benutzer mit der E-Mail-Adresse '%s' existiert bereits.",
|
4815 |
"ExceptionEmailExistsAsLogin": "Die E-Mail-Adresse '%s' wird bereits als Nutzername verwendet.",
|
4816 |
+
"ExceptionLoginExistsAsEmail": "Der Nutzername '%s' wird bereits als E-Mail-Adresse verwendet.",
|
4817 |
"ExceptionInvalidEmail": "Die E-Mail-Adresse hat ein ungültiges Format.",
|
4818 |
"ExceptionInvalidLoginFormat": "Der Benutzername muss zwischen %1$s und %2$s Zeichen lang sein und darf nur Buchstaben, Zahlen oder die Zeichen '_', '-', '.', '@' oder '+' enthalten.",
|
4819 |
"ExceptionInvalidPassword": "Das Passwort muss mindestens %1$s Zeichen lang sein.",
|
4950 |
"NewsletterSignupTitle": "Newsletter-Anmeldung",
|
4951 |
"NewsletterSignupMessage": "Abonnieren Sie unseren Newsletter, um regelmäßig Informationen über Matomo zu erhalten. Deabonnieren ist jederzeit möglich. Dieser Dienst verwendet MadMimi. Erfahren Sie mehr in unserer %1$sDatenschutzerklärung%2$s.",
|
4952 |
"NewsletterSignupFailureMessage": "Hoppla, etwas ist schief gelaufen. Wir konnten Sie nicht für unseren Newsletter registrieren.",
|
4953 |
+
"NewsletterSignupSuccessMessage": "Super, Sie wurden erfolgreich registriert! Wir werden in Kürze von uns hören lassen.",
|
4954 |
+
"FirstWebsitePermission": "Berechtigung erste Webseite"
|
4955 |
},
|
4956 |
"VisitFrequency": {
|
4957 |
"ColumnActionsByNewVisits": "Aktionen bei neuen Besuchen",
|
app/lang/el.json
CHANGED
@@ -16,6 +16,7 @@
|
|
16 |
"Apply": "Εφαρμογή",
|
17 |
"ArchivingInlineHelp": "Για μεσαίας ή μεγάλης επισκεψιμότητας ιστοσελίδες, προτείνεται να απενεργοποιήσετε στο Matomo την αρχειοθέτηση που προκαλείται από τον φυλλομετρητή. Αντί για αυτό, σας προτείνουμε να εγκαταστήσετε μια εργασία cron για να δημιουργείτε αναφορές Matomo κάθε ώρα.",
|
18 |
"ArchivingTriggerDescription": "Προτείνεται για μεγάλες εγκαταστάσεις του Matomo, πρέπει να %1$sορίσετε μια εργασία cron%2$s για να γίνεται αυτόματη επεξεργασία των αναφορών.",
|
|
|
19 |
"AuthenticationMethodSmtp": "Μέθοδος πιστοποίησης SMTP",
|
20 |
"AverageOrderValue": "Μέση τιμή παραγγελίας",
|
21 |
"AveragePrice": "Μέση τιμή",
|
@@ -176,6 +177,8 @@
|
|
176 |
"ExceptionDatabaseVersion": "Η έκδοσή %1$s είναι %2$s αλλά το Matomo απαιτεί τουλάχιστον %3$s.",
|
177 |
"ExceptionDatabaseVersionNewerThanCodebase": "Ο κώδικας του Matomo εκτελεί την παλιότερη έκδοση %1$s και εντοπίστηκε ότι η βάση δεδομένων του Matomo έχει ήδη αναβαθμιστεί στην νεότερη έκδοση %2$s.",
|
178 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Είναι πιθανόν οι διαχειριστές του Matomo να τελειώνουν τη διαδικασία αναβάθμισης. Παρακαλούμε δοκιμάστε πάλι αργότερα σε λίγα λεπτά.",
|
|
|
|
|
179 |
"ExceptionFileIntegrity": "Ο έλεγχος ακεραιότητας απέτυχε: %s",
|
180 |
"ExceptionFilesizeMismatch": "Αταίριαστο μέγεθος αρχείου: %1$s (αναμενόμενο: %2$s, βρέθηκε: %3$s)",
|
181 |
"ExceptionIncompatibleClientServerVersions": "Η έκδοση πελάτη σας %1$s είναι %2$s η οποία είναι ασύμβατη με την έκδοση διακομιστή %3$s.",
|
@@ -524,7 +527,8 @@
|
|
524 |
"Custom": "Προσαρμογή",
|
525 |
"PreviousPeriod": "Προηγούμενη Περίοδος",
|
526 |
"PreviousYear": "Προηγούμενο Έτος",
|
527 |
-
"ViewAccessRequired": "Το token_auth που χρησιμοποιείται έχει παραπάνω πρόσβαση από την απαραίτητη για χρήση σε αίτηση URL μη API-κλήσης. Χρησιμοποιήστε ένα συνθηματικό ειδικό για χρήση που έχει πρόσβαση μόνο για ανάγνωση."
|
|
|
528 |
},
|
529 |
"Mobile": {
|
530 |
"AboutPiwikMobile": "Σχετικά με το Matomo για κινητά",
|
@@ -915,7 +919,24 @@
|
|
915 |
"TrackingFailuresEmail1": "Αυτό μόνο και μόνο για να γνωρίζετε ότι %s διαφορετικά είδη αποτυχιών παρακολούθησης έχουν συμβεί τις τελευταίες ημέρες.",
|
916 |
"TrackingFailuresEmail2": "Για να δείτε όλες τις αποτυχημένες αιτήσεις παρακολούθησης %1$sκάντε κλικ εδώ%2$s.",
|
917 |
"ImportFromGoogleAnalytics": "Εισαγωγή από το Google Analytics",
|
918 |
-
"ImportFromGoogleAnalyticsDescription": "Αν έχετε μια ιδιοκτησία του Google Analytics και αλλάζετε στο Matomo, μπορείτε να εισαγάγετε τα υπάρχοντα δεδομένα σας με χρήση του πρόσθετου %1$sGoogleAnalyticsImporter%2$s."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
919 |
},
|
920 |
"CoreHome": {
|
921 |
"CategoryNoData": "Ανεπαρκή δεδομένα στη κατηγορία. Δοκιμάστε να συμπεριλάβετε όλο το πλήθος.",
|
@@ -1536,7 +1557,7 @@
|
|
1536 |
"ContactUs": "Επικοινωνήστε μαζί μας",
|
1537 |
"VisitTheForums": "Δείτε τα %1$sΦόρουμ%2$s και λάβετε βοήθεια από την κοινότητα χρηστών του Matomo",
|
1538 |
"Forums": "Φόρουμ",
|
1539 |
-
"ReviewMatomoTitle": "
|
1540 |
"PleaseLeaveExternalReviewForMatomo": "Μοιραστείτε τις σκέψεις σας σχετικά με τις ιστοσελίδες αυτές και εμπνεύστε άλλους να συμμετέχουν στην επανάστασή μας των δεδομένων.",
|
1541 |
"RemindMeLater": "Να μου γίνει αργότερα υπενθύμιση",
|
1542 |
"NeverAskMeAgain": "Να μην ερωτηθώ ποτέ ξανά",
|
@@ -1548,11 +1569,12 @@
|
|
1548 |
"SearchHelpResources": "Αναζήτηση στους πόρους βοήθειας του matomo.org",
|
1549 |
"PopularHelpTopics": "Δημοφιλή θέματα βοήθειας",
|
1550 |
"ReferMatomo": "Κάντε αναφορά για το Matomo",
|
1551 |
-
"ReferBannerTitle": "
|
1552 |
-
"ReferBannerLonger": "
|
1553 |
"ReferBannerEmailShareSubject": "Κάντε λόγο σ' αυτούς για το Matomo Analytics τώρα για να πάρουν πίσω τον έλεγχο!",
|
1554 |
"ReferBannerEmailShareBody": "Επιλέγω το Matomo, μια ηθική εναλλακτική λύση του Google Analytics που μου δίνει 100%% την ιδιοκτησία των δεδομένων και τα προστατεύει από τους επισκέπτες του ιστοτόπου μου.\nΜοιράζομαι το μήνυμα αυτό με την ελπίδα ότι κι εσείς θα πάρετε πίσω τη δύναμη από το Google και θα αποκτήσετε πλήρως την ιδιοκτησία των δικών σας δεδομένων.\n\nΔείτε το Matomo στο https:\/\/matomo.org",
|
1555 |
-
"ReferBannerSocialShareText": "Αν χρησιμοποιείτε το Google Analytics, διατηρήστε τον έλεγχο κάνοντας αλλαγή τώρα σε μια ηθική εναλλακτική λύση όπως το Matomo!"
|
|
|
1556 |
},
|
1557 |
"GeoIp2": {
|
1558 |
"AssumingNonApache": "Αδύνατη η εύρεση της συνάρτησης apache_get_modules, υποθέτουμε ότι ο διακομιστής δεν είναι Apache.",
|
@@ -1878,11 +1900,8 @@
|
|
1878 |
"SystemCheckGzcompressHelp": "Πρέπει να ενεργοποιήσετε την επέκταση zlib και την συνάρτηση gzcompress.",
|
1879 |
"SystemCheckGzuncompressHelp": "Πρέπει να ενεργοποιήσετε την επέκταση zlib και την συνάρτηση gzuncompress.",
|
1880 |
"SystemCheckHashHelp": "Θα πρέπει να παραμετροποιήσετε και να μεταγλωττίσετε πάλι την PHP με ενεργοποιημένη την υποστήριξη hash() παραλείποντας την επιλογή --disable-hash.",
|
1881 |
-
"SystemCheckIconvHelp": "Πρέπει να ρυθμίσετε και ξαναεγκαταστήσετε την PHP με ενεργοποιημένη την υποστήριξη «iconv», --with-iconv.",
|
1882 |
"SystemCheckJsonHelp": "Η επέκταση php-json απαιτείται προκειμένου το Matomo να διαβάζει και να γράφει δεδομένα JSON.",
|
1883 |
"SystemCheckMailHelp": "Τα μηνύματα με τις παρατηρήσεις σας και για τους Ξεχασμένους Κωδικούς δεν θα στέλνονται αν δεν είναι ενεργοποιημένη η συνάρτηση mail().",
|
1884 |
-
"SystemCheckMbstring": "mbstring",
|
1885 |
-
"SystemCheckMbstringHelp": "Η επέκταση mbstring απαιτείται για τον χειρισμό χαρακτήρων πολλών Bytes στην διεπαφή χρήστη και στις αποκρίσεις API. Επίσης, βεβαιωθείτε ότι η τιμή mbstring.func_overload έχει οριστεί στο \"0\" στο php.ini.",
|
1886 |
"SystemCheckMemoryLimit": "Όριο μνήμης",
|
1887 |
"SystemCheckMemoryLimitHelp": "Σε μια ιστοσελίδα υψηλής επισκεψιμότητας, η διαδικασία αρχειοθέτησης ίσως απαιτεί περισσότερη μνήμη από την επιτρεπόμενη.<br \/>Δείτε την οδηγία memory_limit στο αρχείο php.ini αν είναι απαραίτητο.",
|
1888 |
"SystemCheckMemoryNoMemoryLimitSet": "Δεν έχει οριστεί όριο για τη μνήμη",
|
@@ -1899,7 +1918,6 @@
|
|
1899 |
"SystemCheckPdoAndMysqliHelp": "Σε διακομιστή Linux μπορείτε να ρυθμίσετε την php με τις ακόλουθες επιλογές: %1$s στο αρχείο php.ini, προσθέστε τις ακόλουθες γραμμές: %2$s",
|
1900 |
"SystemCheckPhp": "Έκδοση PHP",
|
1901 |
"SystemCheckPhpPdoAndMysqli": "Περισσότερες πληροφορίες στο: %1$sPHP PDO%2$s και %3$sMYSQLI%4$s.",
|
1902 |
-
"SystemCheckSplHelp": "Πρέπει να ρυθμίσετε και ξαναεγκαταστήσετε την PHP με τη Βασική Βιβλιοθήκη PHP (SPL) ενεργοποιήμένη (ως προεπιλογή).",
|
1903 |
"SystemCheckSessionHelp": "Πρέπει να παραμετροποιήσετε και να επαναμεταγλωττίσετε την PHP με την υποστήριξη για \"session\" ενεργή (μην χρησιμοποιείτε το --disable-session).",
|
1904 |
"SystemCheckSettings": "Απαιτούμενη παραμετροποίηση PHP (php.ini)",
|
1905 |
"SystemCheckSummaryNoProblems": "Δεν υπάρχουν προβλήματα με την εγκατάσταση του Matomo. Όλα καλά!",
|
@@ -3954,6 +3972,8 @@
|
|
3954 |
"OnlyMatchedUrlsAllowedHelp": "Όταν είναι ενεργοποιημένο, το Matomo θα παρακολουθεί εσωτερικές ενέργειες όταν η διεύθυνση URL είναι μία από τις γνωστές διευθύνσεις URL για τον ιστοτόπο σας. Αυτό αποτρέπει τρίτους από ανεπιθύμητη κίνηση στα αναλυτικά σας με διευθύνσεις URL από τρίτους ιστοτόπους.",
|
3955 |
"OnlyMatchedUrlsAllowedHelpExamples": "Το όνομα χώρου και η διαδρομή πρέπει να ταιριάζουν ακριβώς και κάθε υποόνομα να ορίζεται ξεχωριστά. Για παράδειγμα, όταν οι γνωστές διευθύνσεις URL είναι 'http:\/\/example.com\/path' και 'http:\/\/good.example.com', οι αιτήσεις ιχνηλάτησης για το 'http:\/\/example.com\/otherpath' ή 'http:\/\/bad.example.com' αγνοούνται.",
|
3956 |
"WebsitesManagement": "Διαχείριση ιστοσελίδων",
|
|
|
|
|
3957 |
"XManagement": "Διαχείριση του %s",
|
3958 |
"ChooseMeasurableTypeHeadline": "Τι θέλετε να μετρήσετε;",
|
3959 |
"YouCurrentlyHaveAccessToNWebsites": "Έχετε πρόσβαση σε %s ιστοσελίδες.",
|
16 |
"Apply": "Εφαρμογή",
|
17 |
"ArchivingInlineHelp": "Για μεσαίας ή μεγάλης επισκεψιμότητας ιστοσελίδες, προτείνεται να απενεργοποιήσετε στο Matomo την αρχειοθέτηση που προκαλείται από τον φυλλομετρητή. Αντί για αυτό, σας προτείνουμε να εγκαταστήσετε μια εργασία cron για να δημιουργείτε αναφορές Matomo κάθε ώρα.",
|
18 |
"ArchivingTriggerDescription": "Προτείνεται για μεγάλες εγκαταστάσεις του Matomo, πρέπει να %1$sορίσετε μια εργασία cron%2$s για να γίνεται αυτόματη επεξεργασία των αναφορών.",
|
19 |
+
"ArchivingTriggerSegment": "Η χρήση των Προσαρμοσμένων Τμημάτων θα προκαλέσει την επεξεργασία των αρχειοθετημένων εγγραφών.",
|
20 |
"AuthenticationMethodSmtp": "Μέθοδος πιστοποίησης SMTP",
|
21 |
"AverageOrderValue": "Μέση τιμή παραγγελίας",
|
22 |
"AveragePrice": "Μέση τιμή",
|
177 |
"ExceptionDatabaseVersion": "Η έκδοσή %1$s είναι %2$s αλλά το Matomo απαιτεί τουλάχιστον %3$s.",
|
178 |
"ExceptionDatabaseVersionNewerThanCodebase": "Ο κώδικας του Matomo εκτελεί την παλιότερη έκδοση %1$s και εντοπίστηκε ότι η βάση δεδομένων του Matomo έχει ήδη αναβαθμιστεί στην νεότερη έκδοση %2$s.",
|
179 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Είναι πιθανόν οι διαχειριστές του Matomo να τελειώνουν τη διαδικασία αναβάθμισης. Παρακαλούμε δοκιμάστε πάλι αργότερα σε λίγα λεπτά.",
|
180 |
+
"ExceptionDatabaseUnavailable": "Δεν ανταποκρίνεται ο διακομιστής MySQL",
|
181 |
+
"ExceptionDatabaseAccess": "Απορρίφθηκε η πρόσβαση στη βάση δεδομένων",
|
182 |
"ExceptionFileIntegrity": "Ο έλεγχος ακεραιότητας απέτυχε: %s",
|
183 |
"ExceptionFilesizeMismatch": "Αταίριαστο μέγεθος αρχείου: %1$s (αναμενόμενο: %2$s, βρέθηκε: %3$s)",
|
184 |
"ExceptionIncompatibleClientServerVersions": "Η έκδοση πελάτη σας %1$s είναι %2$s η οποία είναι ασύμβατη με την έκδοση διακομιστή %3$s.",
|
527 |
"Custom": "Προσαρμογή",
|
528 |
"PreviousPeriod": "Προηγούμενη Περίοδος",
|
529 |
"PreviousYear": "Προηγούμενο Έτος",
|
530 |
+
"ViewAccessRequired": "Το token_auth που χρησιμοποιείται έχει παραπάνω πρόσβαση από την απαραίτητη για χρήση σε αίτηση URL μη API-κλήσης. Χρησιμοποιήστε ένα συνθηματικό ειδικό για χρήση που έχει πρόσβαση μόνο για ανάγνωση.",
|
531 |
+
"Reasons": "Αιτίες"
|
532 |
},
|
533 |
"Mobile": {
|
534 |
"AboutPiwikMobile": "Σχετικά με το Matomo για κινητά",
|
919 |
"TrackingFailuresEmail1": "Αυτό μόνο και μόνο για να γνωρίζετε ότι %s διαφορετικά είδη αποτυχιών παρακολούθησης έχουν συμβεί τις τελευταίες ημέρες.",
|
920 |
"TrackingFailuresEmail2": "Για να δείτε όλες τις αποτυχημένες αιτήσεις παρακολούθησης %1$sκάντε κλικ εδώ%2$s.",
|
921 |
"ImportFromGoogleAnalytics": "Εισαγωγή από το Google Analytics",
|
922 |
+
"ImportFromGoogleAnalyticsDescription": "Αν έχετε μια ιδιοκτησία του Google Analytics και αλλάζετε στο Matomo, μπορείτε να εισαγάγετε τα υπάρχοντα δεδομένα σας με χρήση του πρόσθετου %1$sGoogleAnalyticsImporter%2$s.",
|
923 |
+
"SecurityNotificationEmailSubject": "Ειδοποίηση Ασφάλειας",
|
924 |
+
"SecurityNotificationRecoveryCodesShowedBody": "Κάποιος είδε τους κωδικούς ανάκτησης αυθεντικοποίησης δύο παραγόντων του λογαριασμού σας.",
|
925 |
+
"SecurityNotificationRecoveryCodesRegeneratedBody": "Κάποιος δημιούργησε νέους κωδικούς ανάκτησης για την αυθεντικοποίηση δύο παραγόντων για το λογαριασμό σας.",
|
926 |
+
"SecurityNotificationTwoFactorAuthEnabledBody": "Κάποιος ενεργοποίησε την αυθεντικοποίηση δύο παραγόντων στο λογαριασμό σας.",
|
927 |
+
"SecurityNotificationTwoFactorAuthDisabledBody": "Κάποιος απενεργοποίησε την αυθεντικοποίηση δύο παραγόντων στο λογαριασμό σας.",
|
928 |
+
"SecurityNotificationTokenAuthCreatedBody": "Κάποιος δημιούργησε ένα τεκμήριο αυθεντικοποίησης (περιγραφή: %s) στο λογαριασμό σας. Αν δεν ήσασταν εσείς, διαγράψτε το τεκμήριο.",
|
929 |
+
"SecurityNotificationTokenAuthDeletedBody": "Κάποιος διέγραψε ένα τεκμήριο αυθεντικοποίησης (περιγραφή: %s) στο λογαριασμό σας.",
|
930 |
+
"SecurityNotificationAllTokenAuthDeletedBody": "Κάποιος διέγραψε όλα τα τεκμήρια αυθεντικοποίησης στο λογαριασμό σας.",
|
931 |
+
"SecurityNotificationSettingsChangedByUserBody": "Κάποιος τροποποίησε τις ρυθμίσεις συστήματος. Οι ρυθμίσεις που επηρεάστηκαν: %s.",
|
932 |
+
"SecurityNotificationSettingsChangedByOtherSuperUserBody": "Κάποιος άλλος υπερ-χρήστης (%1$s) τροποποίησε τις ρυθμίσεις συστήματος. Οι ρυθμίσεις που επηρεάστηκαν: %2$s. Αν γνωρίζετε αυτή τη δραστηριότητα, συνεχίστε. Αν δεν την γνωρίζετε, παρακαλώ επικοινωνήστε με τους άλλους υπερ-χρήστες.",
|
933 |
+
"SecurityNotificationUserCreatedBody": "Κάποιος δημιούργησε ένα νέο χρήστη (όνομα εισόδου: %s) στο λογαριασμό σας.",
|
934 |
+
"SecurityNotificationUserDeletedBody": "Κάποιος διέγραψε ένα χρήστη (όνομα εισόδου: %s) στο λογαριασμό σας.",
|
935 |
+
"SecurityNotificationIfItWasYou": "Αν αυτός ήσασταν εσείς, συνεχίστε. Αν δεν αναγνωρίζετε αυτή τη δραστηριότητα, παρακαλώ αλλάξτε το συνθηματικό σας.",
|
936 |
+
"SecurityNotificationCheckTwoFactor": "Παρακαλώ ελέγξτε την εφαρμογή ή συσκευή σας αυθεντικοποίησης δύο παραγόντων.",
|
937 |
+
"BruteForce": "Brute Force",
|
938 |
+
"TwoFactorAuth": "Αυθεντικοποίηση δύο παραγόντων",
|
939 |
+
"Cors": "Cors"
|
940 |
},
|
941 |
"CoreHome": {
|
942 |
"CategoryNoData": "Ανεπαρκή δεδομένα στη κατηγορία. Δοκιμάστε να συμπεριλάβετε όλο το πλήθος.",
|
1557 |
"ContactUs": "Επικοινωνήστε μαζί μας",
|
1558 |
"VisitTheForums": "Δείτε τα %1$sΦόρουμ%2$s και λάβετε βοήθεια από την κοινότητα χρηστών του Matomo",
|
1559 |
"Forums": "Φόρουμ",
|
1560 |
+
"ReviewMatomoTitle": "Σας αρέσει το Matomo;",
|
1561 |
"PleaseLeaveExternalReviewForMatomo": "Μοιραστείτε τις σκέψεις σας σχετικά με τις ιστοσελίδες αυτές και εμπνεύστε άλλους να συμμετέχουν στην επανάστασή μας των δεδομένων.",
|
1562 |
"RemindMeLater": "Να μου γίνει αργότερα υπενθύμιση",
|
1563 |
"NeverAskMeAgain": "Να μην ερωτηθώ ποτέ ξανά",
|
1569 |
"SearchHelpResources": "Αναζήτηση στους πόρους βοήθειας του matomo.org",
|
1570 |
"PopularHelpTopics": "Δημοφιλή θέματα βοήθειας",
|
1571 |
"ReferMatomo": "Κάντε αναφορά για το Matomo",
|
1572 |
+
"ReferBannerTitle": "Πιστεύετε στο Matomo;",
|
1573 |
+
"ReferBannerLonger": "Βοηθήστε στο να διαδώστε τα νέα για εμάς ώστε περισσότεροι άνθρωποι να αποκτήσουν τον έλεγχο των δεδομένων αναλυτικών τους.",
|
1574 |
"ReferBannerEmailShareSubject": "Κάντε λόγο σ' αυτούς για το Matomo Analytics τώρα για να πάρουν πίσω τον έλεγχο!",
|
1575 |
"ReferBannerEmailShareBody": "Επιλέγω το Matomo, μια ηθική εναλλακτική λύση του Google Analytics που μου δίνει 100%% την ιδιοκτησία των δεδομένων και τα προστατεύει από τους επισκέπτες του ιστοτόπου μου.\nΜοιράζομαι το μήνυμα αυτό με την ελπίδα ότι κι εσείς θα πάρετε πίσω τη δύναμη από το Google και θα αποκτήσετε πλήρως την ιδιοκτησία των δικών σας δεδομένων.\n\nΔείτε το Matomo στο https:\/\/matomo.org",
|
1576 |
+
"ReferBannerSocialShareText": "Αν χρησιμοποιείτε το Google Analytics, διατηρήστε τον έλεγχο κάνοντας αλλαγή τώρα σε μια ηθική εναλλακτική λύση όπως το Matomo!",
|
1577 |
+
"WontShowAgain": "Δε θα εμφανιστεί ξανά αυτό το μήνυμα."
|
1578 |
},
|
1579 |
"GeoIp2": {
|
1580 |
"AssumingNonApache": "Αδύνατη η εύρεση της συνάρτησης apache_get_modules, υποθέτουμε ότι ο διακομιστής δεν είναι Apache.",
|
1900 |
"SystemCheckGzcompressHelp": "Πρέπει να ενεργοποιήσετε την επέκταση zlib και την συνάρτηση gzcompress.",
|
1901 |
"SystemCheckGzuncompressHelp": "Πρέπει να ενεργοποιήσετε την επέκταση zlib και την συνάρτηση gzuncompress.",
|
1902 |
"SystemCheckHashHelp": "Θα πρέπει να παραμετροποιήσετε και να μεταγλωττίσετε πάλι την PHP με ενεργοποιημένη την υποστήριξη hash() παραλείποντας την επιλογή --disable-hash.",
|
|
|
1903 |
"SystemCheckJsonHelp": "Η επέκταση php-json απαιτείται προκειμένου το Matomo να διαβάζει και να γράφει δεδομένα JSON.",
|
1904 |
"SystemCheckMailHelp": "Τα μηνύματα με τις παρατηρήσεις σας και για τους Ξεχασμένους Κωδικούς δεν θα στέλνονται αν δεν είναι ενεργοποιημένη η συνάρτηση mail().",
|
|
|
|
|
1905 |
"SystemCheckMemoryLimit": "Όριο μνήμης",
|
1906 |
"SystemCheckMemoryLimitHelp": "Σε μια ιστοσελίδα υψηλής επισκεψιμότητας, η διαδικασία αρχειοθέτησης ίσως απαιτεί περισσότερη μνήμη από την επιτρεπόμενη.<br \/>Δείτε την οδηγία memory_limit στο αρχείο php.ini αν είναι απαραίτητο.",
|
1907 |
"SystemCheckMemoryNoMemoryLimitSet": "Δεν έχει οριστεί όριο για τη μνήμη",
|
1918 |
"SystemCheckPdoAndMysqliHelp": "Σε διακομιστή Linux μπορείτε να ρυθμίσετε την php με τις ακόλουθες επιλογές: %1$s στο αρχείο php.ini, προσθέστε τις ακόλουθες γραμμές: %2$s",
|
1919 |
"SystemCheckPhp": "Έκδοση PHP",
|
1920 |
"SystemCheckPhpPdoAndMysqli": "Περισσότερες πληροφορίες στο: %1$sPHP PDO%2$s και %3$sMYSQLI%4$s.",
|
|
|
1921 |
"SystemCheckSessionHelp": "Πρέπει να παραμετροποιήσετε και να επαναμεταγλωττίσετε την PHP με την υποστήριξη για \"session\" ενεργή (μην χρησιμοποιείτε το --disable-session).",
|
1922 |
"SystemCheckSettings": "Απαιτούμενη παραμετροποίηση PHP (php.ini)",
|
1923 |
"SystemCheckSummaryNoProblems": "Δεν υπάρχουν προβλήματα με την εγκατάσταση του Matomo. Όλα καλά!",
|
3972 |
"OnlyMatchedUrlsAllowedHelp": "Όταν είναι ενεργοποιημένο, το Matomo θα παρακολουθεί εσωτερικές ενέργειες όταν η διεύθυνση URL είναι μία από τις γνωστές διευθύνσεις URL για τον ιστοτόπο σας. Αυτό αποτρέπει τρίτους από ανεπιθύμητη κίνηση στα αναλυτικά σας με διευθύνσεις URL από τρίτους ιστοτόπους.",
|
3973 |
"OnlyMatchedUrlsAllowedHelpExamples": "Το όνομα χώρου και η διαδρομή πρέπει να ταιριάζουν ακριβώς και κάθε υποόνομα να ορίζεται ξεχωριστά. Για παράδειγμα, όταν οι γνωστές διευθύνσεις URL είναι 'http:\/\/example.com\/path' και 'http:\/\/good.example.com', οι αιτήσεις ιχνηλάτησης για το 'http:\/\/example.com\/otherpath' ή 'http:\/\/bad.example.com' αγνοούνται.",
|
3974 |
"WebsitesManagement": "Διαχείριση ιστοσελίδων",
|
3975 |
+
"WebsiteUpdated": "Ο ιστοτόπος ενημερώθηκε",
|
3976 |
+
"WebsiteCreated": "Ο ιστοτόπος δημιουργήθηκε",
|
3977 |
"XManagement": "Διαχείριση του %s",
|
3978 |
"ChooseMeasurableTypeHeadline": "Τι θέλετε να μετρήσετε;",
|
3979 |
"YouCurrentlyHaveAccessToNWebsites": "Έχετε πρόσβαση σε %s ιστοσελίδες.",
|
app/lang/en.json
CHANGED
@@ -16,6 +16,7 @@
|
|
16 |
"Apply": "Apply",
|
17 |
"ArchivingInlineHelp": "For medium to high traffic websites, it is recommended to disable Matomo archiving to trigger from the browser. Instead, we recommend that you setup a cron job to process Matomo reports every hour.",
|
18 |
"ArchivingTriggerDescription": "Recommended for larger Matomo installs, you need to %1$ssetup a cron job%2$s to process the reports automatically.",
|
|
|
19 |
"AuthenticationMethodSmtp": "Authentication method for SMTP",
|
20 |
"AverageOrderValue": "Average Order Value",
|
21 |
"AveragePrice": "Average Price",
|
@@ -176,6 +177,8 @@
|
|
176 |
"ExceptionDatabaseVersion": "Your %1$s version is %2$s but Matomo requires at least %3$s.",
|
177 |
"ExceptionDatabaseVersionNewerThanCodebase": "Your Matomo codebase is running the old version %1$s and we have detected that your Matomo Database has already been upgraded to the newer version %2$s.",
|
178 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Maybe your Matomo administrators are currently finishing the upgrade process. Please try again in a few minutes.",
|
|
|
|
|
179 |
"ExceptionFileIntegrity": "Integrity check failed: %s",
|
180 |
"ExceptionFilesizeMismatch": "File size mismatch: %1$s (expected length: %2$s, found: %3$s)",
|
181 |
"ExceptionIncompatibleClientServerVersions": "Your %1$s client version is %2$s which is incompatible with server version %3$s.",
|
@@ -524,7 +527,8 @@
|
|
524 |
"Custom": "Custom",
|
525 |
"PreviousPeriod": "Previous Period",
|
526 |
"PreviousYear": "Previous Year",
|
527 |
-
"ViewAccessRequired": "The token_auth used has too much access to be used in a non-API request URL. Please use an app specific password for a user that only has view access."
|
|
|
528 |
},
|
529 |
"Mobile": {
|
530 |
"AboutPiwikMobile": "About Matomo Mobile",
|
@@ -915,7 +919,24 @@
|
|
915 |
"TrackingFailuresEmail1": "This is just to let you know that %s different kinds of tracking failures have occurred in the last days.",
|
916 |
"TrackingFailuresEmail2": "To view all the failed tracking requests %1$sclick here%2$s.",
|
917 |
"ImportFromGoogleAnalytics": "Import from Google Analytics",
|
918 |
-
"ImportFromGoogleAnalyticsDescription": "If you have a Google Analytics property and are switching to Matomo, you can import your existing data using the %1$sGoogleAnalyticsImporter%2$s plugin."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
919 |
},
|
920 |
"CoreHome": {
|
921 |
"CategoryNoData": "No data in this category. Try to \"Include all population\".",
|
@@ -1038,7 +1059,7 @@
|
|
1038 |
"VisitorsCategoryHelp2": "In addition to general information about your visitors, you can also use the %1$sVisits Log%2$s to see what occurred in every individual visit.",
|
1039 |
"VisitorsOverviewHelp": "The Visitors Overview helps you understand the popularity of your site. It does this by providing charts that show how many visits your site is receiving over a selected period and the average level of engagement for key features, such as searches and downloads.",
|
1040 |
"DevicesSubcategoryHelp": "The Devices section helps you understand the technology that your visitors are using to access your site. You will see reports on the type of device and specific models to enable you to optimise your site for the most popular devices.",
|
1041 |
-
"SoftwareSubcategoryHelp": "The Software section shows the operating systems, browsers and plugins that your visitors are using to access the site so that you can optimise your site to ensure it is fully compatible with the most popular configurations
|
1042 |
"EngagementSubcategoryHelp1": "The Engagement section provides reports that help to quantify how many new and returning visitors you get. You can also review reports that break down the average time and number of pages per visit, as well as the number of times a visitor has been to your site and the most common number of days between visits.",
|
1043 |
"EngagementSubcategoryHelp2": "This can help you to optimise for frequency and high-interaction visits in addition to maximising your reach.",
|
1044 |
"PeriodHasOnlyRawData": "It looks like reports for this period have not been processed yet. Do you want to see what's happening now? Check out the %1$sVisits log%2$s or choose a different date period until the reports are generated."
|
@@ -1879,11 +1900,8 @@
|
|
1879 |
"SystemCheckGzcompressHelp": "You need to enable the zlib extension and gzcompress function.",
|
1880 |
"SystemCheckGzuncompressHelp": "You need to enable the zlib extension and gzuncompress function.",
|
1881 |
"SystemCheckHashHelp": "You need to configure and rebuild PHP with hash() support enabled by excluding the option --disable-hash.",
|
1882 |
-
"SystemCheckIconvHelp": "You need to configure and rebuild PHP with \"iconv\" support enabled, --with-iconv.",
|
1883 |
"SystemCheckJsonHelp": "The php-json extension is required for Matomo to read and write JSON data.",
|
1884 |
"SystemCheckMailHelp": "Feedback and Lost Password messages will not be sent without mail().",
|
1885 |
-
"SystemCheckMbstring": "mbstring",
|
1886 |
-
"SystemCheckMbstringHelp": "The mbstring extension is required to handle multibyte characters in the User interface and API responses. Also, please check that mbstring.func_overload is set to \"0\" in php.ini.",
|
1887 |
"SystemCheckMemoryLimit": "Memory limit",
|
1888 |
"SystemCheckMemoryLimitHelp": "On a high traffic website, the archiving process may require more memory than currently allowed. If necessary, change the memory_limit directive in your php.ini file.",
|
1889 |
"SystemCheckMemoryNoMemoryLimitSet": "There is no memory limit set",
|
@@ -1900,7 +1918,6 @@
|
|
1900 |
"SystemCheckPdoAndMysqliHelp": "On a GNU\/Linux server you can compile php with the following options: %1$s In your php.ini, add the following lines: %2$s",
|
1901 |
"SystemCheckPhp": "PHP version",
|
1902 |
"SystemCheckPhpPdoAndMysqli": "More information on: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
1903 |
-
"SystemCheckSplHelp": "You need to configure and rebuild PHP with the Standard PHP Library (SPL) enabled (by default).",
|
1904 |
"SystemCheckSessionHelp": "You need to configure and rebuild PHP with \"session\" support enabled (don't use --disable-session).",
|
1905 |
"SystemCheckSettings": "Required PHP configuration (php.ini)",
|
1906 |
"SystemCheckSummaryNoProblems": "Huzzah! There are no problems with your Matomo setup. Give yourself a pat on the back.",
|
@@ -3956,6 +3973,8 @@
|
|
3956 |
"OnlyMatchedUrlsAllowedHelp": "When enabled, Matomo will only track internal actions when the Page URL is one of the known URLs for your website. This prevents people from spamming your analytics with URLs for other websites.",
|
3957 |
"OnlyMatchedUrlsAllowedHelpExamples": "The domain and the path have to be an exact match and each valid subdomain has to be specified separately. For example when the known URLs are 'http:\/\/example.com\/path' and 'http:\/\/good.example.com', tracking requests for 'http:\/\/example.com\/otherpath' or 'http:\/\/bad.example.com' are ignored.",
|
3958 |
"WebsitesManagement": "Websites Management",
|
|
|
|
|
3959 |
"XManagement": "Manage %s",
|
3960 |
"ChooseMeasurableTypeHeadline": "What would you like to measure?",
|
3961 |
"YouCurrentlyHaveAccessToNWebsites": "You currently have access to %s websites.",
|
16 |
"Apply": "Apply",
|
17 |
"ArchivingInlineHelp": "For medium to high traffic websites, it is recommended to disable Matomo archiving to trigger from the browser. Instead, we recommend that you setup a cron job to process Matomo reports every hour.",
|
18 |
"ArchivingTriggerDescription": "Recommended for larger Matomo installs, you need to %1$ssetup a cron job%2$s to process the reports automatically.",
|
19 |
+
"ArchivingTriggerSegment": "Using Custom Segments will still trigger processing of archives.",
|
20 |
"AuthenticationMethodSmtp": "Authentication method for SMTP",
|
21 |
"AverageOrderValue": "Average Order Value",
|
22 |
"AveragePrice": "Average Price",
|
177 |
"ExceptionDatabaseVersion": "Your %1$s version is %2$s but Matomo requires at least %3$s.",
|
178 |
"ExceptionDatabaseVersionNewerThanCodebase": "Your Matomo codebase is running the old version %1$s and we have detected that your Matomo Database has already been upgraded to the newer version %2$s.",
|
179 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Maybe your Matomo administrators are currently finishing the upgrade process. Please try again in a few minutes.",
|
180 |
+
"ExceptionDatabaseUnavailable": "MySQL server has gone away",
|
181 |
+
"ExceptionDatabaseAccess": "Database access denied",
|
182 |
"ExceptionFileIntegrity": "Integrity check failed: %s",
|
183 |
"ExceptionFilesizeMismatch": "File size mismatch: %1$s (expected length: %2$s, found: %3$s)",
|
184 |
"ExceptionIncompatibleClientServerVersions": "Your %1$s client version is %2$s which is incompatible with server version %3$s.",
|
527 |
"Custom": "Custom",
|
528 |
"PreviousPeriod": "Previous Period",
|
529 |
"PreviousYear": "Previous Year",
|
530 |
+
"ViewAccessRequired": "The token_auth used has too much access to be used in a non-API request URL. Please use an app specific password for a user that only has view access.",
|
531 |
+
"Reasons": "Reasons"
|
532 |
},
|
533 |
"Mobile": {
|
534 |
"AboutPiwikMobile": "About Matomo Mobile",
|
919 |
"TrackingFailuresEmail1": "This is just to let you know that %s different kinds of tracking failures have occurred in the last days.",
|
920 |
"TrackingFailuresEmail2": "To view all the failed tracking requests %1$sclick here%2$s.",
|
921 |
"ImportFromGoogleAnalytics": "Import from Google Analytics",
|
922 |
+
"ImportFromGoogleAnalyticsDescription": "If you have a Google Analytics property and are switching to Matomo, you can import your existing data using the %1$sGoogleAnalyticsImporter%2$s plugin.",
|
923 |
+
"SecurityNotificationEmailSubject": "Security Notification",
|
924 |
+
"SecurityNotificationRecoveryCodesShowedBody": "Someone viewed the two-factor authentication recovery codes of your account.",
|
925 |
+
"SecurityNotificationRecoveryCodesRegeneratedBody": "Someone generated new two-factor authentication recovery codes for your account.",
|
926 |
+
"SecurityNotificationTwoFactorAuthEnabledBody": "Someone enabled two-factor authentication in your account.",
|
927 |
+
"SecurityNotificationTwoFactorAuthDisabledBody": "Someone disabled two-factor authentication in your account.",
|
928 |
+
"SecurityNotificationTokenAuthCreatedBody": "Someone created an auth token (description: %s) in your account. If it wasn't you, delete the token.",
|
929 |
+
"SecurityNotificationTokenAuthDeletedBody": "Someone deleted an auth token (description: %s) in your account.",
|
930 |
+
"SecurityNotificationAllTokenAuthDeletedBody": "Someone deleted all of the auth tokens in your account.",
|
931 |
+
"SecurityNotificationSettingsChangedByUserBody": "Someone modified the system settings. Affected settings: %s.",
|
932 |
+
"SecurityNotificationSettingsChangedByOtherSuperUserBody": "Another super user (%1$s) modified the system settings. Affected settings: %2$s. If you know about this activity, carry on. If you don't recognize this activity, please contact the other super users.",
|
933 |
+
"SecurityNotificationUserCreatedBody": "Someone created a new user (login: %s) in your account.",
|
934 |
+
"SecurityNotificationUserDeletedBody": "Someone deleted a user (login: %s) in your account.",
|
935 |
+
"SecurityNotificationIfItWasYou": "If it was you, carry on. If you don't recognize this activity, please reset your password.",
|
936 |
+
"SecurityNotificationCheckTwoFactor": "Please check your two-factor authentication app or device.",
|
937 |
+
"BruteForce": "Brute Force",
|
938 |
+
"TwoFactorAuth": "Two-factor auth",
|
939 |
+
"Cors": "Cors"
|
940 |
},
|
941 |
"CoreHome": {
|
942 |
"CategoryNoData": "No data in this category. Try to \"Include all population\".",
|
1059 |
"VisitorsCategoryHelp2": "In addition to general information about your visitors, you can also use the %1$sVisits Log%2$s to see what occurred in every individual visit.",
|
1060 |
"VisitorsOverviewHelp": "The Visitors Overview helps you understand the popularity of your site. It does this by providing charts that show how many visits your site is receiving over a selected period and the average level of engagement for key features, such as searches and downloads.",
|
1061 |
"DevicesSubcategoryHelp": "The Devices section helps you understand the technology that your visitors are using to access your site. You will see reports on the type of device and specific models to enable you to optimise your site for the most popular devices.",
|
1062 |
+
"SoftwareSubcategoryHelp": "The Software section shows the operating systems, browsers and plugins that your visitors are using to access the site so that you can optimise your site to ensure it is fully compatible with the most popular configurations.",
|
1063 |
"EngagementSubcategoryHelp1": "The Engagement section provides reports that help to quantify how many new and returning visitors you get. You can also review reports that break down the average time and number of pages per visit, as well as the number of times a visitor has been to your site and the most common number of days between visits.",
|
1064 |
"EngagementSubcategoryHelp2": "This can help you to optimise for frequency and high-interaction visits in addition to maximising your reach.",
|
1065 |
"PeriodHasOnlyRawData": "It looks like reports for this period have not been processed yet. Do you want to see what's happening now? Check out the %1$sVisits log%2$s or choose a different date period until the reports are generated."
|
1900 |
"SystemCheckGzcompressHelp": "You need to enable the zlib extension and gzcompress function.",
|
1901 |
"SystemCheckGzuncompressHelp": "You need to enable the zlib extension and gzuncompress function.",
|
1902 |
"SystemCheckHashHelp": "You need to configure and rebuild PHP with hash() support enabled by excluding the option --disable-hash.",
|
|
|
1903 |
"SystemCheckJsonHelp": "The php-json extension is required for Matomo to read and write JSON data.",
|
1904 |
"SystemCheckMailHelp": "Feedback and Lost Password messages will not be sent without mail().",
|
|
|
|
|
1905 |
"SystemCheckMemoryLimit": "Memory limit",
|
1906 |
"SystemCheckMemoryLimitHelp": "On a high traffic website, the archiving process may require more memory than currently allowed. If necessary, change the memory_limit directive in your php.ini file.",
|
1907 |
"SystemCheckMemoryNoMemoryLimitSet": "There is no memory limit set",
|
1918 |
"SystemCheckPdoAndMysqliHelp": "On a GNU\/Linux server you can compile php with the following options: %1$s In your php.ini, add the following lines: %2$s",
|
1919 |
"SystemCheckPhp": "PHP version",
|
1920 |
"SystemCheckPhpPdoAndMysqli": "More information on: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
|
|
1921 |
"SystemCheckSessionHelp": "You need to configure and rebuild PHP with \"session\" support enabled (don't use --disable-session).",
|
1922 |
"SystemCheckSettings": "Required PHP configuration (php.ini)",
|
1923 |
"SystemCheckSummaryNoProblems": "Huzzah! There are no problems with your Matomo setup. Give yourself a pat on the back.",
|
3973 |
"OnlyMatchedUrlsAllowedHelp": "When enabled, Matomo will only track internal actions when the Page URL is one of the known URLs for your website. This prevents people from spamming your analytics with URLs for other websites.",
|
3974 |
"OnlyMatchedUrlsAllowedHelpExamples": "The domain and the path have to be an exact match and each valid subdomain has to be specified separately. For example when the known URLs are 'http:\/\/example.com\/path' and 'http:\/\/good.example.com', tracking requests for 'http:\/\/example.com\/otherpath' or 'http:\/\/bad.example.com' are ignored.",
|
3975 |
"WebsitesManagement": "Websites Management",
|
3976 |
+
"WebsiteUpdated": "Website updated",
|
3977 |
+
"WebsiteCreated": "Website created",
|
3978 |
"XManagement": "Manage %s",
|
3979 |
"ChooseMeasurableTypeHeadline": "What would you like to measure?",
|
3980 |
"YouCurrentlyHaveAccessToNWebsites": "You currently have access to %s websites.",
|
app/lang/es-ar.json
CHANGED
@@ -16,6 +16,7 @@
|
|
16 |
"Apply": "Aplicar",
|
17 |
"ArchivingInlineHelp": "Para sitios web de tráfico medio a alto, se recomienda deshabilitar el archivado de Matomo al ingresar con el navegador. En su lugar, te recomendamos que configurés una tarea de cron para procesar los informes de Matomo cada hora.",
|
18 |
"ArchivingTriggerDescription": "Recomendado para grandes instalaciones de Matomo. Necesitás %1$sconfigurar una tarea de cron%2$s para procesar los informes automáticamente.",
|
|
|
19 |
"AuthenticationMethodSmtp": "Método de autenticación SMTP",
|
20 |
"AverageOrderValue": "Valor promedio por pedido",
|
21 |
"AveragePrice": "Precio promedio",
|
@@ -32,6 +33,7 @@
|
|
32 |
"ChooseLanguage": "Elegir idioma",
|
33 |
"ChoosePeriod": "Elegir período",
|
34 |
"ClickHere": "Hacé clic acá para más información.",
|
|
|
35 |
"DoubleClickToChangePeriod": "Hacé doble clic para aplicar este período.",
|
36 |
"Close": "Cerrar",
|
37 |
"ClickToSearch": "Hacé clic para buscar",
|
@@ -133,7 +135,10 @@
|
|
133 |
"DaysHours": "%1$s días %2$s horas",
|
134 |
"DaysSinceFirstVisit": "Días desde la primera visita",
|
135 |
"DaysSinceLastEcommerceOrder": "Días desde el último pedido de Comercio electrónico",
|
|
|
136 |
"DaysSinceLastVisit": "Días desde la última visita",
|
|
|
|
|
137 |
"Default": "Predeterminado",
|
138 |
"DefaultAppended": "(predeterminado)",
|
139 |
"Delete": "Eliminar",
|
@@ -172,6 +177,8 @@
|
|
172 |
"ExceptionDatabaseVersion": "Tu versión de %1$s es %2$s, pero Matomo necesita al menos la %3$s.",
|
173 |
"ExceptionDatabaseVersionNewerThanCodebase": "Tu código base de Matomo está ejecutando la antigua versión %1$s y detectamos que tu base de datos de Matomo ya fue actualizada a la versión más reciente %2$s.",
|
174 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Puede que tu administrador de Matomo esté finalizando el proceso de actualización en este preciso momento. Por favor, volvé a intentar en unos minutos.",
|
|
|
|
|
175 |
"ExceptionFileIntegrity": "Falló la verificación de integridad: %s",
|
176 |
"ExceptionFilesizeMismatch": "Tamaño de archivo incorrecto: %1$s (se esperaba %2$s, se encontró: %3$s)",
|
177 |
"ExceptionIncompatibleClientServerVersions": "La versión de tu cliente %1$s %2$s es incompatible con la versión del servidor %3$s.",
|
@@ -206,6 +213,8 @@
|
|
206 |
"ExceptionWidgetNotFound": "El widget solicitado no existe.",
|
207 |
"ExceptionReportNotEnabled": "El informe solicitado no está habilitado. Esto por lo general significa que, o bien el plugin que define el informe está deshabilitado, o bien no tenés suficiente permiso para acceder a este informe.",
|
208 |
"ExceptionWidgetNotEnabled": "El widget solicitado no está habilitado. Esto normalmente significa que, o bien el plugin que define el widget está desactivado, o bien que no tenés los permisos suficientes para acceder a este widget.",
|
|
|
|
|
209 |
"ExpandDataTableFooter": "Cambiá la visualización o configurá el informe",
|
210 |
"Export": "Exportar",
|
211 |
"ExportAsImage": "Exportar como imagen",
|
@@ -483,6 +492,7 @@
|
|
483 |
"WarningFileIntegrityNoMd5file": "La verificación de integridad no pudo ser completada debido a que falta la función md5_file().",
|
484 |
"WarningPasswordStored": "%1$sAdvertencia:%2$s esta contraseña se guardará en el archivo de configuración visible para todo aquel que pueda accederlo.",
|
485 |
"WarningDebugOnDemandEnabled": "El modo de seguimiento de %1$s está habilitado. Por razones de seguridad, esto debería estar habilitado sólo por un corto período de tiempo. Para deshabilitarlo, establecé %2$s a %3$s en %4$s.",
|
|
|
486 |
"Website": "Sitio web",
|
487 |
"Weekly": "Semanal",
|
488 |
"WeeklyReport": "semanal",
|
@@ -514,7 +524,11 @@
|
|
514 |
"MaximumNumberOfSegmentsComparedIs": "El número máximo de segmentos que pueden ser comparados simultáneamente es %s.",
|
515 |
"CompareDatesParamMustMatchComparePeriods": "La longitud del parámetro de consulta de %1$s debe coincidir la longitud de parámetro de consulta de %2$s.",
|
516 |
"MaximumNumberOfPeriodsComparedIs": "El número máximo de períodos que pueden ser comparados simultáneamente es %s.",
|
517 |
-
"Custom": "Personalizado"
|
|
|
|
|
|
|
|
|
518 |
},
|
519 |
"Mobile": {
|
520 |
"AboutPiwikMobile": "Acerca de Matomo Mobile",
|
@@ -619,7 +633,9 @@
|
|
619 |
"ReportingApiReference": "Informe de referencia de API",
|
620 |
"TopLinkTooltip": "Accedé a tus datos de análisis web programáticamente, a través de una sencilla API en JSON, XML, etc.",
|
621 |
"UserAuthentication": "Autenticación de usuario",
|
|
|
622 |
"Glossary": "Glosario",
|
|
|
623 |
"LearnAboutCommonlyUsedTerms2": "Aprendé más sobre los términos usados comúnmente para sacar el mayor provecho a los análisis de Matomo.",
|
624 |
"EvolutionMetricName": "%s Evolution"
|
625 |
},
|
@@ -656,6 +672,7 @@
|
|
656 |
"ColumnUniqueOutlinks": "Enlaces de salida Únicos",
|
657 |
"ColumnIdPageview": "ID de paginas vistas",
|
658 |
"ColumnInteractionPosition": "Posición de interacción",
|
|
|
659 |
"ActionsInVisit": "Acciones en visita",
|
660 |
"DownloadsReportDocumentation": "En este informe, podés ver qué archivos descargaron tus visitantes. %s Lo que Matomo cuenta como descarga es el clic en un enlace de descarga. Matomo no puede saber si la descarga fue completada.",
|
661 |
"EntryPagesReportDocumentation": "Este informe contiene información sobre las páginas de entrada que fueron usada durante el período especificado. Una página de entrada es la primera página que un usuario ve durante su visita. %s Las direcciones web de entrada se muestran como una estructura de carpeta.",
|
@@ -664,6 +681,7 @@
|
|
664 |
"ExitPagesReportDocumentation": "Este informe contiene información sobre las páginas de salida que ocurrieron durante el período especificado. Una página de salida es la última página que un usuario ve durante su visita. %s Las direcciones web de salida se muestran como una estructura de carpeta.",
|
665 |
"ExitPageTitles": "Títulos de páginas de salida",
|
666 |
"ExitPageTitlesReportDocumentation": "Este reporte contiene información sobre los títulos de las páginas de salida que ocurrieron durante el período específico.",
|
|
|
667 |
"OneSearch": "1 búsqueda",
|
668 |
"OutlinkDocumentation": "Un enlace externo es un enlace que lleva a su visitante fuera de su página web (a otro dominio).",
|
669 |
"OutlinksReportDocumentation": "Este reporte muestra una lista de los enlaces externos que han sido clicados por sus visitantes, organizada por jerarquía.",
|
@@ -681,6 +699,8 @@
|
|
681 |
"SiteSearchCategories": "Categorías (búsqueda en el sitio)",
|
682 |
"SiteSearchKeyword": "Palabra clave (Búsqueda en Sitio)",
|
683 |
"SiteSearchKeywords": "Palabras claves (búsqueda en el sitio)",
|
|
|
|
|
684 |
"SiteSearchKeywordsDocumentation": "Este reporte muestra las palabras clave que tus visitantes buscaron en tu motor de búsqueda interno.",
|
685 |
"SiteSearchKeywordsNoResultDocumentation": "Este reporte lista las palabras clave que no produjeron resultados: ¿se podría mejorar el algoritmo de búsqueda o quizá tus visitantes están buscando algún contenido que no se encuentra (todavía) en tu sitio?",
|
686 |
"SubmenuPagesEntry": "Páginas de entrada",
|
@@ -700,7 +720,22 @@
|
|
700 |
"ActionType": "Tipo de Acción",
|
701 |
"ActionTypes": "Tipos de acción",
|
702 |
"Behaviour": "Comportamiento",
|
703 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
704 |
},
|
705 |
"Annotations": {
|
706 |
"AddAnnotationsFor": "Agregar anotaciones para %s…",
|
@@ -730,15 +765,19 @@
|
|
730 |
"ContentInteractions": "Interacciones de contenido",
|
731 |
"InteractionRate": "Tasa de interacción",
|
732 |
"ContentName": "Nombre del contenido",
|
|
|
733 |
"ContentNames": "Nombres del contenido",
|
734 |
"ContentPiece": "Pieza del contenido",
|
|
|
735 |
"ContentPieces": "Piezas del contenido",
|
736 |
"ContentTarget": "Objetivo del contenido",
|
737 |
"ContentTargets": "Objetivos del contenido",
|
738 |
"Contents": "Contenidos",
|
739 |
"InteractionsMetricDocumentation": "El número de veces con que un bloque de contenido interactuó (por ejemplo, un clic en un báner o publicidad).",
|
740 |
"ImpressionsMetricDocumentation": "El número de veces que un bloque de contenido, como un báner o una publicidad, fue mostrado en una página.",
|
741 |
-
"InteractionRateMetricDocumentation": "La tasa entre las impresiones del contenido y las interacciones."
|
|
|
|
|
742 |
},
|
743 |
"CoreAdminHome": {
|
744 |
"AddNewTrustedHost": "Agregá un nuevo servidor de confianza",
|
@@ -880,7 +919,24 @@
|
|
880 |
"TrackingFailuresEmail1": "Esto es sólo para hacerte saber que %s diferentes tipos de fallos de rastreo han ocurrido en los últimos días.",
|
881 |
"TrackingFailuresEmail2": "Para ver todas las solicitudes de rastreo que fallaron, %1$shacé clic acá%2$s.",
|
882 |
"ImportFromGoogleAnalytics": "Importar desde Google Analytics",
|
883 |
-
"ImportFromGoogleAnalyticsDescription": "Si tenés datos existentes en Google Analytics y te estás cambiando a Matomo, podés exportar esos datos usando el plugin %1$sGoogleAnalyticsImporter%2$s."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
884 |
},
|
885 |
"CoreHome": {
|
886 |
"CategoryNoData": "No hay datos en esta categoría. Intentá \"Incluir toda la población\".",
|
@@ -899,6 +955,7 @@
|
|
899 |
"DataTableHowToSearch": "Presioná \"Enter\" o hacé clic en el ícono de búsqueda para buscar",
|
900 |
"DataTableShowDimensions": "Las dimensiones están combinadas %s Mostrar dimensiones separadamente",
|
901 |
"DataTableCombineDimensions": "Las dimensiones se muestran separadamente %s Mostrar dimensiones combinadas",
|
|
|
902 |
"Default": "predeterminado",
|
903 |
"DonateCall1": "Matomo nunca te costará nada para usarlo, pero eso no significa que no nos cueste hacerlo.",
|
904 |
"DonateCall2": "Matomo necesita de tu contínuo apoyo para crecer y prosperar.",
|
@@ -906,6 +963,7 @@
|
|
906 |
"EndShortcut": "Fin",
|
907 |
"EnterZenMode": "Entrar al modo Zen (ocultar los menús)",
|
908 |
"ExitZenMode": "Salir del modo Zen (mostrar los menús)",
|
|
|
909 |
"ExcludeRowsWithLowPopulation": "Se muestran todas las filas %s Excluir baja población",
|
910 |
"ExternalHelp": "Ayuda (se abre en una nueva pestaña)",
|
911 |
"FlattenDataTable": "Este informe es jerárquico %s Hacelo plano",
|
@@ -913,6 +971,7 @@
|
|
913 |
"ShowExportUrl": "Mostrar dirección web de exportación",
|
914 |
"HideExportUrl": "Ocultar dirección web de exportación",
|
915 |
"HomeShortcut": "Página principal",
|
|
|
916 |
"IncludeRowsWithLowPopulation": "Se ocultan las filas con baja población %s Mostrar todas las filas",
|
917 |
"InjectedHostEmailBody": "Hola, hoy intenté acceder a Matomo pero encontré la advertencia sobre nombre de dominio (\"hostname\") desconocido.",
|
918 |
"InjectedHostEmailSubject": "Se accedió a Matomo desde un servidor desconocido: %s",
|
@@ -925,6 +984,8 @@
|
|
925 |
"VisitTypeReturning": "Regresos",
|
926 |
"VisitTypeReturningCustomer": "Cliente que vuelve",
|
927 |
"MainNavigation": "Navegación principal",
|
|
|
|
|
928 |
"Menu": "Menú",
|
929 |
"NoPrivilegesAskPiwikAdmin": "Iniciaste sesión como \"%1$s\", pero parece que no tenés ningún permiso configurado en Matomo. %2$sConsultá al administrador de tu Matomo (hacé clic para enviarle un correo electrónico)%3$s para que te dé acceso de lectura al sitio web.",
|
930 |
"OnlyForSuperUserAccess": "Este widget se muestra en el panel principal sólo a los usuarios que tengan acceso de súper usuario.",
|
@@ -961,6 +1022,8 @@
|
|
961 |
"PivotBySubtable": "Este informe no fue pivotado %1$s Pivote por %2$s",
|
962 |
"SystemSummaryWidget": "Resumen del sistema",
|
963 |
"SystemSummaryNWebsites": "%d sitios web",
|
|
|
|
|
964 |
"SystemSummaryNActivatedPlugins": "%d plugins activos",
|
965 |
"SystemSummaryPiwikVersion": "Versión de Matomo",
|
966 |
"SystemSummaryMysqlVersion": "Versión de MySQL",
|
@@ -980,6 +1043,8 @@
|
|
980 |
"RowLimit": "Límite fe fila",
|
981 |
"CustomLimit": "Límite personalizado",
|
982 |
"ExportFormat": "Exportar formato",
|
|
|
|
|
983 |
"ExpandSubtables": "Expandir subtablas",
|
984 |
"StandardReport": "Informe estándar",
|
985 |
"FlattenReport": "Aplanar informe",
|
@@ -987,7 +1052,17 @@
|
|
987 |
"ReadMoreOnlineGuide": "Leé más sobre este tema en la guía en línea.",
|
988 |
"SeeAvailableVersions": "Ver las versiones disponibles",
|
989 |
"QuickLinks": "Enlaces rápidos",
|
990 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
991 |
},
|
992 |
"CorePluginsAdmin": {
|
993 |
"ActionUninstall": "Desinstalar",
|
@@ -1023,6 +1098,7 @@
|
|
1023 |
"MissingRequirementsNotice": "Por favor, actualizá %1$s %2$s a una versión más reciente, se requiere %1$s %3$s.",
|
1024 |
"MissingRequirementsPleaseInstallNotice": "Por favor, instalá %1$s %2$s ya que es requerido por %3$s.",
|
1025 |
"NoZipFileSelected": "Por favor, seleccioná un archivo ZIP.",
|
|
|
1026 |
"NumUpdatesAvailable": "%s actualización\/es disponible\/s",
|
1027 |
"NoPluginSettings": "No hay configuración disponible para el plugin",
|
1028 |
"Origin": "Origen",
|
@@ -1084,6 +1160,7 @@
|
|
1084 |
"DisablingIncompatiblePlugins": "Deshabilitando plugins incompatibles: %s",
|
1085 |
"DownloadingUpdateFromX": "Descargando actualización desde %s",
|
1086 |
"DownloadX": "Descargar %s",
|
|
|
1087 |
"EmptyDatabaseError": "La base de datos %s está vacía. Tenés que editar o quitar tu archivo de configuración de Matomo.",
|
1088 |
"ErrorDIYHelp": "Si sos un usuario avanzado y encontrás un error en la actualización de la base de datos:",
|
1089 |
"ErrorDIYHelp_1": "identificá y corregí el origen del problema (por ejemplo, memory_limit o max_execution_time)",
|
@@ -1168,7 +1245,12 @@
|
|
1168 |
"YouMustDownloadPackageOrFixPermissions": "Matomo no puede sobreescribir tu instalación actual. Podés, o bien corregir los permisos del directorio o archivo, o bien descargar el paquete e instalar la versión %s manualmente:",
|
1169 |
"YourDatabaseIsOutOfDate": "Tu basde de datos de Matomo está desactualizada y debe ser actualizada antes de continuar.",
|
1170 |
"ViewVersionChangelog": "Ver el registro de cambios de esta versión:",
|
1171 |
-
"ReceiveEmailBecauseIsSuperUser": "Recibís este correo electrónico porque sos un súperusuario en la instalación de Matomo en: %s"
|
|
|
|
|
|
|
|
|
|
|
1172 |
},
|
1173 |
"CustomJsTracker": {
|
1174 |
"PluginDescription": "Permite a cualquier plugin extender el archivo de rastreo vía JavaScript de Matomo (\"matomo.js\"), y agrega nuevas capacidades de medición de funcionalidad y sitios web.",
|
@@ -1228,7 +1310,8 @@
|
|
1228 |
"SetAsDefaultWidgetsConfirmHelp": "Esta selección de widgets y diseño de columnas del panel será usada cuando un usuario cree un nuevo panel o cuando se use la función \"%s\".",
|
1229 |
"TopLinkTooltip": "Ver informes de análisis web para %s.",
|
1230 |
"WidgetNotFound": "Widget no encontrado",
|
1231 |
-
"WidgetPreview": "Previsualización del Widget"
|
|
|
1232 |
},
|
1233 |
"DevicePlugins": {
|
1234 |
"BrowserWithNoPluginsEnabled": "%1$s sin plugins habilitados",
|
@@ -1390,7 +1473,6 @@
|
|
1390 |
"ContactUs": "Contactanos",
|
1391 |
"VisitTheForums": "Visitá los %1$sforos%2$s y obtené ayuda de la comunidad de usuarios de Matomo",
|
1392 |
"Forums": "Foros",
|
1393 |
-
"ReviewMatomoTitle": "¿Creés en Matomo?",
|
1394 |
"PleaseLeaveExternalReviewForMatomo": "Compartí tus pensamientos en uno de estos sitios e inspirá a que otros se unan a nuestra revolución de los datos.",
|
1395 |
"RemindMeLater": "Recordarme después",
|
1396 |
"NeverAskMeAgain": "No volver a preguntarme",
|
@@ -1400,7 +1482,8 @@
|
|
1400 |
"RemoveOtherLabel": "Quiero ver los datos de mis \"Otros\"",
|
1401 |
"PurgeOldData": "Quiero quitar datos viejos",
|
1402 |
"SearchHelpResources": "Buscá los recursos de ayuda de matomo.org",
|
1403 |
-
"PopularHelpTopics": "Temas populares de ayuda"
|
|
|
1404 |
},
|
1405 |
"GeoIp2": {
|
1406 |
"AssumingNonApache": "No se puede encontrar la función \"apache_get_modules\", asumiendo que se posee un servidor de internet no-Apache.",
|
@@ -1640,6 +1723,10 @@
|
|
1640 |
"GoBackAndDefinePrefix": "Volvé y definí un prefijo para las tablas de Matomo",
|
1641 |
"HappyAnalysing": "¡Que la pasés bien!",
|
1642 |
"Installation": "Instalación",
|
|
|
|
|
|
|
|
|
1643 |
"InstallationStatus": "Estado de la instalación",
|
1644 |
"InsufficientPrivilegesHelp": "Podés agregar estos privilegios utilizando una herramienta como phpMyAdmin o ejecutando las solicitudes SQL correspondientes. Si no sabés cómo hacer ninguna de estas operaciones, por favor, solicitá asistencia a tu administrador de sistema para que te conceda estos privilegios.",
|
1645 |
"InsufficientPrivilegesMain": "O bien la base de datos no existe (y pudo no ser creada), o bien el usuario especificado tiene privilegios insuficientes. El usuario de base de datos debe tener los siguientes privilegios: %s",
|
@@ -1700,6 +1787,7 @@
|
|
1700 |
"SystemCheckEvalHelp": "Requerido por el formulario HTML QuickForm y el sistema inteligente de plantillas.",
|
1701 |
"SystemCheckExtensions": "Otras extensiones requeridas",
|
1702 |
"SystemCheckFileIntegrity": "Integridad de archivo",
|
|
|
1703 |
"SystemCheckFunctions": "Funciones requeridas",
|
1704 |
"SystemCheckFunctionHelp": "Necesitás habilitar esta función incorporada.",
|
1705 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (gráficos)",
|
@@ -1708,12 +1796,11 @@
|
|
1708 |
"SystemCheckGzcompressHelp": "Necesitás habilitar la extensión zlib y la función gzcompress.",
|
1709 |
"SystemCheckGzuncompressHelp": "Necesitás habilitar la extensión zlib y la función gzcompress.",
|
1710 |
"SystemCheckHashHelp": "Necesitás configurar y reconstruir PHP con el soporte \"hash()\" habilitado excluyendo la opción --disable-hash.",
|
1711 |
-
"
|
1712 |
"SystemCheckMailHelp": "Los mensajes de Feedback y Recuperar Contraseña no se enviarán sin mail().",
|
1713 |
-
"SystemCheckMbstring": "mbstring",
|
1714 |
-
"SystemCheckMbstringHelp": "Se requiere la extensión mbstring para manejar caracteres multibyte en la interface de usuario y en las respuestas de API. También, por favor revisá que mbstring.func_overload esté establecido a \"0\" en \"php.ini\".",
|
1715 |
"SystemCheckMemoryLimit": "Límite de memoria",
|
1716 |
"SystemCheckMemoryLimitHelp": "En un sitio web de alto tráfico, el proceso de archivo puede requerir más memoria de la que se permite actualmente.<br \/>De ser necesario, cambiá la directiva memory_limit en tu archivo \"php.ini\".",
|
|
|
1717 |
"SystemCheckNoErrorsOrWarnings": "No hay errores o advertencias",
|
1718 |
"SystemCheckViewFullSystemCheck": "Ver el informe completo de revisión del sistema",
|
1719 |
"SystemCheckOpenURL": "Abrir dirección web",
|
@@ -1727,7 +1814,7 @@
|
|
1727 |
"SystemCheckPdoAndMysqliHelp": "En un servidor GNU\/Linux podés compilar php con las siguientes opciones: %1$s En tu \"php.ini\", agregá las siguientes líneas: %2$s",
|
1728 |
"SystemCheckPhp": "Versión PHP",
|
1729 |
"SystemCheckPhpPdoAndMysqli": "Más información en: %1$sPHP PDO%2$s y %3$sMYSQLI%4$s.",
|
1730 |
-
"
|
1731 |
"SystemCheckSettings": "Se requiere configuración PHP (php.ini)",
|
1732 |
"SystemCheckSummaryNoProblems": "¡Esssa! No hay problemas con tu configuración de Matomo. Date una palmadita en la espalda.",
|
1733 |
"SystemCheckSummaryThereWereErrors": "¡Epa! Matomo detectó algunos %1$sproblemas críticos%2$s con tu configuración Matomo. %3$sEstos problemas deberían corregirse inmediatamente.%4$s",
|
@@ -1737,12 +1824,16 @@
|
|
1737 |
"SystemCheckTrackerHelp": "Falló la solicitud GET a \"matomo.php\". Intentá permitir esta dirección web en tu autenticación HTTP y deshabilitá \"mod_security\" (podés pedírselo a tu administrador web). Para más información sobre el error, revisá el archivo de registro de errores de tu servidor web.",
|
1738 |
"SystemCheckWarnDomHelp": "Deberías habilitar la extensión \"dom\" (ej., instalar el paquete \"php-dom\" y\/o el paquete \"php-xml\").",
|
1739 |
"SystemCheckWarning": "Matomo funcionará normalmente, pero algunas funciones pueden estar ausentes",
|
|
|
1740 |
"SystemCheckWarnLibXmlHelp": "Deberías habilitar la extensión \"libxml\" (ej., instalar el paquete \"php-libxml\") ya que esta es requerida por otras extensiones de PHP.",
|
|
|
1741 |
"SystemCheckWarnSimpleXMLHelp": "Deberías habilitar la extensión \"SimpleXML\" (ej., instalar el paquete \"php-simplexml\" y\/o el paquete \"php-xml\").",
|
1742 |
"SystemCheckWinPdoAndMysqliHelp": "En un servidor Windows podés agregar las siguientes líneas a tu php.ini: %s",
|
1743 |
"SystemCheckWriteDirs": "Directorios con acceso de escritura",
|
1744 |
"SystemCheckWriteDirsHelp": "Para arreglar este error en tu sistema GNU\/Linux, intentá escribir los siguientes comandos",
|
1745 |
"SystemCheckZlibHelp": "Necesitás configurar y reconstruir PHP con el soporte \"zlib\" habilitado, --with-zlib.",
|
|
|
|
|
1746 |
"SystemCheckCronArchiveProcessCLI": "Administración de procesos vía CLI",
|
1747 |
"SystemCheckPhpSetting": "Para prevenir algunos problemas críticos, debés establecer lo siguiente en tu archivo \"php.ini\": %s",
|
1748 |
"SystemCheckUpdateHttps": "Actualización sobre HTTPS",
|
@@ -1763,7 +1854,10 @@
|
|
1763 |
"WelcomeHelp": "<p>Matomo es software libre de análisis de web que hace fácil obtener la información que querés de tus visitantes.<\/p> <p>Este proceso está dividido hasta en %s fáciles pasos y llevará unos 5 minutos.<\/p>",
|
1764 |
"WelcomeToCommunity": "¡Bienvenido a la comunidad Matomo!",
|
1765 |
"CannotConnectToDb": "No se puede conectar a la base de datos",
|
1766 |
-
"CannotConnectToDbResolvingExplanation": "Esto podría ser un problema tempóral, intentá %1$srecargar la página%2$s. Si el problema persiste, por favor, contactá a tu administrador de Matomo."
|
|
|
|
|
|
|
1767 |
},
|
1768 |
"Intl": {
|
1769 |
"Continent_afr": "África",
|
@@ -3041,7 +3135,9 @@
|
|
3041 |
"Evolution": "Evolución",
|
3042 |
"LoadingWebsites": "Cargando sitios web",
|
3043 |
"PluginDescription": "Mirá y compará todos tus sitios web y aplicaciones en este útil panel \"Todos los sitios web\".",
|
3044 |
-
"TopLinkTooltip": "Compará estadísticas de análisis web para todos tus sitios."
|
|
|
|
|
3045 |
},
|
3046 |
"Overlay": {
|
3047 |
"Clicks": "%s clics",
|
@@ -3730,7 +3826,7 @@
|
|
3730 |
"FormElementVariableDescription": "Una instancia del elemento que fue enviado.",
|
3731 |
"FormClassesVariableDescription": "El valor de todos los nombres de clase CSS de un formulario enviado.",
|
3732 |
"FormClassesVariableName": "Clases de formulario",
|
3733 |
-
"FormDestinationVariableDescription": "El valor
|
3734 |
"FormDestinationVariableName": "Dirección web del destino del formulario",
|
3735 |
"FormIdVariableDescription": "El valor del atributo de identificación de un formulario enviado.",
|
3736 |
"FormIdVariableName": "Identificación de formulario",
|
@@ -3899,6 +3995,7 @@
|
|
3899 |
"ScrollLeftPixelVariableDescription": "Cuánto se desplazó horizontalmente el usuario en píxeles, por ejemplo: \"592\".",
|
3900 |
"ScrollLeftPixelVariableName": "Píxel de desplazamiento izquierdo",
|
3901 |
"ScrollReachTriggerDescription": "Accionado tan pronto como el usuario se desplaza a cierta posición.",
|
|
|
3902 |
"ScrollReachTriggerName": "Desplazamiento alcanzado",
|
3903 |
"ScrollSourceVariableDescription": "Cuando la posición de desplazamiento fue originada desde un desplazamiento de usuario o un redimensionamiento del navegador web. El valor es \"scroll\" o \"resize\".",
|
3904 |
"ScrollSourceVariableName": "Fuente de desplazamiento",
|
@@ -4009,6 +4106,7 @@
|
|
4009 |
"WeekdayVariableDescription": "Devuelve el día local de la semana. Por ejemplo: lunes, martes, miércoles, etc.",
|
4010 |
"WeekdayVariableName": "Día de la semana",
|
4011 |
"WindowLeaveTriggerDescription": "Accionado cuando el usuario está a punto de dejar la página actual moviendo el cursor fuera de la ventana.",
|
|
|
4012 |
"WindowLeaveTriggerName": "Abandono de ventana",
|
4013 |
"WindowLoadedTriggerDescription": "Accionado cuando la página está completamente cargada, incluyendo todas las imágenes, etc.",
|
4014 |
"WindowLoadedTriggerHelp": "Esta etapa de carga de página web es cuando la página está completamente cargada, según el navegador web. En la mayoría de los casos, esto significa que también se cargaron las imágenes, que se aplicaron los estilos, etc. Este accionador siempre es accionado en algún punto después de \"DOM listo\".",
|
16 |
"Apply": "Aplicar",
|
17 |
"ArchivingInlineHelp": "Para sitios web de tráfico medio a alto, se recomienda deshabilitar el archivado de Matomo al ingresar con el navegador. En su lugar, te recomendamos que configurés una tarea de cron para procesar los informes de Matomo cada hora.",
|
18 |
"ArchivingTriggerDescription": "Recomendado para grandes instalaciones de Matomo. Necesitás %1$sconfigurar una tarea de cron%2$s para procesar los informes automáticamente.",
|
19 |
+
"ArchivingTriggerSegment": "Usar Segmentos personalizados accionará el procesado de archivos.",
|
20 |
"AuthenticationMethodSmtp": "Método de autenticación SMTP",
|
21 |
"AverageOrderValue": "Valor promedio por pedido",
|
22 |
"AveragePrice": "Precio promedio",
|
33 |
"ChooseLanguage": "Elegir idioma",
|
34 |
"ChoosePeriod": "Elegir período",
|
35 |
"ClickHere": "Hacé clic acá para más información.",
|
36 |
+
"CompareTo": "Comparar con:",
|
37 |
"DoubleClickToChangePeriod": "Hacé doble clic para aplicar este período.",
|
38 |
"Close": "Cerrar",
|
39 |
"ClickToSearch": "Hacé clic para buscar",
|
135 |
"DaysHours": "%1$s días %2$s horas",
|
136 |
"DaysSinceFirstVisit": "Días desde la primera visita",
|
137 |
"DaysSinceLastEcommerceOrder": "Días desde el último pedido de Comercio electrónico",
|
138 |
+
"SecondsSinceLastEcommerceOrder": "Segundos desde el último pedido Ecommerce",
|
139 |
"DaysSinceLastVisit": "Días desde la última visita",
|
140 |
+
"SecondsSinceLastVisit": "Segundos desde la última visita",
|
141 |
+
"SecondsSinceFirstVisit": "Segundos desde la primera visita",
|
142 |
"Default": "Predeterminado",
|
143 |
"DefaultAppended": "(predeterminado)",
|
144 |
"Delete": "Eliminar",
|
177 |
"ExceptionDatabaseVersion": "Tu versión de %1$s es %2$s, pero Matomo necesita al menos la %3$s.",
|
178 |
"ExceptionDatabaseVersionNewerThanCodebase": "Tu código base de Matomo está ejecutando la antigua versión %1$s y detectamos que tu base de datos de Matomo ya fue actualizada a la versión más reciente %2$s.",
|
179 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Puede que tu administrador de Matomo esté finalizando el proceso de actualización en este preciso momento. Por favor, volvé a intentar en unos minutos.",
|
180 |
+
"ExceptionDatabaseUnavailable": "El servidor MySQL desapareció",
|
181 |
+
"ExceptionDatabaseAccess": "Se denegó el acceso a la base de datos",
|
182 |
"ExceptionFileIntegrity": "Falló la verificación de integridad: %s",
|
183 |
"ExceptionFilesizeMismatch": "Tamaño de archivo incorrecto: %1$s (se esperaba %2$s, se encontró: %3$s)",
|
184 |
"ExceptionIncompatibleClientServerVersions": "La versión de tu cliente %1$s %2$s es incompatible con la versión del servidor %3$s.",
|
213 |
"ExceptionWidgetNotFound": "El widget solicitado no existe.",
|
214 |
"ExceptionReportNotEnabled": "El informe solicitado no está habilitado. Esto por lo general significa que, o bien el plugin que define el informe está deshabilitado, o bien no tenés suficiente permiso para acceder a este informe.",
|
215 |
"ExceptionWidgetNotEnabled": "El widget solicitado no está habilitado. Esto normalmente significa que, o bien el plugin que define el widget está desactivado, o bien que no tenés los permisos suficientes para acceder a este widget.",
|
216 |
+
"ExceptionNotSupportedBrowserTitle": "Tu navegador web no es compatible.",
|
217 |
+
"ExceptionNotSupportedBrowserText": "Debido a problemas de seguridad, tu navegador web no es compatible. Por favor, actualizá a una versión más nueva.",
|
218 |
"ExpandDataTableFooter": "Cambiá la visualización o configurá el informe",
|
219 |
"Export": "Exportar",
|
220 |
"ExportAsImage": "Exportar como imagen",
|
492 |
"WarningFileIntegrityNoMd5file": "La verificación de integridad no pudo ser completada debido a que falta la función md5_file().",
|
493 |
"WarningPasswordStored": "%1$sAdvertencia:%2$s esta contraseña se guardará en el archivo de configuración visible para todo aquel que pueda accederlo.",
|
494 |
"WarningDebugOnDemandEnabled": "El modo de seguimiento de %1$s está habilitado. Por razones de seguridad, esto debería estar habilitado sólo por un corto período de tiempo. Para deshabilitarlo, establecé %2$s a %3$s en %4$s.",
|
495 |
+
"WarningDevelopmentModeOnButNotGitInstalled": "Actualmente estás usando Matomo en modo de desarrollador, pero no se instaló a través de git. No se recomienda usar Matomo en modo de desarrollador en un entorno de producción.",
|
496 |
"Website": "Sitio web",
|
497 |
"Weekly": "Semanal",
|
498 |
"WeeklyReport": "semanal",
|
524 |
"MaximumNumberOfSegmentsComparedIs": "El número máximo de segmentos que pueden ser comparados simultáneamente es %s.",
|
525 |
"CompareDatesParamMustMatchComparePeriods": "La longitud del parámetro de consulta de %1$s debe coincidir la longitud de parámetro de consulta de %2$s.",
|
526 |
"MaximumNumberOfPeriodsComparedIs": "El número máximo de períodos que pueden ser comparados simultáneamente es %s.",
|
527 |
+
"Custom": "Personalizado",
|
528 |
+
"PreviousPeriod": "Período anterior",
|
529 |
+
"PreviousYear": "Año anterior",
|
530 |
+
"ViewAccessRequired": "El token_auth usado tiene demasiados accesos para ser usado en una dirección web de solicitud que no sea de la no API. Por favor, usá una contraseña de aplicación específica para un usuario que sólo tiene acceso de vista.",
|
531 |
+
"Reasons": "Motivos"
|
532 |
},
|
533 |
"Mobile": {
|
534 |
"AboutPiwikMobile": "Acerca de Matomo Mobile",
|
633 |
"ReportingApiReference": "Informe de referencia de API",
|
634 |
"TopLinkTooltip": "Accedé a tus datos de análisis web programáticamente, a través de una sencilla API en JSON, XML, etc.",
|
635 |
"UserAuthentication": "Autenticación de usuario",
|
636 |
+
"UsingTokenAuth": "Si querés %1$ssolicitar datos dentro de un script, un crontab, etc%2$s necesitás agregar el parámetro de la dirección web %3$s a las direcciones web de llamada de la API que requieren autenticación.",
|
637 |
"Glossary": "Glosario",
|
638 |
+
"MainMetricsReportDocumentation": "Este informe te da un pantallazo de las métricas más importantes de todas las categorías y plugins.",
|
639 |
"LearnAboutCommonlyUsedTerms2": "Aprendé más sobre los términos usados comúnmente para sacar el mayor provecho a los análisis de Matomo.",
|
640 |
"EvolutionMetricName": "%s Evolution"
|
641 |
},
|
672 |
"ColumnUniqueOutlinks": "Enlaces de salida Únicos",
|
673 |
"ColumnIdPageview": "ID de paginas vistas",
|
674 |
"ColumnInteractionPosition": "Posición de interacción",
|
675 |
+
"ColumnPageViewPosition": "Posición de la vista de página",
|
676 |
"ActionsInVisit": "Acciones en visita",
|
677 |
"DownloadsReportDocumentation": "En este informe, podés ver qué archivos descargaron tus visitantes. %s Lo que Matomo cuenta como descarga es el clic en un enlace de descarga. Matomo no puede saber si la descarga fue completada.",
|
678 |
"EntryPagesReportDocumentation": "Este informe contiene información sobre las páginas de entrada que fueron usada durante el período especificado. Una página de entrada es la primera página que un usuario ve durante su visita. %s Las direcciones web de entrada se muestran como una estructura de carpeta.",
|
681 |
"ExitPagesReportDocumentation": "Este informe contiene información sobre las páginas de salida que ocurrieron durante el período especificado. Una página de salida es la última página que un usuario ve durante su visita. %s Las direcciones web de salida se muestran como una estructura de carpeta.",
|
682 |
"ExitPageTitles": "Títulos de páginas de salida",
|
683 |
"ExitPageTitlesReportDocumentation": "Este reporte contiene información sobre los títulos de las páginas de salida que ocurrieron durante el período específico.",
|
684 |
+
"MainMetricsReportDocumentation": "Este informe un pantallazo muy básico de las acciones que tus visitantes hacen en tu sitio web.",
|
685 |
"OneSearch": "1 búsqueda",
|
686 |
"OutlinkDocumentation": "Un enlace externo es un enlace que lleva a su visitante fuera de su página web (a otro dominio).",
|
687 |
"OutlinksReportDocumentation": "Este reporte muestra una lista de los enlaces externos que han sido clicados por sus visitantes, organizada por jerarquía.",
|
699 |
"SiteSearchCategories": "Categorías (búsqueda en el sitio)",
|
700 |
"SiteSearchKeyword": "Palabra clave (Búsqueda en Sitio)",
|
701 |
"SiteSearchKeywords": "Palabras claves (búsqueda en el sitio)",
|
702 |
+
"SiteSearchKeywordCount": "Conteo de palabras clave (búsqueda del sitio)",
|
703 |
+
"SiteSearchKeywordCounts": "Conteos de palabras clave (búsqueda del sitio)",
|
704 |
"SiteSearchKeywordsDocumentation": "Este reporte muestra las palabras clave que tus visitantes buscaron en tu motor de búsqueda interno.",
|
705 |
"SiteSearchKeywordsNoResultDocumentation": "Este reporte lista las palabras clave que no produjeron resultados: ¿se podría mejorar el algoritmo de búsqueda o quizá tus visitantes están buscando algún contenido que no se encuentra (todavía) en tu sitio?",
|
706 |
"SubmenuPagesEntry": "Páginas de entrada",
|
720 |
"ActionType": "Tipo de Acción",
|
721 |
"ActionTypes": "Tipos de acción",
|
722 |
"Behaviour": "Comportamiento",
|
723 |
+
"TimeSpentInReferringAction": "Tiempo transcurrido en la acción referente",
|
724 |
+
"PagesSubcategoryHelp1": "Este informe contiene información sobre las direcciones web de la página que fueron visitadas.",
|
725 |
+
"PagesSubcategoryHelp2": "La tabla es organizada por jerarquía, las direcciones web son mostradas como una estructura de carpeta.",
|
726 |
+
"PagesSubcategoryHelp3": "Usá los íconos de más y menos en la izquierda para navegar.",
|
727 |
+
"EntryPagesSubcategoryHelp1": "Este informe contiene información sobre las páginas de entradas que fueron usadas durante el período especificado. Una página de entrada es la primer página que un usuario ve durante su visita.",
|
728 |
+
"EntryPagesSubcategoryHelp2": "Las direcciones web de entrada son mostradas como una estructura de carpeta.",
|
729 |
+
"ExitPagesSubcategoryHelp1": "Este informe contiene información sobre las páginas de salida que ocurrieron durante un períoso especificado. Una página de salida es la última página que un usuario ve durante su visita.",
|
730 |
+
"ExitPagesSubcategoryHelp2": "Las direcciones web de salida son mostradas como una estructura de carpeta.",
|
731 |
+
"PageTitlesSubcategoryHelp1": "Este informe contiene información sobre los títulos de las páginas que fueron visitadas.",
|
732 |
+
"PageTitlesSubcategoryHelp2": "El título de la página es la etiqueta HTML &lt;título&gt; que la mayoría de los navegadores web muestra en el título de la ventana.",
|
733 |
+
"SiteSearchSubcategoryHelp1": "La sección de búsqueda de sitio muestra qué palabras claves usaron los visitantes cuando buscaron en tu sitio web. También muestra qué páginas vieron los usuarios después de hacer una búsqueda y qué palabras claves de las búsquedas en el sitio no devolvieron resultados.",
|
734 |
+
"SiteSearchSubcategoryHelp2": "Estos informes te pueden dar ideas sobre contenido faltante o ausente en tu sitio web, así como ideas sobre lo que tus visitantes estaban buscando pero no pudieron encontrar fácilmente, y mucho más.",
|
735 |
+
"SiteSearchSubcategoryHelp3": "Aprendé más en la guía de Búsqueda del sitio.",
|
736 |
+
"OutlinksSubcategoryHelp1": "Este informe muestra una lista por jerarquía de enlaces de salida que fueron cliqueadas por tus visitantes. Un enlace de salida es un enlace que lleva al visitante a otro sitio web (a otro dominio).",
|
737 |
+
"DownloadsSubcategoryHelp1": "En este informe podés ver qué archivos descargaron tus visitantes.",
|
738 |
+
"DownloadsSubcategoryHelp2": "Lo que Matomo contabiliza como una descarga es el clic en el enlace de descarga. Matomo no sabe si la carga fue completada o no."
|
739 |
},
|
740 |
"Annotations": {
|
741 |
"AddAnnotationsFor": "Agregar anotaciones para %s…",
|
765 |
"ContentInteractions": "Interacciones de contenido",
|
766 |
"InteractionRate": "Tasa de interacción",
|
767 |
"ContentName": "Nombre del contenido",
|
768 |
+
"ContentNameReportDocumentation": "Este informe muestra los nombres del contenido que tus visitantes vieron e interactuaron.",
|
769 |
"ContentNames": "Nombres del contenido",
|
770 |
"ContentPiece": "Pieza del contenido",
|
771 |
+
"ContentPieceReportDocumentation": "Este informe muestra las piezas de contenido que tus visitantes vieron e interactuaron.",
|
772 |
"ContentPieces": "Piezas del contenido",
|
773 |
"ContentTarget": "Objetivo del contenido",
|
774 |
"ContentTargets": "Objetivos del contenido",
|
775 |
"Contents": "Contenidos",
|
776 |
"InteractionsMetricDocumentation": "El número de veces con que un bloque de contenido interactuó (por ejemplo, un clic en un báner o publicidad).",
|
777 |
"ImpressionsMetricDocumentation": "El número de veces que un bloque de contenido, como un báner o una publicidad, fue mostrado en una página.",
|
778 |
+
"InteractionRateMetricDocumentation": "La tasa entre las impresiones del contenido y las interacciones.",
|
779 |
+
"ContentsSubcategoryHelp1": "El rastreo de contenido te ayuda a determinar la popularidad de piezas específicas de contenido en cualquier página de tu sitio web o aplicación. Esta sección informa el número de impresiones e interacciones que las piezas de contenido de tu sitio web reciben.",
|
780 |
+
"ContentsSubcategoryHelp2": "Aprendé más en la guía de Rastreo de contenido."
|
781 |
},
|
782 |
"CoreAdminHome": {
|
783 |
"AddNewTrustedHost": "Agregá un nuevo servidor de confianza",
|
919 |
"TrackingFailuresEmail1": "Esto es sólo para hacerte saber que %s diferentes tipos de fallos de rastreo han ocurrido en los últimos días.",
|
920 |
"TrackingFailuresEmail2": "Para ver todas las solicitudes de rastreo que fallaron, %1$shacé clic acá%2$s.",
|
921 |
"ImportFromGoogleAnalytics": "Importar desde Google Analytics",
|
922 |
+
"ImportFromGoogleAnalyticsDescription": "Si tenés datos existentes en Google Analytics y te estás cambiando a Matomo, podés exportar esos datos usando el plugin %1$sGoogleAnalyticsImporter%2$s.",
|
923 |
+
"SecurityNotificationEmailSubject": "Notificación de seguridad",
|
924 |
+
"SecurityNotificationRecoveryCodesShowedBody": "Alguien vio los códigos de recuperación de la autenticación de dos factores de tu cuenta.",
|
925 |
+
"SecurityNotificationRecoveryCodesRegeneratedBody": "Alguien generó nuevos códigos de recuperación de la autenticación de dos factores para tu cuenta.",
|
926 |
+
"SecurityNotificationTwoFactorAuthEnabledBody": "Alguien habilitó la autenticación de dos factores en tu cuenta.",
|
927 |
+
"SecurityNotificationTwoFactorAuthDisabledBody": "Alguien deshabilitó la autenticación de dos factores en tu cuenta.",
|
928 |
+
"SecurityNotificationTokenAuthCreatedBody": "Alguien creó un token de autenticación (descripción: %s) en tu cuenta. Si no fuiste vos, eliminá el token.",
|
929 |
+
"SecurityNotificationTokenAuthDeletedBody": "Alguien eliminó un token de autenticación (descripción: %s) en tu cuenta.",
|
930 |
+
"SecurityNotificationAllTokenAuthDeletedBody": "Alguien eliminó todos los tokens de autenticación en tu cuenta.",
|
931 |
+
"SecurityNotificationSettingsChangedByUserBody": "Alguién modificó la configuración del sistema: Configuración afectada: %s.",
|
932 |
+
"SecurityNotificationSettingsChangedByOtherSuperUserBody": "Otro súperusuario (%1$s) modificó la configuración del sistema. Configuración afectada: %2$s. Si estás al tanto de esta actividad, no pasa nada. Pero si no la reconocés, por favor, ponete en contacto con los demás súperusuarios.",
|
933 |
+
"SecurityNotificationUserCreatedBody": "Alguien creó un nuevo usuario (nombre de usuario: %s) en tu cuenta.",
|
934 |
+
"SecurityNotificationUserDeletedBody": "Alguien eliminó un usuario (nombre de usuario: %s) en tu cuenta.",
|
935 |
+
"SecurityNotificationIfItWasYou": "Si fuiste vos, no pasa nada. Si no reconoés esta actividad, por favor, cambiá tu contraseña.",
|
936 |
+
"SecurityNotificationCheckTwoFactor": "Por favor, revisá la aplicación o dispositivo de tu autenticación de dos factores.",
|
937 |
+
"BruteForce": "Fuerza bruta",
|
938 |
+
"TwoFactorAuth": "Autenticación de dos factores",
|
939 |
+
"Cors": "Cors"
|
940 |
},
|
941 |
"CoreHome": {
|
942 |
"CategoryNoData": "No hay datos en esta categoría. Intentá \"Incluir toda la población\".",
|
955 |
"DataTableHowToSearch": "Presioná \"Enter\" o hacé clic en el ícono de búsqueda para buscar",
|
956 |
"DataTableShowDimensions": "Las dimensiones están combinadas %s Mostrar dimensiones separadamente",
|
957 |
"DataTableCombineDimensions": "Las dimensiones se muestran separadamente %s Mostrar dimensiones combinadas",
|
958 |
+
"DateInvalid": "La combinación ofrecida de fecha y período no es válida. Por favor, elegí una fecha válida en el selector de fechas.",
|
959 |
"Default": "predeterminado",
|
960 |
"DonateCall1": "Matomo nunca te costará nada para usarlo, pero eso no significa que no nos cueste hacerlo.",
|
961 |
"DonateCall2": "Matomo necesita de tu contínuo apoyo para crecer y prosperar.",
|
963 |
"EndShortcut": "Fin",
|
964 |
"EnterZenMode": "Entrar al modo Zen (ocultar los menús)",
|
965 |
"ExitZenMode": "Salir del modo Zen (mostrar los menús)",
|
966 |
+
"ExceptionNotAllowlistedIP": "No podés usar este Matomo ya que tu dirección IP %s no está permitida.",
|
967 |
"ExcludeRowsWithLowPopulation": "Se muestran todas las filas %s Excluir baja población",
|
968 |
"ExternalHelp": "Ayuda (se abre en una nueva pestaña)",
|
969 |
"FlattenDataTable": "Este informe es jerárquico %s Hacelo plano",
|
971 |
"ShowExportUrl": "Mostrar dirección web de exportación",
|
972 |
"HideExportUrl": "Ocultar dirección web de exportación",
|
973 |
"HomeShortcut": "Página principal",
|
974 |
+
"SupportUsOn": "Apoyanos en",
|
975 |
"IncludeRowsWithLowPopulation": "Se ocultan las filas con baja población %s Mostrar todas las filas",
|
976 |
"InjectedHostEmailBody": "Hola, hoy intenté acceder a Matomo pero encontré la advertencia sobre nombre de dominio (\"hostname\") desconocido.",
|
977 |
"InjectedHostEmailSubject": "Se accedió a Matomo desde un servidor desconocido: %s",
|
984 |
"VisitTypeReturning": "Regresos",
|
985 |
"VisitTypeReturningCustomer": "Cliente que vuelve",
|
986 |
"MainNavigation": "Navegación principal",
|
987 |
+
"YourDonationWillHelp": "Tu donación ayudará directamente a crear nuevas funciones y mejoras en esta plataforma de análisis web de código abierto. Esto significa que la comunidad siempre se beneficiará de una herramienta que protege la privacidad y que te permite tener el control de tus datos.",
|
988 |
+
"ThanksFromAllOfUs": "¡Gracias de parte de todos nosotros en Matomo!",
|
989 |
"Menu": "Menú",
|
990 |
"NoPrivilegesAskPiwikAdmin": "Iniciaste sesión como \"%1$s\", pero parece que no tenés ningún permiso configurado en Matomo. %2$sConsultá al administrador de tu Matomo (hacé clic para enviarle un correo electrónico)%3$s para que te dé acceso de lectura al sitio web.",
|
991 |
"OnlyForSuperUserAccess": "Este widget se muestra en el panel principal sólo a los usuarios que tengan acceso de súper usuario.",
|
1022 |
"PivotBySubtable": "Este informe no fue pivotado %1$s Pivote por %2$s",
|
1023 |
"SystemSummaryWidget": "Resumen del sistema",
|
1024 |
"SystemSummaryNWebsites": "%d sitios web",
|
1025 |
+
"SystemSummaryNSegments": "%1$d segmentos",
|
1026 |
+
"SystemSummaryNSegmentsWithBreakdown": "%1$d segmentos (%2$s preprocesados, %3$s procesados en tiempo real)",
|
1027 |
"SystemSummaryNActivatedPlugins": "%d plugins activos",
|
1028 |
"SystemSummaryPiwikVersion": "Versión de Matomo",
|
1029 |
"SystemSummaryMysqlVersion": "Versión de MySQL",
|
1043 |
"RowLimit": "Límite fe fila",
|
1044 |
"CustomLimit": "Límite personalizado",
|
1045 |
"ExportFormat": "Exportar formato",
|
1046 |
+
"ExportTooltip": "Nota: para usar la dirección web de exportación generada, vas a necesitar especificar una aplicación de autenticación de token. Podés configurar estos tokens en \"Administración\" > \"Seguridad\" > \"Autenticaciones de tokens\".",
|
1047 |
+
"ExportTooltipWithLink": "Nota: para usar la dirección web de exportación generada, vas a necesitar una aplicación de autenticación de token. Podés configurar estos tokens en %1$s[\"Administración\" > \"Seguridad\" > \"Autenticaciones de tokens\"]%2$s. Reemplazá %3$s en la dirección web de exportación por tu token de autenticación. Advertencia: nunca compartas la dirección web con el token real con nadie.",
|
1048 |
"ExpandSubtables": "Expandir subtablas",
|
1049 |
"StandardReport": "Informe estándar",
|
1050 |
"FlattenReport": "Aplanar informe",
|
1052 |
"ReadMoreOnlineGuide": "Leé más sobre este tema en la guía en línea.",
|
1053 |
"SeeAvailableVersions": "Ver las versiones disponibles",
|
1054 |
"QuickLinks": "Enlaces rápidos",
|
1055 |
+
"Profilable": "Perfilable",
|
1056 |
+
"SearchOnMatomo": "Buscá \"%1$s\" en matomo.org",
|
1057 |
+
"ReportingCategoryHelpPrefix": "¿Cómo puede ayudarme la página de informe \"%1$s > %2$s\"?",
|
1058 |
+
"VisitorsCategoryHelp1": "Las páginas de visitantes te dicen cosas sobre quiénes son los visitantes. Cosas como desde dónde vienen, qué dispositivos y navegadores web están usando y cuándo generalmente visitan tu sitio web. Asimilá, en el agregado, quién es tu audiencia, y buscá valores atípicos para ver cómo podría crecer.",
|
1059 |
+
"VisitorsCategoryHelp2": "Además de la información general sobre tus visitantes, también podés usar el %1$sregistro de visitas%2$s para ver qué ocurrió con cada visita individual.",
|
1060 |
+
"VisitorsOverviewHelp": "El pantallazo de los visitantes te ayuda a entender la popularidad de tu sitio web. Lo hace ofreciendo gráficos que muestran cuántas visitas está recibiendo tu sitio sobre un período seleccionado y el nivel promedio de compromiso con las funciones claves, como las búsquedas y las descargas.",
|
1061 |
+
"DevicesSubcategoryHelp": "La sección de dispositivos te ayuda a entender la tecnología que tus visitantes están usando para acceder a tu sitio web. Vas a ver informes sobre el tipo de dispositivo y modelos específicos para habilitarte a optimizar tu sitio para los dispositivos más populares.",
|
1062 |
+
"SoftwareSubcategoryHelp": "La sección de software muestra los sistemas operativos, navehadores web y plugins que tus visitantes están usando para acceder al sitio, así podés optimizarlo para asegurarte de que es totalmente compatible con las configuraciones más populares.",
|
1063 |
+
"EngagementSubcategoryHelp1": "La sección de compromiso ofrece informes que ayudan a cuantificar cuántos visitantes nuevos y habitués tenés. También podés revisar informes que delimitan el tiempo promedio y número de páginas por visitas, así como el número de veces que un visitante estuvo en tu sitio y la cantidad más común de días entre visitas.",
|
1064 |
+
"EngagementSubcategoryHelp2": "Esto te puede ayudar a optimizar la frecuencia de visitas y su alta interacción, además de maximizar tu alcance.",
|
1065 |
+
"PeriodHasOnlyRawData": "Parece que todavía no se procesaron informes para este período. ¿Querés saber lo que está pasando ahora? Revisá el %1$sregistro de visitas%2$s o elegí un período de fechas diferentes hasta que se generen los informes."
|
1066 |
},
|
1067 |
"CorePluginsAdmin": {
|
1068 |
"ActionUninstall": "Desinstalar",
|
1098 |
"MissingRequirementsNotice": "Por favor, actualizá %1$s %2$s a una versión más reciente, se requiere %1$s %3$s.",
|
1099 |
"MissingRequirementsPleaseInstallNotice": "Por favor, instalá %1$s %2$s ya que es requerido por %3$s.",
|
1100 |
"NoZipFileSelected": "Por favor, seleccioná un archivo ZIP.",
|
1101 |
+
"FileExceedsUploadLimit": "El archivo seleccionado excede el límite de subida de tu servidor.",
|
1102 |
"NumUpdatesAvailable": "%s actualización\/es disponible\/s",
|
1103 |
"NoPluginSettings": "No hay configuración disponible para el plugin",
|
1104 |
"Origin": "Origen",
|
1160 |
"DisablingIncompatiblePlugins": "Deshabilitando plugins incompatibles: %s",
|
1161 |
"DownloadingUpdateFromX": "Descargando actualización desde %s",
|
1162 |
"DownloadX": "Descargar %s",
|
1163 |
+
"UpdateLog": "Registro de subida",
|
1164 |
"EmptyDatabaseError": "La base de datos %s está vacía. Tenés que editar o quitar tu archivo de configuración de Matomo.",
|
1165 |
"ErrorDIYHelp": "Si sos un usuario avanzado y encontrás un error en la actualización de la base de datos:",
|
1166 |
"ErrorDIYHelp_1": "identificá y corregí el origen del problema (por ejemplo, memory_limit o max_execution_time)",
|
1245 |
"YouMustDownloadPackageOrFixPermissions": "Matomo no puede sobreescribir tu instalación actual. Podés, o bien corregir los permisos del directorio o archivo, o bien descargar el paquete e instalar la versión %s manualmente:",
|
1246 |
"YourDatabaseIsOutOfDate": "Tu basde de datos de Matomo está desactualizada y debe ser actualizada antes de continuar.",
|
1247 |
"ViewVersionChangelog": "Ver el registro de cambios de esta versión:",
|
1248 |
+
"ReceiveEmailBecauseIsSuperUser": "Recibís este correo electrónico porque sos un súperusuario en la instalación de Matomo en: %s",
|
1249 |
+
"ConvertToUtf8mb4": "Convertir base de datos a conjunto de caracteres UTF8mb4",
|
1250 |
+
"TriggerDatabaseConversion": "Ejecutar conversión de base de datos en segundo plano",
|
1251 |
+
"Utf8mb4ConversionHelp": "Tu base de datos actualmente no está usando un conjunto de caracteres UTF8mb4. Esto hace imposible almacenar caracteres de 4 bytes, como emojis, caracteres poco comunes de idiomas asiáticos, varios jeroglíficos históricos o símbolos matemáticos. Ellos actualmente son reemplazados con %1$s. <br \/><br \/>Tu base de datos soporta el conjunto de caracteres UTF8mb4 y sería posible convertirlo.<br \/><br \/>Si podés usar los comandos de consola, te recomendamos usar este comando: %2$s<br \/><br \/>Alternativamente, podés habilitar la conversión acá. Será ejecutada automáticamente como una tarea programada en segundo plano.<br \/><br \/>Atención: convertir la base de datos puede tardar un par de horas dependiendo en el tamaño de la misma. Ya que el rastreo podría no funcionar durante este proceso, no recomendamos usar el accionador para instancias más grandes.<br \/><br \/>Podés encontrar más información sobre este tema en nuestras %3$spreguntas frecuentes%4$s.",
|
1252 |
+
"SkipCacheClearDesc": "Esquiva la limpieza de memoria caché durante una actualización. Esto sólo es útil si podés asegurarte que las instancias ejecutando este comando no crearon un archivo caché aún, y si limpiar la caché para varias cuentas de Matomo pueden generar un cuello de botella.",
|
1253 |
+
"SkipCacheClear": "Esquivar la limpieza de memoria caché"
|
1254 |
},
|
1255 |
"CustomJsTracker": {
|
1256 |
"PluginDescription": "Permite a cualquier plugin extender el archivo de rastreo vía JavaScript de Matomo (\"matomo.js\"), y agrega nuevas capacidades de medición de funcionalidad y sitios web.",
|
1310 |
"SetAsDefaultWidgetsConfirmHelp": "Esta selección de widgets y diseño de columnas del panel será usada cuando un usuario cree un nuevo panel o cuando se use la función \"%s\".",
|
1311 |
"TopLinkTooltip": "Ver informes de análisis web para %s.",
|
1312 |
"WidgetNotFound": "Widget no encontrado",
|
1313 |
+
"WidgetPreview": "Previsualización del Widget",
|
1314 |
+
"DashboardCategoryHelp": "Esta es una página de panel. Los paneles son una colección de widgets de Matomo que agregas vos mismo para cubrir tus necesidades específicas. Mezclá y combiná cualquiera de los widgets de Matomo para obtener los datos que %1$sVOS%2$s necesitás de un saque."
|
1315 |
},
|
1316 |
"DevicePlugins": {
|
1317 |
"BrowserWithNoPluginsEnabled": "%1$s sin plugins habilitados",
|
1473 |
"ContactUs": "Contactanos",
|
1474 |
"VisitTheForums": "Visitá los %1$sforos%2$s y obtené ayuda de la comunidad de usuarios de Matomo",
|
1475 |
"Forums": "Foros",
|
|
|
1476 |
"PleaseLeaveExternalReviewForMatomo": "Compartí tus pensamientos en uno de estos sitios e inspirá a que otros se unan a nuestra revolución de los datos.",
|
1477 |
"RemindMeLater": "Recordarme después",
|
1478 |
"NeverAskMeAgain": "No volver a preguntarme",
|
1482 |
"RemoveOtherLabel": "Quiero ver los datos de mis \"Otros\"",
|
1483 |
"PurgeOldData": "Quiero quitar datos viejos",
|
1484 |
"SearchHelpResources": "Buscá los recursos de ayuda de matomo.org",
|
1485 |
+
"PopularHelpTopics": "Temas populares de ayuda",
|
1486 |
+
"ReferBannerTitle": "¿Creés en Matomo?"
|
1487 |
},
|
1488 |
"GeoIp2": {
|
1489 |
"AssumingNonApache": "No se puede encontrar la función \"apache_get_modules\", asumiendo que se posee un servidor de internet no-Apache.",
|
1723 |
"GoBackAndDefinePrefix": "Volvé y definí un prefijo para las tablas de Matomo",
|
1724 |
"HappyAnalysing": "¡Que la pasés bien!",
|
1725 |
"Installation": "Instalación",
|
1726 |
+
"InformationalResults": "Resultados informativos",
|
1727 |
+
"CopyBelowInfoForSupport": "Copiá o descargá la información abajo en caso que nuestro equipo técnico te la solicite.",
|
1728 |
+
"CopySystemCheck": "Copiar datos del sistema",
|
1729 |
+
"DownloadSystemCheck": "Descargar datos del sistema",
|
1730 |
"InstallationStatus": "Estado de la instalación",
|
1731 |
"InsufficientPrivilegesHelp": "Podés agregar estos privilegios utilizando una herramienta como phpMyAdmin o ejecutando las solicitudes SQL correspondientes. Si no sabés cómo hacer ninguna de estas operaciones, por favor, solicitá asistencia a tu administrador de sistema para que te conceda estos privilegios.",
|
1732 |
"InsufficientPrivilegesMain": "O bien la base de datos no existe (y pudo no ser creada), o bien el usuario especificado tiene privilegios insuficientes. El usuario de base de datos debe tener los siguientes privilegios: %s",
|
1787 |
"SystemCheckEvalHelp": "Requerido por el formulario HTML QuickForm y el sistema inteligente de plantillas.",
|
1788 |
"SystemCheckExtensions": "Otras extensiones requeridas",
|
1789 |
"SystemCheckFileIntegrity": "Integridad de archivo",
|
1790 |
+
"SystemCheckFilterHelp": "Necesitás configurar y reconstruir PHP con soporte de filtro habilitado (no usés \"--disable-filter\").",
|
1791 |
"SystemCheckFunctions": "Funciones requeridas",
|
1792 |
"SystemCheckFunctionHelp": "Necesitás habilitar esta función incorporada.",
|
1793 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (gráficos)",
|
1796 |
"SystemCheckGzcompressHelp": "Necesitás habilitar la extensión zlib y la función gzcompress.",
|
1797 |
"SystemCheckGzuncompressHelp": "Necesitás habilitar la extensión zlib y la función gzcompress.",
|
1798 |
"SystemCheckHashHelp": "Necesitás configurar y reconstruir PHP con el soporte \"hash()\" habilitado excluyendo la opción --disable-hash.",
|
1799 |
+
"SystemCheckJsonHelp": "La extensión php-json es necesaria para que Matomo lea y escriba datos JSON.",
|
1800 |
"SystemCheckMailHelp": "Los mensajes de Feedback y Recuperar Contraseña no se enviarán sin mail().",
|
|
|
|
|
1801 |
"SystemCheckMemoryLimit": "Límite de memoria",
|
1802 |
"SystemCheckMemoryLimitHelp": "En un sitio web de alto tráfico, el proceso de archivo puede requerir más memoria de la que se permite actualmente.<br \/>De ser necesario, cambiá la directiva memory_limit en tu archivo \"php.ini\".",
|
1803 |
+
"SystemCheckMemoryNoMemoryLimitSet": "No se estableció un límite de memoria",
|
1804 |
"SystemCheckNoErrorsOrWarnings": "No hay errores o advertencias",
|
1805 |
"SystemCheckViewFullSystemCheck": "Ver el informe completo de revisión del sistema",
|
1806 |
"SystemCheckOpenURL": "Abrir dirección web",
|
1814 |
"SystemCheckPdoAndMysqliHelp": "En un servidor GNU\/Linux podés compilar php con las siguientes opciones: %1$s En tu \"php.ini\", agregá las siguientes líneas: %2$s",
|
1815 |
"SystemCheckPhp": "Versión PHP",
|
1816 |
"SystemCheckPhpPdoAndMysqli": "Más información en: %1$sPHP PDO%2$s y %3$sMYSQLI%4$s.",
|
1817 |
+
"SystemCheckSessionHelp": "Necesitás configurar y reconstruir PHP con soporte de sesión habilitado (no usés \"--disable-session\").",
|
1818 |
"SystemCheckSettings": "Se requiere configuración PHP (php.ini)",
|
1819 |
"SystemCheckSummaryNoProblems": "¡Esssa! No hay problemas con tu configuración de Matomo. Date una palmadita en la espalda.",
|
1820 |
"SystemCheckSummaryThereWereErrors": "¡Epa! Matomo detectó algunos %1$sproblemas críticos%2$s con tu configuración Matomo. %3$sEstos problemas deberían corregirse inmediatamente.%4$s",
|
1824 |
"SystemCheckTrackerHelp": "Falló la solicitud GET a \"matomo.php\". Intentá permitir esta dirección web en tu autenticación HTTP y deshabilitá \"mod_security\" (podés pedírselo a tu administrador web). Para más información sobre el error, revisá el archivo de registro de errores de tu servidor web.",
|
1825 |
"SystemCheckWarnDomHelp": "Deberías habilitar la extensión \"dom\" (ej., instalar el paquete \"php-dom\" y\/o el paquete \"php-xml\").",
|
1826 |
"SystemCheckWarning": "Matomo funcionará normalmente, pero algunas funciones pueden estar ausentes",
|
1827 |
+
"SystemCheckWarnJsonHelp": "Deberías habilitar la extensión \"json\" (por ejemplo, instalando el paquete \"php-json\").",
|
1828 |
"SystemCheckWarnLibXmlHelp": "Deberías habilitar la extensión \"libxml\" (ej., instalar el paquete \"php-libxml\") ya que esta es requerida por otras extensiones de PHP.",
|
1829 |
+
"SystemCheckWarnOpensslHelp": "Deberías habilitar la extensión \"openssl\" para permitir actualizaciones seguras.",
|
1830 |
"SystemCheckWarnSimpleXMLHelp": "Deberías habilitar la extensión \"SimpleXML\" (ej., instalar el paquete \"php-simplexml\" y\/o el paquete \"php-xml\").",
|
1831 |
"SystemCheckWinPdoAndMysqliHelp": "En un servidor Windows podés agregar las siguientes líneas a tu php.ini: %s",
|
1832 |
"SystemCheckWriteDirs": "Directorios con acceso de escritura",
|
1833 |
"SystemCheckWriteDirsHelp": "Para arreglar este error en tu sistema GNU\/Linux, intentá escribir los siguientes comandos",
|
1834 |
"SystemCheckZlibHelp": "Necesitás configurar y reconstruir PHP con el soporte \"zlib\" habilitado, --with-zlib.",
|
1835 |
+
"SystemCheckCronArchiveProcess": "Configurar Cron",
|
1836 |
+
"FasterReportLoading": "carga más rápida de informe",
|
1837 |
"SystemCheckCronArchiveProcessCLI": "Administración de procesos vía CLI",
|
1838 |
"SystemCheckPhpSetting": "Para prevenir algunos problemas críticos, debés establecer lo siguiente en tu archivo \"php.ini\": %s",
|
1839 |
"SystemCheckUpdateHttps": "Actualización sobre HTTPS",
|
1854 |
"WelcomeHelp": "<p>Matomo es software libre de análisis de web que hace fácil obtener la información que querés de tus visitantes.<\/p> <p>Este proceso está dividido hasta en %s fáciles pasos y llevará unos 5 minutos.<\/p>",
|
1855 |
"WelcomeToCommunity": "¡Bienvenido a la comunidad Matomo!",
|
1856 |
"CannotConnectToDb": "No se puede conectar a la base de datos",
|
1857 |
+
"CannotConnectToDbResolvingExplanation": "Esto podría ser un problema tempóral, intentá %1$srecargar la página%2$s. Si el problema persiste, por favor, contactá a tu administrador de Matomo.",
|
1858 |
+
"EmailPrivacyNotice": "Tu dirección de correo electrónico sólo será usada para enviarte el boletín informativo. Para esto, tenemos que compartir tu dirección de correo electrónico con un proveedor de terceros. Este proveedor actualmente es Mad Mini, pero podría cambiar en el futuro. No compartiremos tu correo electrónico con nadie más ni lo usaremos con otro propósito que no sea enviarte el boletín informativo. Podés desuscribirte en cualquier momento. Por favor, consultá nuestra %1$spolítica de privacidad%2$s para más información.",
|
1859 |
+
"PerformanceSettingsDesc1": "Una nota final sobre rendimiento: tu Matomo está configurado y listo para rastrear e informar el tráfico en tu sitio web, pero si encontrás que Matomo funciona lento, quizás quieras tomar el paso extra de configurar el %1$sarchivado CLI%2$s. Esto generará tus informes en segundo plano periódicamente, en lugar de hacerlo a pedido.",
|
1860 |
+
"PerformanceSettingsDesc2": "Esto requiere agregar un comando de Matomo a cron, el cual no puede ser hecho automáticamente por el instalador, pero podés leer nuestras %1$spreguntas frecuentes sobre cómo configurarlo vos mismo%2$s."
|
1861 |
},
|
1862 |
"Intl": {
|
1863 |
"Continent_afr": "África",
|
3135 |
"Evolution": "Evolución",
|
3136 |
"LoadingWebsites": "Cargando sitios web",
|
3137 |
"PluginDescription": "Mirá y compará todos tus sitios web y aplicaciones en este útil panel \"Todos los sitios web\".",
|
3138 |
+
"TopLinkTooltip": "Compará estadísticas de análisis web para todos tus sitios.",
|
3139 |
+
"SingleWebsitesDashboardDocumentation": "Este informe te da un pantallazo de un sitio web específico, conteniendo las mediciones más generales sobre tus visitantes.",
|
3140 |
+
"AllWebsitesDashboardDocumentation": "Este informe te da un pantallazo de tus sitios web, conteniendo las mediciones más generales sobre tus visitantes."
|
3141 |
},
|
3142 |
"Overlay": {
|
3143 |
"Clicks": "%s clics",
|
3826 |
"FormElementVariableDescription": "Una instancia del elemento que fue enviado.",
|
3827 |
"FormClassesVariableDescription": "El valor de todos los nombres de clase CSS de un formulario enviado.",
|
3828 |
"FormClassesVariableName": "Clases de formulario",
|
3829 |
+
"FormDestinationVariableDescription": "El valor del a dirección de acción de formulario, de un formulario enviado.",
|
3830 |
"FormDestinationVariableName": "Dirección web del destino del formulario",
|
3831 |
"FormIdVariableDescription": "El valor del atributo de identificación de un formulario enviado.",
|
3832 |
"FormIdVariableName": "Identificación de formulario",
|
3995 |
"ScrollLeftPixelVariableDescription": "Cuánto se desplazó horizontalmente el usuario en píxeles, por ejemplo: \"592\".",
|
3996 |
"ScrollLeftPixelVariableName": "Píxel de desplazamiento izquierdo",
|
3997 |
"ScrollReachTriggerDescription": "Accionado tan pronto como el usuario se desplaza a cierta posición.",
|
3998 |
+
"ScrollReachTriggerHelp": "Este accionador se ejecuta cuando un usuario se desplaza en, o cambia la ventana actual del navegador web. Este accionador no se ejecuta cuando el usuario se desplaza dentro de un elemento. No se ejecutará cada vez que cierta posición de desplazamiento haya sido alcanzada, sino sólo la primera vez que la posición configurada haya sido alcanzada.",
|
3999 |
"ScrollReachTriggerName": "Desplazamiento alcanzado",
|
4000 |
"ScrollSourceVariableDescription": "Cuando la posición de desplazamiento fue originada desde un desplazamiento de usuario o un redimensionamiento del navegador web. El valor es \"scroll\" o \"resize\".",
|
4001 |
"ScrollSourceVariableName": "Fuente de desplazamiento",
|
4106 |
"WeekdayVariableDescription": "Devuelve el día local de la semana. Por ejemplo: lunes, martes, miércoles, etc.",
|
4107 |
"WeekdayVariableName": "Día de la semana",
|
4108 |
"WindowLeaveTriggerDescription": "Accionado cuando el usuario está a punto de dejar la página actual moviendo el cursor fuera de la ventana.",
|
4109 |
+
"WindowLeaveTriggerHelp": "Este accionador se acciona cuando el usuario está probablemente a punto de abandonar el sitio web y mueve su cursor fuera de la página web actual, por ejemplo, hacia la barra de dirección o hacia otros botones. Esto puede ser útil para mantener al visitante y no perder la visita, por ejemplo, mostrando una ventana emergente de salida. También podrías estar interesado en el accionador \"Descarga de ventana\", el cual se acciona tan pronto como el usuario abandona la página actual.",
|
4110 |
"WindowLeaveTriggerName": "Abandono de ventana",
|
4111 |
"WindowLoadedTriggerDescription": "Accionado cuando la página está completamente cargada, incluyendo todas las imágenes, etc.",
|
4112 |
"WindowLoadedTriggerHelp": "Esta etapa de carga de página web es cuando la página está completamente cargada, según el navegador web. En la mayoría de los casos, esto significa que también se cargaron las imágenes, que se aplicaron los estilos, etc. Este accionador siempre es accionado en algún punto después de \"DOM listo\".",
|
app/lang/es.json
CHANGED
@@ -524,7 +524,8 @@
|
|
524 |
"Custom": "Personalizado",
|
525 |
"PreviousPeriod": "Periodo previo",
|
526 |
"PreviousYear": "Año previo",
|
527 |
-
"ViewAccessRequired": "El token_auth utilizado tiene demasiado acceso como para ser utilizado en una URL de petición que no es de la API. Utilice una contraseña específica de la aplicación para un usuario que solo tenga acceso de visualización."
|
|
|
528 |
},
|
529 |
"Mobile": {
|
530 |
"AboutPiwikMobile": "Acerca de Matomo Mobile",
|
@@ -759,8 +760,10 @@
|
|
759 |
"ContentInteractions": "Interacciones con el contenido",
|
760 |
"InteractionRate": "Nivel de interacción",
|
761 |
"ContentName": "Nombre del contenido",
|
|
|
762 |
"ContentNames": "Nombres de contenidos",
|
763 |
"ContentPiece": "Pieza de contenido",
|
|
|
764 |
"ContentPieces": "Piezas de contenido",
|
765 |
"ContentTarget": "Objetivo del contenido",
|
766 |
"ContentTargets": "Objetivos de contenido",
|
@@ -909,7 +912,20 @@
|
|
909 |
"TrackingFailuresEmail1": "Esto es solo para hacerle saber que %s se han producido diferentes tipos de fallas de seguimiento en los últimos días.",
|
910 |
"TrackingFailuresEmail2": "Para ver todas las peticiones de fallas de seguimiento haga %1$s clic aquí%2$s.",
|
911 |
"ImportFromGoogleAnalytics": "Importar de Google Analytics",
|
912 |
-
"ImportFromGoogleAnalyticsDescription": "Si tiene una propiedad de Google Analytics y está migrando a Matomo, puede importar los datos existentes una el plugin %1$sGoogleAnalyticsImporter%2$s."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
913 |
},
|
914 |
"CoreHome": {
|
915 |
"CategoryNoData": "No hay datos en esta categoría. Intente \"Incluir toda la población\".",
|
@@ -1016,6 +1032,7 @@
|
|
1016 |
"RowLimit": "Límite de fila",
|
1017 |
"CustomLimit": "Límite personalizado",
|
1018 |
"ExportFormat": "Formato de exportación",
|
|
|
1019 |
"ExpandSubtables": "Expandir subtablas",
|
1020 |
"StandardReport": "Informe estándar",
|
1021 |
"FlattenReport": "Aplanar informe",
|
@@ -1026,7 +1043,9 @@
|
|
1026 |
"Profilable": "Perfilable",
|
1027 |
"SearchOnMatomo": "Busca '%1$s' en Matomo.org",
|
1028 |
"ReportingCategoryHelpPrefix": "¿Cómo me ayuda la página de report \"%1$s > %2$s\"?",
|
1029 |
-
"VisitorsCategoryHelp2": "Además de la información general respecto a los visitantes, también puede usar %1$s los registros de visitas %2$s para ver que ha ocurrido en cada visita individual."
|
|
|
|
|
1030 |
},
|
1031 |
"CorePluginsAdmin": {
|
1032 |
"ActionUninstall": "Desinstalar",
|
@@ -1465,7 +1484,6 @@
|
|
1465 |
"ContactUs": "Contáctanos",
|
1466 |
"VisitTheForums": "Visite el %1$sForo%2$s y obtenga ayuda de la comunidad de usuarios Matomo",
|
1467 |
"Forums": "Foros",
|
1468 |
-
"ReviewMatomoTitle": "¿Crées en Matomo?",
|
1469 |
"PleaseLeaveExternalReviewForMatomo": "Comparte sus pensamientos en uno de estos sitios e inspira a otros a unirse en nuestra revolución de datos.",
|
1470 |
"RemindMeLater": "Recordármelo nuevamente",
|
1471 |
"NeverAskMeAgain": "No volver a preguntármelo",
|
@@ -1475,7 +1493,8 @@
|
|
1475 |
"RemoveOtherLabel": "Quiero ver mi información de 'Otros'",
|
1476 |
"PurgeOldData": "Quiero remover información obsoleta",
|
1477 |
"SearchHelpResources": "Buscar recursos de ayuda en matomo.org",
|
1478 |
-
"PopularHelpTopics": "Temas de ayuda populares"
|
|
|
1479 |
},
|
1480 |
"GeoIp2": {
|
1481 |
"AssumingNonApache": "No se puede encontrar la función apache_get_modules, asumiendo que posee un servidor de internet no-Apache.",
|
@@ -1764,10 +1783,7 @@
|
|
1764 |
"SystemCheckGzcompressHelp": "Es necesario habilitar la extensión zlib y la función gzcompress.",
|
1765 |
"SystemCheckGzuncompressHelp": "Es necesario habilitar la extensión zlib y la función gzcompress.",
|
1766 |
"SystemCheckHashHelp": "Necesitas configurar y recompilar PHP con soporte habilitado para \"hash()\": quitar la opción --disable-hash.",
|
1767 |
-
"SystemCheckIconvHelp": "Necesita configurar y reconstruir PHP con soporte \"iconv\" habilitado, --with-iconv.",
|
1768 |
"SystemCheckMailHelp": "Los mensajes de Feedback y Recuperar Contraseña no se enviarán sin un correo electrónico().",
|
1769 |
-
"SystemCheckMbstring": "mbstring",
|
1770 |
-
"SystemCheckMbstringHelp": "Se requiere la extensión mbstring para manejar caracteres multibyte en la interface del usuario y también las respuestas de la API. Por favor controle que mbstring.func_overload esté en \"0\" en el archivo php.ini.",
|
1771 |
"SystemCheckMemoryLimit": "Límite de memoria",
|
1772 |
"SystemCheckMemoryLimitHelp": "En un sitio de internet de alto tráfico, el proceso de archivo puede requerir más memoria de la que se permite actualmente. Véase la Directiva memory_limit en su archivo php.ini si es necesario.",
|
1773 |
"SystemCheckNoErrorsOrWarnings": "No hay errores ni advertencias",
|
@@ -1783,7 +1799,6 @@
|
|
1783 |
"SystemCheckPdoAndMysqliHelp": "En un servidor Linux puede compilar php con las siguientes opciones: %1$s En su php.ini, añada las siguientes líneas: %2$s",
|
1784 |
"SystemCheckPhp": "Versión PHP",
|
1785 |
"SystemCheckPhpPdoAndMysqli": "Más información en: %1$sPHP PDO%2$s y %3$sMYSQLI%4$s.",
|
1786 |
-
"SystemCheckSplHelp": "Necesita configurar y reconstruir PHP con la Librería Estándar de PHP habilitada (por defecto).",
|
1787 |
"SystemCheckSettings": "Configuración PHP solicitada (php.ini)",
|
1788 |
"SystemCheckSummaryNoProblems": "Hurra! No hay problemas con su configuración de Matomo. Dése una palmadita en la espalda.",
|
1789 |
"SystemCheckSummaryThereWereErrors": "Oh! Matomo ha detectado algunos %1$sproblemas críticos%2$s en su configuración Matomo. %3$sEstos deben ser arreglados inmediatamente.%4$s",
|
524 |
"Custom": "Personalizado",
|
525 |
"PreviousPeriod": "Periodo previo",
|
526 |
"PreviousYear": "Año previo",
|
527 |
+
"ViewAccessRequired": "El token_auth utilizado tiene demasiado acceso como para ser utilizado en una URL de petición que no es de la API. Utilice una contraseña específica de la aplicación para un usuario que solo tenga acceso de visualización.",
|
528 |
+
"Reasons": "Motivos"
|
529 |
},
|
530 |
"Mobile": {
|
531 |
"AboutPiwikMobile": "Acerca de Matomo Mobile",
|
760 |
"ContentInteractions": "Interacciones con el contenido",
|
761 |
"InteractionRate": "Nivel de interacción",
|
762 |
"ContentName": "Nombre del contenido",
|
763 |
+
"ContentNameReportDocumentation": "Este informe muestra los nombres del contenido que los visitantes vieron e interactuaron.",
|
764 |
"ContentNames": "Nombres de contenidos",
|
765 |
"ContentPiece": "Pieza de contenido",
|
766 |
+
"ContentPieceReportDocumentation": "Este informa muestra las piezas de contenido que los visitantes vieron e interactuaron.",
|
767 |
"ContentPieces": "Piezas de contenido",
|
768 |
"ContentTarget": "Objetivo del contenido",
|
769 |
"ContentTargets": "Objetivos de contenido",
|
912 |
"TrackingFailuresEmail1": "Esto es solo para hacerle saber que %s se han producido diferentes tipos de fallas de seguimiento en los últimos días.",
|
913 |
"TrackingFailuresEmail2": "Para ver todas las peticiones de fallas de seguimiento haga %1$s clic aquí%2$s.",
|
914 |
"ImportFromGoogleAnalytics": "Importar de Google Analytics",
|
915 |
+
"ImportFromGoogleAnalyticsDescription": "Si tiene una propiedad de Google Analytics y está migrando a Matomo, puede importar los datos existentes una el plugin %1$sGoogleAnalyticsImporter%2$s.",
|
916 |
+
"SecurityNotificationEmailSubject": "Notificación de seguridad",
|
917 |
+
"SecurityNotificationTwoFactorAuthEnabledBody": "Alguien ha habilitado la autenticación de 2 pasos en tu cuenta.",
|
918 |
+
"SecurityNotificationTwoFactorAuthDisabledBody": "Alguien ha deshabilitado la autenticación de 2 pasos en tu cuenta.",
|
919 |
+
"SecurityNotificationTokenAuthCreatedBody": "Alguien ha creado un token de autenticación (descripción: %s) en su cuenta. Si no fue usted elimine el token.",
|
920 |
+
"SecurityNotificationTokenAuthDeletedBody": "Alguien ha eliminado un token de autenticación (descripción: %s) de su cuenta.",
|
921 |
+
"SecurityNotificationAllTokenAuthDeletedBody": "Alguien ha eliminado todos los tokens de autenticación de su cuenta.",
|
922 |
+
"SecurityNotificationSettingsChangedByUserBody": "Alguien ha modificado la configuración del sistema. Los parámetros afectados son: %s.",
|
923 |
+
"SecurityNotificationSettingsChangedByOtherSuperUserBody": "Otro super-usuario (%1$s) ha modificado la configuración del sistema. Los parámetros afectados son: %2$s. Si reconoce estos cambios ignore esto, si no contacte con el resto de super-usuarios.",
|
924 |
+
"SecurityNotificationUserCreatedBody": "Alguien ha creado un nuevo usuario (login: %s) en su cuenta.",
|
925 |
+
"SecurityNotificationUserDeletedBody": "Alguien ha eliminado un usuario (login: %s) de su cuenta.",
|
926 |
+
"SecurityNotificationIfItWasYou": "Si era usted, ignore este mensaje; de lo contrario, cambie la contraseña.",
|
927 |
+
"BruteForce": "Fuerza Bruta",
|
928 |
+
"TwoFactorAuth": "Autenticación de doble factor"
|
929 |
},
|
930 |
"CoreHome": {
|
931 |
"CategoryNoData": "No hay datos en esta categoría. Intente \"Incluir toda la población\".",
|
1032 |
"RowLimit": "Límite de fila",
|
1033 |
"CustomLimit": "Límite personalizado",
|
1034 |
"ExportFormat": "Formato de exportación",
|
1035 |
+
"ExportTooltip": "Nota: para utilizar la URL generada necesitará especificar un token de autenticación de la aplicación. Puede configurar estos tokens yendo a Admin -> Security -> Token Auths",
|
1036 |
"ExpandSubtables": "Expandir subtablas",
|
1037 |
"StandardReport": "Informe estándar",
|
1038 |
"FlattenReport": "Aplanar informe",
|
1043 |
"Profilable": "Perfilable",
|
1044 |
"SearchOnMatomo": "Busca '%1$s' en Matomo.org",
|
1045 |
"ReportingCategoryHelpPrefix": "¿Cómo me ayuda la página de report \"%1$s > %2$s\"?",
|
1046 |
+
"VisitorsCategoryHelp2": "Además de la información general respecto a los visitantes, también puede usar %1$s los registros de visitas %2$s para ver que ha ocurrido en cada visita individual.",
|
1047 |
+
"EngagementSubcategoryHelp2": "Esto le puede ayudar a usted, además de a maximizar su alcance, a optimizar por frecuencia y visitas de gran interacción.",
|
1048 |
+
"PeriodHasOnlyRawData": "Parece que los informes para este periodo aún no han sido procesados. ¿Quiere ver lo que está sucediendo ahora? Consulte aquí %1$s, registro de visitas %2$s o elija un periodo distinto hasta que los informes se hayan generado."
|
1049 |
},
|
1050 |
"CorePluginsAdmin": {
|
1051 |
"ActionUninstall": "Desinstalar",
|
1484 |
"ContactUs": "Contáctanos",
|
1485 |
"VisitTheForums": "Visite el %1$sForo%2$s y obtenga ayuda de la comunidad de usuarios Matomo",
|
1486 |
"Forums": "Foros",
|
|
|
1487 |
"PleaseLeaveExternalReviewForMatomo": "Comparte sus pensamientos en uno de estos sitios e inspira a otros a unirse en nuestra revolución de datos.",
|
1488 |
"RemindMeLater": "Recordármelo nuevamente",
|
1489 |
"NeverAskMeAgain": "No volver a preguntármelo",
|
1493 |
"RemoveOtherLabel": "Quiero ver mi información de 'Otros'",
|
1494 |
"PurgeOldData": "Quiero remover información obsoleta",
|
1495 |
"SearchHelpResources": "Buscar recursos de ayuda en matomo.org",
|
1496 |
+
"PopularHelpTopics": "Temas de ayuda populares",
|
1497 |
+
"ReferBannerTitle": "¿Crées en Matomo?"
|
1498 |
},
|
1499 |
"GeoIp2": {
|
1500 |
"AssumingNonApache": "No se puede encontrar la función apache_get_modules, asumiendo que posee un servidor de internet no-Apache.",
|
1783 |
"SystemCheckGzcompressHelp": "Es necesario habilitar la extensión zlib y la función gzcompress.",
|
1784 |
"SystemCheckGzuncompressHelp": "Es necesario habilitar la extensión zlib y la función gzcompress.",
|
1785 |
"SystemCheckHashHelp": "Necesitas configurar y recompilar PHP con soporte habilitado para \"hash()\": quitar la opción --disable-hash.",
|
|
|
1786 |
"SystemCheckMailHelp": "Los mensajes de Feedback y Recuperar Contraseña no se enviarán sin un correo electrónico().",
|
|
|
|
|
1787 |
"SystemCheckMemoryLimit": "Límite de memoria",
|
1788 |
"SystemCheckMemoryLimitHelp": "En un sitio de internet de alto tráfico, el proceso de archivo puede requerir más memoria de la que se permite actualmente. Véase la Directiva memory_limit en su archivo php.ini si es necesario.",
|
1789 |
"SystemCheckNoErrorsOrWarnings": "No hay errores ni advertencias",
|
1799 |
"SystemCheckPdoAndMysqliHelp": "En un servidor Linux puede compilar php con las siguientes opciones: %1$s En su php.ini, añada las siguientes líneas: %2$s",
|
1800 |
"SystemCheckPhp": "Versión PHP",
|
1801 |
"SystemCheckPhpPdoAndMysqli": "Más información en: %1$sPHP PDO%2$s y %3$sMYSQLI%4$s.",
|
|
|
1802 |
"SystemCheckSettings": "Configuración PHP solicitada (php.ini)",
|
1803 |
"SystemCheckSummaryNoProblems": "Hurra! No hay problemas con su configuración de Matomo. Dése una palmadita en la espalda.",
|
1804 |
"SystemCheckSummaryThereWereErrors": "Oh! Matomo ha detectado algunos %1$sproblemas críticos%2$s en su configuración Matomo. %3$sEstos deben ser arreglados inmediatamente.%4$s",
|
app/lang/et.json
CHANGED
@@ -931,9 +931,7 @@
|
|
931 |
"SystemCheckGDHelp": "Statistika jaoks genereeritud graafikud (väiksed joongraafikud veebis, mobiilses rakenduses ja e-posti raportites) ei tööta.",
|
932 |
"SystemCheckGzcompressHelp": "Sa pead aktiveerima zlib laienduse ja gzcompress funktsiooni.",
|
933 |
"SystemCheckGzuncompressHelp": "Sa pead aktiveerima zlib laienduse ja gzuncompress funktsiooni.",
|
934 |
-
"SystemCheckIconvHelp": "Sa pead PHP seadistama ja uuesti laadima koos \"iconv\" toega, --with-iconv.",
|
935 |
"SystemCheckMailHelp": "Tagasiside ja kaotatud salasõna sõnumeid ei saadeta ilma mail() funktsiooni toeta.",
|
936 |
-
"SystemCheckMbstring": "mbstring",
|
937 |
"SystemCheckMemoryLimit": "Mälu limiit",
|
938 |
"SystemCheckMemoryLimitHelp": "Suure liiklusega veebileht võib vajada arhiveerimiseks rohkem mälu, kui hetkel lubatud.<br \/>Vaata üle oma memory_limit oma php.ini failis, kui see osutub vajalikuks.",
|
939 |
"SystemCheckOpenURL": "Ava URL",
|
931 |
"SystemCheckGDHelp": "Statistika jaoks genereeritud graafikud (väiksed joongraafikud veebis, mobiilses rakenduses ja e-posti raportites) ei tööta.",
|
932 |
"SystemCheckGzcompressHelp": "Sa pead aktiveerima zlib laienduse ja gzcompress funktsiooni.",
|
933 |
"SystemCheckGzuncompressHelp": "Sa pead aktiveerima zlib laienduse ja gzuncompress funktsiooni.",
|
|
|
934 |
"SystemCheckMailHelp": "Tagasiside ja kaotatud salasõna sõnumeid ei saadeta ilma mail() funktsiooni toeta.",
|
|
|
935 |
"SystemCheckMemoryLimit": "Mälu limiit",
|
936 |
"SystemCheckMemoryLimitHelp": "Suure liiklusega veebileht võib vajada arhiveerimiseks rohkem mälu, kui hetkel lubatud.<br \/>Vaata üle oma memory_limit oma php.ini failis, kui see osutub vajalikuks.",
|
937 |
"SystemCheckOpenURL": "Ava URL",
|
app/lang/eu.json
CHANGED
@@ -493,7 +493,6 @@
|
|
493 |
"SystemCheckExtensions": "Beharrezko bestelako hedapenak",
|
494 |
"SystemCheckFunctions": "Beharrezko funtzioak",
|
495 |
"SystemCheckGDHelp": "Grafika txikiek ez dute funtzionatuko.",
|
496 |
-
"SystemCheckIconvHelp": "\"iconv\" gaituta duela konfiguratu eta birkonpilatu behar duzu PHP, --with-iconv aukerarekin.",
|
497 |
"SystemCheckMailHelp": "Erreakzioak eta galdutako pasahitzen mezuak ezingo dira bidali mail() gabe.",
|
498 |
"SystemCheckMemoryLimit": "Memoriaren muga",
|
499 |
"SystemCheckMemoryLimitHelp": "Trafiko handiko webgune batean, artxibatzeko prozesuak onartutako memoria baino gehiago har lezake. Beharrezkoa bada, aldatu memory_limit direktiba zure php.ini fitxategian.",
|
@@ -502,7 +501,6 @@
|
|
502 |
"SystemCheckPdoAndMysqliHelp": "Linux zerbitzari batean ondorengo aukerekin konpila dezakezu php:: %1$s Gehitu ondorengo lerroak zure php.ini fitxategian: %2$s",
|
503 |
"SystemCheckPhp": "PHP bertsioa",
|
504 |
"SystemCheckPhpPdoAndMysqli": "Argibide gehiago: %1$sPHP PDO%2$s eta %3$sMYSQLI%4$s.",
|
505 |
-
"SystemCheckSplHelp": "Standard PHP Library (SPL) lehenetsita gaituta duela konfiguratu eta birkonpilatu behar duzu PHP.",
|
506 |
"SystemCheckTimeLimitHelp": "Trafiko handiko webgune batean, artxibatzeko prozesuak onartutako denbora baino gehiago har lezake. Beharrezkoa bada, aldatu max_execution_time direktiba zure php.ini fitxategian.",
|
507 |
"SystemCheckWarning": "Matomo ondo ibiliko da baina zenbait ezaugarri falta litezke",
|
508 |
"SystemCheckWinPdoAndMysqliHelp": "Windows zerbitzari batean ondorengo lerroak gehi ditzakezu zure php.ini fitxategian: %s",
|
493 |
"SystemCheckExtensions": "Beharrezko bestelako hedapenak",
|
494 |
"SystemCheckFunctions": "Beharrezko funtzioak",
|
495 |
"SystemCheckGDHelp": "Grafika txikiek ez dute funtzionatuko.",
|
|
|
496 |
"SystemCheckMailHelp": "Erreakzioak eta galdutako pasahitzen mezuak ezingo dira bidali mail() gabe.",
|
497 |
"SystemCheckMemoryLimit": "Memoriaren muga",
|
498 |
"SystemCheckMemoryLimitHelp": "Trafiko handiko webgune batean, artxibatzeko prozesuak onartutako memoria baino gehiago har lezake. Beharrezkoa bada, aldatu memory_limit direktiba zure php.ini fitxategian.",
|
501 |
"SystemCheckPdoAndMysqliHelp": "Linux zerbitzari batean ondorengo aukerekin konpila dezakezu php:: %1$s Gehitu ondorengo lerroak zure php.ini fitxategian: %2$s",
|
502 |
"SystemCheckPhp": "PHP bertsioa",
|
503 |
"SystemCheckPhpPdoAndMysqli": "Argibide gehiago: %1$sPHP PDO%2$s eta %3$sMYSQLI%4$s.",
|
|
|
504 |
"SystemCheckTimeLimitHelp": "Trafiko handiko webgune batean, artxibatzeko prozesuak onartutako denbora baino gehiago har lezake. Beharrezkoa bada, aldatu max_execution_time direktiba zure php.ini fitxategian.",
|
505 |
"SystemCheckWarning": "Matomo ondo ibiliko da baina zenbait ezaugarri falta litezke",
|
506 |
"SystemCheckWinPdoAndMysqliHelp": "Windows zerbitzari batean ondorengo lerroak gehi ditzakezu zure php.ini fitxategian: %s",
|
app/lang/fa.json
CHANGED
@@ -1265,9 +1265,7 @@
|
|
1265 |
"SystemCheckGlobHelp": "این تابع ساخته شده در میزبان خود را غیر فعال شده است. Matomo تلاش خواهد کرد این تابع برای شبیه سازی است اما ممکن است محدودیت های امنیتی بیشتر روبرو می شوند. کارکرد ممکن است تأثیر داشته است.",
|
1266 |
"SystemCheckGzcompressHelp": "شما نیاز به فعال کردن پسوند zlib می و gzcompress تابع.",
|
1267 |
"SystemCheckGzuncompressHelp": "شما نیاز به فعال کردن پسوند zlib می و gzuncompress تابع.",
|
1268 |
-
"SystemCheckIconvHelp": "شما نیاز به تنظیم و بازسازی PHP با پشتیبانی از \"iconv\" فعال باشد، - با iconv.",
|
1269 |
"SystemCheckMailHelp": "انتقادات و پیشنهادات و پیامهای رمز عبور را فراموش کرده اید بدون پست الکترونیکی () ارسال نخواهد شد.",
|
1270 |
-
"SystemCheckMbstring": "mbstring",
|
1271 |
"SystemCheckMemoryLimit": "محدودیت حافظه",
|
1272 |
"SystemCheckMemoryLimitHelp": "در یک وب سایت با ترافیک بالا، فرایند آرشیو ممکن است نیاز به حافظه بیشتری از آنچه در حال حاضر اجازه. در صورت لزوم، تغییر بخشنامه memory_limit را در فایل php.ini خود را.",
|
1273 |
"SystemCheckOpenURL": "بازکردن آدرس",
|
@@ -1278,7 +1276,6 @@
|
|
1278 |
"SystemCheckParseIniFileHelp": "این تابع ساخته شده در میزبان خود را غیر فعال شده است. Matomo تلاش خواهد کرد این تابع برای شبیه سازی است اما ممکن است محدودیت های امنیتی بیشتر روبرو می شوند. عملکرد نرم افزار نیز نهفته است.",
|
1279 |
"SystemCheckPhp": "نسخه php",
|
1280 |
"SystemCheckPhpPdoAndMysqli": "اطلاعات بیشتر: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
1281 |
-
"SystemCheckSplHelp": "شما نیاز به تنظیم و بازسازی PHP با کتابخانه استاندارد PHP (SPL) را فعال کنید (به طور پیش فرض).",
|
1282 |
"SystemCheckSummaryNoProblems": "هورا! هیچ مشکلی با نصب پیویک شما نیست.",
|
1283 |
"SystemCheckSummaryThereWereWarnings": "چند مشکل با سیستم شما وجود دارد. پیویک اجرا خواهد شد ولی ممکن است شما با مشکلات جزئی را تجربه کنید.",
|
1284 |
"SystemCheckTimeLimitHelp": "در وب سایت پر ترافیک، اجرای فرایند آرشیو ممکن است زمان بیشتری از آنچه در حال حاضر اجازه داده نیاز داشته باشد. در صورت لزوم، تغییر بخشنامه max_execution_time در فایل php.ini خود را.",
|
1265 |
"SystemCheckGlobHelp": "این تابع ساخته شده در میزبان خود را غیر فعال شده است. Matomo تلاش خواهد کرد این تابع برای شبیه سازی است اما ممکن است محدودیت های امنیتی بیشتر روبرو می شوند. کارکرد ممکن است تأثیر داشته است.",
|
1266 |
"SystemCheckGzcompressHelp": "شما نیاز به فعال کردن پسوند zlib می و gzcompress تابع.",
|
1267 |
"SystemCheckGzuncompressHelp": "شما نیاز به فعال کردن پسوند zlib می و gzuncompress تابع.",
|
|
|
1268 |
"SystemCheckMailHelp": "انتقادات و پیشنهادات و پیامهای رمز عبور را فراموش کرده اید بدون پست الکترونیکی () ارسال نخواهد شد.",
|
|
|
1269 |
"SystemCheckMemoryLimit": "محدودیت حافظه",
|
1270 |
"SystemCheckMemoryLimitHelp": "در یک وب سایت با ترافیک بالا، فرایند آرشیو ممکن است نیاز به حافظه بیشتری از آنچه در حال حاضر اجازه. در صورت لزوم، تغییر بخشنامه memory_limit را در فایل php.ini خود را.",
|
1271 |
"SystemCheckOpenURL": "بازکردن آدرس",
|
1276 |
"SystemCheckParseIniFileHelp": "این تابع ساخته شده در میزبان خود را غیر فعال شده است. Matomo تلاش خواهد کرد این تابع برای شبیه سازی است اما ممکن است محدودیت های امنیتی بیشتر روبرو می شوند. عملکرد نرم افزار نیز نهفته است.",
|
1277 |
"SystemCheckPhp": "نسخه php",
|
1278 |
"SystemCheckPhpPdoAndMysqli": "اطلاعات بیشتر: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
|
|
1279 |
"SystemCheckSummaryNoProblems": "هورا! هیچ مشکلی با نصب پیویک شما نیست.",
|
1280 |
"SystemCheckSummaryThereWereWarnings": "چند مشکل با سیستم شما وجود دارد. پیویک اجرا خواهد شد ولی ممکن است شما با مشکلات جزئی را تجربه کنید.",
|
1281 |
"SystemCheckTimeLimitHelp": "در وب سایت پر ترافیک، اجرای فرایند آرشیو ممکن است زمان بیشتری از آنچه در حال حاضر اجازه داده نیاز داشته باشد. در صورت لزوم، تغییر بخشنامه max_execution_time در فایل php.ini خود را.",
|
app/lang/fi.json
CHANGED
@@ -1375,7 +1375,6 @@
|
|
1375 |
"ContactUs": "Ota yhteyttä",
|
1376 |
"VisitTheForums": "Käy %1$skeskustelupalstalla%2$s ja saa apua Matomo-käyttäjien yhteisöltä",
|
1377 |
"Forums": "Foorumit",
|
1378 |
-
"ReviewMatomoTitle": "Uskotko Matomoon?",
|
1379 |
"RemindMeLater": "Muistuta myöhemmin",
|
1380 |
"NeverAskMeAgain": "Älä kysy uudestaan",
|
1381 |
"HowCanWeHelp": "Miten voimme auttaa?",
|
@@ -1383,7 +1382,8 @@
|
|
1383 |
"TrackMultipleSites": "Minun pitää seurata useita sivustoja tai aliverkkotunnuksia",
|
1384 |
"PurgeOldData": "Haluan poistaa vanhoja tietoja",
|
1385 |
"SearchHelpResources": "Hae ohjeita matomo.orgista",
|
1386 |
-
"PopularHelpTopics": "Suositut ohjeaiheet"
|
|
|
1387 |
},
|
1388 |
"GeoIp2": {
|
1389 |
"AssumingNonApache": "apache_get_modules-toimintoa ei löydy, oletettavasti verkkopalvelin on muu kuin Apache-ohjelmisto.",
|
@@ -1637,9 +1637,7 @@
|
|
1637 |
"SystemCheckGlobHelp": "Tämä sisäänrakennettu toiminnallisuus on poistettu käytöstä palvelimellasi. Matomo yrittää emuloida toimintoa, mutta saattaa törmätä uusiin turvallisuusrajoituksiin. Suorituskyky heikkenee.",
|
1638 |
"SystemCheckGzcompressHelp": "zlib-laajennus ja gzcompress-funktio täytyy olla käytössä.",
|
1639 |
"SystemCheckGzuncompressHelp": "zlib-laajennus ja gzuncompress-funktio täytyy olla käytössä.",
|
1640 |
-
"SystemCheckIconvHelp": "PHP pitää olla asennettuna iconv-lisäosan kanssa, --with-iconv",
|
1641 |
"SystemCheckMailHelp": "Palautetta ja unohtuneiden salasanojen muistutuksia ei voida lähettää ilman funktiota mail().",
|
1642 |
-
"SystemCheckMbstring": "mbstring",
|
1643 |
"SystemCheckMemoryLimit": "Muistirajoitus",
|
1644 |
"SystemCheckMemoryLimitHelp": "Jos verkkosivuilla on paljon liikennettä, arkistointiprosessi saattaa vaatia enemmän muistia.<br \/>Muokkaa asetusta memory_limit php.ini-tiedostossa tarvittaessa.",
|
1645 |
"SystemCheckNoErrorsOrWarnings": "Ei virheitä tai varoituksia",
|
@@ -1654,7 +1652,6 @@
|
|
1654 |
"SystemCheckPdoAndMysqliHelp": "Linux-palvelimella voit kääntää PHP:n seuraavilla asetuksilla: %1$s Lisää php.ini-tiedostoon seuraavat rivit: %2$s",
|
1655 |
"SystemCheckPhp": "PHP:n versio",
|
1656 |
"SystemCheckPhpPdoAndMysqli": "Lisätietoa: %1$sPHP PDO%2$s ja %3$sMYSQLI%4$s.",
|
1657 |
-
"SystemCheckSplHelp": "PHP pitää olla asennettuna \"Standard PHP Library (SPL)\"-asetuksen kanssa.",
|
1658 |
"SystemCheckSettings": "Vaadittu PHP-asetusto (php.ini)",
|
1659 |
"SystemCheckSummaryNoProblems": "Hurraa! Matomon asennuksessa ei ole ongelmia. Taputa itseäsi olkapäälle.",
|
1660 |
"SystemCheckSummaryThereWereErrors": "Oi voi... Matomo on havainnut joitakin %1$skriittisiä ongelmia%2$s asennuksen yhteydessä. %3$sNämä ongelmat tulisi korjata välittömästi.%4$s",
|
1375 |
"ContactUs": "Ota yhteyttä",
|
1376 |
"VisitTheForums": "Käy %1$skeskustelupalstalla%2$s ja saa apua Matomo-käyttäjien yhteisöltä",
|
1377 |
"Forums": "Foorumit",
|
|
|
1378 |
"RemindMeLater": "Muistuta myöhemmin",
|
1379 |
"NeverAskMeAgain": "Älä kysy uudestaan",
|
1380 |
"HowCanWeHelp": "Miten voimme auttaa?",
|
1382 |
"TrackMultipleSites": "Minun pitää seurata useita sivustoja tai aliverkkotunnuksia",
|
1383 |
"PurgeOldData": "Haluan poistaa vanhoja tietoja",
|
1384 |
"SearchHelpResources": "Hae ohjeita matomo.orgista",
|
1385 |
+
"PopularHelpTopics": "Suositut ohjeaiheet",
|
1386 |
+
"ReferBannerTitle": "Uskotko Matomoon?"
|
1387 |
},
|
1388 |
"GeoIp2": {
|
1389 |
"AssumingNonApache": "apache_get_modules-toimintoa ei löydy, oletettavasti verkkopalvelin on muu kuin Apache-ohjelmisto.",
|
1637 |
"SystemCheckGlobHelp": "Tämä sisäänrakennettu toiminnallisuus on poistettu käytöstä palvelimellasi. Matomo yrittää emuloida toimintoa, mutta saattaa törmätä uusiin turvallisuusrajoituksiin. Suorituskyky heikkenee.",
|
1638 |
"SystemCheckGzcompressHelp": "zlib-laajennus ja gzcompress-funktio täytyy olla käytössä.",
|
1639 |
"SystemCheckGzuncompressHelp": "zlib-laajennus ja gzuncompress-funktio täytyy olla käytössä.",
|
|
|
1640 |
"SystemCheckMailHelp": "Palautetta ja unohtuneiden salasanojen muistutuksia ei voida lähettää ilman funktiota mail().",
|
|
|
1641 |
"SystemCheckMemoryLimit": "Muistirajoitus",
|
1642 |
"SystemCheckMemoryLimitHelp": "Jos verkkosivuilla on paljon liikennettä, arkistointiprosessi saattaa vaatia enemmän muistia.<br \/>Muokkaa asetusta memory_limit php.ini-tiedostossa tarvittaessa.",
|
1643 |
"SystemCheckNoErrorsOrWarnings": "Ei virheitä tai varoituksia",
|
1652 |
"SystemCheckPdoAndMysqliHelp": "Linux-palvelimella voit kääntää PHP:n seuraavilla asetuksilla: %1$s Lisää php.ini-tiedostoon seuraavat rivit: %2$s",
|
1653 |
"SystemCheckPhp": "PHP:n versio",
|
1654 |
"SystemCheckPhpPdoAndMysqli": "Lisätietoa: %1$sPHP PDO%2$s ja %3$sMYSQLI%4$s.",
|
|
|
1655 |
"SystemCheckSettings": "Vaadittu PHP-asetusto (php.ini)",
|
1656 |
"SystemCheckSummaryNoProblems": "Hurraa! Matomon asennuksessa ei ole ongelmia. Taputa itseäsi olkapäälle.",
|
1657 |
"SystemCheckSummaryThereWereErrors": "Oi voi... Matomo on havainnut joitakin %1$skriittisiä ongelmia%2$s asennuksen yhteydessä. %3$sNämä ongelmat tulisi korjata välittömästi.%4$s",
|
app/lang/fr.json
CHANGED
@@ -1484,7 +1484,6 @@
|
|
1484 |
"ContactUs": "Nous contacter",
|
1485 |
"VisitTheForums": "Visitez les %1$sForums%2$s et obtenez de l'aide de la communauté d'utilisateurs Matomo.",
|
1486 |
"Forums": "Forums",
|
1487 |
-
"ReviewMatomoTitle": "Vous croyez en Matomo ?",
|
1488 |
"PleaseLeaveExternalReviewForMatomo": "Partagez votre avis sur un de ces sites web et encouragez les autres à se joindre à notre révolution des données.",
|
1489 |
"RemindMeLater": "Me le rappeler plus tard",
|
1490 |
"NeverAskMeAgain": "Ne plus me demander",
|
@@ -1494,7 +1493,8 @@
|
|
1494 |
"RemoveOtherLabel": "Je veux voir mes 'Autres' données",
|
1495 |
"PurgeOldData": "Je veux supprimer d'anciennes données",
|
1496 |
"SearchHelpResources": "Rechercher dans les ressources de matomo.org",
|
1497 |
-
"PopularHelpTopics": "Rubriques d'aide les plus populaires"
|
|
|
1498 |
},
|
1499 |
"GeoIp2": {
|
1500 |
"AssumingNonApache": "Impossible de trouver la fonction apache_get_modules, nous supposons que le serveur web n'est pas Apache.",
|
@@ -1796,11 +1796,8 @@
|
|
1796 |
"SystemCheckGzcompressHelp": "Vous devez activer l'extension zlib et la fonction gzcompress",
|
1797 |
"SystemCheckGzuncompressHelp": "Vous devez activer l'extension zlib et la fonction gzuncompress",
|
1798 |
"SystemCheckHashHelp": "Vous devez reconfigurer et re-compiler PHP en avec le support de hash() activé en enlevant l'option --disable-hash.",
|
1799 |
-
"SystemCheckIconvHelp": "Vous devez configurer PHP et le recompiler avec le support \"iconv\" activé, --with-iconv.",
|
1800 |
"SystemCheckJsonHelp": "L'extension php-json est nécessaire pour que Matomo puisse lire et écrire des données au format JSON.",
|
1801 |
"SystemCheckMailHelp": "Les Feedback (commentaires) et mots de passe perdus ne pourront être envoyés sans la fonciton mail().",
|
1802 |
-
"SystemCheckMbstring": "mbstring",
|
1803 |
-
"SystemCheckMbstringHelp": "L'extension mbstring est nécessaire pour gérer les caractères multi-octet dans l'interface utilisateur et les réponses API. Merci également de vérifier que mbstring.func_overload est paramétré à \"0\" dans php.ini.",
|
1804 |
"SystemCheckMemoryLimit": "Limite mémoire",
|
1805 |
"SystemCheckMemoryLimitHelp": "Sur un site à trafic important, le processus d'archivage peut prendre plus de mémoire que la limite actuelle autorisée.<br \/>Référez-vous à la configuration memory_limit de votre php.ini si nécessaire.",
|
1806 |
"SystemCheckMemoryNoMemoryLimitSet": "Il n'y a pas de limite de mémoire",
|
@@ -1817,7 +1814,6 @@
|
|
1817 |
"SystemCheckPdoAndMysqliHelp": "Sur un serveur linux vous pouvez compiler PHP avec les options suivantes : %1$s Dans votre php.ini, ajoutez les lignes suivantes: %2$s",
|
1818 |
"SystemCheckPhp": "Version PHP",
|
1819 |
"SystemCheckPhpPdoAndMysqli": "Plus d'informations sur : %1$sPHP PDO%2$s et %3$sMYSQLI%4$s.",
|
1820 |
-
"SystemCheckSplHelp": "Vous devez configurer et recompiler PHP avec la librairie standard (par défaut).",
|
1821 |
"SystemCheckSettings": "Configuration PHP requise (php.ini)",
|
1822 |
"SystemCheckSummaryNoProblems": "Génial ! Il n'y a aucun problème avec votre installation de Matomo. Donnez-vous une tape dans le dos.",
|
1823 |
"SystemCheckSummaryThereWereErrors": "Oh-oh ! Matomo a détecté des %1$sproblèmes critiques%2$s avec votre installation de Matomo. %3$sCes problèmes critiques doivent être fixés immédiatement.%4$s",
|
1484 |
"ContactUs": "Nous contacter",
|
1485 |
"VisitTheForums": "Visitez les %1$sForums%2$s et obtenez de l'aide de la communauté d'utilisateurs Matomo.",
|
1486 |
"Forums": "Forums",
|
|
|
1487 |
"PleaseLeaveExternalReviewForMatomo": "Partagez votre avis sur un de ces sites web et encouragez les autres à se joindre à notre révolution des données.",
|
1488 |
"RemindMeLater": "Me le rappeler plus tard",
|
1489 |
"NeverAskMeAgain": "Ne plus me demander",
|
1493 |
"RemoveOtherLabel": "Je veux voir mes 'Autres' données",
|
1494 |
"PurgeOldData": "Je veux supprimer d'anciennes données",
|
1495 |
"SearchHelpResources": "Rechercher dans les ressources de matomo.org",
|
1496 |
+
"PopularHelpTopics": "Rubriques d'aide les plus populaires",
|
1497 |
+
"ReferBannerTitle": "Vous croyez en Matomo ?"
|
1498 |
},
|
1499 |
"GeoIp2": {
|
1500 |
"AssumingNonApache": "Impossible de trouver la fonction apache_get_modules, nous supposons que le serveur web n'est pas Apache.",
|
1796 |
"SystemCheckGzcompressHelp": "Vous devez activer l'extension zlib et la fonction gzcompress",
|
1797 |
"SystemCheckGzuncompressHelp": "Vous devez activer l'extension zlib et la fonction gzuncompress",
|
1798 |
"SystemCheckHashHelp": "Vous devez reconfigurer et re-compiler PHP en avec le support de hash() activé en enlevant l'option --disable-hash.",
|
|
|
1799 |
"SystemCheckJsonHelp": "L'extension php-json est nécessaire pour que Matomo puisse lire et écrire des données au format JSON.",
|
1800 |
"SystemCheckMailHelp": "Les Feedback (commentaires) et mots de passe perdus ne pourront être envoyés sans la fonciton mail().",
|
|
|
|
|
1801 |
"SystemCheckMemoryLimit": "Limite mémoire",
|
1802 |
"SystemCheckMemoryLimitHelp": "Sur un site à trafic important, le processus d'archivage peut prendre plus de mémoire que la limite actuelle autorisée.<br \/>Référez-vous à la configuration memory_limit de votre php.ini si nécessaire.",
|
1803 |
"SystemCheckMemoryNoMemoryLimitSet": "Il n'y a pas de limite de mémoire",
|
1814 |
"SystemCheckPdoAndMysqliHelp": "Sur un serveur linux vous pouvez compiler PHP avec les options suivantes : %1$s Dans votre php.ini, ajoutez les lignes suivantes: %2$s",
|
1815 |
"SystemCheckPhp": "Version PHP",
|
1816 |
"SystemCheckPhpPdoAndMysqli": "Plus d'informations sur : %1$sPHP PDO%2$s et %3$sMYSQLI%4$s.",
|
|
|
1817 |
"SystemCheckSettings": "Configuration PHP requise (php.ini)",
|
1818 |
"SystemCheckSummaryNoProblems": "Génial ! Il n'y a aucun problème avec votre installation de Matomo. Donnez-vous une tape dans le dos.",
|
1819 |
"SystemCheckSummaryThereWereErrors": "Oh-oh ! Matomo a détecté des %1$sproblèmes critiques%2$s avec votre installation de Matomo. %3$sCes problèmes critiques doivent être fixés immédiatement.%4$s",
|
app/lang/hi.json
CHANGED
@@ -1040,9 +1040,7 @@
|
|
1040 |
"SystemCheckGlobHelp": "यह अंतर्निर्मित फलन अपने मेजबान में अक्षम हो गया है. Matomo इस फलन का अनुकरण का प्रयास करेगा लेकिन आगे सुरक्षा प्रतिबंधों का सामना कर सकते है. कार्यक्षमता को प्रभावित किया जा सकता है.",
|
1041 |
"SystemCheckGzcompressHelp": "आप zlib विस्तार और gzcompress फलन को सक्षम करने की आवश्यकता है.",
|
1042 |
"SystemCheckGzuncompressHelp": "आप zlib विस्तार और gzcompress फलन को सक्षम करने की आवश्यकता है.",
|
1043 |
-
"SystemCheckIconvHelp": "आप PHP कॉन्फ़िगर और पुनर्निर्माण की जरूरत \"iconv\" समर्थन सक्षम के साथ - साथ iconv.",
|
1044 |
"SystemCheckMailHelp": "प्रतिक्रिया और लॉस्ट पासवर्ड संदेशों को बिना मेल के ()भेजा नहीं जाएगा.",
|
1045 |
-
"SystemCheckMbstring": "एमबी स्ट्रिंग",
|
1046 |
"SystemCheckMemoryLimit": "स्मृति सीमा",
|
1047 |
"SystemCheckMemoryLimitHelp": "एक उच्च यातायात वेबसाइट पर, पुरालेखण की प्रक्रिया वर्तमान अनुमति से अधिक स्मृति की आवश्यकता हो सकती. यदि आवश्यक हो, अपने php.ini फ़ाइल में memory_limit निर्देश बदलते हैं.",
|
1048 |
"SystemCheckOpenURL": "ओपन यूआरएल",
|
@@ -1055,7 +1053,6 @@
|
|
1055 |
"SystemCheckPdoAndMysqliHelp": "एक लिनक्स सर्वर पर आप निम्नलिखित विकल्पों के साथ php का संकलन कर सकते हैं:%1$s अपने php.ini में निम्नलिखित लाइनें जोड़ने:%2$s",
|
1056 |
"SystemCheckPhp": "PHP संस्करण",
|
1057 |
"SystemCheckPhpPdoAndMysqli": "पर अधिक जानकारी: %1$s PHP पीडीओ %2$s और %3$s mysqli %4$s.",
|
1058 |
-
"SystemCheckSplHelp": "आप मानक PHP पुस्तकालय (एसपीएल) सक्षम (डिफ़ॉल्ट रूप से) के साथ PHP कॉन्फ़िगर और पुनर्निर्माण की जरूरत है.",
|
1059 |
"SystemCheckSettings": "आवश्यक PHP विन्यास (php.ini)",
|
1060 |
"SystemCheckSummaryNoProblems": "हुज़्ज़ाह! अपने Matomo सेटअप के साथ कोई समस्या नहीं हैं. अपने आप को पीठ पर एक पॅट दे.",
|
1061 |
"SystemCheckSummaryThereWereErrors": "ओह! Matomo अपने Matomo स्थापना के साथ कुछ %1$sगंभीर समस्याओं%2$s का पता लगाया गया है. %3$sये समस्याएँ तुरंत निर्धारित की जानी चाहिए.%4$s",
|
1040 |
"SystemCheckGlobHelp": "यह अंतर्निर्मित फलन अपने मेजबान में अक्षम हो गया है. Matomo इस फलन का अनुकरण का प्रयास करेगा लेकिन आगे सुरक्षा प्रतिबंधों का सामना कर सकते है. कार्यक्षमता को प्रभावित किया जा सकता है.",
|
1041 |
"SystemCheckGzcompressHelp": "आप zlib विस्तार और gzcompress फलन को सक्षम करने की आवश्यकता है.",
|
1042 |
"SystemCheckGzuncompressHelp": "आप zlib विस्तार और gzcompress फलन को सक्षम करने की आवश्यकता है.",
|
|
|
1043 |
"SystemCheckMailHelp": "प्रतिक्रिया और लॉस्ट पासवर्ड संदेशों को बिना मेल के ()भेजा नहीं जाएगा.",
|
|
|
1044 |
"SystemCheckMemoryLimit": "स्मृति सीमा",
|
1045 |
"SystemCheckMemoryLimitHelp": "एक उच्च यातायात वेबसाइट पर, पुरालेखण की प्रक्रिया वर्तमान अनुमति से अधिक स्मृति की आवश्यकता हो सकती. यदि आवश्यक हो, अपने php.ini फ़ाइल में memory_limit निर्देश बदलते हैं.",
|
1046 |
"SystemCheckOpenURL": "ओपन यूआरएल",
|
1053 |
"SystemCheckPdoAndMysqliHelp": "एक लिनक्स सर्वर पर आप निम्नलिखित विकल्पों के साथ php का संकलन कर सकते हैं:%1$s अपने php.ini में निम्नलिखित लाइनें जोड़ने:%2$s",
|
1054 |
"SystemCheckPhp": "PHP संस्करण",
|
1055 |
"SystemCheckPhpPdoAndMysqli": "पर अधिक जानकारी: %1$s PHP पीडीओ %2$s और %3$s mysqli %4$s.",
|
|
|
1056 |
"SystemCheckSettings": "आवश्यक PHP विन्यास (php.ini)",
|
1057 |
"SystemCheckSummaryNoProblems": "हुज़्ज़ाह! अपने Matomo सेटअप के साथ कोई समस्या नहीं हैं. अपने आप को पीठ पर एक पॅट दे.",
|
1058 |
"SystemCheckSummaryThereWereErrors": "ओह! Matomo अपने Matomo स्थापना के साथ कुछ %1$sगंभीर समस्याओं%2$s का पता लगाया गया है. %3$sये समस्याएँ तुरंत निर्धारित की जानी चाहिए.%4$s",
|
app/lang/hu.json
CHANGED
@@ -835,9 +835,7 @@
|
|
835 |
"SystemCheckGlobHelp": "Ez a beépített funkció le van tiltva a szervereden. Matomo megpróbálja emulálni ezt a funkciót, de további biztonsági korlátozások akadályozhatják ezt. A Matomo működésére kihatással lehet mindez.",
|
836 |
"SystemCheckGzcompressHelp": "Engedélyezned kell a zlib kiterjesztést és a gzcompress funkciót.",
|
837 |
"SystemCheckGzuncompressHelp": "Engedélyezned kell a zlib kiterjesztést és a gzuncompress funkciót.",
|
838 |
-
"SystemCheckIconvHelp": "Konfigurálni és rebuildelni kell a PHP-t az \"iconv\" támogatás engedélyezésével: --with-iconv",
|
839 |
"SystemCheckMailHelp": "A Matomo fejlesztőknek szóló visszajelzés és az elveszett jelszó pótlása céljából generált e-mail üzenetek nem lesznek elküldve a mail() nélkül.",
|
840 |
-
"SystemCheckMbstring": "mbstring",
|
841 |
"SystemCheckMemoryLimit": "Memória limit",
|
842 |
"SystemCheckMemoryLimitHelp": "Egy nagy forgalmú weboldalon az archiválási folyamathoz több memória kell, mint a jelenleg engedélyezett. Ha szükséges, változtasd meg a memory_limit direktívát a php.ini fájlodban.",
|
843 |
"SystemCheckOpenURL": "URL megnyitása",
|
@@ -849,7 +847,6 @@
|
|
849 |
"SystemCheckPdoAndMysqliHelp": "Linux szerveren a következő opciókkal fordíthatja a php-t: %1$s majd a php.ini fájlban a következő sorokat kell hozzáadni: %2$s",
|
850 |
"SystemCheckPhp": "PHP verzió",
|
851 |
"SystemCheckPhpPdoAndMysqli": "További információ a %1$sPHP PDO-ról%2$sés %3$sMYSQLI-ról%4$s.",
|
852 |
-
"SystemCheckSplHelp": "Konfigurálni és rebuildelni kell a PHP-t a Standard PHP Library (SPL) engedélyezésével (alapértelmezettként).",
|
853 |
"SystemCheckTimeLimitHelp": "Egy nagy forgalmú weboldalon az archiválási folyamat végrehajtásához több idő kell, mint a jelenleg engedélyezett. Ha szükséges, változtasd meg a max_execution_time direktívát a php.ini fájlodban.",
|
854 |
"SystemCheckTracker": "Tracker státusz",
|
855 |
"SystemCheckWarnDomHelp": "Engedélyezned kell a \"dom\" kiterjesztést (például a \"php-dom\" és\/vagy a \"php-xml\" csomag installálásával).",
|
835 |
"SystemCheckGlobHelp": "Ez a beépített funkció le van tiltva a szervereden. Matomo megpróbálja emulálni ezt a funkciót, de további biztonsági korlátozások akadályozhatják ezt. A Matomo működésére kihatással lehet mindez.",
|
836 |
"SystemCheckGzcompressHelp": "Engedélyezned kell a zlib kiterjesztést és a gzcompress funkciót.",
|
837 |
"SystemCheckGzuncompressHelp": "Engedélyezned kell a zlib kiterjesztést és a gzuncompress funkciót.",
|
|
|
838 |
"SystemCheckMailHelp": "A Matomo fejlesztőknek szóló visszajelzés és az elveszett jelszó pótlása céljából generált e-mail üzenetek nem lesznek elküldve a mail() nélkül.",
|
|
|
839 |
"SystemCheckMemoryLimit": "Memória limit",
|
840 |
"SystemCheckMemoryLimitHelp": "Egy nagy forgalmú weboldalon az archiválási folyamathoz több memória kell, mint a jelenleg engedélyezett. Ha szükséges, változtasd meg a memory_limit direktívát a php.ini fájlodban.",
|
841 |
"SystemCheckOpenURL": "URL megnyitása",
|
847 |
"SystemCheckPdoAndMysqliHelp": "Linux szerveren a következő opciókkal fordíthatja a php-t: %1$s majd a php.ini fájlban a következő sorokat kell hozzáadni: %2$s",
|
848 |
"SystemCheckPhp": "PHP verzió",
|
849 |
"SystemCheckPhpPdoAndMysqli": "További információ a %1$sPHP PDO-ról%2$sés %3$sMYSQLI-ról%4$s.",
|
|
|
850 |
"SystemCheckTimeLimitHelp": "Egy nagy forgalmú weboldalon az archiválási folyamat végrehajtásához több idő kell, mint a jelenleg engedélyezett. Ha szükséges, változtasd meg a max_execution_time direktívát a php.ini fájlodban.",
|
851 |
"SystemCheckTracker": "Tracker státusz",
|
852 |
"SystemCheckWarnDomHelp": "Engedélyezned kell a \"dom\" kiterjesztést (például a \"php-dom\" és\/vagy a \"php-xml\" csomag installálásával).",
|
app/lang/id.json
CHANGED
@@ -1231,9 +1231,7 @@
|
|
1231 |
"SystemCheckGlobHelp": "Fungsi bawaan ini telah dimatikan dalam inang Anda. Matomo akan mencoba untuk meniru fungsi ini namun mungkin menghadapi pembatasan keamanan lebih lanjut. Fungsionalitas mungkin terkena dampak.",
|
1232 |
"SystemCheckGzcompressHelp": "Anda dapat mengaktifkan ekstensi zlib dan fungsi gzcompress.",
|
1233 |
"SystemCheckGzuncompressHelp": "Anda dapat mengaktifkam ekstensi zlib dan fungsi gzuncompress.",
|
1234 |
-
"SystemCheckIconvHelp": "Anda dapat mengonfigurasi dan membangun ulang PHP dengan dukungan \"iconv\" diaktifkan, --with-iconv.",
|
1235 |
"SystemCheckMailHelp": "Pesan Umpanbalik dan Pemulihan Sandi tidak terkirim tanpa fungsi mail().",
|
1236 |
-
"SystemCheckMbstring": "mbstring",
|
1237 |
"SystemCheckMemoryLimit": "Batas Memori",
|
1238 |
"SystemCheckMemoryLimitHelp": "Dalam situs dengan kunjungan tinggi, kemungkinan pengarsipan membutuhkan memori lebih banyak daripada yang diperbolehkan saat ini. Bila dibutuhkan, ubah nilai memory_limit dalam berkas php.ini Anda.",
|
1239 |
"SystemCheckOpenURL": "Buka URL",
|
@@ -1245,7 +1243,6 @@
|
|
1245 |
"SystemCheckPdoAndMysqliHelp": "Dalam peladen Linux Anda dapat mengompilasi php dengan opsi berikut: %1$s Di php.ini Anda, tambah baris berikut: %2$s",
|
1246 |
"SystemCheckPhp": "Versi PHP",
|
1247 |
"SystemCheckPhpPdoAndMysqli": "Informasi lebih lanjut di: %1$sPHP PDO%2$s dan %3$sMYSQLI%4$s.",
|
1248 |
-
"SystemCheckSplHelp": "Anda dapat mengonfigurasi dan membangun ulang PHP dengan Standard PHP Library (SPL) diaktifkan (secara asali).",
|
1249 |
"SystemCheckSummaryNoProblems": "Hore! Tidak ada permasalahan dalam pemasangan Matomo Anda. Beri diri Anda sebuah tepukan punggung.",
|
1250 |
"SystemCheckSummaryThereWereErrors": "Uh-oh! Matomo mendeteksi beberapa %1$spermsalahan kritis%2$s dalam with your Matomo setup. %3$sPermasalahan tersebut harus segera diperbaiki segera.%4$s",
|
1251 |
"SystemCheckSummaryThereWereWarnings": "Terdapat beberapa permasalahan dalam sistem Anda. Matomo akan berjalan, tetapi Anda mungkin mengalami beberapa permasalahan kecil.",
|
1231 |
"SystemCheckGlobHelp": "Fungsi bawaan ini telah dimatikan dalam inang Anda. Matomo akan mencoba untuk meniru fungsi ini namun mungkin menghadapi pembatasan keamanan lebih lanjut. Fungsionalitas mungkin terkena dampak.",
|
1232 |
"SystemCheckGzcompressHelp": "Anda dapat mengaktifkan ekstensi zlib dan fungsi gzcompress.",
|
1233 |
"SystemCheckGzuncompressHelp": "Anda dapat mengaktifkam ekstensi zlib dan fungsi gzuncompress.",
|
|
|
1234 |
"SystemCheckMailHelp": "Pesan Umpanbalik dan Pemulihan Sandi tidak terkirim tanpa fungsi mail().",
|
|
|
1235 |
"SystemCheckMemoryLimit": "Batas Memori",
|
1236 |
"SystemCheckMemoryLimitHelp": "Dalam situs dengan kunjungan tinggi, kemungkinan pengarsipan membutuhkan memori lebih banyak daripada yang diperbolehkan saat ini. Bila dibutuhkan, ubah nilai memory_limit dalam berkas php.ini Anda.",
|
1237 |
"SystemCheckOpenURL": "Buka URL",
|
1243 |
"SystemCheckPdoAndMysqliHelp": "Dalam peladen Linux Anda dapat mengompilasi php dengan opsi berikut: %1$s Di php.ini Anda, tambah baris berikut: %2$s",
|
1244 |
"SystemCheckPhp": "Versi PHP",
|
1245 |
"SystemCheckPhpPdoAndMysqli": "Informasi lebih lanjut di: %1$sPHP PDO%2$s dan %3$sMYSQLI%4$s.",
|
|
|
1246 |
"SystemCheckSummaryNoProblems": "Hore! Tidak ada permasalahan dalam pemasangan Matomo Anda. Beri diri Anda sebuah tepukan punggung.",
|
1247 |
"SystemCheckSummaryThereWereErrors": "Uh-oh! Matomo mendeteksi beberapa %1$spermsalahan kritis%2$s dalam with your Matomo setup. %3$sPermasalahan tersebut harus segera diperbaiki segera.%4$s",
|
1248 |
"SystemCheckSummaryThereWereWarnings": "Terdapat beberapa permasalahan dalam sistem Anda. Matomo akan berjalan, tetapi Anda mungkin mengalami beberapa permasalahan kecil.",
|
app/lang/it.json
CHANGED
@@ -524,7 +524,8 @@
|
|
524 |
"Custom": "Personalizzata",
|
525 |
"PreviousPeriod": "Periodo Precedente",
|
526 |
"PreviousYear": "Anno Precedente",
|
527 |
-
"ViewAccessRequired": "Il token_auth utilizzato ha troppi accessi per essere usato in una richiesta URL non-API. Utilizza una password specifica per l'app per un utente che dispone solo dell'accesso in visualizzazione."
|
|
|
528 |
},
|
529 |
"Mobile": {
|
530 |
"AboutPiwikMobile": "Informazioni su Matomo Mobile",
|
@@ -915,7 +916,24 @@
|
|
915 |
"TrackingFailuresEmail1": "Questo è solo per farti sapere che %s diversi tipi di errori di tracking si sono verificati negli ultimi giorni.",
|
916 |
"TrackingFailuresEmail2": "Per visualizzare tutte le richieste di tracking fallite %1$sclicca qui%2$s.",
|
917 |
"ImportFromGoogleAnalytics": "Importazione da Google Analytics",
|
918 |
-
"ImportFromGoogleAnalyticsDescription": "Se hai una proprietà Google Analytics e stai passando a Matomo, puoi importare i dati esistenti utilizzando il plugin %1$sGoogleAnalyticsImporter%2$s."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
919 |
},
|
920 |
"CoreHome": {
|
921 |
"CategoryNoData": "Non ci sono dati in questa categoria. Prova ad includere tutte le categorie.",
|
@@ -1139,7 +1157,7 @@
|
|
1139 |
"DisablingIncompatiblePlugins": "Disabilitazione plugins incompatibili: %s",
|
1140 |
"DownloadingUpdateFromX": "Sto scaricando gli aggiornamenti da %s",
|
1141 |
"DownloadX": "Scarica %s",
|
1142 |
-
"UpdateLog": "
|
1143 |
"EmptyDatabaseError": "Il database %s è pieno. Devi modificare il tuo file di configurazione Matomo.",
|
1144 |
"ErrorDIYHelp": "Se sei un utente avanzato e incontri un errore nell'aggiornamento del database:",
|
1145 |
"ErrorDIYHelp_1": "identifica e correggi la causa del problema (es. memory_limit o max_execution_time)",
|
@@ -1494,7 +1512,7 @@
|
|
1494 |
"ContactUs": "Contattaci",
|
1495 |
"VisitTheForums": "Visita il %1$s Forum%2$s e ottieni aiuto dalla comunità degli utenti Matomo",
|
1496 |
"Forums": "Forum",
|
1497 |
-
"ReviewMatomoTitle": "
|
1498 |
"PleaseLeaveExternalReviewForMatomo": "Condividi ciò che pensi su uno di questi siti e ispira altri a unirsi alla nostra rivoluzione dei dati.",
|
1499 |
"RemindMeLater": "Ricordamelo più tardi",
|
1500 |
"NeverAskMeAgain": "Non chiedermelo di nuovo",
|
@@ -1506,11 +1524,12 @@
|
|
1506 |
"SearchHelpResources": "Cerca nelle risorse di matomo.org per aiuto",
|
1507 |
"PopularHelpTopics": "Argomenti di aiuto popolari",
|
1508 |
"ReferMatomo": "Parla di Matomo",
|
1509 |
-
"ReferBannerTitle": "
|
1510 |
-
"ReferBannerLonger": "
|
1511 |
"ReferBannerEmailShareSubject": "Indirizzali adesso verso Matomo Analytics per riprendere il controllo!",
|
1512 |
"ReferBannerEmailShareBody": "Scelgo Matomo, un'alternativa etica a Google Analytics che mi dà al 100%% la proprietà dei dati e protegge i dati dei visitatori del mio sito web.\nCondivido questo messaggio nella speranza che anche tu riprenderai il potere da Google e acquisirai la completa proprietà dei tuoi dati.\n\nDai un'occhiata a Matomo su https:\/\/matomo.org",
|
1513 |
-
"ReferBannerSocialShareText": "Se stai utilizzando Google Analytics, mantieni il controllo passando adesso a un'alternativa etica come Matomo!"
|
|
|
1514 |
},
|
1515 |
"GeoIp2": {
|
1516 |
"AssumingNonApache": "Impossibile trovare la funzione apache_get_modules, si suppone che sia un server non-Apache.",
|
@@ -1836,11 +1855,8 @@
|
|
1836 |
"SystemCheckGzcompressHelp": "Devi abilitare l'estensione zlib e la funzione gzcompress.",
|
1837 |
"SystemCheckGzuncompressHelp": "Devi abilitare l'estensione zlib e la funzione gzuncompress.",
|
1838 |
"SystemCheckHashHelp": "Devi configurare e ricostruire PHP con il supporto hash() abilitato escludendo l'opzione 'disabilita hash'.",
|
1839 |
-
"SystemCheckIconvHelp": "Hai bisogno di configurare e fare il rebuild del PHP con il supporto \"iconv\" abilitato, --with-iconv",
|
1840 |
"SystemCheckJsonHelp": "L'estensione php-json è richiesta perché Matomo legga e scriva i dati JSON.",
|
1841 |
"SystemCheckMailHelp": "Feedback e messaggi su Password Perdute non saranno inviati senza che sia disponibile la funzione mail().",
|
1842 |
-
"SystemCheckMbstring": "mbstring",
|
1843 |
-
"SystemCheckMbstringHelp": "L'estensione mbstring è necessaria per gestire i caratteri multibyte nell'interfaccia Utente e le risposte API. Inoltre, controlla che mbstring.func_overload sia impostato su \"0\" nel php.ini.",
|
1844 |
"SystemCheckMemoryLimit": "Memoria massima",
|
1845 |
"SystemCheckMemoryLimitHelp": "Su un sito web con grande traffico, il processo di archiviazione potrebbe richiedere più memoria di quella attualmente consentita.<br \/>Cambia la direttiva memory_limmit nel tuo file php.ini se necessario.",
|
1846 |
"SystemCheckMemoryNoMemoryLimitSet": "Non è stato impostato il limite di memoria",
|
@@ -1857,7 +1873,6 @@
|
|
1857 |
"SystemCheckPdoAndMysqliHelp": "Su un server GNU\/Linux puoi compilare PHP con le seguenti opzioni: %1$s. Nel tuo php.ini, aggiungi le seguenti righe: %2$s",
|
1858 |
"SystemCheckPhp": "Versione PHP",
|
1859 |
"SystemCheckPhpPdoAndMysqli": "Maggiori informazioni a riguardo: %1$sPHP PDO%2$s e %3$sMYSQLI%4$s.",
|
1860 |
-
"SystemCheckSplHelp": "Devi configurare e ricostruire il PHP con la libreria Standard PHP (SPL)abilitata (di default).",
|
1861 |
"SystemCheckSessionHelp": "Devi configurare e ricostruire PHP con il supporto \"sessione\" abilitato (non usare --disabilita-sessione).",
|
1862 |
"SystemCheckSettings": "Richiesta configurazione PHP (php.ini)",
|
1863 |
"SystemCheckSummaryNoProblems": "Evviva! Non ci sono problemi con le impostazioni di Matomo. Datti una pacca sulla spalla.",
|
@@ -3912,6 +3927,8 @@
|
|
3912 |
"OnlyMatchedUrlsAllowedHelp": "Quando abilitato, Matomo traccerà le azioni interne solo quando l'URL Pagina è una delle URL conosciute del sito. Questo evita che la gente spammi le tue statistiche con URL di altri siti web.",
|
3913 |
"OnlyMatchedUrlsAllowedHelpExamples": "Il dominio e il percorso devono essere una corrispondenza esatta e ogni sottodominio valido deve essere specificato separatamente. Ad esempio, quando gli URL conosciuti sono \"http:\/\/example.com\/path\" e \"http:\/\/good.example.com\", le richieste di tracciamento per \"http:\/\/example.com\/otherpath\" o \"http:\/\/bad.example.com 'sono ignorate.",
|
3914 |
"WebsitesManagement": "Gestisci siti web",
|
|
|
|
|
3915 |
"XManagement": "Gestione %s",
|
3916 |
"ChooseMeasurableTypeHeadline": "Cosa intendi misurare",
|
3917 |
"YouCurrentlyHaveAccessToNWebsites": "Al momento hai accesso a %s siti.",
|
@@ -4354,9 +4371,7 @@
|
|
4354 |
"ScrollReachTriggerHelp": "Questo trigger viene attivato quando un utente scorre o ridimensiona la finestra del browser corrente. Il trigger non viene attivato quando l'utente scorre all'interno di un determinato elemento. Non si attiverà tutte le volte che viene raggiunta una determinata posizione di scorrimento, ma solo la prima volta che viene raggiunta la posizione configurata.",
|
4355 |
"ScrollReachTriggerName": "Fine Scroll",
|
4356 |
"ScrollSourceVariableDescription": "Se la posizione di scorrimento è stata originata da uno scorrimento utente o da un ridimensionamento del browser. Il valore è \"scorrimento\" o \"ridimensionamento\".",
|
4357 |
-
"ScrollSourceVariableName": "Scroll Sorgente",
|
4358 |
"ScrollTopPixelVariableDescription": "Di quanto, in pixel, l'utente ha scrollato in verticale, per esempio \"592\".",
|
4359 |
-
"ScrollTopPixelVariableName": "Scroll Top Pixel",
|
4360 |
"ScrollVerticalPercentageVariableDescription": "Di quanto l'utente ha, attualmente, fatto scorrere in verticale la pagina, per esempio \"75,59\" per \"75,59%%\".",
|
4361 |
"ScrollVerticalPercentageVariableName": "Percentuale Scroll Verticale",
|
4362 |
"SentryRavenTagDescription": "Sentry.io è uno strumento di tracciamento degli errori Open-Source che ti consente di rilevare gli errori che si verificano sul tuo sito web.",
|
524 |
"Custom": "Personalizzata",
|
525 |
"PreviousPeriod": "Periodo Precedente",
|
526 |
"PreviousYear": "Anno Precedente",
|
527 |
+
"ViewAccessRequired": "Il token_auth utilizzato ha troppi accessi per essere usato in una richiesta URL non-API. Utilizza una password specifica per l'app per un utente che dispone solo dell'accesso in visualizzazione.",
|
528 |
+
"Reasons": "Ragioni"
|
529 |
},
|
530 |
"Mobile": {
|
531 |
"AboutPiwikMobile": "Informazioni su Matomo Mobile",
|
916 |
"TrackingFailuresEmail1": "Questo è solo per farti sapere che %s diversi tipi di errori di tracking si sono verificati negli ultimi giorni.",
|
917 |
"TrackingFailuresEmail2": "Per visualizzare tutte le richieste di tracking fallite %1$sclicca qui%2$s.",
|
918 |
"ImportFromGoogleAnalytics": "Importazione da Google Analytics",
|
919 |
+
"ImportFromGoogleAnalyticsDescription": "Se hai una proprietà Google Analytics e stai passando a Matomo, puoi importare i dati esistenti utilizzando il plugin %1$sGoogleAnalyticsImporter%2$s.",
|
920 |
+
"SecurityNotificationEmailSubject": "Notifica di Sicurezza",
|
921 |
+
"SecurityNotificationRecoveryCodesShowedBody": "Qualcuno ha visualizzato i codici di ripristino dell'autenticazione a due-fattori del tuo account.",
|
922 |
+
"SecurityNotificationRecoveryCodesRegeneratedBody": "Qualcuno ha generato nuovi codici di ripristino dell'autenticazione a due-fattori per il tuo account.",
|
923 |
+
"SecurityNotificationTwoFactorAuthEnabledBody": "Qualcuno ha abilitato l'autenticazione a due-fattori nel tuo account.",
|
924 |
+
"SecurityNotificationTwoFactorAuthDisabledBody": "Qualcuno ha disabilitato l'autenticazione a due-fattori nel tuo account.",
|
925 |
+
"SecurityNotificationTokenAuthCreatedBody": "Qualcuno ha creato un token di autorizzazione (descrizione: %s) nel tuo account. Se non sei stato tu, cancella il token.",
|
926 |
+
"SecurityNotificationTokenAuthDeletedBody": "Qualcuno ha eliminato un token di autorizzazione (descrizione: %s) nel tuo account.",
|
927 |
+
"SecurityNotificationAllTokenAuthDeletedBody": "Qualcuno ha eliminato tutti i token di autorizzazione nel tuo account.",
|
928 |
+
"SecurityNotificationSettingsChangedByUserBody": "Qualcuno ha modificato le impostazioni del sistema. Impostazioni interessate: %s.",
|
929 |
+
"SecurityNotificationSettingsChangedByOtherSuperUserBody": "Un altro super user (%1$s) ha modificato le impostazioni di sistema. Impostazioni interessate: %2$s. Se conosci questa attività, continua. Se non riconosci questa attività, contatta gli altri super user.",
|
930 |
+
"SecurityNotificationUserCreatedBody": "Qualcuno ha creato un nuovo utente (login: %s) nel tuo account.",
|
931 |
+
"SecurityNotificationUserDeletedBody": "Qualcuno ha eliminato un utente (login: %s) nel tuo account.",
|
932 |
+
"SecurityNotificationIfItWasYou": "Se sei stato tu, continua. Se non riconosci questa attività, reimposta la password.",
|
933 |
+
"SecurityNotificationCheckTwoFactor": "Controlla la tua app o il dispositivo di autenticazione a due-fattori.",
|
934 |
+
"BruteForce": "Forza Bruta",
|
935 |
+
"TwoFactorAuth": "Autorizzazione a due-fattori",
|
936 |
+
"Cors": "Cors"
|
937 |
},
|
938 |
"CoreHome": {
|
939 |
"CategoryNoData": "Non ci sono dati in questa categoria. Prova ad includere tutte le categorie.",
|
1157 |
"DisablingIncompatiblePlugins": "Disabilitazione plugins incompatibili: %s",
|
1158 |
"DownloadingUpdateFromX": "Sto scaricando gli aggiornamenti da %s",
|
1159 |
"DownloadX": "Scarica %s",
|
1160 |
+
"UpdateLog": "Registro aggiornamento",
|
1161 |
"EmptyDatabaseError": "Il database %s è pieno. Devi modificare il tuo file di configurazione Matomo.",
|
1162 |
"ErrorDIYHelp": "Se sei un utente avanzato e incontri un errore nell'aggiornamento del database:",
|
1163 |
"ErrorDIYHelp_1": "identifica e correggi la causa del problema (es. memory_limit o max_execution_time)",
|
1512 |
"ContactUs": "Contattaci",
|
1513 |
"VisitTheForums": "Visita il %1$s Forum%2$s e ottieni aiuto dalla comunità degli utenti Matomo",
|
1514 |
"Forums": "Forum",
|
1515 |
+
"ReviewMatomoTitle": "Ti piace Matomo?",
|
1516 |
"PleaseLeaveExternalReviewForMatomo": "Condividi ciò che pensi su uno di questi siti e ispira altri a unirsi alla nostra rivoluzione dei dati.",
|
1517 |
"RemindMeLater": "Ricordamelo più tardi",
|
1518 |
"NeverAskMeAgain": "Non chiedermelo di nuovo",
|
1524 |
"SearchHelpResources": "Cerca nelle risorse di matomo.org per aiuto",
|
1525 |
"PopularHelpTopics": "Argomenti di aiuto popolari",
|
1526 |
"ReferMatomo": "Parla di Matomo",
|
1527 |
+
"ReferBannerTitle": "Credi in Matomo?",
|
1528 |
+
"ReferBannerLonger": "Aiutaci a spargere la voce su di noi in modo che più persone abbiano il controllo sui propri dati analitici.",
|
1529 |
"ReferBannerEmailShareSubject": "Indirizzali adesso verso Matomo Analytics per riprendere il controllo!",
|
1530 |
"ReferBannerEmailShareBody": "Scelgo Matomo, un'alternativa etica a Google Analytics che mi dà al 100%% la proprietà dei dati e protegge i dati dei visitatori del mio sito web.\nCondivido questo messaggio nella speranza che anche tu riprenderai il potere da Google e acquisirai la completa proprietà dei tuoi dati.\n\nDai un'occhiata a Matomo su https:\/\/matomo.org",
|
1531 |
+
"ReferBannerSocialShareText": "Se stai utilizzando Google Analytics, mantieni il controllo passando adesso a un'alternativa etica come Matomo!",
|
1532 |
+
"WontShowAgain": "Non mostreremo più questo messaggio."
|
1533 |
},
|
1534 |
"GeoIp2": {
|
1535 |
"AssumingNonApache": "Impossibile trovare la funzione apache_get_modules, si suppone che sia un server non-Apache.",
|
1855 |
"SystemCheckGzcompressHelp": "Devi abilitare l'estensione zlib e la funzione gzcompress.",
|
1856 |
"SystemCheckGzuncompressHelp": "Devi abilitare l'estensione zlib e la funzione gzuncompress.",
|
1857 |
"SystemCheckHashHelp": "Devi configurare e ricostruire PHP con il supporto hash() abilitato escludendo l'opzione 'disabilita hash'.",
|
|
|
1858 |
"SystemCheckJsonHelp": "L'estensione php-json è richiesta perché Matomo legga e scriva i dati JSON.",
|
1859 |
"SystemCheckMailHelp": "Feedback e messaggi su Password Perdute non saranno inviati senza che sia disponibile la funzione mail().",
|
|
|
|
|
1860 |
"SystemCheckMemoryLimit": "Memoria massima",
|
1861 |
"SystemCheckMemoryLimitHelp": "Su un sito web con grande traffico, il processo di archiviazione potrebbe richiedere più memoria di quella attualmente consentita.<br \/>Cambia la direttiva memory_limmit nel tuo file php.ini se necessario.",
|
1862 |
"SystemCheckMemoryNoMemoryLimitSet": "Non è stato impostato il limite di memoria",
|
1873 |
"SystemCheckPdoAndMysqliHelp": "Su un server GNU\/Linux puoi compilare PHP con le seguenti opzioni: %1$s. Nel tuo php.ini, aggiungi le seguenti righe: %2$s",
|
1874 |
"SystemCheckPhp": "Versione PHP",
|
1875 |
"SystemCheckPhpPdoAndMysqli": "Maggiori informazioni a riguardo: %1$sPHP PDO%2$s e %3$sMYSQLI%4$s.",
|
|
|
1876 |
"SystemCheckSessionHelp": "Devi configurare e ricostruire PHP con il supporto \"sessione\" abilitato (non usare --disabilita-sessione).",
|
1877 |
"SystemCheckSettings": "Richiesta configurazione PHP (php.ini)",
|
1878 |
"SystemCheckSummaryNoProblems": "Evviva! Non ci sono problemi con le impostazioni di Matomo. Datti una pacca sulla spalla.",
|
3927 |
"OnlyMatchedUrlsAllowedHelp": "Quando abilitato, Matomo traccerà le azioni interne solo quando l'URL Pagina è una delle URL conosciute del sito. Questo evita che la gente spammi le tue statistiche con URL di altri siti web.",
|
3928 |
"OnlyMatchedUrlsAllowedHelpExamples": "Il dominio e il percorso devono essere una corrispondenza esatta e ogni sottodominio valido deve essere specificato separatamente. Ad esempio, quando gli URL conosciuti sono \"http:\/\/example.com\/path\" e \"http:\/\/good.example.com\", le richieste di tracciamento per \"http:\/\/example.com\/otherpath\" o \"http:\/\/bad.example.com 'sono ignorate.",
|
3929 |
"WebsitesManagement": "Gestisci siti web",
|
3930 |
+
"WebsiteUpdated": "Sito web aggiornato",
|
3931 |
+
"WebsiteCreated": "Sito web creato",
|
3932 |
"XManagement": "Gestione %s",
|
3933 |
"ChooseMeasurableTypeHeadline": "Cosa intendi misurare",
|
3934 |
"YouCurrentlyHaveAccessToNWebsites": "Al momento hai accesso a %s siti.",
|
4371 |
"ScrollReachTriggerHelp": "Questo trigger viene attivato quando un utente scorre o ridimensiona la finestra del browser corrente. Il trigger non viene attivato quando l'utente scorre all'interno di un determinato elemento. Non si attiverà tutte le volte che viene raggiunta una determinata posizione di scorrimento, ma solo la prima volta che viene raggiunta la posizione configurata.",
|
4372 |
"ScrollReachTriggerName": "Fine Scroll",
|
4373 |
"ScrollSourceVariableDescription": "Se la posizione di scorrimento è stata originata da uno scorrimento utente o da un ridimensionamento del browser. Il valore è \"scorrimento\" o \"ridimensionamento\".",
|
|
|
4374 |
"ScrollTopPixelVariableDescription": "Di quanto, in pixel, l'utente ha scrollato in verticale, per esempio \"592\".",
|
|
|
4375 |
"ScrollVerticalPercentageVariableDescription": "Di quanto l'utente ha, attualmente, fatto scorrere in verticale la pagina, per esempio \"75,59\" per \"75,59%%\".",
|
4376 |
"ScrollVerticalPercentageVariableName": "Percentuale Scroll Verticale",
|
4377 |
"SentryRavenTagDescription": "Sentry.io è uno strumento di tracciamento degli errori Open-Source che ti consente di rilevare gli errori che si verificano sul tuo sito web.",
|
app/lang/ja.json
CHANGED
@@ -1427,7 +1427,6 @@
|
|
1427 |
"ContactUs": "お問い合わせ",
|
1428 |
"VisitTheForums": "%1$s フォーラム %2$s にアクセスし、Matomo ユーザーのコミュニティから助けを得る",
|
1429 |
"Forums": "フォーラム",
|
1430 |
-
"ReviewMatomoTitle": "Matomo を信じますか?",
|
1431 |
"PleaseLeaveExternalReviewForMatomo": "これらのサイトの1つについてあなたの考えを分かち合い、他の人々に私たちのデータ革命に加わるよう促してください。",
|
1432 |
"RemindMeLater": "後で通知する",
|
1433 |
"NeverAskMeAgain": "次回から確認しない",
|
@@ -1437,7 +1436,8 @@
|
|
1437 |
"RemoveOtherLabel": "'その他'のデータを見たい",
|
1438 |
"PurgeOldData": "古いデータを削除したい",
|
1439 |
"SearchHelpResources": "matomo.org ヘルプリソースを検索する",
|
1440 |
-
"PopularHelpTopics": "人気のあるヘルプトピック"
|
|
|
1441 |
},
|
1442 |
"GeoIp2": {
|
1443 |
"AssumingNonApache": "非 Apache ウェブサーバーを想定して apache_get_modules ファンクションを見つける事ができません。",
|
@@ -1728,10 +1728,7 @@
|
|
1728 |
"SystemCheckGzcompressHelp": "zlib エクステンションと gzcompress 機能を有効にする必要があります。",
|
1729 |
"SystemCheckGzuncompressHelp": "zlib エクステンションと gzuncompress機能を有効にする必要があります。",
|
1730 |
"SystemCheckHashHelp": "--disable-hash オプションを除外し、hash() サポートを有効にして PHP を設定して再構築する必要があります。",
|
1731 |
-
"SystemCheckIconvHelp": "\"iconv\" のサポートを有効にして、PHP の再構築と設定を行う必要があります(--with-iconv)。",
|
1732 |
"SystemCheckMailHelp": "mail() 関数がない場合、フィードバックとパスワード紛失のメッセージを送信することができません。",
|
1733 |
-
"SystemCheckMbstring": "mbstring",
|
1734 |
-
"SystemCheckMbstringHelp": "mbstring 拡張子は、ユーザーインターフェイスと API レスポンスでマルチバイト文字を処理するために必要です。 また、php.ini で mbstring.func_overload が \" 0 \" に設定されていることを確認してください。",
|
1735 |
"SystemCheckMemoryLimit": "メモリ制限",
|
1736 |
"SystemCheckMemoryLimitHelp": "アクセス数の多いウェブサイトでは、アーカイブ処理の実行に、現在許可されている以上に多くのメモリを必要とする場合があります。必要に応じて、php.ini ファイルのディレクティブ memory_limit を変更してください。",
|
1737 |
"SystemCheckNoErrorsOrWarnings": "エラーや警告はありません",
|
@@ -1747,7 +1744,6 @@
|
|
1747 |
"SystemCheckPdoAndMysqliHelp": "GNU \/ Linuxサーバーでは、次のオプションを付けてphpをコンパイルできます:%1$sphp.iniに次の行を追加します:%2$s",
|
1748 |
"SystemCheckPhp": "PHP バージョン",
|
1749 |
"SystemCheckPhpPdoAndMysqli": "詳細ドキュメント:%1$sPHP PDO%2$s、%3$sMYSQLI%4$s",
|
1750 |
-
"SystemCheckSplHelp": "Standard PHP Library (SPL) を有効にして、PHP の再構築と設定を行う必要があります(通常はデフォルト)。",
|
1751 |
"SystemCheckSettings": "必要な PHP 設定 (php,ini)",
|
1752 |
"SystemCheckSummaryNoProblems": "安心してください。Matomo のセットアップに問題はありません。",
|
1753 |
"SystemCheckSummaryThereWereErrors": "Matomo セットアップで、いくつかの %1$scritical issues%2$s が検知されました。 %3$sこれらの問題はすぐに修正する必要があります。%4$s",
|
1427 |
"ContactUs": "お問い合わせ",
|
1428 |
"VisitTheForums": "%1$s フォーラム %2$s にアクセスし、Matomo ユーザーのコミュニティから助けを得る",
|
1429 |
"Forums": "フォーラム",
|
|
|
1430 |
"PleaseLeaveExternalReviewForMatomo": "これらのサイトの1つについてあなたの考えを分かち合い、他の人々に私たちのデータ革命に加わるよう促してください。",
|
1431 |
"RemindMeLater": "後で通知する",
|
1432 |
"NeverAskMeAgain": "次回から確認しない",
|
1436 |
"RemoveOtherLabel": "'その他'のデータを見たい",
|
1437 |
"PurgeOldData": "古いデータを削除したい",
|
1438 |
"SearchHelpResources": "matomo.org ヘルプリソースを検索する",
|
1439 |
+
"PopularHelpTopics": "人気のあるヘルプトピック",
|
1440 |
+
"ReferBannerTitle": "Matomo を信じますか?"
|
1441 |
},
|
1442 |
"GeoIp2": {
|
1443 |
"AssumingNonApache": "非 Apache ウェブサーバーを想定して apache_get_modules ファンクションを見つける事ができません。",
|
1728 |
"SystemCheckGzcompressHelp": "zlib エクステンションと gzcompress 機能を有効にする必要があります。",
|
1729 |
"SystemCheckGzuncompressHelp": "zlib エクステンションと gzuncompress機能を有効にする必要があります。",
|
1730 |
"SystemCheckHashHelp": "--disable-hash オプションを除外し、hash() サポートを有効にして PHP を設定して再構築する必要があります。",
|
|
|
1731 |
"SystemCheckMailHelp": "mail() 関数がない場合、フィードバックとパスワード紛失のメッセージを送信することができません。",
|
|
|
|
|
1732 |
"SystemCheckMemoryLimit": "メモリ制限",
|
1733 |
"SystemCheckMemoryLimitHelp": "アクセス数の多いウェブサイトでは、アーカイブ処理の実行に、現在許可されている以上に多くのメモリを必要とする場合があります。必要に応じて、php.ini ファイルのディレクティブ memory_limit を変更してください。",
|
1734 |
"SystemCheckNoErrorsOrWarnings": "エラーや警告はありません",
|
1744 |
"SystemCheckPdoAndMysqliHelp": "GNU \/ Linuxサーバーでは、次のオプションを付けてphpをコンパイルできます:%1$sphp.iniに次の行を追加します:%2$s",
|
1745 |
"SystemCheckPhp": "PHP バージョン",
|
1746 |
"SystemCheckPhpPdoAndMysqli": "詳細ドキュメント:%1$sPHP PDO%2$s、%3$sMYSQLI%4$s",
|
|
|
1747 |
"SystemCheckSettings": "必要な PHP 設定 (php,ini)",
|
1748 |
"SystemCheckSummaryNoProblems": "安心してください。Matomo のセットアップに問題はありません。",
|
1749 |
"SystemCheckSummaryThereWereErrors": "Matomo セットアップで、いくつかの %1$scritical issues%2$s が検知されました。 %3$sこれらの問題はすぐに修正する必要があります。%4$s",
|
app/lang/ka.json
CHANGED
@@ -395,9 +395,7 @@
|
|
395 |
"SystemCheckGlobHelp": "თქვენს ჰოსტ სერვერზე სტანდარტული ფუნქცია გამორთულია. Matomo ცდის ამ ფუნქციის ემულირებას, მაგრამ შესაძლოა წარმოიშვას შემდგომი უსაფრთხოების შეზღუდვები. ამან შეიძლება გავლენა იქონიოს ფუნქციონალურობაზე.",
|
396 |
"SystemCheckGzcompressHelp": "თქვენ უნდა ჩართოთ zlib გაფართოება და gzcompress ფუნქცია.",
|
397 |
"SystemCheckGzuncompressHelp": "თქვენ უნდა ჩართოთ zlib გაფართოება და gzuncompress ფუნქცია.",
|
398 |
-
"SystemCheckIconvHelp": "საჭირო იქნება PHP კონფიგურირება და აღდგენა \"iconv\" მხარდაჭერის ჩართვით, --with-iconv.",
|
399 |
"SystemCheckMailHelp": "გამოხმაურებები და პაროლის აღდგენის მოთხოვნები არ გაიგზავნება mail() ფუნქციის გარეშე.",
|
400 |
-
"SystemCheckMbstring": "mbstring",
|
401 |
"SystemCheckMemoryLimit": "მეხსიერების ლიმიტი",
|
402 |
"SystemCheckMemoryLimitHelp": "მაღალი ტრაფიკის ვებ საიტის არქივირებისას შეიძლება უფრო მეტი მეხსიერება იქნეს საჭირო, ვიდრე ახლაა გამოყოფილი. თუ ასე მოხდა, შეცვალეთ memory_limit მაჩვენებელი თქვენს php.ini ფაილში.",
|
403 |
"SystemCheckOpenURL": "გახსენით URL",
|
@@ -408,7 +406,6 @@
|
|
408 |
"SystemCheckPdoAndMysqliHelp": "Linux სერვერზე თქვენ შეგიძლიათ გააკეთოთ php–ს კომპილაცია შემდეგი პარამეტრებით: %1$s თქვენს php.ini ფაილში, დაამატეთ შემდეგი სტრიქონები: %2$s",
|
409 |
"SystemCheckPhp": "PHP ვერსია",
|
410 |
"SystemCheckPhpPdoAndMysqli": "დამატებითი ინფორმაცია საკითხებზე: %1$sPHP PDO%2$s და %3$sMYSQLI%4$s.",
|
411 |
-
"SystemCheckSplHelp": "საჭირო იქნება PHP კონფიგურირება და აღდგენა სტანდარტული PHP ბიბლიოთეკის (SPL) ჩართვით (ნაგულისხმევი).",
|
412 |
"SystemCheckTimeLimitHelp": "მაღალი ტრაფიკის ვებ საიტებზე არქივირების პროცესის განხორციელებას შეიძლება ბევრი დრო დაჭირდეს ვიდრე დაშვებულია ახლა. თუ საჭირო იქნება, შეცვალეთ max_execution_time მნიშვნელობა თქვენს php.ini ფაილში.",
|
413 |
"SystemCheckTracker": "ტრეკერის სტატუსი",
|
414 |
"SystemCheckWarnDomHelp": "სასურველია ჩართოთ \"dom\" გაფართოების გამოყენება (მაგ., დააინსტალირეთ \"php-dom\" და\/ან \"php-xml\" პაკეტი).",
|
395 |
"SystemCheckGlobHelp": "თქვენს ჰოსტ სერვერზე სტანდარტული ფუნქცია გამორთულია. Matomo ცდის ამ ფუნქციის ემულირებას, მაგრამ შესაძლოა წარმოიშვას შემდგომი უსაფრთხოების შეზღუდვები. ამან შეიძლება გავლენა იქონიოს ფუნქციონალურობაზე.",
|
396 |
"SystemCheckGzcompressHelp": "თქვენ უნდა ჩართოთ zlib გაფართოება და gzcompress ფუნქცია.",
|
397 |
"SystemCheckGzuncompressHelp": "თქვენ უნდა ჩართოთ zlib გაფართოება და gzuncompress ფუნქცია.",
|
|
|
398 |
"SystemCheckMailHelp": "გამოხმაურებები და პაროლის აღდგენის მოთხოვნები არ გაიგზავნება mail() ფუნქციის გარეშე.",
|
|
|
399 |
"SystemCheckMemoryLimit": "მეხსიერების ლიმიტი",
|
400 |
"SystemCheckMemoryLimitHelp": "მაღალი ტრაფიკის ვებ საიტის არქივირებისას შეიძლება უფრო მეტი მეხსიერება იქნეს საჭირო, ვიდრე ახლაა გამოყოფილი. თუ ასე მოხდა, შეცვალეთ memory_limit მაჩვენებელი თქვენს php.ini ფაილში.",
|
401 |
"SystemCheckOpenURL": "გახსენით URL",
|
406 |
"SystemCheckPdoAndMysqliHelp": "Linux სერვერზე თქვენ შეგიძლიათ გააკეთოთ php–ს კომპილაცია შემდეგი პარამეტრებით: %1$s თქვენს php.ini ფაილში, დაამატეთ შემდეგი სტრიქონები: %2$s",
|
407 |
"SystemCheckPhp": "PHP ვერსია",
|
408 |
"SystemCheckPhpPdoAndMysqli": "დამატებითი ინფორმაცია საკითხებზე: %1$sPHP PDO%2$s და %3$sMYSQLI%4$s.",
|
|
|
409 |
"SystemCheckTimeLimitHelp": "მაღალი ტრაფიკის ვებ საიტებზე არქივირების პროცესის განხორციელებას შეიძლება ბევრი დრო დაჭირდეს ვიდრე დაშვებულია ახლა. თუ საჭირო იქნება, შეცვალეთ max_execution_time მნიშვნელობა თქვენს php.ini ფაილში.",
|
410 |
"SystemCheckTracker": "ტრეკერის სტატუსი",
|
411 |
"SystemCheckWarnDomHelp": "სასურველია ჩართოთ \"dom\" გაფართოების გამოყენება (მაგ., დააინსტალირეთ \"php-dom\" და\/ან \"php-xml\" პაკეტი).",
|
app/lang/ko.json
CHANGED
@@ -1201,9 +1201,7 @@
|
|
1201 |
"SystemCheckGlobHelp": "이 내장 함수는 호스트에서 비활성화되어 있습니다. Matomo이 함수의 에뮬레이션을 시도하지만, 새로운 보안 제한으로 발생하는 경우가 있습니다. 또한 기능에 영향을 미칠수 있습니다.",
|
1202 |
"SystemCheckGzcompressHelp": "zlib 확장과 gzcompress() 함수를 활성화해야합니다.",
|
1203 |
"SystemCheckGzuncompressHelp": "zlib 확장과 gzuncompress() 함수를 활성화해야합니다.",
|
1204 |
-
"SystemCheckIconvHelp": "\"iconv\"의 지원을 활성화하고, PHP 재구축 설정을 해야합니다 --with-iconv.",
|
1205 |
"SystemCheckMailHelp": "mail() 없이 피드백과 잊어버린 비밀번호 메세지는 보내지지 않습니다.",
|
1206 |
-
"SystemCheckMbstring": "mbstring",
|
1207 |
"SystemCheckMemoryLimit": "메모리 제한",
|
1208 |
"SystemCheckMemoryLimitHelp": "높은 트래픽의 웹사이트에서는 압축 진행중에 현재 허용된 것보다 더 높은 메모리를 필요로 할 수 있습니다. 만약 필요하다면 php.ini 파일에서 memory_limit을 변경하세요.",
|
1209 |
"SystemCheckNoErrorsOrWarnings": "에러나 경고가 없습니다.",
|
@@ -1218,7 +1216,6 @@
|
|
1218 |
"SystemCheckPdoAndMysqliHelp": "Linux 서버는 다음 옵션으로 PHP를 컴파일합니다: %1$sphp.ini에 다음 줄을 추가합니다: %2$s",
|
1219 |
"SystemCheckPhp": "PHP 버전",
|
1220 |
"SystemCheckPhpPdoAndMysqli": "자세한 문서: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
1221 |
-
"SystemCheckSplHelp": "스탠다드 PHP 라이브러리가 활성화된 상태로 PHP를 설정하고 리빌딩해야 합니다. (기본).",
|
1222 |
"SystemCheckSettings": "요구되는 PHP 설정 (php.ini)",
|
1223 |
"SystemCheckSummaryNoProblems": "만세! Matomo 설정에 아무런 문제가 없습니다. 스스로에게 칭찬하세요.",
|
1224 |
"SystemCheckSummaryThereWereErrors": "헐! Matomo 설정에서 일부 %1$s심각한 오류%2$s를 감지했습니다. %3$s이 문제는 즉시 해결해야합니다.%4$s",
|
1201 |
"SystemCheckGlobHelp": "이 내장 함수는 호스트에서 비활성화되어 있습니다. Matomo이 함수의 에뮬레이션을 시도하지만, 새로운 보안 제한으로 발생하는 경우가 있습니다. 또한 기능에 영향을 미칠수 있습니다.",
|
1202 |
"SystemCheckGzcompressHelp": "zlib 확장과 gzcompress() 함수를 활성화해야합니다.",
|
1203 |
"SystemCheckGzuncompressHelp": "zlib 확장과 gzuncompress() 함수를 활성화해야합니다.",
|
|
|
1204 |
"SystemCheckMailHelp": "mail() 없이 피드백과 잊어버린 비밀번호 메세지는 보내지지 않습니다.",
|
|
|
1205 |
"SystemCheckMemoryLimit": "메모리 제한",
|
1206 |
"SystemCheckMemoryLimitHelp": "높은 트래픽의 웹사이트에서는 압축 진행중에 현재 허용된 것보다 더 높은 메모리를 필요로 할 수 있습니다. 만약 필요하다면 php.ini 파일에서 memory_limit을 변경하세요.",
|
1207 |
"SystemCheckNoErrorsOrWarnings": "에러나 경고가 없습니다.",
|
1216 |
"SystemCheckPdoAndMysqliHelp": "Linux 서버는 다음 옵션으로 PHP를 컴파일합니다: %1$sphp.ini에 다음 줄을 추가합니다: %2$s",
|
1217 |
"SystemCheckPhp": "PHP 버전",
|
1218 |
"SystemCheckPhpPdoAndMysqli": "자세한 문서: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
|
|
1219 |
"SystemCheckSettings": "요구되는 PHP 설정 (php.ini)",
|
1220 |
"SystemCheckSummaryNoProblems": "만세! Matomo 설정에 아무런 문제가 없습니다. 스스로에게 칭찬하세요.",
|
1221 |
"SystemCheckSummaryThereWereErrors": "헐! Matomo 설정에서 일부 %1$s심각한 오류%2$s를 감지했습니다. %3$s이 문제는 즉시 해결해야합니다.%4$s",
|
app/lang/lt.json
CHANGED
@@ -684,9 +684,7 @@
|
|
684 |
"SystemCheckGDHelp": "Mažos diagramos neveiks.",
|
685 |
"SystemCheckGzcompressHelp": "Jums reikia įjungti zlib plėtinį ir gzcompress funkciją.",
|
686 |
"SystemCheckGzuncompressHelp": "Jums reikia įjungti zlib plėtinį ir gzuncompress funkciją.",
|
687 |
-
"SystemCheckIconvHelp": "Jums reikia sukonfigūruoti ir perdaryti PHP su įjungtu \"iconv\" palaikymu, --with-iconv.",
|
688 |
"SystemCheckMailHelp": "Atsiliepimų ir prarastų slpatažodžių pranešimai nebus siunčiami be mail() funkcijos.",
|
689 |
-
"SystemCheckMbstring": "mbstring",
|
690 |
"SystemCheckMemoryLimit": "Atminties limitas",
|
691 |
"SystemCheckMemoryLimitHelp": "Didelio lankytojų srauto svetainėse archyvavimas gali reikalauti daugiau atminties nei šiuo metu yra.<br \/>Pasitikrinkite reikšmę memory_limit savo php.ini faile, jeigu būtina.",
|
692 |
"SystemCheckNoErrorsOrWarnings": "Nėra jokių klaidų ar įspėjimų",
|
@@ -698,7 +696,6 @@
|
|
698 |
"SystemCheckPdoAndMysqliHelp": "Linux serveryje galite sukompiliuoti php su šiais nustatymais: %1$s į Jūsų php.ini failą įterpkite šias eilutes: %2$s",
|
699 |
"SystemCheckPhp": "PHP versija",
|
700 |
"SystemCheckPhpPdoAndMysqli": "Daugiau informacijos: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
701 |
-
"SystemCheckSplHelp": "Jums reikia sukonfigūruoti ir perdaryti PHP su įjungtu Standard PHP Library (SPL) (pagal nutylėjimą).",
|
702 |
"SystemCheckSettings": "Reikalinga PHP konfigūracija (php.ini)",
|
703 |
"SystemCheckSummaryThereWereWarnings": "Yra kažkokių problemų su jūsų sistema. Matomo veiks, tačiau gali susidurti su menkomis problemomis.",
|
704 |
"SystemCheckTimeLimitHelp": "Didelio lankytojų srauto svetainėse archyvavimo proceso aktyvavimas gali reikalauti daugiau laiko nei šiuo metu leidžiama.<br \/>Pasitikrinkite reikšmę max_execution_time savo php.ini faile, jeigu būtina.",
|
684 |
"SystemCheckGDHelp": "Mažos diagramos neveiks.",
|
685 |
"SystemCheckGzcompressHelp": "Jums reikia įjungti zlib plėtinį ir gzcompress funkciją.",
|
686 |
"SystemCheckGzuncompressHelp": "Jums reikia įjungti zlib plėtinį ir gzuncompress funkciją.",
|
|
|
687 |
"SystemCheckMailHelp": "Atsiliepimų ir prarastų slpatažodžių pranešimai nebus siunčiami be mail() funkcijos.",
|
|
|
688 |
"SystemCheckMemoryLimit": "Atminties limitas",
|
689 |
"SystemCheckMemoryLimitHelp": "Didelio lankytojų srauto svetainėse archyvavimas gali reikalauti daugiau atminties nei šiuo metu yra.<br \/>Pasitikrinkite reikšmę memory_limit savo php.ini faile, jeigu būtina.",
|
690 |
"SystemCheckNoErrorsOrWarnings": "Nėra jokių klaidų ar įspėjimų",
|
696 |
"SystemCheckPdoAndMysqliHelp": "Linux serveryje galite sukompiliuoti php su šiais nustatymais: %1$s į Jūsų php.ini failą įterpkite šias eilutes: %2$s",
|
697 |
"SystemCheckPhp": "PHP versija",
|
698 |
"SystemCheckPhpPdoAndMysqli": "Daugiau informacijos: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
|
|
699 |
"SystemCheckSettings": "Reikalinga PHP konfigūracija (php.ini)",
|
700 |
"SystemCheckSummaryThereWereWarnings": "Yra kažkokių problemų su jūsų sistema. Matomo veiks, tačiau gali susidurti su menkomis problemomis.",
|
701 |
"SystemCheckTimeLimitHelp": "Didelio lankytojų srauto svetainėse archyvavimo proceso aktyvavimas gali reikalauti daugiau laiko nei šiuo metu leidžiama.<br \/>Pasitikrinkite reikšmę max_execution_time savo php.ini faile, jeigu būtina.",
|
app/lang/lv.json
CHANGED
@@ -640,8 +640,6 @@
|
|
640 |
"SystemCheckExtensions": "Citi vajadzīgie paplašinājumi",
|
641 |
"SystemCheckFileIntegrity": "Datņu integritāte",
|
642 |
"SystemCheckFunctions": "Nepieciešamās metodes",
|
643 |
-
"SystemCheckIconvHelp": "Jums jāiestata un jāpārbūvē PHP ar ieslēgtu \"iconv\" atbalstu, --with-iconv.",
|
644 |
-
"SystemCheckMbstring": "mbstring",
|
645 |
"SystemCheckMemoryLimit": "Atmiņas limits",
|
646 |
"SystemCheckOpenURL": "Atvērt URL",
|
647 |
"SystemCheckOtherExtensions": "Citi paplašinājumi",
|
@@ -649,7 +647,6 @@
|
|
649 |
"SystemCheckPdoAndMysqliHelp": "Uz Linux servera Jūs varat kompilēt php ar sekojošiem parametriem: %1$s Savā php.ini datnē pievienojiet sekojošas līnijas: %2$s",
|
650 |
"SystemCheckPhp": "PHP versija",
|
651 |
"SystemCheckPhpPdoAndMysqli": "Vairāk informācija par %1$sPHP PDO%2$s un %3$sMYSQLI%4$s.",
|
652 |
-
"SystemCheckSplHelp": "Jums jāiestata un jāpārbūvē PHP ar ieslēgtu Standard PHP Library (SPL) (pēc noklusējuma).",
|
653 |
"SystemCheckWarnDomHelp": "Jums ir jāieslēdz \"dom\" paplašinājums (piem., instalējiet \"php-dom\" un\/vai \"php-xml\" pakotnes).",
|
654 |
"SystemCheckWarnLibXmlHelp": "Jums ir jāieslēdz \"libxml\" paplašinājums (piem., instalējiet \"php-libxml\" pakotni), jo tā ir nepieciešama citiem PHP paplašinājumiem.",
|
655 |
"SystemCheckWarnSimpleXMLHelp": "Jums ir jāieslēdz \"SimpleXML\" paplašinājums (piem., instalējiet \"php-simplexml\" un\/vai \"php-xml\" pakotnes).",
|
640 |
"SystemCheckExtensions": "Citi vajadzīgie paplašinājumi",
|
641 |
"SystemCheckFileIntegrity": "Datņu integritāte",
|
642 |
"SystemCheckFunctions": "Nepieciešamās metodes",
|
|
|
|
|
643 |
"SystemCheckMemoryLimit": "Atmiņas limits",
|
644 |
"SystemCheckOpenURL": "Atvērt URL",
|
645 |
"SystemCheckOtherExtensions": "Citi paplašinājumi",
|
647 |
"SystemCheckPdoAndMysqliHelp": "Uz Linux servera Jūs varat kompilēt php ar sekojošiem parametriem: %1$s Savā php.ini datnē pievienojiet sekojošas līnijas: %2$s",
|
648 |
"SystemCheckPhp": "PHP versija",
|
649 |
"SystemCheckPhpPdoAndMysqli": "Vairāk informācija par %1$sPHP PDO%2$s un %3$sMYSQLI%4$s.",
|
|
|
650 |
"SystemCheckWarnDomHelp": "Jums ir jāieslēdz \"dom\" paplašinājums (piem., instalējiet \"php-dom\" un\/vai \"php-xml\" pakotnes).",
|
651 |
"SystemCheckWarnLibXmlHelp": "Jums ir jāieslēdz \"libxml\" paplašinājums (piem., instalējiet \"php-libxml\" pakotni), jo tā ir nepieciešama citiem PHP paplašinājumiem.",
|
652 |
"SystemCheckWarnSimpleXMLHelp": "Jums ir jāieslēdz \"SimpleXML\" paplašinājums (piem., instalējiet \"php-simplexml\" un\/vai \"php-xml\" pakotnes).",
|
app/lang/nb.json
CHANGED
@@ -1335,9 +1335,7 @@
|
|
1335 |
"SystemCheckGlobHelp": "Denne innebygde funksjonen har blitt deaktivert på din server. Matomo vil prøve å emulere denne funksjonen, men kan støte på flere sikkerhetsrestriksjoner. Funksjonaliteten kan bli påvirket.",
|
1336 |
"SystemCheckGzcompressHelp": "Du må aktivere zlib utvidelsen og gzcompress-funksjonen.",
|
1337 |
"SystemCheckGzuncompressHelp": "Du må aktivere zlib utvidelsen og gzuncompress-funksjonen.",
|
1338 |
-
"SystemCheckIconvHelp": "Du må konfigurere og bygge PHP på nytt med iconv-støtte aktivert, --with-iconv.",
|
1339 |
"SystemCheckMailHelp": "Tilbakemeldinger og \"Glemt passord\"-meldinger kan ikke sendes uten mail().",
|
1340 |
-
"SystemCheckMbstring": "mbstring",
|
1341 |
"SystemCheckMemoryLimit": "Minnegrense",
|
1342 |
"SystemCheckMemoryLimitHelp": "På et høyt trafikkert nettsted, kan arkiveringsprossessen kreve mer minne enn det som nå er tillatt.<br \/>Se på memory_limit i din php.ini fil hvis nødvendig.",
|
1343 |
"SystemCheckNoErrorsOrWarnings": "Det er ingen feil eller advarsler",
|
@@ -1352,7 +1350,6 @@
|
|
1352 |
"SystemCheckPdoAndMysqliHelp": "På en GNU\/Linux-server kan du kompilere php med følgende valg: %1$s I din php.ini, legg til følgende linjer: %2$s",
|
1353 |
"SystemCheckPhp": "PHP-versjon",
|
1354 |
"SystemCheckPhpPdoAndMysqli": "Mer informasjon om: %1$sPHP PDO%2$s og %3$sMYSQLI%4$s.",
|
1355 |
-
"SystemCheckSplHelp": "Du må konfigurere og bygge PHP på nytt med Standard PHP Library (SPL) aktivert.",
|
1356 |
"SystemCheckSettings": "Påkrevd PHP-konfigurasjon (php.ini)",
|
1357 |
"SystemCheckSummaryNoProblems": "Hurra! Det er ingen problemer med ditt Matomo-oppsett. Gi deg selv et klapp på skulderen.",
|
1358 |
"SystemCheckSummaryThereWereErrors": "Å nei! Matomo har oppdaget noen %1$skritiske problemer%2$s med ditt Matomo-oppsett. %3$sDisse problemene bør fikses umiddelbart.%4$s",
|
1335 |
"SystemCheckGlobHelp": "Denne innebygde funksjonen har blitt deaktivert på din server. Matomo vil prøve å emulere denne funksjonen, men kan støte på flere sikkerhetsrestriksjoner. Funksjonaliteten kan bli påvirket.",
|
1336 |
"SystemCheckGzcompressHelp": "Du må aktivere zlib utvidelsen og gzcompress-funksjonen.",
|
1337 |
"SystemCheckGzuncompressHelp": "Du må aktivere zlib utvidelsen og gzuncompress-funksjonen.",
|
|
|
1338 |
"SystemCheckMailHelp": "Tilbakemeldinger og \"Glemt passord\"-meldinger kan ikke sendes uten mail().",
|
|
|
1339 |
"SystemCheckMemoryLimit": "Minnegrense",
|
1340 |
"SystemCheckMemoryLimitHelp": "På et høyt trafikkert nettsted, kan arkiveringsprossessen kreve mer minne enn det som nå er tillatt.<br \/>Se på memory_limit i din php.ini fil hvis nødvendig.",
|
1341 |
"SystemCheckNoErrorsOrWarnings": "Det er ingen feil eller advarsler",
|
1350 |
"SystemCheckPdoAndMysqliHelp": "På en GNU\/Linux-server kan du kompilere php med følgende valg: %1$s I din php.ini, legg til følgende linjer: %2$s",
|
1351 |
"SystemCheckPhp": "PHP-versjon",
|
1352 |
"SystemCheckPhpPdoAndMysqli": "Mer informasjon om: %1$sPHP PDO%2$s og %3$sMYSQLI%4$s.",
|
|
|
1353 |
"SystemCheckSettings": "Påkrevd PHP-konfigurasjon (php.ini)",
|
1354 |
"SystemCheckSummaryNoProblems": "Hurra! Det er ingen problemer med ditt Matomo-oppsett. Gi deg selv et klapp på skulderen.",
|
1355 |
"SystemCheckSummaryThereWereErrors": "Å nei! Matomo har oppdaget noen %1$skritiske problemer%2$s med ditt Matomo-oppsett. %3$sDisse problemene bør fikses umiddelbart.%4$s",
|
app/lang/nl.json
CHANGED
@@ -1363,12 +1363,12 @@
|
|
1363 |
"ContactUs": "Neem contact met ons op",
|
1364 |
"VisitTheForums": "Bezoek het %1$s Forums%2$s en ontvang hulp van de community van Matomo users",
|
1365 |
"Forums": "Forums",
|
1366 |
-
"ReviewMatomoTitle": "Geloof je in Matomo?",
|
1367 |
"RemindMeLater": "Herinner mij later",
|
1368 |
"NeverAskMeAgain": "Vraag het me nooit meer",
|
1369 |
"HowCanWeHelp": "Hoe kunnen we helpen?",
|
1370 |
"NotTrackingVisits": "Matomo houdt geen bezoeken bij",
|
1371 |
-
"PopularHelpTopics": "Populaire help onderwerpen"
|
|
|
1372 |
},
|
1373 |
"GeoIp2": {
|
1374 |
"AssumingNonApache": "Kan de functie apache_get_modules niet vinden, uitgegaan van non-Apache webserver.",
|
@@ -1640,9 +1640,7 @@
|
|
1640 |
"SystemCheckGzcompressHelp": "U moet de zlib-extensie en gzcompress-functie inschakelen.",
|
1641 |
"SystemCheckGzuncompressHelp": "U moet de zlib-extensie en gzuncompress-functie inschakelen.",
|
1642 |
"SystemCheckHashHelp": "Je dient PHP opnieuw te configureren en compileren met hash() support, door de optie --disable-hash weg te laten.",
|
1643 |
-
"SystemCheckIconvHelp": "U moet PHP configureren met iconv support ingeschakeld --with-iconv.",
|
1644 |
"SystemCheckMailHelp": "Feedback en vergeten wachtwoord berichten zullen niet worden verzonden zonder mail()",
|
1645 |
-
"SystemCheckMbstring": "mbstring",
|
1646 |
"SystemCheckMemoryLimit": "Geheugenlimiet",
|
1647 |
"SystemCheckMemoryLimitHelp": "Het meten van een website met veel bezoekers kan meer geheugen vereisen dan momenteel is toegestaan.<br \/>Controleer de directive memory_limit in uw php.ini file indien noodzakelijk.",
|
1648 |
"SystemCheckNoErrorsOrWarnings": "Er zijn geen fouten of waarschuwingen",
|
@@ -1657,7 +1655,6 @@
|
|
1657 |
"SystemCheckPdoAndMysqliHelp": "Op een Linux server kunt u php compileren met de volgende opties: %1$s in uw php.ini, voeg de volgende regels toe: %2$s",
|
1658 |
"SystemCheckPhp": "PHP-versie",
|
1659 |
"SystemCheckPhpPdoAndMysqli": "Meer informatie op: %1$sPHP PDO%2$s en %3$sMYSQLI%4$s.",
|
1660 |
-
"SystemCheckSplHelp": "U moet PHP opnieuw configureren en compileren met de standard PHP LIbrary (SPL) ingeschakeld (standaard)",
|
1661 |
"SystemCheckSettings": "Vereiste PHP-configuratie (php.ini)",
|
1662 |
"SystemCheckSummaryNoProblems": "Hoera! Er zijn geen problemen met je Matomo setup. Geef jezelf een schouderklopje.",
|
1663 |
"SystemCheckSummaryThereWereErrors": "Oeps! Matomo heeft enkele %1$skritieke problemen%2$s gedetecteerd in je Matomo setup. %3$sDeze problemen zouden meteen gefixed moeten worden.%4$s",
|
1363 |
"ContactUs": "Neem contact met ons op",
|
1364 |
"VisitTheForums": "Bezoek het %1$s Forums%2$s en ontvang hulp van de community van Matomo users",
|
1365 |
"Forums": "Forums",
|
|
|
1366 |
"RemindMeLater": "Herinner mij later",
|
1367 |
"NeverAskMeAgain": "Vraag het me nooit meer",
|
1368 |
"HowCanWeHelp": "Hoe kunnen we helpen?",
|
1369 |
"NotTrackingVisits": "Matomo houdt geen bezoeken bij",
|
1370 |
+
"PopularHelpTopics": "Populaire help onderwerpen",
|
1371 |
+
"ReferBannerTitle": "Geloof je in Matomo?"
|
1372 |
},
|
1373 |
"GeoIp2": {
|
1374 |
"AssumingNonApache": "Kan de functie apache_get_modules niet vinden, uitgegaan van non-Apache webserver.",
|
1640 |
"SystemCheckGzcompressHelp": "U moet de zlib-extensie en gzcompress-functie inschakelen.",
|
1641 |
"SystemCheckGzuncompressHelp": "U moet de zlib-extensie en gzuncompress-functie inschakelen.",
|
1642 |
"SystemCheckHashHelp": "Je dient PHP opnieuw te configureren en compileren met hash() support, door de optie --disable-hash weg te laten.",
|
|
|
1643 |
"SystemCheckMailHelp": "Feedback en vergeten wachtwoord berichten zullen niet worden verzonden zonder mail()",
|
|
|
1644 |
"SystemCheckMemoryLimit": "Geheugenlimiet",
|
1645 |
"SystemCheckMemoryLimitHelp": "Het meten van een website met veel bezoekers kan meer geheugen vereisen dan momenteel is toegestaan.<br \/>Controleer de directive memory_limit in uw php.ini file indien noodzakelijk.",
|
1646 |
"SystemCheckNoErrorsOrWarnings": "Er zijn geen fouten of waarschuwingen",
|
1655 |
"SystemCheckPdoAndMysqliHelp": "Op een Linux server kunt u php compileren met de volgende opties: %1$s in uw php.ini, voeg de volgende regels toe: %2$s",
|
1656 |
"SystemCheckPhp": "PHP-versie",
|
1657 |
"SystemCheckPhpPdoAndMysqli": "Meer informatie op: %1$sPHP PDO%2$s en %3$sMYSQLI%4$s.",
|
|
|
1658 |
"SystemCheckSettings": "Vereiste PHP-configuratie (php.ini)",
|
1659 |
"SystemCheckSummaryNoProblems": "Hoera! Er zijn geen problemen met je Matomo setup. Geef jezelf een schouderklopje.",
|
1660 |
"SystemCheckSummaryThereWereErrors": "Oeps! Matomo heeft enkele %1$skritieke problemen%2$s gedetecteerd in je Matomo setup. %3$sDeze problemen zouden meteen gefixed moeten worden.%4$s",
|
app/lang/nn.json
CHANGED
@@ -580,7 +580,6 @@
|
|
580 |
"SystemCheckFileIntegrity": "Filintegritet",
|
581 |
"SystemCheckFunctions": "Påkravde funksjonar",
|
582 |
"SystemCheckGDHelp": "Gnistlinjene (små bilete) og biletgrafane (i e-postrapportar og i mobilappen til Matomo) vil ikkje fungera.",
|
583 |
-
"SystemCheckIconvHelp": "Du må konfigurera og byggja PHP med \"iconv\"-støtte påslegen, --with-iconv.",
|
584 |
"SystemCheckMailHelp": "Attendemeldingar og 'Tapt Passord'-meldingar vil ikkje sendast uten mail().",
|
585 |
"SystemCheckMemoryLimit": "Minnegrense",
|
586 |
"SystemCheckMemoryLimitHelp": "På ein nettstad med høg trafikk, kan arkiveringsprosessen nytta meir minne enn den hev lov til.<br \/>Sjå innstillinga memory_limit i php.ini-fila di viss det trengst.",
|
@@ -591,7 +590,6 @@
|
|
591 |
"SystemCheckPdoAndMysqliHelp": "På ein Linux-tenar kan du kompilera php med følgjande val: %1$s Legg til følgjande linjer i di php.ini-fil: %2$s",
|
592 |
"SystemCheckPhp": "PHP-versjon",
|
593 |
"SystemCheckPhpPdoAndMysqli": "Meir informasjon om: %1$sPHP PDO%2$s og %3$sMYSQLI%4$s.",
|
594 |
-
"SystemCheckSplHelp": "Du må konfigurera og byggja PHP med Standard PHP Library (SPL) påslegen (standard).",
|
595 |
"SystemCheckTimeLimitHelp": "På ein nettstad med høg trafikk, kan arkiveringsprosessen nytta meir tid enn den hev lov til.<br \/>Viss det trengs, endre innstillinga max_execution_time i php.ini-fila di.",
|
596 |
"SystemCheckWarnDomHelp": "Du bør slå på \"dom\"-utvidinga (t.d. installer \"php-dom\"- og\/eller \"php-xml\"-pakken).",
|
597 |
"SystemCheckWarning": "Matomo vil fungera som normalt, men det kan hende at somme funksjonar manglar",
|
580 |
"SystemCheckFileIntegrity": "Filintegritet",
|
581 |
"SystemCheckFunctions": "Påkravde funksjonar",
|
582 |
"SystemCheckGDHelp": "Gnistlinjene (små bilete) og biletgrafane (i e-postrapportar og i mobilappen til Matomo) vil ikkje fungera.",
|
|
|
583 |
"SystemCheckMailHelp": "Attendemeldingar og 'Tapt Passord'-meldingar vil ikkje sendast uten mail().",
|
584 |
"SystemCheckMemoryLimit": "Minnegrense",
|
585 |
"SystemCheckMemoryLimitHelp": "På ein nettstad med høg trafikk, kan arkiveringsprosessen nytta meir minne enn den hev lov til.<br \/>Sjå innstillinga memory_limit i php.ini-fila di viss det trengst.",
|
590 |
"SystemCheckPdoAndMysqliHelp": "På ein Linux-tenar kan du kompilera php med følgjande val: %1$s Legg til følgjande linjer i di php.ini-fil: %2$s",
|
591 |
"SystemCheckPhp": "PHP-versjon",
|
592 |
"SystemCheckPhpPdoAndMysqli": "Meir informasjon om: %1$sPHP PDO%2$s og %3$sMYSQLI%4$s.",
|
|
|
593 |
"SystemCheckTimeLimitHelp": "På ein nettstad med høg trafikk, kan arkiveringsprosessen nytta meir tid enn den hev lov til.<br \/>Viss det trengs, endre innstillinga max_execution_time i php.ini-fila di.",
|
594 |
"SystemCheckWarnDomHelp": "Du bør slå på \"dom\"-utvidinga (t.d. installer \"php-dom\"- og\/eller \"php-xml\"-pakken).",
|
595 |
"SystemCheckWarning": "Matomo vil fungera som normalt, men det kan hende at somme funksjonar manglar",
|
app/lang/pl.json
CHANGED
@@ -1649,9 +1649,7 @@
|
|
1649 |
"SystemCheckGzcompressHelp": "Musisz włączyć rozszerzenie zlib i funkcję gzcompress.",
|
1650 |
"SystemCheckGzuncompressHelp": "Musisz włączyć rozszerzenie zlib i funkcję gzuncompress.",
|
1651 |
"SystemCheckHashHelp": "Musisz skonfigurować i przebudować swoją instalację PHP usuwając opcję --disable-hash, aby włączyć wsparcie dla funkcji hash().",
|
1652 |
-
"SystemCheckIconvHelp": "Potrzebujesz skonfigurować i przebudować środowisko PHP, z włączonym wsparciem dla \"iconv\", --with-iconv.",
|
1653 |
"SystemCheckMailHelp": "Informacje zwrotne i wiadomości odzyskiwania hasła nie będą wysyłane bez funkcji mail().",
|
1654 |
-
"SystemCheckMbstring": "mbstring",
|
1655 |
"SystemCheckMemoryLimit": "Limit pamięci",
|
1656 |
"SystemCheckMemoryLimitHelp": "Na stronach o wysokim ruchu, proces archiwizacji może wymagać więcej pamięci niż obecnie dostępna. Jeżeli okaże się to konieczne, zmień wielkość memory_limit w pliku php.ini.",
|
1657 |
"SystemCheckNoErrorsOrWarnings": "Nie ma błędów ani ostrzeżeń",
|
@@ -1666,7 +1664,6 @@
|
|
1666 |
"SystemCheckPdoAndMysqliHelp": "Na serwerach pracujących w oparciu o system Linux możesz skompilować PHP z użyciem następującej opcji: %1$s W pliku php.ini, dodaj następujące linie: %2$s",
|
1667 |
"SystemCheckPhp": "wersja PHP",
|
1668 |
"SystemCheckPhpPdoAndMysqli": "Więcej informacji na temat: %1$sPHP PDO%2$s i %3$sMYSQLI%4$s.",
|
1669 |
-
"SystemCheckSplHelp": "Musisz skonfigurować i przebudować instalację PHP, aby włączyć (domyślnie) Standardową Biblioteką PHP (SPL).",
|
1670 |
"SystemCheckSettings": "Wymagana konfiguracja PHP (php.ini)",
|
1671 |
"SystemCheckSummaryNoProblems": "Hurra! Twój Matomo jest poprawnie skonfigurowany. Możesz przybić sobie piątkę.",
|
1672 |
"SystemCheckSummaryThereWereErrors": "O nie! Matomo wykrył kilka %1$skrytycznych problemów%2$s w swojej konfiguracji. %3$s Te problemy powinny zostać jak najszybciej rozwiązane.%4$s",
|
1649 |
"SystemCheckGzcompressHelp": "Musisz włączyć rozszerzenie zlib i funkcję gzcompress.",
|
1650 |
"SystemCheckGzuncompressHelp": "Musisz włączyć rozszerzenie zlib i funkcję gzuncompress.",
|
1651 |
"SystemCheckHashHelp": "Musisz skonfigurować i przebudować swoją instalację PHP usuwając opcję --disable-hash, aby włączyć wsparcie dla funkcji hash().",
|
|
|
1652 |
"SystemCheckMailHelp": "Informacje zwrotne i wiadomości odzyskiwania hasła nie będą wysyłane bez funkcji mail().",
|
|
|
1653 |
"SystemCheckMemoryLimit": "Limit pamięci",
|
1654 |
"SystemCheckMemoryLimitHelp": "Na stronach o wysokim ruchu, proces archiwizacji może wymagać więcej pamięci niż obecnie dostępna. Jeżeli okaże się to konieczne, zmień wielkość memory_limit w pliku php.ini.",
|
1655 |
"SystemCheckNoErrorsOrWarnings": "Nie ma błędów ani ostrzeżeń",
|
1664 |
"SystemCheckPdoAndMysqliHelp": "Na serwerach pracujących w oparciu o system Linux możesz skompilować PHP z użyciem następującej opcji: %1$s W pliku php.ini, dodaj następujące linie: %2$s",
|
1665 |
"SystemCheckPhp": "wersja PHP",
|
1666 |
"SystemCheckPhpPdoAndMysqli": "Więcej informacji na temat: %1$sPHP PDO%2$s i %3$sMYSQLI%4$s.",
|
|
|
1667 |
"SystemCheckSettings": "Wymagana konfiguracja PHP (php.ini)",
|
1668 |
"SystemCheckSummaryNoProblems": "Hurra! Twój Matomo jest poprawnie skonfigurowany. Możesz przybić sobie piątkę.",
|
1669 |
"SystemCheckSummaryThereWereErrors": "O nie! Matomo wykrył kilka %1$skrytycznych problemów%2$s w swojej konfiguracji. %3$s Te problemy powinny zostać jak najszybciej rozwiązane.%4$s",
|
app/lang/pt-br.json
CHANGED
@@ -16,6 +16,7 @@
|
|
16 |
"Apply": "Aplicar",
|
17 |
"ArchivingInlineHelp": "Para sites com tráfego de médio a alto, é recomendado desabilitar a trigger que salva do navegador. Em vez disso, nós recomendamos que instale um cron job para processar os relatorios Matomo a cada hora.",
|
18 |
"ArchivingTriggerDescription": "Recomendado para instalações maiores do Matomo, você precisa %1$sconfigurar um trabalho cron%2$s para processar os relatórios automaticamente.",
|
|
|
19 |
"AuthenticationMethodSmtp": "Método de autenticação para SMTP",
|
20 |
"AverageOrderValue": "Média de Pedidos",
|
21 |
"AveragePrice": "Preço Médio",
|
@@ -32,6 +33,7 @@
|
|
32 |
"ChooseLanguage": "Escolha o idioma.",
|
33 |
"ChoosePeriod": "Escolha o período.",
|
34 |
"ClickHere": "Clique aqui para mais informações.",
|
|
|
35 |
"DoubleClickToChangePeriod": "Clique duplo para aplicar o período",
|
36 |
"Close": "Fechar",
|
37 |
"ClickToSearch": "Clique para pesquisar",
|
@@ -209,6 +211,8 @@
|
|
209 |
"ExceptionWidgetNotFound": "O widget solicitado não existe.",
|
210 |
"ExceptionReportNotEnabled": "O relatório solicitado não está habilitado. Geralmente isto significa que o plugin que define o relatório está desativado ou você não tem permissão suficiente para acessar o mesmo.",
|
211 |
"ExceptionWidgetNotEnabled": "O widget solicitado não está habilitado. Geralmente isto significa que o plugin que define o widget está desativado ou você não tem permissão suficiente para acessar o mesmo.",
|
|
|
|
|
212 |
"ExpandDataTableFooter": "Alterar a visualização ou configurar o relatório",
|
213 |
"Export": "Exportar",
|
214 |
"ExportAsImage": "Exportar como imagem",
|
@@ -486,6 +490,7 @@
|
|
486 |
"WarningFileIntegrityNoMd5file": "O check de integridade do arquivo não pode ser completado enquanto estiver faltando a função md5_file().",
|
487 |
"WarningPasswordStored": "%1$sWarning:%2$s Esta senha será armazenada no arquivo de configuração visível para todos que possam acessá-lo.",
|
488 |
"WarningDebugOnDemandEnabled": "O modo Tracker %1$s está ativado. Por razões de segurança, este deve ser ativado apenas por um curto período de tempo. Para desativá-lo configure %2$s para %3$s em %4$s",
|
|
|
489 |
"Website": "Website",
|
490 |
"Weekly": "Semanalmente",
|
491 |
"WeeklyReport": "semanal",
|
@@ -520,7 +525,8 @@
|
|
520 |
"Custom": "Personalizado",
|
521 |
"PreviousPeriod": "Período anterior",
|
522 |
"PreviousYear": "Ano anterior",
|
523 |
-
"ViewAccessRequired": "O token_auth usado tem muito acesso para ser usado em um pedido URL não-API. Por favor use uma senha específica do aplicativo para um usuário que só tenha acesso para visualização."
|
|
|
524 |
},
|
525 |
"Mobile": {
|
526 |
"AboutPiwikMobile": "Sobre o Matomo Móvel",
|
@@ -662,6 +668,7 @@
|
|
662 |
"ColumnUniqueOutlinks": "Outlinks únicos",
|
663 |
"ColumnIdPageview": "ID da página",
|
664 |
"ColumnInteractionPosition": "Posição de Interação",
|
|
|
665 |
"ActionsInVisit": "Ações em Visita",
|
666 |
"DownloadsReportDocumentation": "Neste relatório, você pode ver quais arquivos seus visitantes baixaram. %s Matomo registra como download um click em um link de download. Se o download foi completado ou não o Matomo não consegue determinar.",
|
667 |
"EntryPagesReportDocumentation": "Este relatório contém informações sobre as páginas de entrada que foram usadas durante o período especificado. Uma página de entrada é a primeira página que um usuário visualiza durante a visita. 1%s As URLs de entrada são exibidos como uma estrutura de pastas.",
|
@@ -670,6 +677,7 @@
|
|
670 |
"ExitPagesReportDocumentation": "Este relatório contém informações sobre as páginas de saída que ocorreram durante o período especificado. Uma página de saída é a última página que um usuário visualiza durante a visita. 1%s As URLs de saída são exibidos como uma estrutura de pastas.",
|
671 |
"ExitPageTitles": "Título de páginas de saída",
|
672 |
"ExitPageTitlesReportDocumentation": "Este relatório contém informações sobre os títulos de páginas de saída que ocorreram durante o período especificado.",
|
|
|
673 |
"OneSearch": "1 pesquisa",
|
674 |
"OutlinkDocumentation": "Um outlink é um link que leva o visitante para fora do seu site (para outro domínio)",
|
675 |
"OutlinksReportDocumentation": "Este relatório mostra uma lista hierárquica de URLs de outlinks clicadas pelos seus visitantes.",
|
@@ -687,6 +695,8 @@
|
|
687 |
"SiteSearchCategories": "Categorias (Pesquisa no Site)",
|
688 |
"SiteSearchKeyword": "Palavra-Chave (Pesquisa no SIte)",
|
689 |
"SiteSearchKeywords": "Palavras-chave (Pesquisa no site)",
|
|
|
|
|
690 |
"SiteSearchKeywordsDocumentation": "Este relatório lista as Pesquisas de Palavras-chave que os visitantes procuraram em seu Motor de Busca interno.",
|
691 |
"SiteSearchKeywordsNoResultDocumentation": "Este relatório lista as Palavras Chave de Pesquisa que não retornaram nenhum resultado de pesquisa: talvez o algoritmo do motor de busca possa ser melhorado, ou talvez seus visitantes estão procurando por conteúdo que não estão (ainda) em seu site?",
|
692 |
"SubmenuPagesEntry": "Páginas de entrada",
|
@@ -706,7 +716,16 @@
|
|
706 |
"ActionType": "Tipo de Ação",
|
707 |
"ActionTypes": "Tipo de Ação",
|
708 |
"Behaviour": "Comportamento",
|
709 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
710 |
},
|
711 |
"Annotations": {
|
712 |
"AddAnnotationsFor": "Adicione anotações para %s...",
|
@@ -1234,7 +1253,8 @@
|
|
1234 |
"SetAsDefaultWidgetsConfirmHelp": "Esta seleção widgets e layout de colunas do painel será usado quando qualquer usuário cria um novo painel, ou quando o recurso \"%s\" é usado.",
|
1235 |
"TopLinkTooltip": "Ver relatórios de Análise Web para %s.",
|
1236 |
"WidgetNotFound": "Widget não encontrado",
|
1237 |
-
"WidgetPreview": "Visualização do Widget"
|
|
|
1238 |
},
|
1239 |
"DevicePlugins": {
|
1240 |
"BrowserWithNoPluginsEnabled": "%1$s sem plugins habilitados",
|
@@ -1396,7 +1416,6 @@
|
|
1396 |
"ContactUs": "Entre em contato",
|
1397 |
"VisitTheForums": "Visite o %1$s Fóruns%2$s e obtenha ajuda da comunidade de usuários Matomo",
|
1398 |
"Forums": "Fóruns",
|
1399 |
-
"ReviewMatomoTitle": "Acredita no Matomo?",
|
1400 |
"PleaseLeaveExternalReviewForMatomo": "Compartilhe seus pensamentos em um desses sites e inspire outras pessoas a participarem da nossa revolução de dados.",
|
1401 |
"RemindMeLater": "Lembrar-me mais tarde",
|
1402 |
"NeverAskMeAgain": "Não me perguntar novamente",
|
@@ -1406,7 +1425,8 @@
|
|
1406 |
"RemoveOtherLabel": "Quero ver os dados de 'Outros'",
|
1407 |
"PurgeOldData": "Quero remover alguns dados antigos",
|
1408 |
"SearchHelpResources": "Procurar recursos de ajuda do matomo.org",
|
1409 |
-
"PopularHelpTopics": "Tópicos populares de ajuda"
|
|
|
1410 |
},
|
1411 |
"GeoIp2": {
|
1412 |
"AssumingNonApache": "Não é possível encontrar a função apache_get_modules, assumindo servidor web não-Apache.",
|
@@ -1647,6 +1667,10 @@
|
|
1647 |
"GoBackAndDefinePrefix": "Volte e defina um prefixo para as tabelas Matomo",
|
1648 |
"HappyAnalysing": "Boa análise!",
|
1649 |
"Installation": "Instalação",
|
|
|
|
|
|
|
|
|
1650 |
"InstallationStatus": "Status da Instalação",
|
1651 |
"InsufficientPrivilegesHelp": "Você pode adicionar esses privilégios usando uma ferramenta como o phpMyAdmin ou executando as consultas SQL de permissões. Se você não sabe como fazer essas coisas, por favor, peça ao seu sysadmin para conceder esses privilégios para você.",
|
1652 |
"InsufficientPrivilegesMain": "Ou o banco de dados não existe (e não poderia ser criado), ou o usuário especificado tem privilégios insuficientes. Usuário de banco de dados deve ter os seguintes privilégios: %s",
|
@@ -1707,6 +1731,7 @@
|
|
1707 |
"SystemCheckEvalHelp": "Requisitado pelo HTML QuickForm e sistema Smarty de templating.",
|
1708 |
"SystemCheckExtensions": "Outras extensões requeridas",
|
1709 |
"SystemCheckFileIntegrity": "Integridade de arquivo.",
|
|
|
1710 |
"SystemCheckFunctions": "Funções requeridas",
|
1711 |
"SystemCheckFunctionHelp": "Você precisa ativar esta função embutida.",
|
1712 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (graphics)",
|
@@ -1715,12 +1740,11 @@
|
|
1715 |
"SystemCheckGzcompressHelp": "Você precisa habilitar a extensão zlib e a função gzcompress.",
|
1716 |
"SystemCheckGzuncompressHelp": "Você precisa habilitar a extensão zlib e a função gzuncompress.",
|
1717 |
"SystemCheckHashHelp": "Você precisa configurar e reconstruir o PHP com suporte a hash() ativado, excluindo a opção --disable-hash.",
|
1718 |
-
"
|
1719 |
"SystemCheckMailHelp": "Mensagens de Feedback e Senha Perdida não serão enviadas sem mail().",
|
1720 |
-
"SystemCheckMbstring": "mbstring",
|
1721 |
-
"SystemCheckMbstringHelp": "A extensão mbstring é necessária para lidar com caracteres de vários bytes na interface do usuário e respostas do API. Por favor, também verifique se mbstring.func_overload está configurada para \"0\" em php.ini.",
|
1722 |
"SystemCheckMemoryLimit": "Limite de Memória",
|
1723 |
"SystemCheckMemoryLimitHelp": "Em um site com alto tráfego, o processo de arquivamento pode exigir mais memória do que o atualmente permitido. Se necessário, mude a diretiva memory_limit no seu arquivo php.ini.",
|
|
|
1724 |
"SystemCheckNoErrorsOrWarnings": "Não há erros ou avisos",
|
1725 |
"SystemCheckViewFullSystemCheck": "Ver relatório completo de verificação do sistema",
|
1726 |
"SystemCheckOpenURL": "Abre URL",
|
@@ -1734,7 +1758,6 @@
|
|
1734 |
"SystemCheckPdoAndMysqliHelp": "Num servidor Linux você poderá compilar o php com as seguintes opções: %1$s No seu php.ini, adicione as seguintes linhas: %2$s",
|
1735 |
"SystemCheckPhp": "Versão do PHP",
|
1736 |
"SystemCheckPhpPdoAndMysqli": "Mais informações em: %1$sPHP PDO%2$s e %3$sMYSQLI%4$s.",
|
1737 |
-
"SystemCheckSplHelp": "Você precisa configurar e remontar o PHP com a Standard PHP Library (SPL) habilitada (por padrão).",
|
1738 |
"SystemCheckSettings": "Configuração PHP requerida (php.ini)",
|
1739 |
"SystemCheckSummaryNoProblems": "Huzzah! Não há problemas com sua configuração Matomo. Dê a você mesmo um tapinha nas costas.",
|
1740 |
"SystemCheckSummaryThereWereErrors": "Uh-oh! Matomo detectou algunas %1$squestões críticas%2$s com as suas configurações. %3$s Estas questões devem ser corrigidas imediatamente. %4$s",
|
@@ -3770,6 +3793,7 @@
|
|
3770 |
"DriftHelp": "Esta tag permite que você adicione o formulário de contato Drift ao seu site.",
|
3771 |
"AllDownloadsClickTriggerDescription": "Acionado quando um link para um arquivo baixável é clicado.",
|
3772 |
"AllDownloadsClickTriggerHelp": "Acionado quando um usuário clica em um elemento \"A\" ou \"AREA\" e o link aponta para um arquivo com uma extensão de arquivo baixável.",
|
|
|
3773 |
"Draft": "Rascunho",
|
3774 |
"EditContainer": "Editar contêiner",
|
3775 |
"EditTag": "Editar tag",
|
@@ -3790,16 +3814,21 @@
|
|
3790 |
"EnablingPreviewPleaseWait": "Habilitando modo de pré-visualização, por favor aguarde...",
|
3791 |
"EndDate": "Data final",
|
3792 |
"EntityDateTypeMetaInformation": "Criado em \"%1$s\", última atualização em \"%2$s\", tipo: \"%3$s\"",
|
|
|
3793 |
"Environment": "Ambiente",
|
3794 |
"EnvironmentVariableDescription": "Retorna o ambiente atual.",
|
3795 |
"EnvironmentVariableName": "Nome do ambiente",
|
3796 |
"Environments": "Ambientes",
|
|
|
|
|
3797 |
"ErrorComparisonNotSupported": "A comparação \"%s\" não é suportada.",
|
3798 |
"ErrorContainerDoesNotExist": "O contêiner requisitado \"%s\" não existe.",
|
3799 |
"ErrorContainerIdDuplicate": "O ID de contêiner já está em uso",
|
3800 |
"ErrorContainerReleaseDoesNotExist": "O lançamento requisitado do contêiner não existe.",
|
3801 |
"ErrorContainerTriggerDoesNotExist": "O gatilho de contêiner solicitado não existe.",
|
3802 |
"ErrorContainerVersionDoesNotExist": "A versão requisitada do contêiner não existe.",
|
|
|
|
|
3803 |
"ErrorEndDateBeforeStartDate": "A data de início precisa ser anterior à data de fim.",
|
3804 |
"ErrorEnvironmentDoesNotExist": "O ambiente \"%s\" não existe.",
|
3805 |
"ErrorEnvironmentInvalidLength": "O ambiente \"%1$s\" não tem um comprimento válido. Por favor use entre %2$s e %3$s caracteres.",
|
@@ -3824,8 +3853,15 @@
|
|
3824 |
"ErrorVersionCannotBeDeletedAsPublished": "Esta versão não pode ser excluída pois está publicada em pelo menos um ambiente.",
|
3825 |
"ErrorXNotProvided": "Por favor, forneça um valor para \"%1$s\".",
|
3826 |
"ErrorXNotWhitelisted": "O valor para \"%1$s\" não é permitido, use um dos: %2$s.",
|
|
|
|
|
|
|
|
|
3827 |
"ExportDraft": "Exportar rascunho",
|
3828 |
"ExportX": "Exportar %s",
|
|
|
|
|
|
|
3829 |
"Filter": "Filtro",
|
3830 |
"FireDelay": "Atraso de disparo",
|
3831 |
"FireDelayHelp": "Permite a você atrasar a execução desta tag. Isto pode ser útil, por exemplo, se você quiser dar tempo para um gatilho de bloqueio para impedir que a tag seja executada. O valor é esperado em milissegundos, onde 1000ms são iguais a um segundo.",
|
@@ -4422,6 +4458,7 @@
|
|
4422 |
"PluginDescription": "Informa métricas analíticas gerais: visitas, visitantes únicos, número de ações, taxa de rejeição, etc.",
|
4423 |
"VisitsSummary": "Resumo dos Visitantes",
|
4424 |
"VisitsSummaryDocumentation": "Esta é uma visão geral da evolução da visita.",
|
|
|
4425 |
"WidgetLastVisits": "Gráfico dos últimos visitantes",
|
4426 |
"WidgetOverviewGraph": "Visão Geral com Gráfico",
|
4427 |
"WidgetVisits": "Visão Geral dos Visitantes"
|
16 |
"Apply": "Aplicar",
|
17 |
"ArchivingInlineHelp": "Para sites com tráfego de médio a alto, é recomendado desabilitar a trigger que salva do navegador. Em vez disso, nós recomendamos que instale um cron job para processar os relatorios Matomo a cada hora.",
|
18 |
"ArchivingTriggerDescription": "Recomendado para instalações maiores do Matomo, você precisa %1$sconfigurar um trabalho cron%2$s para processar os relatórios automaticamente.",
|
19 |
+
"ArchivingTriggerSegment": "O uso de segmentos personalizados ainda acionará o processamento de arquivos.",
|
20 |
"AuthenticationMethodSmtp": "Método de autenticação para SMTP",
|
21 |
"AverageOrderValue": "Média de Pedidos",
|
22 |
"AveragePrice": "Preço Médio",
|
33 |
"ChooseLanguage": "Escolha o idioma.",
|
34 |
"ChoosePeriod": "Escolha o período.",
|
35 |
"ClickHere": "Clique aqui para mais informações.",
|
36 |
+
"CompareTo": "Comparado a:",
|
37 |
"DoubleClickToChangePeriod": "Clique duplo para aplicar o período",
|
38 |
"Close": "Fechar",
|
39 |
"ClickToSearch": "Clique para pesquisar",
|
211 |
"ExceptionWidgetNotFound": "O widget solicitado não existe.",
|
212 |
"ExceptionReportNotEnabled": "O relatório solicitado não está habilitado. Geralmente isto significa que o plugin que define o relatório está desativado ou você não tem permissão suficiente para acessar o mesmo.",
|
213 |
"ExceptionWidgetNotEnabled": "O widget solicitado não está habilitado. Geralmente isto significa que o plugin que define o widget está desativado ou você não tem permissão suficiente para acessar o mesmo.",
|
214 |
+
"ExceptionNotSupportedBrowserTitle": "Seu navegador não é compatível.",
|
215 |
+
"ExceptionNotSupportedBrowserText": "Devido a problemas de segurança, seu navegador não é compatível. Por favor, o atualize para uma versão mais recente.",
|
216 |
"ExpandDataTableFooter": "Alterar a visualização ou configurar o relatório",
|
217 |
"Export": "Exportar",
|
218 |
"ExportAsImage": "Exportar como imagem",
|
490 |
"WarningFileIntegrityNoMd5file": "O check de integridade do arquivo não pode ser completado enquanto estiver faltando a função md5_file().",
|
491 |
"WarningPasswordStored": "%1$sWarning:%2$s Esta senha será armazenada no arquivo de configuração visível para todos que possam acessá-lo.",
|
492 |
"WarningDebugOnDemandEnabled": "O modo Tracker %1$s está ativado. Por razões de segurança, este deve ser ativado apenas por um curto período de tempo. Para desativá-lo configure %2$s para %3$s em %4$s",
|
493 |
+
"WarningDevelopmentModeOnButNotGitInstalled": "Você está usando Matomo no modo desenvolvedor, mas não foi instalado através do git. Não é recomendado utilizar o Matomo no modo desenvolvedor em ambiente de produção.",
|
494 |
"Website": "Website",
|
495 |
"Weekly": "Semanalmente",
|
496 |
"WeeklyReport": "semanal",
|
525 |
"Custom": "Personalizado",
|
526 |
"PreviousPeriod": "Período anterior",
|
527 |
"PreviousYear": "Ano anterior",
|
528 |
+
"ViewAccessRequired": "O token_auth usado tem muito acesso para ser usado em um pedido URL não-API. Por favor use uma senha específica do aplicativo para um usuário que só tenha acesso para visualização.",
|
529 |
+
"Reasons": "Razões"
|
530 |
},
|
531 |
"Mobile": {
|
532 |
"AboutPiwikMobile": "Sobre o Matomo Móvel",
|
668 |
"ColumnUniqueOutlinks": "Outlinks únicos",
|
669 |
"ColumnIdPageview": "ID da página",
|
670 |
"ColumnInteractionPosition": "Posição de Interação",
|
671 |
+
"ColumnPageViewPosition": "Posição de exibição de página",
|
672 |
"ActionsInVisit": "Ações em Visita",
|
673 |
"DownloadsReportDocumentation": "Neste relatório, você pode ver quais arquivos seus visitantes baixaram. %s Matomo registra como download um click em um link de download. Se o download foi completado ou não o Matomo não consegue determinar.",
|
674 |
"EntryPagesReportDocumentation": "Este relatório contém informações sobre as páginas de entrada que foram usadas durante o período especificado. Uma página de entrada é a primeira página que um usuário visualiza durante a visita. 1%s As URLs de entrada são exibidos como uma estrutura de pastas.",
|
677 |
"ExitPagesReportDocumentation": "Este relatório contém informações sobre as páginas de saída que ocorreram durante o período especificado. Uma página de saída é a última página que um usuário visualiza durante a visita. 1%s As URLs de saída são exibidos como uma estrutura de pastas.",
|
678 |
"ExitPageTitles": "Título de páginas de saída",
|
679 |
"ExitPageTitlesReportDocumentation": "Este relatório contém informações sobre os títulos de páginas de saída que ocorreram durante o período especificado.",
|
680 |
+
"MainMetricsReportDocumentation": "Este relatório fornece uma visão geral muito básica de quais ações seus visitantes realizam em seu site.",
|
681 |
"OneSearch": "1 pesquisa",
|
682 |
"OutlinkDocumentation": "Um outlink é um link que leva o visitante para fora do seu site (para outro domínio)",
|
683 |
"OutlinksReportDocumentation": "Este relatório mostra uma lista hierárquica de URLs de outlinks clicadas pelos seus visitantes.",
|
695 |
"SiteSearchCategories": "Categorias (Pesquisa no Site)",
|
696 |
"SiteSearchKeyword": "Palavra-Chave (Pesquisa no SIte)",
|
697 |
"SiteSearchKeywords": "Palavras-chave (Pesquisa no site)",
|
698 |
+
"SiteSearchKeywordCount": "Contagem de palavra-chave (Procurar Site)",
|
699 |
+
"SiteSearchKeywordCounts": "Contagem de palavras-chave (Procurar Site)",
|
700 |
"SiteSearchKeywordsDocumentation": "Este relatório lista as Pesquisas de Palavras-chave que os visitantes procuraram em seu Motor de Busca interno.",
|
701 |
"SiteSearchKeywordsNoResultDocumentation": "Este relatório lista as Palavras Chave de Pesquisa que não retornaram nenhum resultado de pesquisa: talvez o algoritmo do motor de busca possa ser melhorado, ou talvez seus visitantes estão procurando por conteúdo que não estão (ainda) em seu site?",
|
702 |
"SubmenuPagesEntry": "Páginas de entrada",
|
716 |
"ActionType": "Tipo de Ação",
|
717 |
"ActionTypes": "Tipo de Ação",
|
718 |
"Behaviour": "Comportamento",
|
719 |
+
"TimeSpentInReferringAction": "Tempo Gasto em Ação de Referência",
|
720 |
+
"PagesSubcategoryHelp1": "Este relatório contém informação sobre as URLs das páginas que foram visitadas.",
|
721 |
+
"PagesSubcategoryHelp2": "A tabela é hierarquicamente organizada, as URLs são exibidas como uma estrutura de pastas.",
|
722 |
+
"PagesSubcategoryHelp3": "Use os ícones de mais e menos à esquerda para navegar.",
|
723 |
+
"EntryPagesSubcategoryHelp1": "Este relatório contém informação sobre as páginas de entrada que foram usadas durante o período específico. Uma página de entrada é a primeira página que um usuário visualiza durante sua visita.",
|
724 |
+
"EntryPagesSubcategoryHelp2": "As URLs de entrada são exibidas como uma estrutura de pastas.",
|
725 |
+
"ExitPagesSubcategoryHelp1": "Este relatório contém informação sobre as páginas de saída que ocorrem durante o período específico, Uma pagina de saída é a última página que o usuário visualiza durante sua visita,",
|
726 |
+
"ExitPagesSubcategoryHelp2": "As URLs de saída são exibidas como uma estrutura de pastas.",
|
727 |
+
"PageTitlesSubcategoryHelp1": "Este relatório contém informação sobre os títulos das páginas que foram visitadas.",
|
728 |
+
"PageTitlesSubcategoryHelp2": "O título da página é a tag HTML <title> que a maioria dos navegadores mostram em seu título da janela."
|
729 |
},
|
730 |
"Annotations": {
|
731 |
"AddAnnotationsFor": "Adicione anotações para %s...",
|
1253 |
"SetAsDefaultWidgetsConfirmHelp": "Esta seleção widgets e layout de colunas do painel será usado quando qualquer usuário cria um novo painel, ou quando o recurso \"%s\" é usado.",
|
1254 |
"TopLinkTooltip": "Ver relatórios de Análise Web para %s.",
|
1255 |
"WidgetNotFound": "Widget não encontrado",
|
1256 |
+
"WidgetPreview": "Visualização do Widget",
|
1257 |
+
"DashboardCategoryHelp": "Essa é uma página de painel de controle. Paineis de controle são uma coleção de widgets da Matomo que você mesmo adiciona para adequar as necessidades específicas. Misture e combine quaisquer widgets da Matomo para obter os dados %1$s*você*%2$s precisa de uma olhada."
|
1258 |
},
|
1259 |
"DevicePlugins": {
|
1260 |
"BrowserWithNoPluginsEnabled": "%1$s sem plugins habilitados",
|
1416 |
"ContactUs": "Entre em contato",
|
1417 |
"VisitTheForums": "Visite o %1$s Fóruns%2$s e obtenha ajuda da comunidade de usuários Matomo",
|
1418 |
"Forums": "Fóruns",
|
|
|
1419 |
"PleaseLeaveExternalReviewForMatomo": "Compartilhe seus pensamentos em um desses sites e inspire outras pessoas a participarem da nossa revolução de dados.",
|
1420 |
"RemindMeLater": "Lembrar-me mais tarde",
|
1421 |
"NeverAskMeAgain": "Não me perguntar novamente",
|
1425 |
"RemoveOtherLabel": "Quero ver os dados de 'Outros'",
|
1426 |
"PurgeOldData": "Quero remover alguns dados antigos",
|
1427 |
"SearchHelpResources": "Procurar recursos de ajuda do matomo.org",
|
1428 |
+
"PopularHelpTopics": "Tópicos populares de ajuda",
|
1429 |
+
"ReferBannerTitle": "Acredita no Matomo?"
|
1430 |
},
|
1431 |
"GeoIp2": {
|
1432 |
"AssumingNonApache": "Não é possível encontrar a função apache_get_modules, assumindo servidor web não-Apache.",
|
1667 |
"GoBackAndDefinePrefix": "Volte e defina um prefixo para as tabelas Matomo",
|
1668 |
"HappyAnalysing": "Boa análise!",
|
1669 |
"Installation": "Instalação",
|
1670 |
+
"InformationalResults": "Resultados informativos",
|
1671 |
+
"CopyBelowInfoForSupport": "Copie ou baixe a informação abaixo caso nosso time de suporte peça a você por ela.",
|
1672 |
+
"CopySystemCheck": "Copiar verificação do sistema",
|
1673 |
+
"DownloadSystemCheck": "Baixar verificação do sistema",
|
1674 |
"InstallationStatus": "Status da Instalação",
|
1675 |
"InsufficientPrivilegesHelp": "Você pode adicionar esses privilégios usando uma ferramenta como o phpMyAdmin ou executando as consultas SQL de permissões. Se você não sabe como fazer essas coisas, por favor, peça ao seu sysadmin para conceder esses privilégios para você.",
|
1676 |
"InsufficientPrivilegesMain": "Ou o banco de dados não existe (e não poderia ser criado), ou o usuário especificado tem privilégios insuficientes. Usuário de banco de dados deve ter os seguintes privilégios: %s",
|
1731 |
"SystemCheckEvalHelp": "Requisitado pelo HTML QuickForm e sistema Smarty de templating.",
|
1732 |
"SystemCheckExtensions": "Outras extensões requeridas",
|
1733 |
"SystemCheckFileIntegrity": "Integridade de arquivo.",
|
1734 |
+
"SystemCheckFilterHelp": "Você precisa configurar e reconstruir o PHP com o suporte para \"filter\" habilitado (não use --disable-filter)",
|
1735 |
"SystemCheckFunctions": "Funções requeridas",
|
1736 |
"SystemCheckFunctionHelp": "Você precisa ativar esta função embutida.",
|
1737 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (graphics)",
|
1740 |
"SystemCheckGzcompressHelp": "Você precisa habilitar a extensão zlib e a função gzcompress.",
|
1741 |
"SystemCheckGzuncompressHelp": "Você precisa habilitar a extensão zlib e a função gzuncompress.",
|
1742 |
"SystemCheckHashHelp": "Você precisa configurar e reconstruir o PHP com suporte a hash() ativado, excluindo a opção --disable-hash.",
|
1743 |
+
"SystemCheckJsonHelp": "A extensão php-json é necessária para o Matomo ler e escrever dados JSON.",
|
1744 |
"SystemCheckMailHelp": "Mensagens de Feedback e Senha Perdida não serão enviadas sem mail().",
|
|
|
|
|
1745 |
"SystemCheckMemoryLimit": "Limite de Memória",
|
1746 |
"SystemCheckMemoryLimitHelp": "Em um site com alto tráfego, o processo de arquivamento pode exigir mais memória do que o atualmente permitido. Se necessário, mude a diretiva memory_limit no seu arquivo php.ini.",
|
1747 |
+
"SystemCheckMemoryNoMemoryLimitSet": "Não há limite de memória definido",
|
1748 |
"SystemCheckNoErrorsOrWarnings": "Não há erros ou avisos",
|
1749 |
"SystemCheckViewFullSystemCheck": "Ver relatório completo de verificação do sistema",
|
1750 |
"SystemCheckOpenURL": "Abre URL",
|
1758 |
"SystemCheckPdoAndMysqliHelp": "Num servidor Linux você poderá compilar o php com as seguintes opções: %1$s No seu php.ini, adicione as seguintes linhas: %2$s",
|
1759 |
"SystemCheckPhp": "Versão do PHP",
|
1760 |
"SystemCheckPhpPdoAndMysqli": "Mais informações em: %1$sPHP PDO%2$s e %3$sMYSQLI%4$s.",
|
|
|
1761 |
"SystemCheckSettings": "Configuração PHP requerida (php.ini)",
|
1762 |
"SystemCheckSummaryNoProblems": "Huzzah! Não há problemas com sua configuração Matomo. Dê a você mesmo um tapinha nas costas.",
|
1763 |
"SystemCheckSummaryThereWereErrors": "Uh-oh! Matomo detectou algunas %1$squestões críticas%2$s com as suas configurações. %3$s Estas questões devem ser corrigidas imediatamente. %4$s",
|
3793 |
"DriftHelp": "Esta tag permite que você adicione o formulário de contato Drift ao seu site.",
|
3794 |
"AllDownloadsClickTriggerDescription": "Acionado quando um link para um arquivo baixável é clicado.",
|
3795 |
"AllDownloadsClickTriggerHelp": "Acionado quando um usuário clica em um elemento \"A\" ou \"AREA\" e o link aponta para um arquivo com uma extensão de arquivo baixável.",
|
3796 |
+
"AllDownloadsClickTriggerName": "Clique em Todos os Downloas",
|
3797 |
"Draft": "Rascunho",
|
3798 |
"EditContainer": "Editar contêiner",
|
3799 |
"EditTag": "Editar tag",
|
3814 |
"EnablingPreviewPleaseWait": "Habilitando modo de pré-visualização, por favor aguarde...",
|
3815 |
"EndDate": "Data final",
|
3816 |
"EntityDateTypeMetaInformation": "Criado em \"%1$s\", última atualização em \"%2$s\", tipo: \"%3$s\"",
|
3817 |
+
"Entry": "Entrada",
|
3818 |
"Environment": "Ambiente",
|
3819 |
"EnvironmentVariableDescription": "Retorna o ambiente atual.",
|
3820 |
"EnvironmentVariableName": "Nome do ambiente",
|
3821 |
"Environments": "Ambientes",
|
3822 |
+
"ErrorArrayMissingKey": "Chave da array ausente \"%1$s\" em \"%2$s\" na posição \"%3$s\".",
|
3823 |
+
"ErrorArrayMissingValue": "Valor ausente para a chave da array\"%1$s\" em \"%2$s\" na posição \"%3$s\".",
|
3824 |
"ErrorComparisonNotSupported": "A comparação \"%s\" não é suportada.",
|
3825 |
"ErrorContainerDoesNotExist": "O contêiner requisitado \"%s\" não existe.",
|
3826 |
"ErrorContainerIdDuplicate": "O ID de contêiner já está em uso",
|
3827 |
"ErrorContainerReleaseDoesNotExist": "O lançamento requisitado do contêiner não existe.",
|
3828 |
"ErrorContainerTriggerDoesNotExist": "O gatilho de contêiner solicitado não existe.",
|
3829 |
"ErrorContainerVersionDoesNotExist": "A versão requisitada do contêiner não existe.",
|
3830 |
+
"ErrorContainerVersionImportIncomplete": "Não é possível importar o contêiner. A versão do contêiner especificado está incompleta. Certifique-se de incluir informações de contexto, tags, triggers e variáveis.",
|
3831 |
+
"ErrorContainerVersionImportWrongContext": "O contexto do contêiner atual é \"%1$s\" mas o conteúdo importado e do contexto \"%2$s\". Não é possível importar essa versão.",
|
3832 |
"ErrorEndDateBeforeStartDate": "A data de início precisa ser anterior à data de fim.",
|
3833 |
"ErrorEnvironmentDoesNotExist": "O ambiente \"%s\" não existe.",
|
3834 |
"ErrorEnvironmentInvalidLength": "O ambiente \"%1$s\" não tem um comprimento válido. Por favor use entre %2$s e %3$s caracteres.",
|
3853 |
"ErrorVersionCannotBeDeletedAsPublished": "Esta versão não pode ser excluída pois está publicada em pelo menos um ambiente.",
|
3854 |
"ErrorXNotProvided": "Por favor, forneça um valor para \"%1$s\".",
|
3855 |
"ErrorXNotWhitelisted": "O valor para \"%1$s\" não é permitido, use um dos: %2$s.",
|
3856 |
+
"ErrorXTooLong": "\"%1$s\" é muito longo, o número máximo de caracteres permitidos são %2$s.",
|
3857 |
+
"EtrackerTagName": "análise da web etracker",
|
3858 |
+
"EtrackerTagDescription": "etracker é um sistema de análise web, você pode escolher enviar uma exibição de página ou um evento.",
|
3859 |
+
"Except": "Exceto",
|
3860 |
"ExportDraft": "Exportar rascunho",
|
3861 |
"ExportX": "Exportar %s",
|
3862 |
+
"FacebookPixelTagDescription": "O Facebook Pixel é um serviço de análise web e propaganda oferecido pelo Facebook.",
|
3863 |
+
"FacebookPixelTagHelp": "Esta tag permite que você acompanhe as visualizações de página do site em sua conta do Facebook Ads. Para obter o Pixel ID, por favor entre com sua conta Facebook Ads,",
|
3864 |
+
"FacebookPixelTagName": "Facebook Pixel",
|
3865 |
"Filter": "Filtro",
|
3866 |
"FireDelay": "Atraso de disparo",
|
3867 |
"FireDelayHelp": "Permite a você atrasar a execução desta tag. Isto pode ser útil, por exemplo, se você quiser dar tempo para um gatilho de bloqueio para impedir que a tag seja executada. O valor é esperado em milissegundos, onde 1000ms são iguais a um segundo.",
|
4458 |
"PluginDescription": "Informa métricas analíticas gerais: visitas, visitantes únicos, número de ações, taxa de rejeição, etc.",
|
4459 |
"VisitsSummary": "Resumo dos Visitantes",
|
4460 |
"VisitsSummaryDocumentation": "Esta é uma visão geral da evolução da visita.",
|
4461 |
+
"VisitsSummaryReportDocumentation": "Este relatório fornece uma ampla visão geral de como seus visitantes se comportam.",
|
4462 |
"WidgetLastVisits": "Gráfico dos últimos visitantes",
|
4463 |
"WidgetOverviewGraph": "Visão Geral com Gráfico",
|
4464 |
"WidgetVisits": "Visão Geral dos Visitantes"
|
app/lang/pt.json
CHANGED
@@ -1425,7 +1425,6 @@
|
|
1425 |
"ContactUs": "Contacte-nos",
|
1426 |
"VisitTheForums": "Visite os %1$s fóruns%2$s e obtenha ajuda da comunidade de utilizadores do Matomo",
|
1427 |
"Forums": "Fóruns",
|
1428 |
-
"ReviewMatomoTitle": "Acredita no Matomo?",
|
1429 |
"PleaseLeaveExternalReviewForMatomo": "Partilhe a sua opinião num destes sites e inspire outro a participar na nossa revolução dos dados.",
|
1430 |
"RemindMeLater": "Lembrar mais tarde",
|
1431 |
"NeverAskMeAgain": "Não voltar a perguntar",
|
@@ -1435,7 +1434,8 @@
|
|
1435 |
"RemoveOtherLabel": "E quero ver os dados do meu 'Outros'",
|
1436 |
"PurgeOldData": "Eu quero remover alguns dados antigos",
|
1437 |
"SearchHelpResources": "Procurar por recursos de apoio em matomo.org",
|
1438 |
-
"PopularHelpTopics": "Tópicos de ajuda populares"
|
|
|
1439 |
},
|
1440 |
"GeoIp2": {
|
1441 |
"AssumingNonApache": "Não foi possível encontrar a função apache_get_modules; assumindo um servidor web não-Apache.",
|
@@ -1747,11 +1747,8 @@
|
|
1747 |
"SystemCheckGzcompressHelp": "Precisa ativar a extensão zlib e a função gzcompress.",
|
1748 |
"SystemCheckGzuncompressHelp": "Precisa ativar a extensão zlib e a função gzuncompress.",
|
1749 |
"SystemCheckHashHelp": "Tem de configurar e reconstruir o PHP com o suporte para a função hash() ativado, removendo a opção --disable-hash.",
|
1750 |
-
"SystemCheckIconvHelp": "Tem de configurar e reconstruir o PHP com o suporte \"iconv\" ativado, --with-iconv.",
|
1751 |
"SystemCheckJsonHelp": "A extensão php-json é necessária para o Matomo ler e escrever dados JSON.",
|
1752 |
"SystemCheckMailHelp": "Mensagens de feedback e de palavras-passe perdida não serão enviadas sem mail().",
|
1753 |
-
"SystemCheckMbstring": "mbstring",
|
1754 |
-
"SystemCheckMbstringHelp": "A extensão mbstring é necessária para trabalhar com caracteres multibyte na interface do utilizador e com respostas da API. Confirme ainda que mbstring.func_overload está definido como \"0\" no php.ini.",
|
1755 |
"SystemCheckMemoryLimit": "Limite de memória",
|
1756 |
"SystemCheckMemoryLimitHelp": "Num site com tráfego elevado, o processo de arquivamento pode exigir mais memória do que o permitido atualmente. Se necessário, altere a diretiva memory_limit no seu ficheiro php.ini.",
|
1757 |
"SystemCheckNoErrorsOrWarnings": "Não existem erros ou avisos",
|
@@ -1767,7 +1764,6 @@
|
|
1767 |
"SystemCheckPdoAndMysqliHelp": "Num servidor Linux pode compilar php com as seguintes opções: %1$s No seu ficheiro php.ini, adicione as seguintes linhas: %2$s",
|
1768 |
"SystemCheckPhp": "Versão de PHP",
|
1769 |
"SystemCheckPhpPdoAndMysqli": "Mais informações em: %1$sPHP PDO%2$s e %3$sMYSQLI%4$s.",
|
1770 |
-
"SystemCheckSplHelp": "Tem de configurar e reconstruir o PHP com a Standard PHP Library (SPL) ativada (por predefinição).",
|
1771 |
"SystemCheckSettings": "Configuração de PHP obrigatória (php.ini)",
|
1772 |
"SystemCheckSummaryNoProblems": "Não existem problemas com a sua configuração do Matomo.",
|
1773 |
"SystemCheckSummaryThereWereErrors": "Oh, não! O Matomo detetou alguns %1$sproblemas críticos%2$s com a sua configuração do Matomo. %3$sEstes problemas devem ser resolvidos imediatamente.%4$s",
|
1425 |
"ContactUs": "Contacte-nos",
|
1426 |
"VisitTheForums": "Visite os %1$s fóruns%2$s e obtenha ajuda da comunidade de utilizadores do Matomo",
|
1427 |
"Forums": "Fóruns",
|
|
|
1428 |
"PleaseLeaveExternalReviewForMatomo": "Partilhe a sua opinião num destes sites e inspire outro a participar na nossa revolução dos dados.",
|
1429 |
"RemindMeLater": "Lembrar mais tarde",
|
1430 |
"NeverAskMeAgain": "Não voltar a perguntar",
|
1434 |
"RemoveOtherLabel": "E quero ver os dados do meu 'Outros'",
|
1435 |
"PurgeOldData": "Eu quero remover alguns dados antigos",
|
1436 |
"SearchHelpResources": "Procurar por recursos de apoio em matomo.org",
|
1437 |
+
"PopularHelpTopics": "Tópicos de ajuda populares",
|
1438 |
+
"ReferBannerTitle": "Acredita no Matomo?"
|
1439 |
},
|
1440 |
"GeoIp2": {
|
1441 |
"AssumingNonApache": "Não foi possível encontrar a função apache_get_modules; assumindo um servidor web não-Apache.",
|
1747 |
"SystemCheckGzcompressHelp": "Precisa ativar a extensão zlib e a função gzcompress.",
|
1748 |
"SystemCheckGzuncompressHelp": "Precisa ativar a extensão zlib e a função gzuncompress.",
|
1749 |
"SystemCheckHashHelp": "Tem de configurar e reconstruir o PHP com o suporte para a função hash() ativado, removendo a opção --disable-hash.",
|
|
|
1750 |
"SystemCheckJsonHelp": "A extensão php-json é necessária para o Matomo ler e escrever dados JSON.",
|
1751 |
"SystemCheckMailHelp": "Mensagens de feedback e de palavras-passe perdida não serão enviadas sem mail().",
|
|
|
|
|
1752 |
"SystemCheckMemoryLimit": "Limite de memória",
|
1753 |
"SystemCheckMemoryLimitHelp": "Num site com tráfego elevado, o processo de arquivamento pode exigir mais memória do que o permitido atualmente. Se necessário, altere a diretiva memory_limit no seu ficheiro php.ini.",
|
1754 |
"SystemCheckNoErrorsOrWarnings": "Não existem erros ou avisos",
|
1764 |
"SystemCheckPdoAndMysqliHelp": "Num servidor Linux pode compilar php com as seguintes opções: %1$s No seu ficheiro php.ini, adicione as seguintes linhas: %2$s",
|
1765 |
"SystemCheckPhp": "Versão de PHP",
|
1766 |
"SystemCheckPhpPdoAndMysqli": "Mais informações em: %1$sPHP PDO%2$s e %3$sMYSQLI%4$s.",
|
|
|
1767 |
"SystemCheckSettings": "Configuração de PHP obrigatória (php.ini)",
|
1768 |
"SystemCheckSummaryNoProblems": "Não existem problemas com a sua configuração do Matomo.",
|
1769 |
"SystemCheckSummaryThereWereErrors": "Oh, não! O Matomo detetou alguns %1$sproblemas críticos%2$s com a sua configuração do Matomo. %3$sEstes problemas devem ser resolvidos imediatamente.%4$s",
|
app/lang/ro.json
CHANGED
@@ -1223,9 +1223,7 @@
|
|
1223 |
"SystemCheckGlobHelp": "Această funcție built-in a fost dezactivată de gazda dumneavoastra. Matomo va încerca să imite această funcție, dar poate întâlni alte restricții de securitate. Funcționalitatea poatr fi afectata.",
|
1224 |
"SystemCheckGzcompressHelp": "Trebuie sa se permita extinderea zlib și funcția gzcompress.",
|
1225 |
"SystemCheckGzuncompressHelp": "Trebuie sa permiti extinderea zlib și funcția gzuncompress.",
|
1226 |
-
"SystemCheckIconvHelp": "Aveți nevoie de a configura și reconstrui PHP cu suport \"iconv\" activat, - cu-iconv.",
|
1227 |
"SystemCheckMailHelp": "Mesajele de feedback și pierederea parolei nu va fi trimisa fara mail().",
|
1228 |
-
"SystemCheckMbstring": "mbstring",
|
1229 |
"SystemCheckMemoryLimit": "Memory limit",
|
1230 |
"SystemCheckMemoryLimitHelp": "Pe un site cu trafic mare, procesul de arhivare poate necesita mai multă memorie decât este permis în prezent. Dacă este necesar, schimbați directiva limira_memorie în fișierul dvs. php.ini.",
|
1231 |
"SystemCheckOpenURL": "Deschide URL",
|
@@ -1238,7 +1236,6 @@
|
|
1238 |
"SystemCheckPdoAndMysqliHelp": "Pe un server Linux, puteți compila php cu următoarele opțiuni: %1$s în php.ini dvs., adăugați următoarele linii: %2$s",
|
1239 |
"SystemCheckPhp": "PHP version",
|
1240 |
"SystemCheckPhpPdoAndMysqli": "Mai multe informatii pe:%1$sPHP PDO%2$s si %3$sMYSQLI%4$s.",
|
1241 |
-
"SystemCheckSplHelp": "Aveți nevoie pentru a configura și reconstrui PHP cu PHP Biblioteca Standard (SPL) activata (implicit).",
|
1242 |
"SystemCheckSummaryNoProblems": "Huzzah! Nu există probleme cu configurarea Matomo. Dă-ți o palma pe spate.",
|
1243 |
"SystemCheckSummaryThereWereErrors": "Uh-oh! Matomo a detectat unele probleme %1$s critic %2$s cu configurarea Matomo. %3$s Aceste probleme ar trebui să fie fixate imediat.%4$s",
|
1244 |
"SystemCheckSummaryThereWereWarnings": "Există unele probleme cu sistemul dumneavoastră. Matomo va rula, dar s-ar putea confrunta cu unele probleme minore.",
|
1223 |
"SystemCheckGlobHelp": "Această funcție built-in a fost dezactivată de gazda dumneavoastra. Matomo va încerca să imite această funcție, dar poate întâlni alte restricții de securitate. Funcționalitatea poatr fi afectata.",
|
1224 |
"SystemCheckGzcompressHelp": "Trebuie sa se permita extinderea zlib și funcția gzcompress.",
|
1225 |
"SystemCheckGzuncompressHelp": "Trebuie sa permiti extinderea zlib și funcția gzuncompress.",
|
|
|
1226 |
"SystemCheckMailHelp": "Mesajele de feedback și pierederea parolei nu va fi trimisa fara mail().",
|
|
|
1227 |
"SystemCheckMemoryLimit": "Memory limit",
|
1228 |
"SystemCheckMemoryLimitHelp": "Pe un site cu trafic mare, procesul de arhivare poate necesita mai multă memorie decât este permis în prezent. Dacă este necesar, schimbați directiva limira_memorie în fișierul dvs. php.ini.",
|
1229 |
"SystemCheckOpenURL": "Deschide URL",
|
1236 |
"SystemCheckPdoAndMysqliHelp": "Pe un server Linux, puteți compila php cu următoarele opțiuni: %1$s în php.ini dvs., adăugați următoarele linii: %2$s",
|
1237 |
"SystemCheckPhp": "PHP version",
|
1238 |
"SystemCheckPhpPdoAndMysqli": "Mai multe informatii pe:%1$sPHP PDO%2$s si %3$sMYSQLI%4$s.",
|
|
|
1239 |
"SystemCheckSummaryNoProblems": "Huzzah! Nu există probleme cu configurarea Matomo. Dă-ți o palma pe spate.",
|
1240 |
"SystemCheckSummaryThereWereErrors": "Uh-oh! Matomo a detectat unele probleme %1$s critic %2$s cu configurarea Matomo. %3$s Aceste probleme ar trebui să fie fixate imediat.%4$s",
|
1241 |
"SystemCheckSummaryThereWereWarnings": "Există unele probleme cu sistemul dumneavoastră. Matomo va rula, dar s-ar putea confrunta cu unele probleme minore.",
|
app/lang/ru.json
CHANGED
@@ -1692,9 +1692,7 @@
|
|
1692 |
"SystemCheckGzcompressHelp": "Вам необходимо включить расширение zlib и функцию gzcompress.",
|
1693 |
"SystemCheckGzuncompressHelp": "Вам необходимо включить расширение zlib и функцию gzuncompress.",
|
1694 |
"SystemCheckHashHelp": "Вам нужно сконфигурировать и пересобрать PHP с включенной поддержкой hash(), исключив опцию --disable-hash.",
|
1695 |
-
"SystemCheckIconvHelp": "Вам необходимо сконфигурировать или перекомпилировать PHP со включенной поддержкой \"iconv\" --with-iconv.",
|
1696 |
"SystemCheckMailHelp": "Отзывы разработчиков и письма восстановления паролей не будут отправляться без mail().",
|
1697 |
-
"SystemCheckMbstring": "mbstring",
|
1698 |
"SystemCheckMemoryLimit": "Ограничение памяти",
|
1699 |
"SystemCheckMemoryLimitHelp": "На высоконагруженном сайте, процесс архивации может занять больше памяти, чем разрешено в данный момент. Если необходимо, измените директиву memory_limit в вашем php.ini файле.",
|
1700 |
"SystemCheckNoErrorsOrWarnings": "Нет никаких ошибок или предупреждений",
|
@@ -1709,7 +1707,6 @@
|
|
1709 |
"SystemCheckPdoAndMysqliHelp": "На сервере с Linux вы можете скомпилировать php со следующими опциями: %1$s В вашем php.ini добавьте следующие строки: %2$s",
|
1710 |
"SystemCheckPhp": "Версия PHP",
|
1711 |
"SystemCheckPhpPdoAndMysqli": "Больше информации тут: %1$sPHP PDO%2$s и %3$sMYSQLI%4$s.",
|
1712 |
-
"SystemCheckSplHelp": "Вам необходимо сконфигурировать или перекомпилировать PHP со включенной стандартной библиотекой PHP (SPL), обычно включенной по умолчанию.",
|
1713 |
"SystemCheckSettings": "Требуется настройка PHP (php.ini)",
|
1714 |
"SystemCheckSummaryNoProblems": "Ура! Нет никаких проблем с настройками Matomo. Молодец, возьми с полки пирожок.",
|
1715 |
"SystemCheckSummaryThereWereErrors": "Ой-ой! Matomo обнаружил некоторые %1$sкритические ошибки%2$s. %3$sЭти ошибки должны быть исправленные немедленно.%4$s",
|
1692 |
"SystemCheckGzcompressHelp": "Вам необходимо включить расширение zlib и функцию gzcompress.",
|
1693 |
"SystemCheckGzuncompressHelp": "Вам необходимо включить расширение zlib и функцию gzuncompress.",
|
1694 |
"SystemCheckHashHelp": "Вам нужно сконфигурировать и пересобрать PHP с включенной поддержкой hash(), исключив опцию --disable-hash.",
|
|
|
1695 |
"SystemCheckMailHelp": "Отзывы разработчиков и письма восстановления паролей не будут отправляться без mail().",
|
|
|
1696 |
"SystemCheckMemoryLimit": "Ограничение памяти",
|
1697 |
"SystemCheckMemoryLimitHelp": "На высоконагруженном сайте, процесс архивации может занять больше памяти, чем разрешено в данный момент. Если необходимо, измените директиву memory_limit в вашем php.ini файле.",
|
1698 |
"SystemCheckNoErrorsOrWarnings": "Нет никаких ошибок или предупреждений",
|
1707 |
"SystemCheckPdoAndMysqliHelp": "На сервере с Linux вы можете скомпилировать php со следующими опциями: %1$s В вашем php.ini добавьте следующие строки: %2$s",
|
1708 |
"SystemCheckPhp": "Версия PHP",
|
1709 |
"SystemCheckPhpPdoAndMysqli": "Больше информации тут: %1$sPHP PDO%2$s и %3$sMYSQLI%4$s.",
|
|
|
1710 |
"SystemCheckSettings": "Требуется настройка PHP (php.ini)",
|
1711 |
"SystemCheckSummaryNoProblems": "Ура! Нет никаких проблем с настройками Matomo. Молодец, возьми с полки пирожок.",
|
1712 |
"SystemCheckSummaryThereWereErrors": "Ой-ой! Matomo обнаружил некоторые %1$sкритические ошибки%2$s. %3$sЭти ошибки должны быть исправленные немедленно.%4$s",
|
app/lang/sk.json
CHANGED
@@ -991,7 +991,6 @@
|
|
991 |
"SystemCheckFunctionHelp": "Je potrebné aktivovať túto zabudovanú funkciu.",
|
992 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (grafika)",
|
993 |
"SystemCheckGDHelp": "„Sparklines“ (malé grafy) nebudú fungovať.",
|
994 |
-
"SystemCheckMbstring": "mbstring",
|
995 |
"SystemCheckMemoryLimit": "Pamäťový limit",
|
996 |
"SystemCheckMemoryLimitHelp": "Na webstránkach s vysokou premávkou archivačný proces bude vyžadovať viac pamäte, než je to aktuálne povolené.<br \/> Pozrite si direktívu memory_limit vo vašom php.ini súbore, ak je to potrebné.",
|
997 |
"SystemCheckNoErrorsOrWarnings": "Nie sú žiadne chyby alebo varovania",
|
991 |
"SystemCheckFunctionHelp": "Je potrebné aktivovať túto zabudovanú funkciu.",
|
992 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (grafika)",
|
993 |
"SystemCheckGDHelp": "„Sparklines“ (malé grafy) nebudú fungovať.",
|
|
|
994 |
"SystemCheckMemoryLimit": "Pamäťový limit",
|
995 |
"SystemCheckMemoryLimitHelp": "Na webstránkach s vysokou premávkou archivačný proces bude vyžadovať viac pamäte, než je to aktuálne povolené.<br \/> Pozrite si direktívu memory_limit vo vašom php.ini súbore, ak je to potrebné.",
|
996 |
"SystemCheckNoErrorsOrWarnings": "Nie sú žiadne chyby alebo varovania",
|
app/lang/sq.json
CHANGED
@@ -16,6 +16,7 @@
|
|
16 |
"Apply": "Zbatoje",
|
17 |
"ArchivingInlineHelp": "Për sajte me trafik mesatar ose të shumtë këshillohet të çaktivizohet vënia në punë e arkivimit nga Matomo prej shfletuesit. Në vend të kësaj këshillojmë të rregulloni një akt cron që të përpunoni raporte Matomo çdo orë.",
|
18 |
"ArchivingTriggerDescription": "E këshilluar për instalime më të ngarkuara të Matomo-s, lypset të %1$s rregulloni një akt cron-i%2$s që të përpunohen raportet automatikisht.",
|
|
|
19 |
"AuthenticationMethodSmtp": "Metodë mirëfilltësimi për SMTP",
|
20 |
"AverageOrderValue": "Vlerë Mesatare Porosie",
|
21 |
"AveragePrice": "Çmim Mesatar",
|
@@ -176,6 +177,8 @@
|
|
176 |
"ExceptionDatabaseVersion": "Versioni juaj për %1$s është %2$s por Matomo lyp të paktën %3$s.",
|
177 |
"ExceptionDatabaseVersionNewerThanCodebase": "Kodi bazë i Matomo-s tuaj xhiron versionin e vjetër %1$s dhe kemi gjetur se Baza juaj e të Dhënave Matomo është përmirësuar tashmë me versionin më të ri %2$s.",
|
178 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Ndoshta përgjegjësit e Matomo-s tuaj janë duke përfunduar procesin e përmirësimit. Ju lutemi, riprovoni pas pak minutash.",
|
|
|
|
|
179 |
"ExceptionFileIntegrity": "Kontrolli i pacenueshmërisë dështoi: %s",
|
180 |
"ExceptionFilesizeMismatch": "Mospërputhje madhësie kartelash: %1$s (pritej gjatësi: %2$s, u gjet: %3$s)",
|
181 |
"ExceptionIncompatibleClientServerVersions": "Versioni i klientit tuaj për %1$s është %2$s çka është e papërputhshme me versionin e shërbyesit %3$s.",
|
@@ -524,7 +527,8 @@
|
|
524 |
"Custom": "Vetjake",
|
525 |
"PreviousPeriod": "Periudhën e Kaluar",
|
526 |
"PreviousYear": "Vitin e Kaluar",
|
527 |
-
"ViewAccessRequired": "token_auth i përdorur ka shumë fuqi hyrjeje për t’u përdorur në një URL kërkese jo API. Ju lutemi, përdorni një fjalëkalim specifik për aplikacionin për një përdorues që ka vetëm leje parjesh."
|
|
|
528 |
},
|
529 |
"Mobile": {
|
530 |
"AboutPiwikMobile": "Rreth Matomo-s për Celular",
|
@@ -915,7 +919,23 @@
|
|
915 |
"TrackingFailuresEmail1": "Kjo bëhet vetëm për t’ju bërë të ditur se ditët e fundit kanë ndodhur %s lloje të ndryshme dështimesh ndjekjeje.",
|
916 |
"TrackingFailuresEmail2": "Që të shihni krejt kërkesat me ndjekje të dështuar %1$sklikoni këtu%2$s.",
|
917 |
"ImportFromGoogleAnalytics": "Importim prej Google Analytics",
|
918 |
-
"ImportFromGoogleAnalyticsDescription": "Nëse keni një zotërim Google Analytics dhe po kaloni në Matomo, mund të importoni të dhënat tuaja ekzistuese duke përdorur shtojcën %1$sGoogleAnalyticsImporter%2$s."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
919 |
},
|
920 |
"CoreHome": {
|
921 |
"CategoryNoData": "Pa të dhëna për këtë kategori. Provoni të \"Përfshini tërë popullatën\".",
|
@@ -1514,6 +1534,7 @@
|
|
1514 |
"RateFeatureTitle": "Ju pëlqen veçoria '%s'? Ju lutemi, vlerësojeni dhe lini një koment",
|
1515 |
"SendFeedback": "Dërgoji Përshtypjet",
|
1516 |
"ThankYou": "Faleminderit që na ndihmoni ta bëjmë më të mirë Matomo-n!",
|
|
|
1517 |
"TopLinkTooltip": "Na thoni se ç’mendim keni, ose kërkoni Asistencë Profesionale.",
|
1518 |
"ViewAnswersToFAQ": "Shihni përgjigjet te %1$sPyetje të Bëra Shpesh%2$s",
|
1519 |
"FAQs": "PBR-ra",
|
@@ -1531,7 +1552,7 @@
|
|
1531 |
"ContactUs": "Lidhuni me ne",
|
1532 |
"VisitTheForums": "Vizitoni %1$s Forumet%2$s dhe merrni ndihmë prej bashkësisë së përdoruesve të Matomo-s",
|
1533 |
"Forums": "Forume",
|
1534 |
-
"ReviewMatomoTitle": "
|
1535 |
"PleaseLeaveExternalReviewForMatomo": "Ndajini mendimet tuaja me të tjerët në një nga këto sajte dhe frymëzoni të tjerët të bahen pjesë e revolucionet tonë të të dhënave.",
|
1536 |
"RemindMeLater": "Kujtomë më vonë",
|
1537 |
"NeverAskMeAgain": "Mos më ripyet më kurrë",
|
@@ -1541,7 +1562,14 @@
|
|
1541 |
"RemoveOtherLabel": "Dua të shoh të dhëna 'Të tjera' të miat",
|
1542 |
"PurgeOldData": "Dua të heq ca të dhëna të vjetra",
|
1543 |
"SearchHelpResources": "Kërkoni për burime ndihme te matomo.org",
|
1544 |
-
"PopularHelpTopics": "Tema popullore ndihme"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1545 |
},
|
1546 |
"GeoIp2": {
|
1547 |
"AssumingNonApache": "S’gjendet dot funksioni apache_get_modules function, po merret i mirëqenë si shërbyes non-Apache.",
|
@@ -1858,6 +1886,7 @@
|
|
1858 |
"SystemCheckEvalHelp": "E domosdoshme për HTML QuickForm dhe sistemin Smarty të gjedheve.",
|
1859 |
"SystemCheckExtensions": "Të tjera zgjerime të domosdoshme",
|
1860 |
"SystemCheckFileIntegrity": "Pacenueshmëri kartele",
|
|
|
1861 |
"SystemCheckFunctions": "Funksione të domosdoshëm",
|
1862 |
"SystemCheckFunctionHelp": "Lypset ta aktivizoni këtë funksion të brendshëm.",
|
1863 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (grafikë)",
|
@@ -1866,11 +1895,8 @@
|
|
1866 |
"SystemCheckGzcompressHelp": "Lypset të aktivizoni zgjerimin zlib dhe funksionin gzcompress.",
|
1867 |
"SystemCheckGzuncompressHelp": "Lypset të aktivizoni zgjerimin zlib dhe funksionin gzuncompress.",
|
1868 |
"SystemCheckHashHelp": "Lypset të formësoni dhe rikrijoni PHP-në me mbulim të hash() të aktivizuar duke përjashtuar mundësinë --disable-hash.",
|
1869 |
-
"SystemCheckIconvHelp": "Lypset të formësoni dhe rindërtoni PHP-në me aktivizim të mbulimit të \"iconv\", --with-iconv.",
|
1870 |
"SystemCheckJsonHelp": "Zgjerimi php-json është i domosdoshëm që Matomo të lexojë dhe shkruajë të dhëna JSON.",
|
1871 |
"SystemCheckMailHelp": "Mesazhet mbi Përshtypjet dhe Fjalëkalim të Humbur nuk kanë për t’u dërguar pa mail().",
|
1872 |
-
"SystemCheckMbstring": "mbstring",
|
1873 |
-
"SystemCheckMbstringHelp": "Për trajtimin e shenjave shumëbajtshe te ndërfaqja e përdoruesit dhe përgjigjet API lypset zgjerimi mbstring. Shihni gjithashtu që mbstring.func_overload te php.ini i është dhënë vlera \"0\".",
|
1874 |
"SystemCheckMemoryLimit": "Kufi kujtese",
|
1875 |
"SystemCheckMemoryLimitHelp": "Në një sajt me shumë trafik, procesi i arkivimit mund të dojë më tepër kujtesë se sa i është dhënë tani. Në u dashtë, ndryshojeni parametrin memory_limit te kartela juaj php.ini.",
|
1876 |
"SystemCheckMemoryNoMemoryLimitSet": "S'është caktuar kufi kujtese",
|
@@ -1887,7 +1913,7 @@
|
|
1887 |
"SystemCheckPdoAndMysqliHelp": "Në një shërbyes Linux mund ta përpiloni php-në me mundësitë vijuese: %1$s te php.ini juaj, shtoni rreshtat vijues: %2$s",
|
1888 |
"SystemCheckPhp": "Version PHP-je",
|
1889 |
"SystemCheckPhpPdoAndMysqli": "Më tepër të dhëna te: %1$sPHP PDO%2$s dhe %3$sMYSQLI%4$s.",
|
1890 |
-
"
|
1891 |
"SystemCheckSettings": "Formësim PHP-je i domosdoshëm (php.ini)",
|
1892 |
"SystemCheckSummaryNoProblems": "Urraaa! S’ka probleme me rregullimin tuaj të Matomo-s. Rrihini shpatullat vetes.",
|
1893 |
"SystemCheckSummaryThereWereErrors": "Ah! Matomo ka zbuluar disa %1$sçështje kritike%2$s me rregullimin tuaj për të. %3$sKëto çështje duhen ndrequr menjëherë.%4$s",
|
@@ -1897,7 +1923,9 @@
|
|
1897 |
"SystemCheckTrackerHelp": "Kërkesa GET te matomo.php dështoi. Provoni ta kaloni këtë URL si një të lejuar nga Mirëfilltësimi HTTP dhe çaktivizoni mod_security (mund t’ju duhet t’i kërkoni ndihmë strehuesit tuaj web). Për më tepër të dhëna mbi gabimin, shihni kartelën e regjistrimit të gabimeve të shërbyesit tuaj web.",
|
1898 |
"SystemCheckWarnDomHelp": "Do të duhej të aktivizonit zgjerimin \"dom\" (p.sh., instaloni paketën \"php-dom\" dhe\/ose \"php-xml\").",
|
1899 |
"SystemCheckWarning": "Matomo do të punojë normalisht por mund t’i mungojnë disa veçori",
|
|
|
1900 |
"SystemCheckWarnLibXmlHelp": "Do të duhej të aktivizonit zgjerimin \"libxml\" (p.sh., paketën \"install the php-libxml\" ) meqë është e domosdoshme nga zgjerime të tjera bazë të PHP-së.",
|
|
|
1901 |
"SystemCheckWarnSimpleXMLHelp": "Do të duhej të aktivizonit zgjerimin \"SimpleXML\" (p.sh., instaloni paketën \"php-simplexml\" dhe\/ose \"php-xml\").",
|
1902 |
"SystemCheckWinPdoAndMysqliHelp": "Në një shërbyes Windows, mund të shtoni rreshtat vijues te php.ini juaj: %s",
|
1903 |
"SystemCheckWriteDirs": "Drejtori me hyrje për shkrim",
|
@@ -3918,6 +3946,8 @@
|
|
3918 |
"OnlyMatchedUrlsAllowedHelp": "Në u aktivizoftë, Matomo do të ndjekë veprime të brendshme vetëm kur URL-ja e Faqes është një nga URL-të e njohura për sajtin tuaj. Kjo pengon shfrytëzimin e padëshiruar të analizave tuaja përmes URL-sh për sajte të tjerë.",
|
3919 |
"OnlyMatchedUrlsAllowedHelpExamples": "Përkatësia dhe shtegu duhet të përputhen saktësisht dhe çdo nënpërkatësi e vlefshme duhet të specifikohet veçmas. Për shembull, kur URL-të e ditura janë 'http:\/\/shembull.com\/shteg' dhe 'http:\/\/imirë.shembull.com', kërkesat për ndjekje të 'http:\/\/shembull.com\/shtegtjetër' ose 'http:\/\/ikeq.shembull.com' shpërfillen.",
|
3920 |
"WebsitesManagement": "Administrim Sajtesh",
|
|
|
|
|
3921 |
"XManagement": "Administroni %s",
|
3922 |
"ChooseMeasurableTypeHeadline": "Ç’do të donit të matnit?",
|
3923 |
"YouCurrentlyHaveAccessToNWebsites": "Deri tani keni hyrje te %s sajte.",
|
16 |
"Apply": "Zbatoje",
|
17 |
"ArchivingInlineHelp": "Për sajte me trafik mesatar ose të shumtë këshillohet të çaktivizohet vënia në punë e arkivimit nga Matomo prej shfletuesit. Në vend të kësaj këshillojmë të rregulloni një akt cron që të përpunoni raporte Matomo çdo orë.",
|
18 |
"ArchivingTriggerDescription": "E këshilluar për instalime më të ngarkuara të Matomo-s, lypset të %1$s rregulloni një akt cron-i%2$s që të përpunohen raportet automatikisht.",
|
19 |
+
"ArchivingTriggerSegment": "Përdorimi i Segmenteve Vetjake prapë do të shkaktojë përpunimin e arkivave.",
|
20 |
"AuthenticationMethodSmtp": "Metodë mirëfilltësimi për SMTP",
|
21 |
"AverageOrderValue": "Vlerë Mesatare Porosie",
|
22 |
"AveragePrice": "Çmim Mesatar",
|
177 |
"ExceptionDatabaseVersion": "Versioni juaj për %1$s është %2$s por Matomo lyp të paktën %3$s.",
|
178 |
"ExceptionDatabaseVersionNewerThanCodebase": "Kodi bazë i Matomo-s tuaj xhiron versionin e vjetër %1$s dhe kemi gjetur se Baza juaj e të Dhënave Matomo është përmirësuar tashmë me versionin më të ri %2$s.",
|
179 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Ndoshta përgjegjësit e Matomo-s tuaj janë duke përfunduar procesin e përmirësimit. Ju lutemi, riprovoni pas pak minutash.",
|
180 |
+
"ExceptionDatabaseUnavailable": "Shërbyesi MySQL s’është në punë",
|
181 |
+
"ExceptionDatabaseAccess": "U mohua hyrje në bazë të dhënash",
|
182 |
"ExceptionFileIntegrity": "Kontrolli i pacenueshmërisë dështoi: %s",
|
183 |
"ExceptionFilesizeMismatch": "Mospërputhje madhësie kartelash: %1$s (pritej gjatësi: %2$s, u gjet: %3$s)",
|
184 |
"ExceptionIncompatibleClientServerVersions": "Versioni i klientit tuaj për %1$s është %2$s çka është e papërputhshme me versionin e shërbyesit %3$s.",
|
527 |
"Custom": "Vetjake",
|
528 |
"PreviousPeriod": "Periudhën e Kaluar",
|
529 |
"PreviousYear": "Vitin e Kaluar",
|
530 |
+
"ViewAccessRequired": "token_auth i përdorur ka shumë fuqi hyrjeje për t’u përdorur në një URL kërkese jo API. Ju lutemi, përdorni një fjalëkalim specifik për aplikacionin për një përdorues që ka vetëm leje parjesh.",
|
531 |
+
"Reasons": "Arsye"
|
532 |
},
|
533 |
"Mobile": {
|
534 |
"AboutPiwikMobile": "Rreth Matomo-s për Celular",
|
919 |
"TrackingFailuresEmail1": "Kjo bëhet vetëm për t’ju bërë të ditur se ditët e fundit kanë ndodhur %s lloje të ndryshme dështimesh ndjekjeje.",
|
920 |
"TrackingFailuresEmail2": "Që të shihni krejt kërkesat me ndjekje të dështuar %1$sklikoni këtu%2$s.",
|
921 |
"ImportFromGoogleAnalytics": "Importim prej Google Analytics",
|
922 |
+
"ImportFromGoogleAnalyticsDescription": "Nëse keni një zotërim Google Analytics dhe po kaloni në Matomo, mund të importoni të dhënat tuaja ekzistuese duke përdorur shtojcën %1$sGoogleAnalyticsImporter%2$s.",
|
923 |
+
"SecurityNotificationEmailSubject": "Njoftim Sigurie",
|
924 |
+
"SecurityNotificationRecoveryCodesShowedBody": "Dikush pa kodet e rimarrjes me mirëfilltësim dyfaktorësh të llogarisë tuaj.",
|
925 |
+
"SecurityNotificationRecoveryCodesRegeneratedBody": "Dikush prodhoi kode të rinj rimarrjeje me mirëfilltësim dyfaktorësh për llogarinë tuaj.",
|
926 |
+
"SecurityNotificationTwoFactorAuthEnabledBody": "Dikush aktivizoi mirëfilltësim dyfaktorësh në llogarinë tuaj.",
|
927 |
+
"SecurityNotificationTwoFactorAuthDisabledBody": "Dikush çaktivizoi mirëfilltësim dyfaktorësh në llogarinë tuaj.",
|
928 |
+
"SecurityNotificationTokenAuthCreatedBody": "Dikush krijoi një token mirëfilltësimi (përshkrimi: %s) në llogarinë tuaj. Nëse s’qetë ju, fshijeni token-in.",
|
929 |
+
"SecurityNotificationTokenAuthDeletedBody": "Dikush fshiu një token mirëfilltësimi (përshkrim: %s) në llogarinë tuaj.",
|
930 |
+
"SecurityNotificationAllTokenAuthDeletedBody": "Dikush fshiu krejt token-ët e mirëfilltësimit në llogarinë tuaj.",
|
931 |
+
"SecurityNotificationSettingsChangedByUserBody": "Dikush ndryshoi rregullimet e sistemit. Rregullime të prekura: %s.",
|
932 |
+
"SecurityNotificationSettingsChangedByOtherSuperUserBody": "Një tjetër superpërdorues (%1$s) ndryshoi rregullimet e sistemit. Rregullime të prekura: %2$s. Nëse dini gjë rreth kësaj veprimtarie, vazhdoni. Nëse s’e njihni këtë veprimtari, ju lutemi, lidhuni me superpërdorues të tjerë.",
|
933 |
+
"SecurityNotificationUserCreatedBody": "Dikush krijoi një përdorues të ri (kredenciale hyrjeje: %s) në llogarinë tuaj.",
|
934 |
+
"SecurityNotificationUserDeletedBody": "Dikush fshiu një përdorues (kredenciale hyrjeje: %s) në llogarinë tuaj.",
|
935 |
+
"SecurityNotificationIfItWasYou": "Nëse qetë ju, vazhdoni. Nëse s’e njihni këtë veprimtari, ju lutemi, ricaktoni fjalëkalimin tuaj.",
|
936 |
+
"SecurityNotificationCheckTwoFactor": "Ju lutemi, kontrolloni aplikacionin tuaj të mirëfilltësimit dyfaktorësh ose pajisjen tuaj.",
|
937 |
+
"BruteForce": "Me Zor",
|
938 |
+
"TwoFactorAuth": "Mirëfilltësim dyfaktorësh"
|
939 |
},
|
940 |
"CoreHome": {
|
941 |
"CategoryNoData": "Pa të dhëna për këtë kategori. Provoni të \"Përfshini tërë popullatën\".",
|
1534 |
"RateFeatureTitle": "Ju pëlqen veçoria '%s'? Ju lutemi, vlerësojeni dhe lini një koment",
|
1535 |
"SendFeedback": "Dërgoji Përshtypjet",
|
1536 |
"ThankYou": "Faleminderit që na ndihmoni ta bëjmë më të mirë Matomo-n!",
|
1537 |
+
"ThankYouForSpreading": "Faleminderit për përhapjen e fjalës dhe për krijimin e një web-i më të parrezik",
|
1538 |
"TopLinkTooltip": "Na thoni se ç’mendim keni, ose kërkoni Asistencë Profesionale.",
|
1539 |
"ViewAnswersToFAQ": "Shihni përgjigjet te %1$sPyetje të Bëra Shpesh%2$s",
|
1540 |
"FAQs": "PBR-ra",
|
1552 |
"ContactUs": "Lidhuni me ne",
|
1553 |
"VisitTheForums": "Vizitoni %1$s Forumet%2$s dhe merrni ndihmë prej bashkësisë së përdoruesve të Matomo-s",
|
1554 |
"Forums": "Forume",
|
1555 |
+
"ReviewMatomoTitle": "Ju pëlqen Matomo?",
|
1556 |
"PleaseLeaveExternalReviewForMatomo": "Ndajini mendimet tuaja me të tjerët në një nga këto sajte dhe frymëzoni të tjerët të bahen pjesë e revolucionet tonë të të dhënave.",
|
1557 |
"RemindMeLater": "Kujtomë më vonë",
|
1558 |
"NeverAskMeAgain": "Mos më ripyet më kurrë",
|
1562 |
"RemoveOtherLabel": "Dua të shoh të dhëna 'Të tjera' të miat",
|
1563 |
"PurgeOldData": "Dua të heq ca të dhëna të vjetra",
|
1564 |
"SearchHelpResources": "Kërkoni për burime ndihme te matomo.org",
|
1565 |
+
"PopularHelpTopics": "Tema popullore ndihme",
|
1566 |
+
"ReferMatomo": "Referoni Matomo-n",
|
1567 |
+
"ReferBannerTitle": "Besoni në Matomo?",
|
1568 |
+
"ReferBannerLonger": "Ju lutemi, na ndihmoni të përhapim fjalën rreth nesh, që kështu më tepër njerëz të kenë kontrollin mbi të dhënat e tyre analitike.",
|
1569 |
+
"ReferBannerEmailShareSubject": "U tregoni për Matomo Analytics që tani, që të rifitojnë kontrollin!",
|
1570 |
+
"ReferBannerEmailShareBody": "Zgjedh Matomo-n, një alternativë etike kundrejt Google Analytics, që më jep 100%% pronësi të dhënash dhe i mbron të dhënat e vizitorëve të sajtit tim.\nPo e jap këtë mesazh me shpresën se do t’i riktheni vetes pushtetin nga Google dhe do të keni pronësi të plotë të të dhënave tuaja.\n\nShiheni Matomo-n te https:\/\/matomo.org",
|
1571 |
+
"ReferBannerSocialShareText": "Nëse përdorni Google Analytics, jini në kontroll, duke u hedhur te një alternativë etike si Matomoja që sot!",
|
1572 |
+
"WontShowAgain": "S’do ta rishfaqim këtë mesazh."
|
1573 |
},
|
1574 |
"GeoIp2": {
|
1575 |
"AssumingNonApache": "S’gjendet dot funksioni apache_get_modules function, po merret i mirëqenë si shërbyes non-Apache.",
|
1886 |
"SystemCheckEvalHelp": "E domosdoshme për HTML QuickForm dhe sistemin Smarty të gjedheve.",
|
1887 |
"SystemCheckExtensions": "Të tjera zgjerime të domosdoshme",
|
1888 |
"SystemCheckFileIntegrity": "Pacenueshmëri kartele",
|
1889 |
+
"SystemCheckFilterHelp": "Duhet të formësoni dhe rimontoni PHP-në me mbulim të kativizuar për \"filter\" (mos përdorni --disable-filter).",
|
1890 |
"SystemCheckFunctions": "Funksione të domosdoshëm",
|
1891 |
"SystemCheckFunctionHelp": "Lypset ta aktivizoni këtë funksion të brendshëm.",
|
1892 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (grafikë)",
|
1895 |
"SystemCheckGzcompressHelp": "Lypset të aktivizoni zgjerimin zlib dhe funksionin gzcompress.",
|
1896 |
"SystemCheckGzuncompressHelp": "Lypset të aktivizoni zgjerimin zlib dhe funksionin gzuncompress.",
|
1897 |
"SystemCheckHashHelp": "Lypset të formësoni dhe rikrijoni PHP-në me mbulim të hash() të aktivizuar duke përjashtuar mundësinë --disable-hash.",
|
|
|
1898 |
"SystemCheckJsonHelp": "Zgjerimi php-json është i domosdoshëm që Matomo të lexojë dhe shkruajë të dhëna JSON.",
|
1899 |
"SystemCheckMailHelp": "Mesazhet mbi Përshtypjet dhe Fjalëkalim të Humbur nuk kanë për t’u dërguar pa mail().",
|
|
|
|
|
1900 |
"SystemCheckMemoryLimit": "Kufi kujtese",
|
1901 |
"SystemCheckMemoryLimitHelp": "Në një sajt me shumë trafik, procesi i arkivimit mund të dojë më tepër kujtesë se sa i është dhënë tani. Në u dashtë, ndryshojeni parametrin memory_limit te kartela juaj php.ini.",
|
1902 |
"SystemCheckMemoryNoMemoryLimitSet": "S'është caktuar kufi kujtese",
|
1913 |
"SystemCheckPdoAndMysqliHelp": "Në një shërbyes Linux mund ta përpiloni php-në me mundësitë vijuese: %1$s te php.ini juaj, shtoni rreshtat vijues: %2$s",
|
1914 |
"SystemCheckPhp": "Version PHP-je",
|
1915 |
"SystemCheckPhpPdoAndMysqli": "Më tepër të dhëna te: %1$sPHP PDO%2$s dhe %3$sMYSQLI%4$s.",
|
1916 |
+
"SystemCheckSessionHelp": "Lypset të formësoni dhe rimontoni PHP-në me aktivizim të mbulimit të \"session\" (mos përdorni --disable-session).",
|
1917 |
"SystemCheckSettings": "Formësim PHP-je i domosdoshëm (php.ini)",
|
1918 |
"SystemCheckSummaryNoProblems": "Urraaa! S’ka probleme me rregullimin tuaj të Matomo-s. Rrihini shpatullat vetes.",
|
1919 |
"SystemCheckSummaryThereWereErrors": "Ah! Matomo ka zbuluar disa %1$sçështje kritike%2$s me rregullimin tuaj për të. %3$sKëto çështje duhen ndrequr menjëherë.%4$s",
|
1923 |
"SystemCheckTrackerHelp": "Kërkesa GET te matomo.php dështoi. Provoni ta kaloni këtë URL si një të lejuar nga Mirëfilltësimi HTTP dhe çaktivizoni mod_security (mund t’ju duhet t’i kërkoni ndihmë strehuesit tuaj web). Për më tepër të dhëna mbi gabimin, shihni kartelën e regjistrimit të gabimeve të shërbyesit tuaj web.",
|
1924 |
"SystemCheckWarnDomHelp": "Do të duhej të aktivizonit zgjerimin \"dom\" (p.sh., instaloni paketën \"php-dom\" dhe\/ose \"php-xml\").",
|
1925 |
"SystemCheckWarning": "Matomo do të punojë normalisht por mund t’i mungojnë disa veçori",
|
1926 |
+
"SystemCheckWarnJsonHelp": "Do të duhej të aktivizonit zgjerimin \"json\" (p.sh., instaloni paketën \"php-json\").",
|
1927 |
"SystemCheckWarnLibXmlHelp": "Do të duhej të aktivizonit zgjerimin \"libxml\" (p.sh., paketën \"install the php-libxml\" ) meqë është e domosdoshme nga zgjerime të tjera bazë të PHP-së.",
|
1928 |
+
"SystemCheckWarnOpensslHelp": "Do të duhej të aktivizonit zgjerimin \"openssl\", që të lejohen përditësime të siguruara.",
|
1929 |
"SystemCheckWarnSimpleXMLHelp": "Do të duhej të aktivizonit zgjerimin \"SimpleXML\" (p.sh., instaloni paketën \"php-simplexml\" dhe\/ose \"php-xml\").",
|
1930 |
"SystemCheckWinPdoAndMysqliHelp": "Në një shërbyes Windows, mund të shtoni rreshtat vijues te php.ini juaj: %s",
|
1931 |
"SystemCheckWriteDirs": "Drejtori me hyrje për shkrim",
|
3946 |
"OnlyMatchedUrlsAllowedHelp": "Në u aktivizoftë, Matomo do të ndjekë veprime të brendshme vetëm kur URL-ja e Faqes është një nga URL-të e njohura për sajtin tuaj. Kjo pengon shfrytëzimin e padëshiruar të analizave tuaja përmes URL-sh për sajte të tjerë.",
|
3947 |
"OnlyMatchedUrlsAllowedHelpExamples": "Përkatësia dhe shtegu duhet të përputhen saktësisht dhe çdo nënpërkatësi e vlefshme duhet të specifikohet veçmas. Për shembull, kur URL-të e ditura janë 'http:\/\/shembull.com\/shteg' dhe 'http:\/\/imirë.shembull.com', kërkesat për ndjekje të 'http:\/\/shembull.com\/shtegtjetër' ose 'http:\/\/ikeq.shembull.com' shpërfillen.",
|
3948 |
"WebsitesManagement": "Administrim Sajtesh",
|
3949 |
+
"WebsiteUpdated": "Sajti u përditësua",
|
3950 |
+
"WebsiteCreated": "Sajti u krijua",
|
3951 |
"XManagement": "Administroni %s",
|
3952 |
"ChooseMeasurableTypeHeadline": "Ç’do të donit të matnit?",
|
3953 |
"YouCurrentlyHaveAccessToNWebsites": "Deri tani keni hyrje te %s sajte.",
|
app/lang/sr.json
CHANGED
@@ -988,9 +988,10 @@
|
|
988 |
"ColumnAvgTimeOnDimension": "Prosečno vreme na dimenziji"
|
989 |
},
|
990 |
"CustomJsTracker": {
|
991 |
-
"PluginDescription": "Omogućuje bilo kom
|
992 |
-
"DiagnosticPiwikJsWritable": "JavaScript treker u koji je moguće pisati (
|
993 |
-
"
|
|
|
994 |
},
|
995 |
"DBStats": {
|
996 |
"DatabaseUsage": "Iskorišćenost baze",
|
@@ -1411,9 +1412,7 @@
|
|
1411 |
"SystemCheckGzcompressHelp": "Potrebno je da uključite zlib proširenje i funkciju gzcompress",
|
1412 |
"SystemCheckGzuncompressHelp": "Potrebno je da uključite zlib proširenje i funkciju gzcompress",
|
1413 |
"SystemCheckHashHelp": "Potrebno je da kompajlirate PHP sa podrškom za hash() tako što ćete isključiti opciju --disable-hash.",
|
1414 |
-
"SystemCheckIconvHelp": "Potrebno je da kompajlirate PHP sa \"iconv\" podrškom, --with-iconv.",
|
1415 |
"SystemCheckMailHelp": "Vaši komentari i poruke za izgubljene lozinke neće biti poslate bez mail() funkcije.",
|
1416 |
-
"SystemCheckMbstring": "mbstring",
|
1417 |
"SystemCheckMemoryLimit": "Memorijsko ograničenje",
|
1418 |
"SystemCheckMemoryLimitHelp": "Na sajtovima sa visokim saobraćajem proces arhiviranja podataka može zahtevati više memorije nego što je to trenutno dozvoljeno.<br \/>Promenite vrednost parametra memory_limit u php.ini datoteci ukoliko je to neophodno.",
|
1419 |
"SystemCheckNoErrorsOrWarnings": "Nema grešaka i upozorenja",
|
@@ -1428,7 +1427,6 @@
|
|
1428 |
"SystemCheckPdoAndMysqliHelp": "Na Linux serveru možete kompajlirati PHP sa sledećim opcijama: %1$s U datoteku php.ini dodajte sledeće linije: %2$s",
|
1429 |
"SystemCheckPhp": "Verzija PHP-a",
|
1430 |
"SystemCheckPhpPdoAndMysqli": "Više informacija na: %1$sPHP PDO%2$s i %3$sMYSQLI%4$s.",
|
1431 |
-
"SystemCheckSplHelp": "Potrebno je da kompajlirate PHP sa standardnom PHP bibiotekom (SPL).",
|
1432 |
"SystemCheckSettings": "Potrebna PHP podešavanja (php.ini)",
|
1433 |
"SystemCheckSummaryNoProblems": "Bravo! Nema problema sa vašom instalacijom Matomo-a. Možete biti zadovoljni.",
|
1434 |
"SystemCheckSummaryThereWereErrors": "Matomo je otkrio %1$skritične probleme%2$s sa vašom instalacijom. %3$sPotrebno je da ih odmah rešite.%4$s",
|
988 |
"ColumnAvgTimeOnDimension": "Prosečno vreme na dimenziji"
|
989 |
},
|
990 |
"CustomJsTracker": {
|
991 |
+
"PluginDescription": "Omogućuje bilo kom Piwik dodatku da proširi Matomo JavaScript datoteku za praćenje (matomo.js) i doda nove funkcionalnosti i mogućnosti za praćenje sajtova.",
|
992 |
+
"DiagnosticPiwikJsWritable": "JavaScript treker u koji je moguće pisati (%s)",
|
993 |
+
"DiagnosticPiwikJsNotWritable": "U Matomo JavaScript treker datoteku %s nije moguće pisati što znači da ostali dodaci ne mogu da prošire JavaScript treker. U budućnosti možda čak ni neke bazične funkcije neće raditi kako se očekuje.",
|
994 |
+
"DiagnosticPiwikJsMakeWritable": "Predlažemo da omogućite pisanje u %1$s sledećom komandom: %2$s"
|
995 |
},
|
996 |
"DBStats": {
|
997 |
"DatabaseUsage": "Iskorišćenost baze",
|
1412 |
"SystemCheckGzcompressHelp": "Potrebno je da uključite zlib proširenje i funkciju gzcompress",
|
1413 |
"SystemCheckGzuncompressHelp": "Potrebno je da uključite zlib proširenje i funkciju gzcompress",
|
1414 |
"SystemCheckHashHelp": "Potrebno je da kompajlirate PHP sa podrškom za hash() tako što ćete isključiti opciju --disable-hash.",
|
|
|
1415 |
"SystemCheckMailHelp": "Vaši komentari i poruke za izgubljene lozinke neće biti poslate bez mail() funkcije.",
|
|
|
1416 |
"SystemCheckMemoryLimit": "Memorijsko ograničenje",
|
1417 |
"SystemCheckMemoryLimitHelp": "Na sajtovima sa visokim saobraćajem proces arhiviranja podataka može zahtevati više memorije nego što je to trenutno dozvoljeno.<br \/>Promenite vrednost parametra memory_limit u php.ini datoteci ukoliko je to neophodno.",
|
1418 |
"SystemCheckNoErrorsOrWarnings": "Nema grešaka i upozorenja",
|
1427 |
"SystemCheckPdoAndMysqliHelp": "Na Linux serveru možete kompajlirati PHP sa sledećim opcijama: %1$s U datoteku php.ini dodajte sledeće linije: %2$s",
|
1428 |
"SystemCheckPhp": "Verzija PHP-a",
|
1429 |
"SystemCheckPhpPdoAndMysqli": "Više informacija na: %1$sPHP PDO%2$s i %3$sMYSQLI%4$s.",
|
|
|
1430 |
"SystemCheckSettings": "Potrebna PHP podešavanja (php.ini)",
|
1431 |
"SystemCheckSummaryNoProblems": "Bravo! Nema problema sa vašom instalacijom Matomo-a. Možete biti zadovoljni.",
|
1432 |
"SystemCheckSummaryThereWereErrors": "Matomo je otkrio %1$skritične probleme%2$s sa vašom instalacijom. %3$sPotrebno je da ih odmah rešite.%4$s",
|
app/lang/sv.json
CHANGED
@@ -1523,7 +1523,6 @@
|
|
1523 |
"ContactUs": "Kontakta oss",
|
1524 |
"VisitTheForums": "Besök %1$s forumet%2$s och få hjälp av Matomo-användare",
|
1525 |
"Forums": "Forum",
|
1526 |
-
"ReviewMatomoTitle": "Tror du på Matomo?",
|
1527 |
"PleaseLeaveExternalReviewForMatomo": "Dela dina tankar på någon av dessa webbplatser och inspirera andra att vara med i vår datarevolution.",
|
1528 |
"RemindMeLater": "Påminn mig senare",
|
1529 |
"NeverAskMeAgain": "Fråga mig inte igen",
|
@@ -1533,7 +1532,8 @@
|
|
1533 |
"RemoveOtherLabel": "Jag vill se min \"Övriga\" data",
|
1534 |
"PurgeOldData": "Jag vill ta bort viss gammal data",
|
1535 |
"SearchHelpResources": "Sök efter matomo.org hjälpresurser",
|
1536 |
-
"PopularHelpTopics": "Populära hjälpämnen"
|
|
|
1537 |
},
|
1538 |
"GeoIp2": {
|
1539 |
"AssumingNonApache": "Kan inte hitta funktionen apache_get_modules, förutsätter att Apache inte används som webbserver.",
|
@@ -1858,11 +1858,8 @@
|
|
1858 |
"SystemCheckGzcompressHelp": "Du behöver aktivera tillägget zlib och gzcompress funktionen.",
|
1859 |
"SystemCheckGzuncompressHelp": "Du behöver aktivera tillägget zlib och funktionen gzuncompress.",
|
1860 |
"SystemCheckHashHelp": "Du behöver konfigurera och bygga om PHP med stöd för hash() genom att ta bort alternativet --disable-hash.",
|
1861 |
-
"SystemCheckIconvHelp": "Du måste konfigurera och installera PHP på nytt med \"iconv\" stöd aktiverat, --with-iconv.",
|
1862 |
"SystemCheckJsonHelp": "Php-json extension krävs för att Matomo ska kunna läsa och skriva JSON-data.",
|
1863 |
"SystemCheckMailHelp": "Feedback och bortglömda lösenord kommer inte att skickas utan mail().",
|
1864 |
-
"SystemCheckMbstring": "mbstring",
|
1865 |
-
"SystemCheckMbstringHelp": "Tillägget mbstring krävs för att hantera tecken på mer än en byte i användargränssnittet och API-svaren. Kontrollera även att mbstring.func_overload är satt till noll i php.ini.",
|
1866 |
"SystemCheckMemoryLimit": "Minnesbegränsning",
|
1867 |
"SystemCheckMemoryLimitHelp": "På en högtrafikswebbplats, kan arkiveringsprocessen kräva mer minne än vad som för tillfället är tillåtet. Om det är nödvändigt ändra memory_limit direktivet i din php.ini fil.",
|
1868 |
"SystemCheckMemoryNoMemoryLimitSet": "Det finns ingen minnesgräns inställd",
|
@@ -1879,7 +1876,6 @@
|
|
1879 |
"SystemCheckPdoAndMysqliHelp": "På en Linux server kan du kompilera php med följande alternativ: %1$s I din php.ini, lägg till följande rader: %2$s",
|
1880 |
"SystemCheckPhp": "PHP version",
|
1881 |
"SystemCheckPhpPdoAndMysqli": "Mer information finner du på: %1$sPHP PDO%2$s och %3$sYSQLI%4$s.",
|
1882 |
-
"SystemCheckSplHelp": "Du måste konfigurera och installera PHP på nytt med Standard PHP Bibliotek (SPL) aktiverat (som standard).",
|
1883 |
"SystemCheckSettings": "Nödvändig PHP-konfiguration (php.ini)",
|
1884 |
"SystemCheckSummaryNoProblems": "Jippiii! Det finns inga problem med installationen av Matomo. Ge dig själv en klapp på axeln.",
|
1885 |
"SystemCheckSummaryThereWereErrors": "Oj då.. Matomo har upptäckt några %1$skritiska problem%2$s med installationen. %3$sDessa problem bör åtgärdas omgående.%4$s",
|
1523 |
"ContactUs": "Kontakta oss",
|
1524 |
"VisitTheForums": "Besök %1$s forumet%2$s och få hjälp av Matomo-användare",
|
1525 |
"Forums": "Forum",
|
|
|
1526 |
"PleaseLeaveExternalReviewForMatomo": "Dela dina tankar på någon av dessa webbplatser och inspirera andra att vara med i vår datarevolution.",
|
1527 |
"RemindMeLater": "Påminn mig senare",
|
1528 |
"NeverAskMeAgain": "Fråga mig inte igen",
|
1532 |
"RemoveOtherLabel": "Jag vill se min \"Övriga\" data",
|
1533 |
"PurgeOldData": "Jag vill ta bort viss gammal data",
|
1534 |
"SearchHelpResources": "Sök efter matomo.org hjälpresurser",
|
1535 |
+
"PopularHelpTopics": "Populära hjälpämnen",
|
1536 |
+
"ReferBannerTitle": "Tror du på Matomo?"
|
1537 |
},
|
1538 |
"GeoIp2": {
|
1539 |
"AssumingNonApache": "Kan inte hitta funktionen apache_get_modules, förutsätter att Apache inte används som webbserver.",
|
1858 |
"SystemCheckGzcompressHelp": "Du behöver aktivera tillägget zlib och gzcompress funktionen.",
|
1859 |
"SystemCheckGzuncompressHelp": "Du behöver aktivera tillägget zlib och funktionen gzuncompress.",
|
1860 |
"SystemCheckHashHelp": "Du behöver konfigurera och bygga om PHP med stöd för hash() genom att ta bort alternativet --disable-hash.",
|
|
|
1861 |
"SystemCheckJsonHelp": "Php-json extension krävs för att Matomo ska kunna läsa och skriva JSON-data.",
|
1862 |
"SystemCheckMailHelp": "Feedback och bortglömda lösenord kommer inte att skickas utan mail().",
|
|
|
|
|
1863 |
"SystemCheckMemoryLimit": "Minnesbegränsning",
|
1864 |
"SystemCheckMemoryLimitHelp": "På en högtrafikswebbplats, kan arkiveringsprocessen kräva mer minne än vad som för tillfället är tillåtet. Om det är nödvändigt ändra memory_limit direktivet i din php.ini fil.",
|
1865 |
"SystemCheckMemoryNoMemoryLimitSet": "Det finns ingen minnesgräns inställd",
|
1876 |
"SystemCheckPdoAndMysqliHelp": "På en Linux server kan du kompilera php med följande alternativ: %1$s I din php.ini, lägg till följande rader: %2$s",
|
1877 |
"SystemCheckPhp": "PHP version",
|
1878 |
"SystemCheckPhpPdoAndMysqli": "Mer information finner du på: %1$sPHP PDO%2$s och %3$sYSQLI%4$s.",
|
|
|
1879 |
"SystemCheckSettings": "Nödvändig PHP-konfiguration (php.ini)",
|
1880 |
"SystemCheckSummaryNoProblems": "Jippiii! Det finns inga problem med installationen av Matomo. Ge dig själv en klapp på axeln.",
|
1881 |
"SystemCheckSummaryThereWereErrors": "Oj då.. Matomo har upptäckt några %1$skritiska problem%2$s med installationen. %3$sDessa problem bör åtgärdas omgående.%4$s",
|
app/lang/th.json
CHANGED
@@ -638,9 +638,7 @@
|
|
638 |
"SystemCheckGlobHelp": "ฟังก์ชันที่มีอยู่ภายในนี้ได้ถูกปิดการใช้งานบนโฮสต์ของคุณ Matomo จะพยายามทำการจำลองฟังก์ชันนี้ แต่อาจพบเพิ่มเติมข้อบังคับด้านความปลอดภัย ฟังก์ชันการทำงานอาจจะโดนผลกระทบ",
|
639 |
"SystemCheckGzcompressHelp": "คุณต้องเปิดใช้ส่วนขยาย zlib และฟังก์ชั่น gzcompress",
|
640 |
"SystemCheckGzuncompressHelp": "คุณต้องเปิดใช้ส่วนขยาย zlib และฟังก์ชั่น gzuncompress",
|
641 |
-
"SystemCheckIconvHelp": "คุณจำเป็นต้องตั้งค่าคอนฟิก และสร้างใหม่ PHP ด้วย \"iconv\" เปิดใช้งานการสนับสนุน --with-iconv.",
|
642 |
"SystemCheckMailHelp": "ความคิดเห็นและลืมรหัสผ่านจะไม่สามารถส่งข้อความโดยไม่ต้องรวมกับ mail()",
|
643 |
-
"SystemCheckMbstring": "mbstring",
|
644 |
"SystemCheckMemoryLimit": "ขีดจำกัดของหน่วยความจำ",
|
645 |
"SystemCheckMemoryLimitHelp": "บนเว็บไซต์การรับส่งข้อมูลสูง กระบวนการเก็บถาวรอาจต้องใช้หน่วยความจำเพิ่มเติมมากกว่าที่ได้รับอนุญาตในขณะนี้ ถ้าจำเป็น เปลี่ยนคำสั่ง memory_limit ในไฟล์ php.ini ของคุณ",
|
646 |
"SystemCheckOpenURL": "เปิด URL",
|
@@ -652,7 +650,6 @@
|
|
652 |
"SystemCheckPdoAndMysqliHelp": "บน Linux server คุณสามารถคอมไพล์ php ด้วยตัวเลือกต่อไปนี้: %1$s ใน php.ini ของคุณเพิ่มบรรทัดต่อไปนี้: %2$s",
|
653 |
"SystemCheckPhp": "เวอร์ชั่น PHP",
|
654 |
"SystemCheckPhpPdoAndMysqli": "ข้อมูลเพิ่มเติมเกี่ยวกับ: %1$sPHP PDO%2$s และ %3$sMYSQLI%4$s",
|
655 |
-
"SystemCheckSplHelp": "คุณจำเป็นต้องตั้งค่าคอนฟิก และสร้างใหม่ PHP ด้วยการมาตรฐาน PHP Library (SPL) เปิดใช้งาน (โดยค่าเริ่มต้น)",
|
656 |
"SystemCheckTimeLimitHelp": "บนเว็บไซต์การรับส่งข้อมูลสูง การดำเนินกระบวนการเก็บถาวรอาจต้องใช้เวลามากขึ้นกว่าในปัจจุบันได้รับอนุญาต ถ้าจำเป็น เปลี่ยนคำสั่ง max_execution_time ในแฟ้ม php.ini ของคุณ",
|
657 |
"SystemCheckTracker": "สถานะ Tracker",
|
658 |
"SystemCheckWarnDomHelp": "คุณควรเปิดใช้ส่วนขยาย \"dom\" (เช่นการติดตั้ง \"php-dom\" และ\/หรือแพคเกจ \"php-xml\")",
|
638 |
"SystemCheckGlobHelp": "ฟังก์ชันที่มีอยู่ภายในนี้ได้ถูกปิดการใช้งานบนโฮสต์ของคุณ Matomo จะพยายามทำการจำลองฟังก์ชันนี้ แต่อาจพบเพิ่มเติมข้อบังคับด้านความปลอดภัย ฟังก์ชันการทำงานอาจจะโดนผลกระทบ",
|
639 |
"SystemCheckGzcompressHelp": "คุณต้องเปิดใช้ส่วนขยาย zlib และฟังก์ชั่น gzcompress",
|
640 |
"SystemCheckGzuncompressHelp": "คุณต้องเปิดใช้ส่วนขยาย zlib และฟังก์ชั่น gzuncompress",
|
|
|
641 |
"SystemCheckMailHelp": "ความคิดเห็นและลืมรหัสผ่านจะไม่สามารถส่งข้อความโดยไม่ต้องรวมกับ mail()",
|
|
|
642 |
"SystemCheckMemoryLimit": "ขีดจำกัดของหน่วยความจำ",
|
643 |
"SystemCheckMemoryLimitHelp": "บนเว็บไซต์การรับส่งข้อมูลสูง กระบวนการเก็บถาวรอาจต้องใช้หน่วยความจำเพิ่มเติมมากกว่าที่ได้รับอนุญาตในขณะนี้ ถ้าจำเป็น เปลี่ยนคำสั่ง memory_limit ในไฟล์ php.ini ของคุณ",
|
644 |
"SystemCheckOpenURL": "เปิด URL",
|
650 |
"SystemCheckPdoAndMysqliHelp": "บน Linux server คุณสามารถคอมไพล์ php ด้วยตัวเลือกต่อไปนี้: %1$s ใน php.ini ของคุณเพิ่มบรรทัดต่อไปนี้: %2$s",
|
651 |
"SystemCheckPhp": "เวอร์ชั่น PHP",
|
652 |
"SystemCheckPhpPdoAndMysqli": "ข้อมูลเพิ่มเติมเกี่ยวกับ: %1$sPHP PDO%2$s และ %3$sMYSQLI%4$s",
|
|
|
653 |
"SystemCheckTimeLimitHelp": "บนเว็บไซต์การรับส่งข้อมูลสูง การดำเนินกระบวนการเก็บถาวรอาจต้องใช้เวลามากขึ้นกว่าในปัจจุบันได้รับอนุญาต ถ้าจำเป็น เปลี่ยนคำสั่ง max_execution_time ในแฟ้ม php.ini ของคุณ",
|
654 |
"SystemCheckTracker": "สถานะ Tracker",
|
655 |
"SystemCheckWarnDomHelp": "คุณควรเปิดใช้ส่วนขยาย \"dom\" (เช่นการติดตั้ง \"php-dom\" และ\/หรือแพคเกจ \"php-xml\")",
|
app/lang/tl.json
CHANGED
@@ -932,9 +932,7 @@
|
|
932 |
"SystemCheckGlobHelp": "Ang mga gawa ng function na ito ay hindi gumagana sa iyong host. Ang Matomo ay susubukan na ito ay gayahin ngunit maaring magkaroon ng karagdagang paghihipit sa seguridad. Ang functionality nito ay lubos na maapektuhan.",
|
933 |
"SystemCheckGzcompressHelp": "Kailangan mong i-enable ang zlib extension at gzcompress function.",
|
934 |
"SystemCheckGzuncompressHelp": "Kailangan mong i-enable ang zlib extension at gzuncompress function.",
|
935 |
-
"SystemCheckIconvHelp": "kailangan mong i-configure at e-build ang PHP na may \"iconv\" ng may gumaganang support --with-iconv.",
|
936 |
"SystemCheckMailHelp": "Ang Feedback at mga mensahe ng Nawalang Password ay hindi ipapadala nang walang mail ().",
|
937 |
-
"SystemCheckMbstring": "mbstring",
|
938 |
"SystemCheckMemoryLimit": "Limitasyon ng memorya",
|
939 |
"SystemCheckMemoryLimitHelp": "Sa may mataas na traffic na website ang proseso ng pag-archive ay mangailangan ng higit pang memory kaysa sa kasalukuyan. Kung kinakailangan palitan ang memory_limit directive sa iyong php.ini file",
|
940 |
"SystemCheckOpenURL": "Bukas na URL",
|
@@ -946,7 +944,6 @@
|
|
946 |
"SystemCheckPdoAndMysqliHelp": "Sa GNU\/Linux server ay maari mong e-compile ang iyong php kasama ang mag option na ito: %1$s In your php.ini idag-dag ang mga sumusunod na mga linya: %2$s",
|
947 |
"SystemCheckPhp": "Bersyon ng PHP",
|
948 |
"SystemCheckPhpPdoAndMysqli": "Marami pang impormasyon sa: : %1$sPHP PDO%2$s at %3$sMYSQLI%4$s.",
|
949 |
-
"SystemCheckSplHelp": "kailangan mong i-configure at muling e-build ang PHP na may Standard PHP Library (SPL) na syang gumagana(default).",
|
950 |
"SystemCheckSummaryNoProblems": "Huzzah! Walang mga problema sa pag-setup mo ng Matomo. Bigyan ang iyong sarili ng isang magandang pahinga.",
|
951 |
"SystemCheckSummaryThereWereErrors": "Naku! Ang Matomo ay may nakitang i-ilang %1$s critical isyo sa %2$s sa iyong Matomo setup. %3$s Ang mga isyung ito ay dapat na maayos ka-agad. %4$s",
|
952 |
"SystemCheckSummaryThereWereWarnings": "May ilang mga isyu sa iyong system. Ang Matomo ay gagana ngunit maaari kang makaranas ng ilang mga menor na problema.",
|
932 |
"SystemCheckGlobHelp": "Ang mga gawa ng function na ito ay hindi gumagana sa iyong host. Ang Matomo ay susubukan na ito ay gayahin ngunit maaring magkaroon ng karagdagang paghihipit sa seguridad. Ang functionality nito ay lubos na maapektuhan.",
|
933 |
"SystemCheckGzcompressHelp": "Kailangan mong i-enable ang zlib extension at gzcompress function.",
|
934 |
"SystemCheckGzuncompressHelp": "Kailangan mong i-enable ang zlib extension at gzuncompress function.",
|
|
|
935 |
"SystemCheckMailHelp": "Ang Feedback at mga mensahe ng Nawalang Password ay hindi ipapadala nang walang mail ().",
|
|
|
936 |
"SystemCheckMemoryLimit": "Limitasyon ng memorya",
|
937 |
"SystemCheckMemoryLimitHelp": "Sa may mataas na traffic na website ang proseso ng pag-archive ay mangailangan ng higit pang memory kaysa sa kasalukuyan. Kung kinakailangan palitan ang memory_limit directive sa iyong php.ini file",
|
938 |
"SystemCheckOpenURL": "Bukas na URL",
|
944 |
"SystemCheckPdoAndMysqliHelp": "Sa GNU\/Linux server ay maari mong e-compile ang iyong php kasama ang mag option na ito: %1$s In your php.ini idag-dag ang mga sumusunod na mga linya: %2$s",
|
945 |
"SystemCheckPhp": "Bersyon ng PHP",
|
946 |
"SystemCheckPhpPdoAndMysqli": "Marami pang impormasyon sa: : %1$sPHP PDO%2$s at %3$sMYSQLI%4$s.",
|
|
|
947 |
"SystemCheckSummaryNoProblems": "Huzzah! Walang mga problema sa pag-setup mo ng Matomo. Bigyan ang iyong sarili ng isang magandang pahinga.",
|
948 |
"SystemCheckSummaryThereWereErrors": "Naku! Ang Matomo ay may nakitang i-ilang %1$s critical isyo sa %2$s sa iyong Matomo setup. %3$s Ang mga isyung ito ay dapat na maayos ka-agad. %4$s",
|
949 |
"SystemCheckSummaryThereWereWarnings": "May ilang mga isyu sa iyong system. Ang Matomo ay gagana ngunit maaari kang makaranas ng ilang mga menor na problema.",
|
app/lang/tr.json
CHANGED
@@ -16,6 +16,7 @@
|
|
16 |
"Apply": "Uygula",
|
17 |
"ArchivingInlineHelp": "Orta ve yüksek yoğunluklu web siteleri için Matomo arşivlemesinin web tarayıcı üzerinden tetiklenme seçeneğinin kapatılması öneriilir. Bunun yerine saatlik olarak Matomo raporlarını oluşturacak zamanlanmış bir görevin tanımlanması önerilir.",
|
18 |
"ArchivingTriggerDescription": "Daha büyük Matomo kurulumları için raporları otomatik olarak işleyen bir %1$szamanlanmış görev%2$s oluşturulması önerilir.",
|
|
|
19 |
"AuthenticationMethodSmtp": "SMTP kimlik doğrulama yöntemi",
|
20 |
"AverageOrderValue": "Ortalama Sipariş Değeri",
|
21 |
"AveragePrice": "Ortalama Fiyat",
|
@@ -176,6 +177,8 @@
|
|
176 |
"ExceptionDatabaseVersion": "%1$s sürümünüz %2$s ancak Matomo için en az %3$s sürümü gerekli.",
|
177 |
"ExceptionDatabaseVersionNewerThanCodebase": "Matomo uygulamanız eski %1$s sürümü üzerinde çalışıyor ancak Matomo veritabanının daha yeni %2$s sürümüne güncellenmiş.",
|
178 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Matomo yöneticileriniz şu anda güncelleme işlemini tamamlıyor olabilir. Lütfen bir kaç dakika sonra yeniden deneyin.",
|
|
|
|
|
179 |
"ExceptionFileIntegrity": "Bütünlük sağlanamadı: %s",
|
180 |
"ExceptionFilesizeMismatch": "Dosya boyutu uyumsuz: %1$s (Beklenen Boyut: %2$s, Bulunan: %3$s)",
|
181 |
"ExceptionIncompatibleClientServerVersions": "%1$s istemci sürümünüz %2$s. Ancak bu sürüm %3$s sunucu sürümü ile uyumsuz.",
|
@@ -524,7 +527,8 @@
|
|
524 |
"Custom": "Özel",
|
525 |
"PreviousPeriod": "Önceki Dönem",
|
526 |
"PreviousYear": "Önceki Yıl",
|
527 |
-
"ViewAccessRequired": "Kullanılan kimlik doğrulama kodunun (token_auth) erişim izinleri, API dışı bir istek adresinde kullanılmak için çok fazla. Lütfen yalnız görüntüleme erişimi olan bir kullanıcı için uygulamaya özel bir parola kullanın."
|
|
|
528 |
},
|
529 |
"Mobile": {
|
530 |
"AboutPiwikMobile": "Matomo Mobil Hakkında",
|
@@ -915,7 +919,24 @@
|
|
915 |
"TrackingFailuresEmail1": "Bu ileti, son günlerde %s farklı izleme sorunu oluştuğunu bildirir.",
|
916 |
"TrackingFailuresEmail2": "Tüm izleme sorunlarını görüntülemek için %1$sburaya tıklayın%2$s.",
|
917 |
"ImportFromGoogleAnalytics": "Google Analytics Üzerinden İçe Aktar",
|
918 |
-
"ImportFromGoogleAnalyticsDescription": "Bir Google Analytics mülkünüz varsa ve Matomo uygulamasına geçiyorsanız, %1$sGoogleAnalyticsImporter%2$s uygulama ekini kullanarak var olan verilerinizi içe aktarabilirsiniz."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
919 |
},
|
920 |
"CoreHome": {
|
921 |
"CategoryNoData": "Bu kategoride henüz bir veri yok. \"Tüm dağılımlar katılsın\" seçeneğini deneyin.",
|
@@ -1536,7 +1557,7 @@
|
|
1536 |
"ContactUs": "Bizimle görüşün",
|
1537 |
"VisitTheForums": "%1$sForumları%2$s ziyaret ederek Matomo kullanıcı topluluğundan destek alabilirsiniz",
|
1538 |
"Forums": "Forum",
|
1539 |
-
"ReviewMatomoTitle": "Matomo
|
1540 |
"PleaseLeaveExternalReviewForMatomo": "Düşüncelerinizi bu sitelerden birinde paylaşın ve başkalarına da veri devrimimize katılmaları için ilham verin.",
|
1541 |
"RemindMeLater": "Daha sonra anımsat",
|
1542 |
"NeverAskMeAgain": "Bir daha sorma",
|
@@ -1548,11 +1569,12 @@
|
|
1548 |
"SearchHelpResources": "Matomo.org yardım kaynaklarında arayın",
|
1549 |
"PopularHelpTopics": "Sık başvurulan yardım konuları",
|
1550 |
"ReferMatomo": "Matomo uygulamasını önerin",
|
1551 |
-
"ReferBannerTitle": "
|
1552 |
-
"ReferBannerLonger": "
|
1553 |
"ReferBannerEmailShareSubject": "Verilerinin denetimini yeniden ele almaları için onlara Matomo kullanmalarını önerin!",
|
1554 |
"ReferBannerEmailShareBody": "Google Analytics uygulamasına etik bir alternatif olarak, verilerim üzerinde %%100 sahiplik sağlayan ve web sitesi ziyaretçilerimin verilerini koruyan Matomo uygulamasını kullanıyorum.\nSizin de Google üzerinden gücünüzü geri alarak kendi verilerinize ship olmanız umuduyla bu iletiyi paylaşıyorum.\n\nMatomo uygulamasını https:\/\/matomo.org adresinde bulabilirsiniz",
|
1555 |
-
"ReferBannerSocialShareText": "Google Analytics kullanıyorsanız, Matomo gibi etik bir alternatife geçerek denetimi elinize alın!"
|
|
|
1556 |
},
|
1557 |
"GeoIp2": {
|
1558 |
"AssumingNonApache": "apache_get_modules işlevi bulunamadığı için web sunucusunun Apache olmadığı varsayılıyor.",
|
@@ -1878,11 +1900,8 @@
|
|
1878 |
"SystemCheckGzcompressHelp": "zlib eklentisini ve gzcompress işlevini etkinleştirmelisiniz.",
|
1879 |
"SystemCheckGzuncompressHelp": "zlib eklentisini ve gzuncompress işlevini etkinleştirmelisiniz.",
|
1880 |
"SystemCheckHashHelp": "-disable hash seçeneğini kaldırarak PHP yazılımını hash() desteği ile yeniden yapılandırmalısınız.",
|
1881 |
-
"SystemCheckIconvHelp": "--with-iconv seçeneğini kullanarak PHP yazılımını \"Iconv\" desteği ile yeniden yapılandırmalısınız.",
|
1882 |
"SystemCheckJsonHelp": "JSON verilerinin Matomo tarafından okunup yazılabilmesi için php-json eklentisi gereklidir.",
|
1883 |
"SystemCheckMailHelp": "Bildirim ve Parola Unutma iletileri mail() işlevi ile gönderilmeyecek.",
|
1884 |
-
"SystemCheckMbstring": "mbstring",
|
1885 |
-
"SystemCheckMbstringHelp": "Kullanıcı arayüzü ve API yanıtlarındaki multibayt karakterlerinin işlenebilmesi için mbstring eklentisi gereklidir. Ayrıca php.ini yapılandırma dosyası içindeki mbstring.func_overload seçeneğini \"0\" olarak ayarlayın.",
|
1886 |
"SystemCheckMemoryLimit": "Bellek sınırı",
|
1887 |
"SystemCheckMemoryLimitHelp": "Trafiği yüksek olan bir web sitesinde arşivleme işlemi normal olarak izin verilen değerden daha fazla bellek kullanımına gerek duyabilir. Gerekiyorsa php.ini yapılandırma dosyasındaki memory_limit seçeneğinin değerini değiştirin.",
|
1888 |
"SystemCheckMemoryNoMemoryLimitSet": "Herhangi bir bellek sınırı ayarlanmamış",
|
@@ -1899,7 +1918,6 @@
|
|
1899 |
"SystemCheckPdoAndMysqliHelp": "Bir GNU\/Linux sunucusu üzerinde php yazılımını şu seçenekler ile derleyebilirsiniz: %1$s php.ini yapılandırma dosyanıza şu satırları ekleyin: %2$s",
|
1900 |
"SystemCheckPhp": "PHP sürümü",
|
1901 |
"SystemCheckPhpPdoAndMysqli": "Ayrıntılı bilgi aşmak için: %1$sPHP PDO%2$s ve %3$sMYSQLI%4$s.",
|
1902 |
-
"SystemCheckSplHelp": "PHP yazılımını Standart PHP Kitaplığı (SPL) etkinleştirilmiş olarak (varsayılan) yeniden yapılandırmalısınız.",
|
1903 |
"SystemCheckSessionHelp": "PHP yazılımını \"session\" desteği ile yeniden yapılandırmalısınız (--disable-session kullanmayın).",
|
1904 |
"SystemCheckSettings": "Gerekli PHP yapılandırması (php.ini)",
|
1905 |
"SystemCheckSummaryNoProblems": "Harika! Matomo kurulumunda hiçbir sorun yok. Kendinizi tebrik edin.",
|
@@ -3954,6 +3972,8 @@
|
|
3954 |
"OnlyMatchedUrlsAllowedHelp": "Bu seçenek etkinleştirildiğinde, Matomo iç işlemleri yalnız sayfa adresi web sitesi için belirtilmiş adreslerden biri ise izler. Böylece kötü niyetli kişilerin istatistik verilerinizi başka web sitesi adresleri ile karıştırması engellenmiş olur.",
|
3955 |
"OnlyMatchedUrlsAllowedHelpExamples": "Etki alanı ve yol tam eşleşmeli ve her bir etki geçerli alt etki alanı ayrı ayrı belirtilmelidir. Örneğin bilinen adresler 'http:\/\/ornek.com\/yol' ve 'http:\/\/iyi.ornek.com' şeklinde ise, 'http:\/\/ornek.com\/baskayol' ya da 'http:\/\/kotu.ornek.com' izleme istekleri yok sayılır.",
|
3956 |
"WebsitesManagement": "Web Sitesi Yönetimi",
|
|
|
|
|
3957 |
"XManagement": "%s Yönetimi",
|
3958 |
"ChooseMeasurableTypeHeadline": "Neyi ölçmek istiyorsunuz?",
|
3959 |
"YouCurrentlyHaveAccessToNWebsites": "%s web sitesine erişme izniniz var.",
|
16 |
"Apply": "Uygula",
|
17 |
"ArchivingInlineHelp": "Orta ve yüksek yoğunluklu web siteleri için Matomo arşivlemesinin web tarayıcı üzerinden tetiklenme seçeneğinin kapatılması öneriilir. Bunun yerine saatlik olarak Matomo raporlarını oluşturacak zamanlanmış bir görevin tanımlanması önerilir.",
|
18 |
"ArchivingTriggerDescription": "Daha büyük Matomo kurulumları için raporları otomatik olarak işleyen bir %1$szamanlanmış görev%2$s oluşturulması önerilir.",
|
19 |
+
"ArchivingTriggerSegment": "Özel dilimlerin kullanılması arşivlerin işlenmesini tetikler.",
|
20 |
"AuthenticationMethodSmtp": "SMTP kimlik doğrulama yöntemi",
|
21 |
"AverageOrderValue": "Ortalama Sipariş Değeri",
|
22 |
"AveragePrice": "Ortalama Fiyat",
|
177 |
"ExceptionDatabaseVersion": "%1$s sürümünüz %2$s ancak Matomo için en az %3$s sürümü gerekli.",
|
178 |
"ExceptionDatabaseVersionNewerThanCodebase": "Matomo uygulamanız eski %1$s sürümü üzerinde çalışıyor ancak Matomo veritabanının daha yeni %2$s sürümüne güncellenmiş.",
|
179 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Matomo yöneticileriniz şu anda güncelleme işlemini tamamlıyor olabilir. Lütfen bir kaç dakika sonra yeniden deneyin.",
|
180 |
+
"ExceptionDatabaseUnavailable": "MySQL sunucusu erişilemez oldu",
|
181 |
+
"ExceptionDatabaseAccess": "Vertiabanı erişimi reddedildi",
|
182 |
"ExceptionFileIntegrity": "Bütünlük sağlanamadı: %s",
|
183 |
"ExceptionFilesizeMismatch": "Dosya boyutu uyumsuz: %1$s (Beklenen Boyut: %2$s, Bulunan: %3$s)",
|
184 |
"ExceptionIncompatibleClientServerVersions": "%1$s istemci sürümünüz %2$s. Ancak bu sürüm %3$s sunucu sürümü ile uyumsuz.",
|
527 |
"Custom": "Özel",
|
528 |
"PreviousPeriod": "Önceki Dönem",
|
529 |
"PreviousYear": "Önceki Yıl",
|
530 |
+
"ViewAccessRequired": "Kullanılan kimlik doğrulama kodunun (token_auth) erişim izinleri, API dışı bir istek adresinde kullanılmak için çok fazla. Lütfen yalnız görüntüleme erişimi olan bir kullanıcı için uygulamaya özel bir parola kullanın.",
|
531 |
+
"Reasons": "Nedenler"
|
532 |
},
|
533 |
"Mobile": {
|
534 |
"AboutPiwikMobile": "Matomo Mobil Hakkında",
|
919 |
"TrackingFailuresEmail1": "Bu ileti, son günlerde %s farklı izleme sorunu oluştuğunu bildirir.",
|
920 |
"TrackingFailuresEmail2": "Tüm izleme sorunlarını görüntülemek için %1$sburaya tıklayın%2$s.",
|
921 |
"ImportFromGoogleAnalytics": "Google Analytics Üzerinden İçe Aktar",
|
922 |
+
"ImportFromGoogleAnalyticsDescription": "Bir Google Analytics mülkünüz varsa ve Matomo uygulamasına geçiyorsanız, %1$sGoogleAnalyticsImporter%2$s uygulama ekini kullanarak var olan verilerinizi içe aktarabilirsiniz.",
|
923 |
+
"SecurityNotificationEmailSubject": "Güvenlik Bildirimi",
|
924 |
+
"SecurityNotificationRecoveryCodesShowedBody": "Birisi hesabınızın iki aşamalı kimlik doğrulama kurtarma kodlarına baktı.",
|
925 |
+
"SecurityNotificationRecoveryCodesRegeneratedBody": "Birisi hesabınız için yeni iki aşamalı kimlik doğrulama kurtarma kodları oluşturdu.",
|
926 |
+
"SecurityNotificationTwoFactorAuthEnabledBody": "Birisi hesabınız için iki aşamalı kimlik doğrulamasını etkinleştirdi.",
|
927 |
+
"SecurityNotificationTwoFactorAuthDisabledBody": "Birisi hesabınız için iki aşamalı kimlik doğrulamasını devre dışı bıraktı.",
|
928 |
+
"SecurityNotificationTokenAuthCreatedBody": "Birisi hesabınız için bir kimlik doğrulama kodu oluşturdu (açıklama: %s). Bu işlemi siz yapmadıysanız bu kodu silin.",
|
929 |
+
"SecurityNotificationTokenAuthDeletedBody": "Birisi hesabınızın bir kimlik doğrulama kodunu sildi (açıklama: %s).",
|
930 |
+
"SecurityNotificationAllTokenAuthDeletedBody": "Birisi hesabınızın tüm kimlik doğrulama kodlarını sildi",
|
931 |
+
"SecurityNotificationSettingsChangedByUserBody": "Birisi sistem ayarlarını değiştirdi. Etkilenen ayarlar: %s.",
|
932 |
+
"SecurityNotificationSettingsChangedByOtherSuperUserBody": "Başka bir süper kullanıcı (%1$s) sistem ayarlarını değiştirdi. Etkilenen ayarlar: %2$s. Bu işlem hakkında bilginiz varsa bu uyarıyı yok sayabilirsiniz. Bilginiz yoksa, diğer süper kullanıcılar ile görüşün.",
|
933 |
+
"SecurityNotificationUserCreatedBody": "Birisi hesabınız için yeni bir kullanıcı oluşturdu (kullanıcı adı: %s)",
|
934 |
+
"SecurityNotificationUserDeletedBody": "Birisi hesabınızdan bir kullanıcı sildi (kullanıcı adı: %s).",
|
935 |
+
"SecurityNotificationIfItWasYou": "Bu işlem hakkında bilginiz varsa bu uyarıyı yok sayabilirsiniz. Bilginiz yoksa, lütfen parolanızı sıfırlayın.",
|
936 |
+
"SecurityNotificationCheckTwoFactor": "Lütfen iki aşamalı kimlik doğrulama uygulamanızı ya da aygıtınızı denetleyin.",
|
937 |
+
"BruteForce": "Kaba Kuvvet",
|
938 |
+
"TwoFactorAuth": "İki aşamalı kimlik doğrulaması",
|
939 |
+
"Cors": "Cors"
|
940 |
},
|
941 |
"CoreHome": {
|
942 |
"CategoryNoData": "Bu kategoride henüz bir veri yok. \"Tüm dağılımlar katılsın\" seçeneğini deneyin.",
|
1557 |
"ContactUs": "Bizimle görüşün",
|
1558 |
"VisitTheForums": "%1$sForumları%2$s ziyaret ederek Matomo kullanıcı topluluğundan destek alabilirsiniz",
|
1559 |
"Forums": "Forum",
|
1560 |
+
"ReviewMatomoTitle": "Matomo hoşunuza gitti mi?",
|
1561 |
"PleaseLeaveExternalReviewForMatomo": "Düşüncelerinizi bu sitelerden birinde paylaşın ve başkalarına da veri devrimimize katılmaları için ilham verin.",
|
1562 |
"RemindMeLater": "Daha sonra anımsat",
|
1563 |
"NeverAskMeAgain": "Bir daha sorma",
|
1569 |
"SearchHelpResources": "Matomo.org yardım kaynaklarında arayın",
|
1570 |
"PopularHelpTopics": "Sık başvurulan yardım konuları",
|
1571 |
"ReferMatomo": "Matomo uygulamasını önerin",
|
1572 |
+
"ReferBannerTitle": "Matomo uygulamasına güveniyor musunuz?",
|
1573 |
+
"ReferBannerLonger": "Lütfen daha fazla insanın kendi istatistiklerini kontrol edebilmesi için bizi anlatan bilgileri yaymamıza yardımcı olun.",
|
1574 |
"ReferBannerEmailShareSubject": "Verilerinin denetimini yeniden ele almaları için onlara Matomo kullanmalarını önerin!",
|
1575 |
"ReferBannerEmailShareBody": "Google Analytics uygulamasına etik bir alternatif olarak, verilerim üzerinde %%100 sahiplik sağlayan ve web sitesi ziyaretçilerimin verilerini koruyan Matomo uygulamasını kullanıyorum.\nSizin de Google üzerinden gücünüzü geri alarak kendi verilerinize ship olmanız umuduyla bu iletiyi paylaşıyorum.\n\nMatomo uygulamasını https:\/\/matomo.org adresinde bulabilirsiniz",
|
1576 |
+
"ReferBannerSocialShareText": "Google Analytics kullanıyorsanız, Matomo gibi etik bir alternatife geçerek denetimi elinize alın!",
|
1577 |
+
"WontShowAgain": "Bu iletiyi bir daha göstermeyeceğiz."
|
1578 |
},
|
1579 |
"GeoIp2": {
|
1580 |
"AssumingNonApache": "apache_get_modules işlevi bulunamadığı için web sunucusunun Apache olmadığı varsayılıyor.",
|
1900 |
"SystemCheckGzcompressHelp": "zlib eklentisini ve gzcompress işlevini etkinleştirmelisiniz.",
|
1901 |
"SystemCheckGzuncompressHelp": "zlib eklentisini ve gzuncompress işlevini etkinleştirmelisiniz.",
|
1902 |
"SystemCheckHashHelp": "-disable hash seçeneğini kaldırarak PHP yazılımını hash() desteği ile yeniden yapılandırmalısınız.",
|
|
|
1903 |
"SystemCheckJsonHelp": "JSON verilerinin Matomo tarafından okunup yazılabilmesi için php-json eklentisi gereklidir.",
|
1904 |
"SystemCheckMailHelp": "Bildirim ve Parola Unutma iletileri mail() işlevi ile gönderilmeyecek.",
|
|
|
|
|
1905 |
"SystemCheckMemoryLimit": "Bellek sınırı",
|
1906 |
"SystemCheckMemoryLimitHelp": "Trafiği yüksek olan bir web sitesinde arşivleme işlemi normal olarak izin verilen değerden daha fazla bellek kullanımına gerek duyabilir. Gerekiyorsa php.ini yapılandırma dosyasındaki memory_limit seçeneğinin değerini değiştirin.",
|
1907 |
"SystemCheckMemoryNoMemoryLimitSet": "Herhangi bir bellek sınırı ayarlanmamış",
|
1918 |
"SystemCheckPdoAndMysqliHelp": "Bir GNU\/Linux sunucusu üzerinde php yazılımını şu seçenekler ile derleyebilirsiniz: %1$s php.ini yapılandırma dosyanıza şu satırları ekleyin: %2$s",
|
1919 |
"SystemCheckPhp": "PHP sürümü",
|
1920 |
"SystemCheckPhpPdoAndMysqli": "Ayrıntılı bilgi aşmak için: %1$sPHP PDO%2$s ve %3$sMYSQLI%4$s.",
|
|
|
1921 |
"SystemCheckSessionHelp": "PHP yazılımını \"session\" desteği ile yeniden yapılandırmalısınız (--disable-session kullanmayın).",
|
1922 |
"SystemCheckSettings": "Gerekli PHP yapılandırması (php.ini)",
|
1923 |
"SystemCheckSummaryNoProblems": "Harika! Matomo kurulumunda hiçbir sorun yok. Kendinizi tebrik edin.",
|
3972 |
"OnlyMatchedUrlsAllowedHelp": "Bu seçenek etkinleştirildiğinde, Matomo iç işlemleri yalnız sayfa adresi web sitesi için belirtilmiş adreslerden biri ise izler. Böylece kötü niyetli kişilerin istatistik verilerinizi başka web sitesi adresleri ile karıştırması engellenmiş olur.",
|
3973 |
"OnlyMatchedUrlsAllowedHelpExamples": "Etki alanı ve yol tam eşleşmeli ve her bir etki geçerli alt etki alanı ayrı ayrı belirtilmelidir. Örneğin bilinen adresler 'http:\/\/ornek.com\/yol' ve 'http:\/\/iyi.ornek.com' şeklinde ise, 'http:\/\/ornek.com\/baskayol' ya da 'http:\/\/kotu.ornek.com' izleme istekleri yok sayılır.",
|
3974 |
"WebsitesManagement": "Web Sitesi Yönetimi",
|
3975 |
+
"WebsiteUpdated": "Web sitesi güncellendi",
|
3976 |
+
"WebsiteCreated": "Web sitesi oluşturuldu",
|
3977 |
"XManagement": "%s Yönetimi",
|
3978 |
"ChooseMeasurableTypeHeadline": "Neyi ölçmek istiyorsunuz?",
|
3979 |
"YouCurrentlyHaveAccessToNWebsites": "%s web sitesine erişme izniniz var.",
|
app/lang/uk.json
CHANGED
@@ -1530,9 +1530,7 @@
|
|
1530 |
"SystemCheckGlobHelp": "Ця вбудована функція було заблокована на вашому хостингу. Matomo спробує емулювати цю функцію але може зістикнутися з подальшими обмеженнями по безпеці. Функціональність може бути обмежена.",
|
1531 |
"SystemCheckGzcompressHelp": "Необхідно увімкнути розширення zlib та функцію gzcompress.",
|
1532 |
"SystemCheckGzuncompressHelp": "Необхідно увімкнути розширення zlib та функцію gzuncompress.",
|
1533 |
-
"SystemCheckIconvHelp": "Необхідно переконфігурувати та перезібрати PHP з підтримкою \"iconv\", --with-iconv.",
|
1534 |
"SystemCheckMailHelp": "Е-майл повідомлення форми відгуку та відновлення паролю не будуть надсилатися без функції mail().",
|
1535 |
-
"SystemCheckMbstring": "mbstring",
|
1536 |
"SystemCheckMemoryLimit": "Граничний розмір пам'яті",
|
1537 |
"SystemCheckMemoryLimitHelp": "На сайті з високим трафіком процес стистення даних може потребувати більше пам'яті ніж дозволено зараз.<br\/>Дивіться детальніше про директиву memory_limit у файлі php.ini.",
|
1538 |
"SystemCheckNoErrorsOrWarnings": "Немає ніяких помилок або попереджень",
|
@@ -1547,7 +1545,6 @@
|
|
1547 |
"SystemCheckPdoAndMysqliHelp": "На Linux-сервері ви можете cкомпілювати PHP з наступними опціями: %1$s В php.ini, додати наступні рядки: %2$s",
|
1548 |
"SystemCheckPhp": "Версія PHP",
|
1549 |
"SystemCheckPhpPdoAndMysqli": "Детальніша інформація: %1$sPHP PDO%2$s та %3$sMYSQLI%4$s.",
|
1550 |
-
"SystemCheckSplHelp": "Необхідно переконфігурувати та перезібрати PHP з Standard PHP Library (SPL) топово увімкненою (by default).",
|
1551 |
"SystemCheckSettings": "Вимоги до системи PHP (php.ini)",
|
1552 |
"SystemCheckSummaryNoProblems": "Ура! Немає ніяких проблем з установкою Matomo. Дайте собі поплескати по плечу.",
|
1553 |
"SystemCheckSummaryThereWereErrors": "Ой-ой! Matomo виявив деякі %1$sважливі проблеми%2$s з вашим встановленням Matomo. %3$sЦі проблеми повинні бути виправлені негайно.%4$s",
|
1530 |
"SystemCheckGlobHelp": "Ця вбудована функція було заблокована на вашому хостингу. Matomo спробує емулювати цю функцію але може зістикнутися з подальшими обмеженнями по безпеці. Функціональність може бути обмежена.",
|
1531 |
"SystemCheckGzcompressHelp": "Необхідно увімкнути розширення zlib та функцію gzcompress.",
|
1532 |
"SystemCheckGzuncompressHelp": "Необхідно увімкнути розширення zlib та функцію gzuncompress.",
|
|
|
1533 |
"SystemCheckMailHelp": "Е-майл повідомлення форми відгуку та відновлення паролю не будуть надсилатися без функції mail().",
|
|
|
1534 |
"SystemCheckMemoryLimit": "Граничний розмір пам'яті",
|
1535 |
"SystemCheckMemoryLimitHelp": "На сайті з високим трафіком процес стистення даних може потребувати більше пам'яті ніж дозволено зараз.<br\/>Дивіться детальніше про директиву memory_limit у файлі php.ini.",
|
1536 |
"SystemCheckNoErrorsOrWarnings": "Немає ніяких помилок або попереджень",
|
1545 |
"SystemCheckPdoAndMysqliHelp": "На Linux-сервері ви можете cкомпілювати PHP з наступними опціями: %1$s В php.ini, додати наступні рядки: %2$s",
|
1546 |
"SystemCheckPhp": "Версія PHP",
|
1547 |
"SystemCheckPhpPdoAndMysqli": "Детальніша інформація: %1$sPHP PDO%2$s та %3$sMYSQLI%4$s.",
|
|
|
1548 |
"SystemCheckSettings": "Вимоги до системи PHP (php.ini)",
|
1549 |
"SystemCheckSummaryNoProblems": "Ура! Немає ніяких проблем з установкою Matomo. Дайте собі поплескати по плечу.",
|
1550 |
"SystemCheckSummaryThereWereErrors": "Ой-ой! Matomo виявив деякі %1$sважливі проблеми%2$s з вашим встановленням Matomo. %3$sЦі проблеми повинні бути виправлені негайно.%4$s",
|
app/lang/vi.json
CHANGED
@@ -1089,9 +1089,7 @@
|
|
1089 |
"SystemCheckGlobHelp": "Các hàm nội tại đã bị vô hiệu hóa trên máy chủ của bạn. Matomo sẽ cố gắng để giả lập hàm này nhưng có thể gặp phải những hạn chế bảo mật cao hơn. Chức năng có thể bị ảnh hưởng.",
|
1090 |
"SystemCheckGzcompressHelp": "Bạn cần bật zlib extension and gzcompress function.",
|
1091 |
"SystemCheckGzuncompressHelp": "Bạn cần bật zlib extension and gzuncompress function.",
|
1092 |
-
"SystemCheckIconvHelp": "Bạn cần cấu hình và xây dựng lại PHP với sự hỗ trợ \"iconv\" được kích hoạt,--với-iconv.",
|
1093 |
"SystemCheckMailHelp": "Feedback và thông báo mất mật khẩu sẽ không được gửi nếu thiếu mail().",
|
1094 |
-
"SystemCheckMbstring": "mbstring",
|
1095 |
"SystemCheckMemoryLimit": "Giới hạn bộ nhớ",
|
1096 |
"SystemCheckMemoryLimitHelp": "Trên một trang web lưu lượng truy cập cao, quá trình lưu trữ có thể đòi hỏi nhiều bộ nhớ hơn so với sự cho phép hiện nay. Nếu cần thiết, thay đổi các chỉ thị memory_limit trong tập tin php.ini.",
|
1097 |
"SystemCheckOpenURL": "Mở URL",
|
@@ -1103,7 +1101,6 @@
|
|
1103 |
"SystemCheckPdoAndMysqliHelp": "Trên máy chủ Linux bạn có thể biên dịch php với các tùy chọn sau đây: %1$s Trong php.ini của bạn, thêm các dòng sau đây: %2$s",
|
1104 |
"SystemCheckPhp": "Phiên bản PHP",
|
1105 |
"SystemCheckPhpPdoAndMysqli": "Thêm thông tin về: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
1106 |
-
"SystemCheckSplHelp": "Bạn cần cấu hình và xây dựng lại PHP với các tiêu chuẩn thư viện PHP (SPL) đã được kích hoạt (mặc định).",
|
1107 |
"SystemCheckSummaryNoProblems": "Huzzah! Không có vấn đề xảy ra trong quá trình cài đặt Matomo của bạn.",
|
1108 |
"SystemCheckSummaryThereWereErrors": "Uh-oh! Matomo đã phát hiện một số %1$s vấn đề quan trọng %2$s với cài đặt Matomo của bạn. %3$s Những vấn đề này được sửa chữa ngay lập tức.%4$s",
|
1109 |
"SystemCheckSummaryThereWereWarnings": "Có một số vấn đề với hệ thống của bạn. Matomo sẽ chạy, nhưng bạn có thể gặp một số vấn đề nhỏ.",
|
1089 |
"SystemCheckGlobHelp": "Các hàm nội tại đã bị vô hiệu hóa trên máy chủ của bạn. Matomo sẽ cố gắng để giả lập hàm này nhưng có thể gặp phải những hạn chế bảo mật cao hơn. Chức năng có thể bị ảnh hưởng.",
|
1090 |
"SystemCheckGzcompressHelp": "Bạn cần bật zlib extension and gzcompress function.",
|
1091 |
"SystemCheckGzuncompressHelp": "Bạn cần bật zlib extension and gzuncompress function.",
|
|
|
1092 |
"SystemCheckMailHelp": "Feedback và thông báo mất mật khẩu sẽ không được gửi nếu thiếu mail().",
|
|
|
1093 |
"SystemCheckMemoryLimit": "Giới hạn bộ nhớ",
|
1094 |
"SystemCheckMemoryLimitHelp": "Trên một trang web lưu lượng truy cập cao, quá trình lưu trữ có thể đòi hỏi nhiều bộ nhớ hơn so với sự cho phép hiện nay. Nếu cần thiết, thay đổi các chỉ thị memory_limit trong tập tin php.ini.",
|
1095 |
"SystemCheckOpenURL": "Mở URL",
|
1101 |
"SystemCheckPdoAndMysqliHelp": "Trên máy chủ Linux bạn có thể biên dịch php với các tùy chọn sau đây: %1$s Trong php.ini của bạn, thêm các dòng sau đây: %2$s",
|
1102 |
"SystemCheckPhp": "Phiên bản PHP",
|
1103 |
"SystemCheckPhpPdoAndMysqli": "Thêm thông tin về: %1$sPHP PDO%2$s and %3$sMYSQLI%4$s.",
|
|
|
1104 |
"SystemCheckSummaryNoProblems": "Huzzah! Không có vấn đề xảy ra trong quá trình cài đặt Matomo của bạn.",
|
1105 |
"SystemCheckSummaryThereWereErrors": "Uh-oh! Matomo đã phát hiện một số %1$s vấn đề quan trọng %2$s với cài đặt Matomo của bạn. %3$s Những vấn đề này được sửa chữa ngay lập tức.%4$s",
|
1106 |
"SystemCheckSummaryThereWereWarnings": "Có một số vấn đề với hệ thống của bạn. Matomo sẽ chạy, nhưng bạn có thể gặp một số vấn đề nhỏ.",
|
app/lang/zh-cn.json
CHANGED
@@ -1481,7 +1481,6 @@
|
|
1481 |
"ContactUs": "联系我们",
|
1482 |
"VisitTheForums": "访问%1$s论坛%2$s并从Matomo用户社区获得帮助",
|
1483 |
"Forums": "论坛",
|
1484 |
-
"ReviewMatomoTitle": "相信Matomo?",
|
1485 |
"PleaseLeaveExternalReviewForMatomo": "在其中一个站点上分享您的想法,并激发其他人加入我们的数据革命。",
|
1486 |
"RemindMeLater": "稍后提醒我",
|
1487 |
"NeverAskMeAgain": "再也不问我",
|
@@ -1491,7 +1490,8 @@
|
|
1491 |
"RemoveOtherLabel": "我想查看我的“其他”数据",
|
1492 |
"PurgeOldData": "我想删除一些旧数据",
|
1493 |
"SearchHelpResources": "搜索matomo.org帮助资源",
|
1494 |
-
"PopularHelpTopics": "热门帮助主题"
|
|
|
1495 |
},
|
1496 |
"GeoIp2": {
|
1497 |
"AssumingNonApache": "没有找到apache_get_modules函数,可能没有apache网络服务器。",
|
@@ -1806,11 +1806,8 @@
|
|
1806 |
"SystemCheckGzcompressHelp": "需要启用 zlib 扩展和 gzcompress 功能。",
|
1807 |
"SystemCheckGzuncompressHelp": "需要启用 zlib 扩展和 gzuncompress 功能。",
|
1808 |
"SystemCheckHashHelp": "您需要配置禁用 --disable-hash 参数并重新编译 PHP,以启用 hash() 支持。",
|
1809 |
-
"SystemCheckIconvHelp": "您需要配置使用 --with-iconv 参数并重新编译 PHP,来启用“iconv”支持。",
|
1810 |
"SystemCheckJsonHelp": "Matomo需要php-json扩展名才能读取和写入JSON数据。",
|
1811 |
"SystemCheckMailHelp": "若沒有 mail(),意见反馈及忘记密码的信息将无法寄出。",
|
1812 |
-
"SystemCheckMbstring": "mbstring",
|
1813 |
-
"SystemCheckMbstringHelp": "需要mbstring扩展来处理用户界面和API响应中的多字节字符。 另外,请检查php.ini中的mbstring.func_overload是否设置为“0”。",
|
1814 |
"SystemCheckMemoryLimit": "内存限制",
|
1815 |
"SystemCheckMemoryLimitHelp": "在一个高流量的网站,归档过程中使用的内存可能超过当前系统的允许值。如果有需要,可以调整 php.ini 文件中的 memory_limit 值。",
|
1816 |
"SystemCheckNoErrorsOrWarnings": "没有错误或者警告",
|
@@ -1826,7 +1823,6 @@
|
|
1826 |
"SystemCheckPdoAndMysqliHelp": "在 GNU\/Linux 服务器上,您可以使用以下选项编译 PHP: %1$s在您的 php.ini 中 , 加入以下几行: %2$s",
|
1827 |
"SystemCheckPhp": "PHP 版本",
|
1828 |
"SystemCheckPhpPdoAndMysqli": "更多信息:%1$sPHP PDO%2$s 和 %3$sMYSQLI%4$s。",
|
1829 |
-
"SystemCheckSplHelp": "您需要配置启用标准 PHP 库(SPL)(默认启用)并重建 PHP,以便启用 SPL。",
|
1830 |
"SystemCheckSettings": "必要的 PHP 配置(php.ini)",
|
1831 |
"SystemCheckSummaryNoProblems": "太好了!您的 Matomo 设置没有任何问题。为自己鼓掌!",
|
1832 |
"SystemCheckSummaryThereWereErrors": "糟糕!Matomo 检查到您设置中的一些 %1$s严重问题%2$s,%3$s这些问题需要立即修复。%4$s",
|
1481 |
"ContactUs": "联系我们",
|
1482 |
"VisitTheForums": "访问%1$s论坛%2$s并从Matomo用户社区获得帮助",
|
1483 |
"Forums": "论坛",
|
|
|
1484 |
"PleaseLeaveExternalReviewForMatomo": "在其中一个站点上分享您的想法,并激发其他人加入我们的数据革命。",
|
1485 |
"RemindMeLater": "稍后提醒我",
|
1486 |
"NeverAskMeAgain": "再也不问我",
|
1490 |
"RemoveOtherLabel": "我想查看我的“其他”数据",
|
1491 |
"PurgeOldData": "我想删除一些旧数据",
|
1492 |
"SearchHelpResources": "搜索matomo.org帮助资源",
|
1493 |
+
"PopularHelpTopics": "热门帮助主题",
|
1494 |
+
"ReferBannerTitle": "相信Matomo?"
|
1495 |
},
|
1496 |
"GeoIp2": {
|
1497 |
"AssumingNonApache": "没有找到apache_get_modules函数,可能没有apache网络服务器。",
|
1806 |
"SystemCheckGzcompressHelp": "需要启用 zlib 扩展和 gzcompress 功能。",
|
1807 |
"SystemCheckGzuncompressHelp": "需要启用 zlib 扩展和 gzuncompress 功能。",
|
1808 |
"SystemCheckHashHelp": "您需要配置禁用 --disable-hash 参数并重新编译 PHP,以启用 hash() 支持。",
|
|
|
1809 |
"SystemCheckJsonHelp": "Matomo需要php-json扩展名才能读取和写入JSON数据。",
|
1810 |
"SystemCheckMailHelp": "若沒有 mail(),意见反馈及忘记密码的信息将无法寄出。",
|
|
|
|
|
1811 |
"SystemCheckMemoryLimit": "内存限制",
|
1812 |
"SystemCheckMemoryLimitHelp": "在一个高流量的网站,归档过程中使用的内存可能超过当前系统的允许值。如果有需要,可以调整 php.ini 文件中的 memory_limit 值。",
|
1813 |
"SystemCheckNoErrorsOrWarnings": "没有错误或者警告",
|
1823 |
"SystemCheckPdoAndMysqliHelp": "在 GNU\/Linux 服务器上,您可以使用以下选项编译 PHP: %1$s在您的 php.ini 中 , 加入以下几行: %2$s",
|
1824 |
"SystemCheckPhp": "PHP 版本",
|
1825 |
"SystemCheckPhpPdoAndMysqli": "更多信息:%1$sPHP PDO%2$s 和 %3$sMYSQLI%4$s。",
|
|
|
1826 |
"SystemCheckSettings": "必要的 PHP 配置(php.ini)",
|
1827 |
"SystemCheckSummaryNoProblems": "太好了!您的 Matomo 设置没有任何问题。为自己鼓掌!",
|
1828 |
"SystemCheckSummaryThereWereErrors": "糟糕!Matomo 检查到您设置中的一些 %1$s严重问题%2$s,%3$s这些问题需要立即修复。%4$s",
|
app/lang/zh-tw.json
CHANGED
@@ -210,6 +210,8 @@
|
|
210 |
"ExceptionWidgetNotFound": "請求的小工具不存在。",
|
211 |
"ExceptionReportNotEnabled": "請求的報表未啟用。這代表定義報表的外掛已停用或是你沒有足夠的權限來存取這個報表。",
|
212 |
"ExceptionWidgetNotEnabled": "請求的小工具未啟用。這代表定義小工具的外掛已停用或是你沒有足夠的權限來存取這個小工具。",
|
|
|
|
|
213 |
"ExpandDataTableFooter": "變更報表的顯示方式或設定",
|
214 |
"Export": "匯出",
|
215 |
"ExportAsImage": "匯出為圖片",
|
@@ -673,6 +675,7 @@
|
|
673 |
"ExitPagesReportDocumentation": "這份報表包含指定期間內之離開網頁的相關資訊。所謂的離開網頁,是訪客離開網頁前最後瀏覽的頁面。%s 離開網頁的網址以資料夾結構顯示。",
|
674 |
"ExitPageTitles": "離站網頁標題",
|
675 |
"ExitPageTitlesReportDocumentation": "此報表包含關於指定期間內離站網頁之標題等資訊",
|
|
|
676 |
"OneSearch": "1 搜尋數",
|
677 |
"OutlinkDocumentation": "離開連結是將訪客帶出網站的連結(到其他域名)。",
|
678 |
"OutlinksReportDocumentation": "這份報表以分層列表顯示訪客所點擊的離開連結網址。",
|
@@ -749,7 +752,8 @@
|
|
749 |
"Contents": "內容",
|
750 |
"InteractionsMetricDocumentation": "內容區塊的互動次數(例如「點擊」橫幅或廣告)。",
|
751 |
"ImpressionsMetricDocumentation": "內容區塊(例如橫幅或廣告)的展示次數。",
|
752 |
-
"InteractionRateMetricDocumentation": "內容曝光及互動的比率。"
|
|
|
753 |
},
|
754 |
"CoreAdminHome": {
|
755 |
"AddNewTrustedHost": "增加新的信任域名",
|
@@ -762,7 +766,7 @@
|
|
762 |
"ClickHereToOptOut": "點擊這裡退出。",
|
763 |
"CorsDomains": "跨來源資源共用(CORS)域名",
|
764 |
"CorsDomainsHelp": "你可以定義像是 http:\/\/example.com 或是 http:\/\/stats.example.com 的域名或子域名。或是直接增加 * 來允許所有域名的跨來源請求。",
|
765 |
-
"CustomLogoFeedbackInfo": "如果你自訂 Matomo
|
766 |
"CustomLogoHelpText": "你可以自訂要顯示於使用者介面或報表信件中的 Matomo 標誌。",
|
767 |
"DevelopmentProcess": "雖然我們的開發過程包含了上千種自動化測試,但 Beta 測試員在實現 Matomo「無 Bug 政策」中扮演了關鍵角色。",
|
768 |
"EmailServerSettings": "設定信件伺服器",
|
@@ -1474,7 +1478,6 @@
|
|
1474 |
"ContactUs": "聯絡我們",
|
1475 |
"VisitTheForums": "訪問%1$s論壇%2$s從社區中的 Matomo 使用者中取得協助。",
|
1476 |
"Forums": "論壇",
|
1477 |
-
"ReviewMatomoTitle": "信任 Matomo 嗎?",
|
1478 |
"PleaseLeaveExternalReviewForMatomo": "在這些網站上分享你的評價,讓更多人加入我們的資料革命。",
|
1479 |
"RemindMeLater": "稍後提醒我",
|
1480 |
"NeverAskMeAgain": "別再詢問我",
|
@@ -1484,7 +1487,8 @@
|
|
1484 |
"RemoveOtherLabel": "我想要看我的「其它」資料",
|
1485 |
"PurgeOldData": "我想要移除一些舊資料",
|
1486 |
"SearchHelpResources": "搜尋 matomo.org 上的幫助文件",
|
1487 |
-
"PopularHelpTopics": "熱門幫助文章"
|
|
|
1488 |
},
|
1489 |
"GeoIp2": {
|
1490 |
"AssumingNonApache": "找不到 apache_get_modules 功能,推測是非 Apache 伺服器。",
|
@@ -1772,11 +1776,8 @@
|
|
1772 |
"SystemCheckGzcompressHelp": "你必須啟用 zlib 擴充功能和 gzcompress 功能。",
|
1773 |
"SystemCheckGzuncompressHelp": "你必須啟用 zlib 擴充功能和 gzuncompress 功能。",
|
1774 |
"SystemCheckHashHelp": "你必須配置並重建 PHP 經由執行 --disable-hash 選項來啟用 hash() 支援。",
|
1775 |
-
"SystemCheckIconvHelp": "你需要設定及重建 PHP,然後啟用 iconv 支援,--with-iconv。",
|
1776 |
"SystemCheckJsonHelp": "Matomo 必須使用 php-json 擴充功能來讀寫 JSON 資料。",
|
1777 |
"SystemCheckMailHelp": "意見回饋及忘記密碼的訊息若沒有 mail() 將無法寄送。",
|
1778 |
-
"SystemCheckMbstring": "mbstring",
|
1779 |
-
"SystemCheckMbstringHelp": "處理多字節的使用者介面或 API 回應資料必須使用 mbstring 擴充功能。並請檢查 php.ini 中的 mbstring.func_overload 已將值設定為「0」。",
|
1780 |
"SystemCheckMemoryLimit": "記憶體限制",
|
1781 |
"SystemCheckMemoryLimitHelp": "在一個高流量的網站,資料彙整處理過程可能超過目前所允許使用的記憶體量。<br \/>如果必要,試著變更在你 php.ini 檔案裡的 memory_limit。",
|
1782 |
"SystemCheckMemoryNoMemoryLimitSet": "尚未設定記憶體限制。",
|
@@ -1793,7 +1794,7 @@
|
|
1793 |
"SystemCheckPdoAndMysqliHelp": "在 GNU\/Linux 伺服器上你可以使用以下選項編譯 PHP:在你的 php.ini 中 %1$s,加入以下幾行內容:%2$s",
|
1794 |
"SystemCheckPhp": "PHP 版本",
|
1795 |
"SystemCheckPhpPdoAndMysqli": "更多資訊:%1$sPHP PDO%2$s 和 %3$sMYSQLI%4$s。",
|
1796 |
-
"
|
1797 |
"SystemCheckSettings": "必要的 PHP 設定(php.ini)",
|
1798 |
"SystemCheckSummaryNoProblems": "好極了!Matomo 安裝過程中沒有問題!給自己掌聲鼓勵吧。",
|
1799 |
"SystemCheckSummaryThereWereErrors": "啊噢!Matomo 在安裝過程中偵測到一些%1$s嚴重問題%2$s。%3$s這些問題必須立即被修正。%4$s",
|
@@ -3783,8 +3784,12 @@
|
|
3783 |
},
|
3784 |
"TwoFactorAuth": {
|
3785 |
"TwoFactorAuthentication": "兩步驟驗證",
|
|
|
3786 |
"TwoFactorAuthenticationIsEnabled": "已啟用兩步驟驗證。",
|
3787 |
-
"TwoFactorAuthenticationIsDisabled": "已停用兩步驟驗證。"
|
|
|
|
|
|
|
3788 |
},
|
3789 |
"UserCountry": {
|
3790 |
"CannotLocalizeLocalIP": "IP 位址 %s 是本機位址因此無法顯示地理位置。",
|
@@ -3865,6 +3870,7 @@
|
|
3865 |
"getLanguageCodeDocumentation": "這份報表顯示你的訪客使用的瀏覽器語言代號設定 (例如「德文 - 奧地利 (de-at)」)。"
|
3866 |
},
|
3867 |
"UsersManager": {
|
|
|
3868 |
"UsesTwoFactorAuthentication": "使用兩步驟驗證",
|
3869 |
"TwoFactorAuthentication": "兩步驟驗證",
|
3870 |
"ResetTwoFactorAuthentication": "重置兩步驟驗證",
|
210 |
"ExceptionWidgetNotFound": "請求的小工具不存在。",
|
211 |
"ExceptionReportNotEnabled": "請求的報表未啟用。這代表定義報表的外掛已停用或是你沒有足夠的權限來存取這個報表。",
|
212 |
"ExceptionWidgetNotEnabled": "請求的小工具未啟用。這代表定義小工具的外掛已停用或是你沒有足夠的權限來存取這個小工具。",
|
213 |
+
"ExceptionNotSupportedBrowserTitle": "你的瀏覽器已不受支援。",
|
214 |
+
"ExceptionNotSupportedBrowserText": "因為安全性問題,你的瀏覽器已不受支援。請升級至更新的版本。",
|
215 |
"ExpandDataTableFooter": "變更報表的顯示方式或設定",
|
216 |
"Export": "匯出",
|
217 |
"ExportAsImage": "匯出為圖片",
|
675 |
"ExitPagesReportDocumentation": "這份報表包含指定期間內之離開網頁的相關資訊。所謂的離開網頁,是訪客離開網頁前最後瀏覽的頁面。%s 離開網頁的網址以資料夾結構顯示。",
|
676 |
"ExitPageTitles": "離站網頁標題",
|
677 |
"ExitPageTitlesReportDocumentation": "此報表包含關於指定期間內離站網頁之標題等資訊",
|
678 |
+
"MainMetricsReportDocumentation": "這份報表提供了訪客在你的網站上的基本活動概觀。",
|
679 |
"OneSearch": "1 搜尋數",
|
680 |
"OutlinkDocumentation": "離開連結是將訪客帶出網站的連結(到其他域名)。",
|
681 |
"OutlinksReportDocumentation": "這份報表以分層列表顯示訪客所點擊的離開連結網址。",
|
752 |
"Contents": "內容",
|
753 |
"InteractionsMetricDocumentation": "內容區塊的互動次數(例如「點擊」橫幅或廣告)。",
|
754 |
"ImpressionsMetricDocumentation": "內容區塊(例如橫幅或廣告)的展示次數。",
|
755 |
+
"InteractionRateMetricDocumentation": "內容曝光及互動的比率。",
|
756 |
+
"ContentsSubcategoryHelp2": "前往內容追蹤說明內了解更多"
|
757 |
},
|
758 |
"CoreAdminHome": {
|
759 |
"AddNewTrustedHost": "增加新的信任域名",
|
766 |
"ClickHereToOptOut": "點擊這裡退出。",
|
767 |
"CorsDomains": "跨來源資源共用(CORS)域名",
|
768 |
"CorsDomainsHelp": "你可以定義像是 http:\/\/example.com 或是 http:\/\/stats.example.com 的域名或子域名。或是直接增加 * 來允許所有域名的跨來源請求。",
|
769 |
+
"CustomLogoFeedbackInfo": "如果你自訂 Matomo 標誌,你應該也對隱藏上方選單中的 %1$s 連結有興趣。要那麼做的話可以在%2$s外掛管理%3$s中停用回饋外掛(Feedback)。",
|
770 |
"CustomLogoHelpText": "你可以自訂要顯示於使用者介面或報表信件中的 Matomo 標誌。",
|
771 |
"DevelopmentProcess": "雖然我們的開發過程包含了上千種自動化測試,但 Beta 測試員在實現 Matomo「無 Bug 政策」中扮演了關鍵角色。",
|
772 |
"EmailServerSettings": "設定信件伺服器",
|
1478 |
"ContactUs": "聯絡我們",
|
1479 |
"VisitTheForums": "訪問%1$s論壇%2$s從社區中的 Matomo 使用者中取得協助。",
|
1480 |
"Forums": "論壇",
|
|
|
1481 |
"PleaseLeaveExternalReviewForMatomo": "在這些網站上分享你的評價,讓更多人加入我們的資料革命。",
|
1482 |
"RemindMeLater": "稍後提醒我",
|
1483 |
"NeverAskMeAgain": "別再詢問我",
|
1487 |
"RemoveOtherLabel": "我想要看我的「其它」資料",
|
1488 |
"PurgeOldData": "我想要移除一些舊資料",
|
1489 |
"SearchHelpResources": "搜尋 matomo.org 上的幫助文件",
|
1490 |
+
"PopularHelpTopics": "熱門幫助文章",
|
1491 |
+
"ReferBannerTitle": "信任 Matomo 嗎?"
|
1492 |
},
|
1493 |
"GeoIp2": {
|
1494 |
"AssumingNonApache": "找不到 apache_get_modules 功能,推測是非 Apache 伺服器。",
|
1776 |
"SystemCheckGzcompressHelp": "你必須啟用 zlib 擴充功能和 gzcompress 功能。",
|
1777 |
"SystemCheckGzuncompressHelp": "你必須啟用 zlib 擴充功能和 gzuncompress 功能。",
|
1778 |
"SystemCheckHashHelp": "你必須配置並重建 PHP 經由執行 --disable-hash 選項來啟用 hash() 支援。",
|
|
|
1779 |
"SystemCheckJsonHelp": "Matomo 必須使用 php-json 擴充功能來讀寫 JSON 資料。",
|
1780 |
"SystemCheckMailHelp": "意見回饋及忘記密碼的訊息若沒有 mail() 將無法寄送。",
|
|
|
|
|
1781 |
"SystemCheckMemoryLimit": "記憶體限制",
|
1782 |
"SystemCheckMemoryLimitHelp": "在一個高流量的網站,資料彙整處理過程可能超過目前所允許使用的記憶體量。<br \/>如果必要,試著變更在你 php.ini 檔案裡的 memory_limit。",
|
1783 |
"SystemCheckMemoryNoMemoryLimitSet": "尚未設定記憶體限制。",
|
1794 |
"SystemCheckPdoAndMysqliHelp": "在 GNU\/Linux 伺服器上你可以使用以下選項編譯 PHP:在你的 php.ini 中 %1$s,加入以下幾行內容:%2$s",
|
1795 |
"SystemCheckPhp": "PHP 版本",
|
1796 |
"SystemCheckPhpPdoAndMysqli": "更多資訊:%1$sPHP PDO%2$s 和 %3$sMYSQLI%4$s。",
|
1797 |
+
"SystemCheckSessionHelp": "你必須開啟「session」功能並設定及重新建置 PHP (不要使用 --disable-session)。",
|
1798 |
"SystemCheckSettings": "必要的 PHP 設定(php.ini)",
|
1799 |
"SystemCheckSummaryNoProblems": "好極了!Matomo 安裝過程中沒有問題!給自己掌聲鼓勵吧。",
|
1800 |
"SystemCheckSummaryThereWereErrors": "啊噢!Matomo 在安裝過程中偵測到一些%1$s嚴重問題%2$s。%3$s這些問題必須立即被修正。%4$s",
|
3784 |
},
|
3785 |
"TwoFactorAuth": {
|
3786 |
"TwoFactorAuthentication": "兩步驟驗證",
|
3787 |
+
"TwoFAShort": "2FA",
|
3788 |
"TwoFactorAuthenticationIsEnabled": "已啟用兩步驟驗證。",
|
3789 |
+
"TwoFactorAuthenticationIsDisabled": "已停用兩步驟驗證。",
|
3790 |
+
"TwoFactorAuthenticationRequired": "所有人都需要開啟兩步驟驗證,你不能關閉。",
|
3791 |
+
"ConfigureDifferentDevice": "設定另一台裝置",
|
3792 |
+
"SetUpTwoFactorAuthentication": "開始設定兩步驟驗證 (2FA)"
|
3793 |
},
|
3794 |
"UserCountry": {
|
3795 |
"CannotLocalizeLocalIP": "IP 位址 %s 是本機位址因此無法顯示地理位置。",
|
3870 |
"getLanguageCodeDocumentation": "這份報表顯示你的訪客使用的瀏覽器語言代號設定 (例如「德文 - 奧地利 (de-at)」)。"
|
3871 |
},
|
3872 |
"UsersManager": {
|
3873 |
+
"2FA": "2FA",
|
3874 |
"UsesTwoFactorAuthentication": "使用兩步驟驗證",
|
3875 |
"TwoFactorAuthentication": "兩步驟驗證",
|
3876 |
"ResetTwoFactorAuthentication": "重置兩步驟驗證",
|
app/libs/Zend/Db/Adapter/Mysqli.php
CHANGED
@@ -313,6 +313,7 @@ class Zend_Db_Adapter_Mysqli extends Zend_Db_Adapter_Abstract
|
|
313 |
if(array_key_exists($option, $ssl_options)) {
|
314 |
$ssl_options[$option] = $value;
|
315 |
$enable_ssl = true;
|
|
|
316 |
} elseif(is_string($option)) {
|
317 |
// Suppress warnings here
|
318 |
// Ignore it if it's not a valid constant
|
313 |
if(array_key_exists($option, $ssl_options)) {
|
314 |
$ssl_options[$option] = $value;
|
315 |
$enable_ssl = true;
|
316 |
+
continue; // these options are set below in mysqli_ssl_set
|
317 |
} elseif(is_string($option)) {
|
318 |
// Suppress warnings here
|
319 |
// Ignore it if it's not a valid constant
|
app/libs/upgradephp/upgrade.php
CHANGED
@@ -673,32 +673,6 @@ if (!function_exists('utf8_decode')) {
|
|
673 |
}
|
674 |
}
|
675 |
|
676 |
-
/**
|
677 |
-
* Use strtolower if mb_strtolower doesn't exist (i.e., php not compiled with --enable-mbstring)
|
678 |
-
* This is not a functional replacement for mb_strtolower.
|
679 |
-
*
|
680 |
-
* @param string $input
|
681 |
-
* @param string $charset
|
682 |
-
*/
|
683 |
-
if(!function_exists('mb_strtolower')) {
|
684 |
-
function mb_strtolower($input, $charset = '') {
|
685 |
-
return strtolower($input);
|
686 |
-
}
|
687 |
-
}
|
688 |
-
|
689 |
-
/**
|
690 |
-
* Use strlen if mb_strlen doesn't exist (i.e., php not compiled with --enable-mbstring)
|
691 |
-
* This is not a functional replacement for mb_strlen.
|
692 |
-
*
|
693 |
-
* @param string $input
|
694 |
-
* @param string $charset
|
695 |
-
*/
|
696 |
-
if(!function_exists('mb_strlen')) {
|
697 |
-
function mb_strlen($input, $charset = '') {
|
698 |
-
return strlen($input);
|
699 |
-
}
|
700 |
-
}
|
701 |
-
|
702 |
/**
|
703 |
* On ubuntu in some cases, there is a bug that gzopen does not exist and one must use gzopen64 instead
|
704 |
*/
|
673 |
}
|
674 |
}
|
675 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
676 |
/**
|
677 |
* On ubuntu in some cases, there is a bug that gzopen does not exist and one must use gzopen64 instead
|
678 |
*/
|
app/matomo.js
CHANGED
@@ -28,42 +28,42 @@ ao=ae.findFirstNodeHavingAttribute(ap,this.CONTENT_PIECE_ATTR);if(!ao){ao=ae.fin
|
|
28 |
}}}var av=ae.findNodesByTagName(at,"embed");if(av&&av.length){return this.findMediaUrlInNode(av[0])}}},trim:function(ao){return a(ao)},isOrWasNodeInViewport:function(au){if(!au||!au.getBoundingClientRect||au.nodeType!==1){return true}var at=au.getBoundingClientRect();var ar=G.documentElement||{};var aq=at.top<0;if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(S.innerWidth&&ap>S.innerWidth){ap=S.innerWidth}var ao=ar.clientHeight;if(S.innerHeight&&ao>S.innerHeight){ao=S.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=i(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+s(ao)}if(ap){if(at){at+="&"}at+="c_n="+s(ap)}if(aq){if(at){at+="&"}at+="c_p="+s(aq)}if(ar){if(at){at+="&"}at+="c_t="+s(ar)}if(at){at+="&ca=1"}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+s(ao)+"&c_p="+s(ap);if(aq){ar+="&c_t="+s(aq)
|
29 |
}if(ar){ar+="&ca=1"}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||S.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap
|
30 |
}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(ao){if(ae.hasNodeAttribute(ao,this.CONTENT_IGNOREINTERACTION_ATTR)){return true}if(ae.hasNodeCssClass(ao,this.CONTENT_IGNOREINTERACTION_CLASS)){return true}if(ae.hasNodeCssClass(ao,this.LEGACY_CONTENT_IGNOREINTERACTION_CLASS)){return true}return false}};function W(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(Q(ap,"matomo.php")){ap=f(ap,"matomo.php".length)
|
31 |
-
}else{if(Q(ap,"piwik.php")){ap=f(ap,"piwik.php".length)}else{if(Q(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(Q(ap,"/js/")){ap=f(ap,"js/".length)}return ap}function N(av){var ax="Matomo_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment
|
32 |
-
}catch(ao){return true}}function P(ce,ca){var bK=this,be="mtm_consent",cE="mtm_cookie_consent",cN="mtm_consent_removed",b5=aa(G.domain,S.location.href,K()),cV=L(b5[0]),bO=o(b5[1]),bp=o(b5[2]),cT=false,ci="GET",
|
33 |
-
try{bk=G.title}catch(cz){bk=""}function
|
34 |
-
}function cl(
|
35 |
-
}}}return false}function co(
|
36 |
-
}setTimeout(function(){if(l&&a7(
|
37 |
-
an(S,"blur",az);ab++;t.addPlugin("HeartBeat"+ab,{unload:function(){if(aO&&
|
38 |
-
})}function aU(
|
39 |
-
}else{
|
40 |
-
if(
|
41 |
-
return true}return false}function aF(){var
|
42 |
-
}if(
|
43 |
-
if(bn){aF()}if(cR){return""}var
|
44 |
-
}}var
|
45 |
-
if(
|
46 |
-
if(a3&&!bi){
|
47 |
-
if(
|
48 |
-
if(!
|
49 |
-
return cr(
|
50 |
-
}return
|
51 |
-
}return false}function cH(
|
52 |
-
if(
|
53 |
-
this.requests=[];if(
|
54 |
-
};this.setTrackerUrl=function(
|
55 |
-
if(
|
56 |
-
}else{if(
|
57 |
-
};this.setIgnoreClasses=function(
|
58 |
-
}};this.getCookieDomain=function(){return
|
59 |
-
return}if(
|
60 |
-
};this.disableAlwaysUseSendBeacon=function(){
|
61 |
-
}};this.setCountPreRendered=function(
|
62 |
-
var dl=
|
63 |
-
}}
|
64 |
-
|
65 |
-
};this.isUserOptedOut=function(){return !
|
66 |
-
function ad(aq,ap){var ao=new P(aq,ap);I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
28 |
}}}var av=ae.findNodesByTagName(at,"embed");if(av&&av.length){return this.findMediaUrlInNode(av[0])}}},trim:function(ao){return a(ao)},isOrWasNodeInViewport:function(au){if(!au||!au.getBoundingClientRect||au.nodeType!==1){return true}var at=au.getBoundingClientRect();var ar=G.documentElement||{};var aq=at.top<0;if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(S.innerWidth&&ap>S.innerWidth){ap=S.innerWidth}var ao=ar.clientHeight;if(S.innerHeight&&ao>S.innerHeight){ao=S.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=i(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+s(ao)}if(ap){if(at){at+="&"}at+="c_n="+s(ap)}if(aq){if(at){at+="&"}at+="c_p="+s(aq)}if(ar){if(at){at+="&"}at+="c_t="+s(ar)}if(at){at+="&ca=1"}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+s(ao)+"&c_p="+s(ap);if(aq){ar+="&c_t="+s(aq)
|
29 |
}if(ar){ar+="&ca=1"}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||S.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap
|
30 |
}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(ao){if(ae.hasNodeAttribute(ao,this.CONTENT_IGNOREINTERACTION_ATTR)){return true}if(ae.hasNodeCssClass(ao,this.CONTENT_IGNOREINTERACTION_CLASS)){return true}if(ae.hasNodeCssClass(ao,this.LEGACY_CONTENT_IGNOREINTERACTION_CLASS)){return true}return false}};function W(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(Q(ap,"matomo.php")){ap=f(ap,"matomo.php".length)
|
31 |
+
}else{if(Q(ap,"piwik.php")){ap=f(ap,"piwik.php".length)}else{if(Q(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(Q(ap,"/js/")){ap=f(ap,"js/".length)}return ap}function N(av){var ax="Matomo_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=[^&]*)?");var aq=ap.exec(G.referrer);if(aq){var at=aq[1];if(at!==String(av)){return false}var au=aq[2],ao=aq[3],ar=aq[4];if(!ar){ar=""}else{if(ar.indexOf("&segment=")===0){ar=ar.substr("&segment=".length)}}S.name=ax+"###"+au+"###"+ao+"###"+ar}var aw=S.name.split("###");return aw.length===4&&aw[0]===ax}function Z(ap,av,aq){var au=S.name.split("###"),at=au[1],ao=au[2],ar=au[3],aw=W(ap,av);n(aw+"plugins/Overlay/client/client.js?v=1",function(){Matomo_Overlay_Client.initialize(aw,aq,at,ao,ar)})}function u(){var aq;try{aq=S.frameElement}catch(ap){return true}if(J(aq)){return(aq&&String(aq.nodeName).toLowerCase()==="iframe")?true:false}try{return S.self!==S.top
|
32 |
+
}catch(ao){return true}}function P(ce,ca){var bK=this,be="mtm_consent",cE="mtm_cookie_consent",cN="mtm_consent_removed",b5=aa(G.domain,S.location.href,K()),cV=L(b5[0]),bO=o(b5[1]),bp=o(b5[2]),cT=false,ci="GET",db=ci,aI="application/x-www-form-urlencoded; charset=UTF-8",cx=aI,aE=ce||"",bJ="",c1="",b7=ca||"",bA="",bP="",a5,bk="",c8=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","rtf","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ay=[cV],bB=[],bM=[],a9=[],bL=500,cY=true,cK,a6,bS,bQ,ao,cp=["pk_campaign","mtm_campaign","piwik_campaign","matomo_campaign","utm_campaign","utm_source","utm_medium"],bI=["pk_kwd","mtm_kwd","piwik_kwd","matomo_kwd","utm_term"],bl="_pk_",av="pk_vid",a0=180,cZ,br,bT=false,aJ="Lax",bn=false,cR,bf,bx,cL=33955200000,cn=1800000,c7=15768000000,a3=true,bG=false,bi=false,bR=false,aR=false,cc,bX={},cm={},bo={},bv=200,ct={},c2={},c9={},cb=[],cf=false,cC=false,ap=false,da=false,cO=false,aO=false,bd=u(),cy=null,c0=null,aS,bD,b8=am,bq,aM,bC=false,cq=0,bw=["id","ses","cvar","ref"],cB=false,bE=null,cM=[],cs=[],ax=T++,aw=false;
|
33 |
+
try{bk=G.title}catch(cz){bk=""}function aD(dm){if(bn){return 0}var dk=new RegExp("(^|;)[ ]*"+dm+"=([^;]*)"),dl=dk.exec(G.cookie);return dl?R(dl[2]):0}bE=!aD(cN);function df(dp,dq,dt,ds,dm,dn,dr){if(bn&&dp!==cN){return}var dl;if(dt){dl=new Date();dl.setTime(dl.getTime()+dt)}if(!dr){dr="Lax"}G.cookie=dp+"="+s(dq)+(dt?";expires="+dl.toGMTString():"")+";path="+(ds||"/")+(dm?";domain="+dm:"")+(dn?";secure":"")+";SameSite="+dr;if((!dt||dt>=0)&&aD(dp)!==dq){var dk="There was an error setting cookie `"+dp+"`. Please check domain and path.";ak(dk)}}function b3(dk){var dl;dk=j(dk,av);if(bQ){dl=new RegExp("#.*");return dk.replace(dl,"")}return dk}function bW(dm,dk){var dn=r(dk),dl;if(dn){return dk}if(dk.slice(0,1)==="/"){return r(dm)+"://"+d(dm)+dk}dm=b3(dm);dl=dm.indexOf("?");if(dl>=0){dm=dm.slice(0,dl)}dl=dm.lastIndexOf("/");if(dl!==dm.length-1){dm=dm.slice(0,dl+1)}return dm+dk}function cI(dm,dk){var dl;dm=String(dm).toLowerCase();dk=String(dk).toLowerCase();if(dm===dk){return true}if(dk.slice(0,1)==="."){if(dm===dk.slice(1)){return true
|
34 |
+
}dl=dm.length-dk.length;if((dl>0)&&(dm.slice(dl)===dk)){return true}}return false}function cl(dk){var dl=document.createElement("a");if(dk.indexOf("//")!==0&&dk.indexOf("http")!==0){if(dk.indexOf("*")===0){dk=dk.substr(1)}if(dk.indexOf(".")===0){dk=dk.substr(1)}dk="http://"+dk}dl.href=v.toAbsoluteUrl(dk);if(dl.pathname){return dl.pathname}return""}function a4(dl,dk){if(!aj(dk,"/")){dk="/"+dk}if(!aj(dl,"/")){dl="/"+dl}var dm=(dk==="/"||dk==="/*");if(dm){return true}if(dl===dk){return true}dk=String(dk).toLowerCase();dl=String(dl).toLowerCase();if(Q(dk,"*")){dk=dk.slice(0,-1);dm=(!dk||dk==="/");if(dm){return true}if(dl===dk){return true}return dl.indexOf(dk)===0}if(!Q(dl,"/")){dl+="/"}if(!Q(dk,"/")){dk+="/"}return dl.indexOf(dk)===0}function ar(dp,dr){var dl,dk,dm,dn,dq;for(dl=0;dl<ay.length;dl++){dn=L(ay[dl]);dq=cl(ay[dl]);if(cI(dp,dn)&&a4(dr,dq)){return true}}return false}function aW(dn){var dl,dk,dm;for(dl=0;dl<ay.length;dl++){dk=L(ay[dl].toLowerCase());if(dn===dk){return true}if(dk.slice(0,1)==="."){if(dn===dk.slice(1)){return true
|
35 |
+
}dm=dn.length-dk.length;if((dm>0)&&(dn.slice(dm)===dk)){return true}}}return false}function co(dk,dm){dk=dk.replace("send_image=0","send_image=1");var dl=new Image(1,1);dl.onload=function(){E=0;if(typeof dm==="function"){dm({request:dk,trackerUrl:aE,success:true})}};dl.onerror=function(){if(typeof dm==="function"){dm({request:dk,trackerUrl:aE,success:false})}};dl.src=aE+(aE.indexOf("?")<0?"?":"&")+dk}function cF(dk){if(db==="POST"){return true}return dk&&(dk.length>2000||dk.indexOf('{"requests"')===0)}function aL(){return"object"===typeof g&&"function"===typeof g.sendBeacon&&"function"===typeof Blob}function a7(dp,ds,dr){var dm=aL();if(!dm){return false}var dn={type:"application/x-www-form-urlencoded; charset=UTF-8"};var dt=false;var dl=aE;try{var dk=new Blob([dp],dn);if(dr&&!cF(dp)){dk=new Blob([],dn);dl=dl+(dl.indexOf("?")<0?"?":"&")+dp}dt=g.sendBeacon(dl,dk)}catch(dq){return false}if(dt&&typeof ds==="function"){ds({request:dp,trackerUrl:aE,success:true,isSendBeacon:true})}return dt}function c6(dl,dm,dk){if(!J(dk)||null===dk){dk=true
|
36 |
+
}if(l&&a7(dl,dm,dk)){return}setTimeout(function(){if(l&&a7(dl,dm,dk)){return}var dq;try{var dp=S.XMLHttpRequest?new S.XMLHttpRequest():S.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;dp.open("POST",aE,true);dp.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dr=l&&a7(dl,dm,dk);if(!dr&&dk){co(dl,dm)}else{if(typeof dm==="function"){dm({request:dl,trackerUrl:aE,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dm==="function")){dm({request:dl,trackerUrl:aE,success:true,xhr:this})}}};dp.setRequestHeader("Content-Type",cx);dp.withCredentials=true;dp.send(dl)}catch(dn){dq=l&&a7(dl,dm,dk);if(!dq&&dk){co(dl,dm)}else{if(typeof dm==="function"){dm({request:dl,trackerUrl:aE,success:false})}}}},50)}function cg(dl){var dk=new Date();var dm=dk.getTime()+dl;if(!q||dm>q){q=dm}}function bb(){bd=true;cy=new Date().getTime()}function de(){var dk=new Date().getTime();return !cy||(dk-cy)>a6}function az(){if(de()){bS()}}function dh(){if(aO||!a6){return
|
37 |
+
}aO=true;an(S,"focus",bb);an(S,"blur",az);ab++;t.addPlugin("HeartBeat"+ab,{unload:function(){if(aO&&de()){bS()}}})}function cD(dp){var dl=new Date();var dk=dl.getTime();c0=dk;if(cC&&dk<cC){var dm=cC-dk;setTimeout(dp,dm);cg(dm+50);cC+=50;return}if(cC===false){var dn=800;cC=dk+dn}dp()}function aP(){if(aD(cN)){bE=false}else{if(aD(be)){bE=true}}}function bH(dl,dk,dm){aP();if(!bE){cM.push(dl);return}aw=true;if(!cR&&dl){if(cB&&bE){dl+="&consent=1"}cD(function(){if(cY&&a7(dl,dm,true)){cg(100);return}if(cF(dl)){c6(dl,dm)}else{co(dl,dm)}cg(dk)})}if(!aO){dh()}}function ck(dk){if(cR){return false}return(dk&&dk.length)}function c5(dk,dp){if(!dp||dp>=dk.length){return[dk]}var dl=0;var dm=dk.length;var dn=[];for(dl;dl<dm;dl+=dp){dn.push(dk.slice(dl,dl+dp))}return dn}function dg(dl,dk){if(!ck(dl)){return}if(!bE){cM.push(dl);return}aw=true;cD(function(){var dp=c5(dl,50);var dm=0,dn;for(dm;dm<dp.length;dm++){dn='{"requests":["?'+dp[dm].join('","?')+'"],"send_image":0}';if(cY&&a7(dn,null,false)){cg(100)}else{c6(dn,null,false)
|
38 |
+
}}cg(dk)})}function aU(dk){return bl+dk+"."+b7+"."+bq}function bZ(dm,dl,dk){df(dm,"",-86400,dl,dk)}function b6(){if(bn){return"0"}if(!J(S.showModalDialog)&&J(g.cookieEnabled)){return g.cookieEnabled?"1":"0"}var dk=bl+"testcookie";df(dk,"1",undefined,br,cZ,bT,aJ);var dl=aD(dk)==="1"?"1":"0";bZ(dk);return dl}function bj(){bq=b8((cZ||cV)+(br||"/")).slice(0,4)}function cJ(){if(J(c9.res)){return c9}var dl,dn,dp={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",fla:"application/x-shockwave-flash",java:"application/x-java-vm",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(g.userAgent))){if(g.mimeTypes&&g.mimeTypes.length){for(dl in dp){if(Object.prototype.hasOwnProperty.call(dp,dl)){dn=g.mimeTypes[dp[dl]];c9[dl]=(dn&&dn.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(g.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&J(g.javaEnabled)&&g.javaEnabled()){c9.java="1"}if(!J(S.showModalDialog)&&J(g.cookieEnabled)){c9.cookie=g.cookieEnabled?"1":"0"
|
39 |
+
}else{c9.cookie=b6()}}var dm=parseInt(X.width,10);var dk=parseInt(X.height,10);c9.res=parseInt(dm,10)+"x"+parseInt(dk,10);return c9}function bY(){var dl=aU("cvar"),dk=aD(dl);if(dk&&dk.length){dk=S.JSON.parse(dk);if(V(dk)){return dk}}return{}}function cG(){if(aR===false){aR=bY()}}function cS(){var dk=cJ();return b8((g.userAgent||"")+(g.platform||"")+S.JSON.stringify(dk)+(new Date()).getTime()+Math.random()).slice(0,16)}function aB(){var dk=cJ();return b8((g.userAgent||"")+(g.platform||"")+S.JSON.stringify(dk)).slice(0,6)}function bg(){return Math.floor((new Date()).getTime()/1000)}function aK(){var dl=bg();var dm=aB();var dk=String(dl)+dm;return dk}function c4(dm){dm=String(dm);var dq=aB();var dn=dq.length;var dp=dm.substr(-1*dn,dn);var dl=parseInt(dm.substr(0,dm.length-dn),10);if(dl&&dp&&dp===dq){var dk=bg();if(a0<=0){return true}if(dk>=dl&&dk<=(dl+a0)){return true}}return false}function di(dk){if(!cO){return""}var dp=e(dk,av);if(!dp){return""}dp=String(dp);var dm=new RegExp("^[a-zA-Z0-9]+$");
|
40 |
+
if(dp.length===32&&dm.test(dp)){var dl=dp.substr(16,32);if(c4(dl)){var dn=dp.substr(0,16);return dn}}return""}function cP(){if(!bP){bP=di(bO)}var dm=new Date(),dk=Math.round(dm.getTime()/1000),dl=aU("id"),dq=aD(dl),dp,dn;if(dq){dp=dq.split(".");dp.unshift("0");if(bP.length){dp[1]=bP}return dp}if(bP.length){dn=bP}else{if("0"===b6()){dn=""}else{dn=cS()}}dp=["1",dn,dk];return dp}function aZ(){var dn=cP(),dl=dn[0],dm=dn[1],dk=dn[2];return{newVisitor:dl,uuid:dm,createTs:dk}}function aH(){var dn=new Date(),dl=dn.getTime(),dp=aZ().createTs;var dk=parseInt(dp,10);var dm=(dk*1000)+cL-dl;return dm}function aN(dk){if(!b7){return}var dm=new Date(),dl=Math.round(dm.getTime()/1000);if(!J(dk)){dk=aZ()}var dn=dk.uuid+"."+dk.createTs+".";df(aU("id"),dn,aH(),br,cZ,bT,aJ)}function bN(){var dk=aD(aU("ref"));if(dk.length){try{dk=S.JSON.parse(dk);if(V(dk)){return dk}}catch(dl){}}return["","",0,""]}function by(dm){var dl=bl+"testcookie_domain";var dk="testvalue";df(dl,dk,10000,null,dm,bT,aJ);if(aD(dl)===dk){bZ(dl,null,dm);
|
41 |
+
return true}return false}function aF(){var dl=bn;bn=false;var dk,dm;for(dk=0;dk<bw.length;dk++){dm=aU(bw[dk]);if(dm!==cN&&dm!==be&&0!==aD(dm)){bZ(dm,br,cZ)}}bn=dl}function b4(dk){b7=dk}function dj(dp){if(!dp||!V(dp)){return}var dn=[];var dm;for(dm in dp){if(Object.prototype.hasOwnProperty.call(dp,dm)){dn.push(dm)}}var dq={};dn.sort();var dk=dn.length;var dl;for(dl=0;dl<dk;dl++){dq[dn[dl]]=dp[dn[dl]]}return dq}function cd(){df(aU("ses"),"1",cn,br,cZ,bT,aJ)}function bh(){var dn="";var dl="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var dm=dl.length;var dk;for(dk=0;dk<6;dk++){dn+=dl.charAt(Math.floor(Math.random()*dm))}return dn}function aA(dl){if(!h){return dl}var dm=(typeof h.timing==="object")&&h.timing?h.timing:undefined;if(!dm){dm=(typeof h.getEntriesByType==="function")&&h.getEntriesByType("navigation")?h.getEntriesByType("navigation")[0]:undefined}if(!dm){return dl}var dk="";if(dm.connectEnd&&dm.fetchStart){if(dm.connectEnd<dm.fetchStart){return}dk+="&pf_net="+Math.round(dm.connectEnd-dm.fetchStart)
|
42 |
+
}if(dm.responseStart&&dm.requestStart){if(dm.responseStart<dm.requestStart){return}dk+="&pf_srv="+Math.round(dm.responseStart-dm.requestStart)}if(dm.responseStart&&dm.responseEnd){if(dm.responseEnd<dm.responseStart){return}dk+="&pf_tfr="+Math.round(dm.responseEnd-dm.responseStart)}if(J(dm.domLoading)){if(dm.domInteractive&&dm.domLoading){if(dm.domInteractive<dm.domLoading){return}dk+="&pf_dm1="+Math.round(dm.domInteractive-dm.domLoading)}}else{if(dm.domInteractive&&dm.responseEnd){if(dm.domInteractive<dm.responseEnd){return}dk+="&pf_dm1="+Math.round(dm.domInteractive-dm.responseEnd)}}if(dm.domComplete&&dm.domInteractive){if(dm.domComplete<dm.domInteractive){return}dk+="&pf_dm2="+Math.round(dm.domComplete-dm.domInteractive)}if(dm.loadEventEnd&&dm.loadEventStart){if(dm.loadEventEnd<dm.loadEventStart){return}dk+="&pf_onl="+Math.round(dm.loadEventEnd-dm.loadEventStart)}return dl+dk}function cr(dm,dH,dI){var dG,dl=new Date(),du=Math.round(dl.getTime()/1000),dr,dE,dn=1024,dN,dv,dD=aR,dp=aU("ses"),dB=aU("ref"),dy=aU("cvar"),dz=aD(dp),dF=bN(),dJ=a5||bO,ds,dk;
|
43 |
+
if(bn){aF()}if(cR){return""}var dA=aZ();var dx=G.characterSet||G.charset;if(!dx||dx.toLowerCase()==="utf-8"){dx=null}ds=dF[0];dk=dF[1];dr=dF[2];dE=dF[3];if(!dz){if(!bx||!ds.length){for(dG in cp){if(Object.prototype.hasOwnProperty.call(cp,dG)){ds=e(dJ,cp[dG]);if(ds.length){break}}}for(dG in bI){if(Object.prototype.hasOwnProperty.call(bI,dG)){dk=e(dJ,bI[dG]);if(dk.length){break}}}}dN=d(bp);dv=dE.length?d(dE):"";if(dN.length&&!aW(dN)&&(!bx||!dv.length||aW(dv))){dE=bp}if(dE.length||ds.length){dr=du;dF=[ds,dk,dr,b3(dE.slice(0,dn))];df(dB,S.JSON.stringify(dF),c7,br,cZ,bT,aJ)}}dm+="&idsite="+b7+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+dl.getHours()+"&m="+dl.getMinutes()+"&s="+dl.getSeconds()+"&url="+s(b3(dJ))+(bp.length?"&urlref="+s(b3(bp)):"")+(Y(bA)?"&uid="+s(bA):"")+"&_id="+dA.uuid+"&_idn="+dA.newVisitor+(ds.length?"&_rcn="+s(ds):"")+(dk.length?"&_rck="+s(dk):"")+"&_refts="+dr+(String(dE).length?"&_ref="+s(b3(dE.slice(0,dn))):"")+(dx?"&cs="+s(dx):"")+"&send_image=0";var dM=cJ();for(dG in dM){if(Object.prototype.hasOwnProperty.call(dM,dG)){dm+="&"+dG+"="+dM[dG]
|
44 |
+
}}var dL=[];if(dH){for(dG in dH){if(Object.prototype.hasOwnProperty.call(dH,dG)&&/^dimension\d+$/.test(dG)){var dq=dG.replace("dimension","");dL.push(parseInt(dq,10));dL.push(String(dq));dm+="&"+dG+"="+s(dH[dG]);delete dH[dG]}}}if(dH&&B(dH)){dH=null}for(dG in ct){if(Object.prototype.hasOwnProperty.call(ct,dG)){dm+="&"+dG+"="+s(ct[dG])}}for(dG in bo){if(Object.prototype.hasOwnProperty.call(bo,dG)){var dw=(-1===M(dL,dG));if(dw){dm+="&dimension"+dG+"="+s(bo[dG])}}}if(dH){dm+="&data="+s(S.JSON.stringify(dH))}else{if(ao){dm+="&data="+s(S.JSON.stringify(ao))}}function dt(dO,dP){var dQ=S.JSON.stringify(dO);if(dQ.length>2){return"&"+dP+"="+s(dQ)}return""}var dK=dj(bX);var dC=dj(cm);dm+=dt(dK,"cvar");dm+=dt(dC,"e_cvar");if(aR){dm+=dt(aR,"_cvar");for(dG in dD){if(Object.prototype.hasOwnProperty.call(dD,dG)){if(aR[dG][0]===""||aR[dG][1]===""){delete aR[dG]}}}if(bR){df(dy,S.JSON.stringify(aR),cn,br,cZ,bT,aJ)}}if(a3&&bG&&!bi){dm=aA(dm);bi=true}if(aM){dm+="&pv_id="+aM}aN(dA);cd();dm+=ac(dI,{tracker:bK,request:dm});
|
45 |
+
if(c1.length){dm+="&"+c1}if(A(cc)){dm=cc(dm)}return dm}bS=function a8(){var dk=new Date();dk=dk.getTime();if(!c0){return false}if(c0+a6<=dk){bK.ping();return true}return false};function bs(dn,dm,ds,dp,dk,dv){var dr="idgoal=0",dl=new Date(),dt=[],du,dq=String(dn).length;if(dq){dr+="&ec_id="+s(dn)}dr+="&revenue="+dm;if(String(ds).length){dr+="&ec_st="+ds}if(String(dp).length){dr+="&ec_tx="+dp}if(String(dk).length){dr+="&ec_sh="+dk}if(String(dv).length){dr+="&ec_dt="+dv}if(c2){for(du in c2){if(Object.prototype.hasOwnProperty.call(c2,du)){if(!J(c2[du][1])){c2[du][1]=""}if(!J(c2[du][2])){c2[du][2]=""}if(!J(c2[du][3])||String(c2[du][3]).length===0){c2[du][3]=0}if(!J(c2[du][4])||String(c2[du][4]).length===0){c2[du][4]=1}dt.push(c2[du])}}dr+="&ec_items="+s(S.JSON.stringify(dt))}dr=cr(dr,ao,"ecommerce");bH(dr,bL);if(dq){c2={}}}function b0(dk,dp,dn,dm,dl,dq){if(String(dk).length&&J(dp)){bs(dk,dp,dn,dm,dl,dq)}}function bu(dk){if(J(dk)){bs("",dk,"","","","")}}function b1(dl,dn,dm){if(!bC){aM=bh()}var dk=cr("action_name="+s(al(dl||bk)),dn,"log");
|
46 |
+
if(a3&&!bi){dk=aA(dk)}bH(dk,bL,dm)}function a1(dm,dl){var dn,dk="(^| )(piwik[_-]"+dl+"|matomo[_-]"+dl;if(dm){for(dn=0;dn<dm.length;dn++){dk+="|"+dm[dn]}}dk+=")( |$)";return new RegExp(dk)}function aV(dk){return(aE&&dk&&0===String(dk).indexOf(aE))}function cv(dp,dk,dq,dl){if(aV(dk)){return 0}var dn=a1(bM,"download"),dm=a1(a9,"link"),dr=new RegExp("\\.("+c8.join("|")+")([?&#]|$)","i");if(dm.test(dp)){return"link"}if(dl||dn.test(dp)||dr.test(dk)){return"download"}if(dq){return 0}return"link"}function au(dl){var dk;dk=dl.parentNode;while(dk!==null&&J(dk)){if(ae.isLinkElement(dl)){break}dl=dk;dk=dl.parentNode}return dl}function dd(dq){dq=au(dq);if(!ae.hasNodeAttribute(dq,"href")){return}if(!J(dq.href)){return}var dp=ae.getAttributeValueFromNode(dq,"href");var dl=dq.pathname||cl(dq.href);var dr=dq.hostname||d(dq.href);var ds=dr.toLowerCase();var dm=dq.href.replace(dr,ds);var dn=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!dn.test(dm)){var dk=cv(dq.className,dm,ar(ds,dl),ae.hasNodeAttribute(dq,"download"));
|
47 |
+
if(dk){return{type:dk,href:dm}}}}function aQ(dk,dl,dm,dn){var dp=v.buildInteractionRequestParams(dk,dl,dm,dn);if(!dp){return}return cr(dp,null,"contentInteraction")}function bc(dk,dl){if(!dk||!dl){return false}var dm=v.findTargetNode(dk);if(v.shouldIgnoreInteraction(dm)){return false}dm=v.findTargetNodeNoDefault(dk);if(dm&&!U(dm,dl)){return false}return true}function cu(dm,dl,dp){if(!dm){return}var dk=v.findParentContentNode(dm);if(!dk){return}if(!bc(dk,dm)){return}var dn=v.buildContentBlock(dk);if(!dn){return}if(!dn.target&&dp){dn.target=dp}return v.buildInteractionRequestParams(dl,dn.name,dn.piece,dn.target)}function aX(dl){if(!cb||!cb.length){return false}var dk,dm;for(dk=0;dk<cb.length;dk++){dm=cb[dk];if(dm&&dm.name===dl.name&&dm.piece===dl.piece&&dm.target===dl.target){return true}}return false}function aY(dk){return function(dp){if(!dk){return}var dm=v.findParentContentNode(dk);var dl;if(dp){dl=dp.target||dp.srcElement}if(!dl){dl=dk}if(!bc(dm,dl)){return}if(!dm){return false}var dq=v.findTargetNode(dm);
|
48 |
+
if(!dq||v.shouldIgnoreInteraction(dq)){return false}var dn=dd(dq);if(da&&dn&&dn.type){return dn.type}return bK.trackContentInteractionNode(dl,"click")}}function b2(dm){if(!dm||!dm.length){return}var dk,dl;for(dk=0;dk<dm.length;dk++){dl=v.findTargetNode(dm[dk]);if(dl&&!dl.contentInteractionTrackingSetupDone){dl.contentInteractionTrackingSetupDone=true;an(dl,"click",aY(dl))}}}function bz(dm,dn){if(!dm||!dm.length){return[]}var dk,dl;for(dk=0;dk<dm.length;dk++){if(aX(dm[dk])){dm.splice(dk,1);dk--}else{cb.push(dm[dk])}}if(!dm||!dm.length){return[]}b2(dn);var dp=[];for(dk=0;dk<dm.length;dk++){dl=cr(v.buildImpressionRequestParams(dm[dk].name,dm[dk].piece,dm[dk].target),undefined,"contentImpressions");if(dl){dp.push(dl)}}return dp}function cA(dl){var dk=v.collectContent(dl);return bz(dk,dl)}function ba(dl){if(!dl||!dl.length){return[]}var dk;for(dk=0;dk<dl.length;dk++){if(!v.isNodeVisible(dl[dk])){dl.splice(dk,1);dk--}}if(!dl||!dl.length){return[]}return cA(dl)}function aG(dm,dk,dl){var dn=v.buildImpressionRequestParams(dm,dk,dl);
|
49 |
+
return cr(dn,null,"contentImpression")}function dc(dn,dl){if(!dn){return}var dk=v.findParentContentNode(dn);var dm=v.buildContentBlock(dk);if(!dm){return}if(!dl){dl="Unknown"}return aQ(dl,dm.name,dm.piece,dm.target)}function cQ(dl,dn,dk,dm){return"e_c="+s(dl)+"&e_a="+s(dn)+(J(dk)?"&e_n="+s(dk):"")+(J(dm)?"&e_v="+s(dm):"")+"&ca=1"}function at(dm,dp,dk,dn,dr,dq){if(!Y(dm)||!Y(dp)){ak("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");return false}var dl=cr(cQ(dm,dp,dk,dn),dr,"event");bH(dl,bL,dq)}function b9(dk,dn,dl,dp){var dm=cr("search="+s(dk)+(dn?"&search_cat="+s(dn):"")+(J(dl)?"&search_count="+dl:""),dp,"sitesearch");bH(dm,bL)}function cU(dk,dp,dn,dm){var dl=cr("idgoal="+dk+(dp?"&revenue="+dp:""),dn,"goal");bH(dl,bL,dm)}function c3(dn,dk,ds,dr,dm){var dq=dk+"="+s(b3(dn));var dl=cu(dm,"click",dn);if(dl){dq+="&"+dl}var dp=cr(dq,ds,"link");bH(dp,bL,dr)}function bV(dl,dk){if(dl!==""){return dl+dk.charAt(0).toUpperCase()+dk.slice(1)
|
50 |
+
}return dk}function ch(dq){var dp,dk,dn=["","webkit","ms","moz"],dm;if(!bf){for(dk=0;dk<dn.length;dk++){dm=dn[dk];if(Object.prototype.hasOwnProperty.call(G,bV(dm,"hidden"))){if(G[bV(dm,"visibilityState")]==="prerender"){dp=true}break}}}if(dp){an(G,dm+"visibilitychange",function dl(){G.removeEventListener(dm+"visibilitychange",dl,false);dq()});return}dq()}function bt(){var dl=bK.getVisitorId();var dk=aK();return dl+dk}function cj(dk){if(!dk){return}if(!ae.hasNodeAttribute(dk,"href")){return}var dl=ae.getAttributeValueFromNode(dk,"href");if(!dl||aV(dl)){return}if(!bK.getVisitorId()){return}dl=j(dl,av);var dm=bt();dl=F(dl,av,dm);ae.setAnyAttribute(dk,"href",dl)}function bm(dn){var dp=ae.getAttributeValueFromNode(dn,"href");if(!dp){return false}dp=String(dp);var dl=dp.indexOf("//")===0||dp.indexOf("http://")===0||dp.indexOf("https://")===0;if(!dl){return false}var dk=dn.pathname||cl(dn.href);var dm=(dn.hostname||d(dn.href)).toLowerCase();if(ar(dm,dk)){if(!cI(cV,L(dm))){return true}return false
|
51 |
+
}return false}function cH(dk){var dl=dd(dk);if(dl&&dl.type){dl.href=o(dl.href);c3(dl.href,dl.type,undefined,null,dk);return}if(cO){dk=au(dk);if(bm(dk)){cj(dk)}}}function cw(){return G.all&&!G.addEventListener}function cW(dk){var dm=dk.which;var dl=(typeof dk.button);if(!dm&&dl!=="undefined"){if(cw()){if(dk.button&1){dm=1}else{if(dk.button&2){dm=3}else{if(dk.button&4){dm=2}}}}else{if(dk.button===0||dk.button==="0"){dm=1}else{if(dk.button&1){dm=2}else{if(dk.button&2){dm=3}}}}}return dm}function bU(dk){switch(cW(dk)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function a2(dk){return dk.target||dk.srcElement}function cX(dk){return dk==="A"||dk==="AREA"}function aC(dk){function dl(dn){var dp=a2(dn);var dq=dp.nodeName;var dm=a1(bB,"ignore");while(!cX(dq)&&dp&&dp.parentNode){dp=dp.parentNode;dq=dp.nodeName}if(dp&&cX(dq)&&!dm.test(dp.className)){return dp}}return function(dp){dp=dp||S.event;var dq=dl(dp);if(!dq){return}var dn=bU(dp);if(dp.type==="click"){var dm=false;if(dk&&dn==="middle"){dm=true
|
52 |
+
}if(dq&&!dm){cH(dq)}}else{if(dp.type==="mousedown"){if(dn==="middle"&&dq){aS=dn;bD=dq}else{aS=bD=null}}else{if(dp.type==="mouseup"){if(dn===aS&&dq===bD){cH(dq)}aS=bD=null}else{if(dp.type==="contextmenu"){cH(dq)}}}}}}function aq(dn,dm,dk){var dl=typeof dm;if(dl==="undefined"){dm=true}an(dn,"click",aC(dm),dk);if(dm){an(dn,"mouseup",aC(dm),dk);an(dn,"mousedown",aC(dm),dk);an(dn,"contextmenu",aC(dm),dk)}}function aT(dl,dp,dq){if(cf){return true}cf=true;var dr=false;var dn,dm;function dk(){dr=true}m(function(){function ds(du){setTimeout(function(){if(!cf){return}dr=false;dq.trackVisibleContentImpressions();ds(du)},du)}function dt(du){setTimeout(function(){if(!cf){return}if(dr){dr=false;dq.trackVisibleContentImpressions()}dt(du)},du)}if(dl){dn=["scroll","resize"];for(dm=0;dm<dn.length;dm++){if(G.addEventListener){G.addEventListener(dn[dm],dk,false)}else{S.attachEvent("on"+dn[dm],dk)}}dt(100)}if(dp&&dp>0){dp=parseInt(dp,10);ds(dp)}})}var bF={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dk=this.requests;
|
53 |
+
this.requests=[];if(dk.length===1){bH(dk[0],bL)}else{dg(dk,bL)}},canQueue:function(){return !l&&this.enabled},pushMultiple:function(dl){if(!this.canQueue()){dg(dl,bL);return}var dk;for(dk=0;dk<dl.length;dk++){this.push(dl[dk])}},push:function(dk){if(!dk){return}if(!this.canQueue()){bH(dk,bL);return}bF.requests.push(dk);if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.timeout=setTimeout(function(){bF.timeout=null;bF.sendRequests()},bF.interval);var dl="RequestQueue"+ax;if(!Object.prototype.hasOwnProperty.call(b,dl)){b[dl]={unload:function(){if(bF.timeout){clearTimeout(bF.timeout)}bF.sendRequests()}}}}};bj();aN();this.hasConsent=function(){return bE};this.getVisitorId=function(){return aZ().uuid};this.getVisitorInfo=function(){return cP()};this.getAttributionInfo=function(){return bN()};this.getAttributionCampaignName=function(){return bN()[0]};this.getAttributionCampaignKeyword=function(){return bN()[1]};this.getAttributionReferrerTimestamp=function(){return bN()[2]};this.getAttributionReferrerUrl=function(){return bN()[3]
|
54 |
+
};this.setTrackerUrl=function(dk){aE=dk};this.getTrackerUrl=function(){return aE};this.getMatomoUrl=function(){return W(this.getTrackerUrl(),bJ)};this.getPiwikUrl=function(){return this.getMatomoUrl()};this.addTracker=function(dm,dl){if(!J(dm)||null===dm){dm=this.getTrackerUrl()}var dk=new P(dm,dl);I.push(dk);t.trigger("TrackerAdded",[this]);return dk};this.getSiteId=function(){return b7};this.setSiteId=function(dk){b4(dk)};this.resetUserId=function(){bA=""};this.setUserId=function(dk){if(Y(dk)){bA=dk}};this.setVisitorId=function(dl){var dk=/[0-9A-Fa-f]{16}/g;if(w(dl)&&dk.test(dl)){bP=dl}else{ak("Invalid visitorId set"+dl)}};this.getUserId=function(){return bA};this.setCustomData=function(dk,dl){if(V(dk)){ao=dk}else{if(!ao){ao={}}ao[dk]=dl}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(dk){cc=dk};this.appendToTrackingUrl=function(dk){c1=dk};this.getRequest=function(dk){return cr(dk)};this.addPlugin=function(dk,dl){b[dk]=dl};this.setCustomDimension=function(dk,dl){dk=parseInt(dk,10);
|
55 |
+
if(dk>0){if(!J(dl)){dl=""}if(!w(dl)){dl=String(dl)}bo[dk]=dl}};this.getCustomDimension=function(dk){dk=parseInt(dk,10);if(dk>0&&Object.prototype.hasOwnProperty.call(bo,dk)){return bo[dk]}};this.deleteCustomDimension=function(dk){dk=parseInt(dk,10);if(dk>0){delete bo[dk]}};this.setCustomVariable=function(dl,dk,dp,dm){var dn;if(!J(dm)){dm="visit"}if(!J(dk)){return}if(!J(dp)){dp=""}if(dl>0){dk=!w(dk)?String(dk):dk;dp=!w(dp)?String(dp):dp;dn=[dk.slice(0,bv),dp.slice(0,bv)];if(dm==="visit"||dm===2){cG();aR[dl]=dn}else{if(dm==="page"||dm===3){bX[dl]=dn}else{if(dm==="event"){cm[dl]=dn}}}}};this.getCustomVariable=function(dl,dm){var dk;if(!J(dm)){dm="visit"}if(dm==="page"||dm===3){dk=bX[dl]}else{if(dm==="event"){dk=cm[dl]}else{if(dm==="visit"||dm===2){cG();dk=aR[dl]}}}if(!J(dk)||(dk&&dk[0]==="")){return false}return dk};this.deleteCustomVariable=function(dk,dl){if(this.getCustomVariable(dk,dl)){this.setCustomVariable(dk,"","",dl)}};this.deleteCustomVariables=function(dk){if(dk==="page"||dk===3){bX={}
|
56 |
+
}else{if(dk==="event"){cm={}}else{if(dk==="visit"||dk===2){aR={}}}}};this.storeCustomVariablesInCookie=function(){bR=true};this.setLinkTrackingTimer=function(dk){bL=dk};this.getLinkTrackingTimer=function(){return bL};this.setDownloadExtensions=function(dk){if(w(dk)){dk=dk.split("|")}c8=dk};this.addDownloadExtensions=function(dl){var dk;if(w(dl)){dl=dl.split("|")}for(dk=0;dk<dl.length;dk++){c8.push(dl[dk])}};this.removeDownloadExtensions=function(dm){var dl,dk=[];if(w(dm)){dm=dm.split("|")}for(dl=0;dl<c8.length;dl++){if(M(dm,c8[dl])===-1){dk.push(c8[dl])}}c8=dk};this.setDomains=function(dk){ay=w(dk)?[dk]:dk;var dp=false,dm=0,dl;for(dm;dm<ay.length;dm++){dl=String(ay[dm]);if(cI(cV,L(dl))){dp=true;break}var dn=cl(dl);if(dn&&dn!=="/"&&dn!=="/*"){dp=true;break}}if(!dp){ay.push(cV)}};this.enableCrossDomainLinking=function(){cO=true};this.disableCrossDomainLinking=function(){cO=false};this.isCrossDomainLinkingEnabled=function(){return cO};this.setCrossDomainLinkingTimeout=function(dk){a0=dk};this.getCrossDomainLinkingUrlParameter=function(){return s(av)+"="+s(bt())
|
57 |
+
};this.setIgnoreClasses=function(dk){bB=w(dk)?[dk]:dk};this.setRequestMethod=function(dk){if(dk){db=String(dk).toUpperCase()}else{db=ci}if(db==="GET"){this.disableAlwaysUseSendBeacon()}};this.setRequestContentType=function(dk){cx=dk||aI};this.setGenerationTimeMs=function(dk){ak("setGenerationTimeMs is no longer supported since Matomo 4. The call will be ignored. There is currently no replacement yet.")};this.setReferrerUrl=function(dk){bp=dk};this.setCustomUrl=function(dk){a5=bW(bO,dk)};this.getCurrentUrl=function(){return a5||bO};this.setDocumentTitle=function(dk){bk=dk};this.setPageViewId=function(dk){aM=dk;bC=true};this.setAPIUrl=function(dk){bJ=dk};this.setDownloadClasses=function(dk){bM=w(dk)?[dk]:dk};this.setLinkClasses=function(dk){a9=w(dk)?[dk]:dk};this.setCampaignNameKey=function(dk){cp=w(dk)?[dk]:dk};this.setCampaignKeywordKey=function(dk){bI=w(dk)?[dk]:dk};this.discardHashTag=function(dk){bQ=dk};this.setCookieNamePrefix=function(dk){bl=dk;if(aR){aR=bY()}};this.setCookieDomain=function(dk){var dl=L(dk);
|
58 |
+
if(!bn&&!by(dl)){ak("Can't write cookie on domain "+dk)}else{cZ=dl;bj()}};this.getCookieDomain=function(){return cZ};this.hasCookies=function(){return"1"===b6()};this.setSessionCookie=function(dm,dl,dk){if(!dm){throw new Error("Missing cookie name")}if(!J(dk)){dk=cn}bw.push(dm);df(aU(dm),dl,dk,br,cZ,bT,aJ)};this.getCookie=function(dl){var dk=aD(aU(dl));if(dk===0){return null}return dk};this.setCookiePath=function(dk){br=dk;bj()};this.getCookiePath=function(dk){return br};this.setVisitorCookieTimeout=function(dk){cL=dk*1000};this.setSessionCookieTimeout=function(dk){cn=dk*1000};this.getSessionCookieTimeout=function(){return cn};this.setReferralCookieTimeout=function(dk){c7=dk*1000};this.setConversionAttributionFirstReferrer=function(dk){bx=dk};this.setSecureCookie=function(dk){if(dk&&location.protocol!=="https:"){ak("Error in setSecureCookie: You cannot use `Secure` on http.");return}bT=dk};this.setCookieSameSite=function(dk){dk=String(dk);dk=dk.charAt(0).toUpperCase()+dk.toLowerCase().slice(1);
|
59 |
+
if(dk!=="None"&&dk!=="Lax"&&dk!=="Strict"){ak("Ignored value for sameSite. Please use either Lax, None, or Strict.");return}if(dk==="None"){if(location.protocol==="https:"){this.setSecureCookie(true)}else{ak("sameSite=None cannot be used on http, reverted to sameSite=Lax.");dk="Lax"}}aJ=dk};this.disableCookies=function(){bn=true;if(b7){aF()}};this.areCookiesEnabled=function(){return !bn};this.setCookieConsentGiven=function(){if(bn&&!cR){bn=false;if(b7&&aw){aN();var dk=cr("ping=1",null,"ping");bH(dk,bL)}}};this.requireCookieConsent=function(){if(this.getRememberedCookieConsent()){return false}this.disableCookies();return true};this.getRememberedCookieConsent=function(){return aD(cE)};this.forgetCookieConsentGiven=function(){bZ(cE,br,cZ);this.disableCookies()};this.rememberCookieConsentGiven=function(dl){if(dl){dl=dl*60*60*1000}else{dl=30*365*24*60*60*1000}this.setCookieConsentGiven();var dk=new Date().getTime();df(cE,dk,dl,br,cZ,bT,aJ)};this.deleteCookies=function(){aF()};this.setDoNotTrack=function(dl){var dk=g.doNotTrack||g.msDoNotTrack;
|
60 |
+
cR=dl&&(dk==="yes"||dk==="1");if(cR){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cY=true};this.disableAlwaysUseSendBeacon=function(){cY=false};this.addListener=function(dl,dk){aq(dl,dk,false)};this.enableLinkTracking=function(dl){if(da){return}da=true;var dk=this;p(function(){ap=true;var dm=G.body;aq(dm,dl,true)})};this.enableJSErrorTracking=function(){if(cT){return}cT=true;var dk=S.onerror;S.onerror=function(dq,dn,dm,dp,dl){ch(function(){var dr="JavaScript Errors";var ds=dn+":"+dm;if(dp){ds+=":"+dp}if(M(cs,dr+ds+dq)===-1){cs.push(dr+ds+dq);at(dr,ds,dq)}});if(dk){return dk(dq,dn,dm,dp,dl)}return false}};this.disablePerformanceTracking=function(){a3=false};this.enableHeartBeatTimer=function(dk){dk=Math.max(dk||15,5);a6=dk*1000;if(c0!==null){dh()}};this.disableHeartBeatTimer=function(){if(a6||aO){if(S.removeEventListener){S.removeEventListener("focus",bb);S.removeEventListener("blur",az)}else{if(S.detachEvent){S.detachEvent("onfocus",bb);S.detachEvent("onblur",az)}}}a6=null;
|
61 |
+
aO=false};this.killFrame=function(){if(S.location!==S.top.location){S.top.location=S.location}};this.redirectFile=function(dk){if(S.location.protocol==="file:"){S.location=dk}};this.setCountPreRendered=function(dk){bf=dk};this.trackGoal=function(dk,dn,dm,dl){ch(function(){cU(dk,dn,dm,dl)})};this.trackLink=function(dl,dk,dn,dm){ch(function(){c3(dl,dk,dn,dm)})};this.getNumTrackedPageViews=function(){return cq};this.trackPageView=function(dk,dm,dl){cb=[];cM=[];cs=[];if(N(b7)){ch(function(){Z(aE,bJ,b7)})}else{ch(function(){cq++;b1(dk,dm,dl)})}};this.trackAllContentImpressions=function(){if(N(b7)){return}ch(function(){p(function(){var dk=v.findContentNodes();var dl=cA(dk);bF.pushMultiple(dl)})})};this.trackVisibleContentImpressions=function(dk,dl){if(N(b7)){return}if(!J(dk)){dk=true}if(!J(dl)){dl=750}aT(dk,dl,this);ch(function(){m(function(){var dm=v.findContentNodes();var dn=ba(dm);bF.pushMultiple(dn)})})};this.trackContentImpression=function(dm,dk,dl){if(N(b7)){return}dm=a(dm);dk=a(dk);dl=a(dl);
|
62 |
+
if(!dm){return}dk=dk||"Unknown";ch(function(){var dn=aG(dm,dk,dl);bF.push(dn)})};this.trackContentImpressionsWithinNode=function(dk){if(N(b7)||!dk){return}ch(function(){if(cf){m(function(){var dl=v.findContentNodesWithinNode(dk);var dm=ba(dl);bF.pushMultiple(dm)})}else{p(function(){var dl=v.findContentNodesWithinNode(dk);var dm=cA(dl);bF.pushMultiple(dm)})}})};this.trackContentInteraction=function(dm,dn,dk,dl){if(N(b7)){return}dm=a(dm);dn=a(dn);dk=a(dk);dl=a(dl);if(!dm||!dn){return}dk=dk||"Unknown";ch(function(){var dp=aQ(dm,dn,dk,dl);if(dp){bF.push(dp)}})};this.trackContentInteractionNode=function(dm,dl){if(N(b7)||!dm){return}var dk=null;ch(function(){dk=dc(dm,dl);if(dk){bF.push(dk)}});return dk};this.logAllContentBlocksOnPage=function(){var dm=v.findContentNodes();var dk=v.collectContent(dm);var dl=typeof console;if(dl!=="undefined"&&console&&console.log){console.log(dk)}};this.trackEvent=function(dl,dn,dk,dm,dq,dp){ch(function(){at(dl,dn,dk,dm,dq,dp)})};this.trackSiteSearch=function(dk,dm,dl,dn){cb=[];
|
63 |
+
ch(function(){b9(dk,dm,dl,dn)})};this.setEcommerceView=function(dp,dk,dm,dl){ct={};if(Y(dm)){dm=String(dm)}if(!J(dm)||dm===null||dm===false||!dm.length){dm=""}else{if(dm instanceof Array){dm=S.JSON.stringify(dm)}}var dn="_pkc";ct[dn]=dm;if(J(dl)&&dl!==null&&dl!==false&&String(dl).length){dn="_pkp";ct[dn]=dl}if(!Y(dp)&&!Y(dk)){return}if(Y(dp)){dn="_pks";ct[dn]=dp}if(!Y(dk)){dk=""}dn="_pkn";ct[dn]=dk};this.getEcommerceItems=function(){return JSON.parse(JSON.stringify(c2))};this.addEcommerceItem=function(dp,dk,dm,dl,dn){if(Y(dp)){c2[dp]=[String(dp),dk,dm,dl,dn]}};this.removeEcommerceItem=function(dk){if(Y(dk)){dk=String(dk);delete c2[dk]}};this.clearEcommerceCart=function(){c2={}};this.trackEcommerceOrder=function(dk,dp,dn,dm,dl,dq){b0(dk,dp,dn,dm,dl,dq)};this.trackEcommerceCartUpdate=function(dk){bu(dk)};this.trackRequest=function(dl,dn,dm,dk){ch(function(){var dp=cr(dl,dn,dk);bH(dp,bL,dm)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bF.enabled=false
|
64 |
+
};this.setRequestQueueInterval=function(dk){if(dk<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bF.interval=dk};this.queueRequest=function(dk){ch(function(){var dl=cr(dk);bF.push(dl)})};this.isConsentRequired=function(){return cB};this.getRememberedConsent=function(){var dk=aD(be);if(aD(cN)){if(dk){bZ(be,br,cZ)}return null}if(!dk||dk===0){return null}return dk};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()};this.requireConsent=function(){cB=true;bE=this.hasRememberedConsent();if(!bE){bn=true}x++;b["CoreConsent"+x]={unload:function(){if(!bE){aF()}}}};this.setConsentGiven=function(dl){bE=true;bZ(cN,br,cZ);var dm,dk;for(dm=0;dm<cM.length;dm++){dk=typeof cM[dm];if(dk==="string"){bH(cM[dm],bL)}else{if(dk==="object"){dg(cM[dm],bL)}}}cM=[];if(!J(dl)||dl){this.setCookieConsentGiven()}};this.rememberConsentGiven=function(dm){if(dm){dm=dm*60*60*1000}else{dm=30*365*24*60*60*1000}var dk=true;this.setConsentGiven(dk);var dl=new Date().getTime();
|
65 |
+
df(be,dl,dm,br,cZ,bT,aJ)};this.forgetConsentGiven=function(){var dk=30*365*24*60*60*1000;bZ(be,br,cZ);df(cN,new Date().getTime(),dk,br,cZ,bT,aJ);this.forgetCookieConsentGiven();this.requireConsent()};this.isUserOptedOut=function(){return !bE};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=function(){this.setConsentGiven(false)};m(function(){setTimeout(function(){bG=true},0)});t.trigger("TrackerSetup",[this])}function H(){return{push:af}}function c(au,at){var av={};var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];if(av[ap]>1&&ap!=="addTracker"&&ap!=="enableLinkTracking"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Matomo trackers documentation: https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","forgetCookieConsentGiven","requireCookieConsent","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking"];
|
66 |
+
function ad(aq,ap){var ao=new P(aq,ap);I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)){g.serviceWorker.ready.then(function(ao){if(ao&&ao.sync){return ao.sync.register("matomoSync")}},function(){})}},false);an(S,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getMatomoUrl());if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
app/piwik.js
CHANGED
@@ -28,42 +28,42 @@ ao=ae.findFirstNodeHavingAttribute(ap,this.CONTENT_PIECE_ATTR);if(!ao){ao=ae.fin
|
|
28 |
}}}var av=ae.findNodesByTagName(at,"embed");if(av&&av.length){return this.findMediaUrlInNode(av[0])}}},trim:function(ao){return a(ao)},isOrWasNodeInViewport:function(au){if(!au||!au.getBoundingClientRect||au.nodeType!==1){return true}var at=au.getBoundingClientRect();var ar=G.documentElement||{};var aq=at.top<0;if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(S.innerWidth&&ap>S.innerWidth){ap=S.innerWidth}var ao=ar.clientHeight;if(S.innerHeight&&ao>S.innerHeight){ao=S.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=i(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+s(ao)}if(ap){if(at){at+="&"}at+="c_n="+s(ap)}if(aq){if(at){at+="&"}at+="c_p="+s(aq)}if(ar){if(at){at+="&"}at+="c_t="+s(ar)}if(at){at+="&ca=1"}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+s(ao)+"&c_p="+s(ap);if(aq){ar+="&c_t="+s(aq)
|
29 |
}if(ar){ar+="&ca=1"}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||S.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap
|
30 |
}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(ao){if(ae.hasNodeAttribute(ao,this.CONTENT_IGNOREINTERACTION_ATTR)){return true}if(ae.hasNodeCssClass(ao,this.CONTENT_IGNOREINTERACTION_CLASS)){return true}if(ae.hasNodeCssClass(ao,this.LEGACY_CONTENT_IGNOREINTERACTION_CLASS)){return true}return false}};function W(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(Q(ap,"matomo.php")){ap=f(ap,"matomo.php".length)
|
31 |
-
}else{if(Q(ap,"piwik.php")){ap=f(ap,"piwik.php".length)}else{if(Q(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(Q(ap,"/js/")){ap=f(ap,"js/".length)}return ap}function N(av){var ax="Matomo_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment
|
32 |
-
}catch(ao){return true}}function P(ce,ca){var bK=this,be="mtm_consent",cE="mtm_cookie_consent",cN="mtm_consent_removed",b5=aa(G.domain,S.location.href,K()),cV=L(b5[0]),bO=o(b5[1]),bp=o(b5[2]),cT=false,ci="GET",
|
33 |
-
try{bk=G.title}catch(cz){bk=""}function
|
34 |
-
}function cl(
|
35 |
-
}}}return false}function co(
|
36 |
-
}setTimeout(function(){if(l&&a7(
|
37 |
-
an(S,"blur",az);ab++;t.addPlugin("HeartBeat"+ab,{unload:function(){if(aO&&
|
38 |
-
})}function aU(
|
39 |
-
}else{
|
40 |
-
if(
|
41 |
-
return true}return false}function aF(){var
|
42 |
-
}if(
|
43 |
-
if(bn){aF()}if(cR){return""}var
|
44 |
-
}}var
|
45 |
-
if(
|
46 |
-
if(a3&&!bi){
|
47 |
-
if(
|
48 |
-
if(!
|
49 |
-
return cr(
|
50 |
-
}return
|
51 |
-
}return false}function cH(
|
52 |
-
if(
|
53 |
-
this.requests=[];if(
|
54 |
-
};this.setTrackerUrl=function(
|
55 |
-
if(
|
56 |
-
}else{if(
|
57 |
-
};this.setIgnoreClasses=function(
|
58 |
-
}};this.getCookieDomain=function(){return
|
59 |
-
return}if(
|
60 |
-
};this.disableAlwaysUseSendBeacon=function(){
|
61 |
-
}};this.setCountPreRendered=function(
|
62 |
-
var dl=
|
63 |
-
}}
|
64 |
-
|
65 |
-
};this.isUserOptedOut=function(){return !
|
66 |
-
function ad(aq,ap){var ao=new P(aq,ap);I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
28 |
}}}var av=ae.findNodesByTagName(at,"embed");if(av&&av.length){return this.findMediaUrlInNode(av[0])}}},trim:function(ao){return a(ao)},isOrWasNodeInViewport:function(au){if(!au||!au.getBoundingClientRect||au.nodeType!==1){return true}var at=au.getBoundingClientRect();var ar=G.documentElement||{};var aq=at.top<0;if(aq&&au.offsetTop){aq=(au.offsetTop+at.height)>0}var ap=ar.clientWidth;if(S.innerWidth&&ap>S.innerWidth){ap=S.innerWidth}var ao=ar.clientHeight;if(S.innerHeight&&ao>S.innerHeight){ao=S.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left<ap&&((at.top<ao)||aq))},isNodeVisible:function(ap){var ao=i(ap);var aq=this.isOrWasNodeInViewport(ap);return ao&&aq},buildInteractionRequestParams:function(ao,ap,aq,ar){var at="";if(ao){at+="c_i="+s(ao)}if(ap){if(at){at+="&"}at+="c_n="+s(ap)}if(aq){if(at){at+="&"}at+="c_p="+s(aq)}if(ar){if(at){at+="&"}at+="c_t="+s(ar)}if(at){at+="&ca=1"}return at},buildImpressionRequestParams:function(ao,ap,aq){var ar="c_n="+s(ao)+"&c_p="+s(ap);if(aq){ar+="&c_t="+s(aq)
|
29 |
}if(ar){ar+="&ca=1"}return ar},buildContentBlock:function(aq){if(!aq){return}var ao=this.findContentName(aq);var ap=this.findContentPiece(aq);var ar=this.findContentTarget(aq);ao=this.trim(ao);ap=this.trim(ap);ar=this.trim(ar);return{name:ao||"Unknown",piece:ap||"Unknown",target:ar||""}},collectContent:function(ar){if(!ar||!ar.length){return[]}var aq=[];var ao,ap;for(ao=0;ao<ar.length;ao++){ap=this.buildContentBlock(ar[ao]);if(J(ap)){aq.push(ap)}}return aq},setLocation:function(ao){this.location=ao},getLocation:function(){var ao=this.location||S.location;if(!ao.origin){ao.origin=ao.protocol+"//"+ao.hostname+(ao.port?":"+ao.port:"")}return ao},toAbsoluteUrl:function(ap){if((!ap||String(ap)!==ap)&&ap!==""){return ap}if(""===ap){return this.getLocation().href}if(ap.search(/^\/\//)!==-1){return this.getLocation().protocol+ap}if(ap.search(/:\/\//)!==-1){return ap}if(0===ap.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ap}if(0===ap.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ap
|
30 |
}if(0===ap.search("^[a-zA-Z]{2,11}:")){return ap}if(ap.search(/^\//)!==-1){return this.getLocation().origin+ap}var ao="(.*/)";var aq=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ao))[0];return aq+ap},isUrlToCurrentDomain:function(ap){var aq=this.toAbsoluteUrl(ap);if(!aq){return false}var ao=this.getLocation().origin;if(ao===aq){return true}if(0===String(aq).indexOf(ao)){if(":"===String(aq).substr(ao.length,1)){return false}return true}return false},setHrefAttribute:function(ap,ao){if(!ap||!ao){return}ae.setAnyAttribute(ap,"href",ao)},shouldIgnoreInteraction:function(ao){if(ae.hasNodeAttribute(ao,this.CONTENT_IGNOREINTERACTION_ATTR)){return true}if(ae.hasNodeCssClass(ao,this.CONTENT_IGNOREINTERACTION_CLASS)){return true}if(ae.hasNodeCssClass(ao,this.LEGACY_CONTENT_IGNOREINTERACTION_CLASS)){return true}return false}};function W(ap,at){if(at){return at}ap=v.toAbsoluteUrl(ap);if(z(ap,"?")){var ar=ap.indexOf("?");ap=ap.slice(0,ar)}if(Q(ap,"matomo.php")){ap=f(ap,"matomo.php".length)
|
31 |
+
}else{if(Q(ap,"piwik.php")){ap=f(ap,"piwik.php".length)}else{if(Q(ap,".php")){var ao=ap.lastIndexOf("/");var aq=1;ap=ap.slice(0,ao+aq)}}}if(Q(ap,"/js/")){ap=f(ap,"js/".length)}return ap}function N(av){var ax="Matomo_Overlay";var ap=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=[^&]*)?");var aq=ap.exec(G.referrer);if(aq){var at=aq[1];if(at!==String(av)){return false}var au=aq[2],ao=aq[3],ar=aq[4];if(!ar){ar=""}else{if(ar.indexOf("&segment=")===0){ar=ar.substr("&segment=".length)}}S.name=ax+"###"+au+"###"+ao+"###"+ar}var aw=S.name.split("###");return aw.length===4&&aw[0]===ax}function Z(ap,av,aq){var au=S.name.split("###"),at=au[1],ao=au[2],ar=au[3],aw=W(ap,av);n(aw+"plugins/Overlay/client/client.js?v=1",function(){Matomo_Overlay_Client.initialize(aw,aq,at,ao,ar)})}function u(){var aq;try{aq=S.frameElement}catch(ap){return true}if(J(aq)){return(aq&&String(aq.nodeName).toLowerCase()==="iframe")?true:false}try{return S.self!==S.top
|
32 |
+
}catch(ao){return true}}function P(ce,ca){var bK=this,be="mtm_consent",cE="mtm_cookie_consent",cN="mtm_consent_removed",b5=aa(G.domain,S.location.href,K()),cV=L(b5[0]),bO=o(b5[1]),bp=o(b5[2]),cT=false,ci="GET",db=ci,aI="application/x-www-form-urlencoded; charset=UTF-8",cx=aI,aE=ce||"",bJ="",c1="",b7=ca||"",bA="",bP="",a5,bk="",c8=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","rtf","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ay=[cV],bB=[],bM=[],a9=[],bL=500,cY=true,cK,a6,bS,bQ,ao,cp=["pk_campaign","mtm_campaign","piwik_campaign","matomo_campaign","utm_campaign","utm_source","utm_medium"],bI=["pk_kwd","mtm_kwd","piwik_kwd","matomo_kwd","utm_term"],bl="_pk_",av="pk_vid",a0=180,cZ,br,bT=false,aJ="Lax",bn=false,cR,bf,bx,cL=33955200000,cn=1800000,c7=15768000000,a3=true,bG=false,bi=false,bR=false,aR=false,cc,bX={},cm={},bo={},bv=200,ct={},c2={},c9={},cb=[],cf=false,cC=false,ap=false,da=false,cO=false,aO=false,bd=u(),cy=null,c0=null,aS,bD,b8=am,bq,aM,bC=false,cq=0,bw=["id","ses","cvar","ref"],cB=false,bE=null,cM=[],cs=[],ax=T++,aw=false;
|
33 |
+
try{bk=G.title}catch(cz){bk=""}function aD(dm){if(bn){return 0}var dk=new RegExp("(^|;)[ ]*"+dm+"=([^;]*)"),dl=dk.exec(G.cookie);return dl?R(dl[2]):0}bE=!aD(cN);function df(dp,dq,dt,ds,dm,dn,dr){if(bn&&dp!==cN){return}var dl;if(dt){dl=new Date();dl.setTime(dl.getTime()+dt)}if(!dr){dr="Lax"}G.cookie=dp+"="+s(dq)+(dt?";expires="+dl.toGMTString():"")+";path="+(ds||"/")+(dm?";domain="+dm:"")+(dn?";secure":"")+";SameSite="+dr;if((!dt||dt>=0)&&aD(dp)!==dq){var dk="There was an error setting cookie `"+dp+"`. Please check domain and path.";ak(dk)}}function b3(dk){var dl;dk=j(dk,av);if(bQ){dl=new RegExp("#.*");return dk.replace(dl,"")}return dk}function bW(dm,dk){var dn=r(dk),dl;if(dn){return dk}if(dk.slice(0,1)==="/"){return r(dm)+"://"+d(dm)+dk}dm=b3(dm);dl=dm.indexOf("?");if(dl>=0){dm=dm.slice(0,dl)}dl=dm.lastIndexOf("/");if(dl!==dm.length-1){dm=dm.slice(0,dl+1)}return dm+dk}function cI(dm,dk){var dl;dm=String(dm).toLowerCase();dk=String(dk).toLowerCase();if(dm===dk){return true}if(dk.slice(0,1)==="."){if(dm===dk.slice(1)){return true
|
34 |
+
}dl=dm.length-dk.length;if((dl>0)&&(dm.slice(dl)===dk)){return true}}return false}function cl(dk){var dl=document.createElement("a");if(dk.indexOf("//")!==0&&dk.indexOf("http")!==0){if(dk.indexOf("*")===0){dk=dk.substr(1)}if(dk.indexOf(".")===0){dk=dk.substr(1)}dk="http://"+dk}dl.href=v.toAbsoluteUrl(dk);if(dl.pathname){return dl.pathname}return""}function a4(dl,dk){if(!aj(dk,"/")){dk="/"+dk}if(!aj(dl,"/")){dl="/"+dl}var dm=(dk==="/"||dk==="/*");if(dm){return true}if(dl===dk){return true}dk=String(dk).toLowerCase();dl=String(dl).toLowerCase();if(Q(dk,"*")){dk=dk.slice(0,-1);dm=(!dk||dk==="/");if(dm){return true}if(dl===dk){return true}return dl.indexOf(dk)===0}if(!Q(dl,"/")){dl+="/"}if(!Q(dk,"/")){dk+="/"}return dl.indexOf(dk)===0}function ar(dp,dr){var dl,dk,dm,dn,dq;for(dl=0;dl<ay.length;dl++){dn=L(ay[dl]);dq=cl(ay[dl]);if(cI(dp,dn)&&a4(dr,dq)){return true}}return false}function aW(dn){var dl,dk,dm;for(dl=0;dl<ay.length;dl++){dk=L(ay[dl].toLowerCase());if(dn===dk){return true}if(dk.slice(0,1)==="."){if(dn===dk.slice(1)){return true
|
35 |
+
}dm=dn.length-dk.length;if((dm>0)&&(dn.slice(dm)===dk)){return true}}}return false}function co(dk,dm){dk=dk.replace("send_image=0","send_image=1");var dl=new Image(1,1);dl.onload=function(){E=0;if(typeof dm==="function"){dm({request:dk,trackerUrl:aE,success:true})}};dl.onerror=function(){if(typeof dm==="function"){dm({request:dk,trackerUrl:aE,success:false})}};dl.src=aE+(aE.indexOf("?")<0?"?":"&")+dk}function cF(dk){if(db==="POST"){return true}return dk&&(dk.length>2000||dk.indexOf('{"requests"')===0)}function aL(){return"object"===typeof g&&"function"===typeof g.sendBeacon&&"function"===typeof Blob}function a7(dp,ds,dr){var dm=aL();if(!dm){return false}var dn={type:"application/x-www-form-urlencoded; charset=UTF-8"};var dt=false;var dl=aE;try{var dk=new Blob([dp],dn);if(dr&&!cF(dp)){dk=new Blob([],dn);dl=dl+(dl.indexOf("?")<0?"?":"&")+dp}dt=g.sendBeacon(dl,dk)}catch(dq){return false}if(dt&&typeof ds==="function"){ds({request:dp,trackerUrl:aE,success:true,isSendBeacon:true})}return dt}function c6(dl,dm,dk){if(!J(dk)||null===dk){dk=true
|
36 |
+
}if(l&&a7(dl,dm,dk)){return}setTimeout(function(){if(l&&a7(dl,dm,dk)){return}var dq;try{var dp=S.XMLHttpRequest?new S.XMLHttpRequest():S.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;dp.open("POST",aE,true);dp.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dr=l&&a7(dl,dm,dk);if(!dr&&dk){co(dl,dm)}else{if(typeof dm==="function"){dm({request:dl,trackerUrl:aE,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dm==="function")){dm({request:dl,trackerUrl:aE,success:true,xhr:this})}}};dp.setRequestHeader("Content-Type",cx);dp.withCredentials=true;dp.send(dl)}catch(dn){dq=l&&a7(dl,dm,dk);if(!dq&&dk){co(dl,dm)}else{if(typeof dm==="function"){dm({request:dl,trackerUrl:aE,success:false})}}}},50)}function cg(dl){var dk=new Date();var dm=dk.getTime()+dl;if(!q||dm>q){q=dm}}function bb(){bd=true;cy=new Date().getTime()}function de(){var dk=new Date().getTime();return !cy||(dk-cy)>a6}function az(){if(de()){bS()}}function dh(){if(aO||!a6){return
|
37 |
+
}aO=true;an(S,"focus",bb);an(S,"blur",az);ab++;t.addPlugin("HeartBeat"+ab,{unload:function(){if(aO&&de()){bS()}}})}function cD(dp){var dl=new Date();var dk=dl.getTime();c0=dk;if(cC&&dk<cC){var dm=cC-dk;setTimeout(dp,dm);cg(dm+50);cC+=50;return}if(cC===false){var dn=800;cC=dk+dn}dp()}function aP(){if(aD(cN)){bE=false}else{if(aD(be)){bE=true}}}function bH(dl,dk,dm){aP();if(!bE){cM.push(dl);return}aw=true;if(!cR&&dl){if(cB&&bE){dl+="&consent=1"}cD(function(){if(cY&&a7(dl,dm,true)){cg(100);return}if(cF(dl)){c6(dl,dm)}else{co(dl,dm)}cg(dk)})}if(!aO){dh()}}function ck(dk){if(cR){return false}return(dk&&dk.length)}function c5(dk,dp){if(!dp||dp>=dk.length){return[dk]}var dl=0;var dm=dk.length;var dn=[];for(dl;dl<dm;dl+=dp){dn.push(dk.slice(dl,dl+dp))}return dn}function dg(dl,dk){if(!ck(dl)){return}if(!bE){cM.push(dl);return}aw=true;cD(function(){var dp=c5(dl,50);var dm=0,dn;for(dm;dm<dp.length;dm++){dn='{"requests":["?'+dp[dm].join('","?')+'"],"send_image":0}';if(cY&&a7(dn,null,false)){cg(100)}else{c6(dn,null,false)
|
38 |
+
}}cg(dk)})}function aU(dk){return bl+dk+"."+b7+"."+bq}function bZ(dm,dl,dk){df(dm,"",-86400,dl,dk)}function b6(){if(bn){return"0"}if(!J(S.showModalDialog)&&J(g.cookieEnabled)){return g.cookieEnabled?"1":"0"}var dk=bl+"testcookie";df(dk,"1",undefined,br,cZ,bT,aJ);var dl=aD(dk)==="1"?"1":"0";bZ(dk);return dl}function bj(){bq=b8((cZ||cV)+(br||"/")).slice(0,4)}function cJ(){if(J(c9.res)){return c9}var dl,dn,dp={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",fla:"application/x-shockwave-flash",java:"application/x-java-vm",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(g.userAgent))){if(g.mimeTypes&&g.mimeTypes.length){for(dl in dp){if(Object.prototype.hasOwnProperty.call(dp,dl)){dn=g.mimeTypes[dp[dl]];c9[dl]=(dn&&dn.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(g.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&J(g.javaEnabled)&&g.javaEnabled()){c9.java="1"}if(!J(S.showModalDialog)&&J(g.cookieEnabled)){c9.cookie=g.cookieEnabled?"1":"0"
|
39 |
+
}else{c9.cookie=b6()}}var dm=parseInt(X.width,10);var dk=parseInt(X.height,10);c9.res=parseInt(dm,10)+"x"+parseInt(dk,10);return c9}function bY(){var dl=aU("cvar"),dk=aD(dl);if(dk&&dk.length){dk=S.JSON.parse(dk);if(V(dk)){return dk}}return{}}function cG(){if(aR===false){aR=bY()}}function cS(){var dk=cJ();return b8((g.userAgent||"")+(g.platform||"")+S.JSON.stringify(dk)+(new Date()).getTime()+Math.random()).slice(0,16)}function aB(){var dk=cJ();return b8((g.userAgent||"")+(g.platform||"")+S.JSON.stringify(dk)).slice(0,6)}function bg(){return Math.floor((new Date()).getTime()/1000)}function aK(){var dl=bg();var dm=aB();var dk=String(dl)+dm;return dk}function c4(dm){dm=String(dm);var dq=aB();var dn=dq.length;var dp=dm.substr(-1*dn,dn);var dl=parseInt(dm.substr(0,dm.length-dn),10);if(dl&&dp&&dp===dq){var dk=bg();if(a0<=0){return true}if(dk>=dl&&dk<=(dl+a0)){return true}}return false}function di(dk){if(!cO){return""}var dp=e(dk,av);if(!dp){return""}dp=String(dp);var dm=new RegExp("^[a-zA-Z0-9]+$");
|
40 |
+
if(dp.length===32&&dm.test(dp)){var dl=dp.substr(16,32);if(c4(dl)){var dn=dp.substr(0,16);return dn}}return""}function cP(){if(!bP){bP=di(bO)}var dm=new Date(),dk=Math.round(dm.getTime()/1000),dl=aU("id"),dq=aD(dl),dp,dn;if(dq){dp=dq.split(".");dp.unshift("0");if(bP.length){dp[1]=bP}return dp}if(bP.length){dn=bP}else{if("0"===b6()){dn=""}else{dn=cS()}}dp=["1",dn,dk];return dp}function aZ(){var dn=cP(),dl=dn[0],dm=dn[1],dk=dn[2];return{newVisitor:dl,uuid:dm,createTs:dk}}function aH(){var dn=new Date(),dl=dn.getTime(),dp=aZ().createTs;var dk=parseInt(dp,10);var dm=(dk*1000)+cL-dl;return dm}function aN(dk){if(!b7){return}var dm=new Date(),dl=Math.round(dm.getTime()/1000);if(!J(dk)){dk=aZ()}var dn=dk.uuid+"."+dk.createTs+".";df(aU("id"),dn,aH(),br,cZ,bT,aJ)}function bN(){var dk=aD(aU("ref"));if(dk.length){try{dk=S.JSON.parse(dk);if(V(dk)){return dk}}catch(dl){}}return["","",0,""]}function by(dm){var dl=bl+"testcookie_domain";var dk="testvalue";df(dl,dk,10000,null,dm,bT,aJ);if(aD(dl)===dk){bZ(dl,null,dm);
|
41 |
+
return true}return false}function aF(){var dl=bn;bn=false;var dk,dm;for(dk=0;dk<bw.length;dk++){dm=aU(bw[dk]);if(dm!==cN&&dm!==be&&0!==aD(dm)){bZ(dm,br,cZ)}}bn=dl}function b4(dk){b7=dk}function dj(dp){if(!dp||!V(dp)){return}var dn=[];var dm;for(dm in dp){if(Object.prototype.hasOwnProperty.call(dp,dm)){dn.push(dm)}}var dq={};dn.sort();var dk=dn.length;var dl;for(dl=0;dl<dk;dl++){dq[dn[dl]]=dp[dn[dl]]}return dq}function cd(){df(aU("ses"),"1",cn,br,cZ,bT,aJ)}function bh(){var dn="";var dl="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var dm=dl.length;var dk;for(dk=0;dk<6;dk++){dn+=dl.charAt(Math.floor(Math.random()*dm))}return dn}function aA(dl){if(!h){return dl}var dm=(typeof h.timing==="object")&&h.timing?h.timing:undefined;if(!dm){dm=(typeof h.getEntriesByType==="function")&&h.getEntriesByType("navigation")?h.getEntriesByType("navigation")[0]:undefined}if(!dm){return dl}var dk="";if(dm.connectEnd&&dm.fetchStart){if(dm.connectEnd<dm.fetchStart){return}dk+="&pf_net="+Math.round(dm.connectEnd-dm.fetchStart)
|
42 |
+
}if(dm.responseStart&&dm.requestStart){if(dm.responseStart<dm.requestStart){return}dk+="&pf_srv="+Math.round(dm.responseStart-dm.requestStart)}if(dm.responseStart&&dm.responseEnd){if(dm.responseEnd<dm.responseStart){return}dk+="&pf_tfr="+Math.round(dm.responseEnd-dm.responseStart)}if(J(dm.domLoading)){if(dm.domInteractive&&dm.domLoading){if(dm.domInteractive<dm.domLoading){return}dk+="&pf_dm1="+Math.round(dm.domInteractive-dm.domLoading)}}else{if(dm.domInteractive&&dm.responseEnd){if(dm.domInteractive<dm.responseEnd){return}dk+="&pf_dm1="+Math.round(dm.domInteractive-dm.responseEnd)}}if(dm.domComplete&&dm.domInteractive){if(dm.domComplete<dm.domInteractive){return}dk+="&pf_dm2="+Math.round(dm.domComplete-dm.domInteractive)}if(dm.loadEventEnd&&dm.loadEventStart){if(dm.loadEventEnd<dm.loadEventStart){return}dk+="&pf_onl="+Math.round(dm.loadEventEnd-dm.loadEventStart)}return dl+dk}function cr(dm,dH,dI){var dG,dl=new Date(),du=Math.round(dl.getTime()/1000),dr,dE,dn=1024,dN,dv,dD=aR,dp=aU("ses"),dB=aU("ref"),dy=aU("cvar"),dz=aD(dp),dF=bN(),dJ=a5||bO,ds,dk;
|
43 |
+
if(bn){aF()}if(cR){return""}var dA=aZ();var dx=G.characterSet||G.charset;if(!dx||dx.toLowerCase()==="utf-8"){dx=null}ds=dF[0];dk=dF[1];dr=dF[2];dE=dF[3];if(!dz){if(!bx||!ds.length){for(dG in cp){if(Object.prototype.hasOwnProperty.call(cp,dG)){ds=e(dJ,cp[dG]);if(ds.length){break}}}for(dG in bI){if(Object.prototype.hasOwnProperty.call(bI,dG)){dk=e(dJ,bI[dG]);if(dk.length){break}}}}dN=d(bp);dv=dE.length?d(dE):"";if(dN.length&&!aW(dN)&&(!bx||!dv.length||aW(dv))){dE=bp}if(dE.length||ds.length){dr=du;dF=[ds,dk,dr,b3(dE.slice(0,dn))];df(dB,S.JSON.stringify(dF),c7,br,cZ,bT,aJ)}}dm+="&idsite="+b7+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+dl.getHours()+"&m="+dl.getMinutes()+"&s="+dl.getSeconds()+"&url="+s(b3(dJ))+(bp.length?"&urlref="+s(b3(bp)):"")+(Y(bA)?"&uid="+s(bA):"")+"&_id="+dA.uuid+"&_idn="+dA.newVisitor+(ds.length?"&_rcn="+s(ds):"")+(dk.length?"&_rck="+s(dk):"")+"&_refts="+dr+(String(dE).length?"&_ref="+s(b3(dE.slice(0,dn))):"")+(dx?"&cs="+s(dx):"")+"&send_image=0";var dM=cJ();for(dG in dM){if(Object.prototype.hasOwnProperty.call(dM,dG)){dm+="&"+dG+"="+dM[dG]
|
44 |
+
}}var dL=[];if(dH){for(dG in dH){if(Object.prototype.hasOwnProperty.call(dH,dG)&&/^dimension\d+$/.test(dG)){var dq=dG.replace("dimension","");dL.push(parseInt(dq,10));dL.push(String(dq));dm+="&"+dG+"="+s(dH[dG]);delete dH[dG]}}}if(dH&&B(dH)){dH=null}for(dG in ct){if(Object.prototype.hasOwnProperty.call(ct,dG)){dm+="&"+dG+"="+s(ct[dG])}}for(dG in bo){if(Object.prototype.hasOwnProperty.call(bo,dG)){var dw=(-1===M(dL,dG));if(dw){dm+="&dimension"+dG+"="+s(bo[dG])}}}if(dH){dm+="&data="+s(S.JSON.stringify(dH))}else{if(ao){dm+="&data="+s(S.JSON.stringify(ao))}}function dt(dO,dP){var dQ=S.JSON.stringify(dO);if(dQ.length>2){return"&"+dP+"="+s(dQ)}return""}var dK=dj(bX);var dC=dj(cm);dm+=dt(dK,"cvar");dm+=dt(dC,"e_cvar");if(aR){dm+=dt(aR,"_cvar");for(dG in dD){if(Object.prototype.hasOwnProperty.call(dD,dG)){if(aR[dG][0]===""||aR[dG][1]===""){delete aR[dG]}}}if(bR){df(dy,S.JSON.stringify(aR),cn,br,cZ,bT,aJ)}}if(a3&&bG&&!bi){dm=aA(dm);bi=true}if(aM){dm+="&pv_id="+aM}aN(dA);cd();dm+=ac(dI,{tracker:bK,request:dm});
|
45 |
+
if(c1.length){dm+="&"+c1}if(A(cc)){dm=cc(dm)}return dm}bS=function a8(){var dk=new Date();dk=dk.getTime();if(!c0){return false}if(c0+a6<=dk){bK.ping();return true}return false};function bs(dn,dm,ds,dp,dk,dv){var dr="idgoal=0",dl=new Date(),dt=[],du,dq=String(dn).length;if(dq){dr+="&ec_id="+s(dn)}dr+="&revenue="+dm;if(String(ds).length){dr+="&ec_st="+ds}if(String(dp).length){dr+="&ec_tx="+dp}if(String(dk).length){dr+="&ec_sh="+dk}if(String(dv).length){dr+="&ec_dt="+dv}if(c2){for(du in c2){if(Object.prototype.hasOwnProperty.call(c2,du)){if(!J(c2[du][1])){c2[du][1]=""}if(!J(c2[du][2])){c2[du][2]=""}if(!J(c2[du][3])||String(c2[du][3]).length===0){c2[du][3]=0}if(!J(c2[du][4])||String(c2[du][4]).length===0){c2[du][4]=1}dt.push(c2[du])}}dr+="&ec_items="+s(S.JSON.stringify(dt))}dr=cr(dr,ao,"ecommerce");bH(dr,bL);if(dq){c2={}}}function b0(dk,dp,dn,dm,dl,dq){if(String(dk).length&&J(dp)){bs(dk,dp,dn,dm,dl,dq)}}function bu(dk){if(J(dk)){bs("",dk,"","","","")}}function b1(dl,dn,dm){if(!bC){aM=bh()}var dk=cr("action_name="+s(al(dl||bk)),dn,"log");
|
46 |
+
if(a3&&!bi){dk=aA(dk)}bH(dk,bL,dm)}function a1(dm,dl){var dn,dk="(^| )(piwik[_-]"+dl+"|matomo[_-]"+dl;if(dm){for(dn=0;dn<dm.length;dn++){dk+="|"+dm[dn]}}dk+=")( |$)";return new RegExp(dk)}function aV(dk){return(aE&&dk&&0===String(dk).indexOf(aE))}function cv(dp,dk,dq,dl){if(aV(dk)){return 0}var dn=a1(bM,"download"),dm=a1(a9,"link"),dr=new RegExp("\\.("+c8.join("|")+")([?&#]|$)","i");if(dm.test(dp)){return"link"}if(dl||dn.test(dp)||dr.test(dk)){return"download"}if(dq){return 0}return"link"}function au(dl){var dk;dk=dl.parentNode;while(dk!==null&&J(dk)){if(ae.isLinkElement(dl)){break}dl=dk;dk=dl.parentNode}return dl}function dd(dq){dq=au(dq);if(!ae.hasNodeAttribute(dq,"href")){return}if(!J(dq.href)){return}var dp=ae.getAttributeValueFromNode(dq,"href");var dl=dq.pathname||cl(dq.href);var dr=dq.hostname||d(dq.href);var ds=dr.toLowerCase();var dm=dq.href.replace(dr,ds);var dn=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!dn.test(dm)){var dk=cv(dq.className,dm,ar(ds,dl),ae.hasNodeAttribute(dq,"download"));
|
47 |
+
if(dk){return{type:dk,href:dm}}}}function aQ(dk,dl,dm,dn){var dp=v.buildInteractionRequestParams(dk,dl,dm,dn);if(!dp){return}return cr(dp,null,"contentInteraction")}function bc(dk,dl){if(!dk||!dl){return false}var dm=v.findTargetNode(dk);if(v.shouldIgnoreInteraction(dm)){return false}dm=v.findTargetNodeNoDefault(dk);if(dm&&!U(dm,dl)){return false}return true}function cu(dm,dl,dp){if(!dm){return}var dk=v.findParentContentNode(dm);if(!dk){return}if(!bc(dk,dm)){return}var dn=v.buildContentBlock(dk);if(!dn){return}if(!dn.target&&dp){dn.target=dp}return v.buildInteractionRequestParams(dl,dn.name,dn.piece,dn.target)}function aX(dl){if(!cb||!cb.length){return false}var dk,dm;for(dk=0;dk<cb.length;dk++){dm=cb[dk];if(dm&&dm.name===dl.name&&dm.piece===dl.piece&&dm.target===dl.target){return true}}return false}function aY(dk){return function(dp){if(!dk){return}var dm=v.findParentContentNode(dk);var dl;if(dp){dl=dp.target||dp.srcElement}if(!dl){dl=dk}if(!bc(dm,dl)){return}if(!dm){return false}var dq=v.findTargetNode(dm);
|
48 |
+
if(!dq||v.shouldIgnoreInteraction(dq)){return false}var dn=dd(dq);if(da&&dn&&dn.type){return dn.type}return bK.trackContentInteractionNode(dl,"click")}}function b2(dm){if(!dm||!dm.length){return}var dk,dl;for(dk=0;dk<dm.length;dk++){dl=v.findTargetNode(dm[dk]);if(dl&&!dl.contentInteractionTrackingSetupDone){dl.contentInteractionTrackingSetupDone=true;an(dl,"click",aY(dl))}}}function bz(dm,dn){if(!dm||!dm.length){return[]}var dk,dl;for(dk=0;dk<dm.length;dk++){if(aX(dm[dk])){dm.splice(dk,1);dk--}else{cb.push(dm[dk])}}if(!dm||!dm.length){return[]}b2(dn);var dp=[];for(dk=0;dk<dm.length;dk++){dl=cr(v.buildImpressionRequestParams(dm[dk].name,dm[dk].piece,dm[dk].target),undefined,"contentImpressions");if(dl){dp.push(dl)}}return dp}function cA(dl){var dk=v.collectContent(dl);return bz(dk,dl)}function ba(dl){if(!dl||!dl.length){return[]}var dk;for(dk=0;dk<dl.length;dk++){if(!v.isNodeVisible(dl[dk])){dl.splice(dk,1);dk--}}if(!dl||!dl.length){return[]}return cA(dl)}function aG(dm,dk,dl){var dn=v.buildImpressionRequestParams(dm,dk,dl);
|
49 |
+
return cr(dn,null,"contentImpression")}function dc(dn,dl){if(!dn){return}var dk=v.findParentContentNode(dn);var dm=v.buildContentBlock(dk);if(!dm){return}if(!dl){dl="Unknown"}return aQ(dl,dm.name,dm.piece,dm.target)}function cQ(dl,dn,dk,dm){return"e_c="+s(dl)+"&e_a="+s(dn)+(J(dk)?"&e_n="+s(dk):"")+(J(dm)?"&e_v="+s(dm):"")+"&ca=1"}function at(dm,dp,dk,dn,dr,dq){if(!Y(dm)||!Y(dp)){ak("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");return false}var dl=cr(cQ(dm,dp,dk,dn),dr,"event");bH(dl,bL,dq)}function b9(dk,dn,dl,dp){var dm=cr("search="+s(dk)+(dn?"&search_cat="+s(dn):"")+(J(dl)?"&search_count="+dl:""),dp,"sitesearch");bH(dm,bL)}function cU(dk,dp,dn,dm){var dl=cr("idgoal="+dk+(dp?"&revenue="+dp:""),dn,"goal");bH(dl,bL,dm)}function c3(dn,dk,ds,dr,dm){var dq=dk+"="+s(b3(dn));var dl=cu(dm,"click",dn);if(dl){dq+="&"+dl}var dp=cr(dq,ds,"link");bH(dp,bL,dr)}function bV(dl,dk){if(dl!==""){return dl+dk.charAt(0).toUpperCase()+dk.slice(1)
|
50 |
+
}return dk}function ch(dq){var dp,dk,dn=["","webkit","ms","moz"],dm;if(!bf){for(dk=0;dk<dn.length;dk++){dm=dn[dk];if(Object.prototype.hasOwnProperty.call(G,bV(dm,"hidden"))){if(G[bV(dm,"visibilityState")]==="prerender"){dp=true}break}}}if(dp){an(G,dm+"visibilitychange",function dl(){G.removeEventListener(dm+"visibilitychange",dl,false);dq()});return}dq()}function bt(){var dl=bK.getVisitorId();var dk=aK();return dl+dk}function cj(dk){if(!dk){return}if(!ae.hasNodeAttribute(dk,"href")){return}var dl=ae.getAttributeValueFromNode(dk,"href");if(!dl||aV(dl)){return}if(!bK.getVisitorId()){return}dl=j(dl,av);var dm=bt();dl=F(dl,av,dm);ae.setAnyAttribute(dk,"href",dl)}function bm(dn){var dp=ae.getAttributeValueFromNode(dn,"href");if(!dp){return false}dp=String(dp);var dl=dp.indexOf("//")===0||dp.indexOf("http://")===0||dp.indexOf("https://")===0;if(!dl){return false}var dk=dn.pathname||cl(dn.href);var dm=(dn.hostname||d(dn.href)).toLowerCase();if(ar(dm,dk)){if(!cI(cV,L(dm))){return true}return false
|
51 |
+
}return false}function cH(dk){var dl=dd(dk);if(dl&&dl.type){dl.href=o(dl.href);c3(dl.href,dl.type,undefined,null,dk);return}if(cO){dk=au(dk);if(bm(dk)){cj(dk)}}}function cw(){return G.all&&!G.addEventListener}function cW(dk){var dm=dk.which;var dl=(typeof dk.button);if(!dm&&dl!=="undefined"){if(cw()){if(dk.button&1){dm=1}else{if(dk.button&2){dm=3}else{if(dk.button&4){dm=2}}}}else{if(dk.button===0||dk.button==="0"){dm=1}else{if(dk.button&1){dm=2}else{if(dk.button&2){dm=3}}}}}return dm}function bU(dk){switch(cW(dk)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function a2(dk){return dk.target||dk.srcElement}function cX(dk){return dk==="A"||dk==="AREA"}function aC(dk){function dl(dn){var dp=a2(dn);var dq=dp.nodeName;var dm=a1(bB,"ignore");while(!cX(dq)&&dp&&dp.parentNode){dp=dp.parentNode;dq=dp.nodeName}if(dp&&cX(dq)&&!dm.test(dp.className)){return dp}}return function(dp){dp=dp||S.event;var dq=dl(dp);if(!dq){return}var dn=bU(dp);if(dp.type==="click"){var dm=false;if(dk&&dn==="middle"){dm=true
|
52 |
+
}if(dq&&!dm){cH(dq)}}else{if(dp.type==="mousedown"){if(dn==="middle"&&dq){aS=dn;bD=dq}else{aS=bD=null}}else{if(dp.type==="mouseup"){if(dn===aS&&dq===bD){cH(dq)}aS=bD=null}else{if(dp.type==="contextmenu"){cH(dq)}}}}}}function aq(dn,dm,dk){var dl=typeof dm;if(dl==="undefined"){dm=true}an(dn,"click",aC(dm),dk);if(dm){an(dn,"mouseup",aC(dm),dk);an(dn,"mousedown",aC(dm),dk);an(dn,"contextmenu",aC(dm),dk)}}function aT(dl,dp,dq){if(cf){return true}cf=true;var dr=false;var dn,dm;function dk(){dr=true}m(function(){function ds(du){setTimeout(function(){if(!cf){return}dr=false;dq.trackVisibleContentImpressions();ds(du)},du)}function dt(du){setTimeout(function(){if(!cf){return}if(dr){dr=false;dq.trackVisibleContentImpressions()}dt(du)},du)}if(dl){dn=["scroll","resize"];for(dm=0;dm<dn.length;dm++){if(G.addEventListener){G.addEventListener(dn[dm],dk,false)}else{S.attachEvent("on"+dn[dm],dk)}}dt(100)}if(dp&&dp>0){dp=parseInt(dp,10);ds(dp)}})}var bF={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dk=this.requests;
|
53 |
+
this.requests=[];if(dk.length===1){bH(dk[0],bL)}else{dg(dk,bL)}},canQueue:function(){return !l&&this.enabled},pushMultiple:function(dl){if(!this.canQueue()){dg(dl,bL);return}var dk;for(dk=0;dk<dl.length;dk++){this.push(dl[dk])}},push:function(dk){if(!dk){return}if(!this.canQueue()){bH(dk,bL);return}bF.requests.push(dk);if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.timeout=setTimeout(function(){bF.timeout=null;bF.sendRequests()},bF.interval);var dl="RequestQueue"+ax;if(!Object.prototype.hasOwnProperty.call(b,dl)){b[dl]={unload:function(){if(bF.timeout){clearTimeout(bF.timeout)}bF.sendRequests()}}}}};bj();aN();this.hasConsent=function(){return bE};this.getVisitorId=function(){return aZ().uuid};this.getVisitorInfo=function(){return cP()};this.getAttributionInfo=function(){return bN()};this.getAttributionCampaignName=function(){return bN()[0]};this.getAttributionCampaignKeyword=function(){return bN()[1]};this.getAttributionReferrerTimestamp=function(){return bN()[2]};this.getAttributionReferrerUrl=function(){return bN()[3]
|
54 |
+
};this.setTrackerUrl=function(dk){aE=dk};this.getTrackerUrl=function(){return aE};this.getMatomoUrl=function(){return W(this.getTrackerUrl(),bJ)};this.getPiwikUrl=function(){return this.getMatomoUrl()};this.addTracker=function(dm,dl){if(!J(dm)||null===dm){dm=this.getTrackerUrl()}var dk=new P(dm,dl);I.push(dk);t.trigger("TrackerAdded",[this]);return dk};this.getSiteId=function(){return b7};this.setSiteId=function(dk){b4(dk)};this.resetUserId=function(){bA=""};this.setUserId=function(dk){if(Y(dk)){bA=dk}};this.setVisitorId=function(dl){var dk=/[0-9A-Fa-f]{16}/g;if(w(dl)&&dk.test(dl)){bP=dl}else{ak("Invalid visitorId set"+dl)}};this.getUserId=function(){return bA};this.setCustomData=function(dk,dl){if(V(dk)){ao=dk}else{if(!ao){ao={}}ao[dk]=dl}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(dk){cc=dk};this.appendToTrackingUrl=function(dk){c1=dk};this.getRequest=function(dk){return cr(dk)};this.addPlugin=function(dk,dl){b[dk]=dl};this.setCustomDimension=function(dk,dl){dk=parseInt(dk,10);
|
55 |
+
if(dk>0){if(!J(dl)){dl=""}if(!w(dl)){dl=String(dl)}bo[dk]=dl}};this.getCustomDimension=function(dk){dk=parseInt(dk,10);if(dk>0&&Object.prototype.hasOwnProperty.call(bo,dk)){return bo[dk]}};this.deleteCustomDimension=function(dk){dk=parseInt(dk,10);if(dk>0){delete bo[dk]}};this.setCustomVariable=function(dl,dk,dp,dm){var dn;if(!J(dm)){dm="visit"}if(!J(dk)){return}if(!J(dp)){dp=""}if(dl>0){dk=!w(dk)?String(dk):dk;dp=!w(dp)?String(dp):dp;dn=[dk.slice(0,bv),dp.slice(0,bv)];if(dm==="visit"||dm===2){cG();aR[dl]=dn}else{if(dm==="page"||dm===3){bX[dl]=dn}else{if(dm==="event"){cm[dl]=dn}}}}};this.getCustomVariable=function(dl,dm){var dk;if(!J(dm)){dm="visit"}if(dm==="page"||dm===3){dk=bX[dl]}else{if(dm==="event"){dk=cm[dl]}else{if(dm==="visit"||dm===2){cG();dk=aR[dl]}}}if(!J(dk)||(dk&&dk[0]==="")){return false}return dk};this.deleteCustomVariable=function(dk,dl){if(this.getCustomVariable(dk,dl)){this.setCustomVariable(dk,"","",dl)}};this.deleteCustomVariables=function(dk){if(dk==="page"||dk===3){bX={}
|
56 |
+
}else{if(dk==="event"){cm={}}else{if(dk==="visit"||dk===2){aR={}}}}};this.storeCustomVariablesInCookie=function(){bR=true};this.setLinkTrackingTimer=function(dk){bL=dk};this.getLinkTrackingTimer=function(){return bL};this.setDownloadExtensions=function(dk){if(w(dk)){dk=dk.split("|")}c8=dk};this.addDownloadExtensions=function(dl){var dk;if(w(dl)){dl=dl.split("|")}for(dk=0;dk<dl.length;dk++){c8.push(dl[dk])}};this.removeDownloadExtensions=function(dm){var dl,dk=[];if(w(dm)){dm=dm.split("|")}for(dl=0;dl<c8.length;dl++){if(M(dm,c8[dl])===-1){dk.push(c8[dl])}}c8=dk};this.setDomains=function(dk){ay=w(dk)?[dk]:dk;var dp=false,dm=0,dl;for(dm;dm<ay.length;dm++){dl=String(ay[dm]);if(cI(cV,L(dl))){dp=true;break}var dn=cl(dl);if(dn&&dn!=="/"&&dn!=="/*"){dp=true;break}}if(!dp){ay.push(cV)}};this.enableCrossDomainLinking=function(){cO=true};this.disableCrossDomainLinking=function(){cO=false};this.isCrossDomainLinkingEnabled=function(){return cO};this.setCrossDomainLinkingTimeout=function(dk){a0=dk};this.getCrossDomainLinkingUrlParameter=function(){return s(av)+"="+s(bt())
|
57 |
+
};this.setIgnoreClasses=function(dk){bB=w(dk)?[dk]:dk};this.setRequestMethod=function(dk){if(dk){db=String(dk).toUpperCase()}else{db=ci}if(db==="GET"){this.disableAlwaysUseSendBeacon()}};this.setRequestContentType=function(dk){cx=dk||aI};this.setGenerationTimeMs=function(dk){ak("setGenerationTimeMs is no longer supported since Matomo 4. The call will be ignored. There is currently no replacement yet.")};this.setReferrerUrl=function(dk){bp=dk};this.setCustomUrl=function(dk){a5=bW(bO,dk)};this.getCurrentUrl=function(){return a5||bO};this.setDocumentTitle=function(dk){bk=dk};this.setPageViewId=function(dk){aM=dk;bC=true};this.setAPIUrl=function(dk){bJ=dk};this.setDownloadClasses=function(dk){bM=w(dk)?[dk]:dk};this.setLinkClasses=function(dk){a9=w(dk)?[dk]:dk};this.setCampaignNameKey=function(dk){cp=w(dk)?[dk]:dk};this.setCampaignKeywordKey=function(dk){bI=w(dk)?[dk]:dk};this.discardHashTag=function(dk){bQ=dk};this.setCookieNamePrefix=function(dk){bl=dk;if(aR){aR=bY()}};this.setCookieDomain=function(dk){var dl=L(dk);
|
58 |
+
if(!bn&&!by(dl)){ak("Can't write cookie on domain "+dk)}else{cZ=dl;bj()}};this.getCookieDomain=function(){return cZ};this.hasCookies=function(){return"1"===b6()};this.setSessionCookie=function(dm,dl,dk){if(!dm){throw new Error("Missing cookie name")}if(!J(dk)){dk=cn}bw.push(dm);df(aU(dm),dl,dk,br,cZ,bT,aJ)};this.getCookie=function(dl){var dk=aD(aU(dl));if(dk===0){return null}return dk};this.setCookiePath=function(dk){br=dk;bj()};this.getCookiePath=function(dk){return br};this.setVisitorCookieTimeout=function(dk){cL=dk*1000};this.setSessionCookieTimeout=function(dk){cn=dk*1000};this.getSessionCookieTimeout=function(){return cn};this.setReferralCookieTimeout=function(dk){c7=dk*1000};this.setConversionAttributionFirstReferrer=function(dk){bx=dk};this.setSecureCookie=function(dk){if(dk&&location.protocol!=="https:"){ak("Error in setSecureCookie: You cannot use `Secure` on http.");return}bT=dk};this.setCookieSameSite=function(dk){dk=String(dk);dk=dk.charAt(0).toUpperCase()+dk.toLowerCase().slice(1);
|
59 |
+
if(dk!=="None"&&dk!=="Lax"&&dk!=="Strict"){ak("Ignored value for sameSite. Please use either Lax, None, or Strict.");return}if(dk==="None"){if(location.protocol==="https:"){this.setSecureCookie(true)}else{ak("sameSite=None cannot be used on http, reverted to sameSite=Lax.");dk="Lax"}}aJ=dk};this.disableCookies=function(){bn=true;if(b7){aF()}};this.areCookiesEnabled=function(){return !bn};this.setCookieConsentGiven=function(){if(bn&&!cR){bn=false;if(b7&&aw){aN();var dk=cr("ping=1",null,"ping");bH(dk,bL)}}};this.requireCookieConsent=function(){if(this.getRememberedCookieConsent()){return false}this.disableCookies();return true};this.getRememberedCookieConsent=function(){return aD(cE)};this.forgetCookieConsentGiven=function(){bZ(cE,br,cZ);this.disableCookies()};this.rememberCookieConsentGiven=function(dl){if(dl){dl=dl*60*60*1000}else{dl=30*365*24*60*60*1000}this.setCookieConsentGiven();var dk=new Date().getTime();df(cE,dk,dl,br,cZ,bT,aJ)};this.deleteCookies=function(){aF()};this.setDoNotTrack=function(dl){var dk=g.doNotTrack||g.msDoNotTrack;
|
60 |
+
cR=dl&&(dk==="yes"||dk==="1");if(cR){this.disableCookies()}};this.alwaysUseSendBeacon=function(){cY=true};this.disableAlwaysUseSendBeacon=function(){cY=false};this.addListener=function(dl,dk){aq(dl,dk,false)};this.enableLinkTracking=function(dl){if(da){return}da=true;var dk=this;p(function(){ap=true;var dm=G.body;aq(dm,dl,true)})};this.enableJSErrorTracking=function(){if(cT){return}cT=true;var dk=S.onerror;S.onerror=function(dq,dn,dm,dp,dl){ch(function(){var dr="JavaScript Errors";var ds=dn+":"+dm;if(dp){ds+=":"+dp}if(M(cs,dr+ds+dq)===-1){cs.push(dr+ds+dq);at(dr,ds,dq)}});if(dk){return dk(dq,dn,dm,dp,dl)}return false}};this.disablePerformanceTracking=function(){a3=false};this.enableHeartBeatTimer=function(dk){dk=Math.max(dk||15,5);a6=dk*1000;if(c0!==null){dh()}};this.disableHeartBeatTimer=function(){if(a6||aO){if(S.removeEventListener){S.removeEventListener("focus",bb);S.removeEventListener("blur",az)}else{if(S.detachEvent){S.detachEvent("onfocus",bb);S.detachEvent("onblur",az)}}}a6=null;
|
61 |
+
aO=false};this.killFrame=function(){if(S.location!==S.top.location){S.top.location=S.location}};this.redirectFile=function(dk){if(S.location.protocol==="file:"){S.location=dk}};this.setCountPreRendered=function(dk){bf=dk};this.trackGoal=function(dk,dn,dm,dl){ch(function(){cU(dk,dn,dm,dl)})};this.trackLink=function(dl,dk,dn,dm){ch(function(){c3(dl,dk,dn,dm)})};this.getNumTrackedPageViews=function(){return cq};this.trackPageView=function(dk,dm,dl){cb=[];cM=[];cs=[];if(N(b7)){ch(function(){Z(aE,bJ,b7)})}else{ch(function(){cq++;b1(dk,dm,dl)})}};this.trackAllContentImpressions=function(){if(N(b7)){return}ch(function(){p(function(){var dk=v.findContentNodes();var dl=cA(dk);bF.pushMultiple(dl)})})};this.trackVisibleContentImpressions=function(dk,dl){if(N(b7)){return}if(!J(dk)){dk=true}if(!J(dl)){dl=750}aT(dk,dl,this);ch(function(){m(function(){var dm=v.findContentNodes();var dn=ba(dm);bF.pushMultiple(dn)})})};this.trackContentImpression=function(dm,dk,dl){if(N(b7)){return}dm=a(dm);dk=a(dk);dl=a(dl);
|
62 |
+
if(!dm){return}dk=dk||"Unknown";ch(function(){var dn=aG(dm,dk,dl);bF.push(dn)})};this.trackContentImpressionsWithinNode=function(dk){if(N(b7)||!dk){return}ch(function(){if(cf){m(function(){var dl=v.findContentNodesWithinNode(dk);var dm=ba(dl);bF.pushMultiple(dm)})}else{p(function(){var dl=v.findContentNodesWithinNode(dk);var dm=cA(dl);bF.pushMultiple(dm)})}})};this.trackContentInteraction=function(dm,dn,dk,dl){if(N(b7)){return}dm=a(dm);dn=a(dn);dk=a(dk);dl=a(dl);if(!dm||!dn){return}dk=dk||"Unknown";ch(function(){var dp=aQ(dm,dn,dk,dl);if(dp){bF.push(dp)}})};this.trackContentInteractionNode=function(dm,dl){if(N(b7)||!dm){return}var dk=null;ch(function(){dk=dc(dm,dl);if(dk){bF.push(dk)}});return dk};this.logAllContentBlocksOnPage=function(){var dm=v.findContentNodes();var dk=v.collectContent(dm);var dl=typeof console;if(dl!=="undefined"&&console&&console.log){console.log(dk)}};this.trackEvent=function(dl,dn,dk,dm,dq,dp){ch(function(){at(dl,dn,dk,dm,dq,dp)})};this.trackSiteSearch=function(dk,dm,dl,dn){cb=[];
|
63 |
+
ch(function(){b9(dk,dm,dl,dn)})};this.setEcommerceView=function(dp,dk,dm,dl){ct={};if(Y(dm)){dm=String(dm)}if(!J(dm)||dm===null||dm===false||!dm.length){dm=""}else{if(dm instanceof Array){dm=S.JSON.stringify(dm)}}var dn="_pkc";ct[dn]=dm;if(J(dl)&&dl!==null&&dl!==false&&String(dl).length){dn="_pkp";ct[dn]=dl}if(!Y(dp)&&!Y(dk)){return}if(Y(dp)){dn="_pks";ct[dn]=dp}if(!Y(dk)){dk=""}dn="_pkn";ct[dn]=dk};this.getEcommerceItems=function(){return JSON.parse(JSON.stringify(c2))};this.addEcommerceItem=function(dp,dk,dm,dl,dn){if(Y(dp)){c2[dp]=[String(dp),dk,dm,dl,dn]}};this.removeEcommerceItem=function(dk){if(Y(dk)){dk=String(dk);delete c2[dk]}};this.clearEcommerceCart=function(){c2={}};this.trackEcommerceOrder=function(dk,dp,dn,dm,dl,dq){b0(dk,dp,dn,dm,dl,dq)};this.trackEcommerceCartUpdate=function(dk){bu(dk)};this.trackRequest=function(dl,dn,dm,dk){ch(function(){var dp=cr(dl,dn,dk);bH(dp,bL,dm)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bF.enabled=false
|
64 |
+
};this.setRequestQueueInterval=function(dk){if(dk<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bF.interval=dk};this.queueRequest=function(dk){ch(function(){var dl=cr(dk);bF.push(dl)})};this.isConsentRequired=function(){return cB};this.getRememberedConsent=function(){var dk=aD(be);if(aD(cN)){if(dk){bZ(be,br,cZ)}return null}if(!dk||dk===0){return null}return dk};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()};this.requireConsent=function(){cB=true;bE=this.hasRememberedConsent();if(!bE){bn=true}x++;b["CoreConsent"+x]={unload:function(){if(!bE){aF()}}}};this.setConsentGiven=function(dl){bE=true;bZ(cN,br,cZ);var dm,dk;for(dm=0;dm<cM.length;dm++){dk=typeof cM[dm];if(dk==="string"){bH(cM[dm],bL)}else{if(dk==="object"){dg(cM[dm],bL)}}}cM=[];if(!J(dl)||dl){this.setCookieConsentGiven()}};this.rememberConsentGiven=function(dm){if(dm){dm=dm*60*60*1000}else{dm=30*365*24*60*60*1000}var dk=true;this.setConsentGiven(dk);var dl=new Date().getTime();
|
65 |
+
df(be,dl,dm,br,cZ,bT,aJ)};this.forgetConsentGiven=function(){var dk=30*365*24*60*60*1000;bZ(be,br,cZ);df(cN,new Date().getTime(),dk,br,cZ,bT,aJ);this.forgetCookieConsentGiven();this.requireConsent()};this.isUserOptedOut=function(){return !bE};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=function(){this.setConsentGiven(false)};m(function(){setTimeout(function(){bG=true},0)});t.trigger("TrackerSetup",[this])}function H(){return{push:af}}function c(au,at){var av={};var aq,ar;for(aq=0;aq<at.length;aq++){var ao=at[aq];av[ao]=1;for(ar=0;ar<au.length;ar++){if(au[ar]&&au[ar][0]){var ap=au[ar][0];if(ao===ap){af(au[ar]);delete au[ar];if(av[ap]>1&&ap!=="addTracker"&&ap!=="enableLinkTracking"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Matomo trackers documentation: https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","forgetCookieConsentGiven","requireCookieConsent","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking"];
|
66 |
+
function ad(aq,ap){var ao=new P(aq,ap);I.push(ao);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();t.trigger("TrackerAdded",[ao]);return ao}an(S,"beforeunload",ai,false);an(S,"online",function(){if(J(g.serviceWorker)){g.serviceWorker.ready.then(function(ao){if(ao&&ao.sync){return ao.sync.register("matomoSync")}},function(){})}},false);an(S,"message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){ap=d(at[ar].getMatomoUrl());if(ap===ax){aw=at[ar];break}}if(!aw){return}var aq=null;try{aq=JSON.parse(au.data)}catch(av){return}if(!aq){return}function ao(aA){var aC=G.getElementsByTagName("iframe");for(ar=0;ar<aC.length;ar++){var aB=aC[ar];var ay=d(aB.src);if(aB.contentWindow&&J(aB.contentWindow.postMessage)&&ay===ax){var az=JSON.stringify(aA);aB.contentWindow.postMessage(az,"*")}}}if(J(aq.maq_initial_value)){ao({maq_opted_in:aq.maq_initial_value&&aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})
|
67 |
}else{if(J(aq.maq_opted_in)){at=t.getAsyncTrackers();for(ar=0;ar<at.length;ar++){aw=at[ar];if(aq.maq_opted_in){aw.rememberConsentGiven()}else{aw.forgetConsentGiven()}}ao({maq_confirm_opted_in:aw.hasConsent(),maq_url:aw.getMatomoUrl(),maq_optout_by_default:aw.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;t={initialized:false,JSON:S.JSON,DOM:{addEventListener:function(ar,aq,ap,ao){var at=typeof ao;if(at==="undefined"){ao=false}an(ar,aq,ap,ao)},onLoad:m,onReady:p,isNodeVisible:i,isOrWasNodeVisible:v.isNodeVisible},on:function(ap,ao){if(!y[ap]){y[ap]=[]}y[ap].push(ao)},off:function(aq,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){if(y[aq][ao]===ap){y[aq].splice(ao,1)}}},trigger:function(aq,ar,ap){if(!y[aq]){return}var ao=0;for(ao;ao<y[aq].length;ao++){y[aq][ao].apply(ap||S,ar)}},addPlugin:function(ao,ap){b[ao]=ap},getTracker:function(ap,ao){if(!J(ao)){ao=this.getAsyncTracker().getSiteId()}if(!J(ap)){ap=this.getAsyncTracker().getTrackerUrl()
|
68 |
}return new P(ap,ao)},getAsyncTrackers:function(){return I},addTracker:function(aq,ap){var ao;if(!I.length){ao=ad(aq,ap)}else{ao=I[0].addTracker(aq,ap)}return ao},getAsyncTracker:function(at,ar){var aq;if(I&&I.length&&I[0]){aq=I[0]}else{return ad(at,ar)}if(!ar&&!at){return aq}if((!J(ar)||null===ar)&&aq){ar=aq.getSiteId()}if((!J(at)||null===at)&&aq){at=aq.getTrackerUrl()}var ap,ao=0;for(ao;ao<I.length;ao++){ap=I[ao];if(ap&&String(ap.getSiteId())===String(ar)&&ap.getTrackerUrl()===at){return ap}}},retryMissedPluginCalls:function(){var ap=ah;ah=[];var ao=0;for(ao;ao<ap.length;ao++){af(ap[ao])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return t});define("matomo",[],function(){return t})}return t}())}
|
69 |
/*!!! pluginTrackerHook */
|
app/plugins/API/Controller.php
CHANGED
@@ -195,7 +195,7 @@ class Controller extends \Piwik\Plugin\Controller
|
|
195 |
$item['letters'] = array();
|
196 |
foreach ($item['entries'] as &$entry) {
|
197 |
$cleanEntryName = preg_replace('/["\']/', '', $entry['name']);
|
198 |
-
$entry['letter'] =
|
199 |
$item['letters'][] = $entry['letter'];
|
200 |
}
|
201 |
|
195 |
$item['letters'] = array();
|
196 |
foreach ($item['entries'] as &$entry) {
|
197 |
$cleanEntryName = preg_replace('/["\']/', '', $entry['name']);
|
198 |
+
$entry['letter'] = mb_strtoupper(substr($cleanEntryName, 0, 1));
|
199 |
$item['letters'][] = $entry['letter'];
|
200 |
}
|
201 |
|
app/plugins/API/Filter/DataComparisonFilter.php
CHANGED
@@ -221,7 +221,7 @@ class DataComparisonFilter
|
|
221 |
$comparisonSeries[] = $compareMetadata['compareSeriesPretty'];
|
222 |
|
223 |
$compareTable = $this->requestReport($method, $modifiedParams);
|
224 |
-
$this->comparisonRowGenerator->compareTables($compareMetadata, $table, $compareTable);
|
225 |
}
|
226 |
|
227 |
// calculate changes (including processed metric changes)
|
221 |
$comparisonSeries[] = $compareMetadata['compareSeriesPretty'];
|
222 |
|
223 |
$compareTable = $this->requestReport($method, $modifiedParams);
|
224 |
+
$this->comparisonRowGenerator->compareTables($compareMetadata, $table, empty($compareTable) ? null : $compareTable);
|
225 |
}
|
226 |
|
227 |
// calculate changes (including processed metric changes)
|
app/plugins/API/Filter/DataComparisonFilter/ComparisonRowGenerator.php
CHANGED
@@ -51,7 +51,7 @@ class ComparisonRowGenerator
|
|
51 |
$isDatePeriod = $tables->getKeyName() == 'date';
|
52 |
|
53 |
foreach ($childTablesArray as $index => $childTable) {
|
54 |
-
$compareChildTable =
|
55 |
$this->compareTables($compareMetadata, $childTable, $compareChildTable);
|
56 |
}
|
57 |
|
@@ -82,7 +82,7 @@ class ComparisonRowGenerator
|
|
82 |
$tables->addTable($newTable, $periodLabel);
|
83 |
|
84 |
// compare with the empty table
|
85 |
-
$compareTable = $compareTablesArray[$i];
|
86 |
$this->compareTables($compareMetadata, $newTable, $compareTable);
|
87 |
}
|
88 |
}
|
51 |
$isDatePeriod = $tables->getKeyName() == 'date';
|
52 |
|
53 |
foreach ($childTablesArray as $index => $childTable) {
|
54 |
+
$compareChildTable = !empty($compareTablesArray[$index]) ? $compareTablesArray[$index] : null;
|
55 |
$this->compareTables($compareMetadata, $childTable, $compareChildTable);
|
56 |
}
|
57 |
|
82 |
$tables->addTable($newTable, $periodLabel);
|
83 |
|
84 |
// compare with the empty table
|
85 |
+
$compareTable = !empty($compareTablesArray[$i]) ? $compareTablesArray[$i] : null;
|
86 |
$this->compareTables($compareMetadata, $newTable, $compareTable);
|
87 |
}
|
88 |
}
|
app/plugins/Actions/Actions/ActionSiteSearch.php
CHANGED
@@ -137,14 +137,14 @@ class ActionSiteSearch extends Action
|
|
137 |
// strtolower the parameter names for smooth site search detection
|
138 |
$parameters = array();
|
139 |
foreach ($parametersRaw as $k => $v) {
|
140 |
-
$parameters[
|
141 |
}
|
142 |
// decode values if they were sent from a client using another charset
|
143 |
PageUrl::reencodeParameters($parameters, $pageEncoding);
|
144 |
|
145 |
// Detect Site Search keyword
|
146 |
foreach ($keywordParameters as $keywordParameterRaw) {
|
147 |
-
$keywordParameter =
|
148 |
if (!empty($parameters[$keywordParameter])) {
|
149 |
$actionName = $parameters[$keywordParameter];
|
150 |
break;
|
@@ -160,7 +160,7 @@ class ActionSiteSearch extends Action
|
|
160 |
: array();
|
161 |
|
162 |
foreach ($categoryParameters as $categoryParameterRaw) {
|
163 |
-
$categoryParameter =
|
164 |
if (!empty($parameters[$categoryParameter])) {
|
165 |
$categoryName = $parameters[$categoryParameter];
|
166 |
break;
|
137 |
// strtolower the parameter names for smooth site search detection
|
138 |
$parameters = array();
|
139 |
foreach ($parametersRaw as $k => $v) {
|
140 |
+
$parameters[mb_strtolower($k)] = $v;
|
141 |
}
|
142 |
// decode values if they were sent from a client using another charset
|
143 |
PageUrl::reencodeParameters($parameters, $pageEncoding);
|
144 |
|
145 |
// Detect Site Search keyword
|
146 |
foreach ($keywordParameters as $keywordParameterRaw) {
|
147 |
+
$keywordParameter = mb_strtolower($keywordParameterRaw);
|
148 |
if (!empty($parameters[$keywordParameter])) {
|
149 |
$actionName = $parameters[$keywordParameter];
|
150 |
break;
|
160 |
: array();
|
161 |
|
162 |
foreach ($categoryParameters as $categoryParameterRaw) {
|
163 |
+
$categoryParameter = mb_strtolower($categoryParameterRaw);
|
164 |
if (!empty($parameters[$categoryParameter])) {
|
165 |
$categoryName = $parameters[$categoryParameter];
|
166 |
break;
|
app/plugins/Actions/DataTable/Filter/Actions.php
CHANGED
@@ -72,7 +72,7 @@ class Actions extends BaseFilter
|
|
72 |
$host = parse_url($url, PHP_URL_HOST);
|
73 |
|
74 |
if ($host && PageUrl::shouldUseHttpsHost($site->getId(), $host)) {
|
75 |
-
$row->setMetadata('url', 'https://' .
|
76 |
}
|
77 |
}
|
78 |
} else if ($folderUrlStart) {
|
72 |
$host = parse_url($url, PHP_URL_HOST);
|
73 |
|
74 |
if ($host && PageUrl::shouldUseHttpsHost($site->getId(), $host)) {
|
75 |
+
$row->setMetadata('url', 'https://' . mb_substr($url, 7 /* = strlen('http://') */));
|
76 |
}
|
77 |
}
|
78 |
} else if ($folderUrlStart) {
|
app/plugins/Actions/VisitorDetails.php
CHANGED
@@ -166,7 +166,7 @@ class VisitorDetails extends VisitorDetailsAbstract
|
|
166 |
$host = parse_url($action['url'], PHP_URL_HOST);
|
167 |
|
168 |
if ($host && PageUrl::shouldUseHttpsHost($visitorDetails['idSite'], $host)) {
|
169 |
-
$action['url'] = 'https://' .
|
170 |
}
|
171 |
}
|
172 |
|
166 |
$host = parse_url($action['url'], PHP_URL_HOST);
|
167 |
|
168 |
if ($host && PageUrl::shouldUseHttpsHost($visitorDetails['idSite'], $host)) {
|
169 |
+
$action['url'] = 'https://' . mb_substr($action['url'], 7 /* = strlen('http://') */);
|
170 |
}
|
171 |
}
|
172 |
|
app/plugins/CoreAdminHome/Commands/InvalidateReportData.php
CHANGED
@@ -85,6 +85,8 @@ class InvalidateReportData extends ConsoleCommand
|
|
85 |
$dateRanges = $this->getDateRangesToInvalidateFor($input);
|
86 |
$segments = $this->getSegmentsToInvalidateFor($input, $sites, $output);
|
87 |
|
|
|
|
|
88 |
foreach ($periodTypes as $periodType) {
|
89 |
if ($periodType === 'range') {
|
90 |
continue; // special handling for range below
|
@@ -93,7 +95,7 @@ class InvalidateReportData extends ConsoleCommand
|
|
93 |
foreach ($segments as $segment) {
|
94 |
$segmentStr = $segment ? $segment->getString() : '';
|
95 |
|
96 |
-
$
|
97 |
|
98 |
$dates = $this->getPeriodDates($periodType, $dateRange);
|
99 |
|
@@ -104,13 +106,13 @@ class InvalidateReportData extends ConsoleCommand
|
|
104 |
if (!empty($plugin)) {
|
105 |
$message .= ", plugin = [ $plugin ]";
|
106 |
}
|
107 |
-
$
|
108 |
} else {
|
109 |
$invalidationResult = $invalidator->markArchivesAsInvalidated($sites, $dates, $periodType, $segment, $cascade,
|
110 |
false, $plugin, $ignoreLogDeletionLimit);
|
111 |
|
112 |
if ($output->getVerbosity() > OutputInterface::VERBOSITY_NORMAL) {
|
113 |
-
$
|
114 |
}
|
115 |
}
|
116 |
}
|
@@ -134,7 +136,7 @@ class InvalidateReportData extends ConsoleCommand
|
|
134 |
$segmentStr = $segment ? $segment->getString() : '';
|
135 |
if ($dryRun) {
|
136 |
$dateRangeStr = implode(';', $dateRanges);
|
137 |
-
$
|
138 |
} else {
|
139 |
$invalidator->markArchivesOverlappingRangeAsInvalidated($sites, $rangeDates, $segment);
|
140 |
}
|
85 |
$dateRanges = $this->getDateRangesToInvalidateFor($input);
|
86 |
$segments = $this->getSegmentsToInvalidateFor($input, $sites, $output);
|
87 |
|
88 |
+
$logger = StaticContainer::get(LoggerInterface::class);
|
89 |
+
|
90 |
foreach ($periodTypes as $periodType) {
|
91 |
if ($periodType === 'range') {
|
92 |
continue; // special handling for range below
|
95 |
foreach ($segments as $segment) {
|
96 |
$segmentStr = $segment ? $segment->getString() : '';
|
97 |
|
98 |
+
$logger->info("Invalidating $periodType periods in $dateRange [segment = $segmentStr]...");
|
99 |
|
100 |
$dates = $this->getPeriodDates($periodType, $dateRange);
|
101 |
|
106 |
if (!empty($plugin)) {
|
107 |
$message .= ", plugin = [ $plugin ]";
|
108 |
}
|
109 |
+
$logger->info($message);
|
110 |
} else {
|
111 |
$invalidationResult = $invalidator->markArchivesAsInvalidated($sites, $dates, $periodType, $segment, $cascade,
|
112 |
false, $plugin, $ignoreLogDeletionLimit);
|
113 |
|
114 |
if ($output->getVerbosity() > OutputInterface::VERBOSITY_NORMAL) {
|
115 |
+
$logger->info($invalidationResult->makeOutputLogs());
|
116 |
}
|
117 |
}
|
118 |
}
|
136 |
$segmentStr = $segment ? $segment->getString() : '';
|
137 |
if ($dryRun) {
|
138 |
$dateRangeStr = implode(';', $dateRanges);
|
139 |
+
$logger->info("Invalidating range periods overlapping $dateRangeStr [segment = $segmentStr]...");
|
140 |
} else {
|
141 |
$invalidator->markArchivesOverlappingRangeAsInvalidated($sites, $rangeDates, $segment);
|
142 |
}
|
app/plugins/CoreAdminHome/Commands/VersionInfo.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*/
|
8 |
+
|
9 |
+
namespace Piwik\Plugins\CoreAdminHome\Commands;
|
10 |
+
|
11 |
+
use Piwik\Plugin\ConsoleCommand;
|
12 |
+
use Piwik\Version;
|
13 |
+
use Symfony\Component\Console\Input\InputInterface;
|
14 |
+
use Symfony\Component\Console\Output\OutputInterface;
|
15 |
+
|
16 |
+
|
17 |
+
class VersionInfo extends ConsoleCommand
|
18 |
+
{
|
19 |
+
protected function configure()
|
20 |
+
{
|
21 |
+
$this->setName('core:version');
|
22 |
+
$this->setDescription('Returns the current version information of this Matomo instance.');
|
23 |
+
$this->setHelp("This command can be used to set get the version information of the current Matomo instance.");
|
24 |
+
}
|
25 |
+
|
26 |
+
protected function execute(InputInterface $input, OutputInterface $output)
|
27 |
+
{
|
28 |
+
$output->writeln(Version::VERSION);
|
29 |
+
}
|
30 |
+
}
|
app/plugins/CoreAdminHome/Controller.php
CHANGED
@@ -299,6 +299,7 @@ class Controller extends ControllerAdmin
|
|
299 |
$view->todayArchiveTimeToLive = $todayArchiveTimeToLive;
|
300 |
$view->todayArchiveTimeToLiveDefault = Rules::getTodayArchiveTimeToLiveDefault();
|
301 |
$view->enableBrowserTriggerArchiving = $enableBrowserTriggerArchiving;
|
|
|
302 |
|
303 |
$mail = Config::getInstance()->mail;
|
304 |
$mail['noreply_email_address'] = Config::getInstance()->General['noreply_email_address'];
|
299 |
$view->todayArchiveTimeToLive = $todayArchiveTimeToLive;
|
300 |
$view->todayArchiveTimeToLiveDefault = Rules::getTodayArchiveTimeToLiveDefault();
|
301 |
$view->enableBrowserTriggerArchiving = $enableBrowserTriggerArchiving;
|
302 |
+
$view->showSegmentArchiveTriggerInfo = Rules::isBrowserArchivingAvailableForSegments();
|
303 |
|
304 |
$mail = Config::getInstance()->mail;
|
305 |
$mail['noreply_email_address'] = Config::getInstance()->General['noreply_email_address'];
|
app/plugins/CoreAdminHome/Emails/RecoveryCodesRegeneratedEmail.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Plugins\CoreAdminHome\Emails;
|
11 |
+
|
12 |
+
use Piwik\Piwik;
|
13 |
+
use Piwik\Plugins\CoreAdminHome\Emails\SecurityNotificationEmail;
|
14 |
+
|
15 |
+
class RecoveryCodesRegeneratedEmail extends SecurityNotificationEmail
|
16 |
+
{
|
17 |
+
protected function getBody()
|
18 |
+
{
|
19 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationRecoveryCodesRegeneratedBody') . ' ' . Piwik::translate('UsersManager_IfThisWasYouPasswordChange');
|
20 |
+
}
|
21 |
+
}
|
app/plugins/CoreAdminHome/Emails/RecoveryCodesShowedEmail.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Plugins\CoreAdminHome\Emails;
|
11 |
+
|
12 |
+
use Piwik\Piwik;
|
13 |
+
use Piwik\Plugins\CoreAdminHome\Emails\SecurityNotificationEmail;
|
14 |
+
|
15 |
+
class RecoveryCodesShowedEmail extends SecurityNotificationEmail
|
16 |
+
{
|
17 |
+
protected function getBody()
|
18 |
+
{
|
19 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationRecoveryCodesShowedBody') . ' ' . Piwik::translate('UsersManager_IfThisWasYouPasswordChange');
|
20 |
+
}
|
21 |
+
}
|
app/plugins/CoreAdminHome/Emails/SecurityNotificationEmail.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Plugins\CoreAdminHome\Emails;
|
11 |
+
|
12 |
+
use Piwik\Mail;
|
13 |
+
use Piwik\View;
|
14 |
+
use Piwik\Piwik;
|
15 |
+
|
16 |
+
abstract class SecurityNotificationEmail extends Mail
|
17 |
+
{
|
18 |
+
public static $notifyPluginList = [
|
19 |
+
'Login' => 'CoreAdminHome_BruteForce',
|
20 |
+
'TwoFactorAuth' => 'CoreAdminHome_TwoFactorAuth',
|
21 |
+
'CoreAdminHome' => 'CoreAdminHome_Cors'
|
22 |
+
];
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @var string
|
26 |
+
*/
|
27 |
+
private $login;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @var string
|
31 |
+
*/
|
32 |
+
private $emailAddress;
|
33 |
+
|
34 |
+
public function __construct($login, $emailAddress)
|
35 |
+
{
|
36 |
+
parent::__construct();
|
37 |
+
|
38 |
+
$this->login = $login;
|
39 |
+
$this->emailAddress = $emailAddress;
|
40 |
+
|
41 |
+
$this->setUpEmail();
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @return string
|
46 |
+
*/
|
47 |
+
public function getLogin()
|
48 |
+
{
|
49 |
+
return $this->login;
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @return string
|
54 |
+
*/
|
55 |
+
public function getEmailAddress()
|
56 |
+
{
|
57 |
+
return $this->emailAddress;
|
58 |
+
}
|
59 |
+
|
60 |
+
|
61 |
+
private function setUpEmail()
|
62 |
+
{
|
63 |
+
$this->setDefaultFromPiwik();
|
64 |
+
$this->addTo($this->emailAddress);
|
65 |
+
$this->setSubject($this->getDefaultSubject());
|
66 |
+
$this->addReplyTo($this->getFrom(), $this->getFromName());
|
67 |
+
$this->setWrappedHtmlBody($this->getDefaultBodyView());
|
68 |
+
}
|
69 |
+
|
70 |
+
protected function getDefaultSubject()
|
71 |
+
{
|
72 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationEmailSubject');
|
73 |
+
}
|
74 |
+
|
75 |
+
protected function getDefaultBodyView()
|
76 |
+
{
|
77 |
+
$view = new View('@CoreAdminHome/_securityNotificationEmail.twig');
|
78 |
+
$view->login = $this->login;
|
79 |
+
$view->body = $this->getBody();
|
80 |
+
|
81 |
+
return $view;
|
82 |
+
}
|
83 |
+
|
84 |
+
abstract protected function getBody();
|
85 |
+
}
|
app/plugins/CoreAdminHome/Emails/SettingsChangedEmail.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Plugins\CoreAdminHome\Emails;
|
11 |
+
|
12 |
+
use Piwik\Piwik;
|
13 |
+
use Piwik\Plugins\CoreAdminHome\Emails\SecurityNotificationEmail;
|
14 |
+
|
15 |
+
class SettingsChangedEmail extends SecurityNotificationEmail
|
16 |
+
{
|
17 |
+
/**
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
private $superuser;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @var string
|
24 |
+
*/
|
25 |
+
private $pluginNames;
|
26 |
+
|
27 |
+
public function __construct($login, $emailAddress, $pluginNames, $superuser = null)
|
28 |
+
{
|
29 |
+
$this->pluginNames = $pluginNames;
|
30 |
+
$this->superuser = $superuser;
|
31 |
+
|
32 |
+
parent::__construct($login, $emailAddress);
|
33 |
+
}
|
34 |
+
|
35 |
+
protected function getBody()
|
36 |
+
{
|
37 |
+
if ($this->superuser) {
|
38 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationSettingsChangedByOtherSuperUserBody', [$this->superuser, $this->pluginNames]);
|
39 |
+
}
|
40 |
+
|
41 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationSettingsChangedByUserBody', [$this->pluginNames]) . ' ' . Piwik::translate('UsersManager_IfThisWasYouPasswordChange');
|
42 |
+
}
|
43 |
+
}
|
app/plugins/CoreAdminHome/Emails/TokenAuthCreatedEmail.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Plugins\CoreAdminHome\Emails;
|
11 |
+
|
12 |
+
use Piwik\Piwik;
|
13 |
+
use Piwik\Plugins\CoreAdminHome\Emails\SecurityNotificationEmail;
|
14 |
+
|
15 |
+
class TokenAuthCreatedEmail extends SecurityNotificationEmail
|
16 |
+
{
|
17 |
+
/**
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
private $tokenDescription;
|
21 |
+
|
22 |
+
public function __construct($login, $emailAddress, $tokenDescription)
|
23 |
+
{
|
24 |
+
$this->tokenDescription = $tokenDescription;
|
25 |
+
|
26 |
+
parent::__construct($login, $emailAddress);
|
27 |
+
}
|
28 |
+
|
29 |
+
protected function getBody()
|
30 |
+
{
|
31 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationTokenAuthCreatedBody', [$this->tokenDescription]) . ' ' . Piwik::translate('UsersManager_IfThisWasYouPasswordChange');
|
32 |
+
}
|
33 |
+
}
|
app/plugins/CoreAdminHome/Emails/TokenAuthDeletedEmail.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Plugins\CoreAdminHome\Emails;
|
11 |
+
|
12 |
+
use Piwik\Piwik;
|
13 |
+
use Piwik\Plugins\CoreAdminHome\Emails\SecurityNotificationEmail;
|
14 |
+
|
15 |
+
class TokenAuthDeletedEmail extends SecurityNotificationEmail
|
16 |
+
{
|
17 |
+
/**
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
private $tokenDescription;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @var bool
|
24 |
+
*/
|
25 |
+
private $all;
|
26 |
+
|
27 |
+
public function __construct($login, $emailAddress, $tokenDescription, $all = false)
|
28 |
+
{
|
29 |
+
$this->tokenDescription = $tokenDescription;
|
30 |
+
$this->all = $all;
|
31 |
+
|
32 |
+
parent::__construct($login, $emailAddress);
|
33 |
+
}
|
34 |
+
|
35 |
+
protected function getBody()
|
36 |
+
{
|
37 |
+
if ($this->all) {
|
38 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationAllTokenAuthDeletedBody') . ' ' . Piwik::translate('UsersManager_IfThisWasYouPasswordChange');
|
39 |
+
}
|
40 |
+
|
41 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationTokenAuthDeletedBody', [$this->tokenDescription]) . ' ' . Piwik::translate('UsersManager_IfThisWasYouPasswordChange');
|
42 |
+
}
|
43 |
+
}
|
app/plugins/CoreAdminHome/Emails/TwoFactorAuthDisabledEmail.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Plugins\CoreAdminHome\Emails;
|
11 |
+
|
12 |
+
use Piwik\Piwik;
|
13 |
+
use Piwik\Plugins\CoreAdminHome\Emails\SecurityNotificationEmail;
|
14 |
+
|
15 |
+
class TwoFactorAuthDisabledEmail extends SecurityNotificationEmail
|
16 |
+
{
|
17 |
+
protected function getBody()
|
18 |
+
{
|
19 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationTwoFactorAuthDisabledBody') . ' ' . Piwik::translate('UsersManager_IfThisWasYouPasswordChange');
|
20 |
+
}
|
21 |
+
}
|
app/plugins/CoreAdminHome/Emails/TwoFactorAuthEnabledEmail.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Plugins\CoreAdminHome\Emails;
|
11 |
+
|
12 |
+
use Piwik\Piwik;
|
13 |
+
use Piwik\Plugins\CoreAdminHome\Emails\SecurityNotificationEmail;
|
14 |
+
|
15 |
+
class TwoFactorAuthEnabledEmail extends SecurityNotificationEmail
|
16 |
+
{
|
17 |
+
protected function getBody()
|
18 |
+
{
|
19 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationTwoFactorAuthEnabledBody') . ' ' . Piwik::translate('UsersManager_IfThisWasYouPasswordChange');
|
20 |
+
}
|
21 |
+
}
|
app/plugins/CoreAdminHome/Emails/UserCreatedEmail.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Plugins\CoreAdminHome\Emails;
|
11 |
+
|
12 |
+
use Piwik\Piwik;
|
13 |
+
use Piwik\Plugins\CoreAdminHome\Emails\SecurityNotificationEmail;
|
14 |
+
|
15 |
+
class UserCreatedEmail extends SecurityNotificationEmail
|
16 |
+
{
|
17 |
+
/**
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
private $userLogin;
|
21 |
+
|
22 |
+
public function __construct($login, $emailAddress, $userLogin)
|
23 |
+
{
|
24 |
+
$this->userLogin = $userLogin;
|
25 |
+
|
26 |
+
parent::__construct($login, $emailAddress);
|
27 |
+
}
|
28 |
+
|
29 |
+
protected function getBody()
|
30 |
+
{
|
31 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationUserCreatedBody', [$this->userLogin]) . ' ' . Piwik::translate('UsersManager_IfThisWasYouPasswordChange');
|
32 |
+
}
|
33 |
+
}
|
app/plugins/CoreAdminHome/Emails/UserDeletedEmail.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Plugins\CoreAdminHome\Emails;
|
11 |
+
|
12 |
+
use Piwik\Piwik;
|
13 |
+
use Piwik\Plugins\CoreAdminHome\Emails\SecurityNotificationEmail;
|
14 |
+
|
15 |
+
class UserDeletedEmail extends SecurityNotificationEmail
|
16 |
+
{
|
17 |
+
/**
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
private $userLogin;
|
21 |
+
|
22 |
+
public function __construct($login, $emailAddress, $userLogin)
|
23 |
+
{
|
24 |
+
$this->userLogin = $userLogin;
|
25 |
+
|
26 |
+
parent::__construct($login, $emailAddress);
|
27 |
+
}
|
28 |
+
|
29 |
+
protected function getBody()
|
30 |
+
{
|
31 |
+
return Piwik::translate('CoreAdminHome_SecurityNotificationUserDeletedBody', [$this->userLogin]) . ' ' . Piwik::translate('UsersManager_IfThisWasYouPasswordChange');
|
32 |
+
}
|
33 |
+
}
|
app/plugins/CoreAdminHome/OptOutManager.php
CHANGED
@@ -172,10 +172,17 @@ class OptOutManager
|
|
172 |
|
173 |
$setCookieInNewWindow = Common::getRequestVar('setCookieInNewWindow', false, 'int');
|
174 |
if ($setCookieInNewWindow) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
$reloadUrl = Url::getCurrentQueryStringWithParametersModified(array(
|
176 |
'showConfirmOnly' => 1,
|
177 |
'setCookieInNewWindow' => 0,
|
178 |
-
'nonce' =>
|
179 |
));
|
180 |
} else {
|
181 |
$reloadUrl = false;
|
@@ -232,7 +239,7 @@ class OptOutManager
|
|
232 |
$cssbody = 'body { ';
|
233 |
|
234 |
$hexstrings = array(
|
235 |
-
'fontColor' => $cssfontcolour,
|
236 |
'backgroundColor' => $cssbackgroundcolor
|
237 |
);
|
238 |
foreach ($hexstrings as $key => $testcase) {
|
@@ -242,7 +249,7 @@ class OptOutManager
|
|
242 |
}
|
243 |
|
244 |
if ($cssfontsize && (preg_match("/^[0-9]+[\.]?[0-9]*(px|pt|em|rem|%)$/", $cssfontsize))) {
|
245 |
-
$cssbody .= 'font-size: ' . $cssfontsize . '; ';
|
246 |
} else if ($cssfontsize) {
|
247 |
throw new \Exception("The URL parameter fontSize value of '$cssfontsize' is not valid. Expected value is for example '15pt', '1.2em' or '13px'.\n");
|
248 |
}
|
172 |
|
173 |
$setCookieInNewWindow = Common::getRequestVar('setCookieInNewWindow', false, 'int');
|
174 |
if ($setCookieInNewWindow) {
|
175 |
+
$nonce = Common::getRequestVar('nonce', false);
|
176 |
+
|
177 |
+
if ($nonce !== false && !Nonce::verifyNonce('Piwik_OptOut', $nonce)) {
|
178 |
+
Nonce::discardNonce('Piwik_OptOut');
|
179 |
+
$nonce = '';
|
180 |
+
}
|
181 |
+
|
182 |
$reloadUrl = Url::getCurrentQueryStringWithParametersModified(array(
|
183 |
'showConfirmOnly' => 1,
|
184 |
'setCookieInNewWindow' => 0,
|
185 |
+
'nonce' => $nonce ? $nonce : ''
|
186 |
));
|
187 |
} else {
|
188 |
$reloadUrl = false;
|
239 |
$cssbody = 'body { ';
|
240 |
|
241 |
$hexstrings = array(
|
242 |
+
'fontColor' => $cssfontcolour,
|
243 |
'backgroundColor' => $cssbackgroundcolor
|
244 |
);
|
245 |
foreach ($hexstrings as $key => $testcase) {
|
249 |
}
|
250 |
|
251 |
if ($cssfontsize && (preg_match("/^[0-9]+[\.]?[0-9]*(px|pt|em|rem|%)$/", $cssfontsize))) {
|
252 |
+
$cssbody .= 'font-size: ' . $cssfontsize . '; ';
|
253 |
} else if ($cssfontsize) {
|
254 |
throw new \Exception("The URL parameter fontSize value of '$cssfontsize' is not valid. Expected value is for example '15pt', '1.2em' or '13px'.\n");
|
255 |
}
|
app/plugins/CoreAdminHome/templates/_securityNotificationEmail.twig
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
<p>{{ 'General_HelloUser'|translate(login) }}</p>
|
2 |
+
<p>{{ body }}</p>
|
app/plugins/CoreAdminHome/templates/generalSettings.twig
CHANGED
@@ -33,7 +33,10 @@
|
|
33 |
name="enableBrowserTriggerArchiving"
|
34 |
{% if enableBrowserTriggerArchiving==0 %} checked="checked"{% endif %} />
|
35 |
<span>{{ 'General_No'|translate }}</span>
|
36 |
-
<span class="form-description">
|
|
|
|
|
|
|
37 |
</label>
|
38 |
</p>
|
39 |
</div><div class="col s12 m6">
|
33 |
name="enableBrowserTriggerArchiving"
|
34 |
{% if enableBrowserTriggerArchiving==0 %} checked="checked"{% endif %} />
|
35 |
<span>{{ 'General_No'|translate }}</span>
|
36 |
+
<span class="form-description">
|
37 |
+
{{ 'General_ArchivingTriggerDescription'|translate("<a target='_blank' rel='noreferrer noopener' href='https://matomo.org/docs/setup-auto-archiving/'>","</a>")|raw }}
|
38 |
+
{% if showSegmentArchiveTriggerInfo %}{{ 'General_ArchivingTriggerSegment'|translate }}{% endif %}
|
39 |
+
</span>
|
40 |
</label>
|
41 |
</p>
|
42 |
</div><div class="col s12 m6">
|
app/plugins/CoreConsole/Commands/CoreArchiver.php
CHANGED
@@ -56,8 +56,12 @@ class CoreArchiver extends ConsoleCommand
|
|
56 |
$archiveFilter->setForceReport($input->getOption('force-report'));
|
57 |
|
58 |
$segmentIds = $input->getOption('force-idsegments');
|
59 |
-
|
60 |
-
|
|
|
|
|
|
|
|
|
61 |
$archiveFilter->setSegmentsToForceFromSegmentIds($segmentIds);
|
62 |
|
63 |
$archiver->setArchiveFilter($archiveFilter);
|
56 |
$archiveFilter->setForceReport($input->getOption('force-report'));
|
57 |
|
58 |
$segmentIds = $input->getOption('force-idsegments');
|
59 |
+
if (!empty($segmentIds)) {
|
60 |
+
$segmentIds = explode(',', $segmentIds);
|
61 |
+
$segmentIds = array_map('trim', $segmentIds);
|
62 |
+
} else {
|
63 |
+
$segmentIds = [];
|
64 |
+
}
|
65 |
$archiveFilter->setSegmentsToForceFromSegmentIds($segmentIds);
|
66 |
|
67 |
$archiver->setArchiveFilter($archiveFilter);
|
app/plugins/CoreConsole/Commands/GenerateSystemCheck.php
ADDED
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\Plugins\CoreConsole\Commands;
|
11 |
+
|
12 |
+
use Piwik\Common;
|
13 |
+
use Piwik\Plugin\Manager;
|
14 |
+
use Symfony\Component\Console\Input\InputInterface;
|
15 |
+
use Symfony\Component\Console\Input\InputOption;
|
16 |
+
use Symfony\Component\Console\Output\OutputInterface;
|
17 |
+
|
18 |
+
class GenerateSystemCheck extends GeneratePluginBase
|
19 |
+
{
|
20 |
+
protected function configure()
|
21 |
+
{
|
22 |
+
$this->setName('generate:system-check')
|
23 |
+
->setDescription('Adds a new system check to an existing plugin')
|
24 |
+
->addOption('pluginname', null, InputOption::VALUE_REQUIRED, 'The name of an existing plugin which does not have a menu defined yet')
|
25 |
+
->addOption('checkname', null, InputOption::VALUE_REQUIRED, 'The name of the system check you want to create');
|
26 |
+
}
|
27 |
+
|
28 |
+
protected function execute(InputInterface $input, OutputInterface $output)
|
29 |
+
{
|
30 |
+
$pluginName = $this->getPluginName($input, $output);
|
31 |
+
$this->checkAndUpdateRequiredPiwikVersion($pluginName, $output);
|
32 |
+
|
33 |
+
$checkName = $this->getSystemCheckName($input, $output);
|
34 |
+
$className = ucfirst(str_replace(' ' , '', $checkName));
|
35 |
+
if (!Common::stringEndsWith($className, 'check') && !Common::stringEndsWith($className, 'Check')) {
|
36 |
+
$className .= 'Check';
|
37 |
+
}
|
38 |
+
|
39 |
+
$exampleFolder = Manager::getPluginDirectory('ExamplePlugin');
|
40 |
+
$replace = array('ExampleCheck' => $className,
|
41 |
+
'Example Check' => $checkName,
|
42 |
+
'ExamplePlugin' => $pluginName,
|
43 |
+
);
|
44 |
+
|
45 |
+
$whitelistFiles = array('/Diagnostic', '/Diagnostic/ExampleCheck.php');
|
46 |
+
|
47 |
+
$this->copyTemplateToPlugin($exampleFolder, $pluginName, $replace, $whitelistFiles);
|
48 |
+
|
49 |
+
$this->writeSuccessMessage($output, array(
|
50 |
+
sprintf('plugins/%s/Diagnostic/%s.php for %s generated.', $pluginName, $className, $pluginName),
|
51 |
+
sprintf('You should now implement the method called <comment>execute</comment> in %s.php', $className),
|
52 |
+
'You also need to make the diagnostic check known to Matomo in your "plugins/'.$pluginName.'/config/config.php".',
|
53 |
+
'Read more about this here: https://developer.matomo.org/guides/system-check',
|
54 |
+
'Enjoy!'
|
55 |
+
));
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @param InputInterface $input
|
60 |
+
* @param OutputInterface $output
|
61 |
+
* @return string
|
62 |
+
* @throws \RuntimeException
|
63 |
+
*/
|
64 |
+
protected function getSystemCheckName(InputInterface $input, OutputInterface $output)
|
65 |
+
{
|
66 |
+
$validate = function ($checkName) {
|
67 |
+
if (empty($checkName)) {
|
68 |
+
throw new \InvalidArgumentException('Please enter the name of your system check');
|
69 |
+
}
|
70 |
+
|
71 |
+
if (preg_match("/[^A-Za-z0-9 ]/", $checkName)) {
|
72 |
+
throw new \InvalidArgumentException('Only alpha numerical characters and whitespaces are allowed');
|
73 |
+
}
|
74 |
+
|
75 |
+
return $checkName;
|
76 |
+
};
|
77 |
+
|
78 |
+
$checkName = $input->getOption('checkname');
|
79 |
+
|
80 |
+
if (empty($checkName)) {
|
81 |
+
$dialog = $this->getHelperSet()->get('dialog');
|
82 |
+
$checkName = $dialog->askAndValidate($output, 'Enter the name of your system check, for example "PDF PHP Extension Check": ', $validate);
|
83 |
+
} else {
|
84 |
+
$validate($checkName);
|
85 |
+
}
|
86 |
+
|
87 |
+
$checkName = ucfirst($checkName);
|
88 |
+
|
89 |
+
return $checkName;
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* @param InputInterface $input
|
94 |
+
* @param OutputInterface $output
|
95 |
+
* @return string
|
96 |
+
* @throws \RuntimeException
|
97 |
+
*/
|
98 |
+
protected function getPluginName(InputInterface $input, OutputInterface $output)
|
99 |
+
{
|
100 |
+
$pluginNames = $this->getPluginNames();
|
101 |
+
$invalidName = 'You have to enter a name of an existing plugin.';
|
102 |
+
|
103 |
+
return $this->askPluginNameAndValidate($input, $output, $pluginNames, $invalidName);
|
104 |
+
}
|
105 |
+
|
106 |
+
}
|
app/plugins/CoreHome/Columns/UserId.php
CHANGED
@@ -57,7 +57,7 @@ class UserId extends VisitDimension
|
|
57 |
{
|
58 |
$value = $request->getForcedUserId();
|
59 |
if (!empty($value)) {
|
60 |
-
return
|
61 |
}
|
62 |
return $value;
|
63 |
}
|
57 |
{
|
58 |
$value = $request->getForcedUserId();
|
59 |
if (!empty($value)) {
|
60 |
+
return mb_substr($value, 0, self::MAXLENGTH);
|
61 |
}
|
62 |
return $value;
|
63 |
}
|
app/plugins/CoreHome/Columns/VisitorId.php
CHANGED
@@ -44,12 +44,18 @@ class VisitorId extends VisitDimension
|
|
44 |
|
45 |
public function configureSegments(SegmentsList $segmentsList, DimensionSegmentFactory $dimensionSegmentFactory)
|
46 |
{
|
47 |
-
|
48 |
-
|
49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
-
$visitorProfileEnabled = $systemSettings->disableVisitorProfile->getValue() === false
|
52 |
-
&& $systemSettings->disableVisitorLog->getValue() === false;
|
53 |
if ($visitorProfileEnabled) {
|
54 |
parent::configureSegments($segmentsList, $dimensionSegmentFactory);
|
55 |
}
|
44 |
|
45 |
public function configureSegments(SegmentsList $segmentsList, DimensionSegmentFactory $dimensionSegmentFactory)
|
46 |
{
|
47 |
+
try {
|
48 |
+
$systemSettings = new SystemSettings();
|
49 |
+
$visitorProfileEnabled = $systemSettings->disableVisitorProfile->getValue() === false
|
50 |
+
&& $systemSettings->disableVisitorLog->getValue() === false;
|
51 |
+
} catch (\Zend_Db_Exception $e) {
|
52 |
+
// when running tests the db might not yet be set up when fetching available segments
|
53 |
+
if (!defined('PIWIK_TEST_MODE') || !PIWIK_TEST_MODE) {
|
54 |
+
throw $e;
|
55 |
+
}
|
56 |
+
$visitorProfileEnabled = true;
|
57 |
+
}
|
58 |
|
|
|
|
|
59 |
if ($visitorProfileEnabled) {
|
60 |
parent::configureSegments($segmentsList, $dimensionSegmentFactory);
|
61 |
}
|
app/plugins/CoreHome/DataTableRowAction/RowEvolution.php
CHANGED
@@ -139,7 +139,8 @@ class RowEvolution
|
|
139 |
$popoverTitle = '';
|
140 |
if ($this->rowLabel) {
|
141 |
$icon = $this->rowIcon ? '<img height="16px" src="' . $this->rowIcon . '" alt="">' : '';
|
142 |
-
$
|
|
|
143 |
$popoverTitle = $icon . ' ' . $this->rowLabel;
|
144 |
}
|
145 |
|
@@ -401,7 +402,6 @@ class RowEvolution
|
|
401 |
{
|
402 |
// By default, use the specified label
|
403 |
$rowLabel = Common::sanitizeInputValue($report['label']);
|
404 |
-
$rowLabel = str_replace('/', '<wbr>/', str_replace('&', '<wbr>&', $rowLabel ));
|
405 |
|
406 |
// If the dataTable specifies a label_html, use this instead
|
407 |
/** @var $dataTableMap \Piwik\DataTable\Map */
|
139 |
$popoverTitle = '';
|
140 |
if ($this->rowLabel) {
|
141 |
$icon = $this->rowIcon ? '<img height="16px" src="' . $this->rowIcon . '" alt="">' : '';
|
142 |
+
$rowLabel = str_replace('/', '<wbr>/', str_replace('&', '<wbr>&', $this->rowLabel ));
|
143 |
+
$metricsText = sprintf(Piwik::translate('RowEvolution_MetricsFor'), $this->dimension . ': ' . $icon . ' ' . $rowLabel);
|
144 |
$popoverTitle = $icon . ' ' . $this->rowLabel;
|
145 |
}
|
146 |
|
402 |
{
|
403 |
// By default, use the specified label
|
404 |
$rowLabel = Common::sanitizeInputValue($report['label']);
|
|
|
405 |
|
406 |
// If the dataTable specifies a label_html, use this instead
|
407 |
/** @var $dataTableMap \Piwik\DataTable\Map */
|
app/plugins/CoreHome/Tracker/VisitRequestProcessor.php
CHANGED
@@ -184,7 +184,7 @@ class VisitRequestProcessor extends RequestProcessor
|
|
184 |
}
|
185 |
|
186 |
$wasLastActionYesterday = $this->wasLastActionNotToday($visitProperties, $request, $lastKnownVisit);
|
187 |
-
$forceNewVisitAtMidnight = (bool)
|
188 |
|
189 |
if ($wasLastActionYesterday && $forceNewVisitAtMidnight) {
|
190 |
Common::printDebug("Visitor detected, but last action was yesterday...");
|
@@ -192,7 +192,7 @@ class VisitRequestProcessor extends RequestProcessor
|
|
192 |
return true;
|
193 |
}
|
194 |
|
195 |
-
if (!TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid')
|
196 |
&& !$this->lastUserIdWasSetAndDoesMatch($visitProperties, $request)) {
|
197 |
Common::printDebug("Visitor detected, but last user_id does not match...");
|
198 |
return true;
|
184 |
}
|
185 |
|
186 |
$wasLastActionYesterday = $this->wasLastActionNotToday($visitProperties, $request, $lastKnownVisit);
|
187 |
+
$forceNewVisitAtMidnight = (bool) TrackerConfig::getConfigValue('create_new_visit_after_midnight', $request->getIdSiteIfExists());
|
188 |
|
189 |
if ($wasLastActionYesterday && $forceNewVisitAtMidnight) {
|
190 |
Common::printDebug("Visitor detected, but last action was yesterday...");
|
192 |
return true;
|
193 |
}
|
194 |
|
195 |
+
if (!TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid', $request->getIdSiteIfExists())
|
196 |
&& !$this->lastUserIdWasSetAndDoesMatch($visitProperties, $request)) {
|
197 |
Common::printDebug("Visitor detected, but last user_id does not match...");
|
198 |
return true;
|
app/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.html
CHANGED
@@ -23,6 +23,8 @@
|
|
23 |
title="{{ featureName }}"></div>
|
24 |
</span>
|
25 |
|
|
|
|
|
26 |
<div class="inlineHelp" ng-show="view.showInlineHelp">
|
27 |
<div ng-bind-html="inlineHelp"></div>
|
28 |
<a ng-if="helpUrl"
|
23 |
title="{{ featureName }}"></div>
|
24 |
</span>
|
25 |
|
26 |
+
<div ng-show="showReportGenerated" class="icon-clock report-generated"></div>
|
27 |
+
|
28 |
<div class="inlineHelp" ng-show="view.showInlineHelp">
|
29 |
<div ng-bind-html="inlineHelp"></div>
|
30 |
<a ng-if="helpUrl"
|
app/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.less
CHANGED
@@ -62,4 +62,13 @@
|
|
62 |
text-decoration: none;
|
63 |
}
|
64 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
}
|
62 |
text-decoration: none;
|
63 |
}
|
64 |
}
|
65 |
+
|
66 |
+
.report-generated {
|
67 |
+
float: right;
|
68 |
+
cursor: pointer;
|
69 |
+
font-size: 14px;
|
70 |
+
color:#888;
|
71 |
+
opacity: 0.3;
|
72 |
+
line-height: 32px;
|
73 |
+
}
|
74 |
}
|
app/plugins/CoreHome/templates/_dataTable.twig
CHANGED
@@ -13,6 +13,7 @@
|
|
13 |
{% if properties.title %}
|
14 |
<h2 class="card-title"
|
15 |
{% if properties.title_edit_entity_url %}edit-url="{{ properties.title_edit_entity_url }}"{% endif %}
|
|
|
16 |
piwik-enriched-headline
|
17 |
>{{ properties.title }}</h2>
|
18 |
{% endif %}
|
13 |
{% if properties.title %}
|
14 |
<h2 class="card-title"
|
15 |
{% if properties.title_edit_entity_url %}edit-url="{{ properties.title_edit_entity_url }}"{% endif %}
|
16 |
+
{% if reportLastUpdatedMessage is defined and reportLastUpdatedMessage %}report-generated="{{ reportLastUpdatedMessage|raw }}"{% endif %}
|
17 |
piwik-enriched-headline
|
18 |
>{{ properties.title }}</h2>
|
19 |
{% endif %}
|
app/plugins/CorePluginsAdmin/API.php
CHANGED
@@ -13,6 +13,9 @@ use Piwik\Plugin\SettingsProvider;
|
|
13 |
use Exception;
|
14 |
use Piwik\Plugins\Login\PasswordVerifier;
|
15 |
use Piwik\Version;
|
|
|
|
|
|
|
16 |
|
17 |
/**
|
18 |
* API for plugin CorePluginsAdmin
|
@@ -61,15 +64,26 @@ class API extends \Piwik\Plugin\API
|
|
61 |
|
62 |
$this->settingsMetadata->setPluginSettings($pluginsSettings, $settingValues);
|
63 |
|
|
|
|
|
64 |
try {
|
65 |
foreach ($pluginsSettings as $pluginSetting) {
|
66 |
if (!empty($settingValues[$pluginSetting->getPluginName()])) {
|
67 |
$pluginSetting->save();
|
|
|
|
|
|
|
|
|
|
|
68 |
}
|
69 |
}
|
70 |
} catch (Exception $e) {
|
71 |
throw new Exception(Piwik::translate('CoreAdminHome_PluginSettingsSaveFailed'));
|
72 |
}
|
|
|
|
|
|
|
|
|
73 |
}
|
74 |
|
75 |
/**
|
@@ -137,4 +151,40 @@ class API extends \Piwik\Plugin\API
|
|
137 |
throw new Exception(Piwik::translate('UsersManager_CurrentPasswordNotCorrect'));
|
138 |
}
|
139 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
}
|
13 |
use Exception;
|
14 |
use Piwik\Plugins\Login\PasswordVerifier;
|
15 |
use Piwik\Version;
|
16 |
+
use Piwik\Container\StaticContainer;
|
17 |
+
use Piwik\Plugins\CoreAdminHome\Emails\SettingsChangedEmail;
|
18 |
+
use Piwik\Plugins\CoreAdminHome\Emails\SecurityNotificationEmail;
|
19 |
|
20 |
/**
|
21 |
* API for plugin CorePluginsAdmin
|
64 |
|
65 |
$this->settingsMetadata->setPluginSettings($pluginsSettings, $settingValues);
|
66 |
|
67 |
+
$sendSettingsChangedNotificationEmailPlugins = [];
|
68 |
+
|
69 |
try {
|
70 |
foreach ($pluginsSettings as $pluginSetting) {
|
71 |
if (!empty($settingValues[$pluginSetting->getPluginName()])) {
|
72 |
$pluginSetting->save();
|
73 |
+
|
74 |
+
$pluginName = $pluginSetting->getPluginName();
|
75 |
+
if (in_array($pluginName, array_keys(SecurityNotificationEmail::$notifyPluginList))) {
|
76 |
+
$sendSettingsChangedNotificationEmailPlugins[] = $pluginName;
|
77 |
+
}
|
78 |
}
|
79 |
}
|
80 |
} catch (Exception $e) {
|
81 |
throw new Exception(Piwik::translate('CoreAdminHome_PluginSettingsSaveFailed'));
|
82 |
}
|
83 |
+
|
84 |
+
if (count($sendSettingsChangedNotificationEmailPlugins) > 0) {
|
85 |
+
$this->sendNotificationEmails($sendSettingsChangedNotificationEmailPlugins);
|
86 |
+
}
|
87 |
}
|
88 |
|
89 |
/**
|
151 |
throw new Exception(Piwik::translate('UsersManager_CurrentPasswordNotCorrect'));
|
152 |
}
|
153 |
}
|
154 |
+
|
155 |
+
private function sendNotificationEmails($sendSettingsChangedNotificationEmailPlugins)
|
156 |
+
{
|
157 |
+
$pluginNames = [];
|
158 |
+
foreach ($sendSettingsChangedNotificationEmailPlugins as $plugin) {
|
159 |
+
$pluginNames[] = Piwik::translate(SettingsChangedEmail::$notifyPluginList[$plugin]);
|
160 |
+
}
|
161 |
+
$pluginNames = implode(', ', $pluginNames);
|
162 |
+
|
163 |
+
$container = StaticContainer::getContainer();
|
164 |
+
|
165 |
+
$email = $container->make(SettingsChangedEmail::class, array(
|
166 |
+
'login' => Piwik::getCurrentUserLogin(),
|
167 |
+
'emailAddress' => Piwik::getCurrentUserEmail(),
|
168 |
+
'pluginNames' => $pluginNames
|
169 |
+
));
|
170 |
+
$email->safeSend();
|
171 |
+
|
172 |
+
$superuserEmailAddresses = Piwik::getAllSuperUserAccessEmailAddresses();
|
173 |
+
unset($superuserEmailAddresses[Piwik::getCurrentUserLogin()]);
|
174 |
+
$superUserEmail = false;
|
175 |
+
|
176 |
+
foreach ($superuserEmailAddresses as $address) {
|
177 |
+
$superUserEmail = $superUserEmail ?: $container->make(SettingsChangedEmail::class, array(
|
178 |
+
'login' => Piwik::translate('Installation_SuperUser'),
|
179 |
+
'emailAddress' => $address,
|
180 |
+
'pluginNames' => $pluginNames,
|
181 |
+
'superuser' => Piwik::getCurrentUserLogin()
|
182 |
+
));
|
183 |
+
$superUserEmail->addTo($address);
|
184 |
+
}
|
185 |
+
|
186 |
+
if ($superUserEmail) {
|
187 |
+
$superUserEmail->safeSend();
|
188 |
+
}
|
189 |
+
}
|
190 |
}
|
app/plugins/CorePluginsAdmin/Commands/ActivatePlugin.php
CHANGED
@@ -38,6 +38,11 @@ class ActivatePlugin extends ConsoleCommand
|
|
38 |
continue;
|
39 |
}
|
40 |
|
|
|
|
|
|
|
|
|
|
|
41 |
if ($dependencies = $pluginManager->loadPlugin($plugin)->getMissingDependenciesAsString()) {
|
42 |
$output->writeln("<error>$dependencies</error>");
|
43 |
continue;
|
38 |
continue;
|
39 |
}
|
40 |
|
41 |
+
if (!$pluginManager->isPluginInFilesystem($plugin)) {
|
42 |
+
$output->writeln("<error>Cannot find plugin files for $plugin.</error>");
|
43 |
+
continue;
|
44 |
+
}
|
45 |
+
|
46 |
if ($dependencies = $pluginManager->loadPlugin($plugin)->getMissingDependenciesAsString()) {
|
47 |
$output->writeln("<error>$dependencies</error>");
|
48 |
continue;
|
app/plugins/CorePluginsAdmin/Controller.php
CHANGED
@@ -77,8 +77,8 @@ class Controller extends Plugin\ControllerAdmin
|
|
77 |
* @param Plugins $marketplacePlugins
|
78 |
* @param PasswordVerifier $passwordVerify
|
79 |
*/
|
80 |
-
public function __construct(Translator $translator,
|
81 |
-
Plugin\SettingsProvider $settingsProvider,
|
82 |
PluginInstaller $pluginInstaller,
|
83 |
PasswordVerifier $passwordVerify,
|
84 |
$marketplacePlugins = null
|
@@ -350,7 +350,7 @@ class Controller extends Plugin\ControllerAdmin
|
|
350 |
if (ob_get_length()) {
|
351 |
ob_clean();
|
352 |
}
|
353 |
-
|
354 |
$this->tryToRepairPiwik();
|
355 |
|
356 |
if (empty($lastError) && defined('PIWIK_TEST_MODE') && PIWIK_TEST_MODE) {
|
@@ -432,7 +432,7 @@ class Controller extends Plugin\ControllerAdmin
|
|
432 |
'action' => 'activate',
|
433 |
'pluginName' => Common::getRequestVar('pluginName'),
|
434 |
'nonce' => Common::getRequestVar('nonce'),
|
435 |
-
'redirectTo' => Common::getRequestVar('redirectTo'),
|
436 |
'referrer' => urlencode(Url::getReferrer()),
|
437 |
];
|
438 |
|
@@ -446,7 +446,7 @@ class Controller extends Plugin\ControllerAdmin
|
|
446 |
|
447 |
if ($redirectAfter) {
|
448 |
$message = $this->translator->translate('CorePluginsAdmin_SuccessfullyActicated', array($pluginName));
|
449 |
-
|
450 |
if ($this->settingsProvider->getSystemSettings($pluginName)) {
|
451 |
$target = sprintf('<a href="index.php%s#%s">',
|
452 |
Url::getCurrentQueryStringWithParametersModified(array('module' => 'CoreAdminHome', 'action' => 'generalSettings')),
|
@@ -545,7 +545,7 @@ class Controller extends Plugin\ControllerAdmin
|
|
545 |
public function showLicense()
|
546 |
{
|
547 |
Piwik::checkUserHasSomeViewAccess();
|
548 |
-
|
549 |
$pluginName = Common::getRequestVar('pluginName', null, 'string');
|
550 |
|
551 |
if (!Plugin\Manager::getInstance()->isPluginInFilesystem($pluginName)) {
|
77 |
* @param Plugins $marketplacePlugins
|
78 |
* @param PasswordVerifier $passwordVerify
|
79 |
*/
|
80 |
+
public function __construct(Translator $translator,
|
81 |
+
Plugin\SettingsProvider $settingsProvider,
|
82 |
PluginInstaller $pluginInstaller,
|
83 |
PasswordVerifier $passwordVerify,
|
84 |
$marketplacePlugins = null
|
350 |
if (ob_get_length()) {
|
351 |
ob_clean();
|
352 |
}
|
353 |
+
|
354 |
$this->tryToRepairPiwik();
|
355 |
|
356 |
if (empty($lastError) && defined('PIWIK_TEST_MODE') && PIWIK_TEST_MODE) {
|
432 |
'action' => 'activate',
|
433 |
'pluginName' => Common::getRequestVar('pluginName'),
|
434 |
'nonce' => Common::getRequestVar('nonce'),
|
435 |
+
'redirectTo' => Common::getRequestVar('redirectTo', '', 'string'),
|
436 |
'referrer' => urlencode(Url::getReferrer()),
|
437 |
];
|
438 |
|
446 |
|
447 |
if ($redirectAfter) {
|
448 |
$message = $this->translator->translate('CorePluginsAdmin_SuccessfullyActicated', array($pluginName));
|
449 |
+
|
450 |
if ($this->settingsProvider->getSystemSettings($pluginName)) {
|
451 |
$target = sprintf('<a href="index.php%s#%s">',
|
452 |
Url::getCurrentQueryStringWithParametersModified(array('module' => 'CoreAdminHome', 'action' => 'generalSettings')),
|
545 |
public function showLicense()
|
546 |
{
|
547 |
Piwik::checkUserHasSomeViewAccess();
|
548 |
+
|
549 |
$pluginName = Common::getRequestVar('pluginName', null, 'string');
|
550 |
|
551 |
if (!Plugin\Manager::getInstance()->isPluginInFilesystem($pluginName)) {
|
app/plugins/CorePluginsAdmin/angularjs/form-field/field-site.html
CHANGED
@@ -3,6 +3,8 @@
|
|
3 |
<div piwik-siteselector
|
4 |
class="sites_autocomplete"
|
5 |
ng-model="formField.value"
|
|
|
|
|
6 |
id="{{ formField.name }}"
|
7 |
show-all-sites-item="formField.uiControlAttributes.showAllSitesItem || false"
|
8 |
switch-site-on-select="false"
|
3 |
<div piwik-siteselector
|
4 |
class="sites_autocomplete"
|
5 |
ng-model="formField.value"
|
6 |
+
siteid="{{ formField.value.id }}"
|
7 |
+
sitename="{{ formField.value.name }}"
|
8 |
id="{{ formField.name }}"
|
9 |
show-all-sites-item="formField.uiControlAttributes.showAllSitesItem || false"
|
10 |
switch-site-on-select="false"
|
app/plugins/CoreVisualizations/Visualizations/Cloud.php
CHANGED
@@ -182,8 +182,8 @@ class Cloud extends Visualization
|
|
182 |
{
|
183 |
$word = Common::unsanitizeInputValue($word);
|
184 |
|
185 |
-
if (
|
186 |
-
return
|
187 |
}
|
188 |
|
189 |
return $word;
|
182 |
{
|
183 |
$word = Common::unsanitizeInputValue($word);
|
184 |
|
185 |
+
if (mb_strlen($word) > $this->truncatingLimit) {
|
186 |
+
return mb_substr($word, 0, $this->truncatingLimit - 3) . '...';
|
187 |
}
|
188 |
|
189 |
return $word;
|
app/plugins/CoreVisualizations/Visualizations/Sparklines.php
CHANGED
@@ -122,7 +122,11 @@ class Sparklines extends ViewDataTable
|
|
122 |
}
|
123 |
|
124 |
$firstRow = $data->getFirstRow();
|
125 |
-
|
|
|
|
|
|
|
|
|
126 |
|
127 |
$originalDate = Common::getRequestVar('date');
|
128 |
$originalPeriod = Common::getRequestVar('period');
|
@@ -257,7 +261,7 @@ class Sparklines extends ViewDataTable
|
|
257 |
$table->applyQueuedFilters();
|
258 |
}
|
259 |
|
260 |
-
private function getValuesAndDescriptions(
|
261 |
{
|
262 |
if (!is_array($columns)) {
|
263 |
$columns = array($columns);
|
@@ -270,7 +274,10 @@ class Sparklines extends ViewDataTable
|
|
270 |
$evolutions = [];
|
271 |
|
272 |
foreach ($columns as $col) {
|
273 |
-
$value =
|
|
|
|
|
|
|
274 |
|
275 |
if ($value === false) {
|
276 |
$value = 0;
|
122 |
}
|
123 |
|
124 |
$firstRow = $data->getFirstRow();
|
125 |
+
if ($firstRow) {
|
126 |
+
$comparisons = $firstRow->getComparisons();
|
127 |
+
} else {
|
128 |
+
$comparisons = null;
|
129 |
+
}
|
130 |
|
131 |
$originalDate = Common::getRequestVar('date');
|
132 |
$originalPeriod = Common::getRequestVar('period');
|
261 |
$table->applyQueuedFilters();
|
262 |
}
|
263 |
|
264 |
+
private function getValuesAndDescriptions($firstRow, $columns, $evolutionColumnNameSuffix = null)
|
265 |
{
|
266 |
if (!is_array($columns)) {
|
267 |
$columns = array($columns);
|
274 |
$evolutions = [];
|
275 |
|
276 |
foreach ($columns as $col) {
|
277 |
+
$value = 0;
|
278 |
+
if ($firstRow) {
|
279 |
+
$value = $firstRow->getColumn($col);
|
280 |
+
}
|
281 |
|
282 |
if ($value === false) {
|
283 |
$value = 0;
|
app/plugins/CustomDimensions/Tracker/CustomDimensionsRequestProcessor.php
CHANGED
@@ -173,7 +173,7 @@ class CustomDimensionsRequestProcessor extends RequestProcessor
|
|
173 |
|
174 |
private static function prepareValue($value)
|
175 |
{
|
176 |
-
return
|
177 |
}
|
178 |
|
179 |
public static function buildCustomDimensionTrackingApiName($idDimensionOrDimension)
|
173 |
|
174 |
private static function prepareValue($value)
|
175 |
{
|
176 |
+
return mb_substr(trim($value), 0, 250);
|
177 |
}
|
178 |
|
179 |
public static function buildCustomDimensionTrackingApiName($idDimensionOrDimension)
|
app/plugins/Dashboard/stylesheets/widget.less
CHANGED
@@ -164,5 +164,7 @@
|
|
164 |
|
165 |
|
166 |
.ui-dialog .widget .widgetTop .buttons {
|
167 |
-
right:
|
|
|
|
|
168 |
}
|
164 |
|
165 |
|
166 |
.ui-dialog .widget .widgetTop .buttons {
|
167 |
+
right: 30px;
|
168 |
+
top: 2px;
|
169 |
+
display: block;
|
170 |
}
|
app/plugins/DevicesDetection/Columns/BrowserName.php
CHANGED
@@ -41,9 +41,9 @@ class BrowserName extends Base
|
|
41 |
$segment->setSqlFilterValue(function ($val) {
|
42 |
$browsers = Browser::getAvailableBrowsers();
|
43 |
$browsers = array_map(function($val) {
|
44 |
-
return
|
45 |
}, $browsers);
|
46 |
-
$result = array_search(
|
47 |
|
48 |
if ($result === false) {
|
49 |
$result = 'UNK';
|
41 |
$segment->setSqlFilterValue(function ($val) {
|
42 |
$browsers = Browser::getAvailableBrowsers();
|
43 |
$browsers = array_map(function($val) {
|
44 |
+
return mb_strtolower($val);
|
45 |
}, $browsers);
|
46 |
+
$result = array_search(mb_strtolower($val), $browsers);
|
47 |
|
48 |
if ($result === false) {
|
49 |
$result = 'UNK';
|
app/plugins/DevicesDetection/Columns/Os.php
CHANGED
@@ -43,9 +43,9 @@ class Os extends Base
|
|
43 |
$segment->setSqlFilterValue(function ($val) {
|
44 |
$oss = OperatingSystem::getAvailableOperatingSystems();
|
45 |
$oss = array_map(function($val) {
|
46 |
-
return
|
47 |
}, $oss);
|
48 |
-
$result = array_search(
|
49 |
|
50 |
if ($result === false) {
|
51 |
$result = 'UNK';
|
43 |
$segment->setSqlFilterValue(function ($val) {
|
44 |
$oss = OperatingSystem::getAvailableOperatingSystems();
|
45 |
$oss = array_map(function($val) {
|
46 |
+
return mb_strtolower($val);
|
47 |
}, $oss);
|
48 |
+
$result = array_search(mb_strtolower($val), $oss);
|
49 |
|
50 |
if ($result === false) {
|
51 |
$result = 'UNK';
|
app/plugins/Diagnostics/Diagnostic/CronArchivingCheck.php
CHANGED
@@ -69,8 +69,16 @@ class CronArchivingCheck implements Diagnostic
|
|
69 |
$comment .= $this->translator->translate('General_Ok');
|
70 |
$status = DiagnosticResult::STATUS_OK;
|
71 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
$comment .= $this->translator->translate('Installation_NotSupported')
|
73 |
-
. ' ' . $this->translator->translate('Goals_Optional')
|
|
|
|
|
74 |
$status = DiagnosticResult::STATUS_INFORMATIONAL;
|
75 |
}
|
76 |
|
69 |
$comment .= $this->translator->translate('General_Ok');
|
70 |
$status = DiagnosticResult::STATUS_OK;
|
71 |
} else {
|
72 |
+
$reasons = CliMulti\Process::isSupportedWithReason();
|
73 |
+
if (empty($reasons)) {
|
74 |
+
$reasonText = $this->translator->translate('General_Unknown');
|
75 |
+
} else {
|
76 |
+
$reasonText = implode(', ', $reasons);
|
77 |
+
}
|
78 |
$comment .= $this->translator->translate('Installation_NotSupported')
|
79 |
+
. ' ' . $this->translator->translate('Goals_Optional')
|
80 |
+
. ' (' . $this->translator->translate('General_Reasons') . ': ' . $reasonText . ')'
|
81 |
+
. $this->translator->translate('General_LearnMore', [' <a target="_blank" href="https://matomo.org/faq/troubleshooting/how-to-make-the-diagnostic-managing-processes-via-cli-to-display-ok/">', '</a>']);
|
82 |
$status = DiagnosticResult::STATUS_INFORMATIONAL;
|
83 |
}
|
84 |
|
app/plugins/Diagnostics/Diagnostic/CronArchivingLastRunCheck.php
CHANGED
@@ -17,6 +17,7 @@ use Piwik\Option;
|
|
17 |
use Piwik\Plugins\Intl\DateTimeFormatProvider;
|
18 |
use Piwik\SettingsPiwik;
|
19 |
use Piwik\Translation\Translator;
|
|
|
20 |
|
21 |
/**
|
22 |
* Check if cron archiving has run in the last 24-48 hrs.
|
@@ -90,8 +91,13 @@ class CronArchivingLastRunCheck implements Diagnostic
|
|
90 |
|
91 |
private function getArchivingCommand()
|
92 |
{
|
93 |
-
|
94 |
-
|
|
|
|
|
|
|
|
|
|
|
95 |
}
|
96 |
|
97 |
public static function getTimeSinceLastSuccessfulRun($lastRunTime = null)
|
17 |
use Piwik\Plugins\Intl\DateTimeFormatProvider;
|
18 |
use Piwik\SettingsPiwik;
|
19 |
use Piwik\Translation\Translator;
|
20 |
+
use Piwik\Url;
|
21 |
|
22 |
/**
|
23 |
* Check if cron archiving has run in the last 24-48 hrs.
|
91 |
|
92 |
private function getArchivingCommand()
|
93 |
{
|
94 |
+
if (Url::isValidHost()) {
|
95 |
+
$domain = Config::getHostname($checkIfTrusted = true);
|
96 |
+
|
97 |
+
return PIWIK_INCLUDE_PATH . '/console --matomo-domain=' . $domain . ' core:archive';
|
98 |
+
}
|
99 |
+
|
100 |
+
return PIWIK_INCLUDE_PATH . '/console core:archive';
|
101 |
}
|
102 |
|
103 |
public static function getTimeSinceLastSuccessfulRun($lastRunTime = null)
|
app/plugins/Diagnostics/Diagnostic/DiagnosticResult.php
CHANGED
@@ -8,6 +8,8 @@
|
|
8 |
|
9 |
namespace Piwik\Plugins\Diagnostics\Diagnostic;
|
10 |
|
|
|
|
|
11 |
/**
|
12 |
* The result of a diagnostic.
|
13 |
*
|
@@ -55,20 +57,23 @@ class DiagnosticResult
|
|
55 |
|
56 |
/**
|
57 |
* @param string $label
|
58 |
-
* @param string $status
|
59 |
* @param string $comment
|
|
|
60 |
* @return DiagnosticResult
|
61 |
*/
|
62 |
-
public static function informationalResult($label, $comment = '')
|
63 |
{
|
64 |
if ($comment === true) {
|
65 |
$comment = '1';
|
66 |
} elseif ($comment === false) {
|
67 |
$comment = '0';
|
68 |
}
|
69 |
-
|
70 |
-
|
71 |
-
|
|
|
|
|
|
|
72 |
}
|
73 |
|
74 |
/**
|
8 |
|
9 |
namespace Piwik\Plugins\Diagnostics\Diagnostic;
|
10 |
|
11 |
+
use Piwik\Common;
|
12 |
+
|
13 |
/**
|
14 |
* The result of a diagnostic.
|
15 |
*
|
57 |
|
58 |
/**
|
59 |
* @param string $label
|
|
|
60 |
* @param string $comment
|
61 |
+
* @param bool $escapeComment
|
62 |
* @return DiagnosticResult
|
63 |
*/
|
64 |
+
public static function informationalResult($label, $comment = '', $escapeComment = true)
|
65 |
{
|
66 |
if ($comment === true) {
|
67 |
$comment = '1';
|
68 |
} elseif ($comment === false) {
|
69 |
$comment = '0';
|
70 |
}
|
71 |
+
|
72 |
+
if ($escapeComment) {
|
73 |
+
$comment = Common::sanitizeInputValue($comment);
|
74 |
+
}
|
75 |
+
|
76 |
+
return self::singleResult($label, self::STATUS_INFORMATIONAL, $comment);
|
77 |
}
|
78 |
|
79 |
/**
|
app/plugins/Diagnostics/Diagnostic/PhpExtensionsCheck.php
CHANGED
@@ -59,11 +59,7 @@ class PhpExtensionsCheck implements Diagnostic
|
|
59 |
{
|
60 |
$requiredExtensions = array(
|
61 |
'zlib',
|
62 |
-
'SPL',
|
63 |
-
'iconv',
|
64 |
'json',
|
65 |
-
'mbstring',
|
66 |
-
'Reflection',
|
67 |
'filter',
|
68 |
'hash',
|
69 |
'session',
|
@@ -75,14 +71,10 @@ class PhpExtensionsCheck implements Diagnostic
|
|
75 |
private function getHelpMessage($missingExtension)
|
76 |
{
|
77 |
$messages = array(
|
78 |
-
'zlib'
|
79 |
-
'
|
80 |
-
'
|
81 |
-
'
|
82 |
-
'mbstring' => 'Installation_SystemCheckMbstringHelp',
|
83 |
-
'Reflection' => 'Required extension that is built in PHP, see http://www.php.net/manual/en/book.reflection.php',
|
84 |
-
'filter' => 'Installation_SystemCheckFilterHelp',
|
85 |
-
'hash' => 'Installation_SystemCheckHashHelp',
|
86 |
'session' => 'Installation_SystemCheckSessionHelp'
|
87 |
);
|
88 |
|
59 |
{
|
60 |
$requiredExtensions = array(
|
61 |
'zlib',
|
|
|
|
|
62 |
'json',
|
|
|
|
|
63 |
'filter',
|
64 |
'hash',
|
65 |
'session',
|
71 |
private function getHelpMessage($missingExtension)
|
72 |
{
|
73 |
$messages = array(
|
74 |
+
'zlib' => 'Installation_SystemCheckZlibHelp',
|
75 |
+
'json' => 'Installation_SystemCheckWarnJsonHelp',
|
76 |
+
'filter' => 'Installation_SystemCheckFilterHelp',
|
77 |
+
'hash' => 'Installation_SystemCheckHashHelp',
|
|
|
|
|
|
|
|
|
78 |
'session' => 'Installation_SystemCheckSessionHelp'
|
79 |
);
|
80 |
|
app/plugins/Diagnostics/Diagnostic/PhpSettingsCheck.php
CHANGED
@@ -58,6 +58,7 @@ class PhpSettingsCheck implements Diagnostic
|
|
58 |
$requiredSettings[] = new RequiredPhpSetting('session.auto_start', 0);
|
59 |
|
60 |
$maxExecutionTime = new RequiredPhpSetting('max_execution_time', 0);
|
|
|
61 |
$maxExecutionTime->addRequiredValue(30, '>=');
|
62 |
$maxExecutionTime->setErrorResult(DiagnosticResult::STATUS_WARNING);
|
63 |
$requiredSettings[] = $maxExecutionTime;
|
58 |
$requiredSettings[] = new RequiredPhpSetting('session.auto_start', 0);
|
59 |
|
60 |
$maxExecutionTime = new RequiredPhpSetting('max_execution_time', 0);
|
61 |
+
$maxExecutionTime->addRequiredValue(-1, '=');
|
62 |
$maxExecutionTime->addRequiredValue(30, '>=');
|
63 |
$maxExecutionTime->setErrorResult(DiagnosticResult::STATUS_WARNING);
|
64 |
$requiredSettings[] = $maxExecutionTime;
|
app/plugins/Diagnostics/Diagnostic/RequiredPrivateDirectories.php
CHANGED
@@ -135,11 +135,11 @@ class RequiredPrivateDirectories implements Diagnostic
|
|
135 |
return true;
|
136 |
}
|
137 |
|
138 |
-
if (trim($response) === $publicIfResponseEquals) {
|
139 |
// we assume it is publicly accessible because either the exact expected content is returned or because we don't check for content match
|
140 |
$result->addItem(new DiagnosticResultItem(DiagnosticResult::STATUS_ERROR, $testUrl));
|
141 |
return true;
|
142 |
-
} elseif (strpos($response, $publicIfResponseContains) !== false) {
|
143 |
// we assume it is publicly accessible because a unique content is included in the response or because we don't check for content contains
|
144 |
$result->addItem(new DiagnosticResultItem(DiagnosticResult::STATUS_ERROR, $testUrl));
|
145 |
return true;
|
135 |
return true;
|
136 |
}
|
137 |
|
138 |
+
if (trim($response['data']) === $publicIfResponseEquals) {
|
139 |
// we assume it is publicly accessible because either the exact expected content is returned or because we don't check for content match
|
140 |
$result->addItem(new DiagnosticResultItem(DiagnosticResult::STATUS_ERROR, $testUrl));
|
141 |
return true;
|
142 |
+
} elseif (strpos($response['data'], $publicIfResponseContains) !== false) {
|
143 |
// we assume it is publicly accessible because a unique content is included in the response or because we don't check for content contains
|
144 |
$result->addItem(new DiagnosticResultItem(DiagnosticResult::STATUS_ERROR, $testUrl));
|
145 |
return true;
|
app/plugins/GeoIp2/GeoIP2AutoUpdater.php
CHANGED
@@ -463,7 +463,7 @@ class GeoIP2AutoUpdater extends Task
|
|
463 |
$schema = $parsedUrl['scheme'] ?? '';
|
464 |
$host = $parsedUrl['host'] ?? '';
|
465 |
|
466 |
-
if (empty($schema) || empty($host) || !in_array(
|
467 |
throw new Exception(Piwik::translate('GeoIp2_MalFormedUpdateUrl', '<i>'.Common::sanitizeInputValue($url).'</i>'));
|
468 |
}
|
469 |
|
463 |
$schema = $parsedUrl['scheme'] ?? '';
|
464 |
$host = $parsedUrl['host'] ?? '';
|
465 |
|
466 |
+
if (empty($schema) || empty($host) || !in_array(mb_strtolower($schema), ['http', 'https'])) {
|
467 |
throw new Exception(Piwik::translate('GeoIp2_MalFormedUpdateUrl', '<i>'.Common::sanitizeInputValue($url).'</i>'));
|
468 |
}
|
469 |
|
app/plugins/GeoIp2/LocationProvider/GeoIp2/Php.php
CHANGED
@@ -274,7 +274,7 @@ class Php extends GeoIp2
|
|
274 |
}
|
275 |
|
276 |
foreach ($regionNames[$countryCode] as $isoCode => $name) {
|
277 |
-
if (
|
278 |
return $isoCode;
|
279 |
}
|
280 |
}
|
274 |
}
|
275 |
|
276 |
foreach ($regionNames[$countryCode] as $isoCode => $name) {
|
277 |
+
if (mb_strtolower($name) === mb_strtolower($regionName)) {
|
278 |
return $isoCode;
|
279 |
}
|
280 |
}
|
app/plugins/Insights/DataTable/Filter/Insight.php
CHANGED
@@ -95,8 +95,19 @@ class Insight extends DataTable\Filter\CalculateEvolutionFilter
|
|
95 |
$this->addRow($table, $row, $growthPercentage, $newValue, $oldValue, $difference, $isDisappeared, $isNew, $isMover);
|
96 |
}
|
97 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
private function getRowFromTable(DataTable $table, DataTable\Row $row)
|
99 |
{
|
|
|
|
|
|
|
100 |
return $table->getRowFromLabel($row->getColumn('label'));
|
101 |
}
|
102 |
|
@@ -116,4 +127,4 @@ class Insight extends DataTable\Filter\CalculateEvolutionFilter
|
|
116 |
|
117 |
$table->addRowFromArray(array(DataTable\Row::COLUMNS => $columns));
|
118 |
}
|
119 |
-
}
|
95 |
$this->addRow($table, $row, $growthPercentage, $newValue, $oldValue, $difference, $isDisappeared, $isNew, $isMover);
|
96 |
}
|
97 |
|
98 |
+
protected function getPastRowFromCurrent($row)
|
99 |
+
{
|
100 |
+
if ($row->isSummaryRow()) {
|
101 |
+
return $this->pastDataTable->getSummaryRow();
|
102 |
+
}
|
103 |
+
return $this->pastDataTable->getRowFromLabel($row->getColumn('label'));
|
104 |
+
}
|
105 |
+
|
106 |
private function getRowFromTable(DataTable $table, DataTable\Row $row)
|
107 |
{
|
108 |
+
if ($row->isSummaryRow()) {
|
109 |
+
return $table->getSummaryRow();
|
110 |
+
}
|
111 |
return $table->getRowFromLabel($row->getColumn('label'));
|
112 |
}
|
113 |
|
127 |
|
128 |
$table->addRowFromArray(array(DataTable\Row::COLUMNS => $columns));
|
129 |
}
|
130 |
+
}
|
app/plugins/Installation/templates/_systemCheckSection.twig
CHANGED
@@ -79,7 +79,7 @@
|
|
79 |
{% elseif item.status == warning %}
|
80 |
{{ warningIcon }} {{ item.comment|raw }}
|
81 |
{% elseif item.status == informational %}
|
82 |
-
{{ infoIcon }} {{ item.comment }}
|
83 |
{% else %}
|
84 |
{{ okIcon }} {{ item.comment|raw }}
|
85 |
{% endif %}
|
79 |
{% elseif item.status == warning %}
|
80 |
{{ warningIcon }} {{ item.comment|raw }}
|
81 |
{% elseif item.status == informational %}
|
82 |
+
{{ infoIcon }} {{ item.comment|raw }}
|
83 |
{% else %}
|
84 |
{{ okIcon }} {{ item.comment|raw }}
|
85 |
{% endif %}
|
app/plugins/Intl/Commands/GenerateIntl.php
CHANGED
@@ -58,7 +58,7 @@ class GenerateIntl extends ConsoleCommand
|
|
58 |
}
|
59 |
|
60 |
preg_match_all("~^(.)(.*)$~u", $str, $arr);
|
61 |
-
return
|
62 |
}
|
63 |
|
64 |
protected function execute(InputInterface $input, OutputInterface $output)
|
58 |
}
|
59 |
|
60 |
preg_match_all("~^(.)(.*)$~u", $str, $arr);
|
61 |
+
return mb_strtoupper($arr[1][0]).$arr[2][0];
|
62 |
}
|
63 |
|
64 |
protected function execute(InputInterface $input, OutputInterface $output)
|
app/plugins/Login/Controller.php
CHANGED
@@ -237,6 +237,10 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
|
|
237 |
*/
|
238 |
function logme()
|
239 |
{
|
|
|
|
|
|
|
|
|
240 |
$password = Common::getRequestVar('password', null, 'string');
|
241 |
|
242 |
$login = Common::getRequestVar('login', null, 'string');
|
@@ -311,6 +315,15 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
|
|
311 |
// remove password reset entry if it exists
|
312 |
$this->passwordResetter->removePasswordResetInfo($login);
|
313 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
314 |
if (empty($urlToRedirect)) {
|
315 |
$redirect = Common::unsanitizeInputValue(Common::getRequestVar('form_redirect', false));
|
316 |
$redirectParams = UrlHelper::getArrayFromQueryString(UrlHelper::getQueryFromUrl($redirect));
|
237 |
*/
|
238 |
function logme()
|
239 |
{
|
240 |
+
if (Config::getInstance()->General['login_allow_logme'] == 0) {
|
241 |
+
throw new Exception('This functionality has been disabled in config');
|
242 |
+
}
|
243 |
+
|
244 |
$password = Common::getRequestVar('password', null, 'string');
|
245 |
|
246 |
$login = Common::getRequestVar('login', null, 'string');
|
315 |
// remove password reset entry if it exists
|
316 |
$this->passwordResetter->removePasswordResetInfo($login);
|
317 |
|
318 |
+
$parsedUrl = parse_url($urlToRedirect);
|
319 |
+
|
320 |
+
// only use redirect url if host is trusted
|
321 |
+
if (!empty($parsedUrl['host']) && !Url::isValidHost($parsedUrl['host'])) {
|
322 |
+
$e = new \Piwik\Exception\Exception('The redirect URL host is not valid, it is not a trusted host. If this URL is trusted, you can allow this in your config.ini.php file by adding the line <i>trusted_hosts[] = "'.Common::sanitizeInputValue($parsedUrl['host']).'"</i> under <i>[General]</i>');
|
323 |
+
$e->setIsHtmlMessage();
|
324 |
+
throw $e;
|
325 |
+
}
|
326 |
+
|
327 |
if (empty($urlToRedirect)) {
|
328 |
$redirect = Common::unsanitizeInputValue(Common::getRequestVar('form_redirect', false));
|
329 |
$redirectParams = UrlHelper::getArrayFromQueryString(UrlHelper::getQueryFromUrl($redirect));
|
app/plugins/Login/Login.php
CHANGED
@@ -66,7 +66,7 @@ class Login extends \Piwik\Plugin
|
|
66 |
$loginPlugin = Piwik::getLoginPluginName();
|
67 |
|
68 |
if ($loginPlugin && $loginPlugin !== 'Login') {
|
69 |
-
$hooks['Controller.'.$loginPlugin.'.logme'] = '
|
70 |
$hooks['Controller.'.$loginPlugin. '.'] = 'beforeLoginCheckBruteForceForUserPwdLogin';
|
71 |
$hooks['Controller.'.$loginPlugin.'.index'] = 'beforeLoginCheckBruteForceForUserPwdLogin';
|
72 |
$hooks['Controller.'.$loginPlugin.'.confirmResetPassword'] = 'beforeLoginCheckBruteForceForUserPwdLogin';
|
@@ -219,11 +219,14 @@ class Login extends \Piwik\Plugin
|
|
219 |
private function getUsernameUsedInPasswordLogin()
|
220 |
{
|
221 |
$login = StaticContainer::get(\Piwik\Auth::class)->getLogin();
|
222 |
-
if (empty($login)
|
223 |
-
|| $login == 'anonymous'
|
224 |
-
) {
|
225 |
$login = Common::getRequestVar('form_login', false);
|
|
|
|
|
|
|
|
|
226 |
}
|
|
|
227 |
return $login;
|
228 |
}
|
229 |
|
66 |
$loginPlugin = Piwik::getLoginPluginName();
|
67 |
|
68 |
if ($loginPlugin && $loginPlugin !== 'Login') {
|
69 |
+
$hooks['Controller.'.$loginPlugin.'.logme'] = 'beforeLoginCheckBruteForceForUserPwdLogin';
|
70 |
$hooks['Controller.'.$loginPlugin. '.'] = 'beforeLoginCheckBruteForceForUserPwdLogin';
|
71 |
$hooks['Controller.'.$loginPlugin.'.index'] = 'beforeLoginCheckBruteForceForUserPwdLogin';
|
72 |
$hooks['Controller.'.$loginPlugin.'.confirmResetPassword'] = 'beforeLoginCheckBruteForceForUserPwdLogin';
|
219 |
private function getUsernameUsedInPasswordLogin()
|
220 |
{
|
221 |
$login = StaticContainer::get(\Piwik\Auth::class)->getLogin();
|
222 |
+
if (empty($login) || $login == 'anonymous') {
|
|
|
|
|
223 |
$login = Common::getRequestVar('form_login', false);
|
224 |
+
$action = Common::getRequestVar('action', false);
|
225 |
+
if ($action == 'logme') {
|
226 |
+
$login = Common::getRequestVar('login', $login);
|
227 |
+
}
|
228 |
}
|
229 |
+
|
230 |
return $login;
|
231 |
}
|
232 |
|
app/plugins/MobileMessaging/SMSProvider.php
CHANGED
@@ -217,7 +217,7 @@ abstract class SMSProvider
|
|
217 |
private static function sizeOfSMSContent($smsContent, $containsUCS2Chars)
|
218 |
{
|
219 |
if ($containsUCS2Chars) {
|
220 |
-
return
|
221 |
}
|
222 |
|
223 |
$sizeOfSMSContent = 0;
|
217 |
private static function sizeOfSMSContent($smsContent, $containsUCS2Chars)
|
218 |
{
|
219 |
if ($containsUCS2Chars) {
|
220 |
+
return mb_strlen($smsContent);
|
221 |
}
|
222 |
|
223 |
$sizeOfSMSContent = 0;
|
app/plugins/Monolog/Processor/ExceptionToTextProcessor.php
CHANGED
@@ -8,12 +8,14 @@
|
|
8 |
|
9 |
namespace Piwik\Plugins\Monolog\Processor;
|
10 |
|
|
|
11 |
use Piwik\Db;
|
12 |
use Piwik\ErrorHandler;
|
13 |
use Piwik\Exception\InvalidRequestParameterException;
|
14 |
use Piwik\Log;
|
15 |
use Piwik\Piwik;
|
16 |
use Piwik\SettingsPiwik;
|
|
|
17 |
|
18 |
/**
|
19 |
* Process a log record containing an exception to generate a textual message.
|
@@ -55,6 +57,8 @@ class ExceptionToTextProcessor
|
|
55 |
$record['message'] = str_replace('{exception}', $exceptionStr, $record['message']);
|
56 |
}
|
57 |
|
|
|
|
|
58 |
return $record;
|
59 |
}
|
60 |
|
@@ -144,4 +148,16 @@ class ExceptionToTextProcessor
|
|
144 |
|
145 |
return str_replace(array_keys($valuesToReplace), array_values($valuesToReplace), $trace);
|
146 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
}
|
8 |
|
9 |
namespace Piwik\Plugins\Monolog\Processor;
|
10 |
|
11 |
+
use Piwik\Common;
|
12 |
use Piwik\Db;
|
13 |
use Piwik\ErrorHandler;
|
14 |
use Piwik\Exception\InvalidRequestParameterException;
|
15 |
use Piwik\Log;
|
16 |
use Piwik\Piwik;
|
17 |
use Piwik\SettingsPiwik;
|
18 |
+
use Piwik\Url;
|
19 |
|
20 |
/**
|
21 |
* Process a log record containing an exception to generate a textual message.
|
57 |
$record['message'] = str_replace('{exception}', $exceptionStr, $record['message']);
|
58 |
}
|
59 |
|
60 |
+
$record['message'] .= ' [' . $this->getErrorContext() . ']';
|
61 |
+
|
62 |
return $record;
|
63 |
}
|
64 |
|
148 |
|
149 |
return str_replace(array_keys($valuesToReplace), array_values($valuesToReplace), $trace);
|
150 |
}
|
151 |
+
|
152 |
+
private function getErrorContext()
|
153 |
+
{
|
154 |
+
try {
|
155 |
+
$context = 'Query: ' . Url::getCurrentQueryString();
|
156 |
+
$context .= ', CLI mode: ' . (int)Common::isPhpCliMode();
|
157 |
+
return $context;
|
158 |
+
} catch (\Exception $ex) {
|
159 |
+
$context = "cannot get url or cli mode: " . $ex->getMessage();
|
160 |
+
return $context;
|
161 |
+
}
|
162 |
+
}
|
163 |
}
|
app/plugins/Monolog/config/config.php
CHANGED
@@ -17,6 +17,8 @@ return array(
|
|
17 |
'file' => 'Piwik\Plugins\Monolog\Handler\FileHandler',
|
18 |
'screen' => 'Piwik\Plugins\Monolog\Handler\WebNotificationHandler',
|
19 |
'database' => 'Piwik\Plugins\Monolog\Handler\DatabaseHandler',
|
|
|
|
|
20 |
),
|
21 |
'log.handlers' => DI\factory(function (\DI\Container $c) {
|
22 |
if ($c->has('ini.log.log_writers')) {
|
@@ -97,6 +99,14 @@ return array(
|
|
97 |
'Piwik\Plugins\Monolog\Handler\FileHandler' => DI\create()
|
98 |
->constructor(DI\get('log.file.filename'), DI\get('log.level.file'))
|
99 |
->method('setFormatter', DI\get('log.lineMessageFormatter.file')),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
|
101 |
'Piwik\Plugins\Monolog\Handler\DatabaseHandler' => DI\create()
|
102 |
->constructor(DI\get('log.level.database'))
|
@@ -147,6 +157,26 @@ return array(
|
|
147 |
return $c->get('log.level');
|
148 |
}),
|
149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
'log.file.filename' => DI\factory(function (ContainerInterface $c) {
|
151 |
$logPath = $c->get('ini.log.logger_file_path');
|
152 |
|
@@ -172,6 +202,14 @@ return array(
|
|
172 |
|
173 |
return $logPath;
|
174 |
}),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
|
176 |
'Piwik\Plugins\Monolog\Formatter\LineMessageFormatter' => DI\create('Piwik\Plugins\Monolog\Formatter\LineMessageFormatter')
|
177 |
->constructor(DI\get('log.short.format')),
|
17 |
'file' => 'Piwik\Plugins\Monolog\Handler\FileHandler',
|
18 |
'screen' => 'Piwik\Plugins\Monolog\Handler\WebNotificationHandler',
|
19 |
'database' => 'Piwik\Plugins\Monolog\Handler\DatabaseHandler',
|
20 |
+
'errorlog' => '\Monolog\Handler\ErrorLogHandler',
|
21 |
+
'syslog' => '\Monolog\Handler\SyslogHandler',
|
22 |
),
|
23 |
'log.handlers' => DI\factory(function (\DI\Container $c) {
|
24 |
if ($c->has('ini.log.log_writers')) {
|
99 |
'Piwik\Plugins\Monolog\Handler\FileHandler' => DI\create()
|
100 |
->constructor(DI\get('log.file.filename'), DI\get('log.level.file'))
|
101 |
->method('setFormatter', DI\get('log.lineMessageFormatter.file')),
|
102 |
+
|
103 |
+
'\Monolog\Handler\ErrorLogHandler' => DI\autowire()
|
104 |
+
->constructorParameter('level', DI\get('log.level.errorlog'))
|
105 |
+
->method('setFormatter', DI\get('log.lineMessageFormatter.file')),
|
106 |
+
|
107 |
+
'\Monolog\Handler\SyslogHandler' => DI\create()
|
108 |
+
->constructor(DI\get('log.syslog.ident'), 'syslog', DI\get('log.level.syslog'))
|
109 |
+
->method('setFormatter', DI\get('log.lineMessageFormatter.file')),
|
110 |
|
111 |
'Piwik\Plugins\Monolog\Handler\DatabaseHandler' => DI\create()
|
112 |
->constructor(DI\get('log.level.database'))
|
157 |
return $c->get('log.level');
|
158 |
}),
|
159 |
|
160 |
+
'log.level.syslog' => DI\factory(function (ContainerInterface $c) {
|
161 |
+
if ($c->has('ini.log.log_level_syslog')) {
|
162 |
+
$level = Log::getMonologLevelIfValid($c->get('ini.log.log_level_syslog'));
|
163 |
+
if ($level !== null) {
|
164 |
+
return $level;
|
165 |
+
}
|
166 |
+
}
|
167 |
+
return $c->get('log.level');
|
168 |
+
}),
|
169 |
+
|
170 |
+
'log.level.errorlog' => DI\factory(function (ContainerInterface $c) {
|
171 |
+
if ($c->has('ini.log.log_level_errorlog')) {
|
172 |
+
$level = Log::getMonologLevelIfValid($c->get('ini.log.log_level_errorlog'));
|
173 |
+
if ($level !== null) {
|
174 |
+
return $level;
|
175 |
+
}
|
176 |
+
}
|
177 |
+
return $c->get('log.level');
|
178 |
+
}),
|
179 |
+
|
180 |
'log.file.filename' => DI\factory(function (ContainerInterface $c) {
|
181 |
$logPath = $c->get('ini.log.logger_file_path');
|
182 |
|
202 |
|
203 |
return $logPath;
|
204 |
}),
|
205 |
+
|
206 |
+
'log.syslog.ident' => DI\factory(function (ContainerInterface $c) {
|
207 |
+
$ident = $c->get('ini.log.logger_syslog_ident');
|
208 |
+
if (empty($ident)) {
|
209 |
+
$ident = 'matomo';
|
210 |
+
}
|
211 |
+
return $ident;
|
212 |
+
}),
|
213 |
|
214 |
'Piwik\Plugins\Monolog\Formatter\LineMessageFormatter' => DI\create('Piwik\Plugins\Monolog\Formatter\LineMessageFormatter')
|
215 |
->constructor(DI\get('log.short.format')),
|
app/plugins/Morpheus/fonts/matomo.svg
CHANGED
@@ -130,6 +130,7 @@
|
|
130 |
<glyph unicode="" glyph-name="info_outline" data-tags="info_outline" d="M461.521 580.507v103.361h100.958v-103.361h-100.958zM512 15.625c225.953 0 411.042 185.089 411.042 411.042s-185.089 411.042-411.042 411.042-411.042-185.089-411.042-411.042 185.089-411.042 411.042-411.042zM512 938.667c283.643 0 512-228.357 512-512s-228.357-512-512-512-512 228.357-512 512 228.357 512 512 512zM461.521 169.465v307.681h100.958v-307.681h-100.958z" />
|
131 |
<glyph unicode="" glyph-name="settings" data-tags="settings" d="M512 246.385c98.554 0 180.282 81.728 180.282 180.282s-81.728 180.282-180.282 180.282-180.282-81.728-180.282-180.282 81.728-180.282 180.282-180.282zM894.197 376.188l108.169-84.131c9.615-7.211 12.019-21.634 4.808-33.653l-103.361-177.878c-7.211-12.019-19.23-14.423-31.249-9.615l-127.399 50.479c-26.441-19.23-55.286-38.46-86.535-50.479l-19.23-134.61c-2.404-12.019-12.019-21.634-24.038-21.634h-206.723c-12.019 0-21.634 9.615-24.038 21.634l-19.23 134.61c-31.249 12.019-60.094 28.845-86.535 50.479l-127.399-50.479c-12.019-4.808-24.038-2.404-31.249 9.615l-103.361 177.878c-7.211 12.019-4.808 26.441 4.808 33.653l108.169 84.131c-2.404 16.826-2.404 33.653-2.404 50.479s0 33.653 2.404 50.479l-108.169 84.131c-9.615 7.211-12.019 21.634-4.808 33.653l103.361 177.878c7.211 12.019 19.23 14.423 31.249 9.615l127.399-50.479c26.441 19.23 55.286 38.46 86.535 50.479l19.23 134.61c2.404 12.019 12.019 21.634 24.038 21.634h206.723c12.019 0 21.634-9.615 24.038-21.634l19.23-134.61c31.249-12.019 60.094-28.845 86.535-50.479l127.399 50.479c12.019 4.808 24.038 2.404 31.249-9.615l103.361-177.878c7.211-12.019 4.808-26.441-4.808-33.653l-108.169-84.131c2.404-16.826 2.404-33.653 2.404-50.479s0-33.653-2.404-50.479z" />
|
132 |
<glyph unicode="" glyph-name="segmented-visits-log" data-tags="contacts" d="M726 212.667v64c0 72-142 108-214 108s-214-36-214-108v-64h428zM512 650.667c-52 0-96-44-96-96s44-96 96-96 96 44 96 96-44 96-96 96zM854 768.667c46 0 84-40 84-86v-512c0-46-38-86-84-86h-684c-46 0-84 40-84 86v512c0 46 38 86 84 86h684zM170-85.333v86h684v-86h-684zM854 938.667v-86h-684v86h684z" />
|
|
|
133 |
<glyph unicode="" glyph-name="evolution" data-tags="timeline" d="M982 596.667c0-46-40-84-86-84-8 0-16 0-22 2l-152-152c2-6 4-14 4-22 0-46-40-84-86-84s-86 38-86 84c0 8 2 16 4 22l-110 110c-6-2-14-4-22-4s-16 2-22 4l-194-194c2-6 4-14 4-22 0-46-40-86-86-86s-86 40-86 86 40 84 86 84c8 0 16 0 22-2l194 194c-2 6-2 14-2 22 0 46 38 86 84 86s86-40 86-86c0-8 0-16-2-22l108-108c6 2 14 2 22 2s16 0 22-2l152 150c-2 6-4 14-4 22 0 46 40 86 86 86s86-40 86-86z" />
|
134 |
<glyph unicode="" glyph-name="archive" data-tags="box-add, box, download, storage, inbox, archive" d="M832 896h-640l-192-192v-672c0-17.674 14.326-32 32-32h960c17.672 0 32 14.326 32 32v672l-192 192zM512 128l-320 256h192v192h256v-192h192l-320-256zM154.51 768l64 64h586.978l64-64h-714.978z" />
|
135 |
<glyph unicode="" glyph-name="rocket" data-tags="rocket, jet, speed, spaceship, fast" d="M704 896l-320-320h-192l-192-256c0 0 203.416 56.652 322.066 30.084l-322.066-414.084 421.902 328.144c58.838-134.654-37.902-328.144-37.902-328.144l256 192v192l320 320 64 320-320-64z" />
|
130 |
<glyph unicode="" glyph-name="info_outline" data-tags="info_outline" d="M461.521 580.507v103.361h100.958v-103.361h-100.958zM512 15.625c225.953 0 411.042 185.089 411.042 411.042s-185.089 411.042-411.042 411.042-411.042-185.089-411.042-411.042 185.089-411.042 411.042-411.042zM512 938.667c283.643 0 512-228.357 512-512s-228.357-512-512-512-512 228.357-512 512 228.357 512 512 512zM461.521 169.465v307.681h100.958v-307.681h-100.958z" />
|
131 |
<glyph unicode="" glyph-name="settings" data-tags="settings" d="M512 246.385c98.554 0 180.282 81.728 180.282 180.282s-81.728 180.282-180.282 180.282-180.282-81.728-180.282-180.282 81.728-180.282 180.282-180.282zM894.197 376.188l108.169-84.131c9.615-7.211 12.019-21.634 4.808-33.653l-103.361-177.878c-7.211-12.019-19.23-14.423-31.249-9.615l-127.399 50.479c-26.441-19.23-55.286-38.46-86.535-50.479l-19.23-134.61c-2.404-12.019-12.019-21.634-24.038-21.634h-206.723c-12.019 0-21.634 9.615-24.038 21.634l-19.23 134.61c-31.249 12.019-60.094 28.845-86.535 50.479l-127.399-50.479c-12.019-4.808-24.038-2.404-31.249 9.615l-103.361 177.878c-7.211 12.019-4.808 26.441 4.808 33.653l108.169 84.131c-2.404 16.826-2.404 33.653-2.404 50.479s0 33.653 2.404 50.479l-108.169 84.131c-9.615 7.211-12.019 21.634-4.808 33.653l103.361 177.878c7.211 12.019 19.23 14.423 31.249 9.615l127.399-50.479c26.441 19.23 55.286 38.46 86.535 50.479l19.23 134.61c2.404 12.019 12.019 21.634 24.038 21.634h206.723c12.019 0 21.634-9.615 24.038-21.634l19.23-134.61c31.249-12.019 60.094-28.845 86.535-50.479l127.399 50.479c12.019 4.808 24.038 2.404 31.249-9.615l103.361-177.878c7.211-12.019 4.808-26.441-4.808-33.653l-108.169-84.131c2.404-16.826 2.404-33.653 2.404-50.479s0-33.653-2.404-50.479z" />
|
132 |
<glyph unicode="" glyph-name="segmented-visits-log" data-tags="contacts" d="M726 212.667v64c0 72-142 108-214 108s-214-36-214-108v-64h428zM512 650.667c-52 0-96-44-96-96s44-96 96-96 96 44 96 96-44 96-96 96zM854 768.667c46 0 84-40 84-86v-512c0-46-38-86-84-86h-684c-46 0-84 40-84 86v512c0 46 38 86 84 86h684zM170-85.333v86h684v-86h-684zM854 938.667v-86h-684v86h684z" />
|
133 |
+
<glyph unicode="" glyph-name="watch_later" data-tags="watch_later" d="M692 246.667l34 56-192 116v222h-64v-256zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125z" />
|
134 |
<glyph unicode="" glyph-name="evolution" data-tags="timeline" d="M982 596.667c0-46-40-84-86-84-8 0-16 0-22 2l-152-152c2-6 4-14 4-22 0-46-40-84-86-84s-86 38-86 84c0 8 2 16 4 22l-110 110c-6-2-14-4-22-4s-16 2-22 4l-194-194c2-6 4-14 4-22 0-46-40-86-86-86s-86 40-86 86 40 84 86 84c8 0 16 0 22-2l194 194c-2 6-2 14-2 22 0 46 38 86 84 86s86-40 86-86c0-8 0-16-2-22l108-108c6 2 14 2 22 2s16 0 22-2l152 150c-2 6-4 14-4 22 0 46 40 86 86 86s86-40 86-86z" />
|
135 |
<glyph unicode="" glyph-name="archive" data-tags="box-add, box, download, storage, inbox, archive" d="M832 896h-640l-192-192v-672c0-17.674 14.326-32 32-32h960c17.672 0 32 14.326 32 32v672l-192 192zM512 128l-320 256h192v192h256v-192h192l-320-256zM154.51 768l64 64h586.978l64-64h-714.978z" />
|
136 |
<glyph unicode="" glyph-name="rocket" data-tags="rocket, jet, speed, spaceship, fast" d="M704 896l-320-320h-192l-192-256c0 0 203.416 56.652 322.066 30.084l-322.066-414.084 421.902 328.144c58.838-134.654-37.902-328.144-37.902-328.144l256 192v192l320 320 64 320-320-64z" />
|
app/plugins/Morpheus/fonts/matomo.ttf
CHANGED
Binary file
|
app/plugins/Morpheus/fonts/matomo.woff
CHANGED
Binary file
|
app/plugins/Morpheus/fonts/matomo.woff2
CHANGED
Binary file
|
app/plugins/Morpheus/stylesheets/base/icons.css
CHANGED
@@ -387,4 +387,7 @@
|
|
387 |
}
|
388 |
.icon-page-performance:before {
|
389 |
content: "\e9a6";
|
390 |
-
}
|
|
|
|
|
|
387 |
}
|
388 |
.icon-page-performance:before {
|
389 |
content: "\e9a6";
|
390 |
+
}
|
391 |
+
.icon-clock:before {
|
392 |
+
content: "\e901";
|
393 |
+
}
|
app/plugins/Morpheus/templates/demo.twig
CHANGED
@@ -667,7 +667,8 @@
|
|
667 |
'form',
|
668 |
'transition',
|
669 |
'overlay',
|
670 |
-
'lab'
|
|
|
671 |
],
|
672 |
'Users': [
|
673 |
'user',
|
667 |
'form',
|
668 |
'transition',
|
669 |
'overlay',
|
670 |
+
'lab',
|
671 |
+
'clock'
|
672 |
],
|
673 |
'Users': [
|
674 |
'user',
|
app/plugins/Morpheus/templates/javascriptCode.twig
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
<!-- Matomo -->
|
2 |
-
<script
|
3 |
var _paq = window._paq = window._paq || [];
|
4 |
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
5 |
{$options} _paq.push(['trackPageView']);
|
@@ -9,11 +9,11 @@
|
|
9 |
{$optionsBeforeTrackerUrl}_paq.push(['setTrackerUrl', u+'{$matomoPhpFilename}']);
|
10 |
_paq.push(['setSiteId', '{$idSite}']);
|
11 |
{% if loadAsync %}var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
12 |
-
g.
|
13 |
|
14 |
})();
|
15 |
</script>
|
16 |
-
{% if not loadAsync %}<script
|
17 |
{% endif %}
|
18 |
{% if trackNoScript %}<noscript><p><img src="{$protocol}{$piwikUrl}/{$matomoPhpFilename}?idsite={$idSite}&rec=1" style="border:0;" alt="" /></p></noscript>
|
19 |
{% endif %}
|
1 |
<!-- Matomo -->
|
2 |
+
<script>
|
3 |
var _paq = window._paq = window._paq || [];
|
4 |
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
5 |
{$options} _paq.push(['trackPageView']);
|
9 |
{$optionsBeforeTrackerUrl}_paq.push(['setTrackerUrl', u+'{$matomoPhpFilename}']);
|
10 |
_paq.push(['setSiteId', '{$idSite}']);
|
11 |
{% if loadAsync %}var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
12 |
+
g.async=true; g.src=u+'{$matomoJsFilename}'; s.parentNode.insertBefore(g,s);{% endif %}
|
13 |
|
14 |
})();
|
15 |
</script>
|
16 |
+
{% if not loadAsync %}<script src="{$protocol}{$piwikUrl}/{$matomoJsFilename}"></script>
|
17 |
{% endif %}
|
18 |
{% if trackNoScript %}<noscript><p><img src="{$protocol}{$piwikUrl}/{$matomoPhpFilename}?idsite={$idSite}&rec=1" style="border:0;" alt="" /></p></noscript>
|
19 |
{% endif %}
|
app/plugins/MultiSites/API.php
CHANGED
@@ -267,12 +267,27 @@ class API extends \Piwik\Plugin\API
|
|
267 |
}
|
268 |
|
269 |
// move the site id to a metadata column
|
270 |
-
$dataTable->queueFilter('MetadataCallbackAddMetadata', array('idsite', 'group',
|
271 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
272 |
|
273 |
// set the label of each row to the site name
|
274 |
if ($multipleWebsitesRequested) {
|
275 |
-
$dataTable->queueFilter('ColumnCallbackReplace', array('label',
|
|
|
|
|
|
|
|
|
|
|
276 |
} else {
|
277 |
$dataTable->queueFilter('ColumnDelete', array('label'));
|
278 |
}
|
267 |
}
|
268 |
|
269 |
// move the site id to a metadata column
|
270 |
+
$dataTable->queueFilter('MetadataCallbackAddMetadata', array('idsite', 'group', function($idSite) {
|
271 |
+
if ($idSite == '-1') { // Others row might occur when `filter_truncate` API parameter is used
|
272 |
+
return '';
|
273 |
+
}
|
274 |
+
return Site::getGroupFor($idSite);
|
275 |
+
}, array()));
|
276 |
+
$dataTable->queueFilter('MetadataCallbackAddMetadata', array('idsite', 'main_url', function($idSite) {
|
277 |
+
if ($idSite == '-1') { // Others row might occur when `filter_truncate` API parameter is used
|
278 |
+
return '';
|
279 |
+
}
|
280 |
+
return Site::getMainUrlFor($idSite);
|
281 |
+
}, array()));
|
282 |
|
283 |
// set the label of each row to the site name
|
284 |
if ($multipleWebsitesRequested) {
|
285 |
+
$dataTable->queueFilter('ColumnCallbackReplace', array('label', function($idSite) {
|
286 |
+
if ($idSite == '-1') { // Others row might occur when `filter_truncate` API parameter is used
|
287 |
+
return Piwik::translate('General_Others');
|
288 |
+
}
|
289 |
+
return Site::getNameFor($idSite);
|
290 |
+
}));
|
291 |
} else {
|
292 |
$dataTable->queueFilter('ColumnDelete', array('label'));
|
293 |
}
|
app/plugins/MultiSites/angularjs/site/site.directive.html
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<tr ng-class="{'groupedWebsite': website.group, 'website': !website.group, 'group': website.isGroup}">
|
2 |
<td ng-if="!website.isGroup" class="multisites-label label">
|
3 |
-
<a title="View reports" ng-href="
|
4 |
|
5 |
<span>
|
6 |
<a rel="noreferrer noopener" target="_blank" title="{{ 'General_GoTo'|translate:website.main_url }}" ng-href="{{ website.main_url }}">
|
@@ -30,7 +30,7 @@
|
|
30 |
|
31 |
<td ng-if="showSparklines" style="width:180px;">
|
32 |
<div ng-if="!website.isGroup" class="sparkline" style="width: 100px; margin: auto;">
|
33 |
-
<a rel="noreferrer noopener" target="_blank" ng-href="
|
34 |
title="{{ 'General_GoTo'|translate:('Dashboard_DashboardOf'|translate:website.label) }}">
|
35 |
<img alt="" ng-src="{{ sparklineImage(website) }}" width="100" height="25" />
|
36 |
</a>
|
1 |
<tr ng-class="{'groupedWebsite': website.group, 'website': !website.group, 'group': website.isGroup}">
|
2 |
<td ng-if="!website.isGroup" class="multisites-label label">
|
3 |
+
<a title="View reports" ng-href="{{ dashboardUrl(website) }}" class="value truncated-text-line">{{ website.label }}</a>
|
4 |
|
5 |
<span>
|
6 |
<a rel="noreferrer noopener" target="_blank" title="{{ 'General_GoTo'|translate:website.main_url }}" ng-href="{{ website.main_url }}">
|
30 |
|
31 |
<td ng-if="showSparklines" style="width:180px;">
|
32 |
<div ng-if="!website.isGroup" class="sparkline" style="width: 100px; margin: auto;">
|
33 |
+
<a rel="noreferrer noopener" target="_blank" ng-href="{{ dashboardUrl(website) }}"
|
34 |
title="{{ 'General_GoTo'|translate:('Dashboard_DashboardOf'|translate:website.label) }}">
|
35 |
<img alt="" ng-src="{{ sparklineImage(website) }}" width="100" height="25" />
|
36 |
</a>
|
app/plugins/Overlay/client/client.js-e
DELETED
@@ -1,258 +0,0 @@
|
|
1 |
-
var Matomo_Overlay_Client = (function () {
|
2 |
-
|
3 |
-
var DOMAIN_PARSE_REGEX = /^http(s)?:\/\/(www\.)?([^\/]*)/i;
|
4 |
-
|
5 |
-
/** jQuery */
|
6 |
-
var $;
|
7 |
-
|
8 |
-
/** Url of the Piwik root */
|
9 |
-
var piwikRoot;
|
10 |
-
|
11 |
-
/** protocol and domain of Piwik root */
|
12 |
-
var piwikOrigin;
|
13 |
-
|
14 |
-
/** Piwik idsite */
|
15 |
-
var idSite;
|
16 |
-
|
17 |
-
/** The current period and date */
|
18 |
-
var period, date, segment;
|
19 |
-
|
20 |
-
/** Reference to the status bar DOM element */
|
21 |
-
var statusBar;
|
22 |
-
|
23 |
-
/** Counter for request IDs for postMessage based API requests. */
|
24 |
-
var lastRequestId = 0;
|
25 |
-
|
26 |
-
/** Map of callbacks for postMessage based API requests. */
|
27 |
-
var requestCallbacks = {};
|
28 |
-
|
29 |
-
/** Load the client CSS */
|
30 |
-
function loadCss() {
|
31 |
-
var css = c('link').attr({
|
32 |
-
rel: 'stylesheet',
|
33 |
-
type: 'text/css',
|
34 |
-
href: piwikRoot + '/plugins/Overlay/client/client.css'
|
35 |
-
});
|
36 |
-
$('head').append(css);
|
37 |
-
}
|
38 |
-
|
39 |
-
/**
|
40 |
-
* This method loads jQuery, if it is not there yet.
|
41 |
-
* The callback is triggered after jQuery is loaded.
|
42 |
-
*/
|
43 |
-
function loadJQuery(callback) {
|
44 |
-
if (typeof jQuery != 'undefined') {
|
45 |
-
$ = jQuery;
|
46 |
-
callback();
|
47 |
-
}
|
48 |
-
else {
|
49 |
-
Matomo_Overlay_Client.loadScript('node_modules/jquery/dist/jquery.min.js', function () {
|
50 |
-
$ = jQuery;
|
51 |
-
jQuery.noConflict();
|
52 |
-
callback();
|
53 |
-
});
|
54 |
-
}
|
55 |
-
}
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Notify Piwik of the current iframe location.
|
59 |
-
* This way, we can display additional metrics on the side of the iframe.
|
60 |
-
*/
|
61 |
-
function notifyPiwikOfLocation() {
|
62 |
-
// check whether the session has been opened in a new tab (instead of an iframe)
|
63 |
-
if (window != window.top) {
|
64 |
-
var iframe = c('iframe', false, {
|
65 |
-
src: piwikRoot + '/index.php?module=Overlay&action=notifyParentIframe#' + window.location.href
|
66 |
-
}).css({width: 0, height: 0, border: 0});
|
67 |
-
|
68 |
-
$('body').append(iframe);
|
69 |
-
}
|
70 |
-
}
|
71 |
-
|
72 |
-
/** Create a jqueryfied DOM element */
|
73 |
-
function c(tagName, className, attributes) {
|
74 |
-
var el = $(document.createElement(tagName));
|
75 |
-
|
76 |
-
if (className) {
|
77 |
-
if (className.substring(0, 1) == '#') {
|
78 |
-
var id = className.substring(1, className.length);
|
79 |
-
id = 'PIS_' + id;
|
80 |
-
el.attr('id', id);
|
81 |
-
}
|
82 |
-
else {
|
83 |
-
className = 'PIS_' + className;
|
84 |
-
el.addClass(className);
|
85 |
-
}
|
86 |
-
}
|
87 |
-
|
88 |
-
if (attributes) {
|
89 |
-
el.attr(attributes);
|
90 |
-
}
|
91 |
-
|
92 |
-
return el;
|
93 |
-
}
|
94 |
-
|
95 |
-
function nextRequestId() {
|
96 |
-
var nextId = lastRequestId + 1;
|
97 |
-
lastRequestId = nextId;
|
98 |
-
return nextId;
|
99 |
-
}
|
100 |
-
|
101 |
-
function handlePostMessages() {
|
102 |
-
window.addEventListener("message", function (event) {
|
103 |
-
if (event.origin !== piwikOrigin) {
|
104 |
-
return;
|
105 |
-
}
|
106 |
-
|
107 |
-
var strData = event.data.split(':', 3);
|
108 |
-
if (strData[0] !== 'overlay.response') {
|
109 |
-
return;
|
110 |
-
}
|
111 |
-
|
112 |
-
var requestId = strData[1];
|
113 |
-
if (!requestCallbacks[requestId]) {
|
114 |
-
return;
|
115 |
-
}
|
116 |
-
|
117 |
-
var callback = requestCallbacks[requestId];
|
118 |
-
delete requestCallbacks[requestId];
|
119 |
-
|
120 |
-
var data = JSON.parse(decodeURIComponent(strData[2]));
|
121 |
-
if (typeof data.result !== 'undefined'
|
122 |
-
&& data.result === 'error'
|
123 |
-
) {
|
124 |
-
alert('Error: ' + data.message);
|
125 |
-
} else {
|
126 |
-
callback(data);
|
127 |
-
}
|
128 |
-
}, false);
|
129 |
-
}
|
130 |
-
|
131 |
-
return {
|
132 |
-
|
133 |
-
/** Initialize in-site analytics */
|
134 |
-
initialize: function (pPiwikRoot, pIdSite, pPeriod, pDate, pSegment) {
|
135 |
-
piwikRoot = pPiwikRoot;
|
136 |
-
piwikOrigin = piwikRoot.match(DOMAIN_PARSE_REGEX)[0];
|
137 |
-
idSite = pIdSite;
|
138 |
-
period = pPeriod;
|
139 |
-
date = pDate;
|
140 |
-
segment = pSegment;
|
141 |
-
|
142 |
-
var load = this.loadScript;
|
143 |
-
var loading = this.loadingNotification;
|
144 |
-
|
145 |
-
loadJQuery(function () {
|
146 |
-
handlePostMessages();
|
147 |
-
notifyPiwikOfLocation();
|
148 |
-
loadCss();
|
149 |
-
|
150 |
-
// translations
|
151 |
-
load('plugins/Overlay/client/translations.js', function () {
|
152 |
-
Piwik_Overlay_Translations.initialize(function () {
|
153 |
-
// following pages
|
154 |
-
var finishPages = loading('Loading following pages');
|
155 |
-
load('plugins/Overlay/client/followingpages.js', function () {
|
156 |
-
Piwik_Overlay_FollowingPages.initialize(finishPages);
|
157 |
-
});
|
158 |
-
|
159 |
-
});
|
160 |
-
});
|
161 |
-
});
|
162 |
-
},
|
163 |
-
|
164 |
-
/** Create a jqueryfied DOM element */
|
165 |
-
createElement: function (tagName, className, attributes) {
|
166 |
-
return c(tagName, className, attributes);
|
167 |
-
},
|
168 |
-
|
169 |
-
/** Load a script and wait for it to be loaded */
|
170 |
-
loadScript: function (relativePath, callback) {
|
171 |
-
var loaded = false;
|
172 |
-
var onLoad = function () {
|
173 |
-
if (!loaded) {
|
174 |
-
loaded = true;
|
175 |
-
callback();
|
176 |
-
}
|
177 |
-
};
|
178 |
-
|
179 |
-
var head = document.getElementsByTagName('head')[0];
|
180 |
-
var script = document.createElement('script');
|
181 |
-
script.type = 'text/javascript';
|
182 |
-
|
183 |
-
script.onreadystatechange = function () {
|
184 |
-
if (this.readyState == 'loaded' || this.readyState == 'complete') {
|
185 |
-
onLoad();
|
186 |
-
}
|
187 |
-
};
|
188 |
-
script.onload = onLoad;
|
189 |
-
|
190 |
-
script.src = piwikRoot + '/' + relativePath + '?v=1';
|
191 |
-
head.appendChild(script);
|
192 |
-
},
|
193 |
-
|
194 |
-
/** Piwik Overlay API Request */
|
195 |
-
api: function (method, callback, additionalParams) {
|
196 |
-
var url = piwikRoot + '/index.php?module=API&method=Overlay.' + method
|
197 |
-
+ '&idSite=' + idSite + '&period=' + period + '&date=' + date + '&format=JSON&filter_limit=-1';
|
198 |
-
|
199 |
-
if (segment) {
|
200 |
-
url += '&segment=' + segment;
|
201 |
-
}
|
202 |
-
|
203 |
-
if (additionalParams) {
|
204 |
-
url += '&' + additionalParams;
|
205 |
-
}
|
206 |
-
|
207 |
-
var requestId = nextRequestId();
|
208 |
-
requestCallbacks[requestId] = callback;
|
209 |
-
|
210 |
-
var matomoFrame = window.parent;
|
211 |
-
matomoFrame.postMessage('overlay.call:' + requestId + ':' + encodeURIComponent(url), piwikOrigin);
|
212 |
-
},
|
213 |
-
|
214 |
-
/**
|
215 |
-
* Initialize a notification
|
216 |
-
* To hide the notification use the returned callback
|
217 |
-
*/
|
218 |
-
notification: function (message, addClass) {
|
219 |
-
if (!statusBar) {
|
220 |
-
statusBar = c('div', '#StatusBar').css('opacity', .8);
|
221 |
-
$('body').prepend(statusBar);
|
222 |
-
}
|
223 |
-
|
224 |
-
var item = c('div', 'Item').html(message);
|
225 |
-
|
226 |
-
if (addClass) {
|
227 |
-
item.addClass('PIS_' + addClass);
|
228 |
-
}
|
229 |
-
|
230 |
-
statusBar.show().append(item);
|
231 |
-
|
232 |
-
return function () {
|
233 |
-
item.remove();
|
234 |
-
if (!statusBar.children().length) {
|
235 |
-
statusBar.hide();
|
236 |
-
}
|
237 |
-
};
|
238 |
-
},
|
239 |
-
|
240 |
-
/** Hide all notifications with a certain class */
|
241 |
-
hideNotifications: function (className) {
|
242 |
-
statusBar.find('.PIS_' + className).remove();
|
243 |
-
if (!statusBar.children().length) {
|
244 |
-
statusBar.hide();
|
245 |
-
}
|
246 |
-
},
|
247 |
-
|
248 |
-
/**
|
249 |
-
* Initialize a loading notification
|
250 |
-
* To hide the notification use the returned callback
|
251 |
-
*/
|
252 |
-
loadingNotification: function (message) {
|
253 |
-
return Matomo_Overlay_Client.notification(message, 'Loading');
|
254 |
-
}
|
255 |
-
|
256 |
-
};
|
257 |
-
|
258 |
-
})();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/plugins/Overlay/javascripts/Piwik_Overlay.js
CHANGED
@@ -228,6 +228,10 @@ var Piwik_Overlay = (function () {
|
|
228 |
params.module = 'API';
|
229 |
params.action = 'index';
|
230 |
|
|
|
|
|
|
|
|
|
231 |
if (ALLOWED_API_REQUEST_WHITELIST.indexOf(params.method) === -1) {
|
232 |
sendResponse({
|
233 |
result: 'error',
|
@@ -237,13 +241,14 @@ var Piwik_Overlay = (function () {
|
|
237 |
}
|
238 |
|
239 |
angular.element(document).injector().invoke(['piwikApi', function (piwikApi) {
|
|
|
240 |
piwikApi.fetch(params)
|
241 |
.then(function (response) {
|
242 |
sendResponse(response);
|
243 |
}).catch(function (err) {
|
244 |
sendResponse({
|
245 |
result: 'error',
|
246 |
-
message: err.message,
|
247 |
});
|
248 |
});
|
249 |
}]);
|
228 |
params.module = 'API';
|
229 |
params.action = 'index';
|
230 |
|
231 |
+
// these should be sent as post parameters
|
232 |
+
delete params.token_auth;
|
233 |
+
delete params.force_api_session;
|
234 |
+
|
235 |
if (ALLOWED_API_REQUEST_WHITELIST.indexOf(params.method) === -1) {
|
236 |
sendResponse({
|
237 |
result: 'error',
|
241 |
}
|
242 |
|
243 |
angular.element(document).injector().invoke(['piwikApi', function (piwikApi) {
|
244 |
+
piwikApi.withTokenInUrl();
|
245 |
piwikApi.fetch(params)
|
246 |
.then(function (response) {
|
247 |
sendResponse(response);
|
248 |
}).catch(function (err) {
|
249 |
sendResponse({
|
250 |
result: 'error',
|
251 |
+
message: err.message || err || 'unknown error',
|
252 |
});
|
253 |
});
|
254 |
}]);
|
app/plugins/PrivacyManager/LogDataPurger.php
CHANGED
@@ -13,6 +13,7 @@ use Piwik\Container\StaticContainer;
|
|
13 |
use Piwik\DataAccess\RawLogDao;
|
14 |
use Piwik\Date;
|
15 |
use Piwik\Db;
|
|
|
16 |
use Piwik\Log;
|
17 |
use Piwik\LogDeleter;
|
18 |
use Piwik\Piwik;
|
@@ -66,8 +67,14 @@ class LogDataPurger
|
|
66 |
public function purgeData($deleteLogsOlderThan, $deleteUnusedLogActions)
|
67 |
{
|
68 |
$dateUpperLimit = Date::factory("today")->subDay($deleteLogsOlderThan);
|
|
|
|
|
|
|
|
|
69 |
$this->logDeleter->deleteVisitsFor($start = null, $dateUpperLimit->getDatetime());
|
70 |
|
|
|
|
|
71 |
$logTables = self::getDeleteTableLogTables();
|
72 |
|
73 |
// delete unused actions from the log_action table (but only if we can lock tables)
|
13 |
use Piwik\DataAccess\RawLogDao;
|
14 |
use Piwik\Date;
|
15 |
use Piwik\Db;
|
16 |
+
use Piwik\Db\TransactionLevel;
|
17 |
use Piwik\Log;
|
18 |
use Piwik\LogDeleter;
|
19 |
use Piwik\Piwik;
|
67 |
public function purgeData($deleteLogsOlderThan, $deleteUnusedLogActions)
|
68 |
{
|
69 |
$dateUpperLimit = Date::factory("today")->subDay($deleteLogsOlderThan);
|
70 |
+
|
71 |
+
$transactionLevel = new TransactionLevel(Db::get());
|
72 |
+
$transactionLevel->setUncommitted();
|
73 |
+
|
74 |
$this->logDeleter->deleteVisitsFor($start = null, $dateUpperLimit->getDatetime());
|
75 |
|
76 |
+
$transactionLevel->restorePreviousStatus();
|
77 |
+
|
78 |
$logTables = self::getDeleteTableLogTables();
|
79 |
|
80 |
// delete unused actions from the log_action table (but only if we can lock tables)
|
app/plugins/Referrers/Columns/Base.php
CHANGED
@@ -106,7 +106,7 @@ abstract class Base extends VisitDimension
|
|
106 |
|
107 |
if (!$referrerDetected && !empty($this->referrerHost)) {
|
108 |
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_WEBSITE;
|
109 |
-
$this->nameReferrerAnalyzed =
|
110 |
|
111 |
$urlsByHost = $this->getCachedUrlsByHostAndIdSite();
|
112 |
|
@@ -421,8 +421,8 @@ abstract class Base extends VisitDimension
|
|
421 |
// fallback logic if the referrer domain is not known to any site to not break BC
|
422 |
if (!$excludeUnknowns && isset($this->currentUrlParse['host'])) {
|
423 |
// this might be actually buggy if first thing tracked is eg an outlink and referrer is from that site
|
424 |
-
$currentHost =
|
425 |
-
if ($currentHost ==
|
426 |
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_DIRECT_ENTRY;
|
427 |
return true;
|
428 |
}
|
@@ -493,10 +493,10 @@ abstract class Base extends VisitDimension
|
|
493 |
|
494 |
$this->detectCampaignKeywordFromReferrerUrl();
|
495 |
|
496 |
-
$referrerNameAnalayzed =
|
497 |
$referrerNameAnalayzed = $this->truncateReferrerName($referrerNameAnalayzed);
|
498 |
|
499 |
-
$isCurrentVisitACampaignWithSameName =
|
500 |
$isCurrentVisitACampaignWithSameName = $isCurrentVisitACampaignWithSameName && $visitor->getVisitorColumn('referer_type') == Common::REFERRER_TYPE_CAMPAIGN;
|
501 |
|
502 |
// if we detected a campaign but there is still no keyword set, we set the keyword to the Referrer host
|
@@ -522,8 +522,8 @@ abstract class Base extends VisitDimension
|
|
522 |
return false;
|
523 |
}
|
524 |
|
525 |
-
$this->keywordReferrerAnalyzed =
|
526 |
-
$this->nameReferrerAnalyzed =
|
527 |
return true;
|
528 |
}
|
529 |
|
@@ -612,10 +612,10 @@ abstract class Base extends VisitDimension
|
|
612 |
{
|
613 |
if ($type === Common::REFERRER_TYPE_CAMPAIGN) {
|
614 |
if (!empty($name)) {
|
615 |
-
$name =
|
616 |
}
|
617 |
if (!empty($keyword)) {
|
618 |
-
$keyword =
|
619 |
}
|
620 |
}
|
621 |
}
|
@@ -632,8 +632,8 @@ abstract class Base extends VisitDimension
|
|
632 |
|
633 |
protected function hasReferrerColumnChanged(Visitor $visitor, $information, $infoName)
|
634 |
{
|
635 |
-
$existing =
|
636 |
-
$new =
|
637 |
|
638 |
$result = $existing != $new;
|
639 |
if ($result) {
|
@@ -655,12 +655,12 @@ abstract class Base extends VisitDimension
|
|
655 |
|
656 |
private function truncateReferrerName($name)
|
657 |
{
|
658 |
-
return
|
659 |
}
|
660 |
|
661 |
private function truncateReferrerKeyword($refererKeyword)
|
662 |
{
|
663 |
-
return
|
664 |
}
|
665 |
|
666 |
protected function isCurrentReferrerDirectEntry(Visitor $visitor)
|
106 |
|
107 |
if (!$referrerDetected && !empty($this->referrerHost)) {
|
108 |
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_WEBSITE;
|
109 |
+
$this->nameReferrerAnalyzed = mb_strtolower($this->referrerHost);
|
110 |
|
111 |
$urlsByHost = $this->getCachedUrlsByHostAndIdSite();
|
112 |
|
421 |
// fallback logic if the referrer domain is not known to any site to not break BC
|
422 |
if (!$excludeUnknowns && isset($this->currentUrlParse['host'])) {
|
423 |
// this might be actually buggy if first thing tracked is eg an outlink and referrer is from that site
|
424 |
+
$currentHost = mb_strtolower($this->currentUrlParse['host']);
|
425 |
+
if ($currentHost == mb_strtolower($this->referrerHost)) {
|
426 |
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_DIRECT_ENTRY;
|
427 |
return true;
|
428 |
}
|
493 |
|
494 |
$this->detectCampaignKeywordFromReferrerUrl();
|
495 |
|
496 |
+
$referrerNameAnalayzed = mb_strtolower($this->nameReferrerAnalyzed);
|
497 |
$referrerNameAnalayzed = $this->truncateReferrerName($referrerNameAnalayzed);
|
498 |
|
499 |
+
$isCurrentVisitACampaignWithSameName = mb_strtolower($visitor->getVisitorColumn('referer_name')) == $referrerNameAnalayzed;
|
500 |
$isCurrentVisitACampaignWithSameName = $isCurrentVisitACampaignWithSameName && $visitor->getVisitorColumn('referer_type') == Common::REFERRER_TYPE_CAMPAIGN;
|
501 |
|
502 |
// if we detected a campaign but there is still no keyword set, we set the keyword to the Referrer host
|
522 |
return false;
|
523 |
}
|
524 |
|
525 |
+
$this->keywordReferrerAnalyzed = mb_strtolower($this->keywordReferrerAnalyzed);
|
526 |
+
$this->nameReferrerAnalyzed = mb_strtolower($this->nameReferrerAnalyzed);
|
527 |
return true;
|
528 |
}
|
529 |
|
612 |
{
|
613 |
if ($type === Common::REFERRER_TYPE_CAMPAIGN) {
|
614 |
if (!empty($name)) {
|
615 |
+
$name = mb_strtolower($name);
|
616 |
}
|
617 |
if (!empty($keyword)) {
|
618 |
+
$keyword = mb_strtolower($keyword);
|
619 |
}
|
620 |
}
|
621 |
}
|
632 |
|
633 |
protected function hasReferrerColumnChanged(Visitor $visitor, $information, $infoName)
|
634 |
{
|
635 |
+
$existing = mb_strtolower($visitor->getVisitorColumn($infoName));
|
636 |
+
$new = mb_strtolower($information[$infoName]);
|
637 |
|
638 |
$result = $existing != $new;
|
639 |
if ($result) {
|
655 |
|
656 |
private function truncateReferrerName($name)
|
657 |
{
|
658 |
+
return mb_substr($name, 0, 255);
|
659 |
}
|
660 |
|
661 |
private function truncateReferrerKeyword($refererKeyword)
|
662 |
{
|
663 |
+
return mb_substr($refererKeyword, 0, 255);
|
664 |
}
|
665 |
|
666 |
protected function isCurrentReferrerDirectEntry(Visitor $visitor)
|
app/plugins/Referrers/Columns/Campaign.php
CHANGED
@@ -23,14 +23,8 @@ class Campaign extends Base
|
|
23 |
*
|
24 |
* @var bool
|
25 |
*/
|
26 |
-
protected $createNewVisitWhenCampaignChanges;
|
27 |
protected $nameSingular = 'Referrers_ColumnCampaign';
|
28 |
|
29 |
-
public function __construct()
|
30 |
-
{
|
31 |
-
$this->createNewVisitWhenCampaignChanges = TrackerConfig::getConfigValue('create_new_visit_when_campaign_changes') == 1;
|
32 |
-
}
|
33 |
-
|
34 |
/**
|
35 |
* If we should create a new visit when the campaign changes, check if the campaign info changed and if so
|
36 |
* force the tracker to create a new visit.i
|
@@ -42,7 +36,7 @@ class Campaign extends Base
|
|
42 |
*/
|
43 |
public function shouldForceNewVisit(Request $request, Visitor $visitor, Action $action = null)
|
44 |
{
|
45 |
-
if (
|
46 |
return false;
|
47 |
}
|
48 |
|
23 |
*
|
24 |
* @var bool
|
25 |
*/
|
|
|
26 |
protected $nameSingular = 'Referrers_ColumnCampaign';
|
27 |
|
|
|
|
|
|
|
|
|
|
|
28 |
/**
|
29 |
* If we should create a new visit when the campaign changes, check if the campaign info changed and if so
|
30 |
* force the tracker to create a new visit.i
|
36 |
*/
|
37 |
public function shouldForceNewVisit(Request $request, Visitor $visitor, Action $action = null)
|
38 |
{
|
39 |
+
if (TrackerConfig::getConfigValue('create_new_visit_when_campaign_changes', $request->getIdSiteIfExists()) != 1) {
|
40 |
return false;
|
41 |
}
|
42 |
|
app/plugins/Referrers/Columns/ReferrerUrl.php
CHANGED
@@ -44,8 +44,8 @@ class ReferrerUrl extends Base
|
|
44 |
|
45 |
private function trimUrl($url)
|
46 |
{
|
47 |
-
if (!empty($url) && is_string($url) &&
|
48 |
-
return
|
49 |
}
|
50 |
return $url;
|
51 |
}
|
44 |
|
45 |
private function trimUrl($url)
|
46 |
{
|
47 |
+
if (!empty($url) && is_string($url) && mb_strlen($url) > self::MAX_LEN) {
|
48 |
+
return mb_substr($url, 0, self::MAX_LEN);
|
49 |
}
|
50 |
return $url;
|
51 |
}
|
app/plugins/Referrers/Columns/Website.php
CHANGED
@@ -20,22 +20,9 @@ class Website extends Base
|
|
20 |
protected $type = self::TYPE_TEXT;
|
21 |
protected $nameSingular = 'General_Website';
|
22 |
|
23 |
-
/**
|
24 |
-
* Set using the `[Tracker] create_new_visit_when_website_referrer_changes` INI config option.
|
25 |
-
* If true, will force new visits if the referrer website changes.
|
26 |
-
*
|
27 |
-
* @var bool
|
28 |
-
*/
|
29 |
-
protected $createNewVisitWhenWebsiteReferrerChanges;
|
30 |
-
|
31 |
-
public function __construct()
|
32 |
-
{
|
33 |
-
$this->createNewVisitWhenWebsiteReferrerChanges = TrackerConfig::getConfigValue('create_new_visit_when_website_referrer_changes') == 1;
|
34 |
-
}
|
35 |
-
|
36 |
public function shouldForceNewVisit(Request $request, Visitor $visitor, Action $action = null)
|
37 |
{
|
38 |
-
if (
|
39 |
return false;
|
40 |
}
|
41 |
|
20 |
protected $type = self::TYPE_TEXT;
|
21 |
protected $nameSingular = 'General_Website';
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
public function shouldForceNewVisit(Request $request, Visitor $visitor, Action $action = null)
|
24 |
{
|
25 |
+
if (TrackerConfig::getConfigValue('create_new_visit_when_website_referrer_changes', $request->getIdSiteIfExists()) != 1) {
|
26 |
return false;
|
27 |
}
|
28 |
|
app/plugins/Referrers/SearchEngine.php
CHANGED
@@ -320,7 +320,7 @@ class SearchEngine extends Singleton
|
|
320 |
if (!empty($definitions['charsets'])) {
|
321 |
$key = $this->convertCharset($key, $definitions['charsets']);
|
322 |
}
|
323 |
-
$key =
|
324 |
}
|
325 |
|
326 |
return array(
|
@@ -379,13 +379,9 @@ class SearchEngine extends Singleton
|
|
379 |
*/
|
380 |
protected function convertCharset($string, $charsets)
|
381 |
{
|
382 |
-
if (
|
383 |
-
&& !empty($charsets)
|
384 |
-
) {
|
385 |
$charset = $charsets[0];
|
386 |
-
if (count($charsets) > 1
|
387 |
-
&& function_exists('mb_detect_encoding')
|
388 |
-
) {
|
389 |
$charset = mb_detect_encoding($string, $charsets);
|
390 |
if ($charset === false) {
|
391 |
$charset = $charsets[0];
|
320 |
if (!empty($definitions['charsets'])) {
|
321 |
$key = $this->convertCharset($key, $definitions['charsets']);
|
322 |
}
|
323 |
+
$key = mb_strtolower($key);
|
324 |
}
|
325 |
|
326 |
return array(
|
379 |
*/
|
380 |
protected function convertCharset($string, $charsets)
|
381 |
{
|
382 |
+
if (!empty($charsets)) {
|
|
|
|
|
383 |
$charset = $charsets[0];
|
384 |
+
if (count($charsets) > 1) {
|
|
|
|
|
385 |
$charset = mb_detect_encoding($string, $charsets);
|
386 |
if ($charset === false) {
|
387 |
$charset = $charsets[0];
|
app/plugins/ScheduledReports/Controller.php
CHANGED
@@ -40,7 +40,7 @@ class Controller extends \Piwik\Plugin\Controller
|
|
40 |
$reportTypes = API::getReportTypes();
|
41 |
$reportTypeOptions = array();
|
42 |
foreach ($reportTypes as $reportType => $icon) {
|
43 |
-
$reportTypeOptions[$reportType] =
|
44 |
}
|
45 |
$view->reportTypes = $reportTypes;
|
46 |
$view->reportTypeOptions = $reportTypeOptions;
|
@@ -67,7 +67,7 @@ class Controller extends \Piwik\Plugin\Controller
|
|
67 |
$reportFormatsByReportType[$reportType] = API::getReportFormats($reportType);
|
68 |
$reportFormatsByReportTypeOptions[$reportType] = $reportFormatsByReportType[$reportType];
|
69 |
foreach ($reportFormatsByReportTypeOptions[$reportType] as $type => $icon) {
|
70 |
-
$reportFormatsByReportTypeOptions[$reportType][$type] =
|
71 |
}
|
72 |
$allowMultipleReportsByReportType[$reportType] = API::allowMultipleReports($reportType);
|
73 |
|
40 |
$reportTypes = API::getReportTypes();
|
41 |
$reportTypeOptions = array();
|
42 |
foreach ($reportTypes as $reportType => $icon) {
|
43 |
+
$reportTypeOptions[$reportType] = mb_strtoupper($reportType);
|
44 |
}
|
45 |
$view->reportTypes = $reportTypes;
|
46 |
$view->reportTypeOptions = $reportTypeOptions;
|
67 |
$reportFormatsByReportType[$reportType] = API::getReportFormats($reportType);
|
68 |
$reportFormatsByReportTypeOptions[$reportType] = $reportFormatsByReportType[$reportType];
|
69 |
foreach ($reportFormatsByReportTypeOptions[$reportType] as $type => $icon) {
|
70 |
+
$reportFormatsByReportTypeOptions[$reportType][$type] = mb_strtoupper($type);
|
71 |
}
|
72 |
$allowMultipleReportsByReportType[$reportType] = API::allowMultipleReports($reportType);
|
73 |
|
app/plugins/SegmentEditor/SegmentFormatter.php
CHANGED
@@ -110,7 +110,7 @@ class SegmentFormatter
|
|
110 |
$translation = Piwik::translate($this->matchesMetric[$operator]);
|
111 |
}
|
112 |
|
113 |
-
return
|
114 |
}
|
115 |
|
116 |
private function getFormattedValue($operand)
|
110 |
$translation = Piwik::translate($this->matchesMetric[$operator]);
|
111 |
}
|
112 |
|
113 |
+
return mb_strtolower($translation);
|
114 |
}
|
115 |
|
116 |
private function getFormattedValue($operand)
|
app/plugins/SegmentEditor/SegmentSelectorControl.php
CHANGED
@@ -56,7 +56,7 @@ class SegmentSelectorControl extends UIControl
|
|
56 |
if ($segment['category'] == $visitTitle
|
57 |
&& ($segment['type'] == 'metric' && $segment['segment'] != 'visitIp')
|
58 |
) {
|
59 |
-
$metricsLabel =
|
60 |
$segment['category'] .= ' (' . $metricsLabel . ')';
|
61 |
}
|
62 |
$segmentsByCategory[$segment['category']][] = $segment;
|
56 |
if ($segment['category'] == $visitTitle
|
57 |
&& ($segment['type'] == 'metric' && $segment['segment'] != 'visitIp')
|
58 |
) {
|
59 |
+
$metricsLabel = mb_strtolower(Piwik::translate('General_Metrics'));
|
60 |
$segment['category'] .= ' (' . $metricsLabel . ')';
|
61 |
}
|
62 |
$segmentsByCategory[$segment['category']][] = $segment;
|
app/plugins/SitesManager/Controller.php
CHANGED
@@ -12,6 +12,7 @@ use Exception;
|
|
12 |
use Piwik\API\Request;
|
13 |
use Piwik\API\ResponseBuilder;
|
14 |
use Piwik\Common;
|
|
|
15 |
use Piwik\Exception\UnexpectedWebsiteFoundException;
|
16 |
use Piwik\Piwik;
|
17 |
use Piwik\Plugin\Manager;
|
@@ -25,6 +26,7 @@ use Piwik\View;
|
|
25 |
use Piwik\Http;
|
26 |
use Piwik\Plugins\SitesManager\GtmSiteTypeGuesser;
|
27 |
use Matomo\Cache\Lazy;
|
|
|
28 |
|
29 |
/**
|
30 |
*
|
@@ -126,17 +128,12 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
|
|
126 |
|
127 |
public function siteWithoutData()
|
128 |
{
|
|
|
|
|
129 |
$javascriptGenerator = new TrackerCodeGenerator();
|
130 |
$javascriptGenerator->forceMatomoEndpoint();
|
131 |
$piwikUrl = Url::getCurrentUrlWithoutFileName();
|
132 |
|
133 |
-
if (!$this->site && Piwik::hasUserSuperUserAccess()) {
|
134 |
-
throw new UnexpectedWebsiteFoundException('Invalid site ' . $this->idSite);
|
135 |
-
} elseif (!$this->site) {
|
136 |
-
// redirect to login form
|
137 |
-
Piwik::checkUserHasViewAccess($this->idSite);
|
138 |
-
}
|
139 |
-
|
140 |
$jsTag = Request::processRequest('SitesManager.getJavascriptTag', array('idSite' => $this->idSite, 'piwikUrl' => $piwikUrl));
|
141 |
|
142 |
// Strip off open and close <script> tag and comments so that JS will be displayed in ALL mail clients
|
@@ -167,17 +164,29 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
|
|
167 |
}
|
168 |
|
169 |
public function siteWithoutDataTabs() {
|
170 |
-
$
|
171 |
-
|
|
|
|
|
|
|
172 |
|
173 |
$siteType = $this->cache->fetch($typeCacheId);
|
174 |
$gtmUsed = $this->cache->fetch($gtmCacheId);
|
175 |
|
176 |
if (!$siteType) {
|
177 |
try {
|
178 |
-
$response = Http::sendHttpRequest($this->site->getMainUrl(), 5, null, null, 0, false, false, true);
|
179 |
-
} catch (Exception $e) {
|
180 |
$response = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
}
|
182 |
|
183 |
$guesser = new GtmSiteTypeGuesser();
|
12 |
use Piwik\API\Request;
|
13 |
use Piwik\API\ResponseBuilder;
|
14 |
use Piwik\Common;
|
15 |
+
use Piwik\Container\StaticContainer;
|
16 |
use Piwik\Exception\UnexpectedWebsiteFoundException;
|
17 |
use Piwik\Piwik;
|
18 |
use Piwik\Plugin\Manager;
|
26 |
use Piwik\Http;
|
27 |
use Piwik\Plugins\SitesManager\GtmSiteTypeGuesser;
|
28 |
use Matomo\Cache\Lazy;
|
29 |
+
use Psr\Log\LoggerInterface;
|
30 |
|
31 |
/**
|
32 |
*
|
128 |
|
129 |
public function siteWithoutData()
|
130 |
{
|
131 |
+
$this->checkSitePermission();
|
132 |
+
|
133 |
$javascriptGenerator = new TrackerCodeGenerator();
|
134 |
$javascriptGenerator->forceMatomoEndpoint();
|
135 |
$piwikUrl = Url::getCurrentUrlWithoutFileName();
|
136 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
$jsTag = Request::processRequest('SitesManager.getJavascriptTag', array('idSite' => $this->idSite, 'piwikUrl' => $piwikUrl));
|
138 |
|
139 |
// Strip off open and close <script> tag and comments so that JS will be displayed in ALL mail clients
|
164 |
}
|
165 |
|
166 |
public function siteWithoutDataTabs() {
|
167 |
+
$this->checkSitePermission();
|
168 |
+
|
169 |
+
$mainUrl = $this->site->getMainUrl();
|
170 |
+
$typeCacheId = 'guessedtype_' . md5($mainUrl);
|
171 |
+
$gtmCacheId = 'guessedgtm_' . md5($mainUrl);
|
172 |
|
173 |
$siteType = $this->cache->fetch($typeCacheId);
|
174 |
$gtmUsed = $this->cache->fetch($gtmCacheId);
|
175 |
|
176 |
if (!$siteType) {
|
177 |
try {
|
|
|
|
|
178 |
$response = false;
|
179 |
+
$parsedUrl = parse_url($mainUrl);
|
180 |
+
|
181 |
+
// do not try to determine the site type for localhost or any IP
|
182 |
+
if (!empty($parsedUrl['host']) && !Url::isLocalHost($parsedUrl['host']) && !filter_var($parsedUrl['host'], FILTER_VALIDATE_IP)) {
|
183 |
+
$response = Http::sendHttpRequest($mainUrl, 5, null, null, 0, false, false, true);
|
184 |
+
}
|
185 |
+
} catch (Exception $e) {
|
186 |
+
StaticContainer::get(LoggerInterface::class)->info('Unable to fetch site type for host "{host}": {exception}', [
|
187 |
+
'host' => $parsedUrl['host'] ?? 'unknown',
|
188 |
+
'exception' => $e,
|
189 |
+
]);
|
190 |
}
|
191 |
|
192 |
$guesser = new GtmSiteTypeGuesser();
|
app/plugins/SitesManager/GtmSiteTypeGuesser.php
CHANGED
@@ -8,8 +8,6 @@
|
|
8 |
*/
|
9 |
namespace Piwik\Plugins\SitesManager;
|
10 |
|
11 |
-
use Piwik\Plugins\SitesManager\SitesManager;
|
12 |
-
|
13 |
class GtmSiteTypeGuesser
|
14 |
{
|
15 |
public function guessSiteTypeFromResponse($response)
|
@@ -49,6 +47,22 @@ class GtmSiteTypeGuesser
|
|
49 |
return SitesManager::SITE_TYPE_SHAREPOINT;
|
50 |
}
|
51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
return SitesManager::SITE_TYPE_UNKNOWN;
|
53 |
}
|
54 |
|
8 |
*/
|
9 |
namespace Piwik\Plugins\SitesManager;
|
10 |
|
|
|
|
|
11 |
class GtmSiteTypeGuesser
|
12 |
{
|
13 |
public function guessSiteTypeFromResponse($response)
|
47 |
return SitesManager::SITE_TYPE_SHAREPOINT;
|
48 |
}
|
49 |
|
50 |
+
$needle = '<meta name="Generator" content="Drupal';
|
51 |
+
if (strpos($response['data'], $needle) !== false) {
|
52 |
+
return SitesManager::SITE_TYPE_DRUPAL;
|
53 |
+
}
|
54 |
+
|
55 |
+
// https://github.com/drupal/drupal/blob/9.2.x/core/includes/install.core.inc#L1054
|
56 |
+
// Birthday of Dries Buytaert, the founder of Drupal is on 19 November 1978 - https://en.wikipedia.org/wiki/Drupal
|
57 |
+
if (isset($response['headers']['expires']) && $response['headers']['expires'] === 'Sun, 19 Nov 1978 05:00:00 GMT') {
|
58 |
+
return SitesManager::SITE_TYPE_DRUPAL;
|
59 |
+
}
|
60 |
+
|
61 |
+
$pattern = '/data-wf-(?:domain|page)=/i';
|
62 |
+
if (preg_match($pattern, $response['data']) === 1) {
|
63 |
+
return SitesManager::SITE_TYPE_WEBFLOW;
|
64 |
+
}
|
65 |
+
|
66 |
return SitesManager::SITE_TYPE_UNKNOWN;
|
67 |
}
|
68 |
|
app/plugins/SitesManager/SiteUrls.php
CHANGED
@@ -211,7 +211,7 @@ class SiteUrls
|
|
211 |
|
212 |
private function toCanonicalHost($host)
|
213 |
{
|
214 |
-
$host =
|
215 |
if (strpos($host, 'www.') === 0) {
|
216 |
$host = substr($host, 4);
|
217 |
}
|
@@ -224,7 +224,7 @@ class SiteUrls
|
|
224 |
$path = '/';
|
225 |
|
226 |
if (isset($urlParsed['path'])) {
|
227 |
-
$path =
|
228 |
if (!Common::stringEndsWith($path, '/')) {
|
229 |
$path .= '/';
|
230 |
}
|
211 |
|
212 |
private function toCanonicalHost($host)
|
213 |
{
|
214 |
+
$host = mb_strtolower($host);
|
215 |
if (strpos($host, 'www.') === 0) {
|
216 |
$host = substr($host, 4);
|
217 |
}
|
224 |
$path = '/';
|
225 |
|
226 |
if (isset($urlParsed['path'])) {
|
227 |
+
$path = mb_strtolower($urlParsed['path']);
|
228 |
if (!Common::stringEndsWith($path, '/')) {
|
229 |
$path .= '/';
|
230 |
}
|
app/plugins/SitesManager/SitesManager.php
CHANGED
@@ -39,6 +39,8 @@ class SitesManager extends \Piwik\Plugin
|
|
39 |
const SITE_TYPE_SHAREPOINT = 'sharepoint';
|
40 |
const SITE_TYPE_JOOMLA = 'joomla';
|
41 |
const SITE_TYPE_SHOPIFY = 'shopify';
|
|
|
|
|
42 |
|
43 |
/**
|
44 |
* @see \Piwik\Plugin::registerEvents
|
@@ -367,6 +369,8 @@ class SitesManager extends \Piwik\Plugin
|
|
367 |
self::SITE_TYPE_SQUARESPACE => 'https://matomo.org/faq/new-to-piwik/how-do-i-integrate-matomo-with-squarespace-website',
|
368 |
self::SITE_TYPE_WIX => 'https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-analytics-tracking-code-on-wix',
|
369 |
self::SITE_TYPE_WORDPRESS => 'https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-tracking-code-on-wordpress',
|
|
|
|
|
370 |
];
|
371 |
|
372 |
return $map[$siteType] ? $map[$siteType] : false;
|
@@ -408,6 +412,8 @@ class SitesManager extends \Piwik\Plugin
|
|
408 |
$translationKeys[] = "SitesManager_GlobalExcludedUserAgentHelp2";
|
409 |
$translationKeys[] = "SitesManager_GlobalExcludedUserAgentHelp3";
|
410 |
$translationKeys[] = "SitesManager_WebsitesManagement";
|
|
|
|
|
411 |
$translationKeys[] = "SitesManager_MainDescription";
|
412 |
$translationKeys[] = "SitesManager_YouCurrentlyHaveAccessToNWebsites";
|
413 |
$translationKeys[] = "SitesManager_SuperUserAccessCan";
|
39 |
const SITE_TYPE_SHAREPOINT = 'sharepoint';
|
40 |
const SITE_TYPE_JOOMLA = 'joomla';
|
41 |
const SITE_TYPE_SHOPIFY = 'shopify';
|
42 |
+
const SITE_TYPE_WEBFLOW = 'webflow';
|
43 |
+
const SITE_TYPE_DRUPAL = 'drupal';
|
44 |
|
45 |
/**
|
46 |
* @see \Piwik\Plugin::registerEvents
|
369 |
self::SITE_TYPE_SQUARESPACE => 'https://matomo.org/faq/new-to-piwik/how-do-i-integrate-matomo-with-squarespace-website',
|
370 |
self::SITE_TYPE_WIX => 'https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-analytics-tracking-code-on-wix',
|
371 |
self::SITE_TYPE_WORDPRESS => 'https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-tracking-code-on-wordpress',
|
372 |
+
self::SITE_TYPE_DRUPAL => 'https://matomo.org/faq/new-to-piwik/how-to-integrate-with-drupal/',
|
373 |
+
self::SITE_TYPE_WEBFLOW => 'https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-tracking-code-on-webflow',
|
374 |
];
|
375 |
|
376 |
return $map[$siteType] ? $map[$siteType] : false;
|
412 |
$translationKeys[] = "SitesManager_GlobalExcludedUserAgentHelp2";
|
413 |
$translationKeys[] = "SitesManager_GlobalExcludedUserAgentHelp3";
|
414 |
$translationKeys[] = "SitesManager_WebsitesManagement";
|
415 |
+
$translationKeys[] = "SitesManager_WebsiteUpdated";
|
416 |
+
$translationKeys[] = "SitesManager_WebsiteCreated";
|
417 |
$translationKeys[] = "SitesManager_MainDescription";
|
418 |
$translationKeys[] = "SitesManager_YouCurrentlyHaveAccessToNWebsites";
|
419 |
$translationKeys[] = "SitesManager_SuperUserAccessCan";
|
app/plugins/TagManager/Context/WebContext.php
CHANGED
@@ -243,11 +243,11 @@ class WebContext extends BaseContext
|
|
243 |
|
244 |
$embedCode = <<<INST
|
245 |
<!-- Matomo Tag Manager -->
|
246 |
-
<script
|
247 |
var _mtm = window._mtm = window._mtm || [];
|
248 |
_mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'});
|
249 |
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
250 |
-
g.
|
251 |
</script>
|
252 |
<!-- End Matomo Tag Manager -->
|
253 |
INST;
|
243 |
|
244 |
$embedCode = <<<INST
|
245 |
<!-- Matomo Tag Manager -->
|
246 |
+
<script>
|
247 |
var _mtm = window._mtm = window._mtm || [];
|
248 |
_mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'});
|
249 |
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
250 |
+
g.async=true; g.src='$path'; s.parentNode.insertBefore(g,s);
|
251 |
</script>
|
252 |
<!-- End Matomo Tag Manager -->
|
253 |
INST;
|
app/plugins/TagManager/Template/Tag/MatomoTag.web.js
CHANGED
@@ -65,7 +65,7 @@
|
|
65 |
// installed which another doesn't have.
|
66 |
libLoaded = true;
|
67 |
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
68 |
-
g.
|
69 |
}
|
70 |
}
|
71 |
|
65 |
// installed which another doesn't have.
|
66 |
libLoaded = true;
|
67 |
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
68 |
+
g.async=true; g.src=url+jsEndpoint; s.parentNode.insertBefore(g,s);
|
69 |
}
|
70 |
}
|
71 |
|
app/plugins/TwoFactorAuth/Controller.php
CHANGED
@@ -21,6 +21,10 @@ use Piwik\Session\SessionNamespace;
|
|
21 |
use Piwik\Url;
|
22 |
use Piwik\View;
|
23 |
use Exception;
|
|
|
|
|
|
|
|
|
24 |
|
25 |
class Controller extends \Piwik\Plugin\Controller
|
26 |
{
|
@@ -148,6 +152,13 @@ class Controller extends \Piwik\Plugin\Controller
|
|
148 |
$this->twoFa->disable2FAforUser(Piwik::getCurrentUserLogin());
|
149 |
$this->passwordVerify->forgetVerifiedPassword();
|
150 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
151 |
$this->redirectToIndex('UsersManager', 'userSecurity', null, null, null, array(
|
152 |
'disableNonce' => false
|
153 |
));
|
@@ -218,6 +229,13 @@ class Controller extends \Piwik\Plugin\Controller
|
|
218 |
|
219 |
Piwik::postEvent('TwoFactorAuth.enabled', array($login));
|
220 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
if ($standalone) {
|
222 |
$this->redirectToIndex('CoreHome', 'index');
|
223 |
return;
|
@@ -274,11 +292,18 @@ class Controller extends \Piwik\Plugin\Controller
|
|
274 |
|
275 |
$regenerateSuccess = false;
|
276 |
$regenerateError = false;
|
|
|
277 |
|
278 |
if ($postedValidNonce && $this->passwordVerify->hasBeenVerified()) {
|
279 |
$this->passwordVerify->forgetVerifiedPassword();
|
280 |
$this->recoveryCodeDao->createRecoveryCodesForLogin(Piwik::getCurrentUserLogin());
|
281 |
$regenerateSuccess = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
// no need to redirect as password was verified nonce
|
283 |
// if user has posted a valid nonce, we do not need to require password again as nonce must have been generated recent
|
284 |
// avoids use case where eg password verify is only valid for one more minute when opening the page but user regenerates 2min later
|
@@ -293,6 +318,14 @@ class Controller extends \Piwik\Plugin\Controller
|
|
293 |
|
294 |
$recoveryCodes = $this->recoveryCodeDao->getAllRecoveryCodesForLogin(Piwik::getCurrentUserLogin());
|
295 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
296 |
return $this->renderTemplate('showRecoveryCodes', array(
|
297 |
'codes' => $recoveryCodes,
|
298 |
'regenerateNonce' => Nonce::getNonce(self::REGENERATE_CODES_2FA_NONCE),
|
21 |
use Piwik\Url;
|
22 |
use Piwik\View;
|
23 |
use Exception;
|
24 |
+
use Piwik\Plugins\CoreAdminHome\Emails\RecoveryCodesShowedEmail;
|
25 |
+
use Piwik\Plugins\CoreAdminHome\Emails\TwoFactorAuthEnabledEmail;
|
26 |
+
use Piwik\Plugins\CoreAdminHome\Emails\TwoFactorAuthDisabledEmail;
|
27 |
+
use Piwik\Plugins\CoreAdminHome\Emails\RecoveryCodesRegeneratedEmail;
|
28 |
|
29 |
class Controller extends \Piwik\Plugin\Controller
|
30 |
{
|
152 |
$this->twoFa->disable2FAforUser(Piwik::getCurrentUserLogin());
|
153 |
$this->passwordVerify->forgetVerifiedPassword();
|
154 |
|
155 |
+
$container = StaticContainer::getContainer();
|
156 |
+
$email = $container->make(TwoFactorAuthDisabledEmail::class, array(
|
157 |
+
'login' => Piwik::getCurrentUserLogin(),
|
158 |
+
'emailAddress' => Piwik::getCurrentUserEmail()
|
159 |
+
));
|
160 |
+
$email->safeSend();
|
161 |
+
|
162 |
$this->redirectToIndex('UsersManager', 'userSecurity', null, null, null, array(
|
163 |
'disableNonce' => false
|
164 |
));
|
229 |
|
230 |
Piwik::postEvent('TwoFactorAuth.enabled', array($login));
|
231 |
|
232 |
+
$container = StaticContainer::getContainer();
|
233 |
+
$email = $container->make(TwoFactorAuthEnabledEmail::class, array(
|
234 |
+
'login' => Piwik::getCurrentUserLogin(),
|
235 |
+
'emailAddress' => Piwik::getCurrentUserEmail()
|
236 |
+
));
|
237 |
+
$email->safeSend();
|
238 |
+
|
239 |
if ($standalone) {
|
240 |
$this->redirectToIndex('CoreHome', 'index');
|
241 |
return;
|
292 |
|
293 |
$regenerateSuccess = false;
|
294 |
$regenerateError = false;
|
295 |
+
$container = StaticContainer::getContainer();
|
296 |
|
297 |
if ($postedValidNonce && $this->passwordVerify->hasBeenVerified()) {
|
298 |
$this->passwordVerify->forgetVerifiedPassword();
|
299 |
$this->recoveryCodeDao->createRecoveryCodesForLogin(Piwik::getCurrentUserLogin());
|
300 |
$regenerateSuccess = true;
|
301 |
+
|
302 |
+
$email = $container->make(RecoveryCodesRegeneratedEmail::class, array(
|
303 |
+
'login' => Piwik::getCurrentUserLogin(),
|
304 |
+
'emailAddress' => Piwik::getCurrentUserEmail()
|
305 |
+
));
|
306 |
+
$email->safeSend();
|
307 |
// no need to redirect as password was verified nonce
|
308 |
// if user has posted a valid nonce, we do not need to require password again as nonce must have been generated recent
|
309 |
// avoids use case where eg password verify is only valid for one more minute when opening the page but user regenerates 2min later
|
318 |
|
319 |
$recoveryCodes = $this->recoveryCodeDao->getAllRecoveryCodesForLogin(Piwik::getCurrentUserLogin());
|
320 |
|
321 |
+
if (!$regenerateSuccess && !$regenerateError) {
|
322 |
+
$email = $container->make(RecoveryCodesShowedEmail::class, array(
|
323 |
+
'login' => Piwik::getCurrentUserLogin(),
|
324 |
+
'emailAddress' => Piwik::getCurrentUserEmail()
|
325 |
+
));
|
326 |
+
$email->safeSend();
|
327 |
+
}
|
328 |
+
|
329 |
return $this->renderTemplate('showRecoveryCodes', array(
|
330 |
'codes' => $recoveryCodes,
|
331 |
'regenerateNonce' => Nonce::getNonce(self::REGENERATE_CODES_2FA_NONCE),
|
app/plugins/TwoFactorAuth/Dao/RecoveryCodeDao.php
CHANGED
@@ -38,7 +38,7 @@ class RecoveryCodeDao
|
|
38 |
|
39 |
for ($i = 0; $i < 10; $i++) {
|
40 |
$code = $this->generator->generateCode();
|
41 |
-
$code =
|
42 |
$this->insertRecoveryCode($login, $code);
|
43 |
$codes[] = $code;
|
44 |
}
|
38 |
|
39 |
for ($i = 0; $i < 10; $i++) {
|
40 |
$code = $this->generator->generateCode();
|
41 |
+
$code = mb_strtoupper($code);
|
42 |
$this->insertRecoveryCode($login, $code);
|
43 |
$codes[] = $code;
|
44 |
}
|
app/plugins/UserCountry/API.php
CHANGED
@@ -36,13 +36,7 @@ class API extends \Piwik\Plugin\API
|
|
36 |
{
|
37 |
$dataTable = $this->getDataTable(Archiver::COUNTRY_RECORD_NAME, $idSite, $period, $date, $segment);
|
38 |
|
39 |
-
$
|
40 |
-
|
41 |
-
if ($dataTable instanceof DataTable\Map) {
|
42 |
-
$dataTables = $dataTable->getDataTables();
|
43 |
-
}
|
44 |
-
|
45 |
-
foreach ($dataTables as $dt) {
|
46 |
if ($dt->getRowFromLabel('ti')) {
|
47 |
$dt->filter('GroupBy', array(
|
48 |
'label',
|
@@ -54,7 +48,7 @@ class API extends \Piwik\Plugin\API
|
|
54 |
}
|
55 |
));
|
56 |
}
|
57 |
-
}
|
58 |
|
59 |
// apply filter on the whole datatable in order the inline search to work (searches are done on "beautiful" label)
|
60 |
$dataTable->filter('AddSegmentValue');
|
@@ -96,13 +90,7 @@ class API extends \Piwik\Plugin\API
|
|
96 |
$separator = Archiver::LOCATION_SEPARATOR;
|
97 |
$unk = Visit::UNKNOWN_CODE;
|
98 |
|
99 |
-
$
|
100 |
-
|
101 |
-
if ($dataTable instanceof DataTable\Map) {
|
102 |
-
$dataTables = $dataTable->getDataTables();
|
103 |
-
}
|
104 |
-
|
105 |
-
foreach ($dataTables as $dt) {
|
106 |
$archiveDate = $dt->getMetadata(DataTable::ARCHIVED_DATE_METADATA_NAME);
|
107 |
|
108 |
// convert fips region codes to iso if required
|
@@ -140,7 +128,7 @@ class API extends \Piwik\Plugin\API
|
|
140 |
}
|
141 |
));
|
142 |
}
|
143 |
-
}
|
144 |
|
145 |
$segments = array('regionCode', 'countryCode');
|
146 |
$dataTable->filter('AddSegmentByLabel', array($segments, Archiver::LOCATION_SEPARATOR));
|
@@ -187,13 +175,7 @@ class API extends \Piwik\Plugin\API
|
|
187 |
$separator = Archiver::LOCATION_SEPARATOR;
|
188 |
$unk = Visit::UNKNOWN_CODE;
|
189 |
|
190 |
-
$
|
191 |
-
|
192 |
-
if ($dataTable instanceof DataTable\Map) {
|
193 |
-
$dataTables = $dataTable->getDataTables();
|
194 |
-
}
|
195 |
-
|
196 |
-
foreach ($dataTables as $dt) {
|
197 |
$archiveDate = $dt->getMetadata(DataTable::ARCHIVED_DATE_METADATA_NAME);
|
198 |
|
199 |
// convert fips region codes to iso if required
|
@@ -231,7 +213,7 @@ class API extends \Piwik\Plugin\API
|
|
231 |
}
|
232 |
));
|
233 |
}
|
234 |
-
}
|
235 |
|
236 |
$segments = array('city', 'regionCode', 'countryCode');
|
237 |
$dataTable->filter('AddSegmentByLabel', array($segments, Archiver::LOCATION_SEPARATOR));
|
36 |
{
|
37 |
$dataTable = $this->getDataTable(Archiver::COUNTRY_RECORD_NAME, $idSite, $period, $date, $segment);
|
38 |
|
39 |
+
$dataTable->filter(function(DataTable $dt) {
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
if ($dt->getRowFromLabel('ti')) {
|
41 |
$dt->filter('GroupBy', array(
|
42 |
'label',
|
48 |
}
|
49 |
));
|
50 |
}
|
51 |
+
});
|
52 |
|
53 |
// apply filter on the whole datatable in order the inline search to work (searches are done on "beautiful" label)
|
54 |
$dataTable->filter('AddSegmentValue');
|
90 |
$separator = Archiver::LOCATION_SEPARATOR;
|
91 |
$unk = Visit::UNKNOWN_CODE;
|
92 |
|
93 |
+
$dataTable->filter(function(DataTable $dt) use ($period, $date, $separator, $unk) {
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
$archiveDate = $dt->getMetadata(DataTable::ARCHIVED_DATE_METADATA_NAME);
|
95 |
|
96 |
// convert fips region codes to iso if required
|
128 |
}
|
129 |
));
|
130 |
}
|
131 |
+
});
|
132 |
|
133 |
$segments = array('regionCode', 'countryCode');
|
134 |
$dataTable->filter('AddSegmentByLabel', array($segments, Archiver::LOCATION_SEPARATOR));
|
175 |
$separator = Archiver::LOCATION_SEPARATOR;
|
176 |
$unk = Visit::UNKNOWN_CODE;
|
177 |
|
178 |
+
$dataTable->filter(function(DataTable $dt) use ($period, $date, $separator, $unk) {
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
$archiveDate = $dt->getMetadata(DataTable::ARCHIVED_DATE_METADATA_NAME);
|
180 |
|
181 |
// convert fips region codes to iso if required
|
213 |
}
|
214 |
));
|
215 |
}
|
216 |
+
});
|
217 |
|
218 |
$segments = array('city', 'regionCode', 'countryCode');
|
219 |
$dataTable->filter('AddSegmentByLabel', array($segments, Archiver::LOCATION_SEPARATOR));
|
app/plugins/UserCountry/LocationProvider.php
CHANGED
@@ -311,16 +311,17 @@ abstract class LocationProvider
|
|
311 |
$info['isVisible'] = $provider->isVisible();
|
312 |
$info['usageWarning'] = $provider->getUsageWarning();
|
313 |
|
314 |
-
$allInfo[$info['
|
315 |
}
|
316 |
|
317 |
-
|
|
|
|
|
|
|
|
|
|
|
318 |
|
319 |
-
$
|
320 |
-
foreach ($allInfo as $info) {
|
321 |
-
$result[$info['id']] = $info;
|
322 |
-
}
|
323 |
-
return $result;
|
324 |
}
|
325 |
|
326 |
/**
|
311 |
$info['isVisible'] = $provider->isVisible();
|
312 |
$info['usageWarning'] = $provider->getUsageWarning();
|
313 |
|
314 |
+
$allInfo[$info['id']] = $info;
|
315 |
}
|
316 |
|
317 |
+
uasort($allInfo, function($a, $b) {
|
318 |
+
if ($a['order'] == $b['order']) {
|
319 |
+
return strcmp($a['id'], $b['id']);
|
320 |
+
}
|
321 |
+
return $a['order'] - $b['order'];
|
322 |
+
});
|
323 |
|
324 |
+
return $allInfo;
|
|
|
|
|
|
|
|
|
325 |
}
|
326 |
|
327 |
/**
|
app/plugins/UsersManager/API.php
CHANGED
@@ -25,11 +25,13 @@ use Piwik\NoAccessException;
|
|
25 |
use Piwik\Option;
|
26 |
use Piwik\Piwik;
|
27 |
use Piwik\Plugin;
|
|
|
28 |
use Piwik\Plugins\Login\PasswordVerifier;
|
29 |
use Piwik\SettingsPiwik;
|
30 |
use Piwik\Site;
|
31 |
use Piwik\Tracker\Cache;
|
32 |
use Piwik\View;
|
|
|
33 |
|
34 |
/**
|
35 |
* The UsersManager API lets you Manage Users and their permissions to access specific websites.
|
@@ -364,7 +366,7 @@ class API extends \Piwik\Plugin\API
|
|
364 |
return [];
|
365 |
|
366 |
} else {
|
367 |
-
|
368 |
|
369 |
foreach ($users as &$user) {
|
370 |
$user['superuser_access'] = $user['superuser_access'] == 1;
|
@@ -372,7 +374,7 @@ class API extends \Piwik\Plugin\API
|
|
372 |
$user['role'] = 'superuser';
|
373 |
$user['capabilities'] = [];
|
374 |
} else {
|
375 |
-
|
376 |
$user['role'] = empty($user['role']) ? 'noaccess' : reset($user['role']);
|
377 |
}
|
378 |
|
@@ -460,21 +462,41 @@ class API extends \Piwik\Plugin\API
|
|
460 |
return $userSites;
|
461 |
}
|
462 |
|
|
|
|
|
|
|
|
|
|
|
|
|
463 |
private function checkAccessType($access)
|
464 |
{
|
465 |
$access = (array) $access;
|
466 |
|
467 |
-
$roles = $this->roleProvider->getAllRoleIds();
|
468 |
-
$capabilities = $this->capabilityProvider->getAllCapabilityIds();
|
469 |
-
$list = array_merge($roles, $capabilities);
|
470 |
-
|
471 |
foreach ($access as $entry) {
|
472 |
-
if (
|
473 |
-
throw new Exception(Piwik::translate("UsersManager_ExceptionAccessValues", implode(", ", $
|
474 |
}
|
475 |
}
|
476 |
}
|
477 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
478 |
/**
|
479 |
* For each user, returns their access level for the given $idSite.
|
480 |
* If a user doesn't have any access to the $idSite ('noaccess'),
|
@@ -590,9 +612,9 @@ class API extends \Piwik\Plugin\API
|
|
590 |
}
|
591 |
}
|
592 |
|
593 |
-
|
594 |
foreach ($sites as &$siteAccess) {
|
595 |
-
|
596 |
$siteAccess['role'] = empty($siteAccess['role']) ? 'noaccess' : reset($siteAccess['role']);
|
597 |
unset($siteAccess['access']);
|
598 |
}
|
@@ -665,7 +687,7 @@ class API extends \Piwik\Plugin\API
|
|
665 |
throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExists', $email));
|
666 |
}
|
667 |
|
668 |
-
if ($userLogin &&
|
669 |
throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExistsAsLogin', $email));
|
670 |
}
|
671 |
|
@@ -722,6 +744,14 @@ class API extends \Piwik\Plugin\API
|
|
722 |
|
723 |
$this->model->addUser($userLogin, $passwordTransformed, $email, Date::now()->getDatetime());
|
724 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
725 |
// we reload the access list which doesn't yet take in consideration this new user
|
726 |
Access::getInstance()->reloadAccess();
|
727 |
Cache::deleteTrackerCache();
|
@@ -927,7 +957,7 @@ class API extends \Piwik\Plugin\API
|
|
927 |
$email = $userInfo['email'];
|
928 |
}
|
929 |
|
930 |
-
$hasEmailChanged =
|
931 |
|
932 |
if ($hasEmailChanged) {
|
933 |
$this->checkEmail($email, $userLogin);
|
@@ -988,6 +1018,14 @@ class API extends \Piwik\Plugin\API
|
|
988 |
$this->model->deleteUserOptions($userLogin);
|
989 |
$this->model->deleteUserAccess($userLogin);
|
990 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
991 |
Cache::deleteTrackerCache();
|
992 |
}
|
993 |
|
@@ -1084,7 +1122,7 @@ class API extends \Piwik\Plugin\API
|
|
1084 |
|
1085 |
if (is_array($access)) {
|
1086 |
// we require one role, and optionally multiple capabilities
|
1087 |
-
|
1088 |
|
1089 |
if (count($roles) < 1) {
|
1090 |
$ids = implode(', ', $this->roleProvider->getAllRoleIds());
|
@@ -1157,7 +1195,7 @@ class API extends \Piwik\Plugin\API
|
|
1157 |
$this->capabilityProvider->checkValidCapability($entry);
|
1158 |
}
|
1159 |
|
1160 |
-
|
1161 |
|
1162 |
foreach ($capabilities as $entry) {
|
1163 |
$cap = $this->capabilityProvider->getCapability($entry);
|
@@ -1430,8 +1468,9 @@ class API extends \Piwik\Plugin\API
|
|
1430 |
if ($this->roleProvider->isValidRole($entry)) {
|
1431 |
$roles[] = $entry;
|
1432 |
} else {
|
1433 |
-
$this->
|
1434 |
-
|
|
|
1435 |
}
|
1436 |
}
|
1437 |
return [$roles, $capabilities];
|
25 |
use Piwik\Option;
|
26 |
use Piwik\Piwik;
|
27 |
use Piwik\Plugin;
|
28 |
+
use Piwik\Plugins\CoreAdminHome\Emails\UserCreatedEmail;
|
29 |
use Piwik\Plugins\Login\PasswordVerifier;
|
30 |
use Piwik\SettingsPiwik;
|
31 |
use Piwik\Site;
|
32 |
use Piwik\Tracker\Cache;
|
33 |
use Piwik\View;
|
34 |
+
use Piwik\Plugins\CoreAdminHome\Emails\UserDeletedEmail;
|
35 |
|
36 |
/**
|
37 |
* The UsersManager API lets you Manage Users and their permissions to access specific websites.
|
366 |
return [];
|
367 |
|
368 |
} else {
|
369 |
+
[$users, $totalResults] = $this->model->getUsersWithRole($idSite, $limit, $offset, $filter_search, $filter_access, $loginsToLimit);
|
370 |
|
371 |
foreach ($users as &$user) {
|
372 |
$user['superuser_access'] = $user['superuser_access'] == 1;
|
374 |
$user['role'] = 'superuser';
|
375 |
$user['capabilities'] = [];
|
376 |
} else {
|
377 |
+
[$user['role'], $user['capabilities']] = $this->getRoleAndCapabilitiesFromAccess($user['access']);
|
378 |
$user['role'] = empty($user['role']) ? 'noaccess' : reset($user['role']);
|
379 |
}
|
380 |
|
462 |
return $userSites;
|
463 |
}
|
464 |
|
465 |
+
/**
|
466 |
+
* Throws an exception if one of the given access types does not exists.
|
467 |
+
*
|
468 |
+
* @param string|array $access
|
469 |
+
* @throws Exception
|
470 |
+
*/
|
471 |
private function checkAccessType($access)
|
472 |
{
|
473 |
$access = (array) $access;
|
474 |
|
|
|
|
|
|
|
|
|
475 |
foreach ($access as $entry) {
|
476 |
+
if (!$this->isValidAccessType($entry)) {
|
477 |
+
throw new Exception(Piwik::translate("UsersManager_ExceptionAccessValues", [implode(", ", $this->getAllRolesAndCapabilities()), $entry]));
|
478 |
}
|
479 |
}
|
480 |
}
|
481 |
|
482 |
+
/**
|
483 |
+
* returns if the given access type exists
|
484 |
+
*
|
485 |
+
* @param string $access
|
486 |
+
* @return bool
|
487 |
+
*/
|
488 |
+
private function isValidAccessType($access)
|
489 |
+
{
|
490 |
+
return in_array($access, $this->getAllRolesAndCapabilities(), true);
|
491 |
+
}
|
492 |
+
|
493 |
+
private function getAllRolesAndCapabilities()
|
494 |
+
{
|
495 |
+
$roles = $this->roleProvider->getAllRoleIds();
|
496 |
+
$capabilities = $this->capabilityProvider->getAllCapabilityIds();
|
497 |
+
return array_merge($roles, $capabilities);
|
498 |
+
}
|
499 |
+
|
500 |
/**
|
501 |
* For each user, returns their access level for the given $idSite.
|
502 |
* If a user doesn't have any access to the $idSite ('noaccess'),
|
612 |
}
|
613 |
}
|
614 |
|
615 |
+
[$sites, $totalResults] = $this->model->getSitesAccessFromUserWithFilters($userLogin, $limit, $offset, $filter_search, $filter_access, $idSites);
|
616 |
foreach ($sites as &$siteAccess) {
|
617 |
+
[$siteAccess['role'], $siteAccess['capabilities']] = $this->getRoleAndCapabilitiesFromAccess($siteAccess['access']);
|
618 |
$siteAccess['role'] = empty($siteAccess['role']) ? 'noaccess' : reset($siteAccess['role']);
|
619 |
unset($siteAccess['access']);
|
620 |
}
|
687 |
throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExists', $email));
|
688 |
}
|
689 |
|
690 |
+
if ($userLogin && mb_strtolower($userLogin) !== mb_strtolower($email) && $this->userExists($email)) {
|
691 |
throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExistsAsLogin', $email));
|
692 |
}
|
693 |
|
744 |
|
745 |
$this->model->addUser($userLogin, $passwordTransformed, $email, Date::now()->getDatetime());
|
746 |
|
747 |
+
$container = StaticContainer::getContainer();
|
748 |
+
$mail = $container->make(UserCreatedEmail::class, array(
|
749 |
+
'login' => Piwik::getCurrentUserLogin(),
|
750 |
+
'emailAddress' => Piwik::getCurrentUserEmail(),
|
751 |
+
'userLogin' => $userLogin
|
752 |
+
));
|
753 |
+
$mail->safeSend();
|
754 |
+
|
755 |
// we reload the access list which doesn't yet take in consideration this new user
|
756 |
Access::getInstance()->reloadAccess();
|
757 |
Cache::deleteTrackerCache();
|
957 |
$email = $userInfo['email'];
|
958 |
}
|
959 |
|
960 |
+
$hasEmailChanged = mb_strtolower($email) !== mb_strtolower($userInfo['email']);
|
961 |
|
962 |
if ($hasEmailChanged) {
|
963 |
$this->checkEmail($email, $userLogin);
|
1018 |
$this->model->deleteUserOptions($userLogin);
|
1019 |
$this->model->deleteUserAccess($userLogin);
|
1020 |
|
1021 |
+
$container = StaticContainer::getContainer();
|
1022 |
+
$email = $container->make(UserDeletedEmail::class, array(
|
1023 |
+
'login' => Piwik::getCurrentUserLogin(),
|
1024 |
+
'emailAddress' => Piwik::getCurrentUserEmail(),
|
1025 |
+
'userLogin' => $userLogin
|
1026 |
+
));
|
1027 |
+
$email->safeSend();
|
1028 |
+
|
1029 |
Cache::deleteTrackerCache();
|
1030 |
}
|
1031 |
|
1122 |
|
1123 |
if (is_array($access)) {
|
1124 |
// we require one role, and optionally multiple capabilities
|
1125 |
+
[$roles, $capabilities] = $this->getRoleAndCapabilitiesFromAccess($access);
|
1126 |
|
1127 |
if (count($roles) < 1) {
|
1128 |
$ids = implode(', ', $this->roleProvider->getAllRoleIds());
|
1195 |
$this->capabilityProvider->checkValidCapability($entry);
|
1196 |
}
|
1197 |
|
1198 |
+
[$sitesIdWithRole, $sitesIdWithCapability] = $this->getRolesAndCapabilitiesForLogin($userLogin);
|
1199 |
|
1200 |
foreach ($capabilities as $entry) {
|
1201 |
$cap = $this->capabilityProvider->getCapability($entry);
|
1468 |
if ($this->roleProvider->isValidRole($entry)) {
|
1469 |
$roles[] = $entry;
|
1470 |
} else {
|
1471 |
+
if ($this->isValidAccessType($entry)) {
|
1472 |
+
$capabilities[] = $entry;
|
1473 |
+
}
|
1474 |
}
|
1475 |
}
|
1476 |
return [$roles, $capabilities];
|
app/plugins/UsersManager/Controller.php
CHANGED
@@ -35,6 +35,8 @@ use Piwik\Validators\CharacterLength;
|
|
35 |
use Piwik\Validators\NotEmpty;
|
36 |
use Piwik\View;
|
37 |
use Piwik\Session\SessionInitializer;
|
|
|
|
|
38 |
|
39 |
class Controller extends ControllerAdmin
|
40 |
{
|
@@ -330,12 +332,29 @@ class Controller extends ControllerAdmin
|
|
330 |
$notification->context = Notification::CONTEXT_SUCCESS;
|
331 |
Notification\Manager::notify('successdeletetokens', $notification);
|
332 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
333 |
} elseif (is_numeric($idTokenAuth)) {
|
|
|
334 |
$this->userModel->deleteToken($idTokenAuth, Piwik::getCurrentUserLogin());
|
335 |
|
336 |
$notification = new Notification(Piwik::translate('UsersManager_TokenSuccessfullyDeleted'));
|
337 |
$notification->context = Notification::CONTEXT_SUCCESS;
|
338 |
Notification\Manager::notify('successdeletetoken', $notification);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
339 |
}
|
340 |
}
|
341 |
|
@@ -367,6 +386,14 @@ class Controller extends ControllerAdmin
|
|
367 |
|
368 |
$this->userModel->addTokenAuth($login, $generatedToken, $description, Date::now()->getDatetime());
|
369 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
370 |
return $this->renderTemplate('addNewTokenSuccess', array('generatedToken' => $generatedToken));
|
371 |
} elseif (isset($_POST['description'])) {
|
372 |
$noDescription = true;
|
35 |
use Piwik\Validators\NotEmpty;
|
36 |
use Piwik\View;
|
37 |
use Piwik\Session\SessionInitializer;
|
38 |
+
use Piwik\Plugins\CoreAdminHome\Emails\TokenAuthCreatedEmail;
|
39 |
+
use Piwik\Plugins\CoreAdminHome\Emails\TokenAuthDeletedEmail;
|
40 |
|
41 |
class Controller extends ControllerAdmin
|
42 |
{
|
332 |
$notification->context = Notification::CONTEXT_SUCCESS;
|
333 |
Notification\Manager::notify('successdeletetokens', $notification);
|
334 |
|
335 |
+
$container = StaticContainer::getContainer();
|
336 |
+
$email = $container->make(TokenAuthDeletedEmail::class, array(
|
337 |
+
'login' => Piwik::getCurrentUserLogin(),
|
338 |
+
'emailAddress' => Piwik::getCurrentUserEmail(),
|
339 |
+
'tokenDescription' => '',
|
340 |
+
'all' => true
|
341 |
+
));
|
342 |
+
$email->safeSend();
|
343 |
} elseif (is_numeric($idTokenAuth)) {
|
344 |
+
$description = $this->userModel->getUserTokenDescriptionByIdTokenAuth($idTokenAuth, Piwik::getCurrentUserLogin());
|
345 |
$this->userModel->deleteToken($idTokenAuth, Piwik::getCurrentUserLogin());
|
346 |
|
347 |
$notification = new Notification(Piwik::translate('UsersManager_TokenSuccessfullyDeleted'));
|
348 |
$notification->context = Notification::CONTEXT_SUCCESS;
|
349 |
Notification\Manager::notify('successdeletetoken', $notification);
|
350 |
+
|
351 |
+
$container = StaticContainer::getContainer();
|
352 |
+
$email = $container->make(TokenAuthDeletedEmail::class, array(
|
353 |
+
'login' => Piwik::getCurrentUserLogin(),
|
354 |
+
'emailAddress' => Piwik::getCurrentUserEmail(),
|
355 |
+
'tokenDescription' => $description
|
356 |
+
));
|
357 |
+
$email->safeSend();
|
358 |
}
|
359 |
}
|
360 |
|
386 |
|
387 |
$this->userModel->addTokenAuth($login, $generatedToken, $description, Date::now()->getDatetime());
|
388 |
|
389 |
+
$container = StaticContainer::getContainer();
|
390 |
+
$email = $container->make(TokenAuthCreatedEmail::class, array(
|
391 |
+
'login' => Piwik::getCurrentUserLogin(),
|
392 |
+
'emailAddress' => Piwik::getCurrentUserEmail(),
|
393 |
+
'tokenDescription' => $description
|
394 |
+
));
|
395 |
+
$email->safeSend();
|
396 |
+
|
397 |
return $this->renderTemplate('addNewTokenSuccess', array('generatedToken' => $generatedToken));
|
398 |
} elseif (isset($_POST['description'])) {
|
399 |
$noDescription = true;
|
app/plugins/UsersManager/Model.php
CHANGED
@@ -316,6 +316,15 @@ class Model
|
|
316 |
return $db->fetchRow("SELECT * FROM " . $this->tokenTable . " WHERE `password` = ?", $tokenAuth);
|
317 |
}
|
318 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
319 |
private function getQueryNotExpiredToken()
|
320 |
{
|
321 |
return array(
|
316 |
return $db->fetchRow("SELECT * FROM " . $this->tokenTable . " WHERE `password` = ?", $tokenAuth);
|
317 |
}
|
318 |
|
319 |
+
public function getUserTokenDescriptionByIdTokenAuth($idTokenAuth, $login)
|
320 |
+
{
|
321 |
+
$db = $this->getDb();
|
322 |
+
|
323 |
+
$token = $db->fetchRow("SELECT description FROM " . $this->tokenTable . " WHERE `idusertokenauth` = ? and login = ? LIMIT 1", array($idTokenAuth, $login));
|
324 |
+
|
325 |
+
return $token ? $token['description'] : '';
|
326 |
+
}
|
327 |
+
|
328 |
private function getQueryNotExpiredToken()
|
329 |
{
|
330 |
return array(
|
app/plugins/UsersManager/UsersManager.php
CHANGED
@@ -194,7 +194,7 @@ class UsersManager extends \Piwik\Plugin
|
|
194 |
if (!self::isValidPasswordString($password)) {
|
195 |
throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPassword', array(self::PASSWORD_MIN_LENGTH)));
|
196 |
}
|
197 |
-
if (
|
198 |
throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPasswordTooLong', array(self::PASSWORD_MAX_LENGTH)));
|
199 |
}
|
200 |
}
|
194 |
if (!self::isValidPasswordString($password)) {
|
195 |
throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPassword', array(self::PASSWORD_MIN_LENGTH)));
|
196 |
}
|
197 |
+
if (mb_strlen($password) > self::PASSWORD_MAX_LENGTH) {
|
198 |
throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPasswordTooLong', array(self::PASSWORD_MAX_LENGTH)));
|
199 |
}
|
200 |
}
|
app/vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInit9209fd533b4c3cc6523ff4b3463ad39c::getLoader();
|
app/vendor/composer/ClassLoader.php
CHANGED
@@ -338,7 +338,7 @@ class ClassLoader
|
|
338 |
* Loads the given class or interface.
|
339 |
*
|
340 |
* @param string $class The name of the class
|
341 |
-
* @return
|
342 |
*/
|
343 |
public function loadClass($class)
|
344 |
{
|
@@ -347,6 +347,8 @@ class ClassLoader
|
|
347 |
|
348 |
return true;
|
349 |
}
|
|
|
|
|
350 |
}
|
351 |
|
352 |
/**
|
338 |
* Loads the given class or interface.
|
339 |
*
|
340 |
* @param string $class The name of the class
|
341 |
+
* @return true|null True if loaded, null otherwise
|
342 |
*/
|
343 |
public function loadClass($class)
|
344 |
{
|
347 |
|
348 |
return true;
|
349 |
}
|
350 |
+
|
351 |
+
return null;
|
352 |
}
|
353 |
|
354 |
/**
|
app/vendor/composer/InstalledVersions.php
CHANGED
@@ -1,732 +1,337 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
|
13 |
namespace Composer;
|
14 |
|
15 |
use Composer\Autoload\ClassLoader;
|
16 |
use Composer\Semver\VersionParser;
|
17 |
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
class InstalledVersions
|
26 |
{
|
27 |
-
private static $installed
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
)
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
array (
|
338 |
-
'provided' =>
|
339 |
-
array (
|
340 |
-
0 => '1.0.0',
|
341 |
-
),
|
342 |
-
),
|
343 |
-
'rsky/pear-core-min' =>
|
344 |
-
array (
|
345 |
-
'replaced' =>
|
346 |
-
array (
|
347 |
-
0 => 'v1.10.10',
|
348 |
-
),
|
349 |
-
),
|
350 |
-
'symfony/console' =>
|
351 |
-
array (
|
352 |
-
'pretty_version' => 'v2.6.13',
|
353 |
-
'version' => '2.6.13.0',
|
354 |
-
'aliases' =>
|
355 |
-
array (
|
356 |
-
),
|
357 |
-
'reference' => '0e5e18ae09d3f5c06367759be940e9ed3f568359',
|
358 |
-
),
|
359 |
-
'symfony/event-dispatcher' =>
|
360 |
-
array (
|
361 |
-
'pretty_version' => 'v2.6.13',
|
362 |
-
'version' => '2.6.13.0',
|
363 |
-
'aliases' =>
|
364 |
-
array (
|
365 |
-
),
|
366 |
-
'reference' => '672593bc4b0043a0acf91903bb75a1c82d8f2e02',
|
367 |
-
),
|
368 |
-
'symfony/monolog-bridge' =>
|
369 |
-
array (
|
370 |
-
'pretty_version' => 'v2.6.13',
|
371 |
-
'version' => '2.6.13.0',
|
372 |
-
'aliases' =>
|
373 |
-
array (
|
374 |
-
),
|
375 |
-
'reference' => 'ba66eeabaa004e3ab70764cab59b056b182aa535',
|
376 |
-
),
|
377 |
-
'symfony/polyfill-ctype' =>
|
378 |
-
array (
|
379 |
-
'pretty_version' => 'v1.20.0',
|
380 |
-
'version' => '1.20.0.0',
|
381 |
-
'aliases' =>
|
382 |
-
array (
|
383 |
-
),
|
384 |
-
'reference' => 'f4ba089a5b6366e453971d3aad5fe8e897b37f41',
|
385 |
-
),
|
386 |
-
'symfony/polyfill-mbstring' =>
|
387 |
-
array (
|
388 |
-
'pretty_version' => 'v1.20.0',
|
389 |
-
'version' => '1.20.0.0',
|
390 |
-
'aliases' =>
|
391 |
-
array (
|
392 |
-
),
|
393 |
-
'reference' => '39d483bdf39be819deabf04ec872eb0b2410b531',
|
394 |
-
),
|
395 |
-
'symfony/polyfill-php54' =>
|
396 |
-
array (
|
397 |
-
'replaced' =>
|
398 |
-
array (
|
399 |
-
0 => '*',
|
400 |
-
),
|
401 |
-
),
|
402 |
-
'symfony/polyfill-php55' =>
|
403 |
-
array (
|
404 |
-
'replaced' =>
|
405 |
-
array (
|
406 |
-
0 => '*',
|
407 |
-
),
|
408 |
-
),
|
409 |
-
'symfony/polyfill-php56' =>
|
410 |
-
array (
|
411 |
-
'replaced' =>
|
412 |
-
array (
|
413 |
-
0 => '*',
|
414 |
-
),
|
415 |
-
),
|
416 |
-
'symfony/polyfill-php70' =>
|
417 |
-
array (
|
418 |
-
'replaced' =>
|
419 |
-
array (
|
420 |
-
0 => '*',
|
421 |
-
),
|
422 |
-
),
|
423 |
-
'symfony/polyfill-php71' =>
|
424 |
-
array (
|
425 |
-
'replaced' =>
|
426 |
-
array (
|
427 |
-
0 => '*',
|
428 |
-
),
|
429 |
-
),
|
430 |
-
'symfony/polyfill-php72' =>
|
431 |
-
array (
|
432 |
-
'replaced' =>
|
433 |
-
array (
|
434 |
-
0 => '*',
|
435 |
-
),
|
436 |
-
),
|
437 |
-
'szymach/c-pchart' =>
|
438 |
-
array (
|
439 |
-
'pretty_version' => 'v2.0.12',
|
440 |
-
'version' => '2.0.12.0',
|
441 |
-
'aliases' =>
|
442 |
-
array (
|
443 |
-
),
|
444 |
-
'reference' => 'f5fad68b303f65225db1a3d3f4bb58aea7a418b4',
|
445 |
-
),
|
446 |
-
'tecnickcom/tcpdf' =>
|
447 |
-
array (
|
448 |
-
'pretty_version' => '6.4.1',
|
449 |
-
'version' => '6.4.1.0',
|
450 |
-
'aliases' =>
|
451 |
-
array (
|
452 |
-
),
|
453 |
-
'reference' => '5ba838befdb37ef06a16d9f716f35eb03cb1b329',
|
454 |
-
),
|
455 |
-
'tedivm/jshrink' =>
|
456 |
-
array (
|
457 |
-
'pretty_version' => 'v1.4.0',
|
458 |
-
'version' => '1.4.0.0',
|
459 |
-
'aliases' =>
|
460 |
-
array (
|
461 |
-
),
|
462 |
-
'reference' => '0513ba1407b1f235518a939455855e6952a48bbc',
|
463 |
-
),
|
464 |
-
'twig/twig' =>
|
465 |
-
array (
|
466 |
-
'pretty_version' => 'v3.1.1',
|
467 |
-
'version' => '3.1.1.0',
|
468 |
-
'aliases' =>
|
469 |
-
array (
|
470 |
-
),
|
471 |
-
'reference' => 'b02fa41f3783a2616eccef7b92fbc2343ffed737',
|
472 |
-
),
|
473 |
-
'wikimedia/less.php' =>
|
474 |
-
array (
|
475 |
-
'pretty_version' => 'v3.1.0',
|
476 |
-
'version' => '3.1.0.0',
|
477 |
-
'aliases' =>
|
478 |
-
array (
|
479 |
-
),
|
480 |
-
'reference' => 'a486d78b9bd16b72f237fc6093aa56d69ce8bd13',
|
481 |
-
),
|
482 |
-
),
|
483 |
-
);
|
484 |
-
private static $canGetVendors;
|
485 |
-
private static $installedByVendor = array();
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
public static function getInstalledPackages()
|
494 |
-
{
|
495 |
-
$packages = array();
|
496 |
-
foreach (self::getInstalled() as $installed) {
|
497 |
-
$packages[] = array_keys($installed['versions']);
|
498 |
-
}
|
499 |
-
|
500 |
-
if (1 === \count($packages)) {
|
501 |
-
return $packages[0];
|
502 |
-
}
|
503 |
-
|
504 |
-
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
|
505 |
-
}
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
public static function isInstalled($packageName)
|
516 |
-
{
|
517 |
-
foreach (self::getInstalled() as $installed) {
|
518 |
-
if (isset($installed['versions'][$packageName])) {
|
519 |
-
return true;
|
520 |
-
}
|
521 |
-
}
|
522 |
-
|
523 |
-
return false;
|
524 |
-
}
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
540 |
-
{
|
541 |
-
$constraint = $parser->parseConstraints($constraint);
|
542 |
-
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
543 |
-
|
544 |
-
return $provided->matches($constraint);
|
545 |
-
}
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
public static function getVersionRanges($packageName)
|
557 |
-
{
|
558 |
-
foreach (self::getInstalled() as $installed) {
|
559 |
-
if (!isset($installed['versions'][$packageName])) {
|
560 |
-
continue;
|
561 |
-
}
|
562 |
-
|
563 |
-
$ranges = array();
|
564 |
-
if (isset($installed['versions'][$packageName]['pretty_version'])) {
|
565 |
-
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
|
566 |
-
}
|
567 |
-
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
|
568 |
-
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
|
569 |
-
}
|
570 |
-
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
|
571 |
-
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
|
572 |
-
}
|
573 |
-
if (array_key_exists('provided', $installed['versions'][$packageName])) {
|
574 |
-
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
|
575 |
-
}
|
576 |
-
|
577 |
-
return implode(' || ', $ranges);
|
578 |
-
}
|
579 |
-
|
580 |
-
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
581 |
-
}
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
public static function getVersion($packageName)
|
588 |
-
{
|
589 |
-
foreach (self::getInstalled() as $installed) {
|
590 |
-
if (!isset($installed['versions'][$packageName])) {
|
591 |
-
continue;
|
592 |
-
}
|
593 |
-
|
594 |
-
if (!isset($installed['versions'][$packageName]['version'])) {
|
595 |
-
return null;
|
596 |
-
}
|
597 |
-
|
598 |
-
return $installed['versions'][$packageName]['version'];
|
599 |
-
}
|
600 |
-
|
601 |
-
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
602 |
-
}
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
public static function getPrettyVersion($packageName)
|
609 |
-
{
|
610 |
-
foreach (self::getInstalled() as $installed) {
|
611 |
-
if (!isset($installed['versions'][$packageName])) {
|
612 |
-
continue;
|
613 |
-
}
|
614 |
-
|
615 |
-
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
|
616 |
-
return null;
|
617 |
-
}
|
618 |
-
|
619 |
-
return $installed['versions'][$packageName]['pretty_version'];
|
620 |
-
}
|
621 |
-
|
622 |
-
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
623 |
-
}
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
public static function getReference($packageName)
|
630 |
-
{
|
631 |
-
foreach (self::getInstalled() as $installed) {
|
632 |
-
if (!isset($installed['versions'][$packageName])) {
|
633 |
-
continue;
|
634 |
-
}
|
635 |
-
|
636 |
-
if (!isset($installed['versions'][$packageName]['reference'])) {
|
637 |
-
return null;
|
638 |
-
}
|
639 |
-
|
640 |
-
return $installed['versions'][$packageName]['reference'];
|
641 |
-
}
|
642 |
-
|
643 |
-
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
644 |
-
}
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
public static function getRootPackage()
|
651 |
-
{
|
652 |
-
$installed = self::getInstalled();
|
653 |
-
|
654 |
-
return $installed[0]['root'];
|
655 |
-
}
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
public static function getRawData()
|
665 |
-
{
|
666 |
-
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
|
667 |
-
|
668 |
-
return self::$installed;
|
669 |
-
}
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
public static function getAllRawData()
|
678 |
-
{
|
679 |
-
return self::getInstalled();
|
680 |
-
}
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
public static function reload($data)
|
701 |
-
{
|
702 |
-
self::$installed = $data;
|
703 |
-
self::$installedByVendor = array();
|
704 |
-
}
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
private static function getInstalled()
|
711 |
-
{
|
712 |
-
if (null === self::$canGetVendors) {
|
713 |
-
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
|
714 |
-
}
|
715 |
-
|
716 |
-
$installed = array();
|
717 |
-
|
718 |
-
if (self::$canGetVendors) {
|
719 |
-
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
720 |
-
if (isset(self::$installedByVendor[$vendorDir])) {
|
721 |
-
$installed[] = self::$installedByVendor[$vendorDir];
|
722 |
-
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
723 |
-
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
|
724 |
-
}
|
725 |
-
}
|
726 |
-
}
|
727 |
-
|
728 |
-
$installed[] = self::$installed;
|
729 |
-
|
730 |
-
return $installed;
|
731 |
-
}
|
732 |
}
|
1 |
<?php
|
2 |
|
3 |
+
/*
|
4 |
+
* This file is part of Composer.
|
5 |
+
*
|
6 |
+
* (c) Nils Adermann <naderman@naderman.de>
|
7 |
+
* Jordi Boggiano <j.boggiano@seld.be>
|
8 |
+
*
|
9 |
+
* For the full copyright and license information, please view the LICENSE
|
10 |
+
* file that was distributed with this source code.
|
11 |
+
*/
|
12 |
|
13 |
namespace Composer;
|
14 |
|
15 |
use Composer\Autoload\ClassLoader;
|
16 |
use Composer\Semver\VersionParser;
|
17 |
|
18 |
+
/**
|
19 |
+
* This class is copied in every Composer installed project and available to all
|
20 |
+
*
|
21 |
+
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
|
22 |
+
*
|
23 |
+
* To require it's presence, you can require `composer-runtime-api ^2.0`
|
24 |
+
*/
|
25 |
class InstalledVersions
|
26 |
{
|
27 |
+
private static $installed;
|
28 |
+
private static $canGetVendors;
|
29 |
+
private static $installedByVendor = array();
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Returns a list of all package names which are present, either by being installed, replaced or provided
|
33 |
+
*
|
34 |
+
* @return string[]
|
35 |
+
* @psalm-return list<string>
|
36 |
+
*/
|
37 |
+
public static function getInstalledPackages()
|
38 |
+
{
|
39 |
+
$packages = array();
|
40 |
+
foreach (self::getInstalled() as $installed) {
|
41 |
+
$packages[] = array_keys($installed['versions']);
|
42 |
+
}
|
43 |
+
|
44 |
+
if (1 === \count($packages)) {
|
45 |
+
return $packages[0];
|
46 |
+
}
|
47 |
+
|
48 |
+
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Returns a list of all package names with a specific type e.g. 'library'
|
53 |
+
*
|
54 |
+
* @param string $type
|
55 |
+
* @return string[]
|
56 |
+
* @psalm-return list<string>
|
57 |
+
*/
|
58 |
+
public static function getInstalledPackagesByType($type)
|
59 |
+
{
|
60 |
+
$packagesByType = array();
|
61 |
+
|
62 |
+
foreach (self::getInstalled() as $installed) {
|
63 |
+
foreach ($installed['versions'] as $name => $package) {
|
64 |
+
if (isset($package['type']) && $package['type'] === $type) {
|
65 |
+
$packagesByType[] = $name;
|
66 |
+
}
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
return $packagesByType;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Checks whether the given package is installed
|
75 |
+
*
|
76 |
+
* This also returns true if the package name is provided or replaced by another package
|
77 |
+
*
|
78 |
+
* @param string $packageName
|
79 |
+
* @param bool $includeDevRequirements
|
80 |
+
* @return bool
|
81 |
+
*/
|
82 |
+
public static function isInstalled($packageName, $includeDevRequirements = true)
|
83 |
+
{
|
84 |
+
foreach (self::getInstalled() as $installed) {
|
85 |
+
if (isset($installed['versions'][$packageName])) {
|
86 |
+
return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
return false;
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Checks whether the given package satisfies a version constraint
|
95 |
+
*
|
96 |
+
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
|
97 |
+
*
|
98 |
+
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
|
99 |
+
*
|
100 |
+
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
|
101 |
+
* @param string $packageName
|
102 |
+
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
|
103 |
+
* @return bool
|
104 |
+
*/
|
105 |
+
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
106 |
+
{
|
107 |
+
$constraint = $parser->parseConstraints($constraint);
|
108 |
+
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
109 |
+
|
110 |
+
return $provided->matches($constraint);
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Returns a version constraint representing all the range(s) which are installed for a given package
|
115 |
+
*
|
116 |
+
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
|
117 |
+
* whether a given version of a package is installed, and not just whether it exists
|
118 |
+
*
|
119 |
+
* @param string $packageName
|
120 |
+
* @return string Version constraint usable with composer/semver
|
121 |
+
*/
|
122 |
+
public static function getVersionRanges($packageName)
|
123 |
+
{
|
124 |
+
foreach (self::getInstalled() as $installed) {
|
125 |
+
if (!isset($installed['versions'][$packageName])) {
|
126 |
+
continue;
|
127 |
+
}
|
128 |
+
|
129 |
+
$ranges = array();
|
130 |
+
if (isset($installed['versions'][$packageName]['pretty_version'])) {
|
131 |
+
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
|
132 |
+
}
|
133 |
+
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
|
134 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
|
135 |
+
}
|
136 |
+
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
|
137 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
|
138 |
+
}
|
139 |
+
if (array_key_exists('provided', $installed['versions'][$packageName])) {
|
140 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
|
141 |
+
}
|
142 |
+
|
143 |
+
return implode(' || ', $ranges);
|
144 |
+
}
|
145 |
+
|
146 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* @param string $packageName
|
151 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
152 |
+
*/
|
153 |
+
public static function getVersion($packageName)
|
154 |
+
{
|
155 |
+
foreach (self::getInstalled() as $installed) {
|
156 |
+
if (!isset($installed['versions'][$packageName])) {
|
157 |
+
continue;
|
158 |
+
}
|
159 |
+
|
160 |
+
if (!isset($installed['versions'][$packageName]['version'])) {
|
161 |
+
return null;
|
162 |
+
}
|
163 |
+
|
164 |
+
return $installed['versions'][$packageName]['version'];
|
165 |
+
}
|
166 |
+
|
167 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* @param string $packageName
|
172 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
173 |
+
*/
|
174 |
+
public static function getPrettyVersion($packageName)
|
175 |
+
{
|
176 |
+
foreach (self::getInstalled() as $installed) {
|
177 |
+
if (!isset($installed['versions'][$packageName])) {
|
178 |
+
continue;
|
179 |
+
}
|
180 |
+
|
181 |
+
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
|
182 |
+
return null;
|
183 |
+
}
|
184 |
+
|
185 |
+
return $installed['versions'][$packageName]['pretty_version'];
|
186 |
+
}
|
187 |
+
|
188 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* @param string $packageName
|
193 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
|
194 |
+
*/
|
195 |
+
public static function getReference($packageName)
|
196 |
+
{
|
197 |
+
foreach (self::getInstalled() as $installed) {
|
198 |
+
if (!isset($installed['versions'][$packageName])) {
|
199 |
+
continue;
|
200 |
+
}
|
201 |
+
|
202 |
+
if (!isset($installed['versions'][$packageName]['reference'])) {
|
203 |
+
return null;
|
204 |
+
}
|
205 |
+
|
206 |
+
return $installed['versions'][$packageName]['reference'];
|
207 |
+
}
|
208 |
+
|
209 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* @param string $packageName
|
214 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
|
215 |
+
*/
|
216 |
+
public static function getInstallPath($packageName)
|
217 |
+
{
|
218 |
+
foreach (self::getInstalled() as $installed) {
|
219 |
+
if (!isset($installed['versions'][$packageName])) {
|
220 |
+
continue;
|
221 |
+
}
|
222 |
+
|
223 |
+
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
|
224 |
+
}
|
225 |
+
|
226 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* @return array
|
231 |
+
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
|
232 |
+
*/
|
233 |
+
public static function getRootPackage()
|
234 |
+
{
|
235 |
+
$installed = self::getInstalled();
|
236 |
+
|
237 |
+
return $installed[0]['root'];
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Returns the raw installed.php data for custom implementations
|
242 |
+
*
|
243 |
+
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
244 |
+
* @return array[]
|
245 |
+
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
|
246 |
+
*/
|
247 |
+
public static function getRawData()
|
248 |
+
{
|
249 |
+
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
|
250 |
+
|
251 |
+
if (null === self::$installed) {
|
252 |
+
// only require the installed.php file if this file is loaded from its dumped location,
|
253 |
+
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
254 |
+
if (substr(__DIR__, -8, 1) !== 'C') {
|
255 |
+
self::$installed = include __DIR__ . '/installed.php';
|
256 |
+
} else {
|
257 |
+
self::$installed = array();
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
+
return self::$installed;
|
262 |
+
}
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
266 |
+
*
|
267 |
+
* @return array[]
|
268 |
+
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
|
269 |
+
*/
|
270 |
+
public static function getAllRawData()
|
271 |
+
{
|
272 |
+
return self::getInstalled();
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* Lets you reload the static array from another file
|
277 |
+
*
|
278 |
+
* This is only useful for complex integrations in which a project needs to use
|
279 |
+
* this class but then also needs to execute another project's autoloader in process,
|
280 |
+
* and wants to ensure both projects have access to their version of installed.php.
|
281 |
+
*
|
282 |
+
* A typical case would be PHPUnit, where it would need to make sure it reads all
|
283 |
+
* the data it needs from this class, then call reload() with
|
284 |
+
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
|
285 |
+
* the project in which it runs can then also use this class safely, without
|
286 |
+
* interference between PHPUnit's dependencies and the project's dependencies.
|
287 |
+
*
|
288 |
+
* @param array[] $data A vendor/composer/installed.php data set
|
289 |
+
* @return void
|
290 |
+
*
|
291 |
+
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
|
292 |
+
*/
|
293 |
+
public static function reload($data)
|
294 |
+
{
|
295 |
+
self::$installed = $data;
|
296 |
+
self::$installedByVendor = array();
|
297 |
+
}
|
298 |
+
|
299 |
+
/**
|
300 |
+
* @return array[]
|
301 |
+
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
|
302 |
+
*/
|
303 |
+
private static function getInstalled()
|
304 |
+
{
|
305 |
+
if (null === self::$canGetVendors) {
|
306 |
+
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
|
307 |
+
}
|
308 |
+
|
309 |
+
$installed = array();
|
310 |
+
|
311 |
+
if (self::$canGetVendors) {
|
312 |
+
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
313 |
+
if (isset(self::$installedByVendor[$vendorDir])) {
|
314 |
+
$installed[] = self::$installedByVendor[$vendorDir];
|
315 |
+
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
316 |
+
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
|
317 |
+
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
318 |
+
self::$installed = $installed[count($installed) - 1];
|
319 |
+
}
|
320 |
+
}
|
321 |
+
}
|
322 |
+
}
|
323 |
+
|
324 |
+
if (null === self::$installed) {
|
325 |
+
// only require the installed.php file if this file is loaded from its dumped location,
|
326 |
+
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
327 |
+
if (substr(__DIR__, -8, 1) !== 'C') {
|
328 |
+
self::$installed = require __DIR__ . '/installed.php';
|
329 |
+
} else {
|
330 |
+
self::$installed = array();
|
331 |
+
}
|
332 |
+
}
|
333 |
+
$installed[] = self::$installed;
|
334 |
+
|
335 |
+
return $installed;
|
336 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
337 |
}
|
app/vendor/composer/autoload_classmap.php
CHANGED
@@ -130,43 +130,44 @@ return array(
|
|
130 |
'DeviceDetector\\Parser\\Device\\Mobile' => $vendorDir . '/matomo/device-detector/Parser/Device/Mobile.php',
|
131 |
'DeviceDetector\\Parser\\Device\\Notebook' => $vendorDir . '/matomo/device-detector/Parser/Device/Notebook.php',
|
132 |
'DeviceDetector\\Parser\\Device\\PortableMediaPlayer' => $vendorDir . '/matomo/device-detector/Parser/Device/PortableMediaPlayer.php',
|
|
|
133 |
'DeviceDetector\\Parser\\OperatingSystem' => $vendorDir . '/matomo/device-detector/Parser/OperatingSystem.php',
|
134 |
'DeviceDetector\\Parser\\VendorFragment' => $vendorDir . '/matomo/device-detector/Parser/VendorFragment.php',
|
135 |
'DeviceDetector\\Yaml\\ParserInterface' => $vendorDir . '/matomo/device-detector/Yaml/ParserInterface.php',
|
136 |
'DeviceDetector\\Yaml\\Pecl' => $vendorDir . '/matomo/device-detector/Yaml/Pecl.php',
|
137 |
'DeviceDetector\\Yaml\\Spyc' => $vendorDir . '/matomo/device-detector/Yaml/Spyc.php',
|
138 |
'DeviceDetector\\Yaml\\Symfony' => $vendorDir . '/matomo/device-detector/Yaml/Symfony.php',
|
139 |
-
'Doctrine\\Common\\Cache\\ApcCache' => $vendorDir . '/doctrine
|
140 |
-
'Doctrine\\Common\\Cache\\ApcuCache' => $vendorDir . '/doctrine
|
141 |
-
'Doctrine\\Common\\Cache\\ArrayCache' => $vendorDir . '/doctrine
|
142 |
-
'Doctrine\\Common\\Cache\\Cache' => $vendorDir . '/doctrine
|
143 |
-
'Doctrine\\Common\\Cache\\CacheProvider' => $vendorDir . '/doctrine
|
144 |
-
'Doctrine\\Common\\Cache\\ChainCache' => $vendorDir . '/doctrine
|
145 |
-
'Doctrine\\Common\\Cache\\ClearableCache' => $vendorDir . '/doctrine
|
146 |
-
'Doctrine\\Common\\Cache\\CouchbaseBucketCache' => $vendorDir . '/doctrine
|
147 |
-
'Doctrine\\Common\\Cache\\CouchbaseCache' => $vendorDir . '/doctrine
|
148 |
-
'Doctrine\\Common\\Cache\\ExtMongoDBCache' => $vendorDir . '/doctrine
|
149 |
-
'Doctrine\\Common\\Cache\\FileCache' => $vendorDir . '/doctrine
|
150 |
-
'Doctrine\\Common\\Cache\\FilesystemCache' => $vendorDir . '/doctrine
|
151 |
-
'Doctrine\\Common\\Cache\\FlushableCache' => $vendorDir . '/doctrine
|
152 |
-
'Doctrine\\Common\\Cache\\InvalidCacheId' => $vendorDir . '/doctrine
|
153 |
-
'Doctrine\\Common\\Cache\\LegacyMongoDBCache' => $vendorDir . '/doctrine
|
154 |
-
'Doctrine\\Common\\Cache\\MemcacheCache' => $vendorDir . '/doctrine
|
155 |
-
'Doctrine\\Common\\Cache\\MemcachedCache' => $vendorDir . '/doctrine
|
156 |
-
'Doctrine\\Common\\Cache\\MongoDBCache' => $vendorDir . '/doctrine
|
157 |
-
'Doctrine\\Common\\Cache\\MultiDeleteCache' => $vendorDir . '/doctrine
|
158 |
-
'Doctrine\\Common\\Cache\\MultiGetCache' => $vendorDir . '/doctrine
|
159 |
-
'Doctrine\\Common\\Cache\\MultiOperationCache' => $vendorDir . '/doctrine
|
160 |
-
'Doctrine\\Common\\Cache\\MultiPutCache' => $vendorDir . '/doctrine
|
161 |
-
'Doctrine\\Common\\Cache\\PhpFileCache' => $vendorDir . '/doctrine
|
162 |
-
'Doctrine\\Common\\Cache\\PredisCache' => $vendorDir . '/doctrine
|
163 |
-
'Doctrine\\Common\\Cache\\RedisCache' => $vendorDir . '/doctrine
|
164 |
-
'Doctrine\\Common\\Cache\\SQLite3Cache' => $vendorDir . '/doctrine
|
165 |
-
'Doctrine\\Common\\Cache\\Version' => $vendorDir . '/doctrine
|
166 |
-
'Doctrine\\Common\\Cache\\VoidCache' => $vendorDir . '/doctrine
|
167 |
-
'Doctrine\\Common\\Cache\\WinCacheCache' => $vendorDir . '/doctrine
|
168 |
-
'Doctrine\\Common\\Cache\\XcacheCache' => $vendorDir . '/doctrine
|
169 |
-
'Doctrine\\Common\\Cache\\ZendDataCache' => $vendorDir . '/doctrine
|
170 |
'GeoIp2\\Database\\Reader' => $vendorDir . '/geoip2/geoip2/src/Database/Reader.php',
|
171 |
'GeoIp2\\Exception\\AddressNotFoundException' => $vendorDir . '/geoip2/geoip2/src/Exception/AddressNotFoundException.php',
|
172 |
'GeoIp2\\Exception\\AuthenticationException' => $vendorDir . '/geoip2/geoip2/src/Exception/AuthenticationException.php',
|
@@ -339,10 +340,13 @@ return array(
|
|
339 |
'MatomoTracker' => $vendorDir . '/matomo/matomo-php-tracker/MatomoTracker.php',
|
340 |
'Matomo\\Cache\\Backend' => $vendorDir . '/matomo/cache/src/Backend.php',
|
341 |
'Matomo\\Cache\\Backend\\ArrayCache' => $vendorDir . '/matomo/cache/src/Backend/ArrayCache.php',
|
|
|
342 |
'Matomo\\Cache\\Backend\\Chained' => $vendorDir . '/matomo/cache/src/Backend/Chained.php',
|
|
|
343 |
'Matomo\\Cache\\Backend\\Factory' => $vendorDir . '/matomo/cache/src/Backend/Factory.php',
|
344 |
'Matomo\\Cache\\Backend\\Factory\\BackendNotFoundException' => $vendorDir . '/matomo/cache/src/Backend/Factory/BackendNotFoundException.php',
|
345 |
'Matomo\\Cache\\Backend\\File' => $vendorDir . '/matomo/cache/src/Backend/File.php',
|
|
|
346 |
'Matomo\\Cache\\Backend\\NullCache' => $vendorDir . '/matomo/cache/src/Backend/NullCache.php',
|
347 |
'Matomo\\Cache\\Backend\\Redis' => $vendorDir . '/matomo/cache/src/Backend/Redis.php',
|
348 |
'Matomo\\Cache\\Cache' => $vendorDir . '/matomo/cache/src/Cache.php',
|
@@ -953,11 +957,22 @@ return array(
|
|
953 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\RunScheduledTasks' => $baseDir . '/plugins/CoreAdminHome/Commands/RunScheduledTasks.php',
|
954 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\SetConfig' => $baseDir . '/plugins/CoreAdminHome/Commands/SetConfig.php',
|
955 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\SetConfig\\ConfigSettingManipulation' => $baseDir . '/plugins/CoreAdminHome/Commands/SetConfig/ConfigSettingManipulation.php',
|
|
|
956 |
'Piwik\\Plugins\\CoreAdminHome\\Controller' => $baseDir . '/plugins/CoreAdminHome/Controller.php',
|
957 |
'Piwik\\Plugins\\CoreAdminHome\\CoreAdminHome' => $baseDir . '/plugins/CoreAdminHome/CoreAdminHome.php',
|
958 |
'Piwik\\Plugins\\CoreAdminHome\\CustomLogo' => $baseDir . '/plugins/CoreAdminHome/CustomLogo.php',
|
959 |
'Piwik\\Plugins\\CoreAdminHome\\Emails\\JsTrackingCodeMissingEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/JsTrackingCodeMissingEmail.php',
|
|
|
|
|
|
|
|
|
|
|
|
|
960 |
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TrackingFailuresEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/TrackingFailuresEmail.php',
|
|
|
|
|
|
|
|
|
961 |
'Piwik\\Plugins\\CoreAdminHome\\Menu' => $baseDir . '/plugins/CoreAdminHome/Menu.php',
|
962 |
'Piwik\\Plugins\\CoreAdminHome\\Model\\DuplicateActionRemover' => $baseDir . '/plugins/CoreAdminHome/Model/DuplicateActionRemover.php',
|
963 |
'Piwik\\Plugins\\CoreAdminHome\\OptOutManager' => $baseDir . '/plugins/CoreAdminHome/OptOutManager.php',
|
@@ -998,6 +1013,7 @@ return array(
|
|
998 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateReport' => $baseDir . '/plugins/CoreConsole/Commands/GenerateReport.php',
|
999 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateScheduledTask' => $baseDir . '/plugins/CoreConsole/Commands/GenerateScheduledTask.php',
|
1000 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateSettings' => $baseDir . '/plugins/CoreConsole/Commands/GenerateSettings.php',
|
|
|
1001 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateTest' => $baseDir . '/plugins/CoreConsole/Commands/GenerateTest.php',
|
1002 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateUpdate' => $baseDir . '/plugins/CoreConsole/Commands/GenerateUpdate.php',
|
1003 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateVisualizationPlugin' => $baseDir . '/plugins/CoreConsole/Commands/GenerateVisualizationPlugin.php',
|
@@ -1431,6 +1447,7 @@ return array(
|
|
1431 |
'Piwik\\Plugins\\ExamplePlugin\\API' => $baseDir . '/plugins/ExamplePlugin/API.php',
|
1432 |
'Piwik\\Plugins\\ExamplePlugin\\Archiver' => $baseDir . '/plugins/ExamplePlugin/Archiver.php',
|
1433 |
'Piwik\\Plugins\\ExamplePlugin\\Controller' => $baseDir . '/plugins/ExamplePlugin/Controller.php',
|
|
|
1434 |
'Piwik\\Plugins\\ExamplePlugin\\ExamplePlugin' => $baseDir . '/plugins/ExamplePlugin/ExamplePlugin.php',
|
1435 |
'Piwik\\Plugins\\ExamplePlugin\\Menu' => $baseDir . '/plugins/ExamplePlugin/Menu.php',
|
1436 |
'Piwik\\Plugins\\ExamplePlugin\\Tasks' => $baseDir . '/plugins/ExamplePlugin/Tasks.php',
|
@@ -1954,6 +1971,7 @@ return array(
|
|
1954 |
'Piwik\\Plugins\\ScheduledReports\\SubscriptionModel' => $baseDir . '/plugins/ScheduledReports/SubscriptionModel.php',
|
1955 |
'Piwik\\Plugins\\ScheduledReports\\Tasks' => $baseDir . '/plugins/ScheduledReports/Tasks.php',
|
1956 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Fixtures\\ReportSubscription' => $baseDir . '/plugins/ScheduledReports/tests/Fixtures/ReportSubscription.php',
|
|
|
1957 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGeneratorTest' => $baseDir . '/plugins/ScheduledReports/tests/Integration/ReportEmailGeneratorTest.php',
|
1958 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGenerator\\AttachedFileReportEmailGeneratorTest' => $baseDir . '/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/AttachedFileReportEmailGeneratorTest.php',
|
1959 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGenerator\\HtmlReportEmailGeneratorTest' => $baseDir . '/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/HtmlReportEmailGeneratorTest.php',
|
@@ -2344,7 +2362,10 @@ return array(
|
|
2344 |
'Piwik\\Plugins\\UserCountry\\UserCountry' => $baseDir . '/plugins/UserCountry/UserCountry.php',
|
2345 |
'Piwik\\Plugins\\UserCountry\\VisitorDetails' => $baseDir . '/plugins/UserCountry/VisitorDetails.php',
|
2346 |
'Piwik\\Plugins\\UserCountry\\VisitorGeolocator' => $baseDir . '/plugins/UserCountry/VisitorGeolocator.php',
|
|
|
|
|
2347 |
'Piwik\\Plugins\\UserCountry\\tests\\Integration\\VisitorGeolocatorTest' => $baseDir . '/plugins/UserCountry/tests/Integration/VisitorGeolocatorTest.php',
|
|
|
2348 |
'Piwik\\Plugins\\UserCountry\\tests\\System\\AttributeHistoricalDataWithLocationsTest' => $baseDir . '/plugins/UserCountry/tests/System/AttributeHistoricalDataWithLocationsTest.php',
|
2349 |
'Piwik\\Plugins\\UserCountry\\tests\\Unit\\UserCountryTest' => $baseDir . '/plugins/UserCountry/tests/Unit/UserCountryTest.php',
|
2350 |
'Piwik\\Plugins\\UserId\\API' => $baseDir . '/plugins/UserId/API.php',
|
@@ -2763,6 +2784,7 @@ return array(
|
|
2763 |
'Symfony\\Component\\EventDispatcher\\Tests\\GenericEventTest' => $vendorDir . '/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/GenericEventTest.php',
|
2764 |
'Symfony\\Component\\EventDispatcher\\Tests\\ImmutableEventDispatcherTest' => $vendorDir . '/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/ImmutableEventDispatcherTest.php',
|
2765 |
'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php',
|
|
|
2766 |
'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php',
|
2767 |
'System' => $vendorDir . '/pear/pear-core-minimal/src/System.php',
|
2768 |
'TCPDF' => $vendorDir . '/tecnickcom/tcpdf/tcpdf.php',
|
130 |
'DeviceDetector\\Parser\\Device\\Mobile' => $vendorDir . '/matomo/device-detector/Parser/Device/Mobile.php',
|
131 |
'DeviceDetector\\Parser\\Device\\Notebook' => $vendorDir . '/matomo/device-detector/Parser/Device/Notebook.php',
|
132 |
'DeviceDetector\\Parser\\Device\\PortableMediaPlayer' => $vendorDir . '/matomo/device-detector/Parser/Device/PortableMediaPlayer.php',
|
133 |
+
'DeviceDetector\\Parser\\Device\\ShellTv' => $vendorDir . '/matomo/device-detector/Parser/Device/ShellTv.php',
|
134 |
'DeviceDetector\\Parser\\OperatingSystem' => $vendorDir . '/matomo/device-detector/Parser/OperatingSystem.php',
|
135 |
'DeviceDetector\\Parser\\VendorFragment' => $vendorDir . '/matomo/device-detector/Parser/VendorFragment.php',
|
136 |
'DeviceDetector\\Yaml\\ParserInterface' => $vendorDir . '/matomo/device-detector/Yaml/ParserInterface.php',
|
137 |
'DeviceDetector\\Yaml\\Pecl' => $vendorDir . '/matomo/device-detector/Yaml/Pecl.php',
|
138 |
'DeviceDetector\\Yaml\\Spyc' => $vendorDir . '/matomo/device-detector/Yaml/Spyc.php',
|
139 |
'DeviceDetector\\Yaml\\Symfony' => $vendorDir . '/matomo/device-detector/Yaml/Symfony.php',
|
140 |
+
'Doctrine\\Common\\Cache\\ApcCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ApcCache.php',
|
141 |
+
'Doctrine\\Common\\Cache\\ApcuCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ApcuCache.php',
|
142 |
+
'Doctrine\\Common\\Cache\\ArrayCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ArrayCache.php',
|
143 |
+
'Doctrine\\Common\\Cache\\Cache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/Cache.php',
|
144 |
+
'Doctrine\\Common\\Cache\\CacheProvider' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/CacheProvider.php',
|
145 |
+
'Doctrine\\Common\\Cache\\ChainCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ChainCache.php',
|
146 |
+
'Doctrine\\Common\\Cache\\ClearableCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ClearableCache.php',
|
147 |
+
'Doctrine\\Common\\Cache\\CouchbaseBucketCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/CouchbaseBucketCache.php',
|
148 |
+
'Doctrine\\Common\\Cache\\CouchbaseCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/CouchbaseCache.php',
|
149 |
+
'Doctrine\\Common\\Cache\\ExtMongoDBCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ExtMongoDBCache.php',
|
150 |
+
'Doctrine\\Common\\Cache\\FileCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/FileCache.php',
|
151 |
+
'Doctrine\\Common\\Cache\\FilesystemCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/FilesystemCache.php',
|
152 |
+
'Doctrine\\Common\\Cache\\FlushableCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/FlushableCache.php',
|
153 |
+
'Doctrine\\Common\\Cache\\InvalidCacheId' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/InvalidCacheId.php',
|
154 |
+
'Doctrine\\Common\\Cache\\LegacyMongoDBCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/LegacyMongoDBCache.php',
|
155 |
+
'Doctrine\\Common\\Cache\\MemcacheCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MemcacheCache.php',
|
156 |
+
'Doctrine\\Common\\Cache\\MemcachedCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MemcachedCache.php',
|
157 |
+
'Doctrine\\Common\\Cache\\MongoDBCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MongoDBCache.php',
|
158 |
+
'Doctrine\\Common\\Cache\\MultiDeleteCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MultiDeleteCache.php',
|
159 |
+
'Doctrine\\Common\\Cache\\MultiGetCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MultiGetCache.php',
|
160 |
+
'Doctrine\\Common\\Cache\\MultiOperationCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MultiOperationCache.php',
|
161 |
+
'Doctrine\\Common\\Cache\\MultiPutCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MultiPutCache.php',
|
162 |
+
'Doctrine\\Common\\Cache\\PhpFileCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/PhpFileCache.php',
|
163 |
+
'Doctrine\\Common\\Cache\\PredisCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/PredisCache.php',
|
164 |
+
'Doctrine\\Common\\Cache\\RedisCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/RedisCache.php',
|
165 |
+
'Doctrine\\Common\\Cache\\SQLite3Cache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/SQLite3Cache.php',
|
166 |
+
'Doctrine\\Common\\Cache\\Version' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/Version.php',
|
167 |
+
'Doctrine\\Common\\Cache\\VoidCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/VoidCache.php',
|
168 |
+
'Doctrine\\Common\\Cache\\WinCacheCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/WinCacheCache.php',
|
169 |
+
'Doctrine\\Common\\Cache\\XcacheCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/XcacheCache.php',
|
170 |
+
'Doctrine\\Common\\Cache\\ZendDataCache' => $vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ZendDataCache.php',
|
171 |
'GeoIp2\\Database\\Reader' => $vendorDir . '/geoip2/geoip2/src/Database/Reader.php',
|
172 |
'GeoIp2\\Exception\\AddressNotFoundException' => $vendorDir . '/geoip2/geoip2/src/Exception/AddressNotFoundException.php',
|
173 |
'GeoIp2\\Exception\\AuthenticationException' => $vendorDir . '/geoip2/geoip2/src/Exception/AuthenticationException.php',
|
340 |
'MatomoTracker' => $vendorDir . '/matomo/matomo-php-tracker/MatomoTracker.php',
|
341 |
'Matomo\\Cache\\Backend' => $vendorDir . '/matomo/cache/src/Backend.php',
|
342 |
'Matomo\\Cache\\Backend\\ArrayCache' => $vendorDir . '/matomo/cache/src/Backend/ArrayCache.php',
|
343 |
+
'Matomo\\Cache\\Backend\\BaseDecorator' => $vendorDir . '/matomo/cache/src/Backend/BaseDecorator.php',
|
344 |
'Matomo\\Cache\\Backend\\Chained' => $vendorDir . '/matomo/cache/src/Backend/Chained.php',
|
345 |
+
'Matomo\\Cache\\Backend\\DefaultTimeoutDecorated' => $vendorDir . '/matomo/cache/src/Backend/DefaultTimeoutDecorated.php',
|
346 |
'Matomo\\Cache\\Backend\\Factory' => $vendorDir . '/matomo/cache/src/Backend/Factory.php',
|
347 |
'Matomo\\Cache\\Backend\\Factory\\BackendNotFoundException' => $vendorDir . '/matomo/cache/src/Backend/Factory/BackendNotFoundException.php',
|
348 |
'Matomo\\Cache\\Backend\\File' => $vendorDir . '/matomo/cache/src/Backend/File.php',
|
349 |
+
'Matomo\\Cache\\Backend\\KeyPrefixDecorated' => $vendorDir . '/matomo/cache/src/Backend/KeyPrefixDecorated.php',
|
350 |
'Matomo\\Cache\\Backend\\NullCache' => $vendorDir . '/matomo/cache/src/Backend/NullCache.php',
|
351 |
'Matomo\\Cache\\Backend\\Redis' => $vendorDir . '/matomo/cache/src/Backend/Redis.php',
|
352 |
'Matomo\\Cache\\Cache' => $vendorDir . '/matomo/cache/src/Cache.php',
|
957 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\RunScheduledTasks' => $baseDir . '/plugins/CoreAdminHome/Commands/RunScheduledTasks.php',
|
958 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\SetConfig' => $baseDir . '/plugins/CoreAdminHome/Commands/SetConfig.php',
|
959 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\SetConfig\\ConfigSettingManipulation' => $baseDir . '/plugins/CoreAdminHome/Commands/SetConfig/ConfigSettingManipulation.php',
|
960 |
+
'Piwik\\Plugins\\CoreAdminHome\\Commands\\VersionInfo' => $baseDir . '/plugins/CoreAdminHome/Commands/VersionInfo.php',
|
961 |
'Piwik\\Plugins\\CoreAdminHome\\Controller' => $baseDir . '/plugins/CoreAdminHome/Controller.php',
|
962 |
'Piwik\\Plugins\\CoreAdminHome\\CoreAdminHome' => $baseDir . '/plugins/CoreAdminHome/CoreAdminHome.php',
|
963 |
'Piwik\\Plugins\\CoreAdminHome\\CustomLogo' => $baseDir . '/plugins/CoreAdminHome/CustomLogo.php',
|
964 |
'Piwik\\Plugins\\CoreAdminHome\\Emails\\JsTrackingCodeMissingEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/JsTrackingCodeMissingEmail.php',
|
965 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\RecoveryCodesRegeneratedEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/RecoveryCodesRegeneratedEmail.php',
|
966 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\RecoveryCodesShowedEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/RecoveryCodesShowedEmail.php',
|
967 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\SecurityNotificationEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/SecurityNotificationEmail.php',
|
968 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\SettingsChangedEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/SettingsChangedEmail.php',
|
969 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TokenAuthCreatedEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/TokenAuthCreatedEmail.php',
|
970 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TokenAuthDeletedEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/TokenAuthDeletedEmail.php',
|
971 |
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TrackingFailuresEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/TrackingFailuresEmail.php',
|
972 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TwoFactorAuthDisabledEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/TwoFactorAuthDisabledEmail.php',
|
973 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TwoFactorAuthEnabledEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/TwoFactorAuthEnabledEmail.php',
|
974 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\UserCreatedEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/UserCreatedEmail.php',
|
975 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\UserDeletedEmail' => $baseDir . '/plugins/CoreAdminHome/Emails/UserDeletedEmail.php',
|
976 |
'Piwik\\Plugins\\CoreAdminHome\\Menu' => $baseDir . '/plugins/CoreAdminHome/Menu.php',
|
977 |
'Piwik\\Plugins\\CoreAdminHome\\Model\\DuplicateActionRemover' => $baseDir . '/plugins/CoreAdminHome/Model/DuplicateActionRemover.php',
|
978 |
'Piwik\\Plugins\\CoreAdminHome\\OptOutManager' => $baseDir . '/plugins/CoreAdminHome/OptOutManager.php',
|
1013 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateReport' => $baseDir . '/plugins/CoreConsole/Commands/GenerateReport.php',
|
1014 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateScheduledTask' => $baseDir . '/plugins/CoreConsole/Commands/GenerateScheduledTask.php',
|
1015 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateSettings' => $baseDir . '/plugins/CoreConsole/Commands/GenerateSettings.php',
|
1016 |
+
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateSystemCheck' => $baseDir . '/plugins/CoreConsole/Commands/GenerateSystemCheck.php',
|
1017 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateTest' => $baseDir . '/plugins/CoreConsole/Commands/GenerateTest.php',
|
1018 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateUpdate' => $baseDir . '/plugins/CoreConsole/Commands/GenerateUpdate.php',
|
1019 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateVisualizationPlugin' => $baseDir . '/plugins/CoreConsole/Commands/GenerateVisualizationPlugin.php',
|
1447 |
'Piwik\\Plugins\\ExamplePlugin\\API' => $baseDir . '/plugins/ExamplePlugin/API.php',
|
1448 |
'Piwik\\Plugins\\ExamplePlugin\\Archiver' => $baseDir . '/plugins/ExamplePlugin/Archiver.php',
|
1449 |
'Piwik\\Plugins\\ExamplePlugin\\Controller' => $baseDir . '/plugins/ExamplePlugin/Controller.php',
|
1450 |
+
'Piwik\\Plugins\\ExamplePlugin\\Diagnostic\\ExampleCheck' => $baseDir . '/plugins/ExamplePlugin/Diagnostic/ExampleCheck.php',
|
1451 |
'Piwik\\Plugins\\ExamplePlugin\\ExamplePlugin' => $baseDir . '/plugins/ExamplePlugin/ExamplePlugin.php',
|
1452 |
'Piwik\\Plugins\\ExamplePlugin\\Menu' => $baseDir . '/plugins/ExamplePlugin/Menu.php',
|
1453 |
'Piwik\\Plugins\\ExamplePlugin\\Tasks' => $baseDir . '/plugins/ExamplePlugin/Tasks.php',
|
1971 |
'Piwik\\Plugins\\ScheduledReports\\SubscriptionModel' => $baseDir . '/plugins/ScheduledReports/SubscriptionModel.php',
|
1972 |
'Piwik\\Plugins\\ScheduledReports\\Tasks' => $baseDir . '/plugins/ScheduledReports/Tasks.php',
|
1973 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Fixtures\\ReportSubscription' => $baseDir . '/plugins/ScheduledReports/tests/Fixtures/ReportSubscription.php',
|
1974 |
+
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ApiTest' => $baseDir . '/plugins/ScheduledReports/tests/Integration/ApiTest.php',
|
1975 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGeneratorTest' => $baseDir . '/plugins/ScheduledReports/tests/Integration/ReportEmailGeneratorTest.php',
|
1976 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGenerator\\AttachedFileReportEmailGeneratorTest' => $baseDir . '/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/AttachedFileReportEmailGeneratorTest.php',
|
1977 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGenerator\\HtmlReportEmailGeneratorTest' => $baseDir . '/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/HtmlReportEmailGeneratorTest.php',
|
2362 |
'Piwik\\Plugins\\UserCountry\\UserCountry' => $baseDir . '/plugins/UserCountry/UserCountry.php',
|
2363 |
'Piwik\\Plugins\\UserCountry\\VisitorDetails' => $baseDir . '/plugins/UserCountry/VisitorDetails.php',
|
2364 |
'Piwik\\Plugins\\UserCountry\\VisitorGeolocator' => $baseDir . '/plugins/UserCountry/VisitorGeolocator.php',
|
2365 |
+
'Piwik\\Plugins\\UserCountry\\tests\\Fixtures\\ManySitesManyVisitsWithGeoIp' => $baseDir . '/plugins/UserCountry/tests/Fixtures/ManySitesManyVisitsWithGeoIp.php',
|
2366 |
+
'Piwik\\Plugins\\UserCountry\\tests\\Integration\\LocationProviderTest' => $baseDir . '/plugins/UserCountry/tests/Integration/LocationProviderTest.php',
|
2367 |
'Piwik\\Plugins\\UserCountry\\tests\\Integration\\VisitorGeolocatorTest' => $baseDir . '/plugins/UserCountry/tests/Integration/VisitorGeolocatorTest.php',
|
2368 |
+
'Piwik\\Plugins\\UserCountry\\tests\\System\\ApiTest' => $baseDir . '/plugins/UserCountry/tests/System/ApiTest.php',
|
2369 |
'Piwik\\Plugins\\UserCountry\\tests\\System\\AttributeHistoricalDataWithLocationsTest' => $baseDir . '/plugins/UserCountry/tests/System/AttributeHistoricalDataWithLocationsTest.php',
|
2370 |
'Piwik\\Plugins\\UserCountry\\tests\\Unit\\UserCountryTest' => $baseDir . '/plugins/UserCountry/tests/Unit/UserCountryTest.php',
|
2371 |
'Piwik\\Plugins\\UserId\\API' => $baseDir . '/plugins/UserId/API.php',
|
2784 |
'Symfony\\Component\\EventDispatcher\\Tests\\GenericEventTest' => $vendorDir . '/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/GenericEventTest.php',
|
2785 |
'Symfony\\Component\\EventDispatcher\\Tests\\ImmutableEventDispatcherTest' => $vendorDir . '/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/ImmutableEventDispatcherTest.php',
|
2786 |
'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php',
|
2787 |
+
'Symfony\\Polyfill\\Iconv\\Iconv' => $vendorDir . '/symfony/polyfill-iconv/Iconv.php',
|
2788 |
'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php',
|
2789 |
'System' => $vendorDir . '/pear/pear-core-minimal/src/System.php',
|
2790 |
'TCPDF' => $vendorDir . '/tecnickcom/tcpdf/tcpdf.php',
|
app/vendor/composer/autoload_files.php
CHANGED
@@ -11,6 +11,7 @@ return array(
|
|
11 |
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
12 |
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
|
13 |
'b33e3d135e5d9e47d845c576147bda89' => $vendorDir . '/php-di/php-di/src/functions.php',
|
|
|
14 |
'6dcc7fc6910472564e7b11f0b5d852b5' => $vendorDir . '/szymach/c-pchart/src/Resources/data/constants.php',
|
15 |
'c03755bd507301ecda84f959218be302' => $baseDir . '/LegacyAutoloader.php',
|
16 |
);
|
11 |
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
12 |
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
|
13 |
'b33e3d135e5d9e47d845c576147bda89' => $vendorDir . '/php-di/php-di/src/functions.php',
|
14 |
+
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php',
|
15 |
'6dcc7fc6910472564e7b11f0b5d852b5' => $vendorDir . '/szymach/c-pchart/src/Resources/data/constants.php',
|
16 |
'c03755bd507301ecda84f959218be302' => $baseDir . '/LegacyAutoloader.php',
|
17 |
);
|
app/vendor/composer/autoload_psr4.php
CHANGED
@@ -8,6 +8,7 @@ $baseDir = dirname($vendorDir);
|
|
8 |
return array(
|
9 |
'Twig\\' => array($vendorDir . '/twig/twig/src'),
|
10 |
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
|
|
|
11 |
'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
|
12 |
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
13 |
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
@@ -26,7 +27,7 @@ return array(
|
|
26 |
'Matomo\\Cache\\' => array($vendorDir . '/matomo/cache/src'),
|
27 |
'Invoker\\' => array($vendorDir . '/php-di/invoker/src'),
|
28 |
'GeoIp2\\' => array($vendorDir . '/geoip2/geoip2/src'),
|
29 |
-
'Doctrine\\Common\\Cache\\' => array($vendorDir . '/doctrine
|
30 |
'DeviceDetector\\' => array($vendorDir . '/matomo/device-detector'),
|
31 |
'Davaxi\\' => array($vendorDir . '/davaxi/sparkline/src'),
|
32 |
'DI\\' => array($vendorDir . '/php-di/php-di/src'),
|
8 |
return array(
|
9 |
'Twig\\' => array($vendorDir . '/twig/twig/src'),
|
10 |
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
|
11 |
+
'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'),
|
12 |
'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
|
13 |
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
14 |
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
27 |
'Matomo\\Cache\\' => array($vendorDir . '/matomo/cache/src'),
|
28 |
'Invoker\\' => array($vendorDir . '/php-di/invoker/src'),
|
29 |
'GeoIp2\\' => array($vendorDir . '/geoip2/geoip2/src'),
|
30 |
+
'Doctrine\\Common\\Cache\\' => array($vendorDir . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache'),
|
31 |
'DeviceDetector\\' => array($vendorDir . '/matomo/device-detector'),
|
32 |
'Davaxi\\' => array($vendorDir . '/davaxi/sparkline/src'),
|
33 |
'DI\\' => array($vendorDir . '/php-di/php-di/src'),
|
app/vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -22,9 +22,9 @@ class ComposerAutoloaderInite0aec6a19cacb137658cbe05ff4a49c8
|
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
25 |
-
spl_autoload_register(array('
|
26 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
|
27 |
-
spl_autoload_unregister(array('
|
28 |
|
29 |
$includePaths = require __DIR__ . '/include_paths.php';
|
30 |
$includePaths[] = get_include_path();
|
@@ -34,7 +34,7 @@ class ComposerAutoloaderInite0aec6a19cacb137658cbe05ff4a49c8
|
|
34 |
if ($useStaticLoader) {
|
35 |
require __DIR__ . '/autoload_static.php';
|
36 |
|
37 |
-
call_user_func(\Composer\Autoload\
|
38 |
} else {
|
39 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
40 |
foreach ($map as $namespace => $path) {
|
@@ -55,19 +55,19 @@ class ComposerAutoloaderInite0aec6a19cacb137658cbe05ff4a49c8
|
|
55 |
$loader->register(false);
|
56 |
|
57 |
if ($useStaticLoader) {
|
58 |
-
$includeFiles = Composer\Autoload\
|
59 |
} else {
|
60 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
61 |
}
|
62 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
63 |
-
|
64 |
}
|
65 |
|
66 |
return $loader;
|
67 |
}
|
68 |
}
|
69 |
|
70 |
-
function
|
71 |
{
|
72 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
73 |
require $file;
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit9209fd533b4c3cc6523ff4b3463ad39c
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
25 |
+
spl_autoload_register(array('ComposerAutoloaderInit9209fd533b4c3cc6523ff4b3463ad39c', 'loadClassLoader'), true, false);
|
26 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
|
27 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit9209fd533b4c3cc6523ff4b3463ad39c', 'loadClassLoader'));
|
28 |
|
29 |
$includePaths = require __DIR__ . '/include_paths.php';
|
30 |
$includePaths[] = get_include_path();
|
34 |
if ($useStaticLoader) {
|
35 |
require __DIR__ . '/autoload_static.php';
|
36 |
|
37 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit9209fd533b4c3cc6523ff4b3463ad39c::getInitializer($loader));
|
38 |
} else {
|
39 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
40 |
foreach ($map as $namespace => $path) {
|
55 |
$loader->register(false);
|
56 |
|
57 |
if ($useStaticLoader) {
|
58 |
+
$includeFiles = Composer\Autoload\ComposerStaticInit9209fd533b4c3cc6523ff4b3463ad39c::$files;
|
59 |
} else {
|
60 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
61 |
}
|
62 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
63 |
+
composerRequire9209fd533b4c3cc6523ff4b3463ad39c($fileIdentifier, $file);
|
64 |
}
|
65 |
|
66 |
return $loader;
|
67 |
}
|
68 |
}
|
69 |
|
70 |
+
function composerRequire9209fd533b4c3cc6523ff4b3463ad39c($fileIdentifier, $file)
|
71 |
{
|
72 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
73 |
require $file;
|
app/vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'04c6c5c2f7095ccf6c481d3e53e1776f' => __DIR__ . '/..' . '/mustangostang/spyc/Spyc.php',
|
@@ -12,6 +12,7 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
12 |
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
13 |
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
14 |
'b33e3d135e5d9e47d845c576147bda89' => __DIR__ . '/..' . '/php-di/php-di/src/functions.php',
|
|
|
15 |
'6dcc7fc6910472564e7b11f0b5d852b5' => __DIR__ . '/..' . '/szymach/c-pchart/src/Resources/data/constants.php',
|
16 |
'c03755bd507301ecda84f959218be302' => __DIR__ . '/../..' . '/LegacyAutoloader.php',
|
17 |
);
|
@@ -24,6 +25,7 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
24 |
'S' =>
|
25 |
array (
|
26 |
'Symfony\\Polyfill\\Mbstring\\' => 26,
|
|
|
27 |
'Symfony\\Polyfill\\Ctype\\' => 23,
|
28 |
),
|
29 |
'P' =>
|
@@ -82,6 +84,10 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
82 |
array (
|
83 |
0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
|
84 |
),
|
|
|
|
|
|
|
|
|
85 |
'Symfony\\Polyfill\\Ctype\\' =>
|
86 |
array (
|
87 |
0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
|
@@ -156,7 +162,7 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
156 |
),
|
157 |
'Doctrine\\Common\\Cache\\' =>
|
158 |
array (
|
159 |
-
0 => __DIR__ . '/..' . '/doctrine
|
160 |
),
|
161 |
'DeviceDetector\\' =>
|
162 |
array (
|
@@ -384,43 +390,44 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
384 |
'DeviceDetector\\Parser\\Device\\Mobile' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/Mobile.php',
|
385 |
'DeviceDetector\\Parser\\Device\\Notebook' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/Notebook.php',
|
386 |
'DeviceDetector\\Parser\\Device\\PortableMediaPlayer' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/PortableMediaPlayer.php',
|
|
|
387 |
'DeviceDetector\\Parser\\OperatingSystem' => __DIR__ . '/..' . '/matomo/device-detector/Parser/OperatingSystem.php',
|
388 |
'DeviceDetector\\Parser\\VendorFragment' => __DIR__ . '/..' . '/matomo/device-detector/Parser/VendorFragment.php',
|
389 |
'DeviceDetector\\Yaml\\ParserInterface' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/ParserInterface.php',
|
390 |
'DeviceDetector\\Yaml\\Pecl' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/Pecl.php',
|
391 |
'DeviceDetector\\Yaml\\Spyc' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/Spyc.php',
|
392 |
'DeviceDetector\\Yaml\\Symfony' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/Symfony.php',
|
393 |
-
'Doctrine\\Common\\Cache\\ApcCache' => __DIR__ . '/..' . '/doctrine
|
394 |
-
'Doctrine\\Common\\Cache\\ApcuCache' => __DIR__ . '/..' . '/doctrine
|
395 |
-
'Doctrine\\Common\\Cache\\ArrayCache' => __DIR__ . '/..' . '/doctrine
|
396 |
-
'Doctrine\\Common\\Cache\\Cache' => __DIR__ . '/..' . '/doctrine
|
397 |
-
'Doctrine\\Common\\Cache\\CacheProvider' => __DIR__ . '/..' . '/doctrine
|
398 |
-
'Doctrine\\Common\\Cache\\ChainCache' => __DIR__ . '/..' . '/doctrine
|
399 |
-
'Doctrine\\Common\\Cache\\ClearableCache' => __DIR__ . '/..' . '/doctrine
|
400 |
-
'Doctrine\\Common\\Cache\\CouchbaseBucketCache' => __DIR__ . '/..' . '/doctrine
|
401 |
-
'Doctrine\\Common\\Cache\\CouchbaseCache' => __DIR__ . '/..' . '/doctrine
|
402 |
-
'Doctrine\\Common\\Cache\\ExtMongoDBCache' => __DIR__ . '/..' . '/doctrine
|
403 |
-
'Doctrine\\Common\\Cache\\FileCache' => __DIR__ . '/..' . '/doctrine
|
404 |
-
'Doctrine\\Common\\Cache\\FilesystemCache' => __DIR__ . '/..' . '/doctrine
|
405 |
-
'Doctrine\\Common\\Cache\\FlushableCache' => __DIR__ . '/..' . '/doctrine
|
406 |
-
'Doctrine\\Common\\Cache\\InvalidCacheId' => __DIR__ . '/..' . '/doctrine
|
407 |
-
'Doctrine\\Common\\Cache\\LegacyMongoDBCache' => __DIR__ . '/..' . '/doctrine
|
408 |
-
'Doctrine\\Common\\Cache\\MemcacheCache' => __DIR__ . '/..' . '/doctrine
|
409 |
-
'Doctrine\\Common\\Cache\\MemcachedCache' => __DIR__ . '/..' . '/doctrine
|
410 |
-
'Doctrine\\Common\\Cache\\MongoDBCache' => __DIR__ . '/..' . '/doctrine
|
411 |
-
'Doctrine\\Common\\Cache\\MultiDeleteCache' => __DIR__ . '/..' . '/doctrine
|
412 |
-
'Doctrine\\Common\\Cache\\MultiGetCache' => __DIR__ . '/..' . '/doctrine
|
413 |
-
'Doctrine\\Common\\Cache\\MultiOperationCache' => __DIR__ . '/..' . '/doctrine
|
414 |
-
'Doctrine\\Common\\Cache\\MultiPutCache' => __DIR__ . '/..' . '/doctrine
|
415 |
-
'Doctrine\\Common\\Cache\\PhpFileCache' => __DIR__ . '/..' . '/doctrine
|
416 |
-
'Doctrine\\Common\\Cache\\PredisCache' => __DIR__ . '/..' . '/doctrine
|
417 |
-
'Doctrine\\Common\\Cache\\RedisCache' => __DIR__ . '/..' . '/doctrine
|
418 |
-
'Doctrine\\Common\\Cache\\SQLite3Cache' => __DIR__ . '/..' . '/doctrine
|
419 |
-
'Doctrine\\Common\\Cache\\Version' => __DIR__ . '/..' . '/doctrine
|
420 |
-
'Doctrine\\Common\\Cache\\VoidCache' => __DIR__ . '/..' . '/doctrine
|
421 |
-
'Doctrine\\Common\\Cache\\WinCacheCache' => __DIR__ . '/..' . '/doctrine
|
422 |
-
'Doctrine\\Common\\Cache\\XcacheCache' => __DIR__ . '/..' . '/doctrine
|
423 |
-
'Doctrine\\Common\\Cache\\ZendDataCache' => __DIR__ . '/..' . '/doctrine
|
424 |
'GeoIp2\\Database\\Reader' => __DIR__ . '/..' . '/geoip2/geoip2/src/Database/Reader.php',
|
425 |
'GeoIp2\\Exception\\AddressNotFoundException' => __DIR__ . '/..' . '/geoip2/geoip2/src/Exception/AddressNotFoundException.php',
|
426 |
'GeoIp2\\Exception\\AuthenticationException' => __DIR__ . '/..' . '/geoip2/geoip2/src/Exception/AuthenticationException.php',
|
@@ -593,10 +600,13 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
593 |
'MatomoTracker' => __DIR__ . '/..' . '/matomo/matomo-php-tracker/MatomoTracker.php',
|
594 |
'Matomo\\Cache\\Backend' => __DIR__ . '/..' . '/matomo/cache/src/Backend.php',
|
595 |
'Matomo\\Cache\\Backend\\ArrayCache' => __DIR__ . '/..' . '/matomo/cache/src/Backend/ArrayCache.php',
|
|
|
596 |
'Matomo\\Cache\\Backend\\Chained' => __DIR__ . '/..' . '/matomo/cache/src/Backend/Chained.php',
|
|
|
597 |
'Matomo\\Cache\\Backend\\Factory' => __DIR__ . '/..' . '/matomo/cache/src/Backend/Factory.php',
|
598 |
'Matomo\\Cache\\Backend\\Factory\\BackendNotFoundException' => __DIR__ . '/..' . '/matomo/cache/src/Backend/Factory/BackendNotFoundException.php',
|
599 |
'Matomo\\Cache\\Backend\\File' => __DIR__ . '/..' . '/matomo/cache/src/Backend/File.php',
|
|
|
600 |
'Matomo\\Cache\\Backend\\NullCache' => __DIR__ . '/..' . '/matomo/cache/src/Backend/NullCache.php',
|
601 |
'Matomo\\Cache\\Backend\\Redis' => __DIR__ . '/..' . '/matomo/cache/src/Backend/Redis.php',
|
602 |
'Matomo\\Cache\\Cache' => __DIR__ . '/..' . '/matomo/cache/src/Cache.php',
|
@@ -1207,11 +1217,22 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
1207 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\RunScheduledTasks' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Commands/RunScheduledTasks.php',
|
1208 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\SetConfig' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Commands/SetConfig.php',
|
1209 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\SetConfig\\ConfigSettingManipulation' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Commands/SetConfig/ConfigSettingManipulation.php',
|
|
|
1210 |
'Piwik\\Plugins\\CoreAdminHome\\Controller' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Controller.php',
|
1211 |
'Piwik\\Plugins\\CoreAdminHome\\CoreAdminHome' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/CoreAdminHome.php',
|
1212 |
'Piwik\\Plugins\\CoreAdminHome\\CustomLogo' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/CustomLogo.php',
|
1213 |
'Piwik\\Plugins\\CoreAdminHome\\Emails\\JsTrackingCodeMissingEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/JsTrackingCodeMissingEmail.php',
|
|
|
|
|
|
|
|
|
|
|
|
|
1214 |
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TrackingFailuresEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/TrackingFailuresEmail.php',
|
|
|
|
|
|
|
|
|
1215 |
'Piwik\\Plugins\\CoreAdminHome\\Menu' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Menu.php',
|
1216 |
'Piwik\\Plugins\\CoreAdminHome\\Model\\DuplicateActionRemover' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Model/DuplicateActionRemover.php',
|
1217 |
'Piwik\\Plugins\\CoreAdminHome\\OptOutManager' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/OptOutManager.php',
|
@@ -1252,6 +1273,7 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
1252 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateReport' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateReport.php',
|
1253 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateScheduledTask' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateScheduledTask.php',
|
1254 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateSettings' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateSettings.php',
|
|
|
1255 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateTest' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateTest.php',
|
1256 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateUpdate' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateUpdate.php',
|
1257 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateVisualizationPlugin' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateVisualizationPlugin.php',
|
@@ -1685,6 +1707,7 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
1685 |
'Piwik\\Plugins\\ExamplePlugin\\API' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/API.php',
|
1686 |
'Piwik\\Plugins\\ExamplePlugin\\Archiver' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/Archiver.php',
|
1687 |
'Piwik\\Plugins\\ExamplePlugin\\Controller' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/Controller.php',
|
|
|
1688 |
'Piwik\\Plugins\\ExamplePlugin\\ExamplePlugin' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/ExamplePlugin.php',
|
1689 |
'Piwik\\Plugins\\ExamplePlugin\\Menu' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/Menu.php',
|
1690 |
'Piwik\\Plugins\\ExamplePlugin\\Tasks' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/Tasks.php',
|
@@ -2208,6 +2231,7 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
2208 |
'Piwik\\Plugins\\ScheduledReports\\SubscriptionModel' => __DIR__ . '/../..' . '/plugins/ScheduledReports/SubscriptionModel.php',
|
2209 |
'Piwik\\Plugins\\ScheduledReports\\Tasks' => __DIR__ . '/../..' . '/plugins/ScheduledReports/Tasks.php',
|
2210 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Fixtures\\ReportSubscription' => __DIR__ . '/../..' . '/plugins/ScheduledReports/tests/Fixtures/ReportSubscription.php',
|
|
|
2211 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGeneratorTest' => __DIR__ . '/../..' . '/plugins/ScheduledReports/tests/Integration/ReportEmailGeneratorTest.php',
|
2212 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGenerator\\AttachedFileReportEmailGeneratorTest' => __DIR__ . '/../..' . '/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/AttachedFileReportEmailGeneratorTest.php',
|
2213 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGenerator\\HtmlReportEmailGeneratorTest' => __DIR__ . '/../..' . '/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/HtmlReportEmailGeneratorTest.php',
|
@@ -2598,7 +2622,10 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
2598 |
'Piwik\\Plugins\\UserCountry\\UserCountry' => __DIR__ . '/../..' . '/plugins/UserCountry/UserCountry.php',
|
2599 |
'Piwik\\Plugins\\UserCountry\\VisitorDetails' => __DIR__ . '/../..' . '/plugins/UserCountry/VisitorDetails.php',
|
2600 |
'Piwik\\Plugins\\UserCountry\\VisitorGeolocator' => __DIR__ . '/../..' . '/plugins/UserCountry/VisitorGeolocator.php',
|
|
|
|
|
2601 |
'Piwik\\Plugins\\UserCountry\\tests\\Integration\\VisitorGeolocatorTest' => __DIR__ . '/../..' . '/plugins/UserCountry/tests/Integration/VisitorGeolocatorTest.php',
|
|
|
2602 |
'Piwik\\Plugins\\UserCountry\\tests\\System\\AttributeHistoricalDataWithLocationsTest' => __DIR__ . '/../..' . '/plugins/UserCountry/tests/System/AttributeHistoricalDataWithLocationsTest.php',
|
2603 |
'Piwik\\Plugins\\UserCountry\\tests\\Unit\\UserCountryTest' => __DIR__ . '/../..' . '/plugins/UserCountry/tests/Unit/UserCountryTest.php',
|
2604 |
'Piwik\\Plugins\\UserId\\API' => __DIR__ . '/../..' . '/plugins/UserId/API.php',
|
@@ -3017,6 +3044,7 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
3017 |
'Symfony\\Component\\EventDispatcher\\Tests\\GenericEventTest' => __DIR__ . '/..' . '/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/GenericEventTest.php',
|
3018 |
'Symfony\\Component\\EventDispatcher\\Tests\\ImmutableEventDispatcherTest' => __DIR__ . '/..' . '/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/ImmutableEventDispatcherTest.php',
|
3019 |
'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php',
|
|
|
3020 |
'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php',
|
3021 |
'System' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/System.php',
|
3022 |
'TCPDF' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf.php',
|
@@ -3279,11 +3307,11 @@ class ComposerStaticInite0aec6a19cacb137658cbe05ff4a49c8
|
|
3279 |
public static function getInitializer(ClassLoader $loader)
|
3280 |
{
|
3281 |
return \Closure::bind(function () use ($loader) {
|
3282 |
-
$loader->prefixLengthsPsr4 =
|
3283 |
-
$loader->prefixDirsPsr4 =
|
3284 |
-
$loader->prefixesPsr0 =
|
3285 |
-
$loader->fallbackDirsPsr0 =
|
3286 |
-
$loader->classMap =
|
3287 |
|
3288 |
}, null, ClassLoader::class);
|
3289 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit9209fd533b4c3cc6523ff4b3463ad39c
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'04c6c5c2f7095ccf6c481d3e53e1776f' => __DIR__ . '/..' . '/mustangostang/spyc/Spyc.php',
|
12 |
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
13 |
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
14 |
'b33e3d135e5d9e47d845c576147bda89' => __DIR__ . '/..' . '/php-di/php-di/src/functions.php',
|
15 |
+
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php',
|
16 |
'6dcc7fc6910472564e7b11f0b5d852b5' => __DIR__ . '/..' . '/szymach/c-pchart/src/Resources/data/constants.php',
|
17 |
'c03755bd507301ecda84f959218be302' => __DIR__ . '/../..' . '/LegacyAutoloader.php',
|
18 |
);
|
25 |
'S' =>
|
26 |
array (
|
27 |
'Symfony\\Polyfill\\Mbstring\\' => 26,
|
28 |
+
'Symfony\\Polyfill\\Iconv\\' => 23,
|
29 |
'Symfony\\Polyfill\\Ctype\\' => 23,
|
30 |
),
|
31 |
'P' =>
|
84 |
array (
|
85 |
0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
|
86 |
),
|
87 |
+
'Symfony\\Polyfill\\Iconv\\' =>
|
88 |
+
array (
|
89 |
+
0 => __DIR__ . '/..' . '/symfony/polyfill-iconv',
|
90 |
+
),
|
91 |
'Symfony\\Polyfill\\Ctype\\' =>
|
92 |
array (
|
93 |
0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
|
162 |
),
|
163 |
'Doctrine\\Common\\Cache\\' =>
|
164 |
array (
|
165 |
+
0 => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache',
|
166 |
),
|
167 |
'DeviceDetector\\' =>
|
168 |
array (
|
390 |
'DeviceDetector\\Parser\\Device\\Mobile' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/Mobile.php',
|
391 |
'DeviceDetector\\Parser\\Device\\Notebook' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/Notebook.php',
|
392 |
'DeviceDetector\\Parser\\Device\\PortableMediaPlayer' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/PortableMediaPlayer.php',
|
393 |
+
'DeviceDetector\\Parser\\Device\\ShellTv' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/ShellTv.php',
|
394 |
'DeviceDetector\\Parser\\OperatingSystem' => __DIR__ . '/..' . '/matomo/device-detector/Parser/OperatingSystem.php',
|
395 |
'DeviceDetector\\Parser\\VendorFragment' => __DIR__ . '/..' . '/matomo/device-detector/Parser/VendorFragment.php',
|
396 |
'DeviceDetector\\Yaml\\ParserInterface' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/ParserInterface.php',
|
397 |
'DeviceDetector\\Yaml\\Pecl' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/Pecl.php',
|
398 |
'DeviceDetector\\Yaml\\Spyc' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/Spyc.php',
|
399 |
'DeviceDetector\\Yaml\\Symfony' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/Symfony.php',
|
400 |
+
'Doctrine\\Common\\Cache\\ApcCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ApcCache.php',
|
401 |
+
'Doctrine\\Common\\Cache\\ApcuCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ApcuCache.php',
|
402 |
+
'Doctrine\\Common\\Cache\\ArrayCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ArrayCache.php',
|
403 |
+
'Doctrine\\Common\\Cache\\Cache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/Cache.php',
|
404 |
+
'Doctrine\\Common\\Cache\\CacheProvider' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/CacheProvider.php',
|
405 |
+
'Doctrine\\Common\\Cache\\ChainCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ChainCache.php',
|
406 |
+
'Doctrine\\Common\\Cache\\ClearableCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ClearableCache.php',
|
407 |
+
'Doctrine\\Common\\Cache\\CouchbaseBucketCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/CouchbaseBucketCache.php',
|
408 |
+
'Doctrine\\Common\\Cache\\CouchbaseCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/CouchbaseCache.php',
|
409 |
+
'Doctrine\\Common\\Cache\\ExtMongoDBCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ExtMongoDBCache.php',
|
410 |
+
'Doctrine\\Common\\Cache\\FileCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/FileCache.php',
|
411 |
+
'Doctrine\\Common\\Cache\\FilesystemCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/FilesystemCache.php',
|
412 |
+
'Doctrine\\Common\\Cache\\FlushableCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/FlushableCache.php',
|
413 |
+
'Doctrine\\Common\\Cache\\InvalidCacheId' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/InvalidCacheId.php',
|
414 |
+
'Doctrine\\Common\\Cache\\LegacyMongoDBCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/LegacyMongoDBCache.php',
|
415 |
+
'Doctrine\\Common\\Cache\\MemcacheCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MemcacheCache.php',
|
416 |
+
'Doctrine\\Common\\Cache\\MemcachedCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MemcachedCache.php',
|
417 |
+
'Doctrine\\Common\\Cache\\MongoDBCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MongoDBCache.php',
|
418 |
+
'Doctrine\\Common\\Cache\\MultiDeleteCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MultiDeleteCache.php',
|
419 |
+
'Doctrine\\Common\\Cache\\MultiGetCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MultiGetCache.php',
|
420 |
+
'Doctrine\\Common\\Cache\\MultiOperationCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MultiOperationCache.php',
|
421 |
+
'Doctrine\\Common\\Cache\\MultiPutCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/MultiPutCache.php',
|
422 |
+
'Doctrine\\Common\\Cache\\PhpFileCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/PhpFileCache.php',
|
423 |
+
'Doctrine\\Common\\Cache\\PredisCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/PredisCache.php',
|
424 |
+
'Doctrine\\Common\\Cache\\RedisCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/RedisCache.php',
|
425 |
+
'Doctrine\\Common\\Cache\\SQLite3Cache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/SQLite3Cache.php',
|
426 |
+
'Doctrine\\Common\\Cache\\Version' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/Version.php',
|
427 |
+
'Doctrine\\Common\\Cache\\VoidCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/VoidCache.php',
|
428 |
+
'Doctrine\\Common\\Cache\\WinCacheCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/WinCacheCache.php',
|
429 |
+
'Doctrine\\Common\\Cache\\XcacheCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/XcacheCache.php',
|
430 |
+
'Doctrine\\Common\\Cache\\ZendDataCache' => __DIR__ . '/..' . '/matomo/doctrine-cache-fork/lib/Doctrine/Common/Cache/ZendDataCache.php',
|
431 |
'GeoIp2\\Database\\Reader' => __DIR__ . '/..' . '/geoip2/geoip2/src/Database/Reader.php',
|
432 |
'GeoIp2\\Exception\\AddressNotFoundException' => __DIR__ . '/..' . '/geoip2/geoip2/src/Exception/AddressNotFoundException.php',
|
433 |
'GeoIp2\\Exception\\AuthenticationException' => __DIR__ . '/..' . '/geoip2/geoip2/src/Exception/AuthenticationException.php',
|
600 |
'MatomoTracker' => __DIR__ . '/..' . '/matomo/matomo-php-tracker/MatomoTracker.php',
|
601 |
'Matomo\\Cache\\Backend' => __DIR__ . '/..' . '/matomo/cache/src/Backend.php',
|
602 |
'Matomo\\Cache\\Backend\\ArrayCache' => __DIR__ . '/..' . '/matomo/cache/src/Backend/ArrayCache.php',
|
603 |
+
'Matomo\\Cache\\Backend\\BaseDecorator' => __DIR__ . '/..' . '/matomo/cache/src/Backend/BaseDecorator.php',
|
604 |
'Matomo\\Cache\\Backend\\Chained' => __DIR__ . '/..' . '/matomo/cache/src/Backend/Chained.php',
|
605 |
+
'Matomo\\Cache\\Backend\\DefaultTimeoutDecorated' => __DIR__ . '/..' . '/matomo/cache/src/Backend/DefaultTimeoutDecorated.php',
|
606 |
'Matomo\\Cache\\Backend\\Factory' => __DIR__ . '/..' . '/matomo/cache/src/Backend/Factory.php',
|
607 |
'Matomo\\Cache\\Backend\\Factory\\BackendNotFoundException' => __DIR__ . '/..' . '/matomo/cache/src/Backend/Factory/BackendNotFoundException.php',
|
608 |
'Matomo\\Cache\\Backend\\File' => __DIR__ . '/..' . '/matomo/cache/src/Backend/File.php',
|
609 |
+
'Matomo\\Cache\\Backend\\KeyPrefixDecorated' => __DIR__ . '/..' . '/matomo/cache/src/Backend/KeyPrefixDecorated.php',
|
610 |
'Matomo\\Cache\\Backend\\NullCache' => __DIR__ . '/..' . '/matomo/cache/src/Backend/NullCache.php',
|
611 |
'Matomo\\Cache\\Backend\\Redis' => __DIR__ . '/..' . '/matomo/cache/src/Backend/Redis.php',
|
612 |
'Matomo\\Cache\\Cache' => __DIR__ . '/..' . '/matomo/cache/src/Cache.php',
|
1217 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\RunScheduledTasks' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Commands/RunScheduledTasks.php',
|
1218 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\SetConfig' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Commands/SetConfig.php',
|
1219 |
'Piwik\\Plugins\\CoreAdminHome\\Commands\\SetConfig\\ConfigSettingManipulation' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Commands/SetConfig/ConfigSettingManipulation.php',
|
1220 |
+
'Piwik\\Plugins\\CoreAdminHome\\Commands\\VersionInfo' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Commands/VersionInfo.php',
|
1221 |
'Piwik\\Plugins\\CoreAdminHome\\Controller' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Controller.php',
|
1222 |
'Piwik\\Plugins\\CoreAdminHome\\CoreAdminHome' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/CoreAdminHome.php',
|
1223 |
'Piwik\\Plugins\\CoreAdminHome\\CustomLogo' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/CustomLogo.php',
|
1224 |
'Piwik\\Plugins\\CoreAdminHome\\Emails\\JsTrackingCodeMissingEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/JsTrackingCodeMissingEmail.php',
|
1225 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\RecoveryCodesRegeneratedEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/RecoveryCodesRegeneratedEmail.php',
|
1226 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\RecoveryCodesShowedEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/RecoveryCodesShowedEmail.php',
|
1227 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\SecurityNotificationEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/SecurityNotificationEmail.php',
|
1228 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\SettingsChangedEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/SettingsChangedEmail.php',
|
1229 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TokenAuthCreatedEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/TokenAuthCreatedEmail.php',
|
1230 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TokenAuthDeletedEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/TokenAuthDeletedEmail.php',
|
1231 |
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TrackingFailuresEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/TrackingFailuresEmail.php',
|
1232 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TwoFactorAuthDisabledEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/TwoFactorAuthDisabledEmail.php',
|
1233 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\TwoFactorAuthEnabledEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/TwoFactorAuthEnabledEmail.php',
|
1234 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\UserCreatedEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/UserCreatedEmail.php',
|
1235 |
+
'Piwik\\Plugins\\CoreAdminHome\\Emails\\UserDeletedEmail' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Emails/UserDeletedEmail.php',
|
1236 |
'Piwik\\Plugins\\CoreAdminHome\\Menu' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Menu.php',
|
1237 |
'Piwik\\Plugins\\CoreAdminHome\\Model\\DuplicateActionRemover' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/Model/DuplicateActionRemover.php',
|
1238 |
'Piwik\\Plugins\\CoreAdminHome\\OptOutManager' => __DIR__ . '/../..' . '/plugins/CoreAdminHome/OptOutManager.php',
|
1273 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateReport' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateReport.php',
|
1274 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateScheduledTask' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateScheduledTask.php',
|
1275 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateSettings' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateSettings.php',
|
1276 |
+
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateSystemCheck' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateSystemCheck.php',
|
1277 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateTest' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateTest.php',
|
1278 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateUpdate' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateUpdate.php',
|
1279 |
'Piwik\\Plugins\\CoreConsole\\Commands\\GenerateVisualizationPlugin' => __DIR__ . '/../..' . '/plugins/CoreConsole/Commands/GenerateVisualizationPlugin.php',
|
1707 |
'Piwik\\Plugins\\ExamplePlugin\\API' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/API.php',
|
1708 |
'Piwik\\Plugins\\ExamplePlugin\\Archiver' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/Archiver.php',
|
1709 |
'Piwik\\Plugins\\ExamplePlugin\\Controller' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/Controller.php',
|
1710 |
+
'Piwik\\Plugins\\ExamplePlugin\\Diagnostic\\ExampleCheck' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/Diagnostic/ExampleCheck.php',
|
1711 |
'Piwik\\Plugins\\ExamplePlugin\\ExamplePlugin' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/ExamplePlugin.php',
|
1712 |
'Piwik\\Plugins\\ExamplePlugin\\Menu' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/Menu.php',
|
1713 |
'Piwik\\Plugins\\ExamplePlugin\\Tasks' => __DIR__ . '/../..' . '/plugins/ExamplePlugin/Tasks.php',
|
2231 |
'Piwik\\Plugins\\ScheduledReports\\SubscriptionModel' => __DIR__ . '/../..' . '/plugins/ScheduledReports/SubscriptionModel.php',
|
2232 |
'Piwik\\Plugins\\ScheduledReports\\Tasks' => __DIR__ . '/../..' . '/plugins/ScheduledReports/Tasks.php',
|
2233 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Fixtures\\ReportSubscription' => __DIR__ . '/../..' . '/plugins/ScheduledReports/tests/Fixtures/ReportSubscription.php',
|
2234 |
+
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ApiTest' => __DIR__ . '/../..' . '/plugins/ScheduledReports/tests/Integration/ApiTest.php',
|
2235 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGeneratorTest' => __DIR__ . '/../..' . '/plugins/ScheduledReports/tests/Integration/ReportEmailGeneratorTest.php',
|
2236 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGenerator\\AttachedFileReportEmailGeneratorTest' => __DIR__ . '/../..' . '/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/AttachedFileReportEmailGeneratorTest.php',
|
2237 |
'Piwik\\Plugins\\ScheduledReports\\tests\\Integration\\ReportEmailGenerator\\HtmlReportEmailGeneratorTest' => __DIR__ . '/../..' . '/plugins/ScheduledReports/tests/Integration/ReportEmailGenerator/HtmlReportEmailGeneratorTest.php',
|
2622 |
'Piwik\\Plugins\\UserCountry\\UserCountry' => __DIR__ . '/../..' . '/plugins/UserCountry/UserCountry.php',
|
2623 |
'Piwik\\Plugins\\UserCountry\\VisitorDetails' => __DIR__ . '/../..' . '/plugins/UserCountry/VisitorDetails.php',
|
2624 |
'Piwik\\Plugins\\UserCountry\\VisitorGeolocator' => __DIR__ . '/../..' . '/plugins/UserCountry/VisitorGeolocator.php',
|
2625 |
+
'Piwik\\Plugins\\UserCountry\\tests\\Fixtures\\ManySitesManyVisitsWithGeoIp' => __DIR__ . '/../..' . '/plugins/UserCountry/tests/Fixtures/ManySitesManyVisitsWithGeoIp.php',
|
2626 |
+
'Piwik\\Plugins\\UserCountry\\tests\\Integration\\LocationProviderTest' => __DIR__ . '/../..' . '/plugins/UserCountry/tests/Integration/LocationProviderTest.php',
|
2627 |
'Piwik\\Plugins\\UserCountry\\tests\\Integration\\VisitorGeolocatorTest' => __DIR__ . '/../..' . '/plugins/UserCountry/tests/Integration/VisitorGeolocatorTest.php',
|
2628 |
+
'Piwik\\Plugins\\UserCountry\\tests\\System\\ApiTest' => __DIR__ . '/../..' . '/plugins/UserCountry/tests/System/ApiTest.php',
|
2629 |
'Piwik\\Plugins\\UserCountry\\tests\\System\\AttributeHistoricalDataWithLocationsTest' => __DIR__ . '/../..' . '/plugins/UserCountry/tests/System/AttributeHistoricalDataWithLocationsTest.php',
|
2630 |
'Piwik\\Plugins\\UserCountry\\tests\\Unit\\UserCountryTest' => __DIR__ . '/../..' . '/plugins/UserCountry/tests/Unit/UserCountryTest.php',
|
2631 |
'Piwik\\Plugins\\UserId\\API' => __DIR__ . '/../..' . '/plugins/UserId/API.php',
|
3044 |
'Symfony\\Component\\EventDispatcher\\Tests\\GenericEventTest' => __DIR__ . '/..' . '/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/GenericEventTest.php',
|
3045 |
'Symfony\\Component\\EventDispatcher\\Tests\\ImmutableEventDispatcherTest' => __DIR__ . '/..' . '/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/ImmutableEventDispatcherTest.php',
|
3046 |
'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php',
|
3047 |
+
'Symfony\\Polyfill\\Iconv\\Iconv' => __DIR__ . '/..' . '/symfony/polyfill-iconv/Iconv.php',
|
3048 |
'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php',
|
3049 |
'System' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/System.php',
|
3050 |
'TCPDF' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf.php',
|
3307 |
public static function getInitializer(ClassLoader $loader)
|
3308 |
{
|
3309 |
return \Closure::bind(function () use ($loader) {
|
3310 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit9209fd533b4c3cc6523ff4b3463ad39c::$prefixLengthsPsr4;
|
3311 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit9209fd533b4c3cc6523ff4b3463ad39c::$prefixDirsPsr4;
|
3312 |
+
$loader->prefixesPsr0 = ComposerStaticInit9209fd533b4c3cc6523ff4b3463ad39c::$prefixesPsr0;
|
3313 |
+
$loader->fallbackDirsPsr0 = ComposerStaticInit9209fd533b4c3cc6523ff4b3463ad39c::$fallbackDirsPsr0;
|
3314 |
+
$loader->classMap = ComposerStaticInit9209fd533b4c3cc6523ff4b3463ad39c::$classMap;
|
3315 |
|
3316 |
}, null, ClassLoader::class);
|
3317 |
}
|
app/vendor/composer/installed.php
CHANGED
@@ -1,457 +1,452 @@
|
|
1 |
-
<?php return array
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
),
|
9 |
-
'reference' => '440965f7c0d48e5a5081a33ce30c6f38822e64f1',
|
10 |
-
'name' => 'matomo/matomo',
|
11 |
-
),
|
12 |
-
'versions' =>
|
13 |
-
array (
|
14 |
-
'composer/ca-bundle' =>
|
15 |
-
array (
|
16 |
-
'pretty_version' => '1.2.8',
|
17 |
-
'version' => '1.2.8.0',
|
18 |
-
'aliases' =>
|
19 |
-
array (
|
20 |
-
),
|
21 |
-
'reference' => '8a7ecad675253e4654ea05505233285377405215',
|
22 |
-
),
|
23 |
-
'composer/semver' =>
|
24 |
-
array (
|
25 |
-
'pretty_version' => '1.3.0',
|
26 |
-
'version' => '1.3.0.0',
|
27 |
-
'aliases' =>
|
28 |
-
array (
|
29 |
-
),
|
30 |
-
'reference' => 'df4463baa9f44fe6cf0a6da4fde2934d4c0a2747',
|
31 |
-
),
|
32 |
-
'davaxi/sparkline' =>
|
33 |
-
array (
|
34 |
-
'pretty_version' => '1.2.2',
|
35 |
-
'version' => '1.2.2.0',
|
36 |
-
'aliases' =>
|
37 |
-
array (
|
38 |
-
),
|
39 |
-
'reference' => '380d447fcfc6468f7d8e5c041e8c01b8ec969959',
|
40 |
-
),
|
41 |
-
'doctrine/cache' =>
|
42 |
-
array (
|
43 |
-
'pretty_version' => '1.10.2',
|
44 |
-
'version' => '1.10.2.0',
|
45 |
-
'aliases' =>
|
46 |
-
array (
|
47 |
-
),
|
48 |
-
'reference' => '13e3381b25847283a91948d04640543941309727',
|
49 |
-
),
|
50 |
-
'geoip2/geoip2' =>
|
51 |
-
array (
|
52 |
-
'pretty_version' => 'v2.11.0',
|
53 |
-
'version' => '2.11.0.0',
|
54 |
-
'aliases' =>
|
55 |
-
array (
|
56 |
-
),
|
57 |
-
'reference' => 'd01be5894a5c1a3381c58c9b1795cd07f96c30f7',
|
58 |
-
),
|
59 |
-
'matomo/cache' =>
|
60 |
-
array (
|
61 |
-
'pretty_version' => '2.0.2',
|
62 |
-
'version' => '2.0.2.0',
|
63 |
-
'aliases' =>
|
64 |
-
array (
|
65 |
-
),
|
66 |
-
'reference' => '01e82b9dc0f2f8b0ee070212b0e9e91045f60926',
|
67 |
-
),
|
68 |
-
'matomo/decompress' =>
|
69 |
-
array (
|
70 |
-
'pretty_version' => '2.1.0',
|
71 |
-
'version' => '2.1.0.0',
|
72 |
-
'aliases' =>
|
73 |
-
array (
|
74 |
-
),
|
75 |
-
'reference' => '44dcf77dcd633a9c336f90d80658ad3d25225e05',
|
76 |
-
),
|
77 |
-
'matomo/device-detector' =>
|
78 |
-
array (
|
79 |
-
'pretty_version' => '4.2.3',
|
80 |
-
'version' => '4.2.3.0',
|
81 |
-
'aliases' =>
|
82 |
-
array (
|
83 |
-
),
|
84 |
-
'reference' => 'd879f07496d6e6ee89cef5bcd925383d9b0c2cc0',
|
85 |
-
),
|
86 |
-
'matomo/ini' =>
|
87 |
-
array (
|
88 |
-
'pretty_version' => '2.0.2',
|
89 |
-
'version' => '2.0.2.0',
|
90 |
-
'aliases' =>
|
91 |
-
array (
|
92 |
-
),
|
93 |
-
'reference' => 'f7b0d6ce594b34ead16864fbc5062c771328ac31',
|
94 |
-
),
|
95 |
-
'matomo/matomo' =>
|
96 |
-
array (
|
97 |
-
'pretty_version' => '4.3.1-rc1',
|
98 |
-
'version' => '4.3.1.0-RC1',
|
99 |
-
'aliases' =>
|
100 |
-
array (
|
101 |
-
),
|
102 |
-
'reference' => '440965f7c0d48e5a5081a33ce30c6f38822e64f1',
|
103 |
-
),
|
104 |
-
'matomo/matomo-php-tracker' =>
|
105 |
-
array (
|
106 |
-
'pretty_version' => '3.0.0',
|
107 |
-
'version' => '3.0.0.0',
|
108 |
-
'aliases' =>
|
109 |
-
array (
|
110 |
-
),
|
111 |
-
'reference' => '31e2b0bdf479c6fc00758228d2c6d7c85c1863a0',
|
112 |
-
),
|
113 |
-
'matomo/network' =>
|
114 |
-
array (
|
115 |
-
'pretty_version' => '2.0.1',
|
116 |
-
'version' => '2.0.1.0',
|
117 |
-
'aliases' =>
|
118 |
-
array (
|
119 |
-
),
|
120 |
-
'reference' => 'ff654b8fc7778b80279815d06a368f7b41249501',
|
121 |
-
),
|
122 |
-
'matomo/referrer-spam-blacklist' =>
|
123 |
-
array (
|
124 |
-
'replaced' =>
|
125 |
-
array (
|
126 |
-
0 => '*',
|
127 |
-
),
|
128 |
-
),
|
129 |
-
'matomo/referrer-spam-list' =>
|
130 |
-
array (
|
131 |
-
'pretty_version' => '4.0.0',
|
132 |
-
'version' => '4.0.0.0',
|
133 |
-
'aliases' =>
|
134 |
-
array (
|
135 |
-
),
|
136 |
-
'reference' => 'afe4c1ea107ee7a8915a0d5eb0031cf0366608a8',
|
137 |
-
),
|
138 |
-
'matomo/searchengine-and-social-list' =>
|
139 |
-
array (
|
140 |
-
'pretty_version' => '3.11.0',
|
141 |
-
'version' => '3.11.0.0',
|
142 |
-
'aliases' =>
|
143 |
-
array (
|
144 |
-
),
|
145 |
-
'reference' => '80ab98ed17ea5b72730f4f4d96acc03847440103',
|
146 |
-
),
|
147 |
-
'maxmind-db/reader' =>
|
148 |
-
array (
|
149 |
-
'pretty_version' => 'v1.8.0',
|
150 |
-
'version' => '1.8.0.0',
|
151 |
-
'aliases' =>
|
152 |
-
array (
|
153 |
-
),
|
154 |
-
'reference' => 'b566d429ac9aec10594b0935be8ff38302f8d5c8',
|
155 |
-
),
|
156 |
-
'maxmind/web-service-common' =>
|
157 |
-
array (
|
158 |
-
'pretty_version' => 'v0.8.1',
|
159 |
-
'version' => '0.8.1.0',
|
160 |
-
'aliases' =>
|
161 |
-
array (
|
162 |
-
),
|
163 |
-
'reference' => '32f274051c543fc865e5a84d3a2c703913641ea8',
|
164 |
-
),
|
165 |
-
'monolog/monolog' =>
|
166 |
-
array (
|
167 |
-
'pretty_version' => '1.25.5',
|
168 |
-
'version' => '1.25.5.0',
|
169 |
-
'aliases' =>
|
170 |
-
array (
|
171 |
-
),
|
172 |
-
'reference' => '1817faadd1846cd08be9a49e905dc68823bc38c0',
|
173 |
-
),
|
174 |
-
'mustangostang/spyc' =>
|
175 |
-
array (
|
176 |
-
'pretty_version' => '0.6.3',
|
177 |
-
'version' => '0.6.3.0',
|
178 |
-
'aliases' =>
|
179 |
-
array (
|
180 |
-
),
|
181 |
-
'reference' => '4627c838b16550b666d15aeae1e5289dd5b77da0',
|
182 |
-
),
|
183 |
-
'opis/closure' =>
|
184 |
-
array (
|
185 |
-
'pretty_version' => '3.6.1',
|
186 |
-
'version' => '3.6.1.0',
|
187 |
-
'aliases' =>
|
188 |
-
array (
|
189 |
-
),
|
190 |
-
'reference' => '943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5',
|
191 |
-
),
|
192 |
-
'pear/archive_tar' =>
|
193 |
-
array (
|
194 |
-
'pretty_version' => '1.4.13',
|
195 |
-
'version' => '1.4.13.0',
|
196 |
-
'aliases' =>
|
197 |
-
array (
|
198 |
-
),
|
199 |
-
'reference' => '2b87b41178cc6d4ad3cba678a46a1cae49786011',
|
200 |
-
),
|
201 |
-
'pear/console_getopt' =>
|
202 |
-
array (
|
203 |
-
'pretty_version' => 'v1.4.3',
|
204 |
-
'version' => '1.4.3.0',
|
205 |
-
'aliases' =>
|
206 |
-
array (
|
207 |
-
),
|
208 |
-
'reference' => 'a41f8d3e668987609178c7c4a9fe48fecac53fa0',
|
209 |
-
),
|
210 |
-
'pear/pear-core-minimal' =>
|
211 |
-
array (
|
212 |
-
'pretty_version' => 'v1.10.10',
|
213 |
-
'version' => '1.10.10.0',
|
214 |
-
'aliases' =>
|
215 |
-
array (
|
216 |
-
),
|
217 |
-
'reference' => '625a3c429d9b2c1546438679074cac1b089116a7',
|
218 |
-
),
|
219 |
-
'pear/pear_exception' =>
|
220 |
-
array (
|
221 |
-
'pretty_version' => 'v1.0.1',
|
222 |
-
'version' => '1.0.1.0',
|
223 |
-
'aliases' =>
|
224 |
-
array (
|
225 |
-
),
|
226 |
-
'reference' => 'dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7',
|
227 |
-
),
|
228 |
-
'php-di/invoker' =>
|
229 |
-
array (
|
230 |
-
'pretty_version' => '2.0.0',
|
231 |
-
'version' => '2.0.0.0',
|
232 |
-
'aliases' =>
|
233 |
-
array (
|
234 |
-
),
|
235 |
-
'reference' => '540c27c86f663e20fe39a24cd72fa76cdb21d41a',
|
236 |
-
),
|
237 |
-
'php-di/php-di' =>
|
238 |
-
array (
|
239 |
-
'pretty_version' => '6.3.0',
|
240 |
-
'version' => '6.3.0.0',
|
241 |
-
'aliases' =>
|
242 |
-
array (
|
243 |
-
),
|
244 |
-
'reference' => '955cacea6b0beaba07e8c11b8367f5b3d5abe89f',
|
245 |
-
),
|
246 |
-
'php-di/phpdoc-reader' =>
|
247 |
-
array (
|
248 |
-
'pretty_version' => '2.2.1',
|
249 |
-
'version' => '2.2.1.0',
|
250 |
-
'aliases' =>
|
251 |
-
array (
|
252 |
-
),
|
253 |
-
'reference' => '66daff34cbd2627740ffec9469ffbac9f8c8185c',
|
254 |
-
),
|
255 |
-
'phpmailer/phpmailer' =>
|
256 |
-
array (
|
257 |
-
'pretty_version' => 'v6.4.1',
|
258 |
-
'version' => '6.4.1.0',
|
259 |
-
'aliases' =>
|
260 |
-
array (
|
261 |
-
),
|
262 |
-
'reference' => '9256f12d8fb0cd0500f93b19e18c356906cbed3d',
|
263 |
-
),
|
264 |
-
'piwik/device-detector' =>
|
265 |
-
array (
|
266 |
-
'replaced' =>
|
267 |
-
array (
|
268 |
-
0 => '4.2.3',
|
269 |
-
),
|
270 |
-
),
|
271 |
-
'piwik/referrer-spam-blacklist' =>
|
272 |
-
array (
|
273 |
-
'replaced' =>
|
274 |
-
array (
|
275 |
-
0 => '*',
|
276 |
-
),
|
277 |
-
),
|
278 |
-
'piwik/searchengine-and-social-list' =>
|
279 |
-
array (
|
280 |
-
'replaced' =>
|
281 |
-
array (
|
282 |
-
0 => '*',
|
283 |
-
),
|
284 |
-
),
|
285 |
-
'psr/container' =>
|
286 |
-
array (
|
287 |
-
'pretty_version' => '1.0.0',
|
288 |
-
'version' => '1.0.0.0',
|
289 |
-
'aliases' =>
|
290 |
-
array (
|
291 |
-
),
|
292 |
-
'reference' => 'b7ce3b176482dbbc1245ebf52b181af44c2cf55f',
|
293 |
-
),
|
294 |
-
'psr/container-implementation' =>
|
295 |
-
array (
|
296 |
-
'provided' =>
|
297 |
-
array (
|
298 |
-
0 => '^1.0',
|
299 |
-
),
|
300 |
-
),
|
301 |
-
'psr/log' =>
|
302 |
-
array (
|
303 |
-
'pretty_version' => '1.1.3',
|
304 |
-
'version' => '1.1.3.0',
|
305 |
-
'aliases' =>
|
306 |
-
array (
|
307 |
-
),
|
308 |
-
'reference' => '0f73288fd15629204f9d42b7055f72dacbe811fc',
|
309 |
-
),
|
310 |
-
'psr/log-implementation' =>
|
311 |
-
array (
|
312 |
-
'provided' =>
|
313 |
-
array (
|
314 |
-
0 => '1.0.0',
|
315 |
-
),
|
316 |
-
),
|
317 |
-
'rsky/pear-core-min' =>
|
318 |
-
array (
|
319 |
-
'replaced' =>
|
320 |
-
array (
|
321 |
-
0 => 'v1.10.10',
|
322 |
-
),
|
323 |
-
),
|
324 |
-
'symfony/console' =>
|
325 |
-
array (
|
326 |
-
'pretty_version' => 'v2.6.13',
|
327 |
-
'version' => '2.6.13.0',
|
328 |
-
'aliases' =>
|
329 |
-
array (
|
330 |
-
),
|
331 |
-
'reference' => '0e5e18ae09d3f5c06367759be940e9ed3f568359',
|
332 |
-
),
|
333 |
-
'symfony/event-dispatcher' =>
|
334 |
-
array (
|
335 |
-
'pretty_version' => 'v2.6.13',
|
336 |
-
'version' => '2.6.13.0',
|
337 |
-
'aliases' =>
|
338 |
-
array (
|
339 |
-
),
|
340 |
-
'reference' => '672593bc4b0043a0acf91903bb75a1c82d8f2e02',
|
341 |
-
),
|
342 |
-
'symfony/monolog-bridge' =>
|
343 |
-
array (
|
344 |
-
'pretty_version' => 'v2.6.13',
|
345 |
-
'version' => '2.6.13.0',
|
346 |
-
'aliases' =>
|
347 |
-
array (
|
348 |
-
),
|
349 |
-
'reference' => 'ba66eeabaa004e3ab70764cab59b056b182aa535',
|
350 |
-
),
|
351 |
-
'symfony/polyfill-ctype' =>
|
352 |
-
array (
|
353 |
-
'pretty_version' => 'v1.20.0',
|
354 |
-
'version' => '1.20.0.0',
|
355 |
-
'aliases' =>
|
356 |
-
array (
|
357 |
-
),
|
358 |
-
'reference' => 'f4ba089a5b6366e453971d3aad5fe8e897b37f41',
|
359 |
-
),
|
360 |
-
'symfony/polyfill-mbstring' =>
|
361 |
-
array (
|
362 |
-
'pretty_version' => 'v1.20.0',
|
363 |
-
'version' => '1.20.0.0',
|
364 |
-
'aliases' =>
|
365 |
-
array (
|
366 |
-
),
|
367 |
-
'reference' => '39d483bdf39be819deabf04ec872eb0b2410b531',
|
368 |
-
),
|
369 |
-
'symfony/polyfill-php54' =>
|
370 |
-
array (
|
371 |
-
'replaced' =>
|
372 |
-
array (
|
373 |
-
0 => '*',
|
374 |
-
),
|
375 |
-
),
|
376 |
-
'symfony/polyfill-php55' =>
|
377 |
-
array (
|
378 |
-
'replaced' =>
|
379 |
-
array (
|
380 |
-
0 => '*',
|
381 |
-
),
|
382 |
-
),
|
383 |
-
'symfony/polyfill-php56' =>
|
384 |
-
array (
|
385 |
-
'replaced' =>
|
386 |
-
array (
|
387 |
-
0 => '*',
|
388 |
-
),
|
389 |
-
),
|
390 |
-
'symfony/polyfill-php70' =>
|
391 |
-
array (
|
392 |
-
'replaced' =>
|
393 |
-
array (
|
394 |
-
0 => '*',
|
395 |
-
),
|
396 |
-
),
|
397 |
-
'symfony/polyfill-php71' =>
|
398 |
-
array (
|
399 |
-
'replaced' =>
|
400 |
-
array (
|
401 |
-
0 => '*',
|
402 |
-
),
|
403 |
-
),
|
404 |
-
'symfony/polyfill-php72' =>
|
405 |
-
array (
|
406 |
-
'replaced' =>
|
407 |
-
array (
|
408 |
-
0 => '*',
|
409 |
-
),
|
410 |
-
),
|
411 |
-
'szymach/c-pchart' =>
|
412 |
-
array (
|
413 |
-
'pretty_version' => 'v2.0.12',
|
414 |
-
'version' => '2.0.12.0',
|
415 |
-
'aliases' =>
|
416 |
-
array (
|
417 |
-
),
|
418 |
-
'reference' => 'f5fad68b303f65225db1a3d3f4bb58aea7a418b4',
|
419 |
-
),
|
420 |
-
'tecnickcom/tcpdf' =>
|
421 |
-
array (
|
422 |
-
'pretty_version' => '6.4.1',
|
423 |
-
'version' => '6.4.1.0',
|
424 |
-
'aliases' =>
|
425 |
-
array (
|
426 |
-
),
|
427 |
-
'reference' => '5ba838befdb37ef06a16d9f716f35eb03cb1b329',
|
428 |
-
),
|
429 |
-
'tedivm/jshrink' =>
|
430 |
-
array (
|
431 |
-
'pretty_version' => 'v1.4.0',
|
432 |
-
'version' => '1.4.0.0',
|
433 |
-
'aliases' =>
|
434 |
-
array (
|
435 |
-
),
|
436 |
-
'reference' => '0513ba1407b1f235518a939455855e6952a48bbc',
|
437 |
-
),
|
438 |
-
'twig/twig' =>
|
439 |
-
array (
|
440 |
-
'pretty_version' => 'v3.1.1',
|
441 |
-
'version' => '3.1.1.0',
|
442 |
-
'aliases' =>
|
443 |
-
array (
|
444 |
-
),
|
445 |
-
'reference' => 'b02fa41f3783a2616eccef7b92fbc2343ffed737',
|
446 |
-
),
|
447 |
-
'wikimedia/less.php' =>
|
448 |
-
array (
|
449 |
-
'pretty_version' => 'v3.1.0',
|
450 |
-
'version' => '3.1.0.0',
|
451 |
-
'aliases' =>
|
452 |
-
array (
|
453 |
-
),
|
454 |
-
'reference' => 'a486d78b9bd16b72f237fc6093aa56d69ce8bd13',
|
455 |
-
),
|
456 |
-
),
|
457 |
);
|
1 |
+
<?php return array(
|
2 |
+
'root' => array(
|
3 |
+
'pretty_version' => '4.4.1',
|
4 |
+
'version' => '4.4.1.0',
|
5 |
+
'type' => 'application',
|
6 |
+
'install_path' => __DIR__ . '/../../',
|
7 |
+
'aliases' => array(),
|
8 |
+
'reference' => 'f57a5313f7923c60e55c2b101351bccaae287330',
|
9 |
+
'name' => 'matomo/matomo',
|
10 |
+
'dev' => false,
|
11 |
+
),
|
12 |
+
'versions' => array(
|
13 |
+
'composer/ca-bundle' => array(
|
14 |
+
'pretty_version' => '1.2.8',
|
15 |
+
'version' => '1.2.8.0',
|
16 |
+
'type' => 'library',
|
17 |
+
'install_path' => __DIR__ . '/./ca-bundle',
|
18 |
+
'aliases' => array(),
|
19 |
+
'reference' => '8a7ecad675253e4654ea05505233285377405215',
|
20 |
+
'dev_requirement' => false,
|
21 |
+
),
|
22 |
+
'composer/semver' => array(
|
23 |
+
'pretty_version' => '1.3.0',
|
24 |
+
'version' => '1.3.0.0',
|
25 |
+
'type' => 'library',
|
26 |
+
'install_path' => __DIR__ . '/./semver',
|
27 |
+
'aliases' => array(),
|
28 |
+
'reference' => 'df4463baa9f44fe6cf0a6da4fde2934d4c0a2747',
|
29 |
+
'dev_requirement' => false,
|
30 |
+
),
|
31 |
+
'davaxi/sparkline' => array(
|
32 |
+
'pretty_version' => '1.2.2',
|
33 |
+
'version' => '1.2.2.0',
|
34 |
+
'type' => 'library',
|
35 |
+
'install_path' => __DIR__ . '/../davaxi/sparkline',
|
36 |
+
'aliases' => array(),
|
37 |
+
'reference' => '380d447fcfc6468f7d8e5c041e8c01b8ec969959',
|
38 |
+
'dev_requirement' => false,
|
39 |
+
),
|
40 |
+
'geoip2/geoip2' => array(
|
41 |
+
'pretty_version' => 'v2.11.0',
|
42 |
+
'version' => '2.11.0.0',
|
43 |
+
'type' => 'library',
|
44 |
+
'install_path' => __DIR__ . '/../geoip2/geoip2',
|
45 |
+
'aliases' => array(),
|
46 |
+
'reference' => 'd01be5894a5c1a3381c58c9b1795cd07f96c30f7',
|
47 |
+
'dev_requirement' => false,
|
48 |
+
),
|
49 |
+
'matomo/cache' => array(
|
50 |
+
'pretty_version' => '2.0.3',
|
51 |
+
'version' => '2.0.3.0',
|
52 |
+
'type' => 'library',
|
53 |
+
'install_path' => __DIR__ . '/../matomo/cache',
|
54 |
+
'aliases' => array(),
|
55 |
+
'reference' => 'f058d5340fa427cac2b674e1ad41f1a8620c580b',
|
56 |
+
'dev_requirement' => false,
|
57 |
+
),
|
58 |
+
'matomo/decompress' => array(
|
59 |
+
'pretty_version' => '2.1.0',
|
60 |
+
'version' => '2.1.0.0',
|
61 |
+
'type' => 'library',
|
62 |
+
'install_path' => __DIR__ . '/../matomo/decompress',
|
63 |
+
'aliases' => array(),
|
64 |
+
'reference' => '44dcf77dcd633a9c336f90d80658ad3d25225e05',
|
65 |
+
'dev_requirement' => false,
|
66 |
+
),
|
67 |
+
'matomo/device-detector' => array(
|
68 |
+
'pretty_version' => '4.3.0',
|
69 |
+
'version' => '4.3.0.0',
|
70 |
+
'type' => 'library',
|
71 |
+
'install_path' => __DIR__ . '/../matomo/device-detector',
|
72 |
+
'aliases' => array(),
|
73 |
+
'reference' => '3fcceafc601444412ce65297ba4ce878ee77e450',
|
74 |
+
'dev_requirement' => false,
|
75 |
+
),
|
76 |
+
'matomo/doctrine-cache-fork' => array(
|
77 |
+
'pretty_version' => '1.10.2',
|
78 |
+
'version' => '1.10.2.0',
|
79 |
+
'type' => 'library',
|
80 |
+
'install_path' => __DIR__ . '/../matomo/doctrine-cache-fork',
|
81 |
+
'aliases' => array(),
|
82 |
+
'reference' => '021cfa412520c110b096bd49d93ccb482f7b6eef',
|
83 |
+
'dev_requirement' => false,
|
84 |
+
),
|
85 |
+
'matomo/ini' => array(
|
86 |
+
'pretty_version' => '2.0.2',
|
87 |
+
'version' => '2.0.2.0',
|
88 |
+
'type' => 'library',
|
89 |
+
'install_path' => __DIR__ . '/../matomo/ini',
|
90 |
+
'aliases' => array(),
|
91 |
+
'reference' => 'f7b0d6ce594b34ead16864fbc5062c771328ac31',
|
92 |
+
'dev_requirement' => false,
|
93 |
+
),
|
94 |
+
'matomo/matomo' => array(
|
95 |
+
'pretty_version' => '4.4.1',
|
96 |
+
'version' => '4.4.1.0',
|
97 |
+
'type' => 'application',
|
98 |
+
'install_path' => __DIR__ . '/../../',
|
99 |
+
'aliases' => array(),
|
100 |
+
'reference' => 'f57a5313f7923c60e55c2b101351bccaae287330',
|
101 |
+
'dev_requirement' => false,
|
102 |
+
),
|
103 |
+
'matomo/matomo-php-tracker' => array(
|
104 |
+
'pretty_version' => '3.0.0',
|
105 |
+
'version' => '3.0.0.0',
|
106 |
+
'type' => 'library',
|
107 |
+
'install_path' => __DIR__ . '/../matomo/matomo-php-tracker',
|
108 |
+
'aliases' => array(),
|
109 |
+
'reference' => '31e2b0bdf479c6fc00758228d2c6d7c85c1863a0',
|
110 |
+
'dev_requirement' => false,
|
111 |
+
),
|
112 |
+
'matomo/network' => array(
|
113 |
+
'pretty_version' => '2.0.1',
|
114 |
+
'version' => '2.0.1.0',
|
115 |
+
'type' => 'library',
|
116 |
+
'install_path' => __DIR__ . '/../matomo/network',
|
117 |
+
'aliases' => array(),
|
118 |
+
'reference' => 'ff654b8fc7778b80279815d06a368f7b41249501',
|
119 |
+
'dev_requirement' => false,
|
120 |
+
),
|
121 |
+
'matomo/referrer-spam-blacklist' => array(
|
122 |
+
'dev_requirement' => false,
|
123 |
+
'replaced' => array(
|
124 |
+
0 => '*',
|
125 |
+
),
|
126 |
+
),
|
127 |
+
'matomo/referrer-spam-list' => array(
|
128 |
+
'pretty_version' => '4.0.0',
|
129 |
+
'version' => '4.0.0.0',
|
130 |
+
'type' => 'library',
|
131 |
+
'install_path' => __DIR__ . '/../matomo/referrer-spam-list',
|
132 |
+
'aliases' => array(),
|
133 |
+
'reference' => 'afe4c1ea107ee7a8915a0d5eb0031cf0366608a8',
|
134 |
+
'dev_requirement' => false,
|
135 |
+
),
|
136 |
+
'matomo/searchengine-and-social-list' => array(
|
137 |
+
'pretty_version' => '3.11.0',
|
138 |
+
'version' => '3.11.0.0',
|
139 |
+
'type' => 'library',
|
140 |
+
'install_path' => __DIR__ . '/../matomo/searchengine-and-social-list',
|
141 |
+
'aliases' => array(),
|
142 |
+
'reference' => '80ab98ed17ea5b72730f4f4d96acc03847440103',
|
143 |
+
'dev_requirement' => false,
|
144 |
+
),
|
145 |
+
'maxmind-db/reader' => array(
|
146 |
+
'pretty_version' => 'v1.8.0',
|
147 |
+
'version' => '1.8.0.0',
|
148 |
+
'type' => 'library',
|
149 |
+
'install_path' => __DIR__ . '/../maxmind-db/reader',
|
150 |
+
'aliases' => array(),
|
151 |
+
'reference' => 'b566d429ac9aec10594b0935be8ff38302f8d5c8',
|
152 |
+
'dev_requirement' => false,
|
153 |
+
),
|
154 |
+
'maxmind/web-service-common' => array(
|
155 |
+
'pretty_version' => 'v0.8.1',
|
156 |
+
'version' => '0.8.1.0',
|
157 |
+
'type' => 'library',
|
158 |
+
'install_path' => __DIR__ . '/../maxmind/web-service-common',
|
159 |
+
'aliases' => array(),
|
160 |
+
'reference' => '32f274051c543fc865e5a84d3a2c703913641ea8',
|
161 |
+
'dev_requirement' => false,
|
162 |
+
),
|
163 |
+
'monolog/monolog' => array(
|
164 |
+
'pretty_version' => '1.25.5',
|
165 |
+
'version' => '1.25.5.0',
|
166 |
+
'type' => 'library',
|
167 |
+
'install_path' => __DIR__ . '/../monolog/monolog',
|
168 |
+
'aliases' => array(),
|
169 |
+
'reference' => '1817faadd1846cd08be9a49e905dc68823bc38c0',
|
170 |
+
'dev_requirement' => false,
|
171 |
+
),
|
172 |
+
'mustangostang/spyc' => array(
|
173 |
+
'pretty_version' => '0.6.3',
|
174 |
+
'version' => '0.6.3.0',
|
175 |
+
'type' => 'library',
|
176 |
+
'install_path' => __DIR__ . '/../mustangostang/spyc',
|
177 |
+
'aliases' => array(),
|
178 |
+
'reference' => '4627c838b16550b666d15aeae1e5289dd5b77da0',
|
179 |
+
'dev_requirement' => false,
|
180 |
+
),
|
181 |
+
'opis/closure' => array(
|
182 |
+
'pretty_version' => '3.6.1',
|
183 |
+
'version' => '3.6.1.0',
|
184 |
+
'type' => 'library',
|
185 |
+
'install_path' => __DIR__ . '/../opis/closure',
|
186 |
+
'aliases' => array(),
|
187 |
+
'reference' => '943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5',
|
188 |
+
'dev_requirement' => false,
|
189 |
+
),
|
190 |
+
'pear/archive_tar' => array(
|
191 |
+
'pretty_version' => '1.4.13',
|
192 |
+
'version' => '1.4.13.0',
|
193 |
+
'type' => 'library',
|
194 |
+
'install_path' => __DIR__ . '/../pear/archive_tar',
|
195 |
+
'aliases' => array(),
|
196 |
+
'reference' => '2b87b41178cc6d4ad3cba678a46a1cae49786011',
|
197 |
+
'dev_requirement' => false,
|
198 |
+
),
|
199 |
+
'pear/console_getopt' => array(
|
200 |
+
'pretty_version' => 'v1.4.3',
|
201 |
+
'version' => '1.4.3.0',
|
202 |
+
'type' => 'library',
|
203 |
+
'install_path' => __DIR__ . '/../pear/console_getopt',
|
204 |
+
'aliases' => array(),
|
205 |
+
'reference' => 'a41f8d3e668987609178c7c4a9fe48fecac53fa0',
|
206 |
+
'dev_requirement' => false,
|
207 |
+
),
|
208 |
+
'pear/pear-core-minimal' => array(
|
209 |
+
'pretty_version' => 'v1.10.10',
|
210 |
+
'version' => '1.10.10.0',
|
211 |
+
'type' => 'library',
|
212 |
+
'install_path' => __DIR__ . '/../pear/pear-core-minimal',
|
213 |
+
'aliases' => array(),
|
214 |
+
'reference' => '625a3c429d9b2c1546438679074cac1b089116a7',
|
215 |
+
'dev_requirement' => false,
|
216 |
+
),
|
217 |
+
'pear/pear_exception' => array(
|
218 |
+
'pretty_version' => 'v1.0.1',
|
219 |
+
'version' => '1.0.1.0',
|
220 |
+
'type' => 'class',
|
221 |
+
'install_path' => __DIR__ . '/../pear/pear_exception',
|
222 |
+
'aliases' => array(),
|
223 |
+
'reference' => 'dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7',
|
224 |
+
'dev_requirement' => false,
|
225 |
+
),
|
226 |
+
'php-di/invoker' => array(
|
227 |
+
'pretty_version' => '2.0.0',
|
228 |
+
'version' => '2.0.0.0',
|
229 |
+
'type' => 'library',
|
230 |
+
'install_path' => __DIR__ . '/../php-di/invoker',
|
231 |
+
'aliases' => array(),
|
232 |
+
'reference' => '540c27c86f663e20fe39a24cd72fa76cdb21d41a',
|
233 |
+
'dev_requirement' => false,
|
234 |
+
),
|
235 |
+
'php-di/php-di' => array(
|
236 |
+
'pretty_version' => '6.3.0',
|
237 |
+
'version' => '6.3.0.0',
|
238 |
+
'type' => 'library',
|
239 |
+
'install_path' => __DIR__ . '/../php-di/php-di',
|
240 |
+
'aliases' => array(),
|
241 |
+
'reference' => '955cacea6b0beaba07e8c11b8367f5b3d5abe89f',
|
242 |
+
'dev_requirement' => false,
|
243 |
+
),
|
244 |
+
'php-di/phpdoc-reader' => array(
|
245 |
+
'pretty_version' => '2.2.1',
|
246 |
+
'version' => '2.2.1.0',
|
247 |
+
'type' => 'library',
|
248 |
+
'install_path' => __DIR__ . '/../php-di/phpdoc-reader',
|
249 |
+
'aliases' => array(),
|
250 |
+
'reference' => '66daff34cbd2627740ffec9469ffbac9f8c8185c',
|
251 |
+
'dev_requirement' => false,
|
252 |
+
),
|
253 |
+
'phpmailer/phpmailer' => array(
|
254 |
+
'pretty_version' => 'v6.5.0',
|
255 |
+
'version' => '6.5.0.0',
|
256 |
+
'type' => 'library',
|
257 |
+
'install_path' => __DIR__ . '/../phpmailer/phpmailer',
|
258 |
+
'aliases' => array(),
|
259 |
+
'reference' => 'a5b5c43e50b7fba655f793ad27303cd74c57363c',
|
260 |
+
'dev_requirement' => false,
|
261 |
+
),
|
262 |
+
'piwik/device-detector' => array(
|
263 |
+
'dev_requirement' => false,
|
264 |
+
'replaced' => array(
|
265 |
+
0 => '4.3.0',
|
266 |
+
),
|
267 |
+
),
|
268 |
+
'piwik/referrer-spam-blacklist' => array(
|
269 |
+
'dev_requirement' => false,
|
270 |
+
'replaced' => array(
|
271 |
+
0 => '*',
|
272 |
+
),
|
273 |
+
),
|
274 |
+
'piwik/searchengine-and-social-list' => array(
|
275 |
+
'dev_requirement' => false,
|
276 |
+
'replaced' => array(
|
277 |
+
0 => '*',
|
278 |
+
),
|
279 |
+
),
|
280 |
+
'psr/container' => array(
|
281 |
+
'pretty_version' => '1.0.0',
|
282 |
+
'version' => '1.0.0.0',
|
283 |
+
'type' => 'library',
|
284 |
+
'install_path' => __DIR__ . '/../psr/container',
|
285 |
+
'aliases' => array(),
|
286 |
+
'reference' => 'b7ce3b176482dbbc1245ebf52b181af44c2cf55f',
|
287 |
+
'dev_requirement' => false,
|
288 |
+
),
|
289 |
+
'psr/container-implementation' => array(
|
290 |
+
'dev_requirement' => false,
|
291 |
+
'provided' => array(
|
292 |
+
0 => '^1.0',
|
293 |
+
),
|
294 |
+
),
|
295 |
+
'psr/log' => array(
|
296 |
+
'pretty_version' => '1.1.3',
|
297 |
+
'version' => '1.1.3.0',
|
298 |
+
'type' => 'library',
|
299 |
+
'install_path' => __DIR__ . '/../psr/log',
|
300 |
+
'aliases' => array(),
|
301 |
+
'reference' => '0f73288fd15629204f9d42b7055f72dacbe811fc',
|
302 |
+
'dev_requirement' => false,
|
303 |
+
),
|
304 |
+
'psr/log-implementation' => array(
|
305 |
+
'dev_requirement' => false,
|
306 |
+
'provided' => array(
|
307 |
+
0 => '1.0.0',
|
308 |
+
),
|
309 |
+
),
|
310 |
+
'rsky/pear-core-min' => array(
|
311 |
+
'dev_requirement' => false,
|
312 |
+
'replaced' => array(
|
313 |
+
0 => 'v1.10.10',
|
314 |
+
),
|
315 |
+
),
|
316 |
+
'symfony/console' => array(
|
317 |
+
'pretty_version' => 'v2.6.13',
|
318 |
+
'version' => '2.6.13.0',
|
319 |
+
'type' => 'library',
|
320 |
+
'install_path' => __DIR__ . '/../symfony/console/Symfony/Component/Console',
|
321 |
+
'aliases' => array(),
|
322 |
+
'reference' => '0e5e18ae09d3f5c06367759be940e9ed3f568359',
|
323 |
+
'dev_requirement' => false,
|
324 |
+
),
|
325 |
+
'symfony/event-dispatcher' => array(
|
326 |
+
'pretty_version' => 'v2.6.13',
|
327 |
+
'version' => '2.6.13.0',
|
328 |
+
'type' => 'library',
|
329 |
+
'install_path' => __DIR__ . '/../symfony/event-dispatcher/Symfony/Component/EventDispatcher',
|
330 |
+
'aliases' => array(),
|
331 |
+
'reference' => '672593bc4b0043a0acf91903bb75a1c82d8f2e02',
|
332 |
+
'dev_requirement' => false,
|
333 |
+
),
|
334 |
+
'symfony/monolog-bridge' => array(
|
335 |
+
'pretty_version' => 'v2.6.13',
|
336 |
+
'version' => '2.6.13.0',
|
337 |
+
'type' => 'symfony-bridge',
|
338 |
+
'install_path' => __DIR__ . '/../symfony/monolog-bridge/Symfony/Bridge/Monolog',
|
339 |
+
'aliases' => array(),
|
340 |
+
'reference' => 'ba66eeabaa004e3ab70764cab59b056b182aa535',
|
341 |
+
'dev_requirement' => false,
|
342 |
+
),
|
343 |
+
'symfony/polyfill-ctype' => array(
|
344 |
+
'pretty_version' => 'v1.20.0',
|
345 |
+
'version' => '1.20.0.0',
|
346 |
+
'type' => 'library',
|
347 |
+
'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
|
348 |
+
'aliases' => array(),
|
349 |
+
'reference' => 'f4ba089a5b6366e453971d3aad5fe8e897b37f41',
|
350 |
+
'dev_requirement' => false,
|
351 |
+
),
|
352 |
+
'symfony/polyfill-iconv' => array(
|
353 |
+
'pretty_version' => 'v1.20.0',
|
354 |
+
'version' => '1.20.0.0',
|
355 |
+
'type' => 'library',
|
356 |
+
'install_path' => __DIR__ . '/../symfony/polyfill-iconv',
|
357 |
+
'aliases' => array(),
|
358 |
+
'reference' => 'c536646fdb4f29104dd26effc2fdcb9a5b085024',
|
359 |
+
'dev_requirement' => false,
|
360 |
+
),
|
361 |
+
'symfony/polyfill-mbstring' => array(
|
362 |
+
'pretty_version' => 'v1.20.0',
|
363 |
+
'version' => '1.20.0.0',
|
364 |
+
'type' => 'library',
|
365 |
+
'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
|
366 |
+
'aliases' => array(),
|
367 |
+
'reference' => '39d483bdf39be819deabf04ec872eb0b2410b531',
|
368 |
+
'dev_requirement' => false,
|
369 |
+
),
|
370 |
+
'symfony/polyfill-php54' => array(
|
371 |
+
'dev_requirement' => false,
|
372 |
+
'replaced' => array(
|
373 |
+
0 => '*',
|
374 |
+
),
|
375 |
+
),
|
376 |
+
'symfony/polyfill-php55' => array(
|
377 |
+
'dev_requirement' => false,
|
378 |
+
'replaced' => array(
|
379 |
+
0 => '*',
|
380 |
+
),
|
381 |
+
),
|
382 |
+
'symfony/polyfill-php56' => array(
|
383 |
+
'dev_requirement' => false,
|
384 |
+
'replaced' => array(
|
385 |
+
0 => '*',
|
386 |
+
),
|
387 |
+
),
|
388 |
+
'symfony/polyfill-php70' => array(
|
389 |
+
'dev_requirement' => false,
|
390 |
+
'replaced' => array(
|
391 |
+
0 => '*',
|
392 |
+
),
|
393 |
+
),
|
394 |
+
'symfony/polyfill-php71' => array(
|
395 |
+
'dev_requirement' => false,
|
396 |
+
'replaced' => array(
|
397 |
+
0 => '*',
|
398 |
+
),
|
399 |
+
),
|
400 |
+
'symfony/polyfill-php72' => array(
|
401 |
+
'dev_requirement' => false,
|
402 |
+
'replaced' => array(
|
403 |
+
0 => '*',
|
404 |
+
),
|
405 |
+
),
|
406 |
+
'szymach/c-pchart' => array(
|
407 |
+
'pretty_version' => 'v2.0.12',
|
408 |
+
'version' => '2.0.12.0',
|
409 |
+
'type' => 'project',
|
410 |
+
'install_path' => __DIR__ . '/../szymach/c-pchart',
|
411 |
+
'aliases' => array(),
|
412 |
+
'reference' => 'f5fad68b303f65225db1a3d3f4bb58aea7a418b4',
|
413 |
+
'dev_requirement' => false,
|
414 |
+
),
|
415 |
+
'tecnickcom/tcpdf' => array(
|
416 |
+
'pretty_version' => '6.4.1',
|
417 |
+
'version' => '6.4.1.0',
|
418 |
+
'type' => 'library',
|
419 |
+
'install_path' => __DIR__ . '/../tecnickcom/tcpdf',
|
420 |
+
'aliases' => array(),
|
421 |
+
'reference' => '5ba838befdb37ef06a16d9f716f35eb03cb1b329',
|
422 |
+
'dev_requirement' => false,
|
423 |
+
),
|
424 |
+
'tedivm/jshrink' => array(
|
425 |
+
'pretty_version' => 'v1.4.0',
|
426 |
+
'version' => '1.4.0.0',
|
427 |
+
'type' => 'library',
|
428 |
+
'install_path' => __DIR__ . '/../tedivm/jshrink',
|
429 |
+
'aliases' => array(),
|
430 |
+
'reference' => '0513ba1407b1f235518a939455855e6952a48bbc',
|
431 |
+
'dev_requirement' => false,
|
432 |
+
),
|
433 |
+
'twig/twig' => array(
|
434 |
+
'pretty_version' => 'v3.1.1',
|
435 |
+
'version' => '3.1.1.0',
|
436 |
+
'type' => 'library',
|
437 |
+
'install_path' => __DIR__ . '/../twig/twig',
|
438 |
+
'aliases' => array(),
|
439 |
+
'reference' => 'b02fa41f3783a2616eccef7b92fbc2343ffed737',
|
440 |
+
'dev_requirement' => false,
|
441 |
+
),
|
442 |
+
'wikimedia/less.php' => array(
|
443 |
+
'pretty_version' => 'v3.1.0',
|
444 |
+
'version' => '3.1.0.0',
|
445 |
+
'type' => 'library',
|
446 |
+
'install_path' => __DIR__ . '/../wikimedia/less.php',
|
447 |
+
'aliases' => array(),
|
448 |
+
'reference' => 'a486d78b9bd16b72f237fc6093aa56d69ce8bd13',
|
449 |
+
'dev_requirement' => false,
|
450 |
+
),
|
451 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
452 |
);
|
app/vendor/matomo/cache/README.md
CHANGED
@@ -4,8 +4,7 @@ This is a PHP caching library based on [Doctrine cache](https://github.com/doctr
|
|
4 |
At [Matomo](https://matomo.org) we developed this library with the focus on speed as we make heavy use of caching and
|
5 |
sometimes fetch hundreds of entries from the cache in one request.
|
6 |
|
7 |
-
[![Build Status](https://travis-ci.
|
8 |
-
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/matomo-org/component-cache/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/matomo-org/component-cache/?branch=master)
|
9 |
|
10 |
## Installation
|
11 |
|
@@ -25,6 +24,7 @@ With Composer:
|
|
25 |
* File (stores the cache entry on the file system)
|
26 |
* Redis (stores the cache entry on a Redis server, requires [phpredis](https://github.com/nicolasff/phpredis))
|
27 |
* Chained (allows to chain multiple backends to make sure it will read from a fast cache if possible)
|
|
|
28 |
|
29 |
Doctrine cache provides support for many more backends and adding one of those is easy. For example:
|
30 |
* APC
|
@@ -112,6 +112,29 @@ the cache entry from the file system. If the cache entry exists on the file syst
|
|
112 |
using the array cache so the next read within this request will be fast and won't cause a stat call again. If you delete
|
113 |
a cache entry it will be removed from all configured backends. You can chain any backends. It is recommended to list
|
114 |
faster backends first.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
|
116 |
### Creating a lazy cache
|
117 |
|
4 |
At [Matomo](https://matomo.org) we developed this library with the focus on speed as we make heavy use of caching and
|
5 |
sometimes fetch hundreds of entries from the cache in one request.
|
6 |
|
7 |
+
[![Build Status](https://travis-ci.com/matomo-org/component-cache.svg?branch=master)](https://travis-ci.com/matomo-org/component-cache)
|
|
|
8 |
|
9 |
## Installation
|
10 |
|
24 |
* File (stores the cache entry on the file system)
|
25 |
* Redis (stores the cache entry on a Redis server, requires [phpredis](https://github.com/nicolasff/phpredis))
|
26 |
* Chained (allows to chain multiple backends to make sure it will read from a fast cache if possible)
|
27 |
+
* DefaultTimeout and KeyPrefix can be used to wrap other backend with default parameters.
|
28 |
|
29 |
Doctrine cache provides support for many more backends and adding one of those is easy. For example:
|
30 |
* APC
|
112 |
using the array cache so the next read within this request will be fast and won't cause a stat call again. If you delete
|
113 |
a cache entry it will be removed from all configured backends. You can chain any backends. It is recommended to list
|
114 |
faster backends first.
|
115 |
+
|
116 |
+
### Creating a decorated backend with `DefaultTimeout` or `KeyPrefix`
|
117 |
+
|
118 |
+
```php
|
119 |
+
$options = array(
|
120 |
+
'backend' => 'array',
|
121 |
+
'array' => array(),
|
122 |
+
'keyPrefix' => 'someKeyPrefixStr'
|
123 |
+
);
|
124 |
+
$factory = new \Matomo\Cache\Backend\Factory();
|
125 |
+
$backend = $factory->buildBackend('keyPrefix', $options);
|
126 |
+
```
|
127 |
+
|
128 |
+
Sometimes its useful to set default a default parameter for the timeout to force prevent infinite lifetimes, or to
|
129 |
+
specify a key prefix to prevent different versions of the app from reading and writing the same cache entry.
|
130 |
+
`DefaultTimeout` and `KeyPrefix` are "decorators" that wrap another backend. Currently each takes a single configuration
|
131 |
+
argument with the same name as the backend.
|
132 |
+
|
133 |
+
|backend | argument | description |
|
134 |
+
| --- | --- | --- |
|
135 |
+
|DefaultTimeout|`defaultTimeout`| Uses the `integer` value as the default timeout for defining cache entry lifetime. Only comes to effect when no lifetime is specified; Prevents infinite lifetimes.|
|
136 |
+
|KeyPrefix|`keyPrefix`| Prefixes the given value to the keys for any operation. For example `'Key123'` would become `'SomePrefixKey123'` |
|
137 |
+
|
138 |
|
139 |
### Creating a lazy cache
|
140 |
|
app/vendor/matomo/cache/src/Backend/BaseDecorator.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/lgpl-3.0.html LGPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
namespace Matomo\Cache\Backend;
|
10 |
+
|
11 |
+
use Matomo\Cache\Backend;
|
12 |
+
|
13 |
+
class BaseDecorator implements Backend
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* @var Backend
|
17 |
+
*/
|
18 |
+
protected $decorated;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Constructor.
|
22 |
+
*
|
23 |
+
* @param Backend $decorated Wrapped backend to apply TTL to.
|
24 |
+
* @param array $options includes default TTL to be used.
|
25 |
+
*
|
26 |
+
* @throws \InvalidArgumentException
|
27 |
+
*/
|
28 |
+
public function __construct($decorated)
|
29 |
+
{
|
30 |
+
$this->decorated = $decorated;
|
31 |
+
}
|
32 |
+
|
33 |
+
public function doFetch($id)
|
34 |
+
{
|
35 |
+
return $this->decorated->doFetch($id);
|
36 |
+
}
|
37 |
+
|
38 |
+
public function doContains($id)
|
39 |
+
{
|
40 |
+
return $this->decorated->doContains($id);
|
41 |
+
}
|
42 |
+
|
43 |
+
public function doSave($id, $data, $lifeTime = 0)
|
44 |
+
{
|
45 |
+
return $this->decorated->doSave( $id, $data, $lifeTime);
|
46 |
+
}
|
47 |
+
|
48 |
+
public function doDelete($id)
|
49 |
+
{
|
50 |
+
return $this->decorated->doDelete($id);
|
51 |
+
}
|
52 |
+
|
53 |
+
public function doFlush()
|
54 |
+
{
|
55 |
+
return $this->decorated->doFlush();
|
56 |
+
}
|
57 |
+
|
58 |
+
public function getBackend()
|
59 |
+
{
|
60 |
+
return $this->decorated;
|
61 |
+
}
|
62 |
+
}
|
app/vendor/matomo/cache/src/Backend/DefaultTimeoutDecorated.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/lgpl-3.0.html LGPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
namespace Matomo\Cache\Backend;
|
10 |
+
|
11 |
+
use Matomo\Cache\Backend;
|
12 |
+
|
13 |
+
class DefaultTimeoutDecorated extends BaseDecorator
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* @var integer
|
17 |
+
*/
|
18 |
+
private $defaultTTL;
|
19 |
+
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Constructor.
|
23 |
+
*
|
24 |
+
* @param Backend $decorated Wrapped backend to apply TTL to.
|
25 |
+
* @param array $options includes default TTL to be used.
|
26 |
+
*
|
27 |
+
* @throws \InvalidArgumentException
|
28 |
+
*/
|
29 |
+
public function __construct($decorated, $options)
|
30 |
+
{
|
31 |
+
if (!isset($options['defaultTimeout']) || !is_int($options['defaultTimeout'])) {
|
32 |
+
throw new \InvalidArgumentException("The defaultTimeout option is required and must be an integer");
|
33 |
+
}
|
34 |
+
|
35 |
+
$this->defaultTTL = $options['defaultTimeout'];
|
36 |
+
parent::__construct($decorated);
|
37 |
+
}
|
38 |
+
|
39 |
+
public function doSave($id, $data, $lifeTime = 0)
|
40 |
+
{
|
41 |
+
return $this->decorated->doSave( $id, $data, $lifeTime ?: $this->defaultTTL);
|
42 |
+
}
|
43 |
+
}
|
app/vendor/matomo/cache/src/Backend/Factory.php
CHANGED
@@ -76,6 +76,27 @@ class Factory
|
|
76 |
return $redisCache;
|
77 |
}
|
78 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
/**
|
80 |
* Build a specific backend instance.
|
81 |
*
|
@@ -107,6 +128,14 @@ class Factory
|
|
107 |
|
108 |
return $this->buildRedisCache($options);
|
109 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
110 |
default:
|
111 |
|
112 |
throw new Factory\BackendNotFoundException("Cache backend $type not valid");
|
76 |
return $redisCache;
|
77 |
}
|
78 |
|
79 |
+
/**
|
80 |
+
* @param string $class
|
81 |
+
* @param array $options
|
82 |
+
*
|
83 |
+
* @return Backend
|
84 |
+
*
|
85 |
+
* @throws Factory\BackendNotFoundException
|
86 |
+
*/
|
87 |
+
public function buildDecorated( $class, $options )
|
88 |
+
{
|
89 |
+
$backendToBuild = $options["backend"];
|
90 |
+
$backendOptions = array();
|
91 |
+
if (array_key_exists($backendToBuild, $options)) {
|
92 |
+
$backendOptions = $options[$backendToBuild];
|
93 |
+
}
|
94 |
+
|
95 |
+
$backend = $this->buildBackend($backendToBuild, $backendOptions);
|
96 |
+
|
97 |
+
return new $class($backend, $options);
|
98 |
+
}
|
99 |
+
|
100 |
/**
|
101 |
* Build a specific backend instance.
|
102 |
*
|
128 |
|
129 |
return $this->buildRedisCache($options);
|
130 |
|
131 |
+
case 'defaultTimeout':
|
132 |
+
|
133 |
+
return $this->buildDecorated(DefaultTimeoutDecorated::class, $options);
|
134 |
+
|
135 |
+
case 'keyPrefix':
|
136 |
+
|
137 |
+
return $this->buildDecorated(KeyPrefixDecorated::class, $options);
|
138 |
+
|
139 |
default:
|
140 |
|
141 |
throw new Factory\BackendNotFoundException("Cache backend $type not valid");
|
app/vendor/matomo/cache/src/Backend/File.php
CHANGED
@@ -23,6 +23,7 @@ class File extends PhpFileCache implements Backend
|
|
23 |
// opcache in FPM, so we have to invalidate before reading)
|
24 |
public static $invalidateOpCacheBeforeRead = false;
|
25 |
|
|
|
26 |
/**
|
27 |
* Constructor.
|
28 |
*
|
@@ -36,6 +37,7 @@ class File extends PhpFileCache implements Backend
|
|
36 |
if (!is_dir($directory)) {
|
37 |
$this->createDirectory($directory);
|
38 |
}
|
|
|
39 |
|
40 |
parent::__construct($directory, $extension);
|
41 |
}
|
@@ -46,6 +48,14 @@ class File extends PhpFileCache implements Backend
|
|
46 |
$this->invalidateCacheFile($id);
|
47 |
}
|
48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
return parent::doFetch($id);
|
50 |
}
|
51 |
|
23 |
// opcache in FPM, so we have to invalidate before reading)
|
24 |
public static $invalidateOpCacheBeforeRead = false;
|
25 |
|
26 |
+
private $supportsParseError = false;
|
27 |
/**
|
28 |
* Constructor.
|
29 |
*
|
37 |
if (!is_dir($directory)) {
|
38 |
$this->createDirectory($directory);
|
39 |
}
|
40 |
+
$this->supportsParseError = defined('PHP_MAJOR_VERSION') && PHP_MAJOR_VERSION >= 7 && class_exists('\ParseError');
|
41 |
|
42 |
parent::__construct($directory, $extension);
|
43 |
}
|
48 |
$this->invalidateCacheFile($id);
|
49 |
}
|
50 |
|
51 |
+
if ($this->supportsParseError) {
|
52 |
+
try {
|
53 |
+
return parent::doFetch($id);
|
54 |
+
} catch (\ParseError $e) {
|
55 |
+
return false;
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
return parent::doFetch($id);
|
60 |
}
|
61 |
|
app/vendor/matomo/cache/src/Backend/KeyPrefixDecorated.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/lgpl-3.0.html LGPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
namespace Matomo\Cache\Backend;
|
10 |
+
|
11 |
+
use Matomo\Cache\Backend;
|
12 |
+
|
13 |
+
class KeyPrefixDecorated extends BaseDecorator
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* @var string
|
17 |
+
*/
|
18 |
+
private $keyPrefix;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Constructor.
|
22 |
+
*
|
23 |
+
* @param Backend $decorated Wrapped backend to apply TTL to.
|
24 |
+
* @param array $options includes the string to prefix the key with
|
25 |
+
*
|
26 |
+
* @throws \InvalidArgumentException
|
27 |
+
*/
|
28 |
+
public function __construct($decorated, $options)
|
29 |
+
{
|
30 |
+
if (!isset($options['keyPrefix']) || !is_string($options['keyPrefix'])) {
|
31 |
+
throw new \InvalidArgumentException("The keyPrefix option is required and must be a string");
|
32 |
+
}
|
33 |
+
|
34 |
+
$this->keyPrefix = $options['keyPrefix'];
|
35 |
+
parent::__construct($decorated);
|
36 |
+
}
|
37 |
+
|
38 |
+
public function doFetch($id)
|
39 |
+
{
|
40 |
+
return $this->decorated->doFetch($this->keyPrefix . $id);
|
41 |
+
}
|
42 |
+
|
43 |
+
public function doContains($id)
|
44 |
+
{
|
45 |
+
return $this->decorated->doContains($this->keyPrefix . $id);
|
46 |
+
}
|
47 |
+
|
48 |
+
public function doSave($id, $data, $lifeTime = 0)
|
49 |
+
{
|
50 |
+
return $this->decorated->doSave($this->keyPrefix . $id, $data, $lifeTime);
|
51 |
+
}
|
52 |
+
|
53 |
+
public function doDelete($id)
|
54 |
+
{
|
55 |
+
return $this->decorated->doDelete($this->keyPrefix . $id);
|
56 |
+
}
|
57 |
+
|
58 |
+
}
|
app/vendor/matomo/device-detector/DeviceDetector.php
CHANGED
@@ -31,6 +31,7 @@ use DeviceDetector\Parser\Device\HbbTv;
|
|
31 |
use DeviceDetector\Parser\Device\Mobile;
|
32 |
use DeviceDetector\Parser\Device\Notebook;
|
33 |
use DeviceDetector\Parser\Device\PortableMediaPlayer;
|
|
|
34 |
use DeviceDetector\Parser\OperatingSystem;
|
35 |
use DeviceDetector\Parser\VendorFragment;
|
36 |
use DeviceDetector\Yaml\ParserInterface as YamlParser;
|
@@ -67,7 +68,7 @@ class DeviceDetector
|
|
67 |
/**
|
68 |
* Current version number of DeviceDetector
|
69 |
*/
|
70 |
-
public const VERSION = '4.
|
71 |
|
72 |
/**
|
73 |
* Constant used as value for unknown browser / os
|
@@ -91,7 +92,7 @@ class DeviceDetector
|
|
91 |
* Holds the useragent that should be parsed
|
92 |
* @var string
|
93 |
*/
|
94 |
-
protected $userAgent;
|
95 |
|
96 |
/**
|
97 |
* Holds the operating system data after parsing the UA
|
@@ -198,6 +199,7 @@ class DeviceDetector
|
|
198 |
$this->addClientParser(new Library());
|
199 |
|
200 |
$this->addDeviceParser(new HbbTv());
|
|
|
201 |
$this->addDeviceParser(new Notebook());
|
202 |
$this->addDeviceParser(new Console());
|
203 |
$this->addDeviceParser(new CarBrowser());
|
31 |
use DeviceDetector\Parser\Device\Mobile;
|
32 |
use DeviceDetector\Parser\Device\Notebook;
|
33 |
use DeviceDetector\Parser\Device\PortableMediaPlayer;
|
34 |
+
use DeviceDetector\Parser\Device\ShellTv;
|
35 |
use DeviceDetector\Parser\OperatingSystem;
|
36 |
use DeviceDetector\Parser\VendorFragment;
|
37 |
use DeviceDetector\Yaml\ParserInterface as YamlParser;
|
68 |
/**
|
69 |
* Current version number of DeviceDetector
|
70 |
*/
|
71 |
+
public const VERSION = '4.3.0';
|
72 |
|
73 |
/**
|
74 |
* Constant used as value for unknown browser / os
|
92 |
* Holds the useragent that should be parsed
|
93 |
* @var string
|
94 |
*/
|
95 |
+
protected $userAgent = '';
|
96 |
|
97 |
/**
|
98 |
* Holds the operating system data after parsing the UA
|
199 |
$this->addClientParser(new Library());
|
200 |
|
201 |
$this->addDeviceParser(new HbbTv());
|
202 |
+
$this->addDeviceParser(new ShellTv());
|
203 |
$this->addDeviceParser(new Notebook());
|
204 |
$this->addDeviceParser(new Console());
|
205 |
$this->addDeviceParser(new CarBrowser());
|
app/vendor/matomo/device-detector/Parser/Client/Browser.php
CHANGED
@@ -57,6 +57,7 @@ class Browser extends AbstractClientParser
|
|
57 |
'AX' => 'Arctic Fox',
|
58 |
'AV' => 'Amiga Voyager',
|
59 |
'AW' => 'Amiga Aweb',
|
|
|
60 |
'A0' => 'Atom',
|
61 |
'AT' => 'Atomic Web Browser',
|
62 |
'AS' => 'Avast Secure Browser',
|
@@ -126,6 +127,7 @@ class Browser extends AbstractClientParser
|
|
126 |
'DI' => 'Dillo',
|
127 |
'DD' => 'DuckDuckGo Privacy Browser',
|
128 |
'EC' => 'Ecosia',
|
|
|
129 |
'EI' => 'Epic',
|
130 |
'EL' => 'Elinks',
|
131 |
'EB' => 'Element Browser',
|
@@ -203,6 +205,7 @@ class Browser extends AbstractClientParser
|
|
203 |
'LS' => 'Lunascape',
|
204 |
'LN' => 'Lunascape Lite',
|
205 |
'LX' => 'Lynx',
|
|
|
206 |
'M1' => 'mCent',
|
207 |
'MB' => 'MicroB',
|
208 |
'MC' => 'NCSA Mosaic',
|
@@ -216,6 +219,7 @@ class Browser extends AbstractClientParser
|
|
216 |
'MN' => 'Minimo',
|
217 |
'MT' => 'Mint Browser',
|
218 |
'MX' => 'Maxthon',
|
|
|
219 |
'NM' => 'MxNitro',
|
220 |
'MY' => 'Mypal',
|
221 |
'MR' => 'Monument Browser',
|
@@ -255,6 +259,7 @@ class Browser extends AbstractClientParser
|
|
255 |
'O0' => 'Origin In-Game Overlay',
|
256 |
'OY' => 'Origyn Web Browser',
|
257 |
'OV' => 'Openwave Mobile Browser',
|
|
|
258 |
'OW' => 'OmniWeb',
|
259 |
'OT' => 'Otter Browser',
|
260 |
'PL' => 'Palm Blazer',
|
@@ -387,8 +392,8 @@ class Browser extends AbstractClientParser
|
|
387 |
'YJ', 'LL', 'TU', 'XV', 'C2', 'QU', 'YN', 'JB', 'MR',
|
388 |
'S6', '7S', 'NM', 'PB', 'UR', 'NR', 'SG', 'S8', 'C3',
|
389 |
'SS', 'O2', 'SV', 'TR', 'CW', 'GI', 'VE', 'AC', 'FS',
|
390 |
-
'CG', 'DR', 'C4', 'HS', 'DA', 'C5', 'C6', 'DG', '
|
391 |
-
'
|
392 |
],
|
393 |
'Firefox' => [
|
394 |
'FF', 'FE', 'FM', 'SX', 'FB', 'PX', 'MB', 'EI', 'WF',
|
@@ -418,7 +423,7 @@ class Browser extends AbstractClientParser
|
|
418 |
'WP', 'HA', 'NX', 'HU', 'VV', 'RE', 'CB', 'MZ', 'UM',
|
419 |
'FK', 'FX', 'WI', 'MN', 'M1', 'AH', 'SU', 'EU', 'EZ',
|
420 |
'UT', 'DT', 'S0', 'QU', 'YN', 'JB', 'GH', 'PI', 'SG',
|
421 |
-
'KD', 'PE', 'UH', 'S7', 'CW', 'OZ', 'GI', 'VE',
|
422 |
];
|
423 |
|
424 |
/**
|
57 |
'AX' => 'Arctic Fox',
|
58 |
'AV' => 'Amiga Voyager',
|
59 |
'AW' => 'Amiga Aweb',
|
60 |
+
'AI' => 'Arvin',
|
61 |
'A0' => 'Atom',
|
62 |
'AT' => 'Atomic Web Browser',
|
63 |
'AS' => 'Avast Secure Browser',
|
127 |
'DI' => 'Dillo',
|
128 |
'DD' => 'DuckDuckGo Privacy Browser',
|
129 |
'EC' => 'Ecosia',
|
130 |
+
'EW' => 'Edge WebView',
|
131 |
'EI' => 'Epic',
|
132 |
'EL' => 'Elinks',
|
133 |
'EB' => 'Element Browser',
|
205 |
'LS' => 'Lunascape',
|
206 |
'LN' => 'Lunascape Lite',
|
207 |
'LX' => 'Lynx',
|
208 |
+
'MD' => 'Mandarin',
|
209 |
'M1' => 'mCent',
|
210 |
'MB' => 'MicroB',
|
211 |
'MC' => 'NCSA Mosaic',
|
219 |
'MN' => 'Minimo',
|
220 |
'MT' => 'Mint Browser',
|
221 |
'MX' => 'Maxthon',
|
222 |
+
'MA' => 'Maelstrom',
|
223 |
'NM' => 'MxNitro',
|
224 |
'MY' => 'Mypal',
|
225 |
'MR' => 'Monument Browser',
|
259 |
'O0' => 'Origin In-Game Overlay',
|
260 |
'OY' => 'Origyn Web Browser',
|
261 |
'OV' => 'Openwave Mobile Browser',
|
262 |
+
'O3' => 'OpenFin',
|
263 |
'OW' => 'OmniWeb',
|
264 |
'OT' => 'Otter Browser',
|
265 |
'PL' => 'Palm Blazer',
|
392 |
'YJ', 'LL', 'TU', 'XV', 'C2', 'QU', 'YN', 'JB', 'MR',
|
393 |
'S6', '7S', 'NM', 'PB', 'UR', 'NR', 'SG', 'S8', 'C3',
|
394 |
'SS', 'O2', 'SV', 'TR', 'CW', 'GI', 'VE', 'AC', 'FS',
|
395 |
+
'CG', 'DR', 'C4', 'HS', 'DA', 'C5', 'C6', 'DG', 'HE',
|
396 |
+
'H2', 'MA', 'MD', 'O3', 'EW', 'AI',
|
397 |
],
|
398 |
'Firefox' => [
|
399 |
'FF', 'FE', 'FM', 'SX', 'FB', 'PX', 'MB', 'EI', 'WF',
|
423 |
'WP', 'HA', 'NX', 'HU', 'VV', 'RE', 'CB', 'MZ', 'UM',
|
424 |
'FK', 'FX', 'WI', 'MN', 'M1', 'AH', 'SU', 'EU', 'EZ',
|
425 |
'UT', 'DT', 'S0', 'QU', 'YN', 'JB', 'GH', 'PI', 'SG',
|
426 |
+
'KD', 'PE', 'UH', 'S7', 'CW', 'OZ', 'GI', 'VE', 'AI',
|
427 |
];
|
428 |
|
429 |
/**
|
app/vendor/matomo/device-detector/Parser/Device/AbstractDeviceParser.php
CHANGED
@@ -98,6 +98,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
98 |
'AD' => 'Advance',
|
99 |
'AF' => 'AfriOne',
|
100 |
'A3' => 'AGM',
|
|
|
101 |
'AZ' => 'Ainol',
|
102 |
'AI' => 'Airness',
|
103 |
'AT' => 'Airties',
|
@@ -105,6 +106,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
105 |
'AW' => 'Aiwa',
|
106 |
'85' => 'Aiuto',
|
107 |
'AK' => 'Akai',
|
|
|
108 |
'1A' => 'Alba',
|
109 |
'AL' => 'Alcatel',
|
110 |
'20' => 'Alcor',
|
@@ -123,11 +125,14 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
123 |
'AG' => 'AMGOO',
|
124 |
'9A' => 'Amigoo',
|
125 |
'AO' => 'Amoi',
|
|
|
126 |
'60' => 'Andowl',
|
127 |
'7A' => 'Anry',
|
128 |
'A0' => 'ANS',
|
129 |
'3N' => 'Aoson',
|
130 |
'O8' => 'AOC',
|
|
|
|
|
131 |
'AP' => 'Apple',
|
132 |
'AR' => 'Archos',
|
133 |
'AB' => 'Arian Space',
|
@@ -140,6 +145,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
140 |
'21' => 'Artizlee',
|
141 |
'8A' => 'Asano',
|
142 |
'90' => 'Asanzo',
|
|
|
143 |
'A4' => 'Ask',
|
144 |
'A8' => 'Assistant',
|
145 |
'AU' => 'Asus',
|
@@ -152,6 +158,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
152 |
'AH' => 'AVH',
|
153 |
'AV' => 'Avvio',
|
154 |
'AY' => 'Axxion',
|
|
|
155 |
'AM' => 'Azumi Mobile',
|
156 |
'BO' => 'BangOlufsen',
|
157 |
'BN' => 'Barnes & Noble',
|
@@ -164,6 +171,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
164 |
'BL' => 'Beetel',
|
165 |
'BQ' => 'BenQ',
|
166 |
'BS' => 'BenQ-Siemens',
|
|
|
167 |
'BZ' => 'Bezkam',
|
168 |
'9B' => 'Bellphone',
|
169 |
'63' => 'Beyond',
|
@@ -187,6 +195,8 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
187 |
'BD' => 'Bluegood',
|
188 |
'LB' => 'Bluewave',
|
189 |
'7B' => 'Blloc',
|
|
|
|
|
190 |
'BM' => 'Bmobile',
|
191 |
'B9' => 'Bobarry',
|
192 |
'B4' => 'bogo',
|
@@ -225,6 +235,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
225 |
'C0' => 'Clout',
|
226 |
'CN' => 'CnM',
|
227 |
'CY' => 'Coby Kyros',
|
|
|
228 |
'C6' => 'Comio',
|
229 |
'CL' => 'Compal',
|
230 |
'CQ' => 'Compaq',
|
@@ -275,6 +286,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
275 |
'D2' => 'Digma',
|
276 |
'1D' => 'Diva',
|
277 |
'D6' => 'Divisat',
|
|
|
278 |
'DM' => 'DMM',
|
279 |
'DN' => 'DNS',
|
280 |
'DC' => 'DoCoMo',
|
@@ -286,6 +298,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
286 |
'DP' => 'Dopod',
|
287 |
'DR' => 'Doro',
|
288 |
'D8' => 'Droxio',
|
|
|
289 |
'DU' => 'Dune HD',
|
290 |
'EB' => 'E-Boda',
|
291 |
'EJ' => 'Engel',
|
@@ -296,6 +309,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
296 |
'EA' => 'EBEST',
|
297 |
'E4' => 'Echo Mobiles',
|
298 |
'ES' => 'ECS',
|
|
|
299 |
'E6' => 'EE',
|
300 |
'EK' => 'EKO',
|
301 |
'EY' => 'Einstein',
|
@@ -307,6 +321,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
307 |
'L0' => 'Element',
|
308 |
'EG' => 'Elenberg',
|
309 |
'EL' => 'Elephone',
|
|
|
310 |
'4E' => 'Eltex',
|
311 |
'ED' => 'Energizer',
|
312 |
'E1' => 'Energy Sistem',
|
@@ -314,6 +329,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
314 |
'8E' => 'Epik One',
|
315 |
'E7' => 'Ergo',
|
316 |
'EC' => 'Ericsson',
|
|
|
317 |
'ER' => 'Ericy',
|
318 |
'EE' => 'Essential',
|
319 |
'E2' => 'Essentielb',
|
@@ -348,10 +364,12 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
348 |
'F1' => 'FinePower',
|
349 |
'FX' => 'Finlux',
|
350 |
'F3' => 'FireFly Mobile',
|
|
|
351 |
'FL' => 'Fly',
|
352 |
'FN' => 'FNB',
|
353 |
'FD' => 'Fondi',
|
354 |
'0F' => 'Fourel',
|
|
|
355 |
'F0' => 'Fonos',
|
356 |
'F2' => 'FORME',
|
357 |
'F5' => 'Formuler',
|
@@ -360,8 +378,10 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
360 |
'FO' => 'Foxconn',
|
361 |
'FT' => 'Freetel',
|
362 |
'F4' => 'F&U',
|
|
|
363 |
'FG' => 'Fuego',
|
364 |
'FU' => 'Fujitsu',
|
|
|
365 |
'GT' => 'G-TiDE',
|
366 |
'G9' => 'G-Touch',
|
367 |
'0G' => 'GFive',
|
@@ -389,6 +409,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
389 |
'G1' => 'GoMobile',
|
390 |
'GO' => 'Google',
|
391 |
'G0' => 'Goophone',
|
|
|
392 |
'GR' => 'Gradiente',
|
393 |
'GP' => 'Grape',
|
394 |
'G6' => 'Gree',
|
@@ -403,6 +424,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
403 |
'H6' => 'Helio',
|
404 |
'ZH' => 'Hezire',
|
405 |
'HL' => 'Hi-Level',
|
|
|
406 |
'H2' => 'Highscreen',
|
407 |
'Q1' => 'High Q',
|
408 |
'1H' => 'Hipstreet',
|
@@ -447,9 +469,11 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
447 |
'I7' => 'iLA',
|
448 |
'2I' => 'iLife',
|
449 |
'1I' => 'iMars',
|
|
|
450 |
'IL' => 'IMO Mobile',
|
451 |
'I3' => 'Impression',
|
452 |
'FC' => 'INCAR',
|
|
|
453 |
'6I' => 'Inco',
|
454 |
'IW' => 'iNew',
|
455 |
'IF' => 'Infinix',
|
@@ -482,9 +506,11 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
482 |
'I8' => 'iVA',
|
483 |
'IE' => 'iView',
|
484 |
'0J' => 'iVooMi',
|
|
|
485 |
'I9' => 'iZotron',
|
486 |
'JA' => 'JAY-Tech',
|
487 |
'KJ' => 'Jiake',
|
|
|
488 |
'JF' => 'JFone',
|
489 |
'JI' => 'Jiayu',
|
490 |
'JG' => 'Jinga',
|
@@ -511,6 +537,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
511 |
'KI' => 'Kingsun',
|
512 |
'KF' => 'KINGZONE',
|
513 |
'KV' => 'Kivi',
|
|
|
514 |
'0K' => 'Klipad',
|
515 |
'KC' => 'Kocaso',
|
516 |
'KK' => 'Kodak',
|
@@ -525,11 +552,13 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
525 |
'KR' => 'Koridy',
|
526 |
'K2' => 'KRONO',
|
527 |
'KE' => 'Krüger&Matz',
|
|
|
528 |
'KH' => 'KT-Tech',
|
529 |
'Z6' => 'KUBO',
|
530 |
'K8' => 'Kuliao',
|
531 |
'8K' => 'Kult',
|
532 |
'KU' => 'Kumai',
|
|
|
533 |
'KY' => 'Kyocera',
|
534 |
'KQ' => 'Kyowon',
|
535 |
'1K' => 'Kzen',
|
@@ -542,6 +571,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
542 |
'LV' => 'Lava',
|
543 |
'LC' => 'LCT',
|
544 |
'L5' => 'Leagoo',
|
|
|
545 |
'LD' => 'Ledstar',
|
546 |
'L1' => 'LeEco',
|
547 |
'4B' => 'Leff',
|
@@ -556,10 +586,12 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
556 |
'LX' => 'Lexibook',
|
557 |
'LG' => 'LG',
|
558 |
'LF' => 'Lifemaxx',
|
|
|
559 |
'LI' => 'Lingwin',
|
560 |
'5L' => 'Linsar',
|
561 |
'LW' => 'Linnex',
|
562 |
'LO' => 'Loewe',
|
|
|
563 |
'1L' => 'Logic',
|
564 |
'LM' => 'Logicom',
|
565 |
'0L' => 'Lumigon',
|
@@ -598,6 +630,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
598 |
'MD' => 'Medion',
|
599 |
'M2' => 'MEEG',
|
600 |
'MP' => 'MegaFon',
|
|
|
601 |
'3M' => 'Meitu',
|
602 |
'M1' => 'Meizu',
|
603 |
'0E' => 'Melrose',
|
@@ -659,6 +692,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
659 |
'0N' => 'Newman',
|
660 |
'NS' => 'NewsMy',
|
661 |
'ND' => 'Newsday',
|
|
|
662 |
'XB' => 'NEXBOX',
|
663 |
'NX' => 'Nexian',
|
664 |
'N8' => 'NEXON',
|
@@ -681,6 +715,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
681 |
'7N' => 'NorthTech',
|
682 |
'5N' => 'Nos',
|
683 |
'NO' => 'Nous',
|
|
|
684 |
'NJ' => 'NuAns',
|
685 |
'NL' => 'NUU Mobile',
|
686 |
'N0' => 'Nuvo',
|
@@ -738,6 +773,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
738 |
'8P' => 'Pixelphone',
|
739 |
'9O' => 'Pixela',
|
740 |
'PX' => 'Pixus',
|
|
|
741 |
'9P' => 'Planet Computers',
|
742 |
'PY' => 'Ployer',
|
743 |
'P4' => 'Plum',
|
@@ -773,6 +809,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
773 |
'QO' => 'Qumo',
|
774 |
'R2' => 'R-TV',
|
775 |
'RA' => 'Ramos',
|
|
|
776 |
'R9' => 'Ravoz',
|
777 |
'RZ' => 'Razer',
|
778 |
'RC' => 'RCA Tablets',
|
@@ -782,12 +819,14 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
782 |
'R8' => 'RED',
|
783 |
'RD' => 'Reeder',
|
784 |
'Z9' => 'REGAL',
|
|
|
785 |
'RI' => 'Rikomagic',
|
786 |
'RM' => 'RIM',
|
787 |
'RN' => 'Rinno',
|
788 |
'RX' => 'Ritmix',
|
789 |
'R7' => 'Ritzviva',
|
790 |
'RV' => 'Riviera',
|
|
|
791 |
'RR' => 'Roadrover',
|
792 |
'R1' => 'Rokit',
|
793 |
'RK' => 'Roku',
|
@@ -795,6 +834,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
795 |
'R5' => 'Ross&Moor',
|
796 |
'RO' => 'Rover',
|
797 |
'R6' => 'RoverPad',
|
|
|
798 |
'RT' => 'RT Project',
|
799 |
'RG' => 'RugGear',
|
800 |
'RU' => 'Runbo',
|
@@ -851,6 +891,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
851 |
'80' => 'SMARTEC',
|
852 |
'SC' => 'Smartfren',
|
853 |
'S7' => 'Smartisan',
|
|
|
854 |
'SF' => 'Softbank',
|
855 |
'9L' => 'SOLE',
|
856 |
'JL' => 'SOLO',
|
@@ -864,14 +905,17 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
864 |
'PK' => 'Spark',
|
865 |
'FS' => 'SPC',
|
866 |
'6S' => 'Spectrum',
|
|
|
867 |
'SP' => 'Spice',
|
868 |
'QS' => 'SQOOL',
|
869 |
'S4' => 'Star',
|
870 |
'OL' => 'Starlight',
|
871 |
'18' => 'Starmobile',
|
872 |
'2S' => 'Starway',
|
|
|
873 |
'SB' => 'STF Mobile',
|
874 |
'S8' => 'STK',
|
|
|
875 |
'S2' => 'Stonex',
|
876 |
'ST' => 'Storex',
|
877 |
'71' => 'StrawBerry',
|
@@ -894,6 +938,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
894 |
'4S' => 'Syrox',
|
895 |
'TM' => 'T-Mobile',
|
896 |
'TK' => 'Takara',
|
|
|
897 |
'9N' => 'Tanix',
|
898 |
'T5' => 'TB Touch',
|
899 |
'TC' => 'TCL',
|
@@ -948,6 +993,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
948 |
'TU' => 'Tunisie Telecom',
|
949 |
'1T' => 'Turbo',
|
950 |
'TR' => 'Turbo-X',
|
|
|
951 |
'5T' => 'TurboKids',
|
952 |
'TV' => 'TVC',
|
953 |
'TW' => 'TWM',
|
@@ -962,6 +1008,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
962 |
'UA' => 'Umax',
|
963 |
'UM' => 'UMIDIGI',
|
964 |
'UZ' => 'Unihertz',
|
|
|
965 |
'UX' => 'Unimax',
|
966 |
'US' => 'Uniscope',
|
967 |
'U2' => 'UNIWA',
|
@@ -971,10 +1018,14 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
971 |
'UK' => 'UTOK',
|
972 |
'3U' => 'IUNI',
|
973 |
'UT' => 'UTStarcom',
|
|
|
974 |
'5V' => 'VAIO',
|
|
|
975 |
'VA' => 'Vastking',
|
|
|
976 |
'VB' => 'VC',
|
977 |
'VN' => 'Venso',
|
|
|
978 |
'4V' => 'Verico',
|
979 |
'V4' => 'Verizon',
|
980 |
'VR' => 'Vernee',
|
@@ -1032,6 +1083,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
1032 |
'WU' => 'Wintouch',
|
1033 |
'W0' => 'Wiseasy',
|
1034 |
'2W' => 'Wizz',
|
|
|
1035 |
'WL' => 'Wolder',
|
1036 |
'WG' => 'Wolfgang',
|
1037 |
'WO' => 'Wonu',
|
@@ -1043,6 +1095,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
1043 |
'XV' => 'X-View',
|
1044 |
'X4' => 'X.Vision',
|
1045 |
'XG' => 'Xgody',
|
|
|
1046 |
'XL' => 'Xiaolajiao',
|
1047 |
'XI' => 'Xiaomi',
|
1048 |
'XN' => 'Xion',
|
@@ -1050,6 +1103,7 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
1050 |
'XR' => 'Xoro',
|
1051 |
'XS' => 'Xshitou',
|
1052 |
'4X' => 'Xtouch',
|
|
|
1053 |
'YD' => 'Yandex',
|
1054 |
'YA' => 'Yarvik',
|
1055 |
'Y2' => 'Yes',
|
@@ -1059,10 +1113,13 @@ abstract class AbstractDeviceParser extends AbstractParser
|
|
1059 |
'YT' => 'Ytone',
|
1060 |
'Y1' => 'Yu',
|
1061 |
'Y0' => 'YUHO',
|
|
|
1062 |
'YU' => 'Yuandao',
|
1063 |
'YS' => 'Yusun',
|
|
|
1064 |
'YX' => 'Yxtel',
|
1065 |
'0Z' => 'Zatec',
|
|
|
1066 |
'PZ' => 'Zebra',
|
1067 |
'ZE' => 'Zeemi',
|
1068 |
'ZN' => 'Zen',
|
98 |
'AD' => 'Advance',
|
99 |
'AF' => 'AfriOne',
|
100 |
'A3' => 'AGM',
|
101 |
+
'J0' => 'AG Mobile',
|
102 |
'AZ' => 'Ainol',
|
103 |
'AI' => 'Airness',
|
104 |
'AT' => 'Airties',
|
106 |
'AW' => 'Aiwa',
|
107 |
'85' => 'Aiuto',
|
108 |
'AK' => 'Akai',
|
109 |
+
'Q3' => 'AKIRA',
|
110 |
'1A' => 'Alba',
|
111 |
'AL' => 'Alcatel',
|
112 |
'20' => 'Alcor',
|
125 |
'AG' => 'AMGOO',
|
126 |
'9A' => 'Amigoo',
|
127 |
'AO' => 'Amoi',
|
128 |
+
'54' => 'AMCV',
|
129 |
'60' => 'Andowl',
|
130 |
'7A' => 'Anry',
|
131 |
'A0' => 'ANS',
|
132 |
'3N' => 'Aoson',
|
133 |
'O8' => 'AOC',
|
134 |
+
'J2' => 'AOYODKG',
|
135 |
+
'55' => 'AOpen',
|
136 |
'AP' => 'Apple',
|
137 |
'AR' => 'Archos',
|
138 |
'AB' => 'Arian Space',
|
145 |
'21' => 'Artizlee',
|
146 |
'8A' => 'Asano',
|
147 |
'90' => 'Asanzo',
|
148 |
+
'1U' => 'Astro',
|
149 |
'A4' => 'Ask',
|
150 |
'A8' => 'Assistant',
|
151 |
'AU' => 'Asus',
|
158 |
'AH' => 'AVH',
|
159 |
'AV' => 'Avvio',
|
160 |
'AY' => 'Axxion',
|
161 |
+
'XA' => 'Axioo',
|
162 |
'AM' => 'Azumi Mobile',
|
163 |
'BO' => 'BangOlufsen',
|
164 |
'BN' => 'Barnes & Noble',
|
171 |
'BL' => 'Beetel',
|
172 |
'BQ' => 'BenQ',
|
173 |
'BS' => 'BenQ-Siemens',
|
174 |
+
'BY' => 'BS Mobile',
|
175 |
'BZ' => 'Bezkam',
|
176 |
'9B' => 'Bellphone',
|
177 |
'63' => 'Beyond',
|
195 |
'BD' => 'Bluegood',
|
196 |
'LB' => 'Bluewave',
|
197 |
'7B' => 'Blloc',
|
198 |
+
'UB' => 'Bleck',
|
199 |
+
'Q2' => 'Blow',
|
200 |
'BM' => 'Bmobile',
|
201 |
'B9' => 'Bobarry',
|
202 |
'B4' => 'bogo',
|
235 |
'C0' => 'Clout',
|
236 |
'CN' => 'CnM',
|
237 |
'CY' => 'Coby Kyros',
|
238 |
+
'XC' => 'Cobalt',
|
239 |
'C6' => 'Comio',
|
240 |
'CL' => 'Compal',
|
241 |
'CQ' => 'Compaq',
|
286 |
'D2' => 'Digma',
|
287 |
'1D' => 'Diva',
|
288 |
'D6' => 'Divisat',
|
289 |
+
'X6' => 'DIXON',
|
290 |
'DM' => 'DMM',
|
291 |
'DN' => 'DNS',
|
292 |
'DC' => 'DoCoMo',
|
298 |
'DP' => 'Dopod',
|
299 |
'DR' => 'Doro',
|
300 |
'D8' => 'Droxio',
|
301 |
+
'DJ' => 'Dragon Touch',
|
302 |
'DU' => 'Dune HD',
|
303 |
'EB' => 'E-Boda',
|
304 |
'EJ' => 'Engel',
|
309 |
'EA' => 'EBEST',
|
310 |
'E4' => 'Echo Mobiles',
|
311 |
'ES' => 'ECS',
|
312 |
+
'35' => 'ECON',
|
313 |
'E6' => 'EE',
|
314 |
'EK' => 'EKO',
|
315 |
'EY' => 'Einstein',
|
321 |
'L0' => 'Element',
|
322 |
'EG' => 'Elenberg',
|
323 |
'EL' => 'Elephone',
|
324 |
+
'JE' => 'Elekta',
|
325 |
'4E' => 'Eltex',
|
326 |
'ED' => 'Energizer',
|
327 |
'E1' => 'Energy Sistem',
|
329 |
'8E' => 'Epik One',
|
330 |
'E7' => 'Ergo',
|
331 |
'EC' => 'Ericsson',
|
332 |
+
'05' => 'Erisson',
|
333 |
'ER' => 'Ericy',
|
334 |
'EE' => 'Essential',
|
335 |
'E2' => 'Essentielb',
|
364 |
'F1' => 'FinePower',
|
365 |
'FX' => 'Finlux',
|
366 |
'F3' => 'FireFly Mobile',
|
367 |
+
'F8' => 'FISE',
|
368 |
'FL' => 'Fly',
|
369 |
'FN' => 'FNB',
|
370 |
'FD' => 'Fondi',
|
371 |
'0F' => 'Fourel',
|
372 |
+
'44' => 'Four Mobile',
|
373 |
'F0' => 'Fonos',
|
374 |
'F2' => 'FORME',
|
375 |
'F5' => 'Formuler',
|
378 |
'FO' => 'Foxconn',
|
379 |
'FT' => 'Freetel',
|
380 |
'F4' => 'F&U',
|
381 |
+
'1F' => 'FMT',
|
382 |
'FG' => 'Fuego',
|
383 |
'FU' => 'Fujitsu',
|
384 |
+
'FW' => 'FNF',
|
385 |
'GT' => 'G-TiDE',
|
386 |
'G9' => 'G-Touch',
|
387 |
'0G' => 'GFive',
|
409 |
'G1' => 'GoMobile',
|
410 |
'GO' => 'Google',
|
411 |
'G0' => 'Goophone',
|
412 |
+
'6G' => 'Gooweel',
|
413 |
'GR' => 'Gradiente',
|
414 |
'GP' => 'Grape',
|
415 |
'G6' => 'Gree',
|
424 |
'H6' => 'Helio',
|
425 |
'ZH' => 'Hezire',
|
426 |
'HL' => 'Hi-Level',
|
427 |
+
'3H' => 'Hi',
|
428 |
'H2' => 'Highscreen',
|
429 |
'Q1' => 'High Q',
|
430 |
'1H' => 'Hipstreet',
|
469 |
'I7' => 'iLA',
|
470 |
'2I' => 'iLife',
|
471 |
'1I' => 'iMars',
|
472 |
+
'U4' => 'iMan',
|
473 |
'IL' => 'IMO Mobile',
|
474 |
'I3' => 'Impression',
|
475 |
'FC' => 'INCAR',
|
476 |
+
'2H' => 'Inch',
|
477 |
'6I' => 'Inco',
|
478 |
'IW' => 'iNew',
|
479 |
'IF' => 'Infinix',
|
506 |
'I8' => 'iVA',
|
507 |
'IE' => 'iView',
|
508 |
'0J' => 'iVooMi',
|
509 |
+
'UI' => 'ivvi',
|
510 |
'I9' => 'iZotron',
|
511 |
'JA' => 'JAY-Tech',
|
512 |
'KJ' => 'Jiake',
|
513 |
+
'J6' => 'Jeka',
|
514 |
'JF' => 'JFone',
|
515 |
'JI' => 'Jiayu',
|
516 |
'JG' => 'Jinga',
|
537 |
'KI' => 'Kingsun',
|
538 |
'KF' => 'KINGZONE',
|
539 |
'KV' => 'Kivi',
|
540 |
+
'64' => 'Kvant',
|
541 |
'0K' => 'Klipad',
|
542 |
'KC' => 'Kocaso',
|
543 |
'KK' => 'Kodak',
|
552 |
'KR' => 'Koridy',
|
553 |
'K2' => 'KRONO',
|
554 |
'KE' => 'Krüger&Matz',
|
555 |
+
'5K' => 'KREZ',
|
556 |
'KH' => 'KT-Tech',
|
557 |
'Z6' => 'KUBO',
|
558 |
'K8' => 'Kuliao',
|
559 |
'8K' => 'Kult',
|
560 |
'KU' => 'Kumai',
|
561 |
+
'6K' => 'Kurio',
|
562 |
'KY' => 'Kyocera',
|
563 |
'KQ' => 'Kyowon',
|
564 |
'1K' => 'Kzen',
|
571 |
'LV' => 'Lava',
|
572 |
'LC' => 'LCT',
|
573 |
'L5' => 'Leagoo',
|
574 |
+
'U3' => 'Leben',
|
575 |
'LD' => 'Ledstar',
|
576 |
'L1' => 'LeEco',
|
577 |
'4B' => 'Leff',
|
586 |
'LX' => 'Lexibook',
|
587 |
'LG' => 'LG',
|
588 |
'LF' => 'Lifemaxx',
|
589 |
+
'LJ' => 'L-Max',
|
590 |
'LI' => 'Lingwin',
|
591 |
'5L' => 'Linsar',
|
592 |
'LW' => 'Linnex',
|
593 |
'LO' => 'Loewe',
|
594 |
+
'YL' => 'Loview',
|
595 |
'1L' => 'Logic',
|
596 |
'LM' => 'Logicom',
|
597 |
'0L' => 'Lumigon',
|
630 |
'MD' => 'Medion',
|
631 |
'M2' => 'MEEG',
|
632 |
'MP' => 'MegaFon',
|
633 |
+
'X0' => 'mPhone',
|
634 |
'3M' => 'Meitu',
|
635 |
'M1' => 'Meizu',
|
636 |
'0E' => 'Melrose',
|
692 |
'0N' => 'Newman',
|
693 |
'NS' => 'NewsMy',
|
694 |
'ND' => 'Newsday',
|
695 |
+
'HB' => 'New Balance',
|
696 |
'XB' => 'NEXBOX',
|
697 |
'NX' => 'Nexian',
|
698 |
'N8' => 'NEXON',
|
715 |
'7N' => 'NorthTech',
|
716 |
'5N' => 'Nos',
|
717 |
'NO' => 'Nous',
|
718 |
+
'NQ' => 'Novex',
|
719 |
'NJ' => 'NuAns',
|
720 |
'NL' => 'NUU Mobile',
|
721 |
'N0' => 'Nuvo',
|
773 |
'8P' => 'Pixelphone',
|
774 |
'9O' => 'Pixela',
|
775 |
'PX' => 'Pixus',
|
776 |
+
'QP' => 'Pico',
|
777 |
'9P' => 'Planet Computers',
|
778 |
'PY' => 'Ployer',
|
779 |
'P4' => 'Plum',
|
809 |
'QO' => 'Qumo',
|
810 |
'R2' => 'R-TV',
|
811 |
'RA' => 'Ramos',
|
812 |
+
'0R' => 'Raspberry',
|
813 |
'R9' => 'Ravoz',
|
814 |
'RZ' => 'Razer',
|
815 |
'RC' => 'RCA Tablets',
|
819 |
'R8' => 'RED',
|
820 |
'RD' => 'Reeder',
|
821 |
'Z9' => 'REGAL',
|
822 |
+
'RP' => 'Revo',
|
823 |
'RI' => 'Rikomagic',
|
824 |
'RM' => 'RIM',
|
825 |
'RN' => 'Rinno',
|
826 |
'RX' => 'Ritmix',
|
827 |
'R7' => 'Ritzviva',
|
828 |
'RV' => 'Riviera',
|
829 |
+
'6R' => 'Rivo',
|
830 |
'RR' => 'Roadrover',
|
831 |
'R1' => 'Rokit',
|
832 |
'RK' => 'Roku',
|
834 |
'R5' => 'Ross&Moor',
|
835 |
'RO' => 'Rover',
|
836 |
'R6' => 'RoverPad',
|
837 |
+
'RQ' => 'RoyQueen',
|
838 |
'RT' => 'RT Project',
|
839 |
'RG' => 'RugGear',
|
840 |
'RU' => 'Runbo',
|
891 |
'80' => 'SMARTEC',
|
892 |
'SC' => 'Smartfren',
|
893 |
'S7' => 'Smartisan',
|
894 |
+
'1Q' => 'Smotreshka',
|
895 |
'SF' => 'Softbank',
|
896 |
'9L' => 'SOLE',
|
897 |
'JL' => 'SOLO',
|
905 |
'PK' => 'Spark',
|
906 |
'FS' => 'SPC',
|
907 |
'6S' => 'Spectrum',
|
908 |
+
'43' => 'Spectralink',
|
909 |
'SP' => 'Spice',
|
910 |
'QS' => 'SQOOL',
|
911 |
'S4' => 'Star',
|
912 |
'OL' => 'Starlight',
|
913 |
'18' => 'Starmobile',
|
914 |
'2S' => 'Starway',
|
915 |
+
'45' => 'Starwind',
|
916 |
'SB' => 'STF Mobile',
|
917 |
'S8' => 'STK',
|
918 |
+
'GQ' => 'STG Telecom',
|
919 |
'S2' => 'Stonex',
|
920 |
'ST' => 'Storex',
|
921 |
'71' => 'StrawBerry',
|
938 |
'4S' => 'Syrox',
|
939 |
'TM' => 'T-Mobile',
|
940 |
'TK' => 'Takara',
|
941 |
+
'73' => 'Tambo',
|
942 |
'9N' => 'Tanix',
|
943 |
'T5' => 'TB Touch',
|
944 |
'TC' => 'TCL',
|
993 |
'TU' => 'Tunisie Telecom',
|
994 |
'1T' => 'Turbo',
|
995 |
'TR' => 'Turbo-X',
|
996 |
+
'5X' => 'TurboPad',
|
997 |
'5T' => 'TurboKids',
|
998 |
'TV' => 'TVC',
|
999 |
'TW' => 'TWM',
|
1008 |
'UA' => 'Umax',
|
1009 |
'UM' => 'UMIDIGI',
|
1010 |
'UZ' => 'Unihertz',
|
1011 |
+
'3Z' => 'UZ Mobile',
|
1012 |
'UX' => 'Unimax',
|
1013 |
'US' => 'Uniscope',
|
1014 |
'U2' => 'UNIWA',
|
1018 |
'UK' => 'UTOK',
|
1019 |
'3U' => 'IUNI',
|
1020 |
'UT' => 'UTStarcom',
|
1021 |
+
'6U' => 'UTime',
|
1022 |
'5V' => 'VAIO',
|
1023 |
+
'WV' => 'VAVA',
|
1024 |
'VA' => 'Vastking',
|
1025 |
+
'VP' => 'Vargo',
|
1026 |
'VB' => 'VC',
|
1027 |
'VN' => 'Venso',
|
1028 |
+
'VQ' => 'Vega',
|
1029 |
'4V' => 'Verico',
|
1030 |
'V4' => 'Verizon',
|
1031 |
'VR' => 'Vernee',
|
1083 |
'WU' => 'Wintouch',
|
1084 |
'W0' => 'Wiseasy',
|
1085 |
'2W' => 'Wizz',
|
1086 |
+
'W4' => 'WIWA',
|
1087 |
'WL' => 'Wolder',
|
1088 |
'WG' => 'Wolfgang',
|
1089 |
'WO' => 'Wonu',
|
1095 |
'XV' => 'X-View',
|
1096 |
'X4' => 'X.Vision',
|
1097 |
'XG' => 'Xgody',
|
1098 |
+
'QX' => 'XGIMI',
|
1099 |
'XL' => 'Xiaolajiao',
|
1100 |
'XI' => 'Xiaomi',
|
1101 |
'XN' => 'Xion',
|
1103 |
'XR' => 'Xoro',
|
1104 |
'XS' => 'Xshitou',
|
1105 |
'4X' => 'Xtouch',
|
1106 |
+
'X8' => 'Xtratech',
|
1107 |
'YD' => 'Yandex',
|
1108 |
'YA' => 'Yarvik',
|
1109 |
'Y2' => 'Yes',
|
1113 |
'YT' => 'Ytone',
|
1114 |
'Y1' => 'Yu',
|
1115 |
'Y0' => 'YUHO',
|
1116 |
+
'YN' => 'Yuno',
|
1117 |
'YU' => 'Yuandao',
|
1118 |
'YS' => 'Yusun',
|
1119 |
+
'YJ' => 'YASIN',
|
1120 |
'YX' => 'Yxtel',
|
1121 |
'0Z' => 'Zatec',
|
1122 |
+
'2Z' => 'Zaith',
|
1123 |
'PZ' => 'Zebra',
|
1124 |
'ZE' => 'Zeemi',
|
1125 |
'ZN' => 'Zen',
|
app/vendor/matomo/device-detector/Parser/Device/HbbTv.php
CHANGED
@@ -38,7 +38,7 @@ class HbbTv extends AbstractDeviceParser
|
|
38 |
*/
|
39 |
public function parse(): ?array
|
40 |
{
|
41 |
-
// only parse user agents containing hbbtv
|
42 |
if (null === $this->isHbbTv()) {
|
43 |
return null;
|
44 |
}
|
38 |
*/
|
39 |
public function parse(): ?array
|
40 |
{
|
41 |
+
// only parse user agents containing fragments: hbbtv
|
42 |
if (null === $this->isHbbTv()) {
|
43 |
return null;
|
44 |
}
|
app/vendor/matomo/device-detector/Parser/Device/ShellTv.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
declare(strict_types=1);
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Device Detector - The Universal Device Detection library for parsing User Agents
|
7 |
+
*
|
8 |
+
* @link https://matomo.org
|
9 |
+
*
|
10 |
+
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
11 |
+
*/
|
12 |
+
|
13 |
+
namespace DeviceDetector\Parser\Device;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Class ShellTv
|
17 |
+
*/
|
18 |
+
class ShellTv extends AbstractDeviceParser
|
19 |
+
{
|
20 |
+
/**
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
protected $fixtureFile = 'regexes/device/shell_tv.yml';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @var string
|
27 |
+
*/
|
28 |
+
protected $parserName = 'shelltv';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Returns if the parsed UA was identified as ShellTv device
|
32 |
+
*
|
33 |
+
* @return bool
|
34 |
+
*
|
35 |
+
* @throws \Exception
|
36 |
+
*/
|
37 |
+
public function isShellTv(): bool
|
38 |
+
{
|
39 |
+
$regex = '[a-z]+[ _]Shell[ _]\w{6}';
|
40 |
+
$match = $this->matchUserAgent($regex);
|
41 |
+
|
42 |
+
return null !== $match;
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Parses the current UA and checks whether it contains ShellTv information
|
47 |
+
*
|
48 |
+
* @see shell_tv.yml for list of detected televisions
|
49 |
+
*
|
50 |
+
* @return array|null
|
51 |
+
*/
|
52 |
+
public function parse(): ?array
|
53 |
+
{
|
54 |
+
// only parse user agents containing fragments: {brand} shell
|
55 |
+
if (false === $this->isShellTv()) {
|
56 |
+
return null;
|
57 |
+
}
|
58 |
+
|
59 |
+
parent::parse();
|
60 |
+
|
61 |
+
// always set device type to tv, even if no model/brand could be found
|
62 |
+
$this->deviceType = self::DEVICE_TYPE_TV;
|
63 |
+
|
64 |
+
return $this->getResult();
|
65 |
+
}
|
66 |
+
}
|
app/vendor/matomo/device-detector/README.md
CHANGED
@@ -233,6 +233,7 @@ There are already a few ports of this tool to other languages:
|
|
233 |
- **.NET** https://github.com/totpero/DeviceDetector.NET
|
234 |
- **Ruby** https://github.com/podigee/device_detector
|
235 |
- **JavaScript/TypeScript/NodeJS** https://github.com/etienne-martin/device-detector-js
|
|
|
236 |
- **Python 3** https://github.com/thinkwelltwd/device_detector
|
237 |
- **Crystal** https://github.com/creadone/device_detector
|
238 |
- **Elixir** https://github.com/elixir-inspector/ua_inspector
|
@@ -243,7 +244,7 @@ There are already a few ports of this tool to other languages:
|
|
243 |
|
244 |
The lists below are auto generated and updated from time to time. Some of them might not be complete.
|
245 |
|
246 |
-
*Last update: 2021/
|
247 |
|
248 |
### List of detected operating systems:
|
249 |
|
@@ -251,7 +252,7 @@ AIX, Android, AmigaOS, Apple TV, Arch Linux, BackTrack, Bada, BeOS, BlackBerry O
|
|
251 |
|
252 |
### List of detected browsers:
|
253 |
|
254 |
-
115 Browser, 2345 Browser, 360 Phone Browser, 360 Browser, 7654 Browser, Avant Browser, ABrowse, ANT Fresco, ANTGalio, Aloha Browser, Aloha Browser Lite, Amaya, Amigo, Android Browser, AOL Desktop, AOL Shield, Arora, Arctic Fox, Amiga Voyager, Amiga Aweb, Atom, Atomic Web Browser, Avast Secure Browser, AVG Secure Browser, Avira Scout, AwoX, Beaker Browser, Beamrise, BlackBerry Browser, Baidu Browser, Baidu Spark, Basilisk, Beonex, BlackHawk, Bunjalloo, B-Line, Blue Browser, Borealis Navigator, Brave, BriskBard, BrowseX, Browzar, Biyubi, Byffox, Camino, CCleaner, Chedot, Centaury, Coc Coc, CoolBrowser, Colibri, Comodo Dragon, Coast, Charon, CM Browser, Chrome Frame, Headless Chrome, Chrome, Chrome Mobile iOS, Conkeror, Chrome Mobile, CoolNovo, CometBird, COS Browser, Cornowser, Chim Lac, ChromePlus, Chromium, Chromium GOST, Cyberfox, Cheshire, Crusta, Craving Explorer, Crazy Browser, Cunaguaro, Chrome Webview, dbrowser, Deepnet Explorer, deg-degan, Deledao, Delta Browser, DeskBrowse, Dolphin, Dorado, Dot Browser, Dooble, Dillo, DuckDuckGo Privacy Browser, Ecosia, Epic, Elinks, Element Browser, Elements Browser, eZ Browser, EUI Browser, GNOME Web, Espial TV Browser, Falkon, Faux Browser, Firefox Mobile iOS, Firebird, Fluid, Fennec, Firefox, Firefox Focus, Firefox Reality, Firefox Rocket, Flock, Flow, Firefox Mobile, Fireweb, Fireweb Navigator, Flast, FreeU, Galeon, Ghostery Privacy Browser, GinxDroid Browser, Glass Browser, Google Earth, GOG Galaxy, HasBrowser, Hawk Turbo Browser, Helio, hola! Browser, HotJava, Huawei Browser, IBrowse, iCab, iCab Mobile, Iridium, Iron Mobile, IceCat, IceDragon, Isivioo, Iceweasel, Internet Explorer, IE Mobile, Iron, Japan Browser, Jasmine, JavaFX, Jig Browser, Jig Browser Plus, Jio Browser, K.Browser, Kindle Browser, K-meleon, Konqueror, Kapiko, Kinza, Kiwi, Kode Browser, Kylo, Kazehakase, Cheetah Browser, LieBaoFast, LG Browser, Light, Links, Lolifox, Lovense Browser, LuaKit, Lulumi, Lunascape, Lunascape Lite, Lynx, mCent, MicroB, NCSA Mosaic, Meizu Browser, Mercury, Mobile Safari, Midori, Mobicip, MIUI Browser, Mobile Silk, Minimo, Mint Browser, Maxthon, MxNitro, Mypal, Monument Browser, MAUI WAP Browser, Navigateur Web, NFS Browser, Nokia Browser, Nokia OSS Browser, Nokia Ovi Browser, Nox Browser, NetSurf, NetFront, NetFront Life, NetPositive, Netscape, NTENT Browser, Oculus Browser, Opera Mini iOS, Obigo, Odin, OceanHero, Odyssey Web Browser, Off By One, OhHai Browser, ONE Browser, Opera GX, Opera Neon, Opera Devices, Opera Mini, Opera Mobile, Opera, Opera Next, Opera Touch, Orca, Ordissimo, Oregano, Origin In-Game Overlay, Origyn Web Browser, Openwave Mobile Browser, OmniWeb, Otter Browser, Palm Blazer, Pale Moon, Polypane, Oppo Browser, Palm Pre, Puffin, Palm WebPro, Palmscape, Perfect Browser, Phantom Browser, Phoenix, Phoenix Browser, PlayFree Browser, Polaris, Polarity, PolyBrowser, PrivacyWall, Microsoft Edge, Qazweb, QQ Browser Lite, QQ Browser Mini, QQ Browser, Qutebrowser, Quark, QupZilla, Qwant Mobile, QtWebEngine, Realme Browser, Rekonq, RockMelt, Samsung Browser, Sailfish Browser, Seewo Browser, SEMC-Browser, Sogou Explorer, Safari, Safe Exam Browser, SalamWeb, SFive, Shiira, SimpleBrowser, Sizzy, Skyfire, Seraphic Sraf, Sleipnir, Slimjet, SP Browser, 7Star, Smart Lenovo Browser, Smooz, Snowshoe, Sogou Mobile Browser, Splash, Sputnik Browser, Sunrise, SuperBird, Super Fast Browser, surf, Stargon, START Internet Browser, Steam In-Game Overlay, Streamy, Swiftfox, Seznam Browser, T-Browser, t-online.de Browser, Tao Browser, TenFourFox, Tenta Browser, Tizen Browser, Tungsten, ToGate, TweakStyle, TV Bro, UBrowser, UC Browser, UC Browser HD, UC Browser Mini, UC Browser Turbo, UR Browser, Uzbl, Venus Browser, Vivaldi, vivo Browser, Vision Mobile Browser, VMware AirWatch, Wear Internet Browser, Web Explorer, WebPositive, Waterfox, Whale Browser, wOSBrowser, WeTab Browser, Yahoo! Japan Browser, Yandex Browser, Yandex Browser Lite, Yaani Browser, Yolo Browser, xStand, Xiino, Xvast, Zetakey, Zvu
|
255 |
|
256 |
### List of detected browser engines:
|
257 |
|
@@ -267,7 +268,7 @@ Audacious, Banshee, Boxee, Clementine, Deezer, FlyCast, Foobar2000, Google Podca
|
|
267 |
|
268 |
### List of detected mobile apps:
|
269 |
|
270 |
-
1Password, 2tch, Alexa Media Player, AndroidDownloadManager, AntennaPod, Apple News, Baidu Box App, BB2C, BetBull, BeyondPod, BingWebApp, Bitsboard, bPod, CastBox, Castro, Castro 2, CGN, ChMate, Ciisaa, Clovia, Copied, Covenant Eyes, CrosswalkApp, DeviantArt, DingTalk, Discord, DoggCatcher, douban App, Evolve Podcast, Facebook, Facebook Messenger, Facebook Messenger Lite, FeedR, Flipboard App, Google Go, Google Play Newsstand, Google Plus, Google Search App, HeyTapBrowser, HP Smart, iCatcher, Instacast, Instagram App, Instapaper, JaneStyle, KakaoTalk, Keeper Password Manager, Kik, Line, LinkedIn, Microsoft Office $1, Microsoft Office Mobile, Microsoft OneDrive, Microsoft Outlook, Naver, NewsArticle App, NPR One, Opal Travel, Overcast, Pandora, Papers, Pic Collage, Pinterest, Player FM, Pocket Casts, Podbean, Podcast & Radio Addict, Podcaster, Podcast Republic, Podcasts, Podcat, Podcatcher Deluxe, Podimo, Podkicker, Procast, RadioPublic, Roblox, RoboForm, Rocket Chat, RSSRadio, Shopee, ShowMe, Sina Weibo, Siri, Skyeng Teachers, Skype for Business, Slack, Snapchat, SogouSearch App, SPORT1, Swoot, The Wall Street Journal, Thunder, tieba, TikTok, TopBuzz, TuneIn Radio, TuneIn Radio Pro, TVirl, twinkle, Twitter, U-Cursos, UnityPlayer, Viber, Wattpad, WeChat, WeChat Share Extension, WhatsApp, Whisper, WH Questions, Wirtschafts Woche, Yahoo! Japan, Yandex, Yelp Mobile, YouTube, Zalo, Zoho Chat and *mobile apps using [AFNetworking](https://github.com/AFNetworking/AFNetworking)*
|
271 |
|
272 |
### List of detected PIMs (personal information manager):
|
273 |
|
@@ -279,8 +280,8 @@ Akregator, Apple PubSub, BashPodder, Breaker, Downcast, FeedDemon, Feeddler RSS
|
|
279 |
|
280 |
### List of brands with detected devices:
|
281 |
|
282 |
-
2E, 2F Mobile, 3GNET, 3Q, 4Good, 4ife, 360, 8848, A1, Accent, Ace, Acer, Acteck, Advan, Advance, AfriOne, AGM, Ainol, Airness, Airties, AIS, Aiuto, Aiwa, Akai, Alba, Alcatel, Alcor, ALDI NORD, ALDI SÜD, Alfawise, Aligator, AllCall, AllDocube, Allview, Allwinner, Altech UEC, Altice, altron, Amazon, AMGOO, Amigoo, Amoi, Andowl, Anry, ANS, AOC, Aoson, Apple, Archos, Arian Space, Ark, ArmPhone, Arnova, ARRIS, Artel, Artizlee, Asano, Asanzo, Ask, Aspera, Assistant, Asus, AT&T, Atom, Atvio, Audiovox, AURIS, Avenzo, AVH, Avvio, Axxion, Azumi Mobile, BangOlufsen, Barnes & Noble, BBK, BB Mobile, BDF, Becker, Beeline, Beelink, Beetel, Bellphone, BenQ, BenQ-Siemens, Beyond, Bezkam, BGH, Bigben, BIHEE, BilimLand, Billion, BioRugged, Bird, Bitel, Bitmore, Bkav, Black Bear, Black Fox, Blackview, Blaupunkt, Blloc, Blu, Bluboo, Bluedot, Bluegood, Bluewave, Bmobile, Bobarry, bogo, Boway, bq, Brandt, Bravis, BrightSign, Brondi, Bush, CAGI, Camfone, Capitel, Captiva, Carrefour, Casio, Casper, Cat, Cavion, Celcus, Celkon, Cell-C, CellAllure, Centric, CG Mobile, Changhong, Cherry Mobile, CHIA, Chico Mobile, China Mobile, Chuwi, Claresta, Clarmin, Clementoni, Cloudfone, Cloudpad, Clout, CnM, Coby Kyros, Colors, Comio, Compal, Compaq, ComTrade Tesla, Concord, ConCorde, Condor, Connectce, Connex, Conquest, Contixo, Coolpad, CORN, Cosmote, Cowon, CreNova, Crescent, Cricket, Crius Mea, Crony, Crosscall, Cube, CUBOT, CVTE, Cyrus, Daewoo, Danew, Datalogic, Datamini, Datang, Datawind, Datsun, Dbtel, Dell, Denver, Desay, DeWalt, DEXP, Dialog, Dicam, Digi, Digicel, Digihome, Digiland, Digma, Ditecma, Diva, Divisat, DMM, DNS, DoCoMo, Doffler, Dolamee, Doogee, Doopro, Doov, Dopod, Doro, Droxio, Dune HD, E-Boda, E-Ceros, E-tel, Eagle, Easypix, EBEST, Echo Mobiles, ECS, EE, Einstein, EKO, Eks Mobility, EKT, ELARI, Electroneum, ELECTRONIA, Element, Elenberg, Elephone, Eltex, Energizer, Energy Sistem, Engel, Enot, Epik One, Ergo, Ericsson, Ericy, Essential, Essentielb, eSTAR, Eton, eTouch, Etuline, Eurostar, Evercoss, Evertek, Evolio, Evolveo, EvroMedia, EWIS, EXCEED, ExMobile, EXO, Explay, Extrem, Ezio, Ezze, F&U, F150, Facebook, Fairphone, Famoco, Fantec, FaRao Pro, FarEasTone, Fengxiang, Fero, FiGO, FinePower, Finlux, FireFly Mobile, Fly, FNB, Fondi, Fonos, FORME, Formuler, Forstar, Fortis, Fourel, Foxconn, Freetel, Fuego, Fujitsu, G-TiDE, G-Touch, Garmin-Asus, Gateway, Gemini, General Mobile, Genesis, GEOFOX, Geotel, GFive, Ghia, Ghong, Gigabyte, Gigaset, Gini, Ginzzu, Gionee, Globex, GLX, GOCLEVER, GoGEN, Gol Mobile, Goly, Gome, GoMobile, Google, Goophone, Gradiente, Grape, Gree, Greentel, Gresso, Grundig, Hafury, Haier, HannSpree, Hardkernel, Hasee, Helio, Hezire, Hi-Level, High Q, Highscreen, Hipstreet, Hisense, Hitachi, Hitech, Hoffmann, Hometech, Homtom, Honeywell, Hoozo, Horizon, Hosin, Hotel, Hotwav, How, HP, HTC, Huadoo, Huawei, Humax, Hurricane, Huskee, Hyrican, Hyundai, Hyve, i-Cherry, i-Joy, i-mate, i-mobile, iBall, iBerry, iBrit, IconBIT, iDroid, iGet, iHunt, Ikea, IKI Mobile, iKoMo, IKU Mobile, iLA, iLife, iMars, IMO Mobile, Impression, INCAR, Inco, iNew, Infinix, InFocus, InfoKit, Inkti, InnJoo, Innos, Innostream, Inoi, INQ, Insignia, Intek, Intex, Invens, Inverto, Invin, iOcean, iPro, iQ&T, IQM, Irbis, Iris, iRola, iRulu, iSWAG, IT, iTel, iTruck, IUNI, iVA, iView, iVooMi, iZotron, JAY-Tech, Jesy, JFone, Jiake, Jiayu, Jinga, Jivi, JKL, Jolla, Just5, JVC, K-Touch, Kaan, Kaiomy, Kalley, Kanji, Karbonn, Kata, KATV1, Kazam, KDDI, Kempler & Strauss, Keneksi, Kenxinda, Kiano, Kingsun, KINGZONE, Kivi, Klipad, Kocaso, Kodak, Kogan, Komu, Konka, Konrow, Koobee, Koolnee, Kooper, KOPO, Koridy, KRONO, Krüger&Matz, KT-Tech, KUBO, Kuliao, Kult, Kumai, Kyocera, Kyowon, Kzen, LAIQ, Land Rover, Landvo, Lanix, Lark, Laurus, Lava, LCT, Leader Phone, Leagoo, Ledstar, LeEco, Leff, Lemhoov, Lenco, Lenovo, Leotec, Le Pan, Lephone, Lesia, Lexand, Lexibook, LG, Lifemaxx, Lingwin, Linnex, Linsar, Loewe, Logic, Logicom, LT Mobile, Lumigon, Lumus, Luna, Luxor, LYF, M-Tech, M.T.T., M4tel, MAC AUDIO, Macoox, Magnus, Majestic, Malata, Manhattan, Mann, Manta Multimedia, Mantra, Masstel, Matrix, Maxcom, Maximus, Maxtron, MAXVI, Maxwest, Maze, Maze Speed, MDC Store, meanIT, Mecer, Mecool, Mediacom, MediaTek, Medion, MEEG, MegaFon, Meitu, Meizu, Melrose, Memup, Metz, MEU, MicroMax, Microsoft, Minix, Mintt, Mio, Miray, Mito, Mitsubishi, MIVO, MIXC, MiXzo, MLLED, MLS, Mobicel, Mobiistar, Mobiola, Mobistel, MobiWire, Mobo, Modecom, Mofut, Motorola, Movic, Mpman, MSI, MStar, MTC, MTN, Multilaser, MYFON, MyPhone, Myria, Myros, Mystery, MyTab, MyWigo, Nabi, Naomi Phone, National, Navcity, Navitech, Navitel, Navon, NEC, Necnot, Neffos, Neomi, Netgear, NeuImage, Newgen, Newland, Newman, Newsday, NewsMy, NEXBOX, Nexian, NEXON, Nextbit, NextBook, NextTab, NGM, NG Optics, Nikon, Nintendo, NOA, Noain, Nobby, Noblex, NOBUX, Nokia, Nomi, Nomu, Nordmende, NorthTech, Nos, Nous, NuAns, NUU Mobile, Nuvo, Nvidia, NYX Mobile, O+, O2, Oale, OASYS, Obi, Odys, OINOM, Ok, Okapia, OKWU, Onda, OnePlus, Onix, ONN, ONYX BOOX, OpelMobile, Openbox, OPPO, Opsson, Orange, Orbic, Ordissimo, Ouki, Oukitel, OUYA, Overmax, Ovvi, Owwo, Oysters, Oyyu, OzoneHD, P-UP, Palm, Panacom, Panasonic, Pantech, PCBOX, PCD, PCD Argentina, PEAQ, Pendoo, Pentagram, Phicomm, Philco, Philips, Phonemax, phoneOne, Pioneer, PiPO, Pixela, Pixelphone, Pixus, Planet Computers, Ployer, Plum, Pluzz, PocketBook, POCO, Point of View, Polaroid, PolyPad, Polytron, Pomp, Poppox, Positivo, Positivo BGH, PPTV, Premio, Prestigio, Primepad, Primux, Prixton, PROFiLO, Proline, ProScan, Protruly, PULID, Q-Touch, Q.Bell, Qilive, QMobile, Qtek, Quantum, Quechua, Qumo, R-TV, Ramos, Ravoz, Razer, RCA Tablets, Reach, Readboy, Realme, RED, Reeder, REGAL, Rikomagic, RIM, Rinno, Ritmix, Ritzviva, Riviera, Roadrover, Rokit, Roku, Rombica, Ross&Moor, Rover, RoverPad, RT Project, RugGear, Ruio, Runbo, Ryte, S-TELL, Saba, Safaricom, Sagem, Salora, Samsung, Sanei, Sansui, Santin, Sanyo, Savio, SCBC, Schneider, Seatel, Seeken, SEG, Sega, Selenga, Selevision, Selfix, SEMP TCL, Sencor, Sendo, Senkatel, Senseit, Senwa, Seuic, SFR, Sharp, Shift Phones, Shtrikh-M, Shuttle, Sico, Siemens, Sigma, Silelis, Silent Circle, Simbans, Simply, Singtech, Siragon, SKG, Sky, Skyworth, Smadl, Smailo, Smart, Smartab, SMARTEC, Smartfren, Smartisan, Softbank, SOLE, SOLO, Solone, Sonim, SONOS, Sony, Sony Ericsson, Soundmax, Soyes, Spark, SPC, Spectrum, Spice, SQOOL, Star, Starlight, Starmobile, Starway, STF Mobile, STK, Stonex, Storex, StrawBerry, Subor, Sugar, Sumvision, Sunny, Sunstech, SunVan, Sunvell, SuperSonic, SuperTab, Supra, Suzuki, Swipe, SWISSMOBILITY, Swisstone, SWTV, Symphony, Syrox, T-Mobile, Takara, Tanix, TB Touch, TCL, TD Systems, Technicolor, Technika, TechniSat, TechnoTrend, TechPad, Techwood, Teclast, Tecno Mobile, TEENO, Teknosa, Tele2, Telefunken, Telego, Telenor, Telit, Tesco, Tesla, Tetratab, teXet, ThL, Thomson, Thuraya, TIANYU, Time2, Timovi, Tinai, Tinmo, TiPhone, TOKYO, Tolino, Tone, Tooky, Top House, Toplux, Topway, Torex, Toshiba, Touchmate, Transpeed, TrekStor, Trevi, Trifone, Trio, Tronsmart, True, True Slim, TTEC, Tunisie Telecom, Turbo, Turbo-X, TurboKids, TVC, TWM, Twoe, TWZ, Tymes, U.S. Cellular, Ugoos, Uhans, Uhappy, Ulefone, Umax, UMIDIGI, Unihertz, Unimax, Uniscope, UNIWA, Unknown, Unnecto, Unonu, Unowhy, UTOK, UTStarcom, v-mobile, VAIO, Vastking, VC, Venso, Verico, Verizon, Vernee, Vertex, Vertu, Verykool, Vesta, Vestel, VGO TEL, Videocon, Videoweb, ViewSonic, Vinga, Vinsoc, Vipro, Vision Touch, Vitelcom, Viumee, Vivax, Vivo, Vizio, VK Mobile, VKworld, Vodacom, Vodafone, Vonino, Vontar, Vorago, Vorke, Voto, VOX, Voxtel, Voyo, Vsmart, Vsun, Vulcan, VVETIME, Walton, WE, Web TV, Weimei, WellcoM, WELLINGTON, Western Digital, Westpoint, Wexler, Wieppo, Wigor, Wiko, Wileyfox, Winds, Wink, Winmax, Winnovo, Wintouch, Wiseasy, Wizz, Wolder, Wolfgang, Wonu, Woo, Wortmann, Woxter, X-BO, X-TIGI, X-View, X.Vision, Xgody, Xiaolajiao, Xiaomi, Xion, Xolo, Xoro, Xshitou, Xtouch, Yandex, Yarvik, Yes, Yezz, Yoka TV, Yota, Ytone, Yu, Yuandao, YUHO, Yusun, Yxtel, Zatec, Zebra, Zeemi, Zen, Zenek, Zentality, Zfiner, ZH&K, Zidoo, Ziox, Zonda, Zopo, ZTE, Zuum, Zync, ZYQ, öwn
|
283 |
|
284 |
### List of detected bots:
|
285 |
|
286 |
-
360Spider, Aboundexbot, Acoon, Adbeat, AddThis.com, ADMantX, ADmantX Service Fetcher, aHrefs Bot, Alexa Crawler, Alexa Site Audit, Amazon Route53 Health Check, Amorank Spider, Analytics SEO Crawler, ApacheBench, Applebot, AppSignalBot, Arachni, archive.org bot, ArchiveBox, Ask Jeeves, AspiegelBot, Awario, Awario, Backlink-Check.de, BacklinkCrawler, Baidu Spider, Barkrowler, BazQux Reader, BDCbot, BingBot, BitlyBot, Blekkobot, BLEXBot Crawler, Bloglovin, Blogtrottr, BoardReader, BoardReader Blog Indexer, Bountii Bot, BrandVerity, Browsershots, BUbiNG, Buck, BuiltWith, Butterfly Robot, Bytespider, CareerBot, Castro 2, Catchpoint, CATExplorador, ccBot crawler, Charlotte, Choosito, Cliqzbot, CloudFlare Always Online, CloudFlare AMP Fetcher, Cloudflare Diagnostics, Cocolyzebot, Collectd, CommaFeed, Comscore, ContentKing, CSS Certificate Spider, Cốc Cốc Bot, Datadog Agent, datagnionbot, Datanyze, Dataprovider, DataXu, Daum, Dazoobot, Discobot, Domain Re-Animator Bot, Domains Project, DotBot, DuckDuckGo Bot, Easou Spider, eCairn-Grabber, EMail Exractor, EmailWolf, Embedly, evc-batch, ExaBot, ExactSeek Crawler, Expanse, Ezooms, eZ Publish Link Validator, Facebook External Hit, Feedbin, FeedBurner, Feedly, Feedspot, Feed Wrangler, Fever, Findxbot, Flipboard, FreshRSS, Generic Bot, Generic Bot, Genieo Web filter, Gigablast, Gigabot, Gluten Free Crawler, Gmail Image Proxy, Goo, Googlebot, Google Cloud Scheduler, Google Favicon, Google PageSpeed Insights, Google Partner Monitoring, Google Search Console, Google Stackdriver Monitoring, Google Structured Data Testing Tool, Gowikibot, Grammarly, Grapeshot, GTmetrix, Hatena Favicon, Heart Rails Capture, Heritrix, Heureka Feed, HTTPMon, httpx, HuaweiWebCatBot, HubPages, HubSpot, ICC-Crawler, ichiro, IDG/IT, IIS Site Analysis, Inktomi Slurp, inoreader, IP-Guide Crawler, IPS Agent, Kaspersky, Kouio, Larbin web crawler, LCC, Let's Encrypt Validation, Lighthouse, Linkdex Bot, LinkedIn Bot, LinkpadBot, LTX71, LumtelBot, Lycos, Magpie-Crawler, MagpieRSS, Mail.Ru Bot, masscan, Mastodon Bot, Meanpath Bot, Mediatoolkit Bot, MetaInspector, MetaJobBot, MicroAdBot, Mixrank Bot, MJ12 Bot, Mnogosearch, MojeekBot, Monitor.Us, Munin, MuscatFerret, Nagios check_http, NalezenCzBot, nbertaupete95, Netcraft Survey Bot, netEstate, NetLyzer FastProbe, NetResearchServer, Netvibes, NewsBlur, NewsGator, Nimbostratus Bot, NLCrawler, Nmap, Notify Ninja, Nutch-based Bot, Nuzzel, oBot, Octopus, Odnoklassniki Bot, Omgili bot, Openindex Spider, OpenLinkProfiler, OpenWebSpider, Orange Bot, Outbrain, PagePeeker, PageThing, PaperLiBot, parse.ly, Petal Bot, Phantomas, PHP Server Monitor, Picsearch bot, PingAdmin.Ru, Pingdom Bot, Pinterest, PiplBot, Plukkie, PocketParser, Pompos, PritTorrent, Project Resonance, PRTG Network Monitor, QuerySeekerSpider, Quora Bot, Quora Link Preview, Qwantify, Rainmeter, RamblerMail Image Proxy, Reddit Bot, Riddler, Robozilla, Rogerbot, ROI Hunter, RSSRadio Bot, Ryowl, SabsimBot, SafeDNSBot, Scooter, ScoutJet, Scrapy, Screaming Frog SEO Spider, ScreenerBot, Semantic Scholar Bot, Semrush Bot, Sensika Bot, Sentry Bot, Seobility, SEOENGBot, SEOkicks, SEOkicks-Robot, Seoscanners.net, Serendeputy Bot, Server Density, Seznam Bot, Seznam Email Proxy, Seznam Zbozi.cz, ShopAlike, Shopify Partner, ShopWiki, SilverReader, SimplePie, SISTRIX Crawler, SISTRIX Optimizer, Site24x7 Website Monitoring, Siteimprove, SiteSucker, Sixy.ch, Skype URI Preview, Slackbot, SMTBot, Snapchat Proxy, Sogou Spider, Soso Spider, Sparkler, Speedy, Spinn3r, Spotify, Sprinklr, Sputnik Bot, Sputnik Favicon Bot, Sputnik Image Bot, sqlmap, SSL Labs, Startpagina Linkchecker, StatusCake, Superfeedr Bot, SurdotlyBot, Survey Bot, Tarmot Gezgin, TelegramBot, The Knowledge AI, theoldreader, TinEye Crawler, Tiny Tiny RSS, TLSProbe, TraceMyFile, Trendiction Bot, TurnitinBot, TweetedTimes Bot, Tweetmeme Bot, Twingly Recon, Twitterbot, UkrNet Mail Proxy, UniversalFeedParser, Uptimebot, Uptime Robot, URLAppendBot, Vagabondo, Velen Public Web Crawler, Vercel Bot, VeryHip, Visual Site Mapper Crawler, VK Share Button, W3C CSS Validator, W3C I18N Checker, W3C Link Checker, W3C Markup Validation Service, W3C MobileOK Checker, W3C Unified Validator, Wappalyzer, WebbCrawler, WebDataStats, Weborama, WebPageTest, WebSitePulse, WebThumbnail, WeSEE:Search, WeViKaBot, WhatCMS, WikiDo, Willow Internet Crawler, WooRank, WooRank, WordPress, Wotbox, XenForo, YaCy, Yahoo! Cache System, Yahoo! Japan BRW, Yahoo! Link Preview, Yahoo! Mail Proxy, Yahoo! Slurp, Yahoo Gemini, Yandex Bot, Yeti/Naverbot, Yottaa Site Monitor, Youdao Bot, Yourls, Yunyun Bot, Zao, Ze List, zgrab, Zookabot, ZoominfoBot, ZumBot
|
233 |
- **.NET** https://github.com/totpero/DeviceDetector.NET
|
234 |
- **Ruby** https://github.com/podigee/device_detector
|
235 |
- **JavaScript/TypeScript/NodeJS** https://github.com/etienne-martin/device-detector-js
|
236 |
+
- **NodeJS** https://github.com/sanchezzzhak/node-device-detector
|
237 |
- **Python 3** https://github.com/thinkwelltwd/device_detector
|
238 |
- **Crystal** https://github.com/creadone/device_detector
|
239 |
- **Elixir** https://github.com/elixir-inspector/ua_inspector
|
244 |
|
245 |
The lists below are auto generated and updated from time to time. Some of them might not be complete.
|
246 |
|
247 |
+
*Last update: 2021/07/11*
|
248 |
|
249 |
### List of detected operating systems:
|
250 |
|
252 |
|
253 |
### List of detected browsers:
|
254 |
|
255 |
+
115 Browser, 2345 Browser, 360 Phone Browser, 360 Browser, 7654 Browser, Avant Browser, ABrowse, ANT Fresco, ANTGalio, Aloha Browser, Aloha Browser Lite, Amaya, Amigo, Android Browser, AOL Desktop, AOL Shield, Arora, Arctic Fox, Amiga Voyager, Amiga Aweb, Atom, Atomic Web Browser, Avast Secure Browser, AVG Secure Browser, Avira Scout, AwoX, Beaker Browser, Beamrise, BlackBerry Browser, Baidu Browser, Baidu Spark, Basilisk, Beonex, BlackHawk, Bunjalloo, B-Line, Blue Browser, Borealis Navigator, Brave, BriskBard, BrowseX, Browzar, Biyubi, Byffox, Camino, CCleaner, Chedot, Centaury, Coc Coc, CoolBrowser, Colibri, Comodo Dragon, Coast, Charon, CM Browser, Chrome Frame, Headless Chrome, Chrome, Chrome Mobile iOS, Conkeror, Chrome Mobile, CoolNovo, CometBird, COS Browser, Cornowser, Chim Lac, ChromePlus, Chromium, Chromium GOST, Cyberfox, Cheshire, Crusta, Craving Explorer, Crazy Browser, Cunaguaro, Chrome Webview, dbrowser, Deepnet Explorer, deg-degan, Deledao, Delta Browser, DeskBrowse, Dolphin, Dorado, Dot Browser, Dooble, Dillo, DuckDuckGo Privacy Browser, Ecosia, Epic, Elinks, Element Browser, Elements Browser, eZ Browser, EUI Browser, GNOME Web, Espial TV Browser, Falkon, Faux Browser, Firefox Mobile iOS, Firebird, Fluid, Fennec, Firefox, Firefox Focus, Firefox Reality, Firefox Rocket, Flock, Flow, Firefox Mobile, Fireweb, Fireweb Navigator, Flast, FreeU, Galeon, Ghostery Privacy Browser, GinxDroid Browser, Glass Browser, Google Earth, GOG Galaxy, HasBrowser, Hawk Turbo Browser, Helio, hola! Browser, HotJava, Huawei Browser, IBrowse, iCab, iCab Mobile, Iridium, Iron Mobile, IceCat, IceDragon, Isivioo, Iceweasel, Internet Explorer, IE Mobile, Iron, Japan Browser, Jasmine, JavaFX, Jig Browser, Jig Browser Plus, Jio Browser, K.Browser, Kindle Browser, K-meleon, Konqueror, Kapiko, Kinza, Kiwi, Kode Browser, Kylo, Kazehakase, Cheetah Browser, LieBaoFast, LG Browser, Light, Links, Lolifox, Lovense Browser, LuaKit, Lulumi, Lunascape, Lunascape Lite, Lynx, Mandarin, mCent, MicroB, NCSA Mosaic, Meizu Browser, Mercury, Mobile Safari, Midori, Mobicip, MIUI Browser, Mobile Silk, Minimo, Mint Browser, Maxthon, Maelstrom, MxNitro, Mypal, Monument Browser, MAUI WAP Browser, Navigateur Web, NFS Browser, Nokia Browser, Nokia OSS Browser, Nokia Ovi Browser, Nox Browser, NetSurf, NetFront, NetFront Life, NetPositive, Netscape, NTENT Browser, Oculus Browser, Opera Mini iOS, Obigo, Odin, OceanHero, Odyssey Web Browser, Off By One, OhHai Browser, ONE Browser, Opera GX, Opera Neon, Opera Devices, Opera Mini, Opera Mobile, Opera, Opera Next, Opera Touch, Orca, Ordissimo, Oregano, Origin In-Game Overlay, Origyn Web Browser, Openwave Mobile Browser, OmniWeb, Otter Browser, Palm Blazer, Pale Moon, Polypane, Oppo Browser, Palm Pre, Puffin, Palm WebPro, Palmscape, Perfect Browser, Phantom Browser, Phoenix, Phoenix Browser, PlayFree Browser, Polaris, Polarity, PolyBrowser, PrivacyWall, Microsoft Edge, Qazweb, QQ Browser Lite, QQ Browser Mini, QQ Browser, Qutebrowser, Quark, QupZilla, Qwant Mobile, QtWebEngine, Realme Browser, Rekonq, RockMelt, Samsung Browser, Sailfish Browser, Seewo Browser, SEMC-Browser, Sogou Explorer, Safari, Safe Exam Browser, SalamWeb, SFive, Shiira, SimpleBrowser, Sizzy, Skyfire, Seraphic Sraf, Sleipnir, Slimjet, SP Browser, 7Star, Smart Lenovo Browser, Smooz, Snowshoe, Sogou Mobile Browser, Splash, Sputnik Browser, Sunrise, SuperBird, Super Fast Browser, surf, Stargon, START Internet Browser, Steam In-Game Overlay, Streamy, Swiftfox, Seznam Browser, T-Browser, t-online.de Browser, Tao Browser, TenFourFox, Tenta Browser, Tizen Browser, Tungsten, ToGate, TweakStyle, TV Bro, UBrowser, UC Browser, UC Browser HD, UC Browser Mini, UC Browser Turbo, UR Browser, Uzbl, Venus Browser, Vivaldi, vivo Browser, Vision Mobile Browser, VMware AirWatch, Wear Internet Browser, Web Explorer, WebPositive, Waterfox, Whale Browser, wOSBrowser, WeTab Browser, Yahoo! Japan Browser, Yandex Browser, Yandex Browser Lite, Yaani Browser, Yolo Browser, xStand, Xiino, Xvast, Zetakey, Zvu
|
256 |
|
257 |
### List of detected browser engines:
|
258 |
|
268 |
|
269 |
### List of detected mobile apps:
|
270 |
|
271 |
+
1Password, 2tch, Alexa Media Player, AndroidDownloadManager, AntennaPod, Apple News, Baidu Box App, BB2C, BetBull, BeyondPod, Binance, BingWebApp, Bitsboard, bPod, CastBox, Castro, Castro 2, CGN, ChMate, Ciisaa, Clovia, Copied, Covenant Eyes, CrosswalkApp, DeviantArt, DingTalk, Discord, DoggCatcher, douban App, Evolve Podcast, Facebook, Facebook Messenger, Facebook Messenger Lite, FeedR, Flipboard App, Google Go, Google Play Newsstand, Google Plus, Google Search App, HeyTapBrowser, HP Smart, iCatcher, Instacast, Instagram App, Instapaper, JaneStyle, KakaoTalk, Keeper Password Manager, Kik, Line, LinkedIn, Microsoft Office $1, Microsoft Office Mobile, Microsoft OneDrive, Microsoft Outlook, My World, Naver, Netflix, NewsArticle App, NPR One, Odnoklassniki, Opal Travel, Overcast, Pandora, Papers, Pic Collage, Pinterest, Player FM, Pocket Casts, Podbean, Podcast & Radio Addict, Podcaster, Podcast Republic, Podcasts, Podcat, Podcatcher Deluxe, Podimo, Podkicker, Procast, RadioPublic, Roblox, RoboForm, Rocket Chat, RSSRadio, Shopee, ShowMe, Sina Weibo, Siri, Skyeng Teachers, Skype for Business, Slack, Snapchat, SogouSearch App, SPORT1, Swoot, The Wall Street Journal, Thunder, tieba, TikTok, TopBuzz, TuneIn Radio, TuneIn Radio Pro, TVirl, twinkle, Twitter, U-Cursos, UnityPlayer, Viber, Wattpad, WeChat, WeChat Share Extension, WhatsApp, Whisper, WH Questions, Wirtschafts Woche, Yahoo! Japan, Yandex, Yelp Mobile, YouTube, Zalo, Zoho Chat and *mobile apps using [AFNetworking](https://github.com/AFNetworking/AFNetworking)*
|
272 |
|
273 |
### List of detected PIMs (personal information manager):
|
274 |
|
280 |
|
281 |
### List of brands with detected devices:
|
282 |
|
283 |
+
2E, 2F Mobile, 3GNET, 3Q, 4Good, 4ife, 360, 8848, A1, Accent, Ace, Acer, Acteck, Advan, Advance, AfriOne, AGM, Ainol, Airness, Airties, AIS, Aiuto, Aiwa, Akai, AKIRA, Alba, Alcatel, Alcor, ALDI NORD, ALDI SÜD, Alfawise, Aligator, AllCall, AllDocube, Allview, Allwinner, Altech UEC, Altice, altron, Amazon, AMCV, AMGOO, Amigoo, Amoi, Andowl, Anry, ANS, AOC, Aoson, AOYODKG, Apple, Archos, Arian Space, Ark, ArmPhone, Arnova, ARRIS, Artel, Artizlee, Asano, Asanzo, Ask, Aspera, Assistant, Astro, Asus, AT&T, Atom, Atvio, Audiovox, AURIS, Avenzo, AVH, Avvio, Axioo, Axxion, Azumi Mobile, BangOlufsen, Barnes & Noble, BBK, BB Mobile, BDF, Becker, Beeline, Beelink, Beetel, Bellphone, BenQ, BenQ-Siemens, Beyond, Bezkam, BGH, Bigben, BIHEE, BilimLand, Billion, BioRugged, Bird, Bitel, Bitmore, Bkav, Black Bear, Black Fox, Blackview, Blaupunkt, Bleck, Blloc, Blu, Bluboo, Bluedot, Bluegood, Bluewave, Bmobile, Bobarry, bogo, Boway, bq, Brandt, Bravis, BrightSign, Brondi, BS Mobile, Bush, CAGI, Camfone, Capitel, Captiva, Carrefour, Casio, Casper, Cat, Cavion, Celcus, Celkon, Cell-C, CellAllure, Centric, CG Mobile, Changhong, Cherry Mobile, CHIA, Chico Mobile, China Mobile, Chuwi, Claresta, Clarmin, Clementoni, Cloudfone, Cloudpad, Clout, CnM, Cobalt, Coby Kyros, Colors, Comio, Compal, Compaq, ComTrade Tesla, Concord, ConCorde, Condor, Connectce, Connex, Conquest, Contixo, Coolpad, CORN, Cosmote, Cowon, CreNova, Crescent, Cricket, Crius Mea, Crony, Crosscall, Cube, CUBOT, CVTE, Cyrus, Daewoo, Danew, Datalogic, Datamini, Datang, Datawind, Datsun, Dbtel, Dell, Denver, Desay, DeWalt, DEXP, Dialog, Dicam, Digi, Digicel, Digihome, Digiland, Digma, Ditecma, Diva, Divisat, DIXON, DMM, DNS, DoCoMo, Doffler, Dolamee, Doogee, Doopro, Doov, Dopod, Doro, Droxio, Dune HD, E-Boda, E-Ceros, E-tel, Eagle, Easypix, EBEST, Echo Mobiles, ECON, ECS, EE, Einstein, EKO, Eks Mobility, EKT, ELARI, Electroneum, ELECTRONIA, Elekta, Element, Elenberg, Elephone, Eltex, Energizer, Energy Sistem, Engel, Enot, Epik One, Ergo, Ericsson, Ericy, Erisson, Essential, Essentielb, eSTAR, Eton, eTouch, Etuline, Eurostar, Evercoss, Evertek, Evolio, Evolveo, EvroMedia, EWIS, EXCEED, ExMobile, EXO, Explay, Extrem, Ezio, Ezze, F&U, F150, Facebook, Fairphone, Famoco, Fantec, FaRao Pro, FarEasTone, Fengxiang, Fero, FiGO, FinePower, Finlux, FireFly Mobile, FISE, Fly, FMT, FNB, Fondi, Fonos, FORME, Formuler, Forstar, Fortis, Fourel, Four Mobile, Foxconn, Freetel, Fuego, Fujitsu, G-TiDE, G-Touch, Garmin-Asus, Gateway, Gemini, General Mobile, Genesis, GEOFOX, Geotel, GFive, Ghia, Ghong, Gigabyte, Gigaset, Gini, Ginzzu, Gionee, Globex, GLX, GOCLEVER, GoGEN, Gol Mobile, Goly, Gome, GoMobile, Google, Goophone, Gooweel, Gradiente, Grape, Gree, Greentel, Gresso, Grundig, Hafury, Haier, HannSpree, Hardkernel, Hasee, Helio, Hezire, Hi, Hi-Level, High Q, Highscreen, Hipstreet, Hisense, Hitachi, Hitech, Hoffmann, Hometech, Homtom, Honeywell, Hoozo, Horizon, Hosin, Hotel, Hotwav, How, HP, HTC, Huadoo, Huawei, Humax, Hurricane, Huskee, Hyrican, Hyundai, Hyve, i-Cherry, i-Joy, i-mate, i-mobile, iBall, iBerry, iBrit, IconBIT, iDroid, iGet, iHunt, Ikea, IKI Mobile, iKoMo, IKU Mobile, iLA, iLife, iMars, IMO Mobile, Impression, INCAR, Inch, Inco, iNew, Infinix, InFocus, InfoKit, Inkti, InnJoo, Innos, Innostream, Inoi, INQ, Insignia, Intek, Intex, Invens, Inverto, Invin, iOcean, iPro, iQ&T, IQM, Irbis, Iris, iRola, iRulu, iSWAG, IT, iTel, iTruck, IUNI, iVA, iView, iVooMi, iZotron, JAY-Tech, Jeka, Jesy, JFone, Jiake, Jiayu, Jinga, Jivi, JKL, Jolla, Just5, JVC, K-Touch, Kaan, Kaiomy, Kalley, Kanji, Karbonn, Kata, KATV1, Kazam, KDDI, Kempler & Strauss, Keneksi, Kenxinda, Kiano, Kingsun, KINGZONE, Kivi, Klipad, Kocaso, Kodak, Kogan, Komu, Konka, Konrow, Koobee, Koolnee, Kooper, KOPO, Koridy, KREZ, KRONO, Krüger&Matz, KT-Tech, KUBO, Kuliao, Kult, Kumai, Kurio, Kvant, Kyocera, Kyowon, Kzen, L-Max, LAIQ, Land Rover, Landvo, Lanix, Lark, Laurus, Lava, LCT, Leader Phone, Leagoo, Leben, Ledstar, LeEco, Leff, Lemhoov, Lenco, Lenovo, Leotec, Le Pan, Lephone, Lesia, Lexand, Lexibook, LG, Lifemaxx, Lingwin, Linnex, Linsar, Loewe, Logic, Logicom, Loview, LT Mobile, Lumigon, Lumus, Luna, Luxor, LYF, M-Tech, M.T.T., M4tel, MAC AUDIO, Macoox, Magnus, Majestic, Malata, Manhattan, Mann, Manta Multimedia, Mantra, Masstel, Matrix, Maxcom, Maximus, Maxtron, MAXVI, Maxwest, Maze, Maze Speed, MDC Store, meanIT, Mecer, Mecool, Mediacom, MediaTek, Medion, MEEG, MegaFon, Meitu, Meizu, Melrose, Memup, Metz, MEU, MicroMax, Microsoft, Minix, Mintt, Mio, Miray, Mito, Mitsubishi, MIVO, MIXC, MiXzo, MLLED, MLS, Mobicel, Mobiistar, Mobiola, Mobistel, MobiWire, Mobo, Modecom, Mofut, Motorola, Movic, mPhone, Mpman, MSI, MStar, MTC, MTN, Multilaser, MYFON, MyPhone, Myria, Myros, Mystery, MyTab, MyWigo, Nabi, Naomi Phone, National, Navcity, Navitech, Navitel, Navon, NEC, Necnot, Neffos, Neomi, Netgear, NeuImage, New Balance, Newgen, Newland, Newman, Newsday, NewsMy, NEXBOX, Nexian, NEXON, Nextbit, NextBook, NextTab, NGM, NG Optics, Nikon, Nintendo, NOA, Noain, Nobby, Noblex, NOBUX, Nokia, Nomi, Nomu, Nordmende, NorthTech, Nos, Nous, Novex, NuAns, NUU Mobile, Nuvo, Nvidia, NYX Mobile, O+, O2, Oale, OASYS, Obi, Odys, OINOM, Ok, Okapia, OKWU, Onda, OnePlus, Onix, ONN, ONYX BOOX, OpelMobile, Openbox, OPPO, Opsson, Orange, Orbic, Ordissimo, Ouki, Oukitel, OUYA, Overmax, Ovvi, Owwo, Oysters, Oyyu, OzoneHD, P-UP, Palm, Panacom, Panasonic, Pantech, PCBOX, PCD, PCD Argentina, PEAQ, Pendoo, Pentagram, Phicomm, Philco, Philips, Phonemax, phoneOne, Pico, Pioneer, PiPO, Pixela, Pixelphone, Pixus, Planet Computers, Ployer, Plum, Pluzz, PocketBook, POCO, Point of View, Polaroid, PolyPad, Polytron, Pomp, Poppox, Positivo, Positivo BGH, PPTV, Premio, Prestigio, Primepad, Primux, Prixton, PROFiLO, Proline, ProScan, Protruly, PULID, Q-Touch, Q.Bell, Qilive, QMobile, Qtek, Quantum, Quechua, Qumo, R-TV, Ramos, Raspberry, Ravoz, Razer, RCA Tablets, Reach, Readboy, Realme, RED, Reeder, REGAL, Revo, Rikomagic, RIM, Rinno, Ritmix, Ritzviva, Riviera, Rivo, Roadrover, Rokit, Roku, Rombica, Ross&Moor, Rover, RoverPad, RoyQueen, RT Project, RugGear, Ruio, Runbo, Ryte, S-TELL, Saba, Safaricom, Sagem, Salora, Samsung, Sanei, Sansui, Santin, Sanyo, Savio, SCBC, Schneider, Seatel, Seeken, SEG, Sega, Selenga, Selevision, Selfix, SEMP TCL, Sencor, Sendo, Senkatel, Senseit, Senwa, Seuic, SFR, Sharp, Shift Phones, Shtrikh-M, Shuttle, Sico, Siemens, Sigma, Silelis, Silent Circle, Simbans, Simply, Singtech, Siragon, SKG, Sky, Skyworth, Smadl, Smailo, Smart, Smartab, SMARTEC, Smartfren, Smartisan, Smotreshka, Softbank, SOLE, SOLO, Solone, Sonim, SONOS, Sony, Sony Ericsson, Soundmax, Soyes, Spark, SPC, Spectralink, Spectrum, Spice, SQOOL, Star, Starlight, Starmobile, Starway, Starwind, STF Mobile, STG Telecom, STK, Stonex, Storex, StrawBerry, Subor, Sugar, Sumvision, Sunny, Sunstech, SunVan, Sunvell, SuperSonic, SuperTab, Supra, Suzuki, Swipe, SWISSMOBILITY, Swisstone, SWTV, Symphony, Syrox, T-Mobile, Takara, Tambo, Tanix, TB Touch, TCL, TD Systems, Technicolor, Technika, TechniSat, TechnoTrend, TechPad, Techwood, Teclast, Tecno Mobile, TEENO, Teknosa, Tele2, Telefunken, Telego, Telenor, Telit, Tesco, Tesla, Tetratab, teXet, ThL, Thomson, Thuraya, TIANYU, Time2, Timovi, Tinai, Tinmo, TiPhone, TOKYO, Tolino, Tone, Tooky, Top House, Toplux, Topway, Torex, Toshiba, Touchmate, Transpeed, TrekStor, Trevi, Trifone, Trio, Tronsmart, True, True Slim, TTEC, Tunisie Telecom, Turbo, Turbo-X, TurboKids, TurboPad, TVC, TWM, Twoe, TWZ, Tymes, U.S. Cellular, Ugoos, Uhans, Uhappy, Ulefone, Umax, UMIDIGI, Unihertz, Unimax, Uniscope, UNIWA, Unknown, Unnecto, Unonu, Unowhy, UTime, UTOK, UTStarcom, UZ Mobile, v-mobile, VAIO, Vargo, Vastking, VC, Vega, Venso, Verico, Verizon, Vernee, Vertex, Vertu, Verykool, Vesta, Vestel, VGO TEL, Videocon, Videoweb, ViewSonic, Vinga, Vinsoc, Vipro, Vision Touch, Vitelcom, Viumee, Vivax, Vivo, Vizio, VK Mobile, VKworld, Vodacom, Vodafone, Vonino, Vontar, Vorago, Vorke, Voto, VOX, Voxtel, Voyo, Vsmart, Vsun, Vulcan, VVETIME, Walton, WE, Web TV, Weimei, WellcoM, WELLINGTON, Western Digital, Westpoint, Wexler, Wieppo, Wigor, Wiko, Wileyfox, Winds, Wink, Winmax, Winnovo, Wintouch, Wiseasy, WIWA, Wizz, Wolder, Wolfgang, Wonu, Woo, Wortmann, Woxter, X-BO, X-TIGI, X-View, X.Vision, XGIMI, Xgody, Xiaolajiao, Xiaomi, Xion, Xolo, Xoro, Xshitou, Xtouch, Xtratech, Yandex, Yarvik, YASIN, Yes, Yezz, Yoka TV, Yota, Ytone, Yu, Yuandao, YUHO, Yuno, Yusun, Yxtel, Zaith, Zatec, Zebra, Zeemi, Zen, Zenek, Zentality, Zfiner, ZH&K, Zidoo, Ziox, Zonda, Zopo, ZTE, Zuum, Zync, ZYQ, öwn
|
284 |
|
285 |
### List of detected bots:
|
286 |
|
287 |
+
360Spider, Aboundexbot, Acoon, Adbeat, AddThis.com, ADMantX, ADmantX Service Fetcher, Adsbot, aHrefs Bot, Alexa Crawler, Alexa Site Audit, Amazon Route53 Health Check, Amorank Spider, Analytics SEO Crawler, ApacheBench, Applebot, AppSignalBot, Arachni, archive.org bot, ArchiveBox, Ask Jeeves, AspiegelBot, Awario, Awario, Backlink-Check.de, BacklinkCrawler, Baidu Spider, Barkrowler, BazQux Reader, BDCbot, BingBot, BitlyBot, Blekkobot, BLEXBot Crawler, Bloglovin, Blogtrottr, BoardReader, BoardReader Blog Indexer, Bountii Bot, BrandVerity, Browsershots, BUbiNG, Buck, BuiltWith, Butterfly Robot, Bytespider, CareerBot, Castro 2, Catchpoint, CATExplorador, ccBot crawler, CensysInspect, Charlotte, Choosito, Cliqzbot, CloudFlare Always Online, CloudFlare AMP Fetcher, Cloudflare Diagnostics, Cocolyzebot, Collectd, colly, CommaFeed, Comscore, ContentKing, Cookiebot, CSS Certificate Spider, Cốc Cốc Bot, Datadog Agent, datagnionbot, Datanyze, Dataprovider, DataXu, Daum, Dazoobot, Discobot, Domain Re-Animator Bot, Domains Project, DotBot, DuckDuckGo Bot, Easou Spider, eCairn-Grabber, EMail Exractor, EmailWolf, Embedly, evc-batch, ExaBot, ExactSeek Crawler, Expanse, Ezooms, eZ Publish Link Validator, Facebook External Hit, Feedbin, FeedBurner, Feedly, Feedspot, Feed Wrangler, Fever, Findxbot, Flipboard, FreshRSS, GDNP, Generic Bot, Generic Bot, Genieo Web filter, Gigablast, Gigabot, Gluten Free Crawler, Gmail Image Proxy, Goo, Googlebot, Google Cloud Scheduler, Google Favicon, Google PageSpeed Insights, Google Partner Monitoring, Google Search Console, Google Stackdriver Monitoring, Google Structured Data Testing Tool, Gowikibot, Grammarly, Grapeshot, GTmetrix, Hatena Favicon, Heart Rails Capture, Heritrix, Heureka Feed, HTTPMon, httpx, HuaweiWebCatBot, HubPages, HubSpot, ICC-Crawler, ichiro, IDG/IT, IIS Site Analysis, Inktomi Slurp, inoreader, IP-Guide Crawler, IPS Agent, Kaspersky, KomodiaBot, Kouio, l9tcpid, Larbin web crawler, LCC, Let's Encrypt Validation, Lighthouse, Linkdex Bot, LinkedIn Bot, LinkpadBot, LTX71, LumtelBot, Lycos, Magpie-Crawler, MagpieRSS, Mail.Ru Bot, masscan, Mastodon Bot, Meanpath Bot, Mediatoolkit Bot, MegaIndex, MetaInspector, MetaJobBot, MicroAdBot, Mixrank Bot, MJ12 Bot, Mnogosearch, MojeekBot, Monitor.Us, MTRobot, Munin, MuscatFerret, Nagios check_http, NalezenCzBot, nbertaupete95, Netcraft Survey Bot, netEstate, NetLyzer FastProbe, NetResearchServer, NetSystemsResearch, Netvibes, NewsBlur, NewsGator, Nimbostratus Bot, NLCrawler, Nmap, Notify Ninja, Nutch-based Bot, Nuzzel, oBot, Octopus, Odnoklassniki Bot, Omgili bot, Openindex Spider, OpenLinkProfiler, OpenWebSpider, Orange Bot, Outbrain, PagePeeker, PageThing, PaperLiBot, parse.ly, Petal Bot, Phantomas, PHP Server Monitor, Picsearch bot, PingAdmin.Ru, Pingdom Bot, Pinterest, PiplBot, Plukkie, PocketParser, Pompos, PritTorrent, Project Resonance, PRTG Network Monitor, QuerySeekerSpider, Quora Bot, Quora Link Preview, Qwantify, Rainmeter, RamblerMail Image Proxy, Reddit Bot, Riddler, Robozilla, Rogerbot, ROI Hunter, RSSRadio Bot, Ryowl, SabsimBot, SafeDNSBot, Scooter, ScoutJet, Scrapy, Screaming Frog SEO Spider, ScreenerBot, Seekport, Semantic Scholar Bot, Semrush Bot, Sensika Bot, Sentry Bot, Seobility, SEOENGBot, SEOkicks, SEOkicks-Robot, seolyt, Seoscanners.net, Serendeputy Bot, serpstatbot, Server Density, Seznam Bot, Seznam Email Proxy, Seznam Zbozi.cz, ShopAlike, Shopify Partner, ShopWiki, SilverReader, SimplePie, SISTRIX Crawler, SISTRIX Optimizer, Site24x7 Website Monitoring, Siteimprove, SiteSucker, Sixy.ch, Skype URI Preview, Slackbot, SMTBot, Snapchat Proxy, Sogou Spider, Soso Spider, Sparkler, Speedy, Spinn3r, Spotify, Sprinklr, Sputnik Bot, Sputnik Favicon Bot, Sputnik Image Bot, sqlmap, SSL Labs, Startpagina Linkchecker, StatusCake, Superfeedr Bot, SurdotlyBot, Survey Bot, Tarmot Gezgin, TelegramBot, The Knowledge AI, theoldreader, TinEye Crawler, Tiny Tiny RSS, TLSProbe, TraceMyFile, Trendiction Bot, TurnitinBot, TweetedTimes Bot, Tweetmeme Bot, Twingly Recon, Twitterbot, UkrNet Mail Proxy, UniversalFeedParser, Uptimebot, Uptime Robot, URLAppendBot, Vagabondo, Velen Public Web Crawler, Vercel Bot, VeryHip, Visual Site Mapper Crawler, VK Share Button, W3C CSS Validator, W3C I18N Checker, W3C Link Checker, W3C Markup Validation Service, W3C MobileOK Checker, W3C Unified Validator, Wappalyzer, WebbCrawler, WebDataStats, Weborama, WebPageTest, WebSitePulse, WebThumbnail, WellKnownBot, WeSEE:Search, WeViKaBot, WhatCMS, WikiDo, Willow Internet Crawler, WooRank, WooRank, WordPress, Wotbox, XenForo, YaCy, Yahoo! Cache System, Yahoo! Japan BRW, Yahoo! Link Preview, Yahoo! Mail Proxy, Yahoo! Slurp, Yahoo Gemini, YaK, Yandex Bot, Yeti/Naverbot, Yottaa Site Monitor, Youdao Bot, Yourls, Yunyun Bot, Zao, Ze List, zgrab, Zookabot, ZoominfoBot, ZumBot
|
app/vendor/matomo/device-detector/regexes/bots.yml
CHANGED
@@ -180,6 +180,14 @@
|
|
180 |
name: ''
|
181 |
url: ''
|
182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
- regex: 'MSNBot|msrbot|bingbot|BingPreview|msnbot-(UDiscovery|NewsBlogs)|adidxbot'
|
184 |
name: 'BingBot'
|
185 |
category: 'Search bot'
|
@@ -1771,18 +1779,18 @@
|
|
1771 |
- regex: 'HubPages.*crawlingpolicy'
|
1772 |
name: 'HubPages'
|
1773 |
category: 'Crawler'
|
1774 |
-
url: '
|
1775 |
producer:
|
1776 |
-
name: 'HubPages'
|
1777 |
-
url: '
|
1778 |
|
1779 |
- regex: 'Pinterest(bot)?/\d\.\d.*www\.pinterest\.com.*'
|
1780 |
name: 'Pinterest'
|
1781 |
-
url: '
|
1782 |
category: 'Crawler'
|
1783 |
producer:
|
1784 |
name: 'Pinterest'
|
1785 |
-
url: '
|
1786 |
|
1787 |
- regex: 'Site24x7'
|
1788 |
name: 'Site24x7 Website Monitoring'
|
@@ -1827,10 +1835,10 @@
|
|
1827 |
- regex: 'Catchpoint( bot)?'
|
1828 |
name: 'Catchpoint'
|
1829 |
category: 'Site Monitor'
|
1830 |
-
url: ''
|
1831 |
producer:
|
1832 |
name: 'Catchpoint Systems'
|
1833 |
-
url: '
|
1834 |
|
1835 |
- regex: 'bitlybot'
|
1836 |
name: 'BitlyBot'
|
@@ -1898,7 +1906,7 @@
|
|
1898 |
- regex: 'RSSRadio \(Push Notification Scanner;support@dorada\.co\.uk\)'
|
1899 |
name: 'RSSRadio Bot'
|
1900 |
|
1901 |
-
- regex: '(A6-Indexer|nuhk|TsolCrawler|Yammybot|Openbot|Gulper Web Bot|grub-client|Download Demon|SearchExpress|Microsoft URL Control|borg|altavista|dataminr.com|tweetedtimes.com|TrendsmapResolver|teoma|blitzbot|oegp|furlbot|http%20client|polybot|htdig|mogimogi|larbin|scrubby|searchsight|seekbot|semanticdiscovery|snappy|vortex(?! Build)|zeal|fast-webcrawler|converacrawler|dataparksearch|findlinks|BrowserMob|HttpMonitor|ThumbShotsBot|URL2PNG|ZooShot|GomezA|Google SketchUp|Read%20Later|RackspaceBot|robots|SeopultContentAnalyzer|7Siters|centuryb.o.t9|InterNaetBoten|EasyBib AutoCite|Bidtellect|tomnomnom/meg)'
|
1902 |
name: 'Generic Bot'
|
1903 |
|
1904 |
- regex: '^sentry'
|
@@ -2310,8 +2318,8 @@
|
|
2310 |
url: 'https://whatcms.org/'
|
2311 |
category: 'Crawler'
|
2312 |
producer:
|
2313 |
-
name: ''
|
2314 |
-
url: ''
|
2315 |
|
2316 |
- regex: 'httpx'
|
2317 |
name: 'httpx'
|
@@ -2415,6 +2423,108 @@
|
|
2415 |
category: 'Crawler'
|
2416 |
url: 'https://www.woorank.com/bot'
|
2417 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2418 |
# Generic detections
|
2419 |
|
2420 |
- regex: '[a-z0-9\-_]*((?<!cu|power[ _]|m[ _])bot(?![ _]TAB|[ _]?5[0-9])|crawler|crawl|checker|archiver|transcoder|spider)([^a-z]|$)'
|
180 |
name: ''
|
181 |
url: ''
|
182 |
|
183 |
+
- regex: 'Better Uptime Bot'
|
184 |
+
name: 'Better Uptime Bot'
|
185 |
+
category: 'Site Monitor'
|
186 |
+
url: 'https://betteruptime.com/faq'
|
187 |
+
producer:
|
188 |
+
name: 'Better Uptime'
|
189 |
+
url: 'https://betteruptime.com/'
|
190 |
+
|
191 |
- regex: 'MSNBot|msrbot|bingbot|BingPreview|msnbot-(UDiscovery|NewsBlogs)|adidxbot'
|
192 |
name: 'BingBot'
|
193 |
category: 'Search bot'
|
1779 |
- regex: 'HubPages.*crawlingpolicy'
|
1780 |
name: 'HubPages'
|
1781 |
category: 'Crawler'
|
1782 |
+
url: 'https://hubpages.com/help/crawlingpolicy'
|
1783 |
producer:
|
1784 |
+
name: 'HubPages, Inc.'
|
1785 |
+
url: 'https://discover.hubpages.com/'
|
1786 |
|
1787 |
- regex: 'Pinterest(bot)?/\d\.\d.*www\.pinterest\.com.*'
|
1788 |
name: 'Pinterest'
|
1789 |
+
url: 'https://help.pinterest.com/en/business/article/pinterest-crawler'
|
1790 |
category: 'Crawler'
|
1791 |
producer:
|
1792 |
name: 'Pinterest'
|
1793 |
+
url: 'https://www.pinterest.com/'
|
1794 |
|
1795 |
- regex: 'Site24x7'
|
1796 |
name: 'Site24x7 Website Monitoring'
|
1835 |
- regex: 'Catchpoint( bot)?'
|
1836 |
name: 'Catchpoint'
|
1837 |
category: 'Site Monitor'
|
1838 |
+
url: 'https://www.catchpoint.com/'
|
1839 |
producer:
|
1840 |
name: 'Catchpoint Systems'
|
1841 |
+
url: 'https://www.catchpoint.com/'
|
1842 |
|
1843 |
- regex: 'bitlybot'
|
1844 |
name: 'BitlyBot'
|
1906 |
- regex: 'RSSRadio \(Push Notification Scanner;support@dorada\.co\.uk\)'
|
1907 |
name: 'RSSRadio Bot'
|
1908 |
|
1909 |
+
- regex: '(A6-Indexer|nuhk|TsolCrawler|Yammybot|Openbot|Gulper Web Bot|grub-client|Download Demon|SearchExpress|Microsoft URL Control|borg|altavista|dataminr.com|tweetedtimes.com|TrendsmapResolver|teoma|blitzbot|oegp|furlbot|http%20client|polybot|htdig|mogimogi|larbin|scrubby|searchsight|seekbot|semanticdiscovery|snappy|vortex(?! Build)|zeal|fast-webcrawler|converacrawler|dataparksearch|findlinks|BrowserMob|HttpMonitor|ThumbShotsBot|URL2PNG|ZooShot|GomezA|Google SketchUp|Read%20Later|RackspaceBot|robots|SeopultContentAnalyzer|7Siters|centuryb.o.t9|InterNaetBoten|EasyBib AutoCite|Bidtellect|tomnomnom/meg|My User Agent)'
|
1910 |
name: 'Generic Bot'
|
1911 |
|
1912 |
- regex: '^sentry'
|
2318 |
url: 'https://whatcms.org/'
|
2319 |
category: 'Crawler'
|
2320 |
producer:
|
2321 |
+
name: 'Nineteen Ten LLC'
|
2322 |
+
url: 'https://whatcms.org/'
|
2323 |
|
2324 |
- regex: 'httpx'
|
2325 |
name: 'httpx'
|
2423 |
category: 'Crawler'
|
2424 |
url: 'https://www.woorank.com/bot'
|
2425 |
|
2426 |
+
- regex: 'Cookiebot/([\d+\.])'
|
2427 |
+
name: 'Cookiebot'
|
2428 |
+
category: 'Crawler'
|
2429 |
+
url: 'https://support.cookiebot.com/hc/en-us/articles/360014264140-Scanner-User-Agent'
|
2430 |
+
producer:
|
2431 |
+
name: 'Cybot A/S'
|
2432 |
+
url: 'https://www.cybot.com/'
|
2433 |
+
|
2434 |
+
- regex: 'NetSystemsResearch'
|
2435 |
+
name: 'NetSystemsResearch'
|
2436 |
+
category: 'Security Checker'
|
2437 |
+
url: 'https://www.netsystemsresearch.com/'
|
2438 |
+
producer:
|
2439 |
+
name: 'NET SYSTEMS RESEARCH LLC'
|
2440 |
+
url: 'https://www.netsystemsresearch.com/'
|
2441 |
+
|
2442 |
+
- regex: 'CensysInspect/([\d+\.])'
|
2443 |
+
name: 'CensysInspect'
|
2444 |
+
category: 'Security Checker'
|
2445 |
+
url: 'https://about.censys.io/'
|
2446 |
+
producer:
|
2447 |
+
name: 'Censys, Inc.'
|
2448 |
+
url: 'https://censys.io/'
|
2449 |
+
|
2450 |
+
- regex: 'gdnplus.com'
|
2451 |
+
name: 'GDNP'
|
2452 |
+
category: 'Crawler'
|
2453 |
+
url: 'https://gdnplus.com/'
|
2454 |
+
producer:
|
2455 |
+
name: 'Global Digital Network Plus, LLC'
|
2456 |
+
url: 'https://gdnplus.com/'
|
2457 |
+
|
2458 |
+
- regex: 'WellKnownBot/([\d+\.])'
|
2459 |
+
name: 'WellKnownBot'
|
2460 |
+
category: 'Crawler'
|
2461 |
+
url: 'https://well-known.dev'
|
2462 |
+
|
2463 |
+
- regex: 'Adsbot/([\d+\.])'
|
2464 |
+
name: 'Adsbot'
|
2465 |
+
category: 'Crawler'
|
2466 |
+
url: 'https://seostar.co/robot/'
|
2467 |
+
|
2468 |
+
- regex: 'MTRobot/([\d+\.])'
|
2469 |
+
name: 'MTRobot'
|
2470 |
+
category: 'Crawler'
|
2471 |
+
url: 'https://metrics-tools.de/robot.html'
|
2472 |
+
producer:
|
2473 |
+
name: 'Metrics Tools'
|
2474 |
+
url: 'https://metrics-tools.de/'
|
2475 |
+
|
2476 |
+
- regex: 'serpstatbot/([\d+\.])'
|
2477 |
+
name: 'serpstatbot'
|
2478 |
+
category: 'Crawler'
|
2479 |
+
url: 'http://serpstatbot.com/'
|
2480 |
+
producer:
|
2481 |
+
name: 'Netpeak Ltd'
|
2482 |
+
url: 'https://netpeak.net/'
|
2483 |
+
|
2484 |
+
- regex: 'colly'
|
2485 |
+
name: 'colly'
|
2486 |
+
category: 'Crawler'
|
2487 |
+
url: 'https://github.com/gocolly/colly/'
|
2488 |
+
|
2489 |
+
- regex: 'l9tcpid/v([\d+\.])'
|
2490 |
+
name: 'l9tcpid'
|
2491 |
+
category: 'Security Checker'
|
2492 |
+
url: 'https://github.com/LeakIX/l9tcpid'
|
2493 |
+
|
2494 |
+
- regex: 'MegaIndex.ru/([\d+\.])'
|
2495 |
+
name: 'MegaIndex'
|
2496 |
+
category: 'Crawler'
|
2497 |
+
url: 'https://megaindex.com/crawler'
|
2498 |
+
|
2499 |
+
- regex: 'Seekport'
|
2500 |
+
name: 'Seekport'
|
2501 |
+
category: 'Crawler'
|
2502 |
+
url: 'http://www.seekport.com/'
|
2503 |
+
producer:
|
2504 |
+
name: 'SISTRIX GmbH'
|
2505 |
+
url: 'https://www.sistrix.de/'
|
2506 |
+
|
2507 |
+
- regex: 'seolyt/([\d+\.])'
|
2508 |
+
name: 'seolyt'
|
2509 |
+
category: 'Crawler'
|
2510 |
+
url: 'https://seolyt.com/'
|
2511 |
+
|
2512 |
+
- regex: 'YaK/([\d+\.])'
|
2513 |
+
name: 'YaK'
|
2514 |
+
category: 'Crawler'
|
2515 |
+
url: 'https://www.linkfluence.com/'
|
2516 |
+
producer:
|
2517 |
+
name: 'Linkfluence SAS'
|
2518 |
+
url: 'https://www.linkfluence.com/'
|
2519 |
+
|
2520 |
+
- regex: 'KomodiaBot/([\d+\.])'
|
2521 |
+
name: 'KomodiaBot'
|
2522 |
+
category: 'Crawler'
|
2523 |
+
url: 'http://www.komodia.com/newwiki/index.php/URL_server_crawler'
|
2524 |
+
producer:
|
2525 |
+
name: 'Komodia Inc.'
|
2526 |
+
url: 'https://www.komodia.com/'
|
2527 |
+
|
2528 |
# Generic detections
|
2529 |
|
2530 |
- regex: '[a-z0-9\-_]*((?<!cu|power[ _]|m[ _])bot(?![ _]TAB|[ _]?5[0-9])|crawler|crawl|checker|archiver|transcoder|spider)([^a-z]|$)'
|
app/vendor/matomo/device-detector/regexes/client/browsers.yml
CHANGED
@@ -5,6 +5,34 @@
|
|
5 |
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
6 |
###############
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
# Helio (https://developer.magicleap.com/en-us/learn/guides/lumin-os-release-notes-summary)
|
9 |
- regex: 'Helio/(\d+[\.\d]+)'
|
10 |
name: 'Helio'
|
@@ -1687,6 +1715,21 @@
|
|
1687 |
engine:
|
1688 |
default: 'WebKit'
|
1689 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1690 |
# Chrome Webview
|
1691 |
- regex: 'Version/.* Chrome(?:/(\d+[\.\d]+))?'
|
1692 |
name: 'Chrome Webview'
|
@@ -1745,6 +1788,13 @@
|
|
1745 |
- regex: '(?:Tizen|SLP) Browser(?:/(\d+[\.\d]+))?'
|
1746 |
name: 'Tizen Browser'
|
1747 |
version: '$1'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1748 |
|
1749 |
#Palm Blazer
|
1750 |
- regex: 'Blazer(?:/(\d+[\.\d]+))?'
|
@@ -2095,11 +2145,6 @@
|
|
2095 |
name: 'Sunrise'
|
2096 |
version: '$1'
|
2097 |
|
2098 |
-
#SuperBird
|
2099 |
-
- regex: 'SuperBird(?:/(\d+[\.\d]+))?'
|
2100 |
-
name: 'SuperBird'
|
2101 |
-
version: '$1'
|
2102 |
-
|
2103 |
#Vision Mobile Browser
|
2104 |
- regex: 'Vision-Browser(?:/(\d+[\.\d]+))'
|
2105 |
name: 'Vision Mobile Browser'
|
5 |
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
6 |
###############
|
7 |
|
8 |
+
# Arvin (https://play.google.com/store/apps/details?id=com.browser.arvin.anti.blokir&hl=sv&gl=US)
|
9 |
+
- regex: 'Arvin/(\d+[\.\d]+)'
|
10 |
+
name: 'Arvin'
|
11 |
+
version: '$1'
|
12 |
+
engine:
|
13 |
+
default: 'Blink'
|
14 |
+
|
15 |
+
# Edge Webview (https://docs.microsoft.com/en-us/microsoft-edge/webview2/)
|
16 |
+
- regex: 'Version/.+Chrome/.+EdgW/(\d+[\.\d]+)'
|
17 |
+
name: 'Edge WebView'
|
18 |
+
version: '$1'
|
19 |
+
engine:
|
20 |
+
default: 'WebKit'
|
21 |
+
|
22 |
+
# Mandarin (https://mandarin-browser.com/)
|
23 |
+
- regex: 'Mandarin Browser/(\d+[\.\d]+)'
|
24 |
+
name: 'Mandarin'
|
25 |
+
version: '$1'
|
26 |
+
engine:
|
27 |
+
default: 'Blink'
|
28 |
+
|
29 |
+
# Maelstrom (https://www.bittorrent.com/)
|
30 |
+
- regex: 'Torrent/(\d+[\.\d]+)'
|
31 |
+
name: 'Maelstrom'
|
32 |
+
version: '$1'
|
33 |
+
engine:
|
34 |
+
default: 'Blink'
|
35 |
+
|
36 |
# Helio (https://developer.magicleap.com/en-us/learn/guides/lumin-os-release-notes-summary)
|
37 |
- regex: 'Helio/(\d+[\.\d]+)'
|
38 |
name: 'Helio'
|
1715 |
engine:
|
1716 |
default: 'WebKit'
|
1717 |
|
1718 |
+
- regex: 'OpenFin/(?:(\d+[\.\d]+))'
|
1719 |
+
name: 'OpenFin'
|
1720 |
+
version: '$1'
|
1721 |
+
engine:
|
1722 |
+
default: 'Blink'
|
1723 |
+
|
1724 |
+
# SuperBird
|
1725 |
+
- regex: 'SuperBird(?:/(\d+[\.\d]+))?'
|
1726 |
+
name: 'SuperBird'
|
1727 |
+
version: '$1'
|
1728 |
+
engine:
|
1729 |
+
default: 'WebKit'
|
1730 |
+
versions:
|
1731 |
+
28: 'Blink'
|
1732 |
+
|
1733 |
# Chrome Webview
|
1734 |
- regex: 'Version/.* Chrome(?:/(\d+[\.\d]+))?'
|
1735 |
name: 'Chrome Webview'
|
1788 |
- regex: '(?:Tizen|SLP) Browser(?:/(\d+[\.\d]+))?'
|
1789 |
name: 'Tizen Browser'
|
1790 |
version: '$1'
|
1791 |
+
- regex: 'Tizen (?:\d+[\.\d]+).+ Version/(\d+[\.\d]+) (?:TV|Mobile)'
|
1792 |
+
name: 'Tizen Browser'
|
1793 |
+
version: '$1'
|
1794 |
+
engine:
|
1795 |
+
default: 'WebKit'
|
1796 |
+
versions:
|
1797 |
+
'4': 'Blink'
|
1798 |
|
1799 |
#Palm Blazer
|
1800 |
- regex: 'Blazer(?:/(\d+[\.\d]+))?'
|
2145 |
name: 'Sunrise'
|
2146 |
version: '$1'
|
2147 |
|
|
|
|
|
|
|
|
|
|
|
2148 |
#Vision Mobile Browser
|
2149 |
- regex: 'Vision-Browser(?:/(\d+[\.\d]+))'
|
2150 |
name: 'Vision Mobile Browser'
|
app/vendor/matomo/device-detector/regexes/client/mobile_apps.yml
CHANGED
@@ -90,6 +90,11 @@
|
|
90 |
name: 'YouTube'
|
91 |
version: '$1'
|
92 |
|
|
|
|
|
|
|
|
|
|
|
93 |
# AFNetworking generic
|
94 |
- regex: '([^/]+)/(\d+(?:\.\d+)+) \((?:iPhone|iPad); iOS [0-9\.]+; Scale/[0-9\.]+\)'
|
95 |
name: '$1'
|
@@ -217,6 +222,11 @@
|
|
217 |
name: 'Snapchat'
|
218 |
version: '$1'
|
219 |
|
|
|
|
|
|
|
|
|
|
|
220 |
# UnityPlayer
|
221 |
- regex: 'UnityPlayer/([\d\.]+)'
|
222 |
name: 'UnityPlayer'
|
@@ -245,7 +255,7 @@
|
|
245 |
name: 'Siri'
|
246 |
version: '1.0'
|
247 |
|
248 |
-
- regex: 'LinkedIn
|
249 |
name: 'LinkedIn'
|
250 |
version: '$1'
|
251 |
|
@@ -451,7 +461,7 @@
|
|
451 |
- regex: 'TuneIn Radio Pro(?:[^/]+)?/(\d+[\.\d]+)'
|
452 |
name: 'TuneIn Radio Pro'
|
453 |
version: '$1'
|
454 |
-
- regex: 'TuneIn Radio(?:[^/]+)?/(\d+[\.\d]+)'
|
455 |
name: 'TuneIn Radio'
|
456 |
version: '$1'
|
457 |
|
@@ -537,3 +547,52 @@
|
|
537 |
- regex: 'JaneStyle_iOS/(\d+[\.\d]+)'
|
538 |
name: 'JaneStyle'
|
539 |
version: '$1'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
name: 'YouTube'
|
91 |
version: '$1'
|
92 |
|
93 |
+
# Netflix (https://play.google.com/store/apps/details?id=com.netflix.mediaclient)
|
94 |
+
- regex: 'com.netflix.mediaclient(?:/(\d+\.[\d\.]+))?'
|
95 |
+
name: 'Netflix'
|
96 |
+
version: '$1'
|
97 |
+
|
98 |
# AFNetworking generic
|
99 |
- regex: '([^/]+)/(\d+(?:\.\d+)+) \((?:iPhone|iPad); iOS [0-9\.]+; Scale/[0-9\.]+\)'
|
100 |
name: '$1'
|
222 |
name: 'Snapchat'
|
223 |
version: '$1'
|
224 |
|
225 |
+
# Strimio (https://www.strimio.com/)
|
226 |
+
- regex: 'strimio(?:-desktop)/(\d+\.(?:[\.\d]+))?'
|
227 |
+
name: 'Strimio'
|
228 |
+
version: '$1'
|
229 |
+
|
230 |
# UnityPlayer
|
231 |
- regex: 'UnityPlayer/([\d\.]+)'
|
232 |
name: 'UnityPlayer'
|
255 |
name: 'Siri'
|
256 |
version: '1.0'
|
257 |
|
258 |
+
- regex: 'LinkedIn(?:App)?(?:/([\d\.]+))?'
|
259 |
name: 'LinkedIn'
|
260 |
version: '$1'
|
261 |
|
461 |
- regex: 'TuneIn Radio Pro(?:[^/]+)?/(\d+[\.\d]+)'
|
462 |
name: 'TuneIn Radio Pro'
|
463 |
version: '$1'
|
464 |
+
- regex: 'TuneIn(?: Radio(?:[^/]+)?)?/(\d+[\.\d]+)'
|
465 |
name: 'TuneIn Radio'
|
466 |
version: '$1'
|
467 |
|
547 |
- regex: 'JaneStyle_iOS/(\d+[\.\d]+)'
|
548 |
name: 'JaneStyle'
|
549 |
version: '$1'
|
550 |
+
|
551 |
+
# Binance https://play.google.com/store/apps/details?id=com.binance.dev
|
552 |
+
- regex: 'BNC/.+\(Android (\d+[\.\d]+)\)'
|
553 |
+
name: 'Binance'
|
554 |
+
version: '$1'
|
555 |
+
|
556 |
+
# My World https://apps.apple.com/app/id598556821
|
557 |
+
- regex: 'ru\.mail\.my/(\d+[\.\d]+)'
|
558 |
+
name: 'My World'
|
559 |
+
version: '$1'
|
560 |
+
|
561 |
+
# Odnoklassniki https://play.google.com/store/apps/details?id=ru.ok.android https://apps.apple.com/app/id398465290
|
562 |
+
- regex: 'OK(?:Android|iOS)/([\d\.]+)'
|
563 |
+
name: 'Odnoklassniki'
|
564 |
+
version: '$1'
|
565 |
+
|
566 |
+
# YakYak https://github.com/yakyak/yakyak
|
567 |
+
- regex: 'yakyak/(\d+[\.\d]+)'
|
568 |
+
name: 'YakYak'
|
569 |
+
version: '$1'
|
570 |
+
|
571 |
+
# Microsoft Teams (https://www.microsoft.com/en/microsoft-teams/group-chat-software)
|
572 |
+
- regex: 'Teams/(\d+[\.\d]+)'
|
573 |
+
name: 'Teams'
|
574 |
+
version: '$1'
|
575 |
+
|
576 |
+
# Streamlabs OBS (https://streamlabs.com/)
|
577 |
+
- regex: 'StreamlabsOBS/(\d+[\.\d]+)'
|
578 |
+
name: 'Streamlabs OBS'
|
579 |
+
version: '$1'
|
580 |
+
|
581 |
+
# Blitz (https://blitz.gg/)
|
582 |
+
- regex: 'Blitz/([\d\.]+)'
|
583 |
+
name: 'Blitz'
|
584 |
+
version: '$1'
|
585 |
+
|
586 |
+
# OfferUp (https://play.google.com/store/apps/details?id=com.offerup)
|
587 |
+
- regex: 'OfferUp/([\d\.]+)'
|
588 |
+
name: 'OfferUp'
|
589 |
+
version: '$1'
|
590 |
+
|
591 |
+
# Vuhuv (https://play.google.com/store/apps/details?id=com.vuhuv)
|
592 |
+
- regex: 'Vuhuv/([\d\.]+)'
|
593 |
+
name: 'Vuhuv'
|
594 |
+
version: '$1'
|
595 |
+
|
596 |
+
- regex: '.+/(?:gfibertv|gftv200)-([\d]+)-'
|
597 |
+
name: 'Google Fiber TV'
|
598 |
+
version: '$1'
|
app/vendor/matomo/device-detector/regexes/client/pim.yml
CHANGED
@@ -62,3 +62,38 @@
|
|
62 |
- regex: 'BathyScaphe/'
|
63 |
name: 'BathyScaphe'
|
64 |
version: ''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
- regex: 'BathyScaphe/'
|
63 |
name: 'BathyScaphe'
|
64 |
version: ''
|
65 |
+
|
66 |
+
# Raindrop.io (https://raindrop.io/)
|
67 |
+
- regex: 'Raindrop.io/(\d+[\.\d]+)'
|
68 |
+
name: 'Raindrop.io'
|
69 |
+
version: '$1'
|
70 |
+
|
71 |
+
# Franz (https://meetfranz.com/)
|
72 |
+
- regex: 'Franz/(\d+[\.\d]+)'
|
73 |
+
name: 'Franz'
|
74 |
+
version: '$1'
|
75 |
+
|
76 |
+
# Mailspring (https://www.electronjs.org/apps/mailspring)
|
77 |
+
- regex: 'Mailspring/(\d+[\.\d]+)'
|
78 |
+
name: 'Mailspring'
|
79 |
+
version: '$1'
|
80 |
+
|
81 |
+
# Notion (https://www.notion.so/)
|
82 |
+
- regex: 'Notion/(\d+[\.\d]+)'
|
83 |
+
name: 'Notion'
|
84 |
+
version: '$1'
|
85 |
+
|
86 |
+
# Basecamp (https://basecamp.com/)
|
87 |
+
- regex: 'Basecamp[0-9]/?(\d+[\.\d]+)'
|
88 |
+
name: 'Basecamp'
|
89 |
+
version: '$1'
|
90 |
+
|
91 |
+
# Evernote (https://evernote.com/)
|
92 |
+
- regex: 'Evernote/?(\d+[\.\d]+)'
|
93 |
+
name: 'Evernote'
|
94 |
+
version: '$1'
|
95 |
+
|
96 |
+
# Rambox Pro (https://rambox.app/)
|
97 |
+
- regex: 'ramboxpro/(\d+\.[\.\d]+)?'
|
98 |
+
name: 'Rambox Pro'
|
99 |
+
version: '$1'
|
app/vendor/matomo/device-detector/regexes/device/car_browsers.yml
CHANGED
@@ -23,10 +23,10 @@ MAC AUDIO:
|
|
23 |
- regex: 'Spro'
|
24 |
model: 'S Pro'
|
25 |
|
|
|
26 |
Topway:
|
27 |
regex: 'sp9853i_1h10_vmm'
|
28 |
device: 'car browser'
|
29 |
models:
|
30 |
- regex: 'sp9853i_1h10_vmm'
|
31 |
model: 'TS9'
|
32 |
-
|
23 |
- regex: 'Spro'
|
24 |
model: 'S Pro'
|
25 |
|
26 |
+
# Topway
|
27 |
Topway:
|
28 |
regex: 'sp9853i_1h10_vmm'
|
29 |
device: 'car browser'
|
30 |
models:
|
31 |
- regex: 'sp9853i_1h10_vmm'
|
32 |
model: 'TS9'
|
|
app/vendor/matomo/device-detector/regexes/device/mobiles.yml
CHANGED
@@ -70,6 +70,8 @@ SFR:
|
|
70 |
model: 'StarText' # ZTE
|
71 |
- regex: 'StarNaute II(?:[);/ ]|$)'
|
72 |
model: 'StarNaute 2' # ZTE
|
|
|
|
|
73 |
- regex: 'StarNaute(?:[);/ ]|$)'
|
74 |
model: 'StarNaute' # ZTE Amigo
|
75 |
- regex: 'StarTab'
|
@@ -81,12 +83,16 @@ SFR:
|
|
81 |
|
82 |
# HTC (htc.com)
|
83 |
HTC:
|
84 |
-
regex: 'HTC|Sprint (?:APA|ATP)|ADR(?!910L)[a-z0-9]+|NexusHD2|Amaze[ _]4G(?:[);/ ]|$)|(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/)]+)(?: Build|\))|(Amaze[ _]4G|(?<!BLU LIFE )One ?[XELSV\+]+)(?:[);/ ]|$)|SPV E6[05]0|(One M8|One Mini 2|X525a|PG86100|PC36100|XV6975|PJ83100|2PYB2|2PS64|2PZC5|0PJA10|0PJA2|HTV33|0PM92|0PCV1|601HT|0PAJ5|HTL2[23]|HTV3[12]|2PQ93|X2-HT|EXODUS 1|ISW13HT)(?:[);/ ]|$)'
|
85 |
device: 'smartphone'
|
86 |
models:
|
87 |
# explicit smartphone models
|
88 |
- regex: '2PZC5(?:[);/ ]|$)'
|
89 |
model: 'U11'
|
|
|
|
|
|
|
|
|
90 |
- regex: 'XV6975(?:[);/ ]|$)'
|
91 |
model: 'Imagio'
|
92 |
- regex: 'PG86100(?:[);/ ]|$)'
|
@@ -99,7 +105,7 @@ HTC:
|
|
99 |
model: 'One'
|
100 |
- regex: 'PJ83100(?:[);/ ]|$)'
|
101 |
model: 'One X'
|
102 |
-
- regex: 'One Mini 2(?:[);/ ]|$)'
|
103 |
model: 'One Mini 2'
|
104 |
- regex: 'X2-HT(?:[);/ ]|$)'
|
105 |
model: 'One X2'
|
@@ -109,14 +115,26 @@ HTC:
|
|
109 |
model: 'J One'
|
110 |
- regex: 'HTL23(?:[);/ ]|$)'
|
111 |
model: 'J Butterfly'
|
|
|
|
|
112 |
- regex: '(?:0PJA2|0PJA10)(?:[);/ ]|$)'
|
113 |
model: 'One M9'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
- regex: 'X525a(?:[);/ ]|$)'
|
115 |
model: 'One X+'
|
116 |
- regex: '2PQ93(?:[);/ ]|$)'
|
117 |
model: 'One A9'
|
118 |
- regex: 'ADR6300'
|
119 |
model: 'Droid Incredible'
|
|
|
|
|
120 |
- regex: 'ADR6400L'
|
121 |
model: 'ThunderBolt'
|
122 |
- regex: 'ADR6410LRA'
|
@@ -133,10 +151,26 @@ HTC:
|
|
133 |
model: 'Desire 626S'
|
134 |
- regex: '0PCV1(?:[);/ ]|$)'
|
135 |
model: 'Desire 510'
|
|
|
|
|
136 |
- regex: '608t(?:[);/ ]|$)'
|
137 |
model: 'Desire 608t'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
138 |
- regex: 'EXODUS 1(?:[);/ ]|$)'
|
139 |
model: 'Exodus 1'
|
|
|
|
|
140 |
|
141 |
- regex: 'NexusHD2' # custom rom for hd2
|
142 |
model: 'HD2'
|
@@ -149,9 +183,9 @@ HTC:
|
|
149 |
- regex: 'HTC[ _\-]Flyer[ _\-]([\w]{1,5})'
|
150 |
device: 'tablet'
|
151 |
model: 'Flyer $1'
|
152 |
-
- regex: 'HTC[ _\-]One[ _\-]max(?:[);/ ]|$)'
|
153 |
device: 'phablet'
|
154 |
-
model: 'One
|
155 |
- regex: 'HTC[ _]([^/;]+) [0-9]+(?:\.[0-9]+)+ Build'
|
156 |
model: '$1'
|
157 |
- regex: 'HTC[ _]([^/;]+) Build'
|
@@ -177,10 +211,6 @@ HTC:
|
|
177 |
model: '$1'
|
178 |
- regex: '(ADR[a-z0-9]+)'
|
179 |
model: '$1'
|
180 |
-
- regex: '(One M8)'
|
181 |
-
model: '$1'
|
182 |
-
- regex: '0PAJ5(?:[);/ ]|$)'
|
183 |
-
model: 'One E8'
|
184 |
- regex: 'HTV32(?:[);/ ]|$)'
|
185 |
model: '10'
|
186 |
- regex: 'HTV31(?:[);/ ]|$)'
|
@@ -482,9 +512,9 @@ RIM:
|
|
482 |
- regex: 'BlackBerry'
|
483 |
model: 'BlackBerry'
|
484 |
|
485 |
-
# CHIA
|
486 |
CHIA:
|
487 |
-
regex: '(SVEGLIO[ _][QH]1|TREO_TAB8G|GTA7WF)(?:[);/ ]|$)'
|
488 |
device: 'smartphone'
|
489 |
models:
|
490 |
- regex: 'SVEGLIO[ _]([QH]1)'
|
@@ -494,7 +524,13 @@ CHIA:
|
|
494 |
model: 'TREO TAB8G'
|
495 |
- regex: 'GTA7WF'
|
496 |
device: 'tablet'
|
497 |
-
model: '
|
|
|
|
|
|
|
|
|
|
|
|
|
498 |
|
499 |
# PALM
|
500 |
Palm:
|
@@ -514,7 +550,7 @@ Palm:
|
|
514 |
|
515 |
# HP or Hewlett-Packard
|
516 |
HP:
|
517 |
-
regex: 'Hewlett-Packard|HP/HP|HP EliteBook 820|TouchPad/\d+\.\d+|hp-tablet|HP ?iPAQ|webOS.*P160U|HP (?:Pro )?Slate|HP [78]|HP 10 Plus|Compaq [7|8]|HP; [^;/)]+'
|
518 |
device: 'smartphone'
|
519 |
models:
|
520 |
- regex: 'HP Slate 6 Voice Tab'
|
@@ -554,6 +590,9 @@ HP:
|
|
554 |
- regex: 'HP ProBook (6560b)'
|
555 |
device: 'desktop'
|
556 |
model: 'ProBook $1'
|
|
|
|
|
|
|
557 |
- regex: 'HP EliteBook 820 G2'
|
558 |
device: 'desktop'
|
559 |
model: 'EliteBook 820 G2'
|
@@ -943,16 +982,16 @@ Apple:
|
|
943 |
- regex: '(?:Apple-|.+_)?iPad6[C,_](?:11|12)'
|
944 |
model: 'iPad 5 9.7'
|
945 |
device: 'tablet'
|
946 |
-
- regex: '(?:Apple-|.+_)?iPad7[C,_][12]'
|
947 |
model: 'iPad Pro 2 12.9'
|
948 |
device: 'tablet'
|
949 |
-
- regex: '(?:Apple-|.+_)?iPad7[C,_][34]'
|
950 |
model: 'iPad Pro 10.5'
|
951 |
device: 'tablet'
|
952 |
-
- regex: '(?:Apple-|.+_)?iPad7[C,_][56]'
|
953 |
model: 'iPad 6 9.7'
|
954 |
device: 'tablet'
|
955 |
-
- regex: '(?:Apple-|.+_)?iPad7[C,_](?:11|12)'
|
956 |
model: 'iPad 7 10.2'
|
957 |
device: 'tablet'
|
958 |
- regex: '(?:Apple-|.+_)?iPad8[C,_](?:9|10)'
|
@@ -1046,6 +1085,14 @@ MicroMax:
|
|
1046 |
model: 'Infinity N11'
|
1047 |
- regex: 'N8301'
|
1048 |
model: 'Infinity N12'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1049 |
|
1050 |
- regex: 'MicroMax(?:[ \-\_])?(X291|X246|X252|X458|X312)'
|
1051 |
model: '$1'
|
@@ -1107,7 +1154,7 @@ Acteck:
|
|
1107 |
|
1108 |
# Alba
|
1109 |
Alba:
|
1110 |
-
regex: 'Alba ?(?:57|4|10 TABLET|(?:
|
1111 |
device: 'smartphone'
|
1112 |
models:
|
1113 |
- regex: 'Alba 57'
|
@@ -1117,7 +1164,7 @@ Alba:
|
|
1117 |
- regex: '10 TABLET'
|
1118 |
device: 'tablet'
|
1119 |
model: '10 Tablet'
|
1120 |
-
- regex: 'Alba((?:
|
1121 |
device: 'tablet'
|
1122 |
model: '$1'
|
1123 |
|
@@ -1420,11 +1467,15 @@ Advance:
|
|
1420 |
- regex: 'Hollogram ([^;/)]+)(?: Build|[;)])'
|
1421 |
model: 'Hollogram $1'
|
1422 |
|
1423 |
-
# AGM
|
1424 |
AGM:
|
1425 |
regex: 'AGM ([^/;)]+)(?: Build|[;)])'
|
1426 |
device: 'smartphone'
|
1427 |
-
|
|
|
|
|
|
|
|
|
1428 |
|
1429 |
# Airness
|
1430 |
Airness:
|
@@ -1491,7 +1542,7 @@ Arian Space:
|
|
1491 |
|
1492 |
# Alcatel (alcatelmobile.com)
|
1493 |
Alcatel:
|
1494 |
-
regex: 'Alcatel|Alc(?!or )[a-z0-9]+|One[ _]?Touch|idol3|TIMXL|(?:(?:4003[AJ]|4009[ADEFIKMSX]|4013[DEJKMX]|4014[ADEKMX]|4015[ADNTX]|4016[ADX]|4017[ADEFSX]|4018[ADEFMX]|4024[EDX]|4027[ADNX]|4028[AEJS]|4032[ADEX]|4034[ADEFGXTL]|4035[ADXY]|4045[ADEX]|4047[ADFGNX]|4049[DEGMX]|4060[SW]|A466BG|A621BL|4114E|4087U|5001[ADJTU]|5002[ADFH]|5003[ADGU]|5006D|5007[AU]|5008[ADUYT]|5009[AD]|5010[DEGSUX]|5011A|5012[DFG]|5015[ADEX]|5016[AXJ]|5017[ABDEOX]|5019D|5022[EDX]|5023[EF]|5024[ADJF]|5025[DEG]|5026[ADJ]|5027B|5028[AYD]|5029[EYD]|5030[DE]|5032W|5033[AEFXDJGMOTXYQS]|5034D|5036D|5038[ADEX]|5039[DY]|5041[CD]|5042[ADEFGWXT]|5044[ADGIKOPSTY]|5045[ADFGIJTXY]|5046[ADGIJSTUY]|5047[DIUY]|5048[AYUI]|5049[EGSWZ]|5050[ASXY]|5051[ADEJMTWX]|5052[ADY]|5053[ADKY]|5054[ADNSTWX]|5056[ADEGIJMNTUWX]|5057M|5058[AIY]|5059[ADJXYZIST]|5060[ADJ]|5061[KU]|5065[ADNWX]|5070D|5080[ADFQUX]|5085[ABCDGHIJNOQY]|5086[ADY]|5090[AIY]|5095[IKY]|5098[OS]|5099[ADYUI]|5116J|5145A|6016[ADEX]|6036[AXY]|6037[BKY]|6039[AHJKY]|6042D|6043[AD]|6044D|6045[BFIKOYX]|6050[AFY]|6055[ABDHIKPUYZ]|6058[ADX]|6060[SX]|6062W|6070K|7040[ADEFKRT]|7041[DX]|7042A|7043[AEKY]|7044[AX]|7045Y|7048[ASWX]|7053D|7055A|7070X|7071[ADX]|8030Y|8050[DEGX]|8063|8088[XQM]|9001[DIX]|9002X|9003[AX]|9024O|9005X|9026X|9007[ATX]|9008[ADIJNTUX]|9009G|9010X|9020A|9022X|9027[
|
1495 |
device: 'smartphone'
|
1496 |
models:
|
1497 |
- regex: '4087U'
|
@@ -1562,7 +1613,7 @@ Alcatel:
|
|
1562 |
model: 'One Touch Astro'
|
1563 |
- regex: '5027B'
|
1564 |
model: 'One Touch Dawn'
|
1565 |
-
- regex: '5024[ADF]|5028Y'
|
1566 |
model: '1S'
|
1567 |
- regex: '7071[ADX]'
|
1568 |
model: 'A7 XL'
|
@@ -1699,7 +1750,7 @@ Alcatel:
|
|
1699 |
- regex: '9203A'
|
1700 |
model: 'A3 7" 3G'
|
1701 |
device: 'tablet'
|
1702 |
-
- regex: '9027[
|
1703 |
model: '3T 8.0"'
|
1704 |
device: 'tablet'
|
1705 |
- regex: '9026X'
|
@@ -1740,7 +1791,7 @@ Alcatel:
|
|
1740 |
- regex: '9024O'
|
1741 |
model: 'One Touch Pixi 5'
|
1742 |
device: 'tablet'
|
1743 |
-
- regex: '
|
1744 |
model: 'One Touch Pixi 7'
|
1745 |
device: 'tablet'
|
1746 |
- regex: 'I213'
|
@@ -1868,6 +1919,9 @@ Alcatel:
|
|
1868 |
- regex: '9029Z'
|
1869 |
model: 'Joy Tab'
|
1870 |
device: 'tablet'
|
|
|
|
|
|
|
1871 |
- regex: 'Alcatel UP'
|
1872 |
model: ''
|
1873 |
- regex: '(?:ALCATEL_)?A383G'
|
@@ -2054,7 +2108,7 @@ Allview:
|
|
2054 |
|
2055 |
# Allwinner
|
2056 |
Allwinner:
|
2057 |
-
regex: '(?:QUAD-CORE (?:A64 p3|A33 y3|T3 K2001M)|ZY-07B|UltraOcta-T8|OCTA-CORE T8)(?:[);/ ]|$)'
|
2058 |
device: 'tablet'
|
2059 |
models:
|
2060 |
- regex: 'QUAD-CORE A64 p3'
|
@@ -2072,6 +2126,12 @@ Allwinner:
|
|
2072 |
- regex: 'OCTA-CORE T8'
|
2073 |
device: 'car browser'
|
2074 |
model: 'OCTA-CORE T8'
|
|
|
|
|
|
|
|
|
|
|
|
|
2075 |
|
2076 |
# altron
|
2077 |
altron:
|
@@ -2200,9 +2260,7 @@ Archos:
|
|
2200 |
- regex: 'Archos ((?:[789]|10)[0-9]?[a-z]* ?(?:G9|G10|Helium|Titanium|Cobalt|Platinum|Xenon|Carbon|Neon|XS|IT)[^/;]*) Build'
|
2201 |
device: 'tablet'
|
2202 |
model: '$1'
|
2203 |
-
- regex: '(?:YL-)?Archos ([
|
2204 |
-
model: '$1'
|
2205 |
-
- regex: '(?:YL-)?Archos ([a-z0-9]+)'
|
2206 |
model: '$1'
|
2207 |
|
2208 |
# Axxion
|
@@ -2373,7 +2431,7 @@ Assistant:
|
|
2373 |
|
2374 |
# Ark (Ark Electronic Technology)
|
2375 |
Ark:
|
2376 |
-
regex: '(ARK[_ -])?Benefit[_ -]([^/;]*)(?: Build|\))|EDGE A5HD|Elf_S8|ICON (R40\+|R45)|
|
2377 |
device: 'smartphone'
|
2378 |
models:
|
2379 |
- regex: '(?:ARK[_ -])?Benefit[_ -]([^/;]*)(?: Build|\))'
|
@@ -2390,6 +2448,8 @@ Ark:
|
|
2390 |
model: 'Wizard $1'
|
2391 |
- regex: 'Elf_S8(?:[);/ ]|$)'
|
2392 |
model: 'Elf S8'
|
|
|
|
|
2393 |
|
2394 |
# Garmin-Asus
|
2395 |
Garmin-Asus:
|
@@ -2405,7 +2465,7 @@ Garmin-Asus:
|
|
2405 |
|
2406 |
# Asus
|
2407 |
Asus:
|
2408 |
-
regex: 'Asus|Transformer|ZenFone Max|TF300T|Slider SL101|PadFone|ME302(?:C|KL)|ME301T|ME371MG|ME17(?:1|2V|3X)|(?:K0[01][0-9a-z]|P(?:00[18ACIL]|01[MTVWYZ]|01MA|01T_1|02[13478])(?: Build|\))|X015D|X018D|X003|X00[7ABT]D|Z00D|Z00[MTY]D|Z01[7FGHKMR]D)(?:[);/ ]|$)|G55[023]KL|ZB(631|602|633|55[135]|50[01])KL|ZC(55[134]|520|600)KL|ZA550KL|ZE(5[02]0|620|55[2345])KL|ZD55[23]KL|ZS6(?:61|7[01])KS|ZS(6[0236]0|55[10])KL|ZB(500KG|601KL)|MeMo Pad FHD 10 LTE|Z00[SV]D'
|
2409 |
device: 'smartphone'
|
2410 |
models:
|
2411 |
# explicit tablet models
|
@@ -2421,7 +2481,7 @@ Asus:
|
|
2421 |
- regex: 'ME302C(?:[);/ ]|$)'
|
2422 |
model: 'MeMO Pad FHD 10'
|
2423 |
device: 'tablet'
|
2424 |
-
- regex: '(ME302KL|MeMo Pad FHD 10 LTE)(?:[);/ ]|$)'
|
2425 |
model: 'MeMO Pad FHD 10 LTE'
|
2426 |
device: 'tablet'
|
2427 |
- regex: 'ME301T(?:[);/ ]|$)'
|
@@ -2433,7 +2493,7 @@ Asus:
|
|
2433 |
- regex: 'X Pad 10 LTE(?:[);/ ]|$)'
|
2434 |
model: 'X Pad 10 LTE'
|
2435 |
device: 'tablet'
|
2436 |
-
- regex: '(?:K01[
|
2437 |
model: 'MeMO Pad 7'
|
2438 |
device: 'tablet'
|
2439 |
- regex: 'K01E(?:[);/ ]|$)'
|
@@ -2442,7 +2502,7 @@ Asus:
|
|
2442 |
- regex: 'K00U|ME173X(?:[);/ ]|$)'
|
2443 |
model: 'MeMO Pad HD 7'
|
2444 |
device: 'tablet'
|
2445 |
-
- regex: '(?:
|
2446 |
model: 'MeMO Pad 8'
|
2447 |
device: 'tablet'
|
2448 |
- regex: 'K014(?:[);/ ]|$)'
|
@@ -2472,7 +2532,7 @@ Asus:
|
|
2472 |
- regex: 'Slider SL101'
|
2473 |
model: 'Eee Pad Slider SL101'
|
2474 |
device: 'tablet'
|
2475 |
-
- regex: 'P01[YZ]'
|
2476 |
model: 'ZenPad C 7.0'
|
2477 |
device: 'tablet'
|
2478 |
- regex: 'P008 Build'
|
@@ -2490,9 +2550,12 @@ Asus:
|
|
2490 |
- regex: '(?:P024|P00A)(?:[);/ ]|$)'
|
2491 |
model: 'ZenPad 8.0'
|
2492 |
device: 'tablet'
|
2493 |
-
- regex: 'P01MA(?:
|
2494 |
model: 'ZenPad S 8.0'
|
2495 |
device: 'tablet'
|
|
|
|
|
|
|
2496 |
- regex: 'P027'
|
2497 |
model: 'ZenPad 3S 10'
|
2498 |
device: 'tablet'
|
@@ -2516,7 +2579,7 @@ Asus:
|
|
2516 |
- regex: 'K00G(?:[);/ ]|$)'
|
2517 |
model: 'Fonepad Note 6'
|
2518 |
device: 'phablet'
|
2519 |
-
- regex: '(?:
|
2520 |
model: 'Fonepad 7'
|
2521 |
device: 'phablet'
|
2522 |
- regex: 'K00Z(?:[);/ ]|$)'
|
@@ -2609,7 +2672,7 @@ Asus:
|
|
2609 |
model: 'ZenFone 3 Max'
|
2610 |
- regex: '(?:ASUS_)?(X008)'
|
2611 |
model: 'ZenFone 3 Pegasus'
|
2612 |
-
- regex: '(?:ASUS_)?(ZE553KL|
|
2613 |
model: 'ZenFone 3 Zoom'
|
2614 |
- regex: '(?:ASUS_)?ZS550KL'
|
2615 |
model: 'ZenFone 3 Deluxe'
|
@@ -2617,7 +2680,7 @@ Asus:
|
|
2617 |
model: 'ZenFone Selfie'
|
2618 |
- regex: '(?:ASUS_)?(Z016[DS]|Z01FD)'
|
2619 |
model: 'ZenFone 3 Deluxe'
|
2620 |
-
- regex: '(?:ASUS_)?(
|
2621 |
model: 'ZenFone 3'
|
2622 |
- regex: '(?:ASUS_)?Z01B[DS]|ZC551KL'
|
2623 |
model: 'ZenFone 3 Laser'
|
@@ -2689,8 +2752,8 @@ AVH:
|
|
2689 |
regex: 'Excer[ _]'
|
2690 |
device: 'tablet'
|
2691 |
models:
|
2692 |
-
- regex: 'Excer[ _]G5.
|
2693 |
-
model: 'Excer G5
|
2694 |
- regex: 'Excer[ _]G5'
|
2695 |
model: 'Excer G5'
|
2696 |
- regex: 'Excer[ _]10[ _]PRO'
|
@@ -2772,12 +2835,12 @@ Bitel:
|
|
2772 |
|
2773 |
# Blu
|
2774 |
Blu:
|
2775 |
-
regex: 'BLU[ _]|(?:blu|Dash)[ _]([^/;)]+)(?: Build|[;)])|(?:Studio[ _](5.0K|5.5|View XL|Mega|C 8\+8|[CGM][ _]HD|[CGX]|SELFIE|Selfie LTE|Touch|M5 Plus|J[1258]|X8 HD)|Advance (4.0 ?[LM]|5.[02](?: HD)?|A4|L[45])|ENERGY (DIAMOND|XL)|Energy X 2|LIFE XL|B110DL|Dash (?:X[2L]|L3)|PURE (?:X[LR]|MINI)|Life One X2|G90(?: PRO)?|Grand M3|GRAND (?:5.5 HD|XL LTE)|R1 (?:HD|PLUS)|Tank Xtreme [45].0|Tank Xtreme Pro|Touchbook M7 Pro|DASH X PLUS|C[456] 2019|BOLD N1|B130DL|Vivo 5 Mini)(?:[);/ ]|$)'
|
2776 |
device: 'smartphone'
|
2777 |
models:
|
2778 |
- regex: 'Advance (4.0 ?[LM]|4.0|5.[02](?: HD)?|A4|L[54])'
|
2779 |
model: 'Advance $1'
|
2780 |
-
- regex: '(?:BLU[_ ])?Studio[ _](5.0 C|5.5|View XL|Mega|C 8\+8|[CG][ _]HD|C|G|Touch|M HD|M5 Plus|J[1258]|X8 HD|X5|XL|X)(?:[);/ ]|$)'
|
2781 |
model: 'Studio $1'
|
2782 |
- regex: '(?:BLU[_ ])?Studio[ _]5.0 ?K(?:[);/ ]|$)'
|
2783 |
model: 'Studio 5.0 K'
|
@@ -2859,6 +2922,8 @@ Blu:
|
|
2859 |
model: 'Vivo Air LTE'
|
2860 |
- regex: 'Touchbook G7'
|
2861 |
model: 'Touchbook G7'
|
|
|
|
|
2862 |
- regex: '(?:BLU[_ ])?VIVO[ _]SELFIE'
|
2863 |
model: 'Vivo Selfie'
|
2864 |
- regex: '(?:BLU[_ ])?Vivo 5 Mini'
|
@@ -2890,7 +2955,7 @@ Bluegood:
|
|
2890 |
|
2891 |
# Blackview
|
2892 |
Blackview:
|
2893 |
-
regex: 'Blackview|(BV([24-9]000|[46]900|(5[1589]|9[15689])00|6[
|
2894 |
device: 'smartphone'
|
2895 |
models:
|
2896 |
- regex: 'A60Pro\)'
|
@@ -2899,22 +2964,20 @@ Blackview:
|
|
2899 |
model: 'A60'
|
2900 |
- regex: 'A80Pro(?:[);/ ]|$)'
|
2901 |
model: 'A80 Pro'
|
2902 |
-
- regex: 'A
|
2903 |
-
model: '
|
2904 |
- regex: '(BV6000S)'
|
2905 |
model: '$1'
|
2906 |
-
- regex: '(
|
2907 |
model: '$1 Pro'
|
2908 |
- regex: 'Blackview (A[78]|E7S)'
|
2909 |
model: '$1'
|
2910 |
- regex: 'BV9000Pro-F'
|
2911 |
model: 'BV9000 Pro F'
|
2912 |
-
- regex: '(BV([48]000|9[56]00|6[83]00))Pro'
|
2913 |
-
model: '$1 Pro'
|
2914 |
- regex: '(BV6[13]00)(?:[);/ ]|$)'
|
2915 |
model: '$1'
|
2916 |
device: 'phablet'
|
2917 |
-
- regex: '(BV([24-9]000|
|
2918 |
model: '$1'
|
2919 |
- regex: '(P10000(?:[ _](?:PRO))?)'
|
2920 |
model: '$1'
|
@@ -2923,16 +2986,16 @@ Blackview:
|
|
2923 |
- regex: '(Alife[ _][PS]1|DM550|Heatwave)'
|
2924 |
model: '$1'
|
2925 |
|
2926 |
-
# Bluboo
|
2927 |
Bluboo:
|
2928 |
-
regex: 'Bluboo|
|
2929 |
device: 'smartphone'
|
2930 |
models:
|
2931 |
- regex: 'Maya Build'
|
2932 |
model: 'Maya'
|
2933 |
- regex: 'Xfire2'
|
2934 |
model: 'Xfire 2'
|
2935 |
-
- regex: 'Picasso 4G'
|
2936 |
model: 'Picasso 4G'
|
2937 |
- regex: 'Xfire'
|
2938 |
model: 'Xfire'
|
@@ -3038,17 +3101,17 @@ Brondi:
|
|
3038 |
|
3039 |
# VGO TEL (vgotel.com)
|
3040 |
VGO TEL:
|
3041 |
-
regex: '(?:Venture V(?:[278]|12)|Ocean[_ ][689]|Ocean9L)(?:[);/ ]|$)'
|
3042 |
device: 'smartphone'
|
3043 |
models:
|
3044 |
-
- regex: 'Venture V([278]|
|
3045 |
model: 'Venture V$1'
|
3046 |
- regex: 'Ocean[_ ]?([689]|9L)(?:[);/ ]|$)'
|
3047 |
model: 'Ocean $1'
|
3048 |
|
3049 |
# Vivo (vivo.com.cn, vivo.com)
|
3050 |
Vivo:
|
3051 |
-
regex: '((?:VIV-|BBG-)?(?<!FBCR/)vivo(?!(?:Browser)))|(?:V1730(D[AT]|GA)|V18(18CA|01A0|13B[AT]|18T|09[AT]|1[346][AT]|[13]8[AT]|14A|24[B]?A|2[19][AT]|3[12][AT]|36[AT])|V1731CA|V1732[AT]|V1818CT|V19[01]1[AT]|V1932[AT]|V191[3469][AT]|V192[1348]A|V193[04]A|V194[15]A|V1938CT|V1955A|V1938T|V1730EA|V19[26]2A|V196[35]A|V198[16]A|V1936A[L]?|V19[59]0A|V200[125]A|1819|V201[12]A|V202[0345]C?A|V202[235-9]|
|
3052 |
device: 'smartphone'
|
3053 |
models:
|
3054 |
- regex: 'V1824[B]?A(?:[);/ ]|$)'
|
@@ -3069,14 +3132,22 @@ Vivo:
|
|
3069 |
model: 'iQOO Neo 3'
|
3070 |
- regex: 'V1936A[L]?(?:[);/ ]|$)'
|
3071 |
model: 'iQOO Neo 855'
|
|
|
|
|
3072 |
- regex: 'V1986A(?:[);/ ]|$)'
|
3073 |
model: 'iQOO Z1'
|
3074 |
- regex: 'V2012A(?:[);/ ]|$)'
|
3075 |
model: 'iQOO Z1x'
|
|
|
|
|
3076 |
- regex: 'V1919A(?:[);/ ]|$)'
|
3077 |
model: 'iQOO Z5x'
|
3078 |
- regex: 'V2023A(?:[);/ ]|$)'
|
3079 |
model: 'iQOO U1'
|
|
|
|
|
|
|
|
|
3080 |
- regex: 'V2024A(?:[);/ ]|$)'
|
3081 |
model: 'iQOO 5'
|
3082 |
- regex: 'V2025A(?:[);/ ]|$)'
|
@@ -3085,6 +3156,8 @@ Vivo:
|
|
3085 |
model: 'V20'
|
3086 |
- regex: 'V2040(?:[);/ ]|$)'
|
3087 |
model: 'V20 (2021)'
|
|
|
|
|
3088 |
- regex: 'vivo 1805(?:[);/ ]|$)'
|
3089 |
model: 'Nex'
|
3090 |
- regex: 'V1923A(?:[);/ ]|$)'
|
@@ -3107,6 +3180,14 @@ Vivo:
|
|
3107 |
model: 'S6 5G'
|
3108 |
- regex: 'V2020C?A(?:[);/ ]|$)'
|
3109 |
model: 'S7'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3110 |
- regex: 'V1941A(?:[);/ ]|$)'
|
3111 |
model: 'U3'
|
3112 |
- regex: 'V1928A(?:[);/ ]|$)'
|
@@ -3119,8 +3200,12 @@ Vivo:
|
|
3119 |
model: 'V15'
|
3120 |
- regex: 'vivo 1818(?:[);/ ]|$)'
|
3121 |
model: 'V15 Pro'
|
3122 |
-
- regex: 'vivo
|
3123 |
model: 'V17 Pro'
|
|
|
|
|
|
|
|
|
3124 |
- regex: 'V2022(?:[);/ ]|$)'
|
3125 |
model: 'V20 SE'
|
3126 |
- regex: '(?:VIV-|BBG-)?vivo[ _]1601(?:[);/ ]|$)'
|
@@ -3139,12 +3224,18 @@ Vivo:
|
|
3139 |
model: 'V9'
|
3140 |
- regex: 'vivo 1727(?:[);/ ]|$)'
|
3141 |
model: 'V9 Youth'
|
|
|
|
|
|
|
|
|
3142 |
- regex: 'vivo 1721(?:[);/ ]|$)'
|
3143 |
model: 'X20'
|
3144 |
- regex: 'X20Plus(?:[);/ ]|$)'
|
3145 |
model: 'X20 Plus'
|
3146 |
- regex: 'vivo 1725(?:[);/ ]|$)'
|
3147 |
model: 'X21'
|
|
|
|
|
3148 |
- regex: 'V1814[AT](?:[);/ ]|$)'
|
3149 |
model: 'X21S'
|
3150 |
- regex: 'V1809[AT](?:[);/ ]|$)'
|
@@ -3165,18 +3256,30 @@ Vivo:
|
|
3165 |
model: 'X50 Pro'
|
3166 |
- regex: '(?:V2011A|X50 Pro\+)(?:[);/ ]|$)'
|
3167 |
model: 'X50 Pro Plus'
|
|
|
|
|
|
|
|
|
|
|
|
|
3168 |
- regex: 'X9Plus(?:[);/ ]|$)'
|
3169 |
model: 'X9 Plus'
|
3170 |
- regex: 'vivo 1902(?:[);/ ]|$)'
|
3171 |
model: 'Y17'
|
|
|
|
|
3172 |
- regex: 'vivo 1915(?:[);/ ]|$)'
|
3173 |
model: 'Y19'
|
3174 |
- regex: 'V202[79](?:[);/ ]|$)'
|
3175 |
model: 'Y20'
|
3176 |
- regex: 'V2028(?:[);/ ]|$)'
|
3177 |
model: 'Y11s'
|
|
|
|
|
3178 |
- regex: 'V2043(?:[);/ ]|$)'
|
3179 |
model: 'Y20 (2021)'
|
|
|
|
|
3180 |
- regex: 'V2032(?:[);/ ]|$)'
|
3181 |
model: 'Y20i'
|
3182 |
- regex: 'V2023(?:[);/ ]|$)'
|
@@ -3185,8 +3288,16 @@ Vivo:
|
|
3185 |
model: 'Y3'
|
3186 |
- regex: 'V1930A(?:[);/ ]|$)'
|
3187 |
model: 'Y3 Standard'
|
|
|
|
|
|
|
|
|
|
|
|
|
3188 |
- regex: 'V2036(?:[);/ ]|$)'
|
3189 |
model: 'Y31'
|
|
|
|
|
3190 |
- regex: 'V1934A(?:[);/ ]|$)'
|
3191 |
model: 'Y5s'
|
3192 |
- regex: 'V1965A(?:[);/ ]|$)'
|
@@ -3195,6 +3306,8 @@ Vivo:
|
|
3195 |
model: 'Y51'
|
3196 |
- regex: 'V2054A(?:[);/ ]|$)'
|
3197 |
model: 'Y31s'
|
|
|
|
|
3198 |
- regex: 'vivo 1606(?:[);/ ]|$)'
|
3199 |
model: 'Y53i'
|
3200 |
- regex: 'vivo 1603(?:[);/ ]|$)'
|
@@ -3207,12 +3320,16 @@ Vivo:
|
|
3207 |
model: 'Y69'
|
3208 |
- regex: 'V2002A(?:[);/ ]|$)'
|
3209 |
model: 'Y70s'
|
|
|
|
|
3210 |
- regex: 'vivo 1724(?:[);/ ]|$)'
|
3211 |
model: 'Y71'
|
3212 |
- regex: 'vivo 1801(?:[);/ ]|$)'
|
3213 |
model: 'Y71i'
|
3214 |
- regex: 'V1731CA(?:[);/ ]|$)'
|
3215 |
model: 'Y73'
|
|
|
|
|
3216 |
- regex: 'V1913[AT](?:[);/ ]|$)'
|
3217 |
model: 'Y7s'
|
3218 |
- regex: 'vivo 180([38]|8i)(?:[);/ ]|$)'
|
@@ -3225,6 +3342,8 @@ Vivo:
|
|
3225 |
model: 'Y83 Pro'
|
3226 |
- regex: 'V1730EA(?:[);/ ]|$)'
|
3227 |
model: 'Y89'
|
|
|
|
|
3228 |
- regex: 'vivo 181[17](?:[);/ ]|$)'
|
3229 |
model: 'Y91'
|
3230 |
- regex: 'V1945A(?:[);/ ]|$)'
|
@@ -3303,11 +3422,9 @@ Beeline:
|
|
3303 |
- regex: 'Tab'
|
3304 |
model: 'Tab'
|
3305 |
device: 'tablet'
|
3306 |
-
- regex: '
|
3307 |
-
model: '
|
3308 |
-
- regex: '
|
3309 |
-
model: 'Smart 2'
|
3310 |
-
- regex: 'Smart ([0-9])'
|
3311 |
model: 'Smart $1'
|
3312 |
- regex: 'Smart Dual'
|
3313 |
model: 'Smart Dual'
|
@@ -3330,11 +3447,11 @@ BenQ-Siemens:
|
|
3330 |
|
3331 |
# BenQ
|
3332 |
BenQ:
|
3333 |
-
regex: 'BENQ(?:[ \-])?([a-z0-9]+)|F52_09(?:[);/ ]|$)'
|
3334 |
device: 'feature phone'
|
3335 |
models:
|
3336 |
-
- regex: '
|
3337 |
-
model: '
|
3338 |
- regex: 'BENQ(?:[ \-])?([a-z0-9]+)'
|
3339 |
model: '$1'
|
3340 |
|
@@ -3868,12 +3985,12 @@ Casio:
|
|
3868 |
|
3869 |
# Casper
|
3870 |
Casper:
|
3871 |
-
regex: 'CASPER[_ ]|VIA[- _](T7D|A[34]|E3|F[123]|
|
3872 |
device: 'smartphone'
|
3873 |
models:
|
3874 |
- regex: '(?:CASPER[_ ])?VIA_A1_Plus(?:_64)?'
|
3875 |
model: 'VIA A1 Plus'
|
3876 |
-
- regex: '(?:CASPER[_ ])?VIA[_ ](G1_Plus|
|
3877 |
model: 'VIA $1'
|
3878 |
- regex: 'CASPER_VIA_E1c'
|
3879 |
model: 'VIA E1C'
|
@@ -3924,14 +4041,27 @@ Carrefour:
|
|
3924 |
|
3925 |
# Celkon
|
3926 |
Celkon:
|
3927 |
-
regex: 'Celkon|Millennia Hero'
|
3928 |
device: 'smartphone'
|
3929 |
models:
|
3930 |
- regex: 'Celkon[ _*](C[78]20)'
|
3931 |
model: '$1'
|
3932 |
device: 'tablet'
|
|
|
|
|
|
|
3933 |
- regex: 'Millennia Hero'
|
3934 |
model: 'Millennia Hero'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3935 |
- regex: 'Celkon[ _*](CT[^;/]+) Build'
|
3936 |
model: '$1'
|
3937 |
device: 'tablet'
|
@@ -3957,7 +4087,7 @@ Changhong:
|
|
3957 |
|
3958 |
# Cherry Mobile (cherrymobile.com)
|
3959 |
'Cherry Mobile':
|
3960 |
-
regex: 'Cherry|Superion S1 DTV|Flare([ _])?(2X|4|A[123]|J[123568]|P[13]|S[4-8]|X2|Y[367]|S Play|HD|LITE|XL|X_V2|Y3s|Tab)(?:[ _](?:Pro|Plus|Max|LTE))?|Fusion Bolt|Omega[_ ](?:Icon 2|Icon Lite 2|lite[_ ][43][Cs]?|HD [45]|HD_Duo)|Spin Max 2|Selfie_Two'
|
3961 |
device: 'smartphone'
|
3962 |
models:
|
3963 |
- regex: '(Flare2X)'
|
@@ -3986,8 +4116,10 @@ Changhong:
|
|
3986 |
model: 'Flare X V2'
|
3987 |
- regex: 'Flare[ _](A2|J3|P1|S[467])[ _]Lite'
|
3988 |
model: 'Flare $1 Lite'
|
3989 |
-
- regex: 'Flare[ _](J[12]|S[57]|Y3|J6)[ _]mini'
|
3990 |
model: 'Flare $1 Mini'
|
|
|
|
|
3991 |
- regex: 'Flare_J2_2018'
|
3992 |
model: 'Flare J2 (2018)'
|
3993 |
- regex: 'Flare S4 Max LTE'
|
@@ -3996,11 +4128,13 @@ Changhong:
|
|
3996 |
model: 'Flare $1 Max'
|
3997 |
- regex: 'FlareS5LiteDTV'
|
3998 |
model: 'Flare S5 Lite DTV'
|
3999 |
-
- regex: 'Flare[_ ]
|
4000 |
-
model: 'Flare
|
|
|
|
|
4001 |
- regex: 'FLARE S6 POWER'
|
4002 |
model: 'Flare S6 Power'
|
4003 |
-
- regex: 'Flare(?:[ _])?(
|
4004 |
model: 'Flare $1'
|
4005 |
- regex: 'OMEGA HD ([45])'
|
4006 |
model: 'Omega HD $1'
|
@@ -4078,7 +4212,7 @@ Artel:
|
|
4078 |
|
4079 |
# ComTrade Tesla
|
4080 |
ComTrade Tesla:
|
4081 |
-
regex: 'Tesla|Impulse 7.85 3G|Impulse 10.1 OCTA|Smartphone_6.1|SP(?:6.2|6.2_Lite)|TTL(?:713G|8)'
|
4082 |
device: 'smartphone'
|
4083 |
models:
|
4084 |
- regex: 'TeslaEvo5.0'
|
@@ -4271,7 +4405,7 @@ Condor:
|
|
4271 |
|
4272 |
# Coolpad
|
4273 |
Coolpad:
|
4274 |
-
regex: '(?:YL-)?Coolpad|(?:Cool_9S|1824-S0|8190Q|1831-A0|8676-[AM]01|CP8298_I00|CP3648A|CP8676_I0[23]|REVVLPLUS C3701A|VCR-[AI]0|C105-E0|C106-[79]| C106|MTS-T0|cp3705A[S]?|ORL-C0|DLS-E0|8298-M02|5560S)(?:[);/ ]|$)|(8295|5860S) Build'
|
4275 |
device: 'smartphone'
|
4276 |
models:
|
4277 |
- regex: 'VCR-[AI]0'
|
@@ -4297,6 +4431,8 @@ Coolpad:
|
|
4297 |
model: 'Cool 1'
|
4298 |
- regex: 'C105-E0(?:[);/ ]|$)'
|
4299 |
model: 'Cool S1'
|
|
|
|
|
4300 |
- regex: 'ORL-C0(?:[);/ ]|$)'
|
4301 |
model: 'Cool 9'
|
4302 |
- regex: 'Cool_9S(?:[);/ ]|$)'
|
@@ -4311,7 +4447,7 @@ Coolpad:
|
|
4311 |
model: 'Note 3 Plus'
|
4312 |
- regex: 'CP8298_I00(?:[);/ ]|$)'
|
4313 |
model: 'Note 3 Lite'
|
4314 |
-
- regex: '(8676-[AM]01|8298-M02)(?:[);/ ]|$)'
|
4315 |
model: '$1'
|
4316 |
- regex: '(?:YL-)?Coolpad[ _\-]?([^/;]+) Build'
|
4317 |
model: '$1'
|
@@ -4345,11 +4481,15 @@ Cosmote:
|
|
4345 |
|
4346 |
# Cricket
|
4347 |
Cricket:
|
4348 |
-
regex: 'Cricket-([a-z0-9]+)|U705AC(?:[);/ ]|$)'
|
4349 |
device: 'smartphone'
|
4350 |
models:
|
|
|
|
|
4351 |
- regex: 'U705AC'
|
4352 |
model: 'Ovation'
|
|
|
|
|
4353 |
- regex: 'Cricket-([a-z0-9]+)'
|
4354 |
device: 'feature phone'
|
4355 |
model: '$1'
|
@@ -4380,7 +4520,7 @@ Crosscall:
|
|
4380 |
|
4381 |
# AllDocube (alldocube.com)
|
4382 |
AllDocube:
|
4383 |
-
regex: '(?:T1001XS?|T1006S?|iPlay_[
|
4384 |
device: 'tablet'
|
4385 |
models:
|
4386 |
- regex: 'T1001XS(?:[);/ ]|$)'
|
@@ -4393,7 +4533,7 @@ AllDocube:
|
|
4393 |
model: 'M5X'
|
4394 |
- regex: 'U1006H?(?:[);/ ]|$)'
|
4395 |
model: 'iPlay 10 Pro 10.1"'
|
4396 |
-
- regex: 'iPlay_([
|
4397 |
model: 'iPlay $1'
|
4398 |
|
4399 |
# Cube (short name Alldocube)
|
@@ -4427,7 +4567,7 @@ Cube:
|
|
4427 |
|
4428 |
# CUBOT
|
4429 |
CUBOT:
|
4430 |
-
regex: 'CUBOT|
|
4431 |
device: 'smartphone'
|
4432 |
models:
|
4433 |
- regex: 'CHEETAH 2'
|
@@ -4444,6 +4584,8 @@ CUBOT:
|
|
4444 |
model: 'King Kong Mini'
|
4445 |
- regex: 'KING_KONG_3'
|
4446 |
model: 'King Kong 3'
|
|
|
|
|
4447 |
- regex: 'KING KONG CS'
|
4448 |
model: 'King Kong CS'
|
4449 |
- regex: 'KING KONG'
|
@@ -4466,6 +4608,8 @@ CUBOT:
|
|
4466 |
model: 'Note Plus'
|
4467 |
- regex: 'NOTE 20 PRO'
|
4468 |
model: 'Note 20 Pro'
|
|
|
|
|
4469 |
- regex: 'CUBOT[_ ]NOTE[_ ]S'
|
4470 |
model: 'Note S'
|
4471 |
- regex: 'CUBOT_NOVA'
|
@@ -4561,7 +4705,7 @@ Datsun:
|
|
4561 |
|
4562 |
# Danew
|
4563 |
Danew:
|
4564 |
-
regex: 'Dslide ?([^;/]+) Build|Konnect_?(?:402|50[246]|60[127])|GEODROID_A5'
|
4565 |
device: 'smartphone'
|
4566 |
models:
|
4567 |
- regex: 'Konnect_?(402|50[246]|60[127])'
|
@@ -4572,6 +4716,9 @@ Danew:
|
|
4572 |
- regex: 'GEODROID_A5'
|
4573 |
device: 'tablet'
|
4574 |
model: 'Geodroid A5'
|
|
|
|
|
|
|
4575 |
|
4576 |
# Denver Electronics (denver-electronics.com)
|
4577 |
Denver:
|
@@ -4593,10 +4740,10 @@ Dell:
|
|
4593 |
models:
|
4594 |
- regex: 'XCD35'
|
4595 |
model: 'XCD35'
|
4596 |
-
- regex: 'Venue (
|
4597 |
model: 'Venue $1'
|
4598 |
device: 'tablet'
|
4599 |
-
- regex: '(?:Dell )?Venue Build'
|
4600 |
model: 'Venue'
|
4601 |
- regex: 'Dell; Venue Pro'
|
4602 |
model: 'Venue Pro'
|
@@ -4631,12 +4778,12 @@ Desay:
|
|
4631 |
|
4632 |
# DEXP
|
4633 |
DEXP:
|
4634 |
-
regex: 'DEXP|(?:Ursus|Ixion)[ _]([^;/)]+)|H135[ _]Build|Larus_TV1|Ixion(?:ML4.7|ES250)|M150Storm|(?:SENIOR|F4[38]D8000K|VA[12]10|VA170|ML450|MS[56]50|BL[123]50|BS155|BS160|BS[1256]50|AL[12]40|AL[23]50|AS155|AS260|GS15[035]| (?:N280i|P380i|R110|BL160|B450|B340|A1[45]0|A340|AS160|GL[23]55|ES750))(?:[);/ ]|$)'
|
4635 |
device: 'smartphone'
|
4636 |
models:
|
4637 |
- regex: 'Ixion[_ ]([^;/]+)(?: Build|\))'
|
4638 |
model: 'Ixion $1'
|
4639 |
-
- regex: '(ML450|MS[56]50|ES750)(?:[);/ ]|$)'
|
4640 |
model: 'Ixion $1'
|
4641 |
- regex: 'IxionES250(?:[);/ ]|$)'
|
4642 |
model: 'Ixion ES250 Rage'
|
@@ -4654,14 +4801,14 @@ DEXP:
|
|
4654 |
model: '5.85" AS260'
|
4655 |
device: 'phablet'
|
4656 |
|
4657 |
-
- regex: 'Ursus ([^;/)]+)(?: Build
|
4658 |
model: 'Ursus $1'
|
4659 |
device: 'tablet'
|
4660 |
-
- regex: '(VA[21]10|VA170|R110|N280i|P380i)(?:[);/ ]|$)'
|
4661 |
model: 'Ursus $1'
|
4662 |
device: 'tablet'
|
4663 |
|
4664 |
-
- regex: ' (B450|B340|BL160|A340)(?:[);/ ]|$)'
|
4665 |
model: '$1'
|
4666 |
- regex: 'SENIOR(?:[);/ ]|$)'
|
4667 |
model: 'Senior'
|
@@ -4673,7 +4820,7 @@ DEXP:
|
|
4673 |
- regex: 'H135[ _]Build'
|
4674 |
model: 'Atlas'
|
4675 |
device: 'desktop'
|
4676 |
-
- regex: '(BL[123]50|BS155|BS160|BS[1256]50|AL[12]40|A1[45]0|GS15[035]|AS160|GL[23]55)(?:[);/ ]|$)'
|
4677 |
model: '$1'
|
4678 |
- regex: 'DEXP[ _]([^;/]+) Build'
|
4679 |
model: '$1'
|
@@ -4730,7 +4877,7 @@ Digiland:
|
|
4730 |
|
4731 |
# Digma
|
4732 |
Digma:
|
4733 |
-
regex: 'Digma[_ ]([^;/]+) Build|HIT HT707[10]MG|CITI (?:7 E401 4G|8 E400 4G|ATL 4G|Kids|Octa [178]0|1902 3G|10 E402|Z530 3G)|(CITI[_ ](?:[A-Z0-9]+)[_ ][34]G)[ _][TC][ST](606[32]ML|111[46]ML|11[459]4MG|1117PG|1207MG|1210MG|1195MG|1196ML|3001ML|4024PG|5009PL|5021ML|5026PL|500[67]PG|7052PG|706[56]MG|709[68]PL|7097MG|720[48]MG|7140ML|7141MG|7113PL|7193MG|820[69]MG|7153MG|8139ML|8143MG|8152ML|1050PL|8205PG|7203MG|106[24]ML|1115MG)|HIT 4G|HT7074ML|IDX5|(iDx10|iDx7)|MVM900H(?:WZ|C)|MVM908HCZ|(iDxD8 3G|iDxD10 3G|iDrQ10 3G|iDxD[45]|iDxQ5|iD[nx]D7(?:[_ ]3G)?)|PS604M|PT452E|LINX B510 3G LT5037MG|LINX A452 3G LT4030PG|LINX A453 3G LT4038PG|LINX A420 3G LS4019PG|LINX A450 3G LT4028PG|Linx A400 3G LT4001PG|Linx C500 3G LT5001PG|Linx PS474S|LS504[01]PL|LT40(47|54)MG|PS1043MG|LS405[01]MG|LS5053ML|LT5048MG|HT7071MG|LT5052ML|HT5035PG|HT4039PG|LT4049PG|NS6902QL|NS9797MG|TS7854M|TS1012E 3G|TT1004PG|TT702[045]MG|TT1002MG|TT7026MW|((?:Optima|Platina|Plane)[ _](?:[EM])?(?:[0-9\.ST]+|Prime)(?:[ _][43]G)?)|(VOX[ _](?:[0-9\.A-Z]+)[_ ][43]G)'
|
4734 |
device: 'smartphone'
|
4735 |
models:
|
4736 |
- regex: 'HIT(?: 3G)? HT707[10]MG'
|
@@ -4846,6 +4993,10 @@ Digma:
|
|
4846 |
- regex: 'Digma[_ ]([^;/]+) Build'
|
4847 |
model: '$1'
|
4848 |
device: 'tablet'
|
|
|
|
|
|
|
|
|
4849 |
|
4850 |
# DoCoMo
|
4851 |
DoCoMo:
|
@@ -4863,15 +5014,19 @@ DoCoMo:
|
|
4863 |
|
4864 |
# Doogee
|
4865 |
Doogee:
|
4866 |
-
regex: 'DOOGEE[ _-]|
|
4867 |
device: 'smartphone'
|
4868 |
models:
|
4869 |
- regex: '(?:Valencia2_)?Y100_Plus(?:[);/ ]|$)'
|
4870 |
model: 'Valencia2 Y100 Plus'
|
4871 |
- regex: 'Valencia2_Y100pro'
|
4872 |
model: 'Valencia2 Y100 Pro'
|
|
|
|
|
4873 |
- regex: 'LEO_(DG280)'
|
4874 |
model: 'Leo $1'
|
|
|
|
|
4875 |
- regex: '(BL[579]000|S90C)(?:[);/ ]|$)'
|
4876 |
model: '$1'
|
4877 |
- regex: 'X95Pro(?:[);/ ]|$)'
|
@@ -4962,14 +5117,17 @@ DNS:
|
|
4962 |
- regex: 'DNS[ _\-]([^;/]+)(?: Build|[);])'
|
4963 |
model: '$1'
|
4964 |
|
4965 |
-
# E-Boda
|
4966 |
E-Boda:
|
4967 |
-
regex: 'E-Boda|Eclipse_(?:G400M|G500)'
|
4968 |
device: 'smartphone'
|
4969 |
models:
|
4970 |
- regex: 'E-Boda ((?:Revo|Izzycomm|Essential|Intelligence|Supreme)[^/;]+) Build'
|
4971 |
device: 'tablet'
|
4972 |
model: '$1'
|
|
|
|
|
|
|
4973 |
- regex: 'Eclipse_(G400M|G500)'
|
4974 |
model: 'Eclipse $1'
|
4975 |
- regex: 'E-Boda ([^/;]+) Build'
|
@@ -5028,11 +5186,13 @@ ECS:
|
|
5028 |
|
5029 |
# EE
|
5030 |
EE:
|
5031 |
-
regex: 'Hawk_from_EE'
|
5032 |
device: 'smartphone'
|
5033 |
models:
|
5034 |
- regex: 'Hawk_from_EE'
|
5035 |
model: 'Hawk'
|
|
|
|
|
5036 |
|
5037 |
# EKT
|
5038 |
EKT:
|
@@ -5057,11 +5217,15 @@ Eks Mobility:
|
|
5057 |
|
5058 |
# Elephone
|
5059 |
Elephone:
|
5060 |
-
regex: 'Elephone|P6000( ?Pro| ?Plus|\+| ?02| 5.0 01)?'
|
5061 |
device: 'smartphone'
|
5062 |
models:
|
5063 |
- regex: 'Elephone Trunk(?:[);/ ]|$)'
|
5064 |
model: 'Trunk'
|
|
|
|
|
|
|
|
|
5065 |
- regex: 'P6000(\+| ?Plus)(?:[);/ ]|$)'
|
5066 |
model: 'P6000 Plus'
|
5067 |
- regex: 'P6000 02(?:[);/ ]|$)'
|
@@ -5191,7 +5355,7 @@ Senseit:
|
|
5191 |
|
5192 |
# Sony & Sony Ericsson (combined as they are mixed up)
|
5193 |
Sony:
|
5194 |
-
regex: 'Sony(?: ?Ericsson)?|SGP|Xperia|(?:[4-9]0[12])SO|C1[569]0[45]|C2[01]0[45]|C230[45]|C530[236]|C550[23]|C6[56]0[236]|C6616|C68(?:0[26]|[34]3)|C69(?:0[236]|16|43)|D200[45]|D21(?:0[45]|14)|D22(?:0[236]|12|43)|D230[2356]|D240[36]|D25(?:02|33)|D510[236]|D530[36]|D5316|D5322|D5503|D58[03]3|D65(?:0[23]|43|63)|D66[03458]3|D66[14]6|D6708|E(?:20[0345]3|2006|210[45]|2115|2124|230[36]|2312|23[356]3|530[36]|53[3456]3|5506|55[356]3|56[46305][36]|58[02]3|65[35]3|66[0358]3|68[358]3)|I[34]312|I4332|F311[12356]|F331[13]|F321[12356]|F5[13]21|F5122|F813[12]|F833[12]|G312[135]|G311[26]|G322[136]|G3212|G331[123]|G3412|G3416|G342[136]|G823[12]|G834[123]|G8[14]4[12]|H(?:3113|3123|3133|3213|3223|3311|3321|4113|4133|4213|4233|4311|4331|4413|4433|82[167]6|83[12]4|8416|9436)|(?:WT|LT|SO|ST|SK|MK)[0-9]+[a-z]+[0-9]*(?: Build|\))|X?L39H|XM50[ht]|W960|portalmmm/2\.0 K|S3[69]h|SOG01|SOL2[2346]|SOV3[1-9]|SOV4[0-3]|X10[ia]v?|E1[05][ai]v?|MT[0-9]{2}[a-z]? Build|SO-0(?:[12]C|[345]D|[234]E|[1-5]F|[1-5]G|[1-4]H|[1-4]J|[1-5]K|1M|[1-3]L)|R800[aix]|J3173|J82[17]0|J9110|J92[16]0|J81[17]0|I[34]113|I3[12]23|I42[19]3|H9493|H8296|H8166|H4493|G2299|LiveWithWalkman|BRAVIA|SGP771|E3 Dual|
|
5195 |
device: 'smartphone'
|
5196 |
models:
|
5197 |
# SONY ERICSSON: explicit smartphone models
|
@@ -5333,6 +5497,8 @@ Sony:
|
|
5333 |
model: 'Xperia Ace'
|
5334 |
- regex: '(?:A001SO|XQ-A[TU]52|XQ-AU42|SO-41A|SOV43)(?:[);/ ]|$)'
|
5335 |
model: 'Xperia 10 II'
|
|
|
|
|
5336 |
- regex: '(?:Sony(?:Ericsson)?)?I(?:42[19]3|3223)'
|
5337 |
model: 'Xperia 10 Plus'
|
5338 |
- regex: '(?:Sony(?:Ericsson)?)?I4193'
|
@@ -5549,7 +5715,7 @@ Sony:
|
|
5549 |
model: 'Xperia XA2 Ultra'
|
5550 |
- regex: '(?:Sony(?:Ericsson)?)?G823[12]|SOV35|602SO|SO-03J'
|
5551 |
model: 'Xperia XZs'
|
5552 |
-
- regex: '(?:Sony(?:Ericsson)?)?G814[12]|SO-04[JK]'
|
5553 |
model: 'Xperia XZ Premium'
|
5554 |
- regex: '(?:Sony(?:Ericsson)?)?(?:H83[12]4|H82[17]6|SOV37|SO-03K|H8296|702SO)'
|
5555 |
model: 'Xperia XZ2'
|
@@ -5583,7 +5749,7 @@ Sony:
|
|
5583 |
model: 'Xperia X Performance Dual'
|
5584 |
|
5585 |
# SONY: explicit tablet models
|
5586 |
-
- regex: 'SGP(?:311|312|321)(?:[);/ ]|$)
|
5587 |
model: 'Xperia Tablet Z'
|
5588 |
device: 'tablet'
|
5589 |
- regex: 'SGP712(?:[);/ ]|$)'
|
@@ -5599,10 +5765,13 @@ Sony:
|
|
5599 |
model: 'Xperia Tablet S'
|
5600 |
device: 'tablet'
|
5601 |
|
5602 |
-
# SONY: Bravia
|
5603 |
- regex: '(?:BRAVIA )(2K GB ATV3|4K UR2|4K GB ATV3|4K GB|4K 2015|2015)(?:[);/ ]|$)'
|
5604 |
model: 'Bravia $1'
|
5605 |
device: 'tv'
|
|
|
|
|
|
|
5606 |
|
5607 |
- regex: 'NW-A100Series'
|
5608 |
model: 'Walkman A100'
|
@@ -5838,56 +6007,27 @@ Evolveo:
|
|
5838 |
- regex: 'EVOLVEO[ _]([^;/]*) Build'
|
5839 |
model: '$1'
|
5840 |
|
5841 |
-
#
|
5842 |
-
|
5843 |
-
regex: '
|
5844 |
-
device: '
|
5845 |
models:
|
5846 |
-
- regex: '
|
5847 |
-
model: '
|
5848 |
-
- regex: '
|
5849 |
-
model: '
|
5850 |
-
- regex: '
|
5851 |
-
model: '
|
5852 |
-
- regex: '
|
5853 |
-
|
5854 |
-
|
5855 |
-
|
5856 |
-
|
5857 |
-
model: '
|
5858 |
-
- regex: 'Surfer[ _]([0-9\.]+(?:[ _]3G)?)'
|
5859 |
-
model: 'Surfer $1'
|
5860 |
-
- regex: 'sQuad[ _]([0-9\.]+(?:[ _]3G)?)'
|
5861 |
-
model: 'sQuad $1'
|
5862 |
-
- regex: 'Onliner([1-3])'
|
5863 |
-
model: 'Onliner $1'
|
5864 |
-
- regex: 'Atlant(?:[);/ ]|$)'
|
5865 |
-
device: 'smartphone'
|
5866 |
-
model: 'Atlant'
|
5867 |
-
- regex: 'Indigo(?:[);/ ]|$)'
|
5868 |
-
device: 'smartphone'
|
5869 |
-
model: 'Indigo'
|
5870 |
-
- regex: 'Pulsar(?:[);/ ]|$)'
|
5871 |
-
device: 'smartphone'
|
5872 |
-
model: 'Pulsar'
|
5873 |
-
|
5874 |
-
- regex: '[\w]+-EXPLAY-FIN'
|
5875 |
-
device: 'feature phone'
|
5876 |
-
model: 'Fin'
|
5877 |
-
|
5878 |
-
- regex: 'Lagoon(?:[);/ ]|$)'
|
5879 |
-
model: 'Lagoon'
|
5880 |
-
- regex: 'Explay[ _-]([^;/]+)(?: Build|[;)])'
|
5881 |
-
model: '$1'
|
5882 |
-
- regex: 'RioPlay(?:[);/ ]|$)'
|
5883 |
-
device: 'smartphone'
|
5884 |
-
model: 'Rio Play'
|
5885 |
-
- regex: 'Leader'
|
5886 |
-
model: 'Leader'
|
5887 |
|
5888 |
# EvroMedia
|
5889 |
EvroMedia:
|
5890 |
-
regex: 'EVROMEDIA|Playpad[ _]|PLAY_PAD_PRO_XL'
|
5891 |
device: 'tablet'
|
5892 |
models:
|
5893 |
- regex: 'Playpad 3G GOO'
|
@@ -5900,6 +6040,8 @@ EvroMedia:
|
|
5900 |
model: 'Play Pad Pro XL'
|
5901 |
- regex: 'PlayPad 3GTab XL'
|
5902 |
model: 'Play Pad 3G Tab XL'
|
|
|
|
|
5903 |
# EKO
|
5904 |
EKO:
|
5905 |
regex: 'EKO'
|
@@ -6233,7 +6375,7 @@ Gigaset:
|
|
6233 |
|
6234 |
# Ginzzu
|
6235 |
Ginzzu:
|
6236 |
-
regex: 'GINZZU[_ ]|((?:RS(?:7[14]|81|9[67])D)|S5002|(?<!Wave Pro )S5021|S5230|S50[45]0|
|
6237 |
device: 'smartphone'
|
6238 |
models:
|
6239 |
- regex: 'GINZZU[_ ]?(S40[17]0|S4710|ST60[14]0|ST6120)'
|
@@ -6243,7 +6385,7 @@ Ginzzu:
|
|
6243 |
device: 'tablet'
|
6244 |
- regex: '(RS6[12]D) ULTIMATE'
|
6245 |
model: '$1 Ultimate'
|
6246 |
-
- regex: '(?:GINZZU[ _])?((?:RS(?:7[14]|81|9[4-7])D)|S50[45]0|S5002|S5021|S5230|
|
6247 |
model: '$1'
|
6248 |
|
6249 |
# Gionee
|
@@ -6284,16 +6426,16 @@ Grape:
|
|
6284 |
device: 'smartphone'
|
6285 |
model: 'GTM-5$1'
|
6286 |
|
6287 |
-
# Vizio
|
6288 |
Vizio:
|
6289 |
-
regex: 'Vizio|VAP430|VTAB1008'
|
6290 |
device: 'tv'
|
6291 |
models:
|
6292 |
- regex: 'VAP430'
|
6293 |
model: 'VAP430'
|
6294 |
-
- regex: 'VTAB1008'
|
6295 |
device: 'tablet'
|
6296 |
-
model: '
|
6297 |
|
6298 |
# GOCLEVER
|
6299 |
GOCLEVER:
|
@@ -6312,8 +6454,16 @@ GOCLEVER:
|
|
6312 |
- regex: 'TQ700N'
|
6313 |
model: 'QUANTUM 700N'
|
6314 |
device: 'tablet'
|
|
|
|
|
|
|
|
|
|
|
|
|
6315 |
- regex: 'Quantum2 500'
|
6316 |
model: 'Quantum 2 500'
|
|
|
|
|
6317 |
- regex: '((?:QUANTUM|ARIES|INSIGNIA|ORION|ELIPSO)[ _-]?[^;/]+)(?: Build|\))'
|
6318 |
model: '$1'
|
6319 |
- regex: 'GOCLEVER[ _-]TAB[ _-]?([^;/]+) Build'
|
@@ -6345,6 +6495,58 @@ GoMobile:
|
|
6345 |
- regex: 'GO([0-9]{3,4})'
|
6346 |
model: 'Go$1'
|
6347 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6348 |
# Gol Mobile (gol-mobile.com)
|
6349 |
Gol Mobile:
|
6350 |
regex: 'F10_PRIME'
|
@@ -6365,7 +6567,7 @@ Goly:
|
|
6365 |
|
6366 |
# Google
|
6367 |
Google:
|
6368 |
-
regex: 'Nexus|GoogleTV|Glass(?<!Browser)|CrKey[^a-z0-9]|Pixel(?: Build|\))|Pixel (?:XL|C|[2-5]|[2-4] XL)|Google 2XL|G011A'
|
6369 |
device: 'smartphone'
|
6370 |
models:
|
6371 |
- regex: 'Glass'
|
@@ -6380,12 +6582,17 @@ Google:
|
|
6380 |
- regex: '(Nexus (?:7|9|10))'
|
6381 |
device: 'tablet'
|
6382 |
model: '$1'
|
|
|
|
|
|
|
|
|
6383 |
- regex: 'CrKey[^a-z0-9]'
|
6384 |
model: 'Chromecast'
|
6385 |
device: 'tv'
|
6386 |
- regex: 'GoogleTV'
|
6387 |
device: 'tv'
|
6388 |
model: 'GoogleTV'
|
|
|
6389 |
- regex: 'Pixel(?: Build|\))'
|
6390 |
model: 'Pixel'
|
6391 |
- regex: 'Pixel XL'
|
@@ -6596,9 +6803,13 @@ Hisense:
|
|
6596 |
device: 'tv'
|
6597 |
model: '$1'
|
6598 |
|
6599 |
-
- regex: '(?:HS-)?Hisense ([^;/]+) Build'
|
|
|
|
|
|
|
|
|
6600 |
model: '$1'
|
6601 |
-
- regex: 'Hisense ([
|
6602 |
model: '$1'
|
6603 |
|
6604 |
# Hi-Level
|
@@ -6620,7 +6831,7 @@ Hoffmann:
|
|
6620 |
|
6621 |
# Homtom
|
6622 |
Homtom:
|
6623 |
-
regex: 'Homtom|(?:HT[0-9]{1,2}
|
6624 |
device: 'smartphone'
|
6625 |
models:
|
6626 |
- regex: '(?:Homtom[_ ])?HT ?([0-9]{1,2}(?: ?Pro)?)(?:[);/ ]|$)'
|
@@ -6675,7 +6886,7 @@ Minix:
|
|
6675 |
|
6676 |
# Huawei
|
6677 |
Huawei:
|
6678 |
-
regex: '(HW-)?(?:Huawei|MediaPad T1|Ideos|Honor[ _]?|(?:(?:AGS|AGS2|ALE|ALP|AMN|ANA|ANE|ARE|ARS|ASK|ATH|ATU|AUM|BAC|BAH[23]?|BG2|BGO|B[ZK]K|BKL|BL[ALN]|BND|BTV|CA[GMNZ]|CH[CM]|CHE[12]?|CLT|CMR|COL|COR|CPN|CRO|CRR|CUN|DIG|DLI|DRA|DUA|DUB|DUK|EDI|ELE|EML|EVA|EVR|FDR|FIG|FLA|FRD|FRL|GEM|GRA|HDN|HLK|HMA|Hol|HRY|HWI|H[36]0|INE|JAT|JEF|JDN|JDN2|JKM|JMM|JSN|KII|KIW|KNT|KOB|KSA|LDN|LEO|LIO|LLD|LND|LON|LRA|LUA|LY[AO]|MAR|MHA|MRD|MYA|NCE|NEM|NEO|NXT|PAR|PCT|PIC|PLE|PLK|POT|PPA|PRA|RIO|RNE|RVL|SCC|SCL|SCM|SEA|SHT|SLA|SNE|SPN|STF|STK|TAG|TIT|TNY|TRT|VCE|VEN|VIE|VKY|VNS|VOG|VRD|VTR|WAS|YAL|G(?:527|620S|621|630|735)|Y(?:221|330|550|6[23]5))-(?:[A-Z]{0,2}[0-9]{1,4}[A-Z]{0,3}?)|H1711|U(?:8230|8500|8661|8665|8667|8800|8818|8860|9200|9508))(?:[);/ ]|$))|hi6210sft|PE-(UL00|TL[12]0|TL00M)|T1-(A21[Lw]|A23L|701u|823L)|G7-(?:L01|TL00)|HW-01K|JNY-(LX[12]|AL10)|OXF-AN[01]0|TAS-(A[LN]00|L29|TL00)|WLZ-(AL10|AN00)|NIC-LX1A|MRX-(AL09|W09)|CDY-(?:[AT]N00|
|
6679 |
device: 'smartphone'
|
6680 |
models:
|
6681 |
- regex: 'POT-[TA]L00a(?:[);/ ]|$)'
|
@@ -6740,7 +6951,7 @@ Huawei:
|
|
6740 |
model: 'Enjoy 8e'
|
6741 |
- regex: 'MRD-[TA]L00(?:[);/ ]|$)'
|
6742 |
model: 'Enjoy 9e'
|
6743 |
-
- regex: 'DVC-
|
6744 |
model: 'Enjoy 20 Pro'
|
6745 |
- regex: 'U8665(?:[);/ ]|$)'
|
6746 |
model: 'Fusion 2'
|
@@ -6780,7 +6991,7 @@ Huawei:
|
|
6780 |
model: 'Honor 20 Pro'
|
6781 |
- regex: '(MAR-LX1H|YAL-AL50)(?:[);/ ]|$)'
|
6782 |
model: 'Honor 20S'
|
6783 |
-
- regex: '(?:BMH-AN[12]0
|
6784 |
model: 'Honor 30'
|
6785 |
- regex: 'EBG-[AT]N00(?:[);/ ]|$)'
|
6786 |
model: 'Honor 30 Pro'
|
@@ -6790,6 +7001,8 @@ Huawei:
|
|
6790 |
model: 'Honor 30S'
|
6791 |
- regex: 'LRA-LX1(?:[);/ ]|$)'
|
6792 |
model: 'Honor 30I'
|
|
|
|
|
6793 |
- regex: '(?:Honor_|HW-)?H30-(?:C00|L01M?|L02|U10|T00|T10)(?:_TD)?(?:[);/ ]|$)'
|
6794 |
model: 'Honor 3C'
|
6795 |
- regex: 'Hol-U19(?:[);/ ]|$)'
|
@@ -6900,7 +7113,7 @@ Huawei:
|
|
6900 |
model: 'Honor P40'
|
6901 |
- regex: 'COR-(?:AL[01]0|L29|TL10)(?:[);/ ]|$)'
|
6902 |
model: 'Honor Play'
|
6903 |
-
- regex: 'ASK-
|
6904 |
model: 'Honor Play 3'
|
6905 |
- regex: 'KSA-AL10(?:[);/ ]|$)'
|
6906 |
model: 'Honor Play 3E'
|
@@ -6920,6 +7133,8 @@ Huawei:
|
|
6920 |
model: 'Honor V10'
|
6921 |
- regex: 'PCT-[TA]L10(?:[);/ ]|$)'
|
6922 |
model: 'Honor V20'
|
|
|
|
|
6923 |
- regex: 'KNT-(?:AL[12]0|[TU]L10)(?:[);/ ]|$)'
|
6924 |
model: 'Honor V8'
|
6925 |
- regex: 'DUK-AL20(?:[);/ ]|$)'
|
@@ -6934,7 +7149,7 @@ Huawei:
|
|
6934 |
model: 'Honor View 30'
|
6935 |
- regex: 'OXF-AN10(?:[);/ ]|$)'
|
6936 |
model: 'Honor View 30 Pro'
|
6937 |
-
- regex: '(?:Honor_|HW-)?SCL-L(
|
6938 |
model: 'Honor Y6'
|
6939 |
- regex: '(?:Honor_|HW-)?LYO-L21(?:[);/ ]|$)'
|
6940 |
model: 'Honor Y6 II Compact'
|
@@ -6944,6 +7159,8 @@ Huawei:
|
|
6944 |
model: 'Honor X10 Max'
|
6945 |
- regex: 'DNN-LX9(?:[);/ ]|$)'
|
6946 |
model: 'Honor X10 Lite'
|
|
|
|
|
6947 |
- regex: 'U8500(?:[);/ ]|$)'
|
6948 |
model: 'Ideos X2'
|
6949 |
- regex: 'U8510(?:[);/ ]|$)'
|
@@ -7006,6 +7223,8 @@ Huawei:
|
|
7006 |
model: 'Nova'
|
7007 |
- regex: '608HW(?:[);/ ]|$)'
|
7008 |
model: 'Nova Lite'
|
|
|
|
|
7009 |
- regex: '(?:PIC-(?:[AT]L00|LX9)|HWV31)(?:[);/ ]|$)'
|
7010 |
model: 'Nova 2'
|
7011 |
- regex: '704HW(?:[);/ ]|$)'
|
@@ -7044,9 +7263,9 @@ Huawei:
|
|
7044 |
model: 'Nova 6 SE'
|
7045 |
- regex: 'JEF-(?:[AT]N00|AN20|NX9)(?:[);/ ]|$)'
|
7046 |
model: 'Nova 7 5G'
|
7047 |
-
- regex: 'JER-[AT]N10(?:[);/ ]|$)'
|
7048 |
model: 'Nova 7 Pro 5G'
|
7049 |
-
- regex: 'CDY-(?:[AT]N00|NX9B)(?:[);/ ]|$)'
|
7050 |
model: 'Nova 7 SE 5G'
|
7051 |
- regex: 'JNY-LX2(?:[);/ ]|$)'
|
7052 |
model: 'Nova 7i'
|
@@ -7082,10 +7301,8 @@ Huawei:
|
|
7082 |
model: 'P20 Pro'
|
7083 |
- regex: '(ELE-L(?:04|09|29)|ELE-[AT]L00)(?:[);/ ]|$)'
|
7084 |
model: 'P30'
|
7085 |
-
- regex: '(?:MAR-(?:LX(?:1[BM]|2J?|3BM)|TL00)|NIC-LX1A|HWV33)(?:[);/ ]|$)'
|
7086 |
model: 'P30 Lite'
|
7087 |
-
- regex: 'MAR-LX[13]Am?(?:[);/ ]|$)'
|
7088 |
-
model: 'P30 Lite Dual SIM'
|
7089 |
- regex: '(?:VOG-(?:L(?:04|09|29)|TL00|AL10)|HW-02L)(?:[);/ ]|$)'
|
7090 |
model: 'P30 Pro'
|
7091 |
- regex: 'ANA-LX4(?:[);/ ]|$)'
|
@@ -7102,7 +7319,7 @@ Huawei:
|
|
7102 |
model: 'P40 Pro Plus'
|
7103 |
- regex: 'GRA-(?:L09|UL00)(?:[);/ ]|$)'
|
7104 |
model: 'P8'
|
7105 |
-
- regex: '(?:ALE-L(?:02|21|23)|ALE-
|
7106 |
model: 'P8 Lite (2015)'
|
7107 |
- regex: '(?:PRA-L(?:A1|X2|X1|X3)|hi6210sft)(?:[);/ ]|$)'
|
7108 |
model: 'P8 Lite (2017)'
|
@@ -7202,6 +7419,8 @@ Huawei:
|
|
7202 |
model: 'Y9 Prime (2019)'
|
7203 |
- regex: 'FRL-L2[23](?:[);/ ]|$)'
|
7204 |
model: 'Y9a'
|
|
|
|
|
7205 |
|
7206 |
- regex: 'HWT31(?:[);/ ]|$)'
|
7207 |
model: 'Qua Tab 02 10.1"'
|
@@ -7278,7 +7497,7 @@ Huawei:
|
|
7278 |
- regex: '(AGS2-AL00|JDN2-W09)HN(?:[);/ ]|$)'
|
7279 |
device: 'tablet'
|
7280 |
model: 'Honor Tab 5'
|
7281 |
-
- regex: 'AGS2-(?:[LW]09|W19|L03)(?:[);/ ]|$)'
|
7282 |
device: 'tablet'
|
7283 |
model: 'MediaPad T5 10'
|
7284 |
- regex: 'KOB2-[LW]09(?:[);/ ]|$)'
|
@@ -7484,7 +7703,7 @@ iRulu:
|
|
7484 |
|
7485 |
# Irbis
|
7486 |
Irbis:
|
7487 |
-
regex: 'IRBIS|TZ(1(?:0[04]|42|5[01]|84|65|7[01345-89]|8[356]|9[12578])|49|55|72|22|7(?:1[
|
7488 |
device: 'tablet'
|
7489 |
models:
|
7490 |
- regex: '(TZ(?:[0-9]+)|TZ(?:one|art|HIT|81L))(?:[);/ ]|$)'
|
@@ -7541,7 +7760,7 @@ iHunt:
|
|
7541 |
|
7542 |
# IconBIT
|
7543 |
IconBIT:
|
7544 |
-
regex: 'IconBIT|NT-(3506M|0704S|0909T|1009T|10[01]1T|1017T|3601P/3602P|3603P|3702S|3805C|3905T|3701S|0701S|0805C|0902S|370[23]M)|XDS[789]4K|Omnicast UHD|Movie Smart 4K|Movie IPTV Quad'
|
7545 |
device: 'tablet'
|
7546 |
models:
|
7547 |
- regex: 'NT-3506M'
|
@@ -7579,7 +7798,15 @@ IconBIT:
|
|
7579 |
model: 'NetTAB Matrix 3G duo'
|
7580 |
- regex: 'NT-3703M'
|
7581 |
model: 'NetTAB Matrix 3GT'
|
|
|
|
|
7582 |
|
|
|
|
|
|
|
|
|
|
|
|
|
7583 |
- regex: '(?:iconBIT )?(Movie Smart 4K|Movie IPTV Quad|Movie Ultra HD 4K|XDS[789]4K|Omnicast UHD)'
|
7584 |
model: '$1'
|
7585 |
device: 'tv'
|
@@ -7659,7 +7886,7 @@ LYF:
|
|
7659 |
|
7660 |
# Lumus
|
7661 |
Lumus:
|
7662 |
-
regex: '
|
7663 |
device: 'smartphone'
|
7664 |
models:
|
7665 |
# explicit smartphone models
|
@@ -7669,11 +7896,8 @@ Lumus:
|
|
7669 |
model: 'INNO $1'
|
7670 |
- regex: 'Lumus[_ ]Ion(?:[);/ ]|$)'
|
7671 |
model: 'Ion'
|
7672 |
-
|
7673 |
-
|
7674 |
-
device: 'tv'
|
7675 |
-
model: ''
|
7676 |
-
|
7677 |
# M4tel
|
7678 |
M4tel:
|
7679 |
regex: 'M4 SS[0-9]{4}(?:-R)?|M4_B[23]'
|
@@ -7797,7 +8021,7 @@ iNew:
|
|
7797 |
|
7798 |
# iPro
|
7799 |
iPro:
|
7800 |
-
regex: '(?:Kylin[ _]5.[05]S?|KYLIN40|Jade[78]s|Amber[67]S?|Amber5S_Pro|Phonenix50S|Zafiro)(?:[);/ ]|$)'
|
7801 |
device: 'smartphone'
|
7802 |
models:
|
7803 |
- regex: 'Kylin_5.0S'
|
@@ -7818,6 +8042,8 @@ iPro:
|
|
7818 |
model: 'Phonenix 50S'
|
7819 |
- regex: 'Zafiro'
|
7820 |
model: 'Zafiro'
|
|
|
|
|
7821 |
|
7822 |
# Infinix
|
7823 |
Infinix:
|
@@ -8074,6 +8300,20 @@ Intex:
|
|
8074 |
models:
|
8075 |
- regex: 'IM0318ND'
|
8076 |
model: 'Aqua Lions 3'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8077 |
- regex: 'Intex[ _]([^/;]*)[ _]Build'
|
8078 |
model: '$1'
|
8079 |
- regex: '(Cloud (?:Fame|Glory) 4G)'
|
@@ -8319,7 +8559,7 @@ Kaan:
|
|
8319 |
|
8320 |
# Kazam
|
8321 |
Kazam:
|
8322 |
-
regex: 'Kazam|Trooper_X[0-9][0-9]
|
8323 |
device: 'smartphone'
|
8324 |
models:
|
8325 |
- regex: 'Tornado 348'
|
@@ -8452,12 +8692,12 @@ Kogan:
|
|
8452 |
|
8453 |
# Komu
|
8454 |
Komu:
|
8455 |
-
regex: 'Komu[ -]'
|
8456 |
device: 'smartphone'
|
8457 |
models:
|
8458 |
-
- regex: 'Komu[ -]([^;/]+) Build'
|
8459 |
model: '$1'
|
8460 |
-
- regex: 'Komu[ -]([a-z0-9_-]+)'
|
8461 |
model: '$1'
|
8462 |
|
8463 |
# Koobee
|
@@ -8494,14 +8734,16 @@ KDDI:
|
|
8494 |
|
8495 |
# Kodak
|
8496 |
Kodak:
|
8497 |
-
regex: 'KODAK|(?:IM5|Ektra|Smartway_T1)(?:[);/ ]|$)'
|
8498 |
device: 'smartphone'
|
8499 |
models:
|
8500 |
- regex: 'IM5'
|
8501 |
model: 'IM5'
|
|
|
|
|
8502 |
- regex: 'Ektra(?:[);/ ]|$)'
|
8503 |
model: 'Ektra'
|
8504 |
-
- regex: '(?:KODAK[_ ])?SMARTWAY[_ ]([MTX]1)'
|
8505 |
model: 'Smartway $1'
|
8506 |
- regex: 'Tablet (7|10)'
|
8507 |
device: 'tablet'
|
@@ -8551,7 +8793,7 @@ Diva:
|
|
8551 |
|
8552 |
# kyocera (kyocera.co.jp, kyocera.com)
|
8553 |
Kyocera:
|
8554 |
-
regex: 'Kyocera|KWC-|QC-[0-9]{4}|(?:QC6035|NP501KC|302KC|503KC|602KC|705KC|901KC|C51[27]0|C5155|C5215|C67[35]0|C6522N?|C6530N|C6740N?|C6743|E6[89]10|KYL2[13]|KYV3[
|
8555 |
device: 'smartphone'
|
8556 |
models:
|
8557 |
# explicit smartphone models
|
@@ -8607,7 +8849,7 @@ Kyocera:
|
|
8607 |
model: 'DuraForce'
|
8608 |
- regex: 'E6810'
|
8609 |
model: 'DuraForce Pro'
|
8610 |
-
- regex: '
|
8611 |
model: 'DuraForce Pro 2'
|
8612 |
- regex: 'E7110'
|
8613 |
model: 'DuraForce Ultra 5G'
|
@@ -8639,6 +8881,8 @@ Kyocera:
|
|
8639 |
model: 'Torque G03'
|
8640 |
- regex: 'KYV46(?:[);/ ]|$)'
|
8641 |
model: 'Torque G04'
|
|
|
|
|
8642 |
- regex: 'KYV47(?:-u)?(?:[);/ ]|$)'
|
8643 |
model: 'Basio 4'
|
8644 |
- regex: 'KYV43(?:[);/ ]|$)'
|
@@ -8684,7 +8928,7 @@ Kyocera:
|
|
8684 |
model: 'Brigadier'
|
8685 |
- regex: 'E6782L(?:[);/ ]|$)'
|
8686 |
model: 'DuraScout'
|
8687 |
-
- regex: '(KC-S301AE)(?:[);/ ]|$)'
|
8688 |
model: '$1'
|
8689 |
- regex: 'A001KC(?:[);/ ]|$)'
|
8690 |
model: 'Katan Sumaho 2'
|
@@ -8712,7 +8956,7 @@ Krüger&Matz:
|
|
8712 |
model: 'MOVE 8 Mini'
|
8713 |
- regex: 'MOVE_6_mini'
|
8714 |
model: 'MOVE 6 Mini'
|
8715 |
-
- regex: 'MOVE[_ ]([78]|6S)'
|
8716 |
model: 'MOVE $1'
|
8717 |
- regex: 'DRIVE 4 mini LTE'
|
8718 |
model: 'DRIVE 4 mini LTE'
|
@@ -8773,7 +9017,7 @@ AIS:
|
|
8773 |
|
8774 |
# Lava (Lavamobiles.com)
|
8775 |
Lava:
|
8776 |
-
regex: 'Lava[ _]|LAVAA1|(?:DISCOVER136|KKT QUADRA)|iris[ _]?([^/;]+)(?:\)| Build)|A(?:67|76) Build|X1 Selfie Build|X41 Plus Build|(?:Flair Z1|PixelV1|Pixel V2|Z61_2GB|A97 IPS|A97 2GB PLUS|L[EH]9920(?:[_ ]P)?|L[NEH]9910|LH9810|Ivory(?:S1|S4G)?|A76Plus)(?:[);/ ]|$)'
|
8777 |
device: 'smartphone'
|
8778 |
models:
|
8779 |
# explicit smartphone models
|
@@ -8785,6 +9029,8 @@ Lava:
|
|
8785 |
model: 'A97 2GB Plus'
|
8786 |
- regex: 'A76Plus(?:[);/ ]|$)'
|
8787 |
model: 'A76 Plus'
|
|
|
|
|
8788 |
- regex: 'Pixel ?V([12])(?:[);/ ]|$)'
|
8789 |
model: 'Pixel V$1'
|
8790 |
- regex: 'X1 Selfie(?:[);/ ]|$)'
|
@@ -8797,6 +9043,8 @@ Lava:
|
|
8797 |
model: 'R1'
|
8798 |
- regex: 'Z61_2GB(?:[);/ ]|$)'
|
8799 |
model: 'Z61'
|
|
|
|
|
8800 |
- regex: 'LE9920[ _]P(?:[);/ ]|$)'
|
8801 |
model: 'V7'
|
8802 |
- regex: 'LE9920(?:[);/ ]|$)'
|
@@ -8826,9 +9074,12 @@ Lava:
|
|
8826 |
device: 'tablet'
|
8827 |
model: 'Ivory $1'
|
8828 |
# explicit general
|
8829 |
-
- regex: 'iris[ _]?([^/;]+)(
|
8830 |
model: 'Iris $1'
|
8831 |
-
- regex: 'Lava[ _]?([^/;]+)(
|
|
|
|
|
|
|
8832 |
model: '$1'
|
8833 |
|
8834 |
# SKG (skgmobile.net | skgmobile.com)
|
@@ -8849,11 +9100,13 @@ Landvo:
|
|
8849 |
|
8850 |
# Land Rover
|
8851 |
Land Rover:
|
8852 |
-
regex: 'Land[ ]?Rover[d]?[ _-](?:X1[0-9]|Explore|T878|L15\+|V18|V[168]|X)(?:[);/ ]|$)|Polar3'
|
8853 |
device: 'smartphone'
|
8854 |
models:
|
8855 |
- regex: 'Land[ ]?Rover[d]?[ _-](X1[0-9]|Explore|T878|L15\+|V18|V[168]|X)(?:[);/ ]|$)'
|
8856 |
model: '$1'
|
|
|
|
|
8857 |
- regex: 'Polar3'
|
8858 |
model: 'Ioutdoor Polar 3'
|
8859 |
|
@@ -8938,12 +9191,12 @@ LCT:
|
|
8938 |
|
8939 |
# Leagoo
|
8940 |
Leagoo:
|
8941 |
-
regex: '(?:MY)?LEAGOO[ _-]?|(?:M5 EDGE|KIICAA (POWER|MIX)|Leapad[ _](?:X|7s)|Elite [15]|Venture 1|Z10-E)(?:[);/ ]|$)'
|
8942 |
device: 'smartphone'
|
8943 |
models:
|
8944 |
- regex: 'LEAGOO[- _]M8[_-]?Pro(?:[);/ ]|$)'
|
8945 |
model: 'M8 Pro'
|
8946 |
-
- regex: 'LEAGOO[- _](Z[156]|M[58]|T1)(?:[);/ ]|$)'
|
8947 |
model: '$1'
|
8948 |
- regex: 'M5 EDGE'
|
8949 |
model: 'M5 Edge'
|
@@ -8955,6 +9208,8 @@ Leagoo:
|
|
8955 |
model: 'KICCAA Mix'
|
8956 |
- regex: 'Elite ([15])(?:[);/ ]|$)'
|
8957 |
model: 'Elite $1'
|
|
|
|
|
8958 |
- regex: 'Venture 1(?:[);/ ]|$)'
|
8959 |
model: 'Venture 1'
|
8960 |
- regex: '(?:LEAGOO[- _])?(Z10-E|M6)(?:[);/ ]|$)'
|
@@ -8991,8 +9246,12 @@ LeEco:
|
|
8991 |
model: '$1'
|
8992 |
- regex: 'X900 Build'
|
8993 |
model: 'Le X900'
|
|
|
|
|
8994 |
- regex: '(?:Le ?X526|Le2[_ ]x527|Le 2|X52[67])(?:[);/ ]|$)'
|
8995 |
model: 'Le 2'
|
|
|
|
|
8996 |
- regex: 'Le ?X([^;/]+) Build'
|
8997 |
model: 'Le X$1'
|
8998 |
- regex: 'Le ?X([^) ;/]+)'
|
@@ -9006,21 +9265,6 @@ LeEco:
|
|
9006 |
- regex: 'LeEco ([^;/]+) Build'
|
9007 |
model: '$1'
|
9008 |
|
9009 |
-
# Leotec
|
9010 |
-
Leotec:
|
9011 |
-
regex: 'LESPH501[14]|LESPH5003B|SUPERNOVA (Qi16|Qi32|i3G96[X]?)'
|
9012 |
-
device: 'smartphone'
|
9013 |
-
models:
|
9014 |
-
- regex: 'LESPH5011'
|
9015 |
-
model: 'Argon e250'
|
9016 |
-
- regex: 'LESPH5003B'
|
9017 |
-
model: 'Argon A250B'
|
9018 |
-
- regex: 'LESPH5014'
|
9019 |
-
model: 'Krypton K150'
|
9020 |
-
- regex: 'SUPERNOVA (Qi16|Qi32|i3G96[X]?)'
|
9021 |
-
device: 'tablet'
|
9022 |
-
model: 'Supernova $1'
|
9023 |
-
|
9024 |
# Lephone
|
9025 |
Lephone:
|
9026 |
regex: 'lephone[ _]|lephoneP1'
|
@@ -9040,6 +9284,14 @@ Lenco:
|
|
9040 |
device: 'tablet'
|
9041 |
model: '$1'
|
9042 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9043 |
# lenovo (lenovo.com)
|
9044 |
Lenovo:
|
9045 |
regex: '(?:LNV-)?Lenovo|IdeaTab|IdeaPad|Thinkpad|Yoga Tablet|Tab2A[0-9]-[0-9]{2}[a-z]?|ZUK[ -_]|(?:TB2-X30L|TB3-710I|YT3-X50[ML]|K50a40|TB-(?:X103F|8504F|X304F|X704V|X704A)|A5500-H|A2107A-H|A3500-HV|A2109A|S6000|Z2 Plus|Vibe[ _](?:P1|S6i Plus|S[23567]i|C|[ZX]2|K5(?: Plus)?|V7)|P2A42|L38011|L18011|[5-8]01LV|[67]02LV|Z2131|K350t|K31-t3|TAB 2 A8-50LC|S90-A|P70-A|VR-1541F)(?:[);/ ]|$)'
|
@@ -9147,6 +9399,9 @@ Lenovo:
|
|
9147 |
- regex: 'TB-X606[FXV](?:[);/ ]|$)'
|
9148 |
model: 'Tab M10 FHD Plus'
|
9149 |
device: 'tablet'
|
|
|
|
|
|
|
9150 |
- regex: 'Lenovo ?B8000(-[FH])?'
|
9151 |
model: 'Yoga Tablet 10'
|
9152 |
device: 'tablet'
|
@@ -9174,6 +9429,9 @@ Lenovo:
|
|
9174 |
- regex: 'YT-X703L'
|
9175 |
model: 'Yoga Tab 3 Plus'
|
9176 |
device: 'tablet'
|
|
|
|
|
|
|
9177 |
|
9178 |
- regex: 'S6000(?:[);/ ]|$)'
|
9179 |
model: 'IdeaTab S6000'
|
@@ -9217,6 +9475,12 @@ Lenovo:
|
|
9217 |
- regex: 'IdeaTab[ \-_]?([a-z0-9]+)'
|
9218 |
model: 'IdeaTab $1'
|
9219 |
device: 'tablet'
|
|
|
|
|
|
|
|
|
|
|
|
|
9220 |
- regex: 'Yoga Tablet([^;/]+) Build'
|
9221 |
model: 'Yoga Tablet$1'
|
9222 |
device: 'tablet'
|
@@ -9246,7 +9510,7 @@ Lenovo:
|
|
9246 |
model: 'ZUK $1'
|
9247 |
- regex: 'K10a40(?:[);/ ]|$)'
|
9248 |
model: 'C2'
|
9249 |
-
- regex: 'k50a40(?:[);/ ]|$)'
|
9250 |
model: 'K3 Note'
|
9251 |
- regex: 'A7010a48(?:[);/ ]|$)'
|
9252 |
model: 'K4 Note'
|
@@ -9254,7 +9518,7 @@ Lenovo:
|
|
9254 |
model: 'K5'
|
9255 |
- regex: 'L38011(?:[);/ ]|$)'
|
9256 |
model: 'K5 Play'
|
9257 |
-
- regex: 'A7020a4[08](?:[);/ ]|$)'
|
9258 |
model: 'K5 Note'
|
9259 |
- regex: 'K31-t3(?:[);/ ]|$)'
|
9260 |
model: 'K31'
|
@@ -9298,11 +9562,15 @@ Lenovo:
|
|
9298 |
model: 'Vibe S1'
|
9299 |
- regex: 'L78071(?:[);/ ]|$)'
|
9300 |
model: 'Z5s'
|
|
|
|
|
|
|
|
|
9301 |
- regex: 'L58041(?:[);/ ]|$)'
|
9302 |
model: 'S5 Pro'
|
9303 |
- regex: 'L18021(?:[);/ ]|$)'
|
9304 |
model: 'A3'
|
9305 |
-
- regex: 'PB2-
|
9306 |
model: 'Phab 2'
|
9307 |
- regex: '(S90-A|P70-A)(?:[);/ ]|$)'
|
9308 |
model: '$1'
|
@@ -9425,15 +9693,25 @@ Lexibook:
|
|
9425 |
|
9426 |
# LG
|
9427 |
LG:
|
9428 |
-
regex: 'LG|Web0S; Linux/SmartTV|portalmmm/2\.0 (?:KE|KG|KP|L3)|(?:VX[0-9]+|L-0[12]D|L-07C|P713|(LM-[A-Z][0-9]{3}[A-Z]{0,3}(?:\(FGN?\)|\(G\)|\.FN|\.F(?:GN?)?)?)|LM-(X625N1|G820QM[0127]))(?:[);/ ]|$)|NetCast|RS98[78]|RS500|VS(?:50[01]|835|876|880|98[0578]|99[056]|(410|415|425|500|880)PP)|VS820|VS870 4G|Nexsus 5|LML(41[34]D|211B|713D|212V)L|VK810 4G|VK815|X5-LG|L-05[DE]|L-03K|L-01[LJK]|L-52A|L-[45]1A|901LG|A001LG|80[12]LG|402LG|LGT32|L-02K|L-01F|LM-V40|DM-01K|LMX130IM'
|
9429 |
device: 'smartphone'
|
9430 |
models:
|
9431 |
-
- regex: 'DM-01K'
|
9432 |
-
model: 'Disney Mobile DM
|
9433 |
-
- regex: 'LG-
|
9434 |
model: 'L70'
|
|
|
|
|
|
|
|
|
|
|
|
|
9435 |
- regex: 'LG-D340F8'
|
9436 |
model: 'L70 Tri'
|
|
|
|
|
|
|
|
|
9437 |
- regex: 'LM-X210APM'
|
9438 |
model: 'Phoenix 4'
|
9439 |
- regex: 'LG-P505R'
|
@@ -9442,15 +9720,21 @@ LG:
|
|
9442 |
model: 'Zone 4'
|
9443 |
- regex: 'LM-X220PM'
|
9444 |
model: 'Tribute Empire'
|
9445 |
-
- regex: '
|
|
|
|
|
9446 |
model: 'G2'
|
9447 |
- regex: 'LG-D6(?:18|20)'
|
9448 |
model: 'G2 Mini'
|
9449 |
-
- regex: 'LG-D85[01258]|VS985'
|
9450 |
model: 'G3'
|
9451 |
-
- regex: 'LG-D72[
|
9452 |
model: 'G3 Beat'
|
9453 |
-
- regex: 'LG-
|
|
|
|
|
|
|
|
|
9454 |
model: 'G4'
|
9455 |
- regex: 'LG-H525n?'
|
9456 |
model: 'G4c'
|
@@ -9460,16 +9744,20 @@ LG:
|
|
9460 |
model: 'G4s'
|
9461 |
- regex: 'LG-H735'
|
9462 |
model: 'G4 Beat'
|
9463 |
-
- regex: 'LG-H8(?:20|3[01]|5[08]|6[08])|VS987|RS988'
|
9464 |
model: 'G5'
|
9465 |
- regex: 'LG-H84[05]'
|
9466 |
model: 'G5 SE'
|
9467 |
-
- regex: 'VS988|LG-H87(?:
|
9468 |
model: 'G6'
|
9469 |
- regex: 'LM-Q850'
|
9470 |
model: 'G7 Fit'
|
9471 |
- regex: 'LM-Q910'
|
9472 |
model: 'G7 One'
|
|
|
|
|
|
|
|
|
9473 |
- regex: 'LM-G820(N|QM[0127]|UMB)?'
|
9474 |
model: 'G8'
|
9475 |
- regex: 'LM-G850'
|
@@ -9478,16 +9766,26 @@ LG:
|
|
9478 |
model: 'G8S ThinQ'
|
9479 |
- regex: '901LG(?:[);/ ]|$)'
|
9480 |
model: 'G8X ThinQ'
|
|
|
|
|
9481 |
- regex: 'VS501|LM-X120'
|
9482 |
model: 'K20'
|
9483 |
-
- regex: '(?:LG-)?
|
9484 |
model: 'Magna'
|
|
|
|
|
|
|
|
|
|
|
|
|
9485 |
- regex: '(?:LG-)?H343'
|
9486 |
model: 'Risio'
|
9487 |
- regex: '(?:LG-)?H650'
|
9488 |
model: 'Zero'
|
9489 |
- regex: '(?:LG-)?M154'
|
9490 |
model: 'Risio 2'
|
|
|
|
|
9491 |
- regex: '(?:LG-)?P500H'
|
9492 |
model: 'Optimus One'
|
9493 |
- regex: '(L-05[DE])(?:[);/ ]|$)'
|
@@ -9502,21 +9800,25 @@ LG:
|
|
9502 |
model: 'PRADA phone L-02D'
|
9503 |
- regex: 'L-07C'
|
9504 |
model: 'Optimus Bright L-07C'
|
9505 |
-
- regex: '(?:LG-)?
|
9506 |
model: 'V20'
|
9507 |
- regex: 'LM-Q710(?:\(FGN\)|[\.]?FGN)'
|
9508 |
model: 'Q Stylus Plus'
|
9509 |
- regex: '801LG'
|
9510 |
model: 'Q Stylus'
|
|
|
|
|
|
|
|
|
9511 |
- regex: 'LM-Q[67]10\.FG(?:[);/ ]|$)'
|
9512 |
model: 'Q7'
|
9513 |
- regex: 'LM-(Q725[KL]|Q610.FGN)(?:[);/ ]|$)'
|
9514 |
model: 'Q7+'
|
9515 |
- regex: 'LM-Q815[SL](?:[);/ ]|$)'
|
9516 |
model: 'Q8+'
|
9517 |
-
- regex: 'LM-
|
9518 |
model: 'Q9'
|
9519 |
-
- regex: 'LM-Q730N(?:[);/ ]|$)'
|
9520 |
model: 'Q70'
|
9521 |
- regex: 'LGV33(?:[);/ ]|$)'
|
9522 |
model: 'Qua Phone PX'
|
@@ -9526,28 +9828,48 @@ LG:
|
|
9526 |
model: 'Style 2'
|
9527 |
- regex: 'VS835(?:[);/ ]|$)'
|
9528 |
model: 'Stylo 2 V'
|
|
|
|
|
9529 |
- regex: 'L-41A(?:[);/ ]|$)'
|
9530 |
model: 'Style 3'
|
9531 |
-
- regex: '
|
|
|
|
|
|
|
|
|
|
|
|
|
9532 |
model: 'Stylo 4'
|
9533 |
- regex: '(?:LM-Q720|LGL722DL)(?:[);/ ]|$)'
|
9534 |
model: 'Stylo 5'
|
9535 |
- regex: 'LM-Q730(?:[);/ ]|$)'
|
9536 |
model: 'Stylo 6'
|
9537 |
-
- regex: 'LM-G710(N|VM)
|
9538 |
model: 'G7 ThinQ'
|
9539 |
- regex: 'LM-X210CM'
|
9540 |
model: 'Fortune 2'
|
9541 |
-
- regex: 'LM-X410\.
|
9542 |
model: 'Premier Pro'
|
|
|
|
|
9543 |
- regex: 'LML41[34]DL(?:[);/ ]|$)'
|
9544 |
model: 'Premier Pro LTE'
|
9545 |
- regex: 'LM-X525'
|
9546 |
model: 'Q60'
|
|
|
|
|
9547 |
- regex: 'LM-X210K'
|
9548 |
model: 'X2'
|
9549 |
- regex: 'LG-K580'
|
9550 |
model: 'X Cam'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9551 |
- regex: 'LM-X510WM'
|
9552 |
model: 'X Power 3'
|
9553 |
- regex: 'LM-X(?:41[05]K|410S)'
|
@@ -9556,20 +9878,34 @@ LG:
|
|
9556 |
model: 'X4+'
|
9557 |
- regex: 'LM-X410(?:\.FN|\(FG\))'
|
9558 |
model: 'K11'
|
9559 |
-
- regex: 'LM-X(?:320|410[UP]M)'
|
9560 |
model: 'K30'
|
9561 |
- regex: 'LMX130IM'
|
9562 |
model: 'W10'
|
|
|
|
|
|
|
|
|
|
|
|
|
9563 |
- regex: 'LM-X410'
|
9564 |
model: 'LM-X410'
|
|
|
|
|
9565 |
- regex: 'LM-X420N'
|
9566 |
model: 'X4 (2019)'
|
9567 |
-
|
70 |
model: 'StarText' # ZTE
|
71 |
- regex: 'StarNaute II(?:[);/ ]|$)'
|
72 |
model: 'StarNaute 2' # ZTE
|
73 |
+
- regex: 'STARNAUTE ?4(?:[);/ ]|$)'
|
74 |
+
model: 'StarNaute 4'
|
75 |
- regex: 'StarNaute(?:[);/ ]|$)'
|
76 |
model: 'StarNaute' # ZTE Amigo
|
77 |
- regex: 'StarTab'
|
83 |
|
84 |
# HTC (htc.com)
|
85 |
HTC:
|
86 |
+
regex: 'HTC|Sprint (?:APA|ATP)|ADR(?!910L)[a-z0-9]+|NexusHD2|Amaze[ _]4G(?:[);/ ]|$)|(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/)]+)(?: Build|\))|(Amaze[ _]4G|(?<!BLU LIFE |ZOPO )One ?[XELSV\+]+)(?:[);/ ]|$)|SPV E6[05]0|(One M8|One Mini 2|X525a|PG86100|PC36100|XV6975|PJ83100|2PYB2|2PS64|2PZC5|0PJA10|0PJA2|HTV33|0PM92|0PCV1|601HT|0PAJ5|HTL2[23]|HTV3[12]|2PQ93|X2-HT|EXODUS 1|ISW13HT)(?:[);/ ]|$)'
|
87 |
device: 'smartphone'
|
88 |
models:
|
89 |
# explicit smartphone models
|
90 |
- regex: '2PZC5(?:[);/ ]|$)'
|
91 |
model: 'U11'
|
92 |
+
- regex: 'U11 plus(?:[);/ ]|$)'
|
93 |
+
model: 'U11 Plus'
|
94 |
+
- regex: 'U11 life(?:[);/ ]|$)'
|
95 |
+
model: 'U11 Life'
|
96 |
- regex: 'XV6975(?:[);/ ]|$)'
|
97 |
model: 'Imagio'
|
98 |
- regex: 'PG86100(?:[);/ ]|$)'
|
105 |
model: 'One'
|
106 |
- regex: 'PJ83100(?:[);/ ]|$)'
|
107 |
model: 'One X'
|
108 |
+
- regex: '(?:HTC)?One ?Mini ?2(?:[);/ ]|$)'
|
109 |
model: 'One Mini 2'
|
110 |
- regex: 'X2-HT(?:[);/ ]|$)'
|
111 |
model: 'One X2'
|
115 |
model: 'J One'
|
116 |
- regex: 'HTL23(?:[);/ ]|$)'
|
117 |
model: 'J Butterfly'
|
118 |
+
- regex: 'HTCButterflys901s(?:[);/ ]|$)'
|
119 |
+
model: 'Butterfly S'
|
120 |
- regex: '(?:0PJA2|0PJA10)(?:[);/ ]|$)'
|
121 |
model: 'One M9'
|
122 |
+
- regex: 'HTC(?:6500LVW|PN071)(?:[);/ ]|$)'
|
123 |
+
model: 'One M7'
|
124 |
+
- regex: '(?:One M8|HTC6525LVW)(?:[);/ ]|$)'
|
125 |
+
model: 'One M8'
|
126 |
+
- regex: '0PAJ5(?:[);/ ]|$)'
|
127 |
+
model: 'One E8'
|
128 |
+
- regex: 'HTC6515LVW(?:[);/ ]|$)'
|
129 |
+
model: 'One Remix'
|
130 |
- regex: 'X525a(?:[);/ ]|$)'
|
131 |
model: 'One X+'
|
132 |
- regex: '2PQ93(?:[);/ ]|$)'
|
133 |
model: 'One A9'
|
134 |
- regex: 'ADR6300'
|
135 |
model: 'Droid Incredible'
|
136 |
+
- regex: 'HTC6435LVW'
|
137 |
+
model: 'Droid DNA'
|
138 |
- regex: 'ADR6400L'
|
139 |
model: 'ThunderBolt'
|
140 |
- regex: 'ADR6410LRA'
|
151 |
model: 'Desire 626S'
|
152 |
- regex: '0PCV1(?:[);/ ]|$)'
|
153 |
model: 'Desire 510'
|
154 |
+
- regex: 'HTC[_ ]D310n(?:[);/ ]|$)'
|
155 |
+
model: 'Desire 310'
|
156 |
- regex: '608t(?:[);/ ]|$)'
|
157 |
model: 'Desire 608t'
|
158 |
+
- regex: 'HTC_(?:0P9O2|D610x)(?:[);/ ]|$)'
|
159 |
+
model: 'Desire 610'
|
160 |
+
- regex: 'HTC[_ ]?(0P4E[12])(?:[);/ ]|$)'
|
161 |
+
model: 'Desire 601'
|
162 |
+
- regex: 'HTC_?D620h(?:[);/ ]|$)'
|
163 |
+
model: 'Desire 620'
|
164 |
+
- regex: 'HTC_D626ph(?:[);/ ]|$)'
|
165 |
+
model: 'Desire 626'
|
166 |
+
- regex: 'HTC_?(?:0P9C2|D816[xd]?)(?:[);/ ]|$)'
|
167 |
+
model: 'Desire 816'
|
168 |
+
- regex: 'HTC_?D526h(?:[);/ ]|$)'
|
169 |
+
model: 'Desire 526'
|
170 |
- regex: 'EXODUS 1(?:[);/ ]|$)'
|
171 |
model: 'Exodus 1'
|
172 |
+
- regex: 'HTC 2Q7A100(?:[);/ ]|$)'
|
173 |
+
model: 'U19e'
|
174 |
|
175 |
- regex: 'NexusHD2' # custom rom for hd2
|
176 |
model: 'HD2'
|
183 |
- regex: 'HTC[ _\-]Flyer[ _\-]([\w]{1,5})'
|
184 |
device: 'tablet'
|
185 |
model: 'Flyer $1'
|
186 |
+
- regex: 'HTC(?:[ _\-])?(?:One[ _\-]max|6600LVW)(?:[);/ ]|$)'
|
187 |
device: 'phablet'
|
188 |
+
model: 'One Max'
|
189 |
- regex: 'HTC[ _]([^/;]+) [0-9]+(?:\.[0-9]+)+ Build'
|
190 |
model: '$1'
|
191 |
- regex: 'HTC[ _]([^/;]+) Build'
|
211 |
model: '$1'
|
212 |
- regex: '(ADR[a-z0-9]+)'
|
213 |
model: '$1'
|
|
|
|
|
|
|
|
|
214 |
- regex: 'HTV32(?:[);/ ]|$)'
|
215 |
model: '10'
|
216 |
- regex: 'HTV31(?:[);/ ]|$)'
|
512 |
- regex: 'BlackBerry'
|
513 |
model: 'BlackBerry'
|
514 |
|
515 |
+
# CHIA (www.ghia.com.mx)
|
516 |
CHIA:
|
517 |
+
regex: '(SVEGLIO[ _][QH]1|TREO_TAB8G|GTA7WF|GTKIDS7[BVR]|VENUS7)(?:[);/ ]|$)'
|
518 |
device: 'smartphone'
|
519 |
models:
|
520 |
- regex: 'SVEGLIO[ _]([QH]1)'
|
524 |
model: 'TREO TAB8G'
|
525 |
- regex: 'GTA7WF'
|
526 |
device: 'tablet'
|
527 |
+
model: 'A7 ROJA'
|
528 |
+
- regex: 'GTKIDS7[BVR]'
|
529 |
+
device: 'tablet'
|
530 |
+
model: 'GT KIDS 7'
|
531 |
+
- regex: 'VENUS7'
|
532 |
+
device: 'tablet'
|
533 |
+
model: 'VENUS 7'
|
534 |
|
535 |
# PALM
|
536 |
Palm:
|
550 |
|
551 |
# HP or Hewlett-Packard
|
552 |
HP:
|
553 |
+
regex: 'Hewlett-Packard|HP/HP|HP Chromebook|HP EliteBook 820|TouchPad/\d+\.\d+|hp-tablet|HP ?iPAQ|webOS.*P160U|HP (?:Pro )?Slate|HP [78]|HP 10 Plus|Compaq [7|8]|HP; [^;/)]+'
|
554 |
device: 'smartphone'
|
555 |
models:
|
556 |
- regex: 'HP Slate 6 Voice Tab'
|
590 |
- regex: 'HP ProBook (6560b)'
|
591 |
device: 'desktop'
|
592 |
model: 'ProBook $1'
|
593 |
+
- regex: 'Chromebook (11 G5|x360 11 G1 EE|13 G1)'
|
594 |
+
device: 'desktop'
|
595 |
+
model: 'Chromebook $1'
|
596 |
- regex: 'HP EliteBook 820 G2'
|
597 |
device: 'desktop'
|
598 |
model: 'EliteBook 820 G2'
|
982 |
- regex: '(?:Apple-|.+_)?iPad6[C,_](?:11|12)'
|
983 |
model: 'iPad 5 9.7'
|
984 |
device: 'tablet'
|
985 |
+
- regex: '(?:Apple-|.+_)?iPad7[C,_][12](?:[);/ ]|$)'
|
986 |
model: 'iPad Pro 2 12.9'
|
987 |
device: 'tablet'
|
988 |
+
- regex: '(?:Apple-|.+_)?iPad7[C,_][34](?:[);/ ]|$)'
|
989 |
model: 'iPad Pro 10.5'
|
990 |
device: 'tablet'
|
991 |
+
- regex: '(?:Apple-|.+_)?iPad7[C,_][56](?:[);/ ]|$)'
|
992 |
model: 'iPad 6 9.7'
|
993 |
device: 'tablet'
|
994 |
+
- regex: '(?:Apple-|.+_)?iPad7[C,_](?:11|12)(?:[);/ ]|$)'
|
995 |
model: 'iPad 7 10.2'
|
996 |
device: 'tablet'
|
997 |
- regex: '(?:Apple-|.+_)?iPad8[C,_](?:9|10)'
|
1085 |
model: 'Infinity N11'
|
1086 |
- regex: 'N8301'
|
1087 |
model: 'Infinity N12'
|
1088 |
+
- regex: 'Q440Plus(?:[);/ ]|$)'
|
1089 |
+
model: 'Q440 Plus'
|
1090 |
+
- regex: 'Micromax[_ ]Q353P(?:[);/ ]|$)'
|
1091 |
+
model: 'Q353 Plus'
|
1092 |
+
- regex: 'Q452(?:[);/ ]|$)'
|
1093 |
+
model: 'Spark 4G Prime'
|
1094 |
+
- regex: 'Q4601(?:[);/ ]|$)'
|
1095 |
+
model: 'Selfie 2 Note'
|
1096 |
|
1097 |
- regex: 'MicroMax(?:[ \-\_])?(X291|X246|X252|X458|X312)'
|
1098 |
model: '$1'
|
1154 |
|
1155 |
# Alba
|
1156 |
Alba:
|
1157 |
+
regex: 'Alba ?(?:57|4|10 TABLET|(?:[78]|10)(?:Nou|Pie))(?:[);/ ]|$)'
|
1158 |
device: 'smartphone'
|
1159 |
models:
|
1160 |
- regex: 'Alba 57'
|
1164 |
- regex: '10 TABLET'
|
1165 |
device: 'tablet'
|
1166 |
model: '10 Tablet'
|
1167 |
+
- regex: 'Alba((?:[78]|10)(?:Nou|Pie))'
|
1168 |
device: 'tablet'
|
1169 |
model: '$1'
|
1170 |
|
1467 |
- regex: 'Hollogram ([^;/)]+)(?: Build|[;)])'
|
1468 |
model: 'Hollogram $1'
|
1469 |
|
1470 |
+
# AGM (agm.tel)
|
1471 |
AGM:
|
1472 |
regex: 'AGM ([^/;)]+)(?: Build|[;)])'
|
1473 |
device: 'smartphone'
|
1474 |
+
models:
|
1475 |
+
- regex: 'AGM A9(?:[);/ ]|$)'
|
1476 |
+
model: 'A9'
|
1477 |
+
- regex: 'AGM ([^/;)]+)(?: Build|[;)])'
|
1478 |
+
model: '$1'
|
1479 |
|
1480 |
# Airness
|
1481 |
Airness:
|
1542 |
|
1543 |
# Alcatel (alcatelmobile.com)
|
1544 |
Alcatel:
|
1545 |
+
regex: 'Alcatel|Alc(?!or )[a-z0-9]+|One[ _]?Touch|idol3|TIMXL|(?:(?:4003[AJ]|4009[ADEFIKMSX]|4013[DEJKMX]|4014[ADEKMX]|4015[ADNTX]|4016[ADX]|4017[ADEFSX]|4018[ADEFMX]|4024[EDX]|4027[ADNX]|4028[AEJS]|4032[ADEX]|4034[ADEFGXTL]|4035[ADXY]|4045[ADEX]|4047[ADFGNX]|4049[DEGMX]|4060[SW]|A466BG|A621BL|4114E|4087U|5001[ADJTU]|5002[ADFH]|5003[ADGU]|5006D|5007[AU]|5008[ADUYT]|5009[AD]|5010[DEGSUX]|5011A|5012[DFG]|5015[ADEX]|5016[AXJ]|5017[ABDEOX]|5019D|5022[EDX]|5023[EF]|5024[ADJF]|5025[DEG]|5026[ADJ]|5027B|5028[AYD]|5029[EYD]|5030[DE]|5032W|5033[AEFXDJGMOTXYQS]|5034D|5036D|5038[ADEX]|5039[DY]|5041[CD]|5042[ADEFGWXT]|5044[ADGIKOPSTY]|5045[ADFGIJTXY]|5046[ADGIJSTUY]|5047[DIUY]|5048[AYUI]|5049[EGSWZ]|5050[ASXY]|5051[ADEJMTWX]|5052[ADY]|5053[ADKY]|5054[ADNSTWX]|5056[ADEGIJMNTUWX]|5057M|5058[AIY]|5059[ADJXYZIST]|5060[ADJ]|5061[KU]|5065[ADNWX]|5070D|5080[ADFQUX]|5085[ABCDGHIJNOQY]|5086[ADY]|5090[AIY]|5095[IKY]|5098[OS]|5099[ADYUI]|5116J|5145A|6016[ADEX]|6025H|6036[AXY]|6037[BKY]|6039[AHJKY]|6042D|6043[AD]|6044D|6045[BFIKOYX]|6050[AFY]|6055[ABDHIKPUYZ]|6058[ADX]|6060[SX]|6062W|6070K|7040[ADEFKRT]|7041[DX]|7042A|7043[AEKY]|7044[AX]|7045Y|7048[ASWX]|7053D|7055A|7070X|7071[ADX]|8030Y|8050[DEGX]|8063|8088[XQM]|9001[DIX]|9002X|9003[AX]|9024O|9005X|9026X|9007[ATX]|9008[ADIJNTUX]|9009G|9010X|9020A|9022X|9027[QFTWX]|9029Z|9203A|A(?:464BG|570BL|50[13]DL|57[17]VL|574BL)|I213|I216[AX]|(?<!\.)80(?:82|6[78])|A576CC)(?:_(?:EEA|RU))?|P360X)(?:[);/ ]|$)'
|
1546 |
device: 'smartphone'
|
1547 |
models:
|
1548 |
- regex: '4087U'
|
1613 |
model: 'One Touch Astro'
|
1614 |
- regex: '5027B'
|
1615 |
model: 'One Touch Dawn'
|
1616 |
+
- regex: '5024[ADF]|5028Y|6025H'
|
1617 |
model: '1S'
|
1618 |
- regex: '7071[ADX]'
|
1619 |
model: 'A7 XL'
|
1750 |
- regex: '9203A'
|
1751 |
model: 'A3 7" 3G'
|
1752 |
device: 'tablet'
|
1753 |
+
- regex: '9027[QFTWX]'
|
1754 |
model: '3T 8.0"'
|
1755 |
device: 'tablet'
|
1756 |
- regex: '9026X'
|
1791 |
- regex: '9024O'
|
1792 |
model: 'One Touch Pixi 5'
|
1793 |
device: 'tablet'
|
1794 |
+
- regex: 'I216[AX]'
|
1795 |
model: 'One Touch Pixi 7'
|
1796 |
device: 'tablet'
|
1797 |
- regex: 'I213'
|
1919 |
- regex: '9029Z'
|
1920 |
model: 'Joy Tab'
|
1921 |
device: 'tablet'
|
1922 |
+
- regex: '9029Z'
|
1923 |
+
model: 'Joy Tab'
|
1924 |
+
device: 'tablet'
|
1925 |
- regex: 'Alcatel UP'
|
1926 |
model: ''
|
1927 |
- regex: '(?:ALCATEL_)?A383G'
|
2108 |
|
2109 |
# Allwinner
|
2110 |
Allwinner:
|
2111 |
+
regex: '(?:QUAD-CORE (?:A64 p3|A33 y3|T3 K2001M)|ZY-07B|UltraOcta-T8|OCTA-CORE T8|OCTOPUS-CORE T8|QuadCore-R16)(?:[);/ ]|$)'
|
2112 |
device: 'tablet'
|
2113 |
models:
|
2114 |
- regex: 'QUAD-CORE A64 p3'
|
2126 |
- regex: 'OCTA-CORE T8'
|
2127 |
device: 'car browser'
|
2128 |
model: 'OCTA-CORE T8'
|
2129 |
+
- regex: 'OCTOPUS-CORE T8'
|
2130 |
+
device: 'car browser'
|
2131 |
+
model: 'OCTOPUS-CORE T8'
|
2132 |
+
- regex: 'QuadCore-R16'
|
2133 |
+
device: 'car browser'
|
2134 |
+
model: 'QUAD-CORE R16'
|
2135 |
|
2136 |
# altron
|
2137 |
altron:
|
2260 |
- regex: 'Archos ((?:[789]|10)[0-9]?[a-z]* ?(?:G9|G10|Helium|Titanium|Cobalt|Platinum|Xenon|Carbon|Neon|XS|IT)[^/;]*) Build'
|
2261 |
device: 'tablet'
|
2262 |
model: '$1'
|
2263 |
+
- regex: '(?:YL-)?Archos ([^/);]+)(?: Build|[;)])'
|
|
|
|
|
2264 |
model: '$1'
|
2265 |
|
2266 |
# Axxion
|
2431 |
|
2432 |
# Ark (Ark Electronic Technology)
|
2433 |
Ark:
|
2434 |
+
regex: '(ARK[_ -])?Benefit[_ -]([^/;]*)(?: Build|\))|Impulse[ _]P[12]|(?:EDGE A5HD|Elf_S8|ICON (R40\+|R45)|Wizard_[12]|UKOZI U5)(?:[);/ ]|$)'
|
2435 |
device: 'smartphone'
|
2436 |
models:
|
2437 |
- regex: '(?:ARK[_ -])?Benefit[_ -]([^/;]*)(?: Build|\))'
|
2448 |
model: 'Wizard $1'
|
2449 |
- regex: 'Elf_S8(?:[);/ ]|$)'
|
2450 |
model: 'Elf S8'
|
2451 |
+
- regex: 'UKOZI U5(?:[);/ ]|$)'
|
2452 |
+
model: 'Ukozi U5'
|
2453 |
|
2454 |
# Garmin-Asus
|
2455 |
Garmin-Asus:
|
2465 |
|
2466 |
# Asus
|
2467 |
Asus:
|
2468 |
+
regex: 'Asus|Transformer|ZenFone Max|MeMOPad 10|TF300T|Slider SL101|PadFone|ME302(?:C|KL)|ME301T|ME371MG|ME17(?:1|2V|3X)|(?:K0[01][0-9a-z]|(?:P(?:00[18ACIL]|01[MTVWYZ]|01MA|01T_1|02[13478])(?: Build|\))|X015D|X018D|X003|X00[7ABT]D|Z00D|Z00[MTY]D|Z01[7FGHKMR]D)|K01[579N])(?:[);/ ]|$)|G55[023]KL|ZB(631|602|633|55[135]|50[01])KL|ZC(55[134]|520|600)KL|ZA550KL|ZE(5[02]0|620|55[2345])KL|ZD55[23]KL|ZS6(?:61|7[01])KS|ZS(6[0236]0|55[10])KL|ZB(500KG|601KL)|MeMo Pad FHD 10 LTE|Z00[SV]D|P01Y_S'
|
2469 |
device: 'smartphone'
|
2470 |
models:
|
2471 |
# explicit tablet models
|
2481 |
- regex: 'ME302C(?:[);/ ]|$)'
|
2482 |
model: 'MeMO Pad FHD 10'
|
2483 |
device: 'tablet'
|
2484 |
+
- regex: '(ME302KL|MeMOPad 10FHD LTE|MeMo Pad FHD 10 LTE)(?:[);/ ]|$)'
|
2485 |
model: 'MeMO Pad FHD 10 LTE'
|
2486 |
device: 'tablet'
|
2487 |
- regex: 'ME301T(?:[);/ ]|$)'
|
2493 |
- regex: 'X Pad 10 LTE(?:[);/ ]|$)'
|
2494 |
model: 'X Pad 10 LTE'
|
2495 |
device: 'tablet'
|
2496 |
+
- regex: '(?:K01[3A7]|K007|K00R)(?:[);/ ]|$)|MeMO Pad 7'
|
2497 |
model: 'MeMO Pad 7'
|
2498 |
device: 'tablet'
|
2499 |
- regex: 'K01E(?:[);/ ]|$)'
|
2502 |
- regex: 'K00U|ME173X(?:[);/ ]|$)'
|
2503 |
model: 'MeMO Pad HD 7'
|
2504 |
device: 'tablet'
|
2505 |
+
- regex: '(?:K01[15]|K00L)(?:[);/ ]|$)'
|
2506 |
model: 'MeMO Pad 8'
|
2507 |
device: 'tablet'
|
2508 |
- regex: 'K014(?:[);/ ]|$)'
|
2532 |
- regex: 'Slider SL101'
|
2533 |
model: 'Eee Pad Slider SL101'
|
2534 |
device: 'tablet'
|
2535 |
+
- regex: 'P01[YZ](?:_S)?'
|
2536 |
model: 'ZenPad C 7.0'
|
2537 |
device: 'tablet'
|
2538 |
- regex: 'P008 Build'
|
2550 |
- regex: '(?:P024|P00A)(?:[);/ ]|$)'
|
2551 |
model: 'ZenPad 8.0'
|
2552 |
device: 'tablet'
|
2553 |
+
- regex: 'P01MA?(?:[);/ ]|$)'
|
2554 |
model: 'ZenPad S 8.0'
|
2555 |
device: 'tablet'
|
2556 |
+
- regex: 'ASUS_(w706)(?:[);/ ]|$)'
|
2557 |
+
model: '$1'
|
2558 |
+
device: 'tablet'
|
2559 |
- regex: 'P027'
|
2560 |
model: 'ZenPad 3S 10'
|
2561 |
device: 'tablet'
|
2579 |
- regex: 'K00G(?:[);/ ]|$)'
|
2580 |
model: 'Fonepad Note 6'
|
2581 |
device: 'phablet'
|
2582 |
+
- regex: '(?:K01[2N9]|K00E)(?:[);/ ]|$)'
|
2583 |
model: 'Fonepad 7'
|
2584 |
device: 'phablet'
|
2585 |
- regex: 'K00Z(?:[);/ ]|$)'
|
2672 |
model: 'ZenFone 3 Max'
|
2673 |
- regex: '(?:ASUS_)?(X008)'
|
2674 |
model: 'ZenFone 3 Pegasus'
|
2675 |
+
- regex: '(?:ASUS_)?(ZE553KL|Z01HDA?)'
|
2676 |
model: 'ZenFone 3 Zoom'
|
2677 |
- regex: '(?:ASUS_)?ZS550KL'
|
2678 |
model: 'ZenFone 3 Deluxe'
|
2680 |
model: 'ZenFone Selfie'
|
2681 |
- regex: '(?:ASUS_)?(Z016[DS]|Z01FD)'
|
2682 |
model: 'ZenFone 3 Deluxe'
|
2683 |
+
- regex: '(?:ASUS_)?Z(?:017DA|E520KL|E552KL|017D|012(?:DC?|S))'
|
2684 |
model: 'ZenFone 3'
|
2685 |
- regex: '(?:ASUS_)?Z01B[DS]|ZC551KL'
|
2686 |
model: 'ZenFone 3 Laser'
|
2752 |
regex: 'Excer[ _]'
|
2753 |
device: 'tablet'
|
2754 |
models:
|
2755 |
+
- regex: 'Excer[ _]G5.([36])'
|
2756 |
+
model: 'Excer G5.$1'
|
2757 |
- regex: 'Excer[ _]G5'
|
2758 |
model: 'Excer G5'
|
2759 |
- regex: 'Excer[ _]10[ _]PRO'
|
2835 |
|
2836 |
# Blu
|
2837 |
Blu:
|
2838 |
+
regex: 'BLU[ _]|(?:blu|Dash)[ _]([^/;)]+)(?: Build|[;)])|(?:Studio[ _](5.0K|5.5|View XL|Mega|C 8\+8|[CGM][ _]HD|[CGX]|SELFIE|Selfie LTE|Touch|M5 Plus|J[1258]|X8 HD)|Advance (4.0 ?[LM]|5.[02](?: HD)?|A4|L[45])|ENERGY (DIAMOND|XL)|Energy X 2|LIFE XL|B110DL|Dash (?:X[2L]|L3)|PURE (?:X[LR]|MINI)|Life One X2|G90(?: PRO)?|Grand M3|GRAND (?:5.5 HD|XL LTE)|R1 (?:HD|PLUS)|Tank Xtreme [45].0|Tank Xtreme Pro|Touchbook M7 Pro|DASH X PLUS|C[456] 2019|BOLD N1|B130DL|Vivo 5 Mini|C5L 2020)(?:[);/ ]|$)'
|
2839 |
device: 'smartphone'
|
2840 |
models:
|
2841 |
- regex: 'Advance (4.0 ?[LM]|4.0|5.[02](?: HD)?|A4|L[54])'
|
2842 |
model: 'Advance $1'
|
2843 |
+
- regex: '(?:BLU[_ ])?Studio[ _](5.0 C|5.5|C 5\+5 LTE|View XL|Mega|C 8\+8|[CG][ _]HD|C|G|Touch|M HD|M5 Plus|J[1258]|X8 HD|X5|XL|X)(?:[);/ ]|$)'
|
2844 |
model: 'Studio $1'
|
2845 |
- regex: '(?:BLU[_ ])?Studio[ _]5.0 ?K(?:[);/ ]|$)'
|
2846 |
model: 'Studio 5.0 K'
|
2922 |
model: 'Vivo Air LTE'
|
2923 |
- regex: 'Touchbook G7'
|
2924 |
model: 'Touchbook G7'
|
2925 |
+
- regex: 'C5L 2020'
|
2926 |
+
model: 'C5L (2020)'
|
2927 |
- regex: '(?:BLU[_ ])?VIVO[ _]SELFIE'
|
2928 |
model: 'Vivo Selfie'
|
2929 |
- regex: '(?:BLU[_ ])?Vivo 5 Mini'
|
2955 |
|
2956 |
# Blackview
|
2957 |
Blackview:
|
2958 |
+
regex: 'Blackview|(BV([24-9]000|[46]900|(5[1589]|9[15689])00|6[1368]00)(?:[ _](?:PRO))?|(P10000(?:[ _](?:PRO))?)|omega[ _]pro|Alife[ _][PS]1|Heatwave|DM550|BV9700Pro|(?<!Lenovo[_ ])A[68]0(?:Pro)?\))|A[86]0Plus|BL6000Pro'
|
2959 |
device: 'smartphone'
|
2960 |
models:
|
2961 |
- regex: 'A60Pro\)'
|
2964 |
model: 'A60'
|
2965 |
- regex: 'A80Pro(?:[);/ ]|$)'
|
2966 |
model: 'A80 Pro'
|
2967 |
+
- regex: '(A[86]0|BV5500)Plus(?:[);/ ]|$)'
|
2968 |
+
model: '$1 Plus'
|
2969 |
- regex: '(BV6000S)'
|
2970 |
model: '$1'
|
2971 |
+
- regex: '(BL6000|BV(?:[48]000|5500|9[5678]00|6[38]00))Pro'
|
2972 |
model: '$1 Pro'
|
2973 |
- regex: 'Blackview (A[78]|E7S)'
|
2974 |
model: '$1'
|
2975 |
- regex: 'BV9000Pro-F'
|
2976 |
model: 'BV9000 Pro F'
|
|
|
|
|
2977 |
- regex: '(BV6[13]00)(?:[);/ ]|$)'
|
2978 |
model: '$1'
|
2979 |
device: 'phablet'
|
2980 |
+
- regex: '(BV([24-9]000|6[69]00|4900|(5[1589]|9[15689])00)(?:[ _](?:PRO))?)'
|
2981 |
model: '$1'
|
2982 |
- regex: '(P10000(?:[ _](?:PRO))?)'
|
2983 |
model: '$1'
|
2986 |
- regex: '(Alife[ _][PS]1|DM550|Heatwave)'
|
2987 |
model: '$1'
|
2988 |
|
2989 |
+
# Bluboo (bluboo.tel)
|
2990 |
Bluboo:
|
2991 |
+
regex: 'Bluboo|Maya Build|(?:(?<!IQM )Picasso(?: 4G)?|Xfire2?)(?:[);/ ]|$)'
|
2992 |
device: 'smartphone'
|
2993 |
models:
|
2994 |
- regex: 'Maya Build'
|
2995 |
model: 'Maya'
|
2996 |
- regex: 'Xfire2'
|
2997 |
model: 'Xfire 2'
|
2998 |
+
- regex: 'Picasso(?: 4G)?'
|
2999 |
model: 'Picasso 4G'
|
3000 |
- regex: 'Xfire'
|
3001 |
model: 'Xfire'
|
3101 |
|
3102 |
# VGO TEL (vgotel.com)
|
3103 |
VGO TEL:
|
3104 |
+
regex: 'VGOTEL|(?:Venture V(?:[278]|12)|VentureV10|Ocean[_ ][689]|Ocean9L)(?:[);/ ]|$)'
|
3105 |
device: 'smartphone'
|
3106 |
models:
|
3107 |
+
- regex: 'Venture ?V([278]|1[02])(?:[);/ ]|$)'
|
3108 |
model: 'Venture V$1'
|
3109 |
- regex: 'Ocean[_ ]?([689]|9L)(?:[);/ ]|$)'
|
3110 |
model: 'Ocean $1'
|
3111 |
|
3112 |
# Vivo (vivo.com.cn, vivo.com)
|
3113 |
Vivo:
|
3114 |
+
regex: '((?:VIV-|BBG-)?(?<!FBCR/)vivo(?!(?:Browser)))|(?:V1730(D[AT]|GA)|V18(18CA|01A0|13B[AT]|18T|09[AT]|1[346][AT]|[13]8[AT]|14A|24[B]?A|2[19][AT]|3[12][AT]|36[AT])|V1731CA|V1732[AT]|V1818CT|V19[01]1[AT]|V1932[AT]|V191[3469][AT]|V192[1348]A|V193[04]A|V194[15]A|V1938CT|V1955A|V1938T|V1730EA|V19[26]2A|V196[35]A|V198[16]A|V1936A[L]?|V19[59]0A|V200[125]A|V2006|1819|V201[12]A|V202[0345]C?A|V202[235-9]|V205[47]A|V203[0268]|V2031[E]?A|V203[46]A|V204[013]|V204[6789]A|V20(6[158]|99|5[56]|66[B]?|7[23]|80)A|V2046|X50 Pro\+|I1927)(?:[);/ ]|$)'
|
3115 |
device: 'smartphone'
|
3116 |
models:
|
3117 |
- regex: 'V1824[B]?A(?:[);/ ]|$)'
|
3132 |
model: 'iQOO Neo 3'
|
3133 |
- regex: 'V1936A[L]?(?:[);/ ]|$)'
|
3134 |
model: 'iQOO Neo 855'
|
3135 |
+
- regex: 'V2055A(?:[);/ ]|$)'
|
3136 |
+
model: 'iQOO Neo 5'
|
3137 |
- regex: 'V1986A(?:[);/ ]|$)'
|
3138 |
model: 'iQOO Z1'
|
3139 |
- regex: 'V2012A(?:[);/ ]|$)'
|
3140 |
model: 'iQOO Z1x'
|
3141 |
+
- regex: 'V2073A(?:[);/ ]|$)'
|
3142 |
+
model: 'iQOO Z3'
|
3143 |
- regex: 'V1919A(?:[);/ ]|$)'
|
3144 |
model: 'iQOO Z5x'
|
3145 |
- regex: 'V2023A(?:[);/ ]|$)'
|
3146 |
model: 'iQOO U1'
|
3147 |
+
- regex: 'V2065A(?:[);/ ]|$)'
|
3148 |
+
model: 'iQOO U1x'
|
3149 |
+
- regex: 'V2061A(?:[);/ ]|$)'
|
3150 |
+
model: 'iQOO U3'
|
3151 |
- regex: 'V2024A(?:[);/ ]|$)'
|
3152 |
model: 'iQOO 5'
|
3153 |
- regex: 'V2025A(?:[);/ ]|$)'
|
3156 |
model: 'V20'
|
3157 |
- regex: 'V2040(?:[);/ ]|$)'
|
3158 |
model: 'V20 (2021)'
|
3159 |
+
- regex: 'Vivo 1921(?:[);/ ]|$)'
|
3160 |
+
model: 'U20'
|
3161 |
- regex: 'vivo 1805(?:[);/ ]|$)'
|
3162 |
model: 'Nex'
|
3163 |
- regex: 'V1923A(?:[);/ ]|$)'
|
3180 |
model: 'S6 5G'
|
3181 |
- regex: 'V2020C?A(?:[);/ ]|$)'
|
3182 |
model: 'S7'
|
3183 |
+
- regex: 'V2031EA(?:[);/ ]|$)'
|
3184 |
+
model: 'S7e'
|
3185 |
+
- regex: 'V2080A(?:[);/ ]|$)'
|
3186 |
+
model: 'S7t'
|
3187 |
+
- regex: 'V2072A(?:[);/ ]|$)'
|
3188 |
+
model: 'S9 (2021)'
|
3189 |
+
- regex: 'V2048A(?:[);/ ]|$)'
|
3190 |
+
model: 'S9e'
|
3191 |
- regex: 'V1941A(?:[);/ ]|$)'
|
3192 |
model: 'U3'
|
3193 |
- regex: 'V1928A(?:[);/ ]|$)'
|
3200 |
model: 'V15'
|
3201 |
- regex: 'vivo 1818(?:[);/ ]|$)'
|
3202 |
model: 'V15 Pro'
|
3203 |
+
- regex: 'vivo 19(?:10|09)(?:[);/ ]|$)'
|
3204 |
model: 'V17 Pro'
|
3205 |
+
- regex: 'vivo 1907(?:_19)?(?:[);/ ]|$)'
|
3206 |
+
model: 'V17 Neo'
|
3207 |
+
- regex: 'vivo 1920(?:[);/ ]|$)'
|
3208 |
+
model: 'V17'
|
3209 |
- regex: 'V2022(?:[);/ ]|$)'
|
3210 |
model: 'V20 SE'
|
3211 |
- regex: '(?:VIV-|BBG-)?vivo[ _]1601(?:[);/ ]|$)'
|
3224 |
model: 'V9'
|
3225 |
- regex: 'vivo 1727(?:[);/ ]|$)'
|
3226 |
model: 'V9 Youth'
|
3227 |
+
- regex: 'vivo 1851(?:[);/ ]|$)'
|
3228 |
+
model: 'V9 Pro'
|
3229 |
+
- regex: 'vivo X5Pro(?:[);/ ]|$)'
|
3230 |
+
model: 'X5 Pro'
|
3231 |
- regex: 'vivo 1721(?:[);/ ]|$)'
|
3232 |
model: 'X20'
|
3233 |
- regex: 'X20Plus(?:[);/ ]|$)'
|
3234 |
model: 'X20 Plus'
|
3235 |
- regex: 'vivo 1725(?:[);/ ]|$)'
|
3236 |
model: 'X21'
|
3237 |
+
- regex: 'vivo X21i(?: A)?(?:[);/ ]|$)'
|
3238 |
+
model: 'X21i'
|
3239 |
- regex: 'V1814[AT](?:[);/ ]|$)'
|
3240 |
model: 'X21S'
|
3241 |
- regex: 'V1809[AT](?:[);/ ]|$)'
|
3256 |
model: 'X50 Pro'
|
3257 |
- regex: '(?:V2011A|X50 Pro\+)(?:[);/ ]|$)'
|
3258 |
model: 'X50 Pro Plus'
|
3259 |
+
- regex: 'V2046A(?:[);/ ]|$)'
|
3260 |
+
model: 'X60'
|
3261 |
+
- regex: '(?:V2047A|V2046)(?:[);/ ]|$)'
|
3262 |
+
model: 'X60 Pro'
|
3263 |
+
- regex: 'V2056A(?:[);/ ]|$)'
|
3264 |
+
model: 'X60 Pro Plus'
|
3265 |
- regex: 'X9Plus(?:[);/ ]|$)'
|
3266 |
model: 'X9 Plus'
|
3267 |
- regex: 'vivo 1902(?:[);/ ]|$)'
|
3268 |
model: 'Y17'
|
3269 |
+
- regex: 'vivo 1906(?:[);/ ]|$)'
|
3270 |
+
model: 'Y11'
|
3271 |
- regex: 'vivo 1915(?:[);/ ]|$)'
|
3272 |
model: 'Y19'
|
3273 |
- regex: 'V202[79](?:[);/ ]|$)'
|
3274 |
model: 'Y20'
|
3275 |
- regex: 'V2028(?:[);/ ]|$)'
|
3276 |
model: 'Y11s'
|
3277 |
+
- regex: 'V2038(?:[);/ ]|$)'
|
3278 |
+
model: 'Y20s'
|
3279 |
- regex: 'V2043(?:[);/ ]|$)'
|
3280 |
model: 'Y20 (2021)'
|
3281 |
+
- regex: 'V2041(?:[);/ ]|$)'
|
3282 |
+
model: 'Y72 5G'
|
3283 |
- regex: 'V2032(?:[);/ ]|$)'
|
3284 |
model: 'Y20i'
|
3285 |
- regex: 'V2023(?:[);/ ]|$)'
|
3288 |
model: 'Y3'
|
3289 |
- regex: 'V1930A(?:[);/ ]|$)'
|
3290 |
model: 'Y3 Standard'
|
3291 |
+
- regex: '(?:vivo 1938|V203[46]A)(?:[);/ ]|$)'
|
3292 |
+
model: 'Y30'
|
3293 |
+
- regex: 'V2099A(?:[);/ ]|$)'
|
3294 |
+
model: 'Y30 (2021)'
|
3295 |
+
- regex: 'V2066[B]?A(?:[);/ ]|$)'
|
3296 |
+
model: 'Y30g'
|
3297 |
- regex: 'V2036(?:[);/ ]|$)'
|
3298 |
model: 'Y31'
|
3299 |
+
- regex: 'V2068A(?:[);/ ]|$)'
|
3300 |
+
model: 'Y31s'
|
3301 |
- regex: 'V1934A(?:[);/ ]|$)'
|
3302 |
model: 'Y5s'
|
3303 |
- regex: 'V1965A(?:[);/ ]|$)'
|
3306 |
model: 'Y51'
|
3307 |
- regex: 'V2054A(?:[);/ ]|$)'
|
3308 |
model: 'Y31s'
|
3309 |
+
- regex: 'V2057A(?:[);/ ]|$)'
|
3310 |
+
model: 'Y52s'
|
3311 |
- regex: 'vivo 1606(?:[);/ ]|$)'
|
3312 |
model: 'Y53i'
|
3313 |
- regex: 'vivo 1603(?:[);/ ]|$)'
|
3320 |
model: 'Y69'
|
3321 |
- regex: 'V2002A(?:[);/ ]|$)'
|
3322 |
model: 'Y70s'
|
3323 |
+
- regex: 'V2006(?:[);/ ]|$)'
|
3324 |
+
model: 'Y60s'
|
3325 |
- regex: 'vivo 1724(?:[);/ ]|$)'
|
3326 |
model: 'Y71'
|
3327 |
- regex: 'vivo 1801(?:[);/ ]|$)'
|
3328 |
model: 'Y71i'
|
3329 |
- regex: 'V1731CA(?:[);/ ]|$)'
|
3330 |
model: 'Y73'
|
3331 |
+
- regex: 'V2031A(?:[);/ ]|$)'
|
3332 |
+
model: 'Y73s'
|
3333 |
- regex: 'V1913[AT](?:[);/ ]|$)'
|
3334 |
model: 'Y7s'
|
3335 |
- regex: 'vivo 180([38]|8i)(?:[);/ ]|$)'
|
3342 |
model: 'Y83 Pro'
|
3343 |
- regex: 'V1730EA(?:[);/ ]|$)'
|
3344 |
model: 'Y89'
|
3345 |
+
- regex: 'vivo 1823(?:[);/ ]|$)'
|
3346 |
+
model: 'Y90'
|
3347 |
- regex: 'vivo 181[17](?:[);/ ]|$)'
|
3348 |
model: 'Y91'
|
3349 |
- regex: 'V1945A(?:[);/ ]|$)'
|
3422 |
- regex: 'Tab'
|
3423 |
model: 'Tab'
|
3424 |
device: 'tablet'
|
3425 |
+
- regex: 'E([67]00)'
|
3426 |
+
model: 'E$1'
|
3427 |
+
- regex: '(?:Beeline[_ ])?Smart[ _]?([0-9])'
|
|
|
|
|
3428 |
model: 'Smart $1'
|
3429 |
- regex: 'Smart Dual'
|
3430 |
model: 'Smart Dual'
|
3447 |
|
3448 |
# BenQ
|
3449 |
BenQ:
|
3450 |
+
regex: 'BENQ(?:[ \-])?([a-z0-9]+)|(?:F52_09|F5_15)(?:[);/ ]|$)'
|
3451 |
device: 'feature phone'
|
3452 |
models:
|
3453 |
+
- regex: 'F(52|5)_(?:15|09)(?:[);/ ]|$)'
|
3454 |
+
model: 'F$1'
|
3455 |
- regex: 'BENQ(?:[ \-])?([a-z0-9]+)'
|
3456 |
model: '$1'
|
3457 |
|
3985 |
|
3986 |
# Casper
|
3987 |
Casper:
|
3988 |
+
regex: 'CASPER[_ ]|VIA[- _](T7D|A[34]|E3|F[123]|G[34]|M4|[LS]8|S7|P2|V8C|A[13]_Plus(?:_64)?|A1(?:_1)?|S[13]0|S|T17_M|T1[07]|T7|T7-3G|T8B|T8D-3G|S1[78])(?:[);/ ]|$)'
|
3989 |
device: 'smartphone'
|
3990 |
models:
|
3991 |
- regex: '(?:CASPER[_ ])?VIA_A1_Plus(?:_64)?'
|
3992 |
model: 'VIA A1 Plus'
|
3993 |
+
- regex: '(?:CASPER[_ ])?VIA[_ ](G1_Plus|A3_Plus|G[13]|E1|[AE]2|M[123]|V[35689]|V10|G3|V6X|A[34]|E3|F[123]|G4|M4|P2|S|V8C|A1(?:_1)?)(?:[);/ ]|$)'
|
3994 |
model: 'VIA $1'
|
3995 |
- regex: 'CASPER_VIA_E1c'
|
3996 |
model: 'VIA E1C'
|
4041 |
|
4042 |
# Celkon
|
4043 |
Celkon:
|
4044 |
+
regex: 'Celkon|Android 7.+ UNIQ(?: Build|[);])|(?:Millennia Hero|2GBStar|2GBXpress|CliQ2|Campus Prime)(?:[);/ ]|$)'
|
4045 |
device: 'smartphone'
|
4046 |
models:
|
4047 |
- regex: 'Celkon[ _*](C[78]20)'
|
4048 |
model: '$1'
|
4049 |
device: 'tablet'
|
4050 |
+
- regex: 'Celkon[_ ]4G_TAB-8'
|
4051 |
+
model: '4G Tab 8'
|
4052 |
+
device: 'tablet'
|
4053 |
- regex: 'Millennia Hero'
|
4054 |
model: 'Millennia Hero'
|
4055 |
+
- regex: '2GBStar'
|
4056 |
+
model: '2GB Star'
|
4057 |
+
- regex: '2GBXpress'
|
4058 |
+
model: '2GB Xpress'
|
4059 |
+
- regex: 'CliQ2(?:[);/ ]|$)'
|
4060 |
+
model: 'CliQ 2'
|
4061 |
+
- regex: 'Android 7.+ UniQ(?: Build|[);])'
|
4062 |
+
model: 'UniQ'
|
4063 |
+
- regex: '(Campus Prime)(?:[);/ ]|$)'
|
4064 |
+
model: '$1'
|
4065 |
- regex: 'Celkon[ _*](CT[^;/]+) Build'
|
4066 |
model: '$1'
|
4067 |
device: 'tablet'
|
4087 |
|
4088 |
# Cherry Mobile (cherrymobile.com)
|
4089 |
'Cherry Mobile':
|
4090 |
+
regex: 'Cherry|Superion S1 DTV|Flare([ _])?(2X|4|A[123]|J[123568]|P[13]|S[4-8]|X2|Y[367]|S Play|HD|LITE|XL|X_V2|Y3s|Tab)(?:[ _](?:Pro|Plus|Max|LTE))?|Fusion Bolt|Omega[_ ](?:Icon 2|Icon Lite 2|lite[_ ][43][Cs]?|HD [45]|HD_Duo)|Spin Max 2|Selfie_Two|Flare_5'
|
4091 |
device: 'smartphone'
|
4092 |
models:
|
4093 |
- regex: '(Flare2X)'
|
4116 |
model: 'Flare X V2'
|
4117 |
- regex: 'Flare[ _](A2|J3|P1|S[467])[ _]Lite'
|
4118 |
model: 'Flare $1 Lite'
|
4119 |
+
- regex: 'Flare[ _](J[12]|S[57]|Y3|J6|P1)[ _]mini'
|
4120 |
model: 'Flare $1 Mini'
|
4121 |
+
- regex: 'Flare[_ ]?(S[567]|J[63])[_ ]?Plus'
|
4122 |
+
model: 'Flare $1 Plus'
|
4123 |
- regex: 'Flare_J2_2018'
|
4124 |
model: 'Flare J2 (2018)'
|
4125 |
- regex: 'Flare S4 Max LTE'
|
4128 |
model: 'Flare $1 Max'
|
4129 |
- regex: 'FlareS5LiteDTV'
|
4130 |
model: 'Flare S5 Lite DTV'
|
4131 |
+
- regex: 'Flare[_ ]J2[_ ]DTV'
|
4132 |
+
model: 'Flare S2 DTV'
|
4133 |
+
- regex: 'Flare[_ ]Lite[_ ]3S'
|
4134 |
+
model: 'Flare Lite S3'
|
4135 |
- regex: 'FLARE S6 POWER'
|
4136 |
model: 'Flare S6 Power'
|
4137 |
+
- regex: 'Flare(?:[ _])?(A[123]|J8 LTE|J[13568]|P[13]|S[4-8]|X2|Y3s|Y7_LTE|Y[673]|[45])'
|
4138 |
model: 'Flare $1'
|
4139 |
- regex: 'OMEGA HD ([45])'
|
4140 |
model: 'Omega HD $1'
|
4212 |
|
4213 |
# ComTrade Tesla
|
4214 |
ComTrade Tesla:
|
4215 |
+
regex: 'Tesla(?!Group/LUMUS)|Impulse 7.85 3G|Impulse 10.1 OCTA|Smartphone_6.1|SP(?:6.2|6.2_Lite)|TTL(?:713G|8)'
|
4216 |
device: 'smartphone'
|
4217 |
models:
|
4218 |
- regex: 'TeslaEvo5.0'
|
4405 |
|
4406 |
# Coolpad
|
4407 |
Coolpad:
|
4408 |
+
regex: '(?:YL-)?Coolpad|(?:Cool_9S|1824-S0|8190Q|1831-A0|8676-[AM]01|CP8298_I00|CP3648A|CP8676_I0[23]|REVVLPLUS C3701A|VCR-[AI]0|C105-E0|C106-[79]| C106|MTS-T0|cp3705A[S]?|ORL-C0|DLS-E0|1826-I01|8298-(?:M02|A01)|5560S)(?:[);/ ]|$)|(8295|5860S) Build'
|
4409 |
device: 'smartphone'
|
4410 |
models:
|
4411 |
- regex: 'VCR-[AI]0'
|
4431 |
model: 'Cool 1'
|
4432 |
- regex: 'C105-E0(?:[);/ ]|$)'
|
4433 |
model: 'Cool S1'
|
4434 |
+
- regex: '1826-I01(?:[);/ ]|$)'
|
4435 |
+
model: 'Cool 5'
|
4436 |
- regex: 'ORL-C0(?:[);/ ]|$)'
|
4437 |
model: 'Cool 9'
|
4438 |
- regex: 'Cool_9S(?:[);/ ]|$)'
|
4447 |
model: 'Note 3 Plus'
|
4448 |
- regex: 'CP8298_I00(?:[);/ ]|$)'
|
4449 |
model: 'Note 3 Lite'
|
4450 |
+
- regex: '(8676-[AM]01|8298-(?:M02|A01))(?:[);/ ]|$)'
|
4451 |
model: '$1'
|
4452 |
- regex: '(?:YL-)?Coolpad[ _\-]?([^/;]+) Build'
|
4453 |
model: '$1'
|
4481 |
|
4482 |
# Cricket
|
4483 |
Cricket:
|
4484 |
+
regex: 'Cricket-([a-z0-9]+)|(?:U325AC|U705AC|V350C)(?:[);/ ]|$)'
|
4485 |
device: 'smartphone'
|
4486 |
models:
|
4487 |
+
- regex: 'U325AC'
|
4488 |
+
model: 'Icon 2'
|
4489 |
- regex: 'U705AC'
|
4490 |
model: 'Ovation'
|
4491 |
+
- regex: 'V350C'
|
4492 |
+
model: 'Influence'
|
4493 |
- regex: 'Cricket-([a-z0-9]+)'
|
4494 |
device: 'feature phone'
|
4495 |
model: '$1'
|
4520 |
|
4521 |
# AllDocube (alldocube.com)
|
4522 |
AllDocube:
|
4523 |
+
regex: '(?:T1001XS?|T1006S?|iPlay_[234]0|U1006H?)(?:[);/ ]|$)'
|
4524 |
device: 'tablet'
|
4525 |
models:
|
4526 |
- regex: 'T1001XS(?:[);/ ]|$)'
|
4533 |
model: 'M5X'
|
4534 |
- regex: 'U1006H?(?:[);/ ]|$)'
|
4535 |
model: 'iPlay 10 Pro 10.1"'
|
4536 |
+
- regex: 'iPlay_([234]0)(?:[);/ ]|$)'
|
4537 |
model: 'iPlay $1'
|
4538 |
|
4539 |
# Cube (short name Alldocube)
|
4567 |
|
4568 |
# CUBOT
|
4569 |
CUBOT:
|
4570 |
+
regex: 'CUBOT|(?<!QUMO )QUEST(?!(?:[0-9]|\s[0-9]))(?: LITE)?|(?:NOTE 20 PRO|RAINBOW 2|KING_KONG_3|KINGKONG 5 Pro|ZORRO 001|KINGKONG[_ ]MINI2?|KING KONG CS|R15_PRO|S550 Pro)(?:[);/ ]|$)'
|
4571 |
device: 'smartphone'
|
4572 |
models:
|
4573 |
- regex: 'CHEETAH 2'
|
4584 |
model: 'King Kong Mini'
|
4585 |
- regex: 'KING_KONG_3'
|
4586 |
model: 'King Kong 3'
|
4587 |
+
- regex: 'KINGKONG 5 Pro'
|
4588 |
+
model: 'King Kong 5 Pro'
|
4589 |
- regex: 'KING KONG CS'
|
4590 |
model: 'King Kong CS'
|
4591 |
- regex: 'KING KONG'
|
4608 |
model: 'Note Plus'
|
4609 |
- regex: 'NOTE 20 PRO'
|
4610 |
model: 'Note 20 Pro'
|
4611 |
+
- regex: '(R15|S550)[_ ]PRO'
|
4612 |
+
model: '$1 Pro'
|
4613 |
- regex: 'CUBOT[_ ]NOTE[_ ]S'
|
4614 |
model: 'Note S'
|
4615 |
- regex: 'CUBOT_NOVA'
|
4705 |
|
4706 |
# Danew
|
4707 |
Danew:
|
4708 |
+
regex: 'Dslide ?([^;/]+) Build|Konnect_?(?:402|50[246]|60[127])|GEODROID_A5|Dslide ?(?:714|101[45]|1013QC)'
|
4709 |
device: 'smartphone'
|
4710 |
models:
|
4711 |
- regex: 'Konnect_?(402|50[246]|60[127])'
|
4716 |
- regex: 'GEODROID_A5'
|
4717 |
device: 'tablet'
|
4718 |
model: 'Geodroid A5'
|
4719 |
+
- regex: 'Dslide ?(714|1013QC|101[45])'
|
4720 |
+
device: 'tablet'
|
4721 |
+
model: 'Dslide $1'
|
4722 |
|
4723 |
# Denver Electronics (denver-electronics.com)
|
4724 |
Denver:
|
4740 |
models:
|
4741 |
- regex: 'XCD35'
|
4742 |
model: 'XCD35'
|
4743 |
+
- regex: 'Venue ((?:10|[78]) [0-9]{4}|[78] HSPA\+)'
|
4744 |
model: 'Venue $1'
|
4745 |
device: 'tablet'
|
4746 |
+
- regex: '(?:Dell )?Venue(?: Build|[);])'
|
4747 |
model: 'Venue'
|
4748 |
- regex: 'Dell; Venue Pro'
|
4749 |
model: 'Venue Pro'
|
4778 |
|
4779 |
# DEXP
|
4780 |
DEXP:
|
4781 |
+
regex: 'DEXP|(?:Ursus|Ixion)[ _]([^;/)]+)|H135[ _]Build|Larus_TV1|Ixion(?:ML4.7|ES250)|M150Storm|(?:SENIOR|F4[38]D8000K|VA[12]10|VA170|ML450|MS[56]50|BL[123]50|BS155|BS160|BS[1256]50|AL[12]40|AL[23]50|AS155|AS260|GS15[035]| (?:N280i|P380i|R110|E210|BL155|BL160|A160|B450|B340|B35[05]|T155|A1[45]0|A340|AS160|GL[23]55|G250|G15[05]|ES750|XL150|S280|Z[34]55|H170|P510|L2[17]0))(?:[);/ ]|$)'
|
4782 |
device: 'smartphone'
|
4783 |
models:
|
4784 |
- regex: 'Ixion[_ ]([^;/]+)(?: Build|\))'
|
4785 |
model: 'Ixion $1'
|
4786 |
+
- regex: '(ML450|MS[56]50|ES750|XL150)(?:[);/ ]|$)'
|
4787 |
model: 'Ixion $1'
|
4788 |
- regex: 'IxionES250(?:[);/ ]|$)'
|
4789 |
model: 'Ixion ES250 Rage'
|
4801 |
model: '5.85" AS260'
|
4802 |
device: 'phablet'
|
4803 |
|
4804 |
+
- regex: 'Ursus[ _]([^;/)]+)(?: Build|[);])'
|
4805 |
model: 'Ursus $1'
|
4806 |
device: 'tablet'
|
4807 |
+
- regex: '(VA[21]10|VA170|E210|R110|N280i|P380i|P510|S280|H170|L2[17]0)(?:[);/ ]|$)'
|
4808 |
model: 'Ursus $1'
|
4809 |
device: 'tablet'
|
4810 |
|
4811 |
+
- regex: ' (B450|B340|B35[05]|BL155|BL160|A160|A340|T155|Z[34]55|G250)(?:[);/ ]|$)'
|
4812 |
model: '$1'
|
4813 |
- regex: 'SENIOR(?:[);/ ]|$)'
|
4814 |
model: 'Senior'
|
4820 |
- regex: 'H135[ _]Build'
|
4821 |
model: 'Atlas'
|
4822 |
device: 'desktop'
|
4823 |
+
- regex: '(BL[123]50|BS155|BS160|BS[1256]50|AL[12]40|A1[45]0|GS15[035]|AS160|GL[23]55|G15[05])(?:[);/ ]|$)'
|
4824 |
model: '$1'
|
4825 |
- regex: 'DEXP[ _]([^;/]+) Build'
|
4826 |
model: '$1'
|
4877 |
|
4878 |
# Digma
|
4879 |
Digma:
|
4880 |
+
regex: 'Digma[_ ]([^;/]+) Build|HIT HT707[10]MG|CITI (?:7 E401 4G|8 E400 4G|ATL 4G|Kids|Octa [178]0|1902 3G|10 E402|Z530 3G)|(CITI[_ ](?:[A-Z0-9]+)[_ ][34]G)[ _][TC][ST](606[32]ML|111[46]ML|11[459]4MG|1117PG|1207MG|1210MG|1195MG|1196ML|3001ML|4024PG|5009PL|5021ML|5026PL|500[67]PG|7052PG|706[56]MG|709[68]PL|7097MG|720[48]MG|7140ML|7141MG|7113PL|7193MG|820[69]MG|7153MG|8139ML|8143MG|8152ML|1050PL|8205PG|7203MG|106[24]ML|1115MG)|HIT 4G|HT7074ML|IDX5|(iDx10|iDx7)|MVM900H(?:WZ|C)|MVM908HCZ|(iDxD8 3G|iDxD10 3G|iDrQ10 3G|iDxD[45]|iDxQ5|iD[nx]D7(?:[_ ]3G)?)|PS604M|PT452E|LINX B510 3G LT5037MG|LINX A452 3G LT4030PG|LINX A453 3G LT4038PG|LINX A420 3G LS4019PG|LINX A450 3G LT4028PG|Linx A400 3G LT4001PG|Linx C500 3G LT5001PG|Linx PS474S|LS504[01]PL|LT40(47|54)MG|PS1043MG|LS405[01]MG|LS5053ML|LT5048MG|HT7071MG|LT5052ML|HT5035PG|HT4039PG|LT4049PG|NS6902QL|NS9797MG|TS7854M|TS1012E 3G|TT1004PG|TT702[045]MG|TT1002MG|TT7026MW|VRL42|((?:Optima|Platina|Plane)[ _](?:[EM])?(?:[0-9\.ST]+|Prime)(?:[ _][43]G)?)|(VOX[ _](?:[0-9\.A-Z]+)[_ ][43]G)'
|
4881 |
device: 'smartphone'
|
4882 |
models:
|
4883 |
- regex: 'HIT(?: 3G)? HT707[10]MG'
|
4993 |
- regex: 'Digma[_ ]([^;/]+) Build'
|
4994 |
model: '$1'
|
4995 |
device: 'tablet'
|
4996 |
+
# VR headset
|
4997 |
+
- regex: 'VRL42(?:[);/ ]|$)'
|
4998 |
+
device: 'wearable'
|
4999 |
+
model: 'VR L42'
|
5000 |
|
5001 |
# DoCoMo
|
5002 |
DoCoMo:
|
5014 |
|
5015 |
# Doogee
|
5016 |
Doogee:
|
5017 |
+
regex: 'DOOGEE[/ _-]|Valencia2_Y100(?:_?(?:pro|plus))?|Y100_Plus|X5max(?:[_ ]PRO)?|Shoot_[12]|x5_doogee|(KISSME|BIGBOY|COLLO[23]?|DAGGER|DISCOVERY2?|FIND|HOTWIND|LATTE|MAX|MINT|MOON|PIXELS|RAINBOX|TURBO|VALENCIA|VOYAGER2?|TITANS2?)[ -_](DG[0-9]+C?)(?:[);/ ]|$)|(?:BL12000|BL5500[_ ]Lite|X9 Mini|LEO_DG280|Y9Plus|Hitman_DG850|S(?:[568]8|9[056]|59|40)Pro|X95Pro|S40Lite|BL[579]000|N20Pro|(?<!Lenovo )S90C|Ibiza_F2|Iron-bone DG750)(?:[);/ ]|$)'
|
5018 |
device: 'smartphone'
|
5019 |
models:
|
5020 |
- regex: '(?:Valencia2_)?Y100_Plus(?:[);/ ]|$)'
|
5021 |
model: 'Valencia2 Y100 Plus'
|
5022 |
- regex: 'Valencia2_Y100pro'
|
5023 |
model: 'Valencia2 Y100 Pro'
|
5024 |
+
- regex: 'Valencia2_Y100(?:[);/ ]|$)'
|
5025 |
+
model: 'Valencia2 Y100'
|
5026 |
- regex: 'LEO_(DG280)'
|
5027 |
model: 'Leo $1'
|
5028 |
+
- regex: 'Iron-bone (DG750)'
|
5029 |
+
model: 'Iron Bone $1'
|
5030 |
- regex: '(BL[579]000|S90C)(?:[);/ ]|$)'
|
5031 |
model: '$1'
|
5032 |
- regex: 'X95Pro(?:[);/ ]|$)'
|
5117 |
- regex: 'DNS[ _\-]([^;/]+)(?: Build|[);])'
|
5118 |
model: '$1'
|
5119 |
|
5120 |
+
# E-Boda (e-boda.ro)
|
5121 |
E-Boda:
|
5122 |
+
regex: 'E-Boda|Eclipse_(?:G400M|G500)|Revo R77 GPS'
|
5123 |
device: 'smartphone'
|
5124 |
models:
|
5125 |
- regex: 'E-Boda ((?:Revo|Izzycomm|Essential|Intelligence|Supreme)[^/;]+) Build'
|
5126 |
device: 'tablet'
|
5127 |
model: '$1'
|
5128 |
+
- regex: 'Revo R77 GPS'
|
5129 |
+
device: 'tablet'
|
5130 |
+
model: 'Revo R77 GPS'
|
5131 |
- regex: 'Eclipse_(G400M|G500)'
|
5132 |
model: 'Eclipse $1'
|
5133 |
- regex: 'E-Boda ([^/;]+) Build'
|
5186 |
|
5187 |
# EE
|
5188 |
EE:
|
5189 |
+
regex: 'Hawk_from_EE|Rook from EE'
|
5190 |
device: 'smartphone'
|
5191 |
models:
|
5192 |
- regex: 'Hawk_from_EE'
|
5193 |
model: 'Hawk'
|
5194 |
+
- regex: 'Rook from EE'
|
5195 |
+
model: 'Rock'
|
5196 |
|
5197 |
# EKT
|
5198 |
EKT:
|
5217 |
|
5218 |
# Elephone
|
5219 |
Elephone:
|
5220 |
+
regex: 'Elephone|Vowney(?: Lite)?|P6000( ?Pro| ?Plus|\+| ?02| 5.0 01)?'
|
5221 |
device: 'smartphone'
|
5222 |
models:
|
5223 |
- regex: 'Elephone Trunk(?:[);/ ]|$)'
|
5224 |
model: 'Trunk'
|
5225 |
+
- regex: 'Vowney Lite(?:[);/ ]|$)'
|
5226 |
+
model: 'Vowney Lite'
|
5227 |
+
- regex: 'Vowney(?:[);/ ]|$)'
|
5228 |
+
model: 'Vowney'
|
5229 |
- regex: 'P6000(\+| ?Plus)(?:[);/ ]|$)'
|
5230 |
model: 'P6000 Plus'
|
5231 |
- regex: 'P6000 02(?:[);/ ]|$)'
|
5355 |
|
5356 |
# Sony & Sony Ericsson (combined as they are mixed up)
|
5357 |
Sony:
|
5358 |
+
regex: 'Sony(?: ?Ericsson)?|SGP|Xperia|(?:[4-9]0[12])SO|C1[569]0[45]|C2[01]0[45]|C230[45]|C530[236]|C550[23]|C6[56]0[236]|C6616|C68(?:0[26]|[34]3)|C69(?:0[236]|16|43)|D200[45]|D21(?:0[45]|14)|D22(?:0[236]|12|43)|D230[2356]|D240[36]|D25(?:02|33)|D510[236]|D530[36]|D5316|D5322|D5503|D58[03]3|D65(?:0[23]|43|63)|D66[03458]3|D66[14]6|D6708|E(?:20[0345]3|2006|210[45]|2115|2124|230[36]|2312|23[356]3|530[36]|53[3456]3|5506|55[356]3|56[46305][36]|58[02]3|65[35]3|66[0358]3|68[358]3)|I[34]312|I4332|F311[12356]|F331[13]|F321[12356]|F5[13]21|F5122|F813[12]|F833[12]|G312[135]|G311[26]|G322[136]|G3212|G331[123]|G3412|G3416|G342[136]|G823[12]|G834[123]|G8[14]4[12]|G8188|H(?:3113|3123|3133|3213|3223|3311|3321|4113|4133|4213|4233|4311|4331|4413|4433|82[167]6|83[12]4|8416|9436)|(?:WT|LT|SO|ST|SK|MK)[0-9]+[a-z]+[0-9]*(?: Build|\))|X?L39H|XM50[ht]|W960|portalmmm/2\.0 K|S3[69]h|SOG01|SOL2[2346]|SOV3[1-9]|SOV4[0-3]|X10[ia]v?|E1[05][ai]v?|MT[0-9]{2}[a-z]? Build|SO-0(?:[12]C|[345]D|[234]E|[1-5]F|[1-5]G|[1-4]H|[1-4]J|[1-5]K|1M|[1-3]L)|R800[aix]|J3173|J82[17]0|J9110|J92[16]0|J81[17]0|I[34]113|I3[12]23|I42[19]3|H9493|H8296|H8166|H4493|G2299|LiveWithWalkman|BRAVIA|SGP771|E3 Dual|A[01]01SO|I4193|E6508|SOT31|SO-[45]1A|SO-52A|XQ-A[DT]51|XQ-A[TU]42|XQ-AS[67]2|XQ-A[TSU]52|SOL25|SOG02|A002SO|NW-(A100|Z1000)Series|J3273|NSZ-GS7'
|
5359 |
device: 'smartphone'
|
5360 |
models:
|
5361 |
# SONY ERICSSON: explicit smartphone models
|
5497 |
model: 'Xperia Ace'
|
5498 |
- regex: '(?:A001SO|XQ-A[TU]52|XQ-AU42|SO-41A|SOV43)(?:[);/ ]|$)'
|
5499 |
model: 'Xperia 10 II'
|
5500 |
+
- regex: 'A101SO(?:[);/ ]|$)'
|
5501 |
+
model: 'Xperia 10 III'
|
5502 |
- regex: '(?:Sony(?:Ericsson)?)?I(?:42[19]3|3223)'
|
5503 |
model: 'Xperia 10 Plus'
|
5504 |
- regex: '(?:Sony(?:Ericsson)?)?I4193'
|
5715 |
model: 'Xperia XA2 Ultra'
|
5716 |
- regex: '(?:Sony(?:Ericsson)?)?G823[12]|SOV35|602SO|SO-03J'
|
5717 |
model: 'Xperia XZs'
|
5718 |
+
- regex: '(?:Sony(?:Ericsson)?)?(?:G814[12]|G8188|SO-04[JK])'
|
5719 |
model: 'Xperia XZ Premium'
|
5720 |
- regex: '(?:Sony(?:Ericsson)?)?(?:H83[12]4|H82[17]6|SOV37|SO-03K|H8296|702SO)'
|
5721 |
model: 'Xperia XZ2'
|
5749 |
model: 'Xperia X Performance Dual'
|
5750 |
|
5751 |
# SONY: explicit tablet models
|
5752 |
+
- regex: '(?:SGP(?:311|312|321)|(Sony)?SO-03E)(?:[);/ ]|$)'
|
5753 |
model: 'Xperia Tablet Z'
|
5754 |
device: 'tablet'
|
5755 |
- regex: 'SGP712(?:[);/ ]|$)'
|
5765 |
model: 'Xperia Tablet S'
|
5766 |
device: 'tablet'
|
5767 |
|
5768 |
+
# SONY: Bravia or TV Box
|
5769 |
- regex: '(?:BRAVIA )(2K GB ATV3|4K UR2|4K GB ATV3|4K GB|4K 2015|2015)(?:[);/ ]|$)'
|
5770 |
model: 'Bravia $1'
|
5771 |
device: 'tv'
|
5772 |
+
- regex: '(NSZ-GS7)(?:[);/ ]|$)'
|
5773 |
+
model: '$1'
|
5774 |
+
device: 'tv'
|
5775 |
|
5776 |
- regex: 'NW-A100Series'
|
5777 |
model: 'Walkman A100'
|
6007 |
- regex: 'EVOLVEO[ _]([^;/]*) Build'
|
6008 |
model: '$1'
|
6009 |
|
6010 |
+
# Leotec
|
6011 |
+
Leotec:
|
6012 |
+
regex: '(LESPH501[14]|LESPH5003B|SUPERNOVA (?:Qi16|Qi32|i3G96[X]?)|PULSAR QI3G)(?:[);/ ]|$)'
|
6013 |
+
device: 'smartphone'
|
6014 |
models:
|
6015 |
+
- regex: 'LESPH5011'
|
6016 |
+
model: 'Argon e250'
|
6017 |
+
- regex: 'LESPH5003B'
|
6018 |
+
model: 'Argon A250B'
|
6019 |
+
- regex: 'LESPH5014'
|
6020 |
+
model: 'Krypton K150'
|
6021 |
+
- regex: 'SUPERNOVA (Qi16|Qi32|i3G96[X]?)'
|
6022 |
+
device: 'tablet'
|
6023 |
+
model: 'Supernova $1'
|
6024 |
+
- regex: 'PULSAR (QI3G)'
|
6025 |
+
device: 'tablet'
|
6026 |
+
model: 'Pulsar $1'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6027 |
|
6028 |
# EvroMedia
|
6029 |
EvroMedia:
|
6030 |
+
regex: 'EVROMEDIA|Playpad[ _]|PLAY_PAD_PRO_XL|3G NOTE XL'
|
6031 |
device: 'tablet'
|
6032 |
models:
|
6033 |
- regex: 'Playpad 3G GOO'
|
6040 |
model: 'Play Pad Pro XL'
|
6041 |
- regex: 'PlayPad 3GTab XL'
|
6042 |
model: 'Play Pad 3G Tab XL'
|
6043 |
+
- regex: '3G NOTE XL'
|
6044 |
+
model: 'Play Pad 3G Note XL'
|
6045 |
# EKO
|
6046 |
EKO:
|
6047 |
regex: 'EKO'
|
6375 |
|
6376 |
# Ginzzu
|
6377 |
Ginzzu:
|
6378 |
+
regex: 'GINZZU[_ ]|((?:RS(?:7[14]|81|9[67])D)|S5002|(?<!Wave Pro )S5021|S5230|S50[45]0|S51[24]0|RS(6[12]|9[45])D|S40[23]0|RS850[12]|RS9602)(?:[);/ ]|$)'
|
6379 |
device: 'smartphone'
|
6380 |
models:
|
6381 |
- regex: 'GINZZU[_ ]?(S40[17]0|S4710|ST60[14]0|ST6120)'
|
6385 |
device: 'tablet'
|
6386 |
- regex: '(RS6[12]D) ULTIMATE'
|
6387 |
model: '$1 Ultimate'
|
6388 |
+
- regex: '(?:GINZZU[ _])?((?:RS(?:7[14]|81|9[4-7])D)|S50[45]0|S5002|S5021|S5230|S51[24]0|S40[23]0|RS850[12]|RS9602|RS94D)(?:[);/ ]|$)'
|
6389 |
model: '$1'
|
6390 |
|
6391 |
# Gionee
|
6426 |
device: 'smartphone'
|
6427 |
model: 'GTM-5$1'
|
6428 |
|
6429 |
+
# Vizio (vizio.com)
|
6430 |
Vizio:
|
6431 |
+
regex: 'Vizio|(?:VAP430|VTAB1008|XR6[PM]10)(?:[);/ ]|$)'
|
6432 |
device: 'tv'
|
6433 |
models:
|
6434 |
- regex: 'VAP430'
|
6435 |
model: 'VAP430'
|
6436 |
+
- regex: '(VTAB1008|XR6[PM]10)'
|
6437 |
device: 'tablet'
|
6438 |
+
model: '$1'
|
6439 |
|
6440 |
# GOCLEVER
|
6441 |
GOCLEVER:
|
6454 |
- regex: 'TQ700N'
|
6455 |
model: 'QUANTUM 700N'
|
6456 |
device: 'tablet'
|
6457 |
+
- regex: 'QUANTUM_1010_Lite'
|
6458 |
+
model: 'Quantum 1010 Lite'
|
6459 |
+
device: 'tablet'
|
6460 |
+
- regex: 'QUANTUM_1010_Lite'
|
6461 |
+
model: 'Quantum 1010 Lite'
|
6462 |
+
device: 'tablet'
|
6463 |
- regex: 'Quantum2 500'
|
6464 |
model: 'Quantum 2 500'
|
6465 |
+
- regex: 'QUANTUM[_ ]([45]00)[_ ]LITE'
|
6466 |
+
model: 'Quantum $1 Lite'
|
6467 |
- regex: '((?:QUANTUM|ARIES|INSIGNIA|ORION|ELIPSO)[ _-]?[^;/]+)(?: Build|\))'
|
6468 |
model: '$1'
|
6469 |
- regex: 'GOCLEVER[ _-]TAB[ _-]?([^;/]+) Build'
|
6495 |
- regex: 'GO([0-9]{3,4})'
|
6496 |
model: 'Go$1'
|
6497 |
|
6498 |
+
# Explay
|
6499 |
+
Explay:
|
6500 |
+
regex: 'Explay|[\w]+-EXPLAY-FIN|ActiveD[ _]|Atlant |Informer[ _][0-9]+|CinemaTV 3G|Surfer[ _][0-9\.]|sQuad[ _][0-9\.]|Onliner[1-4]|RioPlay|Leader|Pulsar|Infinityll|Imperium[78]|Indigo|Lagoon|Tornado(?! 348)(?:3G)?|Onyx(?!_[A-Z]{1,2})'
|
6501 |
+
device: 'tablet'
|
6502 |
+
models:
|
6503 |
+
- regex: 'ActiveD[ _]7.4[ _]3G'
|
6504 |
+
model: 'ActiveD 7.4 3G'
|
6505 |
+
- regex: 'Imperium([78])(?:[);/ ]|$)'
|
6506 |
+
model: 'Imperium $1 3G'
|
6507 |
+
- regex: 'ActiveD[ _]8.2[ _]3G'
|
6508 |
+
model: 'ActiveD 8.2 3G'
|
6509 |
+
- regex: 'CinemaTV[ _]3G'
|
6510 |
+
model: 'CinemaTV 3G'
|
6511 |
+
- regex: 'Infinityll'
|
6512 |
+
model: 'Infinity II'
|
6513 |
+
- regex: 'Informer[ _]([0-9]+(?:[ _]3G)?)'
|
6514 |
+
model: 'Informer $1'
|
6515 |
+
- regex: 'Surfer[ _]([0-9\.]+(?:[ _]3G)?)'
|
6516 |
+
model: 'Surfer $1'
|
6517 |
+
- regex: 'sQuad[ _]([0-9\.]+(?:[ _]3G)?)'
|
6518 |
+
model: 'sQuad $1'
|
6519 |
+
- regex: 'Onliner([1-4])'
|
6520 |
+
model: 'Onliner $1'
|
6521 |
+
- regex: 'Atlant(?:[);/ ]|$)'
|
6522 |
+
device: 'smartphone'
|
6523 |
+
model: 'Atlant'
|
6524 |
+
- regex: 'Indigo(?:[);/ ]|$)'
|
6525 |
+
device: 'smartphone'
|
6526 |
+
model: 'Indigo'
|
6527 |
+
- regex: 'Pulsar(?:[);/ ]|$)'
|
6528 |
+
device: 'smartphone'
|
6529 |
+
model: 'Pulsar'
|
6530 |
+
- regex: 'Tornado(?:3G)?(?:[);/ ]|$)'
|
6531 |
+
device: 'smartphone'
|
6532 |
+
model: 'Tornado 3G'
|
6533 |
+
- regex: 'Onyx(?:[);/ ]|$)'
|
6534 |
+
device: 'smartphone'
|
6535 |
+
model: 'Onyx'
|
6536 |
+
- regex: '[\w]+-EXPLAY-FIN'
|
6537 |
+
device: 'feature phone'
|
6538 |
+
model: 'Fin'
|
6539 |
+
|
6540 |
+
- regex: 'Lagoon(?:[);/ ]|$)'
|
6541 |
+
model: 'Lagoon'
|
6542 |
+
- regex: 'Explay[ _-]([^;/]+)(?: Build|[;)])'
|
6543 |
+
model: '$1'
|
6544 |
+
- regex: 'RioPlay(?:[);/ ]|$)'
|
6545 |
+
device: 'smartphone'
|
6546 |
+
model: 'Rio Play'
|
6547 |
+
- regex: 'Leader'
|
6548 |
+
model: 'Leader'
|
6549 |
+
|
6550 |
# Gol Mobile (gol-mobile.com)
|
6551 |
Gol Mobile:
|
6552 |
regex: 'F10_PRIME'
|
6567 |
|
6568 |
# Google
|
6569 |
Google:
|
6570 |
+
regex: 'Nexus|GoogleTV|Google Fiber|Glass(?<!Browser)|CrKey[^a-z0-9]|Pixel(?: Build|\))|Pixel (?:XL|C|[2-5]|[2-4] XL)|Google 2XL|G011A'
|
6571 |
device: 'smartphone'
|
6572 |
models:
|
6573 |
- regex: 'Glass'
|
6582 |
- regex: '(Nexus (?:7|9|10))'
|
6583 |
device: 'tablet'
|
6584 |
model: '$1'
|
6585 |
+
# explicit tv models
|
6586 |
+
- regex: '(GFHD[12]00)'
|
6587 |
+
device: 'tv'
|
6588 |
+
model: 'Fiber $1'
|
6589 |
- regex: 'CrKey[^a-z0-9]'
|
6590 |
model: 'Chromecast'
|
6591 |
device: 'tv'
|
6592 |
- regex: 'GoogleTV'
|
6593 |
device: 'tv'
|
6594 |
model: 'GoogleTV'
|
6595 |
+
# explicit smartphone models
|
6596 |
- regex: 'Pixel(?: Build|\))'
|
6597 |
model: 'Pixel'
|
6598 |
- regex: 'Pixel XL'
|
6803 |
device: 'tv'
|
6804 |
model: '$1'
|
6805 |
|
6806 |
+
- regex: '(?:HS-)?Hisense ([^;/)]+) Pro(?: Build|[);])'
|
6807 |
+
model: '$1 Pro'
|
6808 |
+
- regex: '(?:HS-)?Hisense ([^;/)]+) Plus(?: Build|[);])'
|
6809 |
+
model: '$1 Plus'
|
6810 |
+
- regex: '(?:HS-)?Hisense ([^;/)]+)(?: Build|[);])'
|
6811 |
model: '$1'
|
6812 |
+
- regex: '(?:HS-)?Hisense ([^/]+)/'
|
6813 |
model: '$1'
|
6814 |
|
6815 |
# Hi-Level
|
6831 |
|
6832 |
# Homtom
|
6833 |
Homtom:
|
6834 |
+
regex: 'Homtom|(?:HT[0-9]{1,2}(?: ?Pro)?)(?:[);/ ]|$)'
|
6835 |
device: 'smartphone'
|
6836 |
models:
|
6837 |
- regex: '(?:Homtom[_ ])?HT ?([0-9]{1,2}(?: ?Pro)?)(?:[);/ ]|$)'
|
6886 |
|
6887 |
# Huawei
|
6888 |
Huawei:
|
6889 |
+
regex: '(HW-)?(?:Huawei(?!Browser)|MediaPad T1|Ideos|Honor[ _]?|(?:(?:AGS|AGS2|ALE|ALP|AMN|ANA|ANE|ARE|ARS|ASK|ATH|ATU|AUM|BAC|BAH[23]?|BG2|BGO|B[ZK]K|BKL|BL[ALN]|BND|BTV|CA[GMNZ]|CH[CM]|CHE[12]?|CLT|CMR|COL|COR|CPN|CRO|CRR|CUN|DIG|DLI|DRA|DUA|DUB|DUK|EDI|ELE|EML|EVA|EVR|FDR|FIG|FLA|FRD|FRL|GEM|GRA|HDN|HLK|HMA|Hol|HRY|HWI|H[36]0|INE|JAT|JEF|JDN|JDN2|JKM|JMM|JSN|KII|KIW|KNT|KOB|KSA|LDN|LEO|LIO|LLD|LND|LON|LRA|LUA|LY[AO]|MAR|MHA|MRD|MYA|NCE|NEM|NEO|NXT|PAR|PCT|PIC|PLE|PLK|POT|PPA|PRA|RIO|RNE|RVL|SCC|SCL|SCM|SEA|SHT|SLA|SNE|SPN|STF|STK|TAG|TIT|TNY|TRT|VCE|VEN|VIE|VKY|VNS|VOG|VRD|VTR|WAS|YAL|G(?:527|620S|621|630|735)|Y(?:221|330|550|6[23]5))-(?:[A-Z]{0,2}[0-9]{1,4}[A-Z]{0,3}?)|H1711|U(?:8230|8500|8661|8665|8667|8800|8818|8860|9200|9508))(?:[);/ ]|$))|hi6210sft|PE-(UL00|TL[12]0|TL00M)|T1-(A21[Lw]|A23L|701u|823L)|G7-(?:L01|TL00)|HW-01K|JNY-(LX[12]|AL10)|OXF-AN[01]0|TAS-(A[LN]00|L29|TL00)|WLZ-(AL10|AN00)|YOK-AN00|NIC-LX1A|MRX-(AL09|W09)|CDY-(?:[AT]N00|AN[29]0|NX9[AB])|GLK-(?:[AT]L00|LX1U)|JER-(?:AN20|[AT]N10)|ELS-(?:[AT]N[10]0|NX9|N39|N04)|AKA-(AL10|L29)|MON-(W|AL)19|BMH-AN[12]0|AQM-([AT]L[01]0|LX1)|MOA-(AL[02]0|LX9N)|NTS-AL00|ART-(?:[AT]L00[xm]|L29N?|L28)|MED-(?:[AT]L00|LX9N?)|EBG-(?:AN[01]0|TN00)|ANA-(?:[AT]N00|NX9)|BZ[AK]-W00|BZT-(W09|AL[01]0)|HDL-(AL09|W09)|HWV3[123]|HW-02L|TEL-[AT]N(?:00a?|10)|KKG-AN00|MXW-[AT]N00|JKM-AL00[ab]|TAH-(?:N29|AN00)m|C8817D|T1-821W|d-01[JK]|d-02[HK]|KRJ-W09|HWT31|Y320-U10|Y541-U02|VAT-L19|70[14]HW|60[58]HW|NOH-(?:NX9|AN00)|TNNH-AN00|LIO-(?:[TA]L00|[LN]29|AN00)|KOB2-[LW]09|AGS3-[WL]09|DNN-LX9|NEY-NX9|LON-AL00|HLK-L41|503HW|AGR-[LW]09|PPA-LX[12]|ANG-AN00|NOP-AN00|ALA-AN70|DVC-[AT]N20|302HW'
|
6890 |
device: 'smartphone'
|
6891 |
models:
|
6892 |
- regex: 'POT-[TA]L00a(?:[);/ ]|$)'
|
6951 |
model: 'Enjoy 8e'
|
6952 |
- regex: 'MRD-[TA]L00(?:[);/ ]|$)'
|
6953 |
model: 'Enjoy 9e'
|
6954 |
+
- regex: 'DVC-[AT]N20(?:[);/ ]|$)'
|
6955 |
model: 'Enjoy 20 Pro'
|
6956 |
- regex: 'U8665(?:[);/ ]|$)'
|
6957 |
model: 'Fusion 2'
|
6991 |
model: 'Honor 20 Pro'
|
6992 |
- regex: '(MAR-LX1H|YAL-AL50)(?:[);/ ]|$)'
|
6993 |
model: 'Honor 20S'
|
6994 |
+
- regex: '(?:BMH-AN[12]0)(?:[);/ ]|$)'
|
6995 |
model: 'Honor 30'
|
6996 |
- regex: 'EBG-[AT]N00(?:[);/ ]|$)'
|
6997 |
model: 'Honor 30 Pro'
|
7001 |
model: 'Honor 30S'
|
7002 |
- regex: 'LRA-LX1(?:[);/ ]|$)'
|
7003 |
model: 'Honor 30I'
|
7004 |
+
- regex: 'MXW-[AT]N00(?:[);/ ]|$)'
|
7005 |
+
model: 'Honor 30 Lite'
|
7006 |
- regex: '(?:Honor_|HW-)?H30-(?:C00|L01M?|L02|U10|T00|T10)(?:_TD)?(?:[);/ ]|$)'
|
7007 |
model: 'Honor 3C'
|
7008 |
- regex: 'Hol-U19(?:[);/ ]|$)'
|
7113 |
model: 'Honor P40'
|
7114 |
- regex: 'COR-(?:AL[01]0|L29|TL10)(?:[);/ ]|$)'
|
7115 |
model: 'Honor Play'
|
7116 |
+
- regex: 'ASK-AL(00x|20)(?:[);/ ]|$)'
|
7117 |
model: 'Honor Play 3'
|
7118 |
- regex: 'KSA-AL10(?:[);/ ]|$)'
|
7119 |
model: 'Honor Play 3E'
|
7133 |
model: 'Honor V10'
|
7134 |
- regex: 'PCT-[TA]L10(?:[);/ ]|$)'
|
7135 |
model: 'Honor V20'
|
7136 |
+
- regex: 'YOK-AN10(?:[);/ ]|$)'
|
7137 |
+
model: 'Honor V40'
|
7138 |
- regex: 'KNT-(?:AL[12]0|[TU]L10)(?:[);/ ]|$)'
|
7139 |
model: 'Honor V8'
|
7140 |
- regex: 'DUK-AL20(?:[);/ ]|$)'
|
7149 |
model: 'Honor View 30'
|
7150 |
- regex: 'OXF-AN10(?:[);/ ]|$)'
|
7151 |
model: 'Honor View 30 Pro'
|
7152 |
+
- regex: '(?:Honor_|HW-)?SCL-L(0[1-4]|21|32)(?:_TD)?(?:[);/ ]|$)'
|
7153 |
model: 'Honor Y6'
|
7154 |
- regex: '(?:Honor_|HW-)?LYO-L21(?:[);/ ]|$)'
|
7155 |
model: 'Honor Y6 II Compact'
|
7159 |
model: 'Honor X10 Max'
|
7160 |
- regex: 'DNN-LX9(?:[);/ ]|$)'
|
7161 |
model: 'Honor X10 Lite'
|
7162 |
+
- regex: 'ALA-AN70(?:[);/ ]|$)'
|
7163 |
+
model: 'Honor V40 Lite'
|
7164 |
- regex: 'U8500(?:[);/ ]|$)'
|
7165 |
model: 'Ideos X2'
|
7166 |
- regex: 'U8510(?:[);/ ]|$)'
|
7223 |
model: 'Nova'
|
7224 |
- regex: '608HW(?:[);/ ]|$)'
|
7225 |
model: 'Nova Lite'
|
7226 |
+
- regex: 'MLA-L11(?:[);/ ]|$)'
|
7227 |
+
model: 'Nova Plus'
|
7228 |
- regex: '(?:PIC-(?:[AT]L00|LX9)|HWV31)(?:[);/ ]|$)'
|
7229 |
model: 'Nova 2'
|
7230 |
- regex: '704HW(?:[);/ ]|$)'
|
7263 |
model: 'Nova 6 SE'
|
7264 |
- regex: 'JEF-(?:[AT]N00|AN20|NX9)(?:[);/ ]|$)'
|
7265 |
model: 'Nova 7 5G'
|
7266 |
+
- regex: 'JER-(?:[AT]N10|AN20)(?:[);/ ]|$)'
|
7267 |
model: 'Nova 7 Pro 5G'
|
7268 |
+
- regex: 'CDY-(?:[AT]N00|NX9B|AN20)(?:[);/ ]|$)'
|
7269 |
model: 'Nova 7 SE 5G'
|
7270 |
- regex: 'JNY-LX2(?:[);/ ]|$)'
|
7271 |
model: 'Nova 7i'
|
7301 |
model: 'P20 Pro'
|
7302 |
- regex: '(ELE-L(?:04|09|29)|ELE-[AT]L00)(?:[);/ ]|$)'
|
7303 |
model: 'P30'
|
7304 |
+
- regex: '(?:MAR-(?:LX(?:1[BM]|2B|[13]Am?|2J?|3BM)|TL00)|NIC-LX1A|HWV33)(?:[);/ ]|$)'
|
7305 |
model: 'P30 Lite'
|
|
|
|
|
7306 |
- regex: '(?:VOG-(?:L(?:04|09|29)|TL00|AL10)|HW-02L)(?:[);/ ]|$)'
|
7307 |
model: 'P30 Pro'
|
7308 |
- regex: 'ANA-LX4(?:[);/ ]|$)'
|
7319 |
model: 'P40 Pro Plus'
|
7320 |
- regex: 'GRA-(?:L09|UL00)(?:[);/ ]|$)'
|
7321 |
model: 'P8'
|
7322 |
+
- regex: '(?:ALE-L(?:02|21|23)|ALE-[TUC]L00|503HW)(?:[);/ ]|$)'
|
7323 |
model: 'P8 Lite (2015)'
|
7324 |
- regex: '(?:PRA-L(?:A1|X2|X1|X3)|hi6210sft)(?:[);/ ]|$)'
|
7325 |
model: 'P8 Lite (2017)'
|
7419 |
model: 'Y9 Prime (2019)'
|
7420 |
- regex: 'FRL-L2[23](?:[);/ ]|$)'
|
7421 |
model: 'Y9a'
|
7422 |
+
- regex: '302HW(?:[);/ ]|$)'
|
7423 |
+
model: 'Stream S'
|
7424 |
|
7425 |
- regex: 'HWT31(?:[);/ ]|$)'
|
7426 |
model: 'Qua Tab 02 10.1"'
|
7497 |
- regex: '(AGS2-AL00|JDN2-W09)HN(?:[);/ ]|$)'
|
7498 |
device: 'tablet'
|
7499 |
model: 'Honor Tab 5'
|
7500 |
+
- regex: 'AGS2-(?:[LW]09|W09HN|W19|L03)(?:[);/ ]|$)'
|
7501 |
device: 'tablet'
|
7502 |
model: 'MediaPad T5 10'
|
7503 |
- regex: 'KOB2-[LW]09(?:[);/ ]|$)'
|
7703 |
|
7704 |
# Irbis
|
7705 |
Irbis:
|
7706 |
+
regex: 'IRBIS|TZ(1(?:0[04]|42|5[01]|84|65|7[01345-89]|8[356]|9[12578])|49|55|72|22|7(?:0[127]|1[1-4679]|2[021567]|3[025-8]|4[257]|5[23457]|6[12]|72|7[17]|8[1]|9[147])|8(?:[34]1|5[3-8]|6[2-5]|7[12478]|8[1-5]|9[0127])|96[0-9])|TZ85|TZ13|TZ(?:one|art|HIT|81L)|(SP(?:0[56]|2[01]|4[1-36]|40[12]|45[345]|49[34]|50|51[0147]|531|54[12]|55[0124]|571))(?:[);/ ]|$)'
|
7707 |
device: 'tablet'
|
7708 |
models:
|
7709 |
- regex: '(TZ(?:[0-9]+)|TZ(?:one|art|HIT|81L))(?:[);/ ]|$)'
|
7760 |
|
7761 |
# IconBIT
|
7762 |
IconBIT:
|
7763 |
+
regex: 'IconBIT|NT-(3506M|0704S|0909T|1009T|10[01]1T|1017T|3601P/3602P|3603P|3702S|3805C|3905T|3701S|0701S|0805C|0902S|370[23]M)|XDS[789]4K|Omnicast UHD|Movie Smart 4K|Movie IPTV Quad|TOUCAN (?:NANO|Stick) 4K'
|
7764 |
device: 'tablet'
|
7765 |
models:
|
7766 |
- regex: 'NT-3506M'
|
7798 |
model: 'NetTAB Matrix 3G duo'
|
7799 |
- regex: 'NT-3703M'
|
7800 |
model: 'NetTAB Matrix 3GT'
|
7801 |
+
- regex: 'MATRIX ULTRA'
|
7802 |
+
model: 'NetTAB Matrix Ultra'
|
7803 |
|
7804 |
+
- regex: 'TOUCAN NANO 4K'
|
7805 |
+
model: 'Toucan Nano 4K'
|
7806 |
+
device: 'tv'
|
7807 |
+
- regex: 'TOUCAN Stick 4K'
|
7808 |
+
model: 'Toucan Stick 4K'
|
7809 |
+
device: 'tv'
|
7810 |
- regex: '(?:iconBIT )?(Movie Smart 4K|Movie IPTV Quad|Movie Ultra HD 4K|XDS[789]4K|Omnicast UHD)'
|
7811 |
model: '$1'
|
7812 |
device: 'tv'
|
7886 |
|
7887 |
# Lumus
|
7888 |
Lumus:
|
7889 |
+
regex: '(?:NEO(SR620|SC600)|INNOSR545|Lumus[_ ]Ion|AEONSR570)(?:[);/ ]|$)'
|
7890 |
device: 'smartphone'
|
7891 |
models:
|
7892 |
# explicit smartphone models
|
7896 |
model: 'INNO $1'
|
7897 |
- regex: 'Lumus[_ ]Ion(?:[);/ ]|$)'
|
7898 |
model: 'Ion'
|
7899 |
+
- regex: 'AEON(SR570)(?:[);/ ]|$)'
|
7900 |
+
model: 'AEON $1'
|
|
|
|
|
|
|
7901 |
# M4tel
|
7902 |
M4tel:
|
7903 |
regex: 'M4 SS[0-9]{4}(?:-R)?|M4_B[23]'
|
8021 |
|
8022 |
# iPro
|
8023 |
iPro:
|
8024 |
+
regex: '(?:Kylin[ _]5.[05]S?|KYLIN40|Jade[78]s|Amber[67]S?|Amber5S_Pro|Phonenix50S|Zafiro|I9355A)(?:[);/ ]|$)'
|
8025 |
device: 'smartphone'
|
8026 |
models:
|
8027 |
- regex: 'Kylin_5.0S'
|
8042 |
model: 'Phonenix 50S'
|
8043 |
- regex: 'Zafiro'
|
8044 |
model: 'Zafiro'
|
8045 |
+
- regex: '(I9355A)'
|
8046 |
+
model: '$1'
|
8047 |
|
8048 |
# Infinix
|
8049 |
Infinix:
|
8300 |
models:
|
8301 |
- regex: 'IM0318ND'
|
8302 |
model: 'Aqua Lions 3'
|
8303 |
+
- regex: 'AQUA[ _]LIONS[ _]T1[ _]LITE(?:[);/ ]|$)'
|
8304 |
+
model: 'Aqua Lions T1 Lite'
|
8305 |
+
- regex: 'AQUA[ _]LIONS[ _]([NT]1|[23]|E3)(?:[);/ ]|$)'
|
8306 |
+
model: 'Aqua Lions $1'
|
8307 |
+
- regex: 'AQUA (A4) PLUS(?:[);/ ]|$)'
|
8308 |
+
model: 'Aqua $1 Plus'
|
8309 |
+
- regex: 'AQUA[ _](A4|S[13])(?:[);/ ]|$)'
|
8310 |
+
model: 'Aqua $1'
|
8311 |
+
- regex: 'AQUA CRYSTAL\+(?:[);/ ]|$)'
|
8312 |
+
model: 'Aqua Crystal Plus'
|
8313 |
+
- regex: 'AQUA FulVU e5(?:[);/ ]|$)'
|
8314 |
+
model: 'Aqua Fulvu E5'
|
8315 |
+
- regex: 'AQUA JEWEL 2(?:[);/ ]|$)'
|
8316 |
+
model: 'Aqua Jewel 2'
|
8317 |
- regex: 'Intex[ _]([^/;]*)[ _]Build'
|
8318 |
model: '$1'
|
8319 |
- regex: '(Cloud (?:Fame|Glory) 4G)'
|
8559 |
|
8560 |
# Kazam
|
8561 |
Kazam:
|
8562 |
+
regex: 'Kazam|(?:Trooper_X[0-9][0-9]|Tornado 348|TROOPER 4\.0)(?:[);/ ]|$)'
|
8563 |
device: 'smartphone'
|
8564 |
models:
|
8565 |
- regex: 'Tornado 348'
|
8692 |
|
8693 |
# Komu
|
8694 |
Komu:
|
8695 |
+
regex: 'Komu[_ -]'
|
8696 |
device: 'smartphone'
|
8697 |
models:
|
8698 |
+
- regex: 'Komu[_ -]([^;/]+) Build'
|
8699 |
model: '$1'
|
8700 |
+
- regex: 'Komu[_ -]([a-z0-9_-]+)'
|
8701 |
model: '$1'
|
8702 |
|
8703 |
# Koobee
|
8734 |
|
8735 |
# Kodak
|
8736 |
Kodak:
|
8737 |
+
regex: 'KODAK|(?:IM5|KD50|Ektra|Smartway_T1)(?:[);/ ]|$)'
|
8738 |
device: 'smartphone'
|
8739 |
models:
|
8740 |
- regex: 'IM5'
|
8741 |
model: 'IM5'
|
8742 |
+
- regex: 'KD50'
|
8743 |
+
model: 'Seren KD50'
|
8744 |
- regex: 'Ektra(?:[);/ ]|$)'
|
8745 |
model: 'Ektra'
|
8746 |
+
- regex: '(?:KODAK[_ ])?SMARTWAY[_ ]([MTX]1|T3)'
|
8747 |
model: 'Smartway $1'
|
8748 |
- regex: 'Tablet (7|10)'
|
8749 |
device: 'tablet'
|
8793 |
|
8794 |
# kyocera (kyocera.co.jp, kyocera.com)
|
8795 |
Kyocera:
|
8796 |
+
regex: 'Kyocera|KWC-|QC-[0-9]{4}|(?:QC6035|NP501KC|302KC|503KC|602KC|705KC|901KC|C51[27]0|C5155|C5215|C67[35]0|C6522N?|C6530N|C6740N?|C6743|E6[89]10|KYL2[13]|KYV3[1-9]|KYT3[123]|KYF3[123579]|KYF40|KYX31|KYG01|KYY2[1-4]|S2151|KC-S701|S[468]-KC|KYV40U?|KYV4[1-8]|KYV4[47]|KC-S301AE|X3-KC|E6560[CT]|E6782[L]?|E6790(?:TM)?|SZJ-JS201|[47]04KC|A001KC|WX10K|URBANO PROGRESSO|E7110)(?:[-_]u2?)?(?:[);/ ]|$)'
|
8797 |
device: 'smartphone'
|
8798 |
models:
|
8799 |
# explicit smartphone models
|
8849 |
model: 'DuraForce'
|
8850 |
- regex: 'E6810'
|
8851 |
model: 'DuraForce Pro'
|
8852 |
+
- regex: '(?:KYOCERA-)?E69[12]0'
|
8853 |
model: 'DuraForce Pro 2'
|
8854 |
- regex: 'E7110'
|
8855 |
model: 'DuraForce Ultra 5G'
|
8881 |
model: 'Torque G03'
|
8882 |
- regex: 'KYV46(?:[);/ ]|$)'
|
8883 |
model: 'Torque G04'
|
8884 |
+
- regex: 'KYV32?(?:[);/ ]|$)'
|
8885 |
+
model: 'Basio'
|
8886 |
- regex: 'KYV47(?:-u)?(?:[);/ ]|$)'
|
8887 |
model: 'Basio 4'
|
8888 |
- regex: 'KYV43(?:[);/ ]|$)'
|
8928 |
model: 'Brigadier'
|
8929 |
- regex: 'E6782L(?:[);/ ]|$)'
|
8930 |
model: 'DuraScout'
|
8931 |
+
- regex: '(KC-S301AE|SZJ-JS201)(?:[);/ ]|$)'
|
8932 |
model: '$1'
|
8933 |
- regex: 'A001KC(?:[);/ ]|$)'
|
8934 |
model: 'Katan Sumaho 2'
|
8956 |
model: 'MOVE 8 Mini'
|
8957 |
- regex: 'MOVE_6_mini'
|
8958 |
model: 'MOVE 6 Mini'
|
8959 |
+
- regex: 'MOVE[_ ]([78]|6S?)'
|
8960 |
model: 'MOVE $1'
|
8961 |
- regex: 'DRIVE 4 mini LTE'
|
8962 |
model: 'DRIVE 4 mini LTE'
|
9017 |
|
9018 |
# Lava (Lavamobiles.com)
|
9019 |
Lava:
|
9020 |
+
regex: 'Lava[ _]|LAVAA1|(?:DISCOVER136|KKT QUADRA)|iris[ _]?([^/;]+)(?:\)| Build)|A(?:67|76) Build|X1 Selfie Build|X41 Plus Build|(?:Flair Z1|PixelV1|Pixel V2\+?|Z60s|Z61_2GB|A97 IPS|A97 2GB PLUS|L[EH]9920(?:[_ ]P)?|L[NEH]9910|LH9810|Ivory(?:S1|S4G)?|A76Plus)(?:[);/ ]|$)'
|
9021 |
device: 'smartphone'
|
9022 |
models:
|
9023 |
# explicit smartphone models
|
9029 |
model: 'A97 2GB Plus'
|
9030 |
- regex: 'A76Plus(?:[);/ ]|$)'
|
9031 |
model: 'A76 Plus'
|
9032 |
+
- regex: 'Pixel V2\+(?:[);/ ]|$)'
|
9033 |
+
model: 'Pixel V2 Plus'
|
9034 |
- regex: 'Pixel ?V([12])(?:[);/ ]|$)'
|
9035 |
model: 'Pixel V$1'
|
9036 |
- regex: 'X1 Selfie(?:[);/ ]|$)'
|
9043 |
model: 'R1'
|
9044 |
- regex: 'Z61_2GB(?:[);/ ]|$)'
|
9045 |
model: 'Z61'
|
9046 |
+
- regex: 'Z60s(?:[);/ ]|$)'
|
9047 |
+
model: 'Z60s'
|
9048 |
- regex: 'LE9920[ _]P(?:[);/ ]|$)'
|
9049 |
model: 'V7'
|
9050 |
- regex: 'LE9920(?:[);/ ]|$)'
|
9074 |
device: 'tablet'
|
9075 |
model: 'Ivory $1'
|
9076 |
# explicit general
|
9077 |
+
- regex: 'iris[ _]?([^/;)]+)(?: Build|[);])'
|
9078 |
model: 'Iris $1'
|
9079 |
+
- regex: 'Lava[ _]?([^/;)]+)(?: Build|[);])'
|
9080 |
+
model: '$1'
|
9081 |
+
- regex: 'LAVA[ _]([^/;)]+)/MIDP'
|
9082 |
+
device: 'feature phone'
|
9083 |
model: '$1'
|
9084 |
|
9085 |
# SKG (skgmobile.net | skgmobile.com)
|
9100 |
|
9101 |
# Land Rover
|
9102 |
Land Rover:
|
9103 |
+
regex: 'Land[ ]?Rover[d]?[ _-](?:X1[0-9]|Explore|T878|L15\+|V18|V[168]|X)(?:[);/ ]|$)|Polar3|Vphone[- ]X3'
|
9104 |
device: 'smartphone'
|
9105 |
models:
|
9106 |
- regex: 'Land[ ]?Rover[d]?[ _-](X1[0-9]|Explore|T878|L15\+|V18|V[168]|X)(?:[);/ ]|$)'
|
9107 |
model: '$1'
|
9108 |
+
- regex: 'Vphone[- ]X3'
|
9109 |
+
model: 'Vphone X3'
|
9110 |
- regex: 'Polar3'
|
9111 |
model: 'Ioutdoor Polar 3'
|
9112 |
|
9191 |
|
9192 |
# Leagoo
|
9193 |
Leagoo:
|
9194 |
+
regex: '(?:MY)?LEAGOO[ _-]?|(?:Shark 5000|M5 EDGE|KIICAA (POWER|MIX)|Leapad[ _](?:X|7s)|Elite [15]|Venture 1|Z10-E)(?:[);/ ]|$)'
|
9195 |
device: 'smartphone'
|
9196 |
models:
|
9197 |
- regex: 'LEAGOO[- _]M8[_-]?Pro(?:[);/ ]|$)'
|
9198 |
model: 'M8 Pro'
|
9199 |
+
- regex: 'LEAGOO[- _](Z[156]|Z5c|M[58]|T1)(?:[);/ ]|$)'
|
9200 |
model: '$1'
|
9201 |
- regex: 'M5 EDGE'
|
9202 |
model: 'M5 Edge'
|
9208 |
model: 'KICCAA Mix'
|
9209 |
- regex: 'Elite ([15])(?:[);/ ]|$)'
|
9210 |
model: 'Elite $1'
|
9211 |
+
- regex: 'Shark 5000(?:[);/ ]|$)'
|
9212 |
+
model: 'Shark 5000'
|
9213 |
- regex: 'Venture 1(?:[);/ ]|$)'
|
9214 |
model: 'Venture 1'
|
9215 |
- regex: '(?:LEAGOO[- _])?(Z10-E|M6)(?:[);/ ]|$)'
|
9246 |
model: '$1'
|
9247 |
- regex: 'X900 Build'
|
9248 |
model: 'Le X900'
|
9249 |
+
- regex: 'LEX72[07](?:[);/ ]|$)'
|
9250 |
+
model: 'Le Pro 3'
|
9251 |
- regex: '(?:Le ?X526|Le2[_ ]x527|Le 2|X52[67])(?:[);/ ]|$)'
|
9252 |
model: 'Le 2'
|
9253 |
+
- regex: 'LEX820'
|
9254 |
+
model: 'Le Max 2'
|
9255 |
- regex: 'Le ?X([^;/]+) Build'
|
9256 |
model: 'Le X$1'
|
9257 |
- regex: 'Le ?X([^) ;/]+)'
|
9265 |
- regex: 'LeEco ([^;/]+) Build'
|
9266 |
model: '$1'
|
9267 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9268 |
# Lephone
|
9269 |
Lephone:
|
9270 |
regex: 'lephone[ _]|lephoneP1'
|
9284 |
device: 'tablet'
|
9285 |
model: '$1'
|
9286 |
|
9287 |
+
# Aligator
|
9288 |
+
Aligator:
|
9289 |
+
regex: 'ALIGATOR[_ ]'
|
9290 |
+
device: 'smartphone'
|
9291 |
+
models:
|
9292 |
+
- regex: 'ALIGATOR[ _](S4080|S50(?:6[56]|[678]0)|S5540|RX510|S6[05]00|RX710|RX800|S5520)(?:[);/ ]|$)'
|
9293 |
+
model: '$1'
|
9294 |
+
|
9295 |
# lenovo (lenovo.com)
|
9296 |
Lenovo:
|
9297 |
regex: '(?:LNV-)?Lenovo|IdeaTab|IdeaPad|Thinkpad|Yoga Tablet|Tab2A[0-9]-[0-9]{2}[a-z]?|ZUK[ -_]|(?:TB2-X30L|TB3-710I|YT3-X50[ML]|K50a40|TB-(?:X103F|8504F|X304F|X704V|X704A)|A5500-H|A2107A-H|A3500-HV|A2109A|S6000|Z2 Plus|Vibe[ _](?:P1|S6i Plus|S[23567]i|C|[ZX]2|K5(?: Plus)?|V7)|P2A42|L38011|L18011|[5-8]01LV|[67]02LV|Z2131|K350t|K31-t3|TAB 2 A8-50LC|S90-A|P70-A|VR-1541F)(?:[);/ ]|$)'
|
9399 |
- regex: 'TB-X606[FXV](?:[);/ ]|$)'
|
9400 |
model: 'Tab M10 FHD Plus'
|
9401 |
device: 'tablet'
|
9402 |
+
- regex: 'TB-7305I(?:[);/ ]|$)'
|
9403 |
+
model: 'Tab M7'
|
9404 |
+
device: 'tablet'
|
9405 |
- regex: 'Lenovo ?B8000(-[FH])?'
|
9406 |
model: 'Yoga Tablet 10'
|
9407 |
device: 'tablet'
|
9429 |
- regex: 'YT-X703L'
|
9430 |
model: 'Yoga Tab 3 Plus'
|
9431 |
device: 'tablet'
|
9432 |
+
- regex: 'YT-X705[FL]'
|
9433 |
+
model: 'Yoga Smart Tab'
|
9434 |
+
device: 'tablet'
|
9435 |
|
9436 |
- regex: 'S6000(?:[);/ ]|$)'
|
9437 |
model: 'IdeaTab S6000'
|
9475 |
- regex: 'IdeaTab[ \-_]?([a-z0-9]+)'
|
9476 |
model: 'IdeaTab $1'
|
9477 |
device: 'tablet'
|
9478 |
+
- regex: 'YB-Q501F' # tablet/pc
|
9479 |
+
model: 'Yoga A12'
|
9480 |
+
device: 'tablet'
|
9481 |
+
- regex: 'YT-X705X'
|
9482 |
+
model: 'Yoga Smart Tab'
|
9483 |
+
device: 'tablet'
|
9484 |
- regex: 'Yoga Tablet([^;/]+) Build'
|
9485 |
model: 'Yoga Tablet$1'
|
9486 |
device: 'tablet'
|
9510 |
model: 'ZUK $1'
|
9511 |
- regex: 'K10a40(?:[);/ ]|$)'
|
9512 |
model: 'C2'
|
9513 |
+
- regex: '(?:k50a40|K50-t5)(?:[);/ ]|$)'
|
9514 |
model: 'K3 Note'
|
9515 |
- regex: 'A7010a48(?:[);/ ]|$)'
|
9516 |
model: 'K4 Note'
|
9518 |
model: 'K5'
|
9519 |
- regex: 'L38011(?:[);/ ]|$)'
|
9520 |
model: 'K5 Play'
|
9521 |
+
- regex: '(?:A7020a4[08]|L38012)(?:[);/ ]|$)'
|
9522 |
model: 'K5 Note'
|
9523 |
- regex: 'K31-t3(?:[);/ ]|$)'
|
9524 |
model: 'K31'
|
9562 |
model: 'Vibe S1'
|
9563 |
- regex: 'L78071(?:[);/ ]|$)'
|
9564 |
model: 'Z5s'
|
9565 |
+
- regex: 'L78011(?:[);/ ]|$)'
|
9566 |
+
model: 'Z5'
|
9567 |
+
- regex: 'L78031(?:[);/ ]|$)'
|
9568 |
+
model: 'Z5 Pro'
|
9569 |
- regex: 'L58041(?:[);/ ]|$)'
|
9570 |
model: 'S5 Pro'
|
9571 |
- regex: 'L18021(?:[);/ ]|$)'
|
9572 |
model: 'A3'
|
9573 |
+
- regex: 'PB2-6(?:70M|50Y)(?:[);/ ]|$)'
|
9574 |
model: 'Phab 2'
|
9575 |
- regex: '(S90-A|P70-A)(?:[);/ ]|$)'
|
9576 |
model: '$1'
|
9693 |
|
9694 |
# LG
|
9695 |
LG:
|
9696 |
+
regex: 'LG|Web0S; Linux/SmartTV|portalmmm/2\.0 (?:KE|KG|KP|L3)|(?:VX[0-9]+|L-0[12]D|L-07C|P713|(LM-[A-Z][0-9]{3}[A-Z]{0,3}(?:\(FGN?\)|\(G\)|\.FN|\.F(?:GN?)?)?)|LM-(X625N1|G820QM[0127]))(?:[);/ ]|$)|NetCast|RS98[78]|RS500|VS(?:50[01]|835|876|880|98[0578]|99[056]|(410|415|425|500|880)PP)|VS820|VS870 4G|Nexsus 5|LML(41[34]D|211B|713D|212V)L|VK810 4G|VK815|X5-LG|L-05[DE]|L-03K|L-01[LJK]|L-52A|L-[45]1A|901LG|A001LG|80[12]LG|402LG|LGT32|L-02K|L-01F|LM-V40|DM-01K|DM-02H|LMX130IM|VS810PP|VS425'
|
9697 |
device: 'smartphone'
|
9698 |
models:
|
9699 |
+
- regex: 'DM-(01K|02H)'
|
9700 |
+
model: 'Disney Mobile DM-$1'
|
9701 |
+
- regex: 'LG-D32[05]'
|
9702 |
model: 'L70'
|
9703 |
+
- regex: 'LG-D315'
|
9704 |
+
model: 'F70'
|
9705 |
+
- regex: 'LG-D4(?:[01]5|10)'
|
9706 |
+
model: 'L90'
|
9707 |
+
- regex: 'LG-D373'
|
9708 |
+
model: 'L80'
|
9709 |
- regex: 'LG-D340F8'
|
9710 |
model: 'L70 Tri'
|
9711 |
+
- regex: 'LG-X145'
|
9712 |
+
model: 'L60'
|
9713 |
+
- regex: 'LG-D285'
|
9714 |
+
model: 'L65'
|
9715 |
- regex: 'LM-X210APM'
|
9716 |
model: 'Phoenix 4'
|
9717 |
- regex: 'LG-P505R'
|
9720 |
model: 'Zone 4'
|
9721 |
- regex: 'LM-X220PM'
|
9722 |
model: 'Tribute Empire'
|
9723 |
+
- regex: 'LGLS675'
|
9724 |
+
model: 'Tribute 5'
|
9725 |
+
- regex: 'VS980|L-01F|LG-F320L'
|
9726 |
model: 'G2'
|
9727 |
- regex: 'LG-D6(?:18|20)'
|
9728 |
model: 'G2 Mini'
|
9729 |
+
- regex: 'LG-D85[01258]|VS985|LGLS990'
|
9730 |
model: 'G3'
|
9731 |
+
- regex: 'LG-D72[23568]'
|
9732 |
model: 'G3 Beat'
|
9733 |
+
- regex: 'LG-F460'
|
9734 |
+
model: 'G3 Cat. 6'
|
9735 |
+
- regex: 'LG-D724'
|
9736 |
+
model: 'G3s'
|
9737 |
+
- regex: 'LG-H81[012589]|LG-?[LU]S991|LGV32|LG-F500[LSK]'
|
9738 |
model: 'G4'
|
9739 |
- regex: 'LG-H525n?'
|
9740 |
model: 'G4c'
|
9744 |
model: 'G4s'
|
9745 |
- regex: 'LG-H735'
|
9746 |
model: 'G4 Beat'
|
9747 |
+
- regex: 'LG-H8(?:20|3[01]|5[08]|6[08])|VS987|RS988|LG-F700[SKL]|LG-?LS992'
|
9748 |
model: 'G5'
|
9749 |
- regex: 'LG-H84[05]'
|
9750 |
model: 'G5 SE'
|
9751 |
+
- regex: 'VS988|LG-H87(?:[01](?:DS|[SI]|AR)?|[23])|LG-?US997|LGM-G600[SL]|LG-AS993'
|
9752 |
model: 'G6'
|
9753 |
- regex: 'LM-Q850'
|
9754 |
model: 'G7 Fit'
|
9755 |
- regex: 'LM-Q910'
|
9756 |
model: 'G7 One'
|
9757 |
+
- regex: 'LGL23(?:[);/ ]|$)'
|
9758 |
+
model: 'G Flex'
|
9759 |
+
- regex: 'LG-D680'
|
9760 |
+
model: 'G Pro Lite'
|
9761 |
- regex: 'LM-G820(N|QM[0127]|UMB)?'
|
9762 |
model: 'G8'
|
9763 |
- regex: 'LM-G850'
|
9766 |
model: 'G8S ThinQ'
|
9767 |
- regex: '901LG(?:[);/ ]|$)'
|
9768 |
model: 'G8X ThinQ'
|
9769 |
+
- regex: 'LG-H410(?:[);/ ]|$)'
|
9770 |
+
model: 'Wine Smart H410'
|
9771 |
- regex: 'VS501|LM-X120'
|
9772 |
model: 'K20'
|
9773 |
+
- regex: '(?:LG-)?H50[02]'
|
9774 |
model: 'Magna'
|
9775 |
+
- regex: 'LG-(?:X15[05]|X165g)'
|
9776 |
+
model: 'Bello 2'
|
9777 |
+
- regex: 'LG-D335'
|
9778 |
+
model: 'L Bello'
|
9779 |
+
- regex: 'LG-D29[05]'
|
9780 |
+
model: 'L Fino'
|
9781 |
- regex: '(?:LG-)?H343'
|
9782 |
model: 'Risio'
|
9783 |
- regex: '(?:LG-)?H650'
|
9784 |
model: 'Zero'
|
9785 |
- regex: '(?:LG-)?M154'
|
9786 |
model: 'Risio 2'
|
9787 |
+
- regex: 'LGM-K120[LSK]'
|
9788 |
+
model: 'X300'
|
9789 |
- regex: '(?:LG-)?P500H'
|
9790 |
model: 'Optimus One'
|
9791 |
- regex: '(L-05[DE])(?:[);/ ]|$)'
|
9800 |
model: 'PRADA phone L-02D'
|
9801 |
- regex: 'L-07C'
|
9802 |
model: 'Optimus Bright L-07C'
|
9803 |
+
- regex: '(?:LG-)?(?:F800[SKL]?|H990|US996)'
|
9804 |
model: 'V20'
|
9805 |
- regex: 'LM-Q710(?:\(FGN\)|[\.]?FGN)'
|
9806 |
model: 'Q Stylus Plus'
|
9807 |
- regex: '801LG'
|
9808 |
model: 'Q Stylus'
|
9809 |
+
- regex: 'LG-M400'
|
9810 |
+
model: 'Stylus 3'
|
9811 |
+
- regex: 'LG-K520'
|
9812 |
+
model: 'Stylus 2'
|
9813 |
- regex: 'LM-Q[67]10\.FG(?:[);/ ]|$)'
|
9814 |
model: 'Q7'
|
9815 |
- regex: 'LM-(Q725[KL]|Q610.FGN)(?:[);/ ]|$)'
|
9816 |
model: 'Q7+'
|
9817 |
- regex: 'LM-Q815[SL](?:[);/ ]|$)'
|
9818 |
model: 'Q8+'
|
9819 |
+
- regex: 'LM-Q925[LKS](?:[);/ ]|$)'
|
9820 |
model: 'Q9'
|
9821 |
+
- regex: 'LM-(?:Q730N|Q620)(?:[);/ ]|$)'
|
9822 |
model: 'Q70'
|
9823 |
- regex: 'LGV33(?:[);/ ]|$)'
|
9824 |
model: 'Qua Phone PX'
|
9828 |
model: 'Style 2'
|
9829 |
- regex: 'VS835(?:[);/ ]|$)'
|
9830 |
model: 'Stylo 2 V'
|
9831 |
+
- regex: 'LGMS550'
|
9832 |
+
model: 'Stylo 2 Plus'
|
9833 |
- regex: 'L-41A(?:[);/ ]|$)'
|
9834 |
model: 'Style 3'
|
9835 |
+
- regex: 'LG-?(?:MS631)(?:[);/ ]|$)'
|
9836 |
+
model: 'G Stylo'
|
9837 |
+
- regex: 'LG-?(?:LS777|L84VL|M430)(?:[);/ ]|$)'
|
9838 |
+
model: 'Stylo 3'
|
9839 |
+
- regex: 'LG-?(TP450)(?:[);/ ]|$)'
|
9840 |
+
model: 'Stylo 3 Plus'
|
9841 |
+
- regex: 'LM-Q710|LML713DL|LG-Q710[AP]L'
|
9842 |
model: 'Stylo 4'
|
9843 |
- regex: '(?:LM-Q720|LGL722DL)(?:[);/ ]|$)'
|
9844 |
model: 'Stylo 5'
|
9845 |
- regex: 'LM-Q730(?:[);/ ]|$)'
|
9846 |
model: 'Stylo 6'
|
9847 |
+
- regex: 'LM-G710(N|VM)?|LG-G710'
|
9848 |
model: 'G7 ThinQ'
|
9849 |
- regex: 'LM-X210CM'
|
9850 |
model: 'Fortune 2'
|
9851 |
+
- regex: 'LM-X410\.FG?(?:[);/ ]|$)'
|
9852 |
model: 'Premier Pro'
|
9853 |
+
- regex: 'LGL455DL(?:[);/ ]|$)'
|
9854 |
+
model: 'Premier Pro Plus'
|
9855 |
- regex: 'LML41[34]DL(?:[);/ ]|$)'
|
9856 |
model: 'Premier Pro LTE'
|
9857 |
- regex: 'LM-X525'
|
9858 |
model: 'Q60'
|
9859 |
+
- regex: 'LGL423DL'
|
9860 |
+
model: 'Solo LTE'
|
9861 |
- regex: 'LM-X210K'
|
9862 |
model: 'X2'
|
9863 |
- regex: 'LG-K580'
|
9864 |
model: 'X Cam'
|
9865 |
+
- regex: 'LG-(?:SP320|M327)'
|
9866 |
+
model: 'X Charge'
|
9867 |
+
- regex: 'LG-K200|LGLS676'
|
9868 |
+
model: 'X Style'
|
9869 |
+
- regex: 'LG-K500'
|
9870 |
+
model: 'X Screen'
|
9871 |
+
- regex: 'LG-M710'
|
9872 |
+
model: 'X Venture'
|
9873 |
- regex: 'LM-X510WM'
|
9874 |
model: 'X Power 3'
|
9875 |
- regex: 'LM-X(?:41[05]K|410S)'
|
9878 |
model: 'X4+'
|
9879 |
- regex: 'LM-X410(?:\.FN|\(FG\))'
|
9880 |
model: 'K11'
|
9881 |
+
- regex: 'LM-X(?:320|410[UP]M)|LGL322DL'
|
9882 |
model: 'K30'
|
9883 |
- regex: 'LMX130IM'
|
9884 |
model: 'W10'
|
9885 |
+
- regex: 'LG-H522'
|
9886 |
+
model: 'Prime Plus 4G'
|
9887 |
+
- regex: 'LGL58VL'
|
9888 |
+
model: 'Rabel 2'
|
9889 |
+
- regex: 'LG-X190'
|
9890 |
+
model: 'Ray'
|
9891 |
- regex: 'LM-X410'
|
9892 |
model: 'LM-X410'
|
9893 |
+
- regex: 'LGM-K121S'
|
9894 |
+
model: 'X400'
|
9895 |
- regex: 'LM-X420N'
|
9896 |
model: 'X4 (2019)'
|
9897 |
+
|