All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Cleaned up README.
#[ITKDevEntity]attribute andAbstractITKDevEntityULID-id mapped superclass — the single discovery contract that every other feature keys off.- Timestampable trait/listener that fills
createdAt/updatedAton flush. - Blameable trait/listener that resolves the current
UserInterface(via the host app'suser_class) intocreatedBy/modifiedBy. - Soft-delete trait,
onFlushlistener (interceptsEntityManager::remove()and writesdeletedAt), and asoft_deleteDoctrine SQL filter that hides deleted rows by default. A secondremove()performs a hard delete. - Archivable trait and an
archivableDoctrine SQL filter, registered disabled so callers enable it per request (e.g. via a?showArchived=1listener). - Auditor-bundle auto-wiring: reflection over
entity_pathsdiscovers#[ITKDevEntity]classes and their#[Auditable]/#[AuditIgnore]property attributes, then prepends the corresponding configuration ontodamienharper/auditor-bundle. Third-party entities can be registered viaaudit.entities/audit.ignored_columnsconfig. - GDPR anonymization:
#[Anonymize]property attribute with aStrategyenum (NullValue,Redact,Hash,Pseudonymize),StrategyApplier,Anonymizer,BulkAnonymizer, andStaleEntityFinderservices. Per-property rules from config override the attribute when both are present. privacy:anonymize <ulid>console command for right-to-erasure of a single subject and all rows that reference it.privacy:anonymize-stale --older-than=PXXconsole command for retention-driven bulk anonymization. Audit-row cleanup is delegated to dh_auditor's ownaudit:clean.- Bundle configuration tree (
itk_dev_entity) withenabledflags per feature,user_class,entity_paths,audit.retention, andanonymization.rules— every feature is opt-in twice (per-entity interface+trait and the bundle-wide flag). - PHP 8.4+ / Symfony 7.4 or 8.0 / Doctrine ORM 3 support, tested against MariaDB 11.4 and PostgreSQL 16.