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

.
refactor(admin): migrate emoticons to new architecture
Move smilies cache rebuild to EmoticonsController (GET landing /admin/emoticons
+ POST /admin/emoticons rebuild). Scan filesystem behind SmiliesScannerInterface
(FileSystemSmiliesScanner) and persist via SmiliesCacheRepositoryInterface
(FileSmiliesCacheRepository), preserving the existing serialized cache contract.
Add CSRF and PRG redirect (legacy rebuilt on plain GET). Remove includes/emoticons.php
and its dispatcher entry; point both sidebars at /admin/emoticons.
.
refactor(admin): migrate system settings to new architecture
Move system settings to SystemSettingsController (GET/POST /admin/settings).
Introduce the rights>=9 gate pattern: SuperAdminAccessMiddleware mirrors
AdminAccessMiddleware with the SUPER_ADMIN threshold and is self-contained,
since group middleware does not propagate into nested route groups. Settings
live in a nested super-group; future rights>=9 actions go there too. Extract
the theme list behind ThemeListProviderInterface. Reuse the config writer; add
CSRF and PRG redirect. Remove includes/settings.php and its dispatcher entry;
point both sidebars at /admin/settings.
.
refactor(admin): migrate antiflood settings to new architecture
Move antiflood settings to AntifloodSettingsController (GET/POST /admin/antiflood).
Reuse the config writer (SystemConfigRepositoryInterface) introduced for the
modules-access page; clamp ranges in UpdateAntifloodSettingsUseCase. Add CSRF
and PRG redirect (legacy had neither). Remove includes/antiflood.php and its
dispatcher entry; point both sidebars at /admin/antiflood.
.
refactor(admin): migrate modules access to new architecture
Move ?act=access to GET/POST /admin/modules-access in the admin group.
Introduce a reusable config writer (SystemConfigRepositoryInterface +
FileSystemConfigRepository writing the johncms key to system.local.php,
throwing ConfigWriteException on failure) for the upcoming settings pages.
UpdateModulesAccessUseCase + ModulesAccessDTO carry the eight access flags.

Add CSRF protection to the form and switch to PRG (flash + redirect) on
success. Both sidebars now link to /admin/modules-access.
.
refactor(admin): migrate ban list to new architecture
Move the ?act=ban_panel list to GET /admin/bans (+ /admin/bans/by-violations)
in the admin group. GetBanListUseCase + BanListRepositoryInterface with
EloquentBanListRepository (User joined to the most-recent ban per user via
joinSub, correlated bancount). BanListRowMapper composes AdminUserRowMapper
with active-ban highlight and violations-history button.

Amnesty (write, rights >= 9) is left in the legacy include for now (phase 4);
the Amnesty button points to /admin/ban_panel/?mod=amnesty. Both sidebars
now link to /admin/bans.
.
refactor(admin): migrate IP search to new architecture
Move ?act=search_ip to GET /admin/ip-search (+ /admin/ip-search/history)
in the admin group. IP range parsing (single/range/mask) extracted to
IpRangeParser; SearchUsersByIpUseCase + IpSearchRepositoryInterface with
EloquentIpSearchRepository (paginateUsers, paginateHistory via joinSub on
most-recent history record). Switch the search form from POST to GET.

Rename /admin/search_ip to /admin/ip-search and update all link generators
across forum, downloads, mail, news, guestbook, profile, online and the
central User/GuestSession mutators and UserProperties.
.
refactor(admin): migrate IP Whois to new architecture
Move ?act=ip_whois to GET /admin/ip-whois (admin.ip_whois) in the admin
group. Controller in Application/Controllers/Ip/; fsockopen logic extracted
to Infrastructure/Whois/SocketWhoisClient behind WhoisClientInterface.
Highlighting and nl2br moved to the template after output escaping.
Update whois links in UserMutators and online IpController to the new URL.
.
refactor(admin): migrate users list to new architecture
- Add UserListController (GET /admin/users[/by-nick|/by-ip]) backed by GetUserListUseCase + UserListResultDTO
- Add UserListSort enum (whitelisted sort columns) and UserListRepositoryInterface + EloquentUserListRepository (paginate preg=1)
- Reuse AdminUserRowMapper for table rows; paginate via Tools::displayPagination + PageMeta
- Remove legacy includes/userlist.php and its $actions entry; point both sidebars to /admin/users
- Pagination total now counts approved users only (matches the listed set), fixing the legacy count-all mismatch
.
refactor(admin): migrate administration list to new architecture
- Add StaffListController (GET /admin/staff) backed by GetStaffListUseCase + StaffListDTO/StaffGroupDTO
- Add StaffRepositoryInterface + EloquentStaffRepository and AdminUserRowMapper (reuses Johncms\Users\User)
- Remove legacy includes/adminlist.php and its $actions entry; point both sidebars to /admin/staff
- AdminAccessMiddleware now returns a sidebar-less 403 page for insufficient rights instead of pageNotFound()
- Add system::error/403 templates to admin (guest layout) and default themes
- Fix RenderEngineFactory/Assets isAdmin() to match bare /admin (no trailing slash) and ignore query string
.
refactor(admin): migrate dashboard to new architecture
- Add DashboardController (GET /admin) backed by GetDashboardContextUseCase + DashboardContextDTO
- Add DashboardRepositoryInterface + EloquentDashboardRepository (reuses User and Forum ForumMessage models)
- Add AdminAccessMiddleware (rights>=7 gate, guest -> /admin/login) and UserRights enum
- Grow services.php to load Application (exclude DTO/Exceptions) + Infrastructure and bind the repository
- Rename legacy catch-all to admin.legacy with priority(-100) so migrated routes win over it