diff --git a/src/Controller/OrganizationController.php b/src/Controller/OrganizationController.php
index fadafc46..9107026b 100644
--- a/src/Controller/OrganizationController.php
+++ b/src/Controller/OrganizationController.php
@@ -131,6 +131,7 @@ public function packageDetails(Organization $organization, Package $package, Req
'filter' => $filter,
'count' => $this->packageQuery->versionCount($package->id()),
'versions' => $this->packageQuery->getVersions($package->id(), $filter),
+ 'installs' => $this->packageQuery->getInstalls($package->id(), 0),
]);
}
diff --git a/src/Query/User/PackageQuery/DbalPackageQuery.php b/src/Query/User/PackageQuery/DbalPackageQuery.php
index 85214d73..c5639dc9 100644
--- a/src/Query/User/PackageQuery/DbalPackageQuery.php
+++ b/src/Query/User/PackageQuery/DbalPackageQuery.php
@@ -116,7 +116,22 @@ public function count(string $organizationId, Filter $filter): int
public function getById(string $id): Option
{
$data = $this->connection->fetchAssoc(
- 'SELECT id, organization_id, type, repository_url, name, latest_released_version, latest_release_date, description, last_sync_at, last_sync_error, webhook_created_at, keep_last_releases
+ 'SELECT
+ id,
+ organization_id,
+ type,
+ repository_url,
+ name,
+ latest_released_version,
+ latest_release_date,
+ description,
+ last_sync_at,
+ last_sync_error,
+ webhook_created_at,
+ last_scan_date,
+ last_scan_status,
+ last_scan_result,
+ keep_last_releases
FROM "organization_package"
WHERE id = :id', [
':id' => $id,
diff --git a/templates/admin/proxy/dist.html.twig b/templates/admin/proxy/dist.html.twig
index 9cf014ee..ee25e2f9 100644
--- a/templates/admin/proxy/dist.html.twig
+++ b/templates/admin/proxy/dist.html.twig
@@ -17,7 +17,7 @@
{% for package in packages %}
{{ package }} |
- {{ downloads[package].downloads ?? 0 }} |
+ {{ downloads[package].downloads ?? 0 }} |
{% if downloads[package] is defined %}
diff --git a/templates/base.html.twig b/templates/base.html.twig
index 05930b7f..1a7f0ffe 100644
--- a/templates/base.html.twig
+++ b/templates/base.html.twig
@@ -106,7 +106,7 @@
{% block header %}{% endblock %}
-
+
{% block header_btn %}{% endblock %}
diff --git a/templates/component/js/base.js b/templates/component/js/base.js
index 923f5e77..70187571 100644
--- a/templates/component/js/base.js
+++ b/templates/component/js/base.js
@@ -28,4 +28,8 @@
});
$('[data-toggle="tooltip"]').tooltip();
+
+ $('.number-format').each(function() {
+ $(this).text(parseInt($(this).text()).toLocaleString());
+ });
})();
diff --git a/templates/component/js/stats.js.twig b/templates/component/js/stats.js.twig
index a32b1de1..4b6bb4c8 100644
--- a/templates/component/js/stats.js.twig
+++ b/templates/component/js/stats.js.twig
@@ -35,6 +35,13 @@
xaxis: {
type: 'datetime',
},
+ yaxis: {
+ labels: {
+ formatter: function (value) {
+ return value.toLocaleString();
+ },
+ },
+ },
labels: [{{ installs.days | map(day => "'#{day.date}'") | join(',') | raw }}],
colors: ["#206bc4"],
legend: {
diff --git a/templates/component/js/statsVersions.js.twig b/templates/component/js/statsVersions.js.twig
index 83b1453e..14adc430 100644
--- a/templates/component/js/statsVersions.js.twig
+++ b/templates/component/js/statsVersions.js.twig
@@ -28,6 +28,13 @@
xaxis: {
type: 'datetime',
},
+ yaxis: {
+ labels: {
+ formatter: function (value) {
+ return value.toLocaleString();
+ },
+ },
+ },
colors: ["#206bc4"],
noData: {
text: 'Loading...'
diff --git a/templates/component/packageActions.html.twig b/templates/component/packageActions.html.twig
new file mode 100644
index 00000000..8b1a85aa
--- /dev/null
+++ b/templates/component/packageActions.html.twig
@@ -0,0 +1,56 @@
+{% set currentPath = app.request.get('_route') %}
+
+
+
+
diff --git a/templates/organization/package/details.html.twig b/templates/organization/package/details.html.twig
index 81c8b957..ad927643 100644
--- a/templates/organization/package/details.html.twig
+++ b/templates/organization/package/details.html.twig
@@ -1,10 +1,16 @@
{% extends 'base.html.twig' %}
-{% block header %}{{ package.name }} details{% endblock %}
-{% block header_btn %}
-
- {% include 'svg/package.svg' %} Package list
+{% block header %}
+
+ «
+ {% include 'svg/package.svg' %}
+
+ {{ package.name }} details
+{% endblock %}
+{% block header_btn %}
+ {% include 'component/packageActions.html.twig' %}
{% endblock %}
{% block content %}
@@ -21,15 +27,46 @@
+
+
{% if package.latestReleaseDate %}
Latest version
{{ package.latestReleasedVersion }} (released:
-
- {{ package.latestReleaseDate|date_time_utc|time_diff }}
- )
+
+ {{ package.latestReleaseDate|date_time_utc|time_diff }})
diff --git a/templates/organization/package/scanResults.html.twig b/templates/organization/package/scanResults.html.twig
index ac5762dc..b4708cae 100644
--- a/templates/organization/package/scanResults.html.twig
+++ b/templates/organization/package/scanResults.html.twig
@@ -1,10 +1,18 @@
{% extends 'base.html.twig' %}
-{% block header %}Package: {{ package.name }} security scan results{% endblock %}
+{% block header %}
+
+ «
+ {% include 'svg/package.svg' %}
+
+
+ {{ package.name }}
+ security scan results
+{% endblock %}
+
{% block header_btn %}
-
- {% include 'svg/package.svg' %} Package list
-
+ {% include 'component/packageActions.html.twig' %}
{% endblock %}
{% block content %}
diff --git a/templates/organization/package/stats.html.twig b/templates/organization/package/stats.html.twig
index 4c9bc9f7..ec080d46 100644
--- a/templates/organization/package/stats.html.twig
+++ b/templates/organization/package/stats.html.twig
@@ -1,6 +1,20 @@
{% extends 'organization/stats.html.twig' %}
-{% block header %}{{ package.name }} installs (last {{ days }} days){% endblock %}
+{% block header %}
+
+ «
+ {% include 'svg/package.svg' %}
+
+
+ {{ package.name }}
+ installs (last {{ days }} days)
+{% endblock %}
+
+{% block header_btn %}
+ {{ parent() }}
+ {% include 'component/packageActions.html.twig' %}
+{% endblock %}
{% block content %}
Daily installs
@@ -10,9 +24,9 @@
Summary
- Today installs: {{ (installs.days | last).installs }}
- Last {{ days ?? 30 }} days installs: {{ installs.daysTotal }}
- Total installs: {{ installs.total }}
+ Today installs: {{ (installs.days | last).installs }}
+ Last {{ days ?? 30 }} days installs: {{ installs.daysTotal }}
+ Total installs: {{ installs.total }}
diff --git a/templates/organization/package/webhook.html.twig b/templates/organization/package/webhook.html.twig
index a3c2b975..14cefb27 100644
--- a/templates/organization/package/webhook.html.twig
+++ b/templates/organization/package/webhook.html.twig
@@ -1,10 +1,17 @@
{% extends 'base.html.twig' %}
-{% block header %}Package: {{ package.name }} webhook{% endblock %}
-{% block header_btn %}
-
- {% include 'svg/package.svg' %} Package list
+{% block header %}
+
+ «
+ {% include 'svg/package.svg' %}
+
+ {{ package.name }}
+ webhook
+{% endblock %}
+{% block header_btn %}
+ {% include 'component/packageActions.html.twig' %}
{% endblock %}
{% block content %}
diff --git a/templates/organization/packages.html.twig b/templates/organization/packages.html.twig
index 3beececd..12447859 100644
--- a/templates/organization/packages.html.twig
+++ b/templates/organization/packages.html.twig
@@ -111,55 +111,7 @@
{% endif %}
|
-
-
-
-
+ {% include 'component/packageActions.html.twig' %}
|
{% endif %}
diff --git a/templates/organization/stats.html.twig b/templates/organization/stats.html.twig
index 4bd5bd01..9fa1b5c0 100644
--- a/templates/organization/stats.html.twig
+++ b/templates/organization/stats.html.twig
@@ -20,9 +20,9 @@
Summary:
- Today installs: {{ (installs.days | last).installs }}
- Last {{ days ?? 30 }} days installs: {{ installs.daysTotal }}
- Total installs: {{ installs.total }}
+ Today installs: {{ (installs.days | last).installs }}
+ Last {{ days ?? 30 }} days installs: {{ installs.daysTotal }}
+ Total installs: {{ installs.total }}
{% endblock %}
diff --git a/tests/Functional/Controller/Admin/OrganizationControllerTest.php b/tests/Functional/Controller/Admin/OrganizationControllerTest.php
index cd6f9fee..97920d34 100644
--- a/tests/Functional/Controller/Admin/OrganizationControllerTest.php
+++ b/tests/Functional/Controller/Admin/OrganizationControllerTest.php
@@ -44,9 +44,9 @@ public function testStats(): void
$orgId = $this->fixtures->createOrganization('buddy', $this->userId);
$packageId = $this->fixtures->addPackage($orgId, 'https://some.url');
$this->fixtures->addPackageDownload(1, $packageId);
- $this->client->request('GET', $this->urlTo('admin_stats'));
+ $crawler = $this->client->request('GET', $this->urlTo('admin_stats'));
self::assertTrue($this->client->getResponse()->isOk());
- self::assertStringContainsString('Total installs: 1', $this->lastResponseBody());
+ self::assertStringContainsString('Total installs: 1', $crawler->text(null, true));
}
}
diff --git a/tests/Functional/Controller/Admin/ProxyControllerTest.php b/tests/Functional/Controller/Admin/ProxyControllerTest.php
index c827e9d5..5ac2a527 100644
--- a/tests/Functional/Controller/Admin/ProxyControllerTest.php
+++ b/tests/Functional/Controller/Admin/ProxyControllerTest.php
@@ -33,10 +33,10 @@ public function testStats(): void
[new Package('buddy-works/repman', '1.0.0.0')],
new \DateTimeImmutable('2020-04-27 19:34:00')
);
- $this->client->request('GET', $this->urlTo('admin_proxy_stats'));
+ $crawler = $this->client->request('GET', $this->urlTo('admin_proxy_stats'));
self::assertTrue($this->client->getResponse()->isOk());
- self::assertStringContainsString('Total installs: 1', $this->lastResponseBody());
+ self::assertStringContainsString('Total installs: 1', $crawler->text(null, true));
}
public function testRemoveDistPackage(): void
diff --git a/tests/Functional/Controller/OrganizationControllerTest.php b/tests/Functional/Controller/OrganizationControllerTest.php
index 3b0829a5..d49dfe22 100644
--- a/tests/Functional/Controller/OrganizationControllerTest.php
+++ b/tests/Functional/Controller/OrganizationControllerTest.php
@@ -428,13 +428,13 @@ public function testPackageStats(): void
$packageId = $this->fixtures->addPackage($buddyId, 'https://buddy.com');
$this->fixtures->addPackageDownload(3, $packageId, $version = '1.2.3');
- $this->client->request('GET', $this->urlTo('organization_package_stats', [
+ $crawler = $this->client->request('GET', $this->urlTo('organization_package_stats', [
'organization' => 'buddy',
'package' => $packageId,
]));
self::assertTrue($this->client->getResponse()->isOk());
- self::assertStringContainsString('Total installs: 3', $this->lastResponseBody());
+ self::assertStringContainsString('Total installs: 3', $crawler->text(null, true));
$this->client->request('GET', $this->urlTo('organization_package_version_stats', [
'organization' => 'buddy',
@@ -469,12 +469,12 @@ public function testOrganizationStats(): void
$packageId = $this->fixtures->addPackage($buddyId, 'https://buddy.com');
$this->fixtures->addPackageDownload(3, $packageId);
- $this->client->request('GET', $this->urlTo('organizations_stats', [
+ $crawler = $this->client->request('GET', $this->urlTo('organizations_stats', [
'organization' => 'buddy',
]));
self::assertTrue($this->client->getResponse()->isOk());
- self::assertStringContainsString('Total installs: 3', $this->lastResponseBody());
+ self::assertStringContainsString('Total installs: 3', $crawler->text(null, true));
}
public function testGenerateNewToken(): void
@@ -710,13 +710,13 @@ public function testPackageScanResultsWithWarningStatus(): void
'sub-dir/composer.lock' => [],
]);
- $this->client->request('GET', $this->urlTo('organization_package_scan_results', [
+ $crawler = $this->client->request('GET', $this->urlTo('organization_package_scan_results', [
'organization' => $organization,
'package' => $packageId,
]));
self::assertStringContainsString($version, $this->lastResponseBody());
- self::assertStringContainsString('Package: buddy-works/repman security scan results', $this->lastResponseBody());
+ self::assertStringContainsString('buddy-works/repman security scan results', $crawler->text(null, true));
self::assertStringContainsString('warning', $this->lastResponseBody());
self::assertStringContainsString('vendor/some-dependency', $this->lastResponseBody());
self::assertStringContainsString('6.6.6', $this->lastResponseBody());