oont-contents/plugins/astra-addon/classes/class-astra-addon-filesystem.php
2025-02-08 15:10:23 +01:00

213 lines
5.5 KiB
PHP

<?php
/**
* Astra Addon Helper.
*
* @package Astra Addon
*/
/**
* Class Astra_Addon_Filesystem.
*/
class Astra_Addon_Filesystem {
/**
* Store instance of Astra_Addon_Filesystem
*
* @since 2.6.4.
* @var Astra_Addon_Filesystem
*/
protected static $instance = null;
/**
* Get instance of Astra_Addon_Filesystem
*
* @since 2.6.4
* @return Astra_Addon_Filesystem
*/
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Get WP_Filesystem instance.
*
* @since 2.6.4
* @return WP_Filesystem
*/
public function get_filesystem() {
global $wp_filesystem;
if ( ! $wp_filesystem ) {
require_once ABSPATH . '/wp-admin/includes/file.php';// phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound
$context = apply_filters( 'request_filesystem_credentials_context', false ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
add_filter( 'request_filesystem_credentials', array( $this, 'request_filesystem_credentials' ) );
$creds = request_filesystem_credentials( site_url(), '', false, $context, null );
WP_Filesystem( $creds, $context );
remove_filter( 'request_filesystem_credentials', array( $this, 'request_filesystem_credentials' ) );
}
// Set the permission constants if not already set.
if ( ! defined( 'FS_CHMOD_DIR' ) ) {
define( 'FS_CHMOD_DIR', 0755 ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound
}
if ( ! defined( 'FS_CHMOD_FILE' ) ) {
define( 'FS_CHMOD_FILE', 0644 ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound
}
return $wp_filesystem;
}
/**
* Sets credentials to true.
*
* @since 2.6.4
*/
public function request_filesystem_credentials() {
return true;
}
/**
* Checks to see if the site has SSL enabled or not.
*
* @since 2.6.4
* @return bool
*/
public function is_ssl() {
if ( is_ssl() ) {
return true;
} elseif ( 0 === stripos( get_option( 'siteurl' ), 'https://' ) ) {
return true;
} elseif ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' == $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
return true;
}
return false;
}
/**
* Create uploads directory if it does not exist.
*
* @since 2.6.4
* @param String $dir directory path to be created.
* @return boolean True of the directory is created. False if directory is not created.
*/
public function maybe_create_uploads_dir( $dir ) {
// Create the upload dir if it doesn't exist.
if ( ! file_exists( $dir ) ) {
// Create the directory.
$status = astra_addon_filesystem()->get_filesystem()->mkdir( $dir );
// IF a directory cannot be created, return with false status.
if ( false === $status ) {
astra_addon_filesystem()->update_filesystem_access_status( $status );
return false;
}
// Add an index file for security.
astra_addon_filesystem()->get_filesystem()->put_contents( $dir . 'index.php', '' );
}
return true;
}
/**
* Update Filesystem status.
*
* @since 2.6.4
* @param boolean $status status for filesystem access.
* @return void
*/
public function update_filesystem_access_status( $status ) {
astra_update_option( 'file-write-access', $status );
}
/**
* Check if filesystem has write access.
*
* @since 2.6.4
* @return boolean True if filesystem has access, false if does not have access.
*/
public function can_access_filesystem() {
return (bool) astra_get_option( 'file-write-access', true );
}
/**
* Reset filesystem access status.
*
* @since 2.6.4
* @return void
*/
public function reset_filesystem_access_status() {
astra_delete_option( 'file-write-access' );
}
/**
* Returns an array of paths for the upload directory
* of the current site.
*
* @since 2.6.4
* @param String $assets_dir directory name to be created in the WordPress uploads directory.
* @return array
*/
public function get_uploads_dir( $assets_dir ) {
$wp_info = wp_upload_dir( null, false );
// SSL workaround.
if ( $this->is_ssl() ) {
$wp_info['baseurl'] = str_ireplace( 'http://', 'https://', $wp_info['baseurl'] );
}
// Build the paths.
$dir_info = array(
'path' => $wp_info['basedir'] . '/' . $assets_dir . '/',
'url' => $wp_info['baseurl'] . '/' . $assets_dir . '/',
);
return apply_filters( 'astra_addon_get_assets_uploads_dir', $dir_info );
}
/**
* Delete file from the filesystem.
*
* @since 2.6.4
* @param String $file Path to the file or directory.
* @param boolean $recursive If set to true, changes file group recursively.
* @param boolean $type Type of resource. 'f' for file, 'd' for directory.
* @return void
*/
public function delete( $file, $recursive = false, $type = false ) {
astra_addon_filesystem()->get_filesystem()->delete( $file, $recursive, $type );
}
/**
* Adds contents to the file.
*
* @param string $file_path Gets the assets path info.
* @param string $style_data Gets the CSS data.
* @since 2.6.4
* @return bool $put_content returns false if file write is not successful.
*/
public function put_contents( $file_path, $style_data ) {
return astra_addon_filesystem()->get_filesystem()->put_contents( $file_path, $style_data );
}
/**
* Get contents of the file.
*
* @param string $file_path Gets the assets path info.
* @since 2.6.4
* @return bool $get_contents Gets te file contents.
*/
public function get_contents( $file_path ) {
return astra_addon_filesystem()->get_filesystem()->get_contents( $file_path );
}
}