X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FMailing%2FSelector%2FBrowse.php;h=5e9c8fa4cfac1afbac87dcbb3359492997371524;hb=f5bfd80eee6d854274ee6189f32334666ef2eef8;hp=6a61698176e3d7fcf6ca1225aba0c38985bc607b;hpb=9da8dc8cb8dbb7d17ea61adb52b735b1887fa8d7;p=civicrm-core.git diff --git a/CRM/Mailing/Selector/Browse.php b/CRM/Mailing/Selector/Browse.php index 6a61698176..5e9c8fa4cf 100644 --- a/CRM/Mailing/Selector/Browse.php +++ b/CRM/Mailing/Selector/Browse.php @@ -1,7 +1,7 @@ _parent->get('hidden_find_mailings'); $title = $this->_parent->get('mailing_name'); - if ($title) { $clauses[] = 'name LIKE %1'; if (strpos($title, '%') !== FALSE) { @@ -445,59 +446,85 @@ LEFT JOIN civicrm_contact scheduledContact ON ( $mailing.scheduled_id = schedul } } - + $dateClause1 = $dateClause2 = array(); $from = $this->_parent->get('mailing_from'); if (!CRM_Utils_System::isNull($from)) { - $dateClause1[] = 'civicrm_mailing_job.start_date >= %2'; - $dateClause2[] = 'civicrm_mailing_job.scheduled_date >= %2'; - $params[2] = array($from, 'String'); + if ($this->_parent->get('unscheduled')) { + $dateClause1[] = 'civicrm_mailing.created_date >= %2'; + } + else { + $dateClause1[] = 'civicrm_mailing_job.start_date >= %2'; + $dateClause2[] = 'civicrm_mailing_job.scheduled_date >= %2'; + } + $params[2] = array($from, 'String'); } $to = $this->_parent->get('mailing_to'); if (!CRM_Utils_System::isNull($to)) { - $dateClause1[] = 'civicrm_mailing_job.start_date <= %3'; - $dateClause2[] = 'civicrm_mailing_job.scheduled_date <= %3'; + if ($this->_parent->get('unscheduled')) { + $dateClause1[] = ' civicrm_mailing.created_date <= %3 '; + } + else { + $dateClause1[] = 'civicrm_mailing_job.start_date <= %3'; + $dateClause2[] = 'civicrm_mailing_job.scheduled_date <= %3'; + } $params[3] = array($to, 'String'); } + $dateClauses = array(); if (!empty($dateClause1)) { - $dateClause1[] = "civicrm_mailing_job.status IN ('Complete', 'Running')"; - $dateClause2[] = "civicrm_mailing_job.status IN ('Scheduled')"; - $dateClause1 = implode(' AND ', $dateClause1); - $dateClause2 = implode(' AND ', $dateClause2); - $clauses[] = "( ({$dateClause1}) OR ({$dateClause2}) )"; + $dateClauses[] = implode(' AND ', $dateClause1); } - - if ($this->_parent->get('unscheduled')) { - $clauses[] = "civicrm_mailing_job.status is null"; - $clauses[] = "civicrm_mailing.scheduled_id IS NULL"; + if (!empty($dateClause2)) { + $dateClauses[] = implode(' AND ', $dateClause2); } - - if ($this->_parent->get('archived')) { - // CRM-6446: archived view should also show cancelled mailings - $clauses[] = "(civicrm_mailing.is_archived = 1 OR civicrm_mailing_job.status = 'Canceled')"; + $dateClauses = implode(' OR ', $dateClauses); + if (!empty($dateClauses)) { + $clauses[] = "({$dateClauses})"; } if ($this->_parent->get('sms')) { - $clauses[] = "(civicrm_mailing.sms_provider_id IS NOT NULL)"; + $clauses[] = "civicrm_mailing.sms_provider_id IS NOT NULL"; } else { - $clauses[] = "(civicrm_mailing.sms_provider_id IS NULL)"; + $clauses[] = "civicrm_mailing.sms_provider_id IS NULL"; } - // 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)"; } }