plugin install
This commit is contained in:
@@ -0,0 +1,433 @@
|
||||
<?php
|
||||
|
||||
namespace WPMailSMTP\Reports\Emails;
|
||||
|
||||
use WPMailSMTP\Admin\Area;
|
||||
use WPMailSMTP\Options;
|
||||
use WPMailSMTP\Reports\Reports;
|
||||
|
||||
/**
|
||||
* Class Summary. Summary report email.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
class Summary {
|
||||
|
||||
/**
|
||||
* The slug that will be used to save the option of summary report email.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
const SETTINGS_SLUG = 'summary_report_email_disabled';
|
||||
|
||||
/**
|
||||
* Whether summary report email is disabled.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_disabled() {
|
||||
|
||||
$value = Options::init()->get( 'general', self::SETTINGS_SLUG );
|
||||
|
||||
// If option was not already set, then plugin was updated from lower version.
|
||||
if (
|
||||
( $value === '' || $value === null ) &&
|
||||
( is_multisite() || ! wp_mail_smtp()->is_pro() )
|
||||
) {
|
||||
$value = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters whether summary report email is disabled.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param bool $is_disabled
|
||||
*/
|
||||
$value = apply_filters( 'wp_mail_smtp_reports_emails_summary_is_disabled', $value );
|
||||
|
||||
return (bool) $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get summary report email preview link.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @return string Preview link.
|
||||
*/
|
||||
public static function get_preview_link() {
|
||||
|
||||
return add_query_arg(
|
||||
[ 'mode' => 'summary_report_email_preview' ],
|
||||
wp_mail_smtp()->get_admin()->get_admin_page_url()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send summary report email.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
public function send() {
|
||||
|
||||
if ( $this->is_disabled() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$parsed_home_url = wp_parse_url( home_url() );
|
||||
$site_domain = $parsed_home_url['host'];
|
||||
|
||||
if ( is_multisite() && isset( $parsed_home_url['path'] ) ) {
|
||||
$site_domain .= $parsed_home_url['path'];
|
||||
}
|
||||
|
||||
$subject = sprintf( /* translators: %s - site domain. */
|
||||
esc_html__( 'Your Weekly WP Mail SMTP Summary for %s', 'wp-mail-smtp' ),
|
||||
$site_domain
|
||||
);
|
||||
|
||||
/**
|
||||
* Filters the summaries email subject.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $subject Email subject.
|
||||
*/
|
||||
$subject = apply_filters( 'wp_mail_smtp_reports_emails_summary_send_subject', $subject );
|
||||
|
||||
/**
|
||||
* Filters the summaries recipient email address.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $email Recipient email address.
|
||||
*/
|
||||
$to_email = apply_filters( 'wp_mail_smtp_reports_emails_summary_send_to', get_option( 'admin_email' ) );
|
||||
|
||||
add_filter( 'wp_mail_content_type', [ $this, 'set_html_content_type' ] );
|
||||
|
||||
wp_mail( $to_email, $subject, $this->get_content() );
|
||||
|
||||
remove_filter( 'wp_mail_content_type', [ $this, 'set_html_content_type' ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get summary report email content.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_content() {
|
||||
|
||||
$content = $this->get_header_html();
|
||||
$content .= $this->get_main_html();
|
||||
$content .= $this->get_footer_html();
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get summary report email header HTML.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_header_html() {
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<!--[if !mso]><!-->
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|
||||
<!--<![endif]-->
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<meta name="supported-color-schemes" content="light dark">
|
||||
<title><?php esc_html_e( 'WP Mail SMTP Weekly Email Summary', 'wp-mail-smtp' ); ?></title>
|
||||
<style type="text/css">
|
||||
<?php include wp_mail_smtp()->plugin_path . '/assets/css/emails/summary-report-email.css'; ?>
|
||||
</style>
|
||||
</head>
|
||||
<body class="dark-body-bg" style="margin: 0;padding: 0;min-width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: #f1f1f1;text-align: left;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;mso-line-height-rule: exactly;line-height: 140%;font-size: 14px;height: 100% !important;width: 100% !important;-webkit-font-smoothing: antialiased !important;-moz-osx-font-smoothing: grayscale !important;">
|
||||
<table class="body dark-body-bg" border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" style="border-collapse: collapse;border-spacing: 0;padding: 0;vertical-align: top;text-align: left;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;margin: 0;min-width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: #f1f1f1;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;mso-line-height-rule: exactly;line-height: 140%;font-size: 14px;height: 100% !important;width: 100%;-webkit-font-smoothing: antialiased !important;-moz-osx-font-smoothing: grayscale !important;">
|
||||
<tr style="padding: 0;vertical-align: top;text-align: left;">
|
||||
<td align="center" valign="top" style="word-wrap: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;padding: 0;vertical-align: top;text-align: center;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;margin: 0;mso-line-height-rule: exactly;line-height: 140%;font-size: 14px;border-collapse: collapse !important;">
|
||||
<!-- Container -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="container" style="border-collapse: collapse;border-spacing: 0;padding: 0;vertical-align: top;text-align: inherit;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;width: 600px;margin: 0 auto 0 auto;">
|
||||
<!-- Header -->
|
||||
<tr style="padding: 0;vertical-align: top;text-align: left;">
|
||||
<td align="center" valign="middle" class="header" style="word-wrap: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;padding: 15px 0px;vertical-align: top;text-align: center;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;margin: 0;mso-line-height-rule: exactly;line-height: 140%;font-size: 14px;border-collapse: collapse !important;">
|
||||
<div class="light-img">
|
||||
<img src="<?php echo esc_url( wp_mail_smtp()->assets_url . '/images/reports/email/wp-mail-smtp-logo' . ( wp_mail_smtp()->is_white_labeled() ? '-whitelabel' : '' ) . '.png' ); ?>" width="321" alt="<?php esc_attr_e( 'WP Mail SMTP Logo', 'wp-mail-smtp' ); ?>" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;width: 321px;max-width: 100%;clear: both;display: inline-block !important;height: auto !important;">
|
||||
</div>
|
||||
<!--[if !mso]><! -->
|
||||
<div class="dark-img" style="display:none; overflow:hidden; float:left; width:0px; max-height:0px; max-width:0px; line-height:0px; visibility:hidden;" align="center">
|
||||
<img src="<?php echo esc_url( wp_mail_smtp()->assets_url . '/images/reports/email/wp-mail-smtp-logo-dark' . ( wp_mail_smtp()->is_white_labeled() ? '-whitelabel' : '' ) . '.png' ); ?>" width="321" alt="<?php esc_attr_e( 'WP Mail SMTP Logo', 'wp-mail-smtp' ); ?>" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;width: 321px;max-width: 100%;clear: both;display: inline-block !important;height: auto !important;">
|
||||
</div>
|
||||
<!--<![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Content -->
|
||||
<tr style="padding: 0;vertical-align: top;text-align: left;">
|
||||
<td align="left" valign="top" class="content dark-content-bg" style="word-wrap: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;padding: 60px;vertical-align: top;text-align: left;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;margin: 0;mso-line-height-rule: exactly;line-height: 140%;font-size: 14px;background: #ffffff;border-radius: 6px;border-collapse: collapse !important;">
|
||||
<?php
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get summary report email footer HTML.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_footer_html() {
|
||||
|
||||
$settings_link = add_query_arg(
|
||||
[ 'tab' => 'misc' ],
|
||||
wp_mail_smtp()->get_admin()->get_admin_page_url( Area::SLUG )
|
||||
);
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Footer -->
|
||||
<tr style="padding: 0;vertical-align: top;text-align: left;">
|
||||
<td class="footer" align="center" valign="top" style="word-wrap: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;padding: 30px 0px;vertical-align: top;text-align: center;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #777777;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;margin: 0;mso-line-height-rule: exactly;line-height: 140%;font-size: 13px;border-collapse: collapse !important;">
|
||||
<?php
|
||||
echo wp_kses(
|
||||
sprintf( /* translators: %1$s - link to a site; %2$s - link to the settings page. */
|
||||
__( 'This email was auto-generated and sent from %1$s. Learn %2$s.', 'wp-mail-smtp' ),
|
||||
'<a href="' . esc_url( home_url() ) . '" style="-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #72777c;font-family: \'Helvetica Neue\', Helvetica, Arial, sans-serif;font-weight: normal;padding: 0;margin: 0;text-align: left;mso-line-height-rule: exactly;line-height: 140%;text-decoration: underline;">' . esc_html( wp_specialchars_decode( get_bloginfo( 'name' ) ) ) . '</a>',
|
||||
'<a href="' . esc_url( $settings_link ) . '" style="-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #72777c;font-family: \'Helvetica Neue\', Helvetica, Arial, sans-serif;font-weight: normal;padding: 0;margin: 0;text-align: left;mso-line-height-rule: exactly;line-height: 140%;text-decoration: underline;">' . esc_html__( 'how to disable it', 'wp-mail-smtp' ) . '</a>'
|
||||
),
|
||||
[
|
||||
'a' => [
|
||||
'href' => [],
|
||||
'style' => [],
|
||||
],
|
||||
]
|
||||
);
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get summary report email general content HTML.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function get_main_html() {
|
||||
|
||||
$reports = new Reports();
|
||||
|
||||
$upgrade_link = wp_mail_smtp()->get_upgrade_link(
|
||||
[
|
||||
'medium' => 'weekly-email-summary',
|
||||
'content' => 'upgrade-to-wp-mail-smtp-pro-button',
|
||||
]
|
||||
);
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<h6 class="main-heading dark-white-color" style="margin: 0;padding: 0;color: #444444;word-wrap: normal;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: bold;mso-line-height-rule: exactly;line-height: 22px;;text-align: left;font-size: 18px;margin-bottom: 10px;">
|
||||
<?php esc_html_e( 'Hi there,', 'wp-mail-smtp' ); ?>
|
||||
</h6>
|
||||
<p class="main-description dark-white-color" style="margin: 0;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;padding: 0;text-align: left;mso-line-height-rule: exactly;line-height: 19px;font-size: 16px;margin-bottom: 40px;">
|
||||
<?php esc_html_e( 'Let’s see how many emails you’ve sent with WP Mail SMTP.', 'wp-mail-smtp' ); ?>
|
||||
</p>
|
||||
|
||||
<table class="stats-totals-wrapper two" style="border-collapse: collapse;border-spacing: 0;padding: 0;vertical-align: top;text-align: left;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;width: 100%;">
|
||||
<tr style="padding: 0;vertical-align: top;text-align: left;">
|
||||
<td class="stats-totals-item-wrapper" style="word-wrap: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;padding: 0px;vertical-align: top;text-align: left;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;margin: 0;mso-line-height-rule: exactly;line-height: 140%;font-size: 14px;border-collapse: collapse !important;">
|
||||
<?php
|
||||
echo $this->get_stats_total_html( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||
__( 'Total Emails', 'wp-mail-smtp' ),
|
||||
'icon-email.png',
|
||||
$reports->get_total_emails_sent(), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||
$reports->get_total_emails_sent() - $reports->get_total_weekly_emails_sent( 'previous' ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||
'#809EB0'
|
||||
);
|
||||
?>
|
||||
</td>
|
||||
<td class="stats-totals-item-wrapper" style="word-wrap: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;padding: 0px;vertical-align: top;text-align: right;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;margin: 0;mso-line-height-rule: exactly;line-height: 140%;font-size: 14px;border-collapse: collapse !important;">
|
||||
<?php
|
||||
echo $this->get_stats_total_html( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||
__( 'Last week', 'wp-mail-smtp' ),
|
||||
'icon-check.png',
|
||||
$reports->get_total_weekly_emails_sent( 'now' ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||
$reports->get_total_weekly_emails_sent( 'previous' ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||
'#6AA08B'
|
||||
);
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="spacer-40" style="line-height:40px;height:40px;mso-line-height-rule:exactly;"> </div>
|
||||
|
||||
<table style="border-collapse: collapse;border-spacing: 0;padding: 0;vertical-align: top;text-align: center;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;width: 100%;">
|
||||
<tr style="padding: 0;vertical-align: top;text-align: left;">
|
||||
<td class="dark-bg" style="word-wrap: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;vertical-align: top;text-align: center;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;margin: 0;mso-line-height-rule: exactly;line-height: 140%;font-size: 14px;border-collapse: collapse !important;background: #F8F8F8;border-radius: 4px;padding: 30px">
|
||||
<img src="<?php echo esc_url( wp_mail_smtp()->assets_url . '/images/reports/icon-note.png' ); ?>" alt="<?php esc_attr_e( 'Reports', 'wp-mail-smtp' ); ?>" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;width: 75px;max-width: 100%;clear: both;display: inline-block !important;height: auto !important;" width="75">
|
||||
<h4 class="upgrade-heading dark-white-color" style="padding: 0;color: #444444;word-wrap: normal;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: bold;mso-line-height-rule: exactly;line-height: 24px;text-align: center;font-size: 20px;margin: 20px 0;"><?php esc_attr_e( 'Want More Stats?', 'wp-mail-smtp' ); ?></h4>
|
||||
<p class="upgrade-text" style="margin: 0;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #777777;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;padding: 0;text-align: center;mso-line-height-rule: exactly;line-height: 22px;font-size: 15px;margin-bottom: 20px;">
|
||||
<?php
|
||||
echo wp_kses(
|
||||
__( 'Upgrade to <b>WP Mail SMTP Pro</b> and unlock <u>Email Log</u> and advanced <u>Email Reports</u>. Start measuring the success of your emails today!', 'wp-mail-smtp' ),
|
||||
[
|
||||
'b' => [],
|
||||
'u' => [],
|
||||
]
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<center style="width: 100%;">
|
||||
<table style="border-collapse: collapse;border-spacing: 0;padding: 0;vertical-align: top;text-align: left;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;width: auto;">
|
||||
<tr style="padding: 0;vertical-align: top;text-align: left;">
|
||||
<td style="word-wrap: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;padding: 0;vertical-align: top;text-align: left;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;margin: 0;mso-line-height-rule: exactly;line-height: 100%;font-size: 14px;border-collapse: collapse !important;">
|
||||
<table style="border-collapse: collapse;border-spacing: 0;padding: 0;vertical-align: top;text-align: left;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
|
||||
<tr style="padding: 0;vertical-align: top;text-align: left;">
|
||||
<td style="word-wrap: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;vertical-align: top;text-align: center;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #ffffff;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;margin: 0;mso-line-height-rule: exactly;line-height: 100%;font-size: 14px;background: #e27730;border-radius: 3px;border-collapse: collapse !important;padding: 12px 15px 12px 15px;">
|
||||
<a href="<?php echo esc_url( $upgrade_link ); ?>" rel="noopener noreferrer" target="_blank" style="-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #ffffff;font-family: Helvetica, Arial, sans-serif;font-weight: bold;padding: 0;margin: 0;text-align: center;mso-line-height-rule: exactly;line-height: 100%;text-decoration: none;font-size: 16px;display: inline-block;">
|
||||
<?php esc_html_e( 'Upgrade to Pro', 'wp-mail-smtp' ); ?>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get stats total block HTML.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $title Heading.
|
||||
* @param string $icon Icon file.
|
||||
* @param int $value Stats value.
|
||||
* @param int $prev_value Previous period stats value.
|
||||
* @param string $color Heading text color.
|
||||
* @param string $wrapper_style Wrapper inline CSS styles.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function get_stats_total_html( $title, $icon, $value, $prev_value, $color, $wrapper_style = '' ) {
|
||||
|
||||
$width = $this->get_stats_total_item_width();
|
||||
|
||||
$percent_change = $this->calc_percent_change( $value, $prev_value );
|
||||
|
||||
$images_dir_url = wp_mail_smtp()->assets_url . '/images/reports/email/';
|
||||
$icon_width = ( $icon === 'icon-email.png' ) ? 34 : 32;
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<table class="stats-total-item" style="border-spacing: 0;padding: 0;vertical-align: top;text-align: left;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;width: <?php echo intval( $width ); ?>px;display: inline-table;min-width:<?php echo intval( $width ); ?>px;" width="<?php echo intval( $width ); ?>">
|
||||
<tr style="padding: 0;vertical-align: top;text-align: left;">
|
||||
<td class="stats-total-item-inner" style="word-wrap: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;padding: 15px 5px;vertical-align: top;text-align: center;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;margin: 0;mso-line-height-rule: exactly;line-height: 140%;font-size: 14px;border-collapse: collapse !important; width: 100%; min-width:100%; border: 1px solid #DDDDDD;border-radius: 4px;<?php echo esc_attr( $wrapper_style ); ?>">
|
||||
<p class="stats-total-item-icon-wrapper" style="margin: 0;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: <?php echo esc_attr( $color ); ?>;padding: 0;text-align: center;mso-line-height-rule: exactly;margin-bottom: 10px;height: 32px;">
|
||||
<img class="stats-total-item-icon" src="<?php echo esc_url( $images_dir_url . $icon ); ?>" alt="<?php echo esc_attr( $title ); ?>" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;width: <?php echo esc_attr( $icon_width ); ?>px;height:32px;clear: both;display: inline-block;" width="<?php echo esc_attr( $icon_width ); ?>" height="32">
|
||||
</p>
|
||||
<p class="stats-total-item-title" style="margin: 0;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: <?php echo esc_attr( $color ); ?>;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: bold;padding: 0;text-align: center;mso-line-height-rule: exactly;line-height: 14px;font-size: 13px;margin-bottom: 11px;white-space: nowrap;">
|
||||
<?php echo esc_html( $title ); ?>
|
||||
</p>
|
||||
<p class="stats-total-item-value dark-white-color" style="margin: 0 0 12px 0;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #444444;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: bold;padding: 0;text-align: center;mso-line-height-rule: exactly;line-height: 28px;font-size: 28px;">
|
||||
<?php echo esc_html( $value ); ?>
|
||||
</p>
|
||||
<p class="stats-total-item-percent" style="margin: 0;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #777777;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight: normal;padding: 0;text-align: center;mso-line-height-rule: exactly;line-height: 14px;font-size: 14px;white-space: nowrap;">
|
||||
<img src="<?php echo esc_url( $images_dir_url . 'icon-arrow-' . ( $percent_change['positive'] ? 'up' : 'down' ) . '.png' ); ?>" alt="<?php echo esc_attr( $title ); ?>" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;width: 12px;height: 12px;max-width: 100%;clear: both;" width="12" height="12">
|
||||
<span style="padding-left: 1px;">
|
||||
<!--[if mso]> <![endif]-->
|
||||
<?php echo $percent_change['positive'] ? '+' : '-'; ?><?php echo esc_html( $percent_change['value'] ); ?>%
|
||||
</span>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get stats total block width in px.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
protected function get_stats_total_item_width() {
|
||||
|
||||
return 220;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate two numbers difference in percent.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param int $new Current value.
|
||||
* @param int $old Previous value.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function calc_percent_change( $new, $old ) {
|
||||
|
||||
$new = intval( $new );
|
||||
$old = intval( $old );
|
||||
|
||||
// Prevent divide by zero.
|
||||
if ( $old === 0 ) {
|
||||
$old ++;
|
||||
$new ++;
|
||||
}
|
||||
|
||||
$diff = $new - $old;
|
||||
$percent_change = ( abs( $diff ) / $old ) * 100;
|
||||
|
||||
return [
|
||||
'positive' => $diff >= 0,
|
||||
'value' => round( $percent_change, 1 ),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the HTML content type.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function set_html_content_type() {
|
||||
|
||||
return 'text/html';
|
||||
}
|
||||
}
|
||||
237
wp/wp-content/plugins/wp-mail-smtp/src/Reports/Reports.php
Normal file
237
wp/wp-content/plugins/wp-mail-smtp/src/Reports/Reports.php
Normal file
@@ -0,0 +1,237 @@
|
||||
<?php
|
||||
|
||||
namespace WPMailSMTP\Reports;
|
||||
|
||||
use WPMailSMTP\Options;
|
||||
use WPMailSMTP\Reports\Emails\Summary as SummaryReportEmail;
|
||||
use WPMailSMTP\Tasks\Reports\SummaryEmailTask;
|
||||
use WPMailSMTP\WP;
|
||||
|
||||
/**
|
||||
* Class Reports. Emails stats reports.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
class Reports {
|
||||
|
||||
/**
|
||||
* The WP option key for storing the total number of sent emails.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @const string
|
||||
*/
|
||||
const SENT_EMAILS_COUNTER_OPTION_KEY = 'wp_mail_smtp_lite_sent_email_counter';
|
||||
|
||||
/**
|
||||
* The WP option key for storing the total number of sent emails by weeks.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @const string
|
||||
*/
|
||||
const WEEKLY_SENT_EMAILS_COUNTER_OPTION_KEY = 'wp_mail_smtp_lite_weekly_sent_email_counter';
|
||||
|
||||
/**
|
||||
* Stats by week retention period. Value in weeks count.
|
||||
* Maximum value is 52 weeks (1 year).
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @const string
|
||||
*/
|
||||
const WEEKLY_COUNTER_RETENTION_PERIOD = 12;
|
||||
|
||||
/**
|
||||
* Init class.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
public function init() {
|
||||
|
||||
$this->public_hooks();
|
||||
|
||||
if ( WP::in_wp_admin() ) {
|
||||
$this->admin_hooks();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Frontend hooks.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
private function public_hooks() {
|
||||
|
||||
// Update sent email counter when SMTP mailer is used.
|
||||
add_action( 'wp_mail_smtp_mailcatcher_smtp_send_after', [ $this, 'update_sent_emails_stats' ] );
|
||||
|
||||
// Update sent email counter when all other mailers are used.
|
||||
add_action( 'wp_mail_smtp_mailcatcher_send_after', [ $this, 'update_sent_emails_stats' ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Admin hooks.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
private function admin_hooks() {
|
||||
|
||||
add_action( 'load-toplevel_page_wp-mail-smtp', [ $this, 'summary_report_email_preview' ] );
|
||||
|
||||
// Detect summary report email constant change.
|
||||
if ( Options::init()->is_const_defined( 'general', SummaryReportEmail::SETTINGS_SLUG ) ) {
|
||||
add_action( 'admin_init', [ $this, 'detect_summary_report_email_constant_change' ] );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update all stats after email sent.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
public function update_sent_emails_stats() {
|
||||
|
||||
if ( wp_mail_smtp()->is_pro() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->increment_sent_emails_counter();
|
||||
$this->increment_weekly_sent_emails_counter();
|
||||
}
|
||||
|
||||
/**
|
||||
* Increment the number of total emails sent by 1.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
private function increment_sent_emails_counter() {
|
||||
|
||||
$value = $this->get_total_emails_sent() + 1;
|
||||
|
||||
update_option( self::SENT_EMAILS_COUNTER_OPTION_KEY, $value, true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of total emails sent.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function get_total_emails_sent() {
|
||||
|
||||
return get_option( self::SENT_EMAILS_COUNTER_OPTION_KEY, 0 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Increment the number of total emails sent in this week by 1.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
private function increment_weekly_sent_emails_counter() {
|
||||
|
||||
$stats = $this->get_total_weekly_emails_sent();
|
||||
|
||||
$week = $this->get_current_week();
|
||||
|
||||
if ( ! isset( $stats[ $week ] ) ) {
|
||||
$stats[ $week ] = 0;
|
||||
}
|
||||
|
||||
$stats[ $week ] ++;
|
||||
|
||||
// Cleanup old stats.
|
||||
$stats = array_slice( $stats, self::WEEKLY_COUNTER_RETENTION_PERIOD * - 1, null, true );
|
||||
|
||||
update_option( self::WEEKLY_SENT_EMAILS_COUNTER_OPTION_KEY, $stats, true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of total emails sent by week.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param int|string $week Week number or "now", "previous" identifiers.
|
||||
*
|
||||
* @return array|int
|
||||
*/
|
||||
public function get_total_weekly_emails_sent( $week = null ) {
|
||||
|
||||
$stats = get_option( self::WEEKLY_SENT_EMAILS_COUNTER_OPTION_KEY, [] );
|
||||
|
||||
if ( ! is_null( $week ) ) {
|
||||
if ( $week === 'now' ) {
|
||||
$week = $this->get_current_week();
|
||||
} elseif ( $week === 'previous' ) {
|
||||
$week = $this->get_current_week() - 1;
|
||||
}
|
||||
|
||||
return isset( $stats[ $week ] ) ? $stats[ $week ] : 0;
|
||||
}
|
||||
|
||||
return $stats;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a summary report email preview and display it for users.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
public function summary_report_email_preview() {
|
||||
|
||||
if ( ! current_user_can( wp_mail_smtp()->get_admin()->get_logs_access_capability() ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! isset( $_GET['mode'] ) || $_GET['mode'] !== 'summary_report_email_preview' ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
||||
return;
|
||||
}
|
||||
|
||||
$email = $this->get_summary_report_email();
|
||||
|
||||
echo $email->get_content(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get emails stats weekly summary report email.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @return SummaryReportEmail
|
||||
*/
|
||||
public function get_summary_report_email() {
|
||||
|
||||
return new SummaryReportEmail();
|
||||
}
|
||||
|
||||
/**
|
||||
* Detect summary report email constant change.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
public function detect_summary_report_email_constant_change() {
|
||||
|
||||
if ( ! WP::in_wp_admin() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( Options::init()->is_const_changed( 'general', SummaryReportEmail::SETTINGS_SLUG ) ) {
|
||||
( new SummaryEmailTask() )->cancel();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current week number.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function get_current_week() {
|
||||
|
||||
return current_time( 'W' );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user