Skip to content
This repository has been archived by the owner on Aug 13, 2019. It is now read-only.

Commit

Permalink
Merge branch 'master' into feature/III-2068
Browse files Browse the repository at this point in the history
  • Loading branch information
bertramakers committed Jun 28, 2017
2 parents b1a5b3f + 2c5289b commit b3b0629
Show file tree
Hide file tree
Showing 10 changed files with 1,200 additions and 230 deletions.
34 changes: 34 additions & 0 deletions src/Offer/RequestParser/CompositeOfferRequestParser.php
@@ -0,0 +1,34 @@
<?php

namespace CultuurNet\UDB3\Search\Http\Offer\RequestParser;

use CultuurNet\UDB3\Search\Offer\OfferQueryBuilderInterface;
use Symfony\Component\HttpFoundation\Request;

class CompositeOfferRequestParser implements OfferRequestParserInterface
{
/**
* @var OfferRequestParserInterface[]
*/
private $parsers = [];

public function __construct()
{
$this->parsers = [
new DocumentLanguageOfferRequestParser(),
];
}

/**
* @param Request $request
* @param OfferQueryBuilderInterface $offerQueryBuilder
* @return OfferQueryBuilderInterface
*/
public function parse(Request $request, OfferQueryBuilderInterface $offerQueryBuilder)
{
foreach ($this->parsers as $parser) {
$offerQueryBuilder = $parser->parse($request, $offerQueryBuilder);
}
return $offerQueryBuilder;
}
}
45 changes: 45 additions & 0 deletions src/Offer/RequestParser/DocumentLanguageOfferRequestParser.php
@@ -0,0 +1,45 @@
<?php

namespace CultuurNet\UDB3\Search\Http\Offer\RequestParser;

use CultuurNet\UDB3\Language;
use CultuurNet\UDB3\Search\Http\Parameters\SymfonyParameterBagAdapter;
use CultuurNet\UDB3\Search\Offer\OfferQueryBuilderInterface;
use Symfony\Component\HttpFoundation\Request;

class DocumentLanguageOfferRequestParser implements OfferRequestParserInterface
{
/**
* @param Request $request
* @param OfferQueryBuilderInterface $offerQueryBuilder
* @return OfferQueryBuilderInterface
*/
public function parse(Request $request, OfferQueryBuilderInterface $offerQueryBuilder)
{
$parameterBagReader = new SymfonyParameterBagAdapter($request->query);

$languageCallback = function ($value) {
return new Language($value);
};

// Add mainLanguage parameter as a filter.
$mainLanguage = $parameterBagReader->getStringFromParameter('mainLanguage', null, $languageCallback);
if ($mainLanguage) {
$offerQueryBuilder = $offerQueryBuilder->withMainLanguageFilter($mainLanguage);
}

// Add languages parameter(s) as filter(s).
$languages = $parameterBagReader->getArrayFromParameter('languages', $languageCallback);
foreach ($languages as $language) {
$offerQueryBuilder = $offerQueryBuilder->withLanguageFilter($language);
}

// Add completedLanguages parameter(s) as filter(s).
$completedLanguages = $parameterBagReader->getArrayFromParameter('completedLanguages', $languageCallback);
foreach ($completedLanguages as $completedLanguage) {
$offerQueryBuilder = $offerQueryBuilder->withCompletedLanguageFilter($completedLanguage);
}

return $offerQueryBuilder;
}
}
16 changes: 16 additions & 0 deletions src/Offer/RequestParser/OfferRequestParserInterface.php
@@ -0,0 +1,16 @@
<?php

namespace CultuurNet\UDB3\Search\Http\Offer\RequestParser;

use CultuurNet\UDB3\Search\Offer\OfferQueryBuilderInterface;
use Symfony\Component\HttpFoundation\Request;

interface OfferRequestParserInterface
{
/**
* @param Request $request
* @param OfferQueryBuilderInterface $offerQueryBuilder
* @return OfferQueryBuilderInterface
*/
public function parse(Request $request, OfferQueryBuilderInterface $offerQueryBuilder);
}

0 comments on commit b3b0629

Please sign in to comment.