Browse Source

Style update button differently for users, show last update date and autoupdate status, refs #1047, fixes #987

Jordi Boggiano 5 years ago
parent
commit
43d0346f02

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

@@ -661,6 +661,12 @@ class PackageController extends Controller
 
         $canUpdatePackage = $package->getMaintainers()->contains($user) || $this->isGranted('ROLE_UPDATE_PACKAGES');
         if ($canUpdatePackage || !$package->wasUpdatedInTheLast24Hours()) {
+            // do not let non-maintainers execute update with those flags
+            if (!$canUpdatePackage) {
+                $autoUpdated = null;
+                $updateEqualRefs = false;
+            }
+
             if (null !== $autoUpdated) {
                 $package->setAutoUpdated($autoUpdated ? Package::AUTO_MANUAL_HOOK : 0);
                 $doctrine->getManager()->flush();

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

@@ -90,6 +90,10 @@ strong {
     font-weight: 600;
 }
 
+.no-padding {
+    padding: 0;
+}
+
 .navbar-wrapper {
     left: 0;
     right: 0;
@@ -938,6 +942,16 @@ input:focus:invalid:focus, textarea:focus:invalid:focus, select:focus:invalid:fo
     margin-bottom: -1px !important;
     position: relative;
 }
+.package .force-update-trigger {
+    cursor: pointer;
+}
+.package .force-update-trigger.loading:after {
+    content: "";
+    background-position: 7px center;
+    background-image: url("../img/loader-white.gif");
+    background-repeat: no-repeat;
+    padding-left: 30px;
+}
 .package .action input.loading, .package .action input.loading:hover, .package .action input.loading:active {
   background-position: 10px center;
   background-image: url("../img/loader.gif");
@@ -1109,6 +1123,19 @@ input:focus:invalid:focus, textarea:focus:invalid:focus, select:focus:invalid:fo
 .package .package-aside.versions-wrapper, .package .version-details {
   margin-top: 20px;
 }
+.package .last-update {
+    padding: 15px;
+}
+.package .last-update p, .package .last-update a {
+    font-size: 75%;
+}
+.package .last-update .auto-update-success {
+    color: #69AD21;
+}
+.package .last-update .auto-update-alert {
+    color: #cd3729;
+}
+
 .package .version-details .title {
   border-top: 1px solid #f28d1a;
   padding-top: 10px;

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

@@ -69,7 +69,7 @@
     }
 
     function forceUpdatePackage(e, updateAll) {
-        var submit = $('input[type=submit]', '.package .force-update'), data;
+        var submit = $('input[type=submit], .force-update-trigger', '.package .force-update'), data;
         var showOutput = e && e.shiftKey;
         if (e) {
             e.preventDefault();

+ 41 - 22
src/Packagist/WebBundle/Resources/views/package/version_list.html.twig

@@ -1,25 +1,44 @@
-<div class="col-md-3 package-aside versions-wrapper">
-    <ul class="versions">
-        {% for version in versions %}
-            {% set expanded = version.id == expandedId|default(false) %}
-            <li class="details-toggler version{% if loop.last %} last{% endif %}{% if expanded %} open{% endif %}" data-version-id="{{ version.version }}" data-load-more="{{ path('view_version', {versionId: version.id, _format: 'json'}) }}">
-                <a href="#{{ version.version }}" class="version-number">
-                    {{- version.version -}}
-                    {% if version.hasVersionAlias() %}
-                        / {{ version.versionAlias }}
-                    {% endif -%}
-                </a>
+<div class="col-md-3 no-padding">
+    <div class="package-aside versions-wrapper">
+        <ul class="versions">
+            {% for version in versions %}
+                {% set expanded = version.id == expandedId|default(false) %}
+                <li class="details-toggler version{% if loop.last %} last{% endif %}{% if expanded %} open{% endif %}" data-version-id="{{ version.version }}" data-load-more="{{ path('view_version', {versionId: version.id, _format: 'json'}) }}">
+                    <a href="#{{ version.version }}" class="version-number">
+                        {{- version.version -}}
+                        {% if version.hasVersionAlias() %}
+                            / {{ version.versionAlias }}
+                        {% endif -%}
+                    </a>
 
-                {% if deleteVersionCsrfToken is defined and deleteVersionCsrfToken is not empty %}
-                <form class="delete-version" action="{{ path("delete_version", {"versionId": version.id}) }}" method="DELETE">
-                    <input type="hidden" name="_token" value="{{ deleteVersionCsrfToken }}" />
-                    <i class="submit glyphicon glyphicon-remove"></i>
-                </form>
-                {% endif %}
-            </li>
-        {% endfor %}
-    </ul>
-    <div class="hidden versions-expander">
-        <i class="glyphicon glyphicon-chevron-down"></i>
+                    {% if deleteVersionCsrfToken is defined and deleteVersionCsrfToken is not empty %}
+                    <form class="delete-version" action="{{ path("delete_version", {"versionId": version.id}) }}" method="DELETE">
+                        <input type="hidden" name="_token" value="{{ deleteVersionCsrfToken }}" />
+                        <i class="submit glyphicon glyphicon-remove"></i>
+                    </form>
+                    {% endif %}
+                </li>
+            {% endfor %}
+        </ul>
+        <div class="hidden versions-expander">
+            <i class="glyphicon glyphicon-chevron-down"></i>
+        </div>
     </div>
+
+    {% if showUpdated is defined and showUpdated and package.getUpdatedAt() %}
+        <div class="last-update">
+            {% if ("github.com" in package.repository and package.getAutoUpdated() == 1) or not package.isAutoUpdated() %}
+                <p class="auto-update-danger">This package is <strong>not</strong> auto-updated.</p>
+            {% else %}
+                <p class="auto-update-success">This package is auto-updated.</p>
+            {% endif %}
+            <p>Last update: {{ package.getUpdatedAt()|date('Y-m-d H:i:s') }} UTC</p>
+            {% if showUpdateButton %}
+                <form class="force-update action" action="{{ path('update_package', {name: package.name, type: 'public_update'}) }}" method="PUT">
+                    <input type="hidden" name="update" value="1" />
+                    <a class="force-update-trigger">Update Now</a>
+                </form>
+            {% endif %}
+        </div>
+    {% endif %}
 </div>

+ 15 - 21
src/Packagist/WebBundle/Resources/views/package/view_package.html.twig

@@ -125,13 +125,6 @@
                                 </form>
                             {% endif %}
                         </div>
-                    {% elseif app.user and not package.wasUpdatedInTheLast24Hours() %}
-                        <div class="btn-group btn-group-xs">
-                                <form class="force-update action" action="{{ path('update_package', {name: package.name}) }}" method="PUT">
-                                    <input type="hidden" name="update" value="1" />
-                                    <input class="btn btn-success" type="submit" value="Update" />
-                                </form>
-                        </div>
                     {% endif %}
                 </div>
 
@@ -287,26 +280,27 @@
             {% endif %}
 
             {% if versions|length %}
-            <div class="row versions-section">
-                <div class="version-details col-md-9">
-                    {% if expandedVersion %}
-                        {% include 'PackagistWebBundle:package:version_details.html.twig' with {version: expandedVersion} %}
-                    {% endif %}
+                <div class="row versions-section">
+                    <div class="version-details col-md-9">
+                        {% if expandedVersion %}
+                            {% include 'PackagistWebBundle:package:version_details.html.twig' with {version: expandedVersion} %}
+                        {% endif %}
+                    </div>
+                    {% include 'PackagistWebBundle:package:version_list.html.twig' with {versions: versions, expandedId: expandedVersion.id, deleteVersionCsrfToken: deleteVersionCsrfToken|default(null), package: package, showUpdated: true, showUpdateButton: not hasActions and app.user and not package.wasUpdatedInTheLast24Hours()} %}
                 </div>
-                {% include 'PackagistWebBundle:package:version_list.html.twig' with {versions: versions, expandedId: expandedVersion.id, deleteVersionCsrfToken: deleteVersionCsrfToken|default(null)} %}
             {% elseif package.crawledAt is null %}
                 <p class="col-xs-12">This package has not been crawled yet, some information is missing.</p>
             {% else %}
                 <p class="col-xs-12">This package has no released version yet, and little information is available.</p>
             {% endif %}
-        </div>
 
-        {% if package.readme != null and (not package.isSuspect() or hasActions) %}
-            <hr class="clearfix">
-            <div class="readme markdown-body">
-                <h1>README</h1>
-                {{ package.optimizedReadme|raw }}
-            </div>
-        {% endif %}
+            {% if package.readme != null and (not package.isSuspect() or hasActions) %}
+                <hr class="clearfix">
+                <div class="readme markdown-body">
+                    <h1>README</h1>
+                    {{ package.optimizedReadme|raw }}
+                </div>
+            {% endif %}
+        </div>
     </div>
 {% endblock %}