Forráskód Böngészése

Merge remote-tracking branch 'xaav/name_detection'

Jordi Boggiano 14 éve
szülő
commit
c7af5dc238

+ 0 - 0
app/console


+ 0 - 0
bin/vendors


+ 53 - 15
src/Packagist/WebBundle/Controller/WebController.php

@@ -12,6 +12,9 @@
 
 namespace Packagist\WebBundle\Controller;
 
+use Packagist\WebBundle\Form\ConfirmPackageType;
+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;
@@ -53,30 +56,65 @@ class WebController extends Controller
     public function submitPackageAction()
     {
         $package = new Package;
-        $form = $this->get('form.factory')->create(new PackageType, $package);
+        $form = $this->createForm(new PackageType, $package);
 
-        $request = $this->get('request');
+        $request = $this->getRequest();
         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();
-
-                    $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.');
-                }
+            $children = $form->getChildren();
+            if($children['repository']->isValid()) {
+                $this->get('session')->set('repository', $package->getRepository());
+
+                return new RedirectResponse($this->generateUrl('confirm'));
             }
         }
 
         return array('form' => $form->createView(), 'page' => 'submit');
     }
 
+    /**
+     * @Template()
+     * @Route("/submit/confirm", name="confirm")
+     */
+    public function confirmPackageAction()
+    {
+        $session = $this->get('session');
+        $em = $this->getDoctrine()->getEntityManager();
+        $package = new Package;
+
+        if($repository = $session->get('repository')) {
+            $session->remove('repository');
+            $package->setRepository($repository);
+            $package->fromProvider($this->get('packagist.repository_provider'));
+        }
+
+        $form = $this->createForm(new ConfirmPackageType, $package);
+
+        $request = $this->getRequest();
+        if ($request->getMethod() == 'POST') {
+            $form->bindRequest($request);
+            $package->fromProvider($this->get('packagist.repository_provider'));
+
+            $children = $form->getChildren();
+            if ($children['repository']->isValid()) {
+                $user = $this->getUser();
+                $package->addMaintainers($user);
+
+                $em = $this->getDoctrine()->getEntityManager();
+                $em->persist($package);
+                $em->flush();
+
+                $this->get('session')->remove('repository');
+
+                return new RedirectResponse($this->generateUrl('home'));
+            }
+        } elseif (!$repository) {
+            return new RedirectResponse($this->generateUrl('submit'));
+        }
+
+        return array('form' => $form->createView(), 'package' => $package, 'page' => 'submit');
+    }
+
     /**
      * @Template()
      * @Route("/about", name="about")

+ 0 - 0
src/Packagist/WebBundle/Entity/Author.php


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

@@ -12,6 +12,8 @@
 
 namespace Packagist\WebBundle\Entity;
 
+use Packagist\WebBundle\Repository\RepositoryProviderInterface;
+
 use Doctrine\ORM\Mapping as ORM;
 use Symfony\Component\Validator\Constraints as Assert;
 use Symfony\Component\Validator\ExecutionContext;
@@ -23,7 +25,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 +110,7 @@ class Package
         return json_encode($data);
     }
 
+/*
     public function isRepositoryValid(ExecutionContext $context)
     {
         $propertyPath = $context->getPropertyPath() . '.repository';
@@ -140,12 +143,21 @@ class Package
             return;
         }
     }
+*/
 
     public function isPackageUnique(ExecutionContext $context)
     {
         // TODO check for uniqueness of package name
     }
 
+    public function fromProvider(RepositoryProviderInterface $provider)
+    {
+        $repo = $provider->getRepository($this->repository);
+        $composerFile = $repo->getComposerInformation('master');
+
+        $this->setName($composerFile['name']);
+    }
+
     /**
      * Get id
      *

+ 0 - 6
src/Packagist/WebBundle/Entity/PackageRepository.php

@@ -15,12 +15,6 @@ namespace Packagist\WebBundle\Entity;
 use Doctrine\ORM\EntityRepository;
 
 /**
- * @ORM\Entity
- * @ORM\Table(
- *     name="package",
- *     uniqueConstraints={@ORM\UniqueConstraint(name="name_idx", columns={"name"})}
- * )
- * @Assert\Callback(methods={"isRepositoryValid", "isPackageUnique"})
  * @author Jordi Boggiano <j.boggiano@seld.be>
  */
 class PackageRepository extends EntityRepository

