Skip to content
Snippets Groups Projects
Unverified Commit 8b2203a5 authored by Seamus Lee's avatar Seamus Lee Committed by GitHub
Browse files

Merge pull request #17328 from eileenmcnaughton/mailing_seach

Make is_archived work as a url-search parameter
parents 375c4271 f8a9e5cc
No related tags found
No related merge requests found
......@@ -122,7 +122,7 @@ class CRM_Mailing_BAO_Query {
* rather than a static function.
*/
public static function getSearchFieldMetadata() {
$fields = ['mailing_job_start_date'];
$fields = ['mailing_job_start_date', 'is_archived'];
$metadata = civicrm_api3('Mailing', 'getfields', [])['values'];
$metadata = array_merge($metadata, civicrm_api3('MailingJob', 'getfields', [])['values']);
return array_intersect_key($metadata, array_flip($fields));
......
......@@ -29,6 +29,9 @@ class CRM_Mailing_Form_Search extends CRM_Core_Form_Search {
parent::preProcess();
}
/**
* @throws \CiviCRM_API3_Exception
*/
public function buildQuickForm() {
$parent = $this->controller->getParent();
$nameTextLabel = ($parent->_sms) ? ts('SMS Name') : ts('Mailing Name');
......@@ -44,6 +47,8 @@ class CRM_Mailing_Form_Search extends CRM_Core_Form_Search {
CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'sort_name')
);
CRM_Mailing_BAO_Query::buildSearchForm($this);
CRM_Campaign_BAO_Campaign::addCampaignInComponentSearch($this);
// CRM-15434 - Fix mailing search by status in non-English languages
......@@ -52,7 +57,6 @@ class CRM_Mailing_Form_Search extends CRM_Core_Form_Search {
$this->addElement('checkbox', "mailing_status[$statusId]", NULL, $statusName);
}
$this->addElement('checkbox', 'status_unscheduled', NULL, ts('Draft / Unscheduled'));
$this->addYesNo('is_archived', ts('Mailing is Archived'), TRUE);
// Search by language, if multi-lingual
$enabledLanguages = CRM_Core_I18n::languages(TRUE);
......@@ -77,9 +81,11 @@ class CRM_Mailing_Form_Search extends CRM_Core_Form_Search {
/**
* @return array
* @throws \CRM_Core_Exception
*/
public function setDefaultValues() {
$defaults = $statusVals = [];
$entityDefaults = parent::setDefaultValues();
$parent = $this->controller->getParent();
if ($parent->get('unscheduled')) {
......@@ -99,11 +105,15 @@ class CRM_Mailing_Form_Search extends CRM_Core_Form_Search {
if ($parent->_sms) {
$defaults['sms'] = 1;
}
return $defaults;
return array_merge($defaults, $entityDefaults);
}
/**
* @throws \CRM_Core_Exception
*/
public function postProcess() {
$params = $this->controller->exportValues($this->_name);
$this->setFormValues();
$params = $this->_formValues;
if (!empty($params['mailing_relative'])) {
list($params['mailing_low'], $params['mailing_high']) = CRM_Utils_Date::getFromTo($params['mailing_relative'], $params['mailing_low'], $params['mailing_high']);
......@@ -141,4 +151,26 @@ class CRM_Mailing_Form_Search extends CRM_Core_Form_Search {
}
}
/**
* Handle force=1 in the url.
*
* Search field metadata is normally added in buildForm but we are bypassing that in this flow
* (I've always found the flow kinda confusing & perhaps that is the problem but this mitigates)
*
* @throws \CiviCRM_API3_Exception
*/
protected function handleForcedSearch() {
$this->setSearchMetadata();
$this->addContactSearchFields();
}
/**
* Set the metadata for the form.
*
* @throws \CiviCRM_API3_Exception
*/
protected function setSearchMetadata() {
$this->addSearchFieldMetadata(['Mailing' => CRM_Mailing_BAO_Query::getSearchFieldMetadata()]);
}
}
......@@ -64,7 +64,7 @@ class CRM_Mailing_Page_Browse extends CRM_Core_Page {
public function preProcess() {
Civi::resources()->addStyleFile('civicrm', 'css/searchForm.css', 1, 'html-header');
$this->_unscheduled = $this->_archived = $archiveLinks = FALSE;
$this->_unscheduled = $archiveLinks = FALSE;
$this->_mailingId = CRM_Utils_Request::retrieve('mid', 'Positive', $this);
$this->_sms = CRM_Utils_Request::retrieve('sms', 'Positive', $this);
......@@ -119,6 +119,7 @@ class CRM_Mailing_Page_Browse extends CRM_Core_Page {
$newArgs = func_get_args();
// since we want only first function argument
$newArgs = $newArgs[0];
$this->_isArchived = $this->isArchived($newArgs);
if (isset($_GET['runJobs']) || CRM_Utils_Array::value('2', $newArgs) == 'queue') {
$mailerJobSize = Civi::settings()->get('mailerJobSize');
CRM_Mailing_BAO_MailingJob::runJobs_pre($mailerJobSize);
......@@ -140,10 +141,7 @@ class CRM_Mailing_Page_Browse extends CRM_Core_Page {
}
$this->set('unscheduled', $this->_unscheduled);
if (CRM_Utils_Array::value(3, $newArgs) == 'archived') {
$this->_archived = TRUE;
}
$this->set('archived', $this->_archived);
$this->set('archived', $this->isArchived($newArgs));
if (CRM_Utils_Array::value(3, $newArgs) == 'scheduled') {
$this->_scheduled = TRUE;
......@@ -260,7 +258,8 @@ class CRM_Mailing_Page_Browse extends CRM_Core_Page {
$urlParams .= '&scheduled=false';
$this->assign('unscheduled', TRUE);
}
elseif (CRM_Utils_Array::value(3, $newArgs) == 'archived') {
if ($this->isArchived($newArgs)) {
$urlString .= '/archived';
$this->assign('archived', TRUE);
}
......@@ -353,4 +352,17 @@ class CRM_Mailing_Page_Browse extends CRM_Core_Page {
return implode(' AND ', $clauses);
}
/**
* Is the search limited to archived mailings.
*
* @param array $urlArguments
*
* @return bool
*
* @throws \CRM_Core_Exception
*/
protected function isArchived($urlArguments): bool {
return in_array('archived', $urlArguments, TRUE) || CRM_Utils_Request::retrieveValue('is_archived', 'Boolean');
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment