Browse Source

Split up major version graphs into minor versions

Jordi Boggiano 5 years ago
parent
commit
091f1d3027

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

@@ -1160,7 +1160,7 @@ class PackageController extends Controller
                 if (!is_numeric($majorVersion)) {
                     throw new BadRequestHttpException('Major version should be an int or "all"');
                 }
-                $dlData[$majorVersion] = $this->getDoctrine()->getRepository('PackagistWebBundle:Download')->findDataByMajorVersion($package, (int) $majorVersion);
+                $dlData = $this->getDoctrine()->getRepository('PackagistWebBundle:Download')->findDataByMajorVersion($package, (int) $majorVersion);
             }
         } elseif ($version) {
             $downloads = $this->getDoctrine()->getRepository('PackagistWebBundle:Download')->findOneBy(['id' => $version->getId(), 'type' => Download::TYPE_VERSION]);

+ 9 - 6
src/Packagist/WebBundle/Entity/DownloadRepository.php

@@ -22,10 +22,10 @@ class DownloadRepository extends ServiceEntityRepository
     public function findDataByMajorVersion(Package $package, int $majorVersion)
     {
         $sql = '
-            SELECT d.data
+            SELECT v.normalizedVersion, d.data
             FROM package_version v
             INNER JOIN download d ON d.id=v.id AND d.type = :versionType
-            WHERE v.package_id = :package AND v.normalizedVersion LIKE :majorVersion
+            WHERE v.package_id = :package AND v.development = 0 AND v.normalizedVersion LIKE :majorVersion
         ';
 
         $stmt = $this->getEntityManager()->getConnection()
@@ -36,9 +36,13 @@ class DownloadRepository extends ServiceEntityRepository
         $result = $stmt->fetchAll();
         $stmt->closeCursor();
 
-        return array_map(function (array $row) {
-            return $row['data'] ? json_decode($row['data'], true) : [];
-        }, $result);
+        $series = [];
+        foreach ($result as $row) {
+            $name = preg_replace('{^(\d+\.\d+)(\.|$).*}', '$1', $row['normalizedVersion']);
+            $series[$name][] = $row['data'] ? json_decode($row['data'], true) : [];
+        }
+
+        return $series;
     }
 
     public function findDataByMajorVersions(Package $package)
@@ -48,7 +52,6 @@ class DownloadRepository extends ServiceEntityRepository
             FROM package_version v
             INNER JOIN download d ON d.id=v.id AND d.type = :versionType
             WHERE v.package_id = :package AND v.development = 0 AND v.normalizedVersion REGEXP "^[0-9]+"
-            ORDER BY v.normalizedVersion DESC
         ';
 
         $stmt = $this->getEntityManager()->getConnection()

+ 4 - 1
src/Packagist/WebBundle/Resources/public/js/charts.js

@@ -118,7 +118,10 @@
             }
 
             series.sort(function (a, b) {
-                return b.name.localeCompare(a.name);
+                if (a.name.indexOf('.')) {
+                    return b.name.replace(/^\d+\./, '').localeCompare(a.name.replace(/^\d+\./, ''), undefined, {numeric: true});
+                }
+                return b.name.localeCompare(a.name, undefined, {numeric: true});
             })
 
             initPackagistChart(