class-import-manager.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. // Handles import functionality for InPrint and Delivered protocols.
  3. // visualized
  4. class Import_Manager {
  5. public function __construct() {
  6. add_action('admin_menu', array($this, 'add_import_submenu'));
  7. add_action('admin_post_import_inprint_protocol', array($this, 'handle_import_inprint_protocol'));
  8. add_action('admin_post_import_delivered_protocol', array($this, 'handle_import_delivered_protocol'));
  9. }
  10. public function add_import_submenu() {
  11. add_submenu_page(
  12. 'woocommerce',
  13. __('Import Protocols', 'studiou-wc-ord-print-statuses'),
  14. __('Import Protocols', 'studiou-wc-ord-print-statuses'),
  15. 'manage_woocommerce',
  16. 'studiou-import-protocols',
  17. array($this, 'render_import_page')
  18. );
  19. }
  20. public function render_import_page() {
  21. ?>
  22. <div class="wrap">
  23. <h1><?php echo esc_html(get_admin_page_title()); ?></h1>
  24. <h2><?php _e('Import InPrint Protocol', 'studiou-wc-ord-print-statuses'); ?></h2>
  25. <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>" enctype="multipart/form-data">
  26. <input type="hidden" name="action" value="import_inprint_protocol">
  27. <?php wp_nonce_field('import_inprint_protocol', 'import_inprint_protocol_nonce'); ?>
  28. <input type="file" name="inprint_csv" accept=".csv" required>
  29. <?php submit_button(__('Import InPrint Protocol', 'studiou-wc-ord-print-statuses')); ?>
  30. </form>
  31. <h2><?php _e('Import Delivered Protocol', 'studiou-wc-ord-print-statuses'); ?></h2>
  32. <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>" enctype="multipart/form-data">
  33. <input type="hidden" name="action" value="import_delivered_protocol">
  34. <?php wp_nonce_field('import_delivered_protocol', 'import_delivered_protocol_nonce'); ?>
  35. <input type="file" name="delivered_csv" accept=".csv" required>
  36. <?php submit_button(__('Import Delivered Protocol', 'studiou-wc-ord-print-statuses')); ?>
  37. </form>
  38. </div>
  39. <?php
  40. }
  41. public function handle_import_inprint_protocol() {
  42. if (!current_user_can('manage_woocommerce')) {
  43. wp_die(__('You do not have sufficient permissions to access this page.', 'studiou-wc-ord-print-statuses'));
  44. }
  45. check_admin_referer('import_inprint_protocol', 'import_inprint_protocol_nonce');
  46. if (!isset($_FILES['inprint_csv'])) {
  47. wp_die(__('No file uploaded.', 'studiou-wc-ord-print-statuses'));
  48. }
  49. $file = $_FILES['inprint_csv'];
  50. $csv_data = $this->parse_csv($file['tmp_name']);
  51. if (!$csv_data) {
  52. wp_die(__('Error parsing CSV file.', 'studiou-wc-ord-print-statuses'));
  53. }
  54. $updated_count = 0;
  55. $errors = array();
  56. foreach ($csv_data as $row) {
  57. if (!isset($row['order_no']) || !isset($row['ExternalOrder']) || !isset($row['ExternalOrderDate'])) {
  58. $errors[] = __('Invalid row format in CSV.', 'studiou-wc-ord-print-statuses');
  59. continue;
  60. }
  61. $order_id = wc_get_order_id_by_order_number($row['order_no']);
  62. if (!$order_id) {
  63. $errors[] = sprintf(__('Order %s not found.', 'studiou-wc-ord-print-statuses'), $row['order_no']);
  64. continue;
  65. }
  66. $order = wc_get_order($order_id);
  67. $order->update_status('wc-in-print');
  68. $order->update_meta_data('in_print_date', current_time('mysql'));
  69. $order->update_meta_data('external_ref_ord_no', $row['ExternalOrder']);
  70. $order->update_meta_data('external_ref_ord_date', $row['ExternalOrderDate']);
  71. $order->save();
  72. $updated_count++;
  73. }
  74. $message = sprintf(__('%d orders updated successfully.', 'studiou-wc-ord-print-statuses'), $updated_count);
  75. if (!empty($errors)) {
  76. $message .= ' ' . sprintf(__('%d errors occurred: %s', 'studiou-wc-ord-print-statuses'), count($errors), implode(', ', $errors));
  77. }
  78. wp_redirect(add_query_arg('message', urlencode($message), admin_url('admin.php?page=studiou-import-protocols')));
  79. exit;
  80. }
  81. public function handle_import_delivered_protocol() {
  82. if (!current_user_can('manage_woocommerce')) {
  83. wp_die(__('You do not have sufficient permissions to access this page.', 'studiou-wc-ord-print-statuses'));
  84. }
  85. check_admin_referer('import_delivered_protocol', 'import_delivered_protocol_nonce');
  86. if (!isset($_FILES['delivered_csv'])) {
  87. wp_die(__('No file uploaded.', 'studiou-wc-ord-print-statuses'));
  88. }
  89. $file = $_FILES['delivered_csv'];
  90. $csv_data = $this->parse_csv($file['tmp_name']);
  91. if (!$csv_data) {
  92. wp_die(__('Error parsing CSV file.', 'studiou-wc-ord-print-statuses'));
  93. }
  94. $updated_count = 0;
  95. $errors = array();
  96. foreach ($csv_data as $row) {
  97. if (!isset($row['order_no'])) {
  98. $errors[] = __('Invalid row format in CSV.', 'studiou-wc-ord-print-statuses');
  99. continue;
  100. }
  101. $order_id = wc_get_order_id_by_order_number($row['order_no']);
  102. if (!$order_id) {
  103. $errors[] = sprintf(__('Order %s not found.', 'studiou-wc-ord-print-statuses'), $row['order_no']);
  104. continue;
  105. }
  106. $order = wc_get_order($order_id);
  107. $order->update_status('wc-completed');
  108. $order->update_meta_data('external_ref_ord_delivered', current_time('mysql'));
  109. $order->save();
  110. $updated_count++;
  111. }
  112. $message = sprintf(__('%d orders updated successfully.', 'studiou-wc-ord-print-statuses'), $updated_count);
  113. if (!empty($errors)) {
  114. $message .= ' ' . sprintf(__('%d errors occurred: %s', 'studiou-wc-ord-print-statuses'), count($errors), implode(', ', $errors));
  115. }
  116. wp_redirect(add_query_arg('message', urlencode($message), admin_url('admin.php?page=studiou-import-protocols')));
  117. exit;
  118. }
  119. private function parse_csv($file_path) {
  120. $csv_data = array();
  121. if (($handle = fopen($file_path, "r")) !== FALSE) {
  122. $headers = fgetcsv($handle, 1000, ",");
  123. while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
  124. $csv_data[] = array_combine($headers, $data);
  125. }
  126. fclose($handle);
  127. }
  128. return $csv_data;
  129. }
  130. }