| @@ -7,8 +7,9 @@ | ||
| 7 | 7 | */ |
| 8 | 8 | |
| 9 | 9 | namespace ElasticPress; |
| 10 | 10 | |
| 11 | +use ElasticPress\Features; | |
| 11 | 12 | use ElasticPress\Utils; |
| 12 | 13 | |
| 13 | 14 | if ( ! defined( 'ABSPATH' ) ) { |
| 14 | 15 | exit; // Exit if accessed directly. |
| @@ -46,8 +47,11 @@ | ||
| 46 | 47 | '3.5.3' => [ 'upgrade_3_5_3', 'init' ], |
| 47 | 48 | '3.6.6' => [ 'upgrade_3_6_6', 'init' ], |
| 48 | 49 | '4.2.2' => [ 'upgrade_4_2_2', 'init' ], |
| 49 | 50 | '4.4.0' => [ 'upgrade_4_4_0', 'init' ], |
| 51 | + '4.5.0' => [ 'upgrade_4_5_0', 'init' ], | |
| 52 | + '4.7.0' => [ 'upgrade_4_7_0', 'init' ], | |
| 53 | + '5.0.0' => [ 'upgrade_5_0_0', 'init' ], | |
| 50 | 54 | ]; |
| 51 | 55 | |
| 52 | 56 | array_walk( $routines, [ $this, 'run_upgrade_routine' ] ); |
| 53 | 57 | |
| @@ -146,8 +150,9 @@ | ||
| 146 | 150 | if ( ! $synonyms ) { |
| 147 | 151 | return; |
| 148 | 152 | } |
| 149 | 153 | |
| 154 | + // phpcs:disable WordPress.DB.DirectDatabaseQuery | |
| 150 | 155 | $synonyms_example_ids = $wpdb->get_col( |
| 151 | 156 | $wpdb->prepare( |
| 152 | 157 | "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s AND post_content = %s LIMIT 100", |
| 153 | 158 | $synonyms::POST_TYPE_NAME, |
| @@ -153,8 +158,9 @@ | ||
| 153 | 158 | $synonyms::POST_TYPE_NAME, |
| 154 | 159 | $synonyms->example_synonym_list() |
| 155 | 160 | ) |
| 156 | 161 | ); |
| 162 | + // phpcs:enable WordPress.DB.DirectDatabaseQuery | |
| 157 | 163 | |
| 158 | 164 | if ( ! $synonyms_example_ids ) { |
| 159 | 165 | return; |
| 160 | 166 | } |
| @@ -191,8 +197,98 @@ | ||
| 191 | 197 | Utils\delete_option( 'ep_prefix' ); |
| 192 | 198 | } |
| 193 | 199 | |
| 194 | 200 | /** |
| 201 | + * Upgrade routine of v4.5.0. | |
| 202 | + * | |
| 203 | + * Add the ElasticPress capability to admins | |
| 204 | + * | |
| 205 | + * @see https://github.com/10up/ElasticPress/pull/3313 | |
| 206 | + */ | |
| 207 | + public function upgrade_4_5_0() { | |
| 208 | + setup_roles(); | |
| 209 | + } | |
| 210 | + | |
| 211 | + /** | |
| 212 | + * Upgrade routine of v4.7.0. | |
| 213 | + * | |
| 214 | + * Remove old total_fields_limit transients | |
| 215 | + * Remove cached autosuggest requests | |
| 216 | + * | |
| 217 | + * @see https://github.com/10up/ElasticPress/pull/3552 | |
| 218 | + */ | |
| 219 | + public function upgrade_4_7_0() { | |
| 220 | + global $wpdb; | |
| 221 | + | |
| 222 | + if ( is_multisite() ) { | |
| 223 | + $sites = \get_sites( [ 'number' => 0 ] ); | |
| 224 | + foreach ( $sites as $site ) { | |
| 225 | + $blog_option = get_blog_option( $site->blog_id, 'ep_indexable' ); | |
| 226 | + if ( $blog_option ) { | |
| 227 | + update_site_meta( $site->blog_id, 'ep_indexable', $blog_option ); | |
| 228 | + } | |
| 229 | + } | |
| 230 | + } | |
| 231 | + | |
| 232 | + $transients = $wpdb->get_col( // phpcs:ignore WordPress.DB.DirectDatabaseQuery | |
| 233 | + "SELECT option_name | |
| 234 | + FROM {$wpdb->prefix}options | |
| 235 | + WHERE option_name LIKE '_transient_ep_total_fields_limit_%'" | |
| 236 | + ); | |
| 237 | + | |
| 238 | + foreach ( $transients as $transient ) { | |
| 239 | + $transient_name = str_replace( '_transient_', '', $transient ); | |
| 240 | + delete_site_transient( $transient_name ); | |
| 241 | + delete_transient( $transient_name ); | |
| 242 | + } | |
| 243 | + | |
| 244 | + if ( function_exists( 'wp_cache_supports' ) && wp_cache_supports( 'flush_group' ) ) { | |
| 245 | + wp_cache_flush_group( 'ep_autosuggest' ); | |
| 246 | + } | |
| 247 | + delete_transient( 'ep_autosuggest_query_request_cache' ); | |
| 248 | + } | |
| 249 | + | |
| 250 | + /** | |
| 251 | + * Upgrade routine of v5.0.0. | |
| 252 | + */ | |
| 253 | + public function upgrade_5_0_0() { | |
| 254 | + $features_in_settings = Features::factory()->get_feature_settings(); | |
| 255 | + if ( ! empty( $features_in_settings ) ) { | |
| 256 | + foreach ( $features_in_settings as $feature_slug => $feature_settings ) { | |
| 257 | + $feature = Features::factory()->get_registered_feature( $feature_slug ); | |
| 258 | + if ( ! $feature ) { | |
| 259 | + continue; | |
| 260 | + } | |
| 261 | + | |
| 262 | + $settings_schema = $feature->get_settings_schema(); | |
| 263 | + foreach ( $settings_schema as $setting_schema ) { | |
| 264 | + if ( ! isset( $feature_settings[ $setting_schema['key'] ] ) ) { | |
| 265 | + continue; | |
| 266 | + } | |
| 267 | + | |
| 268 | + $value = $feature_settings[ $setting_schema['key'] ]; | |
| 269 | + | |
| 270 | + if ( ! in_array( $setting_schema['type'], [ 'checkbox', 'radio' ], true ) || ! is_bool( $value ) ) { | |
| 271 | + continue; | |
| 272 | + } | |
| 273 | + | |
| 274 | + $features_in_settings[ $feature_slug ][ $setting_schema['key'] ] = $value ? '1' : '0'; | |
| 275 | + } | |
| 276 | + } | |
| 277 | + Utils\update_option( 'ep_feature_settings', $features_in_settings ); | |
| 278 | + } | |
| 279 | + | |
| 280 | + /** | |
| 281 | + * Remove the 'ep_last_index' option and store it as an entry of 'ep_sync_history' | |
| 282 | + */ | |
| 283 | + $last_sync = Utils\get_option( 'ep_last_index', [] ); | |
| 284 | + if ( ! empty( $last_sync ) ) { | |
| 285 | + Utils\delete_option( 'ep_last_index' ); | |
| 286 | + Utils\update_option( 'ep_sync_history', [ $last_sync ] ); | |
| 287 | + } | |
| 288 | + } | |
| 289 | + | |
| 290 | + /** | |
| 195 | 291 | * Adjust the upgrade sync notice to warn users about Instant Results. |
| 196 | 292 | * |
| 197 | 293 | * As 4.0.0 introduces this new feature and it requires a resync, admin users |
| 198 | 294 | * might want to enable the feature before the resync (and then resync only once.) |
| @@ -212,9 +308,9 @@ | ||
| 212 | 308 | } |
| 213 | 309 | |
| 214 | 310 | $feature_status = $instant_results->requirements_status(); |
| 215 | 311 | $appended_message = ''; |
| 216 | - if ( 1 >= $feature_status->code ) { | |
| 312 | + if ( 1 >= $feature_status->get_code() ) { | |
| 217 | 313 | if ( defined( 'EP_IS_NETWORK' ) && EP_IS_NETWORK ) { |
| 218 | 314 | $features_url = admin_url( 'network/admin.php?page=elasticpress' ); |
| 219 | 315 | } else { |
| 220 | 316 | $features_url = admin_url( 'admin.php?page=elasticpress' ); |
| @@ -221,11 +317,11 @@ | ||
| 221 | 317 | } |
| 222 | 318 | |
| 223 | 319 | $appended_message = wp_kses_post( |
| 224 | 320 | sprintf( |
| 225 | - /* translators: 1: <a> tag (Zendesk article); 2. </a>; 3: <a> tag (link to Features screen); 4. </a>; */ | |
| 321 | + /* translators: 1: <a> tag (Support article); 2. </a>; 3: <a> tag (link to Features screen); 4. </a>; */ | |
| 226 | 322 | __( '%1$sInstant Results%2$s is now available in ElasticPress, but requires a re-sync before activation. If you would like to use Instant Results, click %3$shere%4$s to activate the feature and start your sync.', 'elasticpress' ), |
| 227 | - '<a href="https://elasticpress.zendesk.com/hc/en-us/articles/360050447492#instant-results">', | |
| 323 | + '<a href="https://www.elasticpress.io/resources/articles/configuring-elasticpress-via-the-plugin-dashboard/#instant-results">', | |
| 228 | 324 | '</a>', |
| 229 | 325 | '<a href="' . $features_url . '">', |
| 230 | 326 | '</a>' |
| 231 | 327 | ) |
| @@ -232,13 +328,13 @@ | ||
| 232 | 328 | ); |
| 233 | 329 | } else { |
| 234 | 330 | $appended_message = wp_kses_post( |
| 235 | 331 | sprintf( |
| 236 | - /* translators: 1: <a> tag (Zendesk article about Instant Results); 2. </a>; 3: <a> tag (Zendesk article about self hosted Elasticsearch setups); 4. </a>; */ | |
| 332 | + /* translators: 1: <a> tag (Support article about Instant Results); 2. </a>; 3: <a> tag (Support article about self hosted Elasticsearch setups); 4. </a>; */ | |
| 237 | 333 | __( '%1$sInstant Results%2$s is now available in ElasticPress, but requires a re-sync before activation. If you would like to use Instant Results, since you are not using ElasticPress.io, you will also need to %3$sinstall and configure a PHP proxy%4$s.', 'elasticpress' ), |
| 238 | - '<a href="https://elasticpress.zendesk.com/hc/en-us/articles/360050447492#instant-results">', | |
| 334 | + '<a href="https://www.elasticpress.io/resources/articles/configuring-elasticpress-via-the-plugin-dashboard/#instant-results">', | |
| 239 | 335 | '</a>', |
| 240 | - '<a href="https://elasticpress.zendesk.com/hc/en-us/articles/4413938931853-Considerations-for-self-hosted-Elasticsearch-setups">', | |
| 336 | + '<a href="https://www.elasticpress.io/resources/articles/considerations-for-self-hosted-elasticsearch-setups/">', | |
| 241 | 337 | '</a>' |
| 242 | 338 | ) |
| 243 | 339 | ); |
| 244 | 340 | } |