=' ) ) {
require_once( AE_PATH .'/panel/classes/importers/class-helpers.php' );
require_once( AE_PATH .'/panel/classes/class-install-demos.php' );
}
// Start things
add_action( 'admin_init', array( $this, 'init' ) );
// Demos scripts
add_action( 'admin_enqueue_scripts', array( $this, 'scripts' ) );
// Allows xml uploads
add_filter( 'upload_mimes', array( $this, 'allow_xml_uploads' ) );
// Demos popup
add_action( 'admin_footer', array( $this, 'popup' ) );
// Filter for PRO demos available if Attesa PRO is not installed
if ( !class_exists( 'Attesa_pro' ) ) {
add_filter('awp_demos_data', array($this, 'get_demos_data_not_pro') );
}
}
/**
* Register the AJAX methods
*
* @since 1.0.0
*/
public function init() {
// Demos popup ajax
add_action( 'wp_ajax_awp_ajax_get_demo_data', array( $this, 'ajax_demo_data' ) );
add_action( 'wp_ajax_awp_ajax_required_plugins_activate', array( $this, 'ajax_required_plugins_activate' ) );
// Get data to import
add_action( 'wp_ajax_awp_ajax_get_import_data', array( $this, 'ajax_get_import_data' ) );
// Import XML file
add_action( 'wp_ajax_awp_ajax_import_xml', array( $this, 'ajax_import_xml' ) );
// Import customizer settings
add_action( 'wp_ajax_awp_ajax_import_theme_settings', array( $this, 'ajax_import_theme_settings' ) );
// Import widgets
add_action( 'wp_ajax_awp_ajax_import_widgets', array( $this, 'ajax_import_widgets' ) );
// After import
add_action( 'wp_ajax_awp_after_import', array( $this, 'ajax_after_import' ) );
}
/**
* Load scripts
*
* @since 1.4.5
*/
public static function scripts( $hook_suffix ) {
if ( 'attesa-theme_page_install_demos' == $hook_suffix ) {
// CSS
wp_enqueue_style( 'awp-demos-style', plugins_url( '/assets/css/demos.min.css', __FILE__ ), array(), ATTESA_EXTRA_PLUGIN_VERSION );
// JS
wp_enqueue_script( 'awp-demos-js', plugins_url( '/assets/js/demos.min.js', __FILE__ ), array( 'jquery', 'wp-util', 'updates' ), ATTESA_EXTRA_PLUGIN_VERSION, true );
wp_localize_script( 'awp-demos-js', 'awpDemos', array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'demo_data_nonce' => wp_create_nonce( 'get-demo-data' ),
'awp_import_data_nonce' => wp_create_nonce( 'awp_import_data_nonce' ),
'content_importing_error' => esc_html__( 'There was a problem during the importing process resulting in the following error from your server:', 'attesa-extra' ),
'button_activating' => esc_html__( 'Activating', 'attesa-extra' ) . '…',
'button_active' => esc_html__( 'Active', 'attesa-extra' ),
) );
}
}
/**
* Allows xml uploads so we can import from github
*
* @since 1.0.0
*/
public function allow_xml_uploads( $mimes ) {
$mimes = array_merge( $mimes, array(
'xml' => 'application/xml'
) );
return $mimes;
}
/**
* Get demos data to add them in the Demo Import
*
* @since 1.4.5
*/
public static function get_demos_data() {
// Demos url
$url = 'https://attesawp.com/demo/';
$data = array(
'business' => array(
'categories' => array( 'Business' ),
'is_what' => 'free',
'xml_file' => $url . 'business/sample-data-business.xml',
'theme_settings' => $url . 'business/business-export.dat',
'widgets_file' => $url . 'business/business-widgets.wie',
'home_title' => 'Home Page',
'blog_title' => 'Blog',
'posts_to_show' => '5',
'elementor_width' => '1140',
'required_plugins' => array(
'free' => array(
array(
'slug' => 'attesa-extra',
'init' => 'attesa-extra/attesa-extra.php',
'name' => 'Attesa Extra',
),
array(
'slug' => 'elementor',
'init' => 'elementor/elementor.php',
'name' => 'Elementor',
),
array(
'slug' => 'contact-form-7',
'init' => 'contact-form-7/wp-contact-form-7.php',
'name' => 'Contact Form 7',
),
),
),
),
'blogging' => array(
'categories' => array( 'Blog' ),
'is_what' => 'free',
'xml_file' => $url . 'blogging/sample-data-blogging.xml',
'theme_settings' => $url . 'blogging/blogging-export.dat',
'widgets_file' => $url . 'blogging/blogging-widgets.wie',
'home_title' => '',
'blog_title' => 'Blog',
'posts_to_show' => '5',
'required_plugins' => array(
'free' => array(
array(
'slug' => 'attesa-extra',
'init' => 'attesa-extra/attesa-extra.php',
'name' => 'Attesa Extra',
),
array(
'slug' => 'contact-form-7',
'init' => 'contact-form-7/wp-contact-form-7.php',
'name' => 'Contact Form 7',
),
),
),
),
'minimal' => array(
'categories' => array( 'Personal', 'Blog' ),
'is_what' => 'free',
'xml_file' => $url . 'minimal/sample-data-minimal.xml',
'theme_settings' => $url . 'minimal/minimal-export.dat',
'widgets_file' => $url . 'minimal/minimal-widgets.wie',
'home_title' => 'Home Page',
'blog_title' => 'Blog',
'posts_to_show' => '6',
'elementor_width' => '980',
'required_plugins' => array(
'free' => array(
array(
'slug' => 'attesa-extra',
'init' => 'attesa-extra/attesa-extra.php',
'name' => 'Attesa Extra',
),
array(
'slug' => 'elementor',
'init' => 'elementor/elementor.php',
'name' => 'Elementor',
),
array(
'slug' => 'contact-form-7',
'init' => 'contact-form-7/wp-contact-form-7.php',
'name' => 'Contact Form 7',
),
),
),
),
'creative' => array(
'categories' => array( 'One Page', 'Blog' ),
'is_what' => 'free',
'xml_file' => $url . 'creative/sample-data-creative.xml',
'theme_settings' => $url . 'creative/creative-export.dat',
'widgets_file' => $url . 'creative/creative-widgets.wie',
'home_title' => 'Home Page',
'blog_title' => 'Blog',
'posts_to_show' => '5',
'elementor_width' => '1140',
'required_plugins' => array(
'free' => array(
array(
'slug' => 'attesa-extra',
'init' => 'attesa-extra/attesa-extra.php',
'name' => 'Attesa Extra',
),
array(
'slug' => 'elementor',
'init' => 'elementor/elementor.php',
'name' => 'Elementor',
),
array(
'slug' => 'contact-form-7',
'init' => 'contact-form-7/wp-contact-form-7.php',
'name' => 'Contact Form 7',
),
),
),
),
'fashion' => array(
'categories' => array( 'eCommerce', 'Blog', 'One Page' ),
'is_what' => 'free',
'xml_file' => $url . 'fashion/sample-data-fashion.xml',
'theme_settings' => $url . 'fashion/fashion-export.dat',
'widgets_file' => $url . 'fashion/fashion-widgets.wie',
'home_title' => 'Home Page',
'blog_title' => 'Blog',
'posts_to_show' => '5',
'elementor_width' => '1140',
'is_shop' => true,
'woo_image_size' => '600',
'woo_thumb_size' => '300',
'woo_crop_width' => '3',
'woo_crop_height' => '3',
'required_plugins' => array(
'free' => array(
array(
'slug' => 'attesa-extra',
'init' => 'attesa-extra/attesa-extra.php',
'name' => 'Attesa Extra',
),
array(
'slug' => 'elementor',
'init' => 'elementor/elementor.php',
'name' => 'Elementor',
),
array(
'slug' => 'woocommerce',
'init' => 'woocommerce/woocommerce.php',
'name' => 'WooCommerce',
),
array(
'slug' => 'contact-form-7',
'init' => 'contact-form-7/wp-contact-form-7.php',
'name' => 'Contact Form 7',
),
),
),
),
'friendly' => array(
'categories' => array( 'Personal', 'One Page' ),
'is_what' => 'free',
'xml_file' => $url . 'friendly/sample-data-friendly.xml',
'theme_settings' => $url . 'friendly/friendly-export.dat',
'widgets_file' => $url . 'friendly/friendly-widgets.wie',
'home_title' => 'Home Page',
'blog_title' => '',
'posts_to_show' => '5',
'elementor_width' => '1140',
'required_plugins' => array(
'free' => array(
array(
'slug' => 'attesa-extra',
'init' => 'attesa-extra/attesa-extra.php',
'name' => 'Attesa Extra',
),
array(
'slug' => 'elementor',
'init' => 'elementor/elementor.php',
'name' => 'Elementor',
),
array(
'slug' => 'contact-form-7',
'init' => 'contact-form-7/wp-contact-form-7.php',
'name' => 'Contact Form 7',
),
),
),
),
);
// Return
return apply_filters( 'awp_demos_data', $data );
}
/**
* Get demos name of the PRO version demos (without data) if Attesa PRO is not installed
*
* @since 1.0.0
*/
public static function get_demos_data_not_pro($data) {
// Demos url
$url = 'https://attesawp.com/demo/';
$data['happiness'] = array(
'categories' => array( 'eCommerce', 'Blog', 'One Page', 'Personal' ),
'is_what' => 'pro',
);
$data['folio'] = array(
'categories' => array( 'Portfolio', 'One Page', 'Business' ),
'is_what' => 'pro',
);
$data['restaurant'] = array(
'categories' => array( 'One Page', 'Business' ),
'is_what' => 'pro',
);
$data['travel'] = array(
'categories' => array( 'One Page', 'Blog', 'Personal' ),
'is_what' => 'pro',
);
$data['reverse'] = array(
'categories' => array( 'One Page', 'Blog', 'Business' ),
'is_what' => 'pro',
);
$data['bubba'] = array(
'categories' => array( 'Blog', 'Business' ),
'is_what' => 'pro',
);
$data['clouds'] = array(
'categories' => array( 'Personal', 'Business', 'One Page' ),
'is_what' => 'pro',
);
return $data;
}
/**
* Get the parameter is_what to check if is free or pro version theme
*
* @since 1.0.0
*/
public static function get_demo_theme_type( $item ) {
if ( isset( $item['is_what'] ) ) {
return $item['is_what'];
}
return false;
}
/**
* Get the category list of all categories used in the predefined demo imports array.
*
* @since 1.4.5
*/
public static function get_demo_all_categories( $demo_imports ) {
$categories = array();
foreach ( $demo_imports as $item ) {
if ( ! empty( $item['categories'] ) && is_array( $item['categories'] ) ) {
foreach ( $item['categories'] as $category ) {
$categories[ sanitize_key( $category ) ] = $category;
}
}
}
if ( empty( $categories ) ) {
return false;
}
return $categories;
}
/**
* Return the concatenated string of demo import item categories.
* These should be separated by comma and sanitized properly.
*
* @since 1.4.5
*/
public static function get_demo_item_categories( $item ) {
$sanitized_categories = array();
if ( isset( $item['categories'] ) ) {
foreach ( $item['categories'] as $category ) {
$sanitized_categories[] = sanitize_key( $category );
}
}
if ( ! empty( $sanitized_categories ) ) {
return implode( ',', $sanitized_categories );
}
return false;
}
/**
* Demos popup
*
* @since 1.4.5
*/
public static function popup() {
global $pagenow;
// Display on the demos pages
if ( ( 'admin.php' == $pagenow && isset( $_GET['page']) && 'install_demos' == $_GET['page'] ) || ( 'admin.php' == $pagenow && isset( $_GET['page']) && 'install_demos' == $_GET['page'] ) ) { ?>
$plugin ) {
$api = array(
'slug' => isset( $plugin['slug'] ) ? $plugin['slug'] : '',
'init' => isset( $plugin['init'] ) ? $plugin['init'] : '',
'name' => isset( $plugin['name'] ) ? $plugin['name'] : '',
);
if ( ! is_wp_error( $api ) ) { // confirm error free
// Installed but Inactive.
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin['init'] ) && is_plugin_inactive( $plugin['init'] ) ) {
$button_classes = 'button activate-now button-primary';
$button_text = esc_html__( 'Activate', 'attesa-extra' );
// Not Installed.
} elseif ( ! file_exists( WP_PLUGIN_DIR . '/' . $plugin['init'] ) ) {
$button_classes = 'button install-now';
$button_text = esc_html__( 'Install Now', 'attesa-extra' );
// Active.
} else {
$button_classes = 'button disabled';
$button_text = esc_html__( 'Activated', 'attesa-extra' );
} ?>
false,
'message' => __( 'No plugin specified', 'attesa-extra' ),
)
);
}
$plugin_init = ( isset( $_POST['init'] ) ) ? esc_attr( $_POST['init'] ) : '';
$activate = activate_plugin( $plugin_init, '', false, true );
if ( is_wp_error( $activate ) ) {
wp_send_json_error(
array(
'success' => false,
'message' => $activate->get_error_message(),
)
);
}
wp_send_json_success(
array(
'success' => true,
'message' => __( 'Plugin Successfully Activated', 'attesa-extra' ),
)
);
}
/**
* Returns an array containing all the importable content
*
* @since 1.4.5
*/
public function ajax_get_import_data() {
if (!current_user_can('manage_options')) {
die( 'This action was stopped for security purposes.' );
}
check_ajax_referer( 'awp_import_data_nonce', 'security' );
echo json_encode(
array(
array(
'input_name' => 'awp_import_xml',
'action' => 'awp_ajax_import_xml',
'method' => 'ajax_import_xml',
'loader' => esc_html__( 'Importing XML Data', 'attesa-extra' )
),
array(
'input_name' => 'awp_theme_settings',
'action' => 'awp_ajax_import_theme_settings',
'method' => 'ajax_import_theme_settings',
'loader' => esc_html__( 'Importing Customizer Settings', 'attesa-extra' )
),
array(
'input_name' => 'awp_import_widgets',
'action' => 'awp_ajax_import_widgets',
'method' => 'ajax_import_widgets',
'loader' => esc_html__( 'Importing Widgets', 'attesa-extra' )
),
)
);
die();
}
/**
* Import XML file
*
* @since 1.4.5
*/
public function ajax_import_xml() {
if ( !current_user_can('manage_options') || !wp_verify_nonce( sanitize_key($_POST['awp_import_demo_data_nonce']), 'awp_import_demo_data_nonce' ) ) {
die( 'This action was stopped for security purposes.' );
}
// Get the selected demo
$demo_type = $_POST['awp_import_demo'];
// Get demos data
$demo = AttesaWP_Demos::get_demos_data()[ $demo_type ];
// Content file
$xml_file = isset( $demo['xml_file'] ) ? $demo['xml_file'] : '';
// Delete the default post and page
$sample_page = get_page_by_path( 'sample-page', OBJECT, 'page' );
$hello_world_post = get_page_by_path( 'hello-world', OBJECT, 'post' );
if ( ! is_null( $sample_page ) ) {
wp_delete_post( $sample_page->ID, true );
}
if ( ! is_null( $hello_world_post ) ) {
wp_delete_post( $hello_world_post->ID, true );
}
// Import Posts, Pages, Images, Menus.
$result = $this->process_xml( $xml_file );
if ( is_wp_error( $result ) ) {
echo json_encode( $result->errors );
} else {
echo 'successful import';
}
die();
}
/**
* Import customizer settings
*
* @since 1.4.5
*/
public function ajax_import_theme_settings() {
if ( !current_user_can('manage_options') || !wp_verify_nonce( sanitize_key($_POST['awp_import_demo_data_nonce']), 'awp_import_demo_data_nonce' ) ) {
die( 'This action was stopped for security purposes.' );
}
// Include settings importer
include AE_PATH . '/panel/classes/importers/class-settings-importer.php';
// Get the selected demo
$demo_type = $_POST['awp_import_demo'];
// Get demos data
$demo = AttesaWP_Demos::get_demos_data()[ $demo_type ];
// Settings file
$theme_settings = isset( $demo['theme_settings'] ) ? $demo['theme_settings'] : '';
// Import settings.
$settings_importer = new AWP_Settings_Importer();
$result = $settings_importer->process_import_file( $theme_settings );
if ( is_wp_error( $result ) ) {
echo json_encode( $result->errors );
} else {
echo 'successful import';
}
die();
}
/**
* Import widgets
*
* @since 1.4.5
*/
public function ajax_import_widgets() {
if ( !current_user_can('manage_options') ||! wp_verify_nonce( sanitize_key($_POST['awp_import_demo_data_nonce']), 'awp_import_demo_data_nonce' ) ) {
die( 'This action was stopped for security purposes.' );
}
// Include widget importer
include AE_PATH . 'panel/classes/importers/class-widget-importer.php';
// Get the selected demo
$demo_type = $_POST['awp_import_demo'];
// Get demos data
$demo = AttesaWP_Demos::get_demos_data()[ $demo_type ];
// Widgets file
$widgets_file = isset( $demo['widgets_file'] ) ? $demo['widgets_file'] : '';
// Import settings.
$widgets_importer = new AWP_Widget_Importer();
$result = $widgets_importer->process_import_file( $widgets_file );
if ( is_wp_error( $result ) ) {
echo json_encode( $result->errors );
} else {
echo 'successful import';
}
die();
}
/**
* After import
*
* @since 1.4.5
*/
public function ajax_after_import() {
if ( !current_user_can('manage_options') || ! wp_verify_nonce( sanitize_key($_POST['awp_import_demo_data_nonce']), 'awp_import_demo_data_nonce' ) ) {
die( 'This action was stopped for security purposes.' );
}
// If XML file is imported
if ( $_POST['awp_import_is_xml'] === 'true' ) {
// Get the selected demo
$demo_type = $_POST['awp_import_demo'];
// Get demos data
$demo = AttesaWP_Demos::get_demos_data()[ $demo_type ];
// Elementor width setting
$elementor_width = isset( $demo['elementor_width'] ) ? $demo['elementor_width'] : '';
// Reading settings
$homepage_title = isset( $demo['home_title'] ) ? $demo['home_title'] : 'Home';
$blog_title = isset( $demo['blog_title'] ) ? $demo['blog_title'] : '';
// Posts to show on the blog page
$posts_to_show = isset( $demo['posts_to_show'] ) ? $demo['posts_to_show'] : '';
// If shop demo
$shop_demo = isset( $demo['is_shop'] ) ? $demo['is_shop'] : false;
// Product image size
$image_size = isset( $demo['woo_image_size'] ) ? $demo['woo_image_size'] : '';
$thumbnail_size = isset( $demo['woo_thumb_size'] ) ? $demo['woo_thumb_size'] : '';
$crop_width = isset( $demo['woo_crop_width'] ) ? $demo['woo_crop_width'] : '';
$crop_height = isset( $demo['woo_crop_height'] ) ? $demo['woo_crop_height'] : '';
// Assign WooCommerce pages if WooCommerce Exists
if ( class_exists( 'WooCommerce' ) && true == $shop_demo ) {
$woopages = array(
'woocommerce_shop_page_id' => 'Shop',
'woocommerce_cart_page_id' => 'Cart',
'woocommerce_checkout_page_id' => 'Checkout',
'woocommerce_pay_page_id' => 'Checkout → Pay',
'woocommerce_thanks_page_id' => 'Order Received',
'woocommerce_myaccount_page_id' => 'My Account',
'woocommerce_edit_address_page_id' => 'Edit My Address',
'woocommerce_view_order_page_id' => 'View Order',
'woocommerce_change_password_page_id' => 'Change Password',
'woocommerce_logout_page_id' => 'Logout',
'woocommerce_lost_password_page_id' => 'Lost Password'
);
foreach ( $woopages as $woo_page_name => $woo_page_title ) {
$woopage = get_page_by_title( $woo_page_title );
if ( isset( $woopage ) && $woopage->ID ) {
update_option( $woo_page_name, $woopage->ID );
}
}
// We no longer need to install pages
delete_option( '_wc_needs_pages' );
delete_transient( '_wc_activation_redirect' );
// Get products image size
update_option( 'woocommerce_single_image_width', $image_size );
update_option( 'woocommerce_thumbnail_image_width', $thumbnail_size );
update_option( 'woocommerce_thumbnail_cropping', 'custom' );
update_option( 'woocommerce_thumbnail_cropping_custom_width', $crop_width );
update_option( 'woocommerce_thumbnail_cropping_custom_height', $crop_height );
}
// Set imported menus to registered theme locations
$locations = get_theme_mod( 'nav_menu_locations' );
$menus = wp_get_nav_menus();
if ( $menus ) {
foreach ( $menus as $menu ) {
if ( $menu->name == 'Main Menu' ) {
$locations['main'] = $menu->term_id;
} else if ( $menu->name == 'Top Menu' ) {
$locations['top'] = $menu->term_id;
} else if ( $menu->name == 'Footer Menu' ) {
$locations['footer'] = $menu->term_id;
}
}
}
// Set menus to locations
set_theme_mod( 'nav_menu_locations', $locations );
// Disable Elementor default settings
update_option( 'elementor_disable_color_schemes', 'yes' );
update_option( 'elementor_disable_typography_schemes', 'yes' );
if ( ! empty( $elementor_width ) ) {
update_option( 'elementor_container_width', $elementor_width );
}
// Assign front page and posts page (blog page).
$home_page = get_page_by_title( $homepage_title );
$blog_page = get_page_by_title( $blog_title );
update_option( 'show_on_front', 'page' );
if ( is_object( $home_page ) ) {
update_option( 'page_on_front', $home_page->ID );
}
if ( is_object( $blog_page ) ) {
update_option( 'page_for_posts', $blog_page->ID );
}
// Posts to show on the blog page
if ( ! empty( $posts_to_show ) ) {
update_option( 'posts_per_page', $posts_to_show );
}
}
die();
}
/**
* Import XML data
*
* @since 1.0.0
*/
public function process_xml( $file ) {
$response = AWP_Demos_Helpers::get_remote( $file );
// No sample data found
if ( $response === false ) {
return new WP_Error( 'xml_import_error', __( 'Can not retrieve sample data xml file. AttesaWP.com may be down at the moment please try again later. If you still have issues contact the theme developer for assistance.', 'attesa-extra' ) );
}
// Write sample data content to temp xml file
$temp_xml = AE_PATH .'panel/classes/importers/temp.xml';
file_put_contents( $temp_xml, $response );
// Set temp xml to attachment url for use
$attachment_url = $temp_xml;
// If file exists lets import it
if ( file_exists( $attachment_url ) ) {
$this->import_xml( $attachment_url );
} else {
// Import file can't be imported - we should die here since this is core for most people.
return new WP_Error( 'xml_import_error', __( 'The xml import file could not be accessed. Please try again or contact the theme developer.', 'attesa-extra' ) );
}
}
/**
* Import XML file
*
* @since 1.0.0
*/
private function import_xml( $file ) {
// Make sure importers constant is defined
if ( ! defined( 'WP_LOAD_IMPORTERS' ) ) {
define( 'WP_LOAD_IMPORTERS', true );
}
// Import file location
$import_file = ABSPATH . 'wp-admin/includes/import.php';
// Include import file
if ( ! file_exists( $import_file ) ) {
return;
}
// Include import file
require_once( $import_file );
// Define error var
$importer_error = false;
if ( ! class_exists( 'WP_Importer' ) ) {
$class_wp_importer = ABSPATH . 'wp-admin/includes/class-wp-importer.php';
if ( file_exists( $class_wp_importer ) ) {
require_once $class_wp_importer;
} else {
$importer_error = __( 'Can not retrieve class-wp-importer.php', 'attesa-extra' );
}
}
if ( ! class_exists( 'WP_Import' ) ) {
$class_wp_import = AE_PATH . 'panel/classes/importers/class-wordpress-importer.php';
if ( file_exists( $class_wp_import ) ) {
require_once $class_wp_import;
} else {
$importer_error = __( 'Can not retrieve wordpress-importer.php', 'attesa-extra' );
}
}
// Display error
if ( $importer_error ) {
return new WP_Error( 'xml_import_error', $importer_error );
} else {
// No error, lets import things...
if ( ! is_file( $file ) ) {
$importer_error = __( 'Sample data file appears corrupt or can not be accessed.', 'attesa-extra' );
return new WP_Error( 'xml_import_error', $importer_error );
} else {
$importer = new WP_Import();
$importer->fetch_attachments = true;
$importer->import( $file );
// Clear sample data content from temp xml file
$temp_xml = AE_PATH .'panel/classes/importers/temp.xml';
file_put_contents( $temp_xml, '' );
}
}
}
}
}
new AttesaWP_Demos();