38217-vm/wp-content/themes/Avada/includes/importer/class-avada-demo-content-tracker.php
2026-02-05 17:08:59 +03:00

384 lines
9.1 KiB
PHP

<?php
/**
* Tracks imported content.
*
* @author ThemeFusion
* @copyright (c) Copyright by ThemeFusion
* @link https://avada.com
* @package Avada
* @subpackage Importer
* @since 5.2
*/
// Do not allow directly accessing this file.
if ( ! defined( 'ABSPATH' ) ) {
exit( 'Direct script access denied.' );
}
/**
* Class Avada_Demo_Content_Tracker
*/
class Avada_Demo_Content_Tracker {
/**
* Currently importing / removing demo_type.
*
* @access private
* @since 5.2
* @var string
*/
private $demo_type;
/**
* Array of arrays. Key is demo_type, value is array containing demo backup.
*
* @access private
* @since 5.2
* @var mixed|void
*/
private $demo_history;
/**
* The defaults.
*
* @access private
* @since 5.2
* @var array
*/
private $import_data_defaults;
/**
* Constructor.
*
* @access public
* @since 5.2
* @param string $demo_type The demo type.
*/
public function __construct( $demo_type ) {
$this->demo_type = $demo_type;
$this->demo_history = get_option( 'fusion_demo_history', [] );
$this->import_data_defaults = [
'post' => [],
'page' => [],
'avada_portfolio' => [],
'avada_faq' => [],
'avada_layout' => [],
'fusion_icons' => [],
'attachment' => [],
'product' => [],
'event' => [],
'forum' => [],
'sliders' => [],
'widgets' => [],
'theme_options' => [],
'convertplug' => [],
'acf_data' => [],
'general_data' => [],
'all' => [],
];
add_action( 'wxr_importer.processed.term', [ $this, 'add_term_to_stack' ], 10, 2 );
add_action( 'fusion_slider_import_processed_term', [ $this, 'add_fusion_slider_term_to_stack' ], 10, 2 );
}
/**
* Saves import data.
* Import data is used to quickly get which parts of which demo are imported.
*
* @access public
* @since 5.2
* @param string $import_stage Demo type.
* @param array $import_type The import type.
*/
public function save_import_stage_data( $import_stage, $import_type ) {
$import_data = get_option( 'fusion_import_data', $this->import_data_defaults );
$import_data[ $import_stage ] = $import_type;
update_option( 'fusion_import_data', $import_data, false );
}
/**
* Gets import data for specific stage.
*
* @access public
* @since 5.2
* @param string $import_stage The import stage.
* @return array
*/
public function get_import_stage_data( $import_stage ) {
$import_data = get_option( 'fusion_import_data', $this->import_data_defaults );
if ( empty( $import_data[ $import_stage ] ) ) {
return [];
}
return $import_data[ $import_stage ];
}
/**
* Updates import data.
*
* @access public
* @since 5.2
* @param string $import_stage The import stage.
*/
public function update_import_stage_data( $import_stage ) {
$data = $this->get_import_stage_data( $import_stage );
// Add demo if it's not already added.
if ( ! in_array( $this->demo_type, $data ) ) { // phpcs:ignore WordPress.PHP.StrictInArray
$data[] = $this->demo_type;
}
$this->save_import_stage_data( $import_stage, $data );
}
/**
* Resets the stage.
*
* @access public
* @since 5.2
* @param string $stage The import stage.
*/
public function reset_stage( $stage ) {
$data = $this->get_import_stage_data( $stage );
$key = array_search( $this->demo_type, $data ); // phpcs:ignore WordPress.PHP.StrictInArray
if ( is_array( $data ) && false !== $key ) {
unset( $data[ $key ] );
}
$this->save_import_stage_data( $stage, $data );
}
/**
* Adds general data to demo history.
*
* @access public
* @since 5.2
*/
public function set_general_data() {
$this->demo_history[ $this->demo_type ]['blogname'] = get_option( 'blogname' );
$this->demo_history[ $this->demo_type ]['page_on_front'] = get_option( 'page_on_front' );
$this->demo_history[ $this->demo_type ]['show_on_front'] = get_option( 'show_on_front' );
$this->demo_history[ $this->demo_type ]['nav_menu_locations'] = get_theme_mod( 'nav_menu_locations' );
}
/**
* Adds Global Options backup to demo history.
*
* @access public
* @since 5.2
*/
public function set_theme_options() {
$this->demo_history[ $this->demo_type ]['theme_options'] = get_option( Avada::get_original_option_name() );
}
/**
* Adds global layout backup to demo history.
*
* @access public
* @since 6.2
*/
public function set_avada_layout() {
$this->demo_history[ $this->demo_type ]['fusion_tb_layout_default'] = get_option( 'fusion_tb_layout_default' );
}
/**
* Saves imported Woo attributes to demo history.
*
* @access public
* @since 7.2
* @param array $attr_ids Imported Woo attribute IDs.
*/
public function set_woo_attributes( $attr_ids ) {
$this->demo_history[ $this->demo_type ]['woo_attributes'] = $attr_ids;
}
/**
* Saves imported ACF data to demo history.
*
* @access public
* @since 7.2
* @param array $data Imported Woo attribute IDs.
* @return void
*/
public function set_acf( $data ) {
$this->demo_history[ $this->demo_type ]['acf_data'] = $data;
}
/**
* Adds widgets backup to demo history.
*
* @access public
* @since 5.2
*/
public function set_widgets() {
$this->demo_history[ $this->demo_type ]['widgets'] = $this->fetch_widgets();
$this->demo_history[ $this->demo_type ]['sidebars_widgets'] = get_option( 'sidebars_widgets' );
$this->demo_history[ $this->demo_type ]['sbg_sidebars'] = get_option( 'sbg_sidebars' );
}
/**
* Fetches the widgets so they can be added to the demo history.
*
* @access public
* @since 5.2
* @return array
*/
public function fetch_widgets() {
global $wpdb;
$results = $wpdb->get_results( "SELECT * FROM $wpdb->options WHERE option_name LIKE 'widget_%'" );
if ( is_wp_error( $results ) ) {
$results = [];
}
return $results;
}
/**
* Adds Slider Revolution slider IDs to demo history.
*
* @access public
* @since 5.2
* @param string $slider_id The slider-ID.
*/
public function add_rev_slider_to_stack( $slider_id ) {
if ( ! isset( $this->demo_history[ $this->demo_type ]['rev_sliders'] ) ) {
$this->demo_history[ $this->demo_type ]['rev_sliders'] = [];
}
$this->demo_history[ $this->demo_type ]['rev_sliders'][] = (int) $slider_id;
}
/**
* Adds Layer slider IDs to demo history.
*
* @access public
* @since 5.2
* @param string $slider_id The slider-ID.
*/
public function add_layer_slider_to_stack( $slider_id ) {
if ( ! isset( $this->demo_history[ $this->demo_type ]['layer_sliders'] ) ) {
$this->demo_history[ $this->demo_type ]['layer_sliders'] = [];
}
$this->demo_history[ $this->demo_type ]['layer_sliders'][] = (int) $slider_id;
}
/**
* Adds imported terms to demo history.
*
* @access public
* @since 5.2
* @param int $term_id Term id.
* @param array $data Term data.
*/
public function add_term_to_stack( $term_id, $data ) {
if ( ! isset( $this->demo_history[ $this->demo_type ]['terms'] ) ) {
$this->demo_history[ $this->demo_type ]['terms'] = [];
}
$this->demo_history[ $this->demo_type ]['terms'][] = [
'term_id' => $term_id,
'taxonomy' => $data['taxonomy'],
];
}
/**
* Adds Avada Sliders to demo history.
*
* @access public
* @since 5.2
* @param int $term_id The term-ID.
* @param array $term The term.
*/
public function add_fusion_slider_term_to_stack( $term_id, $term ) {
if ( ! isset( $this->demo_history[ $this->demo_type ]['fusion_sliders'] ) ) {
$this->demo_history[ $this->demo_type ]['fusion_sliders'] = [];
}
$this->demo_history[ $this->demo_type ]['fusion_sliders'][] = [
'term_id' => $term_id,
'taxonomy' => $term['taxonomy'],
];
}
/**
* Adds Convert Pluging module IDs to demo history.
*
* @access public
* @since 6.2.0
* @param array $module [module_id, module_name] pair.
* @return void
*/
public function add_convertplug_to_stack( $module ) {
if ( ! isset( $this->demo_history[ $this->demo_type ]['convertplug_modules'] ) ) {
$this->demo_history[ $this->demo_type ]['convertplug_modules'] = [];
}
$this->demo_history[ $this->demo_type ]['convertplug_modules'][] = $module;
}
/**
* Saves demo history.
*
* @access public
* @since 5.2
*/
public function save_demo_history() {
update_option( 'fusion_demo_history', $this->demo_history, false );
}
/**
* Demo history getter.
*
* @access public
* @since 5.2
* @param string $key The key.
* @return bool
*/
public function get( $key ) {
if ( empty( $this->demo_history[ $this->demo_type ][ $key ] ) ) {
return false;
}
return $this->demo_history[ $this->demo_type ][ $key ];
}
/**
* Demo history setter.
*
* @access public
* @since 5.2
* @param string $key The key.
* @param mixed $value The value.
*/
public function set( $key, $value ) {
$this->demo_history[ $this->demo_type ][ $key ] = $value;
$this->save_demo_history();
}
/**
* Removes all demo backup data
*
* @access public
* @since 5.2
*/
public function remove_demo() {
if ( isset( $this->demo_history[ $this->demo_type ] ) ) {
unset( $this->demo_history[ $this->demo_type ] );
}
$this->save_demo_history();
}
}