PluginProbe
Tutor LMS – eLearning and online course solution / 3.9.14
Tutor LMS – eLearning and online course solution v3.9.14
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 All 191 releases
tutor / ecommerce / OrderActivitiesController.php

OrderActivitiesController.php in Tutor LMS – eLearning and online course solution 3.9.14, at ecommerce/OrderActivitiesController.php

178 lines 4.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Manage Order
4 *
5 * @package Tutor\Ecommerce
6 * @author Themeum <support@themeum.com>
7 * @link https://themeum.com
8 * @since 3.0.0
9 */
10
11 namespace Tutor\Ecommerce;
12
13 use Tutor\Helpers\HttpHelper;
14 use Tutor\Helpers\ValidationHelper;
15 use Tutor\Models\OrderActivitiesModel;
16 use Tutor\Traits\JsonResponse;
17
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit;
20 }
21 /**
22 * OrderActivitiesController class
23 *
24 * @since 3.0.0
25 */
26 class OrderActivitiesController {
27
28 /**
29 * Order model
30 *
31 * @since 3.0.0
32 *
33 * @var Object
34 */
35 private $model;
36
37 /**
38 * Trait for sending JSON response
39 */
40 use JsonResponse;
41
42 /**
43 * Page Title
44 *
45 * @var $page_title
46 */
47 public $page_title;
48
49 /**
50 * Constructor.
51 *
52 * Initializes the Orders class, sets the page title, and optionally registers
53 * hooks for handling AJAX requests related to order data, bulk actions, order status updates,
54 * and order deletions.
55 *
56 * @since 3.0.0
57 *
58 * @return void
59 */
60 public function __construct() {
61 $this->model = new OrderActivitiesModel();
62 }
63
64 /**
65 * Store order activity.
66 *
67 * This function handles the process of storing order activity metadata in the database.
68 * It triggers actions before and after adding the order activity, sanitizes input data,
69 * validates the request, and constructs a payload object. The payload is then passed to
70 * the OrderActivitiesModel to be stored in the database.
71 *
72 * @since 3.0.0
73 *
74 * @param int $order_id The ID of the order.
75 * @param string $meta_key The meta key for the order activity.
76 * @param string $meta_value The meta value for the order activity.
77 *
78 * @return void
79 */
80 public static function store_order_activity( int $order_id, string $meta_key, string $meta_value ) {
81 $params = array(
82 'order_id' => $order_id,
83 'meta_key' => $meta_key,
84 'meta_value' => $meta_value,
85 );
86
87 do_action( 'tutor_before_adding_order_activity', $params );
88
89 // Validate request.
90 $validation = self::validate( $params );
91 if ( ! $validation->success ) {
92 self::json_response(
93 tutor_utils()->error_message( HttpHelper::STATUS_BAD_REQUEST ),
94 $validation->errors,
95 HttpHelper::STATUS_BAD_REQUEST
96 );
97 }
98
99 $payload = new \stdClass();
100 $payload->order_id = $params['order_id'];
101 $payload->meta_key = $params['meta_key'];
102 $payload->meta_value = $params['meta_value'];
103
104 $model = new OrderActivitiesModel();
105 $model->add_order_meta( $payload );
106
107 do_action( 'tutor_after_adding_order_activity', $params );
108 }
109
110 /**
111 * Store order activity for marking an order as paid.
112 *
113 * This method stores the order activity to log that an order has been marked as paid.
114 * It retrieves the current user's display name and includes it in the activity message
115 * if the user exists. The activity message and the current date and time are encoded
116 * as JSON and stored as order metadata.
117 *
118 * @param int $order_id The ID of the order being marked as paid.
119 *
120 * @return int The insert ID of the newly added order metadata entry. Returns 0 on failure.
121 */
122 public function store_order_activity_for_marked_as_paid( $order_id ) {
123 $user_name = '';
124 $current_user = wp_get_current_user();
125
126 if ( $current_user->exists() ) {
127 $user_name = $current_user->display_name;
128 }
129
130 /* translators: %s: username */
131 $message = empty( $user_name ) ? __( 'Order marked as paid', 'tutor' ) : sprintf( __( 'Order marked as paid by %s', 'tutor' ), $user_name );
132
133 $payload = new \stdClass();
134 $payload->order_id = $order_id;
135 $payload->meta_key = $this->model::META_KEY_HISTORY;
136 $payload->meta_value = wp_json_encode(
137 array(
138 'date' => current_time( 'mysql' ),
139 'message' => $message,
140 )
141 );
142
143 return $this->model->add_order_meta( $payload );
144 }
145
146 /**
147 * Validate input data based on predefined rules.
148 *
149 * This protected method validates the provided data array against a set of
150 * predefined validation rules. The rules specify that 'order_id' is required
151 * and must be numeric. The method will skip validation rules for fields that
152 * are not present in the data array.
153 *
154 * @since 3.0.0
155 *
156 * @param array $data The data array to validate.
157 *
158 * @return object The validation result. It returns validation object.
159 */
160 protected static function validate( array $data ) {
161
162 $validation_rules = array(
163 'order_id' => 'required|numeric',
164 'meta_key' => 'required',
165 'meta_value' => 'required',
166 );
167
168 // Skip validation rules for not available fields in data.
169 foreach ( $validation_rules as $key => $value ) {
170 if ( ! array_key_exists( $key, $data ) ) {
171 unset( $validation_rules[ $key ] );
172 }
173 }
174
175 return ValidationHelper::validate( $validation_rules, $data );
176 }
177 }
178