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

.
refactor(profile): migrate reset user settings to new architecture
Replace the legacy ?act=reset include with a ResetSettingsController (POST /profile/{id}/reset-settings). Guard (rights>=7 and over a lower-rights user) is folded into GetResetSettingsContextUseCase; ResetUserSettingsUseCase performs the action via ProfileUserRepository::resetSettings, resetting set_user/set_forum through a loaded model so the casts serialize correctly. Convert the legacy edit.phtml link to a POST submit button and drop reset from the legacy dispatcher.
.
refactor(profile): migrate change password page to new architecture
- Add ChangePasswordController (GET form / POST change), URL /profile/{id}/password
- Add GetChangePasswordContextUseCase (guard: owner or admin rights>=7 over lower-rights user)
- Add ChangePasswordUseCase + ChangePasswordCommand with legacy-equivalent validation
- Add ChangePasswordException (own constructor; parent withErrors() returned wrong type)
- Add ProfileUserRepository::updatePassword()
- Update password links in account.phtml and edit.phtml to clean URLs
- Remove legacy includes/password.php and 'password' from $mods
.
refactor(profile): migrate email confirmation page to new architecture
Move the confirm_new_email action from the legacy includes/ dispatcher to a
dedicated controller and use case under the new module architecture.

- Add ConfirmNewEmailController and ConfirmNewEmailUseCase
- Add confirmNewEmail() to ProfileUserRepository(Interface)
- Register public route GET /profile/confirm-email/{id:number}/{code}
(profile.confirm-email), outside the auth group: the link is opened from
an email and the confirmation code is the access boundary
- Simplify confirm_new_email.phtml to a bool $confirmed flag
- Update the confirmation link generated in includes/edit.php
- Remove legacy includes/confirm_new_email.php and drop it from $mods
.
refactor(profile): migrate guestbook page to new architecture
Migrate the legacy profile guestbook to GuestbookController served at
/profile/{id}/guestbook (GET and POST for reply/edit/delete forms).

- Wrap the legacy Johncms\Comments component via output buffering, the
same pattern as downloads FileCommentsController
- Use a clean path script without sub_id_name (Comments::buildUrl adds the
separator); owner can delete and reply
- GetGuestbookContextUseCase loads the profile with the visibility guard
- MarkGuestbookReadUseCase resets comm_old when the owner views their own
guestbook outside of a mod action; add ProfileUserRepository::markGuestbookSeen
- Update act=guestbook links in account/view templates and the
notifications use case to /profile/{id}/guestbook
- Remove legacy includes/guestbook.php and drop 'guestbook' from index.php
.
refactor(profile): migrate account page to new architecture
Migrate the legacy office personal account page to AccountController served
at /profile/account (owner-only, no id — always the current user).

- GetAccountUseCase aggregates account counters into AccountDTO
- AlbumPhotoRepositoryInterface + EloquentAlbumPhotoRepository count the
user's album photos (album module has no models yet, so Capsule::table)
- Reuse mail MailMessageRepositoryInterface and ContactRepositoryInterface
for mailbox and contact counters
- Rename office.phtml to account.phtml and drive it from the DTO
- Update every act=office link across mail, login, admin, themes and the
legacy profile settings templates to /profile/account
- Remove legacy includes/office.php and drop 'office' from index.php
.
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
.
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
.
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
.
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*)
.
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