瀏覽代碼

Detect package name from composer.json.

xaav 13 年之前
父節點
當前提交
01eb02dd44

+ 38 - 11
src/Packagist/WebBundle/Controller/WebController.php

@@ -12,6 +12,8 @@
 
 namespace Packagist\WebBundle\Controller;
 
+use Packagist\WebBundle\Form\ConfirmForm;
+use Packagist\WebBundle\Form\ConfirmFormType;
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 use Packagist\WebBundle\Entity\Package;
 use Packagist\WebBundle\Entity\Version;
@@ -56,27 +58,52 @@ class WebController extends Controller
         $form = $this->get('form.factory')->create(new PackageType, $package);
 
         $request = $this->get('request');
+        $provider = $this->get('packagist.repository_provider');
         if ($request->getMethod() == 'POST') {
             $form->bindRequest($request);
             if ($form->isValid()) {
-                try {
-                    $user = $this->getUser();
-                    $package->addMaintainers($user);
-                    $em = $this->get('doctrine')->getEntityManager();
-                    $em->persist($package);
-                    $em->flush();
+                $user = $this->getUser();
+                $package->addMaintainers($user);
+                $repository = $provider->getRepository($package->getRepository());
 
-                    $this->get('session')->setFlash('success', $package->getName().' has been added to the package list, the repository will be parsed for releases in a bit.');
-                    return new RedirectResponse($this->generateUrl('home'));
-                } catch (\PDOException $e) {
-                    $this->get('session')->setFlash('error', $package->getName().' could not be saved in our database, most likely the name is already in use.');
-                }
+                $composerFile = $repository->getComposerInformation('master');
+                $package->setName($composerFile['name']);
+
+                $this->get('session')->set('package', $package);
+                return new RedirectResponse($this->generateUrl('confirm'));
             }
         }
 
         return array('form' => $form->createView(), 'page' => 'submit');
     }
 
+    /**
+     * @Template()
+     * @Route("/submit/confirm", name="confirm")
+     */
+    public function confirmPackageAction()
+    {
+        if(($package = $this->get('session')->get('package')) instanceof Package) {
+            $confirmForm = new ConfirmForm;
+            $form = $this->createForm(new ConfirmFormType, $confirmForm);
+            $request = $this->getRequest();
+            if($request->getMethod() == 'POST') {
+                $form->bindRequest($request);
+                if($form->isValid()){
+                    try {
+                        $this->get('session')->remove('package');
+                        $this->getDoctrine()->getEntityManager()->persist($package);
+                        $this->get('session')->setFlash('success', $package->getName().' has been added to the package list, the repository will be parsed for releases in a bit.');
+                        return new RedirectResponse($this->generateUrl('home'));
+                    } catch (\PDOException $e) {
+                        $this->get('session')->setFlash('error', $package->getName().' could not be saved in our database, most likely the name is already in use.');
+                    }
+                }
+            }
+        }
+        return array('form' => $form->createView(), 'page' => 'confirm');
+    }
+
     /**
      * @Template()
      * @Route("/about", name="about")

+ 3 - 1
src/Packagist/WebBundle/Entity/Package.php

@@ -23,7 +23,7 @@ use Doctrine\Common\Collections\ArrayCollection;
  *     name="package",
  *     uniqueConstraints={@ORM\UniqueConstraint(name="name_idx", columns={"name"})}
  * )
- * @Assert\Callback(methods={"isRepositoryValid", "isPackageUnique"})
+ * @Assert\Callback(methods={"isPackageUnique"})
  * @author Jordi Boggiano <j.boggiano@seld.be>
  */
 class Package
@@ -108,6 +108,7 @@ class Package
         return json_encode($data);
     }
 
+/*
     public function isRepositoryValid(ExecutionContext $context)
     {
         $propertyPath = $context->getPropertyPath() . '.repository';
@@ -140,6 +141,7 @@ class Package
             return;
         }
     }
+*/
 
     public function isPackageUnique(ExecutionContext $context)
     {

+ 7 - 0
src/Packagist/WebBundle/Form/ConfirmForm.php

@@ -0,0 +1,7 @@
+<?php
+
+namespace Packagist\WebBundle\Form;
+
+class ConfirmForm
+{
+}

+ 33 - 0
src/Packagist/WebBundle/Form/ConfirmFormType.php

@@ -0,0 +1,33 @@
+<?php
+
+/*
+ * This file is part of Packagist.
+ *
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
+ *     Nils Adermann <naderman@naderman.de>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Packagist\WebBundle\Form;
+
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\FormBuilder;
+
+/**
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class ConfirmFormType extends AbstractType
+{
+    public function buildForm(FormBuilder $builder, array $options)
+    {
+    }
+
+    public function getDefaultOptions(array $options)
+    {
+        return array(
+            'data_class' => 'Packagist\WebBundle\Form\ConfirmForm',
+        );
+    }
+}

+ 0 - 1
src/Packagist/WebBundle/Form/PackageType.php

@@ -22,7 +22,6 @@ class PackageType extends AbstractType
 {
     public function buildForm(FormBuilder $builder, array $options)
     {
-        $builder->add('name');
         $builder->add('repository');
     }
 

+ 10 - 0
src/Packagist/WebBundle/Resources/views/Web/confirmPackage.html.twig

@@ -0,0 +1,10 @@
+{% extends "PackagistWebBundle::layout.html.twig" %}
+
+{% block content %}
+    <h1>Confirm package</h1>
+    <form action="" method="POST" {{ form_enctype(form) }}>
+        {{ form_errors(form) }}
+        {{ form_rest(form) }}
+        <input type="submit" value="Submit" />
+    </form>
+{% endblock %}

+ 0 - 5
src/Packagist/WebBundle/Resources/views/Web/submitPackage.html.twig

@@ -4,11 +4,6 @@
     <h1>Submit package</h1>
     <form action="" method="POST" {{ form_enctype(form) }}>
         {{ form_errors(form) }}
-        <p>
-            {{ form_label(form.name, "Unique Package Name") }}
-            {{ form_errors(form.name) }}
-            {{ form_widget(form.name) }}
-        </p>
         <p>
             {{ form_label(form.repository, "Repository URL (Git only at the moment)") }}
             {{ form_errors(form.repository) }}