Files
roi-theme/wp-content/plugins/wp-marketing-automations-pro/modules/wc/events/class-bwfan-customer-win-back.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

676 lines
24 KiB
PHP
Executable File

<?php
final class BWFAN_WC_Customer_Win_Back extends BWFAN_Event {
private static $instance = null;
public $user_id = 0;
public $email = '';
public $first_name = '';
public $last_name = '';
protected $min = 30;
protected $max_gap = 15;
private $action_hook = 'bwfan_winback_one_minute_action';
private function __construct() {
$this->event_merge_tag_groups = array( 'bwf_contact' );
$this->event_name = esc_html__( 'Customer Win Back', 'wp-marketing-automations-pro' );
$this->event_desc = esc_html__( 'This event runs once per customers for selected period based on Last Ordered Date.', 'wp-marketing-automations-pro' );
$this->event_rule_groups = array(
'wc_customer',
'bwf_contact_segments',
'bwf_contact',
'bwf_contact_fields',
'bwf_contact_user',
'bwf_contact_wc',
'bwf_contact_geo',
'bwf_engagement',
'bwf_broadcast'
);
$this->optgroup_label = esc_html__( 'Customer', 'wp-marketing-automations-pro' );
$this->source_type = 'wc';
$this->priority = 60;
$this->is_time_independent = true;
$this->v2 = true;
$this->optgroup_priority = 20;
$this->disable_default_fields = true;
}
public static function get_instance() {
if ( null === self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
public function load_hooks() {
add_action( 'bwfan_sync_call_delete_tasks', array( $this, 'delete_schedule_tasks' ), 11, 2 );
add_action( $this->action_hook, array( $this, 'do_winback_schedule_work' ), 10, 3 );
}
/**
* Delete already schedule tasks by email or phone of current event for v1 automation
*
* @param $email
* @param $phone
*
* @return void
*/
public function delete_schedule_tasks( $email, $phone = '' ) {
if ( empty( $email ) && empty( $phone ) ) {
return;
}
$active_automations = BWFAN_Core()->automations->get_active_automations( 1, $this->get_slug() );
if ( empty( $active_automations ) ) {
return;
}
$win_back_automations = array_keys( $active_automations );
/** get schedule task by email */
$schedule_tasks = [];
if ( ! empty( $email ) ) {
$schedule_tasks_email = BWFAN_Common::get_schedule_task_by_email( $win_back_automations, $email );
$schedule_tasks = array_merge( $schedule_tasks, $schedule_tasks_email );
}
if ( ! empty( $phone ) ) {
$schedule_tasks_phone = BWFAN_Common::get_schedule_task_by_phone( $win_back_automations, $phone );
$schedule_tasks = array_merge( $schedule_tasks, $schedule_tasks_phone );
}
$schedule_tasks = array_filter( $schedule_tasks );
if ( 0 === count( $schedule_tasks ) ) {
return;
}
$schedule_tasks = array_unique( $schedule_tasks );
$delete_tasks = array();
foreach ( $schedule_tasks as $automation_id => $tasks ) {
if ( empty( $tasks ) ) {
continue;
}
foreach ( $tasks as $task ) {
$delete_tasks[] = $task['ID'];
}
BWFAN_Core()->tasks->delete_tasks( $delete_tasks );
}
}
/**
* Localize data for html fields for the current event.
*/
public function admin_enqueue_assets() {
if ( BWFAN_Common::is_load_admin_assets( 'automation' ) ) {
$data = $this->get_view_data();
BWFAN_Core()->admin->set_events_js_data( $this->get_slug(), 'last_run', $data['last_run'] );
}
}
public function get_view_data() {
$last_run = '';
if ( isset( $_GET['edit'] ) ) {
$last_run = BWFAN_Model_Automationmeta::get_meta( sanitize_text_field( $_GET['edit'] ), 'last_run' );
if ( false !== $last_run ) {
$last_run = date( get_option( 'date_format' ), strtotime( $last_run ) );
}
}
return [
'last_run' => $last_run,
];
}
/**
* Show the html fields for the current event.
*/
public function get_view( $db_eventmeta_saved_value ) {
?>
<script type="text/html" id="tmpl-event-<?php echo esc_html__( $this->get_slug() ); ?>">
<#
min_days_entered = (_.has(data, 'eventSavedData') && _.has(data.eventSavedData, 'days_min')) ? data.eventSavedData.days_min : '';
min_days_entered = ('' == min_days_entered) ? '<?php esc_attr_e( $this->min ) ?>' : min_days_entered;
max_days_entered = (_.has(data, 'eventSavedData') && _.has(data.eventSavedData, 'days_max')) ? data.eventSavedData.days_max : '';
max_days_entered = ('' == max_days_entered) ? '<?php esc_attr_e( $this->min + $this->max_gap ) ?>' : max_days_entered;
hours_entered = (_.has(data, 'eventSavedData') && _.has(data.eventSavedData, 'hours')) ? data.eventSavedData.hours : 11;
minutes_entered = (_.has(data, 'eventSavedData') && _.has(data.eventSavedData, 'minutes')) ? data.eventSavedData.minutes :'';
#>
<div class="bwfan_mt15"></div>
<div class="bwfan-col-sm-12 bwfan-p-0">
<label for="bwfan-days_before" class="bwfan-label-title"><?php echo esc_html__( 'Customer Last Ordered Period', 'wp-marketing-automations-pro' ); ?></label>
Over <input required type="number" name="event_meta[days_min]" id="bwfan-days_before" placeholder="30" class="bwfan-input-wrapper bwfan-input-s" value="{{min_days_entered}}"/> days ago
AND Under <input required type="number" name="event_meta[days_max]" id="bwfan-days_before" placeholder="45" class="bwfan-input-wrapper bwfan-input-s" value="{{max_days_entered}}"/>
days ago
</div>
<div class="clearfix bwfan_field_desc"><?php echo esc_html__( 'Runs once per customer for the selected period', 'wp-marketing-automations-pro' ); ?></div>
<div class="bwfan-clear"></div>
<div class="bwfan-input-form bwfan-row-sep bwfan_mt15"></div>
<div class="bwfan-col-sm-12 bwfan-p-0">
<label for="bwfan-hours" class="bwfan-label-title"><?php echo esc_html__( 'Schedule this automation to run everyday at', 'wp-marketing-automations-pro' ); ?></label>
<input max="23" min="0" type="number" name="event_meta[hours]" id="bwfan-hours" class="bwfan-input-wrapper bwfan-input-inline" value="{{hours_entered}}" placeholder="<?php echo esc_html__( 'HH', 'wp-marketing-automations-pro' ); ?>"/>
:
<input max="59" min="0" type="number" name="event_meta[minutes]" id="bwfan-minutes" class="bwfan-input-wrapper bwfan-input-inline" value="{{minutes_entered}}" placeholder="<?php echo esc_html__( 'MM', 'wp-marketing-automations-pro' ); ?>"/>
<# if( _.has(data.eventFieldsOptions, 'last_run') && '' != data.eventFieldsOptions.last_run ) { #>
<div class="clearfix bwfan_field_desc"><?php echo esc_html__( 'This automation last ran on ', 'wp-marketing-automations-pro' ); ?>{{data.eventFieldsOptions.last_run}}</div>
<# } #>
</div>
</script>
<?php
}
/**
* Set up rules data
*
* @param $automation_data
*/
public function pre_executable_actions( $automation_data ) {
BWFAN_Core()->rules->setRulesData( $this->user_id, 'user_id' );
BWFAN_Core()->rules->setRulesData( $this->email, 'email' );
BWFAN_Core()->rules->setRulesData( $this->first_name, 'first_name' );
BWFAN_Core()->rules->setRulesData( $this->last_name, 'last_name' );
BWFAN_Core()->rules->setRulesData( BWFAN_Common::get_bwf_customer( $this->email, $this->user_id ), 'bwf_customer' );
}
/**
* Registers the tasks for current event.
*
* @param $automation_id
* @param $integration_data
* @param $event_data
*/
public function register_tasks( $automation_id, $integration_data, $event_data ) {
if ( ! is_array( $integration_data ) ) {
return;
}
$data_to_send = $this->get_event_data();
$this->create_tasks( $automation_id, $integration_data, $event_data, $data_to_send );
}
public function get_event_data() {
$data_to_send = [ 'global' => [] ];
$data_to_send['global']['user_id'] = $this->user_id;
$data_to_send['global']['email'] = $this->email;
$data_to_send['global']['first_name'] = $this->first_name;
$data_to_send['global']['last_name'] = $this->last_name;
return $data_to_send;
}
/**
* Make the view data for the current event which will be shown in task listing screen.
*
* @param $global_data
*
* @return false|string
*/
public function get_task_view( $global_data ) {
ob_start();
?>
<li>
<strong><?php echo esc_html__( 'Name:', 'wp-marketing-automations-pro' ); ?> </strong>
<?php echo esc_html__( $global_data['first_name'] ) . esc_html__( $global_data['last_name'] ); ?>
</li>
<li>
<strong><?php echo esc_html__( 'User ID:', 'wp-marketing-automations-pro' ); ?> </strong>
<?php echo esc_html__( $global_data['user_id'] ); ?>
</li>
<li>
<strong><?php echo esc_html__( 'email:', 'wp-marketing-automations-pro' ); ?> </strong>
<?php echo esc_html__( $global_data['email'] ); ?>
</li>
<?php
return ob_get_clean();
}
/**
* Set global data for all the merge tags which are supported by this event.
*
* @param $task_meta
*/
public function set_merge_tags_data( $task_meta ) {
$get_data = BWFAN_Merge_Tag_Loader::get_data( 'referral_id' );
if ( ( empty( $get_data ) || intval( $get_data ) !== intval( $task_meta['global']['referral_id'] ) ) ) {
$set_data = array(
'user_id' => $task_meta['global']['user_id'],
'email' => $task_meta['global']['email'],
'first_name' => $task_meta['global']['first_name'],
'last_name' => $task_meta['global']['last_name'],
);
BWFAN_Merge_Tag_Loader::set_data( $set_data );
}
}
/**
* Capture the async data for the current event.
* @return array|bool
*/
public function capture_async_data() {
$this->user_id = BWFAN_Common::$events_async_data['user_id'];
$this->email = BWFAN_Common::$events_async_data['email'];
$this->first_name = BWFAN_Common::$events_async_data['first_name'];
$this->last_name = BWFAN_Common::$events_async_data['last_name'];
return $this->run_automations();
}
/**
* This is a time independent event. A cron is run once a day and it makes all the tasks for the current event.
*
* @param $automation_id
* @param $automation_details
*/
public function make_task_data( $automation_id, $automation_details ) {
global $wpdb;
$date_time = new DateTime();
$date_time->setTime( 00, 00, 00 );
$current_day = $date_time->format( 'Y-m-d' );
$last_run = BWFAN_Model_Automationmeta::get_meta( $automation_id, 'last_run' );
if ( false !== $last_run ) {
$where = [
'bwfan_automation_id' => $automation_id,
'meta_key' => 'last_run',
];
$data = [
'meta_value' => $current_day,
];
BWFAN_Model_Automationmeta::update( $data, $where );
} else {
$meta = [
'bwfan_automation_id' => $automation_id,
'meta_key' => 'last_run',
'meta_value' => $current_day,
];
BWFAN_Model_Automationmeta::insert( $meta );
}
$days_min = isset( $automation_details['meta']['event_meta']['last-ordered']['days_min'] ) ? $automation_details['meta']['event_meta']['last-ordered']['days_min'] : $automation_details['meta']['event_meta']['days_min'];
$days_max = isset( $automation_details['meta']['event_meta']['last-ordered']['days_max'] ) ? $automation_details['meta']['event_meta']['last-ordered']['days_max'] : $automation_details['meta']['event_meta']['days_max'];
$days_min = ( empty( $days_min ) ) ? $this->min : $days_min;
$days_max = ( empty( $days_max ) ) ? ( $this->min + $this->max_gap ) : $days_max;
$min_date = new DateTime();
$min_date->modify( '+' . BWFAN_Common::get_timezone_offset() * HOUR_IN_SECONDS . ' seconds' ); // get site time
$max_date = clone $min_date;
$min_date->modify( "-$days_min days" );
$max_date->modify( "-$days_max days" );
$max_date->setTime( 00, 00, 01 );
$min_date->setTime( 23, 59, 59 );
$max_date->modify( '-' . BWFAN_Common::get_timezone_offset() * HOUR_IN_SECONDS . ' seconds' );
$min_date->modify( '-' . BWFAN_Common::get_timezone_offset() * HOUR_IN_SECONDS . ' seconds' );
$start_date = $max_date->format( 'Y-m-d H:i:s' );
$end_date = $min_date->format( 'Y-m-d H:i:s' );
$start_date_timestamp = $max_date->getTimestamp();
/** query always from older date (start) to new date (end) */
/** Get all the customers of selected range in the automations */
//phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$customers = $wpdb->get_results( $wpdb->prepare( "
SELECT c.wpid as id, c.email as email, c.f_name as first_name, c.l_name as last_name, c.id as bwf_cid
FROM {$wpdb->prefix}bwf_contact as c
LEFT JOIN {$wpdb->prefix}bwf_wc_customers as wc
ON c.id = wc.cid
WHERE c.email !=''
AND wc.l_order_date > %s
AND wc.l_order_date < %s
", $start_date, $end_date ), ARRAY_A );
if ( empty( $customers ) ) {
return;
}
/** Check if automations v1 or v2 exists */
BWFAN_Core()->public->load_active_automations( $this->get_slug() );
BWFAN_Core()->public->load_active_v2_automations( $this->get_slug() );
if ( ( ! is_array( $this->automations_arr ) || count( $this->automations_arr ) === 0 ) && ( ! is_array( $this->automations_v2_arr ) || count( $this->automations_v2_arr ) === 0 ) ) {
return;
}
if ( count( $this->automations_arr ) > 0 ) {
/** Get all the customers where automations already ran for the given automation range */
$query = $wpdb->prepare( "SELECT DISTINCT `contact_id` FROM `{$wpdb->prefix}bwfan_contact_automations` WHERE `automation_id` = %d AND `time` > %d", $automation_id, $start_date_timestamp );
$ran_customers = $wpdb->get_results( $query, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
} else {
$contacts = BWFAN_Model_Automation_Contact::get_contacts_automation( $automation_id, $start_date );
$complete_contacts = BWFAN_Model_Automation_Complete_Contact::get_contacts_automation( $automation_id, $start_date );
$ran_customers = array_merge( $contacts, $complete_contacts );
}
/** filter customer */
if ( is_array( $ran_customers ) && count( $ran_customers ) > 0 ) {
$ran_customers = array_column( $ran_customers, 'contact_id' );
$filtered_customers = array_column( array_filter( $customers, function ( $customer ) use ( $ran_customers ) {
if ( ! in_array( $customer['bwf_cid'], $ran_customers, true ) ) {
return $customer['bwf_cid'];
}
} ), 'bwf_cid' );
$customers = $filtered_customers;
} else {
$customers = array_column( $customers, 'bwf_cid' );
}
if ( empty( $customers ) ) {
if ( bwf_has_action_scheduled( $this->action_hook ) ) {
bwf_unschedule_actions( $this->action_hook, array(), 'woofunnels' );
}
return;
}
$key = 'bwf_async_event_' . $this->get_slug() . '_' . time();
$args = [ 'key' => $key, 'aid' => $automation_id, 'new' => 1 ];
if ( ! bwf_has_action_scheduled( $this->action_hook ) ) {
bwf_schedule_recurring_action( time(), 60, $this->action_hook, $args, 'woofunnels' );
bwf_options_update( $key, $customers );
}
}
public function do_winback_schedule_work( $option_key, $aid, $new = 0 ) {
$customers = [];
if ( 0 === $new ) {
/** Un-schedule old scheduled hook */
bwf_unschedule_actions( $this->action_hook, [ 'key' => $option_key, 'aid' => $aid ], 'woofunnels' );
$customers = get_option( $option_key, [] );
delete_option( $option_key );
$args = [ 'key' => $option_key, 'aid' => $aid, 'new' => 1 ];
bwf_schedule_recurring_action( time(), 60, $this->action_hook, $args, 'woofunnels' );
}
$customers = empty( $customers ) ? bwf_options_get( $option_key ) : $customers;
if ( empty( $customers ) ) {
bwf_options_delete( $option_key );
bwf_unschedule_actions( $this->action_hook, [ 'key' => $option_key, 'aid' => $aid, 'new' => 1 ], 'woofunnels' );
}
global $wpdb;
$updated_customers = $customers;
$start_time = time();
$batch_size = 10;
while ( ( time() - $start_time ) < 15 ) {
/** Get first 10 ids */
$customers = ( count( $customers ) > $batch_size ) ? array_slice( $customers, 0, $batch_size ) : $customers;
$selected_customers = implode( ', ', $customers );
$query = "SELECT c.wpid as id,c.id as cid, c.email as email, c.f_name as first_name, c.l_name as last_name FROM {$wpdb->prefix}bwf_contact as c where c.id IN ($selected_customers)";
$selected_customers = $wpdb->get_results( $query, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
foreach ( $selected_customers as $customer ) {
$this->process( $customer['id'], $customer['email'], $customer['first_name'], $customer['last_name'] );
}
/** Remove customer ids from data after automation process */
$updated_customers = array_diff( $updated_customers, $customers );
if ( empty( $updated_customers ) ) {
bwf_options_delete( $option_key );
bwf_unschedule_actions( $this->action_hook, [ 'key' => $option_key, 'aid' => $aid, 'new' => 1 ], 'woofunnels' );
return;
}
sort( $updated_customers );
bwf_options_update( $option_key, $updated_customers );
/** Assign updated customers */
$customers = $updated_customers;
}
}
public function update_scheduler_offset( $offset, $aid ) {
BWFAN_Model_Automationmeta::update( [
'meta_value' => $offset,
], [
'bwfan_automation_id' => $aid,
'meta_key' => 'winback_schedule_offset',
] );
}
public function process( $user_id, $email, $first_name, $last_name ) {
$this->user_id = $user_id;
$this->email = $email;
$this->first_name = $first_name;
$this->last_name = $last_name;
/** v2 event execution start */
$contact_data_v2 = array(
'user_id' => $user_id,
'email' => $email,
'first_name' => $first_name,
'last_name' => $last_name,
);
BWFAN_Common::maybe_run_v2_automations( $this->get_slug(), $contact_data_v2 );
/** v2 event execution end */
$this->run_automations();
}
public function get_email_event() {
return $this->email;
}
/**
* @param $task_details
*
* @return array
*/
public function validate_event( $task_details ) {
$result = [];
$automation_id = $task_details['processed_data']['automation_id'];
$current_automation_event_meta = BWFAN_Model_Automationmeta::get_meta( $automation_id, 'event_meta' );
$days_min = $current_automation_event_meta['days_min'];
$days_min = ( empty( $days_min ) ) ? $this->min : $days_min;
$days_max = $current_automation_event_meta['days_max'];
$days_max = ( empty( $days_max ) ) ? ( $this->min + $this->max_gap ) : $days_max;
$winback_timestamp = $this->get_winback_start_end_timestamp( $days_min, $days_max );
$processed_email = $task_details['processed_data']['email'];
$processed_wpid = isset( $task_details['processed_data']['user_id`'] ) ? $task_details['processed_data']['user_id`'] : 0;
$customer = BWFAN_Common::get_bwf_customer( $processed_email, $processed_wpid );
$order_last_date = '';
if ( $customer ) {
$order_last_date = $customer->get_l_order_date();
}
if ( empty( $order_last_date ) ) {
return $this->get_automation_event_success();
}
$order_last_date_timestamp = strtotime( $order_last_date );
if ( ( $order_last_date_timestamp > $winback_timestamp['start_date_timestamp'] ) && ( $order_last_date_timestamp < $winback_timestamp['end_date_timestamp'] ) ) {
return $this->get_automation_event_success();
}
$order_last_order_date = date( 'Y-m-d h:i:s', $order_last_date_timestamp );
$result['status'] = 4;
$result['message'] = esc_html__( "Customer Last Order date ( $order_last_order_date ) doesn't lies in this period: $days_min - $days_max days", 'wp-marketing-automations-pro' );
return $result;
}
/**
* v2 Method: Validate event settings
*
* @param $automation_data
*
* @return bool
*/
public function validate_v2_event_settings( $automation_data ) {
$days_min = $automation_data['event_meta']['last-ordered']['days_min'];
$days_min = ( empty( $days_min ) ) ? $this->min : $days_min;
$days_max = $automation_data['event_meta']['last-ordered']['days_max'];
$days_max = ( empty( $days_max ) ) ? ( $this->min + $this->max_gap ) : $days_max;
$winback_timestamp = $this->get_winback_start_end_timestamp( $days_min, $days_max );
$processed_email = $automation_data['email'];
$processed_wpid = isset( $automation_data['user_id`'] ) ? $automation_data['user_id`'] : 0;
$customer = BWFAN_Common::get_bwf_customer( $processed_email, $processed_wpid );
$order_last_date = '';
if ( $customer ) {
$order_last_date = $customer->get_l_order_date();
}
if ( empty( $order_last_date ) ) {
return true;
}
$order_last_date_timestamp = strtotime( $order_last_date );
if ( ( $order_last_date_timestamp > $winback_timestamp['start_date_timestamp'] ) && ( $order_last_date_timestamp < $winback_timestamp['end_date_timestamp'] ) ) {
return true;
}
return false;
}
/** getting the start , end timestamp of winback event
*
* @param $days_min
* @param $days_max
*
* @return mixed
*/
public function get_winback_start_end_timestamp( $days_min, $days_max ) {
$min_date = new DateTime();
$min_date->modify( '+' . BWFAN_Common::get_timezone_offset() * HOUR_IN_SECONDS . ' seconds' ); // get site time
$max_date = clone $min_date;
$min_date->modify( "-$days_min days" );
$max_date->modify( "-$days_max days" );
$max_date->setTime( 00, 00, 01 );
$min_date->setTime( 23, 59, 59 );
$max_date->modify( '-' . BWFAN_Common::get_timezone_offset() * HOUR_IN_SECONDS . ' seconds' );
$min_date->modify( '-' . BWFAN_Common::get_timezone_offset() * HOUR_IN_SECONDS . ' seconds' );
$timestamp['start_date_timestamp'] = $max_date->getTimestamp();
$timestamp['end_date_timestamp'] = $min_date->getTimestamp();
return $timestamp;
}
public function get_fields_schema() {
return [
[
'id' => 'last-ordered',
'type' => 'expression',
'expression' => __( 'Over', 'wp-marketing-automations-pro' ) . ' {{days_min/}} ' . __( 'days ago AND Under', 'wp-marketing-automations-pro' ) . ' {{days_max /}} ' . __( 'days ago', 'wp-marketing-automations-pro' ),
'label' => __( 'Customer Last Ordered Period', 'wp-marketing-automations-pro' ),
'fields' => array(
array(
"id" => 'days_min',
"label" => '',
"type" => 'number',
"min" => '0',
"placeholder" => "30",
"hint" => "",
"nested" => '',
"required" => false,
),
array(
"id" => 'days_max',
"label" => '',
"type" => 'number',
"min" => '0',
"placeholder" => "45",
"hint" => "",
"nested" => '',
"required" => false,
)
),
"hint" => __( 'Runs once per customer for the selected period.', 'wp-marketing-automations-pro' ),
],
[
'id' => 'scheduled-everyday-at',
'type' => 'expression',
'expression' => " {{hours /}} {{minutes /}}",
'label' => __( 'Schedule this automation to run everyday at (24 Hours)', 'wp-marketing-automations-pro' ),
'fields' => [
[
"id" => 'hours',
"label" => '',
"type" => 'number',
"max" => '23',
"min" => '0',
"class" => 'bwfan-input-wrapper bwfan-input-s',
"placeholder" => "HH",
"description" => "",
"required" => false,
],
[
"id" => 'minutes',
"label" => '',
"type" => 'number',
"max" => '59',
"min" => '0',
"class" => 'bwfan-input-wrapper bwfan-input-s',
"placeholder" => "MM",
"description" => "",
"required" => false,
]
],
"description" => ""
],
];
}
/** v2 Methods: END */
/** set default values */
public function get_default_values() {
return [
'last-ordered' => [
'days_min' => '60',
'days_max' => '90',
],
'scheduled-everyday-at' => [
'hours' => '7',
'minutes' => '00',
],
];
}
}
/**
* Register this event to a source.
* This will show the current event in dropdown in single automation screen.
*/
if ( bwfan_is_woocommerce_active() ) {
return 'BWFAN_WC_Customer_Win_Back';
}