PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.1.6
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.1.6
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / config / config.php
matomo / config Last commit date
.htaccess 6 years ago common.config.ini.php 4 years ago config.php 1 year ago index.php 6 years ago
config.php
202 lines
1 <?php
2
3 if (!defined( 'ABSPATH')) {
4 exit; // if accessed directly
5 }
6
7 use Piwik\Cache;
8 use Piwik\Container\StaticContainer;
9 use Piwik\Option;
10 use Piwik\Plugin\API;
11 use WpMatomo\Capabilities;
12 use WpMatomo\Paths;
13 use WpMatomo\Settings;
14
15 return array(
16 'path.tmp' => function () {
17 $paths = new \WpMatomo\Paths();
18 return $paths->get_tmp_dir();
19 },
20 'path.misc.user' => function () {
21 $paths = new \WpMatomo\Paths();
22 return $paths->get_relative_dir_to_matomo($paths->get_upload_base_dir()) . '/';
23 },
24 'log.handlers' => array(), // required in the console
25 'EnableDbVersionCheck' => false,
26 'path.geoip2' => function () {
27 $paths = new \WpMatomo\Paths();
28 return $paths->get_gloal_upload_dir_if_possible('DBIP-City.mmdb') . '/';
29 },
30 // we want to avoid the regular monolog logger as it could interfere with other plugins maybe. for now lets use a
31 // custom logger
32 'Piwik\Log\LoggerInterface' => \Piwik\DI::get('\Piwik\Plugins\WordPress\Logger'),
33 // following two entries used by CoreAdminHome.runCronArchiving
34 'log.short.format' => '%level% %tag%[%datetime%] %message%',
35 'Piwik\Plugins\Monolog\Formatter\LineMessageFormatter' => \Piwik\DI::create('Piwik\Plugins\Monolog\Formatter\LineMessageFormatter')
36 ->constructor(\Piwik\DI::get('log.short.format')),
37 'TagManagerContainerStorageDir' => function () {
38 if (defined('MATOMO_TAG_MANAGER_STORAGE_DIR')) {
39 return MATOMO_TAG_MANAGER_STORAGE_DIR;
40 }
41
42 // the location where we store the generated javascript or json container files
43 $paths = new \WpMatomo\Paths();
44 return rtrim('/'. $paths->get_relative_dir_to_matomo($paths->get_upload_base_dir().'/', @realpath(MATOMO_ANALYTICS_FILE)), '/');
45 },
46 'TagManagerContainerWebDir' => function () {
47 if (defined('MATOMO_TAG_MANAGER_WEB_DIR')) {
48 return MATOMO_TAG_MANAGER_WEB_DIR;
49 }
50
51 // the location where we store the generated javascript or json container files
52 $paths = new \WpMatomo\Paths();
53 return rtrim('/'. matomo_rel_path($paths->get_upload_base_dir() . '/', WP_PLUGIN_DIR . '/matomo/app'), '/');
54 },
55 'Piwik\Plugins\Login\PasswordVerifier' => \Piwik\DI::autowire('Piwik\Plugins\WordPress\WpPasswordVerifier'),
56 'Piwik\Session\SessionAuth' => \Piwik\DI::autowire('Piwik\Plugins\WordPress\SessionAuth'),
57 'Piwik\Auth' => \Piwik\DI::autowire('Piwik\Plugins\WordPress\Auth'),
58 \Piwik\Config::class => \Piwik\DI::decorate(function ($previous) {
59
60 \Piwik\Plugins\TagManager\TagManager::$enableAutoContainerCreation = false;
61
62 if (defined('FORCE_SSL_ADMIN') && FORCE_SSL_ADMIN) {
63 $general = $previous->General;
64 $general['force_ssl'] = 1;
65 $general['assume_secure_protocol'] = 1;
66 $previous->General = $general;
67 }
68
69 $database = $previous->database;
70 $previous->database = \WpMatomo\Installer::get_db_infos($database);
71
72 $paths = new Paths();
73 if ( file_exists( $paths->get_config_ini_path() ) ) {
74 $general = $previous->General;
75
76 if (defined('MATOMO_TRIGGER_BROWSER_ARCHIVING')) {
77 $general['enable_browser_archiving_triggering'] = (int) MATOMO_TRIGGER_BROWSER_ARCHIVING;
78 }
79
80 $matomo_salt_key = Settings::OPTION_PREFIX . 'matomo_salt';
81 $matomo_salt = get_option($matomo_salt_key); // needs to be per site!
82 if (!$matomo_salt) {
83 $matomo_salt = \Piwik\Common::getRandomString(32);
84 update_option($matomo_salt_key, $matomo_salt, true);
85 }
86
87 $general['salt'] = $matomo_salt;
88
89 if (empty($general['trusted_hosts'])) {
90 $general['trusted_hosts'] = array();
91 }
92 $site_url = site_url();
93 if (!in_array($site_url, $general['trusted_hosts'])) {
94 $general['trusted_hosts'][] = $site_url;
95 }
96 $previous->General = $general;
97
98 if (empty($GLOBALS['MATOMO_SWITCH_BLOG_SET_UP'])) {
99 // only execute it once since we might init this several times...
100 $GLOBALS['MATOMO_SWITCH_BLOG_SET_UP'] = true;
101
102 add_action('switch_blog', function ($new_blog, $prev_blog) {
103 if ($new_blog == $prev_blog) {
104 return;
105 }
106 // ensure correct path to config is set, ensure to update tables_prefix etc.
107 $container = StaticContainer::getContainer();
108 $container->set(\Piwik\Application\Kernel\GlobalSettingsProvider::class, $container->make(\Piwik\Application\Kernel\GlobalSettingsProvider::class));
109 $container->set(\Piwik\Config::class, $container->make(\Piwik\Config::class));
110 Option::clearCache();
111 \Piwik\Site::clearCache();
112 Cache::getTransientCache()->flushAll();
113 API::unsetAllInstances();
114 }, 10, 2);
115 }
116 }
117
118 return $previous;
119 }),
120 'Piwik\Mail\Transport' => \Piwik\DI::autowire('WpMatomo\Email'),
121 'Piwik\Plugins\CustomJsTracker\TrackerUpdater' => \Piwik\DI::decorate(function ($previous) {
122 /** @var \Piwik\Plugins\CustomJsTracker\TrackerUpdater $previous */
123
124 $paths = new Paths();
125 $dir = $paths->get_matomo_js_upload_path();
126
127 $previous->setToFile($dir);
128
129 return $previous;
130 }),
131 'diagnostics.optional' => \Piwik\DI::decorate(function ($checks) {
132 foreach ($checks as $index => $check) {
133 if ($check && is_object($check)) {
134 $class_name = get_class($check);
135 if ($class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\ForceSSLCheck'
136 || $class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\LoadDataInfileCheck'
137 || $class_name === 'Piwik\Plugins\CustomJsTracker\Diagnostic\TrackerJsCheck'
138 || $class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\RequiredPrivateDirectories' // it doesn't resolve config path correctly as it is outside matomo dir etc
139 || $class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\RecommendedPrivateDirectories' // tmp check doesn't work so far see matomo-org/matomo#18684
140 || $class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\CronArchivingCheck'
141 || $class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\FileIntegrityCheck') {
142 $checks[$index] = null;
143 }
144 }
145 }
146 return array_values(array_filter($checks));
147 }),
148 'diagnostics.disabled' => \Piwik\DI::add([
149 \Piwik\DI::get(\Piwik\Plugins\Diagnostics\Diagnostic\PageSpeedCheck::class),
150 \Piwik\DI::get(\Piwik\Plugins\Diagnostics\Diagnostic\RecommendedPrivateDirectories::class),
151 ]),
152 'observers.global' => \Piwik\DI::add(array(
153 array('FrontController.modifyErrorPage', \Piwik\DI::value(function (&$result, $ex) {
154 if (!empty($ex) && is_object($ex) && $ex instanceof \Piwik\Exception\NoWebsiteFoundException) {
155 // try to repair itself in case for some reason the site was not yet synced... on next reload it would
156 // then work
157 $sync = new \WpMatomo\Site\Sync(new Settings());
158 $sync->sync_current_site();
159 }
160 if (!empty($ex)
161 && is_object($ex)
162 && $ex instanceof \Piwik\Exception\NoPrivilegesException
163 && is_user_logged_in()) {
164 if (current_user_can(Capabilities::KEY_VIEW)) {
165 // some error... it looks like user should by synced but isn't yet
166 // could happen eg when in network activated mode the super admin changes permission and another
167 // user from a blog wants to access the UI while not all users are synced just yet
168 // try to repair itself in case for some reason the user was not yet synced... on next reload it would
169 // then work
170 $sync = new \WpMatomo\User\Sync();
171 $sync->sync_current_users();
172 }
173 }
174 })),
175 array('Db.getDatabaseConfig', \Piwik\DI::value(function (&$config) {
176 // we don't want to save these and instead detect them on demand.
177 // for security reasons etc we don't want to duplicate these values
178 include_once plugin_dir_path(MATOMO_ANALYTICS_FILE ) . 'classes/WpMatomo/Db/WordPress.php';
179 })),
180 array('Tracker.getDatabaseConfig', \Piwik\DI::value(function (&$configDb) {
181 // we don't want to save these and instead detect them on demand.
182 // for security reasons etc we don't want to duplicate these values
183 include_once plugin_dir_path(MATOMO_ANALYTICS_FILE ) . 'classes/WpMatomo/Db/WordPress.php';
184 })),
185 array('Config.beforeSave', \Piwik\DI::value(function (&$values) {
186 // we don't want to save these and instead detect them on demand.
187 // for security reasons etc we don't want to duplicate these values
188 unset($values['database']['host']);
189 unset($values['database']['username']);
190 unset($values['database']['password']);
191 unset($values['database']['dbname']);
192 unset($values['database']['tables_prefix']);
193 unset($values['database']['charset']);
194 unset($values['Plugins']);
195 unset($values['General']['enable_users_admin']);
196 unset($values['General']['enable_sites_admin']);
197 unset($values['General']['salt']);
198 })),
199 )),
200
201 );
202