1388 lines
47 KiB
PHP
Executable File
1388 lines
47 KiB
PHP
Executable File
<?php
|
|
defined('ABSPATH') or die("No script kiddies please!");
|
|
/**
|
|
* The admin-specific functionality of the plugin.
|
|
*
|
|
* @link https://mysterythemes.com/
|
|
* @since 1.0.0
|
|
*
|
|
* @package Mystery Themes Demo Importer
|
|
* @subpackage /admin
|
|
*/
|
|
if ( !class_exists( 'MTDI_Admin' ) ) :
|
|
class MTDI_Admin extends MTDI_Library{
|
|
/**
|
|
* The name of this plugin.
|
|
*
|
|
* @since 1.0.0
|
|
* @access private
|
|
* @var string $plugin_name The ID of this plugin.
|
|
*/
|
|
private $plugin_name;
|
|
|
|
/**
|
|
* The version of this plugin.
|
|
*
|
|
* @since 1.0.0
|
|
* @access private
|
|
* @var string $version The current version of this plugin.
|
|
*/
|
|
private $version;
|
|
|
|
/**
|
|
* Initialize the class and set its properties.
|
|
*
|
|
* @since 1.0.0
|
|
* @param string $plugin_name The name of this plugin.
|
|
* @param string $version The version of this plugin.
|
|
*/
|
|
public function __construct( $plugin_name, $version ) {
|
|
$this->plugin_name = $plugin_name;
|
|
$this->version = $version;
|
|
}
|
|
|
|
/**
|
|
* Register the stylesheets for the admin area.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function enqueue_styles() {
|
|
wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/mtdi-admin.css', array(), MTDI_VERSION, 'all' );
|
|
}
|
|
|
|
/**
|
|
* Register the JavaScript for the admin area.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function enqueue_scripts( $hook_suffix ) {
|
|
/**
|
|
* Applies condition for theme setting s page only.
|
|
*/
|
|
$activated_theme = get_stylesheet();
|
|
|
|
if ( is_child_theme() ) {
|
|
$activated_theme = get_template();
|
|
}
|
|
|
|
if ( $hook_suffix == 'appearance_page_'. esc_html( $activated_theme ) .'-settings' || $hook_suffix == 'appearance_page_'. esc_html( $activated_theme ) .'-dashboard' || $hook_suffix == 'appearance_page_mysterythemes-demo-importer' ) {
|
|
wp_enqueue_script( 'mtdi-admin', plugin_dir_url( __FILE__ ) . 'js/mtdi-admin.js', array( 'jquery','wp-util', 'updates' ), $this->version, false );
|
|
|
|
/** Localizing the text to be used in Scripts **/
|
|
wp_localize_script( 'mtdi-admin', 'MTDI_JSObject',
|
|
array(
|
|
'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
|
|
'wp_customize_on' => apply_filters( 'enable_wp_customize_save_hooks', false ),
|
|
'demo_installing' => __( 'Installing Demo...', 'mysterythemes-demo-importer' ),
|
|
'demo_installed' => __( 'Demo Installed', 'mysterythemes-demo-importer' ),
|
|
'plugin_installing' => __( 'Installing', 'mysterythemes-demo-importer' ),
|
|
'importing_demo' => __( 'Demo Importing...', 'mysterythemes-demo-importer' ),
|
|
'plugin_activating' => __( 'Activating', 'mysterythemes-demo-importer' ),
|
|
'activating_installing' => __( 'Installing & Activating', 'mysterythemes-demo-importer' ),
|
|
'plugin_activated' => __( 'Activated', 'mysterythemes-demo-importer' ),
|
|
'plugin_activate' => __( 'Activate Now', 'mysterythemes-demo-importer' ),
|
|
'_wpnonce' => wp_create_nonce( 'mtdi_admin_import_nonce' ),
|
|
'home_url' => get_bloginfo( 'url' ),
|
|
'demo_import_success' => __( 'Demo has been successfully installed', 'mysterythemes-demo-importer' ),
|
|
'demo_confirm' => __( 'Are you sure to import demo content?', 'mysterythemes-demo-importer' ),
|
|
)
|
|
);
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets up plugin transient cache for further use
|
|
*
|
|
*/
|
|
public function plugin_setup() {
|
|
$packages = array();
|
|
$xmldemopackages = get_transient( 'mtdi_theme_packages' );
|
|
$activated_theme = get_template(); //active template slug
|
|
|
|
/**
|
|
* Fixed activated theme demo package's issue
|
|
* while switching in house theme
|
|
*
|
|
* @since 1.1.1
|
|
*/
|
|
$get_activated_theme = get_option( 'mtdi_activated_theme' );
|
|
if ( empty( $get_activated_theme ) || $activated_theme !== $get_activated_theme ) {
|
|
$packages = $this->retrieve_demo_by_activatetheme( $activated_theme );
|
|
|
|
if ( $packages ) {
|
|
set_transient( 'mtdi_theme_packages', $packages, WEEK_IN_SECONDS );
|
|
}
|
|
$xmldemopackages = get_transient( 'mtdi_theme_packages' );
|
|
|
|
update_option( 'mtdi_activated_theme', $activated_theme );
|
|
}
|
|
|
|
if ( ! empty( $xmldemopackages[$activated_theme]['theme_slug'] ) ) {
|
|
if ( empty( $xmldemopackages ) || $activated_theme !== $xmldemopackages[$activated_theme]['theme_slug'] ) {
|
|
$packages = $this->retrieve_demo_by_activatetheme( $activated_theme );
|
|
if ( $packages ) {
|
|
set_transient( 'mtdi_theme_packages', $packages, WEEK_IN_SECONDS );
|
|
}
|
|
}
|
|
}
|
|
|
|
return apply_filters( 'mtdi_theme_packages_' . $activated_theme, $packages );
|
|
}
|
|
|
|
/**
|
|
* Get All demo data from selected demo name Ajax Method
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function displayPopupImportForm() {
|
|
|
|
if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'mtdi_admin_import_nonce' ) ) {
|
|
esc_html_e( 'This action was stopped for security purposes.', 'mysterythemes-demo-importer' );
|
|
die();
|
|
}
|
|
|
|
$selected_demo = get_template();
|
|
$demodata = get_transient( 'mtdi_theme_packages' );
|
|
|
|
if ( empty( $demodata ) || $demodata == false ) {
|
|
$demodata = $this->retrieve_demo_by_activatetheme( $selected_demo );
|
|
}
|
|
$selected_demo = sanitize_text_field( $_POST['plugin_slug'] );
|
|
|
|
include( MTDI_ADMIN_DIR. 'partials/mtdi-import-popup.php' );
|
|
wp_die();
|
|
}
|
|
|
|
/**
|
|
* Install required plugins
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function install_required_plugins() {
|
|
if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'mtdi_admin_import_nonce' ) ) {
|
|
esc_html_e( 'This action was stopped for security purposes.', 'mysterythemes-demo-importer' );
|
|
die();
|
|
}
|
|
|
|
if ( empty( $_POST['plugin_slug'] ) || empty( $_POST['plugin_init'] ) ) {
|
|
wp_send_json_error(
|
|
array(
|
|
'slug' => '',
|
|
'errorCode' => 'no_plugin_specified',
|
|
'errorMessage' => __( 'No plugin specified.', 'mysterythemes-demo-importer'),
|
|
)
|
|
);
|
|
}
|
|
|
|
$plugin_slug = sanitize_key( wp_unslash( $_POST['plugin_slug'] ) );
|
|
$plugin_init = plugin_basename( sanitize_text_field( wp_unslash( $_POST['plugin_init'] ) ) );
|
|
|
|
$status = array(
|
|
'install' => 'plugin',
|
|
'slug' => sanitize_key( wp_unslash( $_POST['plugin_slug'] ) ),
|
|
);
|
|
|
|
if ( ! current_user_can( 'install_plugins' ) ) {
|
|
$status['errorMessage'] = __( 'Sorry, you are not allowed to install plugins on this site.', 'mysterythemes-demo-importer' );
|
|
wp_send_json_error( $status );
|
|
}
|
|
|
|
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
|
include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
|
|
|
|
// Looks like a plugin is installed, but not active.
|
|
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_slug ) ) {
|
|
$plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_init );
|
|
$status['plugin'] = $plugin_init;
|
|
$status['pluginName'] = $plugin_data['Name'];
|
|
|
|
if ( current_user_can( 'activate_plugin', $plugin_init ) && is_plugin_inactive( $plugin_init ) ) {
|
|
$result = activate_plugin( $plugin_init );
|
|
|
|
if ( is_wp_error( $result ) ) {
|
|
$status['errorCode'] = $result->get_error_code();
|
|
$status['errorMessage'] = $result->get_error_message();
|
|
wp_send_json_error( $status );
|
|
}
|
|
|
|
wp_send_json_success( $status );
|
|
}
|
|
}
|
|
|
|
// Install plugin locally from zip file
|
|
if ( isset( $_POST['install'] ) && ( $_POST['install'] === "locally" ) ) {
|
|
$file_location = get_template_directory() . '/inc/plugins/' . esc_html( $plugin_slug ) . '.zip';
|
|
$file = $_POST['file'];
|
|
$plugin_directory = ABSPATH . 'wp-content/plugins/';
|
|
|
|
$zip = new ZipArchive;
|
|
if ( $zip->open( esc_html( $file_location ) ) === TRUE ) {
|
|
$zip->extractTo( $plugin_directory );
|
|
$zip->close();
|
|
|
|
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_slug ) ) {
|
|
$plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_init );
|
|
$status['plugin'] = $plugin_init;
|
|
$status['pluginName'] = $plugin_data['Name'];
|
|
$this->check_do_activate_plugin( $plugin_init );
|
|
}
|
|
} else {
|
|
$status['errorMessage'] = esc_html__( 'There was an error installing plugin', 'mysterythemes-demo-importer' );
|
|
wp_send_json_error( $status );
|
|
}
|
|
}
|
|
|
|
$api = plugins_api(
|
|
'plugin_information',
|
|
array(
|
|
'slug' => sanitize_key( wp_unslash( $plugin_slug ) ),
|
|
'fields' => array(
|
|
'sections' => false,
|
|
),
|
|
)
|
|
);
|
|
if ( is_wp_error( $api ) ) {
|
|
$status['errorMessage'] = $api->get_error_message();
|
|
wp_send_json_error( $status );
|
|
}
|
|
|
|
$status['pluginName'] = $api->name;
|
|
$skin = new WP_Ajax_Upgrader_Skin();
|
|
$upgrader = new Plugin_Upgrader( $skin );
|
|
$result = $upgrader->install( $api->download_link );
|
|
|
|
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
|
|
$status['debug'] = $skin->get_upgrade_messages();
|
|
}
|
|
|
|
if ( is_wp_error( $result ) ) {
|
|
$status['errorCode'] = $result->get_error_code();
|
|
$status['errorMessage'] = $result->get_error_message();
|
|
wp_send_json_error( $status );
|
|
} elseif ( is_wp_error( $skin->result ) ) {
|
|
$status['errorCode'] = $skin->result->get_error_code();
|
|
$status['errorMessage'] = $skin->result->get_error_message();
|
|
wp_send_json_error( $status );
|
|
} elseif ( $skin->get_errors()->get_error_code() ) {
|
|
$status['errorMessage'] = $skin->get_error_messages();
|
|
wp_send_json_error( $status );
|
|
} elseif ( is_null( $result ) ) {
|
|
global $wp_filesystem;
|
|
|
|
$status['errorCode'] = esc_html__( 'unable_to_connect_to_filesystem', 'mysterythemes-demo-importer' );
|
|
$status['errorMessage'] = esc_html__( 'Unable to connect to the filesystem. Please confirm your credentials.', 'mysterythemes-demo-importer' );
|
|
|
|
// Pass through the error from WP_Filesystem if one was raised.
|
|
if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {
|
|
$status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
|
|
}
|
|
|
|
wp_send_json_error( $status );
|
|
}
|
|
|
|
$install_status = install_plugin_install_status( $api );
|
|
|
|
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_slug ) ) {
|
|
$plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_init );
|
|
$status['plugin'] = $plugin_init;
|
|
$status['pluginName'] = $plugin_data['Name'];
|
|
|
|
if ( current_user_can( 'activate_plugin', $plugin_init ) && is_plugin_inactive( $plugin_init ) ) {
|
|
$result = activate_plugin( $plugin_init );
|
|
|
|
if ( is_wp_error( $result ) ) {
|
|
$status['errorCode'] = $result->get_error_code();
|
|
$status['errorMessage'] = $result->get_error_message();
|
|
wp_send_json_error( $status );
|
|
}
|
|
|
|
wp_send_json_success( $status );
|
|
}
|
|
}
|
|
wp_send_json_success( $status );
|
|
}
|
|
|
|
/**
|
|
* Activate Required Plugins Ajax Method
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function activate_req_plugins() {
|
|
|
|
if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'mtdi_admin_import_nonce' ) ) {
|
|
esc_html_e_( 'This action was stopped for security purposes.', 'mysterythemes-demo-importer' );
|
|
die();
|
|
}
|
|
|
|
$plugininit = ( isset( $_POST['plugin_init'] ) ) ? esc_attr( $_POST['plugin_init'] ) : '';
|
|
$result = activate_plugin( $plugininit );
|
|
|
|
if ( is_wp_error( $result ) ) {
|
|
// Process Error
|
|
wp_send_json_error(
|
|
array(
|
|
'success' => false,
|
|
'message' => $result->get_error_message(),
|
|
)
|
|
);
|
|
} else {
|
|
wp_send_json_success(
|
|
array(
|
|
'success' => true,
|
|
'message' => esc_html__( 'Plugin Successfully Activated.', 'mysterythemes-demo-importer' ),
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Append popup form for demo import.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function append_popup_form() {
|
|
echo '<div id="mtdi-demo-popup-wrap" class="mtdi-popup-wrap"></div>';
|
|
}
|
|
|
|
/**
|
|
* function about import all demo content.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function import_all_demo() {
|
|
if ( wp_verify_nonce( $_POST['_wpnonce'], 'mtdi_admin_import_nonce' ) ) {
|
|
$execution_time = sanitize_text_field( $_POST['execution_time'] );
|
|
ini_set( 'memory_limit', '350M' );
|
|
if ( $execution_time != 'default' ) {
|
|
ini_set( 'max_execution_time', apply_filters( 'mtdi_demo_import_execution_time', $execution_time ) );
|
|
} else {
|
|
ini_set( 'max_execution_time', apply_filters( 'mtdi_demo_import_execution_time', 300 ) );
|
|
}
|
|
|
|
if ( empty( $_POST['plugin_slug'] ) ) {
|
|
wp_send_json_error(
|
|
array(
|
|
'slug' => '',
|
|
'errorCode' => esc_html__( 'Plugin slug is not specified', 'mysterythemes-demo-importer' ),
|
|
'errorMessage' => esc_html__( 'Plugin slug is not specified.', 'mysterythemes-demo-importer' ),
|
|
)
|
|
);
|
|
}
|
|
|
|
$slug = sanitize_key( wp_unslash( $_POST['plugin_slug'] ) );
|
|
if ( ! defined( 'WP_LOAD_IMPORTERS' ) ) {
|
|
define( 'WP_LOAD_IMPORTERS', true );
|
|
}
|
|
|
|
if ( ! current_user_can( 'import' ) ) {
|
|
$status['errorMessage'] = esc_html__( 'Sorry, you have no permission to import the demo content.', 'mysterythemes-demo-importer');
|
|
wp_send_json_error( $status );
|
|
}
|
|
|
|
$status = array(
|
|
'import' => 'demo',
|
|
'slug' => $slug,
|
|
);
|
|
|
|
$template = get_option( 'template' );
|
|
do_action( 'mtdi_ajax_before_demo_import' );
|
|
$xmldemopackages = get_transient( 'mtdi_theme_packages' );
|
|
if ( empty( $xmldemopackages ) ) {
|
|
$xmldemopackages = $this->retrieve_demo_by_activatetheme( $template );
|
|
}
|
|
|
|
if ( is_child_theme() ) {
|
|
$parent_theme = get_template();
|
|
$demo_data = $xmldemopackages[$parent_theme]['child_themes'][ $slug ];
|
|
} else {
|
|
$demo_data = $xmldemopackages[ $slug ];
|
|
}
|
|
$demoName = strtoupper( $slug );
|
|
$status['demoName'] = str_replace( '-', ' ', $demoName );
|
|
$status['previewUrl'] = get_home_url();
|
|
|
|
if ( ! empty( $demo_data ) ) {
|
|
$status['xmlmessage'] = $this->mtdi_import_dummy_xml( $slug, $demo_data, $status );
|
|
$status['coremessage'] = $this->mtdi_import_core_options( $slug, $demo_data );
|
|
$status['customizermessage'] = $this->mtdi_import_customizer_data( $slug, $demo_data, $status );
|
|
$status['widgetmessage'] = $this->mtdi_import_widget_settings( $slug, $demo_data, $status );
|
|
|
|
// Update imported demo ID.
|
|
update_option( 'mtdi_activated_check', $slug );
|
|
do_action( 'mtdi_ajax_imported', $slug, $demo_data );
|
|
|
|
$activated_demo_check = get_option( 'mtdi_activated_check' );
|
|
if ( $activated_demo_check != '' ) {
|
|
$status['message'] = __( 'success', 'mysterythemes-demo-importer' );
|
|
} else {
|
|
$status['message'] = __( 'fail', 'mysterythemes-demo-importer' );
|
|
}
|
|
}
|
|
wp_send_json_success( $status );
|
|
}
|
|
wp_die();
|
|
}
|
|
|
|
/**
|
|
* Import site core options from its ID.
|
|
* General > Reading > Your homepage displays options
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $demo_id
|
|
* @param array $demo_data
|
|
* @return bool
|
|
*/
|
|
public function mtdi_import_core_options( $demo_id, $demo_data ) {
|
|
if ( ! empty( $demo_data ) ) {
|
|
foreach ( $demo_data as $option_key => $option_value ) {
|
|
|
|
if ( ! in_array( $option_key, array( 'name', 'theme_description','blog_description', 'show_on_front', 'blog_title', 'home_title' ) ) ) {
|
|
continue;
|
|
}
|
|
|
|
$page = get_page_by_title( $option_value );
|
|
|
|
// Format the value based on option key.
|
|
switch ( $option_key ) {
|
|
|
|
case 'show_on_front':
|
|
// Your latest posts
|
|
if ( in_array( $option_value, array( 'posts', 'page' ) ) ) {
|
|
update_option( 'show_on_front', sanitize_text_field( $option_value ) );
|
|
}
|
|
break;
|
|
|
|
case 'home_title':
|
|
// static page > Homepage (page_on_front)
|
|
if ( is_object( $page ) && $page->ID ) {
|
|
update_option( 'page_on_front', esc_attr( $page->ID ) );
|
|
}
|
|
break;
|
|
|
|
case 'blog_title':
|
|
// static page > Posts page: (page_for_posts)
|
|
if ( is_object( $page ) && $page->ID ) {
|
|
update_option( 'page_for_posts', esc_attr( $page->ID ) );
|
|
}
|
|
break;
|
|
|
|
default:
|
|
if ( $option_key == 'name' ) {
|
|
$option_key = 'blogname';
|
|
} elseif ( $option_key == 'blog_description' ) {
|
|
$option_key = 'blogdescription';
|
|
}
|
|
update_option( $option_key, wp_kses_post( $option_value ) );
|
|
|
|
break;
|
|
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Import dummy content from a XML file.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $demo_id
|
|
* @param array $demo_data
|
|
* @param array $status
|
|
* @return bool
|
|
*/
|
|
public function mtdi_import_dummy_xml( $demo_id, $demo_data, $status ) {
|
|
|
|
$import_file_url = $demo_data['xml_file'];
|
|
|
|
// Load Importer API.
|
|
require_once ABSPATH . 'wp-admin/includes/import.php';
|
|
|
|
if ( ! class_exists( 'WP_Importer' ) ) {
|
|
$class_wp_importer = ABSPATH . 'wp-admin/includes/class-wp-importer.php';
|
|
|
|
if ( file_exists( $class_wp_importer ) ) {
|
|
require $class_wp_importer;
|
|
}
|
|
}
|
|
|
|
require MTDI_PLUGIN_DIR . 'includes/wp-importers/class-mtdi-importer.php';
|
|
|
|
// Import XML file demo content.
|
|
$folderpath = MTDI_PLUGIN_DIR.'includes/wp-importers/temp';
|
|
if ( ! file_exists( $folderpath ) ) {
|
|
mkdir( $folderpath, 0777, true );
|
|
}
|
|
$destination_path = $folderpath."/demo.xml";
|
|
|
|
$response = wp_remote_get( $import_file_url );
|
|
$response_code = wp_remote_retrieve_response_code( $response );
|
|
if ( $response_code == '200' ) {
|
|
file_put_contents( $destination_path, $response['body'] );
|
|
}
|
|
|
|
$import_file = MTDI_PLUGIN_DIR.'includes/wp-importers/temp/demo.xml';
|
|
|
|
if ( is_file( $import_file ) ) {
|
|
$wp_import = new MTDI_Demo_WPImporter();
|
|
$wp_import->fetch_attachments = true;
|
|
|
|
ob_start();
|
|
$wp_import->import( $import_file );
|
|
ob_end_clean();
|
|
|
|
flush_rewrite_rules();
|
|
} else {
|
|
$status['errorMsg'] = esc_html__( 'Missing XML file dummy content.', 'mysterythemes-demo-importer' );
|
|
wp_send_json_error( $status );
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Import customizer data from a DAT file.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $demo_id
|
|
* @param array $demo_data
|
|
* @param array $status
|
|
* @return bool
|
|
*/
|
|
public function mtdi_import_customizer_data( $demo_id, $demo_data, $status ) {
|
|
$import_file_url = $demo_data['theme_settings'];
|
|
$folderpath = MTDI_PLUGIN_DIR.'includes/wp-importers/temp';
|
|
$destinationpath = $folderpath."/demo-customizer.dat";
|
|
$response = wp_remote_get( $import_file_url );
|
|
$response_code = wp_remote_retrieve_response_code( $response );
|
|
|
|
if ( $response_code == '200' ) {
|
|
$fh = fopen( $destinationpath, 'w' );
|
|
fclose( $fh );
|
|
file_put_contents( $destinationpath, $response['body'] );
|
|
}
|
|
|
|
$import_cfile = MTDI_PLUGIN_DIR.'includes/wp-importers/temp/demo-customizer.dat';
|
|
if ( is_file( $import_cfile ) ) {
|
|
$results = MTDI_Customizer_Importer::import( $import_cfile, $demo_id, $demo_data );
|
|
|
|
if ( is_wp_error( $results ) ) {
|
|
return false;
|
|
}
|
|
} else {
|
|
$status['errorMsg'] = esc_html__( 'The DAT file customizer data is missing.', 'mysterythemes-demo-importer' );
|
|
wp_send_json_error( $status );
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Import widgets settings from WIE or JSON file.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $demo_id
|
|
* @param array $demo_data
|
|
* @param array $status
|
|
* @return bool
|
|
*/
|
|
public function mtdi_import_widget_settings( $demo_id, $demo_data, $status ) {
|
|
$import_file_wurl = $demo_data['widgets_file'];
|
|
$folderpath = MTDI_PLUGIN_DIR.'includes/wp-importers/temp';
|
|
$destination_path = $folderpath."/demo-widget.wie";
|
|
$response = wp_remote_get( $import_file_wurl );
|
|
$response_code = wp_remote_retrieve_response_code( $response );
|
|
|
|
if ( $response_code == '200' ) {
|
|
$fh = fopen( $destination_path, 'w' );
|
|
fclose( $fh );
|
|
file_put_contents( $destination_path, $response['body'] );
|
|
}
|
|
|
|
$import_wfile = MTDI_PLUGIN_DIR.'includes/wp-importers/temp/demo-widget.wie';
|
|
if ( is_file( $import_wfile ) ) {
|
|
$results = MTDI_Widget_Importer::mtdi_import_widget( $import_wfile, $demo_id, $demo_data );
|
|
|
|
if ( is_wp_error( $results ) ) {
|
|
return false;
|
|
}
|
|
|
|
} else {
|
|
$status['errorMsg'] = esc_html__( 'The WIE file widget content is missing.', 'mysterythemes-demo-importer' );
|
|
wp_send_json_error( $status );
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Include required core importer files.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function include_files() {
|
|
include_once MTDI_PLUGIN_DIR . 'includes/wp-importers/class-widget-importer.php';
|
|
include_once MTDI_PLUGIN_DIR . 'includes/wp-importers/class-customizer-importer.php';
|
|
}
|
|
|
|
/**
|
|
* Update widget and customizer demo import settings data.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function mtdi_update_widget_data( $widget, $widget_type, $instance_id, $demo_data ) {
|
|
if ( ! empty( $demo_data['widgets_data_update'] ) ) {
|
|
foreach ( $demo_data['widgets_data_update'] as $dropdown_type => $dropdown_data ) {
|
|
if ( ! in_array( $dropdown_type, array( 'multi_checkbox', 'dropdown_categories', 'dropdown_pages', 'navigation_menus', 'mega_menus' ) ) ) {
|
|
continue;
|
|
}
|
|
|
|
// Format the value based on dropdown type.
|
|
switch ( $dropdown_type ) {
|
|
|
|
case 'multi_checkbox':
|
|
foreach ( $dropdown_data as $taxonomy => $taxonomy_data ) {
|
|
if ( ! taxonomy_exists( $taxonomy ) ) {
|
|
continue;
|
|
}
|
|
|
|
foreach ( $taxonomy_data as $widget_id => $widget_data ) {
|
|
if ( ! empty( $widget_data[ $instance_id ] ) && $widget_id == $widget_type ) {
|
|
foreach ( $widget_data[ $instance_id ] as $widget_key => $widget_value) {
|
|
$widget[$widget_key] = array();
|
|
foreach ( $widget_value as $k => $v ) {
|
|
$term = get_term_by( 'name', $v, $taxonomy );
|
|
if ( is_object( $term ) && $term->term_id ) {
|
|
$term_id = $term->term_id;
|
|
$widget[$widget_key][$term_id] = '1';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'dropdown_categories':
|
|
foreach ( $dropdown_data as $taxonomy => $taxonomy_data ) {
|
|
if ( ! taxonomy_exists( $taxonomy ) ) {
|
|
continue;
|
|
}
|
|
|
|
foreach ( $taxonomy_data as $widget_id => $widget_data ) {
|
|
if ( ! empty( $widget_data[ $instance_id ] ) && $widget_id == $widget_type ) {
|
|
foreach ( $widget_data[ $instance_id ] as $widget_key => $widget_value ) {
|
|
$term = get_term_by( 'name', $widget_value, $taxonomy );
|
|
|
|
if ( is_object( $term ) && $term->term_id ) {
|
|
$widget[ $widget_key ] = $term->term_id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'navigation_menus':
|
|
foreach ( $dropdown_data as $widget_id => $widget_data ) {
|
|
if ( ! empty( $widget_data[ $instance_id ] ) && $widget_id == $widget_type ) {
|
|
foreach ( $widget_data[ $instance_id ] as $widget_key => $widget_value ) {
|
|
$menu = wp_get_nav_menu_object( $widget_value );
|
|
|
|
if ( is_object( $menu ) && $menu->term_id ) {
|
|
$widget[ $widget_key ] = $menu->term_id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'dropdown_pages':
|
|
foreach ( $dropdown_data as $widget_id => $widget_data ) {
|
|
if ( ! empty( $widget_data[ $instance_id ] ) && $widget_id == $widget_type ) {
|
|
foreach ( $widget_data[ $instance_id ] as $widget_key => $widget_value ) {
|
|
$page = get_page_by_title( $widget_value );
|
|
|
|
if ( is_object( $page ) && $page->ID ) {
|
|
$widget[ $widget_key ] = $page->ID;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'mega_menus':
|
|
$nav_menu_items = wp_get_nav_menu_items( $dropdown_data['menu']['name'] );
|
|
$nav_menu_megamenu_items = $dropdown_data['menu']['items'];
|
|
|
|
foreach ( $nav_menu_megamenu_items as $nav_menu_megamenu_item ) {
|
|
$item_title = $nav_menu_megamenu_item["title"];
|
|
$meta_key_name = $nav_menu_megamenu_item["meta_key"];
|
|
$megamenu_widget_id = isset( $nav_menu_megamenu_item["widget_id"] ) ? $nav_menu_megamenu_item["widget_id"] : '';
|
|
|
|
foreach ( $nav_menu_items as $nav_menu_item ) {
|
|
if ( $item_title === $nav_menu_item->post_title ) {
|
|
|
|
if ( isset( $nav_menu_megamenu_item['data'] ) ) {
|
|
$megamenu_meta_value = get_post_meta( $nav_menu_item->ID, $meta_key_name, true );
|
|
if ( function_exists( 'wp_get_sidebars_widgets' ) ) {
|
|
$widgets = wp_get_sidebars_widgets(true);
|
|
$megamenu_widgets = $widgets[$megamenu_widget_id];
|
|
$menu_data = $nav_menu_megamenu_item['data'];
|
|
foreach ( $menu_data as $menu_dat_key => $menu_dat_value ) {
|
|
foreach ( $menu_dat_value as $widget_per_col_key => $widget_per_col_value ) {
|
|
foreach ( $widget_per_col_value as $widget_num_key => $widget_num_value ) {
|
|
$col_widget_count = 0;
|
|
foreach ( $widget_num_value as $widget_index_key => $widget_index_value ) {
|
|
$widget_index = $widget_index_value['index'];
|
|
$widget_id_to_set = $megamenu_widgets[$widget_index];
|
|
$megamenu_meta_value['layout'][0]['row'][$widget_per_col_key]['items'][$col_widget_count]['widget_id'] = $widget_id_to_set;
|
|
$col_widget_count++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
update_post_meta( $nav_menu_item->ID, $meta_key_name, $megamenu_meta_value );
|
|
} // check wp_get_sidebars_widgets function End
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return $widget;
|
|
}
|
|
|
|
/**
|
|
* Update customizer settings data.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param array $data
|
|
* @param array $demo_data
|
|
* @return array
|
|
*/
|
|
public function mtdi_update_customizer_data( $data, $demo_data ) {
|
|
|
|
if ( ! empty( $demo_data['customizer_data_update'] ) ) {
|
|
|
|
foreach ( $demo_data['customizer_data_update'] as $data_type => $data_value ) {
|
|
if ( ! in_array( $data_type, array( 'pages', 'categories', 'nav_menu_locations', 'multi_categories', 'mega_menus' ) ) ) {
|
|
continue;
|
|
}
|
|
|
|
switch ( $data_type ) {
|
|
|
|
case 'categories':
|
|
foreach ( $data_value as $taxonomy => $taxonomy_data ) {
|
|
if ( ! taxonomy_exists( $taxonomy ) ) {
|
|
continue;
|
|
}
|
|
|
|
foreach ( $taxonomy_data as $option_key => $option_value ) {
|
|
if ( ! empty( $data['mods'][ $option_key ] ) ) {
|
|
$term = get_term_by( 'name', $option_value, $taxonomy );
|
|
|
|
if ( is_object( $term ) && $term->term_id ) {
|
|
$data['mods'][ $option_key ] = $term->term_id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'multi_categories':
|
|
foreach ( $data_value as $taxonomy => $taxonomy_data ) {
|
|
if ( ! taxonomy_exists( $taxonomy ) ) {
|
|
continue;
|
|
}
|
|
|
|
foreach ( $taxonomy_data as $option_key => $option_value ) {
|
|
if ( ! empty( $data['mods'][ $option_key ] ) ) {
|
|
$term_ids = array();
|
|
foreach ( $option_value as $op_key => $op_value ) {
|
|
$term = get_term_by( 'name', $op_value, $taxonomy );
|
|
if ( is_object( $term ) && $term->term_id ) {
|
|
$term_id = $term->term_id;
|
|
$term_ids[] = $term_id;
|
|
}
|
|
}
|
|
$multi_values = ! is_array( $term_ids ) ? explode( ',', $term_ids ) : $term_ids;
|
|
$multi_s_value = array_map( 'sanitize_text_field', $multi_values );
|
|
$data['mods'][ $option_key ] = $multi_s_value;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'nav_menu_locations':
|
|
$nav_menus = wp_get_nav_menus();
|
|
|
|
if ( ! empty( $nav_menus ) ) {
|
|
foreach ( $nav_menus as $nav_menu ) {
|
|
if ( is_object( $nav_menu ) ) {
|
|
foreach ( $data_value as $location => $location_name ) {
|
|
if ( $nav_menu->name == $location_name ) {
|
|
$data['mods'][ $data_type ][ $location ] = $nav_menu->term_id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'mega_menus':
|
|
$nav_menu_items = wp_get_nav_menu_items( $data_value['menu']['name'] );
|
|
$nav_menu_megamenu_items = $data_value['menu']['items'];
|
|
foreach ( $nav_menu_megamenu_items as $nav_menu_megamenu_item ) {
|
|
$item_title = $nav_menu_megamenu_item["title"];
|
|
$meta_key_name = $nav_menu_megamenu_item["meta_key"];
|
|
$item_meta_value = $nav_menu_megamenu_item["item_meta"];
|
|
foreach ( $nav_menu_items as $nav_menu_item ) {
|
|
if ( $item_title === $nav_menu_item->post_title ) {
|
|
update_post_meta( $nav_menu_item->ID, $meta_key_name, $item_meta_value );
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
} // Ends switch
|
|
}
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Update custom nav menu items URL.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function update_nav_menu_items() {
|
|
$menu_locations = get_nav_menu_locations();
|
|
foreach ( $menu_locations as $location => $menu_id ) {
|
|
|
|
if ( is_nav_menu( $menu_id ) ) {
|
|
$menu_items = wp_get_nav_menu_items( $menu_id, array( 'post_status' => 'any' ) );
|
|
if ( ! empty( $menu_items ) ) {
|
|
foreach ( $menu_items as $menu_item ) {
|
|
if ( isset( $menu_item->url ) && isset( $menu_item->db_id ) && 'custom' == $menu_item->type ) {
|
|
$site_parts = parse_url( home_url( '/' ) );
|
|
$menu_parts = parse_url( $menu_item->url );
|
|
|
|
// Update existing custom nav menu item URL.
|
|
if ( isset( $menu_parts['path'] ) && isset( $menu_parts['host'] ) && apply_filters( 'mtdi_nav_menu_item_url_hosts', in_array( $menu_parts['host'], array( 'demo.mysterythemes.com', 'localhost' ) ) ) ) {
|
|
$menu_item->url = str_replace( array( $menu_parts['scheme'], $menu_parts['host'], $menu_parts['path'] ), array( $site_parts['scheme'], $site_parts['host'], trailingslashit( $site_parts['path'] ) ), $menu_item->url );
|
|
update_post_meta( $menu_item->db_id, '_menu_item_url', esc_url_raw( $menu_item->url ) );
|
|
}
|
|
}
|
|
} //End foreach
|
|
}
|
|
} // End is_nav_menu
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set WC pages properly and disable setup wizard redirect.
|
|
*
|
|
* After importing demo data filter out duplicate WC pages and set them properly.
|
|
* Happens when the user run default woocommerce setup wizard during installation.
|
|
*
|
|
* Note: WC pages ID are stored in an option and slug are modified to remove any numbers.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $demo_id
|
|
*/
|
|
function mt_set_woo_pages( $demo_id ) {
|
|
global $wpdb;
|
|
$woo_pages = apply_filters(
|
|
'mt_woo_' . $demo_id . '_pages',
|
|
array(
|
|
'shop' => array(
|
|
'name' => 'shop',
|
|
'title' => __( 'Shop', 'mysterythemes-demo-importer' ),
|
|
),
|
|
'cart' => array(
|
|
'name' => 'cart',
|
|
'title' => __( 'Cart', 'mysterythemes-demo-importer' ),
|
|
),
|
|
'checkout' => array(
|
|
'name' => 'checkout',
|
|
'title' => __( 'Checkout', 'mysterythemes-demo-importer' ),
|
|
),
|
|
'myaccount' => array(
|
|
'name' => 'my-account',
|
|
'title' => __( 'My Account', 'mysterythemes-demo-importer' ),
|
|
),
|
|
)
|
|
);
|
|
|
|
// Set WooCommerce pages properly.
|
|
foreach ( $woo_pages as $key => $wc_page ) {
|
|
|
|
// Get the ID of every page with matching name or title.
|
|
$page_ids = $wpdb->get_results( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE (post_name = %s OR post_title = %s) AND post_type = 'page' AND post_status = 'publish'", $wc_page['name'], $wc_page['title'] ) );
|
|
|
|
if ( ! is_null( $page_ids ) ) {
|
|
$page_id = 0;
|
|
$delete_ids = array();
|
|
|
|
// Retrieve page with greater id and delete others.
|
|
if ( sizeof( $page_ids ) > 1 ) {
|
|
foreach ( $page_ids as $page ) {
|
|
if ( $page->ID > $page_id ) {
|
|
if ( $page_id ) {
|
|
$delete_ids[] = $page_id;
|
|
}
|
|
|
|
$page_id = $page->ID;
|
|
} else {
|
|
$delete_ids[] = $page->ID;
|
|
}
|
|
}
|
|
} else {
|
|
$page_id = $page_ids[0]->ID;
|
|
}
|
|
|
|
// Delete posts.
|
|
foreach ( $delete_ids as $delete_id ) {
|
|
wp_delete_post( $delete_id, true );
|
|
}
|
|
|
|
// Update WC page.
|
|
if ( $page_id > 0 ) {
|
|
update_option( 'woocommerce_' . $key . '_page_id', $page_id );
|
|
wp_update_post(
|
|
array(
|
|
'ID' => $page_id,
|
|
'post_name' => sanitize_title( $wc_page['name'] ),
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
// We no longer need WC setup wizard redirect.
|
|
delete_transient( '_wc_activation_redirect' );
|
|
}
|
|
|
|
/**
|
|
* Update elementor settings data.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $demo_id Demo ID.
|
|
* @param array $demo_data Demo Data.
|
|
*/
|
|
public function update_elementor_data( $demo_id, $demo_data ) {
|
|
|
|
if ( ! empty( $demo_data['elementor_data_update'] ) ) {
|
|
foreach ( $demo_data['elementor_data_update'] as $data_type => $data_value ) {
|
|
if ( ! empty( $data_value['post_title'] ) ) {
|
|
$page = get_page_by_title( $data_value['post_title'] );
|
|
|
|
if ( is_object( $page ) && $page->ID ) {
|
|
$elementor_data = get_post_meta( $page->ID, '_elementor_data', true );
|
|
|
|
if ( ! empty( $elementor_data ) ) {
|
|
$elementor_data = $this->elementor_recursive_update( $elementor_data, $data_type, $data_value );
|
|
}
|
|
|
|
// Update elementor data.
|
|
update_post_meta( $page->ID, '_elementor_data', $elementor_data );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Delete the `Hello world!` post after successful demo import
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function delete_post_import() {
|
|
$page = get_page_by_title( 'Hello world!', OBJECT, 'post' );
|
|
|
|
if ( is_object( $page ) && $page->ID ) {
|
|
wp_delete_post( $page->ID, true );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update siteorigin panel settings data.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $demo_id Demo ID.
|
|
* @param array $demo_data Demo Data.
|
|
*/
|
|
public function update_siteorigin_data( $demo_id, $demo_data ) {
|
|
|
|
if ( ! empty( $demo_data['siteorigin_panels_data_update'] ) ) {
|
|
foreach ( $demo_data['siteorigin_panels_data_update'] as $data_type => $data_value ) {
|
|
if ( ! empty( $data_value['post_title'] ) ) {
|
|
$page = get_page_by_title( $data_value['post_title'] );
|
|
|
|
if ( is_object( $page ) && $page->ID ) {
|
|
$panels_data = get_post_meta( $page->ID, 'panels_data', true );
|
|
|
|
if ( ! empty( $panels_data ) ) {
|
|
$panels_data = $this->siteorigin_recursive_update( $panels_data, $data_type, $data_value );
|
|
}
|
|
|
|
// Update siteorigin panels data.
|
|
update_post_meta( $page->ID, 'panels_data', $panels_data );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Recursive function to address n level deep layout builder data update.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param array $panels_data
|
|
* @param string $data_type
|
|
* @param array $data_value
|
|
* @return array
|
|
*/
|
|
public function siteorigin_recursive_update( $panels_data, $data_type, $data_value ) {
|
|
static $instance = 0;
|
|
|
|
foreach ( $panels_data as $panel_type => $panel_data ) {
|
|
// Format the value based on panel type.
|
|
switch ( $panel_type ) {
|
|
|
|
case 'grids':
|
|
foreach ( $panel_data as $instance_id => $grid_instance ) {
|
|
if ( ! empty( $data_value['data_update']['grids_data'] ) ) {
|
|
foreach ( $data_value['data_update']['grids_data'] as $grid_id => $grid_data ) {
|
|
if ( ! empty( $grid_data['style'] ) && $instance_id === $grid_id ) {
|
|
$level = isset( $grid_data['level'] ) ? $grid_data['level'] : (int) 0;
|
|
if ( $level == $instance ) {
|
|
foreach ( $grid_data['style'] as $style_key => $style_value ) {
|
|
if ( empty( $style_value ) ) {
|
|
continue;
|
|
}
|
|
|
|
// Format the value based on style key.
|
|
switch ( $style_key ) {
|
|
|
|
case 'background_image_attachment':
|
|
$attachment_id = $this->get_attachment_id( $style_value );
|
|
|
|
if ( 0 !== $attachment_id ) {
|
|
$grid_instance['style'][ $style_key ] = $attachment_id;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
$grid_instance['style'][ $style_key ] = $style_value;
|
|
break;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Update panel grids data.
|
|
$panels_data['grids'][ $instance_id ] = $grid_instance;
|
|
}
|
|
break;
|
|
|
|
case 'widgets':
|
|
foreach ( $panel_data as $instance_id => $widget_instance ) {
|
|
if ( isset( $widget_instance['panels_data']['widgets'] ) ) {
|
|
$instance = $instance + 1;
|
|
$child_panels_data = $widget_instance['panels_data'];
|
|
$panels_data['widgets'][ $instance_id ]['panels_data'] = $this->siteorigin_recursive_update( $child_panels_data, $data_type, $data_value );
|
|
$instance = $instance - 1;
|
|
continue;
|
|
}
|
|
|
|
if ( isset( $widget_instance['nav_menu'] ) && isset( $widget_instance['title'] ) ) {
|
|
$nav_menu = wp_get_nav_menu_object( $widget_instance['title'] );
|
|
|
|
if ( is_object( $nav_menu ) && $nav_menu->term_id ) {
|
|
$widget_instance['nav_menu'] = $nav_menu->term_id;
|
|
}
|
|
} elseif ( ! empty( $data_value['data_update']['widgets_data'] ) ) {
|
|
$instance_class = $widget_instance['panels_info']['class'];
|
|
|
|
foreach ( $data_value['data_update']['widgets_data'] as $dropdown_type => $dropdown_data ) {
|
|
if ( ! in_array( $dropdown_type, array( 'dropdown_pages', 'dropdown_categories' ) ) ) {
|
|
continue;
|
|
}
|
|
|
|
// Format the value based on data type.
|
|
switch ( $dropdown_type ) {
|
|
|
|
case 'dropdown_pages':
|
|
foreach ( $dropdown_data as $widget_id => $widget_data ) {
|
|
if ( ! empty( $widget_data[ $instance_id ] ) && $widget_id == $instance_class ) {
|
|
$level = isset( $widget_data['level'] ) ? $widget_data['level'] : (int) 0;
|
|
|
|
if ( $level == $instance ) {
|
|
foreach ( $widget_data[ $instance_id ] as $widget_key => $widget_value ) {
|
|
$page = get_page_by_title( $widget_value );
|
|
|
|
if ( is_object( $page ) && $page->ID ) {
|
|
$widget_instance[ $widget_key ] = $page->ID;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'dropdown_categories':
|
|
foreach ( $dropdown_data as $taxonomy => $taxonomy_data ) {
|
|
if ( ! taxonomy_exists( $taxonomy ) ) {
|
|
continue;
|
|
}
|
|
|
|
foreach ( $taxonomy_data as $widget_id => $widget_data ) {
|
|
if ( ! empty( $widget_data[ $instance_id ] ) && $widget_id == $instance_class ) {
|
|
$level = isset( $widget_data['level'] ) ? $widget_data['level'] : (int) 0;
|
|
|
|
if ( $level == $instance ) {
|
|
foreach ( $widget_data[ $instance_id ] as $widget_key => $widget_value ) {
|
|
$term = get_term_by( 'name', $widget_value, $taxonomy );
|
|
|
|
if ( is_object( $term ) && $term->term_id ) {
|
|
$widget_instance[ $widget_key ] = $term->term_id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
$panels_data['widgets'][ $instance_id ] = $widget_instance;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return $panels_data;
|
|
}
|
|
|
|
/**
|
|
* Get an attachment ID from the filename.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $filename
|
|
* @return int Attachment ID on success, 0 on failure
|
|
*/
|
|
function get_attachment_id( $filename ) {
|
|
|
|
$attachment_id = 0;
|
|
|
|
$file = basename( $filename );
|
|
|
|
$query_args = array(
|
|
'post_type' => 'attachment',
|
|
'post_status' => 'inherit',
|
|
'fields' => 'ids',
|
|
'meta_query' => array(
|
|
array(
|
|
'value' => $file,
|
|
'compare' => 'LIKE',
|
|
'key' => '_wp_attachment_metadata',
|
|
),
|
|
),
|
|
);
|
|
|
|
$query = new WP_Query( $query_args );
|
|
|
|
if ( $query->have_posts() ) {
|
|
|
|
foreach ( $query->posts as $post_id ) {
|
|
|
|
$meta = wp_get_attachment_metadata( $post_id );
|
|
|
|
$original_file = basename( $meta['file'] );
|
|
$cropped_image_files = wp_list_pluck( $meta['sizes'], 'file' );
|
|
|
|
if ( $original_file === $file || in_array( $file, $cropped_image_files ) ) {
|
|
$attachment_id = $post_id;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return $attachment_id;
|
|
}
|
|
|
|
|
|
/**
|
|
* Recursive function to address n level deep elementor data update.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param array $elementor_data
|
|
* @param string $data_type
|
|
* @param array $data_value
|
|
* @return array
|
|
*/
|
|
public function elementor_recursive_update( $elementor_data, $data_type, $data_value ) {
|
|
|
|
$elementor_data = json_decode( stripslashes( $elementor_data ), true );
|
|
|
|
// Recursively update elementor data.
|
|
foreach ( $elementor_data as $element_id => $element_data ) {
|
|
if ( ! empty( $element_data['elements'] ) ) {
|
|
foreach ( $element_data['elements'] as $el_key => $el_data ) {
|
|
if ( ! empty( $el_data['elements'] ) ) {
|
|
foreach ( $el_data['elements'] as $el_child_key => $child_el_data ) {
|
|
if ( 'widget' === $child_el_data['elType'] ) {
|
|
$settings = isset( $child_el_data['settings'] ) ? $child_el_data['settings'] : array();
|
|
$widgetType = isset( $child_el_data['widgetType'] ) ? $child_el_data['widgetType'] : '';
|
|
|
|
if ( isset( $settings['display_type'] ) && 'categories' === $settings['display_type'] ) {
|
|
$categories_selected = isset( $settings['categories_selected'] ) ? $settings['categories_selected'] : '';
|
|
|
|
if ( ! empty( $data_value['data_update'] ) ) {
|
|
foreach ( $data_value['data_update'] as $taxonomy => $taxonomy_data ) {
|
|
if ( ! taxonomy_exists( $taxonomy ) ) {
|
|
continue;
|
|
}
|
|
|
|
foreach ( $taxonomy_data as $widget_id => $widget_data ) {
|
|
if ( ! empty( $widget_data ) && $widget_id == $widgetType ) {
|
|
if ( is_array( $categories_selected ) ) {
|
|
foreach ( $categories_selected as $cat_key => $cat_id ) {
|
|
if ( isset( $widget_data[ $cat_id ] ) ) {
|
|
$term = get_term_by( 'name', $widget_data[ $cat_id ], $taxonomy );
|
|
|
|
if ( is_object( $term ) && $term->term_id ) {
|
|
$categories_selected[ $cat_key ] = $term->term_id;
|
|
}
|
|
}
|
|
}
|
|
} elseif ( isset( $widget_data[ $categories_selected ] ) ) {
|
|
$term = get_term_by( 'name', $widget_data[ $categories_selected ], $taxonomy );
|
|
|
|
if ( is_object( $term ) && $term->term_id ) {
|
|
$categories_selected = $term->term_id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Update the elementor data.
|
|
$elementor_data[ $element_id ]['elements'][ $el_key ]['elements'][ $el_child_key ]['settings']['categories_selected'] = $categories_selected;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return wp_json_encode( $elementor_data );
|
|
}
|
|
|
|
/**
|
|
* Reset existing active widgets.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function mt_reset_widgets() {
|
|
$sidebars_widgets = wp_get_sidebars_widgets();
|
|
|
|
// Reset active widgets.
|
|
foreach ( $sidebars_widgets as $key => $widgets ) {
|
|
$sidebars_widgets[ $key ] = array();
|
|
}
|
|
wp_set_sidebars_widgets( $sidebars_widgets );
|
|
}
|
|
|
|
/**
|
|
* Delete existing navigation menus.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function mt_delete_nav_menus() {
|
|
$nav_menus = wp_get_nav_menus();
|
|
|
|
// Delete navigation menus.
|
|
if ( ! empty( $nav_menus ) ) {
|
|
foreach ( $nav_menus as $nav_menu ) {
|
|
wp_delete_nav_menu( $nav_menu->slug );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove theme modifications option.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function mt_remove_theme_mods() {
|
|
remove_theme_mods();
|
|
}
|
|
|
|
/**
|
|
* Display action links in the Plugins list table.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param array $actions Plugin Action links.
|
|
* @return array
|
|
*/
|
|
function plugin_action_links( $actions ) {
|
|
$new_actions = array(
|
|
'importer' => '<a href="' . admin_url( 'themes.php?page=mysterythemes-demo-importer' ) . '" aria-label="' . esc_attr( __( 'View Demo Importer', 'mysterythemes-demo-importer') ) . '">' . __( 'MT Demo Importer', 'mysterythemes-demo-importer') . '</a>',
|
|
);
|
|
return array_merge( $new_actions, $actions );
|
|
}
|
|
|
|
/**
|
|
* Display row meta in the Plugins list table.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param array $plugin_meta Plugin Row Meta.
|
|
* @param string $plugin_file Plugin Row Meta.
|
|
* @return array
|
|
*/
|
|
function plugin_row_meta( $plugin_meta, $plugin_file ) {
|
|
if ( MTDI_PLUGIN_BASENAME === $plugin_file ) {
|
|
$new_plugin_meta = array(
|
|
'docs' => '<a href="' . esc_url( apply_filters( 'mtdi_demo_importer_docs_url', '//mysterythemes.com/docs/mysterythemes-demo-importer/' ) ) . '" title="' . esc_attr( __( 'View Demo Importer Documentation', 'mysterythemes-demo-importer' ) ) . '" target="_blank">' . __( 'Documentation', 'mysterythemes-demo-importer' ) . '</a>',
|
|
'support' => '<a href="' . esc_url( apply_filters( 'mtdi_demo_importer_support_url', '//wordpress.org/support/plugin/mysterythemes-demo-importer' ) ) . '" title="' . esc_attr( __( 'Visit Free Support Forum', 'mysterythemes-demo-importer' ) ) . '" target="_blank">' . __( 'Free Support', 'mysterythemes-demo-importer' ) . '</a>',
|
|
);
|
|
|
|
return array_merge( $plugin_meta, $new_plugin_meta );
|
|
}
|
|
return (array) $plugin_meta;
|
|
}
|
|
|
|
/**
|
|
* Theme support fallback notice.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function missing_notice() {
|
|
$admin_obj = new MTDI();
|
|
$themes_url = array_intersect( array_keys( wp_get_themes() ), $admin_obj->get_supported_themes() ) ? admin_url( 'themes.php?search=mysterythemes' ) : admin_url( 'theme-install.php?search=mysterythemes' );
|
|
|
|
/* translators: %s: official Mystery themes URL */
|
|
echo '<div class="error notice is-dismissible"><p><strong>' . esc_html__( 'Mystery Themes Demo Importer', 'mysterythemes-demo-importer') . '</strong> – ' . sprintf( esc_html__( 'This plugin requires %s to be activated to work.', 'mysterythemes-demo-importer'), '<a href="' . esc_url( $themes_url ) . '">' . esc_html__( 'Official Mystery Themes', 'mysterythemes-demo-importer') . '</a>' ) . '</p></div>';
|
|
}
|
|
}
|
|
endif; |