[Back] <?php
class OsReplacerHelper {
/**
* @param array $data_objects
* @param array $other_vars
*
* @return array
*/
public static function generate_replacement_vars_from_data_objects( array $data_objects, array $other_vars = [] ): array {
$vars = [];
foreach ( $data_objects as $data_object ) {
switch ( $data_object['model'] ) {
case 'old_booking':
$old_booking = $data_object['model_ready'] ?? new OsBookingModel( $data_object['id'] );
$temp_vars = self::generate_replacement_vars_from_booking( $old_booking );
foreach ( $temp_vars as $key => $data ) {
$vars[ 'old_' . $key ] = $data;
}
break;
case 'booking':
$booking = $data_object['model_ready'] ?? new OsBookingModel( $data_object['id'] );
$vars = array_merge( $vars, self::generate_replacement_vars_from_booking( $booking ) );
break;
case 'old_order':
$old_order = $data_object['model_ready'] ?? new OsOrderModel( $data_object['id'] );
$temp_vars = self::generate_replacement_vars_from_order( $old_order );
foreach ( $temp_vars as $key => $data ) {
$vars[ 'old_' . $key ] = $data;
}
break;
case 'order':
$order = $data_object['model_ready'] ?? new OsOrderModel( $data_object['id'] );
$vars = array_merge( $vars, self::generate_replacement_vars_from_order( $order ) );
break;
case 'agent':
$agent = $data_object['model_ready'] ?? new OsAgentModel( $data_object['id'] );
$vars = array_merge( $vars, self::generate_replacement_vars_from_agent( $agent ) );
break;
case 'customer':
$customer = $data_object['model_ready'] ?? new OsCustomerModel( $data_object['id'] );
$vars = array_merge( $vars, self::generate_replacement_vars_from_customer( $customer ) );
break;
case 'transaction':
$transaction = $data_object['model_ready'] ?? new OsTransactionModel( $data_object['id'] );
$vars = array_merge( $vars, self::generate_replacement_vars_from_transaction( $transaction ) );
break;
case 'payment_request':
$payment_request = $data_object['model_ready'] ?? new OsPaymentRequestModel( $data_object['id'] );
$vars = array_merge( $vars, self::generate_replacement_vars_from_payment_request( $payment_request ) );
break;
}
}
if ( ! empty( $other_vars ) ) {
$vars = array_merge( $vars, $other_vars );
}
/**
* Returns an array of replacement variables, based on supplied data objects
*
* @param {array} $vars Current array of replacement variables
* @param {array} $data_objects Array of data objects to generate replacement variables for
* @param {array} $other_vars Array of additional (pre-prepared) replacement variables
*
* @returns {array} Filtered array of replacement variables
* @since 4.7.0
* @hook latepoint_prepare_replacement_vars_from_data_objects
*
*/
return apply_filters( 'latepoint_prepare_replacement_vars_from_data_objects', $vars, $data_objects, $other_vars );
}
/**
*
* Prepares an array of variables to be used in replacer method from a customer object
*
* @param OsCustomerModel $customer
* @param array $other_vars
*
* @return array
*/
public static function generate_replacement_vars_from_customer( OsCustomerModel $customer, array $other_vars = [] ): array {
$vars = [];
$vars['customer'] = $customer;
if ( ! empty( $other_vars ) ) {
$vars = array_merge( $vars, $other_vars );
}
/**
* Returns an array of replacement variables, based on supplied <code>OsCustomerModel</code> instance
*
* @param {array} $vars Current array of replacement variables
* @param {OsCustomerModel} $customer Instance of <code>OsCustomerModel</code> to generate replacement variables for
* @param {array} $other_vars Array of additional (pre-prepared) replacement variables
*
* @returns {array} Filtered array of replacement variables
* @since 4.7.0
* @hook latepoint_prepare_replacement_vars_from_customer
*
*/
return apply_filters( 'latepoint_prepare_replacement_vars_from_customer', $vars, $customer, $other_vars );
}
/**
*
* Prepares an array of variables to be used in replacer method from a transaction object
*
* @param OsTransactionModel $transaction
* @param array $other_vars
*
* @return array
*/
public static function generate_replacement_vars_from_transaction( OsTransactionModel $transaction, array $other_vars = [] ): array {
$vars = [];
$vars['transaction'] = $transaction;
$vars['order'] = $transaction->order;
$vars['customer'] = $transaction->order->customer;
if ( ! empty( $other_vars ) ) {
$vars = array_merge( $vars, $other_vars );
}
return apply_filters( 'latepoint_prepare_replacement_vars_from_transaction', $vars, $transaction, $other_vars );
}
/**
*
* Prepares an array of variables to be used in replacer method from a payment_request object
*
* @param OsPaymentRequestModel $payment_request
* @param array $other_vars
*
* @return array
*/
public static function generate_replacement_vars_from_payment_request( OsPaymentRequestModel $payment_request, array $other_vars = [] ): array {
$vars = [];
$vars['payment_request'] = $payment_request;
$vars['order'] = $payment_request->get_order();
$vars['customer'] = $payment_request->get_customer();
if ( ! empty( $other_vars ) ) {
$vars = array_merge( $vars, $other_vars );
}
return apply_filters( 'latepoint_prepare_replacement_vars_from_payment_request', $vars, $payment_request, $other_vars );
}
/**
*
* Prepares an array of variables to be used in replacer method from an agent object
*
* @param OsAgentModel $agent
* @param array $other_vars
*
* @return array
*/
public static function generate_replacement_vars_from_agent( OsAgentModel $agent, array $other_vars = [] ): array {
$vars = [];
$vars['agent'] = $agent;
if ( ! empty( $other_vars ) ) {
$vars = array_merge( $vars, $other_vars );
}
/**
* Returns an array of replacement variables, based on supplied <code>OsAgentModel</code> instance
*
* @param {array} $vars Current array of replacement variables
* @param {OsAgentModel} $agent Instance of <code>OsAgentModel</code> to generate replacement variables for
* @param {array} $other_vars Array of additional (pre-prepared) replacement variables
*
* @returns {array} Filtered array of replacement variables
* @since 4.7.0
* @hook latepoint_prepare_replacement_vars_from_agent
*
*/
return apply_filters( 'latepoint_prepare_replacement_vars_from_agent', $vars, $agent, $other_vars );
}
/**
*
* Prepares an array of variables to be used in replacer method from a order object
*
* @param OsOrderModel $order
* @param array $other_vars
*
* @return array
*/
public static function generate_replacement_vars_from_order( OsOrderModel $order, array $other_vars = [] ): array {
$vars = [];
$vars['order'] = $order;
$vars['customer'] = $order->get_customer();
if ( ! empty( $other_vars ) ) {
$vars = array_merge( $vars, $other_vars );
}
/**
* Returns an array of replacement variables, based on supplied <code>OsOrderModel</code> instance
*
* @param {array} $vars Current array of replacement variables
* @param {OsOrderModel} $order Instance of <code>OsOrderModel</code> to generate replacement variables for
* @param {array} $other_vars Array of additional (pre-prepared) replacement variables
*
* @returns {array} Filtered array of replacement variables
* @since 4.7.0
* @hook latepoint_prepare_replacement_vars_from_order
*
*/
return apply_filters( 'latepoint_prepare_replacement_vars_from_order', $vars, $order, $other_vars );
}
/**
*
* Prepares an array of variables to be used in replacer method from a booking object
*
* @param OsBookingModel $booking
* @param array $other_vars
*
* @return array
*/
public static function generate_replacement_vars_from_booking( OsBookingModel $booking, array $other_vars = [] ): array {
$vars = [];
$vars['booking'] = $booking;
$vars['customer'] = $booking->customer;
$vars['agent'] = $booking->agent;
$vars['order'] = $booking->order;
if ( ! empty( $other_vars ) ) {
$vars = array_merge( $vars, $other_vars );
}
/**
* Returns an array of replacement variables, based on supplied <code>OsBookingModel</code> instance
*
* @param {array} $vars Current array of replacement variables
* @param {OsBookingModel} $customer Instance of <code>OsBookingModel</code> to generate replacement variables for
* @param {array} $other_vars Array of additional (pre-prepared) replacement variables
*
* @returns {array} Filtered array of replacement variables
* @since 4.7.0
* @hook latepoint_prepare_replacement_vars_from_booking
*
*/
return apply_filters( 'latepoint_prepare_replacement_vars_from_booking', $vars, $booking, $other_vars );
}
public static function stylize_vars( $html ) {
$html = self::replace_business_vars( $html );
$html = str_replace( '{{', '<span class="os-template-var">{{', $html );
$html = str_replace( '}}', '}}</span>', $html );
// fix issue when the template variable is inside of an href="{{var}}", we don't want to replace those
$html = str_replace( '"<span class="os-template-var">{{', '"{{', $html );
$html = str_replace( '}}</span>"', '}}"', $html );
return $html;
}
public static function replace_customer_vars( $text, $customer ) {
$needles = array(
'{{customer_full_name}}',
'{{customer_first_name}}',
'{{customer_last_name}}',
'{{customer_email}}',
'{{customer_phone}}',
'{{customer_notes}}'
);
$replacements = array(
$customer->full_name,
$customer->first_name,
$customer->last_name,
$customer->email,
$customer->phone,
$customer->notes
);
$original_text = $text;
$text = str_replace( $needles, $replacements, $text );
/**
* Returns a string with variables replaced, based on supplied <code>OsCustomerModel</code> instance
*
* @param {string} $text Current string with variables replaced
* @param {OsCustomerModel} $customer Instance of <code>OsCustomerModel</code> to replace variables for
* @param {string} $original_text Original string before any customer-related replacements were performed
* @param {array} $needles Array of default needles to be replaced
* @param {array} $replacements Array of default replacement values to supplant each needle
*
* @returns {string} Filtered string with variables replaced
* @since 4.3.2
* @hook latepoint_replace_customer_vars
*
*/
return apply_filters( 'latepoint_replace_customer_vars', $text, $customer, $original_text, $needles, $replacements );
}
public static function replace_payment_request_vars( string $text, OsPaymentRequestModel $payment_request ) {
$needles = [
'{{payment_request_amount}}',
'{{payment_request_due_at}}',
'{{payment_request_portion}}',
'{{payment_request_pay_url}}'
];
$replacements = [
OsMoneyHelper::format_price($payment_request->charge_amount, true, false),
$payment_request->get_readable_due_at(),
$payment_request->portion,
$payment_request->get_invoice()->get_pay_url()
];
$text = str_replace( $needles, $replacements, $text );
/**
* Returns a string with payment request variables replaced, based on supplied <code>OsPaymentRequestModel</code> instance
*
* @param {string} $text Current string with variables replaced
* @param {OsPaymentRequestModel} $payment_request Instance of <code>OsPaymentRequestModel</code> to replace variables for
*
* @returns {string} Filtered string with variables replaced
* @since 5.1.0
* @hook latepoint_replace_payment_request_vars
*
*/
$text = apply_filters( 'latepoint_replace_payment_request_vars', $text, $payment_request );
return $text;
}
public static function replace_transaction_vars( $text, $transaction ) {
$needles = [
'{{transaction_token}}',
'{{transaction_amount}}',
'{{transaction_processor}}',
'{{transaction_payment_method}}',
'{{transaction_kind}}',
'{{transaction_status}}',
'{{transaction_notes}}',
'{{transaction_payment_portion}}'
];
$replacements = [
$transaction->token,
OsMoneyHelper::format_price($transaction->amount),
$transaction->processor,
$transaction->payment_method,
$transaction->kind,
$transaction->status,
$transaction->notes,
$transaction->payment_portion
];
$text = str_replace( $needles, $replacements, $text );
/**
* Returns a string with transaction variables replaced, based on supplied <code>OsTransactionModel</code> instance
*
* @param {string} $text Current string with variables replaced
* @param {OsTransactionModel} $transaction Instance of <code>OsTransactionModel</code> to replace variables for
*
* @returns {string} Filtered string with variables replaced
* @since 5.1.0
* @hook latepoint_replace_transaction_vars
*
*/
$text = apply_filters( 'latepoint_replace_transaction_vars', $text, $transaction );
return $text;
}
public static function replace_agent_vars( $text, $agent ) {
$needles = array(
'{{agent_first_name}}',
'{{agent_last_name}}',
'{{agent_full_name}}',
'{{agent_display_name}}',
'{{agent_email}}',
'{{agent_phone}}',
'{{agent_additional_emails}}',
'{{agent_additional_phones}}'
);
$replacements = array(
$agent->first_name,
$agent->last_name,
$agent->full_name,
$agent->display_name,
$agent->email,
$agent->phone,
$agent->extra_emails,
$agent->extra_phones
);
$original_text = $text;
$text = str_replace( $needles, $replacements, $text );
/**
* Returns a string with variables replaced, based on supplied <code>OsAgentModel</code> instance
*
* @param {string} $text Current string with variables replaced
* @param {OsAgentModel} $agent Instance of <code>OsAgentModel</code> to replace variables for
* @param {string} $original_text Original string before any agent-related replacements were performed
* @param {array} $needles Array of default needles to be replaced
* @param {array} $replacements Array of default replacement values to supplant each needle
*
* @returns {string} Filtered string with variables replaced
* @since 4.7.0
* @hook latepoint_replace_agent_vars
*
*/
return apply_filters( 'latepoint_replace_agent_vars', $text, $agent, $original_text, $needles, $replacements );
}
public static function replace_business_vars( $text ) {
$needles = [
'{{business_logo_image}}',
'{{business_logo_url}}',
'{{business_address}}',
'{{business_phone}}',
'{{business_name}}',
'{{customer_dashboard_url}}',
];
$replacements = [
OsSettingsHelper::get_business_logo_image(),
OsSettingsHelper::get_business_logo_url(),
OsSettingsHelper::get_settings_value( 'business_address', '' ),
OsSettingsHelper::get_settings_value( 'business_phone', '' ),
OsSettingsHelper::get_settings_value( 'business_name', '' ),
OsSettingsHelper::get_customer_dashboard_url()
];
$original_text = $text;
$text = str_replace( $needles, $replacements, $text );
/**
* Returns a string with business-related variables replaced
*
* @param {string} $text Current string with variables replaced
* @param {string} $original_text Original string before any business-related replacements were performed
* @param {array} $needles Array of default needles to be replaced
* @param {array} $replacements Array of default replacement values to supplant each needle
*
* @returns {string} Filtered string with variables replaced
* @since 4.7.0
* @hook latepoint_replace_business_vars
*
*/
return apply_filters( 'latepoint_replace_business_vars', $text, $original_text, $needles, $replacements );
}
public static function replace_tracking_vars( $text, $order ) {
$needles = [
'{{order_id}}',
'{{customer_id}}',
'{{order_total}}',
'{{service_ids}}',
'{{agent_ids}}',
'{{bundle_ids}}',
'{{location_ids}}',
];
$replacements = [
$order->id,
$order->customer_id,
OsMoneyHelper::format_price($order->get_total()),
OsOrdersHelper::extract_property_by_name($order, 'service_ids'),
OsOrdersHelper::extract_property_by_name($order, 'agent_ids'),
OsOrdersHelper::extract_property_by_name($order, 'bundle_ids'),
OsOrdersHelper::extract_property_by_name($order, 'location_ids'),
];
$original_text = $text;
$text = str_replace( $needles, $replacements, $text );
/**
* Returns a string with tracking-related variables replaced, based on supplied OsOrderModel instance
*
* @param {string} $text Current string with variables replaced
* @param {OsBookingModel} $order Instance of OsOrderModel to replace variables for
* @param {string} $original_text Original string before any tracking-related replacements were performed
* @param {array} $needles Array of default needles to be replaced
* @param {array} $replacements Array of default replacement values to supplant each needle
*
* @returns {string} Filtered string with variables replaced
* @since 5.0.7
* @hook latepoint_replace_tracking_vars
*
*/
return apply_filters( 'latepoint_replace_tracking_vars', $text, $order, $original_text, $needles, $replacements );
}
public static function replace_order_vars( $text, OsOrderModel $order ) {
$needles = [
'{{order_id}}',
'{{order_confirmation_code}}',
'{{order_coupon_code}}',
'{{order_tax_total}}',
'{{order_coupon_discount}}',
'{{order_subtotal}}',
'{{order_total}}',
'{{order_status}}',
'{{order_fulfillment_status}}',
'{{order_payment_status}}',
'{{order_payments_total}}',
'{{order_balance_due_total}}',
'{{order_transactions_breakdown}}',
'{{order_summary_breakdown}}',
'{{order_items}}',
'{{order_agents_emails}}',
'{{order_agents_full_names}}',
'{{manage_order_url_agent}}',
'{{manage_order_url_customer}}'
];
$replacements = [
$order->id,
$order->confirmation_code,
$order->coupon_code,
$order->tax_total,
OsMoneyHelper::format_price($order->coupon_discount),
OsMoneyHelper::format_price($order->get_subtotal()),
OsMoneyHelper::format_price($order->get_total()),
OsOrdersHelper::get_nice_order_status_name( $order->status ),
OsOrdersHelper::get_nice_order_fulfillment_status_name( $order->fulfillment_status ),
OsOrdersHelper::get_nice_order_payment_status_name( $order->payment_status ),
OsMoneyHelper::format_price($order->get_total_amount_paid_from_transactions()),
OsMoneyHelper::format_price($order->get_total_balance_due()),
OsOrdersHelper::generate_transactions_breakdown_html( $order ),
OsOrdersHelper::generate_summary_breakdown_html( $order ),
OsOrdersHelper::generate_order_items_html( $order ),
OsOrdersHelper::extract_agent_emails( $order ),
OsOrdersHelper::extract_agent_full_names( $order ),
OsOrdersHelper::generate_direct_manage_order_url( $order, 'agent' ),
OsOrdersHelper::generate_direct_manage_order_url( $order, 'customer' ),
];
$original_text = $text;
$text = str_replace( $needles, $replacements, $text );
/**
* Returns a string with variables replaced, based on supplied <code>OsOrderModel</code> instance
*
* @param {string} $text Current string with variables replaced
* @param {OsOrderModel} $order Instance of <code>OsOrderModel</code> to replace variables for
* @param {string} $original_text Original string before any order-related replacements were performed
* @param {array} $needles Array of default needles to be replaced
* @param {array} $replacements Array of default replacement values to supplant each needle
*
* @returns {string} Filtered string with variables replaced
* @since 5.0.0
* @hook latepoint_replace_order_vars
*
*/
return apply_filters( 'latepoint_replace_order_vars', $text, $order, $original_text, $needles, $replacements );
}
public static function replace_booking_vars( $text, OsBookingModel $booking ) {
$needles = [
'{{booking_id}}',
'{{booking_code}}',
'{{booking_price}}',
'{{service_name}}',
'{{service_category}}',
'{{start_date}}',
'{{start_time}}',
'{{end_time}}',
'{{booking_status}}',
'{{location_name}}',
'{{location_full_address}}',
'{{booking_duration}}',
'{{manage_booking_url_agent}}',
'{{manage_booking_url_customer}}'
];
$total_duration = ( $booking->get_total_duration() > 0 ) ? $booking->get_total_duration() . ' ' . __( 'minutes', 'latepoint' ) : __( 'n/a', 'latepoint' );
$order_item = new OsOrderItemModel( $booking->order_item_id );
$replacements = [
$booking->id,
$booking->booking_code,
OsMoneyHelper::format_price($order_item->get_total()),
$booking->service->name,
$booking->service->category_name,
$booking->format_start_date_and_time( OsSettingsHelper::get_readable_date_format(), false ),
$booking->nice_start_time,
$booking->nice_end_time,
$booking->nice_status,
$booking->location->name,
$booking->location->full_address,
$total_duration,
OsBookingHelper::generate_direct_manage_booking_url( $booking, 'agent' ),
OsBookingHelper::generate_direct_manage_booking_url( $booking, 'customer' ),
];
$original_text = $text;
$text = str_replace( $needles, $replacements, $text );
/**
* Returns a string with variables replaced, based on supplied <code>OsBookingModel</code> instance
*
* @param {string} $text Current string with variables replaced
* @param {OsBookingModel} $booking Instance of <code>OsBookingModel</code> to replace variables for
* @param {string} $original_text Original string before any booking-related replacements were performed
* @param {array} $needles Array of default needles to be replaced
* @param {array} $replacements Array of default replacement values to supplant each needle
*
* @returns {string} Filtered string with variables replaced
* @since 3.0.4
* @hook latepoint_replace_booking_vars
*
*/
return apply_filters( 'latepoint_replace_booking_vars', $text, $booking, $original_text, $needles, $replacements );
}
public static function replace_other_vars( $text, $other_vars ) : string {
if ( isset( $other_vars['old_status'] ) ) {
$text = str_replace( '{{booking_old_status}}', $other_vars['old_status'], $text );
}
if ( isset( $other_vars['token'] ) ) {
$text = str_replace( '{{token}}', $other_vars['token'], $text );
}
return $text;
}
public static function replace_all_vars( string $text, array $vars ) : string {
$original_text = $text;
if ( isset( $vars['order'] ) ) {
$text = self::replace_order_vars( $text, $vars['order'] );
}
if ( isset( $vars['booking'] ) ) {
$text = self::replace_booking_vars( $text, $vars['booking'] );
}
if ( isset( $vars['customer'] ) ) {
$text = self::replace_customer_vars( $text, $vars['customer'] );
}
if ( isset( $vars['agent'] ) ) {
$text = self::replace_agent_vars( $text, $vars['agent'] );
}
if ( isset( $vars['transaction'] ) ) {
$text = self::replace_transaction_vars( $text, $vars['transaction'] );
}
if ( isset( $vars['payment_request'] ) ) {
$text = self::replace_payment_request_vars( $text, $vars['payment_request'] );
}
if ( isset( $vars['other_vars'] ) ) {
$text = self::replace_other_vars( $text, $vars['other_vars'] );
}
$text = self::replace_business_vars( $text );
/**
* Returns a string with needles replaced, based on supplied variables
*
* @param {string} $text Current string with variables replaced
* @param {array} $vars Array of variables to perform replacements for
* @param {string} $original_text Original string before any replacements were performed
*
* @returns {string} Filtered string with variables replaced
* @since 4.3.2
* @hook latepoint_replace_all_vars_in_template
*
*/
return apply_filters( 'latepoint_replace_all_vars_in_template', $text, $vars, $original_text );
}
}