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

.
refactor(news): save articles through a use case and the repository
SaveArticleUseCase validates the form and writes the article with its text for the search; the form keeps its addresses and its template. Two answers change on the way: a code taken at the root is refused as in a section rather than ending in an error of the database, and a date that is not one is refused rather than ending in an error of the server. The dates are no longer escaped on their way in.
.
test(news): record what the form of an article writes before rebuilding it
Adding an article to the section of the address and changing one: the fields, the code made of the name or of what is given, the dates, the author, the text of the search, where the form returns to, and what it refuses — a name left empty, a code taken in the same section, an unknown article or section.
.
feat(news): rebuild the news of the panel as a flat live list with deleting in dialogs
/admin/news lists every article, or every section on its tab, flat, with the path of the section beside each; it is narrowed by a section with its subtree (0 for the root, the articles stored without a section among them), by the status worked out from the switch and the dates, by the author and by a search of the name, the code or the number, and ordered from the heads of the columns. /admin/news/content/{id} leads to the list of that section. Deleting an article or a section is a dialog at /admin/news/articles/{id}/delete and /admin/news/sections/{id}/delete, which says what goes with a section and returns to the page of the list; a missing one answers 404 rather than 500. The page of the tiles and the confirmations with a token of their own are gone.
.
refactor(news): delete articles and sections through use cases and repositories
DeleteArticleUseCase removes the attached files and the article, DeleteSectionUseCase the section with its subtree, which SectionTree works out from where every section stands rather than from the cached list of subsections. The repositories of the articles and the sections are the first of the module; the confirmations keep their token and their answers. The properties of the models are typed, which pays off the entries of the baseline that their untyped PHPDoc caused.
.
test(news): record the current behaviour of the content of the panel before rebuilding it
The page of the module, the sections and the articles of one level of the tree, the confirmations of deleting an article or a section with their token, a section taking its subtree with it, and the odd answers as they are: an article whose section is null is listed nowhere, a missing article or section to delete answers 500.
.
feat(admin): rebuild the karma settings and confirm clearing it in a dialog
The switches, the limits of voting and clearing are cards of their own, every setting says what it does, and clearing is a dialog that tells how many votes go. The switch of the staff says what it does: it lets them be voted for, as the profile reads it, and was labelled as forbidding it. The daily limit is named after what it counts, points rather than votes.
.
test(admin): cover what the antiflood settings write into the configuration
.
fix: pick the delay of the day/night antiflood by the hours of the day
The current hour was compared with the delays themselves instead of the hours the day begins and ends, so the mode applied the night delay nearly all the time. The day now lasts from the hour it begins up to the hour it ends.
.
feat(admin): rebuild the antiflood settings
The mode, the two delays and the hours of the day are cards of their own, every mode says what it does, and the fields carry their units and bounds. The settings are behind admin.settings.manage, as the menu shows them: the panel access alone let a moderator change them.
.
feat(admin): rebuild the cleanup of inactive users and confirm it in a dialog
The page tells who is removed and what goes with them, and shows how many accounts the cleanup would take now; the deletion is confirmed in a dialog at /admin/users/cleanup/confirm, which offers no deletion when nobody meets the conditions. The cleanup is behind admin.settings.manage, as deleting a single account is: the panel access alone let a moderator run it.