server/src/app/Repositories/RdfDocumentRepository.php
author ymh <ymh.work@gmail.com>
Tue, 20 Mar 2018 15:02:40 +0100
changeset 573 25f3d28f51b2
parent 532 1190ea937f2d
permissions -rw-r--r--
Added tag 0.0.25 for changeset 190ae1dee68d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
namespace CorpusParole\Repositories;
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
use Config;
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
use Log;
168
17f10b56c079 improve document model and propagate changes. This include the change of document fixtures to better reflect what the api is effectively returning
ymh <ymh.work@gmail.com>
parents: 125
diff changeset
     7
use CorpusParole\Models\DocumentResult;
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
use CorpusParole\Models\Document;
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
     9
use CorpusParole\Libraries\CorpusParoleException;
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    10
use CorpusParole\Libraries\Utils;
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    11
use CorpusParole\Libraries\Sparql\SparqlClient;
329
0a2c2ad49d75 Improvce language visualization. Generalize language node selection, change language query parameters, add resolution of node name (corpus-) to lexvo controler
ymh <ymh.work@gmail.com>
parents: 326
diff changeset
    12
use CorpusParole\Libraries\Filters\CorpusFilterManager;
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    13
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    14
125
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
    15
use CorpusParole\Services\LexvoResolverInterface;
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    16
19
eadaf0b8f02e Bo conception step. back to ember page
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    17
use EasyRdf\Graph;
eadaf0b8f02e Bo conception step. back to ember page
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    18
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    19
use Illuminate\Pagination\LengthAwarePaginator;
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    20
use Illuminate\Pagination\Paginator;
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
    22
