diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Basket.php b/lib/Alchemy/Phrasea/Controller/Prod/Basket.php index ab79184f96..d2dc2e5f78 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Basket.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Basket.php @@ -46,76 +46,76 @@ class Basket implements ControllerProviderInterface * */ $controllers->post('/', function(Application $app) - { - $request = $app['request']; + { + $request = $app['request']; - /* @var $request \Symfony\Component\HttpFoundation\Request */ + /* @var $request \Symfony\Component\HttpFoundation\Request */ - $em = $app['Core']->getEntityManager(); + $em = $app['Core']->getEntityManager(); - $user = $app['Core']->getAuthenticatedUser(); + $user = $app['Core']->getAuthenticatedUser(); - $Basket = new \Entities\Basket(); + $Basket = new \Entities\Basket(); - $Basket->setName($request->get('name', '')); - $Basket->setOwner($app['Core']->getAuthenticatedUser()); - $Basket->setDescription($request->get('desc')); + $Basket->setName($request->get('name', '')); + $Basket->setOwner($app['Core']->getAuthenticatedUser()); + $Basket->setDescription($request->get('desc')); - $em->persist($Basket); + $em->persist($Basket); - $n = 0; + $n = 0; - foreach (explode(';', $request->get('lst')) as $sbas_rec) - { - $sbas_rec = explode('_', $sbas_rec); + foreach (explode(';', $request->get('lst')) as $sbas_rec) + { + $sbas_rec = explode('_', $sbas_rec); - if (count($sbas_rec) !== 2) - continue; + if (count($sbas_rec) !== 2) + continue; - $record = new \record_adapter($sbas_rec[0], $sbas_rec[1]); + $record = new \record_adapter($sbas_rec[0], $sbas_rec[1]); - if (!$user->ACL()->has_access_to_base($record->get_base_id()) - && !$user->ACL()->has_hd_grant($record) - && !$user->ACL()->has_preview_grant($record)) - { - continue; - } + if (!$user->ACL()->has_access_to_base($record->get_base_id()) + && !$user->ACL()->has_hd_grant($record) + && !$user->ACL()->has_preview_grant($record)) + { + continue; + } - if ($Basket->hasRecord($record)) - continue; + if ($Basket->hasRecord($record)) + continue; - $basket_element = new \Entities\BasketElement(); - $basket_element->setRecord($record); - $basket_element->setBasket($Basket); + $basket_element = new \Entities\BasketElement(); + $basket_element->setRecord($record); + $basket_element->setBasket($Basket); - $em->persist($basket_element); + $em->persist($basket_element); - $Basket->addBasketElement($basket_element); + $Basket->addBasketElement($basket_element); - $n++; - } + $n++; + } - $em->flush(); + $em->flush(); - if ($request->getRequestFormat() == 'json') - { - $data = array( - 'success' => true - , 'message' => _('Basket created') - , 'basket' => array( - 'id' => $Basket->getId() - ) - ); + if ($request->getRequestFormat() == 'json') + { + $data = array( + 'success' => true + , 'message' => _('Basket created') + , 'basket' => array( + 'id' => $Basket->getId() + ) + ); - $datas = $app['Core']['Serializer']->serialize($data, 'json'); + $datas = $app['Core']['Serializer']->serialize($data, 'json'); - return new Response($datas, 200, array('Content-type' => 'application/json')); - } - else - { - return new RedirectResponse(sprintf('/%d/', $Basket->getId())); - } - }); + return new Response($datas, 200, array('Content-type' => 'application/json')); + } + else + { + return new RedirectResponse(sprintf('/%d/', $Basket->getId())); + } + }); /** * This route is used to delete a basket @@ -124,73 +124,73 @@ class Basket implements ControllerProviderInterface * */ $controllers->post('/{basket_id}/delete/', function(Application $app, Request $request, $basket_id) - { - $em = $app['Core']->getEntityManager(); + { + $em = $app['Core']->getEntityManager(); - $basket = $em->getRepository('\Entities\Basket') - ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); + $basket = $em->getRepository('\Entities\Basket') + ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); - $em->remove($basket); - $em->flush(); + $em->remove($basket); + $em->flush(); - $data = array( - 'success' => true - , 'message' => _('Basket has been deleted') - ); + $data = array( + 'success' => true + , 'message' => _('Basket has been deleted') + ); - if ($request->getRequestFormat() == 'json') - { + if ($request->getRequestFormat() == 'json') + { - $datas = $app['Core']['Serializer']->serialize($data, 'json'); + $datas = $app['Core']['Serializer']->serialize($data, 'json'); - return new Response($datas, 200, array('Content-type' => 'application/json')); - } - else - { - return new RedirectResponse('/'); - } - })->assert('basket_id', '\d+'); + return new Response($datas, 200, array('Content-type' => 'application/json')); + } + else + { + return new RedirectResponse('/'); + } + })->assert('basket_id', '\d+'); /** * Removes a BasketElement */ $controllers->post( - '/{basket_id}/delete/{basket_element_id}/' - , function(Application $app, Request $request, $basket_id, $basket_element_id) - { - /* @var $em \Doctrine\ORM\EntityManager */ - $em = $app['Core']->getEntityManager(); + '/{basket_id}/delete/{basket_element_id}/' + , function(Application $app, Request $request, $basket_id, $basket_element_id) + { + /* @var $em \Doctrine\ORM\EntityManager */ + $em = $app['Core']->getEntityManager(); - $basket = $em->getRepository('\Entities\Basket') - ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); + $basket = $em->getRepository('\Entities\Basket') + ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); - foreach ($basket->getElements() as $basket_element) - { - /* @var $basket_element \Entities\BasketElement */ - if ($basket_element->getId() == $basket_element_id) - { - $em->remove($basket_element); - } - } + foreach ($basket->getElements() as $basket_element) + { + /* @var $basket_element \Entities\BasketElement */ + if ($basket_element->getId() == $basket_element_id) + { + $em->remove($basket_element); + } + } - $em->flush(); + $em->flush(); - $data = array( - 'success' => true - , 'message' => _('Record removed from basket') - ); + $data = array( + 'success' => true + , 'message' => _('Record removed from basket') + ); - if ($request->getRequestFormat() == 'json') - { - $datas = $app['Core']['Serializer']->serialize($data, 'json'); + if ($request->getRequestFormat() == 'json') + { + $datas = $app['Core']['Serializer']->serialize($data, 'json'); - return new Response($datas, 200, array('Content-type' => 'application/json')); - } - else - { - return new RedirectResponse('/'); - } - })->assert('basket_id', '\d+')->assert('basket_element_id', '\d+'); + return new Response($datas, 200, array('Content-type' => 'application/json')); + } + else + { + return new RedirectResponse('/'); + } + })->assert('basket_id', '\d+')->assert('basket_element_id', '\d+'); /** * Update name and description of a basket @@ -200,83 +200,125 @@ class Basket implements ControllerProviderInterface * */ $controllers->post('/{basket_id}/update/', function(Application $app, Request $request, $basket_id) - { - $em = $app['Core']->getEntityManager(); + { + $em = $app['Core']->getEntityManager(); - $basket = $em->getRepository('\Entities\Basket') - ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); + $basket = $em->getRepository('\Entities\Basket') + ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); - $basket->setName($request->get('name', '')); - $basket->setDescription($request->get('description')); + $basket->setName($request->get('name', '')); + $basket->setDescription($request->get('description')); - $em->merge($basket); - $em->flush(); + $em->merge($basket); + $em->flush(); - $data = array( - 'success' => true - , 'message' => _('Basket has been updated') - , 'basket' => array('id' => $basket->getId()) - ); + $data = array( + 'success' => true + , 'message' => _('Basket has been updated') + , 'basket' => array('id' => $basket->getId()) + ); - if ($request->getRequestFormat() == 'json') - { + if ($request->getRequestFormat() == 'json') + { - $datas = $app['Core']['Serializer']->serialize($data, 'json'); + $datas = $app['Core']['Serializer']->serialize($data, 'json'); - return new Response($datas, 200, array('Content-type' => 'application/json')); - } - else - { - return new RedirectResponse('/'); - } - })->assert('basket_id', '\d+'); + return new Response($datas, 200, array('Content-type' => 'application/json')); + } + else + { + return new RedirectResponse('/'); + } + })->assert('basket_id', '\d+'); /** * Get the form to update the Basket attributes (name and description) */ $controllers->get('/{basket_id}/update/', function(Application $app, $basket_id) - { - /* @var $em \Doctrine\ORM\EntityManager */ - $em = $app['Core']->getEntityManager(); + { + /* @var $em \Doctrine\ORM\EntityManager */ + $em = $app['Core']->getEntityManager(); - $basket = $em->getRepository('\Entities\Basket') - ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); + $basket = $em->getRepository('\Entities\Basket') + ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); - /* @var $twig \Twig_Environment */ - $twig = $app['Core']->getTwig(); + /* @var $twig \Twig_Environment */ + $twig = $app['Core']->getTwig(); - return new Response( - $twig->render( - 'prod/Baskets/Update.html.twig' - , array('basket' => $basket) - ) - ); - })->assert('basket_id', '\d+'); + return new Response( + $twig->render( + 'prod/Baskets/Update.html.twig' + , array('basket' => $basket) + ) + ); + })->assert('basket_id', '\d+'); /** * Get the Basket reorder form */ $controllers->get( - '/{basket_id}/reorder/' - , function(Application $app, $basket_id) + '/{basket_id}/reorder/' + , function(Application $app, $basket_id) + { + /* @var $em \Doctrine\ORM\EntityManager */ + $em = $app['Core']->getEntityManager(); + + $basket = $em->getRepository('\Entities\Basket') + ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); + + /* @var $twig \Twig_Environment */ + $twig = $app['Core']->getTwig(); + + return new Response( + $twig->render( + 'prod/Baskets/Reorder.html.twig' + , array('basket' => $basket) + ) + ); + })->assert('basket_id', '\d+'); + + + $controllers->post( + '/{basket_id}/reorder/' + , function(Application $app, $basket_id) + { + $ret = array('success' => false, 'message' => _('An error occured')); + try + { + /* @var $em \Doctrine\ORM\EntityManager */ + $em = $app['Core']->getEntityManager(); + + $basket = $em->getRepository('\Entities\Basket') + ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); + + + $order = $app['request']->get('element'); + + + /* @var $basket \Entities\Basket */ + foreach ($basket->getElements() as $basketElement) + { + if (isset($order[$basketElement->getId()])) { - /* @var $em \Doctrine\ORM\EntityManager */ - $em = $app['Core']->getEntityManager(); + $basketElement->setOrd($order[$basketElement->getId()]); - $basket = $em->getRepository('\Entities\Basket') - ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); + $em->merge($basketElement); + } + } - /* @var $twig \Twig_Environment */ - $twig = $app['Core']->getTwig(); + $em->flush(); + $ret = array('success' => true, 'message' => _('Basket updated')); + } + catch (\Exception $e) + { + + } + $Serializer = $app['Core']['Serializer']; + + return new Response($Serializer->serialize($ret, 'json'), 200, array('Content-type' => 'application/json')); + })->assert('basket_id', '\d+'); - return new Response( - $twig->render( - 'prod/Baskets/Reorder.html.twig' - , array('basket' => $basket) - ) - ); - })->assert('basket_id', '\d+'); /** * Toggle the status of a Basket @@ -286,114 +328,114 @@ class Basket implements ControllerProviderInterface * @returns JSON / HTML */ $controllers->post('/{basket_id}/archive/', function(Application $app, Request $request, $basket_id) - { - $em = $app['Core']->getEntityManager(); + { + $em = $app['Core']->getEntityManager(); - $basket = $em->getRepository('\Entities\Basket') - ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); + $basket = $em->getRepository('\Entities\Basket') + ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); - $archive_status = !!$request->get('archive'); + $archive_status = !!$request->get('archive'); - $basket->setArchived($archive_status); + $basket->setArchived($archive_status); - $em->merge($basket); - $em->flush(); + $em->merge($basket); + $em->flush(); - if ($archive_status) - { - $message = _('Basket has been archived'); - } - else - { - $message = _('Basket has been unarchived'); - } + if ($archive_status) + { + $message = _('Basket has been archived'); + } + else + { + $message = _('Basket has been unarchived'); + } - $data = array( - 'success' => true - , 'archive' => $archive_status - , 'message' => $message - ); + $data = array( + 'success' => true + , 'archive' => $archive_status + , 'message' => $message + ); - if ($request->getRequestFormat() == 'json') - { + if ($request->getRequestFormat() == 'json') + { - $datas = $app['Core']['Serializer']->serialize($data, 'json'); + $datas = $app['Core']['Serializer']->serialize($data, 'json'); - return new Response($datas, 200, array('Content-type' => 'application/json')); - } - else - { - return new RedirectResponse('/'); - } - })->assert('basket_id', '\d+'); + return new Response($datas, 200, array('Content-type' => 'application/json')); + } + else + { + return new RedirectResponse('/'); + } + })->assert('basket_id', '\d+'); /** * Add a BasketElement to a basket */ $controllers->post( - '/{basket_id}/addElements/' - , function(Application $app, Request $request, $basket_id) - { - $em = $app['Core']->getEntityManager(); + '/{basket_id}/addElements/' + , function(Application $app, Request $request, $basket_id) + { + $em = $app['Core']->getEntityManager(); - $basket = $em->getRepository('\Entities\Basket') - ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); + $basket = $em->getRepository('\Entities\Basket') + ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); - $user = $app['Core']->getAuthenticatedUser(); - /* @var $user \User_Adapter */ + $user = $app['Core']->getAuthenticatedUser(); + /* @var $user \User_Adapter */ - $n = 0; + $n = 0; - foreach (explode(';', $request->get('lst')) as $sbas_rec) - { - $sbas_rec = explode('_', $sbas_rec); + foreach (explode(';', $request->get('lst')) as $sbas_rec) + { + $sbas_rec = explode('_', $sbas_rec); - if (count($sbas_rec) !== 2) - continue; + if (count($sbas_rec) !== 2) + continue; - $record = new \record_adapter($sbas_rec[0], $sbas_rec[1]); + $record = new \record_adapter($sbas_rec[0], $sbas_rec[1]); - if (!$user->ACL()->has_access_to_base($record->get_base_id()) - && !$user->ACL()->has_hd_grant($record) - && !$user->ACL()->has_preview_grant($record)) - { - continue; - } + if (!$user->ACL()->has_access_to_base($record->get_base_id()) + && !$user->ACL()->has_hd_grant($record) + && !$user->ACL()->has_preview_grant($record)) + { + continue; + } - if ($basket->hasRecord($record)) - continue; + if ($basket->hasRecord($record)) + continue; - $basket_element = new \Entities\BasketElement(); - $basket_element->setRecord($record); - $basket_element->setBasket($basket); + $basket_element = new \Entities\BasketElement(); + $basket_element->setRecord($record); + $basket_element->setBasket($basket); - $em->persist($basket_element); + $em->persist($basket_element); - $basket->addBasketElement($basket_element); + $basket->addBasketElement($basket_element); - $n++; - } + $n++; + } - $em->merge($basket); - $em->flush(); + $em->merge($basket); + $em->flush(); - $data = array( - 'success' => true - , 'message' => sprintf(_('%d records added'), $n) - ); + $data = array( + 'success' => true + , 'message' => sprintf(_('%d records added'), $n) + ); - if ($request->getRequestFormat() == 'json') - { + if ($request->getRequestFormat() == 'json') + { - $datas = $app['Core']['Serializer']->serialize($data, 'json'); + $datas = $app['Core']['Serializer']->serialize($data, 'json'); - return new Response($datas, 200, array('Content-type' => 'application/json')); - } - else - { - return new RedirectResponse('/'); - } - })->assert('basket_id', '\d+'); + return new Response($datas, 200, array('Content-type' => 'application/json')); + } + else + { + return new RedirectResponse('/'); + } + })->assert('basket_id', '\d+'); @@ -406,107 +448,107 @@ class Basket implements ControllerProviderInterface * */ $controllers->post( - '/{basket_id}/stealElements/' - , function(Application $app, Request $request, $basket_id) - { - $em = $app['Core']->getEntityManager(); + '/{basket_id}/stealElements/' + , function(Application $app, Request $request, $basket_id) + { + $em = $app['Core']->getEntityManager(); - /* @var $em \Doctrine\ORM\EntityManager */ - $basket = $em->getRepository('\Entities\Basket') - ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); - - $user = $app['Core']->getAuthenticatedUser(); - /* @var $user \User_Adapter */ + /* @var $em \Doctrine\ORM\EntityManager */ + $basket = $em->getRepository('\Entities\Basket') + ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true); - $n = 0; + $user = $app['Core']->getAuthenticatedUser(); + /* @var $user \User_Adapter */ - foreach ($request->get('elements') as $bask_element_id) - { - try - { - $basket_element = $em->getRepository('\Entities\BasketElement') - ->findUserElement($bask_element_id, $user); - } - catch(\Exception $e) - { - continue; - } - - $basket_element->setBasket($basket); - $basket->addBasketElement($basket_element); - $n++; - } + $n = 0; - $em->flush(); - - $data = array( - 'success' => true - , 'message' => sprintf(_('%d records moved'), $n) - ); + foreach ($request->get('elements') as $bask_element_id) + { + try + { + $basket_element = $em->getRepository('\Entities\BasketElement') + ->findUserElement($bask_element_id, $user); + } + catch (\Exception $e) + { + continue; + } - if ($request->getRequestFormat() == 'json') - { + $basket_element->setBasket($basket); + $basket->addBasketElement($basket_element); + $n++; + } - $datas = $app['Core']['Serializer']->serialize($data, 'json'); + $em->flush(); - return new Response($datas, 200, array('Content-type' => 'application/json')); - } - else - { - return new RedirectResponse('/'); - } - })->assert('basket_id', '\d+'); + $data = array( + 'success' => true + , 'message' => sprintf(_('%d records moved'), $n) + ); + + if ($request->getRequestFormat() == 'json') + { + + $datas = $app['Core']['Serializer']->serialize($data, 'json'); + + return new Response($datas, 200, array('Content-type' => 'application/json')); + } + else + { + return new RedirectResponse('/'); + } + })->assert('basket_id', '\d+'); /** * Get basket creation form */ $controllers->get('/create/', function(Application $app) - { - /* @var $twig \Twig_Environment */ - $twig = $app['Core']->getTwig(); + { + /* @var $twig \Twig_Environment */ + $twig = $app['Core']->getTwig(); - return new Response($twig->render('prod/Baskets/Create.html.twig', array())); - }); + return new Response($twig->render('prod/Baskets/Create.html.twig', array())); + }); /** * Get a basket */ $controllers->get('/{basket_id}/', function(Application $app, Request $request, $basket_id) - { - $em = $app['Core']->getEntityManager(); + { + $em = $app['Core']->getEntityManager(); - $basket = $em->getRepository('\Entities\Basket') - ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), false); + $basket = $em->getRepository('\Entities\Basket') + ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), false); - if ($basket->getIsRead() === false) - { - $basket = $em->merge($basket); - $basket->setIsRead(true); - $em->flush(); - } + if ($basket->getIsRead() === false) + { + $basket = $em->merge($basket); + $basket->setIsRead(true); + $em->flush(); + } - if ($basket->getValidation()) - { - $basket = $em->merge($basket); - if($basket->getValidation()->getParticipant($app['Core']->getAuthenticatedUser())->getIsAware() === false) - { - $basket->getValidation()->getParticipant($app['Core']->getAuthenticatedUser())->setIsAware(true); - $em->flush(); - } - } + if ($basket->getValidation()) + { + $basket = $em->merge($basket); + if ($basket->getValidation()->getParticipant($app['Core']->getAuthenticatedUser())->getIsAware() === false) + { + $basket->getValidation()->getParticipant($app['Core']->getAuthenticatedUser())->setIsAware(true); + $em->flush(); + } + } - /* @var $twig \Twig_Environment */ - $twig = $app['Core']->getTwig(); + /* @var $twig \Twig_Environment */ + $twig = $app['Core']->getTwig(); - $params = array( - 'basket' => $basket, - 'ordre' => $request->get('ordre') - ); + $params = array( + 'basket' => $basket, + 'ordre' => $request->get('ordre') + ); - $html = $twig->render('prod/WorkZone/Basket.html.twig', $params); + $html = $twig->render('prod/WorkZone/Basket.html.twig', $params); - return new Response($html); - })->assert('basket_id', '\d+'); + return new Response($html); + })->assert('basket_id', '\d+'); return $controllers; } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Story.php b/lib/Alchemy/Phrasea/Controller/Prod/Story.php index 6f8cd8a7b9..6e31a2b06b 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Story.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Story.php @@ -20,7 +20,8 @@ use Symfony\Component\HttpFoundation\Request, Symfony\Component\HttpKernel\Exception\HttpException, Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Alchemy\Phrasea\RouteProcessor\Basket as BasketRoute, - Alchemy\Phrasea\Helper; + Alchemy\Phrasea\Helper, + Alchemy\Phrasea\Controller\Exception as ControllerException; /** * @@ -37,297 +38,283 @@ class Story implements ControllerProviderInterface $controllers->get('/create/', function(Application $app) - { - /* @var $twig \Twig_Environment */ - $twig = $app['Core']->getTwig(); + { + /* @var $twig \Twig_Environment */ + $twig = $app['Core']->getTwig(); - return new Response($twig->render('prod/Story/Create.html.twig', array())); - }); + return new Response($twig->render('prod/Story/Create.html.twig', array())); + }); $controllers->post('/', function(Application $app, Request $request) - { - /* @var $request \Symfony\Component\HttpFoundation\Request */ - $em = $app['Core']->getEntityManager(); + { + /* @var $request \Symfony\Component\HttpFoundation\Request */ + $em = $app['Core']->getEntityManager(); - $user = $app['Core']->getAuthenticatedUser(); + $user = $app['Core']->getAuthenticatedUser(); - $collection = \collection::get_from_base_id($request->get('base_id')); + $collection = \collection::get_from_base_id($request->get('base_id')); - if (!$user->ACL()->has_right_on_base($collection->get_base_id(), 'canaddrecord')) - throw new \Exception_Forbidden('You can not create a story on this collection'); + if (!$user->ACL()->has_right_on_base($collection->get_base_id(), 'canaddrecord')) + throw new \Exception_Forbidden('You can not create a story on this collection'); - $system_file = new \system_file( - $app['Core']->getRegistry() - ->get('GV_RootPath') . 'www/skins/icons/substitution/regroup_doc.png' - ); + $system_file = new \system_file( + $app['Core']->getRegistry() + ->get('GV_RootPath') . 'www/skins/icons/substitution/regroup_doc.png' + ); - $Story = \record_adapter::create($collection, $system_file, false, true); + $Story = \record_adapter::create($collection, $system_file, false, true); - $metadatas = array(); + $metadatas = array(); - foreach ($collection->get_databox()->get_meta_structure() as $meta) - { - if ($meta->is_regname()) - $value = $request->get('name'); - elseif ($meta->is_regdesc()) - $value = $request->get('description'); - else - continue; + foreach ($collection->get_databox()->get_meta_structure() as $meta) + { + if ($meta->is_regname()) + $value = $request->get('name'); + elseif ($meta->is_regdesc()) + $value = $request->get('description'); + else + continue; - $metadatas[] = array( - 'meta_struct_id' => $meta->get_id() - , 'meta_id' => null - , 'value' => $value - ); - } + $metadatas[] = array( + 'meta_struct_id' => $meta->get_id() + , 'meta_id' => null + , 'value' => $value + ); + } - $Story->set_metadatas($metadatas) - ->rebuild_subdefs(); + $Story->set_metadatas($metadatas) + ->rebuild_subdefs(); - $StoryWZ = new \Entities\StoryWZ(); - $StoryWZ->setUser($user); - $StoryWZ->setRecord($Story); + $StoryWZ = new \Entities\StoryWZ(); + $StoryWZ->setUser($user); + $StoryWZ->setRecord($Story); - $em->persist($StoryWZ); + $em->persist($StoryWZ); - $em->flush(); + $em->flush(); - if ($request->getRequestFormat() == 'json') - { - $data = array( - 'success' => true - , 'message' => _('Story created') - , 'WorkZone' => $StoryWZ->getId() - , 'story' => array( - 'sbas_id' => $Story->get_sbas_id(), - 'record_id' => $Story->get_record_id(), - ) - ); + if ($request->getRequestFormat() == 'json') + { + $data = array( + 'success' => true + , 'message' => _('Story created') + , 'WorkZone' => $StoryWZ->getId() + , 'story' => array( + 'sbas_id' => $Story->get_sbas_id(), + 'record_id' => $Story->get_record_id(), + ) + ); - $datas = $app['Core']['Serializer']->serialize($data, 'json'); + $datas = $app['Core']['Serializer']->serialize($data, 'json'); - return new Response($datas, 200, array('Content-type' => 'application/json')); - } - else - { - return new RedirectResponse(sprintf('/%d/', $StoryWZ->getId())); - } - }); + return new Response($datas, 200, array('Content-type' => 'application/json')); + } + else + { + return new RedirectResponse(sprintf('/%d/', $StoryWZ->getId())); + } + }); $controllers->get('/{sbas_id}/{record_id}/', function(Application $app, $sbas_id, $record_id) - { - $Story = new \record_adapter($sbas_id, $record_id); + { + $Story = new \record_adapter($sbas_id, $record_id); - /* @var $twig \Twig_Environment */ - $twig = $app['Core']->getTwig(); + /* @var $twig \Twig_Environment */ + $twig = $app['Core']->getTwig(); - $html = $twig->render('prod/WorkZone/Story.html.twig', array('Story' => $Story)); + $html = $twig->render('prod/WorkZone/Story.html.twig', array('Story' => $Story)); - return new Response($html); - })->assert('sbas_id', '\d+')->assert('record_id', '\d+'); + return new Response($html); + })->assert('sbas_id', '\d+')->assert('record_id', '\d+'); $controllers->post( - '/{sbas_id}/{record_id}/addElements/' - , function(Application $app, Request $request, $sbas_id, $record_id) + '/{sbas_id}/{record_id}/addElements/' + , function(Application $app, Request $request, $sbas_id, $record_id) + { + $Story = new \record_adapter($sbas_id, $record_id); + + $user = $app['Core']->getAuthenticatedUser(); + + if (!$user->ACL()->has_right_on_base($Story->get_base_id(), 'canmodifrecord')) + throw new \Exception_Forbidden('You can not add document to this Story'); + + /* @var $user \User_Adapter */ + + $n = 0; + + foreach (explode(';', $request->get('lst')) as $sbas_rec) + { + $sbas_rec = explode('_', $sbas_rec); + + if (count($sbas_rec) !== 2) + continue; + + $record = new \record_adapter($sbas_rec[0], $sbas_rec[1]); + + if (!$user->ACL()->has_access_to_base($record->get_base_id()) + && !$user->ACL()->has_hd_grant($record) + && !$user->ACL()->has_preview_grant($record)) + { + continue; + } + + if ($Story->hasChild($record)) + continue; + + $Story->appendChild($record); + + $n++; + } + + $data = array( + 'success' => true + , 'message' => sprintf(_('%d records added'), $n) + ); + + if ($request->getRequestFormat() == 'json') + { + + $datas = $app['Core']['Serializer']->serialize($data, 'json'); + + return new Response($datas, 200, array('Content-type' => 'application/json')); + } + else + { + return new RedirectResponse('/'); + } + })->assert('sbas_id', '\d+')->assert('record_id', '\d+'); + + $controllers->post( + '/{sbas_id}/{record_id}/delete/{child_sbas_id}/{child_record_id}/' + , function(Application $app, Request $request, $sbas_id, $record_id, $child_sbas_id, $child_record_id) + { + $Story = new \record_adapter($sbas_id, $record_id); + + $record = new \record_adapter($child_sbas_id, $child_record_id); + + $user = $app['Core']->getAuthenticatedUser(); + + if (!$user->ACL()->has_right_on_base($Story->get_base_id(), 'canmodifrecord')) + throw new \Exception_Forbidden('You can not add document to this Story'); + + /* @var $user \User_Adapter */ + + $Story->removeChild($record); + + $data = array( + 'success' => true + , 'message' => _('Record removed from story') + ); + + if ($request->getRequestFormat() == 'json') + { + $datas = $app['Core']['Serializer']->serialize($data, 'json'); + + return new Response($datas, 200, array('Content-type' => 'application/json')); + } + else + { + return new RedirectResponse('/'); + } + }) + ->assert('sbas_id', '\d+') + ->assert('record_id', '\d+') + ->assert('child_sbas_id', '\d+') + ->assert('child_record_id', '\d+'); + + + /** + * Get the Basket reorder form + */ + $controllers->get( + '/{sbas_id}/{record_id}/reorder/' + , function(Application $app, $sbas_id, $record_id) + { + /* @var $em \Doctrine\ORM\EntityManager */ + $em = $app['Core']->getEntityManager(); + + $story = new \record_adapter($sbas_id, $record_id); + + if (!$story->is_grouping()) + { + throw new \Exception('This is not a story'); + } + + /* @var $twig \Twig_Environment */ + $twig = $app['Core']->getTwig(); + + return new Response( + $twig->render( + 'prod/Story/Reorder.html.twig' + , array('story' => $story) + ) + ); + }) + ->assert('sbas_id', '\d+') + ->assert('record_id', '\d+'); + + + $controllers->post( + '/{sbas_id}/{record_id}/reorder/' + , function(Application $app, $sbas_id, $record_id) + { + $ret = array('success' => false, 'message' => _('An error occured')); + try + { + $user = $app['Core']->getAuthenticatedUser(); + /* @var $user \User_Adapter */ + + $story = new \record_adapter($sbas_id, $record_id); + + if (!$story->is_grouping()) { - $Story = new \record_adapter($sbas_id, $record_id); + throw new \Exception('This is not a story'); + } - $user = $app['Core']->getAuthenticatedUser(); + if (!$user->ACL()->has_right_on_base($story->get_base_id(), 'canmodifrecord')) + { + throw new ControllerException(_('You can not edit this story')); + } - if (!$user->ACL()->has_right_on_base($Story->get_base_id(), 'canmodifrecord')) - throw new \Exception_Forbidden('You can not add document to this Story'); + $sql = 'UPDATE regroup SET ord = :ord + WHERE rid_parent = :parent_id AND rid_child = :children_id'; + $stmt = $story->get_databox()->get_connection()->prepare($sql); - /* @var $user \User_Adapter */ - - $n = 0; - - foreach (explode(';', $request->get('lst')) as $sbas_rec) - { - $sbas_rec = explode('_', $sbas_rec); - - if (count($sbas_rec) !== 2) - continue; - - $record = new \record_adapter($sbas_rec[0], $sbas_rec[1]); - - if (!$user->ACL()->has_access_to_base($record->get_base_id()) - && !$user->ACL()->has_hd_grant($record) - && !$user->ACL()->has_preview_grant($record)) - { - continue; - } - - if ($Story->hasChild($record)) - continue; - - $Story->appendChild($record); - - $n++; - } - - $data = array( - 'success' => true - , 'message' => sprintf(_('%d records added'), $n) + foreach ($app['request']->get('element') as $record_id => $ord) + { + $params = array( + ':ord' => $ord, + ':parent_id' => $story->get_record_id(), + ':children_id' => $record_id ); + $stmt->execute($params); + } - if ($request->getRequestFormat() == 'json') - { + $stmt->closeCursor(); - $datas = $app['Core']['Serializer']->serialize($data, 'json'); + $ret = array('success' => true, 'message' => _('Story updated')); + } + catch (ControllerException $e) + { + $ret = array('success' => false, 'message' => $e->getMessage()); + } + catch (\Exception $e) + { - return new Response($datas, 200, array('Content-type' => 'application/json')); - } - else - { - return new RedirectResponse('/'); - } - })->assert('sbas_id', '\d+')->assert('record_id', '\d+'); + } - $controllers->post( - '/{sbas_id}/{record_id}/delete/{child_sbas_id}/{child_record_id}/' - , function(Application $app, Request $request, $sbas_id, $record_id, $child_sbas_id, $child_record_id) - { - $Story = new \record_adapter($sbas_id, $record_id); + $Serializer = $app['Core']['Serializer']; - $record = new \record_adapter($child_sbas_id, $child_record_id); + return new Response($Serializer->serialize($ret, 'json'), 200, array('Content-type' => 'application/json')); + }) + ->assert('sbas_id', '\d+') + ->assert('record_id', '\d+'); - $user = $app['Core']->getAuthenticatedUser(); - - if (!$user->ACL()->has_right_on_base($Story->get_base_id(), 'canmodifrecord')) - throw new \Exception_Forbidden('You can not add document to this Story'); - - /* @var $user \User_Adapter */ - - $Story->removeChild($record); - - $data = array( - 'success' => true - , 'message' => _('Record removed from story') - ); - - if ($request->getRequestFormat() == 'json') - { - $datas = $app['Core']['Serializer']->serialize($data, 'json'); - - return new Response($datas, 200, array('Content-type' => 'application/json')); - } - else - { - return new RedirectResponse('/'); - } - }) - ->assert('sbas_id', '\d+') - ->assert('record_id', '\d+') - ->assert('child_sbas_id', '\d+') - ->assert('child_record_id', '\d+'); - -// $controllers->post('/{basket_id}/delete/', function(Application $app, Request $request, $basket_id) -// { -// $em = $app['Core']->getEntityManager(); -// -// $basket = $em->getRepository('\Entities\Basket') -// ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser()); -// -// $em->remove($basket); -// $em->flush(); -// -// $data = array( -// 'success' => true -// , 'message' => _('Basket has been deleted') -// ); -// -// if ($request->getRequestFormat() == 'json') -// { -// -// $datas = $app['Core']['Serializer']->serialize($data, 'json'); -// -// return new Response($datas, 200, array('Content-type' => 'application/json')); -// } -// else -// { -// return new RedirectResponse('/'); -// } -// }); -// -// -// -// -// $controllers->post('/{basket_id}/update/', function(Application $app, Request $request, $basket_id) -// { -// $em = $app['Core']->getEntityManager(); -// -// $basket = $em->getRepository('\Entities\Basket') -// ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser()); -// -// $basket->setName($request->get('name')); -// $basket->setDescription($request->get('description')); -// -// $em->merge($basket); -// $em->flush(); -// -// $data = array( -// 'success' => true -// , 'message' => _('Basket has been updated') -// , 'basket' => array('id' => $basket->getId()) -// ); -// -// if ($request->getRequestFormat() == 'json') -// { -// -// $datas = $app['Core']['Serializer']->serialize($data, 'json'); -// -// return new Response($datas, 200, array('Content-type' => 'application/json')); -// } -// else -// { -// return new RedirectResponse('/'); -// } -// }); -// -// -// $controllers->get('/{basket_id}/update/', function(Application $app, $basket_id) -// { -// /* @var $em \Doctrine\ORM\EntityManager */ -// $em = $app['Core']->getEntityManager(); -// -// $basket = $em->getRepository('\Entities\Basket') -// ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser()); -// -// $twig = new \supertwig(); -// -// return new Response( -// $twig->render( -// 'prod/Baskets/Update.html.twig' -// , array('basket' => $basket) -// ) -// ); -// }); -// -// -// $controllers->get( -// '/{basket_id}/reorder/' -// , function(Application $app, $basket_id) -// { -// /* @var $em \Doctrine\ORM\EntityManager */ -// $em = $app['Core']->getEntityManager(); -// -// $basket = $em->getRepository('\Entities\Basket') -// ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser()); -// -// $twig = new \supertwig(); -// -// return new Response( -// $twig->render( -// 'prod/Baskets/Reorder.html.twig' -// , array('basket' => $basket) -// ) -// ); -// }); return $controllers; } diff --git a/lib/Doctrine/Repositories/BasketRepository.php b/lib/Doctrine/Repositories/BasketRepository.php index 11a2ffdbb1..1e7aa9a768 100644 --- a/lib/Doctrine/Repositories/BasketRepository.php +++ b/lib/Doctrine/Repositories/BasketRepository.php @@ -47,11 +47,11 @@ class BasketRepository extends EntityRepository if ($sort == 'date') { - $dql .= ' ORDER BY b.created DESC'; + $dql .= ' ORDER BY b.created DESC, e.ord ASC'; } elseif ($sort == 'name') { - $dql .= ' ORDER BY b.name ASC'; + $dql .= ' ORDER BY b.name ASC, e.ord ASC'; } $query = $this->_em->createQuery($dql); @@ -81,7 +81,8 @@ class BasketRepository extends EntityRepository (b.usr_id = :usr_id_owner AND b.is_read = false) OR (b.usr_id != :usr_id_ownertwo AND p.usr_id = :usr_id_participant AND p.is_aware = false) - )'; + ) + ORDER BY e.ord ASC'; $params = array( 'usr_id_owner' => $user->get_id(), @@ -119,11 +120,11 @@ class BasketRepository extends EntityRepository if ($sort == 'date') { - $dql .= ' ORDER BY b.created DESC'; + $dql .= ' ORDER BY b.created DESC, e.ord ASC'; } elseif ($sort == 'name') { - $dql .= ' ORDER BY b.name ASC'; + $dql .= ' ORDER BY b.name ASC, e.ord ASC'; } $query = $this->_em->createQuery($dql); @@ -151,7 +152,8 @@ class BasketRepository extends EntityRepository LEFT JOIN e.validation_datas v LEFT JOIN b.validation s LEFT JOIN s.participants p - WHERE b.id = :basket_id'; + WHERE b.id = :basket_id + ORDER BY e.ord ASC'; $query = $this->_em->createQuery($dql); $query->setParameters(array('basket_id' => $basket_id)); @@ -199,7 +201,8 @@ class BasketRepository extends EntityRepository FROM Entities\Basket b JOIN b.elements e WHERE e.record_id = :record_id AND e.sbas_id = e.sbas_id - AND b.usr_id = :usr_id'; + AND b.usr_id = :usr_id + ORDER BY e.ord ASC'; $params = array( 'record_id' => $record->get_record_id(), @@ -282,6 +285,8 @@ class BasketRepository extends EntityRepository $params['description'] = '%' . $query . '%'; } + $dql .= ' ORDER BY e.ord ASC'; + $query = $this->_em->createQuery($dql); $query->setParameters($params); diff --git a/templates/web/prod/Baskets/Reorder.html.twig b/templates/web/prod/Baskets/Reorder.html.twig index 6510f2c5d2..383baf00dd 100644 --- a/templates/web/prod/Baskets/Reorder.html.twig +++ b/templates/web/prod/Baskets/Reorder.html.twig @@ -1,33 +1,159 @@ {% import 'common/thumbnail.html' as thumbnail %} - -
-{% for element in basket.getElements() %} -
-
- {{ element.getRecord().get_title() }} - {{ thumbnail.format(element.getRecord().get_thumbnail(), 80, 80, '', session) }} -
- - - -
-
-
-{% endfor %} +
+ {% trans 'Reordonner automatiquement' %} + + + +
+
+
+ {% for element in basket.getElements() %} +
+
+ {{ element.getRecord().get_title() }} + {{ thumbnail.format(element.getRecord().get_thumbnail(), 80, 80, '', session) }} +
+ + + +
+
+
+ {% endfor %} +
+
+ {% for element in basket.getElements() %} + + {% endfor %} + +
-
- {% for element in basket.getElements() %} - - {% endfor %} - -
- - diff --git a/templates/web/prod/index.html.twig b/templates/web/prod/index.html.twig index f4b276d52e..197f049787 100644 --- a/templates/web/prod/index.html.twig +++ b/templates/web/prod/index.html.twig @@ -1091,18 +1091,6 @@ -
-
- {% trans 'Reordonner automatiquement' %} - - -
-
-
diff --git a/www/prod/page0.js b/www/prod/page0.js index 0c8f9cf529..57b01602af 100644 --- a/www/prod/page0.js +++ b/www/prod/page0.js @@ -3083,59 +3083,6 @@ function autoorder() } -function arraySortByValue(datas, data_type) { - - var tmp = new Array(); - for (i in datas) { - tmp.push({ - v: i, - c: datas[i].toUpperCase(), - o: datas[i] - }); - } - switch(data_type) - { - case 'string': - tmp.sort(function (x, y) { - return y.c < x.c; - }); - break; - case 'integer': - tmp.sort(function (x, y) { - return parseInt(y.c) < parseInt(x.c); - }); - break; - } - - var out = new Array(); - for (i in tmp) { - out[tmp[i].v] = tmp[i].o; - } - - return out; -} - - -function reverse_order() -{ - var elems = $('#reorder_box .diapo'); - - var last_moved = false; - - elems.each(function(i,n){ - var elem = $(n); - if(last_moved) - { - elem.insertBefore(last_moved); - } - else - { - $('#reorder_box').append(elem); - } - last_moved = elem; - }); -} - function set_up_feed_box(data) { var $feed_box = $('#modal_feed');