|
Server : LiteSpeed System : Linux premium92.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : rbnsfqys ( 805) PHP Version : 8.1.33 Disable Function : NONE Directory : /home/rbnsfqys/public_html/wp-content/plugins/latepoint/lib/helpers/ |
<?php
/*
* Copyright (c) 2022 LatePoint LLC. All rights reserved.
*/
class OsProcessesHelper
{
public static function check_if_process_exists(OsProcessModel $process): bool{
$existing_process = new OsProcessModel();
$existing_process = $existing_process->select('id')->where(['event_type' => $process->event_type, 'name' => $process->name])->set_limit(1)->get_results();
return !empty($existing_process);
}
public static function get_object_data_by_source(string $source, string $value, bool $include_model = true) : array{
$object_data = [];
switch($source){
case 'booking_id':
$object_data = ['model' => 'booking', 'id' => $value];
if($include_model){
$model = new OsBookingModel($value);
$object_data['model_ready'] = $model;
}
break;
case 'order_id':
$object_data = ['model' => 'order', 'id' => $value];
if($include_model){
$model = new OsOrderModel($value);
$object_data['model_ready'] = $model;
}
break;
case 'payment_request_id':
$object_data = ['model' => 'payment_request', 'id' => $value];
if($include_model){
$model = new OsPaymentRequestModel($value);
$object_data['model_ready'] = $model;
}
break;
}
/**
* Get the list of booking statuses that are enabled for synchronization with Google Calendar
*
* @since 5.1.0
* @hook latepoint_get_process_object_by_source
*
* @param {array} $object_data Object info
* @param {string} $source Source type
* @param {string} $value Source value
* @param {bool} $include_model Should include model into object data or not
*
* @returns {array} Filtered object data
*/
$object_data = apply_filters('latepoint_get_process_object_by_source', $object_data, $source, $value, $include_model);
return $object_data;
}
public static function processes_list_for_select(){
$processes = new OsProcessModel();
$processes = $processes->get_results_as_models();
$processes_list = [];
foreach($processes as $process){
$processes_list[] = ['value' => $process->id, 'label' => $process->name];
}
return $processes_list;
}
public static function extract_trigger_conditions_from_groups($groups){
$trigger_conditions = [];
if($groups){
foreach($groups as $group){
if($group['type'] == 'group' && !empty($group['trigger_condition'])){
$trigger_condition = ['id' => \LatePoint\Misc\ProcessEvent::generate_trigger_condition_id()];
$trigger_condition['property'] = $group['trigger_condition']['property'];
foreach($group['items'] as $item){
if($item['type'] == 'trigger_condition_branch'){
$trigger_condition['operator'] = $item['settings']['operator'];
$trigger_condition['value'] = $item['settings']['value'];
}
$trigger_conditions[] = $trigger_condition;
if($item['items']){
$temp = self::extract_trigger_conditions_from_groups($item['items']);
if(!empty($temp)) $trigger_conditions = array_merge($trigger_conditions, $temp);
}
}
}
}
}
return $trigger_conditions;
}
/**
* @param \LatePoint\Misc\ProcessEvent $event
* @return string
*
* Generate conditions form for an event
*
*/
public static function trigger_conditions_html_for_event(\LatePoint\Misc\ProcessEvent $event): string{
if(empty(\LatePoint\Misc\ProcessEvent::get_available_trigger_condition_objects_for_event_type($event->type))) return '';
$temp_id = 'pe_'.\OsUtilHelper::random_text('alnum', 6);
$conditions_html = '<div class="pe-conditions" id="pe-conditions-for-'.esc_attr($temp_id).'" style="'.((!empty($event->trigger_conditions)) ? 'display: block;' : 'display: none;').'">
<div class="pe-conditions-heading">'.__('Trigger only if:', 'latepoint').'</div>
'.$event->trigger_conditions_form_html().'
</div>';
$conditions_html = apply_filters('latepoint_process_conditions_html', $conditions_html, $event, $temp_id);
$html = '<div class="sub-section-row">
<div class="sub-section-label">
<h3>'.__('Conditional', 'latepoint').'</h3>
</div>
<div class="sub-section-content">
'.OsFormHelper::toggler_field('process[event][conditional]', __('Trigger only when specific conditions are met', 'latepoint'), !empty($event->trigger_conditions), "pe-conditions-for-". $temp_id).'
'.$conditions_html.'
</div>
</div>';
return $html;
}
public static function time_offset_html_for_event(\LatePoint\Misc\ProcessEvent $event): string{
$temp_id = 'pe_'.\OsUtilHelper::random_text('alnum', 6);
$time_offset_settings_html = OsUtilHelper::pro_feature_block();
$time_offset_settings_html = apply_filters('latepoint_event_time_offset_settings_html', $time_offset_settings_html, $event);
$html = '<div class="sub-section-row">
<div class="sub-section-label">
<h3>'.__('Time offset', 'latepoint').'</h3>
</div>
<div class="sub-section-content">
'.OsFormHelper::toggler_field('process[event][has_time_offset]', __('Execute actions with a time offset', 'latepoint'), !empty($event->time_offset), "pe-conditions-for-". $temp_id).'
<div class="pe-conditions" id="pe-conditions-for-'.esc_attr($temp_id).'" style="'.((!empty($event->time_offset)) ? 'display: block;' : 'display: none;').'">
'.$time_offset_settings_html.'
</div>
</div>
</div>';
return $html;
}
public static function extract_actions_from_groups($groups){
$actions = [];
if($groups){
foreach($groups as $group){
if($group['type'] == 'action'){
$action_data = $group['settings'];
$actions[] = new \LatePoint\Misc\ProcessAction(['type' => $action_data['type'], 'id' => $group['id'], 'status' => $action_data['status'] ?? LATEPOINT_STATUS_ACTIVE, 'settings' => $action_data['settings']]);
}
if(!empty($group['items'])){
$temp = self::extract_actions_from_groups($group['items']);
if(!empty($temp)) $actions = array_merge($actions, $temp);
}
}
}
return $actions;
}
public static function iterate_trigger_conditions($trigger_conditions, $actions){
$trigger_condition = reset($trigger_conditions);
if(!empty($trigger_conditions)){
$group = [[
'type' => 'group',
'trigger_condition' => [
'property' => $trigger_condition['property']
],
'items' => [[
'type' => 'trigger_condition_branch',
'settings' => [
'operator' => $trigger_condition['operator'],
'value' => $trigger_condition['value']
],
'items' => self::iterate_trigger_conditions(array_slice($trigger_conditions, 1), $actions)
]]
]];
}else{
// no more conditions, do actions
$action_items = [];
if(!empty($actions)){
foreach($actions as $action_id => $action){
$action_items[] = [
'type' => 'action',
'id' => $action_id,
'settings' => [
'status' => $action['status'] ?? LATEPOINT_STATUS_ACTIVE,
'type' => $action['type'],
'settings' => $action['settings'] ?? []
]
];
}
}
$group = [[
'type' => 'group',
'trigger_condition' => false,
'items' => $action_items
]];
}
return $group;
}
public static function values_for_trigger_condition_property($property){
$values = [];
$property_data = explode('__', $property);
$property_object = $property_data[0];
$property_attribute = $property_data[1];
switch($property_object){
case 'order':
case 'old_order':
switch($property_attribute) {
case 'fulfillment_status':
$fulfillment_statuses = OsOrdersHelper::get_fulfillment_statuses_list();
foreach ( $fulfillment_statuses as $fulfillment_status_key => $fulfillment_status ) {
$values[] = [ 'value' => $fulfillment_status_key, 'label' => $fulfillment_status ];
}
break;
case 'payment_status':
$payment_statuses = OsOrdersHelper::get_order_payment_statuses_list();
foreach ( $payment_statuses as $payment_status_key => $payment_status ) {
$values[] = [ 'value' => $payment_status_key, 'label' => $payment_status ];
}
break;
case 'status':
$statuses = OsOrdersHelper::get_order_statuses_list();
foreach ( $statuses as $status_key => $status ) {
$values[] = [ 'value' => $status_key, 'label' => $status ];
}
break;
}
break;
case 'booking':
case 'old_booking':
switch($property_attribute){
case 'payment_status':
$payment_statuses = OsOrdersHelper::get_order_payment_statuses_list();
foreach($payment_statuses as $payment_status_key => $payment_status){
$values[] = ['value' => $payment_status_key, 'label' => $payment_status];
}
break;
case 'status':
$statuses = OsBookingHelper::get_statuses_list();
foreach($statuses as $status_key => $status){
$values[] = ['value' => $status_key, 'label' => $status];
}
break;
case 'agent_id':
$values = OsFormHelper::model_options_for_multi_select('agent');
break;
case 'service_id':
$values = OsFormHelper::model_options_for_multi_select('service');
break;
}
break;
case 'customer':
break;
case 'transaction':
switch($property_attribute){
case 'payment_method':
$values = OsPaymentsHelper::get_all_payment_methods_for_select();
break;
case 'payment_portion':
$values = OsPaymentsHelper::get_payment_portions_list();
break;
case 'kind':
$values = OsPaymentsHelper::get_list_of_transaction_kinds();
break;
case 'status':
$values = OsPaymentsHelper::get_transaction_statuses_list();
break;
}
break;
}
/**
* Returns an array of operators available for a selected condition property
*
* @since 4.7.0
* @hook latepoint_process_event_trigger_condition_properties
*
* @param {array} $values Array of operators
* @param {string} $property Property in a format of object_code__object_property (e.g. old_booking__agent_id)
* @param {string} $property_object Object name
* @param {string} $property_attribute Property of an object
*
* @returns {array} The array of available operators
*
*/
$values = apply_filters('latepoint_available_values_for_process_event_trigger_condition_property', $values, $property, $property_object, $property_attribute);
return $values;
}
}