--- a/server/src/app/Http/Controllers/Api/DocumentController.php Wed Oct 19 18:05:51 2016 +0200
+++ b/server/src/app/Http/Controllers/Api/DocumentController.php Wed Oct 19 21:38:23 2016 +0200
@@ -36,15 +36,22 @@
if(!empty($languages)) {
$filters['language'] = $languages;
}
+
$location = CorpusFilterManager::prepareLocation($request->input('location', ''));
if(!empty($location)) {
$filters['location'] = $location;
}
+
$themes = CorpusFilterManager::prepareTheme($request->input('theme', []));
if(!empty($themes)) {
$filters['themes'] = $themes;
}
+ $discourses = CorpusFilterManager::prepareDiscourse($request->input('discourse', []));
+ if(!empty($discourses)) {
+ $filters['discourses'] = $discourses;
+ }
+
$sort = $request->input('sort', null);
$paginator = $this->documentRepository->paginate($filters, $perPage, config('corpusparole.pagination_page_param'), null, $sort);
--- a/server/src/app/Libraries/Filters/CorpusFilterManager.php Wed Oct 19 18:05:51 2016 +0200
+++ b/server/src/app/Libraries/Filters/CorpusFilterManager.php Wed Oct 19 21:38:23 2016 +0200
@@ -130,10 +130,39 @@
];
}
return [
- 'query' => [
- 'bool' => [
+ 'bool' => [
'must' => $nestedQueries
- ]
+ ]
+ ];
+ }
+
+ public static function prepareDiscourse($entities) {
+ if(empty($entities)) {
+ return [];
+ }
+ if(is_string($entities)) {
+ $entities = [$entities,];
+ }
+
+ return array_reduce($entities, function($res, $e) {
+ if(preg_match(config('corpusparole.bnf_ark_url_regexp'), $e)) {
+ array_push($res, $e);
+ } elseif(Utils::startsWith($e, config('corpusparole.bnf_ark_id_base'))) {
+ array_push($res, config('corpusparole.bnf_ark_base_url').$e);
+ }
+ return $res;
+ }, []);
+
+ }
+
+ public static function getDiscourseFilterPart($discourses) {
+ $subDiscQueries=array_map(function($d) {
+ return [ 'term' => ['discourse_types' => "$d" ]];
+ }, $discourses);
+
+ return [
+ 'bool' => [
+ 'must' => $subDiscQueries
]
];
}
--- a/server/src/app/Repositories/RdfDocumentRepository.php Wed Oct 19 18:05:51 2016 +0200
+++ b/server/src/app/Repositories/RdfDocumentRepository.php Wed Oct 19 21:38:23 2016 +0200
@@ -168,6 +168,15 @@
}
$qFilterParts[] = CorpusFilterManager::getThemeFilterPart($themes);
}
+ if(array_key_exists('discourses', $filters) && !empty($filters['discourses'])) {
+ $discourses = $filters['discourses'];
+ if(is_string($discourses)) {
+ $discourses = [$discourses,]; // we know it is not empty
+ }
+ $qFilterParts[] = CorpusFilterManager::getDiscourseFilterPart($discourses);
+ }
+
+ Log::debug("queries : ".print_r($qFilterParts, true));
$query = [
'index' => config('corpusparole.elasticsearch_index'),