Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/tutor-pro/tools/exporters/OrderExporter.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + <?php
2 + /**
3 + * Order Exporter.
4 + *
5 + * @package TutorPro\Tools
6 + * @author Themeum<support@themeum.com>
7 + * @link https://themeum.com
8 + * @since 3.8.1
9 + */
10 +
11 + namespace TutorPro\Tools;
12 +
13 + use Tutor\Models\OrderModel;
14 + use Tutor\Helpers\QueryHelper;
15 + use Tutor\Models\OrderItemMetaModel;
16 +
17 + if ( ! defined( 'ABSPATH' ) ) {
18 + exit;
19 + }
20 +
21 + /**
22 + * Handle order exporting
23 + *
24 + * @since 3.8.1
25 + */
26 + class OrderExporter {
27 +
28 + /**
29 + * Export orders and related details for given IDs.
30 + *
31 + * @since 3.8.1
32 + *
33 + * @param int[] $ids Array of IDs (bundle_id/course_id, plan_ids) to export.
34 + * @param int $course_id Optional. Course ID to calculate earnings. Default is 0.
35 + *
36 + * @return array Returns an array of structured order data, including:
37 + * - 'orders' => Order details.
38 + * - 'order_items' => Order item details.
39 + * - 'order_meta' => Meta data for the order.
40 + * - 'earnings' => Earnings for the order and course.
41 + */
42 + public static function export( array $ids, $course_id = 0 ): array {
43 +
44 + global $wpdb;
45 +
46 + if ( empty( $ids ) ) {
47 + return array();
48 + }
49 +
50 + $order_model = new OrderModel();
51 + $order_item_meta_model = new OrderItemMetaModel();
52 + $order_items = $order_model->get_order_details( $ids );
53 + $user_ids = array();
54 + $result = array();
55 +
56 + $total_order_column = count( QueryHelper::get_table_schema( $wpdb->tutor_orders ) );
57 +
58 + // Separate order data, order item data, order_meta and earnings.
59 + if ( ! empty( $order_items ) ) {
60 + $result = array_map(
61 + function ( $item ) use ( $total_order_column, $course_id, &$user_ids, $order_model, $order_item_meta_model ) {
62 +
63 + if ( ! empty( $course_id ) ) {
64 + array_push( $user_ids, $item->user_id );
65 + }
66 +
67 + $orders = array_slice( (array) $item, 0, $total_order_column );
68 + $order_items = array_slice( (array) $item, $total_order_column );
69 +
70 + // Rename 'item_coupon_code' to 'coupon_code' for consistency with `wp_tutor_order_items` table.
71 + $order_items['coupon_code'] = $order_items['item_coupon_code'];
72 + unset( $order_items['item_coupon_code'] );
73 +
74 + return array(
75 + 'orders' => $orders,
76 + 'order_meta' => $order_model->get_order_meta_by_order_id( $orders['id'] ),
77 + 'order_items' => $order_items,
78 + 'order_item_meta' => $order_item_meta_model->get_meta( $order_items['order_items_id'], null, false ),
79 + 'earnings' => $order_model->get_earnings_by_order_and_course( $orders['id'], $course_id ),
80 + );
81 + },
82 + $order_items
83 + );
84 + }
85 +
86 + if ( ! empty( $course_id ) ) {
87 + update_option( Exporter::OPTION_USER_IDS . $course_id, array_unique( $user_ids ) );
88 + }
89 +
90 + return $result;
91 + }
92 + }
93 +