Sid Gifari File Manager
🏠 Root
/
home2
/
iuywvcmy
/
public_html
/
fani
/
wp-content
/
plugins
/
wp-google-map-plugin
/
modules
/
location
/
Editing: model.location.php
<?php if ( ! defined( 'ABSPATH' ) ) exit; /** * Class: WPGMP_Model_Location * * Handles CRUD operations for Locations. * Adds developer-friendly hooks to extend behavior. * * @package Maps * @version 3.0.0 */ if ( ! class_exists( 'WPGMP_Model_Location' ) ) { class WPGMP_Model_Location extends FlipperCode_Model_Base { protected $validations; protected $query; public function __construct() { $this->table = TBL_LOCATION; $this->unique = 'location_id'; $this->validations = array( 'location_title' => array( 'req' => esc_html__( 'Please enter location title.', 'wp-google-map-plugin' ), 'max=255' => esc_html__( 'Location title cannot contain more than 255 characters.', 'wp-google-map-plugin' ) ), 'location_address' => array( 'req' => esc_html__( 'Please enter location address.', 'wp-google-map-plugin' ) ) ); } public function navigation() { return array( 'wpgmp_form_location' => esc_html__( 'Add Location', 'wp-google-map-plugin' ), 'wpgmp_manage_location' => esc_html__( 'Manage Locations', 'wp-google-map-plugin' ), 'wpgmp_import_location' => esc_html__( 'Import Locations', 'wp-google-map-plugin' ), ); } /** * Creates SQL query to install locations table on plugin activation. * * @return string SQL CREATE TABLE statement. */ public function install() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); $table_name = $wpdb->prefix . 'map_locations'; return "CREATE TABLE {$table_name} ( location_id INT(11) NOT NULL AUTO_INCREMENT, location_title VARCHAR(255), location_address VARCHAR(255), location_draggable VARCHAR(255), location_infowindow_default_open VARCHAR(255), location_animation VARCHAR(255), location_latitude VARCHAR(255), location_longitude VARCHAR(255), location_city VARCHAR(255), location_state VARCHAR(255), location_country VARCHAR(255), location_postal_code VARCHAR(255), location_author INT(11), location_messages TEXT, location_settings TEXT, location_group_map TEXT, location_extrafields TEXT, PRIMARY KEY (location_id) ) $charset_collate;"; } /** * Fetch all location entries optionally by condition. * * @param array $where Filtering condition for fetch. * @return array List of location objects. */ public function fetch( $where = array() ) { $objects = $this->get( $this->table, $where ); foreach ( (array) $objects as $object ) { $object->location_settings = maybe_unserialize( $object->location_settings ); $object->location_extrafields = maybe_unserialize( $object->location_extrafields ); $group_map = maybe_unserialize( $object->location_group_map ); $object->location_group_map = is_array( $group_map ) ? $group_map : array( $object->location_group_map ); if ( ! is_null( $object->location_messages ) ) { $decoded = base64_decode( $object->location_messages ); $parsed = maybe_serialize( $decoded ); if ( is_array( $parsed ) && isset( $parsed['googlemap_infowindow_message_one'] ) ) { $object->location_messages = $parsed['googlemap_infowindow_message_one']; } } /** * Allow plugins to modify location object after fetch. * * @since 3.0.0 * @param object $object Location object. */ do_action( 'wpgmp_after_location_fetched', $object ); } /** * Filter the list of fetched locations. * * @since 3.0.0 * @param array $objects List of location objects. * @param array $where Original condition used. */ return apply_filters( 'wpgmp_location_results', $objects, $where ); } /** * Cancel location import process by deleting uploaded file. * * @return void */ public function cancel_import() { $current_csv = get_option( 'wpgmp_current_csv' ); if ( is_array( $current_csv ) && ! empty( $current_csv['file'] ) && file_exists( $current_csv['file'] ) ) { unlink( $current_csv['file'] ); } delete_option( 'wpgmp_current_csv' ); do_action( 'wpgmp_import_cancelled', $current_csv ); } public function update_loc() { global $_POST; $entityID = ''; if ( isset( $_REQUEST['_wpnonce'] ) ) { $nonce = sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ); } if ( isset( $nonce ) and ! wp_verify_nonce( $nonce, 'wpgmp-nonce' ) ) { die( 'Cheating...' ); } $all_new_locations = json_decode( wp_unslash( $_POST['fc-location-new-set'] ) ); if ( is_array( $all_new_locations ) and ! empty( $all_new_locations ) ) { foreach ( $all_new_locations as $location ) { $data['location_latitude'] = sanitize_text_field( $location->latitude ); $data['location_longitude'] = sanitize_text_field( $location->longitude ); if ( $location->id > 0 ) { $where[ $this->unique ] = $location->id; $data = apply_filters('wpgmp_location_save',$data,$where); $result = FlipperCode_Database::insert_or_update( TBL_LOCATION, $data, $where ); } } } if ( false === $result ) { $response['error'] = esc_html__( 'Something went wrong. Please try again.', 'wp-google-map-plugin' ); } elseif ( $entityID > 0 ) { $response['success'] = esc_html__( 'Location updated successfully', 'wp-google-map-plugin' ); } else { $response['success'] = esc_html__( 'Location added successfully.', 'wp-google-map-plugin' ); } return $response; } public function write_to_db_backup(){ $entityID = ''; if ( isset( $_POST['entityID'] ) ) $entityID = intval( wp_unslash( $_POST['entityID'] ) ); if ( isset( $_POST['location_messages'] ) ) $data['location_messages'] = wp_unslash( $_POST['location_messages'] ); if ( isset( $_POST['extensions_fields'] ) ) $_POST['location_settings']['extensions_fields'] = $_POST['extensions_fields']; $data['location_settings'] = serialize( wp_unslash( $_POST['location_settings'] ) ); if ( isset($_POST['location_group_map']) && ! is_array( $_POST['location_group_map'] ) and '' != sanitize_text_field( $_POST['location_group_map'] ) ) { $expolded_cat = explode( ',', sanitize_text_field( $_POST['location_group_map'] ) ); $data['location_group_map'] = serialize( wp_unslash($expolded_cat) ); } elseif ( isset($_POST['location_group_map']) && is_array( $_POST['location_group_map'] ) and ! empty( $_POST['location_group_map'] ) ) { $data['location_group_map'] = serialize( wp_unslash( $_POST['location_group_map'] ) ); } else { $data['location_group_map'] = ''; } $extra_fields = ''; if( isset( $_POST['location_extrafields'] ) ) { $extra_fields = wp_unslash( $_POST['location_extrafields'] ); } $data['location_extrafields'] = serialize( wp_unslash( $extra_fields ) ); $data['location_title'] = sanitize_text_field( wp_unslash( $_POST['location_title'] ) ); $data['location_address'] = sanitize_text_field( wp_unslash( $_POST['location_address'] ) ); $data['location_latitude'] = sanitize_text_field( wp_unslash( $_POST['location_latitude'] ) ); $data['location_longitude'] = sanitize_text_field( wp_unslash( $_POST['location_longitude'] ) ); $data['location_city'] = sanitize_text_field( wp_unslash( $_POST['location_city'] ) ); $data['location_state'] = sanitize_text_field( wp_unslash( $_POST['location_state'] ) ); $data['location_country'] = sanitize_text_field( wp_unslash( $_POST['location_country'] ) ); $data['location_postal_code'] = sanitize_text_field( wp_unslash( $_POST['location_postal_code'] ) ); $data['location_draggable'] = ''; $data['location_infowindow_default_open'] = ''; $data['location_animation'] = sanitize_text_field( wp_unslash( $_POST['location_animation'] ) ); $data['location_author'] = get_current_user_id(); if ( $entityID > 0 ) { $where[ $this->unique ] = $entityID; } else { $where = ''; } $data = apply_filters('wpgmp_location_save',$data,$where); $result = FlipperCode_Database::insert_or_update( $this->table, $data, $where ); if($result !== false){ $extra_field_val = get_option( 'wpgmp_settings', true ); $extra_val_impolode = array(); if(!isset($extra_field_val['wpgmp_extrafield_val'])){ WPGMP_Google_Maps_Lite::wpgmp_set_extrafields(); }else{ if (is_array($extra_fields)) { foreach($extra_fields as $ex_key => $ex_val){ if(!isset($extra_field_val['wpgmp_extrafield_val'][$ex_key])){ $extra_field_val['wpgmp_extrafield_val'][$ex_key] = array(); if(!empty($ex_val)){ $extra_val_impolode = array_map('trim',explode(',', $ex_val)); $extra_field_val['wpgmp_extrafield_val'][$ex_key] = $extra_val_impolode; } }else{ if(empty($extra_field_val['wpgmp_extrafield_val'][$ex_key])){ if(!empty($ex_val)){ $extra_val_impolode = array_map('trim',explode(',', $ex_val)); $extra_field_val['wpgmp_extrafield_val'][$ex_key] = $extra_val_impolode; } }else{ if(!empty($ex_val)){ $extra_val_impolode = array_map('trim',explode(',', $ex_val)); $temp_store = $extra_field_val['wpgmp_extrafield_val'][$ex_key]; foreach($extra_val_impolode as $ev_val){ if (!in_array(strtolower($ev_val), array_map('strtolower', $temp_store))) { $extra_field_val['wpgmp_extrafield_val'][$ex_key][] = $ev_val; } } } } } } } update_option( 'wpgmp_settings', $extra_field_val ); } } return $result; } /** * Write location data to DB from POST. * * @return int|false Result from insert_or_update */ public function write_to_db() { $entityID = isset( $_POST['entityID'] ) ? intval( wp_unslash( $_POST['entityID'] ) ) : 0; // Gather and sanitize input fields. $extra_fields = isset( $_POST['location_extrafields'] ) ? wp_unslash( $_POST['location_extrafields'] ) : array(); $data = array( 'location_title' => sanitize_text_field( wp_unslash( $_POST['location_title'] ) ), 'location_address' => sanitize_text_field( wp_unslash( $_POST['location_address'] ) ), 'location_latitude' => sanitize_text_field( wp_unslash( $_POST['location_latitude'] ) ), 'location_longitude' => sanitize_text_field( wp_unslash( $_POST['location_longitude'] ) ), 'location_city' => sanitize_text_field( wp_unslash( $_POST['location_city'] ) ), 'location_state' => sanitize_text_field( wp_unslash( $_POST['location_state'] ) ), 'location_country' => sanitize_text_field( wp_unslash( $_POST['location_country'] ) ), 'location_postal_code' => sanitize_text_field( wp_unslash( $_POST['location_postal_code'] ) ), 'location_messages' => isset( $_POST['location_messages'] ) ? wp_unslash( $_POST['location_messages'] ) : '', 'location_animation' => sanitize_text_field( wp_unslash( $_POST['location_animation'] ) ), 'location_author' => get_current_user_id(), 'location_draggable' => '', 'location_infowindow_default_open' => '', ); // Settings if ( isset( $_POST['extensions_fields'] ) ) { $_POST['location_settings']['extensions_fields'] = $_POST['extensions_fields']; } $data['location_settings'] = serialize( wp_unslash( $_POST['location_settings'] ?? array() ) ); // Category mapping if ( isset( $_POST['location_group_map'] ) ) { $cats = is_array( $_POST['location_group_map'] ) ? $_POST['location_group_map'] : explode( ',', sanitize_text_field( $_POST['location_group_map'] ) ); $data['location_group_map'] = serialize( wp_unslash( $cats ) ); } else { $data['location_group_map'] = ''; } $data['location_extrafields'] = serialize( $extra_fields ); $where = $entityID > 0 ? array( $this->unique => $entityID ) : ''; $data = apply_filters( 'wpgmp_location_save', $data, $where ); $result = FlipperCode_Database::insert_or_update( $this->table, $data, $where ); // Manage unique extra field values if ( $result !== false ) { $settings = get_option( 'wpgmp_settings', true ); $settings['wpgmp_extrafield_val'] = $settings['wpgmp_extrafield_val'] ?? array(); if ( is_array( $extra_fields ) ) { foreach ( $extra_fields as $key => $val ) { if ( ! isset( $settings['wpgmp_extrafield_val'][ $key ] ) ) { $settings['wpgmp_extrafield_val'][ $key ] = array(); } $vals = array_map( 'trim', explode( ',', $val ) ); foreach ( $vals as $v ) { if ( $v && ! in_array( strtolower( $v ), array_map( 'strtolower', $settings['wpgmp_extrafield_val'][ $key ] ) ) ) { $settings['wpgmp_extrafield_val'][ $key ][] = $v; } } } } update_option( 'wpgmp_settings', $settings ); if ( empty( $settings['wpgmp_extrafield_val'] ) ) { WPGMP_Google_Maps_Lite::wpgmp_set_extrafields(); } } return $result; } public function save_via_rest() { //Rest Validations $rest_errors = []; if(!isset($_POST['location_title']) || empty($_POST['location_title'])) $rest_errors[] = esc_html__( 'Please enter location title.', 'wp-google-map-plugin' ); if(!isset($_POST['location_address']) || empty($_POST['location_address'])) $rest_errors[] = esc_html__( 'Please enter location address.', 'wp-google-map-plugin' ); if(!isset($_POST['location_latitude']) || empty($_POST['location_latitude'])) $rest_errors[] = esc_html__( 'Please enter location latitude.', 'wp-google-map-plugin' ); if(!isset($_POST['location_longitude']) || empty($_POST['location_longitude'])) $rest_errors[] = esc_html__( 'Please enter location longitude.', 'wp-google-map-plugin' ); $rest_errors = apply_filters('wpgmp_location_rest_validation',$rest_errors,$_POST); if ( is_array( $rest_errors ) && ! empty( $rest_errors ) ){ return new WP_Error( 'wpgmp_rest_validation_failed', esc_html__( 'Please checkout the errors and fix those to proceed with this request.', 'wp-google-map-plugin' ), array( 'status' => 422, 'errors' => $rest_errors ) ); } //Write to DB $result = $this->write_to_db(); $action = (isset( $_POST['entityID'] ) && !empty($_POST['entityID']) ) ? 'update' : 'create'; // Handle the result if ( false !== $result ) { return new WP_REST_Response( array( 'success' => true , 'wpgmp_module' => 'location' , 'action' => $action ), 200 ); } else { return new WP_REST_Response( array( 'success' => false ), 400 ); } } /** * Save location data via form submission */ public function save() { if ( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'wpgmp-nonce' ) ) { die( 'You are not allowed to save changes!' ); } $this->verify( $_POST ); $this->errors = apply_filters( 'wpgmp_location_validation', $this->errors, $_POST ); if ( is_array( $this->errors ) && ! empty( $this->errors ) ) { $this->throw_errors(); } $entityID = isset( $_POST['entityID'] ) ? intval( $_POST['entityID'] ) : 0; $result = $this->write_to_db(); do_action( 'wpgmp_after_location_save', $result, $_POST ); if ( false === $result ) { $response['error'] = esc_html__( 'Something went wrong. Please try again.', 'wp-google-map-plugin' ); } elseif ( $entityID > 0 ) { $response['success'] = esc_html__( 'Location was updated successfully.', 'wp-google-map-plugin' ); } else { $response['success'] = esc_html__( 'Location was added successfully.', 'wp-google-map-plugin' ); } $response['last_db_id'] = $result; return $response; } /** * Delete location by ID. */ public function delete() { if ( isset( $_GET['location_id'] ) ) { $id = intval( wp_unslash( $_GET['location_id'] ) ); do_action( 'wpgmp_before_location_delete', $id ); $connection = FlipperCode_Database::connect(); $this->query = $connection->prepare( "DELETE FROM $this->table WHERE $this->unique='%d'", $id ); $result = FlipperCode_Database::non_query( $this->query, $connection ); do_action( 'wpgmp_after_location_delete', $id, $result ); return $result; } } /** * Export locations to file */ public function export( $type = 'csv' ) { $selected_ids = isset( $_POST['id'] ) && is_array( $_POST['id'] ) ? $_POST['id'] : array(); $locations = $this->fetch(); $extra_fields = maybe_unserialize( get_option( 'wpgmp_location_extrafields', [] ) ); $extra_fields = is_array( $extra_fields ) ? $extra_fields : array(); $category_data = array(); $modelFactory = new WPGMP_Model(); $category_obj = $modelFactory->create_object( 'group_map' ); $categories = $category_obj->fetch(); foreach ( (array) $categories as $cat ) { $category_data[ $cat->group_map_id ] = $cat->group_map_title; } $data_rows = array(); foreach ( $locations as $location ) { if ( ! empty( $selected_ids ) && ! in_array( $location->location_id, $selected_ids ) ) continue; $assigned_cats = array(); foreach ( (array) $location->location_group_map as $cat_id ) { if ( isset( $category_data[ $cat_id ] ) ) { $assigned_cats[] = $category_data[ $cat_id ]; } } $categories_str = implode( ',', $assigned_cats ); $row = array( 'location_id' => $location->location_id, 'location_title' => $location->location_title, 'location_address' => $location->location_address, 'location_latitude' => $location->location_latitude, 'location_longitude' => $location->location_longitude, 'location_city' => $location->location_city, 'location_state' => $location->location_state, 'location_country' => $location->location_country, 'location_postal_code' => $location->location_postal_code, 'location_messages' => $location->location_messages, 'location_group_map' => $categories_str, ); foreach ( $extra_fields as $label ) { $slug = sanitize_title( $label ); $row[ $label ] = isset( $location->location_extrafields[ $slug ] ) ? $location->location_extrafields[ $slug ] : ''; } foreach ( (array) $location->location_settings as $key => $val ) { $row[ $key ] = $val; } $data_rows[] = apply_filters( 'wpgmp_location_export_row', $row, $location ); } $headers = array( 'ID','Title','Address','Latitude','Longitude','City','State','Country','Postal Code','Message','Categories' ); $headers = array_merge( $headers, $extra_fields, array( 'Location Click', 'Redirect URL','Open New Tab','Location Image' ) ); $filename = sanitize_file_name( 'location_' . $type . '_' . time() ); do_action( 'wpgmp_before_location_export', $data_rows ); $exporter = new FlipperCode_Export_Import( $headers, $data_rows ); $exporter->export( $type, $filename ); die(); } /** * Import Location via CSV,JSON,XML and Excel. * * @return array Success or Failure error message. */ public function map_fields() { $response = array(); // Validate nonce. if ( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ), 'wpgmp-nonce' ) ) { die( esc_html__( 'Cheating...', 'wp-google-map-plugin' ) ); } if ( isset( $_POST['import_loc'] ) ) { // Check for valid file. if ( empty( $_FILES['import_file']['tmp_name'] ) ) { $response['error'] = esc_html__( 'Please select file to be imported.', 'wp-google-map-plugin' ); } elseif ( ! $this->validate_extension( sanitize_file_name( wp_unslash( $_FILES['import_file']['name'] ) ) ) ) { $response['error'] = esc_html__( 'Please upload a valid CSV file.', 'wp-google-map-plugin' ); } else { // Handle the file upload. if ( ! function_exists( 'wp_handle_upload' ) ) { require_once ABSPATH . 'wp-admin/includes/file.php'; } $movefile = wp_handle_upload( $_FILES['import_file'], array( 'test_form' => false ) ); if ( isset( $movefile['error'] ) ) { $response['error'] = $movefile['error']; } else { update_option( 'wpgmp_current_csv', $movefile ); /** * Fires after CSV upload succeeded and stored. * * @param array $movefile The file upload details. */ do_action( 'wpgmp_after_location_csv_upload', $movefile ); } } return $response; } return false; } public function import_location1() { $result = false; if ( isset( $_REQUEST['_wpnonce'] ) ) { $nonce = sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ); } if ( ! wp_verify_nonce( $nonce, 'wpgmp-nonce' ) ) { die( 'Cheating...' ); } if ( isset( $_POST['import_loc'] ) ) { $current_csv = get_option( 'wpgmp_current_csv' ); if ( ! is_array( $current_csv ) or ! file_exists( $current_csv['file'] ) ) { $response['error'] = esc_html__( 'Something went wrong. Please start import process again.', 'wp-google-map-plugin' ); return $response; } $csv_columns = wp_unslash( $_POST['csv_columns'] ); $colums_mapping = array(); $duplicate_columns = array(); // Unset unasigned field foreach ( $csv_columns as $key => $value ) { if ( $value == '' ) { unset( $csv_columns[ $key ] ); } } // Find duplicate fields $duplicate_columns = array_count_values( $csv_columns ); $not_allowed = array(); foreach ( $duplicate_columns as $name => $count ) { if ( $count > 1 and $name != 'category' and $name != 'extra_field' ) { $not_allowed[] = $name; } } if ( count( $csv_columns ) == 0 ) { $response['error'] = __( 'Please map locations fields to csv columns.', 'wp-google-map-plugin' ); return $response; } $is_update_process = false; if ( in_array( 'location_id', $csv_columns ) !== false ) { $is_update_process = true; } if ( count( $not_allowed ) > 0 ) { $wrongly_mapped = implode(',',$not_allowed); $response['error'] = esc_html__( 'Duplicate mapping is not allowed except the category field and extra field. Please check these fields : ', 'wp-google-map-plugin' ).$wrongly_mapped; return $response; } // Address and title is required if add process. if ( $is_update_process == false ) { if ( in_array( 'location_address', $csv_columns ) === false or in_array( 'location_title', $csv_columns ) === false ) { $response['error'] = esc_html__( 'Title & Address fields are required.', 'wp-google-map-plugin' ); return $response; } } if ( count( $csv_columns ) > 0 ) { $importer = new FlipperCode_Export_Import(); $file_data = $importer->import( 'csv', $current_csv['file'] ); $current_extra_fields = maybe_unserialize( get_option( 'wpgmp_location_extrafields' ) ); if ( ! is_array( $current_extra_fields ) ) { $current_extra_fields = array(); } if ( ! empty( $file_data ) ) { $modelFactory = new WPGMP_Model(); $category = $modelFactory->create_object( 'group_map' ); $categories = $category->fetch(); $first_row = $file_data[0]; unset( $file_data[0] ); if ( ! empty( $categories ) ) { $categories_data = array(); foreach ( $categories as $cat ) { $categories_data[ $cat->group_map_id ] = strtolower( sanitize_text_field( $cat->group_map_title ) ); } } foreach ( $file_data as $data ) { $all_data_in_string = implode(' ',$data); if( empty( trim($all_data_in_string) ) || trim($all_data_in_string) == '' ) continue; $datas = array(); $category_ids = array(); $extra_fields = array(); $categories = array(); $location_settings = array(); foreach ( $data as $key => $value ) { if ( ! isset( $csv_columns[ $key ] ) || trim( $csv_columns[ $key ] ) == '' ) { continue; } if ( $value != '' and ( $csv_columns[ $key ] == 'location_longitude' or $csv_columns[ $key ] == 'location_latitude' ) ) { $datas[ $csv_columns[ $key ] ] = (float) filter_var( $value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); } elseif ( $csv_columns[ $key ] == 'category' ) { if ( trim( $value != '' ) ) { $all_categories = explode( ',', $value ); if ( is_array( $all_categories ) ) { foreach ( $all_categories as $ci => $cname ) { $categories[] = strtolower( $cname ); } } } } elseif ( $csv_columns[ $key ] == 'onclick' || $csv_columns[ $key ] == 'redirect_link' || $csv_columns[ $key ] == 'redirect_link_window' || $csv_columns[ $key ] == 'featured_image') { $location_settings[ $csv_columns[ $key ] ] = $value; } elseif ( $csv_columns[ $key ] == 'extra_field' ) { $current_extra_fields[] = $first_row[ $key ]; $extra_fields[ sanitize_title( $first_row[ $key ] ) ] = $value; } else { $datas[ $csv_columns[ $key ] ] = trim( $value ); } } if ( ! isset( $categories_data ) ) { $categories_data = array(); } // Find out categories id or insert new category. if ( isset( $categories ) and ! empty( $categories ) ) { $all_cat = $categories; if ( is_array( $all_cat ) ) { foreach ( $all_cat as $cat ) { $cat_id = array_search( sanitize_text_field( $cat ), (array) $categories_data ); if ( false == $cat_id ) { // Create a new category. $new_cat_id = FlipperCode_Database::insert_or_update( TBL_GROUPMAP, array( 'group_map_title' => sanitize_text_field( $cat ), 'group_marker' => WPGMP_Helper::wpgmp_default_marker_icon(), ) ); $category_ids[] = $new_cat_id; $categories_data[ $new_cat_id ] = sanitize_text_field( $cat ); } else { $category_ids[] = $cat_id; } } } } if ( is_array( $category_ids ) and ! empty( $category_ids ) ) { $datas['location_group_map'] = serialize( (array) $category_ids ); } if ( is_array( $extra_fields ) and ! empty( $extra_fields ) ) { $datas['location_extrafields'] = serialize( $extra_fields ); } if ( is_array( $location_settings ) and ! empty( $location_settings ) ) { $datas['location_settings'] = serialize( $location_settings ); } if ( isset( $datas['location_latitude'] ) && trim( $datas['location_latitude'] ) == '' ) { unset( $datas['location_latitude'] ); } if ( isset( $datas['location_longitude'] ) && trim( $datas['location_longitude'] ) == '' ) { unset( $datas['location_longitude'] ); } $entityID = ''; if ( isset( $datas['location_id'] ) ) { $entityID = intval( wp_unslash( $datas['location_id'] ) ); unset( $datas['location_id'] ); } // Rest Columns are extra fields. if ( $entityID > 0 ) { $where[ $this->unique ] = $entityID; } else { $where = ''; } $datas = array_filter( $datas ); if( count( $datas ) == 0 ) continue; $datas = apply_filters('wpgmp_location_before_import',$datas); $result = FlipperCode_Database::insert_or_update( $this->table, $datas, $where ); } $current_extra_fields = array_unique( $current_extra_fields ); update_option( 'wpgmp_location_extrafields', serialize( $current_extra_fields ) ); $response['success'] = count( $file_data ) . ' ' . esc_html__( 'records imported successfully.', 'wp-google-map-plugin' ); if(!isset($extra_field_val['wpgmp_extrafield_val'])){ WPGMP_Google_Maps_Lite::wpgmp_set_extrafields(); } // Here remove the temp file. unlink( $current_csv['file'] ); delete_option( 'wpgmp_current_csv' ); } else { $response['error'] = esc_html__( 'No records found in the csv file.', 'wp-google-map-plugin' ); } } else { $response['error'] = esc_html__( 'Please assign fields to the csv columns.', 'wp-google-map-plugin' ); } return $response; } } /** * Step 2: Import CSV rows into locations table. * * @return array Response with success or error. */ public function import_location() { $response = array(); // Verify nonce. if ( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ), 'wpgmp-nonce' ) ) { die( esc_html__( 'Cheating...', 'wp-google-map-plugin' ) ); } if ( isset( $_POST['import_loc'] ) ) { $current_csv = get_option( 'wpgmp_current_csv' ); if ( ! is_array( $current_csv ) || ! file_exists( $current_csv['file'] ) ) { return array('error' => esc_html__( 'Something went wrong. Please start import process again.', 'wp-google-map-plugin' )); } $csv_columns = array_filter( wp_unslash( $_POST['csv_columns'] ) ); $duplicates = array_count_values( $csv_columns ); $invalid = array(); foreach ( $duplicates as $name => $count ) { if ( $count > 1 && $name !== 'category' && $name !== 'extra_field' ) { $invalid[] = $name; } } if ( count( $invalid ) ) { return array('error' => esc_html__( 'Duplicate mapping not allowed except category/extra_field: ', 'wp-google-map-plugin' ) . implode(', ', $invalid)); } if ( ! in_array( 'location_address', $csv_columns ) || ! in_array( 'location_title', $csv_columns ) ) { return array('error' => esc_html__( 'Title & Address fields are required.', 'wp-google-map-plugin' )); } $importer = new FlipperCode_Export_Import(); $file_data = $importer->import( 'csv', $current_csv['file'] ); if ( empty( $file_data ) ) { return array('error' => esc_html__( 'No records found in the csv file.', 'wp-google-map-plugin' )); } $modelFactory = new WPGMP_Model(); $category = $modelFactory->create_object( 'group_map' ); $category_list = $category->fetch(); $category_map = array(); foreach ( $category_list as $cat ) { $category_map[ strtolower( sanitize_text_field( $cat->group_map_title ) ) ] = $cat->group_map_id; } $current_extra_fields = (array) maybe_unserialize( get_option( 'wpgmp_location_extrafields' ) ); $first_row = $file_data[0]; unset( $file_data[0] ); foreach ( $file_data as $row ) { if ( empty( implode('', $row) ) ) continue; $data = $extra_fields = $settings = array(); $category_ids = array(); foreach ( $row as $col => $value ) { $field = $csv_columns[$col] ?? ''; if ( ! $field ) continue; if ( $field === 'location_latitude' || $field === 'location_longitude' ) { $data[$field] = (float) filter_var( $value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); } elseif ( $field === 'category' ) { foreach ( explode(',', $value) as $cat_title ) { $cat_title = trim(strtolower($cat_title)); if ( $cat_title ) { $category_ids[] = $category_map[$cat_title] ?? $category_map[$cat_title] = FlipperCode_Database::insert_or_update( TBL_GROUPMAP, array( 'group_map_title' => $cat_title, 'group_marker' => WPGMP_Helper::wpgmp_default_marker_icon() ) ); } } } elseif ( $field === 'onclick' || $field === 'redirect_link' || $field === 'redirect_link_window' || $field === 'featured_image' ) { $settings[$field] = $value; } elseif ( $field === 'extra_field' ) { $name = sanitize_title( $first_row[$col] ); $extra_fields[$name] = $value; $current_extra_fields[] = $first_row[$col]; } else { $data[$field] = trim( $value ); } } if ( $category_ids ) $data['location_group_map'] = serialize( $category_ids ); if ( $extra_fields ) $data['location_extrafields'] = serialize( $extra_fields ); if ( $settings ) $data['location_settings'] = serialize( $settings ); if ( isset($data['location_id']) ) { $where = array( $this->unique => intval( $data['location_id'] ) ); unset( $data['location_id'] ); } else { $where = ''; } $data = apply_filters( 'wpgmp_location_before_import', array_filter($data) ); FlipperCode_Database::insert_or_update( $this->table, $data, $where ); } update_option( 'wpgmp_location_extrafields', array_unique($current_extra_fields) ); delete_option( 'wpgmp_current_csv' ); unlink( $current_csv['file'] ); $response['success'] = count($file_data) . ' ' . esc_html__( 'records imported successfully.', 'wp-google-map-plugin' ); } return $response; } } }
Save
Cancel