/** * Update existing network from the submitted data or create a new network at a specific location. * * @ApiDoc( * resource = true, * input = "CertUnlp\NgenBundle\Form\NetworkType", * statusCodes = { * 204 = "Returned when successful", * 400 = "Returned when the form has errors" * } * ) * * @FOS\View( * template = "CertUnlpNgenBundle:Network:editNetwork.html.twig", * templateVar = "form" * ) * * @param Request $request the request object * @param int $id the network id * * @return FormTypeInterface|View * * @throws NotFoundHttpException when network not exist * @FOS\Patch("/networks/{ip}/{ipMask}") * * @ParamConverter("network", class="CertUnlpNgenBundle:Network", options={"repository_method" = "findOneBy"}) * @FOS\QueryParam(name="ip",strict=true ,requirements="[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}", description="An IP.") * @FOS\QueryParam(name="ipMask",strict=true ,requirements="[0-32]", description="A decimal ip mask.") */ public function patchNetworkAction(Request $request, Network $network) { try { $parameters = $request->request->all(); unset($parameters['_method'], $parameters['force_edit'], $parameters['reactivate']); $DBnetwork = $this->container->get('cert_unlp.ngen.network.handler')->get(['ip' => $request->request->get('ip'), 'ipMask' => $request->request->get('ipMask')]); if ($request->get('reactivate')) { $network->setIsActive(TRUE); } if (!$network->equals($DBnetwork)) { if ($request->get('force_edit')) { $statusCode = Codes::HTTP_NO_CONTENT; $network = $this->container->get('cert_unlp.ngen.network.handler')->patch($network, $parameters); } else { $statusCode = Codes::HTTP_CREATED; $this->container->get('cert_unlp.ngen.network.handler')->delete($network); $network = $this->container->get('cert_unlp.ngen.network.handler')->post($parameters); } } else { $statusCode = Codes::HTTP_NO_CONTENT; $network = $this->container->get('cert_unlp.ngen.network.handler')->patch($network, $parameters); } $routeOptions = array('ip' => $network->getIp(), 'ipMask' => $network->getIpMask(), '_format' => $request->get('_format')); return $this->routeRedirectView('api_1_get_network', $routeOptions, $statusCode); } catch (InvalidFormException $exception) { return $exception->getForm(); } }