Initial commit
This commit is contained in:
@@ -0,0 +1,221 @@
|
||||
<?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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user