PluginProbe ʕ •ᴥ•ʔ
LatePoint – Calendar Booking Plugin for Appointments and Events / 5.2.2
LatePoint – Calendar Booking Plugin for Appointments and Events v5.2.2
5.6.7 5.6.6 5.6.5 5.6.4 5.6.3 5.6.2 5.6.1 5.6.0 5.5.2 5.5.1 5.5.0 5.4.2 trunk 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.1.91 5.1.92 5.1.93 5.1.94 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1
latepoint / lib / helpers / processes_helper.php
latepoint / lib / helpers Last commit date
activities_helper.php 1 year ago agent_helper.php 1 year ago auth_helper.php 9 months ago blocks_helper.php 1 year ago booking_helper.php 1 year ago bricks_helper.php 1 year ago bundles_helper.php 1 year ago calendar_helper.php 9 months ago carts_helper.php 1 year ago connector_helper.php 1 year ago csv_helper.php 9 months ago customer_helper.php 9 months ago customer_import_helper.php 9 months ago database_helper.php 9 months ago debug_helper.php 1 year ago defaults_helper.php 1 year ago elementor_helper.php 1 year ago email_helper.php 9 months ago encrypt_helper.php 1 year ago events_helper.php 1 year ago form_helper.php 9 months ago icalendar_helper.php 1 year ago image_helper.php 1 year ago invoices_helper.php 9 months ago license_helper.php 1 year ago location_helper.php 1 year ago marketing_systems_helper.php 1 year ago meeting_systems_helper.php 1 year ago menu_helper.php 9 months ago meta_helper.php 1 year ago migrations_helper.php 1 year ago money_helper.php 1 year ago notifications_helper.php 9 months ago order_intent_helper.php 9 months ago orders_helper.php 1 year ago otp_helper.php 9 months ago pages_helper.php 1 year ago params_helper.php 1 year ago payments_helper.php 1 year ago price_breakdown_helper.php 1 year ago process_jobs_helper.php 1 year ago processes_helper.php 1 year ago replacer_helper.php 1 year ago resource_helper.php 1 year ago roles_helper.php 9 months ago router_helper.php 1 year ago service_helper.php 1 year ago sessions_helper.php 1 year ago settings_helper.php 9 months ago short_links_systems_helper.php 9 months ago shortcodes_helper.php 9 months ago sms_helper.php 1 year ago steps_helper.php 9 months ago stripe_connect_helper.php 9 months ago styles_helper.php 9 months ago support_topics_helper.php 1 year ago time_helper.php 9 months ago timeline_helper.php 9 months ago transaction_helper.php 1 year ago transaction_intent_helper.php 1 year ago util_helper.php 9 months ago version_specific_updates_helper.php 9 months ago whatsapp_helper.php 1 year ago work_periods_helper.php 1 year ago wp_datetime.php 1 year ago wp_user_helper.php 1 year ago
processes_helper.php
289 lines
1 <?php
2 /*
3 * Copyright (c) 2022 LatePoint LLC. All rights reserved.
4 */
5
6 class OsProcessesHelper
7 {
8
9 public static function check_if_process_exists(OsProcessModel $process): bool{
10 $existing_process = new OsProcessModel();
11 $existing_process = $existing_process->select('id')->where(['event_type' => $process->event_type, 'name' => $process->name])->set_limit(1)->get_results();
12 return !empty($existing_process);
13 }
14
15 public static function get_object_data_by_source(string $source, string $value, bool $include_model = true) : array{
16 $object_data = [];
17 switch($source){
18 case 'booking_id':
19 $object_data = ['model' => 'booking', 'id' => $value];
20 if($include_model){
21 $model = new OsBookingModel($value);
22 $object_data['model_ready'] = $model;
23 }
24 break;
25 case 'order_id':
26 $object_data = ['model' => 'order', 'id' => $value];
27 if($include_model){
28 $model = new OsOrderModel($value);
29 $object_data['model_ready'] = $model;
30 }
31 break;
32 case 'payment_request_id':
33 $object_data = ['model' => 'payment_request', 'id' => $value];
34 if($include_model){
35 $model = new OsPaymentRequestModel($value);
36 $object_data['model_ready'] = $model;
37 }
38 break;
39 }
40 /**
41 * Get the list of booking statuses that are enabled for synchronization with Google Calendar
42 *
43 * @since 5.1.0
44 * @hook latepoint_get_process_object_by_source
45 *
46 * @param {array} $object_data Object info
47 * @param {string} $source Source type
48 * @param {string} $value Source value
49 * @param {bool} $include_model Should include model into object data or not
50 *
51 * @returns {array} Filtered object data
52 */
53 $object_data = apply_filters('latepoint_get_process_object_by_source', $object_data, $source, $value, $include_model);
54 return $object_data;
55 }
56
57 public static function processes_list_for_select(){
58 $processes = new OsProcessModel();
59 $processes = $processes->get_results_as_models();
60 $processes_list = [];
61 foreach($processes as $process){
62 $processes_list[] = ['value' => $process->id, 'label' => $process->name];
63 }
64 return $processes_list;
65 }
66
67 public static function extract_trigger_conditions_from_groups($groups){
68 $trigger_conditions = [];
69 if($groups){
70 foreach($groups as $group){
71 if($group['type'] == 'group' && !empty($group['trigger_condition'])){
72 $trigger_condition = ['id' => \LatePoint\Misc\ProcessEvent::generate_trigger_condition_id()];
73 $trigger_condition['property'] = $group['trigger_condition']['property'];
74 foreach($group['items'] as $item){
75 if($item['type'] == 'trigger_condition_branch'){
76 $trigger_condition['operator'] = $item['settings']['operator'];
77 $trigger_condition['value'] = $item['settings']['value'];
78 }
79 $trigger_conditions[] = $trigger_condition;
80
81 if($item['items']){
82 $temp = self::extract_trigger_conditions_from_groups($item['items']);
83 if(!empty($temp)) $trigger_conditions = array_merge($trigger_conditions, $temp);
84 }
85 }
86 }
87 }
88 }
89 return $trigger_conditions;
90 }
91
92 /**
93 * @param \LatePoint\Misc\ProcessEvent $event
94 * @return string
95 *
96 * Generate conditions form for an event
97 *
98 */
99 public static function trigger_conditions_html_for_event(\LatePoint\Misc\ProcessEvent $event): string{
100 if(empty(\LatePoint\Misc\ProcessEvent::get_available_trigger_condition_objects_for_event_type($event->type))) return '';
101 $temp_id = 'pe_'.\OsUtilHelper::random_text('alnum', 6);
102 $conditions_html = '<div class="pe-conditions" id="pe-conditions-for-'.esc_attr($temp_id).'" style="'.((!empty($event->trigger_conditions)) ? 'display: block;' : 'display: none;').'">
103 <div class="pe-conditions-heading">'.__('Trigger only if:', 'latepoint').'</div>
104 '.$event->trigger_conditions_form_html().'
105 </div>';
106 $conditions_html = apply_filters('latepoint_process_conditions_html', $conditions_html, $event, $temp_id);
107 $html = '<div class="sub-section-row">
108 <div class="sub-section-label">
109 <h3>'.__('Conditional', 'latepoint').'</h3>
110 </div>
111 <div class="sub-section-content">
112 '.OsFormHelper::toggler_field('process[event][conditional]', __('Trigger only when specific conditions are met', 'latepoint'), !empty($event->trigger_conditions), "pe-conditions-for-". $temp_id).'
113 '.$conditions_html.'
114 </div>
115 </div>';
116 return $html;
117 }
118
119 public static function time_offset_html_for_event(\LatePoint\Misc\ProcessEvent $event): string{
120 $temp_id = 'pe_'.\OsUtilHelper::random_text('alnum', 6);
121
122 $time_offset_settings_html = OsUtilHelper::pro_feature_block();
123 $time_offset_settings_html = apply_filters('latepoint_event_time_offset_settings_html', $time_offset_settings_html, $event);
124
125 $html = '<div class="sub-section-row">
126 <div class="sub-section-label">
127 <h3>'.__('Time offset', 'latepoint').'</h3>
128 </div>
129 <div class="sub-section-content">
130 '.OsFormHelper::toggler_field('process[event][has_time_offset]', __('Execute actions with a time offset', 'latepoint'), !empty($event->time_offset), "pe-conditions-for-". $temp_id).'
131 <div class="pe-conditions" id="pe-conditions-for-'.esc_attr($temp_id).'" style="'.((!empty($event->time_offset)) ? 'display: block;' : 'display: none;').'">
132 '.$time_offset_settings_html.'
133 </div>
134 </div>
135 </div>';
136 return $html;
137 }
138
139 public static function extract_actions_from_groups($groups){
140 $actions = [];
141 if($groups){
142 foreach($groups as $group){
143 if($group['type'] == 'action'){
144 $action_data = $group['settings'];
145 $actions[] = new \LatePoint\Misc\ProcessAction(['type' => $action_data['type'], 'id' => $group['id'], 'status' => $action_data['status'] ?? LATEPOINT_STATUS_ACTIVE, 'settings' => $action_data['settings']]);
146 }
147 if(!empty($group['items'])){
148 $temp = self::extract_actions_from_groups($group['items']);
149 if(!empty($temp)) $actions = array_merge($actions, $temp);
150 }
151 }
152 }
153 return $actions;
154 }
155
156 public static function iterate_trigger_conditions($trigger_conditions, $actions){
157 $trigger_condition = reset($trigger_conditions);
158 if(!empty($trigger_conditions)){
159 $group = [[
160 'type' => 'group',
161 'trigger_condition' => [
162 'property' => $trigger_condition['property']
163 ],
164 'items' => [[
165 'type' => 'trigger_condition_branch',
166 'settings' => [
167 'operator' => $trigger_condition['operator'],
168 'value' => $trigger_condition['value']
169 ],
170 'items' => self::iterate_trigger_conditions(array_slice($trigger_conditions, 1), $actions)
171 ]]
172 ]];
173 }else{
174 // no more conditions, do actions
175 $action_items = [];
176 if(!empty($actions)){
177 foreach($actions as $action_id => $action){
178 $action_items[] = [
179 'type' => 'action',
180 'id' => $action_id,
181 'settings' => [
182 'status' => $action['status'] ?? LATEPOINT_STATUS_ACTIVE,
183 'type' => $action['type'],
184 'settings' => $action['settings'] ?? []
185 ]
186 ];
187 }
188 }
189 $group = [[
190 'type' => 'group',
191 'trigger_condition' => false,
192 'items' => $action_items
193 ]];
194 }
195 return $group;
196 }
197
198 public static function values_for_trigger_condition_property($property){
199 $values = [];
200 $property_data = explode('__', $property);
201 $property_object = $property_data[0];
202 $property_attribute = $property_data[1];
203 switch($property_object){
204 case 'order':
205 case 'old_order':
206 switch($property_attribute) {
207 case 'fulfillment_status':
208 $fulfillment_statuses = OsOrdersHelper::get_fulfillment_statuses_list();
209 foreach ( $fulfillment_statuses as $fulfillment_status_key => $fulfillment_status ) {
210 $values[] = [ 'value' => $fulfillment_status_key, 'label' => $fulfillment_status ];
211 }
212 break;
213 case 'payment_status':
214 $payment_statuses = OsOrdersHelper::get_order_payment_statuses_list();
215 foreach ( $payment_statuses as $payment_status_key => $payment_status ) {
216 $values[] = [ 'value' => $payment_status_key, 'label' => $payment_status ];
217 }
218 break;
219 case 'status':
220 $statuses = OsOrdersHelper::get_order_statuses_list();
221 foreach ( $statuses as $status_key => $status ) {
222 $values[] = [ 'value' => $status_key, 'label' => $status ];
223 }
224 break;
225 }
226 break;
227 case 'booking':
228 case 'old_booking':
229 switch($property_attribute){
230 case 'payment_status':
231 $payment_statuses = OsOrdersHelper::get_order_payment_statuses_list();
232 foreach($payment_statuses as $payment_status_key => $payment_status){
233 $values[] = ['value' => $payment_status_key, 'label' => $payment_status];
234 }
235 break;
236 case 'status':
237 $statuses = OsBookingHelper::get_statuses_list();
238 foreach($statuses as $status_key => $status){
239 $values[] = ['value' => $status_key, 'label' => $status];
240 }
241 break;
242 case 'agent_id':
243 $values = OsFormHelper::model_options_for_multi_select('agent');
244 break;
245 case 'service_id':
246 $values = OsFormHelper::model_options_for_multi_select('service');
247 break;
248 }
249 break;
250 case 'customer':
251 break;
252 case 'transaction':
253 switch($property_attribute){
254 case 'payment_method':
255 $values = OsPaymentsHelper::get_all_payment_methods_for_select();
256 break;
257 case 'payment_portion':
258 $values = OsPaymentsHelper::get_payment_portions_list();
259 break;
260 case 'kind':
261 $values = OsPaymentsHelper::get_list_of_transaction_kinds();
262 break;
263 case 'status':
264 $values = OsPaymentsHelper::get_transaction_statuses_list();
265 break;
266 }
267 break;
268 }
269
270 /**
271 * Returns an array of operators available for a selected condition property
272 *
273 * @since 4.7.0
274 * @hook latepoint_process_event_trigger_condition_properties
275 *
276 * @param {array} $values Array of operators
277 * @param {string} $property Property in a format of object_code__object_property (e.g. old_booking__agent_id)
278 * @param {string} $property_object Object name
279 * @param {string} $property_attribute Property of an object
280 *
281 * @returns {array} The array of available operators
282 *
283 */
284 $values = apply_filters('latepoint_available_values_for_process_event_trigger_condition_property', $values, $property, $property_object, $property_attribute);
285 return $values;
286 }
287
288
289 }