- // CRM-4290, do not show archived or unscheduled mails
- // on 'Scheduled and Sent Mailing' page selector
- if ($this->_parent->get('scheduled')) {
- $clauses[] = "civicrm_mailing.scheduled_id IS NOT NULL";
- $clauses[] = "( civicrm_mailing.is_archived IS NULL OR civicrm_mailing.is_archived = 0 )";
- $status = $this->_parent->get('mailing_status');
- if (!empty($status)) {
- $status = array_keys($status);
- $status = implode("','", $status);
- $clauses[] = "civicrm_mailing_job.status IN ('$status')";
- }
- else {
- $clauses[] = "civicrm_mailing_job.status IN ('Scheduled', 'Complete', 'Running')";
+ // get values submitted by form
+ $isDraft = $this->_parent->get('status_unscheduled');
+ $isArchived = $this->_parent->get('is_archived');
+ $mailingStatus = $this->_parent->get('mailing_status');
+
+ if (!$isFormSubmitted && $this->_parent->get('scheduled')) {
+ // mimic default behavior for scheduled screen
+ $isArchived = 0;
+ $mailingStatus = array('Scheduled' => 1, 'Complete' => 1, 'Running' => 1, 'Canceled' => 1);
+ }
+ if (!$isFormSubmitted && $this->_parent->get('archived')) {
+ // mimic default behavior for archived screen
+ $isArchived = 1;
+ }
+ if (!$isFormSubmitted && $this->_parent->get('unscheduled')) {
+ // mimic default behavior for draft screen
+ $isDraft = 1;
+ }
+
+ $statusClauses = array();
+ if ($isDraft) {
+ $statusClauses[] = "civicrm_mailing.scheduled_id IS NULL";
+ }
+ if (!empty($mailingStatus)) {
+ $statusClauses[] = "civicrm_mailing_job.status IN ('" . implode("', '", array_keys($mailingStatus)) . "')";
+ }
+ if (!empty($statusClauses)) {
+ $clauses[] = "(" . implode(' OR ', $statusClauses) . ")";
+ }
+
+ if (isset($isArchived)) {
+ if ($isArchived) {
+ $clauses[] = "civicrm_mailing.is_archived = 1";
+ } else {
+ $clauses[] = "(civicrm_mailing.is_archived IS NULL OR civicrm_mailing.is_archived = 0)";