Remove url_generator from ResourceResolver s

This commit is contained in:
Benoît Burnichon
2016-01-13 16:56:59 +01:00
parent 7713afeff6
commit a69ac51114
5 changed files with 35 additions and 61 deletions

View File

@@ -378,16 +378,14 @@ class Application extends SilexApplication
$resolvers = $this['alchemy_embed.resource_resolvers']; $resolvers = $this['alchemy_embed.resource_resolvers'];
$resolvers['datafile'] = $resolvers->share(function () { $resolvers['datafile'] = $resolvers->share(function () {
return new DatafilesResolver($this->getApplicationBox(), $this['url_generator']); return new DatafilesResolver($this->getApplicationBox());
}); });
$resolvers['permalinks_permalink'] = $resolvers->share(function () { $resolvers['permalinks_permalink'] = $resolvers->share(function () {
return new PermalinkMediaResolver($this->getApplicationBox(), $this['url_generator']); return new PermalinkMediaResolver($this->getApplicationBox());
}); });
$resolvers['media_accessor'] = $resolvers->share(function () { $resolvers['media_accessor'] = $resolvers->share(function () {
return new MediaAccessorResolver( return new MediaAccessorResolver(
$this->getApplicationBox(), $this->getApplicationBox(), $this['controller.media_accessor']
$this['url_generator'],
$this['controller.media_accessor']
); );
}); });
} }

View File

@@ -11,6 +11,7 @@
namespace Alchemy\Phrasea\Controller; namespace Alchemy\Phrasea\Controller;
use Alchemy\Embed\Media\Media; use Alchemy\Embed\Media\Media;
use Alchemy\Embed\Media\MediaInformation;
use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Application\Helper\ApplicationBoxAware; use Alchemy\Phrasea\Application\Helper\ApplicationBoxAware;
use Alchemy\Phrasea\Authentication\ACLProvider; use Alchemy\Phrasea\Authentication\ACLProvider;
@@ -70,17 +71,28 @@ class PermalinkController extends AbstractDelivery
public function deliverPermaview(Request $request, $sbas_id, $record_id, $subdef) public function deliverPermaview(Request $request, $sbas_id, $record_id, $subdef)
{ {
return $this->doDeliverPermaview($request, $sbas_id, $record_id, $request->query->get('token'), $subdef); return $this->doDeliverPermaview($sbas_id, $record_id, $request->query->get('token'), $subdef);
} }
private function doDeliverPermaview(Request $request, $sbas_id, $record_id, $token, $subdefName) private function doDeliverPermaview($sbas_id, $record_id, $token, $subdefName)
{ {
$databox = $this->findDataboxById($sbas_id); $databox = $this->findDataboxById($sbas_id);
$record = $this->retrieveRecord($databox, $token, $record_id, $subdefName); $record = $this->retrieveRecord($databox, $token, $record_id, $subdefName);
$metaData = $this->mediaService->getMetaData($request, $record, $subdefName);
$subdef = $record->get_subdef($subdefName); $subdef = $record->get_subdef($subdefName);
$information = $this->mediaService->createMediaInformationFromResourceAndRoute(
$subdef,
'permalinks_permalink',
[
'sbas_id' => $sbas_id,
'record_id' => $record_id,
'subdef' => $subdefName,
'label' => $record->get_title(),
'token' => $token,
]
);
$metaData = $this->mediaService->getMetaData($information);
return $this->app['twig']->render('overview.html.twig', [ return $this->app['twig']->render('overview.html.twig', [
'ogMetaData' => $metaData['ogMetaData'], 'ogMetaData' => $metaData['ogMetaData'],
'subdef' => $subdef, 'subdef' => $subdef,
@@ -89,19 +101,13 @@ class PermalinkController extends AbstractDelivery
'view' => 'overview', 'view' => 'overview',
'token' => $token, 'token' => $token,
'record' => $record, 'record' => $record,
'recordUrl' => $this->app->url('permalinks_permalink', [ 'recordUrl' => $information->getUrl(),
'sbas_id' => $sbas_id,
'record_id' => $record_id,
'subdef' => $subdefName,
'label' => $record->get_title(),
'token' => $token,
])
]); ]);
} }
public function deliverPermaviewOldWay(Request $request, $sbas_id, $record_id, $token, $subdef) public function deliverPermaviewOldWay(Request $request, $sbas_id, $record_id, $token, $subdef)
{ {
return $this->doDeliverPermaview($request, $sbas_id, $record_id, $token, $subdef); return $this->doDeliverPermaview($sbas_id, $record_id, $token, $subdef);
} }
public function deliverPermalink(Request $request, $sbas_id, $record_id, $subdef) public function deliverPermalink(Request $request, $sbas_id, $record_id, $subdef)

View File

