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

.
refactor(downloads): extract MoveFileController with clean URL route
Replace legacy ?act=transfer_file with /downloads/move-file/{id}.
Extract MoveFileUseCase for file relocation logic.
.
refactor(downloads): extract AdditionalFilesController with clean URL route
Replace legacy ?act=files_more with /downloads/additional-files/{id}.
Add $fillable to DownloadMoreFile model.
.
refactor(downloads): extract EditScreenController and add breadcrumbs
Replace legacy ?act=edit_screen with /downloads/edit-screen/{id} admin route.
Add NavChain breadcrumbs to DeleteFileController and EditFileController.
.
refactor(downloads): extract EditFileController with clean URL route
Replace legacy ?act=edit_file with /downloads/edit-file/{id} admin route.
.
refactor(downloads): extract DeleteFileUseCase from DeleteFileController
Move file deletion logic (screens, more files, bookmarks, comments,
category counters) into a dedicated use case accepting file id.
.
refactor(downloads): extract DeleteFileController with admin middleware
Replace legacy ?act=delete_file with /downloads/delete-file/{id} route.
Add DownloadsAdminMiddleware that returns 404 for non-admin users,
applied to a separate admin route group.
.
refactor(downloads): add DownloadsAccessMiddleware for section access control
Extract mod_down access check from index.php into a proper middleware.
Wrap all downloads routes in a group protected by the middleware.
.
refactor(downloads): extract FilesUploadController with clean URL route
Replace legacy ?act=files_upload with /downloads/upload/{id} route.
Add $fillable to DownloadFile model for mass assignment via Eloquent.
.
refactor(downloads): extract LoadFileController with clean URL route
Replace legacy ?act=load_file redirect with /downloads/load/{id} route.
Remove all now-unused includes/ files migrated in previous iterations.
.
refactor(downloads): extract FileCommentsController with clean URL route
Migrate ?act=comments&id=X to /downloads/comments/{id}. Legacy action
now redirects. Comments class gets buildUrl()/queryBase() helpers so
URL param separator is chosen correctly (? vs &) based on the base URL,
enabling path-based routing without appending redundant query params.