| Current Path : /home/xbodynamge/www/wp-content/themes/hestia/inc/content-import/ |
| Current File : /home/xbodynamge/www/wp-content/themes/hestia/inc/content-import/class-hestia-content-import.php |
<?php
/**
* Hestia import handler.
*
* @package Hestia
* @since 1.1.49
*/
/**
* Class Hestia_Content_Import
*
* Handles content import from Azera, Llorix and Parallax One.
*/
final class Hestia_Content_Import {
/**
* Previous theme slug
*
* @var mixed|string|void
*/
private $previous_theme = '';
/**
* Simple theme mods
*
* @var array
*/
private $simple_theme_mods = array(
// Big title
'hestia_big_title_title' => 'header_title',
'hestia_big_title_text' => 'header_subtitle',
'hestia_big_title_button_text' => 'header_button_text',
'hestia_big_title_button_link' => 'header_button_link',
// Logos section
'hestia_clients_bar_hide' => 'logos_show',
'hestia_clients_bar_content' => 'logos_content',
// Ribbon section
'hestia_ribbon_hide' => 'ribbon_show',
'hestia_ribbon_text' => 'ribbon_title',
'hestia_ribbon_button_text' => 'button_text',
'hestia_ribbon_button_url' => 'button_link',
// Contact subtitle
'hestia_contact_subtitle' => 'copyright',
// Features section
'hestia_features_hide' => 'our_services_show',
'hestia_features_title' => 'our_services_title',
'hestia_features_subtitle' => 'our_services_subtitle',
// About section
'hestia_about_hide' => 'our_story_show',
// Team section
'hestia_team_hide' => 'our_team_show',
'hestia_team_title' => 'our_team_title',
'hestia_team_subtitle' => 'our_team_subtitle',
'hestia_team_content' => 'team_content',
// Testimonials
'hestia_testimonials_hide' => 'happy_customers_show',
'hestia_testimonials_title' => 'happy_customers_title',
'hestia_testimonials_subtitle' => 'happy_customers_subtitle',
'hestia_testimonials_content' => 'testimonials_content',
// Portfolio
'hestia_portfolio_title' => 'plus_portfolio_section_title',
'hestia_portfolio_subtitle' => 'plus_portfolio_section_subtitle',
'hestia_portfolio_items' => 'plus_number_of_portfolio_posts',
// Shop
'hestia_shop_hide' => 'shop_section_show',
// Copyright
'hestia_general_credits' => 'pwd',
);
/**
* Previous theme content
*
* @var array
*/
private $previous_theme_content = array();
/**
* Hestia_Content_Import constructor.
*
* @access public
* @since 1.1.49
*/
public function __construct() {
// Get the name of the previously active theme.
$this->previous_theme = strtolower( get_option( 'theme_switched' ) );
// Get the theme mods from the previous theme.
$this->previous_theme_content = get_option( 'theme_mods_' . $this->previous_theme );
}
/**
* Main import handler function.
*
* @access private
* @since 1.1.49
*/
public final function import() {
if ( ! in_array( $this->previous_theme, array( 'azera-shop', 'parallax-one', 'llorix-one-lite' ) ) ) {
return;
}
// Prefix the theme mods with the previously active theme slug.
$this->prefix_theme_mods( $this->simple_theme_mods );
// Add exceptions.
$this->add_exceptions();
// Set all mods in the $simple_theme_mods array.
$this->set_simple_mods( $this->simple_theme_mods );
// Import content.
$this->import_content();
}
/**
* Prefix theme mods.
*
* @param theme -mods $mods theme mods array.
*
* @access private
* @since 1.1.49
*/
private final function prefix_theme_mods( $mods ) {
$prefix = str_replace( '-', '_', $this->previous_theme ) . '_';
if ( ! empty( $mods ) ) {
foreach ( $mods as $hestia_mod => $previous_mod_unprefixed ) {
$this->simple_theme_mods[ $hestia_mod ] = $prefix . $previous_mod_unprefixed;
}
}
}
/**
* Add exceptions || remove unused settings.
*
* Add exceptions and bail if the previous theme was not Azera, Parallax or Llorix,
*
* @access private
* @since 1.1.49
*/
private final function add_exceptions() {
// Add exceptions and bail if there's another theme than these three.
switch ( $this->previous_theme ) {
case 'azera-shop':
$this->azera_specific_changes();
$theme_exceptions = array(
'hestia_big_title_background' => 'header_image',
'hestia_ribbon_background' => 'azera_shop_ribbon_background',
'hestia_shop_title' => 'azera_shop_shop_section_title',
'hestia_shop_subtitle' => 'azera_shop_shop_section_subtitle',
'hestia_shop_items' => 'azera_shop_number_of_products',
);
$this->simple_theme_mods = array_merge( $this->simple_theme_mods, $theme_exceptions );
break;
case 'parallax-one':
$this->parallax_specific_changes();
$theme_exceptions = array(
'hestia_big_title_background' => 'header_image',
'hestia_ribbon_background' => 'paralax_one_ribbon_background',
'hestia_shop_title' => 'parallax_one_plus_shop_section_title',
'hestia_shop_subtitle' => 'parallax_one_plus_shop_section_subtitle',
'hestia_shop_items' => 'parallax_one_plus_number_of_products',
'hestia_blog_title' => 'parallax_one_latest_news_title',
);
$this->simple_theme_mods = array_merge( $this->simple_theme_mods, $theme_exceptions );
break;
case 'llorix-one-lite':
$this->llorix_specific_changes();
$theme_exceptions = array(
'hestia_big_title_background' => 'header_image',
'hestia_ribbon_background' => 'llorix_one_lite_ribbon_background',
'hestia_shop_title' => 'llorix_one_plus_shop_section_title',
'hestia_shop_subtitle' => 'llorix_one_plus_shop_section_subtitle',
'hestia_shop_items' => 'llorix_one_plus_number_of_products',
'hestia_blog_title' => 'llorix_one_lite_latest_news_title',
);
$this->simple_theme_mods = array_merge( $this->simple_theme_mods, $theme_exceptions );
break;
}
}
/**
* Import content from previous theme.
*
* @access private
* @since 1.1.49
*/
private function import_content() {
require_once( HESTIA_PHP_INCLUDE . 'content-import/class-hestia-import-utilities.php' );
$utilities = new Hestia_Import_Utilities();
$prefix = str_replace( '-', '_', $this->previous_theme ) . '_';
/**
* Import logo.
*/
$logo_id = $prefix === 'parallax_one_' ? 'paralax_one_logo' : $prefix . 'logo';
if ( ! empty( $this->previous_theme_content[ $logo_id ] ) ) {
$utilities->update_logo( $this->previous_theme_content[ $logo_id ] );
}
/**
* Enable Clients bar section if user have content in it in previous theme.
*/
$clients_hide = get_theme_mod( 'hestia_clients_bar_hide' );
if ( ! empty( $this->previous_theme_content[ $prefix . 'logos_content' ] ) && empty( $clients_hide ) ) {
set_theme_mod( 'hestia_clients_bar_hide', false );
}
/**
* Enable ribbon section if user have content in it in previous theme.
*/
$ribbon_hide = get_theme_mod( 'hestia_ribbon_hide' );
if ( ( ! empty( $this->previous_theme_content[ $prefix . 'ribbon_title' ] ) || ! empty( $this->previous_theme_content[ $prefix . 'button_text' ] ) ) && empty( $ribbon_hide ) ) {
set_theme_mod( 'hestia_ribbon_hide', false );
}
/**
* Features content. Check if it contains stamp icons, replace them and update content in hestia.
*/
if ( ! empty( $this->previous_theme_content[ $prefix . 'services_content' ] ) ) {
$json = $utilities->update_icons( $this->previous_theme_content[ $prefix . 'services_content' ] );
if ( ! empty( $json ) ) {
set_theme_mod( 'hestia_features_content', $json );
}
}
/**
* Shop section.
*/
$woo_cat_control_id = $prefix . 'woocomerce_categories';
switch ( $prefix ) {
case 'llorix_one_lite_':
$woo_cat_control_id = 'llorix_one_plus_woocomerce_categories';
break;
case 'parallax_one_':
$woo_cat_control_id = 'parallax_one_plus_woocomerce_categories';
break;
}
if ( ! empty( $this->previous_theme_content[ $woo_cat_control_id ] ) ) {
$utilities->update_shop_category( $this->previous_theme_content[ $woo_cat_control_id ] );
}
/**
* Shortcodes section.
*/
if ( ( empty( $this->previous_theme_content[ $prefix . 'shortcodes_section_show' ] ) || (bool) $this->previous_theme_content[ $prefix . 'shortcodes_section_show' ] !== true ) && ! empty( $this->previous_theme_content[ $prefix . 'shortcodes_settings' ] ) ) {
$utilities->shortcodes_section_to_html( $this->previous_theme_content[ $prefix . 'shortcodes_settings' ] );
}
/**
* Contact section.
*/
if ( ( empty( $this->previous_theme_content[ $prefix . 'contact_info_show' ] ) || (bool) $this->previous_theme_content[ $prefix . 'contact_info_show' ] !== true ) && ! empty( $this->previous_theme_content[ $prefix . 'contact_info_content' ] ) ) {
$utilities->contact_to_html( $this->previous_theme_content[ $prefix . 'contact_info_content' ] );
}
/**
* About section.
*/
$settings = array();
if ( ! empty( $this->previous_theme_content[ $prefix . 'our_story_title' ] ) ) {
$settings['title'] = $this->previous_theme_content[ $prefix . 'our_story_title' ];
};
if ( ! empty( $this->previous_theme_content[ $prefix . 'our_story_text' ] ) ) {
$settings['text'] = $this->previous_theme_content[ $prefix . 'our_story_text' ];
};
if ( ! empty( $this->previous_theme_content[ $prefix . 'our_story_image' ] ) ) {
$settings['image'] = $this->previous_theme_content[ $prefix . 'our_story_image' ];
};
$layout_control = '';
switch ( $prefix ) {
case 'llorix_one_lite_':
$layout_control = 'llorix_one_plus_about_layout';
break;
case 'parallax_one_':
$layout_control = 'parallax_one_plus_about_layout';
break;
case 'azera_shop_':
$layout_control = 'azera_shop_plus_about_layout';
break;
}
if ( ! empty( $layout_control ) && ! empty( $this->previous_theme_content[ $layout_control ] ) ) {
$settings['layout'] = $this->previous_theme_content[ $layout_control ];
};
$utilities->about_to_html( $settings );
/**
* Move portfolio from cpt to jetpack's cpt.
*/
$utilities->update_portfolio( 'portfolio' );
/**
* Sidebars.
*/
$utilities->update_sidebars();
/**
* Features ribbon section.
*/
if ( ! empty( $this->previous_theme_content[ $prefix . 'features_ribbon_content' ] ) ) {
$utilities->features_ribbon_to_html( $this->previous_theme_content[ $prefix . 'features_ribbon_content' ] );
}
/**
* Create Json for slider control in hestia
*/
$settings = array(
'title' => $prefix . 'header_title',
'subtitle' => $prefix . 'header_subtitle',
'text' => $prefix . 'header_button_text',
'link' => $prefix . 'header_button_link',
'image_url' => 'header_image',
);
$utilities->update_big_title( $this->previous_theme_content, $settings );
/**
* Full width layout
*/
if ( ! empty( $this->previous_theme_content[ $prefix . 'full_width_template' ] ) ) {
$utilities->update_layout( $this->previous_theme_content[ $prefix . 'full_width_template' ] );
}
/**
* Update sections order
*/
$section_match = array(
'hestia_clients_bar' => $prefix . 'logos_settings_section',
'hestia_features' => $prefix . 'services_section',
'hestia_about' => $prefix . 'about_section',
'hestia_shop' => $prefix . 'shop_section',
'hestia_team' => $prefix . 'team_section',
'hestia_portfolio' => $prefix . 'portfolio_section',
'hestia_testimonials' => $prefix . 'testimonials_section',
'hestia_ribbon' => $prefix . 'ribbon_section',
'hestia_blog' => $prefix . 'latest_news_section',
'hestia_contact' => $prefix . 'contact_section',
);
$sections_order = ( ! empty( $this->previous_theme_content['sections_order'] ) ? $this->previous_theme_content['sections_order'] : '' );
$utilities->update_sections_order( $sections_order, $section_match );
/**
* Header layout
*/
$layout = $prefix === 'azera_shop_' ? 'layout2' : '';
if ( ! empty( $this->previous_theme_content[ $prefix . 'header_layout' ] ) ) {
$utilities->update_header_layout( $this->previous_theme_content[ $prefix . 'header_layout' ] );
} elseif ( ! empty( $layout ) ) {
$utilities->update_header_layout( $layout );
}
/* Menus */
if ( ! empty( $this->previous_theme_content['nav_menu_locations'] ) ) {
if ( $prefix === 'llorix_one_lite_' ) {
$social_content = ! empty( $this->previous_theme_content['llorix_one_lite_very_top_social_icons'] ) ? $this->previous_theme_content['llorix_one_lite_very_top_social_icons'] : '';
} else {
$social_content = ! empty( $this->previous_theme_content[ $prefix . 'social_icons' ] ) ? $this->previous_theme_content[ $prefix . 'social_icons' ] : '';
}
$utilities->update_menus( $social_content, $this->previous_theme_content['nav_menu_locations'] );
}
}
/**
* Sets all the simple theme mods provided in the parameter array.
*
* @param theme -mods $mods theme mods array.
*
* @access private
* @since 1.1.49
*/
private function set_simple_mods( $mods ) {
// Prefix the theme mods with the previous active theme name and set them in Hestia.
if ( ! empty( $mods ) ) {
foreach ( $mods as $hestia_mod => $imported_mod ) {
$this->set_hestia_mod( $hestia_mod, $imported_mod );
}
}
}
/**
* Utility method to set theme mod from import.
*
* @param hestia-mod-id $hestia_mod_id the hestia mod to set.
* @param imported-mod-id $imported_mod_id the imported theme mod id.
*
* @access private
* @since 1.1.49
*/
private final function set_hestia_mod( $hestia_mod_id, $imported_mod_id ) {
$hestia_mod = get_theme_mod( $hestia_mod_id );
if ( ! empty( $this->previous_theme_content[ $imported_mod_id ] ) ) {
$imported_mod = $this->previous_theme_content[ $imported_mod_id ];
if ( ! empty( $imported_mod ) && empty( $hestia_mod ) ) {
set_theme_mod( $hestia_mod_id, $imported_mod );
}
}
}
/**
* Do specific actions for Llorix theme.
*
* @access private
* @since 1.1.49
*/
private function llorix_specific_changes() {
/* Set fonts */
set_theme_mod( 'hestia_headings_font', 'Cabin' );
set_theme_mod( 'hestia_body_font', 'Cabin' );
/* Set default color */
set_theme_mod( 'accent_color', '#be5000' );
set_theme_mod( 'secondary_color', '#0d3c55' );
if ( ! empty( $previous_theme_content['llorix_one_lite_title_color'] ) ) {
set_theme_mod( 'body_color', $previous_theme_content['llorix_one_lite_title_color'] );
}
if ( ! empty( $previous_theme_content['llorix_one_lite_text_color'] ) ) {
set_theme_mod( 'secondary_color', $previous_theme_content['llorix_one_lite_text_color'] );
}
}
/**
* Do specific actions for Azera theme.
*
* @access private
* @since 1.1.49
*/
private function azera_specific_changes() {
/* Set fonts */
set_theme_mod( 'hestia_headings_font', 'Cabin' );
set_theme_mod( 'hestia_body_font', 'Cabin' );
/* Set default color */
set_theme_mod( 'accent_color', '#FFA200' );
/* Static front page settings */
if ( 'page' === get_option( 'show_on_front' ) ) {
$pid = $this->create_frontpage();
update_option( 'page_on_front', $pid );
}
}
/**
* Do modifications for parallax that needs some logic.
*
* @access private
* @since 1.1.49
*/
private function parallax_specific_changes() {
/* Set fonts */
set_theme_mod( 'hestia_headings_font', 'Cabin' );
set_theme_mod( 'hestia_body_font', 'Cabin' );
/* Set default color */
set_theme_mod( 'accent_color', '#008ed6' );
/* Shop section visibility */
if ( ! empty( $previous_theme_content['parallax_one_shop_section_show'] ) ) {
set_theme_mod( 'hestia_shop_hide', (bool) $previous_theme_content['parallax_one_shop_section_show'] );
} else {
set_theme_mod( 'hestia_shop_hide', true );
}
/* Static front page settings */
if ( 'posts' === get_option( 'show_on_front' ) ) {
$pid = $this->create_frontpage();
update_option( 'show_on_front', 'page' );
update_option( 'page_on_front', $pid );
}
}
/**
* Create the frontpage from previous themes ( azera/llorix/paralax) and returns its id.
*/
private function create_frontpage() {
$about_content = get_theme_mod( 'hestia_page_editor' );
$page_content = ! empty( $about_content ) ? $about_content : '';
$page = array(
'post_type' => 'page',
'post_title' => 'Front page',
'post_content' => wp_kses_post( $page_content ),
'post_status' => 'publish',
'post_author' => 1,
);
$pid = wp_insert_post( $page );
return $pid;
}
}