File: /home/greer489/public_html/wp-content/themes/betheme/functions/importer/class-mfn-importer-api.php
<?php
/**
* Install pre-built websites remote API
*
* @package Betheme
* @author Muffin group
* @link https://muffingroup.com
*/
if ( ! defined( 'ABSPATH' ) ){
exit;
}
class Mfn_Importer_API extends Mfn_API {
public $code = '';
public $demo = '';
public $path_be = '';
public $path_websites = '';
public $path_demo = '';
/**
* The constructor
*/
public function __construct( $demo = false ){
if( ! $demo ){
return false;
}
$this->code = mfn_get_purchase_code();
$this->demo = $demo;
$upload_dir = wp_upload_dir();
$this->path_be = wp_normalize_path( $upload_dir['basedir'] .'/betheme' );
$this->path_websites = wp_normalize_path( $this->path_be .'/websites' );
$this->make_dir();
}
/**
* Directories creation
*/
public function make_dir(){
$this->path_demo = wp_normalize_path( $this->path_websites .'/'. $this->demo );
if( ! file_exists( $this->path_be ) ){
wp_mkdir_p( $this->path_be );
}
if( ! file_exists( $this->path_websites ) ){
wp_mkdir_p( $this->path_websites );
}
if( ! file_exists( $this->path_demo ) ){
wp_mkdir_p( $this->path_demo );
}
}
/**
* Delete temporary directory
*/
public function delete_temp_dir(){
// filesystem
$wp_filesystem = Mfn_Helper::filesystem();
// director is located outside wp uploads dir
$upload_dir = wp_upload_dir();
if( false === strpos( $this->path_demo, $upload_dir['basedir'] ) ){
return false;
}
$wp_filesystem->delete( $this->path_demo, true );
}
/**
* Remote get demo
*/
public function remote_get_demo(){
$args = array(
'code' => $this->code,
'demo' => $this->demo,
);
$url = add_query_arg( $args, $this->get_url( 'websites_download' ) );
$args = array(
'user-agent' => 'WordPress/'. get_bloginfo( 'version' ) .'; '. network_site_url(),
'timeout' => 30,
);
$url = "https://f004.backblazeb2.com/file/gpltimes/betheme/demos/{$this->demo}.zip";
$response = wp_remote_get( $url, $args );
if( is_wp_error( $response ) ){
return $response;
}
$body = wp_remote_retrieve_body( $response );
// remote get fallback
if( empty( $body ) ){
if( function_exists( 'ini_get' ) && ini_get( 'allow_url_fopen' ) ){
$body = @file_get_contents( $url );
}
}
if( empty( $body ) ){
return new WP_Error( 'error_download', __( 'The package could not be downloaded.', 'mfn-opts' ) );
}
if( $json = json_decode( $body, true ) ){
if( isset( $json['error'] ) ){
return new WP_Error( 'invalid_response', $json['error'] );
}
}
// filesystem
$wp_filesystem = Mfn_Helper::filesystem();
$path_zip = wp_normalize_path( $this->path_demo .'/'. $this->demo .'.zip' );
$path_unzip = wp_normalize_path( $this->path_demo .'/'. $this->demo );
if( ! $wp_filesystem->put_contents( $path_zip, $body, FS_CHMOD_FILE ) ){
// put_contents fallback
@unlink( $path_zip );
$fp = @fopen( $path_zip, 'w' );
$fwrite = @fwrite( $fp, $body );
@fclose( $fp );
if( false === $fwrite ){
return new WP_Error( 'error_fs', __( 'WordPress filesystem error.', 'mfn-opts' ) );
}
}
$unzip = unzip_file( $path_zip, $this->path_demo );
// fallback for WordPress unzip
$path_content = $path_unzip .'/content.xml.gz';
if( ! $wp_filesystem->exists( $path_content )
|| ( $wp_filesystem->exists( $path_content ) && ! $wp_filesystem->get_contents( $path_content ) ) ){
$wp_filesystem->delete( $path_unzip, true );
$zip = new ZipArchive;
if ( $zip->open( $path_zip ) === TRUE ) {
$zip->extractTo( $this->path_demo );
$zip->close();
}
}
// end: fallback for WordPress unzip
if( is_wp_error( $unzip ) ){
return new WP_Error( 'error_unzip', __( 'The package could not be unziped.', 'mfn-opts' ) );
}
if( ! is_dir( $path_unzip ) ) {
return new WP_Error( 'error_folder', sprintf( __( 'Demo data folder does not exist (%s).', 'mfn-opts' ), $path_unzip ) );
}
return $path_unzip;
}
}