%PDF- %PDF-
Direktori : /home/opti/public_html/stlc/wp-content/plugins/duplicator/src/Utils/Email/ |
Current File : /home/opti/public_html/stlc/wp-content/plugins/duplicator/src/Utils/Email/EmailSummaryBootstrap.php |
<?php namespace Duplicator\Utils\Email; use DUP_Log; use DUP_Package; use DUP_Settings; use DUP_PackageStatus; use Duplicator\Utils\CronUtils; use Duplicator\Libs\Snap\SnapWP; use Duplicator\Core\Views\TplMng; /** * Email summary bootstrap */ class EmailSummaryBootstrap { const CRON_HOOK = 'duplicator_email_summary_cron'; /** * Init Email Summaries * * @return void */ public static function init() { //Package hooks add_action('duplicator_package_after_set_status', array(__CLASS__, 'addPackage'), 10, 2); //Set cron action add_action(self::CRON_HOOK, array(__CLASS__, 'send')); //Activation/deactivation hooks add_action('duplicator_after_activation', array(__CLASS__, 'activationAction')); add_action('duplicator_after_deactivation', array(__CLASS__, 'deactivationAction')); } /** * Add package to summary * * @param DUP_Package $package The package * @param int $status The status * * @return void */ public static function addPackage(DUP_Package $package, $status) { EmailSummary::getInstance()->addPackage($package, $status); } /** * Send email summary * * @return bool True if email was sent */ public static function send() { $frequency = DUP_Settings::Get('email_summary_frequency'); if (($recipient = get_option('admin_email')) === false || $frequency === EmailSummary::SEND_FREQ_NEVER) { return false; } $parsedHomeUrl = wp_parse_url(home_url()); $siteDomain = $parsedHomeUrl['host']; if (is_multisite() && isset($parsedHomeUrl['path'])) { $siteDomain .= $parsedHomeUrl['path']; } $subject = sprintf( esc_html_x( 'Your Weekly Duplicator Summary for %s', '%s is the site domain', 'duplicator' ), $siteDomain ); $content = TplMng::getInstance()->render('mail/email_summary', array( 'packages' => EmailSummary::getInstance()->getPackagesInfo(), ), false); add_filter('wp_mail_content_type', array(__CLASS__, 'getMailContentType')); if (!wp_mail($recipient, $subject, $content)) { DUP_Log::Trace("FAILED TO SEND EMAIL SUMMARY."); DUP_Log::Trace("Recipients: " . $recipient); return false; } elseif (!EmailSummary::getInstance()->resetData()) { DUP_Log::Trace("FAILED TO RESET EMAIL SUMMARY DATA."); return false; } return true; } /** * Get mail content type * * @return string */ public static function getMailContentType() { return 'text/html'; } /** * Activation action * * @return void */ public static function activationAction() { $frequency = DUP_Settings::Get('email_summary_frequency'); if ($frequency === EmailSummary::SEND_FREQ_NEVER) { return; } if (self::updateCron($frequency) == false) { DUP_Log::Trace("FAILED TO INIT EMAIL SUMMARY CRON. Frequency: {$frequency}"); } } /** * Deactivation action * * @return void */ public static function deactivationAction() { if (self::updateCron(EmailSummary::SEND_FREQ_NEVER) == false) { DUP_Log::Trace("FAILED TO REMOVE EMAIL SUMMARY CRON."); } } /** * Update next send time on frequency setting change * * @param string $oldFrequency The old frequency * @param string $newFrequency The new frequency * * @return bool True if the cron was updated or false on error */ public static function updateFrequency($oldFrequency, $newFrequency) { if ($oldFrequency === $newFrequency) { return true; } return self::updateCron($newFrequency); } /** * Updates the WP Cron job base on frequency or settings * * @param string $frequency The frequency * * @return bool True if the cron was updated or false on error */ private static function updateCron($frequency = '') { if (strlen($frequency) === 0) { $frequency = DUP_Settings::Get('email_summary_frequency'); } if ($frequency === EmailSummary::SEND_FREQ_NEVER) { if (wp_next_scheduled(self::CRON_HOOK)) { //have to check return like this because //wp_clear_scheduled_hook returns void in WP < 5.1 return !self::isFalseOrWpError(wp_clear_scheduled_hook(self::CRON_HOOK)); } else { return true; } } else { if ( wp_next_scheduled(self::CRON_HOOK) && self::isFalseOrWpError(wp_clear_scheduled_hook(self::CRON_HOOK)) ) { return false; } return !self::isFalseOrWpError(wp_schedule_event( self::getFirstRunTime($frequency), self::getCronSchedule($frequency), self::CRON_HOOK )); } } /** * Set next send time based on frequency * * @param string $frequency Frequency * * @return int */ private static function getFirstRunTime($frequency) { switch ($frequency) { case EmailSummary::SEND_FREQ_DAILY: $firstRunTime = strtotime('tomorrow 14:00'); break; case EmailSummary::SEND_FREQ_WEEKLY: $firstRunTime = strtotime('next monday 14:00'); break; case EmailSummary::SEND_FREQ_MONTHLY: $firstRunTime = strtotime('first day of next month 14:00'); break; case EmailSummary::SEND_FREQ_NEVER: return 0; default: throw new \Exception("Unknown frequency: " . $frequency); } return $firstRunTime - SnapWP::getGMTOffset(); } /** * Get the cron schedule * * @param string $frequency The frequency * * @return string */ private static function getCronSchedule($frequency) { switch ($frequency) { case EmailSummary::SEND_FREQ_DAILY: return CronUtils::INTERVAL_DAILTY; case EmailSummary::SEND_FREQ_WEEKLY: return CronUtils::INTERVAL_WEEKLY; case EmailSummary::SEND_FREQ_MONTHLY: return CronUtils::INTERVAL_MONTHLY; default: throw new Exception("Unknown frequency: " . $frequency); } } /** * Returns true if is false or wp_error * * @param mixed $value The value * * @return bool */ private static function isFalseOrWpError($value) { return $value === false || is_wp_error($value); } }