OwlCyberSecurity - MANAGER
Edit File: class-hestia-import-utilities.php
<?php /** * Utilities methods used to import all three themes, Azera, Llorix, Parallax * * @package hestia * @since 1.1.49 */ /** * Class Import_Utilities * * @access public * @since 1.1.49 */ class Hestia_Import_Utilities { /** * This function updates logo in hestia. * In hestia logo control is returning attachment id while in A, P, L the logo is an url * * Note: A, P, L is short version of Azera, Parallax, Llorix. * * @param string $previous_theme_content Previous content. * * @access public * @since 1.1.49 */ public function update_logo( $previous_theme_content ) { // Don't set any logo if it's already set in hestia $current_logo = get_theme_mod( 'custom_logo' ); if ( ! empty( $current_logo ) ) { return; } // Exit if there is no logo in A / P / L $logo_value = $previous_theme_content; if ( empty( $logo_value ) ) { return; } $logo_attachement_id = $this->get_attachment_id( $logo_value ); if ( ! empty( $logo_attachement_id ) ) { set_theme_mod( 'custom_logo', $logo_attachement_id ); } } /** * Returns attachement id from an url. * * @param string $url Attachement url. * @access public * @since 1.1.49 * * @return int|mixed */ private function get_attachment_id( $url ) { $attachment_id = 0; $dir = wp_upload_dir(); if ( false !== strpos( $url, $dir['baseurl'] . '/' ) ) { // Is URL in uploads directory? $file = basename( $url ); $query_args = array( 'post_type' => 'attachment', 'post_status' => 'inherit', 'fields' => 'ids', 'meta_query' => array( array( 'value' => $file, 'compare' => 'LIKE', 'key' => '_wp_attachment_metadata', ), ), ); $query = new WP_Query( $query_args ); if ( $query->have_posts() ) { foreach ( $query->posts as $post_id ) { $meta = wp_get_attachment_metadata( $post_id ); $original_file = basename( $meta['file'] ); $cropped_image_files = wp_list_pluck( $meta['sizes'], 'file' ); if ( $original_file === $file || in_array( $file, $cropped_image_files, true ) ) { $attachment_id = $post_id; break; } } wp_reset_postdata(); } } return $attachment_id; } /** * Update sections order. * * @param string $previous_theme_content All settings from previous theme. * @param array $section_match Matching sections from previous theme and hestia. * @access public * @since 1.1.49 */ public function update_sections_order( $previous_theme_content, $section_match ) { $result_order = array( 'hestia_clients_bar' => 10, 'hestia_features' => 15, 'hestia_about' => 20, 'hestia_shop' => 25, 'hestia_team' => 30, 'hestia_testimonials' => 35, 'hestia_ribbon' => 40, 'hestia_blog' => 45, 'hestia_contact' => 50, 'hestia_pricing' => 55, 'sidebar-widgets-subscribe-widgets' => 60, ); if ( empty( $previous_theme_content ) ) { set_theme_mod( 'sections_order', json_encode( $result_order ) ); return; } // This means that it's a pro version of the theme we want to import $prev_oreder = json_decode( $previous_theme_content ); if ( ! empty( $prev_oreder ) ) { foreach ( $section_match as $hestia_section => $imported_sction ) { $result_order[ $hestia_section ] = $prev_oreder->$imported_sction; } } set_theme_mod( 'sections_order', json_encode( $result_order ) ); } /** * Create Json for slider control in hestia. * * @param array $previous_theme_content All settings from previous theme. * @access public * @since 1.1.49 */ public function update_big_title( $previous_theme_content, $settings ) { $hestia_slider_content = get_theme_mod( 'hestia_slider_content' ); if ( ! empty( $hestia_slider_content ) ) { return; } $result = array(); foreach ( $settings as $item => $name ) { if ( ! empty( $previous_theme_content[ $name ] ) ) { $result[ $item ] = $previous_theme_content[ $name ]; } } if ( ! empty( $result ) ) { set_theme_mod( 'hestia_slider_content', '[' . json_encode( $result ) . ']' ); } } /** * Create html from about section add add it to about section content in hestia. * * @param array $about_content About content. * @access public * @since 1.1.49 */ public function about_to_html( $about_content ) { $title = ! empty( $about_content['title'] ) ? $about_content['title'] : ''; $text = ! empty( $about_content['text'] ) ? $about_content['text'] : ''; $image = ! empty( $about_content['image'] ) ? $about_content['image'] : ''; $layout = ! empty( $about_content['layout'] ) ? $about_content['layout'] : ''; $page_editor = get_theme_mod( 'hestia_page_editor' ); $about_html = ( ! empty( $page_editor ) ? $page_editor : '' ); if ( ! empty( $title ) ) { $about_html .= '<h2>' . wp_kses_post( $title ) . '</h2>'; } if ( ! empty( $text ) || ! empty( $image ) ) { $class_to_add = ( empty( $image ) ? 'col-md-12' : 'col-md-8' ); $about_html .= '<div class="row">'; if ( $layout === 'about_layout2' ) { if ( ! empty( $image ) ) { $about_html .= '<div class="col-md-4 col-xs-12"><img src="' . esc_url( $image ) . '"/></div>'; } } $about_html .= '<div class="' . esc_attr( $class_to_add ) . ' col-xs-12">'; if ( ! empty( $text ) ) { $about_html .= wp_kses_post( $text ); } $about_html .= '</div>'; if ( $layout !== 'about_layout2' ) { if ( ! empty( $image ) ) { $about_html .= '<div class="col-md-4 col-xs-12"><img src="' . esc_url( $image ) . '"/></div>'; } } $about_html .= '</div>'; } if ( ! empty( $about_html ) ) { set_theme_mod( 'hestia_page_editor', $about_html ); $this->sync_content_from_control( $about_html ); } } /** * Create html from contact section add add it to about section content in hestia. * * @param string $contact_content Section content. * @access public * @since 1.1.49 */ public function contact_to_html( $contact_content ) { if ( empty( $contact_content ) ) { return; } $content = $this->update_icons( $contact_content ); if ( ! empty( $content ) ) { $data = json_decode( $content, true ); if ( ! empty( $data ) ) { $contact_html = ''; foreach ( $data as $content_block ) { $contact_html .= '<div class="info info-horizontal">'; if ( ! empty( $content_block['icon_value'] ) ) { $contact_html .= '<div class="icon icon-primary"><i class="fas ' . $content_block['icon_value'] . '"></i></div>'; } if ( ! empty( $content_block['text'] ) ) { $contact_html .= '<div class="description">'; if ( ! empty( $content_block['link'] ) ) { $contact_html .= '<a href="' . esc_url( $content_block['link'] ) . '">'; } $contact_html .= '<h4 class="info-title">' . wp_kses_post( $content_block['text'] ) . '</h4>'; if ( ! empty( $content_block['link'] ) ) { $contact_html .= '</a>'; } $contact_html .= '</div>'; } $contact_html .= '</div>'; } if ( ! empty( $contact_html ) ) { set_theme_mod( 'hestia_contact_content_new', $contact_html ); } } } } /** * Parallax theme has stamp icons and font awesome while hestia has only font awesome. If a stamp icon is used, * replace it with an icon form font awesome * * @param string $json Repeater content in json format. * @access public * @since 1.1.49 * * @return string */ public function update_icons( $json ) { if ( empty( $json ) ) { return ''; } $data = json_decode( $json, true ); if ( ! empty( $data ) ) { foreach ( $data as $item => $values ) { if ( ! empty( $values['icon_value'] ) && strpos( $values['icon_value'], 'icon-' ) !== false ) { $data[ $item ]['icon_value'] = 'fa-circle-o'; } if ( ! empty( $values['choice'] ) ) { if ( strpos( $values['choice'], '_icon' ) !== false ) { $data[ $item ]['choice'] = 'customizer_repeater_icon'; } if ( strpos( $values['choice'], '_image' ) !== false ) { $data[ $item ]['choice'] = 'customizer_repeater_image'; } } $color = get_theme_mod( 'accent_color' ); if ( ! empty( $color ) ) { $data[ $item ]['color'] = $color; } } } return json_encode( $data ); } /** * Update Shop category control. * In A, P, L shop categories are given by name while in Hestia we need its id * * @param string $shop_cat Shop category name. * @access public * @since 1.1.49 */ public function update_shop_category( $shop_cat ) { if ( ! empty( $shop_cat ) ) { $category = get_term_by( 'slug', $shop_cat, 'product_cat' ); if ( ! empty( $category ) && ! empty( $category->term_id ) ) { $cat_id = $category->term_id; if ( ! empty( $cat_id ) ) { set_theme_mod( 'hestia_shop_categories', array( $cat_id ) ); } } } } /** * Add content form features ribbon to html and add it to about section * * @param string $features_ribbon_content Section's content. * @access public * @since 1.1.49 */ public function features_ribbon_to_html( $features_ribbon_content ) { if ( empty( $features_ribbon_content ) ) { return; } $page_editor = get_theme_mod( 'hestia_page_editor' ); $ribbon_html = ( ! empty( $page_editor ) ? $page_editor : '' ); $section_content = json_decode( $features_ribbon_content ); if ( ! empty( $section_content ) ) { $i = 1; $ribbon_html .= '<div class="row text-center" style="padding: 75px 0 55px;">'; foreach ( $section_content as $ribbon_item ) { $choice = ! empty( $ribbon_item->choice ) ? $ribbon_item->choice : 'parallax_icon'; $icon = ! empty( $ribbon_item->icon_value ) ? $ribbon_item->icon_value : ''; $image = ! empty( $ribbon_item->image_url ) ? $ribbon_item->image_url : ''; $title = ! empty( $ribbon_item->title ) ? $ribbon_item->title : ''; $link = ! empty( $ribbon_item->link ) ? $ribbon_item->link : ''; $subtitle = ! empty( $ribbon_item->subtitle ) ? $ribbon_item->subtitle : ''; $ribbon_html .= '<div class="col-md-4"><div class="info hestia-info">'; if ( ! empty( $link ) ) { $ribbon_html .= '<a href="' . esc_url( $link ) . '">'; } if ( strpos( $choice, '_icon' ) !== false && ! empty( $icon ) ) { $ribbon_html .= '<div class="icon" style="color: #008ed6"><i class="' . esc_attr( hestia_display_fa_icon( $icon ) ) . '"></i></div>'; } if ( strpos( $choice, '_image' ) !== false && ! empty( $image ) ) { $ribbon_html .= '<div class="card card-plain" style="max-width: 100px;"><img src="' . esc_url( $image ) . '"/></div>'; } if ( ! empty( $title ) ) { $ribbon_html .= '<h4 class="info-title">' . esc_html( $title ) . '</h4>'; } if ( ! empty( $link ) ) { $ribbon_html .= '</a>'; } if ( ! empty( $subtitle ) ) { $ribbon_html .= '<p>' . wp_kses_post( html_entity_decode( $subtitle ) ) . '</p>'; } $ribbon_html .= '</div></div>'; if ( $i % 3 === 0 ) { $ribbon_html .= '</div>'; $ribbon_html .= '<div class="row">'; } $i++; } $ribbon_html .= '</div>'; } if ( ! empty( $ribbon_html ) ) { set_theme_mod( 'hestia_page_editor', $ribbon_html ); $this->sync_content_from_control( $ribbon_html ); } } /** * Add content form shortcodes section to html and add it to about section * * @param string $shortcodes_content Section's content. * @access public * @since 1.1.49 */ public function shortcodes_section_to_html( $shortcodes_content ) { $execute = get_option( 'should_import_zerif_shortcodes' ); if ( $execute !== false ) { return; } if ( empty( $shortcodes_content ) ) { return; } $page_editor = get_theme_mod( 'hestia_page_editor' ); $shortcode_html = ( ! empty( $page_editor ) ? $page_editor : '' ); $section_content = json_decode( $shortcodes_content ); if ( ! empty( $section_content ) && is_array( $section_content ) ) { foreach ( $section_content as $shortcode_section ) { $title = ( ! empty( $shortcode_section->title ) ? $shortcode_section->title : '' ); $subtitle = ( ! empty( $shortcode_section->subtitle ) ? $shortcode_section->subtitle : '' ); $shortcode = ( ! empty( $shortcode_section->shortcode ) ? $shortcode_section->shortcode : '' ); $shortcode_html .= '<section class="shortcode">'; if ( ! empty( $title ) || ! empty( $subtitle ) ) { $shortcode_html .= '<div class="row"><div class="col-md-8 col-md-offset-2 text-center">'; if ( ! empty( $title ) ) { $shortcode_html .= '<h2 class="hestia-title">' . wp_kses_post( $title ) . '</h2>'; } if ( ! empty( $subtitle ) ) { $shortcode_html .= '<h5 class="description">' . wp_kses_post( $subtitle ) . '</h5>'; } $shortcode_html .= '</div></div>'; } if ( ! empty( $shortcode ) ) { $shortcode_html .= '<div class="shortcode-content"><div class="row"><div class="col-md-12">' . $shortcode . '</div></div></div>'; } $shortcode_html .= '</section>'; if ( ! empty( $shortcode_html ) ) { set_theme_mod( 'hestia_page_editor', $shortcode_html ); $this->sync_content_from_control( $shortcode_html ); } } } update_option( 'should_import_zerif_shortcodes', true ); } /** * Remove sidebars if full width is checked in imported theme. * * @param bool $full_width_option Full width option. * @access public * @since 1.1.49 */ public function update_layout( $full_width_option ) { if ( (bool) $full_width_option === true ) { set_theme_mod( 'hestia_page_sidebar_layout', 'full-width' ); set_theme_mod( 'hestia_blog_sidebar_layout', 'full-width' ); } } /** * Update nav menus. * * @param string $footer_socials_content Footer socials. * @param string $nav_locations Old nav locations. * @access public * @since 1.1.49 */ public function update_menus( $footer_socials_content, $nav_locations ) { $theme_navs = get_theme_mod( 'nav_menu_locations' ); if ( empty( $theme_navs['primary'] ) && ! empty( $nav_locations['primary'] ) ) { $theme_navs['primary'] = $nav_locations['primary']; } if ( empty( $theme_navs['footer'] ) && ! empty( $nav_locations['parallax_footer_menu'] ) ) { $theme_navs['footer'] = $nav_locations['parallax_footer_menu']; } if ( empty( $theme_navs['top-bar-menu'] ) && ! empty( $footer_socials_content ) ) { $menu_name = __( 'Header socials menu', 'hestia' ); $menu_exists = wp_get_nav_menu_object( $menu_name ); if ( ! $menu_exists ) { $menu_id = wp_create_nav_menu( $menu_name ); $icons_array = json_decode( $footer_socials_content ); if ( ! empty( $icons_array ) && is_array( $icons_array ) ) { foreach ( $icons_array as $social ) { if ( ! empty( $social->link ) ) { wp_update_nav_menu_item( $menu_id, 0, array( 'menu-item-title' => __( 'Custom Page', 'hestia' ), 'menu-item-url' => $social->link, 'menu-item-status' => 'publish', ) ); } } } $theme_navs['top-bar-menu'] = $menu_id; set_theme_mod( 'hestia_top_bar_hide', false ); } } set_theme_mod( 'nav_menu_locations', $theme_navs ); } /** * Move widgets from old sidebars to hestia's sidebars * * @access public * @since 1.1.49 */ public function update_sidebars() { $widgets_from_old_theme = wp_get_sidebars_widgets(); $new_widget_array = array(); if ( ! empty( $widgets_from_old_theme['sidebar-1'] ) ) { $new_widget_array['sidebar-1'] = $widgets_from_old_theme['sidebar-1']; } if ( ! empty( $widgets_from_old_theme['footer-area'] ) ) { $new_widget_array['footer-one-widgets'] = $widgets_from_old_theme['footer-area']; } if ( ! empty( $widgets_from_old_theme['footer-area-2'] ) ) { $new_widget_array['footer-two-widgets'] = $widgets_from_old_theme['footer-area-2']; } if ( ! empty( $widgets_from_old_theme['footer-area-3'] ) || ! empty( $widgets_from_old_theme['footer-area-4'] ) ) { $footer_3_content = array(); if ( ! empty( $widgets_from_old_theme['footer-area-3'] ) ) { $footer_3_content = array_merge( $footer_3_content, $widgets_from_old_theme['footer-area-3'] ); } if ( ! empty( $widgets_from_old_theme['footer-area-4'] ) ) { $footer_3_content = array_merge( $footer_3_content, $widgets_from_old_theme['footer-area-4'] ); } $new_widget_array['footer-three-widgets'] = $footer_3_content; } if ( ! isset( $new_widget_array['wp_inactive_widgets'] ) ) { $new_widget_array['wp_inactive_widgets'] = array(); } update_option( 'sidebars_widgets', $new_widget_array ); } /** * Update header layout. * * @param string $header_layout Header layout. * @access public * @since 1.1.49 */ public function update_header_layout( $header_layout ) { if ( $header_layout === 'layout2' ) { set_theme_mod( 'hestia_slider_alignment', 'left' ); } } /** * Moves portfolios posts from Parallax cpt portfolio to Jetpack portfolio cpt. * * @param string $post_type Name of the cpt. * @access public * @since 1.1.51 */ public function update_portfolio( $post_type ) { if ( ! class_exists( 'Jetpack', false ) || ! ( Jetpack::is_module_active( 'custom-content-types' ) ) ) { return; } $post = new WP_Query( array( 'post_type' => $post_type, ) ); if ( $post->have_posts() ) { while ( $post->have_posts() ) { $post->the_post(); $pid = get_the_ID(); /* Create post */ $title = get_the_title(); $content = get_the_content(); $post_id = wp_insert_post( array( 'post_type' => 'jetpack-portfolio', 'post_title' => $title, 'post_content' => $content, 'post_status' => 'publish', ) ); /* Update post thumbnail */ $post_thumbnail_id = get_post_thumbnail_id( $pid ); if ( ! empty( $post_id ) && ! empty( $post_thumbnail_id ) ) { update_post_meta( $post_id, '_thumbnail_id', $post_thumbnail_id ); } } wp_reset_postdata(); } } /** * Sync frontpage content with customizer control * * @param string $value New value. */ protected function sync_content_from_control( $value ) { $frontpage_id = get_option( 'page_on_front' ); if ( ! empty( $frontpage_id ) && ! empty( $value ) ) { if ( ! wp_is_post_revision( $frontpage_id ) ) { // update the post, which calls save_post again $post = array( 'ID' => $frontpage_id, 'post_content' => wp_kses_post( $value ), ); wp_update_post( $post ); } } } }