Willkommen bei WordPress. Dies ist dein erster Beitrag. Bearbeite oder lösche ihn und beginne mit dem Schreiben!
Hallo Welt!
von raredesign | Dez 3, 2019 | Allgemein | 0 Kommentare
Cokiee Shell
Current Path : /var/www/web28/html/wp-content/themes/Avada/includes/importer/ |
Current File : //var/www/web28/html/wp-content/themes/Avada/includes/importer/class-avada-demo-import.php |
<?php /** * The main import handler. * * @author ThemeFusion * @copyright (c) Copyright by ThemeFusion * @link https://avada.com * @package Avada * @subpackage Importer * @since 5.2 */ /** * Import a demo. */ class Avada_Demo_Import { /** * The demo type. * * @access private * @since 5.2 * @var string */ private $demo_type; /** * Path to the XML file. * * @access private * @since 5.2 * @var string */ private $theme_xml; /** * Path to the theme-options file. * * @access private * @since 5.2 * @var string */ private $theme_options_file; /** * Path to the widgets file. * * @access private * @since 5.2 * @var string */ private $widgets_file; /** * Path to the Fusion-Slider file. * * @access private * @since 5.2 * @var string */ private $fs_url; /** * Whether we should fetch attachments or not. * * @access private * @since 5.2 * @var bool */ private $fetch_attachments; /** * Whether this is a WooCommerce site or not. * * @access private * @since 5.2 * @var bool */ private $shop_demo; /** * The sidebars. * * @access private * @since 5.2 * @var array */ private $sidebars; /** * The Homepage title. * * @access private * @since 5.2 * @var string */ private $homepage_title; /** * WooCommerce pages. * * @access private * @since 5.2 * @var array */ private $woopages; /** * Whether Fusion-Slider exists or not. * * @access private * @since 5.2 * @var bool */ private $fs_exists; /** * Avada_Importer_Data instance. * * @access private * @since 5.2 * @var object */ private $importer_files; /** * Avada_Demo_Content_Tracker instance. * * @access private * @since 5.2 * @var object */ private $content_tracker; /** * The content-types we'll be importing. * * @access private * @since 5.2 * @var array */ private $import_content_types; /** * An array of allowed post-types. * * @access private * @since 5.2 * @var array */ private $allowed_post_types = []; /** * An array of allowed taxonomies. * * @access private * @since 5.2 * @var array */ private $allowed_taxonomies = []; /** * Whether we want to import everything or not. * * @access private * @since 5.2 * @var bool */ private $import_all; /** * Import stages still left to process. * * @access private * @since 6.2 * @var array */ private $import_stages = []; /** * Site title. * * @access private * @since 7.7 * @var string */ private $site_title = ''; /** * The class constructor. * * @access public * @since 5.2 */ public function __construct() { // Hook importer into admin init. add_action( 'wp_ajax_fusion_import_demo_data', [ $this, 'ajax_import_demo_stage' ] ); // Modify Theme Options before import. add_filter( 'avada_import_modify_theme_options', [ $this, 'modify_theme_options' ], 10, 1 ); } /** * The main importer function. * * @access public * @since 5.2 */ public function ajax_import_demo_stage() { check_ajax_referer( 'avada_demo_ajax', 'security' ); if ( current_user_can( 'manage_options' ) ) { if ( isset( $_POST['importStages'] ) ) { $this->import_stages = wp_unslash( $_POST['importStages'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput } $this->demo_type = 'classic'; if ( isset( $_POST['demoType'] ) && '' !== sanitize_text_field( wp_unslash( $_POST['demoType'] ) ) ) { $this->demo_type = sanitize_text_field( wp_unslash( $_POST['demoType'] ) ); } $this->fetch_attachments = false; if ( isset( $_POST['fetchAttachments'] ) && 'true' === sanitize_text_field( wp_unslash( $_POST['fetchAttachments'] ) ) ) { $this->fetch_attachments = true; } $this->import_content_types = []; if ( isset( $_POST['contentTypes'] ) && is_array( $_POST['contentTypes'] ) ) { $this->import_content_types = wp_unslash( $_POST['contentTypes'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput } $this->import_all = false; if ( isset( $_POST['allImport'] ) && 'true' === sanitize_text_field( wp_unslash( $_POST['allImport'] ) ) ) { $this->import_all = true; } if ( isset( $_POST['siteTitle'] ) && '' !== sanitize_text_field( wp_unslash( $_POST['siteTitle'] ) ) ) { $this->site_title = sanitize_text_field( wp_unslash( $_POST['siteTitle'] ) ); } // Return correct http response code for error. add_filter( 'wp_php_error_args', [ $this, 'handle_http_response_code' ], 10, 2 ); try { $this->run_demo_stage_import(); // We've just processed last import stage. if ( 1 === count( $this->import_stages ) ) { /** * WIP $this->content_tracker->set_general_data(); */ $this->after_import(); // Reset all caches, don't remove demo data. fusion_reset_all_caches( [ 'demo_data' => false, ] ); echo 'imported'; } else { echo 'import partially completed: ' . $this->import_stages[0]; // phpcs:ignore WordPress.Security.EscapeOutput } // Save data after import, for example imported terms. $this->content_tracker->save_demo_history(); } catch ( Throwable $t ) { // Executed only in PHP 7+. /* translators: %1$s: Opening span tag. %2$s: PHP error message. %3$s: PHP file path. %4$s: PHP file line. %5$s: Closing span tag. */ $response = sprintf( __( '%1$s<strong>PHP ERROR</strong>: %2$s in %3$s on line %4$s.%5$s', 'Avada' ), '<span class="awb-prebuilt-import-error">', $t->getMessage(), $t->getFile(), $t->getLine(), '</span>' ); /* translators: %1$s: Opening span tag. %2$: Opening anchor tag. %3$s: closing ancor tag. %4$s: Closing span tag. */ $response .= sprintf( __( '%1$sIf you need help to debug this, please create a %2$s support ticket%3$s.%4$s', 'Avada' ), '<span class="awb-prebuilt-import-message">', '<a href="https://my.avada.com/submit-a-ticket/" target="_blank">', '</a>', '</span>' ); // Echo response message. echo $response; // phpcs:ignore WordPress.Security.EscapeOutput // Sending 500 response to the client side (ajax request). http_response_code( 500 ); } exit; } } /** * The main importer function. * * @access public * @since 7.3 * @param array $args CLI arguments. */ public function import_demo_stage( $args ) { if ( defined( 'WP_CLI' ) && WP_CLI ) { if ( isset( $args['importStages'] ) ) { $this->import_stages = wp_unslash( $args['importStages'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput } $this->demo_type = 'classic'; if ( isset( $args['demoType'] ) && '' !== sanitize_text_field( wp_unslash( $args['demoType'] ) ) ) { $this->demo_type = sanitize_text_field( wp_unslash( $args['demoType'] ) ); } $this->fetch_attachments = false; if ( isset( $args['fetchAttachments'] ) && '1' === sanitize_text_field( wp_unslash( $args['fetchAttachments'] ) ) ) { $this->fetch_attachments = true; } $this->import_content_types = []; if ( isset( $args['contentTypes'] ) && is_array( $args['contentTypes'] ) ) { $this->import_content_types = wp_unslash( $args['contentTypes'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput } $this->import_all = false; if ( isset( $args['allImport'] ) && '1' === sanitize_text_field( wp_unslash( $args['allImport'] ) ) ) { $this->import_all = true; } $this->run_demo_stage_import(); // We've just processed last import stage. if ( 1 === count( $this->import_stages ) ) { /** * WIP $this->content_tracker->set_general_data(); */ $this->after_import(); // Reset all caches, don't remove demo data. fusion_reset_all_caches( [ 'demo_data' => false, ] ); // Demo imported. } else { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedElse // Demo import partially completed. } // Save data after import, for example imported terms. $this->content_tracker->save_demo_history(); } } /** * Actually run demo stage import. * * @access private * @since 7.3 */ private function run_demo_stage_import() { // Include the remote file getter. if ( ! class_exists( 'Avada_Importer_Data' ) ) { include_once Avada::$template_dir_path . '/includes/importer/class-avada-importer-data.php'; } if ( ! class_exists( 'Avada_Demo_Content_Tracker' ) ) { include_once Avada::$template_dir_path . '/includes/importer/class-avada-demo-content-tracker.php'; } $this->importer_files = new Avada_Importer_Data( $this->demo_type ); $this->content_tracker = new Avada_Demo_Content_Tracker( $this->demo_type ); $this->before_import_stage(); if ( ! empty( $this->import_stages[0] ) && method_exists( $this, 'import_' . $this->import_stages[0] ) ) { if ( 'download' !== $this->import_stages[0] ) { $this->theme_xml = $this->importer_files->get_path( 'avada.xml' ); $this->theme_options_file = $this->importer_files->get_path( 'theme_options.json' ); $this->widgets_file = $this->importer_files->get_path( 'widget_data.json' ); $this->fs_url = $this->importer_files->get_path( 'fusion_slider.zip' ); $this->shop_demo = $this->importer_files->is_shop(); $this->sidebars = $this->importer_files->get_sidebars(); $this->homepage_title = $this->importer_files->get_homepage_title(); $this->woopages = $this->importer_files->get_woopages(); $this->fs_exists = true; if ( 'landing_product' === $this->demo_type ) { $this->fs_exists = false; } if ( 'content' === $this->import_stages[0] ) { $this->before_content_import(); foreach ( $this->import_content_types as $content_type ) { // Note import stage which is currently processed. $this->content_tracker->update_import_stage_data( $content_type ); } } else { // Note import stage which is currently processed. $this->content_tracker->update_import_stage_data( $this->import_stages[0] ); } } // Make import stage backup if needed. if ( method_exists( $this->content_tracker, 'set_' . $this->import_stages[0] ) ) { call_user_func( [ $this->content_tracker, 'set_' . $this->import_stages[0] ] ); } call_user_func( [ $this, 'import_' . $this->import_stages[0] ] ); // Menus are imported with the content. if ( 'content' === $this->import_stages[0] ) { $this->after_content_import(); } } } /** * Just some stuff that needs to be set before any import stage is run. * * @access private * @since 5.2 */ private function before_import_stage() { add_filter( 'intermediate_image_sizes_advanced', 'avada_filter_image_sizes' ); if ( function_exists( 'ini_get' ) ) { if ( 300 < ini_get( 'max_execution_time' ) ) { set_time_limit( 300 ); } if ( 512 < intval( ini_get( 'memory_limit' ) ) ) { wp_raise_memory_limit(); } } } /** * Just some stuff that needs to be set after any import stage is run. * * @access private * @since 5.2 */ private function after_import() { if ( true === $this->import_all ) { $this->assign_menus_to_locations(); $this->content_tracker->update_import_stage_data( 'all' ); } // Map zip attachments to fusion_icons posts. Doing it here as it's probably shortest import stage. if ( $this->import_all || in_array( 'fusion_icons', $this->import_content_types, true ) ) { $args = [ 'posts_per_page' => -1, // phpcs:ignore WPThemeReview.CoreFunctionality.PostsPerPage 'post_type' => 'fusion_icons', 'meta_key' => 'fusion_demo_import', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key 'meta_value' => $this->demo_type, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value ]; $icon_posts = get_posts( $args ); foreach ( $icon_posts as $icon_post ) { $icon_set_meta = fusion_data()->post_meta( $icon_post->ID )->get( 'custom_icon_set' ); $attachment_args = [ 'posts_per_page' => 1, 'post_type' => 'attachment', 'meta_key' => '_fusion_icon_set_id', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key 'meta_value' => $icon_set_meta['icon_set_id'], // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value ]; $attachment_posts = get_posts( $attachment_args ); if ( is_array( $attachment_posts ) && isset( $attachment_posts[0] ) && isset( $attachment_posts[0]->ID ) ) { $icon_set_meta['attachment_id'] = $attachment_posts[0]->ID; fusion_data()->post_meta( $icon_post->ID )->set( 'custom_icon_set', $icon_set_meta ); // (Re)generate icon files. Fusion_Custom_Icon_Set::get_instance()->regenerate_icon_files( $icon_post->ID ); } } } } /** * Downloads demo package (zip) file. * * @access private * @since 5.2 */ private function import_download() { // Get remote files and save locally. if ( ! $this->importer_files->remote_files_downloaded() ) { $this->importer_files->download_remote_files(); } // Allow attributes import. // We want attributes taxonomies to be imported before the content, so they can be registered before XML file processing starts (otherwise terms will be skipped). if ( $this->importer_files->is_shop() && class_exists( 'Avada_Woocommerce_Variations' ) && function_exists( 'wc_create_attribute' ) && ( $this->import_all || in_array( 'product', $this->import_content_types, true ) ) ) { $product_attributes = $this->importer_files->get_woo_product_attributes(); if ( ! empty( $product_attributes ) ) { // Add Avada attribute types. add_filter( 'product_attributes_type_selector', [ Avada_Woocommerce_Variations::get_instance(), 'add_attribute_types' ] ); $imported_attribute_ids = []; foreach ( $product_attributes as $args ) { $attr_id = wc_create_attribute( $args ); if ( ! is_wp_error( $attr_id ) ) { $imported_attribute_ids[] = $attr_id; } } // Add imported attribute ids to demo tracker. $this->content_tracker->set_woo_attributes( $imported_attribute_ids ); } } // If prebuilt has ACF import and ACF is active. if ( $this->importer_files->get_acf() && function_exists( 'acf_determine_internal_post_type' ) ) { $acf_import = $this->import_acf_data(); // Add imported attribute ids to demo tracker. if ( false !== $acf_import && ! empty( $acf_import ) ) { $this->content_tracker->set_acf( $acf_import ); } } } /** * Fetch ACF import data and import. * * @access private * @since 7.11 */ private function import_acf_data() { $import_json = fusion_file_get_contents( $this->importer_files->get_acf() ); $json = json_decode( $import_json, true ); // Check if empty. if ( ! $json || ! is_array( $json ) ) { return false; } // Ensure $json is an array of posts. if ( isset( $json['key'] ) ) { $json = [ $json ]; } // Remember imported post ids. $ids = []; // Loop over json. foreach ( $json as $to_import ) { // Search database for existing post. $post_type = acf_determine_internal_post_type( $to_import['key'] ); $post = acf_get_internal_post_type_post( $to_import['key'], $post_type ); if ( $post ) { $to_import['ID'] = $post->ID; } // Import the post. $to_import = acf_import_internal_post_type( $to_import, $post_type ); // Append message. $ids[] = $to_import['ID']; } return $ids; } /** * This is called before 'content' import stages are run. * Mostly used to add hooks which will filter allowed post types and taxonomies from avada.xml file. * * Currently 'content' import stages are: posts, pages, images, CPT. * * @access private * @since 5.2 */ private function before_content_import() { add_filter( 'wxr_importer.pre_process.user', [ $this, 'skip_authors' ], 10, 2 ); add_filter( 'wxr_importer.pre_process.comment', [ $this, 'skip_unapproved_comment' ], 10, 2 ); add_action( 'wxr_importer.processed.post', [ $this, 'add_fusion_demo_import_meta' ], 10, 5 ); add_action( 'wxr_importer.processed.post', [ $this, 'add_fusion_demo_import_post' ], 10, 5 ); add_filter( 'import_post_meta_key', [ $this, 'skip_unnecessary_meta' ], 10, 3 ); add_filter( 'wxr_importer.pre_process.post', [ $this, 'remove_trashed_drafted_post' ], 10, 4 ); add_filter( 'wxr_importer.pre_process.post', [ $this, 'trim_post_content' ], 10, 4 ); add_filter( 'wxr_importer.checking_exists.post', [ $this, 'check_post_exists' ], 10, 2 ); if ( ! $this->import_all ) { if ( ! empty( $this->import_content_types ) ) { foreach ( $this->import_content_types as $content_type ) { if ( method_exists( $this, 'allow_import_' . $content_type ) ) { call_user_func( [ $this, 'allow_import_' . $content_type ] ); } } } add_filter( 'wxr_importer.pre_process.post', [ $this, 'skip_not_allowed_post_types' ], 10, 4 ); add_filter( 'wxr_importer.pre_process.term', [ $this, 'skip_not_allowed_taxonomies' ], 10, 2 ); } else { // Slides are imported separately, not from avada.xml file. add_filter( 'wxr_importer.pre_process.post', [ $this, 'skip_slide_post_type' ], 10, 4 ); add_filter( 'wxr_importer.pre_process.term', [ $this, 'skip_slide_taxonomy' ], 10, 2 ); // Don't import WooCommerce orders. add_filter( 'wxr_importer.pre_process.post', [ $this, 'skip_shop_order_post_type' ], 10, 4 ); add_filter( 'wxr_importer.pre_process.post', [ $this, 'skip_acf_data' ], 10, 4 ); } if ( $this->import_all || in_array( 'avada_layout', $this->import_content_types, true ) ) { // Make global layout backup, since they are part of 'content' stage need to be handled separately. $this->content_tracker->set_avada_layout(); add_filter( 'wxr_importer.pre_process.post', [ $this, 'add_slashes_to_layout_content' ], 8, 4 ); add_filter( 'wxr_importer.pre_process.post', [ $this, 'import_global_avada_layout' ], 9, 4 ); } } /** * This is called after 'content' import stages are run. * * @access private * @since 5.2 */ private function after_content_import() { remove_filter( 'wxr_importer.pre_process.user', [ $this, 'skip_authors' ], 10 ); remove_action( 'wxr_importer.processed.post', [ $this, 'add_fusion_demo_import_meta' ], 10 ); remove_action( 'wxr_importer.processed.post', [ $this, 'add_fusion_demo_import_post' ], 10 ); remove_filter( 'import_post_meta_key', [ $this, 'skip_unnecessary_meta' ], 10 ); remove_filter( 'wxr_importer.pre_process.post', [ $this, 'trim_post_content' ], 10 ); remove_filter( 'wxr_importer.checking_exists.post', [ $this, 'check_post_exists' ], 10 ); if ( ! $this->import_all ) { remove_filter( 'wxr_importer.pre_process.post', [ $this, 'skip_not_allowed_post_types' ], 10 ); remove_filter( 'wxr_importer.pre_process.term', [ $this, 'skip_not_allowed_taxonomies' ], 10 ); } else { remove_filter( 'wxr_importer.pre_process.post', [ $this, 'skip_slide_post_type' ], 10 ); remove_filter( 'wxr_importer.pre_process.term', [ $this, 'skip_slide_taxonomy' ], 10 ); remove_filter( 'wxr_importer.pre_process.post', [ $this, 'skip_shop_order_post_type' ], 10, 4 ); remove_filter( 'wxr_importer.pre_process.post', [ $this, 'skip_acf_data' ], 10, 4 ); } if ( $this->import_all || in_array( 'avada_layout', $this->import_content_types, true ) ) { remove_filter( 'wxr_importer.pre_process.post', [ $this, 'add_slashes_to_layout_content' ], 8, 4 ); remove_filter( 'wxr_importer.pre_process.post', [ $this, 'import_global_avada_layout' ], 9, 4 ); } } /** * We don't want to import demo authors. * * @access public * @since 5.2 * @param array $data User importer data. * @param array $meta User meta. * @return bool */ public function skip_authors( $data, $meta ) { return false; } /** * We don't want to import unapproved comments. * * @access public * @since 7.11.8 * @param array $comment Comment importer data. * @param array $post_id Post ID. * @return array */ public function skip_unapproved_comment( $comment, $post_id ) { if ( '1' !== $comment['comment_approved'] ) { return []; } return $comment; } /** * Removes trashed and drafted post. * * @access public * @since 7.11.8* * @param array $data Post data. * @param array $meta Meta data. * @param array $comments Comments on the post. * @param array $terms Terms on the post. * @return array The post data. */ public function remove_trashed_drafted_post( $data, $meta, $comments, $terms ) { if ( 'trash' === $data['post_status'] || 'draft' === $data['post_status'] ) { return []; } return $data; } /** * Check for post exists. * * @access public * @since 7.11 * @param bool $return Return filter value if post exist. * @param array $data Post Data. * @return bool */ public function check_post_exists( $return, $data ) { $exists = $this->find_existing_post( $data['post_id'] . '-' . $this->demo_type ); if ( $exists ) { return $exists; } // check again. $exists = post_exists( $data['post_title'], $data['post_content'], $data['post_date'] ); if ( $exists ) { // Only add a flag to track the importer. $this->add_fusion_demo_import_meta( $exists, $data, null, null, null ); } return $return; } /** * Flag a post with the post meta. * * @access public * @since 7.11 * @param string $key Key from original wxr file. * @return mixed */ public function find_existing_post( $key ) { global $wpdb; return $wpdb->get_var( // phpcs:ignore WordPress.DB.DirectDatabaseQuery $wpdb->prepare( 'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = \'_fusion_demo_imported_post\' AND `meta_value` = %s ;', md5( $key ) ) ); } /** * Adds import meta to demos. * * @access public * @since 5.2 * @param int $post_id The Post ID. * @param array $data The Post importer data. * @param array $meta The Post meta. * @param array $comments The Post comments. * @param array $terms The Post terms. */ public function add_fusion_demo_import_meta( $post_id, $data, $meta, $comments, $terms ) { update_post_meta( $post_id, 'fusion_demo_import', $this->demo_type ); } /** * Adds meta flag for post_exists. * * @access public * @since 7.11 * @param int $post_id The Post ID. * @param array $data The Post importer data. * @param array $meta The Post meta. * @param array $comments The Post comments. * @param array $terms The Post terms. */ public function add_fusion_demo_import_post( $post_id, $data, $meta, $comments, $terms ) { update_post_meta( $post_id, '_fusion_demo_imported_post', md5( $data['post_id'] . '-' . $this->demo_type ) ); } /** * Allow importing a post. * * @access public * @since 5.2 */ public function allow_import_post() { $this->allowed_post_types = array_merge( $this->allowed_post_types, [ 'post' ] ); $this->allowed_taxonomies = array_merge( $this->allowed_taxonomies, [ 'category', 'post_tag' ] ); } /** * Allow importing a page. * * @access public * @since 5.2 */ public function allow_import_page() { $this->allowed_post_types = array_merge( $this->allowed_post_types, [ 'page', 'fusion_element', 'fusion_template', 'wpcf7_contact_form' ] ); $this->allowed_taxonomies = array_merge( $this->allowed_taxonomies, [ 'element_category' ] ); } /** * Allow importing a portfolio. * * @access public * @since 5.2 */ public function allow_import_avada_portfolio() { $this->allowed_post_types = array_merge( $this->allowed_post_types, [ 'avada_portfolio' ] ); $this->allowed_taxonomies = array_merge( $this->allowed_taxonomies, [ 'portfolio_category', 'portfolio_skills', 'portfolio_tags' ] ); } /** * Allow importing an FAQ. * * @access public * @since 5.2 */ public function allow_import_avada_faq() { $this->allowed_post_types = array_merge( $this->allowed_post_types, [ 'avada_faq' ] ); $this->allowed_taxonomies = array_merge( $this->allowed_taxonomies, [ 'faq_category' ] ); } /** * Allow importing layouts. * * @access public * @since 6.2 */ public function allow_import_avada_layout() { $this->allowed_post_types = array_merge( $this->allowed_post_types, [ 'fusion_tb_layout', 'fusion_tb_section' ] ); $this->allowed_taxonomies = array_merge( $this->allowed_taxonomies, [ 'fusion_tb_category' ] ); } /** * Allow importing custom icon sets. * * @access public * @since 6.2 */ public function allow_import_fusion_icons() { $this->allowed_post_types = array_merge( $this->allowed_post_types, [ 'fusion_icons' ] ); } /** * Allow importing fusion forms. * * @access public * @since 7.1 */ public function allow_import_fusion_form() { $this->allowed_post_types = array_merge( $this->allowed_post_types, [ 'fusion_form' ] ); } /** * Allow importing a product. * * @access public * @since 5.2 */ public function allow_import_product() { $this->allowed_post_types = array_merge( $this->allowed_post_types, [ 'product', 'shop_coupon', 'product_variation' ] ); $this->allowed_taxonomies = array_merge( $this->allowed_taxonomies, [ 'product_cat', 'product_tag', 'product_visibility', 'product_type' ] ); // Allow attribute taxonomies to be imported as well. if ( function_exists( 'wc_get_attribute_taxonomies' ) && function_exists( 'wc_attribute_taxonomy_name' ) ) { $attribute_taxonomies = wc_get_attribute_taxonomies(); if ( $attribute_taxonomies ) { foreach ( $attribute_taxonomies as $tax ) { $this->allowed_taxonomies[] = wc_attribute_taxonomy_name( $tax->attribute_name ); } } } } /** * Allow importing an event. * * @access public * @since 5.2 */ public function allow_import_event() { $this->allowed_post_types = array_merge( $this->allowed_post_types, [ 'tribe_events', 'tribe_venue', 'tribe_organizer' ] ); $this->allowed_taxonomies = array_merge( $this->allowed_taxonomies, [ 'tribe_events_cat' ] ); } /** * Allow importing a forum. * * @access public * @since 5.2 */ public function allow_import_forum() { $this->allowed_post_types = array_merge( $this->allowed_post_types, [ 'forum', 'topic', 'reply' ] ); $this->allowed_taxonomies = array_merge( $this->allowed_taxonomies, [ 'topic-tag' ] ); } /** * Allow importing an attachment. * * @access public * @since 5.2 */ public function allow_import_attachment() { $this->allowed_post_types = array_merge( $this->allowed_post_types, [ 'attachment' ] ); } /** * Imports global avada layout. * Inserts data to wp_options table and passes post to 'skip_not_allowed_post_types' (which will skip it). * * @access public * @since 6.2 * @param array $data The Post importer data. * @param array $meta The Post meta. * @param array $comments The Post comments. * @param array $terms The Post terms. * @return bool|array */ public function import_global_avada_layout( $data, $meta, $comments, $terms ) { if ( isset( $data['post_type'] ) && 'fusion_tb_layout_global' === $data['post_type'] && isset( $data['post_content'] ) && '' !== $data['post_content'] ) { update_option( 'fusion_tb_layout_default', trim( wp_unslash( $data['post_content'] ), '"' ) ); } return $data; } /** * Main content importer method. * * @access private * @since 5.2 */ private function load_import_dependencies() { if ( ! defined( 'WP_LOAD_IMPORTERS' ) ) { define( 'WP_LOAD_IMPORTERS', true ); // We are loading importers. } if ( ! class_exists( 'WP_Importer' ) ) { // If main importer class doesn't exist. $wp_importer = ABSPATH . 'wp-admin/includes/class-wp-importer.php'; include $wp_importer; } if ( ! class_exists( 'WP_Importer_Logger' ) ) { // If WP importer doesn't exist. include FUSION_LIBRARY_PATH . '/inc/importer/class-logger.php'; } if ( ! class_exists( 'AWB_Importer_Logger' ) ) { // If WP importer doesn't exist. include FUSION_LIBRARY_PATH . '/inc/importer/class-awb-importer-logger.php'; } if ( ! class_exists( 'WXR_Importer' ) ) { // If WP importer doesn't exist. include FUSION_LIBRARY_PATH . '/inc/importer/class-wxr-importer.php'; } if ( ! class_exists( 'Fusion_WXR_Importer' ) ) { include FUSION_LIBRARY_PATH . '/inc/importer/class-fusion-wxr-importer.php'; } } /** * Attachment importer method. * * @access private * @since 7.11 */ private function import_attachment() { $this->allow_import_attachment(); $this->before_content_import(); $this->load_import_dependencies(); if ( class_exists( 'AWB_Importer_Logger' ) && class_exists( 'WP_Importer' ) && class_exists( 'WXR_Importer' ) && class_exists( 'Fusion_WXR_Importer' ) ) { // Check for main import class and wp import class. $logger = new AWB_Importer_Logger(); // It's important to disable 'prefill_existing_posts'. // In case GUID of importing post matches GUID of an existing post it won't be imported. $importer = new Fusion_WXR_Importer( [ 'fetch_attachments' => $this->fetch_attachments, 'prefill_existing_posts' => false, 'aggressive_url_search' => true, ] ); $importer->set_logger( $logger ); ob_start(); $importer->import_attachment( $this->theme_xml ); ob_end_clean(); } $this->after_content_import(); } /** * Main content importer method. * * @access private * @since 5.2 */ private function import_content() { $this->load_import_dependencies(); if ( class_exists( 'AWB_Importer_Logger' ) && class_exists( 'WP_Importer' ) && class_exists( 'WXR_Importer' ) && class_exists( 'Fusion_WXR_Importer' ) ) { // Check for main import class and wp import class. $logger = new AWB_Importer_Logger(); // It's important to disable 'prefill_existing_posts'. // In case GUID of importing post matches GUID of an existing post it won't be imported. $importer = new Fusion_WXR_Importer( [ 'fetch_attachments' => $this->fetch_attachments, 'prefill_existing_posts' => false, 'aggressive_url_search' => true, ] ); $importer->set_logger( $logger ); ob_start(); $importer->import( $this->theme_xml ); ob_end_clean(); // Import WooCommerce if WooCommerce Exists. if ( class_exists( 'WooCommerce' ) && $this->shop_demo ) { foreach ( $this->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 ); // Front Page. } } // We no longer need to install pages. delete_option( '_wc_needs_pages' ); delete_transient( '_wc_activation_redirect' ); } // Flush rules after install. flush_rewrite_rules(); } } /** * Skips post-types that are not allowed. * * @access public * @since 5.2 * @param array $data The Post importer data. * @param array $meta The Post meta. * @param array $comments The Post comments. * @param array $terms The Post terms. * @return bool|array */ public function skip_not_allowed_post_types( $data, $meta, $comments, $terms ) { if ( ! in_array( $data['post_type'], $this->allowed_post_types ) && ! $this->is_icon_package( $data, $meta ) ) { // phpcs:ignore WordPress.PHP.StrictInArray return false; } return $data; } /** * Adds extra slashes to fusion_tb_layout post's content. * * @access public * @since 6.2 * @param array $data The Post importer data. * @param array $meta The Post meta. * @param array $comments The Post comments. * @param array $terms The Post terms. * @return array */ public function add_slashes_to_layout_content( $data, $meta, $comments, $terms ) { if ( isset( $data['post_type'] ) && 'fusion_tb_layout' === $data['post_type'] ) { $data['post_content'] = wp_slash( $data['post_content'] ); } return $data; } /** * Checks if current post is icon package and if it should be imported. * * @access public * @since 6.2 * @param array $data The Post importer data. * @param array $meta The Post meta. * @return bool */ private function is_icon_package( $data, $meta ) { if ( 'attachment' !== $data['post_type'] || ! in_array( 'fusion_icons', $this->allowed_post_types, true ) ) { return false; } foreach ( $meta as $meta_field ) { if ( '_fusion_icon_set_id' === $meta_field['key'] ) { return true; } } return false; } /** * Trim post content which seems to be added by WP 5.1+ exporter. * * @access public * @since 5.9 * @param array $data The Post importer data. * @param array $meta The Post meta. * @param array $comments The Post comments. * @param array $terms The Post terms. * @return bool|array */ public function trim_post_content( $data, $meta, $comments, $terms ) { $data['post_content'] = trim( $data['post_content'] ); return $data; } /** * Skip non-allowed taxonomies. * * @access public * @since 5.2 * @param array $data The Post importer data. * @param array $meta The Post meta. * @return bool|array */ public function skip_not_allowed_taxonomies( $data, $meta ) { if ( ! in_array( $data['taxonomy'], $this->allowed_taxonomies ) ) { // phpcs:ignore WordPress.PHP.StrictInArray return false; } return $data; } /** * Skips 'slide' post type. * This is used to skip importing 'slides' from avada.xml file. * * @access public * @since 5.2 * @param array $data The Post importer data. * @param array $meta The Post meta. * @param array $comments The Post comments. * @param array $terms The Post terms. * @return bool|array */ public function skip_slide_post_type( $data, $meta, $comments, $terms ) { if ( 'slide' === $data['post_type'] ) { return false; } return $data; } /** * Skip 'slide-page' terms. * * @access public * @since 5.2 * @param array $data The Post importer data. * @param array $meta The Post meta. * @return bool|array */ public function skip_slide_taxonomy( $data, $meta ) { if ( $data && 'slide-page' === $data['taxonomy'] ) { return false; } return $data; } /** * Skips 'shop_order' post type. * This is used to skip importing 'slides' from avada.xml file. * * @access public * @since 7.7 * @param array $data The Post importer data. * @param array $meta The Post meta. * @param array $comments The Post comments. * @param array $terms The Post terms. * @return bool|array */ public function skip_shop_order_post_type( $data, $meta, $comments, $terms ) { if ( $data && 'shop_order' === $data['post_type'] ) { return false; } return $data; } /** * Skips ACF import data, its already been done earlier. * * @access public * @since 7.11 * @param array $data The Post importer data. * @param array $meta The Post meta. * @param array $comments The Post comments. * @param array $terms The Post terms. * @return bool|array */ public function skip_acf_data( $data, $meta, $comments, $terms ) { if ( $data && false !== strpos( $data['post_type'], 'acf-' ) ) { return false; } return $data; } /** * Used to skip unnecessary menu meta when importing. * * @access public * @since 5.2 * @param string $meta_key The meta key. * @param int $post_id Post ID. * @param object $post Post object. * @return bool|string */ public function skip_unnecessary_meta( $meta_key, $post_id, $post ) { $meta_keys = [ // Skip importing old menu meta to 5.2+ installs. '_menu_item_fusion_megamenu_status', '_menu_item_fusion_megamenu_width', '_menu_item_fusion_megamenu_columns', '_menu_item_fusion_megamenu_title', '_menu_item_fusion_megamenu_widgetarea', '_menu_item_fusion_megamenu_columnwidth', '_menu_item_fusion_megamenu_icon', '_menu_item_fusion_megamenu_modal', '_menu_item_fusion_megamenu_thumbnail', '_menu_item_fusion_menu_style', '_menu_item_fusion_menu_icononly', // Skip post views. 'avada_post_views_count', 'avada_today_post_views_count', 'avada_post_views_count_today_date', ]; if ( in_array( $meta_key, $meta_keys, true ) ) { return false; } return $meta_key; } /** * Assigns imported menus to correct locations. * Called from 'import_content' method. * * @access private * @since 5.2 */ private function assign_menus_to_locations() { // Set imported menus to registered theme locations. $locations = maybe_unserialize( get_theme_mod( 'nav_menu_locations' ) ); // Registered menu locations in theme. $menus = wp_get_nav_menus(); // Registered menus. if ( $menus ) { if ( 'landing_product' === $this->demo_type ) { $opmenu = get_page_by_title( 'Homepage' ); } elseif ( 'technology' === $this->demo_type ) { $opmenu = get_page_by_title( 'Technology' ); } elseif ( 'wedding' === $this->demo_type ) { $opmenu = get_page_by_title( 'Home' ); } elseif ( 'resume' === $this->demo_type ) { $opmenu = get_page_by_title( 'Home' ); } foreach ( $menus as $menu ) { // Assign menus to theme locations. // Legacy Special Cases. if ( 'landing_product' === $this->demo_type ) { // Assign One Page Menu. if ( isset( $opmenu ) && $opmenu->ID && 'Landing Product Landing Page Menu' === $menu->name ) { fusion_data()->post_meta( $opmenu->ID )->set( 'displayed_menu', $menu->term_id ); } } elseif ( 'resume' === $this->demo_type ) { // Assign One Page Menu. if ( isset( $opmenu ) && $opmenu->ID && 'Resume Homepage Menu' === $menu->name ) { fusion_data()->post_meta( $opmenu->ID )->set( 'displayed_menu', $menu->term_id ); } } elseif ( 'wedding' === $this->demo_type ) { // Assign One Page Menu. if ( isset( $opmenu ) && $opmenu->ID && 'Wedding Homepage Menu' === $menu->name ) { fusion_data()->post_meta( $opmenu->ID )->set( 'displayed_menu', $menu->term_id ); } } elseif ( 'technology' === $this->demo_type ) { // Assign One Page Menu. if ( isset( $opmenu ) && $opmenu->ID && 'Technology Front Page Menu' === $menu->name ) { fusion_data()->post_meta( $opmenu->ID )->set( 'displayed_menu', $menu->term_id ); } } // General menu assignment. if ( false !== strpos( $menu->name, 'Main Menu' ) ) { // Main menu. $locations['main_navigation'] = $menu->term_id; } elseif ( false !== strpos( $menu->name, 'Top Secondary Menu' ) ) { // Top Secondary Menu. $locations['top_navigation'] = $menu->term_id; } elseif ( false !== strpos( $menu->name, 'One Page Menu' ) ) { // Custom One Page Menu. if ( false !== strpos( $menu->name, 'Home' ) ) { // When on homepage we need to leave the demo name in there. $op_menu_name = str_replace( ' One Page Menu', '', $menu->name ); } else { // Remove demo name and the suffix. $demo_name = ucwords( str_replace( '_', ' ', $this->demo_type ) ) . ' '; $op_menu_name = str_replace( [ $demo_name, ' One Page Menu' ], '', $menu->name ); } // Get the page. $op_menu = get_page_by_title( $op_menu_name ); // Assign One Page Menu. if ( isset( $op_menu ) && $op_menu->ID ) { fusion_data()->post_meta( $op_menu->ID )->set( 'displayed_menu', $menu->term_id ); } } } } set_theme_mod( 'nav_menu_locations', $locations ); // Set menus to locations. } /** * Imports Global Options. * * @access private * @since 5.2 */ private function import_theme_options() { $theme_options_json = fusion_file_get_contents( $this->theme_options_file ); $theme_options = apply_filters( 'avada_import_modify_theme_options', json_decode( $theme_options_json, true ) ); $theme_options_db_name = Avada::get_original_option_name(); update_option( $theme_options_db_name, $theme_options ); } /** * Modify Theme Options before inserting in DB. * * @access public * @since 7.4 * @param array $theme_options Theme Options array. * @return array */ public function modify_theme_options( $theme_options ) { $options = [ 'status_fusion_slider' => '1', 'status_fusion_forms' => '1', 'status_awb_Off_Canvas' => '1', 'status_fusion_portfolio' => '1', 'status_fusion_faqs' => '1', 'js_compiler' => '1', 'css_cache_method' => 'file', 'status_yt' => '1', 'status_vimeo' => '1', 'status_gmap' => '1', 'status_fontawesome' => [ 'fab', 'far', 'fas' ], ]; foreach ( $options as $key => $value ) { $theme_options[ $key ] = $value; } return $theme_options; } /** * Imports widgets. * * @access private * @since 5.2 */ private function import_widgets() { // Add sidebar widget areas. if ( false !== $this->sidebars ) { update_option( 'sbg_sidebars', $this->sidebars ); foreach ( $this->sidebars as $sidebar ) { $sidebar_class = avada_name_to_class( $sidebar ); register_sidebar( [ 'name' => $sidebar, 'id' => 'avada-custom-sidebar-' . strtolower( $sidebar_class ), 'before_widget' => '<div id="%1$s" class="widget %2$s">', 'after_widget' => '</div>', 'before_title' => '<div class="heading"><h4 class="widget-title">', 'after_title' => '</h4></div>', ] ); } } // Add data to widgets. if ( isset( $this->widgets_file ) && $this->widgets_file ) { $widgets_json = $this->widgets_file; // Widgets data file. $widget_data = fusion_file_get_contents( $widgets_json ); if ( '' !== $widget_data ) { $import_widgets = fusion_import_widget_data( $widget_data ); } } } /** * Calls Fusion, Rev and Layer sliders import methods. * * @access private * @since 5.2 */ private function import_sliders() { add_action( 'wxr_importer.processed.post', [ $this, 'add_fusion_demo_import_meta' ], 10, 5 ); $this->import_fusion_sliders(); remove_action( 'wxr_importer.processed.post', [ $this, 'add_fusion_demo_import_meta' ], 10 ); $this->import_layer_sliders(); $this->import_revolution_sliders(); } /** * Imports LayerSlider. * * @access private * @since 5.2 */ private function import_layer_sliders() { global $wpdb; $layersliders = $this->importer_files->get_layerslider(); // Import Layerslider. if ( defined( 'LS_PLUGIN_VERSION' ) && false !== $layersliders ) { // Get importUtil. if ( version_compare( LS_PLUGIN_VERSION, '6.11.0', '>=' ) ) { include WP_PLUGIN_DIR . '/LayerSlider/assets/classes/class.ls.importutil.php'; } elseif ( file_exists( WP_PLUGIN_DIR . '/LayerSlider/classes/class.ls.importutil.php' ) ) { include WP_PLUGIN_DIR . '/LayerSlider/classes/class.ls.importutil.php'; } else { return; } foreach ( $layersliders as $layer_file ) { // Finally import rev slider data files. $filepath = $this->importer_files->get_path( 'layersliders/' . $layer_file ); $import = new LS_ImportUtil( $filepath ); } // Get sliders. $sliders = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}layerslider WHERE flag_hidden = '0' AND flag_deleted = '0' ORDER BY date_c ASC" ); $slides = []; if ( ! empty( $sliders ) ) { foreach ( $sliders as $key => $item ) { $slides[ $item->id ] = $item->name; $this->content_tracker->add_layer_slider_to_stack( $item->id ); } } if ( $slides ) { foreach ( $slides as $key => $val ) { $slides_array[ $val ] = $key; } } } } /** * Imports revsliders. * * @access private * @since 5.2 */ private function import_revolution_sliders() { $revsliders = $this->importer_files->get_revslider(); // Import Revslider. if ( class_exists( 'RevSliderSliderImport' ) && false != $revsliders ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison // If revslider is activated. add_action( 'wp_generate_attachment_metadata', [ $this, 'add_rev_slider_demo_import_meta' ], 10, 2 ); $slider = new RevSliderSliderImport(); foreach ( $revsliders as $rev_file ) { // Finally import rev slider data files. $filepath = $this->importer_files->get_path( 'revsliders/' . $rev_file ); ob_start(); $result = $slider->import_slider( true, $filepath ); ob_clean(); ob_end_clean(); if ( true === $result['success'] ) { $this->content_tracker->add_rev_slider_to_stack( $result['sliderID'] ); } } remove_action( 'wp_generate_attachment_metadata', [ $this, 'add_rev_slider_demo_import_meta' ], 10 ); } } /** * Add meta data for media imported by Rev Slider importer. * * @access public * @since 5.4.1 * * @param mixed $metadata Metadata for attachment. * @param int $attachment_id ID of the attachment. */ public function add_rev_slider_demo_import_meta( $metadata, $attachment_id ) { update_post_meta( $attachment_id, 'fusion_slider_demo_import', $this->demo_type ); } /** * Import fusion-sliders. * * @access private * @since 5.2 */ private function import_fusion_sliders() { // Avada Sliders Import. if ( true === $this->fs_exists && class_exists( 'Fusion_Slider' ) && file_exists( $this->fs_url ) ) { add_action( 'fusion_slider_import_image_attached', [ $this, 'add_fusion_slider_demo_import_meta' ], 10, 2 ); $fusion_slider = new Fusion_Slider(); $fusion_slider->import_sliders( $this->fs_url, $this->demo_type ); remove_action( 'fusion_slider_import_image_attached', [ $this, 'add_fusion_slider_demo_import_meta' ], 10 ); } } /** * Adds meta to fusion-sliders. * * @access public * @since 5.2 * @param int $attachment_id The attachment-ID. * @param int $post_id The post-ID. */ public function add_fusion_slider_demo_import_meta( $attachment_id, $post_id ) { update_post_meta( $attachment_id, 'fusion_slider_demo_import', $this->demo_type ); } /** * Sets home page, site title and imports menus. * * @access private * @since 5.2 */ private function import_general_data() { // Menus are imported with the rest of the content. // Set reading options. $homepage = get_page_by_title( $this->homepage_title ); if ( isset( $homepage ) && $homepage->ID ) { update_option( 'show_on_front', 'page' ); update_option( 'page_on_front', $homepage->ID ); // Front Page. } // Import site title. $site_title = '' !== $this->site_title ? $this->site_title : 'Avada ' . ucwords( str_replace( '_', ' ', $this->demo_type ) ); update_option( 'blogname', $site_title ); $this->content_tracker->set( 'general_data', 'imported' ); } /** * Import Convert Plus plugin's modules. * * @access private * @since 6.2 */ private function import_convertplug() { // Plugin is not active or there are no modules to import. if ( ! defined( 'CP_VERSION' ) || false === $this->importer_files->get_cp_modules() ) { return; } // Wait for init or require. if ( ! function_exists( 'smile_backend_create_folder' ) ) { require_once CP_BASE_DIR . '/framework/functions/functions.admin.php'; } $upload_dir = wp_upload_dir(); $files = $this->importer_files->get_cp_modules(); foreach ( $files as $file_basename ) { $file_type = wp_check_filetype( $file_basename, null ); $file_path = $this->importer_files->get_path( 'convertplus/' . $file_basename ); $title = pathinfo( $file_basename, PATHINFO_FILENAME ); $attachment_id = wp_insert_attachment( [ 'post_title' => $title, 'post_content' => '', 'post_status' => 'inherit', 'post_mime_type' => $file_type['type'], ], $file_path, 0 ); // Set module name. $module_name = 'modal'; if ( false !== strpos( $file_basename, 'info_bar' ) ) { $module_name = 'info_bar'; } elseif ( false !== strpos( $file_basename, 'slide_in' ) ) { $module_name = 'slide_in'; } $data['module'] = $module_name; $data['file'] = [ 'id' => $attachment_id, 'filename' => $file_basename, 'title' => $title, ]; // We're all set. if ( function_exists( 'fusion_cp_import_' . $module_name ) ) { // Add post meta to imported images. add_action( 'add_attachment', [ $this, 'cp_add_postmeta' ] ); // Call CP's import function. call_user_func( 'fusion_cp_import_' . $module_name, $data ); // Post import work. $this->add_cp_to_tracker( $module_name, $attachment_id ); } } } /** * Add CP modules' ID to our tracker. * * @since 6.2 * @param string $module_name Name of the module. * @param int $attachment_id ID of zip archive. * @return void */ public function add_cp_to_tracker( $module_name, $attachment_id ) { global $wpdb; $option_name = 'smile_' . $module_name . '_styles'; $modules = get_option( $option_name, [] ); // Latest module is last. $module = end( $modules ); if ( isset( $module['style_id'] ) ) { $this->content_tracker->add_convertplug_to_stack( [ $module['style_id'], $module_name ] ); } // Remove zip from Media Library (we want to keep the file). $wpdb->query( $wpdb->prepare( "DELETE $wpdb->posts, $wpdb->postmeta FROM $wpdb->posts INNER JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id WHERE $wpdb->posts.ID = %d", $attachment_id ) ); } /** * Add post meta to any attachment added during CP import. * * @since 6.2 * @param int $attachment_id Attachment ID. */ public function cp_add_postmeta( $attachment_id ) { update_post_meta( $attachment_id, 'fusion_demo_import', $this->demo_type ); } /** * Return correct http response code for error. * * @access public * @since 3.11 * @param array $args The arguments. * @param array $error The error. * @return array */ public function handle_http_response_code( $args, $error ) { // Return 504 for php max execution time error. if ( $error && isset( $error['message'] ) && false !== strpos( strtolower( $error['message'] ), 'maximum execution time' ) ) { $args['response'] = 504; } return $args; } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */
Cokiee Shell Web 1.0, Coded By Razor
Neueste Kommentare