Skip to content

Commit ab87fff

Browse files
committed
Add indicator icon for multiple revisions on package version list
1 parent c9b0c23 commit ab87fff

4 files changed

Lines changed: 43 additions & 8 deletions

File tree

src/Controller/Dashboard/DashboardPackagesInfoController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public function versions(#[MapPackage] Package $package): Response
106106
{
107107
return $this->render('dashboard/packages/package_versions.html.twig', [
108108
'package' => $package,
109+
'metadataCounts' => $this->metadataRepository->getMetadataCountsForPackage($package),
109110
]);
110111
}
111112

src/Doctrine/Repository/MetadataRepository.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace CodedMonkey\Dirigent\Doctrine\Repository;
44

55
use CodedMonkey\Dirigent\Doctrine\Entity\Metadata;
6+
use CodedMonkey\Dirigent\Doctrine\Entity\Package;
67
use CodedMonkey\Dirigent\Doctrine\Entity\Version;
78
use CodedMonkey\Dirigent\Entity\MetadataLinkType;
89
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
@@ -55,6 +56,30 @@ public function getMetadataCollectionForVersion(Version $version): array
5556
);
5657
}
5758

59+
/**
60+
* Returns a map of version ID => metadata count for all versions of the given package.
61+
*
62+
* @return array<int, int>
63+
*/
64+
public function getMetadataCountsForPackage(Package $package): array
65+
{
66+
$rows = $this->createQueryBuilder('metadata')
67+
->select('IDENTITY(metadata.version) as version_id, COUNT(metadata.id) as revision_count')
68+
->join('metadata.version', 'version')
69+
->where('version.package = :package')
70+
->groupBy('metadata.version')
71+
->setParameter('package', $package)
72+
->getQuery()
73+
->getResult();
74+
75+
$counts = [];
76+
foreach ($rows as $row) {
77+
$counts[(int) $row['version_id']] = (int) $row['revision_count'];
78+
}
79+
80+
return $counts;
81+
}
82+
5883
/**
5984
* Initializes all link and keyword collections for the given metadata.
6085
*/

templates/dashboard/packages/package_versions.html.twig

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
{% endapply %}
1717

1818
{% if package.versions|length > 0 %}
19-
{{ _self.versionList('Latest versions', package.activeVersions) }}
20-
{{ _self.versionList('Development versions', package.devVersions) }}
21-
{{ _self.versionList('Historical versions', package.historicalVersions) }}
22-
{{ _self.versionList('Development branch versions', package.devBranchVersions) }}
19+
{{ _self.versionList('Latest versions', package.activeVersions, metadataCounts) }}
20+
{{ _self.versionList('Development versions', package.devVersions, metadataCounts) }}
21+
{{ _self.versionList('Historical versions', package.historicalVersions, metadataCounts) }}
22+
{{ _self.versionList('Development branch versions', package.devBranchVersions, metadataCounts) }}
2323
{% else %}
2424
<table class="table datagrid datagrid-empty">
2525
<tbody>
@@ -46,22 +46,30 @@
4646
{% endif %}
4747
{% endblock %}
4848

49-
{% macro versionList(title, versions) %}
49+
{% macro versionList(title, versions, metadataCounts) %}
5050
{% if versions|length %}
5151
<h2 class="h4">{{ title|trans }}</h2>
5252
<div class="list-group list-group-flush border-bottom mb-3">
5353
{% for version in versions %}
54-
{{ _self.versionListItem(version) }}
54+
{{ _self.versionListItem(version, metadataCounts) }}
5555
{% endfor %}
5656
</div>
5757
{% endif %}
5858
{% endmacro %}
5959

60-
{% macro versionListItem(version) %}
60+
{% macro versionListItem(version, metadataCounts) %}
6161
{% set packageVersionInfoUrl = path('dashboard_packages_version_info', {package: version.package.name, version: version.name}) %}
6262
<a href="{{ packageVersionInfoUrl }}" class="list-group-item">
6363
<div class="d-flex justify-content-between">
64-
<span>{{ version.extendedName }}</span>
64+
<span>
65+
<span>{{ version.extendedName }}</span>
66+
{% if metadataCounts[version.id] > 1 %}
67+
<span class="text-muted ms-1" title="{{ 'This version has multiple revisions'|trans }}">
68+
<span class="fa-solid fa-file-alt" aria-hidden="true"></span>
69+
<span class="visually-hidden">{{ 'This version has multiple revisions'|trans }}</span>
70+
</span>
71+
{% endif %}
72+
</span>
6573
<span class="text-muted">{{ version.currentMetadata.releasedAt ? version.currentMetadata.releasedAt.format('Y-m-d') }}</span>
6674
</div>
6775
</a>

translations/messages.en.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ Indexed on %date%: Indexed on %date%
7878
Multiple revisions found for version %version% of package %package%: Multiple revisions found for version %version% of package %package%.
7979
Revision: Revision
8080
Revisions: Revisions
81+
This version has multiple revisions: This version has multiple revisions
8182
You're viewing an inactive revision of this package: You're viewing an inactive revision of this package.
8283

8384
# Package labels (Statistics)

0 commit comments

Comments
 (0)