Нема описа

migrations.php 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  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_popup_upgrades_enabled() {
  13. /** @var int $popup_count */
  14. static $popup_count;
  15. if ( defined( 'PUM_DISABLE_PASSIVE_UPGRADES' ) && PUM_DISABLE_PASSIVE_UPGRADES ) {
  16. return false;
  17. }
  18. if ( ! $popup_count ) {
  19. $popup_count = get_transient( 'pum_popup_count' );
  20. if ( $popup_count === false ) {
  21. $popup_count = pum_count_popups( array(
  22. 'post_status' => array( 'publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash' ),
  23. ) );
  24. set_transient( 'pum_popup_count', $popup_count, HOUR_IN_SECONDS * 24 );
  25. }
  26. }
  27. return $popup_count > apply_filters( 'pum_passive_popups_enabled_max_count', 5 );
  28. }
  29. /**
  30. * Upgrade popup data to model v3.
  31. *
  32. * @since 1.7.0
  33. *
  34. * @param $popup PUM_Model_Popup
  35. */
  36. function pum_popup_migration_2( &$popup ) {
  37. $changed = false;
  38. $delete_meta = array();
  39. /**
  40. * Update pum_sub_form shortcode args
  41. */
  42. if ( has_shortcode( $popup->post_content, 'pum_sub_form' ) ) {
  43. $new_content = preg_replace( '/\[pum_sub_form(.*)provider="none"(.*)\]/', '[pum_sub_form$1 provider=""$2]', $popup->post_content );
  44. if ( $popup->post_content != $new_content ) {
  45. $popup->post_content = $new_content;
  46. $changed = true;
  47. $popup->save( false );
  48. }
  49. }
  50. $settings = $popup->get_settings();
  51. /**
  52. * Migrate popup theme selection.
  53. */
  54. $theme = $popup->get_meta( 'popup_theme' );
  55. if ( ! empty( $theme ) && is_numeric( $theme ) ) {
  56. $settings['theme_id'] = absint( $theme );
  57. $changed = true;
  58. $delete_meta[] = 'popup_theme';
  59. }
  60. /**
  61. * Migrate popup_display meta data.
  62. */
  63. $display = $popup->get_meta( 'popup_display' );
  64. if ( ! empty( $display ) && is_array( $display ) ) {
  65. $keys = $popup->remapped_meta_settings_keys( 'display' );
  66. // Foreach old key, save the value under popup settings for the new key.
  67. foreach ( $keys as $old_key => $new_key ) {
  68. if ( isset( $display[ $old_key ] ) && ! empty( $display[ $old_key ] ) ) {
  69. $settings[ $new_key ] = $display[ $old_key ];
  70. $changed = true;
  71. unset( $display[ $old_key ] );
  72. if ( in_array( $old_key, array(
  73. 'responsive_min_width',
  74. 'responsive_max_width',
  75. 'custom_width',
  76. 'custom_height',
  77. ) ) && isset( $display[ $old_key . '_unit' ] ) ) {
  78. $settings[ $new_key ] .= $display[ $old_key . '_unit' ];
  79. unset( $display[ $old_key . '_unit' ] );
  80. }
  81. }
  82. }
  83. if ( empty( $display ) ) {
  84. $delete_meta[] = 'popup_display';
  85. } else {
  86. // Update the saved popup display data with any remaining keys from extensions.
  87. $popup->update_meta( 'popup_display', $display );
  88. }
  89. }
  90. /**
  91. * Migrate popup_close meta data
  92. */
  93. $close = $popup->get_meta( 'popup_close' );
  94. if ( ! empty( $close ) && is_array( $close ) ) {
  95. $keys = $popup->remapped_meta_settings_keys( 'close' );
  96. // Foreach old key, save the value under popup settings for the new key.
  97. foreach ( $keys as $old_key => $new_key ) {
  98. if ( isset( $close[ $old_key ] ) ) {
  99. $settings[ $new_key ] = $close[ $old_key ];
  100. $changed = true;
  101. unset( $close[ $old_key ] );
  102. }
  103. }
  104. if ( empty( $close ) ) {
  105. $delete_meta[] = 'popup_close';
  106. } else {
  107. // Update the saved popup close data with any remaining keys from extensions.
  108. $popup->update_meta( 'popup_close', $close );
  109. }
  110. }
  111. /**
  112. * Migrate triggers.
  113. */
  114. $triggers = $popup->get_meta( 'popup_triggers' );
  115. if ( ! empty( $triggers ) && is_array( $triggers ) ) {
  116. $triggers = ! empty( $settings['triggers'] ) && is_array( $settings['triggers'] ) ? array_merge( $settings['triggers'], $triggers ) : $triggers;
  117. foreach ( $triggers as $key => $trigger ) {
  118. if ( isset( $trigger['settings']['cookie']['name'] ) ) {
  119. $triggers[ $key ]['settings']['cookie_name'] = $trigger['settings']['cookie']['name'];
  120. unset( $triggers[ $key ]['settings']['cookie'] );
  121. }
  122. }
  123. $settings['triggers'] = $triggers;
  124. $changed = true;
  125. $delete_meta[] = 'popup_triggers';
  126. }
  127. /**
  128. * Migrate cookies.
  129. */
  130. $cookies = $popup->get_meta( 'popup_cookies' );
  131. if ( ! empty( $cookies ) && is_array( $cookies ) ) {
  132. $cookies = ! empty( $settings['cookies'] ) && is_array( $settings['cookies'] ) ? array_merge( $settings['cookies'], $cookies ) : $cookies;
  133. $settings['cookies'] = $cookies;
  134. $changed = true;
  135. $delete_meta[] = 'popup_cookies';
  136. }
  137. /**
  138. * Migrate conditions.
  139. */
  140. $conditions = $popup->get_meta( 'popup_conditions' );
  141. if ( ! empty( $conditions ) && is_array( $conditions ) ) {
  142. $conditions = ! empty( $settings['conditions'] ) && is_array( $settings['conditions'] ) ? array_merge( $settings['conditions'], $conditions ) : $conditions;
  143. foreach ( $conditions as $cg_key => $group ) {
  144. if ( ! empty( $group ) ) {
  145. foreach ( $group as $c_key => $condition ) {
  146. // Clean empty conditions.
  147. if ( ! empty( $condition['target'] ) ) {
  148. $fixed_condition = array(
  149. 'target' => $condition['target'],
  150. 'not_operand' => isset( $condition['not_operand'] ) ? (bool) $condition['not_operand'] : false,
  151. 'settings' => isset( $condition['settings'] ) ? $condition['settings'] : array(),
  152. );
  153. foreach ( $condition as $key => $val ) {
  154. if ( ! in_array( $key, array( 'target', 'not_operand', 'settings' ) ) ) {
  155. $fixed_condition['settings'][ $key ] = $val;
  156. }
  157. }
  158. $conditions[ $cg_key ][ $c_key ] = $fixed_condition;
  159. } else {
  160. unset( $conditions[ $cg_key ][ $c_key ] );
  161. }
  162. }
  163. // Clean empty groups.
  164. if ( empty( $conditions[ $cg_key ] ) ) {
  165. unset( $conditions[ $cg_key ] );
  166. }
  167. }
  168. }
  169. $settings['conditions'] = $conditions;
  170. $changed = true;
  171. $delete_meta[] = 'popup_conditions';
  172. }
  173. /**
  174. * Migrate popup_mobile_disabled.
  175. */
  176. $mobile_disabled = $popup->get_meta( 'popup_mobile_disabled' );
  177. if ( ! empty( $mobile_disabled ) ) {
  178. $settings['disable_on_mobile'] = (bool) ( $mobile_disabled );
  179. $changed = true;
  180. $delete_meta[] = 'popup_mobile_disabled';
  181. }
  182. /**
  183. * Migrate popup_tablet_disabled.
  184. */
  185. $tablet_disabled = $popup->get_meta( 'popup_tablet_disabled' );
  186. if ( ! empty( $tablet_disabled ) ) {
  187. $settings['disable_on_tablet'] = (bool) ( $tablet_disabled );
  188. $changed = true;
  189. $delete_meta[] = 'popup_tablet_disabled';
  190. }
  191. /**
  192. * Migrate analytics reset keys.
  193. */
  194. $open_count_reset = $popup->get_meta( 'popup_open_count_reset', false );
  195. if ( ! empty( $open_count_reset ) && is_array( $open_count_reset ) ) {
  196. foreach ( $open_count_reset as $key => $reset ) {
  197. if ( is_array( $reset ) ) {
  198. add_post_meta( $popup->ID, 'popup_count_reset', array(
  199. 'timestamp' => ! empty( $reset['timestamp'] ) ? $reset['timestamp'] : '',
  200. 'opens' => ! empty( $reset['count'] ) ? absint( $reset['count'] ) : 0,
  201. 'conversions' => 0,
  202. ) );
  203. }
  204. }
  205. $delete_meta[] = 'popup_open_count_reset';
  206. }
  207. /**
  208. * Save only if something changed.
  209. */
  210. if ( $changed ) {
  211. $popup->update_meta( 'popup_settings', $settings );
  212. }
  213. /**
  214. * Clean up automatically.
  215. */
  216. if ( ! empty( $delete_meta ) ) {
  217. foreach ( $delete_meta as $key ) {
  218. $popup->delete_meta( $key );
  219. }
  220. }
  221. }
  222. add_action( 'pum_popup_passive_migration_2', 'pum_popup_migration_2' );