/** * @Route("/api/create-package", name="generic_create", defaults={"_format" = "json"}) * @Method({"POST"}) */ public function createPackageAction(Request $request) { $payload = json_decode($request->getContent(), true); if (!$payload) { return new JsonResponse(array('status' => 'error', 'message' => 'Missing payload parameter'), 406); } $url = $payload['repository']['url']; $package = new Package(); $package->setEntityRepository($this->getDoctrine()->getRepository('PackagistWebBundle:Package')); $package->setRouter($this->get('router')); $user = $this->findUser($request); $package->addMaintainer($user); $package->setRepository($url); $errors = $this->get('validator')->validate($package); if (count($errors) > 0) { $errorArray = array(); foreach ($errors as $error) { $errorArray[$error->getPropertyPath()] = $error->getMessage(); } return new JsonResponse(array('status' => 'error', 'message' => $errorArray), 406); } try { $em = $this->getDoctrine()->getManager(); $em->persist($package); $em->flush(); } catch (\Exception $e) { $this->get('logger')->critical($e->getMessage(), array('exception', $e)); return new JsonResponse(array('status' => 'error', 'message' => 'Error saving package'), 500); } return new JsonResponse(array('status' => 'success'), 202); }
/** * @Route("/packages/fetch-info", name="submit.fetch_info", defaults={"_format"="json"}) */ public function fetchInfoAction(Request $req) { $package = new Package(); $package->setEntityRepository($this->getDoctrine()->getRepository('PackagistWebBundle:Package')); $package->setRouter($this->get('router')); $form = $this->createForm(new PackageType(), $package); $user = $this->getUser(); $package->addMaintainer($user); $response = array('status' => 'error', 'reason' => 'No data posted.'); if ('POST' === $req->getMethod()) { $form->bind($req); if ($form->isValid()) { list(, $name) = explode('/', $package->getName(), 2); $existingPackages = $this->getDoctrine()->getRepository('PackagistWebBundle:Package')->createQueryBuilder('p')->where('p.name LIKE ?0')->setParameters(array('%/' . $name))->getQuery()->getResult(); $similar = array(); /** @var Package $existingPackage */ foreach ($existingPackages as $existingPackage) { $similar[] = array('name' => $existingPackage->getName(), 'url' => $this->generateUrl('view_package', array('name' => $existingPackage->getName()), true)); } $response = array('status' => 'success', 'name' => $package->getName(), 'similar' => $similar); } else { $errors = array(); if (count($form->getErrors())) { foreach ($form->getErrors() as $error) { $errors[] = $error->getMessageTemplate(); } } foreach ($form->all() as $child) { if (count($child->getErrors())) { foreach ($child->getErrors() as $error) { $errors[] = $error->getMessageTemplate(); } } } $response = array('status' => 'error', 'reason' => $errors); } } return new JsonResponse($response); }