FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
latepoint
/
lib
/
helpers
Edit File: processes_helper.php
<?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; } }
Save
Back