Function Reference: geodir_ajax_import_export

Summary

Handle import/export for categories & listings.

Global Values

$wpdb
(object) (required) WordPress Database object.

Default: None
$plugin_prefix
(string) (required) Geodirectory plugin table prefix.

Default: None
$current_user
(object) (required) Current user object.

Default: None
$wp_filesystem
(null|object) (required) WP_Filesystem object.

Default: None

Package

GeoDirectory

Return Values

(string)
  • Json data.

Change Log

Since: 1.4.6

1.5.4 Modified to add default category via csv import.

1.5.7 Modified to fix 504 Gateway Time-out for very large data.

1.6.11 alive_days column added in exported csv.

1.6.18 Allow import/export linked business cpt ids.

Source File

geodir_ajax_import_export() is located in geodirectory-admin/admin_functions.php [Line: 3336]

Source Code

function geodir_ajax_import_export() {
    global $wpdb, $plugin_prefix, $current_user, $wp_filesystem;
    
    error_reporting(0);

    $xstart = microtime(true);

    // try to set higher limits for import
    $max_input_time = ini_get('max_input_time');
    $max_execution_time = ini_get('max_execution_time');
    $memory_limit= ini_get('memory_limit');

    if(!$max_input_time || $max_input_time<3000){
        @ini_set('max_input_time', 3000);
    }

    if(!$max_execution_time || $max_execution_time<3000){
        @ini_set('max_execution_time', 3000);
    }

    if($memory_limit && str_replace('M','',$memory_limit)){
        if(str_replace('M','',$memory_limit)<256){
            @ini_set('memory_limit', '256M');
        }
    }

    $json = array();

    if ( !current_user_can( 'manage_options' ) ) {
        wp_send_json( $json );
    }

    $task = isset( $_REQUEST['task'] ) ? $_REQUEST['task'] : NULL;
    $nonce = isset( $_REQUEST['_nonce'] ) ? $_REQUEST['_nonce'] : NULL;
    $stat = isset( $_REQUEST['_st'] ) ? $_REQUEST['_st'] : false;

    if ( !wp_verify_nonce( $nonce, 'geodir_import_export_nonce' ) ) {
        wp_send_json( $json );
    }

    $post_type = isset( $_REQUEST['_pt'] ) ? $_REQUEST['_pt'] : NULL;
    $chunk_per_page = isset( $_REQUEST['_n'] ) ? absint($_REQUEST['_n']) : NULL;
    $chunk_per_page = $chunk_per_page < 50 || $chunk_per_page > 100000 ? 5000 : $chunk_per_page;
    $chunk_page_no = isset( $_REQUEST['_p'] ) ? absint($_REQUEST['_p']) : 1;

    $wp_filesystem = geodir_init_filesystem();
    if (!$wp_filesystem) {
        $json['error'] = __( 'Filesystem ERROR: Could not access filesystem.', 'geodirectory' );
        wp_send_json( $json );
    }

    if (!empty($wp_filesystem) && isset($wp_filesystem->errors) && is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code()) {
        $json['error'] = __( 'Filesystem ERROR: ' . $wp_filesystem->errors->get_error_message(), 'geodirectory' );
        wp_send_json( $json );
    }

    $csv_file_dir = geodir_path_import_export( false );
    if ( !$wp_filesystem->is_dir( $csv_file_dir ) ) {
        if ( !$wp_filesystem->mkdir( $csv_file_dir, FS_CHMOD_DIR ) ) {
            $json['error'] = __( 'ERROR: Could not create cache directory. This is usually due to inconsistent file permissions.', 'geodirectory' );
            wp_send_json( $json );
        }
    }
    
    $location_manager = function_exists('geodir_location_plugin_activated') ? true : false; // Check location manager installed & active.
    $neighbourhood_active = $location_manager && get_option('location_neighbourhoods') ? true : false;

    switch ( $task ) {
        case 'export_posts': {
            // WPML
            $is_wpml = geodir_is_wpml();
            if ($is_wpml) {
                global $sitepress;
                $active_lang = ICL_LANGUAGE_CODE;
                
                $sitepress->switch_lang('all', true);
            }
            // WPML
            if ( $post_type == 'gd_event' ) {
                add_filter( 'geodir_imex_export_posts_query', 'geodir_imex_get_events_query', 10, 2 );
            }
            $filters = !empty( $_REQUEST['gd_imex'] ) && is_array( $_REQUEST['gd_imex'] ) ? $_REQUEST['gd_imex'] : NULL;
            
            $file_name = $post_type . '_' . date( 'dmyHi' );
            if ( $filters && isset( $filters['start_date'] ) && isset( $filters['end_date'] ) ) {
                $file_name = $post_type . '_' . date_i18n( 'dmy', strtotime( $filters['start_date'] ) ) . '_' . date_i18n( 'dmy', strtotime( $filters['end_date'] ) );
            }
            $posts_count = geodir_get_posts_count( $post_type );
            $file_url_base = geodir_path_import_export() . '/';
            $file_url = $file_url_base . $file_name . '.csv';
            $file_path = $csv_file_dir . '/' . $file_name . '.csv';
            $file_path_temp = $csv_file_dir . '/' . $post_type . '_' . $nonce . '.csv';
            
            $chunk_file_paths = array();

            if ( isset( $_REQUEST['_c'] ) ) {
                $json['total'] = $posts_count;
                // WPML
                if ($is_wpml) {
                    $sitepress->switch_lang($active_lang, true);
                }
                // WPML
                wp_send_json( $json );
                gd_die();
            } else if ( isset( $_REQUEST['_st'] ) ) {
                $line_count = (int)geodir_import_export_line_count( $file_path_temp );
                $percentage = count( $posts_count ) > 0 && $line_count > 0 ? ceil( $line_count / $posts_count ) * 100 : 0;
                $percentage = min( $percentage, 100 );
                
                $json['percentage'] = $percentage;
                // WPML
                if ($is_wpml) {
                    $sitepress->switch_lang($active_lang, true);
                }
                // WPML
                wp_send_json( $json );
                gd_die();
            } else {
                if ( !$posts_count > 0 ) {
                    $json['error'] = __( 'No records to export.', 'geodirectory' );
                } else {
                    $total_posts = $posts_count;
                    if ($chunk_per_page > $total_posts) {
                        $chunk_per_page = $total_posts;
                    }
                    $chunk_total_pages = ceil( $total_posts / $chunk_per_page );
                    
                    $j = $chunk_page_no;
                    $chunk_save_posts = geodir_imex_get_posts( $post_type, $chunk_per_page, $j );
                    
                    $per_page = 500;
                    if ($per_page > $chunk_per_page) {
                        $per_page = $chunk_per_page;
                    }
                    $total_pages = ceil( $chunk_per_page / $per_page );
                    
                    for ( $i = 0; $i <= $total_pages; $i++ ) {
                        $save_posts = array_slice( $chunk_save_posts , ( $i * $per_page ), $per_page );
                        
                        $clear = $i == 0 ? true : false;
                        geodir_save_csv_data( $file_path_temp, $save_posts, $clear );
                    }
                        
                    if ( $wp_filesystem->exists( $file_path_temp ) ) {
                        $chunk_page_no = $chunk_total_pages > 1 ? '-' . $j : '';
                        $chunk_file_name = $file_name . $chunk_page_no . '.csv';
                        $file_path = $csv_file_dir . '/' . $chunk_file_name;
                        $wp_filesystem->move( $file_path_temp, $file_path, true );
                        
                        $file_url = $file_url_base . $chunk_file_name;
                        $chunk_file_paths[] = array('i' => $j . '.', 'u' => $file_url, 's' => size_format(filesize($file_path), 2));
                    }
                    
                    if ( !empty($chunk_file_paths) ) {
                        $json['total'] = $posts_count;
                        $json['files'] = $chunk_file_paths;
                    } else {
                        if ($j > 1) {
                            $json['total'] = $posts_count;
                            $json['files'] = array();
                        } else {
                            $json['error'] = __( 'ERROR: Could not create csv file. This is usually due to inconsistent file permissions.', 'geodirectory' );
                        }
                    }
                }
                // WPML
                if ($is_wpml) {
                    $sitepress->switch_lang($active_lang, true);
                }
                // WPML
                wp_send_json( $json );
            }
        }
        break;
        case 'export_cats': {
            // WPML
            $is_wpml = geodir_is_wpml();
            if ($is_wpml) {
                global $sitepress;
                $active_lang = ICL_LANGUAGE_CODE;
                
                $sitepress->switch_lang('all', true);
            }
            // WPML
            $file_name = $post_type . 'category_' . date( 'dmyHi' );
            
            $terms_count = geodir_get_terms_count( $post_type );
            $file_url_base = geodir_path_import_export() . '/';
            $file_url = $file_url_base . $file_name . '.csv';
            $file_path = $csv_file_dir . '/' . $file_name . '.csv';
            $file_path_temp = $csv_file_dir . '/' . $post_type . 'category_' . $nonce . '.csv';
            
            $chunk_file_paths = array();
            
            if ( isset( $_REQUEST['_st'] ) ) {
                $line_count = (int)geodir_import_export_line_count( $file_path_temp );
                $percentage = count( $terms_count ) > 0 && $line_count > 0 ? ceil( $line_count / $terms_count ) * 100 : 0;
                $percentage = min( $percentage, 100 );
                
                $json['percentage'] = $percentage;
                // WPML
                if ($is_wpml) {
                    $sitepress->switch_lang($active_lang, true);
                }
                // WPML
                wp_send_json( $json );
            } else {
                if ( !$terms_count > 0 ) {
                    $json['error'] = __( 'No records to export.', 'geodirectory' );
                } else {
                    $total_terms = $terms_count;
                    if ($chunk_per_page > $terms_count) {
                        $chunk_per_page = $terms_count;
                    }
                    $chunk_total_pages = ceil( $total_terms / $chunk_per_page );
                    
                    $j = $chunk_page_no;
                    $chunk_save_terms = geodir_imex_get_terms( $post_type, $chunk_per_page, $j );
                    
                    $per_page = 500;
                    if ($per_page > $chunk_per_page) {
                        $per_page = $chunk_per_page;
                    }
                    $total_pages = ceil( $chunk_per_page / $per_page );
                    
                    for ( $i = 0; $i <= $total_pages; $i++ ) {
                        $save_terms = array_slice( $chunk_save_terms , ( $i * $per_page ), $per_page );
                        
                        $clear = $i == 0 ? true : false;
                        geodir_save_csv_data( $file_path_temp, $save_terms, $clear );
                    }
                    
                    if ( $wp_filesystem->exists( $file_path_temp ) ) {
                        $chunk_page_no = $chunk_total_pages > 1 ? '-' . $j : '';
                        $chunk_file_name = $file_name . $chunk_page_no . '.csv';
                        $file_path = $csv_file_dir . '/' . $chunk_file_name;
                        $wp_filesystem->move( $file_path_temp, $file_path, true );
                        
                        $file_url = $file_url_base . $chunk_file_name;
                        $chunk_file_paths[] = array('i' => $j . '.', 'u' => $file_url, 's' => size_format(filesize($file_path), 2));
                    }
                    
                    if ( !empty($chunk_file_paths) ) {
                        $json['total'] = $terms_count;
                        $json['files'] = $chunk_file_paths;
                    } else {
                        $json['error'] = __( 'ERROR: Could not create csv file. This is usually due to inconsistent file permissions.', 'geodirectory' );
                    }
                }
                // WPML
                if ($is_wpml) {
                    $sitepress->switch_lang($active_lang, true);
                }
                // WPML
                wp_send_json( $json );
            }
        }
        break;
        case 'export_locations': {
            $file_url_base = geodir_path_import_export() . '/';
            $file_name = 'gd_locations_' . date( 'dmyHi' );
            $file_url = $file_url_base . $file_name . '.csv';
            $file_path = $csv_file_dir . '/' . $file_name . '.csv';
            $file_path_temp = $csv_file_dir . '/gd_locations_' . $nonce . '.csv';
            
            $items_count = (int)geodir_location_imex_count_locations();
            
            if ( isset( $_REQUEST['_st'] ) ) {
                $line_count = (int)geodir_import_export_line_count( $file_path_temp );
                $percentage = count( $items_count ) > 0 && $line_count > 0 ? ceil( $line_count / $items_count ) * 100 : 0;
                $percentage = min( $percentage, 100 );
                
                $json['percentage'] = $percentage;
                wp_send_json( $json );
            } else {
                $chunk_file_paths = array();
                
                if ( !$items_count > 0 ) {
                    $json['error'] = __( 'No records to export.', 'geodirectory' );
                } else {
                    $chunk_per_page = min( $chunk_per_page, $items_count );
                    $chunk_total_pages = ceil( $items_count / $chunk_per_page );
                    
                    $j = $chunk_page_no;
                    $chunk_save_items = geodir_location_imex_locations_data( $chunk_per_page, $j );
                    
                    $per_page = 500;
                    $per_page = min( $per_page, $chunk_per_page );
                    $total_pages = ceil( $chunk_per_page / $per_page );
                    
                    for ( $i = 0; $i <= $total_pages; $i++ ) {
                        $save_items = array_slice( $chunk_save_items , ( $i * $per_page ), $per_page );
                        
                        $clear = $i == 0 ? true : false;
                        geodir_save_csv_data( $file_path_temp, $save_items, $clear );
                    }
                    
                    if ( $wp_filesystem->exists( $file_path_temp ) ) {
                        $chunk_page_no = $chunk_total_pages > 1 ? '-' . $j : '';
                        $chunk_file_name = $file_name . $chunk_page_no . '.csv';
                        $file_path = $csv_file_dir . '/' . $chunk_file_name;
                        $wp_filesystem->move( $file_path_temp, $file_path, true );
                        
                        $file_url = $file_url_base . $chunk_file_name;
                        $chunk_file_paths[] = array('i' => $j . '.', 'u' => $file_url, 's' => size_format(filesize($file_path), 2));
                    }
                    
                    if ( !empty($chunk_file_paths) ) {
                        $json['total'] = $items_count;
                        $json['files'] = $chunk_file_paths;
                    } else {
                        $json['error'] = __( 'Fail, something wrong to create csv file.', 'geodirectory' );
                    }
                }
                wp_send_json( $json );
            }
        }
        break;
        case 'export_hoods': {
            $file_url_base = geodir_path_import_export() . '/';
            $file_name = 'gd_neighbourhoods_' . date( 'dmyHi' );
            $file_url = $file_url_base . $file_name . '.csv';
            $file_path = $csv_file_dir . '/' . $file_name . '.csv';
            $file_path_temp = $csv_file_dir . '/gd_neighbourhoods_' . $nonce . '.csv';
            
            $items_count = (int)geodir_location_imex_count_neighbourhoods();
            
            if ( isset( $_REQUEST['_st'] ) ) {
                $line_count = (int)geodir_import_export_line_count( $file_path_temp );
                $percentage = count( $items_count ) > 0 && $line_count > 0 ? ceil( $line_count / $items_count ) * 100 : 0;
                $percentage = min( $percentage, 100 );
                
                $json['percentage'] = $percentage;
                wp_send_json( $json );
            } else {
                $chunk_file_paths = array();
                
                if ( !$items_count > 0 ) {
                    $json['error'] = __( 'No records to export.', 'geodirectory' );
                } else {
                    $chunk_per_page = min( $chunk_per_page, $items_count );
                    $chunk_total_pages = ceil( $items_count / $chunk_per_page );
                    
                    $j = $chunk_page_no;
                    $chunk_save_items = geodir_location_imex_neighbourhoods_data( $chunk_per_page, $j );
                    
                    $per_page = 500;
                    $per_page = min( $per_page, $chunk_per_page );
                    $total_pages = ceil( $chunk_per_page / $per_page );
                    
                    for ( $i = 0; $i <= $total_pages; $i++ ) {
                        $save_items = array_slice( $chunk_save_items , ( $i * $per_page ), $per_page );
                        
                        $clear = $i == 0 ? true : false;
                        geodir_save_csv_data( $file_path_temp, $save_items, $clear );
                    }
                    
                    if ( $wp_filesystem->exists( $file_path_temp ) ) {
                        $chunk_page_no = $chunk_total_pages > 1 ? '-' . $j : '';
                        $chunk_file_name = $file_name . $chunk_page_no . '.csv';
                        $file_path = $csv_file_dir . '/' . $chunk_file_name;
                        $wp_filesystem->move( $file_path_temp, $file_path, true );
                        
                        $file_url = $file_url_base . $chunk_file_name;
                        $chunk_file_paths[] = array('i' => $j . '.', 'u' => $file_url, 's' => size_format(filesize($file_path), 2));
                    }
                    
                    if ( !empty($chunk_file_paths) ) {
                        $json['total'] = $items_count;
                        $json['files'] = $chunk_file_paths;
                    } else {
                        $json['error'] = __( 'Fail, something wrong to create csv file.', 'geodirectory' );
                    }
                }
                wp_send_json( $json );
            }
        }
        break;
        case 'prepare_import':
        case 'import_cat':
        case 'import_post':
        case 'import_loc':
        case 'import_hood': {
            // WPML
            $is_wpml = geodir_is_wpml();
            if ($is_wpml) {
                global $sitepress;
                $active_lang = ICL_LANGUAGE_CODE;
            }
            // WPML
            
            @ini_set( 'auto_detect_line_endings', true );
            
            $uploads = wp_upload_dir();
            $uploads_dir = $uploads['path'];
            $uploads_subdir = $uploads['subdir'];
            
            $csv_file = isset( $_POST['_file'] ) ? $_POST['_file'] : NULL;
            $import_choice = isset( $_REQUEST['_ch'] ) ? $_REQUEST['_ch'] : 'skip';
            
            $csv_file_arr = explode( '/', $csv_file );
            $csv_filename = end( $csv_file_arr );
            $target_path = $uploads_dir . '/temp_' . $current_user->data->ID . '/' . $csv_filename;
            
            $json['file'] = $csv_file;
            $json['error'] = __( 'The uploaded file is not a valid csv file. Please try again.', 'geodirectory' );
            $file = array();

            if ( $csv_file && $wp_filesystem->is_file( $target_path ) && $wp_filesystem->exists( $target_path ) ) {
                $wp_filetype = wp_check_filetype_and_ext( $target_path, $csv_filename );

                if (!empty($wp_filetype) && isset($wp_filetype['ext']) && geodir_strtolower($wp_filetype['ext']) == 'csv') {
                    $json['error'] = NULL;

                    $lc_all = setlocale(LC_ALL, 0); // Fix issue of fgetcsv ignores special characters when they are at the beginning of line
                    setlocale(LC_ALL, 'en_US.UTF-8');
                    if ( ( $handle = fopen($target_path, "r" ) ) !== FALSE ) {
                        while ( ( $data = fgetcsv( $handle, 100000, "," ) ) !== FALSE ) {
                            if ( !empty( $data ) ) {
                                $file[] = $data;
                            }
                        }
                        fclose($handle);
                    }
                    setlocale(LC_ALL, $lc_all);

                    $json['rows'] = (!empty($file) && count($file) > 1) ? count($file) - 1 : 0;
                    
                    if (!$json['rows'] > 0) {
                        $json['error'] = __('No data found in csv file.', 'geodirectory');
                    }
                } else {
                    wp_send_json( $json );
                }
            } else {
                wp_send_json( $json );
            }
            
            if ( $task == 'prepare_import' || !empty( $json['error'] ) ) {
                wp_send_json( $json );
            }
            
            $total = $json['rows'];
            $limit = isset($_POST['limit']) ? (int)$_POST['limit'] : 1;
            $processed = isset($_POST['processed']) ? (int)$_POST['processed'] : 0;
            
            $count = $limit;
            
            if ($count < $total) {
                $count = $processed + $count;
                if ($count > $total) {
                    $count = $total;
                }
            } else {
                $count = $total;
            }
            
            $created = 0;
            $updated = 0;
            $skipped = 0;
            $invalid = 0;
            $invalid_addr = 0;
            $images = 0;
            
            $gd_post_info = array();
            $countpost = 0;
            
            $post_types = geodir_get_posttypes();

            if ( $task == 'import_cat' ) {
                if (!empty($file)) {
                    $columns = isset($file[0]) ? $file[0] : NULL;
                    
                    if (empty($columns) || (!empty($columns) && $columns[0] == '')) {
                        $json['error'] = CSV_INVAILD_FILE;
                        wp_send_json( $json );
                        exit;
                    }
                    
                    $gd_error_log = __('GD IMPORT CATEGORIES [ROW %d]:', 'geodirectory');
                    
                    for ($i = 1; $i <= $limit; $i++) {
                        $index = $processed + $i;
                        
                        if (isset($file[$index])) {
                            $row = $file[$index];
                            $row = array_map( 'trim', $row );
                            //$row = array_map( 'utf8_encode', $row );
                            
                            $cat_id = '';
                            $cat_name = '';
                            $cat_slug = '';
                            $cat_posttype = '';
                            $cat_parent = '';
                            $cat_description = '';
                            $cat_schema = '';
                            $cat_top_description = '';
                            $cat_image = '';
                            $cat_icon = '';
                            $cat_language = '';
                            $cat_id_original = '';
                            
                            $c = 0;
                            foreach ($columns as $column ) {
                                if ( $column == 'cat_id' ) {
                                    $cat_id = (int)$row[$c];
                                } else if ( $column == 'cat_name' ) {
                                    $cat_name = $row[$c];
                                } else if ( $column == 'cat_slug' ) {
                                    $cat_slug = $row[$c];
                                } else if ( $column == 'cat_posttype' ) {
                                    $cat_posttype = $row[$c];
                                } else if ( $column == 'cat_parent' ) {
                                    $cat_parent = trim($row[$c]);
                                } else if ( $column == 'cat_schema' && $row[$c] != '' ) {
                                    $cat_schema = $row[$c];
                                } else if ( $column == 'cat_description' ) {
                                    $cat_description = $row[$c];
                                } else if ( $column == 'cat_top_description' ) {
                                    $cat_top_description = $row[$c];
                                } else if ( $column == 'cat_image' ) {
                                    $cat_image = $row[$c];
                                } else if ( $column == 'cat_icon' ) {
                                    $cat_icon = $row[$c];
                                }
                                // WPML
                                if ( $is_wpml ) {
                                    if ( $column == 'cat_language' ) {
                                        $cat_language = geodir_strtolower( trim( $row[$c] ) );
                                    } else if ( $column == 'cat_id_original' ) {
                                        $cat_id_original = (int)$row[$c];
                                    }
                                }
                                // WPML
                                $c++;
                            }
                            
                            if ( $cat_name == '' || !in_array( $cat_posttype, $post_types ) ) {
                                geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . __( 'Could not be added due to blank title/invalid post type', 'geodirectory' ) );
                                
                                $invalid++;
                                continue;
                            }
                            
                            // WPML
                            if ($is_wpml && $cat_language != '') {
                                $sitepress->switch_lang($cat_language, true);
                            }
                            // WPML
                                                        
                            $term_data = array();
                            $term_data['name'] = $cat_name;
                            $term_data['slug'] = $cat_slug;
                            $term_data['description'] = $cat_description;
                            $term_data['cat_schema'] = $cat_schema;
                            $term_data['top_description'] = $cat_top_description;
                            $term_data['image'] = $cat_image != '' ? basename( $cat_image ) : '';
                            $term_data['icon'] = $cat_icon != '' ? basename( $cat_icon ) : '';
                            
                            //$term_data = array_map( 'utf8_encode', $term_data );
                            
                            $taxonomy = $cat_posttype . 'category';
                            
                            $term_data['taxonomy'] = $taxonomy;

                            $term_parent_id = 0;
                            if ($cat_parent != "" || (int)$cat_parent > 0) {
                                $term_parent = '';
                                
                                if ( $term_parent = get_term_by( 'name', $cat_parent, $taxonomy ) ) {
                                    //
                                } else if ( $term_parent = get_term_by( 'slug', $cat_parent, $taxonomy ) ) {
                                    //
                                } else if ( $term_parent = get_term_by( 'id', $cat_parent, $taxonomy ) ) {
                                    //
                                } else {
                                    $term_parent_data = array();
                                    $term_parent_data['name'] = $cat_parent;
                                    //$term_parent_data = array_map( 'utf8_encode', $term_parent_data );
                                    $term_parent_data['taxonomy'] = $taxonomy;
                                    
                                    $term_parent_id = (int)geodir_imex_insert_term( $taxonomy, $term_parent_data );
                                }
                                
                                if ( !empty( $term_parent ) && !is_wp_error( $term_parent ) ) {
                                    $term_parent_id = (int)$term_parent->term_id;
                                }
                            }
                            $term_data['parent'] = (int)$term_parent_id;

                            $term_id = NULL;
                            if ( $import_choice == 'update' ) {
                                if ( $cat_id > 0 && $term = (array)term_exists( $cat_id, $taxonomy ) ) {
                                    $term_data['term_id'] = $term['term_id'];
                                    
                                    if ( $term_id = geodir_imex_update_term( $taxonomy, $term_data ) ) {
                                        $updated++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . __( 'Could not be updated due to invalid data (check & remove if any invalid characters used in data)', 'geodirectory' ) );
                                    }
                                } else if ( $term_data['slug'] != '' && $term = (array)term_exists( $term_data['slug'], $taxonomy ) ) {
                                    $term_data['term_id'] = $term['term_id'];
                                    
                                    if ( $term_id = geodir_imex_update_term( $taxonomy, $term_data ) ) {
                                        $updated++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . __( 'Could not be updated due to invalid data (check & remove if any invalid characters used in data)', 'geodirectory' ) );
                                    }
                                } else {
                                    if ( $term_id = geodir_imex_insert_term( $taxonomy, $term_data ) ) {
                                        $created++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . __( 'Could not be added due to invalid data (check & remove if any invalid characters used in data)', 'geodirectory' ) );
                                    }
                                }
                            } else if ( $import_choice == 'skip' ) {
                                if ( $cat_id > 0 && $term = (array)term_exists( $cat_id, $taxonomy ) ) {
                                    $skipped++;
                                } else if ( $term_data['slug'] != '' && $term = (array)term_exists( $term_data['slug'], $taxonomy ) ) {
                                    $skipped++;
                                } else {
                                    if ( $term_id = geodir_imex_insert_term( $taxonomy, $term_data ) ) {
                                        $created++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . __( 'Could not be updated due to invalid data (check & remove if any invalid characters used in data)', 'geodirectory' ) );
                                    }
                                }
                            } else {
                                $invalid++;
                                geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . __( 'Could not be added due to invalid data (check & remove if any invalid characters used in data)', 'geodirectory' ) );
                            }
                            
                            if ( $term_id ) {
                                // WPML
                                if ($is_wpml && geodir_wpml_is_taxonomy_translated($taxonomy) && $cat_id_original > 0 && $cat_language != '') {
                                    $wpml_element_type = 'tax_' . $taxonomy;
                                    $source_language = geodir_get_language_for_element( $cat_id_original, $wpml_element_type );
                                    $source_language = $source_language != '' ? $source_language : $sitepress->get_default_language();

                                    $trid = $sitepress->get_element_trid( $cat_id_original, $wpml_element_type );
                                    
                                    $sitepress->set_element_language_details( $term_id, $wpml_element_type, $trid, $cat_language, $source_language );
                                }
                                // WPML
                                
                                if ( isset( $term_data['top_description'] ) ) {
                                    geodir_update_tax_meta( $term_id, 'ct_cat_top_desc', $term_data['top_description'], $cat_posttype );
                                }
                                
                                if ( isset( $term_data['cat_schema'] ) ) {
                                    geodir_update_tax_meta( $term_id, 'ct_cat_schema', $term_data['cat_schema'], $cat_posttype );
                                }
            
                                $attachment = false;
                                if ( isset( $term_data['image'] ) && $term_data['image'] != '' ) {
                                    $cat_image = geodir_get_default_catimage( $term_id, $cat_posttype );
                                    $cat_image = !empty( $cat_image ) && isset( $cat_image['src'] ) ? $cat_image['src'] : '';
                                    
                                    if ( basename($cat_image) != $term_data['image'] ) {
                                        $attachment = true;
                                        geodir_update_tax_meta( $term_id, 'ct_cat_default_img', array( 'id' => 'image', 'src' => $uploads['url'] . '/' . $term_data['image'] ), $cat_posttype );
                                    }
                                }
                                
                                if ( isset( $term_data['icon'] ) && $term_data['icon'] != '' ) {
                                    $cat_icon = geodir_get_tax_meta( $term_id, 'ct_cat_icon', false, $cat_posttype );
                                    $cat_icon = !empty( $cat_icon ) && isset( $cat_icon['src'] ) ? $cat_icon['src'] : '';

                                    if ( basename($cat_icon) != $term_data['icon'] ) {
                                        $attachment = true;
                                        geodir_update_tax_meta( $term_id, 'ct_cat_icon', array( 'id' => 'icon', 'src' => $uploads['url'] . '/' . $term_data['icon'] ), $cat_posttype );
                                    }
                                }
                                
                                if ( $attachment ) {
                                    $images++;
                                }
                            }
                            
                            // WPML
                            if ($is_wpml && $cat_language != '') {
                                $sitepress->switch_lang($active_lang, true);
                            }
                            // WPML
                        }
                    }
                }
                
                $json = array();
                $json['processed'] = $limit;
                $json['created'] = $created;
                $json['updated'] = $updated;
                $json['skipped'] = $skipped;
                $json['invalid'] = $invalid;
                $json['images'] = $images;
                
                wp_send_json( $json );
                exit;
            } else if ( $task == 'import_post' ) {
                $xtimings['###1'] = microtime(true)-$xstart;
                //run some stuff to make the import quicker
                wp_defer_term_counting( true );
                wp_defer_comment_counting( true );
                $wpdb->query( 'SET autocommit = 0;' );
//
//                remove_all_actions('publish_post');
//                remove_all_actions('transition_post_status');
//                remove_all_actions('publish_future_post');

                if (!empty($file)) {
                    $is_claim_active = is_plugin_active( 'geodir_claim_listing/geodir_claim_listing.php' ) && get_option('geodir_claim_enable') === 'yes' ? true : false;
                    $wp_post_statuses = get_post_statuses(); // All of the WordPress supported post statuses.
                    $default_status = 'publish';
                    $current_date = date_i18n( 'Y-m-d', time() );
                    
                    $columns = isset($file[0]) ? $file[0] : NULL;
                    
                    if (empty($columns) || (!empty($columns) && $columns[0] == '')) {
                        $json['error'] = CSV_INVAILD_FILE;
                        wp_send_json( $json );
                        exit;
                    }
                    $xtimings['###2'] = microtime(true)-$xstart;
                    $gd_error_log = __('GD IMPORT LISTINGS [ROW %d]:', 'geodirectory');
                    $wp_chars_error = __( '(check & remove if any invalid characters used in data)', 'geodirectory' );
                    $processed_actual = 0;
                    for ($i = 1; $i <= $limit; $i++) {
                        $index = $processed + $i;
                        $gd_post = array();
                        
                        if (isset($file[$index])) {
                            $processed_actual++;
                            $row = $file[$index];
                            $row = array_map( 'trim', $row );
                            //$row = array_map( 'utf8_encode', $row );
                            $row = array_map( 'addslashes_gpc', $row );
                            
                            $post_id = '';
                            $post_title = '';
                            $post_date = '';
                            $post_author = '';
                            $post_content = '';
                            $post_category_arr = array();
                            $default_category = '';
                            $post_tags = array();
                            $post_type = '';
                            $post_status = '';
                            $is_featured = 0;
                            $geodir_video = '';
                            $post_address = '';
                            $post_city = '';
                            $post_region = '';
                            $post_country = '';
                            $post_zip = '';
                            $post_latitude = '';
                            $post_longitude = '';
                            $post_neighbourhood = '';
                            $neighbourhood_latitude = '';
                            $neighbourhood_longitude = '';
                            $geodir_timing = '';
                            $geodir_contact = '';
                            $geodir_email = '';
                            $geodir_website = '';
                            $geodir_twitter = '';
                            $geodir_facebook = '';
                            $geodir_twitter = '';
                            $geodir_link_business = null;
                            $post_images = array();
                            
                            $expire_date = 'Never';
                            
                            $language = '';
                            $original_post_id = '';
                            
                            $c = 0;
                            foreach ($columns as $column ) {
                                $gd_post[$column] = $row[$c];
                                
                                if ( $column == 'post_id' ) {
                                    $post_id = $row[$c];
                                } else if ( $column == 'post_title' ) {
                                    $post_title = sanitize_text_field($row[$c]);
                                } else if ( $column == 'post_author' ) {
                                    $post_author = $row[$c];
                                } else if ( $column == 'post_date' ) {
                                    $post_date = $row[$c];
                                } else if ( $column == 'post_content' ) {
                                    $post_content = $row[$c];
                                } else if ( $column == 'post_category' && $row[$c] != '' ) {
                                    $post_category_arr = explode( ',', $row[$c] );
                                } else if ( $column == 'default_category' ) {
                                    $default_category = wp_kses_normalize_entities($row[$c]);
                                } else if ( $column == 'post_tags' && $row[$c] != '' ) {
                                    $post_tags = explode( ',', sanitize_text_field($row[$c]) );
                                } else if ( $column == 'post_type' ) {
                                    $post_type = $row[$c];
                                } else if ( $column == 'post_status' ) {
                                    $post_status = sanitize_key( $row[$c] );
                                } else if ( $column == 'is_featured' ) {
                                    $is_featured = (int)$row[$c];
                                } else if ( $column == 'geodir_video' ) {
                                    $geodir_video = $row[$c];
                                } else if ( $column == 'post_address' ) {
                                    $post_address = sanitize_text_field($row[$c]);
                                } else if ( $column == 'post_city' ) {
                                    $post_city = sanitize_text_field($row[$c]);
                                } else if ( $column == 'post_region' ) {
                                    $post_region = sanitize_text_field($row[$c]);
                                } else if ( $column == 'post_country' ) {
                                    $post_country = sanitize_text_field($row[$c]);
                                } else if ( $column == 'post_zip' ) {
                                    $post_zip = sanitize_text_field($row[$c]);
                                } else if ( $column == 'post_latitude' ) {
                                    $post_latitude = sanitize_text_field($row[$c]);
                                } else if ( $column == 'post_longitude' ) {
                                    $post_longitude = sanitize_text_field($row[$c]);
                                } else if ( $column == 'post_neighbourhood' ) {
                                    $post_neighbourhood = sanitize_text_field($row[$c]);
                                    unset($gd_post[$column]);
                                } else if ( $column == 'neighbourhood_latitude' ) {
                                    $neighbourhood_latitude = sanitize_text_field($row[$c]);
                                } else if ( $column == 'neighbourhood_longitude' ) {
                                    $neighbourhood_longitude = sanitize_text_field($row[$c]);
                                } else if ( $column == 'geodir_timing' ) {
                                    $geodir_timing = sanitize_text_field($row[$c]);
                                } else if ( $column == 'geodir_contact' ) {
                                    $geodir_contact = sanitize_text_field($row[$c]);
                                } else if ( $column == 'geodir_email' ) {
                                    $geodir_email = sanitize_email($row[$c]);
                                } else if ( $column == 'geodir_website' ) {
                                    $geodir_website = sanitize_text_field($row[$c]);
                                } else if ( $column == 'geodir_twitter' ) {
                                    $geodir_twitter = sanitize_text_field($row[$c]);
                                } else if ( $column == 'geodir_facebook' ) {
                                    $geodir_facebook = sanitize_text_field($row[$c]);
                                } else if ( $column == 'IMAGE' && !empty( $row[$c] ) && $row[$c] != '' ) {
                                    $post_images[] = $row[$c];
                                } else if ( $column == 'alive_days' && (int)$row[$c] > 0 ) {
                                    $expire_date = date_i18n( 'Y-m-d', strtotime( $current_date . '+' . (int)$row[$c] . ' days' ) );
                                } else if ( $column == 'expire_date' && $row[$c] != '' && geodir_strtolower($row[$c]) != 'never' ) {
                                    $row[$c] = str_replace('/', '-', $row[$c]);
                                    $expire_date = date_i18n( 'Y-m-d', strtotime( $row[$c] ) );
                                } else if ( strpos( $column, 'linked_' ) === 0 ) {
                                    $geodir_link_business = (int)$row[$c];
                                }
                                // WPML
                                if ($is_wpml) {
                                    if ($column == 'language') {
                                        $language = geodir_strtolower(trim($row[$c]));
                                    } else if ($column == 'original_post_id') {
                                        $original_post_id = (int)$row[$c];
                                    }
                                }
                                // WPML
                                $c++;
                            }
                            // listing claimed or not
                            if ($is_claim_active && isset($gd_post['claimed'])) {
                                $gd_post['claimed'] = (int)$gd_post['claimed'] == 1 ? 1 : 0;
                            }
                            
                            // WPML
                            if ($is_wpml && $language != '') {
                                $sitepress->switch_lang($language, true);
                            }
                            // WPML

                            $gd_post['IMAGE'] = $post_images;
                            
                            $post_status = !empty( $post_status ) ? sanitize_key( $post_status ) : $default_status;
                            $post_status = !empty( $wp_post_statuses ) && !isset( $wp_post_statuses[$post_status] ) ? $default_status : $post_status;
                                                                                                                
                            $valid = true;
                            
                            if ( $post_title == '' || !in_array( $post_type, $post_types ) ) {
                                $invalid++;
                                $valid = false;
                                geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . __( 'Could not be added due to blank title/invalid post type', 'geodirectory' ) );
                            }
                            $xtimings['###3'] = microtime(true)-$xstart;
                            $location_allowed = function_exists( 'geodir_cpt_no_location' ) && geodir_cpt_no_location( $post_type ) ? false : true;
                            if ( $location_allowed ) {
                                $location_result = geodir_get_default_location();
                                if ( $post_address == '' || $post_city == '' || $post_region == '' || $post_country == '' || $post_latitude == '' || $post_longitude == '' ) {
                                    $invalid_addr++;
                                    $valid = false;
                                    geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . __( 'Could not be added due to blank/invalid address(city, region, country, latitude, longitude).', 'geodirectory' ) );
                                } else if ( !empty( $location_result ) && $location_result->location_id == 0 ) {
                                    if ( ( geodir_strtolower( $post_city ) != geodir_strtolower( $location_result->city ) ) || ( geodir_strtolower( $post_region ) != geodir_strtolower( $location_result->region ) ) || (geodir_strtolower( $post_country ) != geodir_strtolower( $location_result->country ) ) ) {
                                        $invalid_addr++;
                                        $valid = false;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . __( 'Could not be added due to blank/invalid address(city, region, country, latitude, longitude).', 'geodirectory' ) );
                                    } else {
                                        if (!$location_manager) {
                                            $gd_post['post_locations'] = '[' . $location_result->city_slug . '],[' . $location_result->region_slug . '],[' . $location_result->country_slug . ']'; // Set the default location when location manager not activated.
                                        }
                                    }
                                }
                            }
                            $xtimings['###4']   = microtime(true)-$xstart;
                            if ( !$valid ) {
                                continue;
                            }

                            $cat_taxonomy = $post_type . 'category';
                            $tags_taxonomy = $post_type . '_tags';
                            
                            if ($default_category != '' && !in_array($default_category, $post_category_arr)) {
                                $post_category_arr = array_merge(array($default_category), $post_category_arr);
                            }

                            $post_category = array();
                            $default_category_id = NULL;
                            if ( !empty( $post_category_arr ) ) {
                                foreach ( $post_category_arr as $value ) {
                                    $category_name = wp_kses_normalize_entities( trim( $value ) );
                                    
                                    if ( $category_name != '' ) {
                                        $term_category = array();
                                        
                                        if ( $term = get_term_by( 'name', $category_name, $cat_taxonomy ) ) {
                                            $term_category = $term;
                                        } else if ( $term = get_term_by( 'slug', $category_name, $cat_taxonomy ) ) {
                                            $term_category = $term;
                                        } else {
                                            $term_data = array();
                                            $term_data['name'] = $category_name;
                                            $term_data['taxonomy'] = $cat_taxonomy;
                                            
                                            $term_id = geodir_imex_insert_term( $cat_taxonomy, $term_data );
                                            if ( $term_id ) {
                                                $term_category = get_term( $term_id, $cat_taxonomy );
                                            }
                                        }
                                        
                                        if ( !empty( $term_category ) && !is_wp_error( $term_category ) ) {
                                            $post_category[] = intval($term_category->term_id);
                                            
                                            if ($category_name == $default_category) {
                                                $default_category_id = intval($term_category->term_id);
                                            }
                                        }
                                    }
                                }
                            }
                            $xtimings['###5'] = microtime(true)-$xstart;
                            $save_post = array();
                            $save_post['post_title'] = $post_title;
                            if (!empty($post_date)) {
                                $post_date = geodir_date( $post_date, 'Y-m-d H:i:s' ); // convert to mysql date format.
                                
                                $save_post['post_date'] = $post_date;
                                $save_post['post_date_gmt'] = get_gmt_from_date( $post_date );
                            }
                            $save_post['post_content'] = $post_content;
                            $save_post['post_type'] = $post_type;
                            $save_post['post_author'] = $post_author;
                            $save_post['post_status'] = $post_status;
                            $save_post['post_category'] = $post_category;
                            $save_post['post_tags'] = $post_tags;

                            $saved_post_id = NULL;
                            if ( $import_choice == 'update' ) {
                                $gd_wp_error = __( 'Unable to add listing, please check the listing data.', 'geodirectory' );
                                
                                if ( $post_id > 0 && get_post( $post_id ) ) {
                                    $save_post['ID'] = $post_id;
                                    
                                    if ( $saved_post_id = wp_update_post( $save_post, true ) ) {
                                        if ( is_wp_error( $saved_post_id ) ) {
                                            $gd_wp_error = $saved_post_id->get_error_message() . ' ' . $wp_chars_error;
                                            $saved_post_id = 0;
                                        } else {
                                            $saved_post_id = $post_id;
                                            $updated++;
                                        }
                                    }
                                } else {
                                    if ( $saved_post_id = wp_insert_post( $save_post, true ) ) {
                                        if ( is_wp_error( $saved_post_id ) ) {
                                            $gd_wp_error = $saved_post_id->get_error_message() . ' ' . $wp_chars_error;
                                            $saved_post_id = 0;
                                        } else {
                                            $created++;
                                        }
                                    }
                                }
                                
                                if ( !$saved_post_id > 0 ) {
                                    $invalid++;
                                    geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_wp_error );
                                }
                            } else if ( $import_choice == 'skip' ) {
                                if ( $post_id > 0 && get_post( $post_id ) ) {
                                    $skipped++;	
                                } else {
                                    if ( $saved_post_id = wp_insert_post( $save_post, true ) ) {
                                        if ( is_wp_error( $saved_post_id ) ) {
                                            $invalid++;
                                            
                                            geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $saved_post_id->get_error_message() . ' ' . $wp_chars_error );
                                            $saved_post_id = 0;
                                        } else {
                                            $created++;
                                        }
                                    } else {
                                        $invalid++;
                                        
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $wp_chars_error );
                                    }
                                }
                            } else {
                                $invalid++;
                                
                                geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $wp_chars_error );
                            }
                            $xtimings['###6'] = microtime(true)-$xstart;
                            if ( (int)$saved_post_id > 0 ) {
                                // WPML
                                if ($is_wpml && geodir_wpml_is_post_type_translated($post_type) && $original_post_id > 0 && $language != '') {
                                    $wpml_post_type = 'post_' . $post_type;
                                    $source_language = geodir_get_language_for_element( $original_post_id, $wpml_post_type );
                                    $source_language = $source_language != '' ? $source_language : $sitepress->get_default_language();

                                    $trid = $sitepress->get_element_trid( $original_post_id, $wpml_post_type );
                                    
                                    $sitepress->set_element_language_details( $saved_post_id, $wpml_post_type, $trid, $language, $source_language );
                                }
                                // WPML
                                $gd_post_info = geodir_get_post_info( $saved_post_id );
                                
                                $gd_post['post_id'] = $saved_post_id;
                                $gd_post['ID'] = $saved_post_id;
                                $gd_post['post_tags'] = $post_tags;
                                $gd_post['post_title'] = $post_title;
                                $gd_post['post_status'] = $post_status;
                                $gd_post['submit_time'] = time();
                                $gd_post['submit_ip'] = $_SERVER['REMOTE_ADDR'];
                                                    
                                // post location
                                $post_location_id = 0;
                                if ( $location_allowed && !empty( $location_result ) && $location_result->location_id > 0 ) {
                                    $gd_post['post_neighbourhood'] = '';
                                    
                                    $post_location_info = array(
                                                                'city' => $post_city,
                                                                'region' => $post_region,
                                                                'country' => $post_country,
                                                                'geo_lat' => $post_latitude,
                                                                'geo_lng' => $post_longitude
                                                            );
                                    if ( $location_id = (int)geodir_add_new_location( $post_location_info ) ) {
                                        $post_location_id = $location_id;
                                    }
                                    
                                    if ($post_location_id > 0 && $neighbourhood_active && !empty($post_neighbourhood)) {
                                        $neighbourhood_info = geodir_location_neighbourhood_by_name_loc_id($post_neighbourhood, $post_location_id);

                                        $hood_data = array();
                                        $hood_data['hood_location_id'] = $post_location_id;
                                        $hood_data['hood_name'] = $post_neighbourhood;
                                        
                                        if (!empty($neighbourhood_info)) {
                                            $hood_data['hood_id'] = $neighbourhood_info->hood_id;
                                            $hood_data['hood_slug'] = $neighbourhood_info->hood_slug;
                                            
                                            if (empty($neighbourhood_latitude) || empty($neighbourhood_longitude)) {
                                                $neighbourhood_latitude = $neighbourhood_info->hood_latitude;
                                                $neighbourhood_longitude = $neighbourhood_info->hood_longitude;
                                            }
                                        }
                                        
                                        if (empty($neighbourhood_latitude) || empty($neighbourhood_longitude)) {
                                            $neighbourhood_latitude = $neighbourhood_info->hood_latitude;
                                            $neighbourhood_longitude = $neighbourhood_info->hood_longitude;
                                        }
                                        
                                        $hood_data['hood_latitude'] = $post_latitude;
                                        $hood_data['hood_longitude'] = $post_longitude;

                                        $neighbourhood_info = geodir_location_insert_update_neighbourhood($hood_data);
                                        if (!empty($neighbourhood_info) && isset($neighbourhood_info->hood_slug)) {
                                            $gd_post['post_neighbourhood'] = $neighbourhood_info->hood_slug;
                                        }
                                    }
                                }
                                $gd_post['post_location_id'] = $post_location_id;
                                
                                if ($geodir_link_business !== null) {
                                    $gd_post['geodir_link_business'] = $geodir_link_business > 0 ? $geodir_link_business : '';
                                }
                                
                                // post package info
                                $package_id = isset( $gd_post['package_id'] ) && !empty( $gd_post['package_id'] ) ? (int)$gd_post['package_id'] : 0;
                                if (!$package_id && !empty($gd_post_info) && isset($gd_post_info->package_id) && $gd_post_info->package_id) {
                                    $package_id = $gd_post_info->package_id;
                                }
                                
                                $package_info = array();
                                if ($package_id && function_exists('geodir_get_package_info_by_id')) {
                                    $package_info = (array)geodir_get_package_info_by_id($package_id);
                                    
                                    if (!(!empty($package_info) && isset($package_info['post_type']) && $package_info['post_type'] == $post_type)) {
                                        $package_info = array();
                                    }
                                }
                                
                                if (empty($package_info)) {
                                    $package_info = (array)geodir_post_package_info( array(), '', $post_type );
                                }
                                 
                                if (!empty($package_info))	 {
                                    $package_id = $package_info['pid'];
                                    
                                    if (isset($gd_post['alive_days']) || isset($gd_post['expire_date'])) {
                                        $gd_post['expire_date'] = $expire_date;
                                    } else {
                                        if ( isset( $package_info['days'] ) && (int)$package_info['days'] > 0 ) {
                                            $gd_post['alive_days'] = (int)$package_info['days'];
                                            $gd_post['expire_date'] = date_i18n( 'Y-m-d', strtotime( $current_date . '+' . (int)$package_info['days'] . ' days' ) );
                                        } else {
                                            $gd_post['expire_date'] = 'Never';
                                        }
                                    }
                                    
                                    $gd_post['package_id'] = $package_id;
                                }

                                $table = $plugin_prefix . $post_type . '_detail';
                                
                                if ($post_type == 'gd_event') {
                                    $gd_post = geodir_imex_process_event_data($gd_post);
                                }
                                
                                if (isset($gd_post['post_id'])) {
                                    unset($gd_post['post_id']);
                                }

                                // Export franchise fields
                                $is_franchise_active = is_plugin_active( 'geodir_franchise/geodir_franchise.php' ) && geodir_franchise_enabled( $post_type ) ? true : false;
                                if ($is_franchise_active) {
                                    if ( isset( $gd_post['gd_is_franchise'] ) && empty( $gd_post['franchise'] ) ) {
                                        if ( absint( $gd_post['gd_is_franchise'] ) != 0 ) {
                                            $gd_franchise_lock = array();
                                            
                                            if ( isset( $gd_post['gd_franchise_lock'] ) ) {
                                                $gd_franchise_lock = str_replace(" ", "", $gd_post['gd_franchise_lock'] );
                                                $gd_franchise_lock = trim( $gd_franchise_lock );
                                                $gd_franchise_lock = explode( ",", $gd_franchise_lock );
                                            }
                                            
                                            update_post_meta( $saved_post_id, 'gd_is_franchise', 1 );
                                            update_post_meta( $saved_post_id, 'gd_franchise_lock', $gd_franchise_lock );
                                        } else {
                                            if ( function_exists( 'geodir_franchise_remove_franchise' ) ) {
                                                geodir_franchise_remove_franchise( $saved_post_id );
                                            }
                                        }
                                    } else {
                                        if ( isset( $gd_post['franchise'] ) && (int)$gd_post['franchise'] > 0 && geodir_franchise_check( (int)$gd_post['franchise'] ) ) {
                                            geodir_save_post_meta( $saved_post_id, 'franchise', (int)$gd_post['franchise'] );
                                        }
                                    }
                                }
                                
                                if (!empty($save_post['post_category']) && is_array($save_post['post_category'])) {
                                    $save_post['post_category'] = array_unique( array_map( 'intval', $save_post['post_category'] ) );
                                    if ($default_category_id) {
                                        $save_post['post_default_category'] = $default_category_id;
                                        $gd_post['default_category'] = $default_category_id;
                                    }
                                    $gd_post[$cat_taxonomy] = $save_post['post_category'];
                                }
                                $xtimings['###7'] = microtime(true)-$xstart;
                                // Save post info
                                geodir_save_post_info( $saved_post_id, $gd_post );
                                $xtimings['###8'] = microtime(true)-$xstart;
                                // post taxonomies
                                if ( !empty( $save_post['post_category'] ) ) {
                                    wp_set_object_terms( $saved_post_id, $save_post['post_category'], $cat_taxonomy );
                                    
                                    $post_default_category = isset( $save_post['post_default_category'] ) ? $save_post['post_default_category'] : '';
                                    if ($default_category_id) {
                                        $post_default_category = $default_category_id;
                                    }
                                    $post_cat_ids = geodir_get_post_meta($saved_post_id, $cat_taxonomy);
                                    $save_post['post_category'] = !empty($post_cat_ids) ? explode(",", trim($post_cat_ids, ",")) : $save_post['post_category'];
                                    $post_category_str = !empty($save_post['post_category']) ? implode(",y:#", $save_post['post_category']) . ',y:' : '';
                                    
                                    if ($post_category_str != '' && $post_default_category) {
                                        $post_category_str = str_replace($post_default_category . ',y:', $post_default_category . ',y,d:', $post_category_str);
                                    }
                                    
                                    $post_category_str = $post_category_str != '' ? array($cat_taxonomy => $post_category_str) : '';
                                    
                                    geodir_set_postcat_structure( $saved_post_id, $cat_taxonomy, $post_default_category, $post_category_str );
                                }
                                $xtimings['###8.1'] = microtime(true)-$xstart;
                                if ( !empty( $save_post['post_tags'] ) ) {
                                    wp_set_object_terms( $saved_post_id, $save_post['post_tags'], $tags_taxonomy );
                                }
                                $xtimings['###9'] = microtime(true)-$xstart;
                                // Post images
                                if ( !empty( $post_images ) ) {
                                    $post_images = array_unique($post_images);
                                    
                                    $old_post_images_arr = array();
                                    $saved_post_images_arr = array();
                                    
                                    $order = 1;
                                    
                                    $old_post_images = geodir_get_images( $saved_post_id );
                                    $xtimings['###9.1'] = microtime(true)-$xstart;
                                    if (!empty($old_post_images)) {
                                        foreach( $old_post_images as $old_post_image ) {
                                            if (!empty($old_post_image) && isset($old_post_image->file) && $old_post_image->file != '') {
                                                $old_post_images_arr[] = $old_post_image->file;
                                            }
                                        }
                                    }

                                    foreach ( $post_images as $post_image ) {
                                        $image_name = basename( $post_image );
                                        $saved_post_images_arr[] = $image_name;
                                        
                                        if (!empty($old_post_images_arr) && in_array( $image_name, $old_post_images_arr) ) {
                                            continue; // Skip if image already exists.
                                        }
                                        
                                        $image_name_parts = explode( '.', $image_name );
                                        array_pop( $image_name_parts );
                                        $proper_image_name = implode( '.', $image_name_parts );
                                        $xtimings['###9.2'] = microtime(true)-$xstart;
                                        $arr_file_type = wp_check_filetype( $image_name );
                                        $xtimings['###9.3'] = microtime(true)-$xstart;
                                        if ( !empty( $arr_file_type ) ) {
                                            $uploaded_file_type = $arr_file_type['type'];
                                            
                                            $attachment = array();
                                            $attachment['post_id'] = $saved_post_id;
                                            $attachment['title'] = $proper_image_name;
                                            $attachment['content'] = '';
                                            $attachment['file'] = $uploads_subdir . '/' . $image_name;
                                            $attachment['mime_type'] = $uploaded_file_type;
                                            $attachment['menu_order'] = $order;
                                            $attachment['is_featured'] = 0;

                                            $attachment_set = '';
                                            foreach ( $attachment as $key => $val ) {
                                                if ( $val != '' ) {
                                                    $attachment_set .= $key . " = '" . $val . "', ";
                                                }
                                            }
                                            $attachment_set = trim( $attachment_set, ", " );
                                                                                        
                                            // Add new attachment
                                            $xtimings['###9.4'] = microtime(true)-$xstart;
                                            $wpdb->query( "INSERT INTO " . GEODIR_ATTACHMENT_TABLE . " SET " . $attachment_set );
                                            $xtimings['###9.5'] = microtime(true)-$xstart;
                                            $order++;
                                        }
                                    }

                                    $saved_post_images_sql = !empty($saved_post_images_arr) ? " AND ( file NOT LIKE '%/" . implode("' AND file NOT LIKE '%/",  $saved_post_images_arr) . "' )" : '';
                                    // Remove previous attachment
                                    $wpdb->query( "DELETE FROM " . GEODIR_ATTACHMENT_TABLE . " WHERE post_id = " . (int)$saved_post_id . " " . $saved_post_images_sql );
                                    $xtimings['###9.6'] = microtime(true)-$xstart;
                                    if ( !empty( $saved_post_images_arr ) ) {
                                        geodir_set_wp_featured_image($saved_post_id);
                                        $xtimings['###9.7'] = microtime(true)-$xstart;
                                        /*
                                        $menu_order = 1;
                                        
                                        foreach ( $saved_post_images_arr as $img_name ) {
                                            $wpdb->query( $wpdb->prepare( "UPDATE " . GEODIR_ATTACHMENT_TABLE . " SET menu_order = %d WHERE post_id =%d AND file LIKE %s", array( $menu_order, $saved_post_id, '%/' . $img_name ) ) );
                                            
                                            if( $menu_order == 1 ) {
                                                if ( $featured_image = $wpdb->get_var( $wpdb->prepare( "SELECT file FROM " . GEODIR_ATTACHMENT_TABLE . " WHERE post_id =%d AND file LIKE %s", array( $saved_post_id, '%/' . $img_name ) ) ) ) {
                                                    $wpdb->query( $wpdb->prepare( "UPDATE " . $table . " SET featured_image = %s WHERE post_id =%d", array( $featured_image, $saved_post_id ) ) );
                                                }
                                            }
                                            $menu_order++;
                                        }*/
                                    }
                                    
                                    if ( $order > 1 ) {
                                        $images++;
                                    }
                                }
                                $xtimings['###10'] = microtime(true)-$xstart;
                                /** This action is documented in geodirectory-functions/post-functions.php */
                                do_action( 'geodir_after_save_listing', $saved_post_id, $gd_post );
                                $xtimings['###11'] = microtime(true)-$xstart;
                                if (isset($is_featured)) {
                                    geodir_save_post_meta($saved_post_id, 'is_featured', $is_featured);
                                }
                                if (isset($gd_post['alive_days'])) {
                                    geodir_save_post_meta($saved_post_id, 'alive_days', $gd_post['alive_days']);
                                }
                                if (isset($gd_post['expire_date'])) {
                                    geodir_save_post_meta($saved_post_id, 'expire_date', $gd_post['expire_date']);
                                }
                                $xtimings['###12'] = microtime(true)-$xstart;
                            }
                            
                            // WPML
                            if ($is_wpml && $language != '') {
                                $sitepress->switch_lang($active_lang, true);
                            }
                            // WPML
                        }
                    }
                }

                //undo some stuff to make the import quicker
                wp_defer_term_counting( false );
                wp_defer_comment_counting( false );
                $wpdb->query( 'COMMIT;' );
                $wpdb->query( 'SET autocommit = 1;' );
                $xtimings['###13'] = microtime(true)-$xstart;
                $json = array();
                $json['processed'] = $processed_actual;
                $json['created'] = $created;
                $json['updated'] = $updated;
                $json['skipped'] = $skipped;
                $json['invalid'] = $invalid;
                $json['invalid_addr'] = $invalid_addr;
                $json['images'] = $images;
                $json['timing'] = microtime(true)-$xstart;
                $json['timings'] = $xtimings;
                

                wp_send_json( $json );
                exit;
            } else if ( $task == 'import_loc' ) {
                global $gd_post_types;
                $gd_post_types = $post_types;
                
                if (!empty($file)) {
                    $columns = isset($file[0]) ? $file[0] : NULL;
                    
                    if (empty($columns) || (!empty($columns) && $columns[0] == '')) {
                        $json['error'] = __('The file you are uploading is not valid. There are problems with the file columns.', 'geodirectory');
                        wp_send_json( $json );
                    }
                    
                    $gd_error_log = __('GD IMPORT LOCATIONS [ROW %d]:', 'geodirectory');
                    $gd_error_location = __( 'Could not be saved due to blank/invalid address(city, region, country, latitude, longitude)', 'geodirectory' );
                    for ($i = 1; $i <= $limit; $i++) {
                        $index = $processed + $i;
                        
                        if (isset($file[$index])) {
                            $row = $file[$index];
                            $row = array_map( 'trim', $row );
                            $data = array();
                            
                            foreach ($columns as $c => $column ) {
                                if (in_array($column, array('location_id', 'latitude', 'longitude', 'city', 'city_slug', 'region', 'country', 'city_meta_title', 'city_meta_desc', 'city_desc', 'region_meta_title', 'region_meta_desc', 'region_desc', 'country_meta_title', 'country_meta_desc', 'country_desc'))) {
                                    $data[$column] = $row[$c];
                                }
                            }

                            if ( empty($data['city']) || empty($data['region']) || empty($data['country']) || empty($data['latitude']) || empty($data['longitude']) ) {
                                $invalid++;
                                geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_location );
                                continue;
                            }
                            
                            $data['location_id'] = isset($data['location_id']) ? absint($data['location_id']) : 0;
                            
                            if ( $import_choice == 'update' ) {
                                if ( (int)$data['location_id'] > 0 && $location = geodir_get_location_by_id( '', (int)$data['location_id'] ) ) {
                                    if ( $location_id = geodir_location_update_city( $data, true, $location ) ) {
                                        $updated++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_location );
                                    }
                                } else if ( !empty( $data['city_slug'] ) && $location = geodir_get_location_by_slug( 'city', array( 'city_slug' => $data['city_slug'] ) ) ) {
                                    $data['location_id'] = (int)$location->location_id;
                                    
                                    if ( $location = geodir_get_location_by_slug( 'city', array( 'city_slug' => $data['city_slug'], 'country' => $data['country'], 'region' => $data['region'] ) ) ) {
                                        $data['location_id'] = (int)$location->location_id;
                                    } else if ( $location = geodir_get_location_by_slug( 'city', array( 'city_slug' => $data['city_slug'], 'region' => $data['region'] ) ) ) {
                                        $data['location_id'] = (int)$location->location_id;
                                    } else if ( $location = geodir_get_location_by_slug( 'city', array( 'city_slug' => $data['city_slug'], 'country' => $data['country'] ) ) ) {
                                        $data['location_id'] = (int)$location->location_id;
                                    }
                                    
                                    if ( $location_id = geodir_location_update_city( $data, true, $location ) ) {
                                        $updated++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_location );
                                    }
                                } else {
                                    if ( $location_id = geodir_location_insert_city( $data, true ) ) {
                                        $created++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_location );
                                    }
                                }
                            } elseif ( $import_choice == 'skip' ) {
                                if ( (int)$data['location_id'] > 0 && $location = geodir_get_location_by_id( '', (int)$data['location_id'] ) ) {
                                    $skipped++;
                                } else if ( !empty( $data['city_slug'] ) && $location = geodir_get_location_by_slug( 'city', array( 'city_slug' => $data['city_slug'] ) ) ) {
                                    $skipped++;
                                } else {
                                    if ( $location_id = geodir_location_insert_city( $data, true ) ) {
                                        $created++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_location );
                                    }
                                }
                            } else {
                                $invalid++;
                                geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_location );
                            }
                        }
                    }
                }
                
                $json = array();
                $json['processed'] = $limit;
                $json['created'] = $created;
                $json['updated'] = $updated;
                $json['skipped'] = $skipped;
                $json['invalid'] = $invalid;
                $json['images'] = $images;
                
                wp_send_json( $json );
            } else if ( $task == 'import_hood' ) {               
                if (!empty($file)) {
                    $columns = isset($file[0]) ? $file[0] : NULL;
                    
                    if (empty($columns) || (!empty($columns) && $columns[0] == '')) {
                        $json['error'] = __('The file you are uploading is not valid. There are problems with the file columns.', 'geodirectory');
                        wp_send_json( $json );
                    }
                    
                    $gd_error_log = __('GD IMPORT NEIGHBOURHOODS [ROW %d]:', 'geodirectory');
                    $gd_error_hood = __( 'Could not be saved due to invalid neighbourhood data(name, latitude, longitude) or invalid location data(either location_id or city/region/country is empty)', 'geodirectory' );
                    for ($i = 1; $i <= $limit; $i++) {
                        $index = $processed + $i;
                        
                        if (isset($file[$index])) {
                            $row = $file[$index];
                            $row = array_map( 'trim', $row );
                            $data = array();
                            
                            foreach ($columns as $c => $column) {
                                if (in_array($column, array('neighbourhood_id', 'neighbourhood_name', 'neighbourhood_slug', 'latitude', 'longitude', 'location_id', 'city', 'region', 'country'))) {
                                    $data[$column] = sanitize_text_field($row[$c]);
                                }
                            }

                            if (empty($data['neighbourhood_name']) || empty($data['latitude']) || empty($data['longitude'])) {
                                $invalid++;
                                geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_hood );
                                continue;
                            }
                            
                            $location_info = array();
                            if (!empty($data['location_id']) && (int)$data['location_id'] > 0) {
                                $location_info = geodir_get_location_by_id('', (int)$data['location_id']);
                            } else if (!empty($data['city']) && !empty($data['region']) && !empty($data['country'])) {
                                $location_info = geodir_get_location_by_slug('city', array('fields' => 'location_id', 'city' => $data['city'], 'country' => $data['country'], 'region' => $data['region']));
                            }

                            if (empty($location_info)) {
                                $invalid++;
                                geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_hood );
                                continue;
                            }
                            
                            $location_id = $location_info->location_id;

                            $data['neighbourhood_id'] = isset($data['neighbourhood_id']) ? absint($data['neighbourhood_id']) : 0;
                            
                            $hood_data = array();
                            $hood_data['hood_name'] = $data['neighbourhood_name'];
                            $hood_data['hood_slug'] = $data['neighbourhood_slug'];
                            $hood_data['hood_latitude'] = $data['latitude'];
                            $hood_data['hood_longitude'] = $data['longitude'];
                            $hood_data['hood_location_id'] = $location_id;
                                    
                            if ( $import_choice == 'update' ) {
                                if ((int)$data['neighbourhood_id'] > 0 && ($neighbourhood = geodir_location_get_neighbourhood_by_id((int)$data['neighbourhood_id']))) {
                                    $hood_data['hood_id'] = (int)$data['neighbourhood_id'];
                                    
                                    if ($neighbourhood = geodir_location_insert_update_neighbourhood($hood_data)) {
                                        $updated++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_hood );
                                    }
                                } else if (!empty($data['neighbourhood_slug']) && ($neighbourhood = geodir_location_get_neighbourhood_by_id($data['neighbourhood_slug'], true))) {
                                    $hood_data['hood_id'] = (int)$neighbourhood->hood_id;
                                    
                                    if ($neighbourhood = geodir_location_insert_update_neighbourhood($hood_data)) {
                                        $updated++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_hood );
                                    }
                                } else {
                                    if ($neighbourhood = geodir_location_insert_update_neighbourhood($hood_data)) {
                                        $created++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_hood );
                                    }
                                }
                            } elseif ( $import_choice == 'skip' ) {
                                if ((int)$data['neighbourhood_id'] > 0 && ($neighbourhood = geodir_location_get_neighbourhood_by_id((int)$data['neighbourhood_id']))) {
                                    $skipped++;
                                } else if (!empty($data['neighbourhood_slug']) && ($neighbourhood = geodir_location_get_neighbourhood_by_id($data['neighbourhood_slug'], true))) {
                                    $skipped++;
                                } else {
                                    
                                    if ($neighbourhood = geodir_location_insert_update_neighbourhood($hood_data)) {
                                        $created++;
                                    } else {
                                        $invalid++;
                                        geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_hood );
                                    }
                                }
                            } else {
                                $invalid++;
                                geodir_error_log( wp_sprintf( $gd_error_log, ($index + 1) ) . ' ' . $gd_error_hood );
                            }
                        }
                    }
                }
                
                $json = array();
                $json['processed'] = $limit;
                $json['created'] = $created;
                $json['updated'] = $updated;
                $json['skipped'] = $skipped;
                $json['invalid'] = $invalid;
                $json['images'] = $images;
                
                wp_send_json( $json );
            }
        }
        break;
        case 'import_finish':{
            /**
             * Run an action when an import finishes.
             *
             * This action can be used to fire functions after an import ends.
             *
             * @since 1.5.3
             * @package GeoDirectory
             */
            do_action('geodir_import_finished');
        }
        break;

    }
    echo '0';
    gd_die();
}