use Es;
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
    23
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
/**
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
 * Implement the DocumentRepository using EasyRdf
19
eadaf0b8f02e Bo conception step. back to ember page
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    26
 * TODO: certainly split the transaction management (+add, +delete +transaction ) to an external class -> for this extend the sparql client.
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 */
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
class RdfDocumentRepository implements DocumentRepository {
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    30
    const BASE_DOC_QUERY
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    31
        = "SELECT".
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    32
        "    ?uri".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    33
        "    ?doc".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    34
        "    ?title".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    35
        "    ?issued".
445
b1e5ad6b2a29 Display created date instead of issued
ymh <ymh.work@gmail.com>
parents: 405
diff changeset
    36
        "    ?created".
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    37
        "    ?modified".
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
    38
        "    (group_concat(distinct ?language;separator=\", \") as ?lang) ".
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    39
        "    (group_concat(distinct ?publisher;separator=\", \") as ?publishers) ".
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    40
        "  WHERE {".
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
    41
        "    GRAPH ?uri { ?doc a <http://www.europeana.eu/schemas/edm/ProvidedCHO>.".
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
    42
        "      ?doc <http://purl.org/dc/elements/1.1/title> ?title.".
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
    43
        "      OPTIONAL {?doc <http://purl.org/dc/elements/1.1/language> ?language.} ".
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
    44
        "      OPTIONAL {?doc <http://purl.org/dc/terms/issued> ?issued.} ".
445
b1e5ad6b2a29 Display created date instead of issued
ymh <ymh.work@gmail.com>
parents: 405
diff changeset
    45
        "      OPTIONAL {?doc <http://purl.org/dc/terms/created> ?created.} ".
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
    46
        "      OPTIONAL {?doc <http://purl.org/dc/terms/modified> ?modified.} ".
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
    47
        "      OPTIONAL {?doc <http://purl.org/dc/elements/1.1/publisher> ?publisher.}".
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
    48
        "    }. ".
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
    49
        "    %s".
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    50
        "  } ".
445
b1e5ad6b2a29 Display created date instead of issued
ymh <ymh.work@gmail.com>
parents: 405
diff changeset
    51
        "  GROUP BY ?uri ?doc ?title ?issued ?created ?modified ";
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    52
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    53
    const ADDITIONAL_DOC_QUERIES = [
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    54
        "SELECT".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    55
        "    ?uri".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    56
        "    ?doc".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    57
        "    (sample(distinct ?ext) as ?extent) ".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    58
        "WHERE {".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    59
        "    GRAPH ?uri {".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    60
        "        ?s a <http://www.europeana.eu/schemas/edm/WebResource>. ".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    61
        "        ?uri <http://www.europeana.eu/schemas/edm/isShownBy> ?s. ".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    62
        "        ?uri <http://www.europeana.eu/schemas/edm/aggregatedCHO> ?doc. ".
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    63
        "        OPTIONAL {?s <http://purl.org/dc/terms/extent> ?ext.}".
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    64
        "    }. ".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    65
        "    %s".
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    66
        "} ".
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    67
        "GROUP BY ?uri ?doc",
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    68
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    69
        "SELECT".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    70
        "    ?uri".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    71
        "    ?doc".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    72
        "    (sample(distinct str(?s)) as ?transcript_url) ".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    73
        "WHERE {".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    74
        "    GRAPH ?uri {".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    75
        "        ?s a <http://www.europeana.eu/schemas/edm/WebResource>. ".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    76
        "        ?uri <http://www.europeana.eu/schemas/edm/aggregatedCHO> ?doc. ".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    77
        "        OPTIONAL {?s <http://purl.org/dc/elements/1.1/format> ?f.} ".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    78
        "    }. ".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    79
        "    FILTER(str(?f) IN ( \"application/xml\", \"application/pdf\" )). ".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    80
        "    %s".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    81
        "} ".
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    82
        "GROUP BY ?uri ?doc"
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    83
    ];
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    84
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    private $sparqlClient;
125
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
    86
    private $lexvoResolver;
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
125
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
    88
    public function __construct(SparqlClient $sparqlClient, LexvoResolverInterface $lexvoResolver) {
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    89
        $this->sparqlClient = $sparqlClient;
125
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
    90
        $this->lexvoResolver = $lexvoResolver;
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    }
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    93
    public function getSparqlClient() {
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    94
        return $this->sparqlClient;
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    95
    }
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
    97
    private function getResGraph($doc) {
276
ef32bf573d9c correct error in test with empty document returned by query
ymh <ymh.work@gmail.com>
parents: 275
diff changeset
    98
506
8a5bb4b48b85 try to solve #0025932 + try to improve indexing process reliability by retrying bnf label resolve queries
ymh <ymh.work@gmail.com>
parents: 502
diff changeset
    99
        if(empty((array)$doc) || !array_key_exists('uri', (array)$doc)) {
276
ef32bf573d9c correct error in test with empty document returned by query
ymh <ymh.work@gmail.com>
parents: 275
diff changeset
   100
            return null;
ef32bf573d9c correct error in test with empty document returned by query
ymh <ymh.work@gmail.com>
parents: 275
diff changeset
   101
        }
ef32bf573d9c correct error in test with empty document returned by query
ymh <ymh.work@gmail.com>
parents: 275
diff changeset
   102
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   103
        $newGraph = new Graph($doc->uri->getUri());
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   104
        $newGraph->add($doc->uri, "rdf:type", $newGraph->resource("http://www.openarchives.org/ore/terms/Aggregation"));
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   105
        $newGraph->add($doc->uri, "http://www.europeana.eu/schemas/edm/aggregatedCHO", $doc->doc);
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   106
        $newGraph->add($doc->doc, "rdf:type", $newGraph->resource("http://www.europeana.eu/schemas/edm/ProvidedCHO"));
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   107
        if(isset($doc->title)) {
19
eadaf0b8f02e Bo conception step. back to ember page
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
   108
            $newGraph->add($doc->doc, "http://purl.org/dc/elements/1.1/title", $doc->title);
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   109
        }
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   110
        if(isset($doc->lang)) {
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   111
            foreach(explode(", ", $doc->lang) as $langStr) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   112
                $langStr = trim($langStr);
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   113
                if(filter_var($langStr, FILTER_VALIDATE_URL)) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   114
                    $newGraph->addResource($doc->doc, "http://purl.org/dc/elements/1.1/language", $langStr);
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   115
                } else {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   116
                    $newGraph->addLiteral($doc->doc, "http://purl.org/dc/elements/1.1/language", $langStr);
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   117
                }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   118
            }
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   119
        }
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   120
        if(isset($doc->issued)) {
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   121
            $newGraph->add($doc->doc, "http://purl.org/dc/terms/issued", $doc->issued);
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   122
        }
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   123
        if(isset($doc->modified)) {
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   124
            $newGraph->add($doc->doc, "http://purl.org/dc/terms/modified", $doc->modified);
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   125
        }
