diff --git a/migrations/Version20260520060000.php b/migrations/Version20260520060000.php new file mode 100644 index 0000000..b6c5e8f --- /dev/null +++ b/migrations/Version20260520060000.php @@ -0,0 +1,28 @@ +addSql('ALTER TABLE app.attribute_values DROP CONSTRAINT fk_6f6a862d7492f274'); + $this->addSql('ALTER TABLE app.attribute_values ADD CONSTRAINT fk_6f6a862d7492f274 FOREIGN KEY (attribute_definition_id) REFERENCES app.attribute_definitions (id) ON DELETE CASCADE'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE app.attribute_values DROP CONSTRAINT fk_6f6a862d7492f274'); + $this->addSql('ALTER TABLE app.attribute_values ADD CONSTRAINT fk_6f6a862d7492f274 FOREIGN KEY (attribute_definition_id) REFERENCES app.attribute_definitions (id)'); + } +} diff --git a/src/Domain/Article/AttributeValue.php b/src/Domain/Article/AttributeValue.php index 4e4ea7a..e9c3eb8 100644 --- a/src/Domain/Article/AttributeValue.php +++ b/src/Domain/Article/AttributeValue.php @@ -21,7 +21,7 @@ class AttributeValue private Article $article; #[ORM\ManyToOne(targetEntity: AttributeDefinition::class)] - #[ORM\JoinColumn(nullable: false)] + #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] private AttributeDefinition $attributeDefinition; #[ORM\Column(type: 'text')] diff --git a/src/Infrastructure/Http/Controller/Admin/AttributeDefinitionCrudController.php b/src/Infrastructure/Http/Controller/Admin/AttributeDefinitionCrudController.php index e9ba44e..a42c382 100644 --- a/src/Infrastructure/Http/Controller/Admin/AttributeDefinitionCrudController.php +++ b/src/Infrastructure/Http/Controller/Admin/AttributeDefinitionCrudController.php @@ -7,6 +7,8 @@ namespace App\Infrastructure\Http\Controller\Admin; use App\Domain\Article\AttributeDefinition; use App\Domain\Article\AttributeType; use App\Infrastructure\Http\Form\StringArrayType; +use EasyCorp\Bundle\EasyAdminBundle\Config\Action; +use EasyCorp\Bundle\EasyAdminBundle\Config\Actions; use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController; use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField; @@ -24,6 +26,14 @@ final class AttributeDefinitionCrudController extends AbstractCrudController return AttributeDefinition::class; } + public function configureActions(Actions $actions): Actions + { + return $actions + ->update(Crud::PAGE_INDEX, Action::DELETE, static fn (Action $a) => $a + ->askConfirmation(new TranslatableMessage('action.delete_attribute_confirm', [], 'admin')) + ); + } + public function configureCrud(Crud $crud): Crud { return $crud diff --git a/translations/admin.de.yaml b/translations/admin.de.yaml index 8daac16..1edba2f 100644 --- a/translations/admin.de.yaml +++ b/translations/admin.de.yaml @@ -77,6 +77,7 @@ field.locale: Sprache field.domain: Bereich field.translation_key: Schlüssel field.translation_value: Übersetzung +action.delete_attribute_confirm: 'Attribut löschen? Alle gespeicherten Werte in bestehenden Artikeln werden ebenfalls gelöscht.' action.retry: Wiederholen action.retry_confirm: 'Diesen Pipeline-Job ab dem aktuellen Schritt neu einreihen?' action.rerun_ai: 'KI neu starten' diff --git a/translations/admin.en.yaml b/translations/admin.en.yaml index 1b2ec2c..7d75703 100644 --- a/translations/admin.en.yaml +++ b/translations/admin.en.yaml @@ -77,6 +77,7 @@ field.locale: Locale field.domain: Domain field.translation_key: Key field.translation_value: Value +action.delete_attribute_confirm: 'Delete this attribute? All values stored on existing articles will also be deleted.' action.retry: Retry action.retry_confirm: 'Re-queue this pipeline job from the current step?' action.rerun_ai: 'Re-run AI'