PATH:
home
/
letacommog
/
camarsac
/
wp-content
/
plugins
/
jet-engine
/
includes
/
dashboard
<?php // If this file is called directly, abort. if ( ! defined( 'WPINC' ) ) { die; } if ( ! class_exists( 'Jet_Engine_Skins_Presets' ) ) { /** * Define Jet_Engine_Skins_Presets class */ class Jet_Engine_Skins_Presets { private $data = array(); private $log = array(); /** * Process skin export */ public function __construct() { add_action( 'admin_footer', array( $this, 'print_templates' ) ); add_action( 'jet-engine/dashboard/assets', array( $this, 'presets_config' ) ); add_action( 'wp_ajax_jet_engine_import_preset', array( $this, 'import_preset' ) ); } /** * Process preset importing * * @return [type] [description] */ public function import_preset() { if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error(); } $preset = $_REQUEST['preset'] ? esc_attr( $_REQUEST['preset'] ) : null; if ( ! $preset ) { wp_send_json_error(); } $this->data = $this->get_remote_preset( $preset ); if ( ! $this->data ) { wp_send_json_error(); } $process_stack = array( 'forms', 'listings', 'pages', 'templates', ); foreach ( $process_stack as $stack_group ) { if ( empty( $this->data[ $stack_group ] ) ) { continue; } else { $this->import_items( $this->data[ $stack_group ], $stack_group ); } } if ( ! empty( $this->data['options_to_export'] ) ) { foreach ( $this->data['options_to_export'] as $option_key => $option_value ) { update_option( $option_key, $option_value, false ); } } if ( ! empty( $this->data['meta_boxes'] ) ) { foreach ( $this->data['meta_boxes'] as $meta_box ) { if ( isset( $meta_box['id'] ) ) { unset( $meta_box['id'] ); } jet_engine()->meta_boxes->data->update_item_in_db( $meta_box ); if ( empty( $this->log['meta_boxes'] ) ) { $this->log['meta_boxes'] = array( 'items' => array() ); } $this->log['meta_boxes']['items'][] = $meta_box['args']['name']; } if ( ! empty( $this->log['meta_boxes'] ) ) { $this->log['meta_boxes']['label'] = __( 'Meta Boxes', 'jet-engine' ); } } $handler = $this->get_preset_handler( $preset ); if ( $handler ) { call_user_func( $handler ); } wp_send_json_success(); } /** * Import items * * @param array $items [description] * @param string $group [description] * @return [type] [description] */ public function import_items( $items = array(), $group = 'global' ) { if ( empty( $items ) ) { return; } if ( empty( $this->log[ $group ] ) ) { $this->log[ $group ] = array(); } foreach ( $items as $item ) { $item['post_status'] = 'publish'; $content = ! empty( $item['meta_input']['_elementor_data'] ) ? $item['meta_input']['_elementor_data'] : ''; $old_post_id = isset( $item['ID'] ) ? $item['ID'] : false; if ( $old_post_id ) { unset( $item['ID'] ); } if ( ! empty( $item['meta_input']['_elementor_page_settings']['jet_popup_use_ajax'] ) ) { $item['meta_input']['_elementor_page_settings']['jet_popup_use_ajax'] = ''; } $form_data = false; $preset = false; $notifications_data = false; if ( ! empty( $item['meta_input']['_form_data'] ) ) { $form_data = wp_slash( $item['meta_input']['_form_data'] ); unset( $item['meta_input']['_form_data'] ); } if ( ! empty( $item['meta_input']['_preset'] ) ) { $preset = $item['meta_input']['_preset']; unset( $item['meta_input']['_preset'] ); } if ( ! empty( $item['meta_input']['_notifications_data'] ) ) { $notifications_data = wp_slash( $item['meta_input']['_notifications_data'] ); unset( $item['meta_input']['_notifications_data'] ); } $new_post_id = wp_insert_post( $item ); if ( ! $new_post_id ) { continue; } if ( $form_data ) { update_post_meta( $new_post_id, '_form_data', $form_data ); } if ( $preset ) { update_post_meta( $new_post_id, '_preset', $preset ); } if ( $notifications_data ) { update_post_meta( $new_post_id, '_notifications_data', $notifications_data ); } $this->log[ $group ][ $old_post_id ] = $new_post_id; if ( $content && class_exists( '\Elementor\Plugin' ) ) { $content = json_decode( $content, true ); $content = $this->process_import_content( $content ); $post_id = $new_post_id; $document = \Elementor\Plugin::$instance->documents->get( $post_id ); if ( $document ) { $content = $document->get_elements_raw_data( $content, true ); } update_post_meta( $post_id, '_elementor_data', wp_slash( json_encode( $content ) ) ); } } } /** * Process content for export/import. * * @param array $content A set of elements. * * @return mixed Processed content data. */ protected function process_import_content( $content ) { return \Elementor\Plugin::$instance->db->iterate_data( $content, function( $element_data ) { $element = \Elementor\Plugin::$instance->elements_manager->create_element_instance( $element_data ); // If the widget/element isn't exist, like a plugin that creates a widget but deactivated if ( ! $element ) { return null; } return $this->process_element_import_content( $element ); } ); } /** * Process single element content for export/import. * * @param Controls_Stack $element * * @return array Processed element data. */ protected function process_element_import_content( $element ) { $element_data = $element->get_data(); if ( method_exists( $element, 'on_import' ) ) { // TODO: Use the internal element data without parameters. $element_data = $element->on_import( $element_data ); } foreach ( $element->get_controls() as $control ) { $control_class = \Elementor\Plugin::$instance->controls_manager->get_control( $control['type'] ); // If the control isn't exist, like a plugin that creates the control but deactivated. if ( ! $control_class ) { return $element_data; } if ( method_exists( $control_class, 'on_import' ) ) { $element_data['settings'][ $control['name'] ] = $control_class->on_import( $element->get_settings( $control['name'] ), $control ); } } return $element_data; } public function remap_forms_ids( $elementor_data ) { return preg_replace_callback( '/(_form_id)[\'\"]:[\'\"](\d+)/', function( $matches ) { if ( empty( $matches[2] ) ) { return $matches[0]; } $log = ! empty( $this->log['forms'] ) ? $this->log['forms'] : array(); $new_id = ! empty( $log[ $matches[2] ] ) ? $log[ $matches[2] ] : false; if ( ! $new_id ) { return $matches[0]; } else { return str_replace( $matches[2], $new_id, $matches[0] ); } }, $elementor_data ); } public function remap_listing_ids( $elementor_data ) { return preg_replace_callback( '/(lisitng_id)[\'\"]:[\'\"](\d+)/', function( $matches ) { if ( empty( $matches[2] ) ) { return $matches[0]; } $log = ! empty( $this->log['listings'] ) ? $this->log['listings'] : array(); $new_id = ! empty( $log[ $matches[2] ] ) ? $log[ $matches[2] ] : false; if ( ! $new_id ) { return $matches[0]; } else { return str_replace( $matches[2], $new_id, $matches[0] ); } }, $elementor_data ); } public function profile_user_preset() { $forms = ! empty( $this->log['forms'] ) ? $this->log['forms'] : array(); $templates = ! empty( $this->log['templates'] ) ? $this->log['templates'] : array(); $subpage_id = null; foreach ( $templates as $old_id => $new_id ) { $elementor_data = get_post_meta( $new_id, '_elementor_data', true ); if ( ! empty( $elementor_data ) ) { if ( ! empty( $forms ) ) { $elementor_data = $this->remap_forms_ids( $elementor_data ); } update_post_meta( $new_id, '_elementor_data', wp_slash( $elementor_data ) ); } $subpage_id = $new_id; } $options = get_option( 'profile-builder' ); $new_subpage = array( 'title' => __( 'User Settings', 'jet-engine' ), 'slug' => 'user-settings', 'template' => array( $subpage_id ), 'collapsed' => true, ); if ( ! empty( $options ) ) { if ( ! empty( $options['account_page_structure'] ) ) { $options['account_page_structure'][] = $new_subpage; } else { $options['account_page_structure'] = array( $new_subpage ); } } else { $options = array( 'account_page_structure' => array( $new_subpage ), ); } update_option( 'profile-builder', $options, false ); flush_rewrite_rules( true ); } /** * Handle profile related presets import * @return [type] [description] */ public function profile_preset() { $forms = ! empty( $this->log['forms'] ) ? $this->log['forms'] : array(); $templates = ! empty( $this->log['templates'] ) ? $this->log['templates'] : array(); $listings = ! empty( $this->log['listings'] ) ? $this->log['listings'] : array(); $pages = ! empty( $this->log['pages'] ) ? $this->log['pages'] : array(); foreach ( $templates as $old_id => $new_id ) { $elementor_data = get_post_meta( $new_id, '_elementor_data', true ); if ( ! empty( $elementor_data ) ) { if ( ! empty( $forms ) ) { $elementor_data = $this->remap_forms_ids( $elementor_data ); } if ( ! empty( $listings ) ) { $elementor_data = $this->remap_listing_ids( $elementor_data ); } update_post_meta( $new_id, '_elementor_data', wp_slash( $elementor_data ) ); } } foreach ( $forms as $old_id => $new_id ) { $notifications_data = get_post_meta( $new_id, '_notifications_data', true ); $notifications_data = wp_unslash( $notifications_data ); if ( ! empty( $pages ) ) { $notifications_data = preg_replace_callback( '/(redirect_page)[\'\"]:[\'\"](\d+)/', function( $matches ) { if ( empty( $matches[2] ) ) { return $matches[0]; } $log = ! empty( $this->log['pages'] ) ? $this->log['pages'] : array(); $new_id = ! empty( $log[ $matches[2] ] ) ? $log[ $matches[2] ] : false; if ( ! $new_id ) { return $matches[0]; } else { return str_replace( $matches[2], $new_id, $matches[0] ); } }, $notifications_data ); } update_post_meta( $new_id, '_notifications_data', wp_slash( $notifications_data ) ); } $options = get_option( 'profile-builder' ); $pages_keys = array( 'account_page', 'users_page', 'single_user_page' ); $templates_keys = array( 'account_page_structure', 'user_page_structure', ); if ( ! empty( $options ) ) { foreach ( $options as $option => $value ) { if ( in_array( $option, $pages_keys ) && ! empty( $value ) ) { if ( isset( $pages[ $value ] ) ) { $options[ $option ] = $pages[ $value ]; } } elseif ( in_array( $option, $templates_keys ) ) { if ( is_array( $value ) ) { $new_value = array(); foreach ( $value as $subpage ) { if ( ! empty( $subpage['template'] ) ) { $tid = $subpage['template'][0]; $subpage['template'] = ! empty( $templates[ $tid ] ) ? array( $templates[ $tid ] ) : $subpage['template']; } $new_value[] = $subpage; } $options[ $option ] = $new_value; } } } update_option( 'profile-builder', $options, false ); } flush_rewrite_rules( true ); } /** * Returns remote preset content * * @return [type] [description] */ public function get_remote_preset( $preset ) { $presets = $this->get_presets(); $preset_data = ! empty( $presets[ $preset ] ) ? $presets[ $preset ] : null; if ( ! $preset_data ) { return; } $url = $preset_data['url']; if ( ! $url ) { return false; } $response = wp_remote_get( $url, array( 'timeout' => 60, 'sslverify' => false ) ); if ( is_wp_error( $response ) ) { return false; } $body = wp_remote_retrieve_body( $response ); return json_decode( $body, true ); } /** * Returns remote preset content * * @return [type] [description] */ public function get_preset_handler( $preset ) { $presets = $this->get_presets(); $preset_data = ! empty( $presets[ $preset ] ) ? $presets[ $preset ] : null; if ( ! $preset_data ) { return false; } $handler = ! empty( $preset_data['handler'] ) ? $preset_data['handler'] : false; if ( ! $handler || ! is_callable( $handler ) ) { return false; } return $handler; } /** * Register presets configuration * * @return [type] [description] */ public function presets_config() { wp_localize_script( 'jet-engine-dashboard-skins', 'JetEnginePresetsConfig', $this->get_presets( true ) ); } /** * Get presets * * @return [type] [description] */ public function get_presets( $for_js = false ) { return apply_filters( 'jet-engine/dashborad/presets', array( 'profile-posts-edit' => array( 'url' => 'https://account.crocoblock.com/free-download/presets/profile-posts-edit.json', 'title' => __( 'User profile with editable content', 'jet-engine' ), 'desc' => __( 'Configure user profile module to allow registered users publish and edit posts', 'jet engine' ), 'handler' => ( ! $for_js ) ? array( $this, 'profile_preset' ) : '', 'deps' => array( 'booking-forms', 'profile-builder' ), 'success_msg' => sprintf( __( '<p>This preset is set Account page and created 3 subpages for account page:</p><ol style="margin-top: -8px;"><li>Main (with posts created by current user),</li><li>Edit post</li><li>New post.</li></ol><p>To finalize the process you need to go to <a href="%1$s">Permalink Settings</a> and re-save permalinks structure (just click on "Save Changes" button).', 'jet-engine' ), admin_url( 'options-permalink.php' ) ), ), 'profile-user-edit' => array( 'url' => 'https://account.crocoblock.com/free-download/presets/profile-user-edit.json', 'title' => __( 'Editable user settings page for user profile', 'jet-engine' ), 'desc' => __( 'Adds user settings subpage to profile builder with edit user form', 'jet engine' ), 'handler' => ( ! $for_js ) ? array( $this, 'profile_user_preset' ) : '', 'deps' => array( 'booking-forms', 'profile-builder' ), 'success_msg' => __( '<p>This preset added User Settings subpage for account page and Edit User form with apropriate notification.', 'jet-engine' ), ), ) ); } /** * Export component template * * @return void */ public function print_templates() { ob_start(); include jet_engine()->get_template( 'admin/pages/dashboard/presets.php' ); $content = ob_get_clean(); printf( '<script type="text/x-template" id="jet_engine_skins_presets">%s</script>', $content ); } } }
[+]
..
[-] skins-export.php
[edit]
[-] skins-import.php
[edit]
[-] manager.php
[edit]
[-] presets.php
[edit]