203 lines
5.2 KiB
PHP
203 lines
5.2 KiB
PHP
<?php
|
|
/**
|
|
* Astra Sites File System
|
|
*
|
|
* @since 4.2.0
|
|
* @package Astra Sites
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
if ( ! class_exists( 'Astra_Sites_File_System' ) ) {
|
|
|
|
/**
|
|
* Astra_Sites_File_System
|
|
*/
|
|
class Astra_Sites_File_System {
|
|
|
|
/**
|
|
* Instance of Astra_Sites
|
|
*
|
|
* @since 4.2.0
|
|
* @var (self) Astra_Sites
|
|
*/
|
|
private static $instance = null;
|
|
|
|
/**
|
|
* Folder name for the json files.
|
|
*
|
|
* @var string
|
|
* @since 4.2.0
|
|
*/
|
|
public static $folder_name = 'json';
|
|
|
|
/**
|
|
* Instance of Astra_Sites.
|
|
*
|
|
* @since 4.2.0
|
|
* @return self Class object.
|
|
*/
|
|
public static function get_instance() {
|
|
if ( null === self::$instance ) {
|
|
self::$instance = new self();
|
|
}
|
|
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Create files for demo content.
|
|
*
|
|
* @return void
|
|
* @since 4.2.0
|
|
*/
|
|
public function create_file() {
|
|
$upload_dir = wp_upload_dir();
|
|
$file = array(
|
|
'file_base' => $upload_dir['basedir'] . '/astra-sites/' . self::$folder_name,
|
|
'file_name' => 'astra_sites_import_data.json',
|
|
'file_content' => array(),
|
|
);
|
|
|
|
$this->create_single_file( $file );
|
|
}
|
|
|
|
/**
|
|
* Delete a JSON file from the uploads directory.
|
|
*
|
|
* @param string $file_name File name to be deleted.
|
|
* @return void True on success, false on failure.
|
|
*/
|
|
public function delete_json_file( $file_name ) {
|
|
$upload_dir = wp_upload_dir();
|
|
$file_name = $upload_dir['basedir'] . '/astra-sites/' . self::$folder_name . '/' . $file_name;
|
|
|
|
if ( file_exists( $file_name ) ) {
|
|
wp_delete_file( $file_name );
|
|
} else {
|
|
astra_sites_error_log( 'File not found: ' . $file_name );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Getting json file for templates from uploads.
|
|
*
|
|
* @param string $file_name File data.
|
|
* @param bool $array_format Is The file content array.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function get_json_file_content( $file_name, $array_format = true ) {
|
|
$upload_dir = wp_upload_dir();
|
|
$file_name = $upload_dir['basedir'] . '/astra-sites/' . self::$folder_name . '/' . $file_name;
|
|
|
|
if ( file_exists( $file_name ) ) {
|
|
// Ignoring the rule as it is not a remote file.
|
|
$file_content = file_get_contents( $file_name ); //phpcs:ignore WordPressVIPMinimum.Performance.FetchingRemoteData.FileGetContentsUnknown
|
|
|
|
if ( $array_format ) {
|
|
return json_decode( (string) $file_content, true );
|
|
} else {
|
|
return $file_content;
|
|
}
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* Getter for get_json_file_content
|
|
*
|
|
* @since 4.2.0
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function get_demo_content() {
|
|
return $this->get_json_file_content( 'astra_sites_import_data.json' );
|
|
}
|
|
|
|
/**
|
|
* Delete for get_json_file_content
|
|
*
|
|
* @since 4.2.0
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function delete_demo_content() {
|
|
$this->delete_json_file( 'astra_sites_import_data.json' );
|
|
}
|
|
|
|
/**
|
|
* Create single json file.
|
|
*
|
|
* @since 4.2.2
|
|
* @param array<string, mixed> $file file data.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function create_single_file( $file ) {
|
|
|
|
if ( wp_mkdir_p( $file['file_base'] ) ) {
|
|
$file_handle = @fopen( trailingslashit( $file['file_base'] ) . $file['file_name'], 'w' ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged, WordPress.WP.AlternativeFunctions.file_system_read_fopen
|
|
if ( $file_handle ) {
|
|
if ( is_string( wp_json_encode( $file['file_content'] ) ) ) {
|
|
fwrite( $file_handle, wp_json_encode( $file['file_content'] ) ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_read_fwrite, WordPressVIPMinimum.Functions.RestrictedFunctions.file_ops_fwrite
|
|
fclose( $file_handle ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_read_fclose
|
|
astra_sites_error_log( 'File: ' . $file['file_name'] . ' Created Successfully!' );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update files/directories.
|
|
*
|
|
* @param string $file_name The file name.
|
|
* @param mixed $file_content The file content.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function update_json_file( $file_name, $file_content ) {
|
|
$upload_dir = wp_upload_dir();
|
|
$dir_info = array(
|
|
'path' => $upload_dir['basedir'] . '/astra-sites/' . self::$folder_name . '/',
|
|
);
|
|
|
|
if ( ! file_exists( $dir_info['path'] . $file_name ) ) {
|
|
$file = array(
|
|
'file_base' => $dir_info['path'],
|
|
'file_name' => $file_name,
|
|
'file_content' => '',
|
|
);
|
|
|
|
$this->create_single_file( $file );
|
|
}
|
|
|
|
if ( file_exists( $dir_info['path'] . $file_name ) && file_put_contents( $dir_info['path'] . $file_name, wp_json_encode( $file_content ) ) !== false ) { //phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.file_ops_file_put_contents
|
|
astra_sites_error_log( 'File: ' . $file_name . ' Updated Successfully!' );
|
|
} else {
|
|
astra_sites_error_log( 'File: ' . $file_name . ' Not Updated!' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Setter for update_json_file()
|
|
*
|
|
* @param string|int $file_content The file content.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function update_demo_data( $file_content ) {
|
|
$this->update_json_file( 'astra_sites_import_data.json', $file_content );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Kicking this off by calling 'get_instance()' method
|
|
*/
|
|
Astra_Sites_File_System::get_instance();
|
|
|
|
}
|