Explorar el Código

Refactor database queries to use order numbers instead of post IDs. Handle activate/deactivate event

Dalibor Votruba hace 1 año
padre
commit
d373212f4d

+ 1 - 1
studiou-wc-ord-print-statuses/includes/class-bulk-actions-manager.php

@@ -31,7 +31,7 @@ class Bulk_Actions_Manager {
 
 
     private function prepare_to_printing_export($post_ids, $redirect_to) {
     private function prepare_to_printing_export($post_ids, $redirect_to) {
         global $wpdb;
         global $wpdb;
-        $orders_data = $wpdb->get_results("SELECT * FROM `vsu_orders_car_prod_qty_img` WHERE post_id IN (" . implode(',', array_map('intval', $post_ids)) . ")");
+        $orders_data = $wpdb->get_results("SELECT * FROM `vsu_orders_car_prod_qty_img` WHERE order_no IN (" . implode(',', array_map('intval', $post_ids)) . ")");
 
 
         if (!empty($orders_data)) {
         if (!empty($orders_data)) {
             $csv_data = $this->generate_csv($orders_data);
             $csv_data = $this->generate_csv($orders_data);

+ 66 - 0
studiou-wc-ord-print-statuses/includes/class-db-assets-manager.php

@@ -0,0 +1,66 @@
+<?php
+/**
+ * Database Assets Manager for Studiou WC Order Print Statuses
+ *
+ * This class handles the creation and dropping of database assets (views)
+ * during plugin activation and deactivation.
+ */
+
+class DB_Assets_Manager {
+    /**
+     * Create the necessary database views.
+     */
+    public static function create_views() {
+        global $wpdb;
+
+        $sql = "CREATE OR REPLACE VIEW vsu_orders_car_prod_qty_img AS
+                SELECT 
+                    `orders`.`id` AS `order_no`,
+                    `t`.`name` AS `prod_cat`,
+                    `products`.`post_title` AS `prod_name`,
+                    `product_variations`.`post_title` AS `prod_var`,
+                    `images`.`guid` AS `prod_img_url`,
+                    `order_products`.`product_qty` AS `qty`
+                FROM
+                    `{$wpdb->prefix}wc_orders` `orders`
+                    JOIN `{$wpdb->prefix}wc_order_product_lookup` `order_products` ON `orders`.`id` = `order_products`.`order_id`
+                    JOIN `{$wpdb->posts}` `products` ON `products`.`ID` = `order_products`.`product_id`
+                    JOIN `{$wpdb->posts}` `images` ON `images`.`post_parent` = `products`.`ID` AND `images`.`post_type` = 'attachment'
+                    JOIN `{$wpdb->posts}` `product_variations` ON `product_variations`.`ID` = `order_products`.`variation_id`
+                    JOIN `{$wpdb->term_relationships}` `tr` ON `products`.`ID` = `tr`.`object_id`
+                    JOIN `{$wpdb->term_taxonomy}` `tt` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
+                    JOIN `{$wpdb->terms}` `t` ON `tt`.`term_id` = `t`.`term_id`
+                WHERE
+                    `orders`.`status` = 'wc-processing'
+                    AND `tt`.`taxonomy` = 'product_cat'
+                ORDER BY
+                    `orders`.`id`";
+
+        $wpdb->query($sql);
+    }
+
+    /**
+     * Drop the database views.
+     */
+    public static function drop_views() {
+        global $wpdb;
+
+        $sql = "DROP VIEW IF EXISTS vsu_orders_car_prod_qty_img";
+
+        $wpdb->query($sql);
+    }
+
+    /**
+     * Activation hook callback.
+     */
+    public static function on_activate() {
+        self::create_views();
+    }
+    
+    /**
+     * Deactivation hook callback.
+     */
+    public static function on_deactivate() {
+        self::drop_views();
+    }
+}

+ 6 - 6
studiou-wc-ord-print-statuses/includes/class-import-manager.php

@@ -66,14 +66,14 @@ class Import_Manager {
         $errors = array();
         $errors = array();
 
 
         foreach ($csv_data as $row) {
         foreach ($csv_data as $row) {
-            if (!isset($row['Order No']) || !isset($row['ExternalOrder']) || !isset($row['ExternalOrderDate'])) {
+            if (!isset($row['order_no']) || !isset($row['ExternalOrder']) || !isset($row['ExternalOrderDate'])) {
                 $errors[] = __('Invalid row format in CSV.', 'studiou-wc-ord-print-statuses');
                 $errors[] = __('Invalid row format in CSV.', 'studiou-wc-ord-print-statuses');
                 continue;
                 continue;
             }
             }
 
 
-            $order_id = wc_get_order_id_by_order_number($row['Order No']);
+            $order_id = wc_get_order_id_by_order_number($row['order_no']);
             if (!$order_id) {
             if (!$order_id) {
-                $errors[] = sprintf(__('Order %s not found.', 'studiou-wc-ord-print-statuses'), $row['Order No']);
+                $errors[] = sprintf(__('Order %s not found.', 'studiou-wc-ord-print-statuses'), $row['order_no']);
                 continue;
                 continue;
             }
             }
 
 
@@ -118,14 +118,14 @@ class Import_Manager {
         $errors = array();
         $errors = array();
 
 
         foreach ($csv_data as $row) {
         foreach ($csv_data as $row) {
-            if (!isset($row['Order No'])) {
+            if (!isset($row['order_no'])) {
                 $errors[] = __('Invalid row format in CSV.', 'studiou-wc-ord-print-statuses');
                 $errors[] = __('Invalid row format in CSV.', 'studiou-wc-ord-print-statuses');
                 continue;
                 continue;
             }
             }
 
 
-            $order_id = wc_get_order_id_by_order_number($row['Order No']);
+            $order_id = wc_get_order_id_by_order_number($row['order_no']);
             if (!$order_id) {
             if (!$order_id) {
-                $errors[] = sprintf(__('Order %s not found.', 'studiou-wc-ord-print-statuses'), $row['Order No']);
+                $errors[] = sprintf(__('Order %s not found.', 'studiou-wc-ord-print-statuses'), $row['order_no']);
                 continue;
                 continue;
             }
             }
 
 

+ 9 - 2
studiou-wc-ord-print-statuses/studiou-wc-ord-print-statuses.php

@@ -11,6 +11,13 @@
 
 
 defined('ABSPATH') or die('Direct access not allowed!');
 defined('ABSPATH') or die('Direct access not allowed!');
 
 
+// Load the DB_Assets_Manager class
+require_once plugin_dir_path(__FILE__) . 'includes/class-db-assets-manager.php';
+
+// Register activation and deactivation hooks
+register_activation_hook(__FILE__, array('DB_Assets_Manager', 'on_activate'));
+register_deactivation_hook(__FILE__, array('DB_Assets_Manager', 'on_deactivate'));
+
 // Main plugin class
 // Main plugin class
 class Studiou_WC_Ord_Print_Statuses {
 class Studiou_WC_Ord_Print_Statuses {
     private $order_status_manager;
     private $order_status_manager;
@@ -46,10 +53,10 @@ class Studiou_WC_Ord_Print_Statuses {
     private function initialize_managers() {
     private function initialize_managers() {
         $this->order_status_manager = new Order_Status_Manager();
         $this->order_status_manager = new Order_Status_Manager();
         $this->order_fields_manager = new Order_Fields_Manager();
         $this->order_fields_manager = new Order_Fields_Manager();
+        $this->order_search_manager = new Order_Search_Manager();
         $this->bulk_actions_manager = new Bulk_Actions_Manager();
         $this->bulk_actions_manager = new Bulk_Actions_Manager();
         $this->custom_columns_manager = new Custom_Columns_Manager();
         $this->custom_columns_manager = new Custom_Columns_Manager();
         $this->import_manager = new Import_Manager();
         $this->import_manager = new Import_Manager();
-        $this->order_search_manager = new Order_Search_Manager();
     }
     }
 
 
     public function woocommerce_missing_notice() {
     public function woocommerce_missing_notice() {
@@ -62,4 +69,4 @@ class Studiou_WC_Ord_Print_Statuses {
 }
 }
 
 
 // Initialize the plugin
 // Initialize the plugin
-new Studiou_WC_Ord_Print_Statuses();
+new Studiou_WC_Ord_Print_Statuses();