История коммитов

.
refactor(mail): drop _new suffix from contact_list template
The legacy contact_list template was removed, so the _new suffix is redundant. Rename contact_list_new.phtml to contact_list.phtml and update the ContactController render call.
.
refactor(mail): move installer to src/Install
Relocate Installer to src/Install with the PSR-4 namespace Johncms\Modules\Mail\Install, matching the module's layered structure.
.
refactor(mail): remove legacy dispatcher and includes
All mail actions are migrated to dedicated controllers. Remove the legacy index.php dispatcher, the ignor/load includes and the orphaned contact_list template (the contacts index uses contact_list_new).
.
feat(mail): migrate message sending and conversation clearing
- Add POST /mail/write/{id} sending (SendMessageUseCase, SendMessageCommand): validation, antiflood, set_mail access, ignore checks, file upload, contact creation, duplicate guard
- Add GET/POST /mail/clear/{id} (ClearConversationController, ClearConversationUseCase) with per-message soft/hard delete
- Extend MailFileService with file name parsing, extension allowlist and uploaded file storage
- Add repository methods getLastMessageBetween, updateContactTime; drop unused clearConversation
- Remove legacy /mail dispatcher route and includes/write.php
- Drop legacy compose-by-nick and base64 mini-upload paths
.
fix(mail): point model relations to Eloquent User
MailMessage and Contact relations referenced Johncms\System\Users\User (the current-user service, not an Eloquent model), causing 'Call to undefined method getConnectionName()' on eager loading. Point them to Johncms\Users\User.
.
chore: ignore upload/downloads/screen uploads
.
refactor(mail): migrate files and conversation pages to layered architecture
- Add GET /mail/files page (FilesController, GetAttachedFilesUseCase, File DTOs); drop legacy includes/files.php and the ?act=files flow
- Add GET /mail/write/{id} conversation view (WriteController::conversation, GetConversationUseCase, message DTOs)
- Fix getConversation query semantics (delete/sys/spam filters, OR grouping) and eager-load recipient; add markAsReadByIds for marking received messages read
- Add MailFileService::formatSize
- Inject Tools/Bbcode via constructor instead of di('tools')/di('bbcode') in conversation use cases (fixes ServiceNotFoundException)
- Point conversation/contact/unblock links to clean URLs (profile, blocklist, legacy blocklist include)
.
refactor(mail): add file download route, fix routing, remove legacy redirect resolver
- Add DownloadFileController and DownloadFileUseCase for GET /mail/load/{id}
- Add incrementDownloadCount to MailMessageRepositoryInterface and EloquentMailMessageRepository
- Fix route definitions: remove trailing slashes so rtrim() in index.php matches correctly
- Set legacy /mail route to priority -1 so new ContactController takes precedence on GET
- Remove MailLegacyRedirectResolver (unused in a non-public module)
- Update stale URLs: ../profile/?act=office -> /profile/?act=office, ?act=write&id=X -> /mail/write/X, ?act=load&id=X -> /mail/load/X
.
refactor(notifications): migrate to layered architecture
- Add controllers: IndexController, SettingsController, ClearController
- Add use cases: GetNotificationListUseCase, SaveSettingsUseCase, ClearNotificationsUseCase
- Add NotificationRepositoryInterface and EloquentNotificationRepository
- Add AuthorizedUserMiddleware; replace legacy user check in routes
- Replace legacy catch-all route with clean URLs: /notifications/, /notifications/settings/, /notifications/clear/
- Migrate Installer to src/Install/ with updated namespace
- Add config/services.php with DI wiring and Counters class alias
- Update templates: remove layout args, add output escaping
- Fix guestbook_comment → guestbook_comments counter key bug
- Remove legacy index.php and includes/
.
chore(downloads): update changelog