Current Path : /var/test/www/ljmti/wp-content/plugins/masterslider/admin/includes/classes/ |
Current File : /var/test/www/ljmti/wp-content/plugins/masterslider/admin/includes/classes/class-msp-importer.php |
<?php /** * Master Slider Import/Export Class. * * @package MasterSlider * @author averta [averta.net] * @license LICENSE.txt * @link http://masterslider.com * @copyright Copyright © 2014 averta */ // no direct access allowed if ( ! defined('ABSPATH') ) { die(); } /** * Master Slider Import/Export Class. * * @since 1.2.0 */ class MSP_Importer { var $origin_upload_baseurl = ''; var $upload_baseurl = ''; var $upload_basedir = ''; var $image_import_queue = array(); var $import_medias = true; var $last_new_slider_id = null; function __construct() { add_action( 'admin_menu', array( $this, 'admin_init' ) ); } public function admin_init() { $upload = wp_upload_dir(); $this->upload_baseurl = $upload['baseurl']; $this->upload_basedir = $upload['basedir']; $this->process_export_request(); register_importer( 'masterslider-importer', __( 'Master Slider', MSWP_TEXT_DOMAIN ), __( 'Import sliders and images from a Master Slider export file.', MSWP_TEXT_DOMAIN ), array( $this, 'render_importer_page' ) ); } public function render_importer_page() { $this->header(); $this->process_import_request(); $this->footer(); } /** * Display import page title */ function header() { echo '<div class="wrap">'; echo '<h2>' . __( 'Importing Master Slider', 'wordpress-importer' ) . '</h2><br />'; } /** * Close div.wrap */ function footer() { echo '</div>'; ?> <script> function mspGetParameterByName(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); } jQuery(window).load(function(){ if (typeof redirect_link !== 'undefined' && redirect_link !== '' ) { window.location.replace( redirect_link ); } else { console.log('redirect link not found'); } }); </script> <?php } /** * Decide what the maximum file size for downloaded attachments is. * Default is 0 (unlimited), can be filtered via masterslider_import_attachment_size_limit * * @return int Maximum attachment file size to import */ function max_attachment_size() { return apply_filters( 'masterslider_import_attachment_size_limit', 0 ); } // if it's relative url, get absolute origin url function get_absolute_media_url( $url ){ if( $this->is_absolute_url( $url ) || $this->contains_origin_upload_dir( $url ) ) return $url; return $this->origin_upload_baseurl . $url; } /** * Is absolute url? * @param string $url the url * @return boolean true if the url is absolue and false otherwise */ public function is_absolute_url( $url ){ return preg_match( "~^(?:f|ht)tps?://~i", $url ); } /** * Wheather url contains origin_upload_baseurl or not * @param string $url the url * @return bool TRUE, if url contains origin_upload_baseurl */ public function contains_origin_upload_dir( $url ){ return strpos( $url, $this->origin_upload_baseurl ) !== false; } /** * Process incoming requests for importing sliders * @return void */ public function process_import_request(){ $step = isset( $_REQUEST['step'] ) && ! empty( $_REQUEST['step'] ) ? (int)$_REQUEST['step'] : 0; if( 2 > $step ) { $bytes = apply_filters( 'masterslider_import_upload_size_limit', wp_max_upload_size() ); $size = size_format( $bytes ); ?> <div class="msp-import-wrapper"> <form action="<?php echo admin_url( 'admin.php?import=masterslider-importer&step=2' ); ?>" method="post" enctype="multipart/form-data" class="msp-import-form msp-dialog-inner-section"> <span class="msp-dialog-section-desc"><?php _e( 'To import sliders select Masterslider Export file that you downloaded before then click import button.', MSWP_TEXT_DOMAIN ) ?></span> <br /> <hr /> <br /> <fieldset> <?php wp_nonce_field('import-msp-sliders'); ?> <input type="hidden" name="msp-import" value="1"> <input type="hidden" name="max_file_size" value="<?php echo $bytes; ?>" /> <input type="file" name="msp-import-file" class="msp-select-file"> <small><?php printf( __( 'Maximum size: %s', MSWP_TEXT_DOMAIN ), $size ); ?></small><br /><br /><br /> <input type="submit" class="button" value="<?php esc_attr_e( 'Upload file and import', MSWP_TEXT_DOMAIN ); ?>" /> </fieldset> </form> </div> <?php } // Import sliders from export file if( isset( $_POST['msp-import'] ) ) { if( current_user_can('export_masterslider') ) { if( check_admin_referer('import-msp-sliders') ) { $step = isset( $_REQUEST['step'] ) && ! empty( $_REQUEST['step'] ) ? (int)$_REQUEST['step'] : 0; if( 2 == $step ){ if ( $_FILES['msp-import-file']['error'] == UPLOAD_ERR_OK && is_uploaded_file( $_FILES['msp-import-file']['tmp_name'] ) ) { // get import file content $import_data = file_get_contents( $_FILES['msp-import-file']['tmp_name'] ); $this->import_data( $import_data ); } } } } else { add_action( 'admin_notices', array( $this, 'import_export_notice' ) ); } } // Import slider by starter id if( isset( $_REQUEST['starter_id'] ) && ! empty( $_REQUEST['starter_id'] ) ) { if( current_user_can('export_masterslider') || apply_filters( 'masterslider_user_can_import_starter_content', 0 ) ) { if ( $starter_field = msp_get_slider_starter_field( $_REQUEST['starter_id'] ) ) { $import_data = $starter_field['importdata']; // Retrieve data of current slider remotely if data is not embeded if( empty( $import_data ) ){ global $wp_version; $slider_uid = ! empty( $starter_field['uid'] ) ? $starter_field['uid'] : ''; if( ! empty( $slider_uid ) ){ $args = array( 'user-agent' => 'WordPress/'. $wp_version.'; '. get_site_url(), 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 10 ), 'body' => array( 'slider_uid' => $slider_uid ) ); $request = wp_remote_get( 'http://api.averta.net/products/masterslider/samples/', $args ); if ( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) !== 200 ) { _e( 'Cannot fetch slider data ..', MSWP_TEXT_DOMAIN ); $import_data = ''; } else { $import_data = $request['body']; } } } if ( ! empty( $import_data ) ) { $this->import_data( $import_data ); printf( "<script> var redirect_link = '%s';</script>", admin_url( 'admin.php?page='.MSWP_SLUG.'&action=edit&slider_id='.$this->last_new_slider_id. '&fr' ) ); } else { _e( 'Import data not found ..', MSWP_TEXT_DOMAIN ); } } else { _e( 'Starter ID is not valid.', MSWP_TEXT_DOMAIN ); } } else { add_action( 'admin_notices', array( $this, 'import_export_notice' ) ); } } // Import sliders from export file if( isset( $_POST['import-theme-sliders'] ) ) { if( current_user_can('export_masterslider') ) { if( check_admin_referer('msp-im-theme-sliders') ) { $step = isset( $_REQUEST['step'] ) && ! empty( $_REQUEST['step'] ) ? (int)$_REQUEST['step'] : 0; if( 2 == $step ){ if( $import_data = msp_get_theme_sliders_data() ){ $allowed_slider_ids = isset( $_POST['ms_import_theme_slider_ids'] ) ? $_POST['ms_import_theme_slider_ids'] : null; $this->import_data( $import_data, $allowed_slider_ids ); } } } } else { _e( 'You do not have enough permission to import sliders', MSWP_TEXT_DOMAIN ); } } } public function process_export_request(){ // Export sliders if( isset( $_POST['msp-export'] ) ) { if( current_user_can('export_masterslider') ) { if( check_admin_referer('export-msp-sliders') ) { $sliders = isset( $_POST['msp-export-sliders'] ) ? $_POST['msp-export-sliders'] : ''; $preset_styles = isset( $_POST['msp-export-preset-styles'] ) ? $_POST['msp-export-preset-styles'] : ''; $preset_effects = isset( $_POST['msp-export-preset-effects'] ) ? $_POST['msp-export-preset-effects'] : ''; $buttons_style = isset( $_POST['msp-export-buttons-style'] ) ? $_POST['msp-export-buttons-style'] : ''; $args = array(); if( $preset_styles ) $args[] = 'preset_styles'; if( $preset_effects ) $args[] = 'preset_effects'; if( $buttons_style ) $args[] = 'buttons_style'; if( ! empty( $sliders ) || ! empty( $args ) ) { $this->export_slider_data_in_file( $sliders, $args ); } } }else { add_action( 'admin_notices', array( $this, 'import_export_notice' ) ); } } } /** * Add admin notice if access to import/export is denied * @return void */ public function import_export_notice(){ printf( '<div class="error" style="display:block;" ><p>%s</p></div>', apply_filters( 'masterslider_import_export_access_denied_message', __( "Sorry, You don't have enough permission to import/export sliders.", MSWP_TEXT_DOMAIN ) ) ); } /** * Get slider export data * * @param int|array $slider_id the slider id(s) * @param array The other options that should be included in export data ( preset_styles, preset_effects ) * @param bool $base64 encode output data to base64 or not * @return string the slider export data */ function get_slider_export_data( $slider_ids = array() , $args = null, $base64 = true ){ $slider_ids = (array) $slider_ids; $args = (array) $args; // stores export data $export_data = array(); $export_data['sliders_data'] = array(); // loop through selected sliders and store in sliders_data foreach ( $slider_ids as $slider_id ) { if( is_numeric( $slider_id ) ) { global $mspdb; $slider_title = $mspdb->get_slider_field_val( $slider_id, 'title' ); $slider_alias = $mspdb->get_slider_field_val( $slider_id, 'alias' ); $slider_params = $mspdb->get_slider_field_val( $slider_id, 'params' ); $slider_type = $mspdb->get_slider_field_val( $slider_id, 'type' ); $slides_num = $mspdb->get_slider_field_val( $slider_id, 'slides_num'); $export_data['sliders_data'][ $slider_id ] = array( 'title' => $slider_title, 'alias' => $slider_alias, 'params' => $slider_params, 'type' => $slider_type, 'slides_num' => $slides_num ); } } // add origin_uploads_url to export data - this helps us to fetch images from origin domian // if you need to bundle sample sliders in your theme you can change the origin_uploads_url // by default origin_uploads_url is the uploads baseurl on domain you exported the sliders from (e.g www.domain.com/wp-content/uploads) // when you decide to import data to new domain, importer will use the origin_uploads_url to fetch images from. // you can change origin_uploads_url by using 'masterslider_export_origin_uploads_url' filter // if you change origin_uploads_url to something else, importer will import slider images // from your custom origin_uploads_url instead of default origin_uploads_url $custom_export_origin_uploads_url = apply_filters( 'masterslider_export_origin_uploads_url', null ); // if filter passed empty string, origin_uploads_url will be plugins/masterslider/samples folder if( '' === $custom_export_origin_uploads_url ) { $export_data['origin_uploads_url'] = '{{masterslider}}/samples'; // if filter passed a string with our special tags : } elseif( false !== strpos( $custom_export_origin_uploads_url, '{{masterslider}}' ) || false !== strpos( $custom_export_origin_uploads_url, '{{theme_dir}}' ) || false !== strpos( $custom_export_origin_uploads_url, '{{child_theme_dir}}' ) ) { $export_data['origin_uploads_url'] = $custom_export_origin_uploads_url; // if filter value not changed use upload baseurl for current domain } else { $uploads = wp_upload_dir(); $export_data['origin_uploads_url'] = $uploads['baseurl']; } $export_data['preset_styles'] = in_array( 'preset_styles' , $args ) ? msp_get_option( 'preset_style' , '' ) : ''; $export_data['preset_effects'] = in_array( 'preset_effects', $args ) ? msp_get_option( 'preset_effect' , '' ) : ''; $export_data['buttons_style'] = in_array( 'buttons_style' , $args ) ? msp_get_option( 'buttons_style' , '' ) : ''; if ( $base64 ){ $export_json_data = json_encode( $export_data ); $export_b64_data = base64_encode( $export_json_data ); return $export_b64_data; } return $export_data; } /** * Print slider export data * * @param int|array $slider_id the slider id(s) * @param array The other options that should be included in export data ( preset_styles, preset_effects ) * @param bool $base64 encode output data to base64 or not * @return void */ function the_slider_export_data ( $slider_id, $args = null, $base64 = true ){ $export = $this->get_slider_export_data( $slider_id, $args, $base64 ); } /** * Export slider(s) data to file * * @param int|array $slider_id slider(s) ID to export * @param array The other options that should be included in export data ( preset_style, preset_effect ) * @return void */ function export_slider_data_in_file( $slider_id, $args = null ){ $blogname = str_replace( " ", "", get_option('blogname') ); $date = date("m-d-Y"); $export_file_name = $blogname."-".MSWP_SLUG."-".$date; $export_b64_data = $this->get_slider_export_data( $slider_id, $args ); header( "Content-Type: application/force-download; charset=" . get_option( 'blog_charset') ); header( "Content-Disposition: attachment; filename=$export_file_name.json" ); exit( $export_b64_data ); } /** * Check and decode exported_data * * @param string $exported_data the exported string * @return bool/array false if exported_data is invalid or decoded exported_data in array if it's valid */ function decode_import_data( $exported_data ){ if( empty( $exported_data ) ) return false; $exported_b64_decoded = msp_maybe_base64_decode( $exported_data ); $export_array = json_decode( $exported_b64_decoded, true ); // validate export data if ( ! is_array( $export_array ) ){ echo __( 'Import data is not valid.', MSWP_TEXT_DOMAIN ) . "<br />"; return false; } return $export_array; } /** * Import sliders and options by previously exported data * * @param string $exported_data the exported string * @param array $allowed_slider_ids just import sliders that are in this list * @param array $skip_slider_ids don't import sliders that are in this list * @return bool true on success and false on failure */ function import_data( $exported_data, $allowed_slider_ids = null, $skip_slider_ids = array() ){ $export_array = $this->decode_import_data( $exported_data ); if( false === $export_array ) return false; // if you need to change "origin_upload_baseurl" while importing content, just define MSWP_IMPORT_FETCH_DIR const if( defined( 'MSWP_IMPORT_FETCH_DIR' ) ){ $this->origin_upload_baseurl = MSWP_IMPORT_FETCH_DIR; // set origin_upload_baseurl } elseif( isset( $export_array['origin_uploads_url'] ) && ! empty( $export_array['origin_uploads_url'] ) ) { $this->origin_upload_baseurl = $export_array['origin_uploads_url']; } else { $this->origin_upload_baseurl = MSWP_AVERTA_URL . '/samples'; } // find and replace special template tags $this->origin_upload_baseurl = str_replace( '{{masterslider}}' , MSWP_AVERTA_URL, $this->origin_upload_baseurl ); $this->origin_upload_baseurl = str_replace( '{{theme_dir}}' , get_template_directory_uri() , $this->origin_upload_baseurl ); $this->origin_upload_baseurl = str_replace( '{{child_theme_dir}}', get_stylesheet_directory_uri() , $this->origin_upload_baseurl ); // import preset styles if it's included in export data if( isset( $export_array['preset_styles'] ) && ! empty( $export_array['preset_styles'] ) ) { msp_update_option( 'preset_style' , $export_array['preset_styles'] ); echo __( 'Preset styles imported successfully.', MSWP_TEXT_DOMAIN ) . "<br />"; } // import preset effects if it's included in export data if( isset( $export_array['preset_effects'] ) && ! empty( $export_array['preset_effects'] ) ) { msp_update_option( 'preset_effect' , $export_array['preset_effects'] ); echo __( 'Preset transitions imported successfully.', MSWP_TEXT_DOMAIN ) . "<br />"; } // import buttons styles if it's included in export data if( isset( $export_array['buttons_style'] ) && ! empty( $export_array['buttons_style'] ) ) { msp_update_option( 'buttons_style' , $export_array['buttons_style'] ); echo __( 'Buttons custom style imported successfully.', MSWP_TEXT_DOMAIN ) . "<br />"; } // import sliders if( isset( $export_array['sliders_data'] ) ) { // reset image import queue $this->image_import_queue = array(); $this->last_new_slider_id = null; $this->import_add_sliders( $export_array['sliders_data'], $allowed_slider_ids, $skip_slider_ids ); } echo "<br />" . __( 'All data imported successfully, have fun :)' ) . "<br />"; printf( '<a href="%s">%s</a>', admin_url( 'admin.php?page=' . MSWP_SLUG ), __( 'Back to panel ..', MSWP_TEXT_DOMAIN ) ); return true; } /** * Import slider(s) by exported data * * @param string $sliders_data the exported string * @param array $allowed_slider_ids just import sliders that are in this list * @param array $skip_slider_ids don't import sliders that are in this list * @return bool true on success and false on failure */ function import_add_sliders( $sliders_data, $allowed_slider_ids = null, $skip_slider_ids = array() ){ if( empty( $sliders_data ) ) return false; if ( ! is_array( $sliders_data ) ){ return false; } foreach ( $sliders_data as $slider_id => $slider_fields ) { global $mspdb; // skip if slider id is not in allowed list if( $allowed_slider_ids && ! in_array( $slider_id, $allowed_slider_ids ) ){ continue; } // skip if slider id is in black list if( $skip_slider_ids && in_array( $slider_id, $skip_slider_ids ) ){ continue; } // do not publish slider if user has not enough permission to publish sliders $slider_fields['status'] = current_user_can( 'publish_masterslider' ) ? 'published' : 'draft'; // import slider $new_slider_id = $mspdb->import_slider( $slider_fields ); $this->last_new_slider_id = $new_slider_id; msp_update_slider_custom_css_and_fonts( $new_slider_id ); echo sprintf( 'Slider "%s" created successfully.', $new_slider_id ) . "<br />"; // extact and collect images from each slider if( $this->import_medias && isset( $slider_fields['params'] ) ) $this->extract_slider_images( $slider_fields['params'] ); } if( $this->import_medias ) $this->fetch_all_medias(); return true; } /** * Extract images from slider data and add them to image_import_queue list * * @param string $slider_params the slider params * @return void */ public function extract_slider_images( $slider_params ) { $parser = msp_get_parser(); $parser->set_data( $slider_params ); $results = $parser->get_results(); // collect slider background image $this->image_import_queue[] = $results['setting']['bg_image']; if( isset( $results['setting']['ps_slide_bg'] ) ) $this->image_import_queue[] = $results['setting']['ps_slide_bg']; // collect layer's images if( isset( $results['layers'] ) ) { foreach ( $results['layers'] as $layer ) { $this->image_import_queue[] = $layer['src']; } } // collect slide's images if( isset( $results['slides'] ) ) { foreach ( $results['slides'] as $slide ) { // skip if current slide is 'overlay' slide not 'standard' slide if( empty( $slide['src'] ) ) continue; $this->image_import_queue[] = $slide['src']; $this->image_import_queue[] = $slide['thumb']; } } $this->image_import_queue = apply_filters( 'masterslider_extract_slider_images_to_import', $this->image_import_queue, $results ); } /** * Download and save slider images in upload directory * @return void */ public function fetch_all_medias(){ echo "<br />"; $this->image_import_queue = array_filter( $this->image_import_queue ); foreach ( $this->image_import_queue as $url ) { $this->download_media( $url ); } } public function download_media( $url ){ if( ! isset( $url ) || empty( $url ) ) return ''; // remove upload directory and get relative url if( $this->contains_origin_upload_dir( $url ) ) { $url = str_replace( $this->origin_upload_baseurl, '', $url ); } // skip if url was not internal media url if( $this->is_absolute_url( $url ) ) { echo "Media already exists.<br />"; return ''; } $relative_url = $url; // extract the file name and extension from the url $file_name = basename( $relative_url ); // extract upload date $upload_date = untrailingslashit( str_replace( $file_name, '', $relative_url ) ); // get absolute media url $absolute_url = $this->get_absolute_media_url( $relative_url ); // printf( "Importing ( %s ) file from ( %s ) .. <br />", $relative_url, $absolute_url ); // check if import media already exist if( is_file( $this->upload_basedir . $relative_url ) ) { echo sprintf( 'Media “%s” already exists.', $file_name ) . "<br />"; return; } printf( "Importing ( %s ) file .. <br />", $relative_url ); // printf( "upload date ( %s ) .. <br />", $upload_date ); printf( "absolute url ( %s ) .. <br /><br />", $absolute_url ); return; $upload = $this->fetch_remote_file( $absolute_url, $upload_date ); if( is_wp_error( $upload ) || $upload['error'] ) { echo "Failed to import media." . "<br />"; return $upload; } // Prepare an array of post data for the attachment. $attachment = array( 'guid' => '', 'post_mime_type' => '', 'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $upload['file'] ) ), 'post_content' => '', 'post_status' => 'inherit' ); if ( $info = wp_check_filetype( $upload['file'] ) ) $attachment['post_mime_type'] = $info['type']; else return new WP_Error( 'attachment_processing_error', __('Invalid file type', 'wordpress-importer') ); $attachment['guid'] = $upload['url']; // as per wp-admin/includes/upload.php $attachment_id = wp_insert_attachment( $attachment, $upload['file'] ); // Make sure that this file is included, as wp_generate_attachment_metadata() depends on it. require_once( ABSPATH . 'wp-admin/includes/image.php' ); wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $upload['file'] ) ); echo sprintf( '<a href="%s" target="_blank" >%s</a> Imported successfully.', $upload['url'], $file_name ) . "<br />"; } /** * Attempt to download a remote file attachment * * @param string $url URL of item to fetch * @param array $post Attachment details * @return array|WP_Error Local file location details on success, WP_Error otherwise */ function fetch_remote_file( $url, $subdir = null ) { add_filter( 'http_request_timeout', array( $this, 'bump_request_timeout' ) ); // extract the file name and extension from the url $file_name = basename( $url ); // get placeholder file in the upload dir with a unique, sanitized filename $upload = $this->wp_upload_bits( $file_name, '', $subdir ); // var_dump( $upload ); //echo "<br />" . $url . "<br />"; return new WP_Error( 'import_file_error', '' ); if ( $upload['error'] ) return new WP_Error( 'upload_dir_error', $upload['error'] ); // fetch the remote url and write it to the placeholder file $response = wp_remote_get( $url, array( 'stream' => true, 'filename' => $upload['file'] ) ); // request failed if ( is_wp_error( $response ) ) { @unlink( $upload['file'] ); return $response; } $code = (int) wp_remote_retrieve_response_code( $response ); // make sure the fetch was successful if ( $code !== 200 ) { @unlink( $upload['file'] ); return new WP_Error( 'import_file_error', sprintf( __('Remote server returned %1$d %2$s for %3$s', 'wordpress-importer'), $code, get_status_header_desc( $code ), $url ) ); } $filesize = filesize( $upload['file'] ); if ( isset( $headers['content-length'] ) && $filesize != $headers['content-length'] ) { @unlink( $upload['file'] ); return new WP_Error( 'import_file_error', __('Remote file is incorrect size', 'wordpress-importer') ); } if ( 0 == $filesize ) { @unlink( $upload['file'] ); return new WP_Error( 'import_file_error', __('Zero size file downloaded', 'wordpress-importer') ); } $max_size = (int) $this->max_attachment_size(); if ( ! empty( $max_size ) && $filesize > $max_size ) { @unlink( $upload['file'] ); return new WP_Error( 'import_file_error', sprintf(__('Remote file is too large, limit is %s', 'wordpress-importer'), size_format( $max_size ) ) ); } return $upload; } /** * Create a file in the upload folder with given content. * * If there is an error, then the key 'error' will exist with the error message. * If success, then the key 'file' will have the unique file path, the 'url' key * will have the link to the new file. and the 'error' key will be set to false. * * This function will not move an uploaded file to the upload folder. It will * create a new file with the content in $bits parameter. If you move the upload * file, read the content of the uploaded file, and then you can give the * filename and content to this function, which will add it to the upload * folder. * * The permissions will be set on the new file automatically by this function. * * @param string $name * @param mixed $bits File content * @param string $subdir Optional. Time formatted in 'yyyy/mm'. * @return array */ function wp_upload_bits( $name, $bits, $subdir = '' ) { if ( empty( $name ) ) return array( 'error' => __( 'Empty filename' ) ); $wp_filetype = wp_check_filetype( $name ); if ( ! $wp_filetype['ext'] && ! current_user_can( 'unfiltered_upload' ) ) return array( 'error' => __( 'Invalid file type' ) ); $upload = wp_upload_dir(); if ( $upload['error'] !== false ) return $upload; $upload_path = $upload['basedir'] . $subdir; $filename = wp_unique_filename( $upload_path, $name ); $new_file = $upload_path . "/$filename"; // echo "file path : {$new_file} <br />"; if ( ! wp_mkdir_p( dirname( $new_file ) ) ) { if ( 0 === strpos( $upload['basedir'], ABSPATH ) ) $error_path = str_replace( ABSPATH, '', $upload['basedir'] ) . $upload['subdir']; else $error_path = basename( $upload['basedir'] ) . $upload['subdir']; $message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $error_path ); return array( 'error' => $message ); } $ifp = @ fopen( $new_file, 'wb' ); if ( ! $ifp ) return array( 'error' => sprintf( __( 'Could not write file %s' ), $new_file ) ); @fwrite( $ifp, $bits ); fclose( $ifp ); clearstatcache(); // Set correct file permissions $stat = @ stat( dirname( $new_file ) ); $perms = $stat['mode'] & 0007777; $perms = $perms & 0000666; @ chmod( $new_file, $perms ); clearstatcache(); // Compute the URL $url = $upload['baseurl'] . "$subdir/$filename"; return array( 'file' => $new_file, 'url' => $url, 'error' => false ); } /** * Added to http_request_timeout filter to force timeout at 60 seconds during import * @return int 60 */ function bump_request_timeout() { return 60; } } global $ms_importer; if( is_null( $ms_importer ) ) $ms_importer = new MSP_Importer();