Журнал изменений

Официальный сайт SLAED CMS

Журнал изменений

Фильтр и поиск

Всего: 1312 Доступных коммитов | Отфильтровано: 1312 Коммиты | Страница: 1 из 132
Сегодня (26.10.2026)
Feature: The update turns every stored text of a site from BB into Markdown once
Автор: Eduard Laas | Дата: 00:14 26.10.2026

The texts the parser renders are moving off the legacy BB layer onto CommonMark with GFM. update.php now converts them on the copy of a site: a text of the BB era is escaped so it renders what its author typed, a text that is Markdown by origin converts only its tags, and a text the site renders trusted keeps its raw HTML as markup.

Core changes:

  1. The converter (public/update.php):
  2. getMigrateMarkdown() turns balanced pairs of the known tags into Markdown: emphasis, links and autolinks, mail, images, quotes, code fences and spans, rules, the bullet of • , smilies Смайл - 01 -Смайл - 18 as emoji, <br /> as a hard break

    • the tags without an equivalent keep their text, the special tags keep their tokens around a converted content,
[usehtml] and [usephp] stay as written
  • an unpaired, crossed or misspelled tag and an empty or unsafe address (javascript, data, ed2k) stay text
  • the forms the old parser rendered convert too: [code=] as [code], whitespace around a value or an alternative text
  • a text of the BB era has every text run escaped by CommonMark; bare addresses stay as written
  • getMigrateHtml() writes Markdown through it: known HTML becomes the BB of the converter or a finished Markdown piece, an unknown block becomes [usehtml]

  • getMigrateAttach() reads the Markdown link, linked thumb and autolink; it and getMigrateForeign() keep the examples of fenced code and code spans

  • The text unit (public/update.php):
  • setUpdateTexts() runs after the archive unit over Node texts, comments, forum posts, private and admin messages, newsletters, blocks without a feed, signatures, own blocks, textarea fields and the contact text

    • Markdown by origin: Node texts, and on a 6.3 site the help replies and the rows of forum, comments and private
messages from 2026-07-13 on
  • a source rendered trusted (blocks, admin messages, newsletters, forum, signatures, own blocks, contact) takes
getMigrateHtml()
  • A batch of 200 rows is named in the manifest with the hashes of its new texts before its transaction; a stopped run neither converts a committed batch again nor loses one that rolled back, a verified unit is skipped

  • The dry run of the first stage ("Count the changes") counts per column and the forms met, and writes nothing; a text too long for its column stays BB and the report names it

  • The second stage converts the field values it appends to a carried text
  • Documents (docs/NODE.md):
  • The run order names the text unit, the dry run counts both units, the migration of the second stage writes Markdown, and UpdateTextTest joins the table of the update tests

  • Tests (tests/):
  • UpdateTextTest: the converter on BB, Markdown and 6.2 HTML; the unit with dry run, write, repeat, a dry run after it and a batch stopped before and after its commit, through update_probe.php in mode texts

  • UpdateAttachTest takes the Markdown forms; UpdateSiteTest expects the forum post and the private message of the 6.2 fixture in Markdown

Benefits:

  • The production texts reach the standard the parser is brought to, with no BB left for it to read
  • A stopped conversion can be run again without escaping an escape

Technical notes:

  • Measured as a dry run on a copy of production: 16906 texts change, none too long for its column
  • update.php is the owner's tool and never ships in a release
Вчера (25.10.2026)
Feature: The update catches a 6.3 site of early October up and drops the tables of the gone and the carried modules
Автор: Eduard Laas | Дата: 22:38 25.10.2026

The production site runs a development build of early October whose Node texts point into the archive of the first migration and whose schema, settings and tables lag behind the release. update.php now brings such a site forward on a copy without migrating its content again, drops the tables of the modules gone for good and every source table whose rows are in Node, and carries jokes and media into Node for any other 6.2 site.

