/
var
/
www
/
barefootlaw.org
/
wp-content
/
plugins
/
archub-core
/
libs
/
core-importer
/
Upload File
HOME
<?php /** * Class LiquidImporter * * This class provides the capability to import demo content as well as import widgets and WordPress menus * * Some method of this class are written by Franklin M Gitonga * * @since 1.0.0 * */ class LiquidImporter { /** * Holds a copy of the object for easy reference. * * @since 2.2.0 * * @var object */ public $theme_options_file; /** * Holds a copy of the object for easy reference. * * @since 2.2.0 * * @var object */ public $widgets; /** * Set the key to be used to store theme options * * @since 0.0.2 * * @var object */ public $theme_option_name; //set theme options name here public $theme_options_file_name = 'theme-options.json'; public $widgets_file_name = 'widgets.json'; public $content_demo_file_name = 'content.xml'; public $media_file_name = 'media.xml'; public $customizer_data_name = 'customizer_data.dat'; public $demo_settings_name = 'demo_settings.json'; /** * Holds a copy of the object for easy reference. * * @since 2.2.0 * * @var object */ public $content_demo; /** * Flag imported to prevent duplicates * * @since 2.2.0 * * @var object */ public $flag_as_imported = array(); public $demo_files_path; public $customizer_data; public $demo_settings; /** * Holds a copy of the widget settings * * @since 0.0.2 * * @var object */ public $widget_import_results; /** * Holds a copy of the object for easy reference. * * @since 2.2.0 * * @var object */ private static $instance; /** * Constructor. Hooks all interactions to initialize the class. * * @since 2.2.0 */ public function __construct($core) { if(isset($_POST['demo']) && !empty($_POST['demo'])) { $demo = esc_attr($_POST['demo']); } else { $demo = $this->selected_demo_folder; } self::$instance = $this; $this->core = $core; $this->demo_files_path = $this->demo_files_path . $demo.DIRECTORY_SEPARATOR; $this->theme_options_file = $this->demo_files_path . $this->theme_options_file_name; $this->widgets = $this->demo_files_path . $this->widgets_file_name; $this->content_demo = $this->demo_files_path . $this->content_demo_file_name; $this->customizer_data = $this->demo_files_path . $this->customizer_data_name; $this->log = $core['LiquidLog']; } /** * add_widget_to_sidebar Import sidebars * @param string $sidebar_slug Sidebar slug to add widget * @param string $widget_slug Widget slug * @param string $count_mod position in sidebar * @param array $widget_settings widget settings * * @since 2.2.0 * * @return null */ public function add_widget_to_sidebar($sidebar_slug, $widget_slug, $count_mod, $widget_settings = array()) { $sidebars_widgets = get_option('sidebars_widgets'); if(!isset($sidebars_widgets[$sidebar_slug])) $sidebars_widgets[$sidebar_slug] = array('_multiwidget' => 1); $newWidget = get_option('widget_'.$widget_slug); if(!is_array($newWidget)) $newWidget = array(); $count = count($newWidget)+1+$count_mod; $sidebars_widgets[$sidebar_slug][] = $widget_slug.'-'.$count; $newWidget[$count] = $widget_settings; update_option('sidebars_widgets', $sidebars_widgets); update_option('widget_'.$widget_slug, $newWidget); $this->elementor_update_options(); } public function set_demo_data( $file = '', $media = true ) { //@todo alret message if ini_set is disabled ( mostly on shared hostings ) if( function_exists('set_time_limit') ) { @set_time_limit(300); } else { @ini_set( 'max_execution_time', 300 ); } $this->elementor_update_options(); if(empty($file)) { $file = $this->content_demo; } if ( !defined('WP_LOAD_IMPORTERS') ) define('WP_LOAD_IMPORTERS', true); require_once ABSPATH . 'wp-admin/includes/import.php'; $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 = true; } } if ( !class_exists( 'WP_Import' ) ) { $class_wp_import = dirname( __FILE__ ) .'/wordpress-importer.php'; if ( file_exists( $class_wp_import ) ) require_once($class_wp_import); else $importer_error = true; } if($importer_error){ die("Error on import"); } else { if(!is_file( $file )) { echo "The XML file containing the dummy content is not available or could not be read .. You might want to try to set the file permission to chmod 755.<br/>If this doesn't work please use the Wordpress importer and import the XML file (should be located in your download .zip: Sample Content folder) manually "; } else { $wp_import = new WP_Import(); $wp_import->fetch_attachments = $media; $wp_import->import( $file, $media ); echo ('Contents Imported Successfully. '); $args = array( 'post_type' => 'elementor_library', 'name' => 'liquid-kit', 'meta_query' => array( array( 'key' => '_elementor_template_type', 'value' => 'kit', ), ), ); $query = get_posts( $args ); if ( ! empty( $query ) && isset( $query[0] ) && isset( $query[0]->ID ) ) { update_option( 'elementor_active_kit', $query[0]->ID ); } } } } public function set_demo_theme_options( $file = '' ) { if(empty($file)) { $file = $this->theme_options_file; } // File exists? if ( ! file_exists( $file ) ) { $this->log->putContent('Faild to import theme options', true, true); wp_die( esc_html__( 'Theme options Import file could not be found. ', 'archub-core' ), '', array( 'back_link' => true ) ); } // Get file contents and decode $data = file_get_contents( $file ); $data = trim($data, '###'); $data = json_decode( $data, true ); //var_dump($data); // Have valid data? // If no data or could not decode if ( empty( $data ) || ! is_array( $data ) ) { $this->log->putContent('Faild to import theme options', true, true); wp_die( esc_html__( 'Theme options import data could not be read. Please try a different file.', 'archub-core' ), '', array( 'back_link' => true ) ); }else{ echo(''); echo('Theme Options Imported successfully'); $data = apply_filters( 'radium_theme_import_theme_options', $data ); update_option($this->theme_option_name, $data); $this->log->putContent('Theme options imported', true, true); $this->elementor_update_options(); } // Hook before import } /** * Available widgets * * Gather site's widgets into array with ID base, name, etc. * Used by export and import functions. * * @since 2.2.0 * * @global array $wp_registered_widget_updates * @return array Widget information */ function available_widgets() { global $wp_registered_widget_controls; $widget_controls = $wp_registered_widget_controls; $available_widgets = array(); foreach ( $widget_controls as $widget ) { if ( ! empty( $widget['id_base'] ) && ! isset( $available_widgets[$widget['id_base']] ) ) { // no dupes $available_widgets[$widget['id_base']]['id_base'] = $widget['id_base']; $available_widgets[$widget['id_base']]['name'] = $widget['name']; } } return apply_filters( 'radium_theme_import_widget_available_widgets', $available_widgets ); } /** * Process import file * * This parses a file and triggers importation of its widgets. * * @since 2.2.0 * * @param string $file Path to .wie file uploaded * @global string $widget_import_results */ function process_widget_import_file( $file = '') { if(empty($file)) { $file = $this->widgets; } // File exists? if ( ! file_exists( $file ) ) { wp_die( esc_html__( 'Widget Import file could not be found. ', 'archub-core' ), '', array( 'back_link' => true ) ); } // Get file contents and decode $data = file_get_contents( $file ); $data = json_decode( $data ); // Delete import file //unlink( $file ); // Import the widget data // Make results available for display on import/export page $this->widget_import_results = $this->import_widgets( $data ); } /** * Import widget JSON data * * @since 2.2.0 * @global array $wp_registered_sidebars * @param object $data JSON widget data from .wie file * @return array Results array */ public function import_widgets( $data ) { global $wp_registered_sidebars; // Have valid data? // If no data or could not decode if ( empty( $data ) || ! is_object( $data ) ) { wp_die( esc_html__( 'Widget import data could not be read. Please try a different file.', 'archub-core' ), '', array( 'back_link' => true ) ); } // Hook before import $data = apply_filters( 'radium_theme_import_widget_data', $data ); // Get all available widgets site supports $available_widgets = $this->available_widgets(); // Get all existing widget instances $widget_instances = array(); foreach ( $available_widgets as $widget_data ) { $widget_instances[$widget_data['id_base']] = get_option( 'widget_' . $widget_data['id_base'] ); } // Begin results $results = array(); // Loop import data's sidebars foreach ( $data as $sidebar_id => $widgets ) { // Skip inactive widgets // (should not be in export file) if ( 'wp_inactive_widgets' == $sidebar_id ) { continue; } // Check if sidebar is available on this site // Otherwise add widgets to inactive, and say so if ( isset( $wp_registered_sidebars[$sidebar_id] ) ) { $sidebar_available = true; $use_sidebar_id = $sidebar_id; $sidebar_message_type = 'success'; $sidebar_message = ''; } else { $sidebar_available = false; $use_sidebar_id = 'wp_inactive_widgets'; // add to inactive if sidebar does not exist in theme $sidebar_message_type = 'error'; $sidebar_message = __( 'Sidebar does not exist in theme (using Inactive)', 'archub-core' ); } // Result for sidebar $results[$sidebar_id]['name'] = ! empty( $wp_registered_sidebars[$sidebar_id]['name'] ) ? $wp_registered_sidebars[$sidebar_id]['name'] : $sidebar_id; // sidebar name if theme supports it; otherwise ID $results[$sidebar_id]['message_type'] = $sidebar_message_type; $results[$sidebar_id]['message'] = $sidebar_message; $results[$sidebar_id]['widgets'] = array(); // Loop widgets foreach ( $widgets as $widget_instance_id => $widget ) { $fail = false; // Get id_base (remove -# from end) and instance ID number $id_base = preg_replace( '/-[0-9]+$/', '', $widget_instance_id ); $instance_id_number = str_replace( $id_base . '-', '', $widget_instance_id ); // Does site support this widget? if ( ! $fail && ! isset( $available_widgets[$id_base] ) ) { $fail = true; $widget_message_type = 'error'; $widget_message = __( 'Site does not support widget', 'archub-core' ); // explain why widget not imported $this->log->putContent('Site does not support widget', true, true); } // Filter to modify settings before import // Do before identical check because changes may make it identical to end result (such as URL replacements) $widget = apply_filters( 'radium_theme_import_widget_settings', $widget ); // Does widget with identical settings already exist in same sidebar? if ( ! $fail && isset( $widget_instances[$id_base] ) ) { // Get existing widgets in this sidebar $sidebars_widgets = get_option( 'sidebars_widgets' ); $sidebar_widgets = isset( $sidebars_widgets[$use_sidebar_id] ) ? $sidebars_widgets[$use_sidebar_id] : array(); // check Inactive if that's where will go // Loop widgets with ID base $single_widget_instances = ! empty( $widget_instances[$id_base] ) ? $widget_instances[$id_base] : array(); foreach ( $single_widget_instances as $check_id => $check_widget ) { // Is widget in same sidebar and has identical settings? if ( in_array( "$id_base-$check_id", $sidebar_widgets ) && (array) $widget == $check_widget ) { $fail = true; $widget_message_type = 'warning'; $widget_message = __( 'Widget already exists', 'archub-core' ); // explain why widget not imported $this->log->putContent('Widget already exists', true, true); break; } } } // No failure if ( ! $fail ) { // Add widget instance $single_widget_instances = get_option( 'widget_' . $id_base ); // all instances for that widget ID base, get fresh every time $single_widget_instances = ! empty( $single_widget_instances ) ? $single_widget_instances : array( '_multiwidget' => 1 ); // start fresh if have to $single_widget_instances[] = (array) $widget; // add it // Get the key it was given end( $single_widget_instances ); $new_instance_id_number = key( $single_widget_instances ); // If key is 0, make it 1 // When 0, an issue can occur where adding a widget causes data from other widget to load, and the widget doesn't stick (reload wipes it) if ( '0' === strval( $new_instance_id_number ) ) { $new_instance_id_number = 1; $single_widget_instances[$new_instance_id_number] = $single_widget_instances[0]; unset( $single_widget_instances[0] ); } // Move _multiwidget to end of array for uniformity if ( isset( $single_widget_instances['_multiwidget'] ) ) { $multiwidget = $single_widget_instances['_multiwidget']; unset( $single_widget_instances['_multiwidget'] ); $single_widget_instances['_multiwidget'] = $multiwidget; } // Update option with new widget update_option( 'widget_' . $id_base, $single_widget_instances ); // Assign widget instance to sidebar $sidebars_widgets = get_option( 'sidebars_widgets' ); // which sidebars have which widgets, get fresh every time $new_instance_id = $id_base . '-' . $new_instance_id_number; // use ID number from new widget instance $sidebars_widgets[$use_sidebar_id][] = $new_instance_id; // add new instance to sidebar update_option( 'sidebars_widgets', $sidebars_widgets ); // save the amended data // Success message if ( $sidebar_available ) { $widget_message_type = 'success'; $widget_message = esc_html__( 'Widgets Imported', 'archub-core' ); $this->log->putContent('Widgets Imported', true, true); } else { $widget_message_type = 'warning'; $widget_message = esc_html__( 'Imported to Inactive', 'archub-core' ); } } // Result for widget instance $results[$sidebar_id]['widgets'][$widget_instance_id]['name'] = isset( $available_widgets[$id_base]['name'] ) ? $available_widgets[$id_base]['name'] : $id_base; // widget name or ID if name not available (not supported by site) $results[$sidebar_id]['widgets'][$widget_instance_id]['title'] = $widget->title ? $widget->title : esc_html__( 'No Title', 'archub-core' ); // show "No Title" if widget instance is untitled $results[$sidebar_id]['widgets'][$widget_instance_id]['message_type'] = $widget_message_type; $results[$sidebar_id]['widgets'][$widget_instance_id]['message'] = $widget_message; } } echo $widget_message; // Hook after import do_action( 'radium_theme_import_widget_after_import' ); $this->elementor_update_options(); // Return results return apply_filters( 'radium_theme_import_widget_results', $results ); } function elementor_update_options(){ update_option( 'elementor_css_print_method', 'internal' ); update_option( 'elementor_disable_color_schemes', 'yes' ); update_option( 'elementor_disable_typography_schemes', 'yes' ); update_option( 'elementor_font_display', 'swap' ); update_option('elementor_experiment-e_dom_optimization', 'active'); update_option( 'elementor_cpt_support', [ 'page', 'post', 'liquid-header', 'liquid-footer', 'liquid-portfolio', 'liquid-mega-menu'] ); //write it to the database liquid_helper()->purge_assets_cache( true ); } } ?>