* @param array $defaults
* (reference ) an assoc array to hold the flattened values.
*
- * @return CRM_Contact_BAO_SavedSearch
+ * @return CRM_Contact_DAO_SavedSearch
*/
- public static function retrieve(&$params, &$defaults) {
+ public static function retrieve($params, &$defaults = []) {
$savedSearch = new CRM_Contact_DAO_SavedSearch();
$savedSearch->copyValues($params);
if ($savedSearch->find(TRUE)) {
}
/**
- * Create a smart group from normalised values.
+ * Create or update SavedSearch record.
*
* @param array $params
*
* @return \CRM_Contact_DAO_SavedSearch
*/
public static function create(&$params) {
- $savedSearch = new CRM_Contact_DAO_SavedSearch();
- $savedSearch->copyValues($params);
- $savedSearch->save();
+ // Auto-create unique name from label if supplied
+ if (empty($params['id']) && empty($params['name']) && !empty($params['label'])) {
+ $name = CRM_Utils_String::munge($params['label']);
+ $existing = Civi\Api4\SavedSearch::get(FALSE)
+ ->addWhere('name', 'LIKE', $name . '%')
+ ->addSelect('name')
+ ->execute()->column('name');
+ $suffix = '';
+ while (in_array($name . $suffix, $existing)) {
+ $suffix = '_' . (1 + str_replace('_', '', $suffix));
+ }
+ $params['name'] = $name . $suffix;
+ }
- return $savedSearch;
+ return self::writeRecord($params);
}
/**
}
}
+ /**
+ * Generate a url to the appropriate search form for a given savedSearch
+ *
+ * @param int $id
+ * Saved search id
+ * @return string
+ */
+ public static function getEditSearchUrl($id) {
+ $savedSearch = self::retrieve(['id' => $id]);
+ // APIv4 search
+ if (!empty($savedSearch->api_entity)) {
+ $groupName = self::getName($id);
+ return CRM_Utils_System::url('civicrm/search', NULL, FALSE, "/load/Group/$groupName");
+ }
+ // Classic search builder
+ if (!empty($savedSearch->mapping_id)) {
+ $path = 'civicrm/contact/search/builder';
+ }
+ // Classic custom search
+ elseif (!empty($savedSearch->search_custom_id)) {
+ $path = 'civicrm/contact/search/custom';
+ }
+ // Classic advanced search
+ else {
+ $path = 'civicrm/contact/search/advanced';
+ }
+ return CRM_Utils_System::url($path, ['reset' => 1, 'ssID' => $id]);
+ }
+
}