105 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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;
 | 
						|
	}
 | 
						|
}
 |