PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.33
OttoKit: All-in-One Automation Platform v1.1.33
1.1.33 1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / profilepress / actions / add-new-order.php
suretriggers / src / Integrations / profilepress / actions Last commit date
add-new-order.php 10 months ago add-update-profilepress-customer.php 10 months ago get-customer-details-by-id.php 10 months ago get-order-details-by-id.php 10 months ago get-plan-details-by-id.php 10 months ago get-subscription-details-by-id.php 10 months ago
add-new-order.php
200 lines
1 <?php
2 /**
3 * AddNewOrder.
4 * php version 5.6
5 *
6 * @category AddNewOrder
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.1.5
12 */
13
14 namespace SureTriggers\Integrations\ProfilePress\Actions;
15
16 use SureTriggers\Integrations\AutomateAction;
17 use SureTriggers\Traits\SingletonLoader;
18 use ProfilePress\Core\Membership\Models\Customer\CustomerFactory;
19 use ProfilePress\Core\Membership\Services\Calculator;
20 use ProfilePressVendor\Carbon\CarbonImmutable;
21 use ProfilePress\Core\Membership\Models\Order\OrderFactory;
22
23 /**
24 * AddNewOrder
25 *
26 * @category AddNewOrder
27 * @package SureTriggers
28 * @author BSF <username@example.com>
29 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
30 * @link https://www.brainstormforce.com/
31 * @since 1.0.0
32 */
33 class AddNewOrder extends AutomateAction {
34
35
36 /**
37 * Integration type.
38 *
39 * @var string
40 */
41 public $integration = 'ProfilePress';
42
43 /**
44 * Action name.
45 *
46 * @var string
47 */
48 public $action = 'add_new_order';
49
50 use SingletonLoader;
51
52 /**
53 * Register a action.
54 *
55 * @param array $actions actions.
56 * @return array
57 */
58 public function register( $actions ) {
59 $actions[ $this->integration ][ $this->action ] = [
60 'label' => __( 'Add New Order', 'suretriggers' ),
61 'action' => $this->action,
62 'function' => [ $this, 'action_listener' ],
63 ];
64 return $actions;
65 }
66
67 /**
68 * Action listener.
69 *
70 * @param int $user_id user_id.
71 * @param int $automation_id automation_id.
72 * @param array $fields fields.
73 * @param array $selected_options selectedOptions.
74 *
75 * @return array
76 */
77 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
78
79 if ( ! function_exists( 'ppress_get_plan' ) ||
80 ! function_exists( 'ppress_subscribe_user_to_plan' ) ||
81 ! function_exists( 'ppress_clean' )
82 ) {
83 return [
84 'status' => 'error',
85 'message' => __( 'ProfilePress functions not found.', 'suretriggers' ),
86
87 ];
88 }
89
90 if ( ! class_exists( 'ProfilePress\Core\Membership\Models\Customer\CustomerFactory' ) ||
91 ! class_exists( 'ProfilePress\Core\Membership\Services\Calculator' ) ||
92 ! class_exists( 'ProfilePressVendor\Carbon\CarbonImmutable' ) ||
93 ! class_exists( 'ProfilePress\Core\Membership\Models\Order\OrderFactory' )
94 ) {
95 return [
96 'status' => 'error',
97 'message' => __( 'ProfilePress classes not found.', 'suretriggers' ),
98
99 ];
100 }
101
102 $order_data = $selected_options;
103
104 // Validate required fields.
105 if ( empty( $order_data['plan'] ) ) {
106 return [
107 'status' => __( 'Error', 'suretriggers' ),
108 'response' => __( 'No plan was selected. Please try again.', 'suretriggers' ),
109
110 ];
111 }
112
113 if ( empty( $order_data['customer'] ) ) {
114 return [
115 'status' => __( 'Error', 'suretriggers' ),
116 'response' => __( 'No customer was selected. Please try again.', 'suretriggers' ),
117
118 ];
119 }
120
121 $plan = ppress_get_plan( absint( $order_data['plan'] ) );
122 if ( ! $plan || empty( $plan->id ) ) {
123 return [
124 'status' => __( 'Error', 'suretriggers' ),
125 'response' => __( 'The selected plan does not exist.', 'suretriggers' ),
126
127 ];
128 }
129
130 $customer = CustomerFactory::fromId( absint( $order_data['customer'] ) );
131 if ( ! $customer || ! $customer->user_exists() ) {
132 return [
133 'status' => __( 'Error', 'suretriggers' ),
134 'response' => __( 'The selected customer does not exist.', 'suretriggers' ),
135
136 ];
137 }
138
139 // Default order creation date.
140 $date_created = current_time( 'mysql' );
141
142 if ( ! empty( $order_data['order_date'] ) ) {
143 $date_created = CarbonImmutable::parse(
144 sanitize_text_field( $order_data['order_date'] ),
145 wp_timezone()
146 )->setTimeFromTimeString(
147 CarbonImmutable::now( wp_timezone() )->toTimeString()
148 )->utc()->toDateTimeString();
149 }
150
151 // Fallback to plan price if no amount given.
152 if ( empty( $order_data['amount'] ) || Calculator::init( $order_data['amount'] )->isNegativeOrZero() ) {
153 $order_data['amount'] = ppress_get_plan( $order_data['plan'] )->get_price();
154 }
155
156 // Create the order.
157 $response = ppress_subscribe_user_to_plan(
158 $order_data['plan'],
159 $order_data['customer'],
160 [
161 'amount' => $order_data['amount'],
162 'order_status' => isset( $order_data['order_status'] ) ? sanitize_text_field( $order_data['order_status'] ) : 'pending',
163 'payment_method' => isset( $order_data['payment_method'] ) ? sanitize_text_field( $order_data['payment_method'] ) : '',
164 'transaction_id' => isset( $order_data['transaction_id'] ) ? sanitize_text_field( $order_data['transaction_id'] ) : '',
165 'date_created' => $date_created,
166 ],
167 isset( $order_data['send_receipt'] ) && 'true' === $order_data['send_receipt']
168 );
169
170 if ( is_wp_error( $response ) ) {
171 return [
172 'status' => __( 'Error', 'suretriggers' ),
173 'response' => $response->get_error_message(),
174 ];
175 }
176
177 if ( $response['order_id'] ) {
178 $order = OrderFactory::fromId( absint( $response['order_id'] ) );
179 $billing_keys = [ 'address', 'city', 'country', 'state', 'postcode', 'phone' ];
180 foreach ( $billing_keys as $key ) {
181 $setter = 'billing_' . $key;
182 $value = isset( $selected_options[ $setter ] ) ? sanitize_textarea_field( $selected_options[ $setter ] ) : '';
183 $order->$setter = ppress_clean( $value, 'sanitize_text_field' );
184 }
185 $order->save();
186 }
187
188 return [
189 'status' => __( 'Success', 'suretriggers' ),
190 'response' => sprintf(
191 __( 'Order successfully created with ID %d.', 'suretriggers' ),
192 $response['order_id']
193 ),
194 'order' => $response,
195 ];
196 }
197 }
198
199 AddNewOrder::get_instance();
200