PluginProbe ʕ •ᴥ•ʔ
Pods – Custom Content Types and Fields / 3.1.4.3
Pods – Custom Content Types and Fields v3.1.4.3
2.7.31.4 2.8.23.5 2.9.19.5 3.0.10.5 3.1.4.3 3.2.8.4 3.3.9.2 2.8.23.4 2.9.19.4 3.0.10.4 3.1.4.2 3.2.8.3 3.3.9.1 trunk 1.14.8 2.7.31.3 2.8.23.3 2.9.19.3 3.0.10.3 3.1.4.1 3.2.0 3.2.1 3.2.1.1 3.2.2 3.2.4 3.2.5 3.2.6 3.2.7 3.2.7.1 3.2.8 3.2.8.1 3.2.8.2 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9
pods / sql / upgrade / PodsUpgrade.php
pods / sql / upgrade Last commit date
PodsUpgrade.php 3 days ago PodsUpgrade_2_0_0.php 3 days ago PodsUpgrade_2_1_0.php 3 days ago
PodsUpgrade.php
313 lines
1 <?php
2
3 /**
4 * @package Pods\Upgrade
5 */
6 class PodsUpgrade {
7
8 /**
9 * @var array
10 */
11 public $tables = array();
12
13 /**
14 * @var array
15 */
16 protected $progress = array();
17
18 /**
19 * @var PodsAPI
20 */
21 protected $api = null;
22
23 /**
24 * @var string
25 */
26 protected $version = null;
27
28 /**
29 *
30 */
31 public function __construct() {
32 $this->api = pods_api();
33
34 $this->get_tables();
35 $this->get_progress();
36 }
37
38 /**
39 * @param null $_blog_id Blog ID to install.
40 */
41 public function install( $_blog_id = null ) {
42 /**
43 * @var $wpdb WPDB
44 */
45 global $wpdb;
46
47 // Switch DB table prefixes
48 if ( null !== $_blog_id && $_blog_id !== $wpdb->blogid ) {
49 switch_to_blog( pods_absint( $_blog_id ) );
50 } else {
51 $_blog_id = null;
52 }
53
54 $pods_version = get_option( 'pods_version' );
55
56 do_action( 'pods_install', PODS_VERSION, $pods_version, $_blog_id );
57
58 /**
59 * Allow filtering of whether the Pods SQL installation should be run. Return false to bypass.
60 *
61 * @param bool $run Whether the Pods SQL installation should be run.
62 */
63 $run = apply_filters( 'pods_install_run', true, PODS_VERSION, $pods_version, $_blog_id );
64
65 if ( false !== $run && ! pods_tableless() && 0 === (int) pods_v( 'pods_bypass_install' ) ) {
66 $sql = file_get_contents( PODS_DIR . 'sql/dump.sql' );
67 $sql = apply_filters( 'pods_install_sql', $sql, PODS_VERSION, $pods_version, $_blog_id );
68
69 $charset_collate = 'DEFAULT CHARSET utf8';
70
71 if ( ! empty( $wpdb->charset ) ) {
72 $charset_collate = "DEFAULT CHARSET {$wpdb->charset}";
73 }
74
75 if ( ! empty( $wpdb->collate ) ) {
76 $charset_collate .= " COLLATE {$wpdb->collate}";
77 }
78
79 if ( 'DEFAULT CHARSET utf8' !== $charset_collate ) {
80 $sql = str_replace( 'DEFAULT CHARSET utf8', $charset_collate, $sql );
81 }
82
83 $sql = explode( ";\n", str_replace( array( "\r", 'wp_' ), array( "\n", $wpdb->prefix ), $sql ) );
84 $sql = array_map( 'trim', $sql );
85 $sql = array_filter( $sql );
86
87 foreach ( $sql as $query ) {
88 pods_query( $query, 'Cannot setup SQL tables' );
89 }
90
91 // Auto activate component.
92 if ( ! PodsInit::$components ) {
93 if ( ! pods_light() ) {
94 PodsInit::$components = pods_components();
95 }
96 }
97
98 if ( PodsInit::$components ) {
99 PodsInit::$components->activate_component( 'templates' );
100 PodsInit::$components->activate_component( 'migrate-packages' );
101 }
102 }//end if
103
104 do_action( 'pods_install_post', PODS_VERSION, $pods_version, $_blog_id );
105 }
106
107 /**
108 * Handle dbDelta for Pods tables.
109 *
110 * @since 2.8.9
111 */
112 public function delta_tables() {
113 global $wpdb;
114
115 if ( pods_tableless() ) {
116 return;
117 }
118
119 $pods_version = get_option( 'pods_version' );
120
121 $sql = file_get_contents( PODS_DIR . 'sql/dump.sql' );
122 $sql = apply_filters( 'pods_install_sql', $sql, PODS_VERSION, $pods_version, get_current_blog_id() );
123
124 $charset_collate = 'DEFAULT CHARSET utf8';
125
126 if ( ! empty( $wpdb->charset ) ) {
127 $charset_collate = "DEFAULT CHARSET {$wpdb->charset}";
128 }
129
130 if ( ! empty( $wpdb->collate ) ) {
131 $charset_collate .= " COLLATE {$wpdb->collate}";
132 }
133
134 if ( 'DEFAULT CHARSET utf8' !== $charset_collate ) {
135 $sql = str_replace( 'DEFAULT CHARSET utf8', $charset_collate, $sql );
136 }
137
138 $sql = explode( ";\n", str_replace( array( "\r", 'wp_' ), array( "\n", $wpdb->prefix ), $sql ) );
139
140 // Remove empty lines and queries.
141 $sql = array_map( 'trim', $sql );
142 $sql = array_filter( $sql );
143
144 // dbDelta will handle what we need.
145 $sql = str_replace( 'CREATE TABLE IF NOT EXISTS', 'CREATE TABLE', $sql );
146
147 if ( empty( $sql ) ) {
148 return;
149 }
150
151 require_once ABSPATH . 'wp-admin/includes/upgrade.php';
152
153 dbDelta( $sql );
154 }
155
156 /**
157 *
158 */
159 public function get_tables() {
160 /**
161 * @var $wpdb WPDB
162 */
163 global $wpdb;
164
165 $tables = $wpdb->get_results( "SHOW TABLES LIKE '{$wpdb->prefix}pod%'", ARRAY_N );
166
167 if ( ! empty( $tables ) ) {
168 foreach ( $tables as $table ) {
169 $this->tables[] = $table[0];
170 }
171 }
172 }
173
174 /**
175 *
176 */
177 public function get_progress() {
178 $methods = get_class_methods( $this );
179
180 foreach ( $methods as $method ) {
181 if ( 0 === strpos( $method, 'migrate_' ) ) {
182 $this->progress[ str_replace( 'migrate_', '', $method ) ] = false;
183 }
184 }
185
186 if ( empty( $this->version ) ) {
187 return;
188 }
189
190 $progress = (array) get_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ), [] );
191
192 if ( ! empty( $progress ) ) {
193 $this->progress = array_merge( $this->progress, $progress );
194 }
195 }
196
197 /**
198 * @param $params
199 *
200 * @return mixed|void
201 */
202 public function ajax( $params ) {
203 if ( ! isset( $params->step ) ) {
204 return pods_error( __( 'Invalid upgrade process.', 'pods' ) );
205 }
206
207 if ( ! isset( $params->type ) ) {
208 return pods_error( __( 'Invalid upgrade method.', 'pods' ) );
209 }
210
211 if ( ! method_exists( $this, $params->step . '_' . $params->type ) ) {
212 return pods_error( __( 'Upgrade method not found.', 'pods' ) );
213 }
214
215 return call_user_func( array( $this, $params->step . '_' . $params->type ), $params );
216 }
217
218 /**
219 * @param $method
220 * @param $v
221 * @param null $x
222 */
223 public function update_progress( $method, $v, $x = null ) {
224 if ( empty( $this->version ) ) {
225 return;
226 }
227
228 $method = str_replace( 'migrate_', '', $method );
229
230 if ( null !== $x ) {
231 $this->progress[ $method ][ $x ] = (boolean) $v;
232 } else {
233 $this->progress[ $method ] = $v;
234 }
235
236 update_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ), $this->progress );
237 }
238
239 /**
240 * @param $method
241 * @param null $x
242 *
243 * @return bool
244 */
245 public function check_progress( $method, $x = null ) {
246 $method = str_replace( 'migrate_', '', $method );
247
248 if ( isset( $this->progress[ $method ] ) ) {
249 if ( null === $x ) {
250 return $this->progress[ $method ];
251 } elseif ( isset( $this->progress[ $method ][ $x ] ) ) {
252 return (boolean) $this->progress[ $method ][ $x ];
253 }
254 }
255
256 return false;
257 }
258
259 /**
260 *
261 */
262 public function upgraded() {
263 if ( empty( $this->version ) ) {
264 return;
265 }
266
267 $upgraded = get_option( 'pods_framework_upgraded' );
268
269 if ( empty( $upgraded ) || ! is_array( $upgraded ) ) {
270 $upgraded = array();
271 }
272
273 delete_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ) );
274
275 if ( ! in_array( $this->version, $upgraded, true ) ) {
276 $upgraded[] = $this->version;
277 }
278
279 update_option( 'pods_framework_upgraded', $upgraded );
280 }
281
282 /**
283 *
284 */
285 public function cleanup() {
286 /**
287 * @var $wpdb WPDB
288 */
289 global $wpdb;
290
291 foreach ( $this->tables as $table ) {
292 if ( false !== strpos( $table, "{$wpdb->prefix}pod_" ) || "{$wpdb->prefix}pod" === $table ) {
293 pods_query( "DROP TABLE `{$table}`", false );
294 }
295 }
296
297 delete_option( 'pods_roles' );
298 delete_option( 'pods_version' );
299 delete_option( 'pods_framework_upgrade_2_0' );
300 delete_option( 'pods_framework_upgrade_2_0_sister_ids' );
301 delete_option( 'pods_framework_upgraded_1_x' );
302
303 delete_option( 'pods_disable_file_browser' );
304 delete_option( 'pods_files_require_login' );
305 delete_option( 'pods_files_require_login_cap' );
306 delete_option( 'pods_disable_file_upload' );
307 delete_option( 'pods_upload_require_login' );
308 delete_option( 'pods_upload_require_login_cap' );
309
310 pods_query( "DELETE FROM `@wp_postmeta` WHERE `meta_key` LIKE '_pods_1x_%'" );
311 }
312 }
313