Browse Source

Add crawledAt and repository properties on Packages, removed version submission for now

Jordi Boggiano 13 years ago
parent
commit
dca0bb374f

+ 3 - 52
src/Packagist/WebBundle/Controller/WebController.php

@@ -66,64 +66,15 @@ class WebController extends Controller
                     $em->persist($package);
                     $em->flush();
 
-                    $this->get('session')->setFlash('success', $package->getName().' has been added to the package list, now go ahead and add a release!');
-                    return new RedirectResponse($this->generateUrl('submit_version', array('package' => $package->getName())));
-                } catch (\PDOExceptionx $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' => 'submit', 'user' => $this->getUser());
-    }
-
-    /**
-     * @Template()
-     * @Route("/submit/{package}", name="submit_version")
-     */
-    public function submitVersionAction($package)
-    {
-        $em = $this->get('doctrine')->getEntityManager();
-
-        $pkg = $this->get('doctrine')->getRepository('Packagist\WebBundle\Entity\Package')
-            ->findOneByName($package);
-
-        if(!$pkg->getMaintainers()->contains($this->getUser())) {
-            throw new AccessDeniedException();
-        }
-
-        if (!$pkg) {
-            throw new NotFoundHttpException('Package '.$package.' not found.');
-        }
-
-        // TODO populate with the latest version's data
-        $version = new Version;
-        $version->setEntityManager($em);
-        $version->setName($pkg->getName());
-        $version->setDescription($pkg->getDescription());
-        $form = $this->get('form.factory')->create(new VersionType, $version);
-
-        $request = $this->get('request');
-        if ($request->getMethod() == 'POST') {
-            $form->bindRequest($request);
-
-            if ($form->isValid()) {
-                try {
-                    // TODO check if this is the latest version to move the latest dist-tags reference, and update the package's description perhaps
-                    $pkg->addVersions($version);
-                    $version->setPackage($pkg);
-                    $em->persist($version);
-                    $em->flush();
-
-                    $this->get('session')->setFlash('success', $pkg->getName().'\'s version '.$version->getVersion().' has been added.');
+                    $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', $pkg->getName().'\'s version '.$version->getVersion().' could not be saved in our database, most likely it already exists.');
+                    $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(), 'package' => $pkg, 'page' => 'submit', 'user' => $this->getUser());
+        return array('form' => $form->createView(), 'page' => 'submit', 'user' => $this->getUser());
     }
 
     /**

+ 85 - 18
src/Packagist/WebBundle/Entity/Package.php

@@ -14,6 +14,7 @@ namespace Packagist\WebBundle\Entity;
 
 use Doctrine\ORM\Mapping as ORM;
 use Symfony\Component\Validator\Constraints as Assert;
+use Symfony\Component\Validator\ExecutionContext;
 
 /**
  * @ORM\Entity
@@ -21,6 +22,7 @@ use Symfony\Component\Validator\Constraints as Assert;
  *     name="package",
  *     uniqueConstraints={@ORM\UniqueConstraint(name="name_idx",columns={"name"})}
  * )
+ * @Assert\Callback(methods={"isRepositoryValid","isPackageUnique"})
  * @author Jordi Boggiano <j.boggiano@seld.be>
  */
 class Package
@@ -56,6 +58,12 @@ class Package
      */
     private $maintainers;
 
+    /**
+     * @ORM\Column()
+     * @Assert\NotBlank()
+     */
+    private $repository;
+
     // dist-tags / rel or runtime?
 
     /**
@@ -68,6 +76,11 @@ class Package
      */
     private $updatedAt;
 
+    /**
+     * @ORM\Column(type="datetime", nullable="true")
+     */
+    private $crawledAt;
+
     public function __construct()
     {
         $this->versions = new \Doctrine\Common\Collections\ArrayCollection();
@@ -90,6 +103,20 @@ class Package
         return json_encode($data);
     }
 
+    public function isRepositoryValid(ExecutionContext $context)
+    {
+        if (!preg_match('#^(git://.+|https?://github.com/[^/]+/[^/]+\.git)$#', $this->repository)) {
+            $propertyPath = $context->getPropertyPath() . '.repository';
+            $context->setPropertyPath($propertyPath);
+            $context->addViolation('This is not a valid git repository url', array(), null);
+        }
+    }
+
+    public function isPackageUnique(ExecutionContext $context)
+    {
+        // TODO check for uniqueness of package name
+    }
+
     /**
      * Get id
      *
@@ -160,6 +187,26 @@ class Package
         return $this->createdAt;
     }
 
+    /**
+     * Set repository
+     *
+     * @param string $repository
+     */
+    public function setRepository($repository)
+    {
+        $this->repository = $repository;
+    }
+
+    /**
+     * Get repository
+     *
+     * @return string $repository
+     */
+    public function getRepository()
+    {
+        return $this->repository;
+    }
+
     /**
      * Add versions
      *
@@ -200,23 +247,43 @@ class Package
         return $this->updatedAt;
     }
 
-    /**
-     * Add maintainers
-     *
-     * @param Packagist\WebBundle\Entity\User $maintainers
-     */
-    public function addMaintainers(\Packagist\WebBundle\Entity\User $maintainers)
-    {
-        $this->maintainers[] = $maintainers;
-    }
-
-    /**
-     * Get maintainers
-     *
-     * @return Doctrine\Common\Collections\Collection $maintainers
-     */
-    public function getMaintainers()
-    {
-        return $this->maintainers;
+    /**
+     * Set crawledAt
+     *
+     * @param datetime $crawledAt
+     */
+    public function setCrawledAt($crawledAt)
+    {
+        $this->crawledAt = $crawledAt;
+    }
+
+    /**
+     * Get crawledAt
+     *
+     * @return datetime $crawledAt
+     */
+    public function getCrawledAt()
+    {
+        return $this->crawledAt;
+    }
+
+    /**
+     * Add maintainers
+     *
+     * @param Packagist\WebBundle\Entity\User $maintainers
+     */
+    public function addMaintainers(\Packagist\WebBundle\Entity\User $maintainers)
+    {
+        $this->maintainers[] = $maintainers;
+    }
+
+    /**
+     * Get maintainers
+     *
+     * @return Doctrine\Common\Collections\Collection $maintainers
+     */
+    public function getMaintainers()
+    {
+        return $this->maintainers;
     }
 }

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

@@ -23,7 +23,7 @@ class PackageType extends AbstractType
     public function buildForm(FormBuilder $builder, array $options)
     {
         $builder->add('name');
-        $builder->add('description', null, array('required' => false));
+        $builder->add('repository');
     }
 
     public function getDefaultOptions(array $options)

+ 0 - 46
src/Packagist/WebBundle/Form/VersionType.php

@@ -1,46 +0,0 @@
-<?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;
-use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer;
-
-/**
- * @author Jordi Boggiano <j.boggiano@seld.be>
- */
-class VersionType extends AbstractType
-{
-    public function buildForm(FormBuilder $builder, array $options)
-    {
-        $builder->add('description');
-        $builder->add('version', null);
-        $builder->add('homepage', 'url', array('required' => false));
-        $builder->add('tagsText', 'text');
-        $builder->add('license', null, array('required' => false));
-        $builder->add('source', 'text', array('required' => false));
-        $builder->add('require', null, array('required' => false));
-        $builder->add('releasedAt', 'datetime', array('date_widget' => 'text', 'time_widget' => 'text'));
-        $builder->add(
-            $builder->create('releasedAt', 'text')
-                ->appendClientTransformer(new DateTimeToStringTransformer(null, null, 'Y-m-d H:i:s'))
-        );
-    }
-
-    public function getDefaultOptions(array $options)
-    {
-        return array(
-            'data_class' => 'Packagist\WebBundle\Entity\Version',
-        );
-    }
-}

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

@@ -10,9 +10,9 @@
             {{ form_widget(form.name) }}
         </p>
         <p>
-            {{ form_label(form.description, "Description") }}
-            {{ form_errors(form.description) }}
-            {{ form_widget(form.description) }}
+            {{ 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" />

+ 0 - 51
src/Packagist/WebBundle/Resources/views/Web/submitVersion.html.twig

@@ -1,51 +0,0 @@
-{% extends "PackagistWebBundle::layout.html.twig" %}
-
-{% block content %}
-    <h1>Submit a new {{ package.name }} version</h1>
-    <form action="" method="POST" {{ form_enctype(form) }}>
-        {{ form_errors(form) }}
-        <p>
-            {{ form_label(form.version, "Version (x.y.x, optionally suffixed with -dev, -beta, -alpha or RC + an optional number)") }}
-            {{ form_errors(form.version) }}
-            {{ form_widget(form.version) }}
-        </p>
-        <p>
-            {# TODO: plug a jQuery calendar on top of this #}
-            {{ form_label(form.releasedAt, "Release Date (YYYY-MM-DD)") }}
-            {{ form_errors(form.releasedAt) }}
-            {{ form_widget(form.releasedAt) }}
-        </p>
-        <p>
-            {{ form_label(form.source, "Source (<type (git, svn)> <url>)") }}
-            {{ form_errors(form.source) }}
-            {{ form_widget(form.source) }}
-        </p>
-        <p>
-            {{ form_label(form.require, "Required packages (<package name> <version spec>, one per line)") }}
-            {{ form_errors(form.require) }}
-            {{ form_widget(form.require) }}
-        </p>
-        <p>
-            {{ form_label(form.description, "Description") }}
-            {{ form_errors(form.description) }}
-            {{ form_widget(form.description) }}
-        </p>
-        <p>
-            {{ form_label(form.tagsText, "Tags") }}
-            {{ form_errors(form.tagsText) }}
-            {{ form_widget(form.tagsText) }}
-        </p>
-        <p>
-            {{ form_label(form.homepage, "Homepage URL") }}
-            {{ form_errors(form.homepage) }}
-            {{ form_widget(form.homepage) }}
-        </p>
-        <p>
-            {{ form_label(form.license, "License (MIT, GPL, ..)") }}
-            {{ form_errors(form.license) }}
-            {{ form_widget(form.license) }}
-        </p>
-        {{ form_rest(form) }}
-        <input type="submit" value="Submit" />
-    </form>
-{% endblock %}