PluginProbe ʕ •ᴥ•ʔ
Pods – Custom Content Types and Fields / 2.8.23.4
Pods – Custom Content Types and Fields v2.8.23.4
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
310 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 }
101 }//end if
102
103 do_action( 'pods_install_post', PODS_VERSION, $pods_version, $_blog_id );
104 }
105
106 /**
107 * Handle dbDelta for Pods tables.
108 *
109 * @since 2.8.9
110 */
111 public function delta_tables() {
112 global $wpdb;
113
114 if ( pods_tableless() ) {
115 return;
116 }
117
118 $pods_version = get_option( 'pods_version' );
119
120 $sql = file_get_contents( PODS_DIR . 'sql/dump.sql' );
121 $sql = apply_filters( 'pods_install_sql', $sql, PODS_VERSION, $pods_version, get_current_blog_id() );
122
123 $charset_collate = 'DEFAULT CHARSET utf8';
124
125 if ( ! empty( $wpdb->charset ) ) {
126 $charset_collate = "DEFAULT CHARSET {$wpdb->charset}";
127 }
128
129 if ( ! empty( $wpdb->collate ) ) {
130 $charset_collate .= " COLLATE {$wpdb->collate}";
131 }
132
133 if ( 'DEFAULT CHARSET utf8' !== $charset_collate ) {
134 $sql = str_replace( 'DEFAULT CHARSET utf8', $charset_collate, $sql );
135 }
136
137 $sql = explode( ";\n", str_replace( array( "\r", 'wp_' ), array( "\n", $wpdb->prefix ), $sql ) );
138
139 // Remove empty lines and queries.
140 $sql = array_map( 'trim', $sql );
141 $sql = array_filter( $sql );
142
143 // dbDelta will handle what we need.
144 $sql = str_replace( 'CREATE TABLE IF NOT EXISTS', 'CREATE TABLE', $sql );
145
146 if ( empty( $sql ) ) {
147 return;
148 }
149
150 require_once ABSPATH . 'wp-admin/includes/upgrade.php';
151
152 pods_debug( $sql );
153
154 pods_debug( dbDelta( $sql ) );
155 }
156
157 /**
158 *
159 */
160 public function get_tables() {
161 /**
162 * @var $wpdb WPDB
163 */
164 global $wpdb;
165
166 $tables = $wpdb->get_results( "SHOW TABLES LIKE '{$wpdb->prefix}pod%'", ARRAY_N );
167
168 if ( ! empty( $tables ) ) {
169 foreach ( $tables as $table ) {
170 $this->tables[] = $table[0];
171 }
172 }
173 }
174
175 /**
176 *
177 */
178 public function get_progress() {
179 $methods = get_class_methods( $this );
180
181 foreach ( $methods as $method ) {
182 if ( 0 === strpos( $method, 'migrate_' ) ) {
183 $this->progress[ str_replace( 'migrate_', '', $method ) ] = false;
184 }
185 }
186
187 $progress = (array) get_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ), array() );
188
189 if ( ! empty( $progress ) ) {
190 $this->progress = array_merge( $this->progress, $progress );
191 }
192 }
193
194 /**
195 * @param $params
196 *
197 * @return mixed|void
198 */
199 public function ajax( $params ) {
200 if ( ! isset( $params->step ) ) {
201 return pods_error( __( 'Invalid upgrade process.', 'pods' ) );
202 }
203
204 if ( ! isset( $params->type ) ) {
205 return pods_error( __( 'Invalid upgrade method.', 'pods' ) );
206 }
207
208 if ( ! method_exists( $this, $params->step . '_' . $params->type ) ) {
209 return pods_error( __( 'Upgrade method not found.', 'pods' ) );
210 }
211
212 return call_user_func( array( $this, $params->step . '_' . $params->type ), $params );
213 }
214
215 /**
216 * @param $method
217 * @param $v
218 * @param null $x
219 */
220 public function update_progress( $method, $v, $x = null ) {
221 if ( empty( $this->version ) ) {
222 return;
223 }
224
225 $method = str_replace( 'migrate_', '', $method );
226
227 if ( null !== $x ) {
228 $this->progress[ $method ][ $x ] = (boolean) $v;
229 } else {
230 $this->progress[ $method ] = $v;
231 }
232
233 update_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ), $this->progress );
234 }
235
236 /**
237 * @param $method
238 * @param null $x
239 *
240 * @return bool
241 */
242 public function check_progress( $method, $x = null ) {
243 $method = str_replace( 'migrate_', '', $method );
244
245 if ( isset( $this->progress[ $method ] ) ) {
246 if ( null === $x ) {
247 return $this->progress[ $method ];
248 } elseif ( isset( $this->progress[ $method ][ $x ] ) ) {
249 return (boolean) $this->progress[ $method ][ $x ];
250 }
251 }
252
253 return false;
254 }
255
256 /**
257 *
258 */
259 public function upgraded() {
260 if ( empty( $this->version ) ) {
261 return;
262 }
263
264 $upgraded = get_option( 'pods_framework_upgraded' );
265
266 if ( empty( $upgraded ) || ! is_array( $upgraded ) ) {
267 $upgraded = array();
268 }
269
270 delete_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ) );
271
272 if ( ! in_array( $this->version, $upgraded, true ) ) {
273 $upgraded[] = $this->version;
274 }
275
276 update_option( 'pods_framework_upgraded', $upgraded );
277 }
278
279 /**
280 *
281 */
282 public function cleanup() {
283 /**
284 * @var $wpdb WPDB
285 */
286 global $wpdb;
287
288 foreach ( $this->tables as $table ) {
289 if ( false !== strpos( $table, "{$wpdb->prefix}pod_" ) || "{$wpdb->prefix}pod" === $table ) {
290 pods_query( "DROP TABLE `{$table}`", false );
291 }
292 }
293
294 delete_option( 'pods_roles' );
295 delete_option( 'pods_version' );
296 delete_option( 'pods_framework_upgrade_2_0' );
297 delete_option( 'pods_framework_upgrade_2_0_sister_ids' );
298 delete_option( 'pods_framework_upgraded_1_x' );
299
300 delete_option( 'pods_disable_file_browser' );
301 delete_option( 'pods_files_require_login' );
302 delete_option( 'pods_files_require_login_cap' );
303 delete_option( 'pods_disable_file_upload' );
304 delete_option( 'pods_upload_require_login' );
305 delete_option( 'pods_upload_require_login_cap' );
306
307 pods_query( "DELETE FROM `@wp_postmeta` WHERE `meta_key` LIKE '_pods_1x_%'" );
308 }
309 }
310