PluginProbe
Stream – Activity Log & Audit Trail / 3.7.0
Stream – Activity Log & Audit Trail v3.7.0
4.4.0 4.3.0 4.2.2 4.2.1 trunk 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.1 3.1.1 3.10.0 3.2.0 3.2.1 3.2.2 3.2.3 All 50 releases
← All changes | classes/class-plugin.php +125 -31 3.1.13.7.0 View file →
@@ -1,14 +1,25 @@
1 1 <?php
2 +/**
3 + * Initializes plugin
4 + *
5 + * @package WP_Stream;
6 + */
7 +
2 8 namespace WP_Stream;
3 9
10 +/**
11 + * Class Plugin
12 + */
4 13 class Plugin {
5 14 /**
6 - * Plugin version number
15 + * Plugin version number.
7 16 *
17 + * TODO Maybe pass this as a constructor dependency?
18 + *
8 19 * @const string
9 20 */
10 - const VERSION = '3.1.1';
21 + const VERSION = '3.7.0';
11 22
12 23 /**
13 24 * WP-CLI command
14 25 *
@@ -16,43 +27,59 @@
16 27 */
17 28 const WP_CLI_COMMAND = 'stream';
18 29
19 30 /**
31 + * Holds and manages WordPress Admin configurations.
32 + *
20 33 * @var Admin
21 34 */
22 35 public $admin;
23 36
24 37 /**
38 + * Holds and manages alerts.
39 + *
25 40 * @var Alerts
26 41 */
27 42 public $alerts;
28 43
29 44 /**
45 + * Holds and manages alerts lists.
46 + *
30 47 * @var Alerts_List
31 48 */
32 49 public $alerts_list;
33 50
34 51 /**
52 + * Holds and manages connectors
53 + *
35 54 * @var Connectors
36 55 */
37 56 public $connectors;
38 57
39 58 /**
59 + * Holds and manages DB connections.
60 + *
40 61 * @var DB
41 62 */
42 63 public $db;
43 64
44 65 /**
66 + * Holds and manages records.
67 + *
45 68 * @var Log
46 69 */
47 70 public $log;
48 71
49 72 /**
73 + * Stores and manages WordPress settings.
74 + *
50 75 * @var Settings
51 76 */
52 77 public $settings;
53 78
54 79 /**
80 + * Process DB migrations.
81 + *
55 82 * @var Install
56 83 */
57 84 public $install;
58 85
@@ -78,45 +105,58 @@
78 105 );
79 106
80 107 spl_autoload_register( array( $this, 'autoload' ) );
81 108
82 - // Load helper functions
109 + // Load helper functions.
83 110 require_once $this->locations['inc_dir'] . 'functions.php';
84 111
85 - // Load DB helper interface/class
86 - $driver = '\WP_Stream\DB';
87 - if ( class_exists( $driver ) ) {
88 - $this->db = new DB( $this );
112 + // Load DB helper interface/class.
113 + $driver_class = apply_filters( 'wp_stream_db_driver', '\WP_Stream\DB_Driver_WPDB' );
114 + $driver = null;
115 +
116 + if ( class_exists( $driver_class ) ) {
117 + $driver = new $driver_class();
118 + $this->db = new DB( $driver );
89 119 }
90 120
121 + $error = false;
91 122 if ( ! $this->db ) {
123 + $error = esc_html__( 'Stream: Could not load chosen DB driver.', 'stream' );
124 + } elseif ( ! $driver instanceof DB_Driver ) {
125 + $error = esc_html__( 'Stream: DB driver must implement DB Driver interface.', 'stream' );
126 + }
127 +
128 + if ( $error ) {
92 129 wp_die(
93 - esc_html__( 'Stream: Could not load chosen DB driver.', 'stream' ),
130 + esc_html( $error ),
94 131 esc_html__( 'Stream DB Error', 'stream' )
95 132 );
96 133 }
97 134
98 - // Load languages
135 + // Load languages.
99 136 add_action( 'plugins_loaded', array( $this, 'i18n' ) );
100 137
101 - // Load logger class
138 + // Load logger class.
102 139 $this->log = apply_filters( 'wp_stream_log_handler', new Log( $this ) );
103 140
104 - // Load settings and connectors after widgets_init and before the default init priority
141 + // Load settings and connectors after widgets_init and before the default init priority.
105 142 add_action( 'init', array( $this, 'init' ), 9 );
106 143
107 - // Add frontend indicator
144 + // Add frontend indicator.
108 145 add_action( 'wp_head', array( $this, 'frontend_indicator' ) );
109 146
110 - // Load admin area classes
147 + // Change DB driver after plugin loaded if any add-ons want to replace.
148 + add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ), 20 );
149 +
150 + // Load admin area classes.
111 151 if ( is_admin() || ( defined( 'WP_STREAM_DEV_DEBUG' ) && WP_STREAM_DEV_DEBUG ) || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
112 152 $this->admin = new Admin( $this );
113 - $this->install = new Install( $this );
153 + $this->install = $driver->setup_storage( $this );
114 154 } elseif ( defined( 'DOING_CRON' ) && DOING_CRON ) {
115 - $this->admin = new Admin( $this );
155 + $this->admin = new Admin( $this, $driver );
116 156 }
117 157
118 - // Load WP-CLI command
158 + // Load WP-CLI command.
119 159 if ( defined( 'WP_CLI' ) && WP_CLI ) {
120 160 \WP_CLI::add_command( self::WP_CLI_COMMAND, 'WP_Stream\CLI' );
121 161 }
122 162 }
@@ -123,11 +163,11 @@
123 163
124 164 /**
125 165 * Autoloader for classes
126 166 *
127 - * @param string $class
167 + * @param string $class Fully qualified classname to be loaded.
128 168 */
129 - function autoload( $class ) {
169 + public function autoload( $class ) {
130 170 if ( ! preg_match( '/^(?P<namespace>.+)\\\\(?P<autoload>[^\\\\]+)$/', $class, $matches ) ) {
131 171 return;
132 172 }
133 173
@@ -158,18 +198,18 @@
158 198 public function i18n() {
159 199 load_plugin_textdomain( 'stream', false, dirname( $this->locations['plugin'] ) . '/languages/' );
160 200 }
161 201
162 - /*
202 + /**
163 203 * Load Settings, Notifications, and Connectors
164 204 *
165 205 * @action init
166 206 */
167 207 public function init() {
168 - $this->settings = new Settings( $this );
169 - $this->connectors = new Connectors( $this );
170 - $this->alerts = new Alerts( $this );
171 - $this->alerts_list = new Alerts_List( $this );
208 + $this->settings = new Settings( $this );
209 + $this->connectors = new Connectors( $this );
210 + $this->alerts = new Alerts( $this );
211 + $this->alerts_list = new Alerts_List( $this );
172 212
173 213 }
174 214
175 215 /**
@@ -180,9 +220,10 @@
180 220 *
181 221 * @return string|void An HTML comment, or nothing if the value is filtered out.
182 222 */
183 223 public function frontend_indicator() {
184 - $comment = sprintf( 'Stream WordPress user activity plugin v%s', esc_html( $this->get_version() ) ); // Localization not needed
224 + /* translators: Localization not needed */
225 + $comment = sprintf( 'Stream WordPress user activity plugin v%s', esc_html( $this->get_version() ) );
185 226
186 227 /**
187 228 * Filter allows the HTML output of the frontend indicator comment
188 229 * to be altered or removed, if desired.
@@ -191,9 +232,9 @@
191 232 */
192 233 $comment = apply_filters( 'wp_stream_frontend_indicator', $comment );
193 234
194 235 if ( ! empty( $comment ) ) {
195 - echo sprintf( "<!-- %s -->\n", esc_html( $comment ) ); // xss ok
236 + echo sprintf( "<!-- %s -->\n", esc_html( $comment ) ); // xss ok.
196 237 }
197 238 }
198 239
199 240 /**
@@ -199,17 +240,15 @@
199 240 /**
200 241 * Version of plugin_dir_url() which works for plugins installed in the plugins directory,
201 242 * and for plugins bundled with themes.
202 243 *
203 - * @throws \Exception
204 - *
205 244 * @return array
206 245 */
207 246 private function locate_plugin() {
208 - $dir_url = trailingslashit( plugins_url( '', dirname( __FILE__ ) ) );
209 - $dir_path = plugin_dir_path( dirname( __FILE__ ) );
210 - $dir_basename = basename( $dir_path );
211 - $plugin_basename = trailingslashit( $dir_basename ) . $dir_basename . '.php';
247 + $dir_url = trailingslashit( plugins_url( '', dirname( __FILE__ ) ) );
248 + $dir_path = plugin_dir_path( dirname( __FILE__ ) );
249 + $dir_basename = basename( $dir_path );
250 + $plugin_basename = trailingslashit( $dir_basename ) . $dir_basename . '.php';
212 251
213 252 return compact( 'dir_url', 'dir_path', 'dir_basename', 'plugin_basename' );
214 253 }
215 254
@@ -219,6 +258,61 @@
219 258 * @return string
220 259 */
221 260 public function get_version() {
222 261 return self::VERSION;
262 + }
263 +
264 + /**
265 + * Change plugin database driver in case driver plugin loaded after stream
266 + */
267 + public function plugins_loaded() {
268 + // Load DB helper interface/class.
269 + $driver_class = apply_filters( 'wp_stream_db_driver', '\WP_Stream\DB_Driver_WPDB' );
270 +
271 + if ( class_exists( $driver_class ) ) {
272 + $driver = new $driver_class();
273 + $this->db = new DB( $driver );
274 + }
275 + }
276 +
277 + /**
278 + * Returns true if Stream is network activated, otherwise false
279 + *
280 + * @return bool
281 + */
282 + public function is_network_activated() {
283 +
284 + $is_network_activated = false;
285 +
286 + if ( $this->is_mustuse() ) {
287 + $is_network_activated = true;
288 + } else {
289 + if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
290 + require_once ABSPATH . '/wp-admin/includes/plugin.php';
291 + }
292 + $is_network_activated = is_plugin_active_for_network( $this->locations['plugin'] );
293 + }
294 +
295 + /**
296 + * Filter allows the network activated detection to be overridden.
297 + *
298 + * @param string $is_network_activated Whether the plugin is network activated.
299 + * @param WP_Stream\Plugin $plugin The stream plugin object.
300 + */
301 + return apply_filters( 'wp_stream_is_network_activated', $is_network_activated, $this );
302 + }
303 +
304 + /**
305 + * Returns true if Stream is a must-use plugin, otherwise false
306 + *
307 + * @return bool
308 + */
309 + public function is_mustuse() {
310 + $stream_php = trailingslashit( WPMU_PLUGIN_DIR ) . $this->locations['plugin'];
311 +
312 + if ( file_exists( $stream_php ) && class_exists( 'WP_Stream\Plugin' ) ) {
313 + return true;
314 + }
315 +
316 + return false;
223 317 }
224 318 }