Skip to content

Commit

Permalink
more refactoring related to #393
Browse files Browse the repository at this point in the history
  • Loading branch information
henriyli committed Jan 5, 2016
1 parent c203974 commit b18559a
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 31 deletions.
7 changes: 2 additions & 5 deletions controller/RestController.php
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,6 @@ public function search($request)
$lang = $request->getQueryParam('lang'); # optional
$labellang = $request->getQueryParam('labellang'); # optional

$fields = $request->getQueryParam('fields') ? explode(' ', $request->getQueryParam('fields')) : null;
$unique = $request->getQueryParamBoolean('unique', false);

$parameters = new ConceptSearchParameters($request, $this->model->getConfig(), true);

$vocabs = $request->getQueryParam('vocab'); # optional
Expand All @@ -179,7 +176,7 @@ public function search($request)
}
$parameters->setVocabularies($vocabObjects);

$results = $this->model->searchConcepts(true, $fields, $unique, $parameters);
$results = $this->model->searchConcepts($parameters);
// before serializing to JSON, get rid of the Vocabulary object that came with each resource
foreach ($results as &$res) {
unset($res['voc']);
Expand Down Expand Up @@ -423,7 +420,7 @@ public function lookup($request)

$parameters = new ConceptSearchParameters($request, $this->model->getConfig(), true);

$results = $this->model->searchConcepts(null, null, null, $parameters);
$results = $this->model->searchConcepts($parameters);

$hits = array();
// case 1: exact match on preferred label
Expand Down
29 changes: 29 additions & 0 deletions model/ConceptSearchParameters.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,16 @@ class ConceptSearchParameters
private $request;
private $vocabs;
private $rest;
private $hidden;
private $unique;

public function __construct($request, $config, $rest = false)
{
$this->request = $request;
$this->config = $config;
$this->rest = $rest;
$this->hidden = true;
$this->unique = $request->getQueryParamBoolean('unique', false);
}

public function getLang()
Expand Down Expand Up @@ -121,4 +125,29 @@ public function getSearchLimit()
{
return $this->config->getDefaultSearchLimit();
}

public function getUnique() {
return $this->unique;
}

public function setUnique($unique) {
$this->unique = $unique;
}

public function getAdditionalFields() {
return $this->request->getQueryParam('fields') ? explode(' ', $request->getQueryParam('fields')) : null;
}

public function getHidden() {
return $this->hidden;
}

public function setHidden($hidden) {
$this->hidden = $hidden;
}

public function setAdditionalFields($fields) {
$this->fields = $fields;
}

}
19 changes: 4 additions & 15 deletions model/Model.php
Original file line number Diff line number Diff line change
Expand Up @@ -215,21 +215,9 @@ public function getRDF($vocid, $uri, $format)
/**
* Makes a SPARQL-query to the endpoint that retrieves concept
* references as it's search results.
* @param string $term the term that is looked for eg. 'cat'.
* @param mixed $vocids vocabulary id eg. 'yso', array of such ids for multi-vocabulary search, or null for global search.
* @param string $lang language code to show labels in, eg. 'fi' for Finnish.
* @param string $search_lang language code used for matching, eg. 'fi' for Finnish, null for any language
* @param string $type limit search to concepts of the given type
* @param string $parent limit search to concepts which have the given concept as parent in the transitive broader hierarchy
* @param string $group limit search to concepts which are in the given group
* @param int $offset optional parameter for search offset.
* @param int $limit optional paramater for maximum amount of results.
* @param boolean $hidden include matches on hidden labels (default: true).
* @param array $fields extra fields to include in the result (array of strings). (default: null = none)
* @param boolean $unique restrict results to unique concepts (default: false)
* @return array search results
*/
public function searchConcepts($hidden = true, $fields = null, $unique = false, $params)
public function searchConcepts($params)
{
// don't even try to search for empty prefix
if ($params->getSearchTerm() === "" || !preg_match('/[^*]/', $params->getSearchTerm())) {
Expand All @@ -247,7 +235,7 @@ public function searchConcepts($hidden = true, $fields = null, $unique = false,
$sparql = $this->getDefaultSparql();
}

$results = $sparql->queryConcepts($vocabs, $hidden, $fields, $unique, $params);
$results = $sparql->queryConcepts($vocabs, $params->getHidden(), $params->getAdditionalFields(), $params->getUnique(), $params);
$ret = array();

foreach ($results as $hit) {
Expand Down Expand Up @@ -295,7 +283,8 @@ public function searchConcepts($hidden = true, $fields = null, $unique = false,
*/
public function searchConceptsAndInfo($params)
{
$allhits = $this->searchConcepts(true, null, true, $params);
$params->setUnique(true);
$allhits = $this->searchConcepts($params);
$hits = array_slice($allhits, $params->getOffset(), $params->getSearchLimit());

$uris = array();
Expand Down
24 changes: 13 additions & 11 deletions tests/ModelTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ public function testGetSparqlImplementation() {
*/
public function testSearchWithEmptyTerm() {
$this->params->method('getSearchTerm')->will($this->returnValue(''));
$result = $this->model->searchConcepts(null, null, null, $this->params);
$result = $this->model->searchConcepts($this->params);
$this->assertEquals(array(), $result);
}

Expand All @@ -145,7 +145,7 @@ public function testSearchWithEmptyTerm() {
*/
public function testSearchWithOnlyWildcard() {
$this->params->method('getSearchTerm')->will($this->returnValue('*'));
$result = $this->model->searchConcepts(null, null, null, $this->params);
$result = $this->model->searchConcepts($this->params);
$this->assertEquals(array(), $result);
}

Expand All @@ -154,7 +154,7 @@ public function testSearchWithOnlyWildcard() {
*/
public function testSearchWithOnlyMultipleWildcards() {
$this->params->method('getSearchTerm')->will($this->returnValue('**'));
$result = $this->model->searchConcepts(null, null, null, $this->params);
$result = $this->model->searchConcepts($this->params);
$this->assertEquals(array(), $result);
$this->params->method('getSearchTerm')->will($this->returnValue('******'));
$this->assertEquals(array(), $result);
Expand Down Expand Up @@ -183,7 +183,7 @@ public function testSearchConceptsWithOneVocabCaseInsensitivity() {
$this->params->method('getSearchTerm')->will($this->returnValue('bass'));
$this->params->method('getSearchLang')->will($this->returnValue('en'));
$this->params->method('getLang')->will($this->returnValue('en'));
$result = $this->model->searchConcepts(null, null, null, $this->params);
$result = $this->model->searchConcepts($this->params);
$this->assertEquals('http://www.skosmos.skos/test/ta116', $result[0]['uri']);
$this->assertEquals('Bass', $result[0]['prefLabel']);
}
Expand All @@ -195,7 +195,7 @@ public function testSearchConceptsWithOneVocabSearchLangOtherThanLabellang() {
$this->params->method('getSearchTerm')->will($this->returnValue('karppi'));
$this->params->method('getSearchLang')->will($this->returnValue('fi'));
$this->params->method('getLang')->will($this->returnValue('en'));
$result = $this->model->searchConcepts(null, null, null, $this->params);
$result = $this->model->searchConcepts($this->params);
$this->assertEquals('http://www.skosmos.skos/test/ta112', $result[0]['uri']);
$this->assertEquals('Carp', $result[0]['prefLabel']);
}
Expand All @@ -205,7 +205,7 @@ public function testSearchConceptsWithOneVocabSearchLangOtherThanLabellang() {
*/
public function testSearchConceptsWithAllVocabsCaseInsensitivity() {
$this->params->method('getSearchTerm')->will($this->returnValue('bass'));
$result = $this->model->searchConcepts(null, null, null, $this->params);
$result = $this->model->searchConcepts($this->params);
$this->assertEquals('http://www.skosmos.skos/test/ta116', $result[0]['uri']);
$this->assertEquals('Bass', $result[0]['prefLabel']);
}
Expand All @@ -216,7 +216,7 @@ public function testSearchConceptsWithAllVocabsCaseInsensitivity() {
public function testSearchConceptsWithMultipleVocabsCaseInsensitivity() {
$this->params->method('getSearchTerm')->will($this->returnValue('bass'));
$this->params->method('getVocabIds')->will($this->returnValue(array('test', 'testdiff')));
$result = $this->model->searchConcepts(null,null, null, $this->params);
$result = $this->model->searchConcepts($this->params);
$this->assertEquals('http://www.skosmos.skos/test/ta116', $result[0]['uri']);
$this->assertEquals('Bass', $result[0]['prefLabel']);
}
Expand All @@ -228,7 +228,8 @@ public function testSearchConceptsWithMultipleBroaders() {
$this->params->method('getSearchTerm')->will($this->returnValue('multiple broaders'));
$this->params->method('getSearchLang')->will($this->returnValue('en'));
$this->params->method('getLang')->will($this->returnValue('en'));
$result = $this->model->searchConcepts(null, array('broader'), null, $this->params);
$this->params->method('getAdditionalFields')->will($this->returnValue(array('broader')));
$result = $this->model->searchConcepts($this->params);
$this->assertEquals('http://www.skosmos.skos/test/ta123', $result[0]['uri']);
$this->assertEquals('multiple broaders', $result[0]['prefLabel']);
$this->assertCount(2, $result[0]['broader']); // two broader concepts
Expand All @@ -246,10 +247,11 @@ public function testSearchConceptsUnique() {
$params->method('getSearchTerm')->will($this->returnValue('*identical*'));
$params->method('getVocabIds')->will($this->returnValue('duplicates'));
$params->method('getVocabs')->will($this->returnValue(array($this->model->getVocabulary('duplicates'))));
$result = $this->model->searchConcepts(null,null,true, $params);
$this->assertCount(2, $result);
$result = $this->model->searchConcepts(null,null,false, $params);
$result = $this->model->searchConcepts($params);
$this->assertCount(3, $result);
$params->method('getUnique')->will($this->returnValue(true));
$result = $this->model->searchConcepts($params);
$this->assertCount(2, $result);
}

/**
Expand Down

0 comments on commit b18559a

Please sign in to comment.