OwlCyberSecurity - MANAGER
Edit File: Cache.php
<?php /** * Cache Model * * @file The Cache file * @package HMWP/CacheModel * @since 5.0.0 */ defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' ); class HMWP_Models_Cache { protected $_replace = array(); protected $_cachepath = ''; protected $chmod = 644; public function __construct() { $this->setCachePath( WP_CONTENT_DIR . '/cache/' ); } /** * Set the cache storage path * * @param string $path The path where cache files are stored * * @return void */ public function setCachePath( $path ) { $this->_cachepath = $path; } /** * Retrieve the current cache path. * * Initialize the WordPress filesystem and determine the appropriate cache * path, considering multisite configurations. * * @return string|bool The cache path if it exists, otherwise false. */ public function getCachePath() { // Initialize WordPress Filesystem $wp_filesystem = HMWP_Classes_ObjController::initFilesystem(); // Get the website cache path $path = $this->_cachepath; if ( HMWP_Classes_Tools::isMultisites() ) { if ( $wp_filesystem->is_dir( $path . get_current_blog_id() . '/' ) ) { $path .= get_current_blog_id() . '/'; } } if ( ! $wp_filesystem->is_dir( $path ) ) { return false; } return $path; } /** * Build the redirection rules for the application. * * This method constructs the necessary redirection paths and patterns * for URL rewriting in the application. It ensures the replacement paths * are set properly, adds the domain to the rewrites if necessary, and * verifies only the intended paths are modified. * * @return void */ public function buildRedirect() { // If the replacement was not already set if ( empty( $this->_replace ) ) { /** * The Rewrite Model * * @var HMWP_Models_Rewrite $rewriteModel */ $rewriteModel = HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rewrite' ); // Build the rules paths to change back the hidden paths if ( ! isset( $rewriteModel->_replace['from'] ) && ! isset( $rewriteModel->_replace['to'] ) ) { $rewriteModel->buildRedirect(); // Add the domain to rewrites if not multisite if ( HMWP_Classes_Tools::getOption( 'hmwp_fix_relative' ) && ! HMWP_Classes_Tools::isMultisites() ) { $rewriteModel->prepareFindReplace(); } } // Verify only the rewrites if ( isset( $rewriteModel->_replace['from'] ) && isset( $rewriteModel->_replace['to'] ) && ! empty( $rewriteModel->_replace['from'] ) && ! empty( $rewriteModel->_replace['to'] ) ) { if ( ! empty( $rewriteModel->_replace['rewrite'] ) ) { foreach ( $rewriteModel->_replace['rewrite'] as $index => $value ) { //add only the paths or the design path if ( ( isset( $rewriteModel->_replace['to'][ $index ] ) && substr( $rewriteModel->_replace['to'][ $index ], - 1 ) == '/' ) || strpos( $rewriteModel->_replace['to'][ $index ], '/' . HMWP_Classes_Tools::getOption( 'hmwp_themes_style' ) ) ) { $this->_replace['from'][] = $rewriteModel->_replace['from'][ $index ]; $this->_replace['to'][] = $rewriteModel->_replace['to'][ $index ]; } } } // Add the domain to rewrites if ( HMWP_Classes_Tools::getOption( 'hmwp_fix_relative' ) ) { $this->_replace['from'] = array_map( array( $rewriteModel, 'addDomainUrl' ), (array) $this->_replace['from'] ); $this->_replace['to'] = array_map( array( $rewriteModel, 'addDomainUrl' ), (array) $this->_replace['to'] ); } } } } /** * Change paths in CSS files in the cache directory * * This method scans the cache directory for CSS files, reads their contents, * and performs find-and-replace operations based on predefined redirects. * If changes are made to the contents, the modified file is written back * to the disk. * * @return void */ public function changePathsInCss() { if ( HMWP_Classes_Tools::getOption( 'error' ) ) { return; } try { if ( $this->getCachePath() ) { $cssfiles = $this->rsearch( $this->getCachePath() . '*.css' ); if ( ! empty( $cssfiles ) ) { // Load the redirects into array $this->buildRedirect(); foreach ( $cssfiles as $file ) { // Only if the file is writable if ( ! $content = $this->readFile( $file ) ) { continue; } // Find replace the content $newcontent = $this->findReplace( $content ); if ( $newcontent <> $content ) { //write into file $this->writeFile( $file, $newcontent ); } } } } } catch ( Exception $e ) { } } /** * Modifies paths in JavaScript files by searching and replacing content. * * This method scans for JavaScript files within a specified cache directory, * reads their content, and performs find-and-replace operations based on * predefined rules. If modifications are made, the updated content is written * back to the respective files. * * @return void */ public function changePathsInJs() { if ( HMWP_Classes_Tools::getOption( 'error' ) ) { return; } try { if ( $this->getCachePath() ) { $jsfiles = $this->rsearch( $this->getCachePath() . '*.js' ); if ( ! empty( $jsfiles ) ) { // Load the redirects into array $this->buildRedirect(); foreach ( $jsfiles as $file ) { // Only if the file is writable if ( ! $content = $this->readFile( $file ) ) { continue; } // Find replace the content $newcontent = $this->findReplace( $content ); if ( $newcontent <> $content ) { //echo $newcontent;exit(); //write into file $this->writeFile( $file, $newcontent ); } } } } } catch ( Exception $e ) { } } /** * Changes paths in the HTML files located in the cache directory. * * This method initializes the WordPress filesystem, searches for HTML files * in the cache directory, and performs find-and-replace operations on their content. * Modified content is then written back to the files if changes were made and if they are writable. * * @return void */ public function changePathsInHTML() { //Initialize WordPress Filesystem $wp_filesystem = HMWP_Classes_ObjController::initFilesystem(); if ( HMWP_Classes_Tools::getOption( 'error' ) ) { return; } try { if ( $this->getCachePath() ) { $htmlfiles = $this->rsearch( $this->getCachePath() . '*.html' ); if ( ! empty( $htmlfiles ) ) { // Load the redirects into array $this->buildRedirect(); foreach ( $htmlfiles as $file ) { // Only if the file is writable if ( ! $wp_filesystem->is_writable( $file ) ) { continue; } // Get the file content $content = $wp_filesystem->get_contents( $file ); // Find & replace the content $newcontent = $this->findReplace( $content ); if ( $newcontent <> $content ) { // Write into file $this->writeFile( $file, $newcontent ); } } } } } catch ( Exception $e ) { } } /** * Replaces specified paths within the content based on predefined mappings. * * @param string $content The content in which the paths are to be replaced. * * @return string The modified content with the specified paths replaced. * @throws Exception */ public function findReplace( $content ) { // If there are replaced paths if ( ! empty( $this->_replace ) && isset( $this->_replace['from'] ) && isset( $this->_replace['to'] ) ) { // If there is content in the file if ( $content <> '' ) { // If the file has unchanged paths if ( strpos( $content, HMWP_Classes_Tools::$default['hmwp_admin_url'] ) !== false || strpos( $content, HMWP_Classes_Tools::$default['hmwp_wp-content_url'] ) !== false || strpos( $content, HMWP_Classes_Tools::$default['hmwp_wp-includes_url'] ) !== false ) { // Fix the relative links before if ( HMWP_Classes_Tools::getOption( 'hmwp_fix_relative' ) ) { $content = HMWP_Classes_ObjController::getClass( 'HMWP_Models_Rewrite' )->fixRelativeLinks( $content ); } $content = str_ireplace( $this->_replace['from'], $this->_replace['to'], $content ); } // Text Mapping for all css files - Experimental if ( HMWP_Classes_Tools::getOption( 'hmwp_mapping_text_show' ) && HMWP_Classes_Tools::getOption( 'hmwp_mapping_file' ) ) { $hmwp_text_mapping = json_decode( HMWP_Classes_Tools::getOption( 'hmwp_text_mapping' ), true ); if ( isset( $hmwp_text_mapping['from'] ) && ! empty( $hmwp_text_mapping['from'] ) && isset( $hmwp_text_mapping['to'] ) && ! empty( $hmwp_text_mapping['to'] ) ) { // Only classes & ids if ( HMWP_Classes_Tools::getOption( 'hmwp_mapping_classes' ) ) { foreach ( $hmwp_text_mapping['from'] as $index => $from ) { if ( strpos( $content, $from ) !== false ) { $content = preg_replace( "'(?:([^/])" . addslashes( $from ) . "([^/]))'is", '$1' . $hmwp_text_mapping['to'][ $index ] . '$2', $content ); } } } else { $content = str_ireplace( $hmwp_text_mapping['from'], $hmwp_text_mapping['to'], $content ); } } } } } return $content; } /** * Recursively searches for files matching a pattern. * * @param string $pattern The pattern to search for. * @param int $flags Optional flags to control the search behavior. * * @return array An array of files matching the pattern. */ public function rsearch( $pattern, $flags = 0 ) { $files = array(); if ( function_exists( 'glob' ) ) { $files = glob( $pattern, $flags ); foreach ( glob( dirname( $pattern ) . '/*', GLOB_ONLYDIR | GLOB_NOSORT ) as $dir ) { $files = array_merge( $files, $this->rsearch( $dir . '/' . basename( $pattern ), $flags ) ); } } return $files; } /** * Read the contents of a file. * * @param string $file The path to the file to be read. * * @return string|false The contents of the file if it is writable; otherwise, false. */ public function readFile( $file ) { // Initialize WordPress Filesystem $wp_filesystem = HMWP_Classes_ObjController::initFilesystem(); if ( $wp_filesystem->is_writable( $file ) ) { return $wp_filesystem->get_contents( $file ); } return false; } /** * Writes content to a file if the file is writable. * * @param string $file The path to the file to be written. * @param string $content The content to be written to the file. * * @return void */ public function writeFile( $file, $content ) { // Initialize WordPress Filesystem $wp_filesystem = HMWP_Classes_ObjController::initFilesystem(); if ( $wp_filesystem->is_writable( $file ) ) { $wp_filesystem->put_contents( $file, $content ); } } }