PluginProbe
Stream – Activity Log & Audit Trail / 4.0.2
Stream – Activity Log & Audit Trail v4.0.2
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 +116 -30 3.2.04.0.2 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.2.0';
21 + const VERSION = '4.0.2';
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
@@ -63,8 +90,15 @@
63 90 */
64 91 public $locations = array();
65 92
66 93 /**
94 + * IP address for the current request to be associated with the log entry.
95 + *
96 + * @var null|false|string Valid IP address, null if not set, false if invalid.
97 + */
98 + protected $client_ip_address;
99 +
100 + /**
67 101 * Class constructor
68 102 */
69 103 public function __construct() {
70 104 $locate = $this->locate_plugin();
@@ -78,12 +112,12 @@
78 112 );
79 113
80 114 spl_autoload_register( array( $this, 'autoload' ) );
81 115
82 - // Load helper functions
116 + // Load helper functions.
83 117 require_once $this->locations['inc_dir'] . 'functions.php';
84 118
85 - // Load DB helper interface/class
119 + // Load DB helper interface/class.
86 120 $driver_class = apply_filters( 'wp_stream_db_driver', '\WP_Stream\DB_Driver_WPDB' );
87 121 $driver = null;
88 122
89 123 if ( class_exists( $driver_class ) ) {
@@ -104,24 +138,27 @@
104 138 esc_html__( 'Stream DB Error', 'stream' )
105 139 );
106 140 }
107 141
108 - // Load languages
142 + // Load languages.
109 143 add_action( 'plugins_loaded', array( $this, 'i18n' ) );
110 144
111 - // Load logger class
145 + // Load logger class.
112 146 $this->log = apply_filters( 'wp_stream_log_handler', new Log( $this ) );
113 147
114 - // Load settings and connectors after widgets_init and before the default init priority
148 + // Set the IP address for the current request.
149 + $this->client_ip_address = wp_stream_filter_input( INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP );
150 +
151 + // Load settings and connectors after widgets_init and before the default init priority.
115 152 add_action( 'init', array( $this, 'init' ), 9 );
116 153
117 - // Add frontend indicator
154 + // Add frontend indicator.
118 155 add_action( 'wp_head', array( $this, 'frontend_indicator' ) );
119 156
120 - // Change DB driver after plugin loaded if any add-ons want to replace
121 - add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ) );
157 + // Change DB driver after plugin loaded if any add-ons want to replace.
158 + add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ), 20 );
122 159
123 - // Load admin area classes
160 + // Load admin area classes.
124 161 if ( is_admin() || ( defined( 'WP_STREAM_DEV_DEBUG' ) && WP_STREAM_DEV_DEBUG ) || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
125 162 $this->admin = new Admin( $this );
126 163 $this->install = $driver->setup_storage( $this );
127 164 } elseif ( defined( 'DOING_CRON' ) && DOING_CRON ) {
@@ -127,9 +164,9 @@
127 164 } elseif ( defined( 'DOING_CRON' ) && DOING_CRON ) {
128 165 $this->admin = new Admin( $this, $driver );
129 166 }
130 167
131 - // Load WP-CLI command
168 + // Load WP-CLI command.
132 169 if ( defined( 'WP_CLI' ) && WP_CLI ) {
133 170 \WP_CLI::add_command( self::WP_CLI_COMMAND, 'WP_Stream\CLI' );
134 171 }
135 172 }
@@ -136,12 +173,12 @@
136 173
137 174 /**
138 175 * Autoloader for classes
139 176 *
140 - * @param string $class
177 + * @param string $class_name Fully qualified classname to be loaded.
141 178 */
142 - function autoload( $class ) {
143 - if ( ! preg_match( '/^(?P<namespace>.+)\\\\(?P<autoload>[^\\\\]+)$/', $class, $matches ) ) {
179 + public function autoload( $class_name ) {
180 + if ( ! preg_match( '/^(?P<namespace>.+)\\\\(?P<autoload>[^\\\\]+)$/', $class_name, $matches ) ) {
144 181 return;
145 182 }
146 183
147 184 static $reflection;
@@ -171,19 +208,18 @@
171 208 public function i18n() {
172 209 load_plugin_textdomain( 'stream', false, dirname( $this->locations['plugin'] ) . '/languages/' );
173 210 }
174 211
175 - /*
212 + /**
176 213 * Load Settings, Notifications, and Connectors
177 214 *
178 215 * @action init
179 216 */
180 217 public function init() {
181 - $this->settings = new Settings( $this );
182 - $this->connectors = new Connectors( $this );
183 - $this->alerts = new Alerts( $this );
184 - $this->alerts_list = new Alerts_List( $this );
185 -
218 + $this->settings = new Settings( $this );
219 + $this->connectors = new Connectors( $this );
220 + $this->alerts = new Alerts( $this );
221 + $this->alerts_list = new Alerts_List( $this );
186 222 }
187 223
188 224 /**
189 225 * Displays an HTML comment in the frontend head to indicate that Stream is activated,
@@ -193,9 +229,10 @@
193 229 *
194 230 * @return string|void An HTML comment, or nothing if the value is filtered out.
195 231 */
196 232 public function frontend_indicator() {
197 - $comment = sprintf( 'Stream WordPress user activity plugin v%s', esc_html( $this->get_version() ) ); // Localization not needed
233 + /* translators: Localization not needed */
234 + $comment = sprintf( 'Stream WordPress user activity plugin v%s', esc_html( $this->get_version() ) );
198 235
199 236 /**
200 237 * Filter allows the HTML output of the frontend indicator comment
201 238 * to be altered or removed, if desired.
@@ -204,9 +241,9 @@
204 241 */
205 242 $comment = apply_filters( 'wp_stream_frontend_indicator', $comment );
206 243
207 244 if ( ! empty( $comment ) ) {
208 - echo sprintf( "<!-- %s -->\n", esc_html( $comment ) ); // xss ok
245 + printf( "<!-- %s -->\n", esc_html( $comment ) );
209 246 }
210 247 }
211 248
212 249 /**
@@ -212,17 +249,15 @@
212 249 /**
213 250 * Version of plugin_dir_url() which works for plugins installed in the plugins directory,
214 251 * and for plugins bundled with themes.
215 252 *
216 - * @throws \Exception
217 - *
218 253 * @return array
219 254 */
220 255 private function locate_plugin() {
221 - $dir_url = trailingslashit( plugins_url( '', dirname( __FILE__ ) ) );
222 - $dir_path = plugin_dir_path( dirname( __FILE__ ) );
223 - $dir_basename = basename( $dir_path );
224 - $plugin_basename = trailingslashit( $dir_basename ) . $dir_basename . '.php';
256 + $dir_url = trailingslashit( plugins_url( '', __DIR__ ) );
257 + $dir_path = plugin_dir_path( __DIR__ );
258 + $dir_basename = basename( $dir_path );
259 + $plugin_basename = trailingslashit( $dir_basename ) . $dir_basename . '.php';
225 260
226 261 return compact( 'dir_url', 'dir_path', 'dir_basename', 'plugin_basename' );
227 262 }
228 263
@@ -238,9 +273,9 @@
238 273 /**
239 274 * Change plugin database driver in case driver plugin loaded after stream
240 275 */
241 276 public function plugins_loaded() {
242 - // Load DB helper interface/class
277 + // Load DB helper interface/class.
243 278 $driver_class = apply_filters( 'wp_stream_db_driver', '\WP_Stream\DB_Driver_WPDB' );
244 279
245 280 if ( class_exists( $driver_class ) ) {
246 281 $driver = new $driver_class();
@@ -245,6 +280,57 @@
245 280 if ( class_exists( $driver_class ) ) {
246 281 $driver = new $driver_class();
247 282 $this->db = new DB( $driver );
248 283 }
284 + }
285 +
286 + /**
287 + * Returns true if Stream is network activated, otherwise false
288 + *
289 + * @return bool
290 + */
291 + public function is_network_activated() {
292 +
293 + $is_network_activated = false;
294 +
295 + if ( $this->is_mustuse() ) {
296 + $is_network_activated = true;
297 + } else {
298 + if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
299 + require_once ABSPATH . '/wp-admin/includes/plugin.php';
300 + }
301 + $is_network_activated = is_plugin_active_for_network( $this->locations['plugin'] );
302 + }
303 +
304 + /**
305 + * Filter allows the network activated detection to be overridden.
306 + *
307 + * @param string $is_network_activated Whether the plugin is network activated.
308 + * @param WP_Stream\Plugin $plugin The stream plugin object.
309 + */
310 + return apply_filters( 'wp_stream_is_network_activated', $is_network_activated, $this );
311 + }
312 +
313 + /**
314 + * Returns true if Stream is a must-use plugin, otherwise false
315 + *
316 + * @return bool
317 + */
318 + public function is_mustuse() {
319 + $stream_php = trailingslashit( WPMU_PLUGIN_DIR ) . $this->locations['plugin'];
320 +
321 + if ( file_exists( $stream_php ) && class_exists( 'WP_Stream\Plugin' ) ) {
322 + return true;
323 + }
324 +
325 + return false;
326 + }
327 +
328 + /**
329 + * Get the IP address for the current request.
330 + *
331 + * @return false|null|string Valid IP address, null if not set, false if invalid.
332 + */
333 + public function get_client_ip_address() {
334 + return apply_filters( 'wp_stream_client_ip_address', $this->client_ip_address );
249 335 }
250 336 }