$value = CRM_Utils_Array::value(key($value), $value);
}
if (strpos($id, '_date_low') !== FALSE || strpos($id, '_date_high') !== FALSE) {
- $result[$id] = date($dateFormat, strtotime($value));
$entityName = strstr($id, '_date', TRUE);
- $result["{$entityName}_date_relative"] = 0;
+ if (!empty($result['relative_dates']) && array_key_exists($entityName, $result['relative_dates'])) {
+ $result["{$entityName}_date_relative"] = $result['relative_dates'][$entityName];
+ }
+ else {
+ $result[$id] = date($dateFormat, strtotime($value));
+ $result["{$entityName}_date_relative"] = 0;
+ }
}
else {
$result[$id] = $value;
}
}
+ /**
+ * Store relative dates in separate array format
+ *
+ * @param array $queryParams
+ * @param array $formValues
+ */
+ public static function saveRelativeDates(&$queryParams, $formValues) {
+ $relativeDates = array('relative_dates' => array());
+ foreach ($formValues as $id => $value) {
+ if (preg_match('/_date_relative$/', $id) && !empty($value)) {
+ $entityName = strstr($id, '_date', TRUE);
+ $relativeDates['relative_dates'][$entityName] = $value;
+ }
+ }
+ // merge with original queryParams if relative date value(s) found
+ if (count($relativeDates['relative_dates'])) {
+ $queryParams = array_merge($queryParams, $relativeDates);
+ }
+ }
+
}
// Ideally per CRM-17075 we will use entity reference fields heavily in the form layer & convert to the
// sql operator syntax at the query layer.
if (!$isSearchBuilder) {
+ CRM_Contact_BAO_SavedSearch::saveRelativeDates($queryParams, $formValues);
$savedSearch->form_values = serialize($queryParams);
}
else {