ソースを参照

Merge remote-tracking branch 'timmillwood/master'

Jordi Boggiano 10 年 前
コミット
611338a2bf
1 ファイル変更36 行追加0 行削除
  1. 36 0
      src/Packagist/WebBundle/Controller/ApiController.php

+ 36 - 0
src/Packagist/WebBundle/Controller/ApiController.php

@@ -56,6 +56,42 @@ class ApiController extends Controller
         return new Response('Horrible misconfiguration or the dumper script messed up, you need to use app/console packagist:dump', 404);
     }
 
+    /**
+     * @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->repository = $url;
+        $errors = $this->get('validator')->validate($package)
+        if (count($errors) > 0) {
+            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')->crit($e->getMessage(), array('exception', $e));
+            return new JsonResponse(array('status' => 'error', 'message' => 'Error saving package'), 500); 
+        }
+
+        return new JsonResponse(array('status' => 'success'), 202);
+    }
+
     /**
      * @Route("/api/update-package", name="generic_postreceive", defaults={"_format" = "json"})
      * @Route("/api/github", name="github_postreceive", defaults={"_format" = "json"})