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

simba77
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.
simba77
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.
simba77
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.
simba77
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
simba77
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
simba77
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
simba77
feat(album): add full-context breadcrumbs across module pages
Build complete breadcrumb chains on album/photo pages and their
actions so every page links back to the user's album list, the album
and (for photo actions) the photo.

- Insert the 'user albums' level (Your/User albums) and the album/photo
links on show, photo view, comments, upload, edit/create/delete album
and edit/move/delete photo pages.
- Inject User into the six write controllers to label the user level.
- Make the album name a plain leaf on the album page (was a self-link).
simba77
fix(album): correct output escaping across templates and presenter
Escape audit of the album module (escape-on-output model).

- Escape the username and album URL in user_row.phtml (an XSS hole
affecting the album list and users pages); also escape the filter
links in users.phtml.
- Stop double-escaping album names/descriptions: checkout() already
runs htmlentities(), so drop it from PhotoPresenter::previewText
and presentDetail, UserAlbumsController, and the breadcrumb titles
in ShowAlbumController and PhotoCommentsController (the breadcrumbs
template escapes on render). Templates now escape these values once.
- Drop the now-unused Tools injection from UserAlbumsController and
PhotoCommentsController.
simba77
refactor(album): collapse routes into a single auth group
Move all album routes into one $router->group('') with a shared
AuthorizedUserMiddleware (mirroring the profile module) instead of
per-route middleware. Numeric path params use the inline {id:number}
syntax; the filter/type enum params keep explicit requirements.
simba77
refactor(album): remove legacy front controller and dispatcher
All actions are migrated to the new architecture, so the legacy
front controller can go.

- Delete index.php, lib/Photo.php and the empty includes/ directory.
- Drop the legacy catch-all route (album.legacy); the Aura autoload
registration is removed with index.php.
- Point the sitemap album entry at /album (the migrated route).