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