Core changes:

  1. Catch-up of a 6.3 site (public/update.php, storage/update/sql/table_update6_3.sql):
  2. setUpdateArchive() rewrites the uploads/archive/<module>/ and old folder addresses of Node texts and their comments into [attach] or the file address of the material, and an archive address elsewhere into the address of the published material that carries the name

    • a dry run (POST dry=1, "Count the file addresses") counts per column and writes nothing
    • a manifest with counts, cursors and state; a stopped run continues, a verified unit is skipped
  3. setUpdateMerge() takes the retired keys out of a 6.3 site and adds every shipped option it lacks from storage/backup/release/config/; without that folder the step refuses

  4. The eight time columns of the early-October tables reach the forms of table.sql through runiftype(), each moment kept; a 6.3 db.php is written in the collation of the release

  5. Drop of the tables (public/update.php):
  6. setUpdateTables(), at the end of the first stage, drops the tables of auto_links, clients, clients_down, money, order, partners, products and whois, and every source table of Node whose rows are all materials

    • a published row by its _node_legacy row, a pending row by a material of its type with its title and creation time
    • an empty table at once; a table with a row matched by neither stays, the report names up to ten ids
  7. deleteMigrateTables() drops the table of a module right after its data step, once every row is a key of the map of the manifest and every material of the map is in _nodes; a manifest of another database keeps the table with a note

  8. The page of the second stage shows a carried module from its manifest
  9. Jokes and media (public/update.php, storage/update/sql/table_update6_3.sql):
  10. Both join getMigrateMap(); "Batch X" renames their 6.2 columns
  11. The twelve own columns of media land in the extra fields of its profile, every http(s) address of its links becomes a resource of the download role, ed2k and other schemes leave a note

  12. The rating balances of both are carried
  13. Text of the second stage (lang/*.php):
  14. _NODE_MIGINFO says that the table of a module is dropped once its materials are carried, in all six locales
  15. Tests (tests/):
  16. UpdateArchiveTest with the archive unit, the settings merge and the drop on a site of early October (a cp1251 table, a pending row, a row no address names)

  17. The update62 fixture gains the 6.2 tables of jokes and media with a rated joke and a film; UpdateSiteTest checks their materials, fields, resources and ratings, the tables left after each stage, and a stale table that stays

  18. The probe adds its help request before the first run, because an empty source table drops there
  19. SchemaUpdateValidationTest skips jokes and media like the other source tables
  20. isTreeSkipped() no longer enters uploads/, whose copy of a site carries the PHP of old releases; TreeWalkTest holds it
  21. Reference (docs/NODE.md):
  22. The run order, the schema file, the tests and the migration of the removed modules describe the catch-up, the drop and the two new modules

Benefits:

  • The production database moves to the current code keeping every row and id it holds
  • No table of a gone or carried module is left behind, and none is dropped while a row of it is not in Node

Technical notes:

  • Drops tables with no archive: the gone modules for good, the source tables only once their rows are materials
  • update.php remains the maintainer's tool and is not shipped in a release
Chore: Uploads stay out of git, only the shipped presentation assets are tracked
Автор: Eduard Laas | Дата: 19:07 25.10.2026

The files under uploads/ belong to a site, not to the release; a copy of a production site laid out on the stand for the move to the current code would otherwise show as hundreds of megabytes of untracked files, private ones among them, one careless add away from GitHub.

Core changes:

  1. Ignore rules (.gitignore):
  2. /uploads/* ignores every folder and file of the upload tree
  3. !/uploads/presentation/ keeps the shipped presentation assets (brand, dna, sites) tracked as before

Benefits:

  • No upload of a site, the production copy included, can reach the repository by accident

Technical notes:

  • The 214 tracked files under uploads/presentation/ stay tracked; a new shipped file outside that folder needs its own exception

  • No code, schema or behaviour change
Docs: One comment line per function in the remaining classes, the modules, the panel screens, both themes, the entries and the own JS
Автор: Eduard Laas | Дата: 19:05 25.10.2026

The multi-line comment blocks left in the remaining classes of core/classes/, the modules and panel screens, the CSS of both themes, the PHP entries and the JavaScript the release writes itself are cut to the one line the comment rule asks for: a fact outside the code, a decision that looks like a mistake, or a change that must not be made. With this commit no multi-line block is left; no line of code changed.

Core changes:

  1. Remaining classes of core/ (core/classes/.php, core/classes/api/.php, core/system.php, core/apply.php, core/rescue.php):

  2. the parser, feed, field, point, rating, cache, backup, editor, update, template, logger, quick, pdo and route classes and the API router and error cut to one line per function

  3. core/system.php, core/apply.php and core/rescue.php lose the blocks that retold their code
  4. Modules and panel screens (modules/account, modules/forum, modules/presentation, modules/search, admin/modules/config.php, fields.php, monitor.php, newsletter.php):

  5. the blocks above the handlers of the modules and of the four panel screens cut to one line
  6. modules/presentation/index.php: the block of 26 lines above the collector of the page figures cut to one line
  7. CSS of both themes (public/templates/admin/assets/css, public/templates/lite/assets/css, the Toast UI skins):
  8. base.css, theme.css, dock.css, presentation.css and the two skin.css files keep one line where a rule needs a reason
  9. reasoning that retold the declarations below it, measurements of past rig runs and history are gone
  10. Entries and own JavaScript (public/index.php, public/admin.php, public/templates/lite/index.php, public/plugins/system/*.js, public/plugins/presentation/presentation.js, public/plugins/altcha/altcha-init.js, the two CodeMirror build modes, public/templates/admin/assets/js/admin-ui.js):

  11. the blocks of the two PHP entries and of the theme entry cut to one line
  12. slaed.js, filemanager.js, emoji.js, global-func.js, presentation.js, altcha-init.js and admin-ui.js keep one line per function

Benefits:

  • A comment line is a claim worth checking rather than a retelling to skip
  • The comment rule now holds across the whole release, PHP, CSS and JavaScript alike

Technical notes:

  • Comments only: with comments and whitespace removed, HEAD and the commit are identical in all 51 files
  • php -l passes on the 33 PHP files
  • No schema, URL, API or behaviour change
Docs: One comment line per function in private messages, files, uploads, the panel core, security, the installer and the entries
Автор: Eduard Laas | Дата: 16:03 25.10.2026

The multi-line blocks above the functions of the private messages, the file manager, the upload service, the panel core, the security layer, the installer, the light path of uploads, the panel entry and the update gate are cut to the one line the comment rule asks for: a fact outside the function, a decision that looks like a mistake, or a change that must not be made. Retellings of the code, history, counts, links to deleted documents and claims about other files that nothing checked are gone; no line of code changed.

Core changes:

  1. Private messages, files and uploads (core/classes/privat.php, core/classes/filemanager.php, core/classes/upload.php):

  2. 35 blocks in privat.php, 26 in filemanager.php and 23 in upload.php cut to one line each
  3. links to the deleted documents PRIVAT-2026, FILE-MANAGER-CONCEPT-2026 and UPLOAD-2026 removed from the lines above enum PrivatBox, class FileManager and class Upload; the section line "The clock, the transfer..." above getTime() removed

  4. FileManager::addFilesArchive() states the true reason for .zip: the system area starts at BASE_DIR and includes public/; the old line said the upload tree is served by the web server, while /uploads/ goes through index.php

  5. Panel core (core/admin.php):
  6. 24 blocks cut to one line each
  7. getAdminFileShot() drops the claim that the upload tree is served by the web server: uploads/ is outside the document root and the light path serves the public folders

  8. getAdminFileGrants() drops "a capability this stage does not route yet": every capability has its route
  9. the section references (§17, §20) of a deleted document and the count of callers of getSqlbatch() removed
  10. Security, installer and entries (core/security.php, public/setup.php, core/stream.php, admin/index.php, core/gate.php):

  11. 11 blocks in security.php, 17 in setup.php, 4 in stream.php, 3 in admin/index.php and 1 in gate.php cut to one line
  12. the top-level blocks of security.php (the cut of the path, the canonical host, flood, the error page) and of gate.php cut to one line as well

  13. checkAdminLogin() drops the dated history of the old password form and states that an md5 hash is renewed
  14. the eight functions declared inside the input filter of security.php keep no line: PhpFileFormatTest refuses a comment inside a block

Benefits:

  • A comment line is a claim worth checking rather than a retelling to skip
  • Facts about other files are named once and listed for a test or a decision

Technical notes:

  • Comments only: git diff -U0 changes no line outside a # comment
  • No schema, URL, API or behaviour change
Docs: One comment line per function in the core helpers, Node, mail and comments, each carrying a fact the code cannot show
Автор: Eduard Laas | Дата: 04:01 25.10.2026

The multi-line blocks above the functions of the core helpers, the Node classes and module, the mail service and the comment subsystem are cut to the one line the comment rule asks for: a fact outside the function, a decision that looks like a mistake, or a change that must not be made. Retellings of the code, history, counts and claims about other files that nothing checked are gone; no line of code changed.

Core changes:

  1. Core helpers (core/helpers.php, core/system.php):
  2. 24 blocks in helpers.php and 96 in system.php cut to one line each
  3. the section lines "Temporary home...", "New, stable helper functions..." and "End of stable helper functions..." removed; the author header stays

  4. Node (core/classes/node/service.php, query.php, view.php, extension.php, ext/load.php, ext/support.php, ext/sync.php, modules/node/index.php, modules/node/admin/index.php):

  5. 109 blocks cut to one line each
  6. the line of NodeQuery::checkRowCat() keeps no reason: the old one claimed every statement compares the module of a category without case, while _categories.modul is ascii_bin and only checkNewName() lowers it

  7. Mail and comments (core/classes/mail.php, core/classes/comment.php):
  8. 43 blocks in mail.php, 37 and the block of Comment::MODULES in comment.php cut to one line each
  9. Comment::getTreeRows() drops the claim that the distribution targets servers without window functions: the floor, MariaDB 10.5.2+ and MySQL 8.0.16+, has them

  10. Comment::setWriteBegin() no longer states a return value; the old block said true where the code answers ''
  11. "eight modules" in getCountDrift() and deleteUser() goes: Comment::MODULES holds two targets

Benefits:

  • A comment line is a claim worth checking rather than a retelling to skip
  • Facts about other files are named once and listed for a test or a decision

Technical notes:

  • Comments only: git diff -U0 changes no line outside a # comment, except the two blank lines that went with the section lines of helpers.php

  • No schema, URL, API or behaviour change
Fix: A write of an address that the server rolled back whole runs again instead of ending the request in a 500
Автор: Eduard Laas | Дата: 03:06 25.10.2026

With innodb_snapshot_isolation, the MariaDB default from 11.6.2, two writers that moved one entity at once, and on some versions two that took one free path, left the second with error 1020, which rolls back the whole transaction. Route answered it with RuntimeException even when the write had a transaction of its own, so a form that only needed the next suffix failed. A write in its own transaction now starts over on a fresh snapshot; a write joined to the transaction of its writer still throws, as Point does.

Core changes:

  1. The write of a path (core/classes/route.php):
  2. setRouteWrite() runs a unit of its own whole again after 1020 or 1213, at most ROUNDS (3) times, and takes the next free suffix from the fresh snapshot

    • the rollback is proven by a round trip (DO 1) and checkSqlActive(), because the connection learns that the server
ended the transaction only from its next answer
  • the failure is logged once, with the round it ended in
  • a write behind the savepoint of an outer transaction throws RuntimeException on 1020 or 1213, unchanged
  • The race of two moves (tests/Support/registry_probe.php, tests/Unit/RouteRegistryTest.php):
  • getProbeRace() runs the race for one path and the new race of two moves of one entity, the child blocked on the statement each race names

  • twoWritersMoveOneEntity: the second mover ends on its own suffix with no chain; red without the change on MariaDB 11.8.3, green with it there and on MySQL 8.4

  • Reference (docs/ARCHITECTURE.md, docs/VERSIONS.md):
  • "Address Boundary" says what a lost transaction does to a write of its own and to a joined one

Benefits:

  • Two editors saving one material at once no longer turn the second save into a server error

Technical notes:

  • No schema, URL or API change; joined writers behave as before
Fix: The debug panel off in the shipped config, referer titles as text, help and docs in line with the code, plans out of docs/
Автор: Eduard Laas | Дата: 02:07 25.10.2026

The shipped config no longer opens the debug panel with its SQL trace to every visitor, and the referer list shows the addresses in its tooltips instead of escaped link markup. The help of four panel sections and five reference docs were checked against the code and corrected, and the roadmap and the plans left docs/ for the private agent repository, which every tracked file now names by subject instead of path.

Core changes:

  1. Debug panel off by default (config/global.php):
  2. var_view ships as '0': checkDebugView() opened the panel of getDebugSystemInfo() to every visitor while it was '1', because the admin global is set on every request; a site turns it on in the panel

    • a stand keeps its value in the compiled config/local.php until that is rebuilt
  3. Referer tooltips (admin/modules/referers.php):
  4. the two address cells pass the stored address, decoded as domain() decodes it, as title_text; they passed the HTML of domain(), which the template escaped into visible "<a ...>" markup

  5. Help of the panel in line with the code (admin/info/referers/ru.md, admin/info/favorites/ru.md, admin/info/scheduler/ru.md, modules/voting/admin/info/ru.md):

  6. "Переходы": the tabs, the five columns, the details tip, the sort-only filter and the confirmed clear replace a tab "Удалить", a "№" column and an IP hover that no longer exist

  7. "Избранное": the title is plain text, the dial holds view and the deferred delete, the module shows its readable name; rows newest first, guest rows, the filter behaviour

  8. "Голосования": the view button appears only for a running poll of no module; the filter "Статус" is the date state, not the after-expiration setting

  9. "Планировщик": the sitemap job runs only when automatic generation is on (off as shipped) and not more often than its interval; what it writes

  10. Reference docs in line with the code (docs/ARCHITECTURE.md, docs/UPDATE.md, docs/NODE.md, docs/PERFORMANCE.md, docs/EDITORS.md):

  11. the addresses of "Address Boundary" are marked as examples of the form
  12. the number 8.0.1 of the release example only shows the shape; the real 8.0.1 stays empty
  13. registry_probe.php reads SLAED_PROBE_DB as install_probe.php does
  14. OPcache is checked by extension_loaded() and opcache.enable of the stand module's php.ini; on PHP 8.5 it is built in and the zend_extension line stays commented

  15. Toast UI binds the file window once at register time, and the delivery order of filemanager.js that this relies on
  16. Comments that said what the code does not (core/system.php, admin/index.php, modules/voting/admin/index.php):
  17. domain(): what it renders; checkAdminLogin(): the passwords are hashed by the admins module and the first-administrator form, there is no admin recovery form; getVotingFilter(): the three date states against NOW()

  18. Plans out of docs/ (docs/ROADMAP-2026.md, docs/2027-*.md, .gitignore, docs/ARCHITECTURE.md, docs/UPDATE.md, public/demo/*):

  19. the roadmap and the five plans are deleted here; they live in the private agent repository under .plans/
  20. .gitignore ignores .plans/ and drops the retired .agents/, .prompts/, .idea/ and docs/plans/ entries; the sitemap line says the job writes the file when the site turns it on

  21. tracked docs and the demo name the plans by subject, never by a path a clone does not have

Benefits:

  • No production site shows its query trace to a guest by default
  • The help and the reference docs describe what the code does, so an agent or an editor working from them makes no wrong step

Technical notes:

  • No schema, URL or API change
  • Behaviour changes: the debug panel default (1) and the referer tooltips (2); everything else is documentation
Эта неделя (24.10.2026)
Feature: Filters for the six growing panel lists, empty states that say why, and the reference of the panel shell
Автор: Eduard Laas | Дата: 22:49 24.10.2026

The six lists of the panel that grow without bound get the filter bar of the canon, one condition read by the list, its count, its pager, its foot and "Pick all N"; an empty list says whether its filter or its queue is empty. The plans docs/13-LIST-PARITY-2026.md and docs/12-ADMIN-UI-2026.md close into the references, and the shell of the panel gets a help page of its own. ROADMAP steps 110j, 110k, 110l and 111.

Core changes:

  1. Filters of the six growing lists, step 110j (admin/modules/favorites.php, privat.php, messages.php, newsletter.php, modules/voting/admin/index.php, core/classes/privat.php, core/classes/mail.php):

  2. each list has get<X>Filter($src): the state of the request, the condition with its values and the query that keeps it, read by the list, the count, the pager, the foot and its sweep; get<X>Search($flt) draws the bar list-filter

  3. Privat::getAdminScope() and Mail::getDeadScope() answer the condition where a class owns the query, and Privat::getAdminList() and Mail::getDeadList() take the filter

  4. a language picks its own rows and the rows for every language; a search of one column is a plain search field named by that column; "without module" of the polls is "-", a poll that has not begun says _VOTING_SOON; the IP of a private message stands in its "i"

  5. every foot handler returns to its filter and page
  6. Empty states, step 110k (admin/modules/*.php, modules/account/admin/index.php, modules/node/admin/index.php, modules/master/admin/index.php):

  7. an empty list under its filter says _NONE_FOUND, without one _NO_INFO
  8. the queues of getAdminQueues() - pending comments, new accounts, Node "Waiting for review", the default support queue - say _ADM_CLEAN with is_calm; the mail queue is a delivery journal and is not one of them

  9. "Modules" says the same for its type filter; the OAuth provider column is _OAUTH_PROVIDER, no longer _MODUL
  10. Reference of the list parity, step 110l (docs/TEMPLATES.md, docs/VERSIONS.md, docs/2027-ADMIN-UX.md, admin/info/*/ru.md, modules/voting/admin/info/ru.md):

  11. docs/TEMPLATES.md "Admin List Contract": the row keys, the foot, setListPortion(), the filter helpers, the empty states; docs/13-LIST-PARITY-2026.md is deleted

  12. the help of the six filtered lists describes their filter bar
  13. Reference of the panel shell, step 111 (docs/ARCHITECTURE.md, docs/TEMPLATES.md, docs/WINDOW.md, docs/VERSIONS.md, docs/2027-*.md):

  14. docs/ARCHITECTURE.md "Admin Shell Boundary": the cookies of op option, localStorage of a device, the motion switch, the queues and their poll, the idle end of the session, the cockpit on core/monitor.php, the admin block and the floating menu, the watch window, the voices, the screensaver

  15. docs/TEMPLATES.md: the frame of the list canon and rows per page in "Admin List Contract", new "Admin Form Contract", "Alert Action Slot" and "Panel Shell"

  16. docs/WINDOW.md "Where the windows are" rewritten on the one frame fragments/window.html, with the shared palette controller setPaletteOpen()

  17. docs/VERSIONS.md: the entry of the panel shell with its breaking changes; docs/12-ADMIN-UI-2026.md is deleted and the 2027 plans point at the references instead

  18. Help of the panel, step 111 (admin/index.php, core/helpers.php, core/admin.php, admin/info/panel/ru.md, public/templates/admin/fragments/palette.html, public/templates/admin/fragments/window-foot-options.html):

  19. admin/info/panel/ru.md describes the shell: header and menu, "Options", Ctrl+K, the bell, the end of the session, the home, the floating menu, the lists, sound, the screensaver, forms and the keys

  20. admin.php?op=info opens it through getAdminPanelInfo(); the foot of "Options" and a row of Ctrl+K link to it
  21. setTplAdminInfoPage() takes can_edit: every administrator reads the help of the panel, a super administrator edits it

  22. the help of "Configuration" describes the find, the check with its summary and the question on leaving; the help of "Security" the fields idle and dump_age, and no longer lists sound/ in public/

  23. Stand state (config/node.php):
  24. the version of the Node type news as the stand saved it

