- Prevents deleted newsletters from showing up in archives

- Adds a relationship to the sending queue table
- Resets hash on newsletter duplication and notification history creation
- Updates hash generation to use random string instead of newsletter id
This commit is contained in:
Vlad
2016-12-12 18:05:11 -05:00
parent 062f849fc8
commit 3b795a3e58
2 changed files with 27 additions and 8 deletions

View File

@ -220,7 +220,9 @@ class Newsletters extends APIEndpoint {
$newsletter->save(); $newsletter->save();
$subscriber = Subscriber::getCurrentWPUser(); $subscriber = Subscriber::getCurrentWPUser();
$preview_url = NewsletterUrl::getViewInBrowserUrl( $preview_url = NewsletterUrl::getViewInBrowserUrl(
$data, $subscriber, $queue = false, $preview = true NewsletterUrl::ACTION_EDITOR,
$newsletter,
$subscriber
); );
return $this->successResponse( return $this->successResponse(
@ -339,7 +341,11 @@ class Newsletters extends APIEndpoint {
// get preview url // get preview url
$subscriber = Subscriber::getCurrentWPUser(); $subscriber = Subscriber::getCurrentWPUser();
$newsletter->preview_url = NewsletterUrl::getViewInBrowserUrl( $newsletter->preview_url = NewsletterUrl::getViewInBrowserUrl(
$newsletter, $subscriber, $queue, $preview = true); NewsletterUrl::ACTION_LISTING,
$newsletter,
$subscriber,
$queue
);
$data[] = $newsletter->asArray(); $data[] = $newsletter->asArray();
} }

View File

@ -2,6 +2,7 @@
namespace MailPoet\Models; namespace MailPoet\Models;
use MailPoet\Newsletter\Renderer\Renderer; use MailPoet\Newsletter\Renderer\Renderer;
use MailPoet\Util\Helpers; use MailPoet\Util\Helpers;
use MailPoet\Util\Security;
if(!defined('ABSPATH')) exit; if(!defined('ABSPATH')) exit;
@ -27,6 +28,10 @@ class Newsletter extends Model {
)); ));
} }
function queue() {
return $this->has_one(__NAMESPACE__ . '\SendingQueue', 'newsletter_id', 'id');
}
function save() { function save() {
if(is_string($this->deleted_at) && strlen(trim($this->deleted_at)) === 0) { if(is_string($this->deleted_at) && strlen(trim($this->deleted_at)) === 0) {
$this->set_expr('deleted_at', 'NULL'); $this->set_expr('deleted_at', 'NULL');
@ -41,7 +46,7 @@ class Newsletter extends Model {
$this->set('hash', $this->set('hash',
($this->hash) ($this->hash)
? $this->hash ? $this->hash
: self::generateHash($this->id) : self::generateHash()
); );
return parent::save(); return parent::save();
} }
@ -80,6 +85,9 @@ class Newsletter extends Model {
// reset status // reset status
$duplicate->set('status', self::STATUS_DRAFT); $duplicate->set('status', self::STATUS_DRAFT);
// reset hash
$duplicate->set('hash', null);
$duplicate->save(); $duplicate->save();
if($duplicate->getErrors() === false) { if($duplicate->getErrors() === false) {
@ -136,6 +144,9 @@ class Newsletter extends Model {
$notification_history->set_expr('updated_at', 'NOW()'); $notification_history->set_expr('updated_at', 'NOW()');
$notification_history->set_expr('deleted_at', 'NULL'); $notification_history->set_expr('deleted_at', 'NULL');
// reset hash
$notification_history->set('hash', null);
$notification_history->save(); $notification_history->save();
if($notification_history->getErrors() === false) { if($notification_history->getErrors() === false) {
@ -640,6 +651,7 @@ class Newsletter extends Model {
'queues' 'queues'
) )
->where('queues.status', SendingQueue::STATUS_COMPLETED) ->where('queues.status', SendingQueue::STATUS_COMPLETED)
->whereNull('newsletters.deleted_at')
->select('queues.processed_at') ->select('queues.processed_at')
->orderByDesc('queues.processed_at'); ->orderByDesc('queues.processed_at');
@ -659,10 +671,11 @@ class Newsletter extends Model {
->findOne(); ->findOne();
} }
static function generateHash($id = null) { static function generateHash() {
if(!is_null($id)) { return substr(
return substr(md5(AUTH_KEY . $id), 0, self::NEWSLETTER_HASH_LENGTH); md5(AUTH_KEY . Security::generateRandomString(15)),
} 0,
return false; self::NEWSLETTER_HASH_LENGTH
);
} }
} }