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

.
refactor(mail): unify navigation, breadcrumbs and section tabs
- redirect /mail to /mail/incoming, move contacts to /mail/contacts
- use a single breadcrumb root (My Account > Mail) across all pages
- show interlocutor name in conversation breadcrumbs and title
- add shared section tabs (mail::nav) styled like the online module
- fix stale mail links in profile, office and notifications
.
fix(mail): avoid ONLY_FULL_GROUP_BY error in conversation queries
Drop the users join from the grouped conversation queries and select only the counterpart id and last message time. User models are loaded separately afterwards, so joining users only to select u.* broke ONLY_FULL_GROUP_BY on MariaDB.
.
fix(mail): use Capsule instead of unbound DB facade in conversation queries
.
refactor(profile): move office mailbox counters to mail repositories
Replace raw SQL counter queries in the office page with dedicated count methods on MailMessage and Contact repositories (countInbox, countNewInbox, countOutbox, countNewOutbox, countAttachedFiles, countBlocked).
.
fix(profile): update office page mail links to current routes
.
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.