PluginProbe ʕ •ᴥ•ʔ
Pods – Custom Content Types and Fields / 2.9.19.4
Pods – Custom Content Types and Fields v2.9.19.4
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 2 weeks ago PodsUpgrade_2_0_0.php 2 weeks ago PodsUpgrade_2_1_0.php 2 weeks ago
PodsUpgrade.php
311 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 pods_debug( $sql );
154
155 pods_debug( dbDelta( $sql ) );
156 }
157
158 /**
159 *
160 */
161 public function get_tables() {
162 /**
163 * @var $wpdb WPDB
164 */
165 global $wpdb;
166
167 $tables = $wpdb->get_results( "SHOW TABLES LIKE '{$wpdb->prefix}pod%'", ARRAY_N );
168
169 if ( ! empty( $tables ) ) {
170 foreach ( $tables as $table ) {
171 $this->tables[] = $table[0];
172 }
173 }
174 }
175
176 /**
177 *
178 */
179 public function get_progress() {
180 $methods = get_class_methods( $this );
181
182 foreach ( $methods as $method ) {
183 if ( 0 === strpos( $method, 'migrate_' ) ) {
184 $this->progress[ str_replace( 'migrate_', '', $method ) ] = false;
185 }
186 }
187
188 $progress = (array) get_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ), array() );
189
190 if ( ! empty( $progress ) ) {
191 $this->progress = array_merge( $this->progress, $progress );
192 }
193 }
194
195 /**
196 * @param $params
197 *
198 * @return mixed|void
199 */
200 public function ajax( $params ) {
201 if ( ! isset( $params->step ) ) {
202 return pods_error( __( 'Invalid upgrade process.', 'pods' ) );
203 }
204
205 if ( ! isset( $params->type ) ) {
206 return pods_error( __( 'Invalid upgrade method.', 'pods' ) );
207 }
208
209 if ( ! method_exists( $this, $params->step . '_' . $params->type ) ) {
210 return pods_error( __( 'Upgrade method not found.', 'pods' ) );
211 }
212
213 return call_user_func( array( $this, $params->step . '_' . $params->type ), $params );
214 }
215
216 /**
217 * @param $method
218 * @param $v
219 * @param null $x
220 */
221 public function update_progress( $method, $v, $x = null ) {
222 if ( empty( $this->version ) ) {
223 return;
224 }
225
226 $method = str_replace( 'migrate_', '', $method );
227
228 if ( null !== $x ) {
229 $this->progress[ $method ][ $x ] = (boolean) $v;
230 } else {
231 $this->progress[ $method ] = $v;
232 }
233
234 update_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ), $this->progress );
235 }
236
237 /**
238 * @param $method
239 * @param null $x
240 *
241 * @return bool
242 */
243 public function check_progress( $method, $x = null ) {
244 $method = str_replace( 'migrate_', '', $method );
245
246 if ( isset( $this->progress[ $method ] ) ) {
247 if ( null === $x ) {
248 return $this->progress[ $method ];
249 } elseif ( isset( $this->progress[ $method ][ $x ] ) ) {
250 return (boolean) $this->progress[ $method ][ $x ];
251 }
252 }
253
254 return false;
255 }
256
257 /**
258 *
259 */
260 public function upgraded() {
261 if ( empty( $this->version ) ) {
262 return;
263 }
264
265 $upgraded = get_option( 'pods_framework_upgraded' );
266
267 if ( empty( $upgraded ) || ! is_array( $upgraded ) ) {
268 $upgraded = array();
269 }
270
271 delete_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ) );
272
273 if ( ! in_array( $this->version, $upgraded, true ) ) {
274 $upgraded[] = $this->version;
275 }
276
277 update_option( 'pods_framework_upgraded', $upgraded );
278 }
279
280 /**
281 *
282 */
283 public function cleanup() {
284 /**
285 * @var $wpdb WPDB
286 */
287 global $wpdb;
288
289 foreach ( $this->tables as $table ) {
290 if ( false !== strpos( $table, "{$wpdb->prefix}pod_" ) || "{$wpdb->prefix}pod" === $table ) {
291 pods_query( "DROP TABLE `{$table}`", false );
292 }
293 }
294
295 delete_option( 'pods_roles' );
296 delete_option( 'pods_version' );
297 delete_option( 'pods_framework_upgrade_2_0' );
298 delete_option( 'pods_framework_upgrade_2_0_sister_ids' );
299 delete_option( 'pods_framework_upgraded_1_x' );
300
301 delete_option( 'pods_disable_file_browser' );
302 delete_option( 'pods_files_require_login' );
303 delete_option( 'pods_files_require_login_cap' );
304 delete_option( 'pods_disable_file_upload' );
305 delete_option( 'pods_upload_require_login' );
306 delete_option( 'pods_upload_require_login_cap' );
307
308 pods_query( "DELETE FROM `@wp_postmeta` WHERE `meta_key` LIKE '_pods_1x_%'" );
309 }
310 }
311