- Implemented `StoredObjectEditorDecisionManager` to assess editability of stored objects based on lock status and methods.
- Created `StoredObjectEditorDecisionManagerInterface` to define the contract for decision logic.
- Added comprehensive test suite `StoredObjectEditorDecisionManagerTest` to validate scenarios including lock absence, conflicting lock methods, and compatible WOPI locks.
- Modified `StoredObjectLockNormalizer` to include the `createdAt` field in the normalized output.
- Updated `StoredObjectLockNormalizerTest` to reflect the new `createdAt` field, including test assertions and normalization logic adjustments.
- Implemented `StoredObjectLockNormalizer` to handle JSON normalization for `StoredObjectLock` entities.
- Added `StoredObjectLockNormalizerTest` to verify normalization logic, format support, and edge cases.
- Modified migration `Version20260331122339` to apply `ON DELETE CASCADE` to the foreign key constraint on `storedobjectlock_uuid` in `stored_object_lock_user` table.
- Ensures dependent records are removed automatically when the parent `stored_object_lock` is deleted.
- Introduced `CleanOldLockCronJob` to handle scheduled cleaning of old locks.
- Implemented tests in `CleanOldLockCronJobTest` to verify behavior, including conditions for execution based on elapsed time.
- Utilized `MockClock` for precise time-based testing scenarios.
- Introduced `CleanOldLock` service to remove expired locks older than 24 hours.
- Added `removeExpiredBefore` method in `StoredObjectLockRepository` for efficient deletion of expired locks.
- Created `CleanOldLockTest` to verify the cleaning service functionality using `MockClock`.
- Implemented `WebdavLockController::lockDocument` to handle LOCK requests for creating and renewing locks.
- Introduced access control checks using `StoredObjectRoleEnum::EDIT` to restrict lock operations to authorized users.
- Added test suite `WebdavLockControllerTest` to validate locking and renewing scenarios, including edge cases.
- Refactored lock logic into `lockOrRenewToken` for streamlined processing.
- Modified `StoredObjectLockManager` logic to prevent unnecessary lock ID regeneration when updating existing locks.
- Added `testSetLockExistingUpdatesLockWithoutNewLockId` to verify behavior.
- Ensured `persist` is not called again for existing locks.
- Moved `putDocument` method from `WebdavController` to the new `WebdavPutController`.
- Introduced stricter locking and permission checks during PUT operations.
- Added new test suite `WebdavPutControllerTest` to cover different scenarios, including lock validation and access control.
- Updated existing logic in `WebdavControllerTest` to reflect these changes.
- Implemented the `parseIfCondition` method in `LockTokenParser` to extract lock tokens from `if` headers.
- Added `LockTokenParserTest` with multiple test cases using data providers to validate parsing logic, including scenarios with no headers, resource URIs, and "not" conditions.
- Implemented `LockTimeoutAnalyzer` to parse timeout values from RFC-compliant strings and return `DateInterval` objects.
- Added `LockTimeoutAnalyzerTest` with data providers to validate handling of various timeout cases, including "Second" and "Infinite".
- Replaced Redis-based locking mechanism with database-based `StoredObjectLock` management using `EntityManagerInterface`.
- Integrated `MockClock` and `Security` components for lock timing and user association.
- Updated test cases to include database persistence and user assignment during lock operations.
- Implemented `onKernelTerminate` event listener to handle deferred database flush for lock updates.
- Implemented `getRandomUser` method to fetch a random user using `EntityManagerInterface`.
- Added support for random user retrieval by querying `User` entity repository.
- Added `isActiveAt` method in `StoredObjectLock` to check if a lock is active at a specific time.
- Implemented `isLockedAt` method in `StoredObject` to determine if an object is locked at a given time.
- Included unit tests for `isActiveAt` method in `StoredObjectLockTest` to validate various scenarios.
- Created `StoredObjectLock` entity to manage locks on stored objects.
- Introduced `StoredObjectLockMethodEnum` to define locking methods.
- Added relationships between `StoredObject` and `StoredObjectLock` with appropriate methods for management.
- Added database migrations to create necessary tables and constraints for lock handling.
- Added `Security` service to `SectionMenuBuilder` for access control.
- Display "Tickets" menu item only if the user has `TicketVoter::READ` permission.
Replace `ActivityVoter::SEE` with `AccompanyingPeriodVoter::SEE` for correct authorization check
Closes#506
See merge request Chill-Projet/chill-bundles!972