+ 0 - 0
src/Packagist/WebBundle/Entity/Requirement.php


+ 13 - 0
src/Packagist/WebBundle/Form/ConfirmPackageType.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace Packagist\WebBundle\Form;
+
+use Symfony\Component\Form\FormBuilder;
+
+class ConfirmPackageType extends PackageType
+{
+    public function buildForm(FormBuilder $builder, array $options)
+    {
+        $builder->add('repository', 'hidden');
+    }
+}

+ 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');
     }
 

BIN
src/Packagist/WebBundle/Resources/public/img/loader.gif


+ 9 - 0
src/Packagist/WebBundle/Resources/public/js/main.js

@@ -0,0 +1,9 @@
+window.showLoader = function () {
+	$('#loader').removeClass('hidden');
+	$('#loader').show();
+}
+
+window.hideLoader = function() {
+	$('#loader').addClass('hidden');
+	$('#loader').hide();	
+}

+ 0 - 0
src/Packagist/WebBundle/Resources/public/js/submitPackage.js


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

@@ -0,0 +1,17 @@
+{% extends "PackagistWebBundle::layout.html.twig" %}
+
+{% block scripts %}
+    <script src="{{ asset('bundles/packagistweb/js/submitPackage.js')}}"></script>
+{% endblock %}
+
+{% block content %}
+    <h1>Submit package</h1>
+    <form action="" method="POST" {{ form_enctype(form) }}>
+        <div id="form">
+            {{ form_widget(form) }}
+            Package Name: {{ package.name }}
+            Package Repository {{ package.repository }}
+            <input id="submit" type="submit" value="Submit" />
+        </div>
+    </form>
+{% endblock %}

+ 14 - 13
src/Packagist/WebBundle/Resources/views/Web/submitPackage.html.twig

@@ -1,20 +1,21 @@
 {% extends "PackagistWebBundle::layout.html.twig" %}
 
+{% block scripts %}
+    <script src="{{ asset('bundles/packagistweb/js/submitPackage.js')}}"></script>
+{% endblock %}
+
 {% block content %}
     <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) }}
-            {{ form_widget(form.repository) }}
-        </p>
-        {{ form_rest(form) }}
-        <input type="submit" value="Submit" />
+        <div id="form">
+            {{ form_errors(form) }}
+            <p>
+                {{ form_label(form.repository, "Repository URL (Git only at the moment)") }}
+                {{ form_errors(form.repository) }}
+                {{ form_widget(form.repository) }}
+            </p>
+            {{ form_rest(form) }}
+            <input id="submit" type="submit" value="Submit" />
+        </div>
     </form>
 {% endblock %}

+ 8 - 0
src/Packagist/WebBundle/Resources/views/layout.html.twig

@@ -25,6 +25,8 @@
                 var s = document.getElementsByTagName('script')[0];
                 s.parentNode.insertBefore(wf, s);
             })();
+            
+            window.base = "{{ asset('.') }}";
         </script>
         <link rel="stylesheet" href="{{ asset('bundles/packagistweb/css/main.css') }}" />
 
@@ -70,6 +72,10 @@
             <div class="main" role="main">
                 {% block content %}
                 {% endblock %}
+                
+                <div id="loader" class="hidden">
+                    <img src="{{ asset('bundles/packagistweb/img/loader.gif')}}"></img>
+                </div>
             </div>
         </div>
 
@@ -82,5 +88,7 @@
             g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
             s.parentNode.insertBefore(g,s)}(document,'script'));
         </script>#}
+        
+        {% block scripts %}{% endblock %}
     </body>
 </html>