mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-12 12:33:26 +00:00
Fix Basket/Story sorting
This commit is contained in:
@@ -46,76 +46,76 @@ class Basket implements ControllerProviderInterface
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
$controllers->post('/', function(Application $app)
|
$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->setName($request->get('name', ''));
|
||||||
$Basket->setOwner($app['Core']->getAuthenticatedUser());
|
$Basket->setOwner($app['Core']->getAuthenticatedUser());
|
||||||
$Basket->setDescription($request->get('desc'));
|
$Basket->setDescription($request->get('desc'));
|
||||||
|
|
||||||
$em->persist($Basket);
|
$em->persist($Basket);
|
||||||
|
|
||||||
$n = 0;
|
$n = 0;
|
||||||
|
|
||||||
foreach (explode(';', $request->get('lst')) as $sbas_rec)
|
foreach (explode(';', $request->get('lst')) as $sbas_rec)
|
||||||
{
|
{
|
||||||
$sbas_rec = explode('_', $sbas_rec);
|
$sbas_rec = explode('_', $sbas_rec);
|
||||||
|
|
||||||
if (count($sbas_rec) !== 2)
|
if (count($sbas_rec) !== 2)
|
||||||
continue;
|
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())
|
if (!$user->ACL()->has_access_to_base($record->get_base_id())
|
||||||
&& !$user->ACL()->has_hd_grant($record)
|
&& !$user->ACL()->has_hd_grant($record)
|
||||||
&& !$user->ACL()->has_preview_grant($record))
|
&& !$user->ACL()->has_preview_grant($record))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($Basket->hasRecord($record))
|
if ($Basket->hasRecord($record))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$basket_element = new \Entities\BasketElement();
|
$basket_element = new \Entities\BasketElement();
|
||||||
$basket_element->setRecord($record);
|
$basket_element->setRecord($record);
|
||||||
$basket_element->setBasket($Basket);
|
$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')
|
if ($request->getRequestFormat() == 'json')
|
||||||
{
|
{
|
||||||
$data = array(
|
$data = array(
|
||||||
'success' => true
|
'success' => true
|
||||||
, 'message' => _('Basket created')
|
, 'message' => _('Basket created')
|
||||||
, 'basket' => array(
|
, 'basket' => array(
|
||||||
'id' => $Basket->getId()
|
'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'));
|
return new Response($datas, 200, array('Content-type' => 'application/json'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return new RedirectResponse(sprintf('/%d/', $Basket->getId()));
|
return new RedirectResponse(sprintf('/%d/', $Basket->getId()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This route is used to delete a basket
|
* 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)
|
$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')
|
$basket = $em->getRepository('\Entities\Basket')
|
||||||
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
||||||
|
|
||||||
$em->remove($basket);
|
$em->remove($basket);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'success' => true
|
'success' => true
|
||||||
, 'message' => _('Basket has been deleted')
|
, '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'));
|
return new Response($datas, 200, array('Content-type' => 'application/json'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return new RedirectResponse('/');
|
return new RedirectResponse('/');
|
||||||
}
|
}
|
||||||
})->assert('basket_id', '\d+');
|
})->assert('basket_id', '\d+');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes a BasketElement
|
* Removes a BasketElement
|
||||||
*/
|
*/
|
||||||
$controllers->post(
|
$controllers->post(
|
||||||
'/{basket_id}/delete/{basket_element_id}/'
|
'/{basket_id}/delete/{basket_element_id}/'
|
||||||
, function(Application $app, Request $request, $basket_id, $basket_element_id)
|
, function(Application $app, Request $request, $basket_id, $basket_element_id)
|
||||||
{
|
{
|
||||||
/* @var $em \Doctrine\ORM\EntityManager */
|
/* @var $em \Doctrine\ORM\EntityManager */
|
||||||
$em = $app['Core']->getEntityManager();
|
$em = $app['Core']->getEntityManager();
|
||||||
|
|
||||||
$basket = $em->getRepository('\Entities\Basket')
|
$basket = $em->getRepository('\Entities\Basket')
|
||||||
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
||||||
|
|
||||||
foreach ($basket->getElements() as $basket_element)
|
foreach ($basket->getElements() as $basket_element)
|
||||||
{
|
{
|
||||||
/* @var $basket_element \Entities\BasketElement */
|
/* @var $basket_element \Entities\BasketElement */
|
||||||
if ($basket_element->getId() == $basket_element_id)
|
if ($basket_element->getId() == $basket_element_id)
|
||||||
{
|
{
|
||||||
$em->remove($basket_element);
|
$em->remove($basket_element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'success' => true
|
'success' => true
|
||||||
, 'message' => _('Record removed from basket')
|
, 'message' => _('Record removed from basket')
|
||||||
);
|
);
|
||||||
|
|
||||||
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'));
|
return new Response($datas, 200, array('Content-type' => 'application/json'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return new RedirectResponse('/');
|
return new RedirectResponse('/');
|
||||||
}
|
}
|
||||||
})->assert('basket_id', '\d+')->assert('basket_element_id', '\d+');
|
})->assert('basket_id', '\d+')->assert('basket_element_id', '\d+');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update name and description of a basket
|
* 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)
|
$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')
|
$basket = $em->getRepository('\Entities\Basket')
|
||||||
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
||||||
|
|
||||||
$basket->setName($request->get('name', ''));
|
$basket->setName($request->get('name', ''));
|
||||||
$basket->setDescription($request->get('description'));
|
$basket->setDescription($request->get('description'));
|
||||||
|
|
||||||
$em->merge($basket);
|
$em->merge($basket);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'success' => true
|
'success' => true
|
||||||
, 'message' => _('Basket has been updated')
|
, 'message' => _('Basket has been updated')
|
||||||
, 'basket' => array('id' => $basket->getId())
|
, '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'));
|
return new Response($datas, 200, array('Content-type' => 'application/json'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return new RedirectResponse('/');
|
return new RedirectResponse('/');
|
||||||
}
|
}
|
||||||
})->assert('basket_id', '\d+');
|
})->assert('basket_id', '\d+');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the form to update the Basket attributes (name and description)
|
* Get the form to update the Basket attributes (name and description)
|
||||||
*/
|
*/
|
||||||
$controllers->get('/{basket_id}/update/', function(Application $app, $basket_id)
|
$controllers->get('/{basket_id}/update/', function(Application $app, $basket_id)
|
||||||
{
|
{
|
||||||
/* @var $em \Doctrine\ORM\EntityManager */
|
/* @var $em \Doctrine\ORM\EntityManager */
|
||||||
$em = $app['Core']->getEntityManager();
|
$em = $app['Core']->getEntityManager();
|
||||||
|
|
||||||
$basket = $em->getRepository('\Entities\Basket')
|
$basket = $em->getRepository('\Entities\Basket')
|
||||||
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
||||||
|
|
||||||
/* @var $twig \Twig_Environment */
|
/* @var $twig \Twig_Environment */
|
||||||
$twig = $app['Core']->getTwig();
|
$twig = $app['Core']->getTwig();
|
||||||
|
|
||||||
return new Response(
|
return new Response(
|
||||||
$twig->render(
|
$twig->render(
|
||||||
'prod/Baskets/Update.html.twig'
|
'prod/Baskets/Update.html.twig'
|
||||||
, array('basket' => $basket)
|
, array('basket' => $basket)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
})->assert('basket_id', '\d+');
|
})->assert('basket_id', '\d+');
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Basket reorder form
|
* Get the Basket reorder form
|
||||||
*/
|
*/
|
||||||
$controllers->get(
|
$controllers->get(
|
||||||
'/{basket_id}/reorder/'
|
'/{basket_id}/reorder/'
|
||||||
, function(Application $app, $basket_id)
|
, 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 */
|
$basketElement->setOrd($order[$basketElement->getId()]);
|
||||||
$em = $app['Core']->getEntityManager();
|
|
||||||
|
|
||||||
$basket = $em->getRepository('\Entities\Basket')
|
$em->merge($basketElement);
|
||||||
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* @var $twig \Twig_Environment */
|
$em->flush();
|
||||||
$twig = $app['Core']->getTwig();
|
$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
|
* Toggle the status of a Basket
|
||||||
@@ -286,114 +328,114 @@ class Basket implements ControllerProviderInterface
|
|||||||
* @returns JSON / HTML
|
* @returns JSON / HTML
|
||||||
*/
|
*/
|
||||||
$controllers->post('/{basket_id}/archive/', function(Application $app, Request $request, $basket_id)
|
$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')
|
$basket = $em->getRepository('\Entities\Basket')
|
||||||
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
->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->merge($basket);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
if ($archive_status)
|
if ($archive_status)
|
||||||
{
|
{
|
||||||
$message = _('Basket has been archived');
|
$message = _('Basket has been archived');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$message = _('Basket has been unarchived');
|
$message = _('Basket has been unarchived');
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'success' => true
|
'success' => true
|
||||||
, 'archive' => $archive_status
|
, 'archive' => $archive_status
|
||||||
, 'message' => $message
|
, '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'));
|
return new Response($datas, 200, array('Content-type' => 'application/json'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return new RedirectResponse('/');
|
return new RedirectResponse('/');
|
||||||
}
|
}
|
||||||
})->assert('basket_id', '\d+');
|
})->assert('basket_id', '\d+');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a BasketElement to a basket
|
* Add a BasketElement to a basket
|
||||||
*/
|
*/
|
||||||
$controllers->post(
|
$controllers->post(
|
||||||
'/{basket_id}/addElements/'
|
'/{basket_id}/addElements/'
|
||||||
, function(Application $app, Request $request, $basket_id)
|
, function(Application $app, Request $request, $basket_id)
|
||||||
{
|
{
|
||||||
$em = $app['Core']->getEntityManager();
|
$em = $app['Core']->getEntityManager();
|
||||||
|
|
||||||
$basket = $em->getRepository('\Entities\Basket')
|
$basket = $em->getRepository('\Entities\Basket')
|
||||||
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
||||||
|
|
||||||
$user = $app['Core']->getAuthenticatedUser();
|
$user = $app['Core']->getAuthenticatedUser();
|
||||||
/* @var $user \User_Adapter */
|
/* @var $user \User_Adapter */
|
||||||
|
|
||||||
$n = 0;
|
$n = 0;
|
||||||
|
|
||||||
foreach (explode(';', $request->get('lst')) as $sbas_rec)
|
foreach (explode(';', $request->get('lst')) as $sbas_rec)
|
||||||
{
|
{
|
||||||
$sbas_rec = explode('_', $sbas_rec);
|
$sbas_rec = explode('_', $sbas_rec);
|
||||||
|
|
||||||
if (count($sbas_rec) !== 2)
|
if (count($sbas_rec) !== 2)
|
||||||
continue;
|
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())
|
if (!$user->ACL()->has_access_to_base($record->get_base_id())
|
||||||
&& !$user->ACL()->has_hd_grant($record)
|
&& !$user->ACL()->has_hd_grant($record)
|
||||||
&& !$user->ACL()->has_preview_grant($record))
|
&& !$user->ACL()->has_preview_grant($record))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($basket->hasRecord($record))
|
if ($basket->hasRecord($record))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$basket_element = new \Entities\BasketElement();
|
$basket_element = new \Entities\BasketElement();
|
||||||
$basket_element->setRecord($record);
|
$basket_element->setRecord($record);
|
||||||
$basket_element->setBasket($basket);
|
$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->merge($basket);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'success' => true
|
'success' => true
|
||||||
, 'message' => sprintf(_('%d records added'), $n)
|
, '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'));
|
return new Response($datas, 200, array('Content-type' => 'application/json'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return new RedirectResponse('/');
|
return new RedirectResponse('/');
|
||||||
}
|
}
|
||||||
})->assert('basket_id', '\d+');
|
})->assert('basket_id', '\d+');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -406,107 +448,107 @@ class Basket implements ControllerProviderInterface
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
$controllers->post(
|
$controllers->post(
|
||||||
'/{basket_id}/stealElements/'
|
'/{basket_id}/stealElements/'
|
||||||
, function(Application $app, Request $request, $basket_id)
|
, function(Application $app, Request $request, $basket_id)
|
||||||
{
|
{
|
||||||
$em = $app['Core']->getEntityManager();
|
$em = $app['Core']->getEntityManager();
|
||||||
|
|
||||||
/* @var $em \Doctrine\ORM\EntityManager */
|
/* @var $em \Doctrine\ORM\EntityManager */
|
||||||
$basket = $em->getRepository('\Entities\Basket')
|
$basket = $em->getRepository('\Entities\Basket')
|
||||||
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
||||||
|
|
||||||
$user = $app['Core']->getAuthenticatedUser();
|
|
||||||
/* @var $user \User_Adapter */
|
|
||||||
|
|
||||||
$n = 0;
|
$user = $app['Core']->getAuthenticatedUser();
|
||||||
|
/* @var $user \User_Adapter */
|
||||||
|
|
||||||
foreach ($request->get('elements') as $bask_element_id)
|
$n = 0;
|
||||||
{
|
|
||||||
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++;
|
|
||||||
}
|
|
||||||
|
|
||||||
$em->flush();
|
foreach ($request->get('elements') as $bask_element_id)
|
||||||
|
{
|
||||||
$data = array(
|
try
|
||||||
'success' => true
|
{
|
||||||
, 'message' => sprintf(_('%d records moved'), $n)
|
$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'));
|
$data = array(
|
||||||
}
|
'success' => true
|
||||||
else
|
, 'message' => sprintf(_('%d records moved'), $n)
|
||||||
{
|
);
|
||||||
return new RedirectResponse('/');
|
|
||||||
}
|
if ($request->getRequestFormat() == 'json')
|
||||||
})->assert('basket_id', '\d+');
|
{
|
||||||
|
|
||||||
|
$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
|
* Get basket creation form
|
||||||
*/
|
*/
|
||||||
$controllers->get('/create/', function(Application $app)
|
$controllers->get('/create/', function(Application $app)
|
||||||
{
|
{
|
||||||
/* @var $twig \Twig_Environment */
|
/* @var $twig \Twig_Environment */
|
||||||
$twig = $app['Core']->getTwig();
|
$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
|
* Get a basket
|
||||||
*/
|
*/
|
||||||
$controllers->get('/{basket_id}/', function(Application $app, Request $request, $basket_id)
|
$controllers->get('/{basket_id}/', function(Application $app, Request $request, $basket_id)
|
||||||
{
|
{
|
||||||
$em = $app['Core']->getEntityManager();
|
$em = $app['Core']->getEntityManager();
|
||||||
|
|
||||||
$basket = $em->getRepository('\Entities\Basket')
|
$basket = $em->getRepository('\Entities\Basket')
|
||||||
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), false);
|
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), false);
|
||||||
|
|
||||||
if ($basket->getIsRead() === false)
|
if ($basket->getIsRead() === false)
|
||||||
{
|
{
|
||||||
$basket = $em->merge($basket);
|
$basket = $em->merge($basket);
|
||||||
$basket->setIsRead(true);
|
$basket->setIsRead(true);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($basket->getValidation())
|
if ($basket->getValidation())
|
||||||
{
|
{
|
||||||
$basket = $em->merge($basket);
|
$basket = $em->merge($basket);
|
||||||
if($basket->getValidation()->getParticipant($app['Core']->getAuthenticatedUser())->getIsAware() === false)
|
if ($basket->getValidation()->getParticipant($app['Core']->getAuthenticatedUser())->getIsAware() === false)
|
||||||
{
|
{
|
||||||
$basket->getValidation()->getParticipant($app['Core']->getAuthenticatedUser())->setIsAware(true);
|
$basket->getValidation()->getParticipant($app['Core']->getAuthenticatedUser())->setIsAware(true);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @var $twig \Twig_Environment */
|
/* @var $twig \Twig_Environment */
|
||||||
$twig = $app['Core']->getTwig();
|
$twig = $app['Core']->getTwig();
|
||||||
|
|
||||||
$params = array(
|
$params = array(
|
||||||
'basket' => $basket,
|
'basket' => $basket,
|
||||||
'ordre' => $request->get('ordre')
|
'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);
|
return new Response($html);
|
||||||
})->assert('basket_id', '\d+');
|
})->assert('basket_id', '\d+');
|
||||||
|
|
||||||
return $controllers;
|
return $controllers;
|
||||||
}
|
}
|
||||||
|
@@ -20,7 +20,8 @@ use Symfony\Component\HttpFoundation\Request,
|
|||||||
Symfony\Component\HttpKernel\Exception\HttpException,
|
Symfony\Component\HttpKernel\Exception\HttpException,
|
||||||
Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
use Alchemy\Phrasea\RouteProcessor\Basket as BasketRoute,
|
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)
|
$controllers->get('/create/', function(Application $app)
|
||||||
{
|
{
|
||||||
/* @var $twig \Twig_Environment */
|
/* @var $twig \Twig_Environment */
|
||||||
$twig = $app['Core']->getTwig();
|
$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)
|
$controllers->post('/', function(Application $app, Request $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();
|
||||||
|
|
||||||
$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'))
|
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');
|
throw new \Exception_Forbidden('You can not create a story on this collection');
|
||||||
|
|
||||||
|
|
||||||
$system_file = new \system_file(
|
$system_file = new \system_file(
|
||||||
$app['Core']->getRegistry()
|
$app['Core']->getRegistry()
|
||||||
->get('GV_RootPath') . 'www/skins/icons/substitution/regroup_doc.png'
|
->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)
|
foreach ($collection->get_databox()->get_meta_structure() as $meta)
|
||||||
{
|
{
|
||||||
if ($meta->is_regname())
|
if ($meta->is_regname())
|
||||||
$value = $request->get('name');
|
$value = $request->get('name');
|
||||||
elseif ($meta->is_regdesc())
|
elseif ($meta->is_regdesc())
|
||||||
$value = $request->get('description');
|
$value = $request->get('description');
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$metadatas[] = array(
|
$metadatas[] = array(
|
||||||
'meta_struct_id' => $meta->get_id()
|
'meta_struct_id' => $meta->get_id()
|
||||||
, 'meta_id' => null
|
, 'meta_id' => null
|
||||||
, 'value' => $value
|
, 'value' => $value
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$Story->set_metadatas($metadatas)
|
$Story->set_metadatas($metadatas)
|
||||||
->rebuild_subdefs();
|
->rebuild_subdefs();
|
||||||
|
|
||||||
$StoryWZ = new \Entities\StoryWZ();
|
$StoryWZ = new \Entities\StoryWZ();
|
||||||
$StoryWZ->setUser($user);
|
$StoryWZ->setUser($user);
|
||||||
$StoryWZ->setRecord($Story);
|
$StoryWZ->setRecord($Story);
|
||||||
|
|
||||||
$em->persist($StoryWZ);
|
$em->persist($StoryWZ);
|
||||||
|
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
if ($request->getRequestFormat() == 'json')
|
if ($request->getRequestFormat() == 'json')
|
||||||
{
|
{
|
||||||
$data = array(
|
$data = array(
|
||||||
'success' => true
|
'success' => true
|
||||||
, 'message' => _('Story created')
|
, 'message' => _('Story created')
|
||||||
, 'WorkZone' => $StoryWZ->getId()
|
, 'WorkZone' => $StoryWZ->getId()
|
||||||
, 'story' => array(
|
, 'story' => array(
|
||||||
'sbas_id' => $Story->get_sbas_id(),
|
'sbas_id' => $Story->get_sbas_id(),
|
||||||
'record_id' => $Story->get_record_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'));
|
return new Response($datas, 200, array('Content-type' => 'application/json'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return new RedirectResponse(sprintf('/%d/', $StoryWZ->getId()));
|
return new RedirectResponse(sprintf('/%d/', $StoryWZ->getId()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$controllers->get('/{sbas_id}/{record_id}/', function(Application $app, $sbas_id, $record_id)
|
$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 */
|
/* @var $twig \Twig_Environment */
|
||||||
$twig = $app['Core']->getTwig();
|
$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);
|
return new Response($html);
|
||||||
})->assert('sbas_id', '\d+')->assert('record_id', '\d+');
|
})->assert('sbas_id', '\d+')->assert('record_id', '\d+');
|
||||||
|
|
||||||
|
|
||||||
$controllers->post(
|
$controllers->post(
|
||||||
'/{sbas_id}/{record_id}/addElements/'
|
'/{sbas_id}/{record_id}/addElements/'
|
||||||
, function(Application $app, Request $request, $sbas_id, $record_id)
|
, 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'))
|
$sql = 'UPDATE regroup SET ord = :ord
|
||||||
throw new \Exception_Forbidden('You can not add document to this Story');
|
WHERE rid_parent = :parent_id AND rid_child = :children_id';
|
||||||
|
$stmt = $story->get_databox()->get_connection()->prepare($sql);
|
||||||
|
|
||||||
/* @var $user \User_Adapter */
|
foreach ($app['request']->get('element') as $record_id => $ord)
|
||||||
|
{
|
||||||
$n = 0;
|
$params = array(
|
||||||
|
':ord' => $ord,
|
||||||
foreach (explode(';', $request->get('lst')) as $sbas_rec)
|
':parent_id' => $story->get_record_id(),
|
||||||
{
|
':children_id' => $record_id
|
||||||
$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)
|
|
||||||
);
|
);
|
||||||
|
$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(
|
$Serializer = $app['Core']['Serializer'];
|
||||||
'/{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);
|
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;
|
return $controllers;
|
||||||
}
|
}
|
||||||
|
@@ -47,11 +47,11 @@ class BasketRepository extends EntityRepository
|
|||||||
|
|
||||||
if ($sort == 'date')
|
if ($sort == 'date')
|
||||||
{
|
{
|
||||||
$dql .= ' ORDER BY b.created DESC';
|
$dql .= ' ORDER BY b.created DESC, e.ord ASC';
|
||||||
}
|
}
|
||||||
elseif ($sort == 'name')
|
elseif ($sort == 'name')
|
||||||
{
|
{
|
||||||
$dql .= ' ORDER BY b.name ASC';
|
$dql .= ' ORDER BY b.name ASC, e.ord ASC';
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = $this->_em->createQuery($dql);
|
$query = $this->_em->createQuery($dql);
|
||||||
@@ -81,7 +81,8 @@ class BasketRepository extends EntityRepository
|
|||||||
(b.usr_id = :usr_id_owner AND b.is_read = false)
|
(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
|
OR (b.usr_id != :usr_id_ownertwo AND p.usr_id = :usr_id_participant
|
||||||
AND p.is_aware = false)
|
AND p.is_aware = false)
|
||||||
)';
|
)
|
||||||
|
ORDER BY e.ord ASC';
|
||||||
|
|
||||||
$params = array(
|
$params = array(
|
||||||
'usr_id_owner' => $user->get_id(),
|
'usr_id_owner' => $user->get_id(),
|
||||||
@@ -119,11 +120,11 @@ class BasketRepository extends EntityRepository
|
|||||||
|
|
||||||
if ($sort == 'date')
|
if ($sort == 'date')
|
||||||
{
|
{
|
||||||
$dql .= ' ORDER BY b.created DESC';
|
$dql .= ' ORDER BY b.created DESC, e.ord ASC';
|
||||||
}
|
}
|
||||||
elseif ($sort == 'name')
|
elseif ($sort == 'name')
|
||||||
{
|
{
|
||||||
$dql .= ' ORDER BY b.name ASC';
|
$dql .= ' ORDER BY b.name ASC, e.ord ASC';
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = $this->_em->createQuery($dql);
|
$query = $this->_em->createQuery($dql);
|
||||||
@@ -151,7 +152,8 @@ class BasketRepository extends EntityRepository
|
|||||||
LEFT JOIN e.validation_datas v
|
LEFT JOIN e.validation_datas v
|
||||||
LEFT JOIN b.validation s
|
LEFT JOIN b.validation s
|
||||||
LEFT JOIN s.participants p
|
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 = $this->_em->createQuery($dql);
|
||||||
$query->setParameters(array('basket_id' => $basket_id));
|
$query->setParameters(array('basket_id' => $basket_id));
|
||||||
@@ -199,7 +201,8 @@ class BasketRepository extends EntityRepository
|
|||||||
FROM Entities\Basket b
|
FROM Entities\Basket b
|
||||||
JOIN b.elements e
|
JOIN b.elements e
|
||||||
WHERE e.record_id = :record_id AND e.sbas_id = e.sbas_id
|
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(
|
$params = array(
|
||||||
'record_id' => $record->get_record_id(),
|
'record_id' => $record->get_record_id(),
|
||||||
@@ -282,6 +285,8 @@ class BasketRepository extends EntityRepository
|
|||||||
$params['description'] = '%' . $query . '%';
|
$params['description'] = '%' . $query . '%';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$dql .= ' ORDER BY e.ord ASC';
|
||||||
|
|
||||||
$query = $this->_em->createQuery($dql);
|
$query = $this->_em->createQuery($dql);
|
||||||
$query->setParameters($params);
|
$query->setParameters($params);
|
||||||
|
|
||||||
|
@@ -1,33 +1,159 @@
|
|||||||
{% import 'common/thumbnail.html' as thumbnail %}
|
{% import 'common/thumbnail.html' as thumbnail %}
|
||||||
|
<div id="reorder_options" class="PNB" style="height:30px;bottom:auto;">
|
||||||
<div class="elements">
|
<span>{% trans 'Reordonner automatiquement' %}</span>
|
||||||
{% for element in basket.getElements() %}
|
<select id="auto_order">
|
||||||
<div id="ORDER_{{ element.getId() }}" class="CHIM diapo" style="height:130px;overflow:hidden;">
|
<option value="">{% trans 'Choisir' %}</option>
|
||||||
<div class="title" title="{{ element.getRecord().get_title() }}" style="position:relative;z-index:1200;height:30px;overflow:visible;text-align:center;">
|
<option value="default">{% trans 'Re-initialiser' %}</option>
|
||||||
<span>{{ element.getRecord().get_title() }}</span>
|
<option value="title">{% trans 'Titre' %}</option>
|
||||||
{{ thumbnail.format(element.getRecord().get_thumbnail(), 80, 80, '', session) }}
|
</select>
|
||||||
<form style="display:none;">
|
<button type="button" class="autoorder">{% trans 'Re-ordonner' %}</button>
|
||||||
<input type="hidden" name="id" value="{{ element.getId() }}"/>
|
<button type="button" class="reverseorder">{% trans 'Inverser' %}</button>
|
||||||
<input type="hidden" name="title" value="{{ element.getRecord().get_title() }}"/>
|
</div>
|
||||||
<input type="hidden" name="default" value="{{ element.getOrd() }}"/>
|
<div style="top:30px;overflow:auto;" id="reorder_box" class="PNB">
|
||||||
</form>
|
<div class="elements">
|
||||||
</div>
|
{% for element in basket.getElements() %}
|
||||||
</div>
|
<div id="ORDER_{{ element.getId() }}" class="CHIM diapo" style="height:130px;overflow:hidden;">
|
||||||
{% endfor %}
|
<div class="title" title="{{ element.getRecord().get_title() }}" style="position:relative;z-index:1200;height:30px;overflow:visible;text-align:center;">
|
||||||
|
<span>{{ element.getRecord().get_title() }}</span>
|
||||||
|
{{ thumbnail.format(element.getRecord().get_thumbnail(), 80, 80, '', session) }}
|
||||||
|
<form style="display:none;">
|
||||||
|
<input type="hidden" name="id" value="{{ element.getId() }}"/>
|
||||||
|
<input type="hidden" name="title" value="{{ element.getRecord().get_title() }}"/>
|
||||||
|
<input type="hidden" name="default" value="{{ element.getOrd() }}"/>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<form name="reorder" method="POST" action="/prod/baskets/{{ basket.getId() }}/reorder/">
|
||||||
|
{% for element in basket.getElements() %}
|
||||||
|
<input type="hidden" name="element[{{ element.getId() }}]" value="{{ element.getOrd() }}"/>
|
||||||
|
{% endfor %}
|
||||||
|
<button>{% trans 'boutton::valider' %}</button>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<form name="reorder" method="POST" action="/prod/baskets/{{ basket.getId() }}/reorder/">
|
|
||||||
{% for element in basket.getElements() %}
|
|
||||||
<input type="hidden" name="element[{{ element.getId() }}]" value="{{ element.getOrd() }}"/>
|
|
||||||
{% endfor %}
|
|
||||||
<button>{% trans 'boutton::valider' %}</button>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
|
|
||||||
var container = $('#DIALOG');
|
var container = p4.Dialog.get(1).getDomElement();
|
||||||
|
|
||||||
|
|
||||||
|
$('button.autoorder', container).bind('click', function(){
|
||||||
|
autoorder();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
$('button.reverseorder', container).bind('click', function(){
|
||||||
|
reverse_order();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
function autoorder()
|
||||||
|
{
|
||||||
|
var val = $.trim($('#auto_order').val());
|
||||||
|
if(val == '')
|
||||||
|
return;
|
||||||
|
|
||||||
|
var sorter = {};
|
||||||
|
|
||||||
|
$('#reorder_box .diapo form').each(function(i,n){
|
||||||
|
var id = $('input[name=id]',n).val();
|
||||||
|
|
||||||
|
switch(val)
|
||||||
|
{
|
||||||
|
case 'title':
|
||||||
|
default:
|
||||||
|
var data = $('input[name=title]',n).val();
|
||||||
|
break;
|
||||||
|
case 'default':
|
||||||
|
var data = $('input[name=default]',n).val();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sorter[id] = data;
|
||||||
|
});
|
||||||
|
|
||||||
|
var data_type = 'string';
|
||||||
|
|
||||||
|
switch(val)
|
||||||
|
{
|
||||||
|
case 'default':
|
||||||
|
var data_type = 'integer';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sorter = arraySortByValue(sorter, data_type);
|
||||||
|
|
||||||
|
var last_moved = false;
|
||||||
|
|
||||||
|
for(i in sorter)
|
||||||
|
{
|
||||||
|
var elem = $('#ORDER_'+i);
|
||||||
|
if(last_moved)
|
||||||
|
{
|
||||||
|
elem.insertAfter(last_moved);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$('#reorder_box .elements').prepend(elem);
|
||||||
|
}
|
||||||
|
last_moved = elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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 = {};
|
||||||
|
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 .elements').append(elem);
|
||||||
|
}
|
||||||
|
last_moved = elem;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$('.elements', container).sortable({
|
$('.elements', container).sortable({
|
||||||
appendTo : container,
|
appendTo : container,
|
||||||
@@ -118,17 +244,24 @@
|
|||||||
|
|
||||||
}).disableSelection();
|
}).disableSelection();
|
||||||
|
|
||||||
var OrderSelection = new Selectable($('#DIALOG .elements'), {
|
var OrderSelection = new Selectable($('.elements', container), {
|
||||||
selector : '.CHIM'
|
selector : '.CHIM'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
$('#DIALOG form[name="reorder"]').bind('submit', function(event){
|
$('form[name="reorder"]', container).bind('submit', function(event){
|
||||||
|
|
||||||
//$this.SetLoader(true);
|
//$this.SetLoader(true);
|
||||||
|
|
||||||
|
|
||||||
var $form = $(this);
|
var $form = $(this);
|
||||||
|
|
||||||
|
$('.elements form', container).each(function(i, el){
|
||||||
|
var id = $('input[name="id"]', $(el)).val();
|
||||||
|
|
||||||
|
$('input[name="element[' + id + ']"]', $form).val(i+1);
|
||||||
|
});
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: $form.attr('method'),
|
type: $form.attr('method'),
|
||||||
url: $form.attr('action'),
|
url: $form.attr('action'),
|
||||||
@@ -138,9 +271,12 @@
|
|||||||
|
|
||||||
},
|
},
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
if(!data.success)
|
||||||
|
{
|
||||||
|
alert(data.message);
|
||||||
|
}
|
||||||
p4.WorkZone.refresh('current');
|
p4.WorkZone.refresh('current');
|
||||||
$('#DIALOG').dialog('close').empty();
|
p4.Dialog.get(1).Close();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
|
294
templates/web/prod/Story/Reorder.html.twig
Normal file
294
templates/web/prod/Story/Reorder.html.twig
Normal file
@@ -0,0 +1,294 @@
|
|||||||
|
{% import 'common/thumbnail.html' as thumbnail %}
|
||||||
|
<div id="reorder_options" class="PNB" style="height:30px;bottom:auto;">
|
||||||
|
<span>{% trans 'Reordonner automatiquement' %}</span>
|
||||||
|
<select id="auto_order">
|
||||||
|
<option value="">{% trans 'Choisir' %}</option>
|
||||||
|
<option value="default">{% trans 'Re-initialiser' %}</option>
|
||||||
|
<option value="title">{% trans 'Titre' %}</option>
|
||||||
|
</select>
|
||||||
|
<button type="button" class="autoorder">{% trans 'Re-ordonner' %}</button>
|
||||||
|
<button type="button" class="reverseorder">{% trans 'Inverser' %}</button>
|
||||||
|
</div>
|
||||||
|
<div style="top:30px;overflow:auto;" id="reorder_box" class="PNB">
|
||||||
|
<div class="elements">
|
||||||
|
{% for element in story.get_children() %}
|
||||||
|
<div id="ORDER_{{ element.get_record_id() }}" class="CHIM diapo" style="height:130px;overflow:hidden;">
|
||||||
|
<div class="title" title="{{ element.get_title() }}" style="position:relative;z-index:1200;height:30px;overflow:visible;text-align:center;">
|
||||||
|
<span>{{ element.get_title() }}</span>
|
||||||
|
{{ thumbnail.format(element.get_thumbnail(), 80, 80, '', session) }}
|
||||||
|
<form style="display:none;">
|
||||||
|
<input type="hidden" name="id" value="{{ element.get_record_id() }}"/>
|
||||||
|
<input type="hidden" name="title" value="{{ element.get_title() }}"/>
|
||||||
|
<input type="hidden" name="default" value="{{ element.get_number() }}"/>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<form name="reorder" method="POST" action="/prod/story/{{story.get_sbas_id() }}/{{story.get_record_id() }}/reorder/">
|
||||||
|
{% for element in story.get_children() %}
|
||||||
|
<input type="hidden" name="element[{{ element.get_record_id() }}]" value="{{ element.get_number() }}"/>
|
||||||
|
{% endfor %}
|
||||||
|
<button>{% trans 'boutton::valider' %}</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
var container = p4.Dialog.get(1).getDomElement();
|
||||||
|
|
||||||
|
|
||||||
|
$('button.autoorder', container).bind('click', function(){
|
||||||
|
autoorder();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
$('button.reverseorder', container).bind('click', function(){
|
||||||
|
reverse_order();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
function autoorder()
|
||||||
|
{
|
||||||
|
var val = $.trim($('#auto_order').val());
|
||||||
|
if(val == '')
|
||||||
|
return;
|
||||||
|
|
||||||
|
var sorter = {};
|
||||||
|
|
||||||
|
$('#reorder_box .diapo form').each(function(i,n){
|
||||||
|
var id = $('input[name=id]',n).val();
|
||||||
|
|
||||||
|
switch(val)
|
||||||
|
{
|
||||||
|
case 'title':
|
||||||
|
default:
|
||||||
|
var data = $('input[name=title]',n).val();
|
||||||
|
break;
|
||||||
|
case 'default':
|
||||||
|
var data = $('input[name=default]',n).val();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sorter[id] = data;
|
||||||
|
});
|
||||||
|
|
||||||
|
var data_type = 'string';
|
||||||
|
|
||||||
|
switch(val)
|
||||||
|
{
|
||||||
|
case 'default':
|
||||||
|
var data_type = 'integer';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sorter = arraySortByValue(sorter, data_type);
|
||||||
|
|
||||||
|
var last_moved = false;
|
||||||
|
|
||||||
|
for(i in sorter)
|
||||||
|
{
|
||||||
|
var elem = $('#ORDER_'+i);
|
||||||
|
if(last_moved)
|
||||||
|
{
|
||||||
|
elem.insertAfter(last_moved);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$('#reorder_box .elements').prepend(elem);
|
||||||
|
}
|
||||||
|
last_moved = elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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 = {};
|
||||||
|
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 .elements').append(elem);
|
||||||
|
}
|
||||||
|
last_moved = elem;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$('.elements', container).sortable({
|
||||||
|
appendTo : container,
|
||||||
|
placeholder: 'diapo ui-sortable-placeholder',
|
||||||
|
distance:20,
|
||||||
|
cursorAt: {
|
||||||
|
top:10,
|
||||||
|
left:-20
|
||||||
|
},
|
||||||
|
items:'div.diapo',
|
||||||
|
scroll:true,
|
||||||
|
scrollSensitivity:40,
|
||||||
|
scrollSpeed:30,
|
||||||
|
start:function(event, ui){
|
||||||
|
var selected = $('.selected',container);
|
||||||
|
|
||||||
|
selected.each(function(i,n){
|
||||||
|
$(n).attr('position',i);
|
||||||
|
});
|
||||||
|
|
||||||
|
var n = selected.length - 1;
|
||||||
|
|
||||||
|
$('.selected:visible', container).hide();
|
||||||
|
|
||||||
|
while(n > 0)
|
||||||
|
{
|
||||||
|
$('<div style="height:130px;" class="diapo ui-sortable-placeholderfollow"></div>').insertAfter($('.diapo.ui-sortable-placeholder', cont));
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
stop:function(event, ui){
|
||||||
|
|
||||||
|
$('.diapo.ui-sortable-placeholderfollow', container).remove();
|
||||||
|
|
||||||
|
var main_id = $(ui.item[0]).attr('id');
|
||||||
|
|
||||||
|
var selected = $('.selected',container);
|
||||||
|
var sorter = new Array();
|
||||||
|
|
||||||
|
|
||||||
|
selected.each(function(i,n){
|
||||||
|
|
||||||
|
var position = parseInt($(n).attr('position'));
|
||||||
|
|
||||||
|
if(position !== '')
|
||||||
|
{
|
||||||
|
sorter[position] = $(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
var id = $(n).attr('id');
|
||||||
|
if(id == main_id)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
var before = true;
|
||||||
|
var last_moved = $(ui.item[0]);
|
||||||
|
$(sorter).each(function(i,n){
|
||||||
|
$(n).show().removeAttr('position');
|
||||||
|
if($(n).attr('id') == main_id)
|
||||||
|
{
|
||||||
|
before = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(before)
|
||||||
|
$(n).insertBefore($(ui.item[0]));
|
||||||
|
else
|
||||||
|
$(n).insertAfter($(last_moved));
|
||||||
|
|
||||||
|
}
|
||||||
|
last_moved = sorter[i];
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
change:function(){
|
||||||
|
$('.diapo.ui-sortable-placeholderfollow', container).remove();
|
||||||
|
|
||||||
|
var n = OrderSelection.length() - 1 ;
|
||||||
|
while(n > 0)
|
||||||
|
{
|
||||||
|
$('<div style="height:130px;" class="diapo ui-sortable-placeholderfollow"></div>').insertAfter($('.diapo.ui-sortable-placeholder', container));
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}).disableSelection();
|
||||||
|
|
||||||
|
var OrderSelection = new Selectable($('.elements', container), {
|
||||||
|
selector : '.CHIM'
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$('form[name="reorder"]', container).bind('submit', function(event){
|
||||||
|
|
||||||
|
//$this.SetLoader(true);
|
||||||
|
|
||||||
|
|
||||||
|
var $form = $(this);
|
||||||
|
|
||||||
|
$('.elements form', container).each(function(i, el){
|
||||||
|
var id = $('input[name="id"]', $(el)).val();
|
||||||
|
|
||||||
|
$('input[name="element[' + id + ']"]', $form).val(i+1);
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: $form.attr('method'),
|
||||||
|
url: $form.attr('action'),
|
||||||
|
data: $form.serializeArray(),
|
||||||
|
dataType: 'json',
|
||||||
|
beforeSend:function(){
|
||||||
|
|
||||||
|
},
|
||||||
|
success: function(data){
|
||||||
|
if(!data.success)
|
||||||
|
{
|
||||||
|
alert(data.message);
|
||||||
|
}
|
||||||
|
p4.WorkZone.refresh('current', null, false, 'story');
|
||||||
|
p4.Dialog.get(1).Close();
|
||||||
|
|
||||||
|
return;
|
||||||
|
},
|
||||||
|
error: function(){
|
||||||
|
|
||||||
|
},
|
||||||
|
timeout: function(){
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
@@ -1091,18 +1091,6 @@
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div id="dialog_dwnl" title="{% trans 'action : exporter' %}" style="display:none;"></div>
|
<div id="dialog_dwnl" title="{% trans 'action : exporter' %}" style="display:none;"></div>
|
||||||
<div title="{% trans 'Re-ordonner' %}" id="reorder_dialog" style="position:relative;overflow:hidden;">
|
|
||||||
<div id="reorder_options" class="PNB" style="height:30px;bottom:auto;">
|
|
||||||
<span>{% trans 'Reordonner automatiquement' %}</span>
|
|
||||||
<select id="auto_order">
|
|
||||||
<option value="">{% trans 'Choisir' %}</option>
|
|
||||||
<option value="default">{% trans 'Re-initialiser' %}</option>
|
|
||||||
<option value="title">{% trans 'Titre' %}</option>
|
|
||||||
</select>
|
|
||||||
<input type="button" onclick="autoorder();return false;" value="{% trans 'Re-ordonner' %}"/>
|
|
||||||
<input type="button" onclick="reverse_order();return false;" value="{% trans 'Inverser' %}" style="float:right;"/></div>
|
|
||||||
<div style="top:30px;overflow:auto;" id="reorder_box" class="PNB loading"></div>
|
|
||||||
</div>
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
{% include "prod/thesaurus.js" %}
|
{% include "prod/thesaurus.js" %}
|
||||||
</script>
|
</script>
|
||||||
|
@@ -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)
|
function set_up_feed_box(data)
|
||||||
{
|
{
|
||||||
var $feed_box = $('#modal_feed');
|
var $feed_box = $('#modal_feed');
|
||||||
|
Reference in New Issue
Block a user