| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- <?php
- // Manages custom order fields rendered in the "Print Information" panel.
- defined('ABSPATH') || exit;
- class Order_Fields_Manager {
- private $datetime_fields = array(
- 'to_print_date' => 'Prepare To Print Date',
- 'in_print_date' => 'In Print Date',
- 'external_ref_ord_date' => 'External Order Date',
- 'external_ref_ord_delivered' => 'External Order Delivered',
- );
- private $text_fields = array(
- 'external_ref_ord_no' => 'External Order Number',
- );
- public function __construct() {
- add_action('woocommerce_admin_order_data_after_order_details', array($this, 'display_custom_order_fields'));
- add_action('woocommerce_process_shop_order_meta', array($this, 'save_custom_order_fields'));
- }
- public function display_custom_order_fields($order) {
- ?>
- <div class="order_data_column">
- <h4><?php esc_html_e('Print Information', 'studiou-wc-ord-print-statuses'); ?></h4>
- <?php
- woocommerce_wp_text_input(array(
- 'id' => 'to_print_date',
- 'label' => __('Prepare To Print Date', 'studiou-wc-ord-print-statuses'),
- 'type' => 'datetime-local',
- 'value' => $this->mysql_to_datetime_local($order->get_meta('to_print_date')),
- 'wrapper_class' => 'form-field-wide',
- ));
- woocommerce_wp_text_input(array(
- 'id' => 'in_print_date',
- 'label' => __('In Print Date', 'studiou-wc-ord-print-statuses'),
- 'type' => 'datetime-local',
- 'value' => $this->mysql_to_datetime_local($order->get_meta('in_print_date')),
- 'wrapper_class' => 'form-field-wide',
- ));
- woocommerce_wp_text_input(array(
- 'id' => 'external_ref_ord_no',
- 'label' => __('External Order Number', 'studiou-wc-ord-print-statuses'),
- 'value' => $order->get_meta('external_ref_ord_no'),
- 'wrapper_class' => 'form-field-wide',
- ));
- woocommerce_wp_text_input(array(
- 'id' => 'external_ref_ord_date',
- 'label' => __('External Order Date', 'studiou-wc-ord-print-statuses'),
- 'type' => 'datetime-local',
- 'value' => $this->mysql_to_datetime_local($order->get_meta('external_ref_ord_date')),
- 'wrapper_class' => 'form-field-wide',
- ));
- woocommerce_wp_text_input(array(
- 'id' => 'external_ref_ord_delivered',
- 'label' => __('External Order Delivered', 'studiou-wc-ord-print-statuses'),
- 'type' => 'datetime-local',
- 'value' => $this->mysql_to_datetime_local($order->get_meta('external_ref_ord_delivered')),
- 'wrapper_class' => 'form-field-wide',
- ));
- ?>
- </div>
- <?php
- }
- public function save_custom_order_fields($order_id) {
- $order = wc_get_order($order_id);
- if (!$order) {
- return;
- }
- foreach (array_keys($this->datetime_fields) as $field) {
- if (isset($_POST[$field])) {
- $order->update_meta_data($field, $this->datetime_local_to_mysql($_POST[$field]));
- }
- }
- foreach (array_keys($this->text_fields) as $field) {
- if (isset($_POST[$field])) {
- $order->update_meta_data($field, sanitize_text_field(wp_unslash($_POST[$field])));
- }
- }
- $order->save();
- }
- private function mysql_to_datetime_local($value) {
- if (empty($value)) {
- return '';
- }
- $timestamp = strtotime($value);
- return $timestamp ? date('Y-m-d\TH:i', $timestamp) : '';
- }
- private function datetime_local_to_mysql($value) {
- $value = sanitize_text_field(wp_unslash($value));
- if ($value === '') {
- return '';
- }
- $timestamp = strtotime($value);
- return $timestamp ? date('Y-m-d H:i:s', $timestamp) : '';
- }
- }
|