Browse Source

Normalize version list on package page to make more sense

Jordi Boggiano 10 years ago
parent
commit
58e2898e62

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

@@ -608,14 +608,35 @@ class WebController extends Controller
         }
 
         $version = null;
-        if (count($package->getVersions())) {
+        $versions = $package->getVersions();
+        if (is_object($versions)) {
+            $versions = $versions->toArray();
+        }
+
+        usort($versions, function ($a, $b) {
+            $aVersion = $a->getNormalizedVersion();
+            $bVersion = $b->getNormalizedVersion();
+            $aVersion = preg_replace('{^dev-.*}', '0.0.0-alpha', $aVersion);
+            $bVersion = preg_replace('{^dev-.*}', '0.0.0-alpha', $bVersion);
+
+            // equal versions are sorted by date
+            if ($aVersion === $bVersion) {
+                return $b->getReleasedAt() > $a->getReleasedAt() ? 1 : -1;
+            }
+
+            // the rest is sorted by version
+            return version_compare($bVersion, $aVersion);
+        });
+
+        if (count($versions)) {
             $versionRepo = $this->getDoctrine()->getRepository('PackagistWebBundle:Version');
-            $version = $versionRepo->getFullVersion($package->getVersions()->first()->getId());
+            $version = $versionRepo->getFullVersion(reset($versions)->getId());
         }
 
         $data = array(
             'package' => $package,
-            'version' => $version
+            'version' => $version,
+            'versions' => $versions,
         );
 
         try {

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

@@ -125,7 +125,7 @@ class Updater
             }
 
             // the rest is sorted by version
-            return version_compare($a->getVersion(), $b->getVersion());
+            return version_compare($aVersion, $bVersion);
         });
 
         $versionRepository = $this->doctrine->getRepository('PackagistWebBundle:Version');

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

@@ -132,9 +132,9 @@
                 </div>
             {% endif %}
 
-            {% if package.versions|length %}
+            {% if versions|length %}
                 <ul class="versions">
-                    {% for version in package.versions %}
+                    {% for version in versions %}
                         <li class="version{% if loop.last %} last{% endif %}" id="{{ version.version }}">
                             <section>
                                 <h1>