PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 1.0.4
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v1.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 / classes / WpMatomo.php
matomo / classes Last commit date
WpMatomo 6 years ago .htaccess 6 years ago WpMatomo.php 6 years ago index.php 6 years ago
WpMatomo.php
214 lines
1 <?php
2 /**
3 * Matomo - free/libre analytics platform
4 *
5 * @link https://matomo.org
6 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
7 * @package matomo
8 */
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit; // if accessed directly
12 }
13
14 use WpMatomo\Admin\Menu;
15 use WpMatomo\Commands\MatomoCommands;
16 use WpMatomo\Ecommerce\EasyDigitalDownloads;
17 use WpMatomo\Ecommerce\MemberPress;
18 use WpMatomo\OptOut;
19 use WpMatomo\Paths;
20 use WpMatomo\PrivacyBadge;
21 use WpMatomo\ScheduledTasks;
22 use \WpMatomo\Site\Sync as SiteSync;
23 use WpMatomo\AjaxTracker;
24 use \WpMatomo\User\Sync as UserSync;
25 use \WpMatomo\Installer;
26 use \WpMatomo\Updater;
27 use \WpMatomo\Roles;
28 use \WpMatomo\Annotations;
29 use \WpMatomo\TrackingCode;
30 use \WpMatomo\Settings;
31 use \WpMatomo\Capabilities;
32 use \WpMatomo\Ecommerce\Woocommerce;
33 use \WpMatomo\Report\Renderer;
34 use WpMatomo\API;
35 use \WpMatomo\Admin\Admin;
36
37 class WpMatomo {
38
39 /**
40 * @var Settings
41 */
42 public static $settings;
43
44 public function __construct() {
45 if ( ! $this->check_compatibility() ) {
46 return;
47 }
48
49 self::$settings = new Settings();
50
51 if ( self::is_safe_mode() ) {
52 if ( is_admin() ) {
53 new \WpMatomo\Admin\SafeModeMenu( self::$settings );
54 }
55
56 return;
57 }
58
59 add_action( 'init', array( $this, 'init_plugin' ) );
60
61 $capabilities = new Capabilities( self::$settings );
62 $capabilities->register_hooks();
63
64 $roles = new Roles( self::$settings );
65 $roles->register_hooks();
66
67 $compatibility = new \WpMatomo\Compatibility();
68 $compatibility->register_hooks();
69
70 $scheduled_tasks = new ScheduledTasks( self::$settings );
71 $scheduled_tasks->schedule();
72
73 $privacy_badge = new OptOut();
74 $privacy_badge->register_hooks();
75
76 $renderer = new Renderer();
77 $renderer->register_hooks();
78
79 $api = new API();
80 $api->register_hooks();
81
82 if ( is_admin() ) {
83 new Admin( self::$settings );
84
85 $site_sync = new SiteSync( self::$settings );
86 $site_sync->register_hooks();
87 $user_sync = new UserSync();
88 $user_sync->register_hooks();
89
90 $referral = new \WpMatomo\Referral();
91 if ($referral->should_show()) {
92 $referral->register_hooks();
93 }
94 }
95
96 $tracking_code = new TrackingCode( self::$settings );
97 $tracking_code->register_hooks();
98 $annotations = new Annotations( self::$settings );
99 $annotations->register_hooks();
100
101 if ( defined( 'WP_CLI' ) && WP_CLI ) {
102 new MatomoCommands();
103 }
104
105 add_filter(
106 'plugin_action_links_' . plugin_basename( MATOMO_ANALYTICS_FILE ),
107 array(
108 $this,
109 'add_settings_link',
110 )
111 );
112 }
113
114 private function check_compatibility() {
115 if ( ! is_admin() ) {
116 return true;
117 }
118 if ( matomo_is_app_request() ) {
119 return true;
120 }
121
122 $paths = new Paths();
123 $upload_path = $paths->get_upload_base_dir();
124
125 if ( $upload_path
126 && ! is_writable( dirname( $upload_path ) ) ) {
127 add_action(
128 'init',
129 function () use ( $upload_path ) {
130 if ( self::is_admin_user() ) {
131 add_action(
132 'admin_notices',
133 function () use ( $upload_path ) {
134 echo '<div class="error"><p>' . sprintf(__( 'Matomo Analytics requires the uploads directory %s to be writable. Please make the directory writable for it to work.', 'matomo' ), '(' . esc_html( dirname( $upload_path ) ) . ')') . '</p></div>';
135 }
136 );
137 }
138 }
139 );
140
141 return false;
142 }
143
144 return true;
145 }
146
147 public static function is_admin_user() {
148 if ( ! function_exists( 'is_multisite' )
149 || ! is_multisite() ) {
150 return current_user_can( 'administrator' );
151 }
152
153 return is_super_admin();
154 }
155
156 public static function is_safe_mode() {
157 return defined( 'MATOMO_SAFE_MODE' ) && MATOMO_SAFE_MODE;
158 }
159
160 public function add_settings_link( $links ) {
161 $get_started = new \WpMatomo\Admin\GetStarted( self::$settings );
162
163 if ( self::$settings->get_global_option( Settings::SHOW_GET_STARTED_PAGE ) && $get_started->can_user_manage() ) {
164 $links[] = '<a href="' . menu_page_url( Menu::SLUG_GET_STARTED, false ) . '">' . __( 'Get Started', 'matomo' ) . '</a>';
165 } elseif ( current_user_can( Capabilities::KEY_SUPERUSER ) ) {
166 $links[] = '<a href="' . menu_page_url( Menu::SLUG_SETTINGS, false ) . '">' . __( 'Settings', 'matomo' ) . '</a>';
167 }
168
169 return $links;
170 }
171
172 public function init_plugin() {
173 if ( ( is_admin() || matomo_is_app_request() )
174 && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
175 $installer = new Installer( self::$settings );
176 $installer->register_hooks();
177 if ( $installer->looks_like_it_is_installed() ) {
178 if ( is_admin()
179 && ( ! defined( 'MATOMO_ENABLE_AUTO_UPGRADE' ) || MATOMO_ENABLE_AUTO_UPGRADE ) ) {
180 $updater = new Updater( self::$settings );
181 $updater->update_if_needed();
182 }
183 } else {
184 if ( matomo_is_app_request() ) {
185 // we can't install if matomo is requested... there's some circular reference
186 wp_safe_redirect( admin_url() );
187 exit;
188 } else {
189 if ( $installer->can_be_installed() ) {
190 $installer->install();
191 }
192 }
193 }
194 }
195 $tracking_code = new TrackingCode( self::$settings );
196 if ( self::$settings->is_tracking_enabled()
197 && self::$settings->get_global_option( 'track_ecommerce' )
198 && ! $tracking_code->is_hidden_user() ) {
199 $tracker = new AjaxTracker( self::$settings );
200
201 $woocommerce = new Woocommerce( $tracker );
202 $woocommerce->register_hooks();
203
204 $easy_digital_downloads = new EasyDigitalDownloads( $tracker );
205 $easy_digital_downloads->register_hooks();
206
207 $member_press = new MemberPress( $tracker );
208 $member_press->register_hooks();
209
210 do_action( 'matomo_ecommerce_init', $tracker );
211 }
212 }
213 }
214