PluginProbe
Stream – Activity Log & Audit Trail / 3.9.0
Stream – Activity Log & Audit Trail v3.9.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-install.php +72 -105 3.2.13.9.0 View file →
@@ -1,10 +1,20 @@
1 1 <?php
2 +/**
3 + * Handles database migrations
4 + *
5 + * @package WP_Stream
6 + */
7 +
2 8 namespace WP_Stream;
3 9
10 +/**
11 + * Class - Install
12 + */
4 13 class Install {
5 14 /**
6 - * Hold Plugin class
15 + * Holds Instance of plugin object
16 + *
7 17 * @var Plugin
8 18 */
9 19 public $plugin;
10 20
@@ -51,8 +61,10 @@
51 61 public $success_db;
52 62
53 63 /**
54 64 * Class constructor
65 + *
66 + * @param Plugin $plugin Instance of plugin object.
55 67 */
56 68 public function __construct( $plugin ) {
57 69 $this->plugin = $plugin;
58 70
@@ -58,14 +70,14 @@
58 70
59 71 $this->db_version = $this->get_db_version();
60 72 $this->stream_url = self_admin_url( $this->plugin->admin->admin_parent_page . '&page=' . $this->plugin->admin->settings_page_slug );
61 73
62 - // Check DB and display an admin notice if there are tables missing
63 - add_action( 'init', array( $this, 'verify_db' ) );
74 + // Ensure the tables are created even when the plugin activation hook does not run,
75 + // and run the check in WP Admin or on WP CLI to avoid extra frontend load.
76 + if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
77 + $this->check();
78 + }
64 79
65 - // Install the plugin
66 - add_action( 'wp_stream_before_db_notices', array( $this, 'check' ) );
67 -
68 80 register_activation_hook( $this->plugin->locations['plugin'], array( $this, 'check' ) );
69 81 }
70 82
71 83 /**
@@ -81,9 +93,8 @@
81 93 }
82 94
83 95 if ( empty( $this->db_version ) ) {
84 96 $this->install( $this->plugin->get_version() );
85 -
86 97 return;
87 98 }
88 99
89 100 if ( $this->plugin->get_version() === $this->db_version ) {
@@ -89,17 +100,32 @@
89 100 if ( $this->plugin->get_version() === $this->db_version ) {
90 101 return;
91 102 }
92 103
93 - $update = isset( $_REQUEST['wp_stream_update'] ) ? $_REQUEST['wp_stream_update'] : null;
104 + $update = null;
105 + if ( isset( $_REQUEST['wp_stream_update'] ) && wp_verify_nonce( 'wp_stream_update_db' ) ) {
106 + $update = esc_attr( $_REQUEST['wp_stream_update'] );
107 + }
94 108
95 109 if ( ! $update ) {
96 110 $this->update_required = true;
97 - $this->success_db = $this->update( $this->db_version, $this->plugin->get_version(), array( 'type' => 'auto' ) );
111 + $this->success_db = $this->update(
112 + $this->db_version,
113 + $this->plugin->get_version(),
114 + array(
115 + 'type' => 'auto',
116 + )
117 + );
98 118 }
99 119
100 120 if ( 'update_and_continue' === $update ) {
101 - $this->success_db = $this->update( $this->db_version, $this->plugin->get_version(), array( 'type' => 'user' ) );
121 + $this->success_db = $this->update(
122 + $this->db_version,
123 + $this->plugin->get_version(),
124 + array(
125 + 'type' => 'user',
126 + )
127 + );
102 128 }
103 129
104 130 $versions = $this->db_update_versions();
105 131
@@ -111,83 +137,12 @@
111 137 $this->update_db_option();
112 138 }
113 139
114 140 /**
115 - * Verify that the required DB tables exists
116 - *
117 - * @return void
118 - */
119 - public function verify_db() {
120 - /**
121 - * Filter will halt install() if set to true
122 - *
123 - * @param bool
124 - *
125 - * @return bool
126 - */
127 - if ( apply_filters( 'wp_stream_no_tables', false ) ) {
128 - return;
129 - }
130 -
131 - if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
132 - require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
133 - }
134 -
135 - /**
136 - * Fires before admin notices are triggered for missing database tables.
137 - */
138 - do_action( 'wp_stream_before_db_notices' );
139 -
140 - global $wpdb;
141 -
142 - $database_message = '';
143 - $uninstall_message = '';
144 -
145 - // Check if all needed DB is present
146 - $missing_tables = array();
147 -
148 - foreach ( $this->plugin->db->get_table_names() as $table_name ) {
149 - $table_search = $wpdb->get_var(
150 - $wpdb->prepare( 'SHOW TABLES LIKE %s', $table_name )
151 - );
152 - if ( $table_search !== $table_name ) {
153 - $missing_tables[] = $table_name;
154 - }
155 - }
156 -
157 - if ( $missing_tables ) {
158 - $database_message .= sprintf(
159 - '%s <strong>%s</strong>',
160 - _n(
161 - 'The following table is not present in the WordPress database:',
162 - 'The following tables are not present in the WordPress database:',
163 - count( $missing_tables ),
164 - 'stream'
165 - ),
166 - esc_html( implode( ', ', $missing_tables ) )
167 - );
168 - }
169 -
170 - if ( is_plugin_active_for_network( $this->plugin->locations['plugin'] ) && current_user_can( 'manage_network_plugins' ) ) {
171 - $uninstall_message = sprintf( __( 'Please <a href="%s">uninstall</a> the Stream plugin and activate it again.', 'stream' ), network_admin_url( 'plugins.php#stream' ) );
172 - } elseif ( current_user_can( 'activate_plugins' ) ) {
173 - $uninstall_message = sprintf( __( 'Please <a href="%s">uninstall</a> the Stream plugin and activate it again.', 'stream' ), admin_url( 'plugins.php#stream' ) );
174 - }
175 -
176 - if ( ! empty( $database_message ) ) {
177 - $this->plugin->admin->notice( $database_message );
178 -
179 - if ( ! empty( $uninstall_message ) ) {
180 - $this->plugin->admin->notice( $uninstall_message );
181 - }
182 - }
183 - }
184 -
185 - /**
186 141 * Register a routine to be called when stream or a stream connector has been updated
187 142 * It works by comparing the current version with the version previously stored in the database.
188 143 *
189 - * @param string $file A reference to the main plugin file
144 + * @param string $file A reference to the main plugin file.
190 145 * @param string $callback The function to run when the hook is called.
191 146 * @param string $version The version to which the plugin is updating.
192 147 *
193 148 * @return void
@@ -198,9 +153,9 @@
198 153 }
199 154
200 155 $plugin = plugin_basename( $file );
201 156
202 - if ( is_plugin_active_for_network( $plugin ) ) {
157 + if ( $this->plugin->is_network_activated() ) {
203 158 $current_versions = get_site_option( $this->option_key . '_connectors', array() );
204 159 $network = true;
205 160 } elseif ( is_plugin_active( $plugin ) ) {
206 161 $current_versions = get_option( $this->option_key . '_connectors', array() );
@@ -219,13 +174,13 @@
219 174 update_site_option( $this->option_key . '_registered_connectors', $current_versions );
220 175 } else {
221 176 update_option( $this->option_key . '_registered_connectors', $current_versions );
222 177 }
223 -
224 - return;
225 178 }
226 179
227 180 /**
181 + * Returns the database version.
182 + *
228 183 * @return string
229 184 */
230 185 public function get_db_version() {
231 186 return get_site_option( $this->option_key );
@@ -231,9 +186,9 @@
231 186 return get_site_option( $this->option_key );
232 187 }
233 188
234 189 /**
235 - * @return void
190 + * Checks if migration was successful.
236 191 */
237 192 public function update_db_option() {
238 193 if ( $this->success_db ) {
239 194 $success_op = update_site_option( $this->option_key, $this->plugin->get_version() );
@@ -264,9 +219,12 @@
264 219 if ( ! current_user_can( $this->plugin->admin->view_cap ) ) {
265 220 return;
266 221 }
267 222
268 - $update = isset( $_REQUEST['wp_stream_update'] ) ? $_REQUEST['wp_stream_update'] : null;
223 + $update = null;
224 + if ( isset( $_REQUEST['wp_stream_update'] ) && wp_verify_nonce( 'wp_stream_update_db' ) ) {
225 + $update = esc_attr( $_REQUEST['wp_stream_update'] );
226 + }
269 227
270 228 if ( ! $update ) {
271 229 $this->prompt_update();
272 230
@@ -288,15 +246,15 @@
288 246 */
289 247 public function prompt_update() {
290 248 ?>
291 249 <div class="error">
292 - <form method="post" action="<?php echo esc_url( remove_query_arg( 'wp_stream_update' ) ) ?>">
293 - <?php wp_nonce_field( 'wp_stream_update_db' ) ?>
250 + <form method="post" action="<?php echo esc_url( remove_query_arg( 'wp_stream_update' ) ); ?>">
251 + <?php wp_nonce_field( 'wp_stream_update_db' ); ?>
294 252 <input type="hidden" name="wp_stream_update" value="update_and_continue"/>
295 - <p><strong><?php esc_html_e( 'Stream Database Update Required', 'stream' ) ?></strong></p>
296 - <p><?php esc_html_e( 'Stream has updated! Before we send you on your way, we need to update your database to the newest version.', 'stream' ) ?></p>
297 - <p><?php esc_html_e( 'This process could take a little while, so please be patient.', 'stream' ) ?></p>
298 - <?php submit_button( esc_html__( 'Update Database', 'stream' ), 'primary', 'stream-update-db-submit' ) ?>
253 + <p><strong><?php esc_html_e( 'Stream Database Update Required', 'stream' ); ?></strong></p>
254 + <p><?php esc_html_e( 'Stream has updated! Before we send you on your way, we need to update your database to the newest version.', 'stream' ); ?></p>
255 + <p><?php esc_html_e( 'This process could take a little while, so please be patient.', 'stream' ); ?></p>
256 + <?php submit_button( esc_html__( 'Update Database', 'stream' ), 'primary', 'stream-update-db-submit' ); ?>
299 257 </form>
300 258 </div>
301 259 <?php
302 260 }
@@ -312,12 +270,21 @@
312 270
313 271 $this->update_db_option();
314 272 ?>
315 273 <div class="updated">
316 - <form method="post" action="<?php echo esc_url( remove_query_arg( 'wp_stream_update' ) ) ?>" style="display:inline;">
317 - <p><strong><?php esc_html_e( 'Update Complete', 'stream' ) ?></strong></p>
318 - <p><?php printf( esc_html__( 'Your Stream database has been successfully updated from %1$s to %2$s!', 'stream' ), esc_html( $this->db_version ), esc_html( $this->plugin->get_version() ) ); ?></p>
319 - <?php submit_button( esc_html__( 'Continue', 'stream' ), 'secondary', false ) ?>
274 + <form method="post" action="<?php echo esc_url( remove_query_arg( 'wp_stream_update' ) ); ?>" style="display:inline;">
275 + <p><strong><?php esc_html_e( 'Update Complete', 'stream' ); ?></strong></p>
276 + <p>
277 + <?php
278 + printf(
279 + /* translators: %1$s: old version, %2$s: new version (e.g. "4.2") */
280 + esc_html__( 'Your Stream database has been successfully updated from %1$s to %2$s!', 'stream' ),
281 + esc_html( $this->db_version ),
282 + esc_html( $this->plugin->get_version() )
283 + );
284 + ?>
285 + </p>
286 + <?php submit_button( esc_html__( 'Continue', 'stream' ), 'secondary', false ); ?>
320 287 </form>
321 288 </div>
322 289 <?php
323 290 }
@@ -333,11 +300,11 @@
333 300 * @return array
334 301 */
335 302 public function db_update_versions() {
336 303 $db_update_versions = array(
337 - '3.0.0' /* @version 3.0.0 Drop the stream_context table, changes to stream table */,
338 - '3.0.2' /* @version 3.0.2 Fix uppercase values in stream table, connector column */,
339 - '3.0.8' /* @version 3.0.8 Increase size of user role IDs, user_roll column */,
304 + '3.0.0', /* @version 3.0.0 Drop the stream_context table, changes to stream table */
305 + '3.0.2', /* @version 3.0.2 Fix uppercase values in stream table, connector column */
306 + '3.0.8', /* @version 3.0.8 Increase size of user role IDs, user_roll column */
340 307 );
341 308
342 309 /**
343 310 * Filter to alter the DB update versions array
@@ -351,17 +318,17 @@
351 318
352 319 /**
353 320 * Database user controlled update routine
354 321 *
355 - * @param int $db_version
356 - * @param int $current_version
357 - * @param array $update_args
322 + * @param int $db_version Next database version.
323 + * @param int $current_version Current database version.
324 + * @param array $update_args Update options.
358 325 *
359 326 * @return mixed Version number on success, true on no update needed, mysql error message on error
360 327 */
361 328 public function update( $db_version, $current_version, $update_args ) {
362 329 $versions = $this->db_update_versions();
363 - include_once( $this->plugin->locations['inc_dir'] . 'db-updates.php' );
330 + include_once $this->plugin->locations['inc_dir'] . 'db-updates.php';
364 331
365 332 foreach ( $versions as $version ) {
366 333 if ( ! isset( $update_args['type'] ) ) {
367 334 $update_args['type'] = 'user';
@@ -383,9 +350,9 @@
383 350
384 351 /**
385 352 * Initial database install routine
386 353 *
387 - * @param string $current_version
354 + * @param string $current_version Current database version.
388 355 *
389 356 * @return string
390 357 */
391 358 public function install( $current_version ) {