diff -r 1f9853178fcd -r 366509ae2f37 server/src/app/Http/Controllers/Api/ThemeController.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/src/app/Http/Controllers/Api/ThemeController.php Sat May 07 10:06:26 2016 +0200 @@ -0,0 +1,113 @@ +sparqlClient = $sparqlClient; + $this->lexvoResolver = $lexvoResolver; + $this->bnfResolver = $bnfResolver; + } + + /** + * Display the specified resource. + * + * @return \Illuminate\Http\Response + */ + public function index(Request $request) + { + $filter = $request->input('filter', 'bnf'); + $resolve = filter_var($request->input('resolve', true), FILTER_VALIDATE_BOOLEAN); + + $filterClause = ""; + + if($filter === 'bnf') { + $filterClause = "FILTER (isIRI(?o) && regex(str(?o), '^".config('corpusparole.bnf_ark_base_url')."')) ."; + } + elseif($filter === 'uri') { + $filterClause = "FILTER isIRI(?o) ."; + } + elseif($filter === 'all' || $filter === 'none' || $filter === '') { + $filterClause = ""; + } + else { + abort(401,"Value for filter parameter must be in 'bnf', 'uri', 'all' or 'none'"); + } + + $query = preg_replace('/\s+/', ' ', + "select (?o as ?theme) (COUNT(?s) as ?count) where { + ?s a . + ?s ?o . + $filterClause + } + GROUP BY ?o + ORDER BY DESC(?count)"); + + $docs = $this->sparqlClient->query($query); + + $themes = []; + $labels = []; + + $bnfUris = []; + $lexvoUris = []; + + foreach ($docs as $row) { + $key = ""; + $label = null; + if($row->theme instanceof Resource) { + $key = $row->theme->getUri(); + if($resolve && strpos($key, config('corpusparole.bnf_ark_base_url')) === 0) { + array_push($bnfUris, $key); + } + elseif($resolve && strpos($key, config('corpusparole.lexvo_base_url')) === 0) { + array_push($lexvoUris, $key); + } + $label = null; + } + elseif($row->theme instanceof Literal) { + $key = $row->theme->getValue(); + $label = $row->theme->getValue(); + } + + $themes[$key] = [ + "label" => $label, + "count" => $row->count->getValue() + ]; + } + + if($resolve) { + if(count($lexvoUris) > 0) { + $labels = $this->lexvoResolver->getNames($lexvoUris); + } + if(count($bnfUris) > 0) { + $labels = array_merge($labels, $this->bnfResolver->getLabels($bnfUris)); + } + foreach ($themes as $themeKey => $themeDef) { + if(array_key_exists($themeKey, $labels)) { + $themeDef['label'] = $labels[$themeKey]; + } + $themes[$themeKey] = $themeDef; + } + } + + return response()->json(['themes' => $themes ]); + + } + +}