Skip to main content
Roger C. Guilherme
Programmer and librarian at ABCD
View all authors

ABCD 3.9.0

· 3 min read
Roger C. Guilherme
Programmer and librarian at ABCD

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 dhtmlXGrid implementation on administrative forms (typeofitems and typeofusers) 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.php to 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 for FormData parsing, moving away from vulnerable inline string concatenations.
  • Null-Safe UI Controls (#674): Rewrote the JavaScript validation tree inside copies_add.php with 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.def mock configurations specifying UNICODE=0 limits and strict extension enforcement (DIRTREE_EXT) across user targets.
  • Asset Mapping (#673): Rectified relative path bindings for core interaction assets, pointing clear_field.js safely 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 .sectionIcon background definitions out of odds.css.
  • Documentation Alignment (#677): Fully revised the primary README.md layout, 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.

ABCD 3.8.4

· 3 min read
Roger C. Guilherme
Programmer and librarian at ABCD

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.php to explicitly deny access if opac_strict_mode is 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.php to handle edge cases and prevent bot-induced runtime errors. Pagination parameters (desde and count) 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.js editor script to use English standard text ("Clear field" instead of "Limpar campo"). Added a new mover action.
  • Formatting Script (fmt.php) Cleanup: Streamlined record display logic, ensured PlantillaDeIngreso() and ColocarMfn() 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 strict die; 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, undefined Diccio index, and foreach() null arguments in c_global_ex.php).
  • Expression Handling: Hardened logic in PresentarExpresion.php to handle missing expressions safely, defaulting to an empty string to avoid "Undefined array key" errors.
  • Input Whitelisting: Whitelisted the new open_index parameter in is_malicious.php to 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.php to reflect version 3.8.4.

ABCD 3.8.3 – Bug fixes for this version

· 3 min read
Roger C. Guilherme
Programmer and librarian at ABCD

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 .tab routing files directly from the UI and automatically generate missing .fdt matrices, 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 SubfieldHelper to explicitly extract, decode, and manage the implicit _ subfield without losing data during rendering.
  • Custom Sanitization: Replaced standard htmlspecialchars calls 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 $msgstr variables, with complete translations added for English, Spanish, and Portuguese across both Linux and Windows environments.
  • Comprehensive Spanish UI Update: The admin.tab file 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.

ABCD 3.8.2 – Bug fixes for this version

· 2 min read
Roger C. Guilherme
Programmer and librarian at ABCD

What's Changed

  • Rebuild SubC JS and handle picklists/indicators by @rogercgui in https://github.com/ABCD-DEVCOM/ABCD/pull/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 https://github.com/ABCD-DEVCOM/ABCD/pull/657

  • Fix browseby behavior and record checkbox by @rogercgui in https://github.com/ABCD-DEVCOM/ABCD/pull/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: https://github.com/ABCD-DEVCOM/ABCD/compare/v3.8.1...v3.8.2

ABCD V3.8.1 - Improve the version

· One min read
Roger C. Guilherme
Programmer and librarian at ABCD

What's Changed

Full Changelog: https://github.com/ABCD-DEVCOM/ABCD/compare/v3.8.0...v3.8.1

ABCD 3.8.0 Technical Release Notes

· 5 min read
Roger C. Guilherme
Programmer and librarian at ABCD

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 (More)

  • Native TAB Support in FDT: Added support for the TAB field 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.

Native TAB Support in FDT

  • Removal of Legacy Dependencies: The heavy and rigid dependency on the legacy dhtmlX library 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.

New Toolbar

  • 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.tab workflow.

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.

MARC Indicator Support

  • 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 .par and .fst configuration files have been standardized across example database models.

Modernized File Management & Uploads

  • AJAX-Driven Uploads: Introduced a centralized upload system via UploadRenderer featuring a drag-and-drop modal, background AJAX processing, a visual progress bar, and full localization support.

alt text alt text alt text

  • 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. alt text

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.

alt text

  • Path Macros: Added native support for the %path_database% constant within .par files, allowing administrators to point to relative paths for external databases directly from the core configuration (e.g., rda.*=%path_database%rda/data/rda.*).

alt text

  • 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.

alt text

🛠 Technical Refactorings (Under the Hood)

  • PFT Layout Modernization: Refactored pft.php to 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.php was 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.js library 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 on control_number.cn, preventing data corruption from race conditions during concurrent cataloging.

ABCD 3.7.0 Technical Release Notes

· 2 min read
Roger C. Guilherme
Programmer and librarian at ABCD

✨ Key Highlights

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 $msgstr internationalization 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 key warnings).

Read more here!


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.

ABCD 3.6.2 Technical Release Notes

· 2 min read
Roger C. Guilherme
Programmer and librarian at ABCD

What's Changed

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.

ABCD 3.6.1 Technical Release Notes

· One min read
Roger C. Guilherme
Programmer and librarian at ABCD

What's Changed

Full Changelog: https://github.com/ABCD-DEVCOM/ABCD/compare/v3.6.0...v3.6.1

ABCD 3.6.0 Technical Release Notes

· 2 min read
Roger C. Guilherme
Programmer and librarian at ABCD

What's Changed