Example #1
0
 /**
  * @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);
 }
Example #2
0
 /**
  * @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);
 }