| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- <?php
- // Handles import functionality for InPrint and Delivered protocols.
- // visualized
- class Import_Manager {
- public function __construct() {
- add_action('admin_menu', array($this, 'add_import_submenu'));
- add_action('admin_post_import_inprint_protocol', array($this, 'handle_import_inprint_protocol'));
- add_action('admin_post_import_delivered_protocol', array($this, 'handle_import_delivered_protocol'));
- }
- public function add_import_submenu() {
- add_submenu_page(
- 'woocommerce',
- __('Import Protocols', 'studiou-wc-ord-print-statuses'),
- __('Import Protocols', 'studiou-wc-ord-print-statuses'),
- 'manage_woocommerce',
- 'studiou-import-protocols',
- array($this, 'render_import_page')
- );
- }
- public function render_import_page() {
- ?>
- <div class="wrap">
- <h1><?php echo esc_html(get_admin_page_title()); ?></h1>
-
- <h2><?php _e('Import InPrint Protocol', 'studiou-wc-ord-print-statuses'); ?></h2>
- <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>" enctype="multipart/form-data">
- <input type="hidden" name="action" value="import_inprint_protocol">
- <?php wp_nonce_field('import_inprint_protocol', 'import_inprint_protocol_nonce'); ?>
- <input type="file" name="inprint_csv" accept=".csv" required>
- <?php submit_button(__('Import InPrint Protocol', 'studiou-wc-ord-print-statuses')); ?>
- </form>
- <h2><?php _e('Import Delivered Protocol', 'studiou-wc-ord-print-statuses'); ?></h2>
- <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>" enctype="multipart/form-data">
- <input type="hidden" name="action" value="import_delivered_protocol">
- <?php wp_nonce_field('import_delivered_protocol', 'import_delivered_protocol_nonce'); ?>
- <input type="file" name="delivered_csv" accept=".csv" required>
- <?php submit_button(__('Import Delivered Protocol', 'studiou-wc-ord-print-statuses')); ?>
- </form>
- </div>
- <?php
- }
- public function handle_import_inprint_protocol() {
- if (!current_user_can('manage_woocommerce')) {
- wp_die(__('You do not have sufficient permissions to access this page.', 'studiou-wc-ord-print-statuses'));
- }
- check_admin_referer('import_inprint_protocol', 'import_inprint_protocol_nonce');
- if (!isset($_FILES['inprint_csv'])) {
- wp_die(__('No file uploaded.', 'studiou-wc-ord-print-statuses'));
- }
- $file = $_FILES['inprint_csv'];
- $csv_data = $this->parse_csv($file['tmp_name']);
- if (!$csv_data) {
- wp_die(__('Error parsing CSV file.', 'studiou-wc-ord-print-statuses'));
- }
- $updated_count = 0;
- $errors = array();
- foreach ($csv_data as $row) {
- if (!isset($row['order_no']) || !isset($row['ExternalOrder']) || !isset($row['ExternalOrderDate'])) {
- $errors[] = __('Invalid row format in CSV.', 'studiou-wc-ord-print-statuses');
- continue;
- }
- $order = wc_get_order($row['order_no']);
- if (!$order) {
- $errors[] = sprintf(__('Order %s not found.', 'studiou-wc-ord-print-statuses'), $row['order_no']);
- continue;
- }
- $order->update_status('wc-in-print');
- $order->update_meta_data('in_print_date', current_time('mysql'));
- $order->update_meta_data('external_ref_ord_no', $row['ExternalOrder']);
- $order->update_meta_data('external_ref_ord_date', $row['ExternalOrderDate']);
- $order->save();
- $updated_count++;
- }
- $message = sprintf(__('%d orders updated successfully.', 'studiou-wc-ord-print-statuses'), $updated_count);
- if (!empty($errors)) {
- $message .= ' ' . sprintf(__('%d errors occurred: %s', 'studiou-wc-ord-print-statuses'), count($errors), implode(', ', $errors));
- }
- wp_redirect(add_query_arg('message', urlencode($message), admin_url('admin.php?page=studiou-import-protocols')));
- exit;
- }
- public function handle_import_delivered_protocol() {
- if (!current_user_can('manage_woocommerce')) {
- wp_die(__('You do not have sufficient permissions to access this page.', 'studiou-wc-ord-print-statuses'));
- }
- check_admin_referer('import_delivered_protocol', 'import_delivered_protocol_nonce');
- if (!isset($_FILES['delivered_csv'])) {
- wp_die(__('No file uploaded.', 'studiou-wc-ord-print-statuses'));
- }
- $file = $_FILES['delivered_csv'];
- $csv_data = $this->parse_csv($file['tmp_name']);
- if (!$csv_data) {
- wp_die(__('Error parsing CSV file.', 'studiou-wc-ord-print-statuses'));
- }
- $updated_count = 0;
- $errors = array();
- foreach ($csv_data as $row) {
- if (!isset($row['order_no'])) {
- $errors[] = __('Invalid row format in CSV.', 'studiou-wc-ord-print-statuses');
- continue;
- }
-
- $order = wc_get_order($row['order_no']);
- if (!$order) {
- $errors[] = sprintf(__('Order %s not found.', 'studiou-wc-ord-print-statuses'), $row['order_no']);
- continue;
- }
- $order->update_status('wc-completed');
- $order->update_meta_data('external_ref_ord_delivered', current_time('mysql'));
- $order->save();
- $updated_count++;
- }
- $message = sprintf(__('%d orders updated successfully.', 'studiou-wc-ord-print-statuses'), $updated_count);
- if (!empty($errors)) {
- $message .= ' ' . sprintf(__('%d errors occurred: %s', 'studiou-wc-ord-print-statuses'), count($errors), implode(', ', $errors));
- }
- wp_redirect(add_query_arg('message', urlencode($message), admin_url('admin.php?page=studiou-import-protocols')));
- exit;
- }
- private function parse_csv($file_path) {
- $csv_data = array();
- if (($handle = fopen($file_path, "r")) !== FALSE) {
- $headers = fgetcsv($handle, 1000, ";");
- while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
- $csv_data[] = array_combine($headers, $data);
- }
- fclose($handle);
- }
- return $csv_data;
- }
- }
|