Files
gustavoo-me/wp-content/plugins/fluent-crm/app/Services/Funnel/Actions/WaitTimeAction.php
T
2026-07-23 22:56:30 -03:00

222 lines
8.8 KiB
PHP

<?php
namespace FluentCrm\App\Services\Funnel\Actions;
use FluentCrm\App\Services\Funnel\BaseAction;
use FluentCrm\Framework\Support\Arr;
class WaitTimeAction extends BaseAction
{
public function __construct()
{
$this->actionName = 'fluentcrm_wait_times';
$this->priority = 10;
parent::__construct();
add_filter('fluentcrm_funnel_sequence_filtered_' . $this->actionName, array($this, 'gettingAction'), 10, 2);
}
public function getBlock()
{
return [
'category' => __('CRM', 'fluent-crm'),
'title' => __('Wait X Days/Hours', 'fluent-crm'),
'description' => __('Wait defined timespan before execute the next action', 'fluent-crm'),
'icon' => 'fc-icon-wait_time',
'settings' => [
'wait_type' => 'unit_wait',
'wait_time_amount' => '',
'wait_time_unit' => 'days',
'is_timestamp_wait' => '',
'wait_date_time' => '',
'to_day' => [],
'to_day_time' => ''
]
];
}
public function gettingAction($sequence, $funnel)
{
if (empty($sequence['settings']['wait_type'])) {
if (Arr::get($sequence, 'settings.is_timestamp_wait') == 'yes') {
$sequence['settings']['wait_type'] = 'timestamp_wait';
} else {
$sequence['settings']['wait_type'] = 'unit_wait';
}
$sequence['settings']['to_day'] = [];
$sequence['settings']['to_day_time'] = '';
}
if (!empty($sequence['settings']['to_day'])) {
$sequence['settings']['to_day'] = array_map(function ($day) {
return substr($day, 0, 3);
}, $sequence['settings']['to_day']);
}
return $sequence;
}
public function getBlockFields()
{
$customFields = FluentCrmApi('contacts')->getCustomFields(['date_time', 'date'], true);
// add date of birth field at the beginning
array_unshift($customFields, [
'id' => '__date_of_birth__',
'title' => __('Contact\'s Next Date of Birth', 'fluent-crm')
]);
return [
'title' => __('Wait X Days/Hours', 'fluent-crm'),
'sub_title' => __('Wait defined timespan before execute the next action', 'fluent-crm'),
'fields' => [
'wait_type' => [
'type' => 'radio_buttons',
'label' => __('Waiting Type', 'fluent-crm'),
'options' => [
[
'id' => 'unit_wait',
'title' => __('Wait by period', 'fluent-crm')
],
[
'id' => 'timestamp_wait',
'title' => __('Wait Until Date', 'fluent-crm')
],
[
'id' => 'to_day',
'title' => __('Wait by Weekday', 'fluent-crm')
],
[
'id' => 'by_custom_field',
'title' => __('Wait by Custom Field', 'fluent-crm')
]
]
],
'wait_time_amount' => [
'label' => __('Wait Time', 'fluent-crm'),
'type' => 'input-number',
'wrapper_class' => 'fc_2col_inline pad-r-20',
'dependency' => [
'depends_on' => 'wait_type',
'value' => 'unit_wait',
'operator' => '=',
],
],
'wait_time_unit' => [
'label' => __('Wait Time Unit', 'fluent-crm'),
'type' => 'select',
'wrapper_class' => 'fc_2col_inline',
'options' => [
[
'id' => 'months',
'title' => __('Months', 'fluent-crm')
],
[
'id' => 'days',
'title' => __('Days', 'fluent-crm')
],
[
'id' => 'hours',
'title' => __('Hours', 'fluent-crm')
],
[
'id' => 'minutes',
'title' => __('Minutes', 'fluent-crm')
]
],
'dependency' => [
'depends_on' => 'wait_type',
'value' => 'unit_wait',
'operator' => '=',
],
],
'wait_date_time' => [
'label' => __('Specify Date and Time', 'fluent-crm'),
'type' => 'date_time',
'placeholder' => __('Select Date & Time', 'fluent-crm'),
'inline_help' => __('Please input date and time and this step will be executed after that time (TimeZone will be as per your WordPress Date Time Zone)', 'fluent-crm'),
'dependency' => [
'depends_on' => 'wait_type',
'value' => 'timestamp_wait',
'operator' => '=',
]
],
'to_day' => [
'type' => 'checkboxes',
'label' => __('Wait until next day(s) of the week', 'fluent-crm'),
'wrapper_class' => 'fc_2col_inline pad-r-20',
'options' => [
[
'id' => 'Mon',
'title' => __('Mon', 'fluent-crm')
],
[
'id' => 'Tue',
'title' => __('Tue', 'fluent-crm')
],
[
'id' => 'Wed',
'title' => __('Wed', 'fluent-crm')
],
[
'id' => 'Thu',
'title' => __('Thu', 'fluent-crm')
],
[
'id' => 'Fri',
'title' => __('Fri', 'fluent-crm')
],
[
'id' => 'Sat',
'title' => __('Sat', 'fluent-crm')
],
[
'id' => 'Sun',
'title' => __('Sun', 'fluent-crm')
]
],
'dependency' => [
'depends_on' => 'wait_type',
'value' => 'to_day',
'operator' => '=',
]
],
'to_day_time' => [
'label' => __('Time of the day', 'fluent-crm'),
'type' => 'time_selector',
'placeholder' => __('Select Time', 'fluent-crm'),
'wrapper_class' => 'fc_2col_inline',
'picker_options' => [
'start' => '00:00',
'step' => '00:10',
'end' => '23:59'
],
'dependency' => [
'depends_on' => 'wait_type',
'value' => 'to_day',
'operator' => '=',
]
],
'by_custom_field' => [
'label' => __('Select Contact\'s Custom Field', 'fluent-crm'),
'type' => 'select',
'inline_help' => __('If no value is found in the contact\'s custom field or past date then it will wait only 1 minute by default', 'fluent-crm'),
'options' => $customFields,
'dependency' => [
'depends_on' => 'wait_type',
'value' => 'by_custom_field',
'operator' => '=',
]
],
]
];
}
public function handle($subscriber, $sequence, $funnelSubscriberId, $funnelMetric)
{
// No-op: delay is handled by the processor via sequence delay settings
}
}