Issues (1386)

version.php (32 issues)

1
<?php 
2
/**
3
 * Version management for database migrations.
4
 * 
5
 * Database changes require special care:
6
 * - the model has to be adjusted for users installing the plugin
7
 * - the current setup has to be migrated for current users
8
 * 
9
 * These migrations are a way to handle current users. They do *not*
10
 * run on plugin activation.
11
 * 
12
 * Pattern:
13
 * 
14
 * - increment \PodloveSubscribeButton\DATABASE_VERSION constant by 1, e.g.
15
 * 		```php
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
16
 * 		define( __NAMESPACE__ . '\DATABASE_VERSION', 2 );
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
17
 * 		```
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
18
 * 		
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
19
 * - add a case in `\PodloveSubscribeButton\run_migrations_for_version`, e.g.
20
 * 		```php
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
21
 * 		function run_migrations_for_version( $version ) {
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
22
 *			global $wpdb;
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
23
 *			switch ( $version ) {
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
24
 *				case 2:
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
25
 *					$wbdb-> // run sql or whatever
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
26
 *					break;
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
27
 *			}
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
28
 *		}
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
29
 *		```
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
30
 *		
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
31
 *		Feel free to move the migration code into a separate function if it's
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
32
 *		rather complex.
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
33
 *		
0 ignored issues
show
Spaces must be used for mid-line alignment; tabs are not allowed
Loading history...
34
 * - adjust the main model / setup process so new users installing the plugin
35
 *   will have these changes too
36
 *   
37
 * - Test the migrations! :)
38
 */
39
40
namespace PodloveSubscribeButton;
41
use \PodloveSubscribeButton\Model;
42
43
define( __NAMESPACE__ . '\DATABASE_VERSION', 2 );
44
45
add_action( 'admin_init', '\PodloveSubscribeButton\maybe_run_database_migrations' );
46
add_action( 'admin_init', '\PodloveSubscribeButton\run_database_migrations', 5 );
47
48
function maybe_run_database_migrations() {
49
	$database_version = get_option('podlove_subscribe_button_plugin_database_version');
50
51
	if ( $database_version === false ) {
0 ignored issues
show
Use Yoda Condition checks, you must.
Loading history...
52
		// plugin has just been installed or Plugin Version < 1.3
53
		update_option( 'podlove_subscribe_button_plugin_database_version', DATABASE_VERSION );
54
	}
55
}
56
57
function run_database_migrations() {
58
	if (get_option('podlove_subscribe_button_plugin_database_version') >= DATABASE_VERSION)
59
		return;
60
61
	if (is_multisite()) {
0 ignored issues
show
No space after opening parenthesis is prohibited
Loading history...
No space before closing parenthesis is prohibited
Loading history...
62
		set_time_limit(0); // may take a while, depending on network size
63
		\PodloveSubscribeButton\for_every_podcast_blog(function() { migrate_for_current_blog(); });
64
	} else {
65
		migrate_for_current_blog();
66
	}
67
68
	if (isset($_REQUEST['_wp_http_referer']) && $_REQUEST['_wp_http_referer']) {
0 ignored issues
show
No space after opening parenthesis is prohibited
Loading history...
Processing form data without nonce verification.
Loading history...
Missing wp_unslash() before sanitization.
Loading history...
Detected usage of a non-sanitized input variable: $_REQUEST
Loading history...
No space before closing parenthesis is prohibited
Loading history...
69
		wp_redirect($_REQUEST['_wp_http_referer']);
0 ignored issues
show
wp_redirect() found. Using wp_safe_redirect(), along with the allowed_redirect_hosts filter if needed, can help avoid any chances of malicious redirects within code. It is also important to remember to call exit() after a redirect so that no other unwanted code is executed.
Loading history...
Missing wp_unslash() before sanitization.
Loading history...
70
		exit;
71
	}
72
}
73
74
function migrate_for_current_blog() {
75
	$database_version = get_option('podlove_subscribe_button_plugin_database_version');
76
77
	for ($i = $database_version+1; $i <= DATABASE_VERSION; $i++) { 
0 ignored issues
show
No space after opening parenthesis is prohibited
Loading history...
Expected 1 space before "+"; 0 found
Loading history...
Expected 1 space after "+"; 0 found
Loading history...
No space before closing parenthesis is prohibited
Loading history...
78
		\PodloveSubscribeButton\run_migrations_for_version($i);
79
		update_option('podlove_subscribe_button_plugin_database_version', $i);
80
	}
81
}
82
83
/**
84
 * Find and run migration for given version number.
85
 *
86
 * @todo  move migrations into separate files
87
 * 
88
 * @param  int $version
89
 */
90
function run_migrations_for_version( $version ) {
91
	global $wpdb;
92
	
93
	switch ( $version ) {}
94
95
}