Continues the column-unification effort (Batch W) by renaming legacy column references in the modules and installation schema that were missed in the previous batches.
Core changes:
- SQL schema (setup/sql/table.sql):
- content._text → body, message.content → body, newsletter.content → body
- privat.content → body, voting.questions → body
- Comments admin (admin/modules/comments.php):
- SELECT comment → body, UPDATE SET comment → body
- Account module (modules/account/index.php):
- SELECT comment → body in user activity listing
- Clients admin (modules/clients/admin/index.php):
- infotext → body, prod_id → pid in SELECT / INSERT / UPDATE
- Forum admin (modules/forum/admin/index.php):
- categories.description → intro in category listing query
Benefits: - SQL schema is now consistent with the renamed columns in production tables - All module queries reference the unified column names - Eliminates divergence between install schema and live database structure
Technical notes: - Pure column-name substitution — no logic or behaviour changes - Matches renames applied to core and other modules in Batches M–W
Completes the directory rename started in the previous commit by deleting all obsolete language/ subdirectories across core, admin, modules, setup and templates, and updating every consumer that still referenced the old path.
Core changes:
Directory cleanup (admin/language/, language/, modules/*/language/, modules//admin/language/, setup/language/, templates//images/language/):
- Remove 1064 obsolete files (.htaccess, index.html, .php, .png)
Path references (robots.txt, templates/admin/index.php, templates/lite/index.php):
- Disallow /lang/ instead of /language/ in robots.txt
- scandir() and img_find() calls updated to lang/ and lang/*_mini.png
Test suite (tests/LanguageConstantsUsageTest.php, tests/LanguageValidationTest.php, tests/ModuleStructureTest.php):
- Regex patterns and directory scan paths updated to lang/
Benefits: - Eliminates dead files left behind by the rename commit - Robots.txt and templates correctly reflect new directory layout - Test suite validates lang/ structure instead of the removed language/ dirs
Technical notes: - Pure cleanup — no logic changes, no backward-compat shims needed - All lang/ files were created in the preceding rename commit
All SQL queries, getVar() calls, variable names and HTML form field names updated to match the new column names introduced by Batch W.
Core changes: - modules/content/index.php + admin/: text → body (SELECT, UPDATE, INSERT, getVar, textarea, PHP vars, RSS cache UPDATE) - admin/modules/messages.php: content → body everywhere (SELECT ×2, UPDATE, INSERT, getVar, textarea, list() destructuring) - admin/modules/newsletter.php: content → body everywhere (SELECT, UPDATE, INSERT, getVar, textarea, preview) - core/user.php: _message content → body (SELECT, loop vars, template pass-through); _privat content → body (SELECT ×2, INSERT named param); _content text → body (RSS getContent SELECT) - core/admin.php: _privat p.content → p.body (SELECT + while list()) - core/system.php: _voting questions → body (getVoting SELECT, loop, form field name body[], JS fallback body%5B%5D); updateNewsletter content → body (SELECT + addMail call) - modules/voting/admin/index.php: questions → body (SELECT, UPDATE, INSERT, getVar, form input name body[], loop variable) - setup/index.php: questions → body in legacy import INSERT - modules/clients/index.php: URL param prod_id= → pid= (cosmetic)
Six tables are normalised to use a consistent body column name instead
of the legacy table-specific names (infotext, prod_id→pid, text, content,
questions). The rencol() stored procedure is fully idempotent, so the
scripts are safe to re-run on already-migrated databases.
Core changes: - batch_migrate.sql: add Batch W (CALL rencol for all six tables) - table_update6_3.sql: add Batch W; update Batch U MODIFYs to new names (body replaces text/content/questions in column type definitions) - table_update6_3_finalize_local.sql: add rencol calls + updated MODIFYs for local-install finalizer path
Tables affected: {prefix}_clients_down infotext → body, prod_id → pid {prefix}_content text → body {prefix}_message content → body {prefix}_newsletter content → body {prefix}_privat content → body {prefix}_voting questions → body
All per-module and global language file directories have been renamed
from language/ to lang/ for consistency with modern PHP conventions
and to align with the new single-source multilingual architecture.
Core changes: - Delete all legacy language/ subdirectories (admin, modules, templates) - Add equivalent lang/ directories with identical file contents - core/access.php, core/security.php: update language path references - admin/modules/config.php, lang.php: update getLangPath() and scandir() - blocks/block-languages.php: update opendir() and img_find() paths - CONTRIBUTING.md, README.md, UPGRADING.md: update docs accordingly - tests/: fix path references in LanguageConstantsUsageTest et al.
Benefits: - Cleaner, shorter directory names throughout the module tree - Consistent naming convention across all 40+ module language bundles
Update all SQL queries across blocks and feature modules to use normalized column names; rename whois st_*/hometext columns; drop bundled pclzip library.
Core changes:
- blocks/*.php:
- Column renames in all block queries (lang, status, etc.)
- modules//index.php, modules//admin/index.php:
- All module queries updated for Batches M–V renames
- hometext→body, bodytext→body, description→intro, etc.
- modules/whois/:
- hometext → body, st_domain/st_host/st_dc → sdomain/shost/sdc
- INSERT and SELECT queries updated in both user and admin panels
- modules/clients/pclzip.lib.php:
- Removed bundled third-party library (5693 lines)
Benefits: - All modules consistent with normalized schema after migration - Whois column names follow single-letter-prefix convention - Repository size reduced by removing bundled dependency
Technical notes: - No logic changes in any module; pure column name substitution - pclzip removal: dependency must be managed externally if still needed
Update all SQL queries in core bootstrap and admin panels to use the normalized column names established by Batches M–V migrations.
Core changes:
- core/system.php:
- blang → lang (blocks), module → modul (session)
- link → url (referer/auto_links)
- core/admin.php, core/user.php, core/security.php:
- Remaining session/user/admin column renames
- admin/modules/*.php:
- All admin panel queries updated to new column names
Benefits: - Core layer consistent with normalized schema - No more column-not-found errors after migration
Technical notes: - No logic changes; pure column name substitution
Align fresh-install schema and all migration paths with current column naming conventions; add _whois to table.sql; fix audit findings found in idempotency review; rename st_domain/st_host/st_dc → sdomain/shost/sdc.
Core changes:
- table.sql:
- Apply all Batches M–V renames (pwd→password, lvisit→lastvis, etc.)
- Add _whois table (was missing from fresh install)
- Rename st_domain/st_host/st_dc → sdomain/shost/sdc
- batch_migrate.sql:
- Add Batches M–V: structural MODIFY, semantic renames, consistency fixes
- Fix idempotency bugs in addidx calls (stale intermediate column names)
- Add rencol calls for sdomain/shost/sdc rename
- table_update6_3.sql:
- Mirror all batch_migrate.sql fixes for 6.2→current upgrade path
- Add Batch U: _whois type normalization
- table_update6_3_finalize_local.sql:
- Local one-off finalizer for partially migrated live DB (not public path)
- setup/index.php:
- Apply column rename fixes to installer
Benefits: - Fresh installs and all migration paths produce identical schemas - Re-running migrations on already-migrated DBs no longer crashes - _whois is now created on fresh installs
Technical notes: - BOOLEAN alias = tinyint(1) in MariaDB; no wire-format change - sdomain/shost/sdc follow single-letter-prefix pattern (luid, eip, etc.) - table_update6_3_finalize_local.sql intentionally not idempotent
Completes the multi-batch schema modernization: all SQL column references in PHP have been updated to match the new normalized table.sql schema, and a one-time migration script has been added for existing installations.
Core changes:
- _users / _users_temp (Batch L) — modules/account/{index,admin/index}.php, modules/forum/index.php, admin/index.php:
- user_id → id, user_name → name, user_rank → rank, user_email → email
- user_website → website, user_avatar → avatar, user_regdate → regdate
- user_occ → occ, user_from → origin, user_interests → interest
- user_sig → sig, user_viewemail → viewmail, user_password → password
- user_storynum → storynum, user_blockon → blockon, user_block → block
- user_theme → theme, user_newsletter → newslet, user_fsmail → fsmail
- user_psmail → psmail, user_lastvisit → lastvis, user_lang → lang
- user_points → points, user_last_ip → lastip, user_warnings → warnings
- user_acess → access, user_group → grp, user_birthday → birthday
- user_gender → gender, user_votes → votes, user_totalvotes → tvotes
- user_field → field, user_agent → agent, user_network → network
- check_num → code (users_temp)
- All other tables (Batches A–K) — 60+ PHP files across admin/, blocks/, core/, modules/, setup/, templates/:
- _admins: lastvisit → lvisit
- _auto_links: sitename → title
- _blocks: bid → id, bposition → bpos, active → status, blanguage → blang, blockfile → bfile
- _categories: parentid → parent, cstatus → status, lpost_id → lpost
- _clients/_partners: id_user → uid, id_product → prod, id_partner → part, adres → addr
- _comment: date → time, host_name → ip
- _faq/_help/_news/_pages: fid/sid/pid → id, catid → cid, ip_sender → ip
- _files/_links: lid → id, totalvotes → tvotes, totalcomments → tcom
- _forum: catid → cid, l_uid/l_name/l_id/l_time → luid/lname/lpost/ltime, e_uid/e_ip_send/e_time → euid/eip/etime
- _jokes: jokeid → id, cat → cid, joke → hometext, ratingtot → ratetot
- _media: createdby → author, totalvotes → tvotes, totalcom → tcom
- _message: mid → id, active → status, mlanguage → lang
- _order/_privat/_referer/_voting: date → time
- _products: preis → price, totalvotes → tvotes
- _rating: host → ip
- _search: sl_id → id, sl_word → word, sl_modul → modul, sl_time → time, sl_score → score
- _session: host_addr → ip
- setup/sql/batch_migrate.sql (new):
- One-time ALTER TABLE RENAME COLUMN script for all 27 tables
- Includes RENAME INDEX where index names also changed
- Special DROP/ADD for _rating UNIQUE KEY (column composition changed)
Benefits: - SQL column names now match table.sql schema exactly across all 65 files - No more legacy user_*/ip_sender/totalvotes/catid/ip_send naming in codebase - Migration script enables clean upgrade path for existing installations
Technical notes: - PHP placeholder names (:user_name, :user_id, etc.) intentionally unchanged - HTML form field names (name="user_name") intentionally unchanged - batch_migrate.sql requires MySQL 8.0+ or MariaDB 10.5+ (RENAME COLUMN support)
Complete overhaul of the search module and admin template covering security hardening, config migration, and the new search admin interface.
Core changes:
- Search module (modules/search/index.php, config/search.php):
- Extract getSearchRow() helper to avoid duplicated row-rendering logic
- Rename search_result() to search() and wrap in switch($op)
- Fix XSS: escape $cdesc and $ctitle via htmlspecialchars() in all HTML contexts
- Migrate config key: $conf['search'] string -> $conf['search']['mods'] array
- Add config/search.php with all search settings moved out of global config
- Search admin panel (modules/search/admin/):
- Add new admin interface for search module configuration
- Include multilingual info files (de, en, fr, pl, ru, uk)
- Admin template (templates/admin/index.php):
- Replace opendir/readdir/closedir with scandir(BASE_DIR.'/language')
- Fix XSS: escape $admin[1] via htmlspecialchars() before use in HTML
- Fix undefined $cach in setTemplateBlock() static cache on cache miss
- Replace SELECT * with SELECT 1 LIMIT 1 for admin existence check
- Add :string return types to all three template functions
- Remove unused global declarations ($user, $theme, $conf)
- Replace die() with exit; update copyright year to 2026
- Convert tabs to 4-space indentation per coding standard
- Language files (admin/language/*.php):
- Sync language constants across de, en, fr, pl, ru, uk
Core and config (core/admin.php, core/system.php, config/global.php, config/modules.php, admin/modules/config.php, admin/index.php, modules/order/index.php):
- Various refactors and config key updates aligned with new structure
Benefits: - Eliminates stored XSS vectors in search result rendering - Removes CWD-dependent filesystem path in admin template loader - Static template cache no longer risks undefined-variable TypeError in PHP 8.x - Search config is now isolated in config/search.php
Technical notes: - config/search.php is a new required config file - modules/search/admin/ is a new directory; activate via config/modules.php - No DB schema changes





