diff --git a/lib/Config/Shortcodes.php b/lib/Config/Shortcodes.php index e55d6802be..49f42411f7 100644 --- a/lib/Config/Shortcodes.php +++ b/lib/Config/Shortcodes.php @@ -67,17 +67,16 @@ class Shortcodes { } function getArchive($params) { + $segment_ids = array(); if(!empty($params['segments'])) { $segment_ids = array_map(function($segment_id) { return (int)trim($segment_id); }, explode(',', $params['segments'])); } - $newsletters = array(); $html = ''; - // TODO: needs more advanced newsletters in order to finish - $newsletters = Newsletter::limit(10)->orderByDesc('created_at')->findMany(); + $newsletters = Newsletter::getArchives($segment_ids); if(empty($newsletters)) { return apply_filters( @@ -109,7 +108,7 @@ class Shortcodes { function renderArchiveDate($newsletter) { return date_i18n( get_option('date_format'), - strtotime($newsletter->created_at) + strtotime($newsletter->processed_at) ); } diff --git a/lib/Models/Newsletter.php b/lib/Models/Newsletter.php index 9d687be5a6..49434f004b 100644 --- a/lib/Models/Newsletter.php +++ b/lib/Models/Newsletter.php @@ -611,4 +611,31 @@ class Newsletter extends Model { ->whereIn('options.value', $segments) ->findMany(); } + + static function getArchives($segment_ids = array()) { + $orm = self::table_alias('newsletters') + ->distinct()->select('newsletters.*') + ->whereIn('newsletters.type', array( + self::TYPE_STANDARD, + self::TYPE_NOTIFICATION_HISTORY + )) + ->join( + MP_SENDING_QUEUES_TABLE, + 'queues.newsletter_id = newsletters.id', + 'queues' + ) + ->where('queues.status', SendingQueue::STATUS_COMPLETED) + ->select('queues.processed_at') + ->orderByDesc('queues.processed_at'); + + if(!empty($segment_ids)) { + $orm->join( + MP_NEWSLETTER_SEGMENT_TABLE, + 'newsletter_segments.newsletter_id = newsletters.id', + 'newsletter_segments' + ) + ->whereIn('newsletter_segments.segment_id', $segment_ids); + } + return $orm->findMany(); + } } \ No newline at end of file