PluginProbe ʕ •ᴥ•ʔ
LatePoint – Calendar Booking Plugin for Appointments and Events / 5.1.3
LatePoint – Calendar Booking Plugin for Appointments and Events v5.1.3
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 1 year 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 1 year ago carts_helper.php 1 year ago connector_helper.php 1 year ago csv_helper.php 1 year ago customer_helper.php 1 year ago database_helper.php 1 year ago debug_helper.php 1 year ago defaults_helper.php 1 year ago elementor_helper.php 1 year ago email_helper.php 1 year ago encrypt_helper.php 1 year ago events_helper.php 1 year ago form_helper.php 1 year ago icalendar_helper.php 1 year ago image_helper.php 1 year ago invoices_helper.php 1 year 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 1 year ago meta_helper.php 1 year ago migrations_helper.php 1 year ago money_helper.php 1 year ago notifications_helper.php 1 year ago order_intent_helper.php 1 year ago orders_helper.php 1 year 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 1 year ago router_helper.php 1 year ago service_helper.php 1 year ago sessions_helper.php 1 year ago settings_helper.php 1 year ago shortcodes_helper.php 1 year ago sms_helper.php 1 year ago steps_helper.php 1 year ago stripe_connect_helper.php 1 year ago styles_helper.php 1 year ago support_topics_helper.php 1 year ago time_helper.php 1 year ago timeline_helper.php 1 year ago transaction_intent_helper.php 1 year ago util_helper.php 1 year ago version_specific_updates_helper.php 1 year 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 }