oont-contents/plugins/wp-rocket/inc/deprecated/classes/busting/class-abstract-busting.php
2025-02-08 15:10:23 +01:00

135 lines
2.5 KiB
PHP

<?php
namespace WP_Rocket\Busting;
/**
* Abstract class for assets busting
*
* @since 3.1
* @author Remy Perona
*/
abstract class Abstract_Busting {
/**
* Cache busting files base path
*
* @var string
*/
protected $busting_path;
/**
* Cache busting base URL
*
* @var string
*/
protected $busting_url;
/**
* Filename for the cache busting file.
*
* @var string
*/
protected $filename;
/**
* Gets the content of an URL
*
* @since 3.1
* @author Remy Perona
*
* @param string $url The URL to request.
* @return string|bool
*/
protected function get_file_content( $url ) {
$content = wp_remote_retrieve_body( wp_remote_get( $url ) );
if ( ! $content ) {
return false;
}
return $content;
}
/**
* Saves the content of the URL to bust to the busting file if it doesn't exist yet.
*
* @since 3.1
* @author Remy Perona
*
* @param string $url URL to get the content from.
* @return bool
*/
public function save( $url ) {
$path = $this->busting_path . $this->filename;
if ( \rocket_direct_filesystem()->exists( $path ) ) {
return true;
}
return $this->refresh_save( $url );
}
/**
* Saves the content of the URL to bust to the busting file.
*
* @since 3.2
* @access public
* @author Grégory Viguier
*
* @param string $url URL to get the content from.
* @return bool
*/
public function refresh_save( $url ) {
$path = $this->busting_path . $this->filename;
$content = $this->get_file_content( $url );
if ( ! $content ) {
// If a previous version is present, it is kept in place.
return false;
}
if ( ! \rocket_direct_filesystem()->exists( $this->busting_path ) ) {
\rocket_mkdir_p( $this->busting_path );
}
if ( ! \rocket_put_content( $path, $content ) ) {
return false;
}
return true;
}
/**
* Gets the final URL for the cache busting file.
*
* @since 3.1
* @author Remy Perona
*
* @return string
*/
protected function get_busting_url() {
// This filter is documented in inc/functions/minify.php.
return apply_filters( 'rocket_js_url', $this->busting_url . $this->filename );
}
/**
* Performs the replacement process.
*
* @since 3.1
* @author Remy Perona
*
* @param string $html HTML content.
* @return string
*/
abstract public function replace_url( $html );
/**
* Searches for element(s) in the DOM
*
* @since 3.1
* @author Remy Perona
*
* @param string $pattern Pattern to match.
* @param string $html HTML content.
* @return string
*/
abstract protected function find( $pattern, $html );
}