PageRenderTime 49ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/sql/update-1.x.php

https://github.com/ElmsPark/pods
PHP | 419 lines | 293 code | 104 blank | 22 comment | 37 complexity | a8cc95fe2ad678fe71941d1cdacaa0c4 MD5 | raw file
Possible License(s): AGPL-1.0
  1. <?php
  2. /**
  3. * @package Pods\Upgrade
  4. */
  5. global $wpdb;
  6. if ( version_compare( $old_version, '1.2.6', '<' ) ) {
  7. // Add the "required" option
  8. pods_query( "ALTER TABLE @wp_pod_fields ADD COLUMN required BOOL default 0 AFTER sister_field_id" );
  9. // Add the "label" option
  10. pods_query( "ALTER TABLE @wp_pod_fields ADD COLUMN label VARCHAR(32) AFTER name" );
  11. // Fix table prefixes
  12. if ( !empty( $table_prefix ) ) {
  13. $result = $wpdb->get_results( "SHOW TABLES LIKE 'tbl_%'", ARRAY_N );
  14. foreach ( $result as $row ) {
  15. pods_query( "RENAME TABLE `{$row[0]}` TO `@wp_{$row[0]}`" );
  16. }
  17. }
  18. // Change the "post_type" of all pod items
  19. $result = pods_query( "SELECT id, name FROM @wp_pod_types" );
  20. foreach ( $result as $row ) {
  21. $datatypes[ $row->id ] = $row->name;
  22. }
  23. $result = pods_query( "SELECT post_id, datatype FROM @wp_pod" );
  24. foreach ( $result as $row ) {
  25. $datatype = $datatypes[ $row->datatype ];
  26. pods_query( "UPDATE @wp_posts SET post_type = '$datatype' WHERE ID = $row[0] LIMIT 1" );
  27. }
  28. update_option( 'pods_version', '126' );
  29. }
  30. if ( version_compare( $old_version, '1.2.7', '<' ) ) {
  31. // Add the "comment" option
  32. pods_query( "ALTER TABLE @wp_pod_fields ADD COLUMN comment VARCHAR(128) AFTER label" );
  33. update_option( 'pods_version', '127' );
  34. }
  35. if ( version_compare( $old_version, '1.3.1', '<' ) ) {
  36. $result = $wpdb->get_results( "SHOW TABLES LIKE '{$wpdb->prefix}tbl_%'", ARRAY_N );
  37. foreach ( $result as $row ) {
  38. $rename = explode( 'tbl_', $row[ 0 ] );
  39. pods_query( "RENAME TABLE `{$row[0]}` TO `@wp_pod_tbl_{$rename[1]}`" );
  40. }
  41. update_option( 'pods_version', '131' );
  42. }
  43. if ( version_compare( $old_version, '1.3.2', '<' ) ) {
  44. pods_query( "UPDATE @wp_pod_pages SET phpcode = CONCAT('<" . "?" . "php\n', phpcode) WHERE phpcode NOT LIKE '" . "?" . ">%'" );
  45. pods_query( "UPDATE @wp_pod_pages SET phpcode = SUBSTR(phpcode, 3) WHERE phpcode LIKE '" . "?" . ">%'" );
  46. pods_query( "UPDATE @wp_pod_widgets SET phpcode = CONCAT('<" . "?" . "php\n', phpcode) WHERE phpcode NOT LIKE '" . "?" . ">%'" );
  47. pods_query( "UPDATE @wp_pod_widgets SET phpcode = SUBSTR(phpcode, 3) WHERE phpcode LIKE '" . "?" . ">%'" );
  48. update_option( 'pods_version', '132' );
  49. }
  50. if ( version_compare( $old_version, '1.4.3', '<' ) ) {
  51. $result = pods_query( "SHOW COLUMNS FROM @wp_pod_types LIKE 'description'" );
  52. if ( 0 < count( $result ) )
  53. pods_query( "ALTER TABLE @wp_pod_types CHANGE description label VARCHAR(32)" );
  54. pods_query( "ALTER TABLE @wp_pod_types ADD COLUMN is_toplevel BOOL default 0 AFTER label" );
  55. update_option( 'pods_version', '143' );
  56. }
  57. if ( version_compare( $old_version, '1.4.5', '<' ) ) {
  58. pods_query( "ALTER TABLE @wp_pod_pages ADD COLUMN title VARCHAR(128) AFTER uri" );
  59. $sql = "
  60. CREATE TABLE @wp_pod_menu (
  61. id INT unsigned auto_increment primary key,
  62. uri VARCHAR(128),
  63. title VARCHAR(128),
  64. lft INT unsigned,
  65. rgt INT unsigned,
  66. weight TINYINT unsigned default 0)";
  67. pods_query( $sql );
  68. pods_query( "INSERT INTO @wp_pod_menu (uri, title, lft, rgt) VALUES ('/', 'Home', 1, 2)" );
  69. update_option( 'pods_version', '145' );
  70. }
  71. if ( version_compare( $old_version, '1.4.8', '<' ) ) {
  72. add_option( 'pods_roles' );
  73. update_option( 'pods_version', '148' );
  74. }
  75. if ( version_compare( $old_version, '1.4.9', '<' ) ) {
  76. pods_query( "RENAME TABLE @wp_pod_widgets TO @wp_pod_helpers" );
  77. update_option( 'pods_version', '149' );
  78. }
  79. if ( version_compare( $old_version, '1.5', '<' ) ) {
  80. pods_query( "ALTER TABLE @wp_pod_fields ADD COLUMN `unique` BOOL default 0 AFTER required" );
  81. pods_query( "ALTER TABLE @wp_pod_fields ADD COLUMN `multiple` BOOL default 0 AFTER `unique`" );
  82. pods_query( "ALTER TABLE @wp_pod_pages ADD COLUMN page_template VARCHAR(128) AFTER phpcode" );
  83. pods_query( "ALTER TABLE @wp_pod_helpers ADD COLUMN helper_type VARCHAR(16) AFTER name" );
  84. pods_query( "ALTER TABLE @wp_pod ADD COLUMN name VARCHAR(128) AFTER datatype" );
  85. pods_query( "ALTER TABLE @wp_pod ADD COLUMN created VARCHAR(128) AFTER name" );
  86. pods_query( "ALTER TABLE @wp_pod ADD COLUMN modified VARCHAR(128) AFTER created" );
  87. pods_query( "ALTER TABLE @wp_pod CHANGE row_id tbl_row_id INT unsigned" );
  88. pods_query( "ALTER TABLE @wp_pod_rel CHANGE term_id tbl_row_id INT unsigned" );
  89. pods_query( "ALTER TABLE @wp_pod_rel CHANGE post_id pod_id INT unsigned" );
  90. pods_query( "ALTER TABLE @wp_pod_rel CHANGE sister_post_id sister_pod_id INT unsigned" );
  91. // Make all pick columns "multiple" for consistency
  92. pods_query( "UPDATE @wp_pod_fields SET `multiple` = 1 WHERE coltype = 'pick'" );
  93. // Use "display" as the default helper type
  94. pods_query( "UPDATE @wp_pod_helpers SET helper_type = 'display'" );
  95. // Replace all post_ids with its associated pod_id
  96. $sql = "
  97. SELECT
  98. p.id, p.post_id, r.post_title AS name, r.post_date AS created, r.post_modified AS modified
  99. FROM
  100. @wp_pod p
  101. INNER JOIN
  102. @wp_posts r ON r.ID = p.post_id
  103. ";
  104. $result = pods_query( $sql );
  105. foreach ( $result as $row ) {
  106. $row = get_object_vars( $row );
  107. foreach ( $row as $key => $val ) {
  108. ${$key} = esc_sql( trim( $val ) );
  109. }
  110. $posts_to_delete[] = $post_id;
  111. $all_pod_ids[ $post_id ] = $id;
  112. pods_query( "UPDATE @wp_pod SET name = '$name', created = '$created', modified = '$modified' WHERE id = $id LIMIT 1" );
  113. }
  114. // Replace post_id with pod_id
  115. $result = pods_query( "SELECT id, pod_id, sister_pod_id FROM @wp_pod_rel" );
  116. foreach ( $result as $row ) {
  117. $id = $row->id;
  118. $new_pod_id = $all_pod_ids[ $row->pod_id ];
  119. $new_sister_pod_id = $all_pod_ids[ $row->sister_pod_id ];
  120. pods_query( "UPDATE @wp_pod_rel SET pod_id = '$new_pod_id', sister_pod_id = '$new_sister_pod_id' WHERE id = '$id' LIMIT 1" );
  121. }
  122. $posts_to_delete = implode( ',', $posts_to_delete );
  123. // Remove all traces from wp_posts
  124. pods_query( "ALTER TABLE @wp_pod DROP COLUMN post_id" );
  125. pods_query( "DELETE FROM @wp_posts WHERE ID IN ($posts_to_delete)" );
  126. update_option( 'pods_version', '150' );
  127. }
  128. if ( version_compare( $old_version, '1.5.1', '<' ) ) {
  129. pods_query( "ALTER TABLE @wp_pod_fields ADD COLUMN helper VARCHAR(32) AFTER label" );
  130. pods_query( "ALTER TABLE @wp_pod_types ADD COLUMN before_helpers TEXT AFTER tpl_list" );
  131. pods_query( "ALTER TABLE @wp_pod_types ADD COLUMN after_helpers TEXT AFTER before_helpers" );
  132. update_option( 'pods_version', '151' );
  133. }
  134. if ( version_compare( $old_version, '1.6.0', '<' ) ) {
  135. // Add the "templates" table
  136. $sql = "
  137. CREATE TABLE IF NOT EXISTS @wp_pod_templates (
  138. id INT unsigned auto_increment primary key,
  139. name VARCHAR(32),
  140. code TEXT)";
  141. pods_query( $sql );
  142. // Add list and detail template presets
  143. $tpl_list = '<p><a href="{@detail_url}">{@name}</a></p>';
  144. $tpl_detail = "<h2>{@name}</h2>\n{@body}";
  145. pods_query( "INSERT INTO @wp_pod_templates (name, code) VALUES ('detail', '$tpl_detail'),('list', '$tpl_list')" );
  146. // Try to route old templates as best as possible
  147. $result = pods_query( "SELECT name, tpl_detail, tpl_list FROM @wp_pod_types" );
  148. foreach ( $result as $row ) {
  149. // Create the new template, e.g. "dtname_list" or "dtname_detail"
  150. $row = pods_sanitize( $row );
  151. pods_query( "INSERT INTO @wp_pod_templates (name, code) VALUES ('{$row->name}_detail', '{$row->tpl_detail}'),('{$row->name}_list', '{$row->tpl_list}')" );
  152. }
  153. // Drop the "tpl_detail" and "tpl_list" columns
  154. pods_query( "ALTER TABLE @wp_pod_types DROP COLUMN tpl_detail, DROP COLUMN tpl_list" );
  155. // Add the "pick_filter" column
  156. pods_query( "ALTER TABLE @wp_pod_fields ADD COLUMN pick_filter VARCHAR(128) AFTER pickval" );
  157. update_option( 'pods_version', '160' );
  158. }
  159. if ( version_compare( $old_version, '1.6.2', '<' ) ) {
  160. // Remove all beginning and ending slashes from Pod Pages
  161. pods_query( "UPDATE @wp_pod_pages SET uri = TRIM(BOTH '/' FROM uri)" );
  162. update_option( 'pods_version', '162' );
  163. }
  164. if ( version_compare( $old_version, '1.6.4', '<' ) ) {
  165. pods_query( "ALTER TABLE @wp_pod_fields ADD COLUMN pick_orderby TEXT AFTER pick_filter" );
  166. pods_query( "ALTER TABLE @wp_pod_fields CHANGE helper display_helper TEXT" );
  167. pods_query( "ALTER TABLE @wp_pod_fields ADD COLUMN input_helper TEXT AFTER display_helper" );
  168. update_option( 'pods_version', '164' );
  169. }
  170. if ( version_compare( $old_version, '1.6.7', '<' ) ) {
  171. pods_query( "ALTER TABLE @wp_pod_pages ADD COLUMN precode LONGTEXT AFTER phpcode" );
  172. update_option( 'pods_version', '167' );
  173. }
  174. if ( version_compare( $old_version, '1.7.3', '<' ) ) {
  175. pods_query( "ALTER TABLE @wp_pod_types ADD COLUMN detail_page VARCHAR(128) AFTER is_toplevel" );
  176. update_option( 'pods_version', '173' );
  177. }
  178. if ( version_compare( $old_version, '1.7.5', '<' ) ) {
  179. if ( empty( $pods_roles ) && !is_array( $pods_roles ) ) {
  180. $pods_roles = @unserialize( get_option( 'pods_roles' ) );
  181. if ( !is_array( $pods_roles ) )
  182. $pods_roles = array();
  183. }
  184. if ( is_array( $pods_roles ) ) {
  185. foreach ( $pods_roles as $role => $privs ) {
  186. if ( in_array( 'manage_podpages', $privs ) ) {
  187. $pods_roles[ $role ][] = 'manage_pod_pages';
  188. unset( $pods_roles[ $role ][ 'manage_podpages' ] );
  189. }
  190. }
  191. }
  192. delete_option( 'pods_roles' );
  193. add_option( 'pods_roles', serialize( $pods_roles ) );
  194. update_option( 'pods_version', '175' );
  195. }
  196. if ( version_compare( $old_version, '1.7.6', '<' ) ) {
  197. pods_query( "ALTER TABLE @wp_pod_types CHANGE label label VARCHAR(128)" );
  198. pods_query( "ALTER TABLE @wp_pod_fields CHANGE label label VARCHAR(128)" );
  199. $result = pods_query( "SELECT f.id AS field_id, f.name AS field_name, f.datatype AS datatype_id, dt.name AS datatype FROM @wp_pod_fields AS f LEFT JOIN @wp_pod_types AS dt ON dt.id = f.datatype WHERE f.coltype='file'" );
  200. foreach ( $result as $row ) {
  201. $items = pods_query( "SELECT t.id AS tbl_row_id, t.{$row->field_name} AS file, p.id AS pod_id FROM @wp_pod_tbl_{$row->datatype} AS t LEFT JOIN @wp_pod AS p ON p.tbl_row_id = t.id AND p.datatype = {$row->datatype_id} WHERE t.{$row->field_name} != '' AND t.{$row->field_name} IS NOT NULL" );
  202. $success = false;
  203. $rels = array();
  204. foreach ( (array) $items as $item ) {
  205. $filename = $item->file;
  206. if ( strpos( $filename, get_bloginfo( 'wpurl' ) ) !== false && strpos( $filename, get_bloginfo( 'wpurl' ) ) == 0 )
  207. $filename = ltrim( $filename, get_bloginfo( 'wpurl' ) );
  208. $upload_dir = wp_upload_dir();
  209. if ( strpos( $filename, str_replace( get_bloginfo( 'wpurl' ), '', $upload_dir[ 'baseurl' ] ) ) === false ) {
  210. $success = false;
  211. break;
  212. }
  213. $file = str_replace( '//', '/', ( ABSPATH . $filename ) );
  214. $wp_filetype = wp_check_filetype( basename( $file ), null );
  215. $attachment = array(
  216. 'post_mime_type' => $wp_filetype[ 'type' ],
  217. 'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $file ) ),
  218. 'guid' => str_replace( '//wp-content/', '/wp-content/', get_bloginfo( 'wpurl' ) . $filename ),
  219. 'post_content' => '',
  220. 'post_status' => 'inherit'
  221. );
  222. $attach_id = wp_insert_attachment( $attachment, $file, 0 );
  223. if ( $attach_id > 0 ) {
  224. require_once( ABSPATH . "wp-admin" . '/includes/image.php' );
  225. $attach_data = wp_generate_attachment_metadata( $attach_id, $file );
  226. wp_update_attachment_metadata( $attach_id, $attach_data );
  227. $sizes = array( 'thumb', 'medium', 'large' );
  228. foreach ( $sizes as $size ) {
  229. image_downsize( $attach_id, $size );
  230. }
  231. $rels[] = array( 'pod_id' => $item->pod_id, 'tbl_row_id' => $item->tbl_row_id, 'attach_id' => $attach_id, 'field_id' => $row->field_id );
  232. $success = true;
  233. }
  234. }
  235. if ( false !== $success ) {
  236. foreach ( $rels as $rel ) {
  237. pods_query( "INSERT INTO @wp_pod_rel (pod_id, field_id, tbl_row_id) VALUES({$rel['pod_id']}, {$rel['field_id']}, {$rel['attach_id']})" );
  238. }
  239. pods_query( "ALTER TABLE @wp_pod_tbl_{$row->datatype} DROP COLUMN {$row->field_name}" );
  240. }
  241. else
  242. pods_query( "UPDATE @wp_pod_fields SET coltype = 'txt' WHERE id = {$row->field_id}" );
  243. }
  244. update_option( 'pods_version', '176' );
  245. }
  246. if ( version_compare( $old_version, '1.8.1', '<' ) ) {
  247. pods_query( "ALTER TABLE @wp_pod_rel ADD COLUMN weight SMALLINT unsigned AFTER tbl_row_id" );
  248. pods_query( "ALTER TABLE @wp_pod_types CHANGE before_helpers pre_save_helpers TEXT" );
  249. pods_query( "ALTER TABLE @wp_pod_types CHANGE after_helpers post_save_helpers TEXT" );
  250. pods_query( "ALTER TABLE @wp_pod_types ADD COLUMN pre_drop_helpers TEXT AFTER pre_save_helpers" );
  251. pods_query( "ALTER TABLE @wp_pod_types ADD COLUMN post_drop_helpers TEXT AFTER post_save_helpers" );
  252. pods_query( "UPDATE @wp_pod_helpers SET helper_type = 'pre_save' WHERE helper_type = 'before'" );
  253. pods_query( "UPDATE @wp_pod_helpers SET helper_type = 'post_save' WHERE helper_type = 'after'" );
  254. update_option( 'pods_version', '181' );
  255. }
  256. if ( version_compare( $old_version, '1.8.2', '<' ) ) {
  257. pods_query( "ALTER TABLE @wp_pod ADD COLUMN author_id INT unsigned AFTER modified" );
  258. pods_query( "UPDATE @wp_pod_fields SET pickval = 'wp_taxonomy' WHERE pickval REGEXP '^[0-9]+$'" );
  259. pods_query( "UPDATE @wp_pod_menu SET uri = '<root>' WHERE uri = '/' LIMIT 1" );
  260. // Remove beginning and trailing slashes
  261. $result = pods_query( "SELECT id, uri FROM @wp_pod_menu" );
  262. foreach ( $result as $row ) {
  263. $uri = preg_replace( "@^([/]?)(.*?)([/]?)$@", "$2", $row->uri );
  264. $uri = pods_sanitize( $uri );
  265. pods_query( "UPDATE @wp_pod_menu SET uri = '$uri' WHERE id = {$row->id} LIMIT 1" );
  266. }
  267. update_option( 'pods_version', '182' );
  268. }
  269. if ( version_compare( $old_version, '1.9.0', '<' ) ) {
  270. pods_query( "ALTER TABLE @wp_pod_templates CHANGE `name` `name` VARCHAR(255)" );
  271. pods_query( "ALTER TABLE @wp_pod_helpers CHANGE `name` `name` VARCHAR(255)" );
  272. pods_query( "ALTER TABLE @wp_pod_fields CHANGE `comment` `comment` VARCHAR(255)" );
  273. // Remove beginning and trailing slashes
  274. $result = pods_query( "SELECT id, uri FROM @wp_pod_pages" );
  275. foreach ( $result as $row ) {
  276. $uri = trim( $row->uri, '/' );
  277. $uri = pods_sanitize( $uri );
  278. pods_query( "UPDATE @wp_pod_pages SET uri = '$uri' WHERE id = {$row->id} LIMIT 1" );
  279. }
  280. update_option( 'pods_version', '190' );
  281. }
  282. if ( version_compare( $old_version, '1.9.6', '<' ) ) {
  283. add_option( 'pods_disable_file_browser', 0 );
  284. add_option( 'pods_files_require_login', 0 );
  285. add_option( 'pods_files_require_login_cap', 'upload_files' );
  286. add_option( 'pods_disable_file_upload', 0 );
  287. add_option( 'pods_upload_require_login', 0 );
  288. add_option( 'pods_upload_require_login_cap', 'upload_files' );
  289. update_option( 'pods_version', '196' );
  290. }
  291. if ( version_compare( $old_version, '1.9.7', '<' ) ) {
  292. pods_query( "ALTER TABLE `@wp_pod` CHANGE `id` `id` BIGINT(15) UNSIGNED NOT NULL AUTO_INCREMENT" );
  293. pods_query( "ALTER TABLE `@wp_pod` CHANGE `tbl_row_id` `tbl_row_id` BIGINT(15) UNSIGNED NULL DEFAULT NULL" );
  294. pods_query( "ALTER TABLE `@wp_pod` CHANGE `author_id` `author_id` BIGINT(15) UNSIGNED NULL DEFAULT NULL" );
  295. pods_query( "ALTER TABLE `@wp_pod_rel` CHANGE `id` `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT" );
  296. pods_query( "ALTER TABLE `@wp_pod_rel` CHANGE `pod_id` `pod_id` BIGINT(15) UNSIGNED NULL DEFAULT NULL" );
  297. pods_query( "ALTER TABLE `@wp_pod_rel` CHANGE `sister_pod_id` `sister_pod_id` BIGINT(15) UNSIGNED NULL DEFAULT NULL" );
  298. pods_query( "ALTER TABLE `@wp_pod_rel` CHANGE `tbl_row_id` `tbl_row_id` BIGINT(15) UNSIGNED NULL DEFAULT NULL" );
  299. pods_query( "ALTER TABLE `@wp_pod_rel` CHANGE `weight` `weight` INT(10) UNSIGNED NULL DEFAULT '0'" );
  300. update_option( 'pods_version', '197' );
  301. }
  302. if ( version_compare( $old_version, '1.11', '<' ) ) {
  303. pods_query( "ALTER TABLE `@wp_pod` CHANGE `datatype` `datatype` INT(10) UNSIGNED NULL DEFAULT NULL" );
  304. pods_query( "ALTER TABLE `@wp_pod` DROP INDEX `datatype_idx`", false );
  305. pods_query( "ALTER TABLE `@wp_pod` ADD INDEX `datatype_row_idx` (`datatype`, `tbl_row_id`)", false );
  306. pods_query( "ALTER TABLE `@wp_pod_rel` DROP INDEX `field_id_idx`", false );
  307. pods_query( "ALTER TABLE `@wp_pod_rel` ADD INDEX `field_pod_idx` (`field_id`, `pod_id`)", false );
  308. pods_query( "ALTER TABLE `@wp_pod_fields` CHANGE `datatype` `datatype` INT(10) UNSIGNED NULL DEFAULT NULL" );
  309. $result = pods_query( "SELECT id, name FROM @wp_pod_types" );
  310. foreach ( $result as $row ) {
  311. $pod = pods_sanitize( $row->name );
  312. pods_query( "ALTER TABLE `@wp_pod_tbl_{$pod}` CHANGE `id` `id` BIGINT(15) UNSIGNED NOT NULL AUTO_INCREMENT" );
  313. }
  314. update_option( 'pods_version', '001011000' );
  315. }