* 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));
parent::preProcess();
}
+ /**
+ * @throws \CiviCRM_API3_Exception
+ */
public function buildQuickForm() {
$parent = $this->controller->getParent();
$nameTextLabel = ($parent->_sms) ? ts('SMS Name') : ts('Mailing Name');
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
$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);
/**
* @return array
+ * @throws \CRM_Core_Exception
*/
public function setDefaultValues() {
$defaults = $statusVals = [];
+ $entityDefaults = parent::setDefaultValues();
$parent = $this->controller->getParent();
if ($parent->get('unscheduled')) {
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']);
}
}
+ /**
+ * 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()]);
+ }
+
}
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);
$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);
}
$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;
$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);
}
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');
+ }
+
}