|
@@ -5,6 +5,14 @@ namespace CablemodemBundle\Controller\REST;
|
|
|
use CablemodemBundle\Form\CablemodemType;
|
|
|
use FOS\RestBundle\Controller\Annotations\RouteResource;
|
|
|
use WebserviceBundle\Controller\RESTController;
|
|
|
+use FOS\RestBundle\Controller\Annotations\View;
|
|
|
+use FOS\RestBundle\View\View as FOSView;
|
|
|
+use Symfony\Component\HttpFoundation\Request;
|
|
|
+use FOS\RestBundle\Util\Codes;
|
|
|
+
|
|
|
+use FOS\RestBundle\Controller\Annotations\Patch;
|
|
|
+use FOS\RestBundle\Controller\Annotations\Get;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* Cablemodem controller.
|
|
@@ -29,4 +37,46 @@ class CablemodemRESTController extends RESTController
|
|
|
return get_class(new CablemodemType());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * GET Route annotation.
|
|
|
+ * @Get("/cablemodem/{id}/apply/{workflow}/{transition}")
|
|
|
+ * @View(statusCode=201, serializerEnableMaxDepthChecks=true)
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @param $id
|
|
|
+ * @param $transition
|
|
|
+ * @param $workflow
|
|
|
+ *
|
|
|
+ * @return Response
|
|
|
+ */
|
|
|
+ public function applyAction(Request $request, Int $id, String $workflow, String $transition)
|
|
|
+ {
|
|
|
+ $tenancyService = $this->getTenancyService();
|
|
|
+
|
|
|
+ try {
|
|
|
+ $em = $this->container->get("doctrine.orm.entity_manager");
|
|
|
+ $tenancyService->disableFilter();
|
|
|
+ $entity = $em->getRepository('CablemodemBundle:Cablemodem')->find($id);
|
|
|
+
|
|
|
+ $wr = $this->container->get("workflow.registry");
|
|
|
+ $wf = $wr->get($entity, $workflow);
|
|
|
+
|
|
|
+ $newState = $wf->apply($entity, $transition);
|
|
|
+
|
|
|
+ $validator = $this->container->get('validator');
|
|
|
+ $errors = $validator->validate($entity);
|
|
|
+ if (count($errors) > 0) {
|
|
|
+ $errorsString = (string) $errors;
|
|
|
+ $tenancyService->enableFilter();
|
|
|
+ return FOSView::create($errorsString, Codes::HTTP_INTERNAL_SERVER_ERROR);
|
|
|
+ } else {
|
|
|
+ $em->persist($entity);
|
|
|
+ $em->flush($entity);
|
|
|
+ $tenancyService->enableFilter();
|
|
|
+ return $entity;
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ return FOSView::create($e->getMessage(), Codes::HTTP_INTERNAL_SERVER_ERROR);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|