Fix Basket/Story sorting

This commit is contained in:
Romain Neutron
2012-02-23 14:47:56 +01:00
parent 1f578810f8
commit 906a26d11d
7 changed files with 1055 additions and 656 deletions

View File

@@ -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;
}

View File

@@ -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;
}