diff --git a/src/Audit/Display/AuditLogDisplayFactory.php b/src/Audit/Display/AuditLogDisplayFactory.php index 6b5adc905..52c591952 100644 --- a/src/Audit/Display/AuditLogDisplayFactory.php +++ b/src/Audit/Display/AuditLogDisplayFactory.php @@ -34,6 +34,25 @@ public function build(iterable $auditRecords): array public function buildSingle(AuditRecord $record): AuditLogDisplayInterface { return match ($record->type) { + AuditRecordType::MaintainerAdded => new MaintainerAddedDisplay( + $record->datetime, + $record->attributes['name'], + $this->buildActor($record->attributes['maintainer']), + $this->buildActor($record->attributes['actor']), + ), + AuditRecordType::MaintainerRemoved => new MaintainerRemovedDisplay( + $record->datetime, + $record->attributes['name'], + $this->buildActor($record->attributes['maintainer']), + $this->buildActor($record->attributes['actor']), + ), + AuditRecordType::PackageTransferred => new PackageTransferredDisplay( + $record->datetime, + $record->attributes['name'], + $record->attributes['previous_maintainers'], + $record->attributes['current_maintainers'], + $this->buildActor($record->attributes['actor']), + ), AuditRecordType::PackageCreated => new PackageCreatedDisplay( $record->datetime, $record->attributes['name'], diff --git a/src/Audit/Display/MaintainerAddedDisplay.php b/src/Audit/Display/MaintainerAddedDisplay.php new file mode 100644 index 000000000..5f5c647b4 --- /dev/null +++ b/src/Audit/Display/MaintainerAddedDisplay.php @@ -0,0 +1,37 @@ + + * Nils Adermann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Audit\Display; + +use App\Audit\AuditRecordType; + +readonly class MaintainerAddedDisplay extends AbstractAuditLogDisplay +{ + public function __construct( + \DateTimeImmutable $datetime, + public string $packageName, + public ActorDisplay $maintainer, + ActorDisplay $actor, + ) { + parent::__construct($datetime, $actor); + } + + public function getType(): AuditRecordType + { + return AuditRecordType::MaintainerAdded; + } + + public function getTemplateName(): string + { + return 'audit_log/display/maintainer_added.html.twig'; + } +} diff --git a/src/Audit/Display/MaintainerRemovedDisplay.php b/src/Audit/Display/MaintainerRemovedDisplay.php new file mode 100644 index 000000000..1d9e78df7 --- /dev/null +++ b/src/Audit/Display/MaintainerRemovedDisplay.php @@ -0,0 +1,37 @@ + + * Nils Adermann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Audit\Display; + +use App\Audit\AuditRecordType; + +readonly class MaintainerRemovedDisplay extends AbstractAuditLogDisplay +{ + public function __construct( + \DateTimeImmutable $datetime, + public string $packageName, + public ActorDisplay $maintainer, + ActorDisplay $actor, + ) { + parent::__construct($datetime, $actor); + } + + public function getType(): AuditRecordType + { + return AuditRecordType::MaintainerRemoved; + } + + public function getTemplateName(): string + { + return 'audit_log/display/maintainer_removed.html.twig'; + } +} diff --git a/src/Audit/Display/PackageTransferredDisplay.php b/src/Audit/Display/PackageTransferredDisplay.php new file mode 100644 index 000000000..4c5fd96d5 --- /dev/null +++ b/src/Audit/Display/PackageTransferredDisplay.php @@ -0,0 +1,44 @@ + + * Nils Adermann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Audit\Display; + +use App\Audit\AuditRecordType; + +readonly class PackageTransferredDisplay extends AbstractAuditLogDisplay +{ + /** + * @param array $previousMaintainers + * @param array $currentMaintainers + */ + public function __construct( + \DateTimeImmutable $datetime, + public string $packageName, + /** @var array $previousMaintainers */ + public array $previousMaintainers, + /** @var array $currentMaintainers */ + public array $currentMaintainers, + ActorDisplay $actor, + ) { + parent::__construct($datetime, $actor); + } + + public function getType(): AuditRecordType + { + return AuditRecordType::PackageTransferred; + } + + public function getTemplateName(): string + { + return 'audit_log/display/package_transferred.html.twig'; + } +} diff --git a/templates/audit_log/display/canonical_url_changed.html.twig b/templates/audit_log/display/canonical_url_changed.html.twig index dfdc68bd1..d677c7091 100644 --- a/templates/audit_log/display/canonical_url_changed.html.twig +++ b/templates/audit_log/display/canonical_url_changed.html.twig @@ -1,10 +1,6 @@ - - {%- if display.packageName is existing_package -%} - {{ display.packageName }} - {%- else -%} - {{ display.packageName }} - {%- endif -%} -
+{% import 'audit_log/macros.html.twig' as auditLog %} + +{{ auditLog.packageLink(display.packageName) }}
From: {{ display.repositoryFrom }}
To: {{ display.repositoryTo }}
Changed by: {{ display.actor.username }} diff --git a/templates/audit_log/display/maintainer_added.html.twig b/templates/audit_log/display/maintainer_added.html.twig new file mode 100644 index 000000000..93164370e --- /dev/null +++ b/templates/audit_log/display/maintainer_added.html.twig @@ -0,0 +1,5 @@ +{% import 'audit_log/macros.html.twig' as auditLog %} + +{{ auditLog.packageLink(display.packageName) }}
+Maintainer: {{ display.maintainer.username }}
+Added by: {{ display.actor.username }} diff --git a/templates/audit_log/display/maintainer_removed.html.twig b/templates/audit_log/display/maintainer_removed.html.twig new file mode 100644 index 000000000..e3ac196ae --- /dev/null +++ b/templates/audit_log/display/maintainer_removed.html.twig @@ -0,0 +1,5 @@ +{% import 'audit_log/macros.html.twig' as auditLog %} + +{{ auditLog.packageLink(display.packageName) }}
+Maintainer: {{ display.maintainer.username }}
+Removed by: {{ display.actor.username }} diff --git a/templates/audit_log/display/package_created.html.twig b/templates/audit_log/display/package_created.html.twig index d93ad3bf4..7074c7d94 100644 --- a/templates/audit_log/display/package_created.html.twig +++ b/templates/audit_log/display/package_created.html.twig @@ -1,9 +1,5 @@ - - {%- if display.packageName is existing_package -%} - {{ display.packageName }} - {%- else -%} - {{ display.packageName }} - {%- endif -%} -
+{% import 'audit_log/macros.html.twig' as auditLog %} + +{{ auditLog.packageLink(display.packageName) }}
Repository: {{ display.repository }}
Created by: {{ display.actor.username }} diff --git a/templates/audit_log/display/package_deleted.html.twig b/templates/audit_log/display/package_deleted.html.twig index 6226e08ab..de7935199 100644 --- a/templates/audit_log/display/package_deleted.html.twig +++ b/templates/audit_log/display/package_deleted.html.twig @@ -1,9 +1,5 @@ - - {%- if display.packageName is existing_package -%} - {{ display.packageName }} - {%- else -%} - {{ display.packageName }} - {%- endif -%} -
+{% import 'audit_log/macros.html.twig' as auditLog %} + +{{ auditLog.packageLink(display.packageName) }}
Repository: {{ display.repository }}
Deleted by: {{ display.actor.username }} diff --git a/templates/audit_log/display/package_transferred.html.twig b/templates/audit_log/display/package_transferred.html.twig new file mode 100644 index 000000000..0e8fa6c0d --- /dev/null +++ b/templates/audit_log/display/package_transferred.html.twig @@ -0,0 +1,6 @@ +{% import 'audit_log/macros.html.twig' as auditLog %} + +{{ auditLog.packageLink(display.packageName) }}
+Previous maintainers: {{ display.previousMaintainers|column('username')|join(', ') }}
+Current maintainers: {{ display.currentMaintainers|column('username')|join(', ') }}
+Transferred by: {{ display.actor.username }} diff --git a/templates/audit_log/display/version_deleted.html.twig b/templates/audit_log/display/version_deleted.html.twig index 099115614..11480ce78 100644 --- a/templates/audit_log/display/version_deleted.html.twig +++ b/templates/audit_log/display/version_deleted.html.twig @@ -1,8 +1,4 @@ - - {%- if display.packageName is existing_package -%} - {{ display.packageName }} - {%- else -%} - {{ display.packageName }} - {%- endif -%} - {{ display.version }}
+{% import 'audit_log/macros.html.twig' as auditLog %} + +{{ auditLog.packageLink(display.packageName) }} {{ display.version }}
Deleted by: {{ display.actor.username }} diff --git a/templates/audit_log/display/version_reference_changed.html.twig b/templates/audit_log/display/version_reference_changed.html.twig index fd3cddca2..b0522be30 100644 --- a/templates/audit_log/display/version_reference_changed.html.twig +++ b/templates/audit_log/display/version_reference_changed.html.twig @@ -1,10 +1,6 @@ - - {%- if display.packageName is existing_package -%} - {{ display.packageName }} - {%- else -%} - {{ display.packageName }} - {%- endif -%} - {{ display.version }}
+{% import 'audit_log/macros.html.twig' as auditLog %} + +{{ auditLog.packageLink(display.packageName) }} {{ display.version }}
{% if display.sourceFrom or display.sourceTo %} Source: {{ display.sourceFrom ?? 'none' }} → {{ display.sourceTo ?? 'none' }}
{% endif %} diff --git a/templates/audit_log/macros.html.twig b/templates/audit_log/macros.html.twig new file mode 100644 index 000000000..855acb325 --- /dev/null +++ b/templates/audit_log/macros.html.twig @@ -0,0 +1,7 @@ +{% macro packageLink(packageName) %} + {%- if packageName is existing_package -%} + {{ packageName }} + {%- else -%} + {{ packageName }} + {%- endif -%} +{% endmacro %}