author | ymh <ymh.work@gmail.com> |
Sun, 02 Oct 2016 11:49:00 +0200 | |
changeset 308 | e032d686d88e |
parent 158 | 366509ae2f37 |
child 321 | aefaad270b9b |
permissions | -rw-r--r-- |
158
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
1 |
<?php |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
2 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
3 |
namespace CorpusParole\Http\Controllers\Api; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
4 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
5 |
// use Illuminate\Http\Request; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
6 |
// use CorpusParole\Http\Requests; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
7 |
use CorpusParole\Http\Controllers\Controller; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
8 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
9 |
use Illuminate\Http\Request; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
10 |
use EasyRdf\Resource; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
11 |
use EasyRdf\Literal; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
12 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
13 |
use CorpusParole\Libraries\Sparql\SparqlClient; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
14 |
use CorpusParole\Services\LexvoResolverInterface; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
15 |
use CorpusParole\Services\BnfResolverInterface; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
16 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
17 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
18 |
class ThemeController extends Controller |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
19 |
{ |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
20 |
private $sparqlClient = null; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
21 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
22 |
public function __construct(SparqlClient $sparqlClient, LexvoResolverInterface $lexvoResolver, BnfResolverInterface $bnfResolver) { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
23 |
$this->sparqlClient = $sparqlClient; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
24 |
$this->lexvoResolver = $lexvoResolver; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
25 |
$this->bnfResolver = $bnfResolver; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
26 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
27 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
28 |
/** |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
29 |
* Display the specified resource. |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
30 |
* |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
31 |
* @return \Illuminate\Http\Response |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
32 |
*/ |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
33 |
public function index(Request $request) |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
34 |
{ |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
35 |
$filter = $request->input('filter', 'bnf'); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
36 |
$resolve = filter_var($request->input('resolve', true), FILTER_VALIDATE_BOOLEAN); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
37 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
38 |
$filterClause = ""; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
39 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
40 |
if($filter === 'bnf') { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
41 |
$filterClause = "FILTER (isIRI(?o) && regex(str(?o), '^".config('corpusparole.bnf_ark_base_url')."')) ."; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
42 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
43 |
elseif($filter === 'uri') { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
44 |
$filterClause = "FILTER isIRI(?o) ."; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
45 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
46 |
elseif($filter === 'all' || $filter === 'none' || $filter === '') { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
47 |
$filterClause = ""; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
48 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
49 |
else { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
50 |
abort(401,"Value for filter parameter must be in 'bnf', 'uri', 'all' or 'none'"); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
51 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
52 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
53 |
$query = preg_replace('/\s+/', ' ', |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
54 |
"select (?o as ?theme) (COUNT(?s) as ?count) where { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
55 |
?s a <http://www.europeana.eu/schemas/edm/ProvidedCHO> . |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
56 |
?s <http://purl.org/dc/elements/1.1/subject> ?o . |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
57 |
$filterClause |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
58 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
59 |
GROUP BY ?o |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
60 |
ORDER BY DESC(?count)"); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
61 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
62 |
$docs = $this->sparqlClient->query($query); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
63 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
64 |
$themes = []; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
65 |
$labels = []; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
66 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
67 |
$bnfUris = []; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
68 |
$lexvoUris = []; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
69 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
70 |
foreach ($docs as $row) { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
71 |
$key = ""; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
72 |
$label = null; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
73 |
if($row->theme instanceof Resource) { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
74 |
$key = $row->theme->getUri(); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
75 |
if($resolve && strpos($key, config('corpusparole.bnf_ark_base_url')) === 0) { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
76 |
array_push($bnfUris, $key); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
77 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
78 |
elseif($resolve && strpos($key, config('corpusparole.lexvo_base_url')) === 0) { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
79 |
array_push($lexvoUris, $key); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
80 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
81 |
$label = null; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
82 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
83 |
elseif($row->theme instanceof Literal) { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
84 |
$key = $row->theme->getValue(); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
85 |
$label = $row->theme->getValue(); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
86 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
87 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
88 |
$themes[$key] = [ |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
89 |
"label" => $label, |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
90 |
"count" => $row->count->getValue() |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
91 |
]; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
92 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
93 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
94 |
if($resolve) { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
95 |
if(count($lexvoUris) > 0) { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
96 |
$labels = $this->lexvoResolver->getNames($lexvoUris); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
97 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
98 |
if(count($bnfUris) > 0) { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
99 |
$labels = array_merge($labels, $this->bnfResolver->getLabels($bnfUris)); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
100 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
101 |
foreach ($themes as $themeKey => $themeDef) { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
102 |
if(array_key_exists($themeKey, $labels)) { |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
103 |
$themeDef['label'] = $labels[$themeKey]; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
104 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
105 |
$themes[$themeKey] = $themeDef; |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
106 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
107 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
108 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
109 |
return response()->json(['themes' => $themes ]); |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
110 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
111 |
} |
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
112 |
|
366509ae2f37
Add controller for themes count + upgrade ember for app-client
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
113 |
} |