}
return $results;
}
+
+ /**
+ * Get a reference to the file-search service (if one is available).
+ *
+ * @return CRM_Core_FileSearchInterface|NULL
+ */
+ static function getSearchService() {
+ $fileSearches = array();
+ CRM_Utils_Hook::fileSearches($fileSearches);
+
+ // use the first available search
+ foreach ($fileSearches as $fileSearch) {
+ /** @var $fileSearch CRM_Core_FileSearchInterface */
+ return $fileSearch;
+ }
+ return NULL;
+ }
}
--- /dev/null
+<?php
+interface CRM_Core_FileSearchInterface {
+ const DEFAULT_SEARCH_LIMIT = 20;
+ const DEFAULT_SEARCH_OFFSET = 0;
+
+ /**
+ * @param array $query any of the following:
+ * - text: string, plain text to search for
+ * - parent_table: string - entity to which file is directly attached
+ * - parent_id: int - entity to which file is directly attached
+ * - xparent_table: string - business-entity to which file is attached (directly or indirectly)
+ * - xparent_id: int - business-entity to which file is attached (directly or indirectly)
+ * @param int $limit
+ * @param int $offset
+ * @return array each item has keys:
+ * - file_id: int
+ * - parent_table: string - entity to which file is directly attached
+ * - parent_id: int - entity to which file is directly attached
+ * - xparent_table: string - business-entity to which file is attached (directly or indirectly)
+ * - xparent_id: int - business-entity to which file is attached (directly or indirectly)
+ */
+ function search($query, $limit = self::DEFAULT_SEARCH_LIMIT, $offset = self::DEFAULT_SEARCH_OFFSET);
+}
\ No newline at end of file
'civicrm_crudLink'
);
}
+
+ /**
+ * @param array<CRM_Core_FileSearchInterface> $fileSearches
+ * @return mixed
+ */
+ static function fileSearches(&$fileSearches) {
+ return self::singleton()->invoke(1, $fileSearches,
+ self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject,
+ 'civicrm_fileSearches'
+ );
+ }
}