PageRenderTime 54ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/sql/upgrade/PodsUpgrade.php

https://github.com/ElmsPark/pods
PHP | 226 lines | 118 code | 49 blank | 59 comment | 30 complexity | 7bd105285a6600c3bd477720a5734d5c MD5 | raw file
Possible License(s): AGPL-1.0
  1. <?php
  2. /**
  3. * @package Pods\Upgrade
  4. */
  5. class PodsUpgrade {
  6. /**
  7. * @var array
  8. */
  9. public $tables = array();
  10. /**
  11. * @var array
  12. */
  13. protected $progress = array();
  14. /**
  15. * @var PodsAPI
  16. */
  17. protected $api = null;
  18. /**
  19. * @var string
  20. */
  21. protected $version = null;
  22. /**
  23. *
  24. */
  25. function __construct () {
  26. $this->api = pods_api();
  27. $this->get_tables();
  28. $this->get_progress();
  29. }
  30. /**
  31. *
  32. */
  33. public function install ( $_blog_id = null ) {
  34. /**
  35. * @var $wpdb WPDB
  36. */
  37. global $wpdb;
  38. // Switch DB table prefixes
  39. if ( null !== $_blog_id && $_blog_id != $wpdb->blogid )
  40. switch_to_blog( pods_absint( $_blog_id ) );
  41. else
  42. $_blog_id = null;
  43. $pods_version = get_option( 'pods_version' );
  44. do_action( 'pods_install', PODS_VERSION, $pods_version, $_blog_id );
  45. if ( ( !defined( 'PODS_TABLELESS' ) || !PODS_TABLELESS ) && false !== apply_filters( 'pods_install_run', null, PODS_VERSION, $pods_version, $_blog_id ) && !isset( $_GET[ 'pods_bypass_install' ] ) ) {
  46. $sql = file_get_contents( PODS_DIR . 'sql/dump.sql' );
  47. $sql = apply_filters( 'pods_install_sql', $sql, PODS_VERSION, $pods_version, $_blog_id );
  48. $charset_collate = 'DEFAULT CHARSET utf8';
  49. if ( !empty( $wpdb->charset ) )
  50. $charset_collate = "DEFAULT CHARSET {$wpdb->charset}";
  51. if ( !empty( $wpdb->collate ) )
  52. $charset_collate .= " COLLATE {$wpdb->collate}";
  53. if ( 'DEFAULT CHARSET utf8' != $charset_collate )
  54. $sql = str_replace( 'DEFAULT CHARSET utf8', $charset_collate, $sql );
  55. $sql = explode( ";\n", str_replace( array( "\r", 'wp_' ), array( "\n", $wpdb->prefix ), $sql ) );
  56. for ( $i = 0, $z = count( $sql ); $i < $z; $i++ ) {
  57. $query = trim( $sql[ $i ] );
  58. if ( empty( $query ) )
  59. continue;
  60. pods_query( $query, 'Cannot setup SQL tables' );
  61. }
  62. }
  63. do_action( 'pods_install_post', PODS_VERSION, $pods_version, $_blog_id );
  64. }
  65. /**
  66. *
  67. */
  68. public function get_tables () {
  69. /**
  70. * @var $wpdb WPDB
  71. */
  72. global $wpdb;
  73. $tables = $wpdb->get_results( "SHOW TABLES LIKE '{$wpdb->prefix}pod%'", ARRAY_N );
  74. if ( !empty( $tables ) ) {
  75. foreach ( $tables as $table ) {
  76. $this->tables[] = $table[ 0 ];
  77. }
  78. }
  79. }
  80. /**
  81. *
  82. */
  83. function get_progress () {
  84. $methods = get_class_methods( $this );
  85. foreach ( $methods as $method ) {
  86. if ( 0 === strpos( $method, 'migrate_' ) )
  87. $this->progress[ str_replace( 'migrate_', '', $method ) ] = false;
  88. }
  89. $progress = (array) get_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ), array() );
  90. if ( !empty( $progress ) )
  91. $this->progress = array_merge( $this->progress, $progress );
  92. }
  93. /**
  94. * @param $params
  95. *
  96. * @return mixed|void
  97. */
  98. public function ajax ( $params ) {
  99. if ( !isset( $params->step ) )
  100. return pods_error( __( 'Invalid upgrade process.', 'pods' ) );
  101. if ( !isset( $params->type ) )
  102. return pods_error( __( 'Invalid upgrade method.', 'pods' ) );
  103. if ( !method_exists( $this, $params->step . '_' . $params->type ) )
  104. return pods_error( __( 'Upgrade method not found.', 'pods' ) );
  105. return call_user_func( array( $this, $params->step . '_' . $params->type ), $params );
  106. }
  107. /**
  108. * @param $method
  109. * @param $v
  110. * @param null $x
  111. */
  112. public function update_progress ( $method, $v, $x = null ) {
  113. if ( empty( $this->version ) )
  114. return;
  115. $method = str_replace( 'migrate_', '', $method );
  116. if ( null !== $x )
  117. $this->progress[ $method ][ $x ] = (boolean) $v;
  118. else
  119. $this->progress[ $method ] = $v;
  120. update_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ), $this->progress );
  121. }
  122. /**
  123. * @param $method
  124. * @param null $x
  125. *
  126. * @return bool
  127. */
  128. public function check_progress ( $method, $x = null ) {
  129. $method = str_replace( 'migrate_', '', $method );
  130. if ( isset( $this->progress[ $method ] ) ) {
  131. if ( null === $x )
  132. return $this->progress[ $method ];
  133. elseif ( isset( $this->progress[ $method ][ $x ] ) )
  134. return (boolean) $this->progress[ $method ][ $x ];
  135. }
  136. return false;
  137. }
  138. /**
  139. *
  140. */
  141. public function upgraded () {
  142. if ( empty( $this->version ) )
  143. return;
  144. $upgraded = get_option( 'pods_framework_upgraded' );
  145. if ( empty( $upgraded ) || !is_array( $upgraded ) )
  146. $upgraded = array();
  147. delete_option( 'pods_framework_upgrade_' . str_replace( '.', '_', $this->version ) );
  148. if ( !in_array( $this->version, $upgraded ) )
  149. $upgraded[] = $this->version;
  150. update_option( 'pods_framework_upgraded', $upgraded );
  151. }
  152. /**
  153. *
  154. */
  155. public function cleanup() {
  156. /**
  157. * @var $wpdb WPDB
  158. */
  159. global $wpdb;
  160. foreach ( $this->tables as $table ) {
  161. if ( false !== strpos( $table, "{$wpdb->prefix}pod_" ) || "{$wpdb->prefix}pod" == $table )
  162. pods_query( "DROP TABLE `{$table}`", false );
  163. }
  164. delete_option( 'pods_roles' );
  165. delete_option( 'pods_version' );
  166. delete_option( 'pods_framework_upgrade_2_0' );
  167. delete_option( 'pods_framework_upgrade_2_0_sister_ids' );
  168. delete_option( 'pods_framework_upgraded_1_x' );
  169. delete_option( 'pods_disable_file_browser' );
  170. delete_option( 'pods_files_require_login' );
  171. delete_option( 'pods_files_require_login_cap' );
  172. delete_option( 'pods_disable_file_upload' );
  173. delete_option( 'pods_upload_require_login' );
  174. delete_option( 'pods_upload_require_login_cap' );
  175. pods_query( "DELETE FROM `@wp_postmeta` WHERE `meta_key` LIKE '_pods_1x_%'" );
  176. }
  177. }