Selaa lähdekoodia

Added add maintainer form, fixes #26.

xaav 14 vuotta sitten
vanhempi
commit
d90361e145

+ 1 - 0
app/config/config.yml

@@ -60,6 +60,7 @@ fos_user:
     db_driver:     orm
     firewall_name: main
     user_class:  Packagist\WebBundle\Entity\User
+    use_username_form_type: true
 #    from_email:
 #        address:        webmaster@example.com
 #        sender_name:    Admin

+ 42 - 6
src/Packagist/WebBundle/Controller/WebController.php

@@ -12,14 +12,12 @@
 
 namespace Packagist\WebBundle\Controller;
 
-use Packagist\WebBundle\Form\ConfirmPackageType;
-use Packagist\WebBundle\Form\ConfirmForm;
-use Packagist\WebBundle\Form\ConfirmFormType;
+use Packagist\WebBundle\Form\Type\AddMaintainerRequestType;
+use Packagist\WebBundle\Form\Model\AddMaintainerRequest;
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 use Packagist\WebBundle\Entity\Package;
 use Packagist\WebBundle\Entity\Version;
-use Packagist\WebBundle\Form\PackageType;
-use Packagist\WebBundle\Form\VersionType;
+use Packagist\WebBundle\Form\Type\PackageType;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
@@ -72,6 +70,7 @@ class WebController extends Controller
                     $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 (\Exception $e) {
                     $this->get('logger')->crit($e->getMessage(), array('exception', $e));
@@ -94,7 +93,7 @@ class WebController extends Controller
 
         $response = array('status' => 'error', 'reason' => 'No data posted.');
         $request = $this->getRequest();
-        if ($request->getMethod() == 'POST') {
+        if ('POST' === $request->getMethod()) {
             $form->bindRequest($request);
             if ($form->isValid()) {
                 $response = array('status' => 'success', 'name' => $package->getName());
@@ -142,6 +141,43 @@ class WebController extends Controller
             throw new NotFoundHttpException('The requested package, '.$name.', was not found.');
         }
 
+        if ($package->getMaintainers()->contains($this->getUser())) {
+
+            $addMaintainerRequest = new AddMaintainerRequest;
+            $form = $this->createForm(new AddMaintainerRequestType, $addMaintainerRequest);
+
+            $request = $this->getRequest();
+            if ('POST' === $request->getMethod()) {
+                $form->bindRequest($request);
+                if ($form->isValid()) {
+                    try {
+                        $em = $this->getDoctrine()->getEntityManager();
+                        $user = $addMaintainerRequest->getUser();
+
+                        if (empty($user)) {
+                            $this->get('session')->setFlash('error', 'The maintainer could not be found.');
+
+                            return array('package' => $package, 'form' => $form->createView());
+                        }
+
+                        $package->addMaintainers($user);
+
+                        $em->persist($package);
+                        $em->flush();
+
+                        $this->get('session')->setFlash('success', 'Maintainer added.');
+
+                        return new RedirectResponse($this->generateUrl('home'));
+                    } catch (\Exception $e) {
+                        $this->get('logger')->crit($e->getMessage(), array('exception', $e));
+                        $this->get('session')->setFlash('error', 'The maintainer could not be added.');
+                    }
+                }
+            }
+
+            return array('package' => $package, 'form' => $form->createView());
+        }
+
         return array('package' => $package);
     }
 

+ 20 - 0
src/Packagist/WebBundle/Form/Model/AddMaintainerRequest.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace Packagist\WebBundle\Form\Model;
+
+use FOS\UserBundle\Model\UserInterface;
+
+class AddMaintainerRequest
+{
+    protected $user;
+
+    public function setUser(UserInterface $user)
+    {
+        $this->user = $user;
+    }
+
+    public function getUser()
+    {
+        return $this->user;
+    }
+}

+ 39 - 0
src/Packagist/WebBundle/Form/Type/AddMaintainerRequestType.php

@@ -0,0 +1,39 @@
+<?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\Type;
+
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\FormBuilder;
+
+/**
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class AddMaintainerRequestType extends AbstractType
+{
+    public function buildForm(FormBuilder $builder, array $options)
+    {
+        $builder->add('user', 'fos_user_username');
+    }
+
+    public function getDefaultOptions(array $options)
+    {
+        return array(
+            'data_class' => 'Packagist\WebBundle\Form\Model\AddMaintainerRequest',
+        );
+    }
+
+    public function getName()
+    {
+        return 'add_maintainer_form';
+    }
+}

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

@@ -10,7 +10,7 @@
  * file that was distributed with this source code.
  */
 
-namespace Packagist\WebBundle\Form;
+namespace Packagist\WebBundle\Form\Type;
 
 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\FormBuilder;

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

@@ -31,5 +31,5 @@
     });
 
     $('#package_repository').triggerHandler('change');
-})($);
+})(jQuery);
 

+ 5 - 0
src/Packagist/WebBundle/Resources/public/js/view.js

@@ -0,0 +1,5 @@
+(function ($){
+	$('#add-maintainer').click(function () {
+		$('#add-maintainer-form').toggleClass('hidden');		
+	});
+})(jQuery);

+ 22 - 0
src/Packagist/WebBundle/Resources/views/Web/view.html.twig

@@ -1,11 +1,33 @@
 {% extends "PackagistWebBundle::layout.html.twig" %}
 
+{% block scripts %}
+    <script src="{{ asset('bundles/packagistweb/js/view.js')}}"></script>
+{% endblock %}
+
 {% block content %}
     <h1>{{ package.name }}</h1>
     <p class="maintainers">Maintainer{{ package.maintainers|length > 1 ? 's' : '' }}:
     {% for maintainer in package.maintainers %}
         {{ maintainer.username }}{{ loop.last ? '' : ', ' }}
     {% endfor %}</p>
+    
+    {% if form is defined %}
+        <div>
+		    <strong id="add-maintainer"><a href="#">Add Maintainer</a></strong>
+		    <form id="add-maintainer-form" class="hidden" action="" method="POST" {{ form_enctype(form) }}>
+		        <div>
+		            <p>
+		                {{ form_label(form.user, "Username") }}
+		                {{ form_errors(form.user) }}
+		                {{ form_widget(form.user) }}
+		            </p>
+		            {{ form_rest(form) }}
+		            <input id="submit" type="submit" value="Submit" />
+		        </div>
+		    </form>
+	    </div>
+    {% endif %}
+    
     {% if package.versions|length %}
         {% for version in package.versions %}
             <h2>Version {{ version.version }}</h2>