File Editor
Directories:
.. (Back)
Templates
Files:
InfoBlocks.php
Mailer.php
Styler.php
Summaries.php
Create New File
Create
Edit File: Summaries.php
<?php namespace WPForms\Emails; /** * Email Summaries main class. * * @since 1.5.4 */ class Summaries { /** * Constructor. * * @since 1.5.4 */ public function __construct() { $this->hooks(); $summaries_disabled = $this->is_disabled(); if ( $summaries_disabled && \wp_next_scheduled( 'wpforms_email_summaries_cron' ) ) { \wp_clear_scheduled_hook( 'wpforms_email_summaries_cron' ); } if ( ! $summaries_disabled && ! \wp_next_scheduled( 'wpforms_email_summaries_cron' ) ) { \wp_schedule_event( $this->get_first_cron_date_gmt(), 'wpforms_email_summaries_weekly', 'wpforms_email_summaries_cron' ); } } /** * Get the instance of a class and store it in itself. * * @since 1.5.4 */ public static function get_instance() { static $instance; if ( ! $instance ) { $instance = new self(); } return $instance; } /** * Email Summaries hooks. * * @since 1.5.4 */ public function hooks() { \add_filter( 'wpforms_settings_defaults', array( $this, 'disable_summaries_setting' ) ); if ( ! $this->is_disabled() ) { \add_action( 'init', array( $this, 'preview' ) ); \add_filter( 'cron_schedules', array( $this, 'add_weekly_cron_schedule' ) ); \add_action( 'wpforms_email_summaries_cron', array( $this, 'cron' ) ); } } /** * Check if Email Summaries are disabled in settings. * * @since 1.5.4 * * @return bool */ protected function is_disabled() { return (bool) apply_filters( 'wpforms_emails_summaries_is_disabled', (bool) \wpforms_setting( 'email-summaries-disable' ) ); } /** * Add "Disable Email Summaries" to WPForms settings. * * @since 1.5.4 * * @param array $settings WPForms settings. * * @return mixed */ public function disable_summaries_setting( $settings ) { if ( (bool) apply_filters( 'wpforms_emails_summaries_is_disabled', false ) ) { return $settings; } $url = \add_query_arg( array( 'wpforms_email_template' => 'summary', 'wpforms_email_preview' => '1', ), \admin_url() ); $desc = \esc_html__( 'Disable Email Summaries weekly delivery.', 'wpforms-lite' ); if ( ! $this->is_disabled() ) { $desc .= '<br><a href="' . $url . '" target="_blank">' . \esc_html__( 'View Email Summary Example', 'wpforms-lite' ) . '</a>'; } $settings['misc']['email-summaries-disable'] = array( 'id' => 'email-summaries-disable', 'name' => \esc_html__( 'Disable Email Summaries', 'wpforms-lite' ), 'desc' => $desc, 'type' => 'checkbox', ); return $settings; } /** * Preview Email Summary. * * @since 1.5.4 */ public function preview() { if ( ! \wpforms_current_user_can() ) { return; } if ( ! isset( $_GET['wpforms_email_preview'], $_GET['wpforms_email_template'] ) ) { // phpcs:ignore return; } if ( 'summary' !== $_GET['wpforms_email_template'] ) { // phpcs:ignore return; } $args = array( 'body' => array( 'entries' => $this->get_entries(), 'info_block' => ( new InfoBlocks() )->get_next(), ), ); $template = ( new Templates\Summary() )->set_args( $args ); $template = \apply_filters( 'wpforms_emails_summaries_template', $template ); $content = $template->get(); if ( 'default' !== \wpforms_setting( 'email-template', 'default' ) ) { $content = \wpautop( $content ); } echo $content; // phpcs:ignore exit; } /** * Get next cron occurrence date. * * @since 1.5.4 * * @return int */ protected function get_first_cron_date_gmt() { $date = \absint( \strtotime( 'next monday 2pm' ) - ( \get_option( 'gmt_offset' ) * \HOUR_IN_SECONDS ) ); return $date ? $date : \time(); } /** * Add custom Email Summaries cron schedule. * * @since 1.5.4 * * @param array $schedules WP cron schedules. * * @return array */ public function add_weekly_cron_schedule( $schedules ) { $schedules['wpforms_email_summaries_weekly'] = array( 'interval' => \WEEK_IN_SECONDS, 'display' => \esc_html__( 'Weekly WPForms Email Summaries', 'wpforms-lite' ), ); return $schedules; } /** * Email Summaries cron callback. * * @since 1.5.4 */ public function cron() { $entries = $this->get_entries(); // Email won't be sent if there are no form entries. if ( empty( $entries ) ) { return; } $info_blocks = new InfoBlocks(); $next_block = $info_blocks->get_next(); $args = array( 'body' => array( 'entries' => $entries, 'info_block' => $next_block, ), ); $template = ( new Templates\Summary() )->set_args( $args ); $template = \apply_filters( 'wpforms_emails_summaries_template', $template ); $content = $template->get(); if ( ! $content ) { return; } $to_email = \apply_filters( 'wpforms_emails_summaries_cron_to_email', \get_option( 'admin_email' ) ); $subject = \apply_filters( 'wpforms_emails_summaries_cron_subject', \esc_html__( 'WPForms Summary', 'wpforms-lite' ) ); $sent = ( new Mailer() ) ->template( $template ) ->subject( $subject ) ->to_email( $to_email ) ->send(); if ( true === $sent ) { $info_blocks->register_sent( $next_block ); } } /** * Get form entries. * * @since 1.5.4 * * @return array */ protected function get_entries() { if ( \wpforms()->pro ) { $entries_count = new \WPForms\Pro\Reports\EntriesCount(); $results = $entries_count->get_by( 'form', 0, 7, 'previous sunday' ); } else { $entries_count = new \WPForms\Lite\Reports\EntriesCount(); $results = $entries_count->get_by_form(); } return $results; } }
Save Changes
Rename File
Rename