Coder Social home page Coder Social logo

extratools's Introduction

Extra Tools (for Matomo)

Some extra cli commands to help with maintaining Matomo. Also providing an phpinfo page in the admin part. Introducing new console commands:

  • archive:list
  • config:get
  • database:backup
  • database:create
  • database:drop
  • database:import
  • logger:delete
  • logger:show
  • matomo:install
  • segment:admin
  • segment:list
  • site:add
  • site:delete
  • site:list
  • site:url
  • visits:get
  • customdimensions:configure-new-dimension

Background

The main reason to doing this plugin was to get automatic installs to work with Matomo, including automatic updates - and version controlled deliveries with configuration in json or yaml.

Known bugs

Adding a site as part of matomo:install is currently broken, but you could just after the command run the site:add command:

./console site:add --name=Foo --urls=https://foo.bar

Dependencies

Sine version 4.1.0-beta1 we are dependent on PHP 8.1

On host:

  • mysql-client or mariadb-client (for database tasks)
  • PHP json extension

In composer.json (Matomo root):

From version 4.1.0-beta1:

  • composer require symfony/yaml:~2.6.0 (moves it from dev)
  • composer require symfony/process:^5.4

Earlier versions:

  • composer require symfony/yaml:~2.6.0 (moves it from dev)
  • composer require symfony/process:^3.4

Install

Git clone the plugin into your plugins folder:

git clone https://github.com/digitalist-se/extratools.git ExtraTools

Config

Activate ExtraTools - in UI, or better - in the console:

console plugin:activate ExtraTools

Set up a db backup path, use the console (use the path you desire):

./console config:set 'ExtraTools.db_backup_path="/var/www/html/tmp"'

Or add it manually to config.ini.php:

[ExtraTools]
db_backup_path = "/var/www/html/tmp"

Commands

archive:list

Gets al list of ongoing or scheduled core archivers, if such exist.

config:get

Gets a section config. @todo - make this more like config:set - so you have more options.

database:backup

Backups the db.

database:create

Creates the db defined i config.ini.php. Adding the --force flag stops the command for asking questions.

database:drop

Drops the db defined i config.ini.php - backup first if needed. Adding the --force flag stops the command for asking questions.

database:import

Imports database dump to database defined in config.ini.php, so if you already have a installation - it overwrites it.

logger:delete

Removes logging entries from the DB, that is the internal logging in Matomo, not visits on sites.

logger:show

Show logging and query entries of logs from the database, output could be exported to CSV.

matomo:install

To use matomo:install, you need ExtraTools to always be enabled, add always_load_commands_from_plugin=ExtraTools to common.config.ini.php.

Here is how we do it in ad docker image build:

    echo "[General]" > /var/www/html/config/common.config.ini.php; \
    echo "always_load_commands_from_plugin=ExtraTools" >> /var/www/html/config/common.config.ini.php; \

Installs Matamo. Wipes the current installation - as default it uses settings in your config.ini.php file - but all values could be overridden with arguments or environment variables.

If you have a license for Matomo Premium plugins, set the environment variable MATOMO_LICENSE with the correct license token. The environment variable is set as a normal environment variable, in shell using export, in a docker-compose file, the environment array etc. If the variable is set, Matomo will have the license key set on install.

segment:admin

Administration of segments, only options right now is to delete or activate a segment, a deleted segment could later be activated again.

segment:list

List all segments, with ID, definition, date created and latest updated.

site:add

Adds a new site to track.

site:delete

Deletes a site with ID provided.

site:list

List sites, with the optional format argument - supported output is text(default), json and yaml.

site:url

Adds one or more URLs to a site.

visits:get

Get all archived visits, for one site or all. For a segment or all segments, for today, or another day etc.

customdimensions:configure-new-dimension

Configure a new custom dimension. BETA.

Requirements

Matomo needs a MySQL/MariaDB host, with a user setup that is allowed to drop that db. The first user is created as a super user and it is need to have one to set up Matomo. If you do not add values in environment variables or options to matomo:install command, it will use the defaults for the user - so important that you change that users password after install. Matomo also creates a first site to track, this also has default values that you could override with environment variables or options.

You could also use a json-file for configuration - like all the above mentioned - and for installing plugins. An example json-file could be found in the docs folder for this plugin.

Environment variables

Supported default environment variables from the official Matomo docker container:

MATOMO_DATABASE_HOST
MATOMO_DATABASE_PORT
MATOMO_DATABASE_TABLES_PREFIX
MATOMO_DATABASE_USERNAME
MATOMO_DATABASE_PASSWORD
MATOMO_DATABASE_DBNAME
MATOMO_DATABASE_ADAPTER

These could be overridden with (historical reasons):

MATOMO_DB_HOST
MATOMO_DB_PREFIX
MATOMO_DB_USERNAME
MATOMO_DB_PASSWORD
MATOMO_DB_NAME

Other environment variables:

MATOMO_FIRST_USER_NAME
MATOMO_FIRST_USER_EMAIL
MATOMO_FIRST_USER_PASSWORD

MATOMO_FIRST_SITE_NAME
MATOMO_FIRST_SITE_URL

MATOMO_LOG_TIMESTAMP (1)

Installation preparation

If you have a config.ini.php in the config dir - delete it. Run:

console plugin:activate ExtraTools

Then follow one of the Examples below.

Example install 1 (recommended)

console matomo:install --install-file=install.json

Example install 2

console matomo:install --db-username=myuser --db-pass=password \
  --db-host=localhost --db-port=3306 --db-name=matomo --first-site-name=Foo \
  --first-site-url=https//foo.bar --first-user='Mr Foo Bar' \
  [email protected] --first-user-pass=secret

Example install 3

Using environment variables, docker-compose.yml example.

environment:
      - MATOMO_DB_USERNAME=myuser
      - MATOMO_DB_PASSWORD=secret
      - MATOMO_DB_HOST=mysql
      - MATOMO_DB_PORT=3306
      - MATOMO_DB_NAME=matomo
      - MATOMO_FIRST_USER_NAME=Mr Foo Bar
      - [email protected]
      - MATOMO_FIRST_USER_PASSWORD=secret
      - MATOMO_FIRST_SITE_NAME=Foo
      - MATOMO_FIRST_SITE_URL=https://foo.bar

Order of values

Highest number = takes over. If you have you mysql server settings in environment variables and provide the option --db-username=myuser, the latter is used for the db username.

  1. config.ini.php (created when you install the first time)
  2. Environment variable
  3. Option (matomo:install --db-username=myuser)
  4. File overrides (matom-install --install-file=install.json)

CAUTION!

  • matamo:install wipes your current installation.
  • database:drop - as it says - drops the entire db, make a backup first if you want to save you data, and check if it's ok.
  • database:import - writes over your current database.
  • site:delete - really deletes a site you have setup in Matomo.

This plugin comes with no guarantees. But it's free and open source. So, let's make it better!

Version supported

This is tested from version 3.8.1, and should work with the latest stable.

Thank you!

This plugin is based on work done by Ben Evans in https://github.com/nebev/piwik-cli-setup, and also reusing code in Matomo core.

Tests

How to run tests.

PHPstan

docker-compose exec matomo bash -c "/var/www/html/plugins/ExtraTools/vendor/bin/phpstan analyze -c /var/www/html/plugins/ExtraTools/tests/phpstan.neon  --level=0 plugins/ExtraTools/"

Phpunit

docker-compose up -d
docker-compose exec --user=root matomo bash -c  "cd plugins/ExtraTools && composer install --no-interaction --no-progress"
docker-compose exec matomo ./console matomo:install --install-file=/var/www/html/config/install.json --force
docker-compose exec matomo ./console site:add --name=Foo --urls=https://foo.bar
docker-compose exec matomo touch /var/www/html/.gitmodules
docker-compose exec matomo ./console development:enable
docker-compose exec matomo ./console config:set --section=tests --key=http_host --value=web
docker-compose exec matomo ./console config:set --section=tests --key=request_uri --value=/
docker-compose exec matomo ./console config:set --section=database_tests --key=host --value=db
docker-compose exec matomo ./console config:set --section=database_tests --key=username --value=root
docker-compose exec matomo ./console config:set --section=database_tests --key=password --value=root
docker-compose exec matomo ./console config:set --section=database_tests --key=dbname --value=matomo_test
docker-compose exec matomo ./console config:set --section=database_tests --key=tables_prefix --value=""
docker-compose exec matomo /var/www/html/plugins/ExtraTools/vendor/bin/phpunit -c plugins/ExtraTools/tests/phpunit.xml --coverage-text --testdox --log-junit report.xml

extratools's People

Contributors

chriscroome avatar mikkeschiren avatar web-flow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

extratools's Issues

Database Backup not Working

Hi I am trying to run the Database Backup but get this error

It seems the default PHP shell does not like command - running the command directly works but not via PHP. Any easy way to fix this?

ERROR [2022-08-25 08:30:41] 27962  Uncaught exception: /var/matomo/plugins/ExtraTools/Lib/Backup.php(46): The command "mysqldump -u user -h host.net -P 3306 -pmypass host_piwik --add-drop-table >/var/matomo-backup/backup-20220825-083041.sql 2> >(grep -v "Using a password")" failed.

Exit Code: 2(Misuse of shell builtins)

Working directory: /var/matomo-backup

Output:
================


Error Output:
================
sh: 1: Syntax error: redirection unexpected
 [Query: , CLI mode: 1]

site:add allows duplicates

You can add the same site multiple times, would it be within the scope of this plugin to check for duplicates?

I have looked at doing a duplicate check prior to adding sites to work around this but have found that the php console site:list command doesn't appear to return anything?

Would I best best off reverting to running MySQL queries against the Matomo database or using the API for now?

site:update command

If the list of URL's needs to be added to for a site, eg add www.example.org to the site_url table for the www.example.com site, there isn't currently a way to do this using the ExtraTools command line interface.

Uncaught exception: Error: Class "Symfony\Component\Process\Process" not found in /var/www/html/plugins/ExtraTools/Lib/Drop.php:34

I'm trying to use matomo:install to skip the Matomo setup, but I get an error when I'm trying to execute ./console matomo:install

full log:
root@cb27b4abd5bd:/var/www/html# ./console matomo:install
WARNING [2023-09-20 11:24:59] 757 /var/www/html/plugins/ExtraTools/Commands/InstallMatomo.php(289): Deprecated - file_exists(): Passing null to parameter #1 ($filename) of type string is deprecated - Matomo 4.15.1 - Please report this message in the Matomo forums: https://forum.matomo.org (please do a search first as it might have been reported already)
Are you really sure you would like to install Matomo - if you have an installation already, it will be wiped? y
ERROR [2023-09-20 11:25:00] 757 Uncaught exception: Error: Class "Symfony\Component\Process\Process" not found in /var/www/html/plugins/ExtraTools/Lib/Drop.php:34
Stack trace:
#0 /var/www/html/plugins/ExtraTools/Commands/InstallMatomo.php(259): Piwik\Plugins\ExtraTools\Lib\Drop->execute()
#1 /var/www/html/vendor/symfony/console/Symfony/Component/Console/Command/Command.php(257): Piwik\Plugins\ExtraTools\Commands\InstallMatomo->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#2 /var/www/html/vendor/symfony/console/Symfony/Component/Console/Application.php(874): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#3 /var/www/html/vendor/symfony/console/Symfony/Component/Console/Application.php(195): Symfony\Component\Console\Application->doRunCommand(Object(Piwik\Plugins\ExtraTools\Commands\InstallMatomo), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 /var/www/html/core/Console.php(108): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#5 [internal function]: Piwik\Console->originDoRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#6 /var/www/html/core/Console.php(147): call_user_func(Array, Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#7 /var/www/html/core/Access.php(670): Piwik\Console->Piwik{closure}()
#8 /var/www/html/core/Console.php(148): Piwik\Access::doAsSuperUser(Object(Closure))
#9 /var/www/html/core/Console.php(87): Piwik\Console->doRunImpl(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#10 /var/www/html/vendor/symfony/console/Symfony/Component/Console/Application.php(126): Piwik\Console->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#11 /var/www/html/console(32): Symfony\Component\Console\Application->run()
#12 {main}
Uncaught exception in /var/www/html/plugins/ExtraTools/Lib/Drop.php line 34:
Class "Symfony\Component\Process\Process" not found
root@cb27b4abd5bd:/var/www/html#

This is my config.ini.php
; DO NOT REMOVE THIS LINE
; file automatically generated or modified by Matomo; you can manually override the default values in global.ini.php by redefining them in this file.
[database]
host = "172.17.0.1"
port ="9034"
username = "matomo"
password = "secret"
dbname = "matomo"
tables_prefix = "matomo_"
charset = "utf8mb4"

[General]
release_channel = "latest_4x_stable"
trusted_hosts[] = "localhost"
always_load_commands_from_plugin=ExtraTools

