settings->get_setting( 'access-role' ),
'ewd-otp-import',
array($this, 'display_import_screen')
);
}
public function display_import_screen() {
global $ewd_otp_controller;
$import_permission = $ewd_otp_controller->permissions->check_permission( 'import' );
?>
Import
Upgrade to the premium version to use this feature
handle_spreadsheet_upload();
$custom_fields = $ewd_otp_controller->settings->get_order_custom_fields();
if ( $update['message_type'] != 'Success' ) :
$this->status = false;
$this->message = $update['message'];
add_action( 'admin_notices', array( $this, 'display_notice' ) );
return;
endif;
$excel_url = EWD_OTP_PLUGIN_DIR . '/order-sheets/' . $update['filename'];
// Build the workbook object out of the uploaded spreadsheet
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load( $excel_url );
// Create a worksheet object out of the product sheet in the workbook
$sheet = $spreadsheet->getActiveSheet();
$allowable_custom_fields = array();
foreach ( $custom_fields as $custom_field ) { $allowable_custom_fields[] = $custom_field->name; }
//List of fields that can be accepted via upload
$allowed_fields = array( 'Name', 'Number', 'Order Status', 'Location', 'Display', 'Notes Public', 'Notes Private', 'Email', 'Show in Admin Table', 'Sales Rep ID', 'Customer ID' );
// Get column names
$highest_column = $sheet->getHighestColumn();
$highest_column_index = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString( $highest_column );
for ( $column = 1; $column <= $highest_column_index; $column++ ) {
if ( trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == 'Name' ) { $name_column = $column; }
if ( trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == 'Number' ) { $number_column = $column; }
if ( trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == 'Order Status' ) { $status_column = $column; }
if ( trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == 'Location' ) { $location_column = $column; }
if ( trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == 'Display' or trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == 'Show in Admin Table' ) { $display_column = $column; }
if ( trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == 'Notes Public' ) { $public_notes_column = $column; }
if ( trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == 'Notes Private' ) { $private_notes_column = $column; }
if ( trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == 'Email' ) { $email_column = $column; }
if ( trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == 'Sales Rep ID' ) { $sales_rep_id_column = $column; }
if ( trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == 'Customer ID' ) { $customer_id_column = $column; }
foreach ( $custom_fields as $custom_field ) {
if ( trim( $sheet->getCellByColumnAndRow( $column, 1 )->getValue() ) == $custom_field->name ) { $custom_field->column = $column; }
}
}
$name_column = ! empty( $name_column ) ? $name_column : -1;
$number_column = ! empty( $number_column ) ? $number_column : -1;
$status_column = ! empty( $status_column ) ? $status_column : -1;
$location_column = ! empty( $location_column ) ? $location_column : -1;
$display_column = ! empty( $display_column ) ? $display_column : -1;
$public_notes_column = ! empty( $public_notes_column ) ? $public_notes_column : -1;
$private_notes_column = ! empty( $private_notes_column ) ? $private_notes_column : -1;
$email_column = ! empty( $email_column ) ? $email_column : -1;
$sales_rep_id_column = ! empty( $sales_rep_id_column ) ? $sales_rep_id_column : -1;
$customer_id_column = ! empty( $customer_id_column ) ? $customer_id_column : -1;
// Put the spreadsheet data into a multi-dimensional array to facilitate processing
$highest_row = $sheet->getHighestRow();
for ( $row = 2; $row <= $highest_row; $row++ ) {
for ( $column = 1; $column <= $highest_column_index; $column++ ) {
$data[$row][$column] = $sheet->getCellByColumnAndRow( $column, $row )->getValue();
}
}
// Create the query to insert the products one at a time into the database and then run it
foreach ( $data as $order_data ) {
// Save the data into an array, so that an order can be updated based on the order
// number if it exists already
$order_data_array = array(
'custom_fields' => array()
);
foreach ( $order_data as $col_index => $value ) {
if ( $col_index == $name_column ) { $order_data_array['name'] = sanitize_text_field( $value ); }
elseif ( $col_index == $number_column ) { $order_data_array['number'] = sanitize_text_field( $value ); }
elseif ( $col_index == $status_column ) { $order_data_array['status'] = $order_data['external_status'] = sanitize_text_field( $value ); }
elseif ( $col_index == $location_column ) { $order_data_array['location'] = sanitize_text_field( $value ); }
elseif ( $col_index == $display_column ) { $order_data_array['display'] = ( strtolower( $value ) == 'no' ? false : true ); }
elseif ( $col_index == $public_notes_column ) { $order_data_array['notes_public'] = sanitize_textarea_field( $value ); }
elseif ( $col_index == $private_notes_column ) { $order_data_array['notes_private'] = sanitize_textarea_field( $value ); }
elseif ( $col_index == $email_column ) { $order_data_array['email'] = sanitize_email( $value ); }
elseif ( $col_index == $sales_rep_id_column ) { $order_data_array['sales_rep'] = intval( $value ); }
elseif ( $col_index == $customer_id_column ) { $order_data_array['customer'] = intval( $value ); }
else {
foreach ( $custom_fields as $custom_field ) {
if ( $col_index == $custom_field->column ) { $order_data_array['custom_fields'][ $custom_field->id ] = sanitize_text_field( $value ); }
}
}
}
// Create a new order object, and assign the imported values to it
$order = new ewdotpOrder();
$order_status = null;
if ( ! empty( $order_data_array['number'] ) ) {
$db_order_data = $ewd_otp_controller->order_manager->get_order_from_tracking_number( $order_data_array['number'] );
if ( $db_order_data ) {
$order->load_order( $db_order_data );
$order_status = $ewd_otp_controller->order_manager->get_order_field( 'Order_Status', $order->id );
}
}
if ( empty( $order->id ) ) { $order->display = true; }
if ( ! empty( $order_data_array['name'] ) ) { $order->name = $order_data_array['name']; }
if ( ! empty( $order_data_array['number'] ) ) { $order->number = $order_data_array['number']; }
if ( ! empty( $order_data_array['status'] ) ) { $order->status = $order->external_status = $order_data_array['status']; }
if ( ! empty( $order_data_array['location'] ) ) { $order->location = $order_data_array['location']; }
if ( isset( $order_data_array['display'] ) ) { $order->display_column = $order_data_array['display']; }
if ( ! empty( $order_data_array['notes_public'] ) ) { $order->notes_public = $order_data_array['notes_public']; }
if ( ! empty( $order_data_array['notes_private'] ) ) { $order->notes_private = $order_data_array['notes_private']; }
if ( ! empty( $order_data_array['email'] ) ) { $order->email = $order_data_array['email']; }
if ( ! empty( $order_data_array['sales_rep'] ) ) { $order->sales_rep = $order_data_array['sales_rep']; }
if ( ! empty( $order_data_array['customer'] ) ) { $order->customer = $order_data_array['customer']; }
if ( ! empty( $order_data_array['custom_fields'] ) ) {
foreach ( $order_data_array['custom_fields'] as $field_id => $field_value ) {
$order->custom_fields[ $field_id ] = $field_value;
}
}
if ( empty( $order->customer ) and ! empty( $order->email ) and $ewd_otp_controller->settings->get_setting( 'allow-assign-orders-to-customers' ) ) {
$order->customer = $ewd_otp_controller->customer_manager->get_customer_id_from_email( $order->email );
}
if ( empty( $order->id ) ) {
$order->insert_order();
$order->insert_order_status();
do_action( 'ewd_otp_admin_order_inserted', $order );
}
else {
$order->update_order();
if ( ! empty( $order_data_array['status'] ) and $order_data_array['status'] != $order_status ) {
$order->insert_order_status();
do_action( 'ewd_otp_status_updated', $order );
}
}
}
$this->status = true;
$this->message = __( 'Orders added successfully.', 'order-tracking' );
add_action( 'admin_notices', array( $this, 'display_notice' ) );
}
function handle_spreadsheet_upload() {
/* Test if there is an error with the uploaded spreadsheet and return that error if there is */
if ( ! empty( $_FILES['ewd_otp_orders_spreadsheet']['error'] ) ) {
switch( $_FILES['ewd_otp_orders_spreadsheet']['error'] ) {
case '1':
$error = __( 'The uploaded file exceeds the upload_max_filesize directive in php.ini', 'order-tracking' );
break;
case '2':
$error = __( 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form', 'order-tracking' );
break;
case '3':
$error = __( 'The uploaded file was only partially uploaded', 'order-tracking' );
break;
case '4':
$error = __( 'No file was uploaded.', 'order-tracking' );
break;
case '6':
$error = __( 'Missing a temporary folder', 'order-tracking' );
break;
case '7':
$error = __( 'Failed to write file to disk', 'order-tracking' );
break;
case '8':
$error = __( 'File upload stopped by extension', 'order-tracking' );
break;
case '999':
default:
$error = __( 'No error code avaiable', 'order-tracking' );
}
}
/* Make sure that the file exists */
elseif ( empty($_FILES['ewd_otp_orders_spreadsheet']['tmp_name']) || $_FILES['ewd_otp_orders_spreadsheet']['tmp_name'] == 'none' ) {
$error = __( 'No file was uploaded here..', 'order-tracking' );
}
/* Move the file and store the URL to pass it onwards*/
/* Check that it is a .xls or .xlsx file */
if ( ! isset($_FILES['ewd_otp_orders_spreadsheet']['name'] ) or ( ! preg_match("/\.(xls.?)$/", $_FILES['ewd_otp_orders_spreadsheet']['name'] ) and ! preg_match( "/\.(csv.?)$/", $_FILES['ewd_otp_orders_spreadsheet']['name'] ) ) ) {
$error = __( 'File must be .csv, .xls or .xlsx', 'order-tracking' );
}
else {
$filename = basename( $_FILES['ewd_otp_orders_spreadsheet']['name'] );
$filename = mb_ereg_replace( "([^\w\s\d\-_~,;\[\]\(\).])", '', $filename );
$filename = mb_ereg_replace ("([\.]{2,})", '', $filename );
//for security reason, we force to remove all uploaded file
$target_path = EWD_OTP_PLUGIN_DIR . "/order-sheets/";
$target_path = $target_path . $filename;
if ( ! move_uploaded_file($_FILES['ewd_otp_orders_spreadsheet']['tmp_name'], $target_path ) ) {
$error .= "There was an error uploading the file, please try again!";
}
else {
$excel_file_name = $filename;
}
}
/* Pass the data to the appropriate function in Update_Admin_Databases.php to create the products */
if ( ! isset( $error ) ) {
$update = array( "message_type" => "Success", "filename" => $excel_file_name );
}
else {
$update = array( "message_type" => "Error", "message" => $error );
}
return $update;
}
public function display_notice() {
if ( $this->status ) {
echo "" . esc_html( $this->message ) . "
";
}
else {
echo "" . esc_html( $this->message ) . "
";
}
}
}