Sin descripción

migrations.php 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. /*******************************************************************************
  3. * Copyright (c) 2019, Code Atlantic LLC
  4. ******************************************************************************/
  5. /**
  6. * Checks if passive migration for popups should be enabled.
  7. *
  8. * This determines if the query load may be potentially too high to run passive migrations on live servers.
  9. *
  10. * @return bool
  11. */
  12. function pum_passive_theme_upgrades_enabled() {
  13. /** @var int $theme_count */
  14. static $theme_count;
  15. if ( defined( 'PUM_DISABLE_PASSIVE_UPGRADES' ) && PUM_DISABLE_PASSIVE_UPGRADES ) {
  16. return false;
  17. }
  18. if ( ! $theme_count ) {
  19. $theme_count = get_transient( 'pum_theme_count' );
  20. if ( $theme_count === false ) {
  21. $theme_count = pum_count_themes( array(
  22. 'post_status' => array( 'publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash' ),
  23. ) );
  24. set_transient( 'pum_theme_count', $theme_count, MINUTE_IN_SECONDS );
  25. }
  26. }
  27. return pum_is_popup_theme_editor() || $theme_count <= apply_filters( 'pum_passive_themes_enabled_max_count', 10 );
  28. }
  29. /**
  30. * Upgrade popup data to model v2.
  31. *
  32. * @since 1.8.0
  33. *
  34. * @param PUM_Model_Theme $theme
  35. */
  36. function pum_theme_migration_1( &$theme ) {
  37. $delete_meta = array( 'popup_theme_defaults_set' );
  38. // Used to merge with existing values to ensure data integrity.
  39. $meta_defaults = pum_get_theme_v2_meta_defaults();
  40. foreach ( array_keys( $meta_defaults ) as $group ) {
  41. // Get old data.
  42. $v1_meta_values = pum_get_theme_v1_meta( $group, $theme->ID );
  43. // Loop over all fields which were merged and mark their meta keys for deletion.
  44. foreach ( $v1_meta_values as $old_meta_key => $old_meta_value ) {
  45. $delete_meta[] = "popup_theme_{$group}_{$old_meta_key}";
  46. }
  47. $existing_v2_meta = $theme->get_meta( "popup_theme_{$group}" );
  48. if ( ! empty( $existing_v2_meta ) ) {
  49. continue;
  50. }
  51. // Merge defaults.
  52. $values = wp_parse_args( $v1_meta_values, $meta_defaults[ $group ] );
  53. // Update meta storage.
  54. $theme->update_meta( "popup_theme_{$group}", $values );
  55. }
  56. /**
  57. * Clean up automatically.
  58. */
  59. pum_cleanup_post_meta_keys( $theme->ID, $delete_meta );
  60. }
  61. add_action( 'pum_theme_passive_migration_1', 'pum_theme_migration_1' );
  62. /**
  63. * Upgrade popup data to model v3.
  64. *
  65. * @since 1.8.0
  66. *
  67. * @param PUM_Model_Theme $theme
  68. */
  69. function pum_theme_migration_2( &$theme ) {
  70. $changed = false;
  71. $delete_meta = array();
  72. $settings = $theme->get_settings();
  73. $old_meta_elements = array(
  74. 'overlay',
  75. 'container',
  76. 'title',
  77. 'content',
  78. 'close',
  79. );
  80. foreach ( $old_meta_elements as $element ) {
  81. $meta_key = 'popup_theme_' . $element;
  82. /**
  83. * Migrate popup_theme_overlay meta data.
  84. */
  85. $element_data = $theme->get_meta( $meta_key );
  86. if ( ! empty( $element_data ) && is_array( $element_data ) ) {
  87. $keys = $theme->remapped_meta_settings_keys( $element );
  88. // Foreach old key, save the value under popup settings for the new key.
  89. foreach ( $keys as $old_key => $new_key ) {
  90. if ( isset( $element_data[ $old_key ] ) ) {
  91. $settings[ $new_key ] = $element_data[ $old_key ];
  92. $changed = true;
  93. unset( $element_data[ $old_key ] );
  94. }
  95. }
  96. if ( empty( $element_data ) ) {
  97. $delete_meta[] = $meta_key;
  98. } else {
  99. // Update the saved popup display data with any remaining keys from extensions.
  100. $theme->update_meta( $meta_key, $element_data );
  101. }
  102. }
  103. }
  104. /**
  105. * Save only if something changed.
  106. */
  107. if ( $changed ) {
  108. $theme->update_meta( 'popup_theme_settings', $settings );
  109. }
  110. /**
  111. * Clean up automatically.
  112. */
  113. pum_cleanup_post_meta_keys( $theme->ID, $delete_meta );
  114. }
  115. add_action( 'pum_theme_passive_migration_2', 'pum_theme_migration_2' );