From f6df2c32a02a1592606b3146a63f9e30a306943d Mon Sep 17 00:00:00 2001 From: Deepak Srivastava Date: Wed, 18 Sep 2013 19:44:50 +0530 Subject: [PATCH] CRM-13382 --- CRM/Mailing/Form/Search.php | 33 +++++++---- CRM/Mailing/Page/Browse.php | 30 +--------- CRM/Mailing/Selector/Browse.php | 80 +++++++++------------------ CRM/Mailing/xml/Menu/Mailing.xml | 6 +- templates/CRM/Mailing/Form/Search.tpl | 5 +- 5 files changed, 56 insertions(+), 98 deletions(-) diff --git a/CRM/Mailing/Form/Search.php b/CRM/Mailing/Form/Search.php index 4a812219f4..39a0a3b0e5 100644 --- a/CRM/Mailing/Form/Search.php +++ b/CRM/Mailing/Form/Search.php @@ -54,14 +54,13 @@ class CRM_Mailing_Form_Search extends CRM_Core_Form { CRM_Campaign_BAO_Campaign::addCampaignInComponentSearch($this); - if (!$parent->get('unscheduled')) { - $statusVals = array('Scheduled', 'Complete', 'Running', 'Canceled'); - $parent->set('allStatuses', $statusVals); - foreach ($statusVals as $status) { - $this->addElement('checkbox', "mailing_status[$status]", NULL, $status); - } - $this->addElement('checkbox', 'all_status', NULL, 'All Statuses'); + $statusVals = array('Scheduled', 'Complete', 'Running', 'Canceled'); + foreach ($statusVals as $status) { + $this->addElement('checkbox', "mailing_status[$status]", NULL, $status); } + $this->addElement('checkbox', 'status_unscheduled', NULL, 'Draft / Unscheduled'); + $this->addYesNo('is_archived', ts('Mailing is Archived')); + if ($parent->_sms) { $this->addElement('hidden', 'sms', $parent->_sms); } @@ -79,9 +78,20 @@ class CRM_Mailing_Form_Search extends CRM_Core_Form { $defaults = array(); $parent = $this->controller->getParent(); - $statusVals = array('Scheduled', 'Complete', 'Running', 'Canceled'); - foreach ($statusVals as $status) { - $defaults['mailing_status'][$status] = 1; + if ($parent->get('unscheduled')) { + $defaults['status_unscheduled'] = 1; + } + + if ($parent->get('scheduled')) { + $statusVals = array('Scheduled', 'Complete', 'Running', 'Canceled'); + foreach ($statusVals as $status) { + $defaults['mailing_status'][$status] = 1; + } + $defaults['is_archived'] = 0; + } + + if ($parent->get('archived')) { + $defaults['is_archived'] = 1; } if ($parent->_sms) { @@ -97,7 +107,8 @@ class CRM_Mailing_Form_Search extends CRM_Core_Form { $parent = $this->controller->getParent(); if (!empty($params)) { - $fields = array('mailing_name', 'mailing_from', 'mailing_to', 'sort_name', 'campaign_id', 'mailing_status', 'sms', 'all_status'); + $fields = array('mailing_name', 'mailing_from', 'mailing_to', 'sort_name', + 'campaign_id', 'mailing_status', 'sms', 'status_unscheduled', 'is_archived'); foreach ($fields as $field) { if (isset($params[$field]) && !CRM_Utils_System::isNull($params[$field]) diff --git a/CRM/Mailing/Page/Browse.php b/CRM/Mailing/Page/Browse.php index 244c8d0711..b32cad685c 100644 --- a/CRM/Mailing/Page/Browse.php +++ b/CRM/Mailing/Page/Browse.php @@ -255,43 +255,17 @@ class CRM_Mailing_Page_Browse extends CRM_Core_Page { $urlString .= '/unscheduled'; $urlParams .= '&scheduled=false'; $this->assign('unscheduled', TRUE); - - if ($this->get('sms')) { - CRM_Utils_System::setTitle(ts('Draft and Unscheduled Mass SMS')); - } - else { - CRM_Utils_System::setTitle(ts('Draft and Unscheduled Mailings')); - } } elseif (CRM_Utils_Array::value(3, $newArgs) == 'archived') { $urlString .= '/archived'; $this->assign('archived', TRUE); - - if ($this->get('sms')) { - CRM_Utils_System::setTitle(ts('Archived Mass SMS')); - } - else { - CRM_Utils_System::setTitle(ts('Archived Mailings')); - } } elseif (CRM_Utils_Array::value(3, $newArgs) == 'scheduled') { $urlString .= '/scheduled'; $urlParams .= '&scheduled=true'; - - if ($this->get('sms')) { - CRM_Utils_System::setTitle(ts('Scheduled and Sent Mass SMS')); - } - else { - CRM_Utils_System::setTitle(ts('Scheduled and Sent Mailings')); - } } - else { - if ($this->get('sms')) { - CRM_Utils_System::setTitle(ts('Find Mass SMS')); - } - else { - CRM_Utils_System::setTitle(ts('Find Mailings')); - } + if ($this->get('sms')) { + CRM_Utils_System::setTitle(ts('Find Mass SMS')); } $crmRowCount = CRM_Utils_Request::retrieve('crmRowCount', 'Integer', CRM_Core_DAO::$_nullObject); diff --git a/CRM/Mailing/Selector/Browse.php b/CRM/Mailing/Selector/Browse.php index 458d3f316e..5f9ac3b436 100644 --- a/CRM/Mailing/Selector/Browse.php +++ b/CRM/Mailing/Selector/Browse.php @@ -432,7 +432,6 @@ LEFT JOIN civicrm_contact scheduledContact ON ( $mailing.scheduled_id = schedul function whereClause(&$params, $sortBy = TRUE) { $values = $clauses = array(); - $title = $this->_parent->get('mailing_name'); if ($title) { @@ -445,6 +444,7 @@ 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)) { if ($this->_parent->get('unscheduled')) { @@ -469,77 +469,47 @@ LEFT JOIN civicrm_contact scheduledContact ON ( $mailing.scheduled_id = schedul $params[3] = array($to, 'String'); } - $addtlStatuses = $this->_parent->get('archived') ? ", 'Canceled'" : ''; + $dateClauses = array(); if (!empty($dateClause1)) { - if (!$this->_parent->get('unscheduled')) { - $dateClause1[] = "civicrm_mailing_job.status IN ('Complete', 'Running' $addtlStatuses)"; - $dateClause2[] = "civicrm_mailing_job.status IN ('Scheduled' $addtlStatuses)"; - } - - if (!empty($dateClause1)) { - $dateClause1 = implode(' AND ', $dateClause1); - } - if (!empty($dateClause2)) { - $dateClause2 = implode(' AND ', $dateClause2); - } - - $dateC = NULL; - if (!empty($dateClause1)) { - $dateC = " ({$dateClause1}) "; - } - if (!empty($dateClause2)) { - if ($dateC) { - $dateC .= " OR ({$dateClause2}) "; - } - else { - $dateC = " ({$dateClause2}) "; - } - } - $clauses[] = " ({$dateC}) "; + $dateClauses[] = implode(' AND ', $dateClause1); + } + if (!empty($dateClause2)) { + $dateClauses[] = implode(' AND ', $dateClause2); + } + $dateClauses = implode(' OR ', $dateClauses); + if (!empty($dateClauses)) { + $clauses[] = "({$dateClauses})"; } - if ($this->_parent->get('unscheduled')) { - $clauses[] = "civicrm_mailing_job.status is null"; + if ($this->_parent->get('status_unscheduled')) { + $clauses[] = "civicrm_mailing_job.status IS NULL"; $clauses[] = "civicrm_mailing.scheduled_id IS NULL"; } 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"; } + $mailingStatus = $this->_parent->get('mailing_status'); + // CRM-4290, do not show archived or unscheduled mails // on 'Scheduled and Sent Mailing' page selector - if ($this->_parent->get('scheduled')) { + if (!empty($mailingStatus)) { $clauses[] = "civicrm_mailing.scheduled_id IS NOT NULL"; - $clauses[] = "( civicrm_mailing.is_archived IS NULL OR civicrm_mailing.is_archived = 0 )"; + $clauses[] = "civicrm_mailing.scheduled_id IN ('" . implode("', '", array_keys($mailingStatus)) . "')"; } - if (!$this->_parent->get('unscheduled')) { - - // all status filter implementation - if ($status = $this->_parent->get('mailing_status')) { - $status = array_keys($status); - } - if ($this->_parent->get('all_status')) { - $status = $this->_parent->get('allStatuses'); - } - if ($this->_parent->get('all_status') && $this->_parent->get('scheduled')) { - $status = array('Scheduled', 'Complete', 'Running'); - } - if (!empty($status)) { - $status = implode("','", $status); - $clauses[] = "civicrm_mailing_job.status IN ('$status')"; + $isArchived = $this->_parent->get('is_archived'); + if (isset($isArchived)) { + if ($isArchived) { + // CRM-6446: archived view should also show cancelled mailings + $clauses[] = "(civicrm_mailing.is_archived = 1 OR civicrm_mailing_job.status = 'Canceled')"; + } else { + $clauses[] = "(civicrm_mailing.is_archived IS NULL OR civicrm_mailing.is_archived = 0)"; } - elseif ($this->_parent->get('scheduled')) { - $clauses[] = "civicrm_mailing_job.status IN ('Scheduled', 'Complete', 'Running')"; - } - } - 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')"; } if ($sortBy && diff --git a/CRM/Mailing/xml/Menu/Mailing.xml b/CRM/Mailing/xml/Menu/Mailing.xml index 7b63894b6b..b6808487a6 100644 --- a/CRM/Mailing/xml/Menu/Mailing.xml +++ b/CRM/Mailing/xml/Menu/Mailing.xml @@ -69,7 +69,7 @@ civicrm/mailing/browse/scheduled - Scheduled and Sent Mailings + Find Mailings scheduled=true CRM_Mailing_Page_Browse access CiviMail;approve mailings;create mailings;schedule mailings @@ -78,7 +78,7 @@ civicrm/mailing/browse/unscheduled - Draft and Unscheduled Mailings + Find Mailings scheduled=false CRM_Mailing_Page_Browse access CiviMail;create mailings;schedule mailings @@ -87,7 +87,7 @@ civicrm/mailing/browse/archived - Archived Mailings + Find Mailings CRM_Mailing_Page_Browse access CiviMail;create mailings 1 diff --git a/templates/CRM/Mailing/Form/Search.tpl b/templates/CRM/Mailing/Form/Search.tpl index 550f9d5995..37997208d5 100644 --- a/templates/CRM/Mailing/Form/Search.tpl +++ b/templates/CRM/Mailing/Form/Search.tpl @@ -41,6 +41,9 @@ {$form.sort_name.label}
{$form.sort_name.html|crmAddClass:big} {help id="id-create_sort_name"} +

+ {$form.is_archived.label}
+ {$form.is_archived.html} {if $form.mailing_status}
@@ -51,7 +54,7 @@ {/foreach}
- {$form.all_status.html} + {$form.status_unscheduled.html}

-- 2.25.1