laipower/wp-content/plugins/jetpack-protect/jetpack_vendor/automattic/jetpack-boost-core/src/lib/class-transient.php

123 lines
2.6 KiB
PHP

<?php
/**
* Transients for Jetpack Boost.
*
* @package automattic/jetpack-boost-core
*/
namespace Automattic\Jetpack\Boost_Core\Lib;
/**
* Class Transient
*/
class Transient {
const OPTION_PREFIX = 'jb_transient_';
/**
* Get the key with prefix.
*
* @param string $key the key to be prefixed.
*/
public static function key( $key ) {
return static::OPTION_PREFIX . $key;
}
/**
* Updates a cache entry. Creates the cache entry if it doesn't exist.
*
* @param string $key Cache key name.
* @param mixed $value Cache value.
* @param int $expiry Cache expiration in seconds.
*
* @return void
*/
public static function set( $key, $value, $expiry = 0 ) {
if ( 0 === $expiry ) {
$expiry = YEAR_IN_SECONDS;
}
$data = array(
'expire' => time() + $expiry,
'data' => $value,
);
update_option( self::key( $key ), $data, false );
}
/**
* Gets a cache entry.
*
* @param string $key Cache key name.
* @param mixed $default Default value.
*
* @return mixed
*/
public static function get( $key, $default = null ) {
// Ensure everything's there.
$option = get_option( self::key( $key ), $default );
if ( $default === $option || ! isset( $option['expire'] ) || ! isset( $option['data'] )
) {
return $default;
}
// Maybe expire the result instead of returning it.
$expire = $option['expire'];
$data = $option['data'];
if ( false !== $expire && $expire < time() ) {
self::delete( $key );
return $default;
}
return $data;
}
/**
* Delete all `Transient` values with certain prefix from database.
*
* @param string $prefix Cache key prefix.
*/
public static function delete_by_prefix( $prefix ) {
global $wpdb;
/**
* The prefix used in option_name.
*/
$option_prefix = static::key( $prefix );
/**
* LIKE search pattern for the delete query.
*/
$prefix_search_pattern = $wpdb->esc_like( $option_prefix ) . '%';
//phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching
$option_names = $wpdb->get_col(
$wpdb->prepare(
"
SELECT option_name
FROM $wpdb->options
WHERE `option_name` LIKE %s
",
$prefix_search_pattern
)
);
// phpcs:enable
// Go through each option individually to ensure caches are handled properly.
foreach ( $option_names as $option_name ) {
delete_option( $option_name );
}
}
/**
* Delete a cache entry.
*
* @param string $key Cache key name.
*
* @return void
*/
public static function delete( $key ) {
delete_option( self::key( $key ) );
}
}