PluginProbe
WP-Stateless – Google Cloud Storage / 3.1.0
WP-Stateless – Google Cloud Storage v3.1.0
4.4.3 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.3.0 2.3.1 2.3.2 3.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.2.0 3.2.1 3.2.2 All 62 releases
wp-stateless / lib / classes / class-upgrader.php

class-upgrader.php in WP-Stateless – Google Cloud Storage 3.1.0, at lib/classes/class-upgrader.php

241 lines 7.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Upgrader
5 *
6 * @since 1.2.0
7 */
8
9 namespace wpCloud\StatelessMedia {
10
11 if (!class_exists('wpCloud\StatelessMedia\Upgrader')) {
12
13 final class Upgrader {
14
15 /**
16 * Upgrades data if needed.
17 *
18 */
19 public static function call() {
20 $version = get_site_option('wp_sm_version', false);
21
22 if (!$version && is_multisite()) {
23 $sites = get_sites();
24 foreach ($sites as $site) {
25 switch_to_blog($site->blog_id);
26 $version = get_option('wp_sm_version');
27 if ($version) {
28 restore_current_blog();
29 break;
30 }
31 restore_current_blog();
32 }
33 }
34
35 if (!$version) {
36 self::fresh_install();
37 }
38
39 /* Maybe upgrade blog ( single site ) */
40 self::upgrade();
41
42 /* Maybe upgrade network options */
43 if (ud_get_stateless_media()->is_network_detected(true)) {
44 self::upgrade_network($version);
45 }
46 }
47
48 /**
49 * Upgrade current blog ( or single site )
50 *
51 */
52 private static function upgrade() {
53 global $wpdb;
54
55 $version = get_option('wp_sm_version', false);
56
57 /**
58 * Upgrade to v.1.2.0 requirements
59 */
60 if (!$version || version_compare($version, '1.2.0', '<')) {
61
62 if ($v = get_option('sm.mode')) {
63 update_option('sm_mode', $v);
64 delete_option('sm.mode');
65 }
66
67 $v = get_option('sm_mode');
68 if ($v == '0') update_option('sm_mode', 'disabled');
69 elseif ($v == '1') update_option('sm_mode', 'backup');
70 elseif ($v == '2') update_option('sm_mode', 'cdn');
71
72 if ($v = get_option('sm.service_account_name')) {
73 update_option('sm_service_account_name', $v);
74 delete_option('sm.service_account_name');
75 }
76
77 if ($v = get_option('sm.key_file_path')) {
78 update_option('sm_key_file_path', $v);
79 delete_option('sm.key_file_path');
80 }
81
82 if ($v = get_option('sm.bucket')) {
83 update_option('sm_bucket', $v);
84 delete_option('sm.bucket');
85 }
86
87 delete_option('sm.app_name');
88 delete_option('sm.body_rewrite');
89 delete_option('sm.bucket_url_path');
90 delete_option('sm.post_content_rewrite');
91 }
92
93 update_option('dismissed_notice_stateless_cache_busting', true);
94 if (!$version || version_compare($version, '2.1.7', '<')) {
95 $sm_mode = get_option('sm_mode', null);
96 $hashify_file_name = get_option('sm_hashify_file_name', null);
97 if ($version && $sm_mode == 'stateless' && $hashify_file_name == 'true') {
98 delete_option('dismissed_notice_stateless_cache_busting');
99 }
100 }
101
102 if (!$version || version_compare($version, '2.2.0', '<')) {
103 $sm_synced_files = get_option('sm_synced_files', array());
104 if (!empty($sm_synced_files) && is_array($sm_synced_files)) {
105 $table_name = $wpdb->prefix . SyncNonMedia::table;
106 // Backing up the old data with autoload false.
107 // @todo delete in future release.
108 add_option('__sm_synced_files', $sm_synced_files, null, false);
109
110 $files = array();
111 $place_holders = array();
112 $query = "INSERT INTO $table_name (file, status) VALUES ";
113
114 $sm_synced_files = array_unique($sm_synced_files);
115 foreach ($sm_synced_files as $key => $file) {
116 array_push($files, $file, 'synced');
117 $place_holders[] = "('%s', '%s')"; /* In my case, i know they will always be integers */
118 }
119 $query .= implode(', ', $place_holders);
120 $query = $wpdb->prepare("$query ", $files);
121 $wpdb->query($query);
122
123 delete_option('sm_synced_files');
124 }
125 }
126
127 if (!is_multisite() && $version && version_compare($version, '3.0', '<')) {
128 self::migrate_root_dir();
129 //updating mode name `stateless` to `ephemeral`
130 $sm_mode = get_option('sm_mode');
131 if ($sm_mode == 'stateless') update_option('sm_mode', 'ephemeral');
132 }
133
134 update_option('wp_sm_version', ud_get_stateless_media()->args['version']);
135 }
136
137 /**
138 * Upgrade Network Enabled
139 *
140 */
141 private static function upgrade_network($version) {
142 /**
143 * Upgrade to v.1.2.0 requirements
144 */
145 if (!$version || version_compare($version, '1.2.0', '<')) {
146
147 if ($v = get_site_option('sm.key_file_path')) {
148 update_site_option('sm_key_file_path', $v);
149 delete_site_option('sm.key_file_path');
150 }
151
152 if ($v = get_option('sm.service_account_name')) {
153 update_site_option('sm_service_account_name', $v);
154 delete_site_option('sm.service_account_name');
155 }
156 }
157
158 /**
159 * Upgrade to v.3.0 requirements
160 */
161 if (is_multisite() && $version && version_compare($version, '3.0', '<')) {
162 $sites = get_sites();
163 foreach ($sites as $site) {
164 switch_to_blog($site->blog_id);
165 self::migrate_root_dir(true);
166 //updating mode name `stateless` to `ephemeral`
167 $sm_mode = get_option('sm_mode');
168 if ($sm_mode == 'stateless') update_option('sm_mode', 'ephemeral');
169 restore_current_blog();
170 }
171
172 //removing network option, because sites could uses different setting for Orginize media
173 update_network_option(1, 'sm_root_dir', '');
174
175 //forcing `Cache-Busting` for multisite to prevent replacing media with same filenames
176 update_network_option(1, 'sm_hashify_file_name', 'true');
177
178 $sm_mode_site = get_site_option('sm_mode');
179 if ($sm_mode_site == 'stateless') update_site_option('sm_mode', 'ephemeral');
180 }
181
182 update_site_option('wp_sm_version', ud_get_stateless_media()->args['version']);
183 }
184
185 /**
186 * Fresh install
187 */
188 private static function fresh_install() {
189 if (is_multisite()) {
190 $sites = get_sites();
191 foreach ($sites as $site) {
192 switch_to_blog($site->blog_id);
193 self::migrate_root_dir(true, true);
194 restore_current_blog();
195 }
196 }
197 }
198
199 /**
200 *
201 * @param bool $multisite pass true to use multisite prefix
202 * @param bool $fresh_install for first install
203 * @return string `sm_root_dir` value
204 */
205 private static function migrate_root_dir($multisite = false, $fresh_install = false) {
206 $network_root_dir = get_network_option(1, 'sm_root_dir');
207 $sm_root_dir = $network_root_dir ? $network_root_dir : get_option('sm_root_dir', '');
208 $organize_media = get_option('uploads_use_yearmonth_folders');
209
210 if ($organize_media == '1' && empty($sm_root_dir)) {
211 $sm_root_dir = '/%date_year/date_month%/';
212 } elseif (!empty($sm_root_dir) && $organize_media == '1') {
213 $sm_root_dir = trim($sm_root_dir, ' /') . '/%date_year/date_month%/';
214 } elseif (!empty($sm_root_dir)) {
215 // $sm_root_dir = $sm_root_dir;
216 } elseif ($organize_media != '1') {
217 $sm_root_dir = '';
218 }
219
220 if ($multisite && $fresh_install) {
221 if (empty($sm_root_dir) || $sm_root_dir[0] !== '/') {
222 $sm_root_dir = "/" . $sm_root_dir;
223 }
224 if (false === strpos($sm_root_dir, '/sites/%site_id%')) {
225 $sm_root_dir = '/sites/%site_id%' . $sm_root_dir;
226 }
227 }
228
229 update_option('sm_root_dir', $sm_root_dir);
230
231 if ($multisite) {
232 //forcing `Cache-Busting` for multisite to prevent replacing media with same filenames
233 update_option('sm_hashify_file_name', 'true');
234 }
235
236 return $sm_root_dir;
237 }
238 }
239 }
240 }
241