From 199b5b1c461d0fd569d35a50b22c20b64c0eb241 Mon Sep 17 00:00:00 2001 From: Thibaud Fabre Date: Tue, 25 Oct 2016 13:55:34 +0200 Subject: [PATCH] Inject base order controller dependencies --- .../Phrasea/ControllerProvider/Api/V2.php | 11 ++++- .../Phrasea/ControllerProvider/Prod/Order.php | 10 ++++- .../Order/Controller/ApiOrderController.php | 10 ++--- .../Order/Controller/BaseOrderController.php | 43 +++++++++++++++++-- 4 files changed, 62 insertions(+), 12 deletions(-) diff --git a/lib/Alchemy/Phrasea/ControllerProvider/Api/V2.php b/lib/Alchemy/Phrasea/ControllerProvider/Api/V2.php index 53eee150b5..5ba73d2a11 100644 --- a/lib/Alchemy/Phrasea/ControllerProvider/Api/V2.php +++ b/lib/Alchemy/Phrasea/ControllerProvider/Api/V2.php @@ -54,12 +54,21 @@ class V2 extends Api implements ControllerProviderInterface, ServiceProviderInte $app['controller.api.v2.orders'] = $app->share( function (PhraseaApplication $app) { - return (new ApiOrderController($app)) + $controller = new ApiOrderController( + $app, + $app['repo.orders'], + $app['repo.order-elements'], + $app['provider.order_basket'] + ); + + $controller ->setDispatcher($app['dispatcher']) ->setEntityManagerLocator(new LazyLocator($app, 'orm.em')) ->setDelivererLocator(new LazyLocator($app, 'phraseanet.file-serve')) ->setFileSystemLocator(new LazyLocator($app, 'filesystem')) ->setJsonBodyHelper($app['json.body_helper']); + + return $controller; } ); } diff --git a/lib/Alchemy/Phrasea/ControllerProvider/Prod/Order.php b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Order.php index 983bacdbad..53db922c72 100644 --- a/lib/Alchemy/Phrasea/ControllerProvider/Prod/Order.php +++ b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Order.php @@ -12,8 +12,8 @@ namespace Alchemy\Phrasea\ControllerProvider\Prod; use Alchemy\Phrasea\Application as PhraseaApplication; -use Alchemy\Phrasea\Controller\LazyLocator; use Alchemy\Phrasea\ControllerProvider\ControllerProviderTrait; +use Alchemy\Phrasea\Core\LazyLocator; use Alchemy\Phrasea\Order\Controller\ProdOrderController; use Alchemy\Phrasea\Order\OrderBasketProvider; use Alchemy\Phrasea\Order\OrderValidator; @@ -39,7 +39,13 @@ class Order implements ControllerProviderInterface, ServiceProviderInterface }); $app['controller.prod.order'] = $app->share(function (PhraseaApplication $app) { - return (new ProdOrderController($app)) + $controller = new ProdOrderController($app, + $app['repo.orders'], + $app['repo.order-elements'], + $app['provider.order_basket'] + ); + + $controller ->setDispatcher($app['dispatcher']) ->setEntityManagerLocator(new LazyLocator($app, 'orm.em')) ->setUserQueryFactory(new LazyLocator($app, 'phraseanet.user-query')) diff --git a/lib/Alchemy/Phrasea/Order/Controller/ApiOrderController.php b/lib/Alchemy/Phrasea/Order/Controller/ApiOrderController.php index 61c6a2172f..07ead44974 100644 --- a/lib/Alchemy/Phrasea/Order/Controller/ApiOrderController.php +++ b/lib/Alchemy/Phrasea/Order/Controller/ApiOrderController.php @@ -22,6 +22,7 @@ use Alchemy\Phrasea\Http\DeliverDataInterface; use Alchemy\Phrasea\Model\Entities\Basket; use Alchemy\Phrasea\Model\Entities\BasketElement; use Alchemy\Phrasea\Model\Entities\Order; +use Alchemy\Phrasea\Model\Entities\Token; use Alchemy\Phrasea\Order\OrderElementTransformer; use Alchemy\Phrasea\Order\OrderFiller; use Alchemy\Phrasea\Order\OrderTransformer; @@ -88,7 +89,7 @@ class ApiOrderController extends BaseOrderController ]); }; - $builder = $this->app['repo.orders']->createQueryBuilder('o'); + $builder = $this->getOrderRepository()->createQueryBuilder('o'); $builder ->where($builder->expr()->eq('o.user', $this->getAuthenticatedUser()->getId())) ; @@ -138,11 +139,10 @@ class ApiOrderController extends BaseOrderController } /** - * @param Request $request * @param int $orderId * @return Response */ - public function getArchiveAction(Request $request, $orderId) + public function getArchiveAction($orderId) { $order = $this->findOr404($orderId); @@ -166,6 +166,7 @@ class ApiOrderController extends BaseOrderController $exportData = $export->prepare_export($user, $this->getFilesystem(), $subdefs, true, true); $exportData['export_name'] = $exportName; + /** @var Token $token */ $token = $this->app['manipulator.token']->createDownloadToken($user, serialize($exportData)); $lst = []; @@ -180,7 +181,7 @@ class ApiOrderController extends BaseOrderController set_time_limit(0); ignore_user_abort(true); - $file = \set_export::build_zip($this->app, $token, $exportData, $exportName); + $file = \set_export::build_zip($this->app, $token, $exportData, $token->getValue() . '.zip'); return $this->deliverFile($file, $exportName, DeliverDataInterface::DISPOSITION_INLINE, 'application/zip'); } @@ -188,7 +189,6 @@ class ApiOrderController extends BaseOrderController public function acceptElementsAction(Request $request, $orderId) { $elementIds = $this->fetchElementIdsFromRequest($request); - $elements = $this->doAcceptElements($orderId, $elementIds, $this->getAuthenticatedUser()); $resource = new Collection($elements, function (BasketElement $element) { diff --git a/lib/Alchemy/Phrasea/Order/Controller/BaseOrderController.php b/lib/Alchemy/Phrasea/Order/Controller/BaseOrderController.php index f297006ab9..5b2e90d4cb 100644 --- a/lib/Alchemy/Phrasea/Order/Controller/BaseOrderController.php +++ b/lib/Alchemy/Phrasea/Order/Controller/BaseOrderController.php @@ -10,6 +10,7 @@ namespace Alchemy\Phrasea\Order\Controller; +use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Application\Helper\DispatcherAware; use Alchemy\Phrasea\Application\Helper\EntityManagerAware; use Alchemy\Phrasea\Controller\Controller; @@ -22,10 +23,10 @@ use Alchemy\Phrasea\Model\Entities\OrderElement; use Alchemy\Phrasea\Model\Entities\User; use Alchemy\Phrasea\Model\Repositories\OrderElementRepository; use Alchemy\Phrasea\Model\Repositories\OrderRepository; +use Alchemy\Phrasea\Order\OrderBasketProvider; use Alchemy\Phrasea\Order\OrderDelivery; use Alchemy\Phrasea\Order\OrderValidator; use Alchemy\Phrasea\Order\PartialOrder; -use Alchemy\Phrasea\Record\RecordReference; use Alchemy\Phrasea\Record\RecordReferenceCollection; use Assert\Assertion; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; @@ -38,12 +39,46 @@ class BaseOrderController extends Controller use DispatcherAware; use EntityManagerAware; + /** + * @var OrderRepository + */ + private $orderRepository; + + /** + * @var OrderElementRepository + */ + private $orderElementRepository; + + /** + * @var OrderBasketProvider + */ + private $orderBasketProvider; + + /** + * @param Application $app + * @param OrderRepository $orderRepository + * @param OrderElementRepository $orderElementRepository + * @param OrderBasketProvider $orderBasketProvider + */ + public function __construct( + Application $app, + OrderRepository $orderRepository, + OrderElementRepository $orderElementRepository, + OrderBasketProvider $orderBasketProvider + ) { + parent::__construct($app); + + $this->orderRepository = $orderRepository; + $this->orderElementRepository = $orderElementRepository; + $this->orderBasketProvider = $orderBasketProvider; + } + /** * @return OrderRepository */ protected function getOrderRepository() { - return $this->app['repo.orders']; + return $this->orderRepository; } /** @@ -51,7 +86,7 @@ class BaseOrderController extends Controller */ protected function getOrderElementRepository() { - return $this->app['repo.order-elements']; + return $this->orderElementRepository; } /** @@ -116,7 +151,7 @@ class BaseOrderController extends Controller $elements = $this->findRequestedElements($order_id, $elementIds, $acceptor); $order = $this->findOr404($order_id); - $basket = $this->app['provider.order_basket']->provideBasketForOrderAndUser($order, $acceptor); + $basket = $this->orderBasketProvider->provideBasketForOrderAndUser($order, $acceptor); $partialOrder = new PartialOrder($order, $elements);