Fixes sending limit not being enforced when email frequency limit is

changed to a lesser value OR when it is changed while sending is in
progress
This commit is contained in:
Vlad
2017-04-04 09:23:33 -04:00
parent 74aef73f75
commit 0ef430567b
2 changed files with 10 additions and 6 deletions

View File

@@ -1,7 +1,9 @@
<?php <?php
namespace MailPoet\API\Endpoints; namespace MailPoet\API\Endpoints;
use MailPoet\API\Endpoint as APIEndpoint; use MailPoet\API\Endpoint as APIEndpoint;
use MailPoet\API\Error as APIError; use MailPoet\API\Error as APIError;
use MailPoet\Mailer\Mailer as MailerConfig;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Services\Bridge; use MailPoet\Services\Bridge;
@@ -16,17 +18,17 @@ class Settings extends APIEndpoint {
if(empty($settings)) { if(empty($settings)) {
return $this->badRequest(array( return $this->badRequest(array(
APIError::BAD_REQUEST => APIError::BAD_REQUEST =>
__("You have not specified any settings to be saved.", 'mailpoet') __('You have not specified any settings to be saved.', 'mailpoet')
)); ));
} else { } else {
foreach($settings as $name => $value) { foreach($settings as $name => $value) {
Setting::setValue($name, $value); Setting::setValue($name, $value);
} }
if(!empty($settings['mta']['mailpoet_api_key']) if(!empty($settings[MailerConfig::MAILER_CONFIG_SETTING_NAME]['mailpoet_api_key'])
&& Bridge::isMPSendingServiceEnabled() && Bridge::isMPSendingServiceEnabled()
) { ) {
$bridge = new Bridge(); $bridge = new Bridge();
$result = $bridge->checkKey($settings['mta']['mailpoet_api_key']); $result = $bridge->checkKey($settings[MailerConfig::MAILER_CONFIG_SETTING_NAME]['mailpoet_api_key']);
$bridge->updateSubscriberCount($result); $bridge->updateSubscriberCount($result);
} }
return $this->successResponse(Setting::getAll()); return $this->successResponse(Setting::getAll());

View File

@@ -89,6 +89,8 @@ class MailerLog {
static function incrementSentCount() { static function incrementSentCount() {
$mailer_log = self::getMailerLog(); $mailer_log = self::getMailerLog();
// do not increment count if sending limit is reached
if(self::isSendingLimitReached($mailer_log)) return;
// clear previous retry count, errors, etc. // clear previous retry count, errors, etc.
if($mailer_log['error']) { if($mailer_log['error']) {
$mailer_log = self::clearSendingErrorLog($mailer_log); $mailer_log = self::clearSendingErrorLog($mailer_log);
@@ -110,9 +112,9 @@ class MailerLog {
if($mailer_config['method'] === Mailer::METHOD_MAILPOET) return false; if($mailer_config['method'] === Mailer::METHOD_MAILPOET) return false;
$mailer_log = self::getMailerLog($mailer_log); $mailer_log = self::getMailerLog($mailer_log);
$elapsed_time = time() - (int)$mailer_log['started']; $elapsed_time = time() - (int)$mailer_log['started'];
if($mailer_log['sent'] === $mailer_config['frequency_limit']) { if($mailer_log['sent'] >= $mailer_config['frequency_limit']) {
if($elapsed_time <= $mailer_config['frequency_interval']) return true; if($elapsed_time <= $mailer_config['frequency_interval']) return true;
// reset mailer log if enough time has passed since the limit was reached // reset mailer log as enough time has passed since the limit was reached
self::resetMailerLog(); self::resetMailerLog();
} }
return false; return false;