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

.
fix(mail): correct blocklist flow and message counter
- align block/unblock route params with controller signatures (userId)
- use is_online property and tools->displayDate in blocklist template
- update legacy /mail/?act=ignor links to /mail/blocklist, /mail/block, /mail/unblock
- toggle profile block/unblock button by actual block state, not can_write
- drop duplicate JS confirm on contact delete
- fix message count query grouping so soft-deleted messages are excluded
.
docs: update 9.9 changelog with mail rewrite and module refactorings
- Mail: CKEditor migration with mail:convert-bbcode command, layered architecture rewrite
- Auth, registration, language: migrate to controller architecture
- Notifications, redirect: migrate to layered architecture
- Online: PSR-4 architecture; Help: extract pages to controllers
- Deprecate routes.local.php; remove unused RSS module
- Add PageMeta value object
.
fix(mail): correct IP display by passing raw attributes to UserProperties
User model's Ip cast converts the stored integer to a string via toArray(),
causing UserProperties::getFromArray() to receive "172.18.0.5" and compute
long2ip((int)"172.18.0.5") = long2ip(172) = "0.0.0.172".
Use getRawOriginal() to pass the integer value the method expects.
.
feat(mail): migrate message editor from BBCode to CKEditor
- Replace BBCode toolbar/textarea with the CKEditor partial in the write form (image upload disabled)
- Normalize editor content and strip empty tags on send via EditorContentNormalizer
- Render messages with HTMLPurifier + media embed + smilies instead of BBCode checkout
- Extract conversation list preview into MailMessagePreviewService for HTML content
- Add MailBbcodeToHtmlConverter and mail:convert-bbcode command to migrate legacy data
.
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