diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bc70a0..8c0fd78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#68](https://github.com/itk-dev/devops_itksites/pull/68) 6667: Update advisories on Detailed site display +- [#68](https://github.com/itk-dev/devops_itksites/pull/68) + 6667: Show sites affected on advisories. + ## [1.9.2] - 2026-04-07 - [#67](https://github.com/itk-dev/devops_itksites/pull/67) diff --git a/src/Admin/Field/AffectedSitesField.php b/src/Admin/Field/AffectedSitesField.php new file mode 100644 index 0000000..058b5b6 --- /dev/null +++ b/src/Admin/Field/AffectedSitesField.php @@ -0,0 +1,22 @@ +setProperty($propertyName) + ->setLabel($label) + ->setTemplatePath('EasyAdminBundle/Fields/affected_sites.html.twig'); + } +} diff --git a/src/Controller/Admin/AdvisoryCrudController.php b/src/Controller/Admin/AdvisoryCrudController.php index 8e89d9b..50c18ec 100644 --- a/src/Controller/Admin/AdvisoryCrudController.php +++ b/src/Controller/Admin/AdvisoryCrudController.php @@ -4,6 +4,7 @@ namespace App\Controller\Admin; +use App\Admin\Field\AffectedSitesField; use App\Admin\Field\SourcesField; use App\Admin\Field\TextMonospaceField; use App\Entity\Advisory; @@ -58,6 +59,7 @@ public function configureFields(string $pageName): iterable yield DateField::new('reportedAt')->setColumns(6)->onlyOnIndex(); yield DateTimeField::new('reportedAt')->setColumns(6)->onlyOnDetail(); yield SourcesField::new('sourceLinks')->setColumns(6)->onlyOnDetail(); + yield AffectedSitesField::new('sites')->setLabel('Affected Sites'); } #[\Override] diff --git a/src/Entity/Advisory.php b/src/Entity/Advisory.php index 160a914..586f15e 100644 --- a/src/Entity/Advisory.php +++ b/src/Entity/Advisory.php @@ -190,6 +190,23 @@ public function removePackageVersion(PackageVersion $packageVersion): self return $this; } + /** + * @return Collection + */ + public function getSites(): Collection + { + $sites = []; + foreach ($this->packageVersions as $packageVersion) { + foreach ($packageVersion->getInstallations() as $installation) { + foreach ($installation->getSites() as $site) { + $sites[$site->getId()->toRfc4122()] = $site; + } + } + } + + return new ArrayCollection(array_values($sites)); + } + public function getPackage(): ?Package { return $this->package; diff --git a/templates/EasyAdminBundle/Fields/affected_sites.html.twig b/templates/EasyAdminBundle/Fields/affected_sites.html.twig new file mode 100644 index 0000000..a2eb5e3 --- /dev/null +++ b/templates/EasyAdminBundle/Fields/affected_sites.html.twig @@ -0,0 +1,33 @@ +{# @var ea \EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext #} +{# @var field \EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto #} +{# @var entity \EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto #} +{% set sites = entity.instance.sites %} +{% if ea().crud.currentAction == 'detail' %} + {% if sites|length > 0 %} + + + + + + + + + {% for site in sites %} + {% set url = ea_url() + .unsetAll() + .setController('App\\Controller\\Admin\\SiteCrudController') + .setAction('detail') + .setEntityId(site.id) %} + + + + + {% endfor %} + +
DomainServer
{{ site.primaryDomain }}{{ site.server }}
+ {% else %} + None + {% endif %} +{% else %} + {{ sites|length }} +{% endif %}