499
b5cff30efa0a add forgotten 'created' field in documents results
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   126
        if(isset($doc->created)) {
b5cff30efa0a add forgotten 'created' field in documents results
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   127
            $newGraph->add($doc->doc, "http://purl.org/dc/terms/created", $doc->created);
b5cff30efa0a add forgotten 'created' field in documents results
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   128
        }
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   129
        if(isset($doc->publishers)) {
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   130
            $newGraph->add($doc->doc, "http://purl.org/dc/elements/1.1/publisher", $doc->publishers);
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   131
        }
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   132
        if(isset($doc->extent)) {
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   133
            $newGraph->add($doc->doc, "http://purl.org/dc/terms/extent", $doc->extent);
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   134
        }
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   135
        if(isset($doc->transcript_url)) {
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   136
            $newGraph->add($doc->doc, config('corpusparole.corpus_ontology_url').'transcript', $doc->transcript_url);
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   137
        }
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   138
        return $newGraph;
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   139
    }
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   140
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   141
    private function queryES($filters=null, $offset=null, $limit=null, $sort=null) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   142
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   143
        if(empty($sort)) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   144
            $sort = ["_doc"];
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   145
        } elseif (is_string($sort)) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   146
            $sort = [$sort];
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   147
        }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   148
        if(is_null($filters)) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   149
            $filters = [];
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   150
        }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   151
378
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 376
diff changeset
   152
        $filterManager = new CorpusFilterManager();
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 376
diff changeset
   153
        $qFilterParts = $filterManager->buildESFilters($filters);
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   154
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   155
        $query = [
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   156
            'index' => config('corpusparole.elasticsearch_index'),
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   157
            'body' => [
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   158
                "size" => empty($limit)?0:$limit,
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   159
                "from" => $offset,
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   160
                "sort" => $sort
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   161
            ]
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   162
        ];
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   163
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   164
        if(count($qFilterParts)>0) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   165
            $query['body']['query'] = ['constant_score' => [
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   166
                'filter' => [
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   167
                    'bool' => [
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   168
                        'must' => $qFilterParts
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   169
                    ]
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   170
                ]
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   171
            ] ];
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   172
        }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   173
378
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 376
diff changeset
   174
        Log::debug("QUERY :");
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 376
diff changeset
   175
        Log::debug(json_encode($query, JSON_PRETTY_PRINT));
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 376
diff changeset
   176
        Log::debug("FILTERS :");
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 376
diff changeset
   177
        Log::debug(json_encode($filters, JSON_PRETTY_PRINT));
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 376
diff changeset
   178
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   179
        $esRes = Es::search($query);
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   180
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   181
        return ['total' => $esRes['hits']['total'], 'documents' => array_map(function($r) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   182
            return $r['_id'];
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   183
        }, $esRes['hits']['hits'])];
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   184
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   185
    }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   186
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   187
    /**
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   188
     * Query docs.
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   189
     * if $filter is empty or null and $sort is '_graph', the documents list is fetched from the triple store, otherwise, They are fetched from ElasticSearch
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   190
     */
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   191
    private function queryDocs($filters=null, $offset=null, $limit=null, $sort=null) {
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   192
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   193
        $resDocs = [];
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   194
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   195
        $limitsClauses = [];
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   196
        $sortClauseStr = "";
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   197
        $limitsClausesStr = "";
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   198
        $filterUris = "";
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   199
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   200
        if(empty($filters) && $sort === "_graph") {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   201
            if(!is_null($offset)) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   202
                array_push($limitsClauses, "OFFSET $offset");
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   203
            }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   204
            if(!is_null($limit)) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   205
                array_push($limitsClauses, "LIMIT $limit");
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   206
            }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   207
            if(!empty($limitsClauses)) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   208
                $limitsClausesStr = "\n" . join(" ", $limitsClauses);
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   209
            }
