PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / trunk
Matomo Analytics – Powerful, Privacy-First Insights for WordPress vtrunk
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 month 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 \WpMatomo\Bootstrap::destroy_bootstrapped_environment();
108 }, 10, 2);
109 }
110 }
111
112 \WpMatomo\AjaxTracker::add_ip_forward_proxy_header_to_config( $previous );
113
114 return $previous;
115 }),
116 'Piwik\Mail\Transport' => \Piwik\DI::autowire('WpMatomo\Email'),
117 'Piwik\Plugins\CustomJsTracker\TrackerUpdater' => \Piwik\DI::decorate(function ($previous) {
118 /** @var \Piwik\Plugins\CustomJsTracker\TrackerUpdater $previous */
119
120 $paths = new Paths();
121 $dir = $paths->get_matomo_js_upload_path();
122
123 $previous->setToFile($dir);
124
125 return $previous;
126 }),
127 'diagnostics.optional' => \Piwik\DI::decorate(function ($checks) {
128 foreach ($checks as $index => $check) {
129 if ($check && is_object($check)) {
130 $class_name = get_class($check);
131 if ($class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\ForceSSLCheck'
132 || $class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\LoadDataInfileCheck'
133 || $class_name === 'Piwik\Plugins\CustomJsTracker\Diagnostic\TrackerJsCheck'
134 || $class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\RequiredPrivateDirectories' // it doesn't resolve config path correctly as it is outside matomo dir etc
135 || $class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\RecommendedPrivateDirectories' // tmp check doesn't work so far see matomo-org/matomo#18684
136 || $class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\CronArchivingCheck'
137 || $class_name === 'Piwik\Plugins\Diagnostics\Diagnostic\FileIntegrityCheck') {
138 $checks[$index] = null;
139 }
140 }
141 }
142 return array_values(array_filter($checks));
143 }),
144 'diagnostics.disabled' => \Piwik\DI::add([
145 \Piwik\DI::get(\Piwik\Plugins\Diagnostics\Diagnostic\PageSpeedCheck::class),
146 \Piwik\DI::get(\Piwik\Plugins\Diagnostics\Diagnostic\RecommendedPrivateDirectories::class),
147 ]),
148 'observers.global' => \Piwik\DI::add(array(
149 array('FrontController.modifyErrorPage', \Piwik\DI::value(function (&$result, $ex) {
150 if (!empty($ex) && is_object($ex) && $ex instanceof \Piwik\Exception\NoWebsiteFoundException) {
151 // try to repair itself in case for some reason the site was not yet synced... on next reload it would
152 // then work
153 $sync = new \WpMatomo\Site\Sync(new Settings());
154 $sync->sync_current_site();
155 }
156 if (!empty($ex)
157 && is_object($ex)
158 && $ex instanceof \Piwik\Exception\NoPrivilegesException
159 && is_user_logged_in()) {
160 if (current_user_can(Capabilities::KEY_VIEW)) {
161 // some error... it looks like user should by synced but isn't yet
162 // could happen eg when in network activated mode the super admin changes permission and another
163 // user from a blog wants to access the UI while not all users are synced just yet
164 // try to repair itself in case for some reason the user was not yet synced... on next reload it would
165 // then work
166 $sync = new \WpMatomo\User\Sync();
167 $sync->sync_current_users();
168 }
169 }
170 })),
171 array('Db.getDatabaseConfig', \Piwik\DI::value(function (&$config) {
172 // we don't want to save these and instead detect them on demand.
173 // for security reasons etc we don't want to duplicate these values
174 include_once plugin_dir_path(MATOMO_ANALYTICS_FILE ) . 'classes/WpMatomo/Db/WordPress.php';
175 })),
176 array('Tracker.getDatabaseConfig', \Piwik\DI::value(function (&$configDb) {
177 // we don't want to save these and instead detect them on demand.
178 // for security reasons etc we don't want to duplicate these values
179 include_once plugin_dir_path(MATOMO_ANALYTICS_FILE ) . 'classes/WpMatomo/Db/WordPress.php';
180 })),
181 array('Config.beforeSave', \Piwik\DI::value(function (&$values) {
182 // we don't want to save these and instead detect them on demand.
183 // for security reasons etc we don't want to duplicate these values
184 unset($values['database']['host']);
185 unset($values['database']['username']);
186 unset($values['database']['password']);
187 unset($values['database']['dbname']);
188 unset($values['database']['tables_prefix']);
189 unset($values['database']['charset']);
190 unset($values['Plugins']);
191 unset($values['General']['enable_users_admin']);
192 unset($values['General']['enable_sites_admin']);
193 unset($values['General']['salt']);
194 })),
195 )),
196
197 \Piwik\Plugins\ProfessionalServices\PromoWidgetApplicable::class =>
198 \Piwik\DI::get( \Piwik\Plugins\WordPress\Overrides\ProfessionalServices\PromoWidgetApplicable::class ),
199
200 \Piwik\Plugins\Marketplace\Api\Service::class => \Piwik\DI::autowire()->constructor( 'https://plugins.matomo.org' ),
201 );
202