@@ -12,40 +12,29 @@ namespace Alchemy\Phrasea\Media;
use Alchemy\Embed\Media\MediaInformation; use Alchemy\Embed\Media\MediaInformation;
use Alchemy\Embed\Media\ResourceResolver; use Alchemy\Embed\Media\ResourceResolver;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class DatafilesResolver implements ResourceResolver class DatafilesResolver implements ResourceResolver
{ {
/** @var \appbox */ /** @var \appbox */
private $appbox; private $appbox;
/** @var UrlGeneratorInterface */
private $urlGenerator;
public function __construct(\appbox $appbox, UrlGeneratorInterface $urlGenerator) public function __construct(\appbox $appbox)
{ {
$this->appbox = $appbox; $this->appbox = $appbox;
$this->urlGenerator = $urlGenerator;
} }
public function resolve(Request $request, $routeName, array $routeParameters) public function resolve(Request $request, $routeName, array $routeParameters)
{ {
$parameters = array_replace( $parameters = array_intersect_key($routeParameters, [
$request->query->all(), 'sbas_id' => null,
array_intersect_key($routeParameters, [ 'record_id' => null,
'sbas_id' => null, 'subdef' => null,
'record_id' => null, ]);
'subdef' => null,
])
);
$databox = $this->appbox->get_databox((int) $parameters['sbas_id']); $databox = $this->appbox->get_databox((int) $parameters['sbas_id']);
$record = $databox->get_record((int)$parameters['record_id']); $record = $databox->get_record((int)$parameters['record_id']);
$subdef = $record->get_subdef($parameters['subdef']); $subdef = $record->get_subdef($parameters['subdef']);
$urlGenerator = $this->urlGenerator; return new MediaInformation($subdef, $request, $routeName, $routeParameters);
$url = $urlGenerator->generate($routeName, $parameters, $urlGenerator::ABSOLUTE_URL);
$embedUrl = $urlGenerator->generate('alchemy_embed_view', ['url' => $url], $urlGenerator::ABSOLUTE_URL);
return new MediaInformation($subdef, $url, $embedUrl);
} }
} }

View File

@@ -13,7 +13,6 @@ use Alchemy\Embed\Media\MediaInformation;
use Alchemy\Embed\Media\ResourceResolver; use Alchemy\Embed\Media\ResourceResolver;
use Alchemy\Phrasea\Controller\MediaAccessorController; use Alchemy\Phrasea\Controller\MediaAccessorController;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class MediaAccessorResolver implements ResourceResolver class MediaAccessorResolver implements ResourceResolver
{ {
@@ -21,24 +20,18 @@ class MediaAccessorResolver implements ResourceResolver
private $appbox; private $appbox;
/** @var MediaAccessorController */ /** @var MediaAccessorController */
private $controller; private $controller;
/** @var UrlGeneratorInterface */
private $urlGenerator;
public function __construct(\appbox $appbox, UrlGeneratorInterface $urlGenerator, MediaAccessorController $controller) public function __construct(\appbox $appbox, MediaAccessorController $controller)
{ {
$this->appbox = $appbox; $this->appbox = $appbox;
$this->urlGenerator = $urlGenerator;
$this->controller = $controller; $this->controller = $controller;
} }
public function resolve(Request $request, $routeName, array $routeParameters) public function resolve(Request $request, $routeName, array $routeParameters)
{ {
$parameters = array_replace( $parameters = array_intersect_key($routeParameters, [
$request->query->all(), 'token' => null,
array_intersect_key($routeParameters, [ ]);
'token' => null,
])
);
list ($sbas_id, $record_id, $subdefName) = $this->controller->validateToken($parameters['token']); list ($sbas_id, $record_id, $subdefName) = $this->controller->validateToken($parameters['token']);
@@ -46,10 +39,6 @@ class MediaAccessorResolver implements ResourceResolver
$record = $databox->get_record($record_id); $record = $databox->get_record($record_id);
$subdef = $record->get_subdef($subdefName); $subdef = $record->get_subdef($subdefName);
$urlGenerator = $this->urlGenerator; return new MediaInformation($subdef, $request, $routeName, $routeParameters);
$url = $urlGenerator->generate($routeName, $parameters, $urlGenerator::ABSOLUTE_URL);
$embedUrl = $urlGenerator->generate('alchemy_embed_view', ['url' => $url], $urlGenerator::ABSOLUTE_URL);
return new MediaInformation($subdef, $url, $embedUrl);
} }
} }

View File

@@ -12,19 +12,15 @@ namespace Alchemy\Phrasea\Media;
use Alchemy\Embed\Media\MediaInformation; use Alchemy\Embed\Media\MediaInformation;
use Alchemy\Embed\Media\ResourceResolver; use Alchemy\Embed\Media\ResourceResolver;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class PermalinkMediaResolver implements ResourceResolver class PermalinkMediaResolver implements ResourceResolver
{ {
/** @var \appbox */ /** @var \appbox */
private $appbox; private $appbox;
/** @var UrlGeneratorInterface */
private $urlGenerator;
public function __construct(\appbox $appbox, UrlGeneratorInterface $urlGenerator) public function __construct(\appbox $appbox)
{ {
$this->appbox = $appbox; $this->appbox = $appbox;
$this->urlGenerator = $urlGenerator;
} }
public function resolve(Request $request, $routeName, array $routeParameters) public function resolve(Request $request, $routeName, array $routeParameters)
@@ -43,10 +39,6 @@ class PermalinkMediaResolver implements ResourceResolver
$record = $databox->get_record((int)$parameters['record_id']); $record = $databox->get_record((int)$parameters['record_id']);
$subdef = $record->get_subdef($parameters['subdef']); $subdef = $record->get_subdef($parameters['subdef']);
$urlGenerator = $this->urlGenerator; return new MediaInformation($subdef, $request, $routeName, $routeParameters);
$url = $urlGenerator->generate($routeName, $parameters, $urlGenerator::ABSOLUTE_URL);
$embedUrl = $urlGenerator->generate('alchemy_embed_view', ['url' => $url], $urlGenerator::ABSOLUTE_URL);
return new MediaInformation($subdef, $url, $embedUrl);
} }
} }