[PluginsInstalled]
PluginsInstalled[] = "Diagnostics"
PluginsInstalled[] = "Login"
PluginsInstalled[] = "CoreAdminHome"
PluginsInstalled[] = "UsersManager"
PluginsInstalled[] = "SitesManager"
PluginsInstalled[] = "Installation"
PluginsInstalled[] = "Monolog"
PluginsInstalled[] = "Intl"
PluginsInstalled[] = "CoreVue"
PluginsInstalled[] = "CorePluginsAdmin"
PluginsInstalled[] = "CoreHome"
PluginsInstalled[] = "WebsiteMeasurable"
PluginsInstalled[] = "IntranetMeasurable"
PluginsInstalled[] = "CoreVisualizations"
PluginsInstalled[] = "Proxy"
PluginsInstalled[] = "API"
PluginsInstalled[] = "Widgetize"
PluginsInstalled[] = "Transitions"
PluginsInstalled[] = "LanguagesManager"
PluginsInstalled[] = "Actions"
PluginsInstalled[] = "Dashboard"
PluginsInstalled[] = "MultiSites"
PluginsInstalled[] = "Referrers"
PluginsInstalled[] = "UserLanguage"
PluginsInstalled[] = "DevicesDetection"
PluginsInstalled[] = "Goals"
PluginsInstalled[] = "Ecommerce"
PluginsInstalled[] = "SEO"
PluginsInstalled[] = "Events"
PluginsInstalled[] = "UserCountry"
PluginsInstalled[] = "GeoIp2"
PluginsInstalled[] = "VisitsSummary"
PluginsInstalled[] = "VisitFrequency"
PluginsInstalled[] = "VisitTime"
PluginsInstalled[] = "VisitorInterest"
PluginsInstalled[] = "RssWidget"
PluginsInstalled[] = "Feedback"
PluginsInstalled[] = "TwoFactorAuth"
PluginsInstalled[] = "CoreUpdater"
PluginsInstalled[] = "CoreConsole"
PluginsInstalled[] = "ScheduledReports"
PluginsInstalled[] = "UserCountryMap"
PluginsInstalled[] = "Live"
PluginsInstalled[] = "PrivacyManager"
PluginsInstalled[] = "ImageGraph"
PluginsInstalled[] = "Annotations"
PluginsInstalled[] = "MobileMessaging"
PluginsInstalled[] = "Overlay"
PluginsInstalled[] = "SegmentEditor"
PluginsInstalled[] = "Insights"
PluginsInstalled[] = "Morpheus"
PluginsInstalled[] = "Contents"
PluginsInstalled[] = "BulkTracking"
PluginsInstalled[] = "Resolution"
PluginsInstalled[] = "DevicePlugins"
PluginsInstalled[] = "Heartbeat"
PluginsInstalled[] = "Marketplace"
PluginsInstalled[] = "ProfessionalServices"
PluginsInstalled[] = "UserId"
PluginsInstalled[] = "CustomJsTracker"
PluginsInstalled[] = "Tour"
PluginsInstalled[] = "PagePerformance"
PluginsInstalled[] = "CustomDimensions"
PluginsInstalled[] = "ExtraTools"

Database is not correctly populated - matomo_site table is empty

Hi,

I'm deploying matomo 3.14.1 in a kubernetes cluster using your Helm charts https://github.com/digitalist-se/matomo-kubernetes and I got everything running but when I login into matomo it says:

Error: no website was found in this Matomo installation.
Check the table 'matomo_site' in your database, it should contain your Matomo websites.

I have checked DB and table is empty indeed.

Installation is using ExtraTools-3.1.0-beta16 downloaded from matomo plugin marketplace for matomo 3.x

I have manually executed ./console matomo:install --install-file=/tmp/matomo/install.json --force --do-not-drop-db

with
---- install.json ---
{
"PluginsInstalled": [
"Diagnostics",
"DBStats",
"Login",
"CoreAdminHome",
"UsersManager",
"SitesManager",
"Installation",
"Monolog",
"Intl",
"CorePluginsAdmin",
"CoreHome",
"WebsiteMeasurable",
"CoreVisualizations",
"Proxy",
"API",
"Transitions",
"Actions",
"Referrers",
"UserLanguage",
"DevicesDetection",
"Goals",
"SEO",
"Events",
"UserCountry",
"GeoIp2",
"VisitsSummary",
"VisitFrequency",
"VisitTime",
"VisitorInterest",
"CoreUpdater",
"CoreConsole",
"UserCountryMap",
"Live",
"ImageGraph",
"Annotations",
"Insights",
"Morpheus",
"Contents",
"DevicePlugins",
"UserId",
"ExtraTools",
"LanguagesManager",
"SegmentEditor",
"Dashboard",
"ScheduledReports",
"PrivacyManager",
"CustomVariables",
"IntranetMeasurable",
"Widgetize",
"MultiSites",
"Ecommerce",
"RssWidget",
"Feedback",
"TwoFactorAuth",
"MobileMessaging",
"Overlay",
"BulkTracking",
"Resolution",
"Heartbeat",
"Marketplace",
"ProfessionalServices",
"UserConsole"
],
"User": {
"username": "foo",
"pass": "mypass",
"email": "[email protected]"
},
"Site": {
"name": "localhost",
"url": "http://localhost"
},
"Config": {
"log": {
"log_level": "DEBUG"
},
"General": {
"show_update_notification_to_superusers_only": 1,
"noreply_email_address": "[email protected]",
"enable_framed_pages": 1,
"enable_framed_settings": 1,
"enable_trusted_host_check": 0,
"enable_plugin_update_communication": 0,
"enable_auto_update": 0,
"enable_installer": 0,
"enable_internet_features": 0,
"enable_plugins_admin": 0,
"enable_plugin_upload": 0,
"enable_geolocation_admin": 1,
"proxy_client_headers[]": "HTTP_X_FORWARDED_FOR",
"browser_archiving_disabled_enforce": 1,
"enable_browser_archiving_triggering": 0,
"archiving_range_force_on_browser_request": 0,
"enable_sql_optimize_queries": 0,
"enabled_periods_UI": "day,week,month,year,range",
"enabled_periods_API": "day,week,month,year,range",
"session_save_handler": "dbtable",
"enable_marketplace": 0,
"enable_general_settings_admin": 1,
"piwik_pro_ads_enabled": 0,
"assume_secure_protocol": 1,
"cors_domains[]": "*",
"datatable_archiving_maximum_rows_referrers": 2000,
"datatable_archiving_maximum_rows_subtable_referrers": 2000,
"datatable_archiving_maximum_rows_actions": 2000,
"datatable_archiving_maximum_rows_subtable_actions": 2000,
"datatable_archiving_maximum_rows_events": 2000,
"datatable_archiving_maximum_rows_subtable_events": 2000,
"datatable_archiving_maximum_rows_custom_variables": 2000,
"datatable_archiving_maximum_rows_subtable_custom_variables": 2000,
"time_before_today_archive_considered_outdated": 2700,
"time_before_week_archive_considered_outdated": 10800,
"time_before_month_archive_considered_outdated": 32400,
"time_before_year_archive_considered_outdated": 64800,
"time_before_range_archive_considered_outdated": 10800
}
}
}
--- eof install.json ---

and no error so far, console says:

Installing Matomo
Starting install
Deleting cache
Initialising Database Connections
Create Matomo core tables
Updating Components
Creating Super user
Activated Diagnostics
Activated DBStats
Activated Login
Activated CoreAdminHome
Activated UsersManager
Activated SitesManager
Activated Installation
Activated Monolog
Activated Intl
Activated CorePluginsAdmin
Activated CoreHome
Activated WebsiteMeasurable
Activated CoreVisualizations
Activated Proxy
Activated API
Activated Transitions
Activated Actions
Activated Referrers
Activated UserLanguage
Activated DevicesDetection
Activated Goals
Activated SEO
Activated Events
Activated UserCountry
Activated GeoIp2
Activated VisitsSummary
Activated VisitFrequency
Activated VisitTime
Activated VisitorInterest
Activated CoreUpdater
Activated CoreConsole
Activated UserCountryMap
Activated Live
Activated ImageGraph
Activated Annotations
Activated Insights
Activated Morpheus
Activated Contents
Activated DevicePlugins
Activated UserId
Activated ExtraTools
Activated LanguagesManager
Activated SegmentEditor
Activated Dashboard
Activated ScheduledReports
Activated PrivacyManager
Activated CustomVariables
Activated IntranetMeasurable
Activated Widgetize
Activated MultiSites
Activated Ecommerce
Activated RssWidget
Activated Feedback
Activated TwoFactorAuth
Activated MobileMessaging
Activated Overlay
Activated BulkTracking
Activated Resolution
Activated Heartbeat
Activated Marketplace
Activated ProfessionalServices
Activated UserConsole
Finalising...
We are done! Welcome to Matomo!
Now you can login with user foo and password mypass

matomo_user table is populated with that user but It's like it is not writting everything required to DB, but it seems that there is no error.

Any clue?

Thank you very much indeed!!!

Install process

Thanks for developing this plugin, I have been looking for a way of automating the install for ages.

I'm working on automating installs, upgrades and adding and editing sites and using using Ansible and currently this is what I'm doing to install:

  • Put the Matomo files in place
  • Delete the composer.lock file
  • Replace the composer.json files with a version with the two additional lines
  • Run composer install
  • Clone the ExtraTools repo
  • Activate the plugin php console plugin:activate ExtraTools
  • Run php console matomo:install ...

This works, which is great, but the File integrity check then reports:

Directory to delete: vendor/aws
Directory to delete: vendor/doctrine/instantiator
Directory to delete: vendor/facebook
Directory to delete: vendor/guzzle
Directory to delete: vendor/maxmind-db/reader/ext
Directory to delete: vendor/pear/archive_tar/tests
Directory to delete: vendor/phpdocumentor
Directory to delete: vendor/phpseclib
Directory to delete: vendor/phpspec
Directory to delete: vendor/phpunit
Directory to delete: vendor/sebastian
Directory to delete: vendor/symfony/process
Directory to delete: vendor/symfony/var-dumper
Directory to delete: vendor/symfony/yaml
Directory to delete: vendor/twig/twig/doc
Directory to delete: vendor/twig/twig/test
Directory to delete: vendor/webmozart

File to delete: vendor/bin/phpunit
File to delete: vendor/maxmind-db/reader/CHANGELOG.md
File to delete: vendor/maxmind-db/reader/autoload.php
File to delete: vendor/pear/console_getopt/tests/001-getopt.phpt
File to delete: vendor/pear/console_getopt/tests/bug10557.phpt
File to delete: vendor/pear/console_getopt/tests/bug11068.phpt
File to delete: vendor/pear/console_getopt/tests/bug13140.phpt
File to delete: vendor/piwik/device-detector/LICENSE
File to delete: vendor/twig/twig/drupal_test.sh
File to delete: vendor/twig/twig/lib/Twig/Node/Deprecated.php
File to delete: vendor/twig/twig/lib/Twig/TokenParser/Deprecated.php
File to delete: vendor/twig/twig/src/Node/CheckToStringNode.php
File to delete: vendor/twig/twig/src/Node/DeprecatedNode.php
File to delete: vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php
File to delete: vendor/twig/twig/src/Node/Expression/InlinePrint.php
File to delete: vendor/twig/twig/src/TokenParser/ApplyTokenParser.php
File to delete: vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php
File to delete: vendor/twig/twig/.editorconfig

File size mismatch: /home/stats/sites/default/composer.json (expected length: 4723, found: 4792)
File size mismatch: /home/stats/sites/default/composer.lock (expected length: 117721, found: 119488)
File size mismatch: /home/stats/sites/default/vendor/composer/autoload_classmap.php (expected length: 374696, found: 47885)
File size mismatch: /home/stats/sites/default/vendor/composer/autoload_files.php (expected length: 530, found: 986)
File size mismatch: /home/stats/sites/default/vendor/composer/autoload_namespaces.php (expected length: 937, found: 1683)
File size mismatch: /home/stats/sites/default/vendor/composer/autoload_psr4.php (expected length: 1944, found: 2464)
File size mismatch: /home/stats/sites/default/vendor/composer/autoload_static.php (expected length: 423827, found: 62852)
File size mismatch: /home/stats/sites/default/vendor/composer/ca-bundle/res/cacert.pem (expected length: 209309, found: 219596)
File size mismatch: /home/stats/sites/default/vendor/composer/include_paths.php (expected length: 311, found: 362)
File size mismatch: /home/stats/sites/default/vendor/composer/installed.json (expected length: 60729, found: 110636)
File size mismatch: /home/stats/sites/default/vendor/composer/LICENSE (expected length: 1070, found: 2919)
File size mismatch: /home/stats/sites/default/vendor/pear/archive_tar/Archive/Tar.php (expected length: 83212, found: 85179)
File size mismatch: /home/stats/sites/default/vendor/pear/archive_tar/composer.json (expected length: 1298, found: 1344)
File size mismatch: /home/stats/sites/default/vendor/pear/archive_tar/package.xml (expected length: 15027, found: 16716)
File size mismatch: /home/stats/sites/default/vendor/pear/archive_tar/README.md (expected length: 787, found: 851)
File size mismatch: /home/stats/sites/default/vendor/pear/console_getopt/Console/Getopt.php (expected length: 13412, found: 13635)
...

If I delete these files and directories then Matomo stops working, should I just ignore these warnings or should I be following a different process for doing the install?

Install with config file

Install with a *.json file is still not complete - plugins can't been installed that way yet.

Installing for Matomo 4.x

Should an install of the 4.x-dev branch work?

I'm finding that every step I was using fails, for example:

composer require symfony/process:^3.4

