| Server IP : 216.106.184.20 / Your IP : 216.73.216.234 Web Server : LiteSpeed System : Linux asmodeus.in-hell.com 5.14.0-570.58.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Oct 29 06:24:11 EDT 2025 x86_64 User : sekoaid1 ( 1891) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /home/sekoaid1/public_html/wp-content/plugins/famethemes-demo-importer/inc/ |
Upload File : |
<?php
/**
* Created by PhpStorm.
* User: truongsa
* Date: 9/16/17
* Time: 9:10 AM
*/
class Demo_Contents_Progress {
private $config_data= array();
private $tgmpa;
function __construct()
{
if ( Demo_Contents::php_support() ) {
add_action('wp_ajax_demo_contents__import', array($this, 'ajax_import'));
add_action('admin_enqueue_scripts', array($this, 'checking_plugins'), 900, 1);
}
}
function checking_plugins( $hook ) {
if( $hook != 'themes.php' ) {
return;
}
if ( ! isset( $_REQUEST['__checking_plugins'] ) ) {
return;
}
$plugins = Demo_Contents::get_instance()->dashboard->get_tgmpa_plugins();
ob_clean();
ob_flush();
ob_start();
wp_send_json_success( $plugins );
die();
}
/**
* @see https://github.com/devinsays/edd-theme-updater/blob/master/updater/theme-updater.php
*/
function ajax_import(){
if ( ! class_exists( 'Merlin_WXR_Parser' ) ) {
require DEMO_CONTENT_PATH. 'inc/merlin-wp/includes/class-merlin-xml-parser.php' ;
}
if ( ! class_exists( 'Merlin_Importer' ) ) {
require DEMO_CONTENT_PATH .'inc/merlin-wp/includes/class-merlin-importer.php';
}
if ( ! current_user_can( 'import' ) ) {
wp_send_json_error( __( "You have not permissions to import.", 'demo-contents' ) );
}
$doing = isset( $_REQUEST['doing'] ) ? sanitize_text_field( $_REQUEST['doing'] ) : '';
if ( ! $doing ) {
wp_send_json_error( __( "No actions to do", 'demo-contents' ) );
}
// Current theme for import
$current_theme = isset( $_REQUEST['current_theme'] ) ? $_REQUEST['current_theme'] : false;
$current_theme = wp_parse_args( $current_theme, array(
'name' => '',
'slug' => '',
'demo_version' => '',
'demo_name' => '',
'activate' => '',
'xml_id' => '',
'json_id' => ''
) );
$current_theme_slug = false;
$current_theme_demo_version = false;
if ( ! $current_theme || ! is_array( $current_theme ) || ! isset( $current_theme['slug'] ) || ! $current_theme['slug'] ) {
wp_send_json_error( __( 'Not theme selected', 'demo-contents' ) );
}
$current_theme_slug = sanitize_text_field( $current_theme['slug'] );
if ( $current_theme['demo_version'] ) {
$current_theme_demo_version = sanitize_text_field( $current_theme['demo_version'] );
}
$themes = Demo_Contents::get_instance()->dashboard->setup_themes();
// if is_activate theme
if ( $doing == 'activate_theme' ) {
switch_theme( $current_theme_slug );
wp_send_json_success( array( 'msg' => sprintf( __( '%s theme activated', 'demo-contents' ), $themes[ $current_theme_slug ]['name'] ) ) );
}
if ( $doing == 'checking_resources' ){
$file_data = $this->maybe_remote_download_data_files( $current_theme );
if ( ! $file_data || empty( $file_data ) ) {
wp_send_json_error( sprintf( __( 'Demo data not found for <strong>%s</strong>. However you can import demo content by upload your demo files below.', 'demo-contents' ) , $themes[ $current_theme_slug ]['name'] ) );
} else {
wp_send_json_success( __( 'Demo data ready for import.', 'demo-contents' ) );
}
}
/// Check theme activate
if ( ! isset( $themes[ $current_theme_slug ] ) ) {
wp_send_json_error( __( 'This theme have not installed.', 'demo-contents' ) );
}
//wp_send_json_success(); // just for test
$file_data = $this->maybe_remote_download_data_files( $current_theme );
if ( ! $file_data || empty( $file_data ) ) {
wp_send_json_error( array( 'type' => 'no-files', 'msg' => __( 'Dummy data files not found', 'demo-contents' ), 'files' => $file_data ) );
}
$transient_key = '_demo_content_'.$current_theme_slug;
if ( $current_theme_demo_version ) {
$transient_key .= '-demos-'.$current_theme_demo_version;
}
$importer = new Merlin_Importer();
$content = get_transient( $transient_key );
if ( ! $content ) {
$parser = new Merlin_WXR_Parser();
$content = $parser->parse( $file_data['xml'] );
set_transient( $transient_key, $content, DAY_IN_SECONDS );
}
if ( is_wp_error( $content ) ) {
wp_send_json_error( __( 'Dummy content empty', 'demo-contents' ) );
}
// Setup config
$option_config = get_transient( $transient_key.'-json' );
if ( false === $option_config ) {
if ( file_exists( $file_data['xml'] ) ) {
global $wp_filesystem;
WP_Filesystem();
$file_contents = $wp_filesystem->get_contents( $file_data['json'] );
$option_config = json_decode( $file_contents, true );
set_transient( $transient_key.'-json', $option_config, DAY_IN_SECONDS ) ;
}
}
switch ( $doing ) {
case 'import_users':
if ( ! empty( $content['users'] ) ) {
$importer->import_users( $content['users'] );
}
break;
case 'import_categories':
if ( ! empty( $content['categories'] ) ) {
$importer->importTerms( $content['categories'] );
}
break;
case 'import_tags':
if ( ! empty( $content['tags'] ) ) {
$importer->importTerms( $content['tags'] );
}
break;
case 'import_taxs':
if ( ! empty( $content['terms'] ) ) {
$importer->importTerms( $content['terms'] );
}
break;
case 'import_posts':
if ( ! empty( $content['posts'] ) ) {
$importer->importPosts( $content['posts'] );
}
$importer->remapImportedData();
do_action( 'demo_contents_import_posts_completed', $this, $importer );
break;
case 'import_theme_options':
if ( isset( $option_config['options'] ) ){
$this->importOptions( $option_config['options'] );
}
// Setup Pages
$processed_posts = get_transient('_wxr_imported_posts') ? get_transient('_wxr_imported_posts') : array();
if ( isset( $option_config['pages'] ) ){
foreach ( $option_config['pages'] as $key => $id ) {
$val = isset( $processed_posts[ $id ] ) ? $processed_posts[ $id ] : null ;
update_option( $key, $val );
}
}
do_action( 'demo_contents_import_theme_options_completed', $this, $importer );
break;
case 'import_widgets':
$this->config_data = $option_config;
if ( isset( $option_config['widgets'] ) ){
// print_r( $option_config['widgets'] );
if ( ! isset( $this->config_data['widgets_config'] ) ) {
$this->config_data['widgets_config'] = array();
}
$importer->importWidgets( $option_config['widgets'], $this->config_data['widgets_config'] );
do_action( 'demo_contents_import_widgets_completed', $this, $importer );
}
break;
case 'import_customize':
if ( isset( $option_config['theme_mods'] ) ){
$importer->importThemeOptions( $option_config['theme_mods'] );
if ( isset( $option_config['customizer_keys'] ) ) {
foreach ( ( array ) $option_config['customizer_keys'] as $k => $list_key ) {
$this->resetup_repeater_page_ids( $k, $list_key );
}
}
}
do_action( 'demo_contents_import_customize_completed', $this, $importer );
// Remove transient data if is live mod
if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
$importer->importEnd();
// Delete file
$file_key = '_demo_contents_file_'.$current_theme_slug;
if ( $current_theme_demo_version ) {
$file_key .= '-demos-'.$current_theme_demo_version;
}
$files = get_transient( $file_key );
if ( is_array( $files ) ) {
foreach ( $files as $file_id ) {
wp_delete_attachment( $file_id );
}
}
delete_transient( $transient_key );
delete_transient( $transient_key.'-json' );
}
break;
} // end switch action
wp_send_json_success( );
}
function importOptions( $options ){
if ( empty( $options ) ) {
return ;
}
foreach ( $options as $option_name => $ops ) {
update_option( $option_name, $ops );
}
}
function resetup_repeater_page_ids( $theme_mod_name = null, $list_keys, $url ='', $option_type = 'theme_mod' ){
$processed_posts = get_transient('_wxr_imported_posts') ? get_transient('_wxr_imported_posts') : array();
if ( ! is_array( $processed_posts ) ) {
$processed_posts = array();
}
// Setup service
$data = get_theme_mod( $theme_mod_name );
if ( is_string( $list_keys ) ) {
switch( $list_keys ) {
case 'media':
$new_data = $processed_posts[ $data ];
if ( $option_type == 'option' ) {
update_option( $theme_mod_name , $new_data );
} else {
set_theme_mod( $theme_mod_name , $new_data );
}
break;
}
return;
}
if ( is_string( $data ) ) {
$data = json_decode( $data, true );
}
if ( ! is_array( $data ) ) {
return false;
}
if ( ! is_array( $processed_posts ) ) {
return false;
}
if ( $url ) {
$url = trailingslashit( $this->config_data['home_url'] );
}
$home = home_url('/');
foreach ($list_keys as $key_info) {
if ($key_info['type'] == 'post' || $key_info['type'] == 'page') {
foreach ($data as $k => $item) {
if (isset($item[$key_info['key']]) && isset ($processed_posts[$item[$key_info['key']]])) {
$data[$k][$key_info['key']] = $processed_posts[ $item[$key_info['key']] ];
}
}
} elseif ($key_info['type'] == 'media') {
$main_key = $key_info['key'];
$sub_key_id = 'id';
$sub_key_url = 'url';
if ($main_key) {
foreach ($data as $k => $item) {
if ( isset ($item[$main_key]) && is_array($item[$main_key])) {
if (isset ($item[$main_key][$sub_key_id]) ) {
$data[$k][$main_key][$sub_key_id] = $processed_posts[ $item[$main_key] [$sub_key_id] ];
}
if (isset ($item[$main_key][$sub_key_url])) {
$data[$k][$main_key][$sub_key_url] = str_replace($url, $home, $item[$main_key][$sub_key_url]);
}
}
}
}
}
}
if ( $option_type == 'option' ) {
update_option( $theme_mod_name , $data );
} else {
set_theme_mod( $theme_mod_name , $data );
}
}
function maybe_remote_download_data_files( $args = array() ) {
$args = wp_parse_args( $args, array(
'slug' => '',
'demo_version' => '',
'xml_id' => '',
'json_id' => ''
) );
$theme_name = $args['slug'];
$demo_version = $args['demo_version'];
if ( $args['xml_id'] ) {
return array( 'xml' => get_attached_file( $args['xml_id'] ), 'json' => get_attached_file( $args['json_id'] ) );
}
if ( ! $theme_name ) {
return false;
}
$sub_path = $theme_name;
if ( $demo_version ) {
$sub_path .= '/demos/'.$demo_version;
}
$prefix_name = str_replace( '/', '-', $sub_path );
$xml_file_name = $prefix_name .'-dummy-data.xml' ;
$config_file_name = $prefix_name .'-config.json';
$xml_file = false;
$config_file = false;
$files_data = get_transient( '_demo_contents_file_'.$prefix_name );
// If have cache
if ( ! empty( $files_data ) ) {
$files_data = wp_parse_args( $files_data, array( 'xml' => '', 'json' => '' ) );
$xml_file = get_attached_file( $files_data['xml'] );
$config_file = get_attached_file( $files_data['json'] );
if ( ! empty( $xml_file ) ) {
return array( 'xml' => $xml_file, 'json' => $config_file );
}
}
$remote_folder = apply_filters( 'demo_contents_remote_demo_data_folder_url', false );
if ( ! $remote_folder ) {
$repo = Demo_Contents::get_github_repo();
$remote_folder = 'https://raw.githubusercontent.com/'.$repo.'/master/';
}
$remote_folder = trailingslashit( $remote_folder );
$xml_id = Demo_Contents::download_file( $remote_folder.$sub_path.'/dummy-data.xml', $xml_file_name );
if ( $xml_id ) {
$xml_file = get_attached_file( $xml_id );
}
$config_id = Demo_Contents::download_file( $remote_folder.$sub_path.'/config.json', $config_file_name );
if ( $config_id ) {
$config_file = get_attached_file( $config_id );
}
if ( ! empty( $xml_file ) ) {
set_transient( '_demo_contents_file_'.$prefix_name, array( 'xml' => $xml_id, 'json' => $config_id ) );
return array( 'xml' => $xml_file, 'json' => $config_file );
}
return false;
}
}