PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.0.4
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.0.4
5.13.0 5.12.1 5.12.0 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 2 years ago index.php 6 years ago
config.php
201 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().'/'), '/');
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 ]),
151 'observers.global' => \Piwik\DI::add(array(
152 array('FrontController.modifyErrorPage', \Piwik\DI::value(function (&$result, $ex) {
153 if (!empty($ex) && is_object($ex) && $ex instanceof \Piwik\Exception\NoWebsiteFoundException) {
154 // try to repair itself in case for some reason the site was not yet synced... on next reload it would
155 // then work
156 $sync = new \WpMatomo\Site\Sync(new Settings());
157 $sync->sync_current_site();
158 }
159 if (!empty($ex)
160 && is_object($ex)
161 && $ex instanceof \Piwik\Exception\NoPrivilegesException
162 && is_user_logged_in()) {
163 if (current_user_can(Capabilities::KEY_VIEW)) {
164 // some error... it looks like user should by synced but isn't yet
165 // could happen eg when in network activated mode the super admin changes permission and another
166 // user from a blog wants to access the UI while not all users are synced just yet
167 // try to repair itself in case for some reason the user was not yet synced... on next reload it would
168 // then work
169 $sync = new \WpMatomo\User\Sync();
170 $sync->sync_current_users();
171 }
172 }
173 })),
174 array('Db.getDatabaseConfig', \Piwik\DI::value(function (&$config) {
175 // we don't want to save these and instead detect them on demand.
176 // for security reasons etc we don't want to duplicate these values
177 include_once plugin_dir_path(MATOMO_ANALYTICS_FILE ) . 'classes/WpMatomo/Db/WordPress.php';
178 })),
179 array('Tracker.getDatabaseConfig', \Piwik\DI::value(function (&$configDb) {
180 // we don't want to save these and instead detect them on demand.
181 // for security reasons etc we don't want to duplicate these values
182 include_once plugin_dir_path(MATOMO_ANALYTICS_FILE ) . 'classes/WpMatomo/Db/WordPress.php';
183 })),
184 array('Config.beforeSave', \Piwik\DI::value(function (&$values) {
185 // we don't want to save these and instead detect them on demand.
186 // for security reasons etc we don't want to duplicate these values
187 unset($values['database']['host']);
188 unset($values['database']['username']);
189 unset($values['database']['password']);
190 unset($values['database']['dbname']);
191 unset($values['database']['tables_prefix']);
192 unset($values['database']['charset']);
193 unset($values['Plugins']);
194 unset($values['General']['enable_users_admin']);
195 unset($values['General']['enable_sites_admin']);
196 unset($values['General']['salt']);
197 })),
198 )),
199
200 );
201