Releases: ABCD-DEVCOM/ABCD
ABCD v3.9.0
The ABCD Community is proud to announce the release of ABCD v3.9.0. This milestone brings substantial architecture modernization, enhanced file security, improved layout responsiveness, and localized data entry definitions.
Legacy dependencies have been streamlined, paving the way for a more robust and modular open-source ecosystem.
New Features & UI Enhancements
File Upload & Media Flexbility
- Windows File Compatibility (#671): Sanitization regex rules have been updated to securely permit spaces in image filenames. This allows for user-friendly asset names while filtering dangerous terminal characters.
- Custom Upload Subdirectories (#673): Introduced a destination subdirectory input field within the media upload modal, letting managers organize files dynamically. Built-in path deduplication prevents folder repetition errors.
Module Modernization
Circulation Module Overhaul (#676)
- Legacy Grid Elimination: Replaced the heavy, third-party
dhtmlXGridimplementation on administrative forms (typeofitemsandtypeofusers) with lightweight, native HTML tables and generic JavaScript controllers. - PRG Pattern Adoption: Form submission states now leverage the Post-Redirect-Get pattern, eliminating accidental duplicate submissions and integrating clean success notifications.
- Font Awesome Integration: Cleaned up navigation blocks by migrating from hardcoded asset image tags to high-resolution Font Awesome typography (
menuButton-fa). - Output Interface Decoupling: Repositioned footer allocations and disabled institutional site wraps on raw print/receiver frames (
rs01.php,rsweb.php,estado_de_cuenta.php) to maximize printable screen areas.
OPAC Settings (#672)
- Visibility Adjustments: Corrected operational visibility blocks inside
config_opac.phpto ensure unrestricted search indexing matches standard local installation values.
Security & Performance Hardening
Data Entry Integrity
- Injection Prevention (#673): Re-engineered multi-part modal upload payloads to handle parameters safely through
json_encode()encapsulation forFormDataparsing, moving away from vulnerable inline string concatenations. - Null-Safe UI Controls (#674): Rewrote the JavaScript validation tree inside
copies_add.phpwith explicit element guards (middleForm,tag200,textarea, and input fields) to completely eradicate client-side runtime crashes when elements are absent. - File Management Blueprints (#674): Delivered standardized user asset blueprints via explicit
dr_path.defmock configurations specifyingUNICODE=0limits and strict extension enforcement (DIRTREE_EXT) across user targets. - Asset Mapping (#673): Rectified relative path bindings for core interaction assets, pointing
clear_field.jssafely to its data-entry editor hub. Adjusted frame reload latency parameters to 800ms to guarantee server-side synchronization.
Repository Cleanup & Standardization
- File Purge (#675): Dropped non-functional and unreferenced historical scripts to reduce structural overhead.
- Styling Hygiene (#676): Cleared obsolete
.sectionIconbackground definitions out ofodds.css. - Documentation Alignment (#677): Fully revised the primary
README.mdlayout, ensuring up-to-date documentation paths, corrected links, and an accurate project state definition. - Translation Maintenance: Continued translating code remarks and inline development logs from Spanish and Portuguese over to English for global open-source community alignment.
What's Changed
- Allow spaces in image filenames by @rogercgui in #671
- Update config_opac.php by @rogercgui in #672
- Data entry improvements by @rogercgui in #673
- Data entry improvements by @rogercgui in #674
- Removes files that are no longer needed for the current version. by @rogercgui in #675
- Improves circulation by @rogercgui in #676
- Revise README.md for clarity and updated links by @rogercgui in #677
- Update biblo defs; add isadg dr_path by @rogercgui in #678
- Update version.php by @rogercgui in #679
Full Changelog: v3.8.4...v3.9.0
ABCD v3.8.4
ABCD v3.8.4 brings crucial improvements to system stability, PHP 8.x compatibility, and user experience. This release focuses on hardening input validation, fixing MARC database saving mechanisms, and refining OPAC functionalities.
Below is a detailed summary of the changes and enhancements included in this update:
Search & OPAC Enhancements
- Alphabetical Indexes & UX: Fixed bugs related to the "Alphabetical Indexes" button. Added a new UX feature allowing the index submenu to open by default via URL parameters (
open_index=Y), ensuring integrated searches navigate correctly while preserving context (base,ctx). - Strict Mode Enforcement: Added a strict-mode guard in
central/config_opac.phpto explicitly deny access ifopac_strict_modeis enabled and no database (?base) is provided. - Topbar Refactoring: Reorganized the OPAC topbar (
topbar.php) to improve the HTML markup, simplify authentication logic (detecting online services, showing logged-in users, or the login modal), and consistently preserve context parameters when navigating to the home link. - Search Pagination Stability: Enhanced input validation in
buscar_integrada.phpto handle edge cases and prevent bot-induced runtime errors. Pagination parameters (desdeandcount) are now strictly validated and cast with numeric fallbacks.
Data Entry & MARC Handling
- MARC Indicators Fix: Resolved broken saving functions in MARC databases. The system now correctly respects MARC indicators by detecting definitions from the FDT, extracting/padding the first two characters, and separating implicit from explicit subfields during client-side assembly.
- Picklist Selection Logic: Fixed picklist selection mismatches by properly casting and sanitizing option values to strings before comparison, preventing PHP numeric mismatch errors.
- Editor Improvements: Updated the
clear_field.jseditor script to use English standard text ("Clear field" instead of "Limpar campo"). Added a newmoveraction. - Formatting Script (
fmt.php) Cleanup: Streamlined record display logic, ensuredPlantillaDeIngreso()andColocarMfn()are called in the correct branches, and standardized the use of$arrHttp['login']instead of maintaining separate login variables.
Security & PHP 8.1+ Compatibility
- Session & Redirect Hardening: Guarded access to session/login variables with
isset()to prevent PHP 8.1+ undefined session errors. Added strictdie;statements following header redirects to ensure script execution completely stops when$_SESSION["permiso"]is missing. - Undefined Variables & Array Keys: Resolved multiple PHP warnings across the system (e.g., undefined
$hasta, undefinedDiccioindex, andforeach()null arguments inc_global_ex.php). - Expression Handling: Hardened logic in
PresentarExpresion.phpto handle missing expressions safely, defaulting to an empty string to avoid "Undefined array key" errors. - Input Whitelisting: Whitelisted the new
open_indexparameter inis_malicious.phpto allow the URL-driven UX flag through security validations.
System & Maintenance
- Update Manager: Fixed the behavior of the "Update" button to ensure smooth upgrades.
- File Cleanup: Removed misplaced duplicate files from the repository to keep the architecture clean.
- Version Bump: Updated
version.phpto reflect version 3.8.4.
Details:
- Enhance input validation, pagination, and UX for search functionality by @rogercgui in #664
- Fix undefined session/login and add die after redirect by @rogercgui in #665
- Require DB param in strict mode; update topbar by @rogercgui in #666
- Add mover action and fix PHP warnings and compatibility issues by @rogercgui in #667
- Use arrHttp login and clean up fmt.php by @rogercgui in #668
- Enhance MARC indicator handling and fix picklist selection logic by @rogercgui in #669
- Update version.php by @rogercgui in #670
Full Changelog: v3.8.3...v3.8.4
ABCD v3.8.3: Universal Fixed-Field Manager, RDA Support, and Core Enhancements
Release Notes: ABCD v3.8.3
Version 3.8.3 brings a major overhaul to ABCD's cataloging capabilities, introducing full support for modern cataloging standards like RDA, alongside critical improvements to subfield data handling and system localizations.
Key Features & Updates
1. Universal Fixed-Field Manager
The legacy fixed-field engine has been completely refactored. Moving away from the hardcoded 008 field limitation, the system now features a dynamic, fully adaptable engine for handling multiple and repeatable fixed fields (such as 006 and 007).
- Smart Cataloging Interface: Catalogers can now add multiple occurrences of fixed fields seamlessly within a single record—essential for mixed-material items (e.g., a book with a CD-ROM). The UI now intelligently reads routing files, automatically deduces material categories from the Leader, and safely parses line breaks.
- Dynamic Administration Hub: A centralized hub dynamically scans the FDT for 'M' (Matrix) type fields. Administrators can now edit
.tabrouting files directly from the UI and automatically generate missing.fdtmatrices, bypassing legacy restrictions.
2. Core Data Handling & Output Sanitization
Rendering engines and subfield parsers have been hardened to improve data integrity and prevent encoding issues.
- Subfield Helper & Implicit Support: Introduced a new
SubfieldHelperto explicitly extract, decode, and manage the implicit_subfield without losing data during rendering. - Custom Sanitization: Replaced standard
htmlspecialcharscalls with a robust, custom sanitization implementation across the Group, Table, and Text renderers. This ensures consistent escaping and preserves compatibility with legacy JavaScript dependencies.
3. Localization & i18n Improvements
Extensive updates have been made to the system dictionaries to ensure a fully multilingual cataloging and administrative experience.
- Fixed-Field Interface Translations: Hardcoded strings in the fixed-field UI have been replaced with dynamic
$msgstrvariables, with complete translations added for English, Spanish, and Portuguese across both Linux and Windows environments. - Comprehensive Spanish UI Update: The
admin.tabfile for Spanish users received a massive update. Typos and encoding issues were resolved, keys were harmonized, and numerous new UI messages were added covering modules like Z39.50, backups, the thesaurus, file uploads, and search functionalities.
What's Changed
- Implement generic fixed-field editor with repeat support and localization by @rogercgui in #660
- Improve subfield handling and sanitize outputs by @rogercgui in #661
- Update Spanish admin.tab translations by @rogercgui in #662
- Bump version to v3.8.3 by @rogercgui in #663
Full Changelog: v3.8.2...v3.8.3
Release Date: June 16, 2026
ABCD 3.8.2 – Bug fixes for this version
What's Changed
-
Rebuild SubC JS and handle picklists/indicators by @rogercgui in #656
- Refactor campos.php parsing to collect IND/S rows into a JS-friendly SubC string and simplify picklist/label population. The PHP now accumulates relevant rows into subc_js_array, handles both "S" and "IND" marker types (with a historical fallback), builds picklist/name entries with proper escaping, and emits SubC as a single \n-separated JS string. Update editarocurrencias.js to dynamically reconstruct the actual subfields (subc_reais) from SubCampos and inject them into Tx[5], ensuring the renderer sees indicators/subfields even when they were omitted from the main FDT. Improves compatibility with older DB formats and makes picklist/indicator handling more robust.
-
New layouts by @rogercgui in #657
-
Fix browseby behavior and record checkbox by @rogercgui in #658
- Fix browseby behavior and record checkbox
- menu_main.php: Prevent programmatic updates to the "browseby" select from triggering onButtonClick (avoids unintended recursive/user-action side effects), add logic to call top.Menu('same') when keeping the current record after changing browse mode, add error logging, and translate several comments to English. toolbar_record.php: Correct MFN handling (properly derive mfn_val), guard against missing DOM element before updating, and set the "Select Record" checkbox via the checked property so it accurately reflects selection state.
Full Changelog: v3.8.1...v3.8.2
ABCD V3.8.1 - Improve the version
What's Changed
- Correction of processes containing search terms by @rogercgui in #651
- Removes unused icons by @rogercgui in #652
- Refactor formatting, JS, UI; remove IAH assets by @rogercgui in #653
Full Changelog: v3.8.0...v3.8.1
ABCD v3.8: Data Entry Modernization
This release introduces deep structural updates to the core of ABCD, focusing heavily on modernizing the Data Entry (Cataloging) interface and ensuring compliance with international standards. ABCD v3.8 marks a significant milestone in transitioning from a traditional Integrated Library System (ILS) to a more modular Library Services Platform (LSP). The architecture has been refactored to be significantly more stable, developer-friendly, and fully prepared for future integrations via REST APIs.
🚀 Key Features
Data Entry Interface Modernization
- Native TAB Support in FDT: Added support for the
TABfield type to organize forms into distinct tabs. This enables the clean separation of form sections, completely replacing massive, single-page layouts that previously required gigantic accordions and endless vertical scrolling.
- Removal of Legacy Dependencies: The heavy and rigid dependency on the legacy
dhtmlXlibrary has been completely removed. The interface was rebuilt using semantic HTML and CSS Flexbox, resulting in a lighter codebase and much faster browser rendering. - Responsive Toolbar: The global toolbar was redesigned into a responsive, two-tier layout. It maintains full support for core operations (including Quick Search, Formats, and Worksheets) while communicating seamlessly with the legacy iframe architecture.
- Database Lock Resolution: Resolved a critical, long-standing bug where database locks (
lock_db) caused the global toolbar to freeze. Critical navigation functions—such as "Home" and "Admin/Config"—now remain accessible, allowing users to safely unlock databases without forced browser refreshes. - Dynamic Component Integration: Restored the critical logic for "New Record" generation, ensuring that the system correctly detects and triggers the
typeofrecord.tabworkflow.
MARC Standards & Interoperability
- MARC Indicator Support: Added native support for the MARC Indicator (
IND) field type within the FDT and validation engine. The system now permits having an Indicator 1 and a Subfield 1 within the same field, building fully MARC21-compliant strings.
- Database Standardization: Template databases for MARC and RDA (across English, Spanish, and Portuguese locales) have been standardized to conform to the new tab-based layout system.
- File Normalization: All
.parand.fstconfiguration files have been standardized across example database models.
Modernized File Management & Uploads
- AJAX-Driven Uploads: Introduced a centralized upload system via
UploadRendererfeaturing a drag-and-drop modal, background AJAX processing, a visual progress bar, and full localization support.
- Directory Management: Users can now create target folders directly from the management interface, allowing files to be uploaded into exact subdirectories dynamically resolved by database paths.
System Administration Enhancements
- Profile Editor Refactoring: The user profile editor (
profile_edit.php) was completely overhauled to modernize UI and JavaScript behaviors. The new layout incorporates tabbed navigation, dynamic accordions with real-time badge counts, and grouped checkbox grids for managing permissions across databases, formats, and worksheets.
- Path Macros: Added native support for the
%path_database%constant within.parfiles, allowing administrators to point to relative paths for external databases directly from the core configuration (e.g.,rda.*=%path_database%rda/data/rda.*).
- Inline Subfields Toggle: Introduced a new global configuration option
SUBFIELDS_INLINE(Y/N) in the database settings to let administrators choose whether grouped subfields are displayed inline or managed via a pop-up window.
🛠 Technical Refactorings (Under the Hood)
- PFT Layout Modernization: Refactored
pft.phpto replace table-based formatting with modern div/flex structures, while standardizing and simplifying client-side JavaScript functions. - Code Modularization: Procedural field rendering logic in
dibujarhojaentrada.phpwas completely replaced by a structured object-oriented architecture utilizing dedicated helper and renderer classes (CalendarHelper, SubfieldHelper, RepeatableRenderer, etc.). - Unified UI Indicators: Embedded CSS loaders were replaced by a centralized, universal loading spinner component (
inc_wait.php), reducing code duplication across background operations. - Print-Media Queries: Implemented specialized CSS print-media queries for the statistics module, ensuring clean report generation by automatically hiding administrative panels during PDF export or printing.
- Asset Integration: Included the
Sortable.jslibrary to support seamless client-side drag-and-drop row reordering within the data entry module. - PHP 8.2 Compatibility: Hardened array index validations and variable initializations across core scripts to ensure full compatibility with PHP 8.2 and prevent deprecation notices.
- Atomic Concurrency Locks: Automated record increment routines were refactored to use exclusive, atomic
flock()execution oncontrol_number.cn, preventing data corruption from race conditions during concurrent cataloging.
What's Changed
- Modernize pft.php layout and update back navigation by @rogercgui in #644
- Modernization of the Data Entry Interface by @rogercgui in #645
- New dataentry p2 by @rogercgui in #646
- Refactor profile editor UI and add CSS styles by @rogercgui in #647
- New dataentry p3 by @rogercgui in #648
- Refactor interface, add %path_database% support by @rogercgui in #649
- Update version.php by @rogercgui in #650
Full Changelog: v3.7.0...v3.8.0
v3.7.0 New Statistics Module
This release introduces significant improvements and refactorings to the Statistics module, aimed at increasing performance, enhancing data transparency, and stabilizing character encoding across the module.
Key Changes:
Multi-Loop Execution Engine:
- Replaced the monolithic execution model with a refined "Multi-Loop" orchestrator.
- The system now isolates the execution of each statistical table, allowing for individual search expressions (
Expresion) to be processed per table without conflicts. - Integrated a performance-optimized pipeline that combines table-specific search expressions with global interface filters, ensuring high-speed processing while maintaining data accuracy.
Transparency & UX Improvements:
- Added a "Search Expression" field directly into the Table Configuration (
tables_cfg.php), allowing administrators to embed specific filter rules per report. - Enhanced output transparency: The module now dynamically displays the active search criteria (MFN range or Search Expression) as a subtitle (
<small>tag) directly below the report title (<h3>), providing immediate clarity to end-users regarding the data source.
Encoding Stabilization:
- Resolved long-standing character encoding issues (UTF-8 vs. ISO-8859-1) by implementing a standardized "Gateway" approach.
- Requests from the UI (JS/AJAX) are now normalized upon arrival, and output is managed via standard headers, ensuring that special characters (like Portuguese accents) are rendered correctly in tables and UI elements while maintaining strict UTF-8 compliance for ECharts graph generation.
- Centralized menu structure: The statistics configuration options (
config_vars.php,tables_cfg.php,proc_cfg.php) are now easily accessible via a consolidated navigation include, improving workflow efficiency.
Code Quality & Maintenance:
- Extracted hardcoded strings into the
$msgstrinternationalization array to ensure full support for multi-language installations. - Cleaned up legacy code, removed deprecated function calls, and ensured compatibility with modern PHP versions (fixing
Undefined array keywarnings).
Impact:
This update provides a more reliable and flexible way for institutions to generate specific production reports (e.g., separating "Created" vs "Edited" records) within a single "Process," while significantly improving the user experience for librarians and system administrators.
What's Changed
- Refactoring and Enhancements to the Statistics Module by @rogercgui in #64
Full Changelog: v3.6.2...v3.7.0
ABCD v3.6.2
🚀 What's New in ABCD v3.6.2
Welcome to the ABCD v3.6.2 release! This update brings significant improvements to the RDA and MARC databases, expands Portuguese (PT) localization, and introduces important safety limits and UI updates for the PRC Conversion tool.
✨ Key Highlights
RDA Database & Localization Enhancements
We’ve put a lot of work into making sure the RDA database is functional and completely pre-configured out of the box for Portuguese users.
- Ready-to-use RDA: Improved the integration between the RDA base and Copies, updated essential parameter files (
rda.par,marc.par,dbn.par), and created new OPAC configuration files alongsidedcxml.pft. - Better Portuguese (PT) Support: Inserted localized display formats and barcodes, updated the PT record toolbar and relevance fields, and improved the FDT and Books spreadsheets.
- Sample Data: Added a sample record to the RDA database and created sample barcode files in the MARC database so users can test features immediately.
PRC Conversion Preview Updates
- MFN Range Selection: You can now set specific ranges (
mfn_startandmfn_end) when reading original and temporary records, complete with a new Refresh Preview button in the UI. - Server Safety Lock: To prevent WXIS or the server from overloading, we implemented a strict safety lock that caps the preview window at a maximum of 50 records.
- Localization: Added new language strings (
prc_adjust_preview_range,prc_refresh_preview) tosoporte.tab.
UI & Quality of Life Tweaks
- Adjusted the height between input fields during data entry, making the cataloging experience more comfortable and visually balanced.
- Minor UI and formatting tweaks in the PRC converter, including a small concatenation fix.
🧹 Housekeeping & Cleanup
- Kept the repository clean and lightweight by deleting unused Stock databases (on both Linux and Windows) and removing obsolete files.
Detailed Pull Requests:
- #636, #637, #638: RDA base improvements, PT localization, OPAC configs, and data entry UI tweaks.
- #639: Removal of unused Stock databases, addition of sample records/barcodes, and file cleanup.
- #641: PRC conversion MFN range previews, safety limits, and UI fixes.
Full Changelog: [v3.6.1...v3.6.2](v3.6.1...v3.6.2)
v3.6.1 Minor adjustments
What's Changed
- Enhance language selection and detection with pagination fixes by @rogercgui in #632
- Update update_manager.php by @fho4abcd in #633
- Add clear-field button styles by @rogercgui in #634
Full Changelog: v3.6.0...v3.6.1
v3.6.0 Opac improvements
What's Changed
- Fixes an option that was accidentally disabled. by @rogercgui in #627
- This release fixes strings that appeared in Portuguese and launches the OPAC themes project. by @rogercgui in #628
- Expands configuration checks by @rogercgui in #629
- Refactor UI elements and improve password handling logic by @rogercgui in #630
- Fix config opac by @rogercgui in #631
Full Changelog: v3.5.0...v3.6.0
Actions by database administrator
All code updates can be excuted by the Upgrade manager.