Files
torebki-fabiola.pl/wp-content/plugins/email-subscribers/lite/includes/services/class-es-service-email-sending.php
2026-03-05 13:07:40 +01:00

931 lines
27 KiB
PHP

<?php
class ES_Service_Email_Sending extends ES_Services {
/**
* Class instance.
*
* @var Onboarding instance
*/
protected static $instance = null;
/**
* Added Logger Context
*
* @since 4.6.0
* @var array
*/
protected static $logger_context = array(
'source' => 'ig_es_ess_onboarding',
);
/**
* API URL
*
* @since 4.6.0
* @var string
*/
public $api_url = 'https://api.igeml.com/';
/**
* Service command
*
* @var string
*
* @since 4.6.1
*/
public $cmd = 'accounts/register';
/**
* Variable to hold all onboarding tasks list.
*
* UPDATE : Added ess cron scheduling in 5.6.11
*
* @since 4.6.0
* @var array
*/
private static $all_onboarding_tasks = array(
'configuration_tasks' => array(
'create_ess_account',
'set_sending_service_consent',
'schedule_ess_cron',
),
'email_delivery_check_tasks' => array(
'dispatch_emails_from_server',
'check_test_email_on_server',
),
'completion_tasks' => array(
'complete_ess_onboarding',
),
);
/**
* Option name for current task name.
*
* @since 4.6.0
* @var array
*/
private static $onboarding_current_task_option = 'ig_es_ess_onboarding_current_task';
/**
* Option name which holds common data between tasks.
*
* E.g. created subscription form id from create_default_subscription_form function so we can use it in add_widget_to_sidebar
*
* @since 4.6.0
* @var array
*/
private static $onboarding_tasks_data_option = 'ig_es_ess_onboarding_tasks_data';
/**
* Option name which holds tasks which are done.
*
* @since 4.6.0
* @var array
*/
private static $onboarding_tasks_done_option = 'ig_es_ess_onboarding_tasks_done';
/**
* Option name which holds tasks which are failed.
*
* @since 4.6.0
* @var array
*/
private static $onboarding_tasks_failed_option = 'ig_es_ess_onboarding_tasks_failed';
/**
* Option name which holds tasks which are skipped due to dependency on other tasks.
*
* @since 4.6.0
* @var array
*/
private static $onboarding_tasks_skipped_option = 'ig_es_ess_onboarding_tasks_skipped';
/**
* Option name which store the step which has been completed.
*
* @since 4.6.0
* @var string
*/
private static $onboarding_step_option = 'ig_es_ess_onboarding_step';
/**
* ES_Service_Email_Sending constructor.
*
* @since 4.6.1
*/
public function __construct() {
add_action( 'init', array( $this, 'init' ) );
}
public function init() {
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
add_action( 'wp_ajax_ig_es_setup_email_sending_service', array( $this, 'setup_email_sending_service' ) );
add_action( 'ig_es_ess_update_account', array( $this, 'send_plan_data_to_ess') );
add_action( 'ig_es_message_sent', array( $this, 'update_sending_service_status' ) );
// We are marking sending service status as failed only when we can't send a campaign after trying 3 times.
// This will be helpful in avoiding temporary failure errors due to network calls/site load on ESS end.
add_action( 'ig_es_campaign_failed', array( $this, 'update_sending_service_status' ) );
}
/**
* Register the JavaScript for ES gallery.
*/
public function enqueue_scripts() {
$current_page = ig_es_get_request_data( 'page' );
if ( in_array( $current_page, array( 'es_dashboard' ), true ) ) {
wp_register_script( 'ig-es-sending-service-js', ES_PLUGIN_URL . 'lite/admin/js/sending-service.js', array( 'jquery' ), ES_PLUGIN_VERSION, true );
wp_enqueue_script( 'ig-es-sending-service-js' );
$onboarding_data = $this->get_onboarding_data();
$onboarding_data['next_task'] = $this->get_next_onboarding_task();
$onboarding_data['error_message'] = __( 'An error occured. Please try again later.', 'email-subscribers' );
wp_localize_script( 'ig-es-sending-service-js', 'ig_es_ess_onboarding_data', $onboarding_data );
}
}
/**
* Method to perform configuration and list, ES form, campaigns creation related operations in the onboarding
*
* @since 4.6.0
*/
public function ajax_perform_configuration_tasks() {
$step = 2;
$this->update_onboarding_step( $step );
return $this->perform_onboarding_tasks( 'configuration_tasks' );
}
public function setup_email_sending_service() {
$response = array(
'status' => 'error',
);
check_ajax_referer( 'ig-es-admin-ajax-nonce', 'security' );
$request = ig_es_get_request_data( 'request' );
if ( ! empty( $request ) ) {
$callback = 'ajax_' . $request;
if ( is_callable( array( $this, $callback ) ) ) {
$response = call_user_func( array( $this, $callback ) );
}
}
wp_send_json( $response );
}
public function create_ess_account() {
global $ig_es_tracker;
$response = array(
'status' => 'error',
);
if ( $ig_es_tracker::is_dev_environment() ) {
$response['message'] = __( 'Email sending service is not supported on local or dev environments.', 'email-subscribers' );
return $response;
}
$plan = $this->get_plan();
$from_email = get_option( 'ig_es_from_email' );
$home_url = home_url();
$parsed_url = parse_url( $home_url );
$domain = ! empty( $parsed_url['host'] ) ? $parsed_url['host'] : '';
if ( empty( $domain ) ) {
$response['message'] = __( 'Site url is not valid. Please check your site url.', 'email-subscribers' );
return $response;
}
$email = get_option( 'admin_email' );
$limit = 3000;
$from_name = ES()->mailer->get_from_name();
$data = array(
'limit' => $limit,
'domain' => $domain,
'email' => $email,
'from_email' => $from_email,
'from_name' => $from_name,
'plan' => $plan,
);
$options = array(
'timeout' => 50,
'method' => 'POST',
'body' => $data,
);
$request_response = $this->send_request( $options, 'POST', false );
if ( ! is_wp_error( $request_response ) && ! empty( $request_response['account_id'] ) ) {
$account_id = $request_response['account_id'];
$api_key = $request_response['api_key'];
$allocated_limit = $request_response['allocated_limit'];
$internval = $request_response['interval'];
$from_email = $request_response['from_email'];
$plan = $request_response['plan'];
$ess_data = array(
'account_id' => $account_id,
'allocated_limit' => $allocated_limit,
'interval' => 'month',
'api_key' => $api_key,
'from_email' => $from_email,
'plan' => $plan,
);
update_option( 'ig_es_ess_data', $ess_data );
$response['status'] = 'success';
} else {
$response['message'] = ! empty( $request_response->get_error_message() ) ? $request_response->get_error_message() : __( 'An error has occured while creating your account. Please try again later', 'email-subscribers' );
}
return $response;
}
public function set_sending_service_consent() {
$response = array(
'status' => 'error',
);
update_option( 'ig_es_ess_opted_for_sending_service', 'yes', 'no' );
update_option( 'ig_es_ess_status', 'success' );
$response['status'] = 'success';
return $response;
}
/**
* Method to perform give onboarding tasks types.
*
* @param string $task_group Tasks group
* @param string $task_name Specific task
*
* @since 4.6.0
*/
public function perform_onboarding_tasks( $task_group = '', $task_name = '' ) {
$response = array(
'status' => '',
'tasks' => array(),
);
$logger = get_ig_logger();
$task_group = ! empty( $task_group ) ? $task_group : 'configuration_tasks';
$all_onboarding_tasks = self::$all_onboarding_tasks;
$current_tasks = array();
if ( ! empty( $all_onboarding_tasks[ $task_group ] ) ) {
// Get specific task else all tasks in a group.
if ( ! empty( $task_name ) ) {
$task_index = array_search( $task_name, $all_onboarding_tasks[ $task_group ], true );
if ( false !== $task_index ) {
$current_tasks = array( $task_name );
}
} else {
$current_tasks = $all_onboarding_tasks[ $task_group ];
}
}
$onboarding_tasks_done = get_option( self::$onboarding_tasks_done_option, array() );
$current_tasks_done = ! empty( $onboarding_tasks_done[ $task_group ] ) ? $onboarding_tasks_done[ $task_group ] : array();
$onboarding_tasks_failed = get_option( self::$onboarding_tasks_failed_option, array() );
$current_tasks_failed = ! empty( $onboarding_tasks_failed[ $task_group ] ) ? $onboarding_tasks_failed[ $task_group ] : array();
$onboarding_tasks_skipped = get_option( self::$onboarding_tasks_skipped_option, array() );
$current_tasks_skipped = ! empty( $onboarding_tasks_skipped[ $task_group ] ) ? $onboarding_tasks_skipped[ $task_group ] : array();
$onboarding_tasks_data = get_option( self::$onboarding_tasks_data_option, array() );
if ( ! empty( $current_tasks ) ) {
foreach ( $current_tasks as $current_task ) {
if ( ! in_array( $current_task, $current_tasks_done, true ) ) {
if ( $this->is_required_tasks_completed( $current_task ) ) {
if ( is_callable( array( $this, $current_task ) ) ) {
$logger->info( 'Doing Task:' . $current_task, self::$logger_context );
// Call callback function.
$task_response = call_user_func( array( $this, $current_task ) );
if ( 'success' === $task_response['status'] ) {
if ( ! empty( $task_response['tasks_data'] ) ) {
if ( ! isset( $onboarding_tasks_data[ $current_task ] ) ) {
$onboarding_tasks_data[ $current_task ] = array();
}
$onboarding_tasks_data[ $current_task ] = array_merge( $onboarding_tasks_data[ $current_task ], $task_response['tasks_data'] );
}
$logger->info( 'Task Done:' . $current_task, self::$logger_context );
// Set success status only if not already set else it can override error/skipped statuses set previously from other tasks.
if ( empty( $response['status'] ) ) {
$response['status'] = 'success';
}
$current_tasks_done[] = $current_task;
} elseif ( 'skipped' === $task_response['status'] ) {
$response['status'] = 'skipped';
$current_tasks_skipped[] = $current_task;
} else {
$logger->info( 'Task Failed:' . $current_task, self::$logger_context );
$response['status'] = 'error';
$current_tasks_failed[] = $current_task;
}
$response['tasks'][ $current_task ] = $task_response;
$onboarding_tasks_done[ $task_group ] = $current_tasks_done;
$onboarding_tasks_failed[ $task_group ] = $current_tasks_failed;
$onboarding_tasks_skipped[ $task_group ] = $current_tasks_skipped;
update_option( self::$onboarding_tasks_done_option, $onboarding_tasks_done );
update_option( self::$onboarding_tasks_failed_option, $onboarding_tasks_failed );
update_option( self::$onboarding_tasks_skipped_option, $onboarding_tasks_skipped );
update_option( self::$onboarding_tasks_data_option, $onboarding_tasks_data );
update_option( self::$onboarding_current_task_option, $current_task );
} else {
$logger->info( 'Missing Task:' . $current_task, self::$logger_context );
}
} else {
$response['status'] = 'skipped';
$current_tasks_skipped[] = $current_task;
}
} else {
$response['tasks'][ $current_task ] = array(
'status' => 'success',
);
$logger->info( 'Task already done:' . $current_task, self::$logger_context );
}
}
}
return $response;
}
/**
* Method to get next task for onboarding.
*
* @return string
*
* @since 4.6.0
*/
public function get_next_onboarding_task() {
$all_onboarding_tasks = self::$all_onboarding_tasks;
$current_task = get_option( self::$onboarding_current_task_option, '' );
// Variable to hold tasks list without any grouping.
$onboarding_tasks = array();
foreach ( $all_onboarding_tasks as $task_group => $grouped_tasks ) {
foreach ( $grouped_tasks as $task ) {
$onboarding_tasks[] = $task;
}
}
$next_task = '';
if ( ! empty( $current_task ) ) {
$current_task_index = array_search( $current_task, $onboarding_tasks, true );
if ( ! empty( $current_task_index ) ) {
$next_task_index = $current_task_index + 1;
$next_task = ! empty( $onboarding_tasks[ $next_task_index ] ) ? $onboarding_tasks[ $next_task_index ] : '';
// Check if previous required tasks are completed then only return next task else return blank task.
if ( ! $this->is_required_tasks_completed( $next_task ) ) {
$next_task = '';
}
}
}
return $next_task;
}
/**
* Method to get the onboarding data options used in onboarding process.
*
* @since 4.6.0
*/
public function get_onboarding_data_options() {
$onboarding_options = array(
self::$onboarding_tasks_done_option,
self::$onboarding_tasks_failed_option,
self::$onboarding_tasks_data_option,
self::$onboarding_tasks_skipped_option,
self::$onboarding_step_option,
self::$onboarding_current_task_option,
);
return $onboarding_options;
}
/**
* Method to get saved onboarding data.
*
* @since 4.6.0
*/
public function get_onboarding_data() {
$onboarding_data = array();
$onboarding_options = $this->get_onboarding_data_options();
foreach ( $onboarding_options as $option ) {
$option_data = get_option( $option );
$onboarding_data[ $option ] = $option_data;
}
return $onboarding_data;
}
/**
* Method to get the current onboarding step
*
* @return int $onboarding_step Current onboarding step.
*
* @since 4.6.0
*/
public static function get_onboarding_step() {
$onboarding_step = (int) get_option( self::$onboarding_step_option, 1 );
return $onboarding_step;
}
/**
* Method to updatee the onboarding step
*
* @return bool
*
* @since 4.6.0
*/
public static function update_onboarding_step( $step = 1 ) {
if ( ! empty( $step ) ) {
update_option( self::$onboarding_step_option, $step );
return true;
}
return false;
}
/**
* Method to check if onboarding is completed
*
* @return string
*
* @since 4.6.0
*/
public static function ajax_complete_ess_onboarding() {
$response = array();
$option_updated = update_option( 'ig_es_ess_onboarding_complete', 'yes', false );
if ( $option_updated ) {
$response['html'] = self::get_account_overview_html();
$response['status'] = 'success';
}
return $response;
}
public static function get_account_overview_html() {
$current_month = ig_es_get_current_month();
$service_status = self::get_sending_service_status();
$ess_data = get_option( 'ig_es_ess_data', array() );
$used_limit = isset( $ess_data['used_limit'][$current_month] ) ? $ess_data['used_limit'][$current_month]: 0;
$allocated_limit = isset( $ess_data['allocated_limit'] ) ? $ess_data['allocated_limit'] : 0;
$interval = isset( $ess_data['interval'] ) ? $ess_data['interval'] : '';
$current_mailer_name = ES()->mailer->get_current_mailer_name();
$settings_url = admin_url( 'admin.php?page=es_settings' );
ob_start();
ES_Admin::get_view(
'dashboard/ess-account-overview',
array(
'service_status' => $service_status,
'allocated_limit' => $allocated_limit,
'used_limit' => $used_limit,
'interval' => $interval,
'current_mailer_name' => $current_mailer_name,
'settings_url' => $settings_url,
)
);
$account_overview_html = ob_get_clean();
return $account_overview_html;
}
/**
* Method to check if onboarding is completed
*
* @return string
*
* @since 4.6.0
*/
public static function is_onboarding_completed() {
$onboarding_complete = get_option( 'ig_es_ess_onboarding_complete', 'no' );
if ( 'yes' === $onboarding_complete ) {
return true;
}
return false;
}
/**
* Method to check if all required task has been completed.
*
* @param string $task_name Task name.
*
* @return bool
*
* @since 4.6.0
*/
public function is_required_tasks_completed( $task_name = '' ) {
if ( empty( $task_name ) ) {
return false;
}
$required_tasks = $this->get_required_tasks( $task_name );
// If there are not any required tasks which means this task can run without any dependency.
if ( empty( $required_tasks ) ) {
return true;
}
$done_tasks = get_option( self::$onboarding_tasks_done_option, array() );
// Variable to hold list of all done tasks without any grouping.
$all_done_tasks = array();
$is_required_tasks_done = false;
if ( ! empty( $done_tasks ) ) {
foreach ( $done_tasks as $task_group => $grouped_tasks ) {
foreach ( $grouped_tasks as $task ) {
$all_done_tasks[] = $task;
}
}
}
$remaining_required_tasks = array_diff( $required_tasks, $all_done_tasks );
// Check if there are not any required tasks remaining.
if ( empty( $remaining_required_tasks ) ) {
$is_required_tasks_done = true;
}
return $is_required_tasks_done;
}
/**
* Method to get lists of required tasks which should be completed successfully for this task.
*
* @return array $required_tasks List of required tasks.
*/
public function get_required_tasks( $task_name = '' ) {
if ( empty( $task_name ) ) {
return array();
}
$required_tasks_mapping = array(
'set_sending_service_consent' => array(
'create_ess_account',
),
'schedule_ess_cron' => array(
'create_ess_account',
),
'dispatch_emails_from_server' => array(
'set_sending_service_consent',
),
'check_test_email_on_server' => array(
'dispatch_emails_from_server',
),
);
$required_tasks = ! empty( $required_tasks_mapping[ $task_name ] ) ? $required_tasks_mapping[ $task_name ] : array();
return $required_tasks;
}
/**
* Method to perform email delivery tasks.
*
* @since 4.6.0
*/
public function ajax_dispatch_emails_from_server() {
return $this->perform_onboarding_tasks( 'email_delivery_check_tasks', 'dispatch_emails_from_server' );
}
/**
* Method to perform email delivery tasks.
*
* @since 4.6.0
*/
public function ajax_check_test_email_on_server() {
return $this->perform_onboarding_tasks( 'email_delivery_check_tasks', 'check_test_email_on_server' );
}
/**
* Method to send default broadcast campaign.
*
* @since 4.6.0
*/
public function dispatch_emails_from_server() {
$response = array(
'status' => 'error',
);
$service = new ES_Send_Test_Email();
$result = $service->send_test_email();
if ( ! empty( $result['status'] ) && 'SUCCESS' === $result['status'] ) {
$response['status'] = 'success';
}
return $response;
}
/**
* Method to check if test email is received on Icegram servers.
*
* @since 4.6.0
*/
public function check_test_email_on_server() {
$response = array(
'status' => 'error',
);
$onboarding_tasks_failed = get_option( self::$onboarding_tasks_failed_option, array() );
$email_delivery_check_tasks_failed = ! empty( $onboarding_tasks_failed['email_delivery_check_tasks'] ) ? $onboarding_tasks_failed['email_delivery_check_tasks'] : array();
$task_failed = in_array( 'dispatch_emails_from_server', $email_delivery_check_tasks_failed, true );
// Peform test email checking if dispatch_emails_from_server task hasn't failed.
if ( ! $task_failed ) {
$service = new ES_Email_Delivery_Check();
$response = $service->test_email_delivery();
} else {
$response['status'] = 'failed';
}
return $response;
}
public function schedule_ess_cron() {
$response = array(
'status' => 'error',
);
if ( ! wp_next_scheduled( 'ig_es_ess_update_account') ) {
wp_schedule_event( time(), 'daily', 'ig_es_ess_update_account' );
}
$response['status'] = 'success';
return $response;
}
public function clear_ess_cron() {
wp_clear_scheduled_hook('ig_es_ess_update_account');
}
public function send_plan_data_to_ess() {
$response = array(
'status' => 'error',
);
if ( !$this->opted_for_sending_service() ) {
$this -> clear_ess_cron();
return;
}
$ess_data = get_option( 'ig_es_ess_data', array() );
$api_key = $ess_data['api_key'];
$current_plan = $this -> get_plan();
// Update account if plan is not registered or it has changed
if ( !empty( $ess_data['plan'] ) && $ess_data['plan'] == $current_plan ) {
return;
}
$data = array(
'plan' => $current_plan,
);
$options = array(
'timeout' => 50,
'method' => 'POST',
'body' => json_encode($data),
'headers' => array(
'Authorization' => 'Bearer ' . $api_key,// Keep it like bearer when we send email
'Content-Type' => 'application/json',
),
);
$api_url = 'https://api.igeml.com/accounts/update/';
$response = wp_remote_post( $api_url, $options );
if ( ! is_wp_error( $response ) ) {
$response_body = wp_remote_retrieve_body( $response );
$response_data = ( array ) json_decode( $response_body );
if ( 'success' === $response_data['status'] ) {
$ess_data['plan'] = $this->get_plan();
update_option( 'ig_es_ess_data', $ess_data );
}
}
}
public static function update_used_limit( $sent_count = 0 ) {
$ess_data = get_option( 'ig_es_ess_data', array() );
$current_month = ig_es_get_current_month();
$used_limit = ! empty( $ess_data['used_limit'][$current_month] ) ? $ess_data['used_limit'][$current_month] : 0;
$used_limit += $sent_count;
if ( ! isset( $ess_data['used_limit'] ) || ! is_array( $ess_data['used_limit'] ) ) {
$ess_data['used_limit'] = array();
}
$ess_data['used_limit'][$current_month] = $used_limit;
update_option( 'ig_es_ess_data', $ess_data );
}
public static function get_remaining_limit() {
self::fetch_and_update_ess_limit();
$ess_data = get_option( 'ig_es_ess_data', array() );
$current_month = ig_es_get_current_month();
$allocated_limit = ! empty( $ess_data['allocated_limit'] ) ? $ess_data['allocated_limit'] : 0;
$used_limit = ! empty( $ess_data['used_limit'][$current_month] ) ? $ess_data['used_limit'][$current_month] : 0;
$remaining_limit = $allocated_limit - $used_limit;
return $remaining_limit;
}
public static function fetch_and_update_ess_limit() {
$admin_email = get_option( 'admin_email' );
$data = array(
'admin_email' => $admin_email,
);
$options = array(
'method' => 'POST',
'body' => json_encode($data),
'headers' => array(
'Content-Type' => 'application/json',
),
);
$api_url = 'https://api.igeml.com/limit/check/';
$response = wp_remote_post( $api_url, $options );
if ( ! is_wp_error( $response ) ) {
$response_body = wp_remote_retrieve_body( $response );
$response_data = ( array ) json_decode( $response_body );
if ( 'success' === $response_data['status'] ) {
if ( ! empty( $response_data['account'] ) ) {
$current_month = ig_es_get_current_month();
$account = (array) $response_data['account'];
$ess_data = get_option( 'ig_es_ess_data', array() );
$ess_data['allocated_limit'] = $account['allocated_limit'];
$ess_data['used_limit'][$current_month] = $account['used_limit'];
update_option( 'ig_es_ess_data', $ess_data );
}
}
}
}
public static function use_icegram_mailer() {
$use_icegram_mailer = false;
if ( self::opted_for_sending_service() ) {
$use_icegram_mailer = true;
}
return $use_icegram_mailer;
}
public static function opted_for_sending_service() {
$opted_for_sending_service = get_option( 'ig_es_ess_opted_for_sending_service', 'no' );
return 'yes' === $opted_for_sending_service;
}
public static function using_icegram_mailer() {
return 'icegram' === ES()->mailer->mailer->slug;
}
public static function get_ess_from_email() {
$ess_data = get_option( 'ig_es_ess_data', array() );
$ess_from_email = ! empty( $ess_data['from_email'] ) ? $ess_data['from_email'] : '';
return $ess_from_email;
}
public static function can_show_ess_optin() {
global $ig_es_tracker;
if ( $ig_es_tracker::is_dev_environment() ) {
return false;
}
return true;
}
public static function is_installed_on_same_month_day() {
$installation_date = ES_Common::get_plugin_installation_date();
if ( ! empty( $installation_date ) ) {
$installation_day = gmdate( 'd', strtotime( $installation_date ) );
$current_day = gmdate( 'd', time() );
if ( $current_day === $installation_day ) {
return true;
}
}
return false;
}
public static function is_shown_previously() {
$ess_optin_shown = get_option( 'ig_es_ess_optin_shown', 'no' );
return 'yes' === $ess_optin_shown;
}
public static function set_ess_optin_shown_flag() {
update_option( 'ig_es_ess_optin_shown', 'yes', false );
}
public function update_sending_service_status() {
if ( self::using_icegram_mailer() ) {
$status = 'ig_es_message_sent' === current_action() ? 'success' : 'error';
update_option( 'ig_es_ess_status', $status, false );
}
}
public static function get_sending_service_status() {
$service_status = get_option( 'ig_es_ess_status' );
return $service_status;
}
public static function get_plan() {
$es_services = ES()->get_es_services();
$service_plan = 'lite';
if ( empty( $es_services ) ) {
return $service_plan;
}
if ( in_array( 'bounce_handling', $es_services, true ) ) {
$service_plan = 'max';
} else {
$service_plan = 'pro';
}
return $service_plan;
}
public static function is_ess_branding_enabled() {
$ess_branding_enabled = get_option( 'ig_es_ess_branding_enabled', 'yes' );
return 'yes' === $ess_branding_enabled;
}
public static function can_promote_ess() {
if ( ! self::opted_for_sending_service() && ! self::is_ess_promotion_disabled() ) {
return true;
}
return false;
}
public static function is_ess_promotion_disabled() {
$is_ess_promotion_disabled = 'yes' === get_option( 'ig_es_promotion_disabled', 'no' );
return $is_ess_promotion_disabled;
}
public static function get_ess_promotion_message_html() {
ob_start();
$optin_url = admin_url( '?page=es_dashboard&ess_optin=yes' );
$learn_more_url = 'https://www.icegram.com/email-sending-service-in-icegram-express/';
?>
<div id="ig_es_ess_promotion_message" class="text-gray-700 not-italic">
<p>
<?php echo esc_html__( 'Please fix above sending error to continue sending emails', 'email-subscribers' ); ?>
</p>
<p>
<?php echo esc_html__( 'OR', 'email-subscribers' ); ?>
</p>
<p>
<?php echo esc_html__( 'Use our Icegram email sending service for a hassle-free email sending experience.', 'email-subscribers' ); ?>
</p>
<a href="<?php echo esc_url( $optin_url ); ?>" target="_blank" id="ig-es-ess-optin-promo" class="ig-es-primary-button px-3 py-1 mt-2 align-middle">
<?php
echo esc_html__( 'Signup to ESS', 'email-subscribers' );
?>
</a>
<a href="<?php echo esc_url( $learn_more_url ); ?>" target="_blank" class="ig-es-title-button px-3 py-1 mt-2 ml-2 align-middle">
<?php
echo esc_html__( 'Learn more', 'email-subscribers' );
?>
</a>
</div>
<?php
$message_html = ob_get_clean();
return $message_html;
}
}
new ES_Service_Email_Sending();