geno/wp-content/plugins/woo-cart-abandonment-recovery/classes/class-cartflows-ca-settings.php
2024-02-01 11:54:18 +00:00

991 lines
31 KiB
PHP

<?php
/**
* Settings.
*
* @package Woocommerce-Cart-Abandonment-Recovery
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Class Cartflows_Ca_Utils.
*/
class Cartflows_Ca_Settings {
/**
* Member Variable
*
* @var instance
*/
private static $instance;
/**
* Cartflows_Ca_Settings constructor.
*/
public function __construct() {
add_action( 'admin_init', array( $this, 'wcf_initialize_settings' ) );
add_filter( 'plugin_action_links_' . CARTFLOWS_CA_BASE, array( $this, 'add_action_links' ), 999 );
}
/**
* Adding action links for plugin list page.
*
* @param array $links links.
* @return array
*/
public function add_action_links( $links ) {
$mylinks = array(
'<a href="' . admin_url( 'admin.php?page=' . WCF_CA_PAGE_NAME ) . '">Settings</a>',
);
return array_merge( $mylinks, $links );
}
/**
* Add new settings for cart abandonment settings.
*
* @since 1.1.5
*/
public function wcf_initialize_settings() {
// Start: Settings for cart abandonment.
add_settings_section(
WCF_CA_GENERAL_SETTINGS_SECTION,
/* translators: %1$s: html start, %2$s: html end*/
sprintf( __( '%1$sCart Abandonment Settings%2$s', 'woo-cart-abandonment-recovery' ), '<span class="wcf-ca-tracking-settings">', '</span>' ),
array( $this, 'wcf_cart_abandonment_options_callback' ),
WCF_CA_PAGE_NAME
);
add_settings_field(
'wcf_ca_status',
__( 'Enable Tracking', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_status_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_GENERAL_SETTINGS_SECTION,
array( __( 'Start capturing abandoned carts. <br/><br/> <span class="description"><strong>Note:</strong> Cart will be considered abandoned if order is not completed in cart abandoned cut-off time.</span>', 'woo-cart-abandonment-recovery' ) )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_status'
);
add_settings_field(
'wcf_ca_cron_run_time',
__( 'Cart abandoned cut-off time', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_cron_run_time_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_GENERAL_SETTINGS_SECTION,
array( __( 'Minutes. <br/><br/> <span class="description"><strong>Note:</strong> Consider cart abandoned after above entered minutes of item being added to cart and order not placed.</span><span class="dashicons dashicons-editor-help" title="Please remove the custom code to update cron cut off time, if added."></span>', 'woo-cart-abandonment-recovery' ) )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_cron_run_time'
);
add_settings_field(
'wcf_ca_ignore_users',
__( 'Disable Tracking For', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_ignore_users_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_GENERAL_SETTINGS_SECTION,
array( '<br><span class="description"><strong>Note:</strong>' . __( ' It will ignore selected users from abandonment process when they logged in, and hence they can not receive mail for cart abandoned by themselves.', 'woo-cart-abandonment-recovery' ) . '</span>' )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_ignore_users'
);
add_settings_field(
'wcf_ca_excludes_orders',
__( 'Exclude email sending For', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_exclude_orders_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_GENERAL_SETTINGS_SECTION,
array( '<br><span class="description"><strong>Note:</strong>' . __( ' It will not send future recovery emails to selected order status and will mark as recovered.', 'woo-cart-abandonment-recovery' ) . '</span>' )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_excludes_orders'
);
add_settings_field(
'wcar_email_admin_on_recovery',
__( 'Notify recovery to admin', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcar_email_admin_on_recovery' ),
WCF_CA_PAGE_NAME,
WCF_CA_GENERAL_SETTINGS_SECTION,
array( __( 'This option will send an email to admin on new order recovery.', 'woo-cart-abandonment-recovery' ) )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcar_email_admin_on_recovery'
);
add_settings_field(
'wcf_ca_global_param',
__( 'UTM parameters', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcar_add_param_to_recovery_url' ),
WCF_CA_PAGE_NAME,
WCF_CA_GENERAL_SETTINGS_SECTION,
array( '<br><span>' . __( 'The UTM parameters will be appended to the checkout page links which is available in the recovery emails.', 'woo-cart-abandonment-recovery' ) . '</span>' )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_global_param'
);
// End: General Settings for cart abandonment.
// Start: Delete coupons settings for cart abandonment.
add_settings_section(
WCF_CA_COUPONS_SETTINGS_SECTION,
/* translators: %1$s: html start, %2$s: html end*/
sprintf( __( '%1$sCoupons Settings%2$s', 'woo-cart-abandonment-recovery' ), '<span class="wcf-ca-coupon-settings">', '</span>' ),
array( $this, 'wcf_cart_abandonment_options_callback' ),
WCF_CA_PAGE_NAME
);
add_settings_field(
'wcf_ca_auto_delete_coupons',
__( 'Delete Coupons Automatically', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_auto_delete_coupons_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_COUPONS_SETTINGS_SECTION,
array( __( 'Delete coupons automatically on weekly basis.<br><span class="description"><br/><strong>Note:</strong> This option will set a weekly cron to delete all <strong>expired</strong> and <strong>used</strong> coupons automatically in the background.</p>', 'woo-cart-abandonment-recovery' ) )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_auto_delete_coupons'
);
add_settings_field(
'wcf_ca_delete_coupons',
__( 'Delete Coupons Manually', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_delete_coupons_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_COUPONS_SETTINGS_SECTION,
array( '<br><span class="description"> ' . __( '<br><strong>Note:</strong> This will delete all <strong>expired</strong> and <strong>used</strong> coupons that were created by Woo Cart Abandonment Recovery.</p>', 'woo-cart-abandonment-recovery' ) )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_delete_coupons'
);
// End: Delete coupons settings for cart abandonment.
// Start: Settings for email templates.
add_settings_section(
WCF_CA_EMAIL_SETTINGS_SECTION,
/* translators: %1$s: html start, %2$s: html end*/
sprintf( __( '%1$sEmail Settings%2$s', 'woo-cart-abandonment-recovery' ), '<span class="wcf-ca-email-settings">', '</span>' ),
array( $this, 'wcf_cart_abandonment_options_callback' ),
WCF_CA_PAGE_NAME
);
add_settings_field(
'wcf_ca_from_name',
__( '"From" Name', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_from_name_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_EMAIL_SETTINGS_SECTION,
array( __( 'Name will appear in email sent.', 'woo-cart-abandonment-recovery' ) )
);
add_settings_field(
'wcf_ca_from_email',
__( '"From" Address', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_from_email_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_EMAIL_SETTINGS_SECTION,
array( __( 'Email which send from.', 'woo-cart-abandonment-recovery' ) )
);
add_settings_field(
'wcf_ca_reply_email',
__( '"Reply To" Address', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_reply_email_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_EMAIL_SETTINGS_SECTION,
array( __( 'When a user clicks reply, which email address should that reply be sent to?', 'woo-cart-abandonment-recovery' ) )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_from_name'
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_from_email',
array( $this, 'wcf_ca_from_email_validation' )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_reply_email',
array( $this, 'wcf_ca_reply_email_validation' )
);
// End: Settings for email templates.
// Start: Settings for recovery report email templates.
add_settings_section(
WCF_CA_RECOVERY_EMAIL_SETTINGS_SECTION,
/* translators: %1$s: html start, %2$s: html end*/
sprintf( __( '%1$sRecovery Report Emails%2$s', 'woo-cart-abandonment-recovery' ), '<span id="wcf-ca-weekly-report-email-settings">', '<span/>' ),
array( $this, 'wcf_cart_abandonment_options_callback' ),
WCF_CA_PAGE_NAME
);
add_settings_field(
'wcf_ca_send_recovery_report_emails_to_admin',
__( 'Send recovery report emails', 'woo-cart-abandonment-recovery' ),
array( $this, 'send_recovery_report_emails_to_admin' ),
WCF_CA_PAGE_NAME,
WCF_CA_RECOVERY_EMAIL_SETTINGS_SECTION,
array( __( 'Enable sending recovery report emails.', 'woo-cart-abandonment-recovery' ) )
);
add_settings_field(
'wcf_ca_admin_email',
__( 'Email address', 'woo-cart-abandonment-recovery' ),
array( $this, 'admin_email_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_RECOVERY_EMAIL_SETTINGS_SECTION,
array( '<br><span>' . __( 'Email address to send recovery report emails. For multiple emails, add each email address per line.', 'woo-cart-abandonment-recovery' ) . '</span>' )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_send_recovery_report_emails_to_admin'
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_admin_email',
array( $this, 'wcf_ca_report_emails_validation' )
);
// End: Settings for recovery report email templates.
// Start: Settings for coupon code.
add_settings_field(
'wcf_ca_zapier_tracking_status',
__( 'Enable Webhook', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_zapier_tracking_status_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_ZAPIER_SETTINGS_SECTION,
array( __( 'Allows you to trigger webhook automatically upon cart abandonment and recovery.', 'woo-cart-abandonment-recovery' ) )
);
add_settings_field(
'wcf_ca_zapier_cart_abandoned_webhook',
__( 'Webhook URL', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_zapier_cart_abandoned_webhook_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_ZAPIER_SETTINGS_SECTION,
array( '', 'woo-cart-abandonment-recovery' )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_zapier_tracking_status'
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_zapier_cart_abandoned_webhook'
);
add_settings_section(
WCF_CA_ZAPIER_SETTINGS_SECTION,
/* translators: %1$s: html start, %2$s: html end*/
sprintf( __( '%1$sCoupon Code Settings%2$s', 'woo-cart-abandonment-recovery' ), '<span class="wcf-ca-webhook-coupon-settings">', '</span>' ),
array( $this, 'wcf_cart_abandonment_options_callback' ),
WCF_CA_PAGE_NAME
);
add_settings_field(
'wcf_ca_coupon_code_status',
__( 'Create Coupon Code', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_coupon_code_status_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_ZAPIER_SETTINGS_SECTION,
array( __( 'Auto-create the special coupon for the abandoned cart to send over the emails.', 'woo-cart-abandonment-recovery' ) )
);
add_settings_field(
'wcf_ca_discount_type',
__( 'Discount Type', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_discount_type_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_ZAPIER_SETTINGS_SECTION,
array( '', 'woo-cart-abandonment-recovery' )
);
add_settings_field(
'wcf_ca_coupon_amount',
__( 'Coupon Amount', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_coupon_amount_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_ZAPIER_SETTINGS_SECTION,
array( '', 'woo-cart-abandonment-recovery' )
);
add_settings_field(
'wcf_ca_coupon_expiry',
__( 'Coupon Expires After', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_coupon_expiry_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_ZAPIER_SETTINGS_SECTION,
array( __( '<br/><br/> <span class="description"><strong>Note: </strong>. Enter zero (0) to restrict coupon from expiring.</span>', 'woo-cart-abandonment-recovery' ) )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_coupon_expiry'
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_coupon_expiry_unit'
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_coupon_code_status'
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_discount_type'
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_coupon_amount',
array( $this, 'wcf_ca_coupon_amount_validation' )
);
// End: Settings for coupon code.
// Start: Settings for Zapier.
add_settings_section(
WCF_CA_ZAPIER_SETTINGS_SECTION,
/* translators: %1$s: html start, %2$s: html end*/
sprintf( __( '%1$sWebhook Settings%2$s', 'woo-cart-abandonment-recovery' ), '<span class="wcf-ca-webhook-settings">', '</span>' ),
array( $this, 'wcf_cart_abandonment_options_callback' ),
WCF_CA_PAGE_NAME
);
// End: Settings for webhook.
// Start: GDPR Settings.
add_settings_section(
WCF_CA_GDPR_SETTINGS_SECTION,
/* translators: %1$s: html start, %2$s: html end*/
sprintf( __( '%1$sGDPR Settings%2$s', 'woo-cart-abandonment-recovery' ), '<span class="wcf-ca-gdpr-settings">', '</span>' ),
array( $this, 'wcf_cart_abandonment_options_callback' ),
WCF_CA_PAGE_NAME
);
add_settings_field(
'wcf_ca_gdpr_status',
__( 'Enable GDPR Integration', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_gdpr_status_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_GDPR_SETTINGS_SECTION,
array( __( 'Ask confirmation from the user before tracking data. <br/><br/> <span class="description"><strong>Note:</strong> By checking this, it will show up confirmation text below the email id on checkout page.</span>', 'woo-cart-abandonment-recovery' ) )
);
add_settings_field(
'wcf_ca_gdpr_message',
__( 'GDPR Message', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_gdpr_message_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_GDPR_SETTINGS_SECTION,
array( '', 'woo-cart-abandonment-recovery' )
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_gdpr_status'
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_gdpr_message'
);
// End: GDPR Settings.
// Start: Plugin settings.
add_settings_section(
WCF_CA_PLUGIN_SETTINGS_SECTION,
/* translators: %1$s: html start, %2$s: html end*/
sprintf( __( '%1$sPlugin Settings%2$s', 'woo-cart-abandonment-recovery' ), '<span class="wcf-ca-plugin-settings">', '</span>' ),
array( $this, 'wcf_cart_abandonment_options_callback' ),
WCF_CA_PAGE_NAME
);
register_setting(
WCF_CA_SETTINGS_OPTION_GROUP,
'wcf_ca_delete_plugin_data'
);
add_settings_field(
'wcf_ca_delete_plugin_data',
__( 'Delete Plugin Data', 'woo-cart-abandonment-recovery' ),
array( $this, 'wcf_ca_delete_plugin_data_callback' ),
WCF_CA_PAGE_NAME,
WCF_CA_PLUGIN_SETTINGS_SECTION,
array( __( 'Enabling this option will delete the plugin data while deleting the Plugin.', 'woo-cart-abandonment-recovery' ) )
);
}
/**
* Callback for send recovery report email to admin.
*
* @param array $args args.
* @since 1.1.5
*/
public function send_recovery_report_emails_to_admin( $args ) {
$email_admin_on_recovery = get_option( 'wcf_ca_send_recovery_report_emails_to_admin', 'on' );
$html = '';
printf(
'<input type="checkbox" id="wcf_ca_send_recovery_report_emails_to_admin" name="wcf_ca_send_recovery_report_emails_to_admin" value="on"
' . checked( 'on', $email_admin_on_recovery, false ) . ' />'
);
$html .= '<label for="wcf_ca_send_recovery_report_emails_to_admin"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for send recovery report email to admin.
*
* @param array $args args.
* @since 1.1.5
*/
public function admin_email_callback( $args ) {
$wcf_ca_admin_email = get_option( 'wcf_ca_admin_email', get_option( 'admin_email' ) );
$html = '';
printf(
'<textarea rows="4" cols="60" class="wcf-ca-recovery-email-inputs" id="wcf_ca_admin_email" name="wcf_ca_admin_email" spellcheck="false" placeholder=" ' . __( 'Add email address per line.', 'woo-cart-abandonment-recovery' ) . '">%s</textarea>',
isset( $wcf_ca_admin_email ) ? esc_attr( $wcf_ca_admin_email ) : ''
);
$html .= '<label for="wcf_ca_admin_email"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for add utm param.
*
* @param array $args args.
* @since 1.2.13
*/
public function wcar_add_param_to_recovery_url( $args ) {
$wcf_ca_global_param = get_option( 'wcf_ca_global_param', false );
$html = '';
printf(
'<textarea rows="4" cols="60" id="wcf_ca_global_param" name="wcf_ca_global_param" spellcheck="false" placeholder=" ' . __( 'Add UTM parameter per line.', 'woo-cart-abandonment-recovery' ) . '">%s</textarea>',
isset( $wcf_ca_global_param ) ? esc_attr( $wcf_ca_global_param ) : ''
);
$html .= '<label for="wcf_ca_global_param"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for cart abandonment status.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_delete_plugin_data_callback( $args ) {
$wcf_ca_delete_plugin_data = get_option( 'wcf_ca_delete_plugin_data' );
$html = '';
printf(
'<input type="checkbox" id="wcf_ca_delete_plugin_data" name="wcf_ca_delete_plugin_data" value="on"
' . checked( 'on', $wcf_ca_delete_plugin_data, false ) . ' />'
);
$html .= '<label for="wcf_ca_delete_plugin_data"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for cart abandonment status.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_coupon_code_status_callback( $args ) {
$wcf_ca_coupon_code_status = get_option( 'wcf_ca_coupon_code_status' );
$html = '';
printf(
'<input type="checkbox" id="wcf_ca_coupon_code_status" name="wcf_ca_coupon_code_status" value="on"
' . checked( 'on', $wcf_ca_coupon_code_status, false ) . ' />'
);
$html .= '<label for="wcf_ca_coupon_code_status"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for cart abandonment cut off time.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_zapier_cart_abandoned_webhook_callback( $args ) {
$wcf_ca_zapier_cart_abandoned_webhook = get_option( 'wcf_ca_zapier_cart_abandoned_webhook' );
echo '<input type="text" class="wcf-ca-trigger-input" id="wcf_ca_zapier_cart_abandoned_webhook" name="wcf_ca_zapier_cart_abandoned_webhook" value="' . esc_attr( sanitize_text_field( $wcf_ca_zapier_cart_abandoned_webhook ) ) . '" />';
echo '<button id="wcf_ca_trigger_web_hook_abandoned_btn" type="button" class="button"> Trigger Sample </button>';
echo '<span style="margin-left: 10px;" id="wcf_ca_abandoned_btn_message"></span>';
$html = '<label for="wcf_ca_zapier_cart_abandoned_webhook"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for cart abandonment status.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_zapier_tracking_status_callback( $args ) {
$wcf_ca_zapier_tracking_status = get_option( 'wcf_ca_zapier_tracking_status' );
$html = '';
printf(
'<input type="checkbox" id="wcf_ca_zapier_tracking_status" name="wcf_ca_zapier_tracking_status" value="on"
' . checked( 'on', $wcf_ca_zapier_tracking_status, false ) . ' />'
);
$html .= '<label for="wcf_ca_zapier_tracking_status"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for send email to admin.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcar_email_admin_on_recovery( $args ) {
$email_admin_on_recovery = get_option( 'wcar_email_admin_on_recovery' );
$html = '';
printf(
'<input type="checkbox" id="wcar_email_admin_on_recovery" name="wcar_email_admin_on_recovery" value="on"
' . checked( 'on', $email_admin_on_recovery, false ) . ' />'
);
$html .= '<label for="wcar_email_admin_on_recovery"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for cart abandonment cut off time.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_coupon_amount_callback( $args ) {
$wcf_ca_coupon_amount = get_option( 'wcf_ca_coupon_amount' );
printf(
'<input type="number" class="wcf-ca-trigger-input wcf-ca-email-inputs" id="wcf_ca_coupon_amount" name="wcf_ca_coupon_amount" value="%s" />',
isset( $wcf_ca_coupon_amount ) ? esc_attr( $wcf_ca_coupon_amount ) : ''
);
$html = '<label for="wcf_ca_coupon_amount"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for cart abandonment cut off time.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_coupon_expiry_callback( $args ) {
$wcf_ca_coupon_expiry = intval( get_option( 'wcf_ca_coupon_expiry' ) );
printf(
'<input type="number" min="0" class="wcf-ca-trigger-input wcf-ca-coupon-inputs" id="wcf_ca_coupon_expiry" name="wcf_ca_coupon_expiry" value="%s" autocomplete="off" />',
isset( $wcf_ca_coupon_expiry ) ? esc_attr( $wcf_ca_coupon_expiry ) : ''
);
$coupon_expiry_unit = get_option( 'wcf_ca_coupon_expiry_unit' );
$items = array(
'hours' => __( 'Hour(s)', 'woo-cart-abandonment-recovery' ),
'days' => __( 'Day(s)', 'woo-cart-abandonment-recovery' ),
);
echo "<select id='wcf_ca_coupon_expiry_unit' name='wcf_ca_coupon_expiry_unit'>";
foreach ( $items as $key => $item ) {
$selected = ( $coupon_expiry_unit === $key ) ? 'selected="selected"' : '';
// Can't use wp_kses_post as it does not allow option tag. Escaping attributes and content.
echo '<option value=' . esc_attr( $key ) . " $selected>" . esc_html( $item ) . '</option>'; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
echo '</select>';
$html = '<label for="wcf_ca_coupon_expiry_unit"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for cart abandonment cut off time.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_gdpr_message_callback( $args ) {
$wcf_ca_gdpr_message = get_option( 'wcf_ca_gdpr_message' );
printf(
'<textarea rows="2" cols="60" id="wcf_ca_gdpr_message" name="wcf_ca_gdpr_message" spellcheck="false">%s</textarea>',
isset( $wcf_ca_gdpr_message ) ? esc_attr( $wcf_ca_gdpr_message ) : ''
);
$html = '<label for="wcf_ca_gdpr_message"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for cart abandonment cut off time.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_discount_type_callback( $args ) {
$discount_type = get_option( 'wcf_ca_discount_type' );
$items = array(
'percent' => __( 'Percentage discount', 'woo-cart-abandonment-recovery' ),
'fixed_cart' => __( 'Fixed cart discount', 'woo-cart-abandonment-recovery' ),
);
echo "<select id='wcf_ca_discount_type' name='wcf_ca_discount_type'>";
foreach ( $items as $key => $item ) {
$selected = ( $discount_type === $key ) ? 'selected="selected"' : '';
echo '<option value= ' . esc_attr( $key ) . " $selected>" . esc_html( $item ) . '</option>'; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
echo '</select>';
}
/**
* Validation for cart abandonment `cut-off` settings.
*
* @param array $input input.
* @since 1.1.5
*/
public function wcf_ca_coupon_amount_validation( $input ) {
$output = '';
if ( ( is_numeric( $input ) && $input >= 1 ) ) {
$output = stripslashes( $input );
} else {
add_settings_error(
'wcf_ca_coupon_amount',
'error found',
__( 'Coupon code should be numeric and has to be greater than or equals to 1.', 'woo-cart-abandonment-recovery' )
);
}
return $output;
}
/**
* Callback for cart abandonment options.
*
* @since 1.1.5
*/
public function wcf_cart_abandonment_options_callback() {
echo '<hr/>';
}
/**
* Callback for cart abandonment status.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_status_callback( $args ) {
$wcf_ca_status = get_option( 'wcf_ca_status' );
$html = '';
printf(
'<input type="checkbox" id="wcf_ca_status" name="wcf_ca_status" value="on"
' . checked( 'on', $wcf_ca_status, false ) . ' />'
);
$html .= '<label for="wcf_ca_status"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for cart abandonment status.
*
* @param array $args args.
* @since 1.1.5
*/
public static function wcf_ca_cron_run_time_callback( $args ) {
$wcf_ca_cron_run_time = apply_filters( 'woo_ca_update_order_cron_interval', get_option( 'wcf_ca_cron_run_time', 20 ) );
printf(
'<input class="wcf-ca-trigger-input wcf-ca-email-inputs" type="number" min="10" id="wcf_ca_cron_run_time" name="wcf_ca_cron_run_time" value="%s" />',
esc_attr( $wcf_ca_cron_run_time )
);
$html = '<label for="wcf_ca_cron_run_time"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for ignore users from tracking cart.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_ignore_users_callback( $args ) {
$wcf_ca_ignore_users = get_option( 'wcf_ca_ignore_users' );
$html = '';
$roles_obj = new WP_Roles();
$roles_names_array = $roles_obj->get_names();
$roles_names_array = array_diff( $roles_names_array, array( 'Customer' ) );
?>
<p class="wcf_ca_ignore_users" name="wcf_ca_ignore_users" multiple="multiple">
<?php
foreach ( $roles_names_array as $role_name ) {
?>
<input type="checkbox" name="wcf_ca_ignore_users[]"
<?php
if ( ! empty( $wcf_ca_ignore_users ) ) {
foreach ( $wcf_ca_ignore_users as $user ) {
checked( $user, $role_name );
}
}
?>
value="<?php echo esc_attr( $role_name ); ?>">
<?php
echo esc_attr( $role_name );
echo '<br> ';
}
?>
</p>
<?php
$html .= '<span for="wcf_ca_ignore_users"> ' . $args[0] . '</span>';
echo wp_kses_post( $html );
}
/**
* Callback for ignore users from tracking cart.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_exclude_orders_callback( $args ) {
$wcf_ca_excludes_orders = get_option( 'wcf_ca_excludes_orders', array() );
$html = '';
$order_status = wc_get_order_statuses();
$new_order_status = str_replace( 'wc-', '', array_keys( $order_status ) );
$order_status = array_combine( $new_order_status, $order_status );
$order_status = \array_diff( $order_status, array( 'Refunded', 'Draft', 'Cancelled' ) );
?>
<p class="wcf-ca-excludes-orders" name="wcf-ca-excludes-orders">
<?php
foreach ( $order_status as $key => $value ) {
?>
<input type="checkbox" name="wcf_ca_excludes_orders[]"
<?php
if ( is_array( $wcf_ca_excludes_orders ) && ! empty( $wcf_ca_excludes_orders ) && in_array( $key, $wcf_ca_excludes_orders, true ) ) {
checked( true, true );
}
?>
value="<?php echo esc_attr( $key ); ?>">
<?php
echo esc_attr( $value );
echo '<br> ';
}
?>
</p>
<?php
$html .= '<span for="wcf_ca_excludes_orders"> ' . $args[0] . '</span>';
echo wp_kses_post( $html );
}
/**
* Delete coupons.
*
* @param array $args args.
*/
public function wcf_ca_auto_delete_coupons_callback( $args ) {
$wcf_ca_auto_delete_coupons = get_option( 'wcf_ca_auto_delete_coupons' );
$html = '';
printf(
'<input type="checkbox" id="wcf_ca_auto_delete_coupons" name="wcf_ca_auto_delete_coupons" value="on"
' . checked( 'on', $wcf_ca_auto_delete_coupons, false ) . ' />'
);
$html .= '<span for="wcf_ca_auto_delete_coupons"> ' . $args[0] . '</span>';
echo wp_kses_post( $html );
}
/**
* Delete coupons.
*
* @param array $args args.
*/
public function wcf_ca_delete_coupons_callback( $args ) {
?>
<input type="button" class="button-secondary" id="wcf_ca_delete_coupons" value="<?php esc_attr_e( 'Delete', 'woo-cart-abandonment-recovery' ); ?>" >
<span class="spinner wcf-ca-spinner"></span>
<span class="wcf-ca-response-msg"></span>
<?php
$html = '';
$html .= '<span for="wcf_ca_delete_coupons"> ' . $args[0] . '</span>';
echo wp_kses_post( $html );
}
/**
* Callback for cart abandonment status.
*
* @param array $args args.
* @since 1.1.5
*/
public function wcf_ca_gdpr_status_callback( $args ) {
$wcf_ca_gdpr_status = get_option( 'wcf_ca_gdpr_status' );
$html = '';
printf(
'<input type="checkbox" id="wcf_ca_gdpr_status" name="wcf_ca_gdpr_status" value="on"
' . checked( 'on', $wcf_ca_gdpr_status, false ) . ' />'
);
$html .= '<label for="wcf_ca_gdpr_status"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for email from name.
*
* @param array $args Arguments.
*/
public static function wcf_ca_from_name_callback( $args ) {
$wcf_ca_from_name = get_option( 'wcf_ca_from_name' );
printf(
'<input class="wcf-ca-trigger-input wcf-ca-email-inputs" type="text" id="wcf_ca_from_name" name="wcf_ca_from_name" value="%s" />',
isset( $wcf_ca_from_name ) ? esc_attr( $wcf_ca_from_name ) : ''
);
$html = '<label for="wcf_ca_from_name"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for email from.
*
* @param array $args Arguments.
*/
public static function wcf_ca_from_email_callback( $args ) {
$wcf_ca_from_email = get_option( 'wcf_ca_from_email' );
printf(
'<input class="wcf-ca-trigger-input wcf-ca-email-inputs" type="text" id="wcf_ca_from_email" name="wcf_ca_from_email" value="%s" />',
isset( $wcf_ca_from_email ) ? esc_attr( $wcf_ca_from_email ) : ''
);
$html = '<label for="wcf_ca_from_email"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Callback for email reply.
*
* @param array $args Arguments.
* @since 3.5
*/
public static function wcf_ca_reply_email_callback( $args ) {
$wcf_ca_reply_email = get_option( 'wcf_ca_reply_email' );
printf(
'<input class="wcf-ca-trigger-input wcf-ca-email-inputs" type="text" id="wcf_ca_reply_email" name="wcf_ca_reply_email" value="%s" />',
isset( $wcf_ca_reply_email ) ? esc_attr( $wcf_ca_reply_email ) : ''
);
$html = '<label for="wcf_ca_reply_email"> ' . $args[0] . '</label>';
echo wp_kses_post( $html );
}
/**
* Validation for email.
*
* @param string $input input.
* @since 1.1.5
*/
public function wcf_ca_report_emails_validation( $input ) {
if ( ! empty( $input ) ) {
$admin_emails = preg_split( "/[\f\r\n]+/", $input );
$emails_ids = array();
foreach ( $admin_emails as $admin_email ) {
if ( is_email( $admin_email ) ) {
array_push( $emails_ids, sanitize_email( $admin_email ) );
}
}
$emails_ids = implode( "\n", $emails_ids );
return $emails_ids;
}
return $input;
}
/**
* Validation for email.
*
* @param array $input input.
* @since 1.1.5
*/
public function wcf_ca_from_email_validation( $input ) {
if ( $input && ! is_email( $input ) ) {
add_settings_error(
'wcf_ca_from_email',
'error found',
__( 'Invalid email "From" address field', 'woo-cart-abandonment-recovery' )
);
}
return sanitize_email( $input );
}
/**
* Validation for reply email.
*
* @param array $input input.
* @since 1.1.5
*/
public function wcf_ca_reply_email_validation( $input ) {
if ( $input && ! is_email( $input ) ) {
add_settings_error(
'wcf_ca_reply_email',
'error found',
__( 'Invalid email "Reply" address field', 'woo-cart-abandonment-recovery' )
);
}
return sanitize_email( $input );
}
/**
* Initiator
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
}
Cartflows_Ca_Settings::get_instance();