|
@@ -60,14 +60,14 @@ abstract class RESTController extends VoryxController
|
|
|
$filters = !is_null($paramFetcher->get('filters')) ? $paramFetcher->get('filters') : array();
|
|
|
if (isset($filters['tenancyId'])) {
|
|
|
// tengo que buscar por tenencia.
|
|
|
- $tenancyService = $this->container->get('base_tenancy.tenancy_service');
|
|
|
+ $tenancyService = $this->getTenancyService();
|
|
|
$tenancyService->setTenancy($filters['tenancyId']);
|
|
|
unset($filters['tenancyId']);
|
|
|
}
|
|
|
if (isset($filters['disableTenancy'])) {
|
|
|
$disableTenancy = true;
|
|
|
// tengo que buscar por tenencia.
|
|
|
- $tenancyService = $this->container->get('base_tenancy.tenancy_service');
|
|
|
+ $tenancyService = $this->getTenancyService();
|
|
|
$tenancyService->disableFilter();
|
|
|
unset($filters['disableTenancy']);
|
|
|
}
|
|
@@ -101,7 +101,7 @@ abstract class RESTController extends VoryxController
|
|
|
$repo = $em->getRepository($this->getRepository());
|
|
|
$entities = $repo->matching($criteria)->toArray();
|
|
|
|
|
|
- if($disableTenancy) $tenancyService->enableFilter();
|
|
|
+ if ($disableTenancy) $tenancyService->enableFilter();
|
|
|
if ($entities) {
|
|
|
return $entities;
|
|
|
}
|
|
@@ -116,8 +116,9 @@ abstract class RESTController extends VoryxController
|
|
|
$limit = $paramFetcher->get('limit');
|
|
|
$order_by = $paramFetcher->get('order_by');
|
|
|
$entities = $em->getRepository($this->getRepository())->findBy($filters, $order_by, $limit, $offset);
|
|
|
- if($disableTenancy) $tenancyService->enableFilter();
|
|
|
-
|
|
|
+ if ($disableTenancy) {
|
|
|
+ $tenancyService->enableFilter();
|
|
|
+ }
|
|
|
if ($entities) {
|
|
|
return $entities;
|
|
|
}
|
|
@@ -130,16 +131,69 @@ abstract class RESTController extends VoryxController
|
|
|
|
|
|
return array();
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* @return object Retorna el nombre de la Entity de trabajo.
|
|
|
*/
|
|
|
- public function getObject()
|
|
|
+ public function getObjectNew($entity = null)
|
|
|
{
|
|
|
- $obj = $this->getDoctrine()->getManager()->getMetadataFactory()->getMetadataFor($this->getRepository())->getName();
|
|
|
+ if ($entity == null) {
|
|
|
+ $entity = $this->getRepository();
|
|
|
+ }
|
|
|
+ $obj = $this->getDoctrine()->getManager()->getMetadataFactory()->getMetadataFor($entity)->getName();
|
|
|
$rc = new ReflectionClass($obj);
|
|
|
return $rc->newInstance();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param string $entity Contiene el nombre de la entidad a buscar en el repositorio.
|
|
|
+ * @param string $id Contiene el id a buscar.
|
|
|
+ * @return object Retorna el nombre de la Entity de trabajo.
|
|
|
+ */
|
|
|
+ public function getObjectFindById($entity = null, $id)
|
|
|
+ {
|
|
|
+ if ($entity == null) {
|
|
|
+ $entity = $this->getRepository();
|
|
|
+ }
|
|
|
+ return $this->getDoctrine()->getRepository($entity)->findOneBy(array('id' => $id));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @return object Retorna el objeto tenencia.
|
|
|
+ */
|
|
|
+ protected function getObjectTenancy()
|
|
|
+ {
|
|
|
+ return $this->getObjectNew('BaseTenancyBundle:Tenancy');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @return object Retorna el servicio de tenencias.
|
|
|
+ */
|
|
|
+ protected function getTenancyService()
|
|
|
+ {
|
|
|
+ return $this->get('base_tenancy.tenancy_service');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Funcion que checkea y setea la tenencia en el objeto.
|
|
|
+ * @param Request $request Contiene el request.
|
|
|
+ * @param object $entity Contiene la entidad a chequear.
|
|
|
+ * @return object Retorna el objeto procesado.
|
|
|
+ */
|
|
|
+ private function checkTenancy(Request $request, $entity)
|
|
|
+ {
|
|
|
+ $parameters = $request->request->all();
|
|
|
+ $service = $this->getTenancyService();
|
|
|
+ if ($service->implementTenancyInterface($entity)) {
|
|
|
+ if (array_key_exists('tenancy', $parameters)) {
|
|
|
+ $tenancy = $this->getDoctrine()->getRepository('BaseTenancyBundle:Tenancy')->findOneById($parameters['tenancy']);
|
|
|
+ $entity->setTenancy($tenancy);
|
|
|
+ $service->setTenancy($parameters['tenancy']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $entity;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Create a Client entity.
|
|
|
*
|
|
@@ -148,21 +202,17 @@ abstract class RESTController extends VoryxController
|
|
|
* @param Request $request Contiene el request.
|
|
|
*
|
|
|
* @return FOSView|mixed Retorna el FOSView o la entidad.
|
|
|
- *
|
|
|
*/
|
|
|
public function postAction(Request $request)
|
|
|
{
|
|
|
-// file_put_contents("/tmp/t", "LLEGO\n",8);
|
|
|
- $entity = $this->getObject();
|
|
|
+ $entity = $this->checkTenancy($request, $this->getObjectNew());
|
|
|
$form = $this->createForm($this->getFormEntityType(), $entity, array("method" => $request->getMethod()));
|
|
|
$this->removeExtraFields($request, $form);
|
|
|
$form->handleRequest($request);
|
|
|
-
|
|
|
- if ($form->isSubmitted() && $form->isValid()) {
|
|
|
+ if ($form->isValid()) {
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
$em->persist($entity);
|
|
|
$em->flush();
|
|
|
-
|
|
|
return $entity;
|
|
|
}
|
|
|
return FOSView::create(array('errors' => $form->getErrors()), Codes::HTTP_INTERNAL_SERVER_ERROR);
|
|
@@ -181,17 +231,25 @@ abstract class RESTController extends VoryxController
|
|
|
public function putAction(Request $request, $entity = null)
|
|
|
{
|
|
|
try {
|
|
|
+ // obtengo el entitymanager
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
+ // obtengo la entidad que deseo modificar
|
|
|
+ $entity = $this->getObjectFindById(null, $entity);
|
|
|
+ // seteo la tenencia en caso de necesitarla
|
|
|
+ $entity = $this->checkTenancy($request, $entity);
|
|
|
$request->setMethod('PATCH'); //Treat all PUTs as PATCH
|
|
|
+ // creo el formulario, esto no lo tenia ningun web service
|
|
|
$form = $this->createForm($this->getFormEntityType(), $entity, array("method" => $request->getMethod()));
|
|
|
+ // saco los campos extras
|
|
|
$this->removeExtraFields($request, $form);
|
|
|
+ // agrego el handler
|
|
|
$form->handleRequest($request);
|
|
|
+ // valido el formulario
|
|
|
if ($form->isValid()) {
|
|
|
+ // actualizo los datos.
|
|
|
$em->flush();
|
|
|
-
|
|
|
return $entity;
|
|
|
}
|
|
|
-
|
|
|
return FOSView::create(array('errors' => $form->getErrors()), Codes::HTTP_INTERNAL_SERVER_ERROR);
|
|
|
} catch (\Exception $e) {
|
|
|
return FOSView::create($e->getMessage(), Codes::HTTP_INTERNAL_SERVER_ERROR);
|
|
@@ -227,9 +285,9 @@ abstract class RESTController extends VoryxController
|
|
|
{
|
|
|
try {
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
+ $entity = $this->getObjectFindById(null, $entity);
|
|
|
$em->remove($entity);
|
|
|
$em->flush();
|
|
|
-
|
|
|
return null;
|
|
|
} catch (\Exception $e) {
|
|
|
return FOSView::create($e->getMessage(), Codes::HTTP_INTERNAL_SERVER_ERROR);
|