489
18613f052d56 Documents must be sorted by title, correct bug #0025982
ymh <ymh.work@gmail.com>
parents: 445
diff changeset
   210
            $sortClauseStr = "\n ORDER BY ASC(?title)";
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   211
            $total = $this->getCount();
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   212
        } else {
489
18613f052d56 Documents must be sorted by title, correct bug #0025982
ymh <ymh.work@gmail.com>
parents: 445
diff changeset
   213
            $esRes = $this->queryES($filters, $offset, $limit, ["title.raw" => 'asc']);
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   214
            // WARNING: we count on the fact that php keep keys order
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   215
            $total = intval($esRes['total']);
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   216
            foreach($esRes['documents'] as $esDocId) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   217
                $uri = config('corpusparole.corpus_doc_id_base_uri_prefix').$esDocId;
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   218
                $resDocs[$uri] = null;
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   219
            }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   220
            if(count($resDocs) > 0) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   221
                $filterUris = "FILTER(?uri in (<".join(">, <" , array_keys($resDocs)).">)) ";
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   222
            } else {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   223
                return ['meta' => [ 'total'=> $total ], 'documents' => []];
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   224
            }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   225
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   226
        }
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   227
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   228
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   229
        $sparqlQuery = sprintf(self::BASE_DOC_QUERY.$sortClauseStr.$limitsClausesStr, $filterUris);
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   230
499
b5cff30efa0a add forgotten 'created' field in documents results
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   231
        Log::debug("SPARQL QUERY :");
b5cff30efa0a add forgotten 'created' field in documents results
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   232
        Log::debug($sparqlQuery);
b5cff30efa0a add forgotten 'created' field in documents results
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   233
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   234
        $docs = $this->sparqlClient->query($sparqlQuery);
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   235
        foreach($docs as $doc) {
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   236
            $graph = $this->getResGraph($doc);
276
ef32bf573d9c correct error in test with empty document returned by query
ymh <ymh.work@gmail.com>
parents: 275
diff changeset
   237
            if(is_null($graph)) {
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   238
                Log::debug("NULL GRAPH - odd");
276
ef32bf573d9c correct error in test with empty document returned by query
ymh <ymh.work@gmail.com>
parents: 275
diff changeset
   239
                continue;
ef32bf573d9c correct error in test with empty document returned by query
ymh <ymh.work@gmail.com>
parents: 275
diff changeset
   240
            }
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   241
            $uri = $doc->uri->getUri();
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   242
            $resDocs[$uri] = $graph;
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   243
        }
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   244
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   245
        if(count($resDocs) == 0) {
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   246
            return ['meta' => [ 'total'=> $total ], 'documents' => []];
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   247
        }
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   248
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   249
        if(empty($filterUris)) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   250
            $filterUris = "FILTER(?uri in (<".join(">, <" , array_keys($resDocs)).">)) ";
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   251
        }
