You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.8 KiB
PHP
119 lines
2.8 KiB
PHP
<?php
|
|
/**
|
|
* Remove Transients class.
|
|
*
|
|
* @link https://github.com/googleforcreators/web-stories-wp
|
|
*
|
|
* @copyright 2022 Google LLC
|
|
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
|
*/
|
|
|
|
/**
|
|
* Copyright 2022 Google LLC
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
declare(strict_types = 1);
|
|
|
|
namespace Google\Web_Stories;
|
|
|
|
use Google\Web_Stories\Infrastructure\PluginUninstallAware;
|
|
use Google\Web_Stories\Infrastructure\Service;
|
|
|
|
/**
|
|
* Remove Transients class.
|
|
*/
|
|
class Remove_Transients implements Service, PluginUninstallAware {
|
|
protected const PREFIX = 'web_stories\_%';
|
|
|
|
/**
|
|
* Delete network and site transients.
|
|
*
|
|
* @since 1.26.0
|
|
*/
|
|
public function on_plugin_uninstall(): void {
|
|
if ( wp_using_ext_object_cache() ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! is_multisite() ) {
|
|
$this->delete_transients();
|
|
return;
|
|
}
|
|
|
|
$this->delete_network_transients();
|
|
$site_ids = get_sites(
|
|
[
|
|
'fields' => 'ids',
|
|
'number' => 0,
|
|
'update_site_cache' => false,
|
|
'update_site_meta_cache' => false,
|
|
]
|
|
);
|
|
|
|
foreach ( $site_ids as $site_id ) {
|
|
// phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.switch_to_blog_switch_to_blog
|
|
switch_to_blog( $site_id );
|
|
|
|
$this->delete_transients();
|
|
}
|
|
|
|
restore_current_blog();
|
|
}
|
|
|
|
/**
|
|
* Delete transients.
|
|
*
|
|
* @since 1.26.0
|
|
*/
|
|
protected function delete_transients(): void {
|
|
global $wpdb;
|
|
|
|
// phpcs:ignore WordPress.DB.DirectDatabaseQuery
|
|
$transients = $wpdb->get_col(
|
|
$wpdb->prepare(
|
|
"SELECT option_name FROM $wpdb->options WHERE option_name LIKE %s OR option_name LIKE %s",
|
|
'_transient_' . self::PREFIX,
|
|
'_transient_timeout_' . self::PREFIX
|
|
)
|
|
);
|
|
|
|
if ( ! empty( $transients ) ) {
|
|
array_map( 'delete_option', (array) $transients );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Delete transients on multisite.
|
|
*
|
|
* @since 1.26.0
|
|
*/
|
|
protected function delete_network_transients(): void {
|
|
global $wpdb;
|
|
|
|
// phpcs:ignore WordPress.DB.DirectDatabaseQuery
|
|
$transients = $wpdb->get_col(
|
|
$wpdb->prepare(
|
|
"SELECT meta_key FROM $wpdb->sitemeta WHERE meta_key LIKE %s OR meta_key LIKE %s",
|
|
'_site_transient_' . self::PREFIX,
|
|
'_site_transient_timeout_' . self::PREFIX
|
|
)
|
|
);
|
|
|
|
if ( ! empty( $transients ) ) {
|
|
array_map( 'delete_site_option', (array) $transients );
|
|
}
|
|
}
|
|
}
|