addMandatoryAuthentication($controllers); $controllers->match('/', 'controller.client.baskets:getBaskets') ->method('POST|GET') ->bind('get_client_baskets'); $controllers->post('/new/', 'controller.client.baskets:createBasket') ->bind('client_new_basket'); $controllers->post('/delete/', 'controller.client.baskets:deleteBasket') ->bind('client_delete_basket'); $controllers->post('/check/', 'controller.client.baskets:checkBaskets') ->bind('client_basket_check'); $controllers->post('/add-element/', 'controller.client.baskets:addElementToBasket') ->bind('client_basket_add_element'); $controllers->post('/delete-element/', 'controller.client.baskets:deleteBasketElement') ->bind('client_basket_delete_element'); return $controllers; } /** * Deletes a basket element * * @param Application $app * @param Request $request * @return RedirectResponse */ public function deleteBasketElement(Application $app, Request $request) { try { $repository = $app['EM']->getRepository('Phraseanet:BasketElement'); $basketElement = $repository->findUserElement($request->request->get('p0'), $app['authentication']->getUser()); $app['EM']->remove($basketElement); $app['EM']->flush(); } catch (\Exception $e) { } return $app->redirectPath('get_client_baskets', [ 'courChuId' => $request->request->get('courChuId', '') ]); } /** * Deletes a basket * * @param Application $app * @param Request $request * @return RedirectResponse */ public function deleteBasket(Application $app, Request $request) { try { $basket = $app['converter.basket']->convert($request->request->get('courChuId')); $app['acl.basket']->isOwner($basket, $app['authentication']->getUser()); $app['EM']->remove($basket); $app['EM']->flush(); unset($basket); } catch (\Exception $e) { } return $app->redirectPath('get_client_baskets'); } /** * Creates a new basket * * @param Application $app * @param Request $request * @return RedirectResponse */ public function createBasket(Application $app, Request $request) { $basket = null; try { $basket = new Basket(); $basket->setName($request->request->get('p0')); $basket->setUser($app['authentication']->getUser()); $app['EM']->persist($basket); $app['EM']->flush(); } catch (\Exception $e) { } return $app->redirectPath('get_client_baskets', [ 'courChuId' => null !== $basket ? $basket->getId() : '' ]); } /** * Adds an element to a basket * * @param Application $app * @param Request $request * @return RedirectResponse */ public function addElementToBasket(Application $app, Request $request) { $basket = $app['converter.basket']->convert($request->request->get('courChuId')); $app['acl.basket']->isOwner($basket, $app['authentication']->getUser()); try { $record = new \record_adapter($app, $request->request->get('sbas'), $request->request->get('p0')); $basketElement = new BasketElement(); $basketElement->setRecord($record); $basketElement->setBasket($basket); $basket->addElement($basketElement); $app['EM']->persist($basket); $app['EM']->flush(); } catch (\Exception $e) { } return $app->redirectPath('get_client_baskets', [ 'courChuId' => $basket ? $basket->getId() : '' ]); } /** * Fetchs current user baskets * * @param Application $app * @param Request $request * @return Response */ public function getBaskets(Application $app, Request $request) { $selectedBasketId = trim($request->get('courChuId', '')); $baskets = new ArrayCollection($app['EM']->getRepository('Phraseanet:Basket')->findActiveByUser($app['authentication']->getUser())); $selectedBasket = null; if ('' === $selectedBasketId && $baskets->count() > 0) { $selectedBasketId = $baskets->first()->getId(); } if ('' !== $selectedBasketId) { $selectedBasket = $app['converter.basket']->convert($selectedBasketId); $app['acl.basket']->isOwner($selectedBasket, $app['authentication']->getUser()); } $basketCollections = $baskets->partition(function ($key, $basket) { return null !== $basket->getPusher(); }); return $app['twig']->render('client/baskets.html.twig', [ 'total_baskets' => $baskets->count(), 'user_baskets' => $basketCollections[1], 'recept_user_basket' => $basketCollections[0], 'selected_basket' => $selectedBasket, 'selected_basket_elements' => $selectedBasket ? $selectedBasket->getElements() : new ArrayCollection() ]); } /** * Checks Update basket client * * @param Application $app * @param Request $request * @return JsonResponse */ public function checkBaskets(Application $app, Request $request) { $noview = 0; $repository = $app['EM']->getRepository('Phraseanet:Basket'); /* @var $repository Alchemy\Phrasea\Model\Repositories\BasketRepository */ $baskets = $repository->findActiveByUser($app['authentication']->getUser()); foreach ($baskets as $basket) { if (!$basket->getIsRead()) { $noview++; } } return $app->json([ 'success' => true, 'message' => '', 'no_view' => $noview ]); } }