forked from LiveCarta/LiveCartaWP
Changed source root directory
This commit is contained in:
@@ -0,0 +1,249 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user