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