瀏覽代碼

Merge remote-tracking branch 'CHH/feature/package-editing'

Jordi Boggiano 12 年之前
父節點
當前提交
e9735d78c2

+ 73 - 0
src/Packagist/WebBundle/Controller/PackageController.php

@@ -0,0 +1,73 @@
+<?php
+
+namespace Packagist\WebBundle\Controller;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Security\Core\Exception\AccessDeniedException;
+use Symfony\Bundle\FrameworkBundle\Controller\Controller;
+
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
+
+use Packagist\WebBundle\Entity\Package;
+use Packagist\WebBundle\Package\Updater;
+
+use Composer\IO\NullIO;
+use Composer\Factory;
+use Composer\Repository\VcsRepository;
+
+class PackageController extends Controller
+{
+    /**
+     * @Template()
+     * @Route(
+     *     "/packages/{name}/edit",
+     *     name="edit_package",
+     *     requirements={"name"="[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?"}
+     * )
+     */
+    public function editAction(Request $req, $name)
+    {
+        $packages = $this->getDoctrine()->getRepository('PackagistWebBundle:Package');
+        $package = $packages->findOneByName($name);
+
+        if (!$package) {
+            throw $this->createNotFoundException("The requested package, $name, could not be found.");
+        }
+
+        if (!$package->getMaintainers()->contains($this->getUser()) && !$this->get('security.context')->isGranted('ROLE_UPDATE_PACKAGES')) {
+            throw new AccessDeniedException;
+        }
+
+        $form = $this->createFormBuilder($package, array("validation_groups" => array("update")))
+            ->add("repository", "text")
+            ->getForm();
+
+        if ($req->isMethod("POST")) {
+            $package->setEntityRepository($packages);
+
+            $form->bindRequest($req);
+
+            if ($form->isValid()) {
+                // Force updating of packages once the package is viewed after the redirect.
+                $package->setCrawledAt(null);
+
+                $em = $this->getDoctrine()->getEntityManager();
+                $em->persist($package);
+                $em->flush();
+
+                $this->get("session")->setFlash("notice", "Changes saved.");
+
+                return $this->redirect(
+                    $this->generateUrl("view_package", array("name" => $package->getName()))
+                );
+            }
+        }
+
+        return array(
+            "package" => $package, "form" => $form->createView()
+        );
+    }
+}
+

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

@@ -74,7 +74,7 @@ class Package
 
     /**
      * @ORM\Column()
-     * @Assert\NotBlank()
+     * @Assert\NotBlank(groups={"update"})
      */
     private $repository;
 

+ 20 - 0
src/Packagist/WebBundle/Resources/views/Package/edit.html.twig

@@ -0,0 +1,20 @@
+{% extends "PackagistWebBundle::layout.html.twig" %}
+
+{% block title %}
+    Edit Package {{ package.name }}
+{% endblock %}
+
+{% block content %}
+    <div class="box clearfix">
+        <h1>
+            Edit {{ package.name }}
+        </h1>
+
+        <form action="{{ path('edit_package', {'name': package.name}) }}" method="post" {{ form_enctype(form) }}>
+            {{ form_widget(form) }}
+
+            <input type="submit" value="Update" />
+        </form>
+    </div>
+{% endblock %}
+

+ 5 - 1
src/Packagist/WebBundle/Resources/views/Web/viewPackage.html.twig

@@ -13,6 +13,10 @@
     <div class="box">
         <div class="package"{% if app.user and package.maintainers.contains(app.user) and package.crawledAt is null %} data-force-crawl="true"{% endif %}>
             {% if is_granted('ROLE_UPDATE_PACKAGES') or package.maintainers.contains(app.user) %}
+                <form class="action" action="{{ path("edit_package", {name: package.name}) }}">
+                    <input type="submit" value="Edit Package" />
+                </form>
+
                 <form class="force-update action" action="{{ path('update_package', {name: package.name}) }}" method="POST">
                     <input type="hidden" name="_method" value="PUT" />
                     <input type="hidden" name="update" value="1" />
@@ -154,4 +158,4 @@
             {% endif %}
         </div>
     </div>
-{% endblock %}
+{% endblock %}