275
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   252
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   253
        foreach(self::ADDITIONAL_DOC_QUERIES as $query) {
a4d8618c2f1b add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
   254
            $docs = $this->sparqlClient->query(sprintf($query, $filterUris));
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   255
            foreach($docs as $doc) {
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   256
                $graph = $this->getResGraph($doc);
276
ef32bf573d9c correct error in test with empty document returned by query
ymh <ymh.work@gmail.com>
parents: 275
diff changeset
   257
                if(is_null($graph)) {
ef32bf573d9c correct error in test with empty document returned by query
ymh <ymh.work@gmail.com>
parents: 275
diff changeset
   258
                    continue;
ef32bf573d9c correct error in test with empty document returned by query
ymh <ymh.work@gmail.com>
parents: 275
diff changeset
   259
                }
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   260
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   261
                $uri = $doc->uri->getUri();
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   262
                if(array_key_exists($uri, $resDocs)) {
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   263
                    $resDocs[$uri] = Utils::mergeGraphs($resDocs[$uri], $graph);
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   264
                } else {
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   265
                    $resDocs[$uri] = $graph;
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 169
diff changeset
   266
                }
28
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 22
diff changeset
   267
            }
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
        }
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   270
        $documentsResults = array_map(function($g) { return new DocumentResult($g->getUri(), $g); }, array_values($resDocs));
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   271
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   272
        return ['meta' => [ 'total'=> $total ], 'documents' => $documentsResults];
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
    }
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   275
    public function all() {
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   276
        return $this->queryDocs(null, null, null, "_graph")['documents'];
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   277
    }
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   278
306
3fccf43160a7 Some more changes linked to the change of api organization + some jshint error cleaning
ymh <ymh.work@gmail.com>
parents: 277
diff changeset
   279
    public function get($id, $short=false) {
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
122
b37fde30dd4a correct problem of identifier
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   281
        if(strpos($id, config('corpusparole.corpus_id_scheme')) === 0) {
b37fde30dd4a correct problem of identifier
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   282
            $id = substr($id, strlen(config('corpusparole.corpus_id_scheme')));
b37fde30dd4a correct problem of identifier
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   283
        }
19
eadaf0b8f02e Bo conception step. back to ember page
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
   284
        $docUri = Config::get('corpusparole.corpus_doc_id_base_uri').$id;
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
        // We want the CBD (Concise Bounded Description, cf. http://www.w3.org/Submission/CBD/)
405
f239c8c5bb94 migrate to rdf4j (2.1.1) from sesame (4.1.1)
ymh <ymh.work@gmail.com>
parents: 378
diff changeset
   287
        // WARNING: This seems to work in rdf4j for our dataset.
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
        $doc = $this->sparqlClient->query(
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   289
            "CONSTRUCT { ?s ?p ?o } WHERE { GRAPH <$docUri> { ?s ?p ?o } }"
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
        );
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   291
        //TODO: return null if not found
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   292
        if($doc->isEmpty()) {
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   293
            return null;
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   294
        }
169
8fddc113095e Correct proble on geo info merging + add geo resource
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
   295
        //print($doc->dump());
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
28
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 22
diff changeset
   297
        // clone the graph to force the URI
168
17f10b56c079 improve document model and propagate changes. This include the change of document fixtures to better reflect what the api is effectively returning
ymh <ymh.work@gmail.com>
parents: 125
diff changeset
   298
        $DocumentKlass = $short?DocumentResult::class:Document::class;
17f10b56c079 improve document model and propagate changes. This include the change of document fixtures to better reflect what the api is effectively returning
ymh <ymh.work@gmail.com>
parents: 125
diff changeset
   299
        return new $DocumentKlass($docUri, new Graph($docUri, $doc->toRdfPhp()));
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
    }
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   303
    /**
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   304
     * save document.
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   305
     * @return boolean true if a transaction was started, false otherwise
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   306
     * @throws CorpusParoleException if one of the operation could not be performed
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   307
     */
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   308
    public function save(Document $doc) {
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   309
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   310
        $transactionStarted = $this->sparqlClient->startTransaction();
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   311
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   312
        try {
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   313
            foreach($doc->getDeltaList() as $delta) {
277
bd4bc1db4f40 add blank node save and geoinfo to back model
ymh <ymh.work@gmail.com>
parents: 276
diff changeset
   314
                $this->sparqlClient->deleteWhere($delta->getDeleteWhere(), $delta->getUri());
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   315
                $this->sparqlClient->delete($delta->getDeletedGraph());
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   316
                $this->sparqlClient->add($delta->getAddedGraph());
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   317
            }
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   318
            if($transactionStarted) {
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   319
                $transactionStarted = false;
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   320
                return $this->sparqlClient->commit();
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   321
            }
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   322
            else  {
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   323
                return false;
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   324
            }
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   325
        }
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   326
        catch(CorpusParoleException $e) {
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   327
            if($transactionStarted) {
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   328
                $this->sparqlClient->rollback();
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   329
            }
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   330
            throw $e;
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   331
        }
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   332
    }
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   333
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   334
    public function getCount($filters=null) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   335
        $count = 0;
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   336
        if(empty($filters)) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   337
            $res = $this->sparqlClient->query("SELECT (COUNT (DISTINCT ?g) as ?count) WHERE { GRAPH ?g { ?s a <http://www.europeana.eu/schemas/edm/ProvidedCHO> } }");
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   338
            assert(!is_null($res) && count($res)==1);
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   339
            $count = intval($res[0]->count->getValue());
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   340
        } else {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   341
            $esRes = $this->queryES($filters, 0, 0);
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   342
            $count = intval($esRes['hits']['total']);
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   343
        }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   344
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   345
        return $count;
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   346
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   347
    }
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   348
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   349
    //SELECT ?g WHERE { GRAPH ?g { ?s ?p ?o } }
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   350
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   351
    /**
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   352
     * Paginate all document as a paginator.
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   353
     *
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   354
     * @param  int  $perPage
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   355
     * @param  string  $pageName
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   356
     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   357
     */
