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

simba77
refactor(profile): migrate activity page to new architecture
Add ActivityController with messages/topics/comments sub-modes served at
/profile/{id}/activity, /activity/topics and /activity/comments.

- GetActivityUseCase loads the profile, selects the data source by
ActivityType and maps rows for templates
- ProfileActivityRepositoryInterface + EloquentProfileActivityRepository
paginate forum messages, forum topics and guestbook entries using
eager-loaded forum models (topic.section.parentSection)
- ForumActivityPreviewService builds short plain-text post previews
- ActivityDTO and ActivityType enum
- Reuse ForumTopicPathService and GuestbookEntry::post_text
- Update view/statistics links, remove legacy includes/activity.php and
drop 'activity' from the index.php dispatcher
simba77
refactor(profile): migrate IP history page to new architecture
- New /profile/{id}/ip-history route (profile.ip-history) with IpHistoryController + GetIpHistoryUseCase + IpHistoryDTO
- Add IpHistoryRepository with Laravel pagination
- Access guard (admin or owner) in the use case via ProfileAccessForbiddenException (HTTP 403)
- Meaningful breadcrumbs: profile owner -> IP History
- Update ip_history_url link in profile view
- Remove legacy includes/ip.php and ip from dispatcher
simba77
refactor(profile): migrate profile view page to new architecture
- New /profile/{id} route (profile.view) with ProfileController + GetProfileViewUseCase + ProfileViewDTO
- Add KarmaRepository; reuse mail ContactRepository for contact/ignore state
- Move karma, ban, buttons, notifications logic into the use case
- Change core profile_url accessor to /profile/{id}
- Update all profile-view links across admin, album, downloads, forum, library, mail, system
- Absolutize profile action links to the legacy /profile/?act= catch-all
- Remove legacy includes/index.php, templates/index.phtml, is_contact() and index from dispatcher
simba77
docs(refactoring): clarify on-demand directories and find/get naming
- Create src/ subdirectories on demand; only the three top-level folders upfront
- Add find* vs get* repository method naming convention (?Entity -> find*)
simba77
refactor(profile): scaffold src/ and migrate statistics page
- Add PSR-4 autoload (Johncms\Modules\Profile\) and config/services.php
- Move Installer to src/Install/ with new namespace
- New /profile/{id}/statistics route (profile.statistics) behind AuthorizedUserMiddleware
- StatisticsController + GetProfileStatisticsUseCase + ProfileUserRepository + ProfileNotFoundException
- Add statistics.phtml template; fix double-escaping of title and breadcrumbs
- Remove legacy includes/stat.php, templates/stat.phtml and stat from index.php dispatcher
- Update statistics links in office.phtml and index.phtml
simba77
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
simba77
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.
simba77
fix(mail): use Capsule instead of unbound DB facade in conversation queries
simba77
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).
simba77
fix(profile): update office page mail links to current routes