wp_back/wp-content/plugins/wp-asset-clean-up/classes/FileSystem.php

105 lines
3.1 KiB
PHP
Raw Normal View History

2024-05-20 15:37:46 +03:00
<?php
namespace WpAssetCleanUp;
use WpAssetCleanUp\OptimiseAssets\OptimizeCss;
use WpAssetCleanUp\OptimiseAssets\OptimizeJs;
/**
* Class FileSystem
* @package WpAssetCleanUp
*/
class FileSystem
{
/**
* @return bool|\WP_Filesystem_Direct
*/
public static function init()
{
// Set the permission constants if not already set.
if ( ! defined('FS_CHMOD_DIR') ) {
define('FS_CHMOD_DIR', fileperms(ABSPATH) & 0777 | 0755);
}
if ( ! defined('FS_CHMOD_FILE') ) {
define('FS_CHMOD_FILE', fileperms(ABSPATH . 'index.php') & 0777 | 0644);
}
if (! defined('WPACU_FS_USED') && ! class_exists('\WP_Filesystem_Base') && ! class_exists('\WP_Filesystem_Direct')) {
$wpFileSystemBase = ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
$wpFileSystemDirect = ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';
if (is_file($wpFileSystemBase) && is_file($wpFileSystemDirect)) {
// Make sure to use the 'direct' method as it's the most effective in this scenario
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';
define('WPACU_FS_USED', true);
} else {
// Do not use WordPress FileSystem Direct (fallback to default PHP functions)
define('WPACU_FS_USED', false);
}
}
if (defined('WPACU_FS_USED') && WPACU_FS_USED === true) {
return new \WP_Filesystem_Direct( new \StdClass() );
}
return false;
}
/**
* @param $localPathToFile
* @param string $alter
*
* @return false|string
*/
public static function fileGetContents($localPathToFile, $alter = '')
{
// ONLY relevant for CSS files
if ($alter === 'combine_css_imports') {
// This custom class does not minify as it's custom-made for combining @import
$optimizer = new \WpAssetCleanUp\OptimiseAssets\CombineCssImports($localPathToFile);
return $optimizer->minify();
}
// Fallback
if (! self::init()) {
return @file_get_contents($localPathToFile);
}
return self::init()->get_contents($localPathToFile);
}
/**
* @param $localPathToFile
* @param $contents
*
* @return bool
*/
public static function filePutContents($localPathToFile, $contents)
{
if ( (strpos($localPathToFile, WP_CONTENT_DIR . OptimizeCss::getRelPathCssCacheDir()) !== false && ! is_dir(dirname($localPathToFile)))
|| (strpos($localPathToFile, WP_CONTENT_DIR . OptimizeJs::getRelPathJsCacheDir()) !== false && ! is_dir(dirname($localPathToFile)))
) {
$dirToCreate = dirname( $localPathToFile );
try {
mkdir( $dirToCreate, FS_CHMOD_DIR, true );
} catch (\Exception $e) {
error_log( WPACU_PLUGIN_TITLE . ': Could not make directory ' . $dirToCreate . ' / Error: '.$e->getMessage() );
}
}
// Fallback
try {
if ( ! self::init() ) {
$return = file_put_contents( $localPathToFile, $contents );
} else {
$return = self::init()->put_contents( $localPathToFile, $contents, FS_CHMOD_FILE );
}
} catch ( \Exception $e ) {
error_log( WPACU_PLUGIN_TITLE . ': Could not write to ' . $localPathToFile . ' / Error: '.$e->getMessage() );
}
return $return;
}
}