22
a50cbd7d702f small change in pagination and add missing .env template
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   358
    public function paginateAll($perPage = 15, $pageName = 'page', $page = null)
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   359
    {
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   360
        return $this->paginate(null, $perPage, $pageName, null);
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   361
    }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   362
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   363
    /**
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   364
     * Paginate filtered document as a paginator.
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   365
     *
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   366
     * @param  array $filters
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   367
     * @param  int  $perPage
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   368
     * @param  string  $pageName
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   369
     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   370
     */
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   371
    public function paginate($filters = null, $perPage = 15, $pageName = 'page', $page = null, $sort=null) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   372
19
eadaf0b8f02e Bo conception step. back to ember page
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
   373
        assert(is_numeric($perPage));
eadaf0b8f02e Bo conception step. back to ember page
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
   374
22
a50cbd7d702f small change in pagination and add missing .env template
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   375
        if(is_null($page)) {
a50cbd7d702f small change in pagination and add missing .env template
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   376
            $page = Paginator::resolveCurrentPage($pageName);
a50cbd7d702f small change in pagination and add missing .env template
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
   377
        }
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   378
20
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   379
        assert(is_null($page) || is_numeric($page));
19
eadaf0b8f02e Bo conception step. back to ember page
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
   380
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   381
        $offset = max(0,($page - 1) * $perPage);
20
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   382
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   383
        $results = $this->queryDocs($filters, $offset, $perPage, $sort);
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   384
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   385
        return new LengthAwarePaginator($results['documents'], $results['meta']['total'], $perPage, $page, [
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   386
            'path' => Paginator::resolveCurrentPath(),
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   387
            'pageName' => $pageName,
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   388
        ]);
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   389
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   390
    }
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   391
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   392
125
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   393
    /**
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   394
     * Resolve lexvo id for all documents in the list
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   395
     * this allow to optimise the call of lexvo repository
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   396
     * @param $docList Array: a list (Array) of document to resolve
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   397
     */
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   398
    public function resolveLexvo(Array $docList) {
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   399
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   400
        $languageIds = [];
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   401
        #get the list pf language needing resolving
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   402
        foreach ($docList as $doc) {
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   403
            if(!empty($doc->getLanguagesValue()) && is_null($doc->getLanguagesResolved())) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   404
                foreach($doc->getLanguagesValue() as $lang) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   405
                    $languageIds[$lang]=true;
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   406
                }
125
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   407
            }
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   408
        }
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   409
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   410
        # call LexvoResolver
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   411
        $langNames = $this->lexvoResolver->getNames(array_keys($languageIds));
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   412
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   413
        foreach ($docList as $doc) {
326
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   414
            if(!empty($doc->getLanguagesValue()) && is_null($doc->getLanguagesResolved())) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   415
                $langResolved = [];
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   416
                foreach($doc->getLanguagesValue() as $lang) {
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   417
                    $langResolved[] = $langNames[$lang];
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   418
                }
226d5b17a119 - First implementation of filter for languages.
ymh <ymh.work@gmail.com>
parents: 306
diff changeset
   419
                $doc->setLanguageResolved($langResolved);
125
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   420
            }
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   421
        }
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   422
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   423
        return $docList;
e550b10fe3ca add language resolver on api data
ymh <ymh.work@gmail.com>
parents: 122
diff changeset
   424
    }
502
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   425
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   426
    /**
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   427
     * Add country info for document.
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   428
     * This modify the document
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   429
     *
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   430
     * @param $doc the document instance
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   431
     * @return nothing
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   432
     */
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   433
    public function addCountryInfo($doc) {
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   434
        $params = [
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   435
            'index' => config('corpusparole.elasticsearch_index'),
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   436
            'type' => 'document',
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   437
            'id' => $doc->getId()
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   438
        ];
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   439
        $esRes = Es::get($params);
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   440
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   441
        if(!empty($esRes) && $esRes['found']) {
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   442
            $source = $esRes["_source"];
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   443
            if(array_key_exists('geonames_country', $source)) {
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   444
                $doc->setCountryCode($source['geonames_country']);
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   445
            }
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   446
        } else {
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   447
            Log::error("RdfDocumentRepository::addCountryInfo : Document ".$doc->getId()." not found in index.");
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   448
        }
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   449
    }
74fba571487e Complete the notice display. add various fields to document to correctly display the notice. Correct bug #0025746
ymh <ymh.work@gmail.com>
parents: 499
diff changeset
   450
2
00e2916104fe Migrate to php 5.6 + Laravel 5.1 + add phpunit test
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
}