Browse Source

Allow users to manually update their packages from the web interface

Jordi Boggiano 13 years ago
parent
commit
fe5472386d

+ 1 - 1
src/Packagist/WebBundle/Controller/WebController.php

@@ -270,7 +270,7 @@ class WebController extends Controller
         $update = $req->request->get('update', $req->query->get('update'));
         $autoUpdated = $req->request->get('autoUpdated', $req->query->get('autoUpdated'));
 
-        $user = $doctrine
+        $user = $this->getUser() ?: $doctrine
             ->getRepository('PackagistWebBundle:User')
             ->findOneBy(array('username' => $username, 'apiToken' => $apiToken));
 

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

@@ -155,7 +155,7 @@ class Package
                 $context->addViolation('The package name '.$information['name'].' is invalid, it should have a vendor name, a forward slash, and a package name, matching <em>[a-z0-9_.-]+/[a-z0-9_.-]+</em>.', array(), null);
                 return;
             }
-        } catch (\UnexpectedValueException $e) {
+        } catch (\Exception $e) {
             $context->addViolation('We had problems parsing your composer.json file, the parser reports: '.$e->getMessage(), array(), null);
         }
     }
@@ -289,7 +289,8 @@ class Package
             }
             $information = $repo->getComposerInformation($repo->getRootIdentifier());
             $this->setName($information['name']);
-        } catch (\UnexpectedValueException $e) {}
+        } catch (\Exception $e) {
+        }
     }
 
     /**

+ 26 - 0
src/Packagist/WebBundle/Resources/public/css/main.css

@@ -382,11 +382,18 @@ form ul {
 
 /* Search */
 #search_query_query {
+  width: 890px;
+}
+.no-js #search_query_query {
   width: 780px;
 }
 #search-form .submit-wrapper {
   width: 100px;
   float: right;
+  display: none;
+}
+.no-js #search-form .submit-wrapper {
+  display: block;
 }
 #search-form .submit {
   margin: 0;
@@ -524,6 +531,25 @@ form ul {
   margin-bottom: 10px;
 }
 
+.no-js .package .force-update {
+  display: none;
+}
+.package .force-update {
+  float: right;
+}
+.package .force-update input {
+  width: auto;
+  font-size: 16px;
+  margin: 0;
+  padding: 8px;
+  background-image: none;
+}
+.package .force-update input.loading {
+  background-position: 10px center;
+  background-image: url("../img/loader.gif");
+  padding-left: 30px;
+}
+
 
 pre {
   background: #fff;

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

@@ -7,4 +7,23 @@
         $(this).toggleClass('open')
             .prev().toggleClass('open');
     });
+    $('.package .force-update').submit(function (e) {
+        var submit = $('input[type=submit]', this);
+        e.preventDefault();
+        if (submit.is('.loading')) {
+            return;
+        }
+        $.ajax({
+            url: $(this).attr('action'),
+            dataType: 'json',
+            cache: false,
+            data: $(this).serializeArray(),
+            type: 'PUT',
+            success: function (data) {
+                window.location.href = window.location.href;
+            },
+            context: this
+        });
+        submit.addClass('loading');
+    });
 })(jQuery);

+ 9 - 2
src/Packagist/WebBundle/Resources/views/Web/viewPackage.html.twig

@@ -2,12 +2,19 @@
 {% import "PackagistWebBundle::macros.html.twig" as packagist %}
 
 {% block scripts %}
-    <script src="{{ asset('bundles/packagistweb/js/view.js?v=2')}}"></script>
+    <script src="{{ asset('bundles/packagistweb/js/view.js?v=3')}}"></script>
 {% endblock %}
 
 {% block content %}
     <div class="box">
         <div class="package">
+            {% if app.user and package.maintainers.contains(app.user) %}
+                <form class="force-update" action="{{ path('update_package', {name: package.name}) }}" method="POST">
+                    <input type="hidden" name="_method" value="PUT" />
+                    <input type="hidden" name="update" value="1" />
+                    <input type="submit" value="Force package update" />
+                </form>
+            {% endif %}
             <h1>
                 <a href="{{ path("view_vendor", {"vendor": package.vendor}) }}">{{ package.vendor }}/</a>{{ package.packageName }}
             </h1>
@@ -57,7 +64,7 @@
                             <section>
                                 <h1>
                                     {{ version.version }}
-                                    <span class="release-date">{{ version.releasedAt|date("Y-m-d H:i") }}</span>
+                                    <span class="release-date">{{ version.releasedAt|date("Y-m-d H:i") }} UTC</span>
                                     <span class="license">{{ version.license ? version.license|join(', ') : '' }}</span>
                                 </h1>
 

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

@@ -17,7 +17,7 @@
         <script src="{{ asset('bundles/packagistweb/js/html5.js') }}"></script>
         <![endif]-->
 
-        <link rel="stylesheet" href="{{ asset('bundles/packagistweb/css/main.css?v=3') }}" />
+        <link rel="stylesheet" href="{{ asset('bundles/packagistweb/css/main.css?v=4') }}" />
         <link rel="stylesheet" href="{{ asset('css/humane/jackedup.css?v=2') }}" />
 
         {# {% stylesheets