Benefits:

  • every growing list of the panel finds its rows by the same bar and acts on exactly what the filter shows
  • the shell of the panel is described for the operator and for the developer, no plan file is needed to read it

Technical notes:

  • breaking for code outside the tree: Privat::getAdminList() and Mail::getDeadList() take the filter; the OAuth column reads _OAUTH_PROVIDER

  • new constants _OAUTH_PROVIDER and _VOTING_SOON in six locales
  • no schema change
Feature: Every panel list on the etalon of comments: the row by meaning, dates and details, key E, picks and "Pick all N"
Автор: Eduard Laas | Дата: 16:21 24.10.2026

The list canon builds what only "Comments" had from the meaning a module hands it: the moment, the details, the edit and find items of the dial, the row drop and the status. Seventeen lists with a deferred delete get picks and the bulk foot, their handlers take id[], and the twelve paged ones sweep the whole list in portions of one core helper, run by the foot handler itself. ROADMAP steps 110e-110i, plan docs/13-LIST-PARITY-2026.md steps 1-5.

Core changes:

  1. The row by meaning in the canon, step 110e (core/helpers.php, public/templates/admin/partials/admin-list.html, public/templates/admin/fragments/dial.html, admin/modules/comments.php):

  2. getTplAdminList() reads the row keys moment, details, drop, stat and the dial items is_edit and is_find

    • moment draws <time datetime data-sl-ago> with _TIMESTRING; an empty moment keeps the text of its module
    • details become the "i" popover in the first cell past the id, named by the row
    • drop joins the dial last as "gone del" and brings the pick column, "Picked: N", the action and OK
  3. the foot is one form sl-list-pick with a fieldset data-sl-pick per action (del, on, off, move); the select pick enables its group alone, so the browser sends only its op, direction, filter and token

  4. getTplPostAction() also returns the raw fields the canon takes id[] and the foot groups from
  5. op actions of "Comments" and _COMMENTS_PICK are gone; the foot posts delete and approve like every list
  6. Dates and "i" on every list, step 110f (admin/modules/.php, modules//admin/index.php):
  7. every list of groups A and B hands moment and details; no module calls popover or writes stamp for a list
  8. "Favorites" date by _favorites.time, "Polls" by enddate before the status; the bans read as the moment they end
  9. the "i" stands only where a row has data outside its cells; no details are invented
  10. Edit and key E, step 110g (admin/modules/.php, modules//admin/index.php, modules/node/index.php):
  11. the pencil of every list dial carries is_edit, Node materials through getNodeModerDial(); on "Languages" E opens the file of the module; is_find stays with "Comments", the only list that filters from its dial

  12. a sent campaign of "Newsletter" holds "Clone" in that place, so only a draft has E
  13. Picks and the bulk foot, step 110h (admin/modules/favorites.php, messages.php, newsletter.php, privat.php, scheduler.php, security.php, modules/account/admin/index.php, modules/node/admin/index.php, modules/search/admin/index.php, modules/voting/admin/index.php, modules/account/index.php, modules/voting/index.php):

  14. seventeen lists hand drop; their handlers take id[] holding the key of the row: a job, a log file, a ban entry, the row of _user_oauth; a ban removal names its list by kind (ip, user)

  15. Node reads the type and the current version of each material itself before NodeWriter::deleteNode()
  16. the lamp of "Messages" joins the foot and turns in place; "Revive" of the undelivered is the foot action move
  17. the delete of a user from the profile and the poll menu of the site post id[] as well
  18. "Pick all N" through one core helper, step 110i (core/helpers.php, core/classes/comment.php, core/classes/mail.php, core/classes/privat.php, core/classes/node/query.php, public/templates/admin/assets/js/admin-ui.js and the handlers of section 4):

  19. setListPortion($key, $from, $where, $pars, $act): with upto in the post it walks the next 100 ascending keys of the list's condition between after and upto, hands each to the action and answers {done, fail, after, more}

    • the condition is wrapped in parentheses, so an OR of a list never widens the portion
    • the journal record of a portion carries the number of rows it walked
  20. the foot handler runs the portions itself: the group posts its own op with upto instead of id[], and the handler holds its row action once as a closure for both paths; a refused token stays a 409 through later=1

  21. one condition per list for the list, its count and its sweep: getAccountScope(), NodeQuery::getNodeScope() with the newest id, Mail::getQueueScope(); Comment::getAdminScope() is public and answers its join

  22. every paged list hands its bound upto (MAX of its key by the same condition); the five lists of one page show every row already and get no offer

  23. Help, plans and tests (admin/info//ru.md, modules//admin/info/ru.md, docs/13-LIST-PARITY-2026.md, docs/ROADMAP-2026.md, docs/TESTS.md, tests/):

  24. the help of every list describes the picks, the foot and, on the paged ones, "Pick all N" with pause and unpick
  25. AdminListRowTest holds every canon key with and without it and the comment row against its glued form
  26. ListPickTest runs every foot handler over tests/Support/pick_probe.php with and without the token, and with upto
  27. ListPortionTest holds the portions against the count and the bound of every paged list on the stand database
  28. the comment sweep probe drives setListPortion(); MailQueueTest and NodeQueryTest know the new public methods
  29. PHP 8.5 constants (core/classes/backup.php, core/system.php, tests/Support/backup_probe.php):
  30. PDO::MYSQL_ATTR_USE_BUFFERED_QUERY becomes Pdo\Mysql::ATTR_USE_BUFFERED_QUERY

Benefits:

  • every panel list behaves like the etalon from one canon instead of glued markup per module
  • a bulk action and a sweep share the action of a single row, so points, counters and routes move the same way
  • the sweep reads the very condition the list counts, which ListPortionTest proves on live data

Technical notes:

  • breaking: op sweep of "Comments" and Comment::setAdminPortion() are removed; getTplAdminList() takes upto in place of bulk => [sweep, upto]; data-sl-allpages is a bare attribute

  • breaking: the delete handlers take id[] and no longer a single id; bansave() reads the kind of a removal from kind
  • no schema change

Страница 1 из 132. Всего: 1312

1 2 3 4 5 6 7 8 9 10 … 132
Хотите опробовать SLAED CMS в действии?
Идеи и предложения
Обратная связь
Подтверждение

Поделиться
QR-код

Предварительный просмотр