PluginProbe
Optimole – Optimize Images | Convert WebP & AVIF | CDN & Lazy Load | Image Optimization / trunk
Optimole – Optimize Images | Convert WebP & AVIF | CDN & Lazy Load | Image Optimization vtrunk
4.2.14 4.2.13 4.2.12 4.2.11 4.2.10 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 2.5.5 2.5.6 2.5.7 3.0.0 3.0.1 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.11.0 3.11.1 3.11.2 3.11.3 3.12.0 All 135 releases
← All changes | vendor/codeinwp/themeisle-sdk/src/Modules/Rollback.php +37 -4 3.1.3 → trunk View file →
@@ -12,8 +12,9 @@
12 12 namespace ThemeisleSDK\Modules;
13 13
14 14 // Exit if accessed directly.
15 15 use ThemeisleSDK\Common\Abstract_Module;
16 +use ThemeisleSDK\Loader;
16 17 use ThemeisleSDK\Product;
17 18
18 19 if ( ! defined( 'ABSPATH' ) ) {
19 20 exit;
@@ -97,9 +98,9 @@
97 98 * @return array Array of versions.
98 99 */
99 100 private function get_api_versions() {
100 101
101 - $cache_key = $this->product->get_key() . '_' . preg_replace( '/[^0-9a-zA-Z ]/m', '', $this->product->get_version() ) . 'versions';
102 + $cache_key = $this->product->get_cache_key();
102 103 $cache_versions = get_transient( $cache_key );
103 104 if ( false === $cache_versions ) {
104 105 $versions = $this->get_remote_versions();
105 106 set_transient( $cache_key, $versions, 5 * DAY_IN_SECONDS );
@@ -119,10 +120,10 @@
119 120 $url = $this->get_versions_api_url();
120 121 if ( empty( $url ) ) {
121 122 return [];
122 123 }
123 - $response = function_exists( 'wp_remote_get_wp_remote_get' )
124 - ? wp_remote_get_wp_remote_get( $url )
124 + $response = function_exists( 'vip_safe_wp_remote_get' )
125 + ? vip_safe_wp_remote_get( $url )
125 126 : wp_remote_get( $url ); //phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_remote_get_wp_remote_get
126 127 if ( is_wp_error( $response ) ) {
127 128 return array();
128 129 }
@@ -183,9 +184,9 @@
183 184 $version = $this->get_rollback();
184 185 if ( empty( $version ) ) {
185 186 return $links;
186 187 }
187 - $links[] = '<a href="' . wp_nonce_url( admin_url( 'admin-post.php?action=' . $this->product->get_key() . '_rollback' ), $this->product->get_key() . '_rollback' ) . '">' . sprintf( apply_filters( $this->product->get_key() . '_rollback_label', 'Rollback to v%s' ), $version['version'] ) . '</a>';
188 + $links[] = '<a href="' . wp_nonce_url( admin_url( 'admin-post.php?action=' . $this->product->get_key() . '_rollback' ), $this->product->get_key() . '_rollback' ) . '">' . sprintf( apply_filters( $this->product->get_key() . '_rollback_label', Loader::$labels['rollback']['cta'] ), $version['version'] ) . '</a>';
188 189
189 190 return $links;
190 191 }
191 192
@@ -283,8 +284,24 @@
283 284 $theme = $folder . '/style.css';
284 285 $nonce = 'upgrade-theme_' . $theme;
285 286 $url = 'update.php?action=upgrade-theme&theme=' . urlencode( $theme );
286 287
288 + /**
289 + * The rollback will attach a temporary theme for the rollback to the transient.
290 + * However, when executing the upgrade for the attached theme we need to change the slug to the original theme slug.
291 + * This is because it will use the slug to create a temp folder for the theme used during the upgrade.
292 + */
293 + add_filter(
294 + 'upgrader_package_options',
295 + function ( $options ) use ( $folder, $theme ) {
296 + if ( isset( $options['hook_extra']['theme'] ) && $options['hook_extra']['theme'] === $theme && isset( $options['hook_extra']['temp_backup']['slug'] ) ) {
297 + $options['hook_extra']['temp_backup']['slug'] = $folder;
298 + }
299 +
300 + return $options;
301 + }
302 + );
303 +
287 304 $upgrader = new \Theme_Upgrader( new \Theme_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'theme' ) ) );
288 305 $upgrader->upgrade( $theme );
289 306 delete_transient( $this->product->get_key() . '_warning_rollback' );
290 307 wp_die(
@@ -374,11 +391,27 @@
374 391 );
375 392 }
376 393
377 394 /**
395 + * Fires after the option has been updated.
396 + *
397 + * @param mixed $old_value The old option value.
398 + * @param mixed $value The new option value.
399 + * @param string $option Option name.
400 + */
401 + public function update_active_plugins_action( $old_value, $value, $option ) {
402 + delete_site_transient( 'update_plugins' );
403 + wp_cache_delete( 'plugins', 'plugins' );
404 + }
405 +
406 + /**
378 407 * Set the rollback hook. Strangely, this does not work if placed in the ThemeIsle_SDK_Rollback class, so it is being called from there instead.
379 408 */
380 409 public function add_hooks() {
381 410 add_action( 'admin_post_' . $this->product->get_key() . '_rollback', array( $this, 'start_rollback' ) );
382 411 add_action( 'admin_footer', array( $this, 'add_footer' ) );
412 +
413 + // This hook will be invoked after the plugin activation.
414 + // We use this to force an update of the cache so that Update is present immediate after a rollback.
415 + add_action( 'update_option_active_plugins', array( $this, 'update_active_plugins_action' ), 10, 3 );
383 416 }
384 417 }