geno/wp-content/plugins/cartflows/modules/email-report/class-cartflows-admin-report-emails.php
2024-02-01 11:54:18 +00:00

216 lines
6.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Email.
*
* @package CartFlows.
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
use CartflowsAdmin\AdminCore\Inc\AdminHelper;
/**
* Class Cartflows_Admin_Report_Emails.
*/
class Cartflows_Admin_Report_Emails {
/**
* Class instance.
*
* @access private
* @var $instance Class instance.
*/
private static $instance;
/**
* Initiator
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor.
*/
public function __construct() {
// It will run once.
add_action( 'admin_init', array( $this, 'schedule_weekly_report_email' ) );
add_action( 'cartflows_send_report_summary_email', array( $this, 'send_weekly_report_email' ) );
add_filter( 'admin_init', array( $this, 'unsubscribe_cartflows_weekly_emails' ), 10 );
}
/**
* Schedule the weekly email.
*/
public function schedule_weekly_report_email() {
$is_report_emails = get_option( 'cartflows_stats_report_emails', 'enable' );
if ( 'enable' === $is_report_emails && function_exists( 'as_next_scheduled_action' ) && false === as_next_scheduled_action( 'cartflows_send_report_summary_email' ) ) {
wcf()->logger->log( 'Is weekly report enabled: ' . $is_report_emails );
$date = new DateTime( 'next monday 2pm' );
// It will automatically reschedule the action once initiated.
as_schedule_recurring_action( $date, WEEK_IN_SECONDS, 'cartflows_send_report_summary_email' );
wcf()->logger->log( 'Weekly report action scheduled. Action: cartflows_send_report_summary_email ' );
} elseif ( 'enable' !== $is_report_emails && as_next_scheduled_action( 'cartflows_send_report_summary_email' ) ) {
as_unschedule_all_actions( 'cartflows_send_report_summary_email' );
wcf()->logger->log( 'Weekly report action unscheduled. Action: cartflows_send_report_summary_email ' );
}
}
/**
* Send weekly report email.
*/
public function send_weekly_report_email() {
$is_report_emails = get_option( 'cartflows_stats_report_emails', 'enable' );
$emails = get_option( 'cartflows_stats_report_email_ids', get_option( 'admin_email' ) );
wcf()->logger->log( 'Start-' . __CLASS__ . '::' . __FUNCTION__ );
if ( 'enable' === $is_report_emails && ! empty( $emails ) && apply_filters( 'cartflows_send_weekly_report_email', true ) ) {
$stats = $this->get_last_week_stats();
wcf()->logger->log( 'Send weekly emails to ' . $emails );
wcf()->logger->log( 'Total Revenue: ' . $stats['total_revenue'] );
if ( isset( $stats['total_revenue'] ) && $stats['total_revenue'] > 0 ) {
$subject = $this->get_email_subject();
$headers = 'From: ' . get_bloginfo( 'name' ) . ' <' . get_option( 'admin_email' ) . '>' . "\r\n";
$headers .= "Content-Type: text/html;\r\n";
$emails = preg_split( "/[\f\r\n]+/", $emails );
foreach ( $emails as $email_id ) {
$user_info = get_user_by( 'email', $email_id );
$name = $user_info ? $user_info->display_name : __( 'There', 'cartflows' );
$email_body = $this->get_email_content( $stats, $name, $email_id );
$status = wp_mail( $email_id, $subject, stripslashes( $email_body ), $headers ); //phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_mail_wp_mail
wcf()->logger->log( 'Email send status for email ' . $email_id . ' is ' . $status );
}
}
}
}
/**
* Unsubscribe the user from the mailing list.
*/
public function unsubscribe_cartflows_weekly_emails() {
$unsubscribe = filter_input( INPUT_GET, 'unsubscribe_weekly_email', FILTER_VALIDATE_BOOLEAN );
$page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; //phpcs:ignore WordPress.Security.NonceVerification.Recommended
$email = filter_input( INPUT_GET, 'email', FILTER_SANITIZE_EMAIL );
if ( $unsubscribe && 'cartflows' === $page && ! empty( $email ) && is_user_logged_in() && current_user_can( 'cartflows_manage_settings' ) ) {
$email_list = get_option( 'cartflows_stats_report_email_ids', false );
if ( ! empty( $email_list ) ) {
$email_list = preg_split( "/[\f\r\n]+/", $email_list );
$email_list = array_filter(
$email_list,
function( $e ) use ( $email ) {
return ( $e !== $email );
}
);
$email_list = implode( "\n", $email_list );
update_option( 'cartflows_stats_report_email_ids', $email_list );
wcf()->logger->log( 'Email unsubscribed: ' . $email );
}
wp_die( esc_html__( 'You have successfully unsubscribed from our weekly emails list.', 'cartflows' ), esc_html__( 'Unsubscribed', 'cartflows' ) );
}
}
/**
* Get the stats mention in to email.
*/
public function get_last_week_stats() {
$start_date = gmdate( 'Y-m-d', strtotime( '-7 days' ) );
$end_date = gmdate( 'Y-m-d' );
return AdminHelper::get_earnings( $start_date, $end_date );
}
/**
* Get the stats mention in to email.
*/
public function get_last_month_stats() {
$start_date = gmdate( 'Y-m-d', strtotime( '-30 days' ) );
$end_date = gmdate( 'Y-m-d' );
return AdminHelper::get_earnings( $start_date, $end_date );
}
/**
* Get admin report email subject.
*/
public function get_email_subject() {
return esc_html__( 'Heres how your store performed last week!', 'cartflows' );
}
/**
* Get admin report email content.
*
* @param array $stats reports details.
* @param string $user_name user name.
* @param string $email_id email id.
*/
public function get_email_content( $stats, $user_name, $email_id ) {
$cf_logo = CARTFLOWS_URL . 'assets/images/cartflows-email-logo.png';
$unsubscribe_link = add_query_arg(
array(
'page' => 'cartflows',
'unsubscribe_weekly_email' => true,
'email' => $email_id,
),
admin_url( 'admin.php' )
);
$facebook_icon = CARTFLOWS_URL . 'assets/images/facebook2x.png';
$twitter_icon = CARTFLOWS_URL . 'assets/images/twitter2x.png';
$youtube_icon = CARTFLOWS_URL . 'assets/images/youtube2x.png';
$from_date = gmdate( 'M j', strtotime( '-7 days' ) );
$to_date = gmdate( 'M j' );
$total_orders = $stats['total_orders'];
$total_visits = $stats['total_visits'];
$order_bump_revenue = $stats['total_bump_revenue'];
$offers_revenue = $stats['total_offers_revenue'];
$lock_icon = CARTFLOWS_URL . 'assets/images/lock.png';
$total_revenue = $stats['total_revenue'];
$last_month_stats = $this->get_last_month_stats();
$last_month_revenue = $last_month_stats['total_revenue'];
$store_name = get_bloginfo( 'name' );
return include CARTFLOWS_DIR . 'modules/email-report/templates/email-body.php';
}
}
Cartflows_Admin_Report_Emails::get_instance();