PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /home/trave494/internetmoney.kerihosting.com/wp-content/themes/jnews/class/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : /home/trave494/internetmoney.kerihosting.com/wp-content/themes/jnews/class/Importer.php |
<?php /** * @author : Jegtheme */ namespace JNews; use JNews\Customizer\CustomizeSetting; use JNews\Widget\EditWidgetArea; class Importer { /** * @var string * * Backup content */ public static $backup_option = 'jnews_import_backup'; /** * @var string * * importer option * content : import_content (news | sport | etc), style : ( news | sport | etc ) */ public static $option = 'jnews_import'; public static $option_content = 'jnews_import_content'; public static $option_style = 'jnews_import_style'; /** * @var string */ public static $default_path = 'data/import/'; /** * @var string * * Path where import content lies */ private $import_path; /** * @var string * * absolute path for import content */ private $import_url; /** * @var string * * demo type */ private $demo_type; /** * @var array * * file that contain array of item */ private $content; /** * @var array * * array of imported image */ private $image = array(); /** * @var array * * array of imported taxonomy */ private $taxonomy = array(); /** * @var array * * array of imported taxonomy image */ private $taxonomy_image = array(); /** * @var array * * array of imported post */ private $post = array(); /** * @var array * * array of imported menu location */ private $menu_location = array(); /** * @var array * * array of widget position */ private $widget_position = array(); /** * @var array * * array of imported menu */ private $menu = array(); /** * @param $demo */ public function __construct( $demo ) { $this->demo_type = $demo; $path = self::$default_path . $demo; $this->import_path = JNEWS_THEME_DIR . $path; $this->import_url = JNEWS_THEME_URL . $path; $this->content = include $this->import_path . '/content.php'; $this->extract_option(); } /** * Temporary support webp. * * @param $mime_types * * @return mixed */ public function support_webp_mime_type( $mime_types ) { $mime_types['webp'] = 'image/webp'; return $mime_types; } public function extract_option() { $option = get_option( self::$option_content ); if ( isset( $option['image'] ) ) { $this->image = $option['image']; } if ( isset( $option['taxonomy'] ) ) { $this->taxonomy = $option['taxonomy']; } if ( isset( $option['post'] ) ) { $this->post = $option['post']; } if ( isset( $option['menu_location'] ) ) { $this->menu_location = $option['menu_location']; } if ( isset( $option['menu'] ) ) { $this->menu = $option['menu']; } } /** * @return array */ public function get_image_index() { return array_keys( $this->content['image'] ); } /** * @return array */ public function get_post_index() { return array_keys( $this->content['post'] ); } /** * @return array */ public function get_plugin_index() { return $this->content['plugin']; } /** * do actual import process * * @param $import_part */ public function do_import( $import_part ) { // no timeout set_time_limit( 0 ); foreach ( $this->content as $part => $content ) { if ( 'image' === $part && 'image' === $import_part ) { $this->do_import_image( $content ); $this->save_option( 'image', $this->image ); } if ( 'taxonomy' === $part && 'taxonomy' === $import_part ) { $this->do_import_taxonomy( $content ); $this->save_option( 'taxonomy', $this->taxonomy ); $this->save_option( 'taxonomy_image', $this->taxonomy_image ); } if ( ! empty( $this->taxonomy_image ) ) { $this->do_import_taxonomy_image( $this->taxonomy_image ); } if ( 'post' === $part && 'post' === $import_part ) { $this->do_import_post( $content ); $this->save_option( 'post', $this->post ); } if ( 'menu_location' === $part && 'menu_location' === $import_part ) { $this->do_import_menu_location( $content ); $this->save_option( 'menu_location', $this->menu_location ); } if ( 'menu' === $part && 'menu' === $import_part ) { $this->do_import_menu( $content ); $this->save_option( 'menu', $this->menu ); } if ( 'widget_position' === $part && 'widget' === $import_part ) { $this->do_import_widget_location( $content ); $this->save_option( 'widget_position', $this->widget_position ); } if ( 'widget' === $part && 'widget' === $import_part ) { $this->do_import_widget( $content ); } if ( 'customizer' === $part && 'customizer' === $import_part ) { $this->do_import_style( $content ); } } } /** * @param $content * * Handle Import Image */ public function do_import_image( $content ) { add_filter( 'upload_mimes', array( $this, 'support_webp_mime_type' ) ); foreach ( $content as $key => $image ) { $result = $this->handle_file( $image ); if ( $result ) { $this->image[ $key ] = $result; } } remove_filter( 'upload_mimes', array( $this, 'support_webp_mime_type' ) ); } /** * @param $url * * @return int|null * * Handle Import file, and return File ID when process complete */ public function handle_file( $url ) { $file_name = basename( $url ); $upload = wp_upload_bits( $file_name, 0, '' ); $this->fetch_file( $url, $upload['file'] ); if ( $upload['file'] ) { $file_loc = $upload['file']; $file_name = basename( $upload['file'] ); $file_type = wp_check_filetype( $file_name ); $attachment = array( 'post_mime_type' => $file_type['type'], 'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $file_name ) ), 'post_content' => '', 'post_status' => 'inherit', ); $attach_id = wp_insert_attachment( $attachment, $file_loc ); $attach_data = wp_generate_attachment_metadata( $attach_id, $file_loc ); wp_update_attachment_metadata( $attach_id, $attach_data ); return $attach_id; } else { return null; } } /** * @param $url * @param $file_path * * @return array|bool * * Download file and save to file system */ public function fetch_file( $url, $file_path ) { $http = new \WP_Http(); $response = $http->get( $url ); if ( is_wp_error( $response ) ) { return false; } $headers = wp_remote_retrieve_headers( $response ); $headers['response'] = wp_remote_retrieve_response_code( $response ); if ( false == $file_path ) { return $headers; } // GET request - write it to the supplied filename WP_Filesystem(); global $wp_filesystem; $wp_filesystem->put_contents( $file_path, wp_remote_retrieve_body( $response ), FS_CHMOD_FILE ); return $headers; } /** * Save content to databases * * @param $type * @param $content */ public function save_option( $type, $content ) { $option_name = self::$option_content; $option = get_option( $option_name ); $option[ $type ] = $content; update_option( $option_name, $option ); } /** * @param $content * * import taxonomy */ public function do_import_taxonomy( $content ) { foreach ( $content as $taxonomy => $items ) { $this->taxonomy[ $taxonomy ] = array(); $this->taxonomy_image[ $taxonomy ] = array(); foreach ( $items as $slug => $tax ) { $currentterm = get_term_by( 'slug', $slug, $taxonomy ); if ( ! $currentterm ) { $tax_args = array( 'slug' => $slug, ); if ( isset( $tax['parent'] ) ) { $tax_args['parent'] = $this->taxonomy[ $taxonomy ][ $tax['parent'] ]; } if ( isset( $tax['description'] ) ) { $tax_args['description'] = $tax['description']; } $term = wp_insert_term( $tax['title'], $taxonomy, $tax_args ); if ( $term instanceof \WP_Error ) { $this->taxonomy[ $taxonomy ][ $slug ] = $term->error_data['term_exists']; } else { $this->taxonomy[ $taxonomy ][ $slug ] = $term['term_id']; } } else { $this->taxonomy[ $taxonomy ][ $slug ] = $currentterm->term_id; } if ( isset( $tax['term_image'] ) ) { $this->taxonomy_image[ $taxonomy ][ $this->taxonomy[ $taxonomy ][ $slug ] ] = $this->text_filter( $tax['term_image'] ); } } } } /** * @param $text * * @return string * * Replace text with defined content */ public function text_filter( $text ) { $result = preg_replace_callback( '/(\{{.*?\}})/', array( $this, 'trim_convert_tag' ), $text ); return $result; } /** * import taxonomy image * * @param $taxonomies_image */ public function do_import_taxonomy_image( $taxonomies_image ) { foreach ( $taxonomies_image as $taxonomy => $values ) { foreach ( $values as $taxonomy_id => $image_id ) { $this->save_taxonomy_image( 'jnews_' . $taxonomy . '_term_image', $taxonomy_id, $this->text_filter( $image_id ), null ); } } } /** * Save taxonomy image to databases * * @param $taxonomy_image_option * @param $taxonomy_id * @param $image_id * @param $value */ public function save_taxonomy_image( $taxonomy_image_option, $taxonomy_id, $image_id, $value ) { $option_name = $taxonomy_image_option; if ( ! isset( $value ) ) { $option = get_option( $option_name ); $option[ $taxonomy_id ] = $image_id; } else { $option = $value; } update_option( $option_name, $option ); } /** * @param $content * * import content */ public function do_import_post( $content ) { $index = 0; foreach ( $content as $slug => $item ) { $this->post[ $slug ] = $this->import_post( $slug, $item, $index ++ ); } } public function import_post( $slug, $item, $index = 0, $builder = 'vc' ) { $check_post = get_page_by_title( $item['title'], null, $item['post_type'] ); $post_date = $this->post_date( $slug ); $post_array = array( 'post_title' => wp_kses( $item['title'], array( 'em' => array(), 'strong' => array(), ) ), 'post_name' => $slug, 'post_type' => $item['post_type'], 'post_status' => 'publish', 'post_date' => $post_date, 'post_date_gmt' => $post_date, ); if ( isset( $item['parent'] ) ) { $post_array['post_parent'] = $this->text_filter( $item['parent'] ); } if ( ( 'footer' === $item['post_type'] || 'page' === $item['post_type'] ) && 'default' != $item['metabox']['_wp_page_template'] ) { if ( 'elementor' == $builder ) { unset( $item['metabox']['_elementor_page_settings'] ); unset( $item['metabox']['_elementor_edit_mode'] ); unset( $item['metabox']['_elementor_data'] ); $post_array['post_content'] = $this->compile_content( $item['content'] ); } else { unset( $item['metabox']['_wpb_shortcodes_custom_css'] ); unset( $item['metabox']['_wpb_post_custom_css'] ); unset( $post_array['post_content'] ); } } else { $post_array['post_content'] = $this->compile_content( $item['content'] ); } // insert or update post if ( ! $check_post ) { $post_id = wp_insert_post( $post_array ); } else { $post_id = $check_post->ID; wp_update_post( $post_array ); } // set post featured image if ( isset( $item['featured_image'] ) ) { set_post_thumbnail( $post_id, $this->image[ $item['featured_image'] ] ); } // set taxonomy if ( isset( $item['taxonomy'] ) && ! empty( $item['taxonomy'] ) ) { foreach ( $item['taxonomy'] as $taxonomy => $taxstring ) { $tax_array = array(); $taxs = explode( ',', $taxstring ); if ( sizeof( $taxs ) > 1 ) { $taxs = array_map( 'trim', explode( ',', $taxstring ) ); foreach ( $taxs as $tax ) { $tax_array[] = $this->taxonomy[ $taxonomy ][ $tax ]; } wp_set_object_terms( $post_id, $tax_array, $taxonomy ); } else { wp_set_object_terms( $post_id, $taxstring, $taxonomy ); } } } // set metabox if ( isset( $item['metabox'] ) && ! empty( $item['metabox'] ) ) { $this->update_metabox( $post_id, $item['metabox'] ); } return $post_id; } /** * @param $slug * * @return string * * post date */ public function post_date( $slug ) { $index = 0; foreach ( $this->content['post'] as $key => $post ) { if ( $slug === $key ) { break; } $index ++; } $now = strtotime( '-1 months' ); $interval = $index * DAY_IN_SECONDS; $post_date = gmdate( 'Y-m-d H:i:s', ( $now - $interval ) ); return $post_date; } /** * @param $file * * @return string * * print file with content */ public function compile_content( $file ) { $text = $this->load_file_content( $this->import_path . '/post/' . $file ); return $this->text_filter( $text ); } /** * @param $filepath * * @return string * * load file in this path, and return text that contain inside the file it self */ public function load_file_content( $filepath ) { ob_start(); include $filepath; $content = ob_get_contents(); ob_end_clean(); return $content; } public function update_metabox( $post_id, $metabox ) { foreach ( $metabox as $metakey => $metavalue ) { $metavalue = $this->recursive_filter_text( $metavalue ); if ( '_elementor_data' === $metakey && ! empty( $metavalue ) ) { $metavalue = $this->compile_content( $metavalue ); } update_post_meta( $post_id, $metakey, $metavalue ); } } public function recursive_filter_text( $contents ) { if ( is_array( $contents ) ) { foreach ( $contents as $key => $value ) { $contents[ $key ] = $this->recursive_filter_text( $value ); } } else { return $this->text_filter( $contents ); } return $contents; } /** * @param $content * * import menu location */ public function do_import_menu_location( $content ) { foreach ( $content as $key => $menu ) { $menu_exists = wp_get_nav_menu_object( $menu['title'] ); if ( $menu_exists ) { wp_delete_nav_menu( $menu['title'] ); } // create menu $this->menu_location[ $key ] = wp_create_nav_menu( $menu['title'] ); // assign menu to location if ( isset( $menu['location'] ) ) { $location = get_theme_mod( 'nav_menu_locations' ); $location[ $menu['location'] ] = $this->menu_location[ $key ]; set_theme_mod( 'nav_menu_locations', $location ); } } } /** * @param $content * * import menu */ public function do_import_menu( $content ) { foreach ( $content as $key => $menu ) { // convert every tag on menu item data foreach ( $menu['menu-item-data'] as $item_key => $data ) { $menu['menu-item-data'][ $item_key ] = $this->text_filter( $data ); } $this->menu[ $key ] = wp_update_nav_menu_item( $this->menu_location[ $menu['location'] ], 0, $menu['menu-item-data'] ); // set metabox if ( isset( $menu['metabox'] ) && ! empty( $menu['metabox'] ) ) { $this->update_metabox( $this->menu[ $key ], $menu['metabox'] ); } } } /** * @param $content * * import location */ public function do_import_widget_location( $content ) { $this->widget_position = $content; $current_location = get_option( EditWidgetArea::$widget_list ); if ( is_array( $current_location ) ) { $new_location = array_merge( $current_location, $content ); } else { $new_location = $content; } foreach ( $new_location as $widget ) { register_sidebar( array( 'id' => sanitize_title( $widget ), 'name' => $widget, 'before_widget' => '<div class="widget %2$s" id="%1$s">', 'before_title' => '', 'after_title' => '', 'after_widget' => '</div>', ) ); } update_option( EditWidgetArea::$widget_list, $new_location ); } /** * @param $content * * import widget */ public function do_import_widget( $content ) { $this->reset_widget_content(); foreach ( $content as $file ) { $import = $this->load_file_content( $this->import_path . '/' . $file ); $import = $this->text_filter( $import ); $import = json_decode( $import ); $this->import_widget( $import ); } } /** * Empty widget content */ public function reset_widget_content() { $sidebarOptions = get_option( 'sidebars_widgets' ); foreach ( $sidebarOptions as $sidebar_name => $sidebar_value ) { if ( is_array( $sidebar_value ) ) { unset( $sidebarOptions[ $sidebar_name ] ); $sidebarOptions[ $sidebar_name ] = array(); } } update_option( 'sidebars_widgets', $sidebarOptions ); } /** * @param $data * * do actual widget import */ public function import_widget( $data ) { // available widget global $wp_registered_sidebars; $available_widgets = $this->available_widgets(); $widget_instances = array(); foreach ( $available_widgets as $widget_data ) { $widget_instances[ $widget_data['id_base'] ] = get_option( 'widget_' . $widget_data['id_base'] ); } 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 ] ) ) { $use_sidebar_id = $sidebar_id; } else { $use_sidebar_id = 'wp_inactive_widgets'; } // 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 ]['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 ); // Does site support this widget? if ( ! $fail && ! isset( $available_widgets[ $id_base ] ) ) { $fail = true; } // Convert multidimensional objects to multidimensional arrays $widget = json_decode( json_encode( $widget ), true ); // convert all tag on widget content foreach ( $widget as $key => $value ) { $widget[ $key ] = $this->text_filter( $value ); } // 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; 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[] = $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 } } } } /** * @return array * * return all available registred widget */ public 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'] ] ) ) { $available_widgets[ $widget['id_base'] ]['id_base'] = $widget['id_base']; $available_widgets[ $widget['id_base'] ]['name'] = $widget['name']; } } return $available_widgets; } /** * @param $content * * import menu */ public function do_import_style( $content ) { foreach ( $content as $file ) { $data = $this->load_file_content( $this->import_path . '/' . $file ); $data = $this->text_filter( $data ); $data = json_decode( $data, true ); // array_walk_recursive($data, array(&$this, 'array_convert')); // execute $this->import_theme_mod( $data ); } } /** * @param $data * * do real style import */ public function import_theme_mod( $data ) { global $wp_customize; if ( isset( $data['options'] ) ) { foreach ( $data['options'] as $option_key => $option_value ) { $option = new CustomizeSetting( $wp_customize, $option_key, array( 'default' => '', 'type' => 'option', 'capability' => 'edit_theme_options', ) ); $option->import( $option_value ); } } // Call the customize_save action. do_action( 'customize_save', $wp_customize ); // Loop through the mods. foreach ( $data['mods'] as $key => $val ) { // Call the customize_save_ dynamic action. do_action( 'customize_save_' . $key, $wp_customize ); // Save the mod. set_theme_mod( $key, $val ); } // Call the customize_save_after action. do_action( 'customize_save_after', $wp_customize ); if ( isset( $data['wp_css'] ) ) { wp_update_custom_css_post( $data['wp_css'], array() ); } } public function do_import_single( $part, $key, $builder ) { if ( 'image' === $part ) { $id = $this->do_import_image_single( $key ); $this->save_single_option( 'image', $key, $id ); } if ( 'post' === $part ) { $id = $this->do_import_post_single( $key, $builder ); $this->save_single_option( 'post', $key, $id ); } } public function do_import_image_single( $key ) { $images = $this->content['image']; return $this->handle_file( $images[ $key ] ); } public function save_single_option( $type, $key, $id ) { $option = get_option( self::$option_content ); $content = isset( $option[ $type ] ) ? $option[ $type ] : array(); $content[ $key ] = $id; $this->save_option( $type, $content ); } public function do_import_post_single( $key, $builder ) { $posts = $this->content['post']; return $this->import_post( $key, $posts[ $key ], 0, $builder ); } /** * do uninstall process */ public function do_uninstall_content() { // hapus timeout set_time_limit( 0 ); $option_content = self::$option_content; $option = get_option( $option_content ); // do all uninstall process $this->reset_widget_content(); if ( isset( $option['menu'] ) ) { $this->uninstall_menu( $option['menu'] ); } if ( isset( $option['menu_location'] ) ) { $this->uninstall_menu_location( $option['menu_location'] ); } if ( isset( $option['widget_position'] ) ) { $this->uninstall_widget_position( $option['widget_position'] ); } if ( isset( $option['post'] ) ) { $this->uninstall_post( $option['post'] ); } if ( isset( $option['taxonomy'] ) ) { $this->uninstall_taxonomy( $option['taxonomy'] ); } if ( isset( $option['taxonomy_image'] ) ) { $this->uninstall_taxonomy_image( $option['taxonomy_image'] ); } if ( isset( $option['image'] ) ) { $this->uninstall_image( $option['image'] ); } // delete option when delete_option( $option_content ); } /** * uninstall menu * * @param $menus */ public function uninstall_menu( $menus ) { foreach ( $menus as $menu ) { wp_delete_post( $menu, true ); } } /** * Uninstall menu location * * @param $menu_location */ public function uninstall_menu_location( $menu_location ) { foreach ( $menu_location as $location ) { wp_delete_term( $location, 'nav_menu' ); } } public function uninstall_widget_position( $widget_position ) { $widget_list = get_option( EditWidgetArea::$widget_list ); foreach ( $widget_list as $key => $widget ) { if ( in_array( $widget, $widget_position ) ) { unset( $widget_list[ $key ] ); } } update_option( EditWidgetArea::$widget_list, $widget_list ); } /** * uninstall post * * @param $posts */ public function uninstall_post( $posts ) { foreach ( $posts as $post ) { wp_delete_post( $post, true ); } } /** * uninstall taxonomy * * @param $taxonomies */ public function uninstall_taxonomy( $taxonomies ) { foreach ( $taxonomies as $taxonomy => $values ) { foreach ( $values as $key => $value ) { wp_delete_term( $value, $taxonomy ); } } } /** * uninstall taxonomy image * * @param $taxonomies_image */ public function uninstall_taxonomy_image( $taxonomies_image ) { foreach ( $taxonomies_image as $taxonomy => $values ) { $option_name = 'jnews_' . $taxonomy . '_term_image'; $taxonomy_image_list = get_option( $option_name ); if ( ! empty( $taxonomy_image_list ) ) { foreach ( $taxonomy_image_list as $taxonomy_id => $image_id ) { if ( array_key_exists( $taxonomy_id, $values ) ) { unset( $taxonomy_image_list[ $taxonomy_id ] ); } } $this->save_taxonomy_image( $option_name, null, null, $taxonomy_image_list ); } if ( empty( $taxonomy_image_list ) ) { delete_option( $option_name ); } } } /** * uninstall image * * @param $images */ public function uninstall_image( $images ) { foreach ( $images as $image ) { wp_delete_attachment( $image, true ); } } public function do_uninstall_single( $key ) { $option_name = self::$option_content; $option = get_option( $option_name ); switch ( $key ) { case 'style': $this->uninstall_style(); break; case 'widget': $this->reset_widget_content(); if ( isset( $option['widget_position'] ) ) { $this->uninstall_widget_position( $option['widget_position'] ); } break; case 'menu': if ( isset( $option['menu'] ) ) { $this->uninstall_menu( $option['menu'] ); } if ( isset( $option['menu_location'] ) ) { $this->uninstall_menu_location( $option['menu_location'] ); } break; case 'post': if ( isset( $option['post'] ) ) { $this->uninstall_post( $option['post'] ); } break; case 'taxonomy': if ( isset( $option['taxonomy'] ) ) { $this->uninstall_taxonomy( $option['taxonomy'] ); } if ( isset( $option['taxonomy_image'] ) ) { $this->uninstall_taxonomy_image( $option['taxonomy_image'] ); } break; case 'image': if ( isset( $option['image'] ) ) { $this->uninstall_image( $option['image'] ); } break; case 'finish': delete_option( $option_name ); delete_option( self::$option ); break; } } /** * uninstall theme mod */ public function uninstall_style() { delete_option( 'theme_mods_jnews' ); } /** * Backup Content */ public function do_backup() { $backup = array(); // backup widget $backup['widget'] = $this->export_widget(); // backup style $backup['customizer'] = $this->export_style(); // save option update_option( self::$backup_option, $backup ); } /** * Export Widget * * @return array */ public function export_widget() { $available_widgets = $this->available_widgets(); $widget_instances = array(); foreach ( $available_widgets as $widget_data ) { $instances = get_option( 'widget_' . $widget_data['id_base'] ); if ( ! empty( $instances ) ) { foreach ( $instances as $instance_id => $instance_data ) { if ( is_numeric( $instance_id ) ) { $unique_instance_id = $widget_data['id_base'] . '-' . $instance_id; $widget_instances[ $unique_instance_id ] = $instance_data; } } } } $sidebars_widgets = get_option( 'sidebars_widgets' ); $sidebars_widget_instances = array(); foreach ( $sidebars_widgets as $sidebar_id => $widget_ids ) { if ( 'wp_inactive_widgets' == $sidebar_id ) { continue; } if ( ! is_array( $widget_ids ) || empty( $widget_ids ) ) { continue; } foreach ( $widget_ids as $widget_id ) { if ( isset( $widget_instances[ $widget_id ] ) ) { $sidebars_widget_instances[ $sidebar_id ][ $widget_id ] = $widget_instances[ $widget_id ]; } } } return $sidebars_widget_instances; } /** * Export Style * * @return array */ public function export_style() { return array( 'template' => get_template(), 'mods' => get_theme_mods(), ); } /** * Restore backup content */ public function do_restore() { $option = get_option( self::$backup_option ); // restore widget $this->import_widget( $option['widget'] ); // restore style $this->import_theme_mod( $option['customizer'] ); } public function save_import_option( $type, $value ) { $option = get_option( self::$option ); $option[ $type ] = $value; update_option( self::$option, $option ); } public function delete_import_option( $type ) { $option = get_option( self::$option ); $option[ $type ] = false; update_option( self::$option, $option ); } public function do_import_style_only() { $content = $this->content['customizer']; $theme_mod = get_theme_mods(); remove_theme_mods(); foreach ( $content as $file ) { $data = $this->load_file_content( $this->import_path . '/' . $file ); $data = $this->text_filter( $data ); $data = json_decode( $data, true ); $data['mods'] = $this->alter_mod_default( $theme_mod, $data['mods'] ); unset( $data['options'] ); $this->import_theme_mod( $data ); } } public function alter_mod_default( $current, $data ) { $overwrites = array( 'nav_menu_locations', 'jnews_social_icon', 'jnews_header_logo', 'jnews_header_logo_retina', 'jnews_sticky_menu_logo', 'jnews_sticky_menu_logo_retina', 'jnews_mobile_logo', 'jnews_mobile_logo_retina', 'jnews_background_image', 'jnews_social_icon', ); foreach ( $overwrites as $option ) { $data[ $option ] = isset( $current[ $option ] ) ? $current[ $option ] : null; } return $data; } /** * @param $value * * convert every word to converted tag */ public function array_convert( &$value ) { $value = $this->text_filter( $value ); } /** * @param $content * * @return null|string */ public function trim_convert_tag( $content ) { return $this->convert_tag( trim( $content[1], '{}' ) ); } /** * @param $string * * @return null|string * * convert every string with tag to corespondent tag */ public function convert_tag( $string ) { $tag = explode( ':', $string ); if ( sizeof( $tag ) > 1 ) { switch ( $tag[0] ) { case 'image': $result = $this->image_tag( $tag ); break; case 'category': $result = $this->category_tag( $tag ); break; case 'taxonomy': $result = $this->taxonomy_tag( $tag ); break; case 'post': $result = $this->post_tag( $tag ); break; case 'url': $result = $this->url_tag( $tag ); break; case 'menu': $result = $this->menu_tag( $tag ); break; case 'menu_location': $result = $this->menu_location_tag( $tag ); break; default: $result = $string; break; } } else { $result = $string; } return apply_filters( 'jnews_convert_tag', $result, $tag ); } /** * @param $tag * * @return null * * convert image tag * ex: * 1. get ID of image : image:news01:id * 2. get URL of image by size : image:news01:url:thumbnail * 3. Retrieve the URL for an attachment : image:attach:src */ public function image_tag( $tag ) { if ( isset( $this->image[ $tag[1] ] ) ) { $image_id = $this->image[ $tag[1] ]; $to = $tag[2]; if ( 'id' === $to ) { return $image_id; } elseif ( 'url' === $to ) { $result = wp_get_attachment_image_src( $image_id, $tag[3] ); return $result[0]; } else { $result = wp_get_attachment_url( $image_id ); return $result; } } return null; } /** * @param $tag * * @return null|string * * convert category tag * ex: * 1. get ID of category : category:first-category-slug:id * 2. get URL of category : category:first-category-slug:url */ public function category_tag( $tag ) { if ( isset( $this->taxonomy['category'] ) && isset( $this->taxonomy['category'][ $tag[1] ] ) ) { $category_id = $this->taxonomy['category'][ $tag[1] ]; $to = $tag[2]; if ( 'id' === $to ) { return $category_id; } elseif ( 'url' === $to ) { return get_category_link( $this->taxonomy['category'][ $tag[1] ] ); } } return null; } /** * @param $tag * * @return null|string * * convert taxonomy tag * ex: * 1. get ID of taxonomy : taxonomy:post_tag:first-tag:id * 2. get URL of taxonomy : taxonomy:post_tag:first-tag:url */ public function taxonomy_tag( $tag ) { $taxonomy = $tag[1]; if ( isset( $this->taxonomy[ $taxonomy ] ) && $this->taxonomy[ $taxonomy ][ $tag[2] ] ) { $taxonomy_id = $this->taxonomy[ $taxonomy ][ $tag[2] ]; $to = $tag[3]; if ( 'id' === $to ) { return $taxonomy_id; } elseif ( 'url' === $to ) { return get_term_link( $taxonomy_id . $taxonomy ); } } return null; } /** * @param $tag * * @return null|string * * convert post tag * ex: * 1. get ID of post : post:first-content-slug:id * 2. get URL of post : post:first-content-slug:url */ public function post_tag( $tag ) { if ( isset( $this->post[ $tag[1] ] ) ) { $post_id = $this->post[ $tag[1] ]; $to = $tag[2]; if ( 'id' === $to ) { return $post_id; } elseif ( 'url' === $to ) { return get_permalink( $post_id ); } } return null; } /** * @param $tag * * convert url tag * ex: * 1. get home url : url:home * 2. get specific endpoint : url:home:favorite * * @return string|void */ public function url_tag( $tag ) { if ( isset( $tag[1] ) ) { $content = $tag[1]; $to = isset( $tag[2] ) ? $tag[2] : ''; switch ( $content ) { case 'home': if ( ! empty( $to ) ) { return home_url( '/' . $to, 'relative' ); } else { return home_url( '/', 'relative' ); } break; } } return null; } /** * @param $tag * * @return null|string * * convert menu tag * ex: * 1. get ID of post : menu:first-menu:id */ public function menu_tag( $tag ) { if ( isset( $this->menu[ $tag[1] ] ) ) { $menu_id = $this->menu[ $tag[1] ]; $to = $tag[2]; if ( 'id' === $to ) { return $menu_id; } } return null; } /** * @param $tag * * @return null|string * * convert menu location tag * ex: * 1. get ID of post : menu_location:main-navigation:id */ public function menu_location_tag( $tag ) { if ( isset( $this->menu_location[ $tag[1] ] ) ) { $menu_id = $this->menu_location[ $tag[1] ]; $to = $tag[2]; if ( 'id' === $to ) { return $menu_id; } } return null; } }