In ArrayLoader.php line 44:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
  Unknown package has no name defined ([{"name":"composer\/ca-bundle","version":"1.2.8","version_normalized":"1.2.8.0","source":{"type":"git","url":"https:\/\/github.com\/composer\/ca-bundle.git","reference":"8a7ecad675253e4654ea05505233285377405215"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/composer\/ca-bundle\/zipball\/8a7ecad675253e4654ea05505233285377405215","reference":"8a7ecad675253e4654ea05505233285377405215","shasum":""},"require":{"ext-openssl":"*","ext-pcre":"*","php":"^5.3.2 || ^7.0 || ^8.0"},"require-dev":{"phpunit\/phpunit":"^4.8.35 || ^5.7 || 6.5 - 8","psr\/log":"^1.0","symfony\/process":"^2.5 || ^3.0 || ^4.0 || ^5.0"},"time":"2020-08-23T12:54:47+00:00","type":"library","extra":{"branch-alias":{"dev-master":"1.x-dev"}},"installation-source":"dist","autoload":{"psr-4":{"Composer\\CaBundle\\":"src"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"Jordi Boggiano","email":"[email protected]","homepage":"http:\/\/seld.be"}],"description":"Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.","keywords":["cabundle","cacert","certificate","ssl","tls"],"support":{"irc":"irc:\/\/irc.freenode.org\/composer","issues":"https:\/\/github.com\/composer\/ca-bundle\/issues","source":"https:\/\/github.com\/composer\/ca-bundle\/tree\/1.2.8"},"funding":[{"url":"https:\/\/packagist.com","type":"custom"},{"url":"https:\/\/github.com\/composer","type":"github"},{"url":"https:\/\/tidelift.com\/funding\/github\/packagist\/composer\/composer","type":"tidelift"}],"install-path":".\/ca-bundle"},{"name":"composer\/semver","version":"1.3.0","version_normalized":"1.3.0.0","source":{"type":"git","url":"https:\/\/github.com\/composer\/semver.git","reference":"df4463baa9f44fe6cf0a6da4fde2934d4c0a2747"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/composer\/semver\/zipball\/df4463baa9f44fe6cf0a6da4fde2934d4c0a2747","reference":"df4463baa9f44fe6cf0a6da4fde2934d4c0a2747","shasum":""},"require":{"php":"^5.3.2 || ^7.0"},"require-dev":{"phpunit\/phpunit":"^4.5 || ^5.0.5","phpunit\/phpunit-mock-objects":"2.3.0 || ^3.0"},"time":"2016-02-25T22:23:39+00:00","type":"library","extra":{"branch-alias":{"dev-master":"1.x-dev"}},"installation-source":"dist","autoload":{"psr-4":{"Composer\\Semver\\":"src"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"Nils Adermann","email":"[email protected]","homepage":"http:\/\/www.naderman.de"},{"name":"Jordi Boggiano","email":"[email protected]","homepage":"http:\/\/seld.be"},{"name":"Rob Bast","email":"[email protected]","homepage":"http:\/\/robbast.nl"}],"description":"Semver library that offers utilities, version constraint parsing and validation.","keywords":["semantic","semver","validation","versioning"],"support":{"irc":"irc:\/\/irc.freenode.org\/composer","issues":"https:\/\/github.com\/composer\/semver\/issues","source":"https:\/\/github.com\/composer\/semver\/tree\/master"},"install-path":".\/semver"},{"name":"davaxi\/sparkline","version":"1.2.2","version_normalized":"1.2.2.0","source":{"type":"git","url":"https:\/\/github.com\/davaxi\/Sparkline.git","reference":"380d447fcfc6468f7d8e5c041e8c01b8ec969959"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/davaxi\/Sparkline\/zipball\/380d447fcfc6468f7d8e5c041e8c01b8ec969959","reference":"380d447fcfc6468f7d8e5c041e8c01b8ec969959","shasum":""},"require":{"ext-gd":"*","php":">=5.4.0"},"require-dev":{"codeclimate\/php-test-reporter":"dev-master","ext-gd":"*","friendsofphp\/php-cs-fixer":"^2.8","jakub-onderka\/php-parallel-lint":"^0.9.2","php":">=5.4.0","phpro\/grumphp":"^0.12.0","phpunit\/phpunit":"^4.8.36","povils\/phpmnd":"^1.1","sebastian\/phpcpd":"^3.0","sensiolabs\/security-checker":"^4.1","squizlabs\/php_codesniffer":"^3.1","wearejust\/grumphp-extra-tasks":"^2.1"},"time":"2020-02-05T13:40:09+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"Davaxi\\":"src\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"David Patiashvili","email":"[email protected]","homepage":"https:\/\/www.patiashvili.fr\/","role":"Developer"}],"description":"PHP Class (using GD) to generate sparklines","keywords":["php","picture","sparkline"],"support":{"issues":"https:\/\/github.com\/davaxi\/Sparkline\/issues","source":"https:\/\/github.com\/davaxi\/Sparkline\/releases"},"install-path":"..\/davaxi\/sparkline"},{"name":"doctrine\/cache","version":"1.10.2","version_normalized":"1.10.2.0","source":{"type":"git","url":"https:\/\/github.com\/doctrine\/cache.git","reference":"13e3381b25847283a91948d04640543941309727"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/doctrine\/cache\/zipball\/13e3381b25847283a91948d04640543941309727","reference":"13e3381b25847283a91948d04640543941309727","shasum":""},"require":{"php":"~7.1 || ^8.0"},"conflict":{"doctrine\/common":">2.2,<2.4"},"require-dev":{"alcaeus\/mongo-php-adapter":"^1.1","doctrine\/coding-standard":"^6.0","mongodb\/mongodb":"^1.1","phpunit\/phpunit":"^7.0","predis\/predis":"~1.0"},"suggest":{"alcaeus\/mongo-php-adapter":"Required to use legacy MongoDB driver"},"time":"2020-07-07T18:54:01+00:00","type":"library","extra":{"branch-alias":{"dev-master":"1.9.x-dev"}},"installation-source":"dist","autoload":{"psr-4":{"Doctrine\\Common\\Cache\\":"lib\/Doctrine\/Common\/Cache"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"Guilherme Blanco","email":"[email protected]"},{"name":"Roman Borschel","email":"[email protected]"},{"name":"Benjamin Eberlei","email":"[email protected]"},{"name":"Jonathan Wage","email":"[email protected]"},{"name":"Johannes Schmitt","email":"[email protected]"}],"description":"PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.","homepage":"https:\/\/www.doctrine-project.org\/projects\/cache.html","keywords":["abstraction","apcu","cache","caching","couchdb","memcached","php","redis","xcache"],"support":{"issues":"https:\/\/github.com\/doctrine\/cache\/issues","source":"https:\/\/github.com\/doctrine\/cache\/tree\/1.10.x"},"funding":[{"url":"https:\/\/www.doctrine-project.org\/sponsorship.html","type":"custom"},{"url":"https:\/\/www.patreon.com\/phpdoctrine","type":"patreon"},{"url":"https:\/\/tidelift.com\/funding\/github\/packagist\/doctrine%2Fcache","type":"tidelift"}],"install-path":"..\/doctrine\/cache"},{"name":"geoip2\/geoip2","version":"v2.11.0","version_normalized":"2.11.0.0","source":{"type":"git","url":"https:\/\/github.com\/maxmind\/GeoIP2-php.git","reference":"d01be5894a5c1a3381c58c9b1795cd07f96c30f7"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/maxmind\/GeoIP2-php\/zipball\/d01be5894a5c1a3381c58c9b1795cd07f96c30f7","reference":"d01be5894a5c1a3381c58c9b1795cd07f96c30f7","shasum":""},"require":{"ext-json":"*","maxmind-db\/reader":"~1.8","maxmind\/web-service-common":"~0.8","php":">=7.2"},"require-dev":{"friendsofphp\/php-cs-fixer":"2.*","phpunit\/phpunit":"^8.0 || ^9.0","squizlabs\/php_codesniffer":"3.*"},"time":"2020-10-01T18:48:34+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"GeoIp2\\":"src"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["Apache-2.0"],"authors":[{"name":"Gregory J. Oschwald","email":"[email protected]","homepage":"https:\/\/www.maxmind.com\/"}],"description":"MaxMind GeoIP2 PHP API","homepage":"https:\/\/github.com\/maxmind\/GeoIP2-php","keywords":["IP","geoip","geoip2","geolocation","maxmind"],"support":{"issues":"https:\/\/github.com\/maxmind\/GeoIP2-php\/issues","source":"https:\/\/github.com\/maxmind\/GeoIP2-php\/tree\/v2.11.0"},"install-path":"..\/geoip2\/geoip2"},{"name":"leafo\/lessphp","version":"dev-php74-compat","version_normalized":"dev-php74-compat","source":{"type":"git","url":"https:\/\/github.com\/matomo-org\/lessphp.git","reference":"1c1bf226f6d394f28cc676a6c2893556a5dcb495"},"time":"2020-06-18T02:38:35+00:00","type":"library","extra":{"branch-alias":{"dev-master":"0.4.x-dev"}},"installation-source":"source","autoload":{"classmap":["lessc.inc.php"]},"license":["MIT","GPL-3.0"],"authors":[{"name":"Leaf Corcoran","email":"[email protected]","homepage":"http:\/\/leafo.net"}],"description":"lessphp is a compiler for LESS written in PHP.","homepage":"http:\/\/leafo.net\/lessphp\/","install-path":"..\/leafo\/lessphp"},{"name":"matomo\/cache","version":"2.0.2","version_normalized":"2.0.2.0","source":{"type":"git","url":"https:\/\/github.com\/matomo-org\/component-cache.git","reference":"01e82b9dc0f2f8b0ee070212b0e9e91045f60926"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/matomo-org\/component-cache\/zipball\/01e82b9dc0f2f8b0ee070212b0e9e91045f60926","reference":"01e82b9dc0f2f8b0ee070212b0e9e91045f60926","shasum":""},"require":{"doctrine\/cache":"~1.4","php":">=5.5.9"},"require-dev":{"phpunit\/phpunit":"~5.7"},"time":"2019-07-14T20:55:17+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"Matomo\\Cache\\":"src\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["LGPL-3.0"],"authors":[{"name":"The Matomo Team","email":"[email protected]","homepage":"https:\/\/matomo.org\/the-matomo-team\/"}],"description":"PHP caching library based on Doctrine cache","keywords":["array","cache","file","redis"],"support":{"issues":"https:\/\/github.com\/matomo-org\/component-cache\/issues","source":"https:\/\/github.com\/matomo-org\/component-cache\/tree\/master"},"install-path":"..\/matomo\/cache"},{"name":"matomo\/decompress","version":"2.1.0","version_normalized":"2.1.0.0","source":{"type":"git","url":"https:\/\/github.com\/matomo-org\/component-decompress.git","reference":"44dcf77dcd633a9c336f90d80658ad3d25225e05"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/matomo-org\/component-decompress\/zipball\/44dcf77dcd633a9c336f90d80658ad3d25225e05","reference":"44dcf77dcd633a9c336f90d80658ad3d25225e05","shasum":""},"require":{"pear\/archive_tar":"^1.4.3","php":">=5.3.2"},"require-dev":{"phpunit\/phpunit":"^4.8.36"},"time":"2020-01-11T23:34:33+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"Matomo\\Decompress\\":"src\/"},"classmap":["libs\/PclZip"]},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["LGPL-3.0"],"support":{"issues":"https:\/\/github.com\/matomo-org\/component-decompress\/issues","source":"https:\/\/github.com\/matomo-org\/component-decompress\/tree\/master"},"install-path":"..\/matomo\/decompress"},{"name":"matomo\/device-detector","version":"4.0.2","version_normalized":"4.0.2.0","source":{"type":"git","url":"https:\/\/github.com\/matomo-org\/device-detector.git","reference":"20572bbf8607cfc2f91a11fc75e9a3c6592bdc7a"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/matomo-org\/device-detector\/zipball\/20572bbf8607cfc2f91a11fc75e9a3c6592bdc7a","reference":"20572bbf8607cfc2f91a11fc75e9a3c6592bdc7a","shasum":""},"require":{"mustangostang\/spyc":"*","php":">=7.2"},"replace":{"piwik\/device-detector":"self.version"},"require-dev":{"matthiasmullie\/scrapbook":"@stable","mayflower\/mo4-coding-standard":"dev-master#275cb9d","phpstan\/phpstan":"^0.12.52","phpunit\/phpunit":"^8.5.8","psr\/cache":"^1.0.1","psr\/simple-cache":"^1.0.1","symfony\/yaml":"^5.1.7"},"suggest":{"doctrine\/cache":"Can directly be used for caching purpose","ext-yaml":"Necessary for using the Pecl YAML parser"},"time":"2020-12-07T09:40:38+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"DeviceDetector\\":""},"exclude-from-classmap":["Tests\/"]},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["LGPL-3.0-or-later"],"authors":[{"name":"The Matomo Team","email":"[email protected]","homepage":"https:\/\/matomo.org\/team\/"}],"description":"The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), clients (browsers, media players, mobile apps, feed readers, libraries, etc), operating systems, devices, brands and models.","homepage":"https:\/\/matomo.org","keywords":["devicedetection","parser","useragent"],"support":{"forum":"http:\/\/forum.matomo.org\/","issues":"https:\/\/github.com\/matomo-org\/device-detector\/issues","source":"https:\/\/github.com\/matomo-org\/piwik","wiki":"https:\/\/dev.matomo.org\/"},"install-path":"..\/matomo\/device-detector"},{"name":"matomo\/ini","version":"2.0.2","version_normalized":"2.0.2.0","source":{"type":"git","url":"https:\/\/github.com\/matomo-org\/component-ini.git","reference":"f7b0d6ce594b34ead16864fbc5062c771328ac31"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/matomo-org\/component-ini\/zipball\/f7b0d6ce594b34ead16864fbc5062c771328ac31","reference":"f7b0d6ce594b34ead16864fbc5062c771328ac31","shasum":""},"require":{"php":">=5.3.3"},"require-dev":{"athletic\/athletic":"0.1.*","phpunit\/phpunit":"^4.8.36"},"time":"2020-01-12T18:54:50+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"Matomo\\Ini\\":"src\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["LGPL-3.0"],"support":{"issues":"https:\/\/github.com\/matomo-org\/component-ini\/issues","source":"https:\/\/github.com\/matomo-org\/component-ini\/tree\/master"},"install-path":"..\/matomo\/ini"},{"name":"matomo\/matomo-php-tracker","version":"3.0.0","version_normalized":"3.0.0.0","source":{"type":"git","url":"https:\/\/github.com\/matomo-org\/matomo-php-tracker.git","reference":"31e2b0bdf479c6fc00758228d2c6d7c85c1863a0"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/matomo-org\/matomo-php-tracker\/zipball\/31e2b0bdf479c6fc00758228d2c6d7c85c1863a0","reference":"31e2b0bdf479c6fc00758228d2c6d7c85c1863a0","shasum":""},"require":{"ext-json":"*","php":">=5.3"},"require-dev":{"phpunit\/phpunit":"^9.3"},"suggest":{"ext-curl":"Using this extension to issue the HTTPS request to Matomo"},"time":"2020-11-21T05:20:05+00:00","type":"library","installation-source":"dist","autoload":{"classmap":["."]},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["BSD-2-Clause"],"authors":[{"name":"The Matomo Team","email":"[email protected]","homepage":"https:\/\/matomo.org\/team\/"}],"description":"PHP Client for Matomo Analytics Tracking API","homepage":"https:\/\/matomo.org","keywords":["analytics","matomo","piwik","tracker"],"support":{"forum":"https:\/\/forum.matomo.org\/","issues":"https:\/\/github.com\/matomo-org\/matomo-php-tracker\/issues","source":"https:\/\/github.com\/matomo-org\/matomo-php-tracker"},"install-path":"..\/matomo\/matomo-php-tracker"},{"name":"matomo\/network","version":"2.0.1","version_normalized":"2.0.1.0","source":{"type":"git","url":"https:\/\/github.com\/matomo-org\/component-network.git","reference":"ff654b8fc7778b80279815d06a368f7b41249501"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/matomo-org\/component-network\/zipball\/ff654b8fc7778b80279815d06a368f7b41249501","reference":"ff654b8fc7778b80279815d06a368f7b41249501","shasum":""},"require":{"php":">=5.4"},"require-dev":{"phpunit\/phpunit":"^4.8.36"},"time":"2020-10-05T06:09:39+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"Matomo\\Network\\":"src\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["LGPL-3.0"],"support":{"issues":"https:\/\/github.com\/matomo-org\/component-network\/issues","source":"https:\/\/github.com\/matomo-org\/component-network\/tree\/2.0.1"},"install-path":"..\/matomo\/network"},{"name":"matomo\/referrer-spam-list","version":"4.0.0","version_normalized":"4.0.0.0","source":{"type":"git","url":"https:\/\/github.com\/matomo-org\/referrer-spam-list.git","reference":"afe4c1ea107ee7a8915a0d5eb0031cf0366608a8"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/matomo-org\/referrer-spam-list\/zipball\/afe4c1ea107ee7a8915a0d5eb0031cf0366608a8","reference":"afe4c1ea107ee7a8915a0d5eb0031cf0366608a8","shasum":""},"replace":{"matomo\/referrer-spam-blacklist":"*","piwik\/referrer-spam-blacklist":"*"},"time":"2020-08-10T19:54:07+00:00","type":"library","installation-source":"dist","notification-url":"https:\/\/packagist.org\/downloads\/","license":["CC0-1.0"],"description":"Community-contributed list of referrer spammers","support":{"issues":"https:\/\/github.com\/matomo-org\/referrer-spam-list\/issues","source":"https:\/\/github.com\/matomo-org\/referrer-spam-list\/tree\/4.0.0"},"install-path":"..\/matomo\/referrer-spam-list"},{"name":"matomo\/searchengine-and-social-list","version":"3.11.0","version_normalized":"3.11.0.0","source":{"type":"git","url":"https:\/\/github.com\/matomo-org\/searchengine-and-social-list.git","reference":"80ab98ed17ea5b72730f4f4d96acc03847440103"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/matomo-org\/searchengine-and-social-list\/zipball\/80ab98ed17ea5b72730f4f4d96acc03847440103","reference":"80ab98ed17ea5b72730f4f4d96acc03847440103","shasum":""},"replace":{"piwik\/searchengine-and-social-list":"*"},"time":"2020-01-13T09:01:25+00:00","type":"library","installation-source":"dist","notification-url":"https:\/\/packagist.org\/downloads\/","license":["CC0-1.0"],"description":"Search engine and social network definitions used by Matomo (formerly Piwik)","support":{"issues":"https:\/\/github.com\/matomo-org\/searchengine-and-social-list\/issues","source":"https:\/\/github.com\/matomo-org\/searchengine-and-social-list\/tree\/master"},"install-path":"..\/matomo\/searchengine-and-social-list"},{"name":"maxmind-db\/reader","version":"v1.8.0","version_normalized":"1.8.0.0","source":{"type":"git","url":"https:\/\/github.com\/maxmind\/MaxMind-DB-Reader-php.git","reference":"b566d429ac9aec10594b0935be8ff38302f8d5c8"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/maxmind\/MaxMind-DB-Reader-php\/zipball\/b566d429ac9aec10594b0935be8ff38302f8d5c8","reference":"b566d429ac9aec10594b0935be8ff38302f8d5c8","shasum":""},"require":{"php":">=7.2"},"conflict":{"ext-maxminddb":"<1.8.0,>=2.0.0"},"require-dev":{"friendsofphp\/php-cs-fixer":"2.*","php-coveralls\/php-coveralls":"^2.1","phpunit\/phpcov":">=6.0.0","phpunit\/phpunit":">=8.0.0,<10.0.0","squizlabs\/php_codesniffer":"3.*"},"suggest":{"ext-bcmath":"bcmath or gmp is required for decoding larger integers with the pure PHP decoder","ext-gmp":"bcmath or gmp is required for decoding larger integers with the pure PHP decoder","ext-maxminddb":"A C-based database decoder that provides significantly faster lookups"},"time":"2020-10-01T17:30:21+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"MaxMind\\Db\\":"src\/MaxMind\/Db"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["Apache-2.0"],"authors":[{"name":"Gregory J. Oschwald","email":"[email protected]","homepage":"https:\/\/www.maxmind.com\/"}],"description":"MaxMind DB Reader API","homepage":"https:\/\/github.com\/maxmind\/MaxMind-DB-Reader-php","keywords":["database","geoip","geoip2","geolocation","maxmind"],"support":{"issues":"https:\/\/github.com\/maxmind\/MaxMind-DB-Reader-php\/issues","source":"https:\/\/github.com\/maxmind\/MaxMind-DB-Reader-php\/tree\/v1.8.0"},"install-path":"..\/maxmind-db\/reader"},{"name":"maxmind\/web-service-common","version":"v0.8.1","version_normalized":"0.8.1.0","source":{"type":"git","url":"https:\/\/github.com\/maxmind\/web-service-common-php.git","reference":"32f274051c543fc865e5a84d3a2c703913641ea8"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/maxmind\/web-service-common-php\/zipball\/32f274051c543fc865e5a84d3a2c703913641ea8","reference":"32f274051c543fc865e5a84d3a2c703913641ea8","shasum":""},"require":{"composer\/ca-bundle":"^1.0.3","ext-curl":"*","ext-json":"*","php":">=7.2"},"require-dev":{"friendsofphp\/php-cs-fixer":"2.*","phpunit\/phpunit":"^8.0 || ^9.0","squizlabs\/php_codesniffer":"3.*"},"time":"2020-11-02T17:00:53+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"MaxMind\\Exception\\":"src\/Exception","MaxMind\\WebService\\":"src\/WebService"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["Apache-2.0"],"authors":[{"name":"Gregory Oschwald","email":"[email protected]"}],"description":"Internal MaxMind Web Service API","homepage":"https:\/\/github.com\/maxmind\/web-service-common-php","support":{"issues":"https:\/\/github.com\/maxmind\/web-service-common-php\/issues","source":"https:\/\/github.com\/maxmind\/web-service-common-php\/tree\/v0.8.1"},"install-path":"..\/maxmind\/web-service-common"},{"name":"monolog\/monolog","version":"1.25.5","version_normalized":"1.25.5.0","source":{"type":"git","url":"https:\/\/github.com\/Seldaek\/monolog.git","reference":"1817faadd1846cd08be9a49e905dc68823bc38c0"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/Seldaek\/monolog\/zipball\/1817faadd1846cd08be9a49e905dc68823bc38c0","reference":"1817faadd1846cd08be9a49e905dc68823bc38c0","shasum":""},"require":{"php":">=5.3.0","psr\/log":"~1.0"},"provide":{"psr\/log-implementation":"1.0.0"},"require-dev":{"aws\/aws-sdk-php":"^2.4.9 || ^3.0","doctrine\/couchdb":"~1.0@dev","graylog2\/gelf-php":"~1.0","php-amqplib\/php-amqplib":"~2.4","php-console\/php-console":"^3.1.3","php-parallel-lint\/php-parallel-lint":"^1.0","phpunit\/phpunit":"~4.5","ruflin\/elastica":">=0.90 <3.0","sentry\/sentry":"^0.13","swiftmailer\/swiftmailer":"^5.3|^6.0"},"suggest":{"aws\/aws-sdk-php":"Allow sending log messages to AWS services like DynamoDB","doctrine\/couchdb":"Allow sending log messages to a CouchDB server","ext-amqp":"Allow sending log messages to an AMQP server (1.0+ required)","ext-mongo":"Allow sending log messages to a MongoDB server","graylog2\/gelf-php":"Allow sending log messages to a GrayLog2 server","mongodb\/mongodb":"Allow sending log messages to a MongoDB server via PHP Driver","php-amqplib\/php-amqplib":"Allow sending log messages to an AMQP server using php-amqplib","php-console\/php-console":"Allow sending log messages to Google Chrome","rollbar\/rollbar":"Allow sending log messages to Rollbar","ruflin\/elastica":"Allow sending log messages to an Elastic Search server","sentry\/sentry":"Allow sending log messages to a Sentry server"},"time":"2020-07-23T08:35:51+00:00","type":"library","extra":{"branch-alias":{"dev-master":"2.0.x-dev"}},"installation-source":"dist","autoload":{"psr-4":{"Monolog\\":"src\/Monolog"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"Jordi Boggiano","email":"[email protected]","homepage":"http:\/\/seld.be"}],"description":"Sends your logs to files, sockets, inboxes, databases and various web services","homepage":"http:\/\/github.com\/Seldaek\/monolog","keywords":["log","logging","psr-3"],"support":{"issues":"https:\/\/github.com\/Seldaek\/monolog\/issues","source":"https:\/\/github.com\/Seldaek\/monolog\/tree\/1.25.5"},"funding":[{"url":"https:\/\/github.com\/Seldaek","type":"github"},{"url":"https:\/\/tidelift.com\/funding\/github\/packagist\/monolog\/monolog","type":"tidelift"}],"install-path":"..\/monolog\/monolog"},{"name":"mustangostang\/spyc","version":"0.6.3","version_normalized":"0.6.3.0","source":{"type":"git","url":"[email protected]:mustangostang\/spyc.git","reference":"4627c838b16550b666d15aeae1e5289dd5b77da0"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/mustangostang\/spyc\/zipball\/4627c838b16550b666d15aeae1e5289dd5b77da0","reference":"4627c838b16550b666d15aeae1e5289dd5b77da0","shasum":""},"require":{"php":">=5.3.1"},"require-dev":{"phpunit\/phpunit":"4.3.*@dev"},"time":"2019-09-10T13:16:29+00:00","type":"library","extra":{"branch-alias":{"dev-master":"0.5.x-dev"}},"installation-source":"dist","autoload":{"files":["Spyc.php"]},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"mustangostang","email":"[email protected]"}],"description":"A simple YAML loader\/dumper class for PHP","homepage":"https:\/\/github.com\/mustangostang\/spyc\/","keywords":["spyc","yaml","yml"],"install-path":"..\/mustangostang\/spyc"},{"name":"opis\/closure","version":"3.6.1","version_normalized":"3.6.1.0","source":{"type":"git","url":"https:\/\/github.com\/opis\/closure.git","reference":"943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/opis\/closure\/zipball\/943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5","reference":"943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5","shasum":""},"require":{"php":"^5.4 || ^7.0 || ^8.0"},"require-dev":{"jeremeamia\/superclosure":"^2.0","phpunit\/phpunit":"^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"},"time":"2020-11-07T02:01:34+00:00","type":"library","extra":{"branch-alias":{"dev-master":"3.6.x-dev"}},"installation-source":"dist","autoload":{"psr-4":{"Opis\\Closure\\":"src\/"},"files":["functions.php"]},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"Marius Sarca","email":"[email protected]"},{"name":"Sorin Sarca","email":"[email protected]"}],"description":"A library that can be used to serialize closures (anonymous functions) and arbitrary objects.","homepage":"https:\/\/opis.io\/closure","keywords":["anonymous functions","closure","function","serializable","serialization","serialize"],"support":{"issues":"https:\/\/github.com\/opis\/closure\/issues","source":"https:\/\/github.com\/opis\/closure\/tree\/3.6.1"},"install-path":"..\/opis\/closure"},{"name":"pear\/archive_tar","version":"1.4.10","version_normalized":"1.4.10.0","source":{"type":"git","url":"https:\/\/github.com\/pear\/Archive_Tar.git","reference":"bbb4f10f71a1da2715ec6d9a683f4f23c507a49b"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/pear\/Archive_Tar\/zipball\/bbb4f10f71a1da2715ec6d9a683f4f23c507a49b","reference":"bbb4f10f71a1da2715ec6d9a683f4f23c507a49b","shasum":""},"require":{"pear\/pear-core-minimal":"^1.10.0alpha2","php":">=5.2.0"},"require-dev":{"phpunit\/phpunit":"*"},"suggest":{"ext-bz2":"Bz2 compression support.","ext-xz":"Lzma2 compression support.","ext-zlib":"Gzip compression support."},"time":"2020-09-15T14:13:23+00:00","type":"library","extra":{"branch-alias":{"dev-master":"1.4.x-dev"}},"installation-source":"dist","autoload":{"psr-0":{"Archive_Tar":""}},"notification-url":"https:\/\/packagist.org\/downloads\/","include-path":[".\/"],"license":["BSD-3-Clause"],"authors":[{"name":"Vincent Blavet","email":"[email protected]"},{"name":"Greg Beaver","email":"[email protected]"},{"name":"Michiel Rook","email":"[email protected]"}],"description":"Tar file management class with compression support (gzip, bzip2, lzma2)","homepage":"https:\/\/github.com\/pear\/Archive_Tar","keywords":["archive","tar"],"support":{"issues":"http:\/\/pear.php.net\/bugs\/search.php?cmd=display&package_name[]=Archive_Tar","source":"https:\/\/github.com\/pear\/Archive_Tar"},"install-path":"..\/pear\/archive_tar"},{"name":"pear\/console_getopt","version":"v1.4.3","version_normalized":"1.4.3.0","source":{"type":"git","url":"https:\/\/github.com\/pear\/Console_Getopt.git","reference":"a41f8d3e668987609178c7c4a9fe48fecac53fa0"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/pear\/Console_Getopt\/zipball\/a41f8d3e668987609178c7c4a9fe48fecac53fa0","reference":"a41f8d3e668987609178c7c4a9fe48fecac53fa0","shasum":""},"time":"2019-11-20T18:27:48+00:00","type":"library","installation-source":"dist","autoload":{"psr-0":{"Console":".\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","include-path":[".\/"],"license":["BSD-2-Clause"],"authors":[{"name":"Andrei Zmievski","email":"[email protected]","role":"Lead"},{"name":"Stig Bakken","email":"[email protected]","role":"Developer"},{"name":"Greg Beaver","email":"[email protected]","role":"Helper"}],"description":"More info available on: http:\/\/pear.php.net\/package\/Console_Getopt","support":{"issues":"http:\/\/pear.php.net\/bugs\/search.php?cmd=display&package_name[]=Console_Getopt","source":"https:\/\/github.com\/pear\/Console_Getopt"},"install-path":"..\/pear\/console_getopt"},{"name":"pear\/pear-core-minimal","version":"v1.10.10","version_normalized":"1.10.10.0","source":{"type":"git","url":"https:\/\/github.com\/pear\/pear-core-minimal.git","reference":"625a3c429d9b2c1546438679074cac1b089116a7"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/pear\/pear-core-minimal\/zipball\/625a3c429d9b2c1546438679074cac1b089116a7","reference":"625a3c429d9b2c1546438679074cac1b089116a7","shasum":""},"require":{"pear\/console_getopt":"~1.4","pear\/pear_exception":"~1.0"},"replace":{"rsky\/pear-core-min":"self.version"},"time":"2019-11-19T19:00:24+00:00","type":"library","installation-source":"dist","autoload":{"psr-0":{"":"src\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","include-path":["src\/"],"license":["BSD-3-Clause"],"authors":[{"name":"Christian Weiske","email":"[email protected]","role":"Lead"}],"description":"Minimal set of PEAR core files to be used as composer dependency","support":{"issues":"http:\/\/pear.php.net\/bugs\/search.php?cmd=display&package_name[]=PEAR","source":"https:\/\/github.com\/pear\/pear-core-minimal"},"install-path":"..\/pear\/pear-core-minimal"},{"name":"pear\/pear_exception","version":"v1.0.1","version_normalized":"1.0.1.0","source":{"type":"git","url":"https:\/\/github.com\/pear\/PEAR_Exception.git","reference":"dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/pear\/PEAR_Exception\/zipball\/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7","reference":"dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7","shasum":""},"require":{"php":">=4.4.0"},"require-dev":{"phpunit\/phpunit":"*"},"time":"2019-12-10T10:24:42+00:00","type":"class","extra":{"branch-alias":{"dev-master":"1.0.x-dev"}},"installation-source":"dist","autoload":{"classmap":["PEAR\/"]},"notification-url":"https:\/\/packagist.org\/downloads\/","include-path":["."],"license":["BSD-2-Clause"],"authors":[{"name":"Helgi Thormar","email":"[email protected]"},{"name":"Greg Beaver","email":"[email protected]"}],"description":"The PEAR Exception base class.","homepage":"https:\/\/github.com\/pear\/PEAR_Exception","keywords":["exception"],"support":{"issues":"http:\/\/pear.php.net\/bugs\/search.php?cmd=display&package_name[]=PEAR_Exception","source":"https:\/\/github.com\/pear\/PEAR_Exception"},"install-path":"..\/pear\/pear_exception"},{"name":"php-di\/invoker","version":"2.0.0","version_normalized":"2.0.0.0","source":{"type":"git","url":"https:\/\/github.com\/PHP-DI\/Invoker.git","reference":"540c27c86f663e20fe39a24cd72fa76cdb21d41a"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/PHP-DI\/Invoker\/zipball\/540c27c86f663e20fe39a24cd72fa76cdb21d41a","reference":"540c27c86f663e20fe39a24cd72fa76cdb21d41a","shasum":""},"require":{"psr\/container":"~1.0"},"require-dev":{"athletic\/athletic":"~0.1.8","phpunit\/phpunit":"~4.5"},"time":"2017-03-20T19:28:22+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"Invoker\\":"src\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"description":"Generic and extensible callable invoker","homepage":"https:\/\/github.com\/PHP-DI\/Invoker","keywords":["callable","dependency","dependency-injection","injection","invoke","invoker"],"support":{"issues":"https:\/\/github.com\/PHP-DI\/Invoker\/issues","source":"https:\/\/github.com\/PHP-DI\/Invoker\/tree\/master"},"install-path":"..\/php-di\/invoker"},{"name":"php-di\/php-di","version":"6.3.0","version_normalized":"6.3.0.0","source":{"type":"git","url":"https:\/\/github.com\/PHP-DI\/PHP-DI.git","reference":"955cacea6b0beaba07e8c11b8367f5b3d5abe89f"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/PHP-DI\/PHP-DI\/zipball\/955cacea6b0beaba07e8c11b8367f5b3d5abe89f","reference":"955cacea6b0beaba07e8c11b8367f5b3d5abe89f","shasum":""},"require":{"opis\/closure":"^3.5.5","php":">=7.2.0","php-di\/invoker":"^2.0","php-di\/phpdoc-reader":"^2.0.1","psr\/container":"^1.0"},"provide":{"psr\/container-implementation":"^1.0"},"require-dev":{"doctrine\/annotations":"~1.2","friendsofphp\/php-cs-fixer":"^2.4","mnapoli\/phpunit-easymock":"^1.2","ocramius\/proxy-manager":"~2.0.2","phpstan\/phpstan":"^0.12","phpunit\/phpunit":"^8.5|^9.0"},"suggest":{"doctrine\/annotations":"Install it if you want to use annotations (version ~1.2)","ocramius\/proxy-manager":"Install it if you want to use lazy injection (version ~2.0)"},"time":"2020-10-12T14:39:15+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"DI\\":"src\/"},"files":["src\/functions.php"]},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"description":"The dependency injection container for humans","homepage":"https:\/\/php-di.org\/","keywords":["PSR-11","container","container-interop","dependency injection","di","ioc","psr11"],"support":{"issues":"https:\/\/github.com\/PHP-DI\/PHP-DI\/issues","source":"https:\/\/github.com\/PHP-DI\/PHP-DI\/tree\/6.3.0"},"funding":[{"url":"https:\/\/github.com\/mnapoli","type":"github"},{"url":"https:\/\/tidelift.com\/funding\/github\/packagist\/php-di\/php-di","type":"tidelift"}],"install-path":"..\/php-di\/php-di"},{"name":"php-di\/phpdoc-reader","version":"2.2.1","version_normalized":"2.2.1.0","source":{"type":"git","url":"https:\/\/github.com\/PHP-DI\/PhpDocReader.git","reference":"66daff34cbd2627740ffec9469ffbac9f8c8185c"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/PHP-DI\/PhpDocReader\/zipball\/66daff34cbd2627740ffec9469ffbac9f8c8185c","reference":"66daff34cbd2627740ffec9469ffbac9f8c8185c","shasum":""},"require":{"php":">=7.2.0"},"require-dev":{"mnapoli\/hard-mode":"~0.3.0","phpunit\/phpunit":"^8.5|^9.0"},"time":"2020-10-12T12:39:22+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"PhpDocReader\\":"src\/PhpDocReader"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"description":"PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)","keywords":["phpdoc","reflection"],"support":{"issues":"https:\/\/github.com\/PHP-DI\/PhpDocReader\/issues","source":"https:\/\/github.com\/PHP-DI\/PhpDocReader\/tree\/2.2.1"},"install-path":"..\/php-di\/phpdoc-reader"},{"name":"phpmailer\/phpmailer","version":"v6.1.8","version_normalized":"6.1.8.0","source":{"type":"git","url":"https:\/\/github.com\/PHPMailer\/PHPMailer.git","reference":"917ab212fa00dc6eacbb26e8bc387ebe40993bc1"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/PHPMailer\/PHPMailer\/zipball\/917ab212fa00dc6eacbb26e8bc387ebe40993bc1","reference":"917ab212fa00dc6eacbb26e8bc387ebe40993bc1","shasum":""},"require":{"ext-ctype":"*","ext-filter":"*","ext-hash":"*","php":">=5.5.0"},"require-dev":{"doctrine\/annotations":"^1.2","friendsofphp\/php-cs-fixer":"^2.2","phpunit\/phpunit":"^4.8 || ^5.7"},"suggest":{"ext-mbstring":"Needed to send email in multibyte encoding charset","hayageek\/oauth2-yahoo":"Needed for Yahoo XOAUTH2 authentication","league\/oauth2-google":"Needed for Google XOAUTH2 authentication","psr\/log":"For optional PSR-3 debug logging","stevenmaguire\/oauth2-microsoft":"Needed for Microsoft XOAUTH2 authentication","symfony\/polyfill-mbstring":"To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"},"time":"2020-10-09T14:55:58+00:00","type":"library","installation-source":"dist","autoload":{"psr-4":{"PHPMailer\\PHPMailer\\":"src\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["LGPL-2.1-only"],"authors":[{"name":"Marcus Bointon","email":"[email protected]"},{"name":"Jim Jagielski","email":"[email protected]"},{"name":"Andy Prevost","email":"[email protected]"},{"name":"Brent R. Matzelle"}],"description":"PHPMailer is a full-featured email creation and transfer class for PHP","support":{"issues":"https:\/\/github.com\/PHPMailer\/PHPMailer\/issues","source":"https:\/\/github.com\/PHPMailer\/PHPMailer\/tree\/v6.1.8"},"funding":[{"url":"https:\/\/github.com\/synchro","type":"github"}],"install-path":"..\/phpmailer\/phpmailer"},{"name":"psr\/container","version":"1.0.0","version_normalized":"1.0.0.0","source":{"type":"git","url":"https:\/\/github.com\/php-fig\/container.git","reference":"b7ce3b176482dbbc1245ebf52b181af44c2cf55f"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/php-fig\/container\/zipball\/b7ce3b176482dbbc1245ebf52b181af44c2cf55f","reference":"b7ce3b176482dbbc1245ebf52b181af44c2cf55f","shasum":""},"require":{"php":">=5.3.0"},"time":"2017-02-14T16:28:37+00:00","type":"library","extra":{"branch-alias":{"dev-master":"1.0.x-dev"}},"installation-source":"dist","autoload":{"psr-4":{"Psr\\Container\\":"src\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"PHP-FIG","homepage":"http:\/\/www.php-fig.org\/"}],"description":"Common Container Interface (PHP FIG PSR-11)","homepage":"https:\/\/github.com\/php-fig\/container","keywords":["PSR-11","container","container-interface","container-interop","psr"],"support":{"issues":"https:\/\/github.com\/php-fig\/container\/issues","source":"https:\/\/github.com\/php-fig\/container\/tree\/master"},"install-path":"..\/psr\/container"},{"name":"psr\/log","version":"1.1.3","version_normalized":"1.1.3.0","source":{"type":"git","url":"https:\/\/github.com\/php-fig\/log.git","reference":"0f73288fd15629204f9d42b7055f72dacbe811fc"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/php-fig\/log\/zipball\/0f73288fd15629204f9d42b7055f72dacbe811fc","reference":"0f73288fd15629204f9d42b7055f72dacbe811fc","shasum":""},"require":{"php":">=5.3.0"},"time":"2020-03-23T09:12:05+00:00","type":"library","extra":{"branch-alias":{"dev-master":"1.1.x-dev"}},"installation-source":"dist","autoload":{"psr-4":{"Psr\\Log\\":"Psr\/Log\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"PHP-FIG","homepage":"http:\/\/www.php-fig.org\/"}],"description":"Common interface for logging libraries","homepage":"https:\/\/github.com\/php-fig\/log","keywords":["log","psr","psr-3"],"support":{"source":"https:\/\/github.com\/php-fig\/log\/tree\/1.1.3"},"install-path":"..\/psr\/log"},{"name":"symfony\/console","version":"v2.6.13","version_normalized":"2.6.13.0","target-dir":"Symfony\/Component\/Console","source":{"type":"git","url":"https:\/\/github.com\/symfony\/console.git","reference":"0e5e18ae09d3f5c06367759be940e9ed3f568359"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/symfony\/console\/zipball\/0e5e18ae09d3f5c06367759be940e9ed3f568359","reference":"0e5e18ae09d3f5c06367759be940e9ed3f568359","shasum":""},"require":{"php":">=5.3.3"},"require-dev":{"psr\/log":"~1.0","symfony\/event-dispatcher":"~2.1","symfony\/phpunit-bridge":"~2.7","symfony\/process":"~2.1"},"suggest":{"psr\/log":"For using the console logger","symfony\/event-dispatcher":"","symfony\/process":""},"time":"2015-07-26T09:08:40+00:00","type":"library","extra":{"branch-alias":{"dev-master":"2.6-dev"}},"installation-source":"dist","autoload":{"psr-0":{"Symfony\\Component\\Console\\":""}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"Fabien Potencier","email":"[email protected]"},{"name":"Symfony Community","homepage":"https:\/\/symfony.com\/contributors"}],"description":"Symfony Console Component","homepage":"https:\/\/symfony.com","support":{"source":"https:\/\/github.com\/symfony\/console\/tree\/v2.6.11"},"install-path":"..\/symfony\/console\/Symfony\/Component\/Console"},{"name":"symfony\/event-dispatcher","version":"v2.6.13","version_normalized":"2.6.13.0","target-dir":"Symfony\/Component\/EventDispatcher","source":{"type":"git","url":"https:\/\/github.com\/symfony\/event-dispatcher.git","reference":"672593bc4b0043a0acf91903bb75a1c82d8f2e02"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/symfony\/event-dispatcher\/zipball\/672593bc4b0043a0acf91903bb75a1c82d8f2e02","reference":"672593bc4b0043a0acf91903bb75a1c82d8f2e02","shasum":""},"require":{"php":">=5.3.3"},"require-dev":{"psr\/log":"~1.0","symfony\/config":"~2.0,>=2.0.5","symfony\/dependency-injection":"~2.6","symfony\/expression-language":"~2.6","symfony\/phpunit-bridge":"~2.7","symfony\/stopwatch":"~2.3"},"suggest":{"symfony\/dependency-injection":"","symfony\/http-kernel":""},"time":"2015-05-02T15:18:45+00:00","type":"library","extra":{"branch-alias":{"dev-master":"2.6-dev"}},"installation-source":"dist","autoload":{"psr-0":{"Symfony\\Component\\EventDispatcher\\":""}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"Fabien Potencier","email":"[email protected]"},{"name":"Symfony Community","homepage":"https:\/\/symfony.com\/contributors"}],"description":"Symfony EventDispatcher Component","homepage":"https:\/\/symfony.com","support":{"source":"https:\/\/github.com\/symfony\/event-dispatcher\/tree\/v2.6.11"},"install-path":"..\/symfony\/event-dispatcher\/Symfony\/Component\/EventDispatcher"},{"name":"symfony\/monolog-bridge","version":"v2.6.13","version_normalized":"2.6.13.0","target-dir":"Symfony\/Bridge\/Monolog","source":{"type":"git","url":"https:\/\/github.com\/symfony\/monolog-bridge.git","reference":"ba66eeabaa004e3ab70764cab59b056b182aa535"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/symfony\/monolog-bridge\/zipball\/ba66eeabaa004e3ab70764cab59b056b182aa535","reference":"ba66eeabaa004e3ab70764cab59b056b182aa535","shasum":""},"require":{"monolog\/monolog":"~1.11","php":">=5.3.3"},"require-dev":{"symfony\/console":"~2.4","symfony\/event-dispatcher":"~2.2","symfony\/http-kernel":"~2.4","symfony\/phpunit-bridge":"~2.7"},"suggest":{"symfony\/console":"For the possibility to show log messages in console commands depending on verbosity settings. You need version ~2.3 of the console for it.","symfony\/event-dispatcher":"Needed when using log messages in console commands","symfony\/http-kernel":"For using the debugging handlers together with the response life cycle of the HTTP kernel."},"time":"2015-06-25T11:21:15+00:00","type":"symfony-bridge","extra":{"branch-alias":{"dev-master":"2.6-dev"}},"installation-source":"dist","autoload":{"psr-0":{"Symfony\\Bridge\\Monolog\\":""}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"Fabien Potencier","email":"[email protected]"},{"name":"Symfony Community","homepage":"https:\/\/symfony.com\/contributors"}],"description":"Symfony Monolog Bridge","homepage":"https:\/\/symfony.com","support":{"source":"https:\/\/github.com\/symfony\/monolog-bridge\/tree\/v2.6.11"},"install-path":"..\/symfony\/monolog-bridge\/Symfony\/Bridge\/Monolog"},{"name":"symfony\/polyfill-ctype","version":"v1.20.0","version_normalized":"1.20.0.0","source":{"type":"git","url":"https:\/\/github.com\/symfony\/polyfill-ctype.git","reference":"f4ba089a5b6366e453971d3aad5fe8e897b37f41"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/symfony\/polyfill-ctype\/zipball\/f4ba089a5b6366e453971d3aad5fe8e897b37f41","reference":"f4ba089a5b6366e453971d3aad5fe8e897b37f41","shasum":""},"require":{"php":">=7.1"},"suggest":{"ext-ctype":"For best performance"},"time":"2020-10-23T14:02:19+00:00","type":"library","extra":{"branch-alias":{"dev-main":"1.20-dev"},"thanks":{"name":"symfony\/polyfill","url":"https:\/\/github.com\/symfony\/polyfill"}},"installation-source":"dist","autoload":{"psr-4":{"Symfony\\Polyfill\\Ctype\\":""},"files":["bootstrap.php"]},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"Gert de Pagter","email":"[email protected]"},{"name":"Symfony Community","homepage":"https:\/\/symfony.com\/contributors"}],"description":"Symfony polyfill for ctype functions","homepage":"https:\/\/symfony.com","keywords":["compatibility","ctype","polyfill","portable"],"support":{"source":"https:\/\/github.com\/symfony\/polyfill-ctype\/tree\/v1.20.0"},"funding":[{"url":"https:\/\/symfony.com\/sponsor","type":"custom"},{"url":"https:\/\/github.com\/fabpot","type":"github"},{"url":"https:\/\/tidelift.com\/funding\/github\/packagist\/symfony\/symfony","type":"tidelift"}],"install-path":"..\/symfony\/polyfill-ctype"},{"name":"symfony\/polyfill-mbstring","version":"v1.20.0","version_normalized":"1.20.0.0","source":{"type":"git","url":"https:\/\/github.com\/symfony\/polyfill-mbstring.git","reference":"39d483bdf39be819deabf04ec872eb0b2410b531"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/symfony\/polyfill-mbstring\/zipball\/39d483bdf39be819deabf04ec872eb0b2410b531","reference":"39d483bdf39be819deabf04ec872eb0b2410b531","shasum":""},"require":{"php":">=7.1"},"suggest":{"ext-mbstring":"For best performance"},"time":"2020-10-23T14:02:19+00:00","type":"library","extra":{"branch-alias":{"dev-main":"1.20-dev"},"thanks":{"name":"symfony\/polyfill","url":"https:\/\/github.com\/symfony\/polyfill"}},"installation-source":"dist","autoload":{"psr-4":{"Symfony\\Polyfill\\Mbstring\\":""},"files":["bootstrap.php"]},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["MIT"],"authors":[{"name":"Nicolas Grekas","email":"[email protected]"},{"name":"Symfony Community","homepage":"https:\/\/symfony.com\/contributors"}],"description":"Symfony polyfill for the Mbstring extension","homepage":"https:\/\/symfony.com","keywords":["compatibility","mbstring","polyfill","portable","shim"],"support":{"source":"https:\/\/github.com\/symfony\/polyfill-mbstring\/tree\/v1.20.0"},"funding":[{"url":"https:\/\/symfony.com\/sponsor","type":"custom"},{"url":"https:\/\/github.com\/fabpot","type":"github"},{"url":"https:\/\/tidelift.com\/funding\/github\/packagist\/symfony\/symfony","type":"tidelift"}],"install-path":"..\/symfony\/polyfill-mbstring"},{"name":"szymach\/c-pchart","version":"v2.0.12","version_normalized":"2.0.12.0","source":{"type":"git","url":"https:\/\/github.com\/szymach\/c-pchart.git","reference":"f5fad68b303f65225db1a3d3f4bb58aea7a418b4"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/szymach\/c-pchart\/zipball\/f5fad68b303f65225db1a3d3f4bb58aea7a418b4","reference":"f5fad68b303f65225db1a3d3f4bb58aea7a418b4","shasum":""},"require":{"ext-gd":"*","php":">=5.4"},"require-dev":{"codeception\/codeception":"^2.3","phpunit\/phpunit":"^4.8|6.1","squizlabs\/php_codesniffer":"^2.8|3.0"},"time":"2019-07-26T22:48:01+00:00","type":"project","extra":{"branch-alias":{"dev-master":"2.0.x-dev"}},"installation-source":"dist","autoload":{"psr-4":{"CpChart\\":"src\/"},"files":["src\/Resources\/data\/constants.php"]},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["GPL-3.0-only"],"authors":[{"name":"Jean-Damien Pogolotti","homepage":"http:\/\/www.pchart.net","role":"Creator of the original pChart library"},{"name":"Piotr Szymaszek","homepage":"https:\/\/github.com\/szymach","role":"Developer of the CpChart wrapper package"}],"description":"Port of \"pChart\" library into PHP 5","homepage":"https:\/\/github.com\/szymach\/c-pchart","keywords":["CpChart","c-pChart","charts","pchart","statistics"],"support":{"issues":"https:\/\/github.com\/szymach\/c-pchart\/issues","source":"https:\/\/github.com\/szymach\/c-pchart\/tree\/2.0"},"install-path":"..\/szymach\/c-pchart"},{"name":"tecnickcom\/tcpdf","version":"6.3.5","version_normalized":"6.3.5.0","source":{"type":"git","url":"https:\/\/github.com\/tecnickcom\/TCPDF.git","reference":"19a535eaa7fb1c1cac499109deeb1a7a201b4549"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/tecnickcom\/TCPDF\/zipball\/19a535eaa7fb1c1cac499109deeb1a7a201b4549","reference":"19a535eaa7fb1c1cac499109deeb1a7a201b4549","shasum":""},"require":{"php":">=5.3.0"},"time":"2020-02-14T14:20:12+00:00","type":"library","installation-source":"dist","autoload":{"classmap":["config","include","tcpdf.php","tcpdf_parser.php","tcpdf_import.php","tcpdf_barcodes_1d.php","tcpdf_barcodes_2d.php","include\/tcpdf_colors.php","include\/tcpdf_filters.php","include\/tcpdf_font_data.php","include\/tcpdf_fonts.php","include\/tcpdf_images.php","include\/tcpdf_static.php","include\/barcodes\/datamatrix.php","include\/barcodes\/pdf417.php","include\/barcodes\/qrcode.php"]},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["LGPL-3.0-only"],"authors":[{"name":"Nicola Asuni","email":"[email protected]","role":"lead"}],"description":"TCPDF is a PHP class for generating PDF documents and barcodes.","homepage":"http:\/\/www.tcpdf.org\/","keywords":["PDFD32000-2008","TCPDF","barcodes","datamatrix","pdf","pdf417","qrcode"],"support":{"issues":"https:\/\/github.com\/tecnickcom\/TCPDF\/issues","source":"https:\/\/github.com\/tecnickcom\/TCPDF\/tree\/6.3.5"},"install-path":"..\/tecnickcom\/tcpdf"},{"name":"tedivm\/jshrink","version":"dev-master","version_normalized":"dev-master","source":{"type":"git","url":"https:\/\/github.com\/tedious\/JShrink.git","reference":"aed09eace9d498e18d48a5b62a7e5a97dfc0e55d"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/tedious\/JShrink\/zipball\/aed09eace9d498e18d48a5b62a7e5a97dfc0e55d","reference":"aed09eace9d498e18d48a5b62a7e5a97dfc0e55d","shasum":""},"require":{"php":"^5.6|^7.0"},"require-dev":{"friendsofphp\/php-cs-fixer":"^2.8","php-coveralls\/php-coveralls":"^1.1.0","phpunit\/phpunit":"^6"},"time":"2019-10-07T21:24:34+00:00","default-branch":true,"type":"library","installation-source":"source","autoload":{"psr-0":{"JShrink":"src\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["BSD-3-Clause"],"authors":[{"name":"Robert Hafner","email":"[email protected]"}],"description":"Javascript Minifier built in PHP","homepage":"http:\/\/github.com\/tedious\/JShrink","keywords":["javascript","minifier"],"support":{"issues":"https:\/\/github.com\/tedious\/JShrink\/issues","source":"https:\/\/github.com\/tedious\/JShrink\/tree\/master"},"funding":[{"url":"https:\/\/tidelift.com\/funding\/github\/packagist\/tedivm\/jshrink","type":"tidelift"}],"install-path":"..\/tedivm\/jshrink"},{"name":"twig\/twig","version":"v3.1.1","version_normalized":"3.1.1.0","source":{"type":"git","url":"https:\/\/github.com\/twigphp\/Twig.git","reference":"b02fa41f3783a2616eccef7b92fbc2343ffed737"},"dist":{"type":"zip","url":"https:\/\/api.github.com\/repos\/twigphp\/Twig\/zipball\/b02fa41f3783a2616eccef7b92fbc2343ffed737","reference":"b02fa41f3783a2616eccef7b92fbc2343ffed737","shasum":""},"require":{"php":">=7.2.5","symfony\/polyfill-ctype":"^1.8","symfony\/polyfill-mbstring":"^1.3"},"require-dev":{"psr\/container":"^1.0","symfony\/phpunit-bridge":"^4.4.9|^5.0.9"},"time":"2020-10-27T19:28:23+00:00","type":"library","extra":{"branch-alias":{"dev-master":"3.1-dev"}},"installation-source":"dist","autoload":{"psr-4":{"Twig\\":"src\/"}},"notification-url":"https:\/\/packagist.org\/downloads\/","license":["BSD-3-Clause"],"authors":[{"name":"Fabien Potencier","email":"[email protected]","homepage":"http:\/\/fabien.potencier.org","role":"Lead Developer"},{"name":"Twig Team","role":"Contributors"},{"name":"Armin Ronacher","email":"[email protected]","role":"Project Founder"}],"description":"Twig, the flexible, fast, and secure template language for PHP","homepage":"https:\/\/twig.symfony.com","keywords":["templating"],"support":{"issues":"https:\/\/github.com\/twigphp\/Twig\/issues","source":"https:\/\/github.com\/twigphp\/Twig\/tree\/v3.1.1"},"funding":[{"url":"https:\/\/github.com\/fabpot","type":"github"},{"url":"https:\/\/tidelift.com\/funding\/github\/packagist\/twig\/twig","type":"tidelift"}],"install-path":"..\/twig\/twig"}]).

This is after downloading Matomo 4.0.5 and adding the composer.json from github.

Am I missing something here?

Deprecated - file_exists(): Passing null to parameter #1 ($filename) of type string is deprecated - Matomo 5.0.1

Hi, when using ExtraTools v5.0.0-beta3 with Matomo v5.0.1. Using the command ./console matomo:install I get the error:

WARNING [20:49:27] 39 /usr/src/matomo/plugins/ExtraTools/Commands/InstallMatomo.php(269): Deprecated - file_exists(): Passing null to parameter #1 ($filename) of type string is deprecated - Matomo 5.0.1 - Please report this message in the Matomo forums: https://forum.matomo.org (please do a search first as it might have been reported already)

I have installed the required dependencies using:

composer require symfony/yaml:~2.6.0
composer require symfony/process:^5.4

I am using the matomo:5.0.1-apache docker image base which has PHP v8.2.

Your help is appreciated. Thanks.

Cannot enable plugin without existing installation?

I've tried several ways, but I cannot enable this plugin.

Method 1

  1. Unpacked Matomo release 4.10.2
  2. Clone extratools into the plugin folder
  3. Attempt to enable the plugin
/var/www/matomo #  /var/www/matomo/console plugin:activate ExtraTools

The configuration file {/var/www/matomo/config/config.ini.php} has not been found or could not be read.
 ยป Please check that /var/www/matomo/config/config.ini.php is readable by the user 'nginx'. \

ERROR [2022-11-15 14:48:08] 2948  Uncaught exception: /var/www/matomo/libs/Zend/Db/Adapter/Pdo/Abstract.php(144): SQLSTATE[HY000] [2002] No such file or directory [Query: , CLI mode: 1]

  [Zend_Db_Adapter_Exception]                       
  SQLSTATE[HY000] [2002] No such file or directory  
                                                    
  [PDOException]                                    
  SQLSTATE[HY000] [2002] No such file or directory  
                                                    
plugin:activate [plugin1] ... [pluginN]

Method 2

  1. Added config.ini.php with PluginsInstalled[] = "ExtraTools" (See below)
; <?php exit; ?> DO NOT REMOVE THIS LINE
; file automatically generated or modified by Matomo; you can manually override the default values in global.ini.php by redefining them in this file.
[database]
host = mariadb
port = 3306
username = matomo
password = password
dbname = matomo
tables_prefix = "matomo_"
charset = "utf8mb4"

[General]
proxy_client_headers[] = "HTTP_X_FORWARDED_FOR"
proxy_host_headers[] = "HTTP_X_FORWARDED_HOST"
salt = XXXXXXX 
trusted_hosts[] = localhost
trusted_hosts[] = https://islandora.dev


[PluginsInstalled]
PluginsInstalled[] = "Diagnostics"
PluginsInstalled[] = "Login"
PluginsInstalled[] = "CoreAdminHome"
PluginsInstalled[] = "UsersManager"
PluginsInstalled[] = "SitesManager"
PluginsInstalled[] = "Installation"
PluginsInstalled[] = "Monolog"
PluginsInstalled[] = "Intl"
PluginsInstalled[] = "CoreVue"
PluginsInstalled[] = "CorePluginsAdmin"
PluginsInstalled[] = "CoreHome"
PluginsInstalled[] = "WebsiteMeasurable"
PluginsInstalled[] = "IntranetMeasurable"
PluginsInstalled[] = "CoreVisualizations"
PluginsInstalled[] = "Proxy"
PluginsInstalled[] = "API"
PluginsInstalled[] = "Widgetize"
PluginsInstalled[] = "Transitions"
PluginsInstalled[] = "LanguagesManager"
PluginsInstalled[] = "Actions"
PluginsInstalled[] = "Dashboard"
PluginsInstalled[] = "MultiSites"
PluginsInstalled[] = "Referrers"
PluginsInstalled[] = "UserLanguage"
PluginsInstalled[] = "DevicesDetection"
PluginsInstalled[] = "Goals"
PluginsInstalled[] = "Ecommerce"
PluginsInstalled[] = "SEO"
PluginsInstalled[] = "Events"
PluginsInstalled[] = "UserCountry"
PluginsInstalled[] = "GeoIp2"
PluginsInstalled[] = "VisitsSummary"
PluginsInstalled[] = "VisitFrequency"
PluginsInstalled[] = "VisitTime"
PluginsInstalled[] = "VisitorInterest"
PluginsInstalled[] = "RssWidget"
PluginsInstalled[] = "Feedback"
PluginsInstalled[] = "TwoFactorAuth"
PluginsInstalled[] = "CoreUpdater"
PluginsInstalled[] = "CoreConsole"
PluginsInstalled[] = "ScheduledReports"
PluginsInstalled[] = "UserCountryMap"
PluginsInstalled[] = "Live"
PluginsInstalled[] = "PrivacyManager"
PluginsInstalled[] = "ImageGraph"
PluginsInstalled[] = "Annotations"
PluginsInstalled[] = "MobileMessaging"
PluginsInstalled[] = "Overlay"
PluginsInstalled[] = "SegmentEditor"
PluginsInstalled[] = "Insights"
PluginsInstalled[] = "Morpheus"
PluginsInstalled[] = "Contents"
PluginsInstalled[] = "BulkTracking"
PluginsInstalled[] = "Resolution"
PluginsInstalled[] = "DevicePlugins"
PluginsInstalled[] = "Heartbeat"
PluginsInstalled[] = "Marketplace"
PluginsInstalled[] = "ProfessionalServices"
PluginsInstalled[] = "UserId"
PluginsInstalled[] = "CustomJsTracker"
PluginsInstalled[] = "Tour"
PluginsInstalled[] = "PagePerformance"
PluginsInstalled[] = "CustomDimensions"
PluginsInstalled[] = "ExtraTools"
ERROR [2022-11-15 14:50:27] 1003  Uncaught exception: /var/www/matomo/libs/Zend/Db/Adapter/Pdo/Abstract.php(144): SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mariadb failed: Name does not resolve [Query: , CLI mode: 1]

  [Zend_Db_Adapter_Exception]                                                                             
  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mariadb failed: Name does not resolve  
                                                                                                          
  [PDOException]                                                                                          
  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mariadb failed: Name does not resolve  
                                                                                                          
  [PDOException]                                                                                       
  PDO::__construct(): php_network_getaddresses: getaddrinfo for mariadb failed: Name does not resolve

plugin:activate [plugin1] ... [pluginN]

Method 3

  1. Added config.ini.php with PluginsInstalled[] = "ExtraTools" (See previous method)
  2. Manually created database as described in config.ini.php though with no tables.
/var/www/matomo/console plugin:activate ExtraTools
ERROR [2022-11-15 14:40:41] 1148  Uncaught exception: /var/www/matomo/libs/Zend/Db/Statement/Pdo.php(236): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'matomo.matomo_option' doesn't exist [Query: , CLI mode: 1]

Summary

I've not been able to enable the plugin to do the installation. I have seen from the docker-compose.yaml that there is some init.sql script that you're using, but it doesn't appear to be part of this repository?

command: --init-file /data/application/init.sql --max_allowed_packet=67108864
volumes:
- ./tests/ci/config/mysql/init.sql:/data/application/init.sql

Is it possible to install without an exiting installation?

Install with password prompt forgets the password

Install with password prompt prompts correctly, but forgets the password

`$ ./console matomo:install --db-host=myremotedb.mysql.mydomain.com --db-username=mydbusername --db-name=mydbname --db-prefix=matomo
Are you really sure you would like to install Matomo - if you have an installation already, it will be wiped? y
Enter password:
Database "mydbname" dropped

Enter password:
Database "mydbname" created
Installing Matomo
Starting install
Deleting cache
Initialising Database Connections
Database connection failed. Retrying in 10 seconds.
SQLSTATE[HY000] [1045] Access denied for user 'mydbusername'@'thiserver.mydomain.com' (using password: NO)
Database connection failed. Retrying in 20 seconds.
SQLSTATE[HY000] [1045] Access denied for user 'mydbusername'@'thiserver.mydomain.com' (using password: NO)`

If you use --do-not-drop-db it's the same problem.

site:add only supports one URL

The help for site:add suggests that one than one URL can be added at a time:

php console site:add --no-ansi -n
Adding a new site


                                    
  [Exception]                       
  The website name can't be empty.  
                                    


site:add [--name[="..."]] [--urls[="..."]] [--ecommerce] [--no-site-search] [--search-keyword-parameters[="..."]] [--search-category-parameters[="..."]] [--exclude-ips[="..."]] [--exclude-query-parameters[="..."]] [--timezone[="..."]] [--currency[="..."]] [--group[="..."]] [--start-date[="..."]] [--exclude-user-agents] [--keep-url-fragments] [--type[="..."]] [--settings-value[="..."]] [--exclude-unknown-urls]

However if you add more than one URL, space separated:

php console site:add --no-ansi -n --name='foo' --urls='https://foo.example.com/ https://bar.example.com/ https://baz.example.com/'
Adding a new site
Site added

It results in:

mysql stats -e 'SELECT idsite,name,main_url FROM site WHERE name="foo"'
+--------+------+---------------------------------------------------------------------------+
| idsite | name | main_url                                                                  |
+--------+------+---------------------------------------------------------------------------+
|      2 | foo  | https://foo.example.com/ https://bar.example.com/ https://baz.example.com |
+--------+------+---------------------------------------------------------------------------+

If comers are used:

php console site:add --no-ansi -n --name='bar' --urls='https://foo.example.com/,https://bar.example.com/,https://baz.example.com/'
Adding a new site
Site added

It results in:

mysql stats -e 'SELECT idsite,name,main_url FROM site WHERE name="bar"'
+--------+------+---------------------------------------------------------------------------+
| idsite | name | main_url                                                                  |
+--------+------+---------------------------------------------------------------------------+
|      3 | bar  | https://foo.example.com/,https://bar.example.com/,https://baz.example.com |
+--------+------+---------------------------------------------------------------------------+

This is what is needed, the main_url column should just contain the main URL for the site and other URL's should be in the site_url table cross referenced via the idsite column.

So either the urls argument needs to be a bit cleverer in the manner in which it handles input, for example splitting the first URL from subsequent ones and then correctly inserting them into the database or perhaps it would make sense to have two command line options, one for the main_url column in the site table and another option to update the site_url table?

MariaDB [stats]> describe matomo_site_url;
+--------+------------------+------+-----+---------+-------+
| Field  | Type             | Null | Key | Default | Extra |
+--------+------------------+------+-----+---------+-------+
| idsite | int(10) unsigned | NO   | PRI | NULL    |       |
| url    | varchar(255)     | NO   | PRI | NULL    |       |
+--------+------------------+------+-----+---------+-------+

Another thing to consider is the possible need for a site:update command to update things like the list of url's in the site_url table?

I'm sorry that I'm not a Python programmer so I'm not in a position to help with suggested enhancements like this other than by suggesting features and testing them.

For consistency with the database perhaps the command line options could be:

php console site:add --name='foo' --main_url='https://foo.example.com' --urls='https://bar.example.com
https://baz.example.com'

With urls requiring one URL per line?

Typed class properties not compatible with PHP 7.2

Typed class properties are not a thing in PHP7.2 - the Matomo 4.x supported version.

class InstallMatomo extends ConsoleCommand
{

    public bool $silent;

This causes this error

ERROR [2022-07-14 22:49:07] 875069  Uncaught exception: ParseError: syntax error, unexpected 'bool' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST) in plugins/ExtraTools/Commands/InstallMatomo.php:35

Uncaught exception: Error: Class "Symfony\Component\Process\Process" not found in /var/www/matomo/plugins/ExtraTools/Lib/Backup.php:36

Hey guys.

Great work on these helpful little tools. I downloaded the 4.0.0-beta5 release from the Matomo marketplace.

IBut can't get the database backup to work.

$ sudo /usr/bin/php /var/www/matomo/console database:backup
Starting backup job:
ERROR [2022-01-14 21:27:31] 243955  Uncaught exception: Error: Class "Symfony\Component\Process\Process" not found in /var/www/matomo/plugins/ExtraTools/Lib/Backup.php:36
Stack trace:
#0 /var/www/matomo/plugins/ExtraTools/Commands/BackupDb.php(99): Piwik\Plugins\ExtraTools\Lib\Backup->execute()
#1 /var/www/matomo/vendor/symfony/console/Symfony/Component/Console/Command/Command.php(257): Piwik\Plugins\ExtraTools\Commands\BackupDb->execute()
#2 /var/www/matomo/vendor/symfony/console/Symfony/Component/Console/Application.php(874): Symfony\Component\Console\Command\Command->run()
#3 /var/www/matomo/vendor/symfony/console/Symfony/Component/Console/Application.php(195): Symfony\Component\Console\Application->doRunCommand()
#4 [internal function]: Symfony\Component\Console\Application->doRun()
#5 /var/www/matomo/core/Console.php(130): call_user_func()
#6 /var/www/matomo/core/Access.php(670): Piwik\Console->Piwik\{closure}()
#7 /var/www/matomo/core/Console.php(131): Piwik\Access::doAsSuperUser()
#8 /var/www/matomo/core/Console.php(82): Piwik\Console->doRunImpl()
#9 /var/www/matomo/vendor/symfony/console/Symfony/Component/Console/Application.php(126): Piwik\Console->doRun()
#10 /var/www/matomo/console(32): Symfony\Component\Console\Application->run()
#11 {main}
Uncaught exception in /var/www/matomo/plugins/ExtraTools/Lib/Backup.php line 36:
Class "Symfony\Component\Process\Process" not found

Do you have an idea what might be going wrong here?

Add phpunit tests

To get this plugin to a stable release - we need to have test coverage with phpunit tests.

Installing ExtraTools inside Matomo Docker container

I'm using Matomo as Docker container and I'm trying to use ExtraTools to automate the installation. As I understand ExtraTools depends on symfony/yaml and symfony/process and composer is needed to install them. But there doesn't seem to be composer inside official Matomo Docker image. What is the best approach of using ExtraTools inside Docker container? Currently I'm starting to feel that I would need another tool which would automate installation of ExtraTools ๐Ÿ˜€.

Broken in Matomo 3.11

Something is broken related to adding the first site in Matomo 3.11.

Investigating this.

Add more segment options

Would it be possible to add more segment options? If I am getting it right, by extending this plugin one could avoid to use the API in order to create and configure features such as segments, custom reports...
It is currently a pain to use the API as we need to set the endpoint, the & between each parameter. With your plugin you are making the process far easier.

Incompatibility With 3.13.4 Zip Distribution

Following the installation instructions, Matomo's console breaks after running the two composer commands:

composer require symfony/yaml:~2.6.0
composer require symfony/process:^3.4

Error upon console invocation:

$ ./console
PHP Fatal error:  Uncaught Error: Class 'Piwik\Plugin\Manager' not found in <dir>/core/bootstrap.php:46

Add project:release command

I don't know best name for this yet - but when you do a new release of Matomo - you need to update config etc. This should be fully automatic, so I suggest a project:release command - that takes and input from a *.json file to update/change/remove config.

Add support for config in yaml

json is partly supported, and it should not be a so big effort to also support yaml for config for matomo:install and the coming project:release.

Trouble Executing Commands in Docker Container

As I'm working through the setup guide at https://plugins.matomo.org/ExtraTools#documentation, I keep getting stuck on activating the ExtraTools plugin. A screenshot of the error can be seen below. The error is mentioning something about a Zend_Db_Adapater_Exception where it can't find a file or directory. The ExtraTools Repo is in the proper location. I.E. /var/www/html/plugins. Through various google searches, I'm simply unable to find a remedy to this error, and am therefore completely blocked from continuing with the setup. Some context, I am containerizing matomo with the official matomo docker image and an accompanying database, all in a docker-compose. The screenshot you're seeing is from the matomo container after sh'ing into it. I am attempting to completely automate the setup of matomo with multiple known sites to track for development purposes. In a perfect world, all of this is done via docker-compose so its repeatable for all my fellow devs. I've setup a "post entrypoint" script to handle the remainder of the setup after the container has initialized matomo, where all of the setup commands from the ExtraTools docs are being ran. I have basically no experience with php applications, so all of this is very new to me. Have you seen this before? Any suggestions?

Screenshot 2023-09-13 at 4 21 59 PM

Install with Matomo 4.3.1 fails

Using this script following your Dockerfile in Issue #21

git clone https://github.com/matomo-org/matomo.git
cd matomo/
git checkout 4.3.1

git submodule init
git submodule update;
rm -rf .git;
chmod +x ./console

curl -sS https://getcomposer.org/installer | php;
php composer.phar install

git clone https://github.com/nodeone/extratools.git plugins/ExtraTools
./console plugin:activate ExtraTools

./console matomo:install

I get this error

./console matomo:install
Are you really sure you would like to install Matomo - if you have an installation already, it will be wiped? y
ERROR [2021-05-27 19:33:20] 1914235  Uncaught exception: Error: Class 'Symfony\Component\Process\Process' not found in matomo/plugins/ExtraTools/Lib/Drop.php:32
Stack trace:
#0 matomo/plugins/ExtraTools/Commands/InstallMatomo.php(233): Piwik\Plugins\ExtraTools\Lib\Drop->execute()
#1 matomo/vendor/symfony/console/Symfony/Component/Console/Command/Command.php(257): Piwik\Plugins\ExtraTools\Commands\InstallMatomo->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#2 matomo/vendor/symfony/console/Symfony/Component/Console/Application.php(874): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#3 matomo/vendor/symfony/console/Symfony/Component/Console/Application.php(195): Symfony\Component\Console\Application->doRunCommand(Object(Piwik\Plugins\ExtraTools\Commands\InstallMatomo), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 [internal function]: Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#5 matomo/core/Console.php(130): call_user_func(Array, Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#6 matomo/core/Access.php(673): Piwik\Console->Piwik\{closure}()
#7 matomo/core/Console.php(131): Piwik\Access::doAsSuperUser(Object(Closure))
#8 matomo/core/Console.php(82): Piwik\Console->doRunImpl(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#9 matomo/vendor/symfony/console/Symfony/Component/Console/Application.php(126): Piwik\Console->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#10 matomo/console(32): Symfony\Component\Console\Application->run()
#11 {main}
Uncaught exception in matomo/plugins/ExtraTools/Lib/Drop.php line 32:
Class 'Symfony\Component\Process\Process' not found

It seems to me that dependency is no longer included

[urchin@tabby matomo]$ fgrep -ir 'Symfony\Component\Process' *
Binary file composer.phar matches
plugins/ExtraTools/Lib/Backup.php:use Symfony\Component\Process;
plugins/ExtraTools/Lib/Backup.php:use Symfony\Component\Process\Exception\ProcessFailedException;
plugins/ExtraTools/Lib/Defaults.php:use Symfony\Component\Process;
plugins/ExtraTools/Lib/Defaults.php:use Symfony\Component\Process\Exception\ProcessFailedException;
plugins/ExtraTools/Lib/ConfigManipulation.php:use Symfony\Component\Process;
plugins/ExtraTools/Lib/ConfigManipulation.php:use Symfony\Component\Process\Exception\ProcessFailedException;
plugins/ExtraTools/Lib/User.php:use Symfony\Component\Process;
plugins/ExtraTools/Lib/User.php:use Symfony\Component\Process\Exception\ProcessFailedException;
plugins/ExtraTools/Lib/Import.php:use Symfony\Component\Process;
plugins/ExtraTools/Lib/Import.php:use Symfony\Component\Process\Exception\ProcessFailedException;
plugins/ExtraTools/Lib/Create.php:use Symfony\Component\Process;
plugins/ExtraTools/Lib/Create.php:use Symfony\Component\Process\Exception\ProcessFailedException;
plugins/ExtraTools/Lib/Drop.php:use Symfony\Component\Process;
plugins/ExtraTools/Lib/Drop.php:use Symfony\Component\Process\Exception\ProcessFailedException;
tests/travis/generator/vendor/symfony/console/Tests/Helper/ProcessHelperTest.php:use Symfony\Component\Process\Process;
tests/travis/generator/vendor/symfony/console/Helper/ProcessHelper.php:use Symfony\Component\Process\Exception\ProcessFailedException;
tests/travis/generator/vendor/symfony/console/Helper/ProcessHelper.php:use Symfony\Component\Process\Process;
tests/travis/generator/vendor/symfony/console/Helper/ProcessHelper.php:use Symfony\Component\Process\ProcessBuilder;
tests/travis/generator/vendor/symfony/console/Shell.php:use Symfony\Component\Process\ProcessBuilder;
tests/travis/generator/vendor/symfony/console/Shell.php:use Symfony\Component\Process\PhpExecutableFinder;
vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php:use Symfony\Component\Process\Exception\LogicException;
vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php:use Symfony\Component\Process\Exception\ProcessFailedException;
vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php:use Symfony\Component\Process\Exception\RuntimeException;
vendor/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php:use Symfony\Component\Process\PhpExecutableFinder;
vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProcessHelperTest.php:use Symfony\Component\Process\Process;
vendor/symfony/console/Symfony/Component/Console/Helper/ProcessHelper.php:use Symfony\Component\Process\Exception\ProcessFailedException;
vendor/symfony/console/Symfony/Component/Console/Helper/ProcessHelper.php:use Symfony\Component\Process\Process;
vendor/symfony/console/Symfony/Component/Console/Helper/ProcessHelper.php:use Symfony\Component\Process\ProcessBuilder;
vendor/symfony/console/Symfony/Component/Console/Shell.php:use Symfony\Component\Process\ProcessBuilder;
vendor/symfony/console/Symfony/Component/Console/Shell.php:use Symfony\Component\Process\PhpExecutableFinder;
vendor/sebastian/diff/tests/Output/Integration/UnifiedDiffOutputBuilderIntegrationTest.php:use Symfony\Component\Process\Process;
vendor/sebastian/diff/tests/Output/Integration/StrictUnifiedDiffOutputBuilderIntegrationTest.php:use Symfony\Component\Process\Process;
vendor/sebastian/diff/tests/Utils/UnifiedDiffAssertTraitIntegrationTest.php:use Symfony\Component\Process\Process;
vendor/composer/ca-bundle/src/CaBundle.php:use Symfony\Component\Process\PhpProcess;
vendor/composer/ca-bundle/src/CaBundle.php:        if (!class_exists('Symfony\Component\Process\PhpProcess')) {

Exactly the same error happens if I use https://builds.matomo.org/matomo-latest.tar.gz and unzip it.

As long as I specified the correct version, adding that component got me past the error and to the "Enter password:" prompt:

composer require symfony/process:~2.6.0

./console matomo:install
Are you really sure you would like to install Matomo - if you have an installation already, it will be wiped? y
Enter password:
mysqladmin: connect ...

matomo:install main_url is always set to http://example.com

When doing a Matomo install with the following command:

php console --no-ansi -n matomo:install --db-username=stats --db-pass=XXXXXX --db-host=localhost --db-name=stats --first-site-name='wsh.webarchitects.org.uk' --first-site-url='https://wsh.webarchitects.org.uk' --first-user='webarch' --first-user-email='[email protected]' --first-user-pass='XXXXXX' --force

The main_url for the first site is set to http://example.com despite it being provided on the command line:

MariaDB [stats]> select idsite,name,main_url from site;
+--------+--------------------------+--------------------+
| idsite | name                     | main_url           |
+--------+--------------------------+--------------------+
|      1 | wsh.webarchitects.org.uk | http://example.com |
+--------+--------------------------+--------------------+
1 row in set (0.001 sec)

Is this caused by a mistake of mine? Or is there an issue with the matomo:install command?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.