Move article save/delete logic from monolithic factory to ArticleRepository
with DI-based controller actions, following the established refactoring pattern.
- ArticleRepository: add save() with 9 private helpers, archive() method
- ArticlesController: add save() and delete() actions with DI
- Factory methods delegate to repository (backward compatibility)
- Router: add article_save/article_delete action mappings
- Old controls methods marked @deprecated
- 59 tests, 123 assertions passing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Introduced Domain\Article\ArticleRepository for better data access.
- Migrated article_edit functionality to admin\Controllers\ArticlesController.
- Updated admin\factory\Articles::article_details() to use the new repository.
- Marked legacy methods in admin\controls as @deprecated for clarity.
- Updated changelog and versioning to reflect changes in version 0.242.
- Introduced new `SettingsRepository` and `CacheRepository` classes in the `autoload\Domain` namespace.
- Updated `SettingsController` in the `admin\Controllers` namespace to enhance settings management.
- Added new templates for settings in `admin\templates\settings` and `admin\templates\site`.
- Improved overall structure and organization of settings-related files.
- Added columns for two-factor authentication (2FA) in the pp_users table:
- twofa_enabled (TINYINT)
- twofa_email (VARCHAR)
- twofa_code_hash (VARCHAR)
- twofa_expires_at (DATETIME)
- twofa_sent_at (DATETIME)
- twofa_failed_attempts (INT)
- Updated the twofa_enabled and twofa_email for user with id 0.
- Enhanced .htaccess to disable directory listing, block execution of sensitive files, and prevent serving hidden files.
This commit introduces a new column `is_required` to the `pp_shop_products_custom_fields` table. The column is of type TINYINT, cannot be null, and has a default value of 1. This change is intended to enhance the product custom fields by allowing the specification of whether a field is mandatory.