StageIt - Changelog

All notable changes to StageIt will be documented in this file.

v6.3.4 2026-07-24

WAF-Safe AJAX & Force Refresh Defaults

🐛 Bug Fixes

  • HTTP 406 / 403 on Remove or Rebuild behind keyword-scanning WAFs: Fixed a long-standing bug where the Remove Staging and Rebuild operations could die partway through with an HTTP 406 (or 403) on hosts running body-scanning Web Application Firewalls. StageIt’s AJAX operations posted their payload (jdata) as plaintext JSON containing staging file paths and table lists; when the file-walker reached components/com_contenthistory/…, the request body momentarily contained strings that generic SQL-injection signatures matched on. Confirmed on LiquidWeb/cPanel hosts with ModSecurity rule 5001226 (a chained rule that fires only when the body contains both com_contenthistory and (select.+from|list.select)) — pure false positive on legitimate admin traffic. The AJAX body is now base64-encoded before being posted, so it is opaque to every keyword-scanning rule on every host. No server-side change required. Server still accepts legacy plaintext jdata for backwards compatibility. Verified in production: Joomla 5.4.7 install that previously 406'd every removal walked all 15,656 files (including components/com_contenthistory/) and dropped 148 stg_* tables with zero 406s and no server-config change.

⚙️ Changes

  • Force Refresh now defaults to Yes — previously defaulted to No. Force Refresh must be Yes whenever anything major changed between the staged copy and live (major Joomla version jump, template version change, third-party extensions upgraded across major versions); leaving it at No in those cases silently broke the live site after a push. Yes is safe in all cases — just slightly slower for same-version syncs. The setting description under Configuration → Environment has also been rewritten with a clear rule-of-thumb (major-version jumps → Yes; same-version syncs → optional). Thanks to Robin Clapp of Advantage Glass Co. for the report that led to this change.

v6.3.3 2026-07-01

Configuration Save Reliability & Removal 413 Fixes

🐛 Bug Fixes

  • Configuration Settings Silently Reverting After Save: Fixed a long-standing bug where saved configuration — including the excluded-tables selection on the Data Tables tab — could revert to defaults on the next pageload on certain hosting environments. Two underlying causes addressed: (1) the params file write used an fopen('a+') + fread + ftruncate sequence whose behaviour depends on where the read pointer starts in 'a+' mode, varying by platform; on the wrong platform the file was truncated to zero and rewritten without the <?php header, causing the next pageload to treat the file as raw text and silently reset all settings to defaults. Replaced with an atomic file_put_contents() write. (2) OPcache invalidation used force=false, which is a no-op on hosts running opcache.validate_timestamps=0; PHP would keep serving the pre-save bytecode and the freshly written params were invisible. Now forces invalidation in both save and load paths.
  • HTTP 413 “Request Entity Too Large” on Staging Removal: Fixed a bug where removing the staging environment could fail with HTTP 413 on real Joomla sites. The optimized removal path enumerated every file and directory upfront, then serialised both lists into the AJAX response and required the browser to POST them back on every subsequent chunk. On sites with tens of thousands of files (typical once media, cache, and third-party extensions accumulate), the payload grew to several MB per request, tripping Apache’s LimitRequestBody, nginx’s client_max_body_size, or mod_security rules. File/directory lists are now stored server-side in StageIt’s existing checkpoint mechanism, and only lightweight progress state (position/total) round-trips through the client.

v6.3.2 2026-05-28

Table Exclusion Fix for Non-Standard Database Prefixes

🐛 Bug Fixes

  • Excluded Tables Were Still Being Synced on Non-Standard Prefixes: Fixed a long-standing bug where the “Exclude these tables from data sync” list silently failed on any site whose Joomla database prefix contains an internal underscore — e.g. web_jos_, my_app_, client_j5_. The bare-table-name key used to look up the exclusion list was extracted by splitting on underscores and dropping fixed segments, which over-stripped on multi-segment prefixes so the key never matched. Tables containing underscores in their own names (e.g. redirect_links) were unaffected on standard prefixes but also wrong on non-standard ones. Now uses known prefix-string lengths in both deploy (live → staging) and sync (staging → live) directions. Thanks to Florian B. for the report.

v6.3.1 2026-04-30

Akeeba Dialog Wording Fix

🐛 Bug Fixes

  • Akeeba Pre-flight Dialog Wording: Corrected the dialog text that previously claimed “Akeeba Admin Tools is installed” even on sites where only Akeeba Backup is installed. The protective .htaccess on the installer folder ships with Akeeba Backup itself; Admin Tools (when present) only reinforces it. Dialog now reads accurately whether Admin Tools is installed or not.

v6.3.0 2026-04-17

Edge-Case Pre-Flight Framework, Smart Log Path & Audit Log

📦 New Features

  • Pre-flight Dialog Framework: When StageIt detects a hosting/extension condition that normally breaks staging copies, a single pre-flight dialog now appears before deploy with one section per detected issue. Each section has its own “fix it” checkbox plus a “remember my choice on this site” checkbox; preferences are stored per site under Configuration → Advanced / Edge Case Settings. Any subset of sections (or all three) can apply on a given site.
  • Akeeba Installers Bypass: When Akeeba Admin Tools hardening blocks the three .jpa installer files, StageIt can temporarily rename the protective .htaccess, copy the files to staging, then restore the protection — typically only a few seconds of unprotected exposure. Includes a self-heal safety net that auto-restores the .htaccess on the next run if interrupted.
  • Htaccess RewriteBase Adjustment: When the live .htaccess has an uncommented RewriteBase directive (needed on many shared hosts for SEF URLs), StageIt can rewrite the staging copy’s RewriteBase to point at the staging subfolder. Works with any base value — e.g. / becomes /stageit/, and /myapp/ becomes /myapp/stageit/. Live is never modified.
  • Joomlatools Folder Copy: When the Joomlatools Files/Fileman/DOCman files_containers table references a top-level folder not in StageIt’s default copy list (typically joomlatools-files/), StageIt can recursively copy that folder to staging so Fileman attachments work there. Without this, viewing an article with an attachment on staging throws an UnexpectedValueException: Invalid folder error.
  • Audit Log (stageit-audit.log.php): New third log type. Always writes security-relevant events (pre-flight bypass activations, restores, self-heal, path rewrites) regardless of operations log setting. Accessible via a new Audit Log tab in the Log Viewer with Clear/Download buttons. HTTP-protected via a PHP die() header; readable only through the StageIt admin UI.
  • Smart Log Path Resolution: StageIt now respects Joomla’s configured log_path and falls back gracefully to administrator/logs/ when needed. Warns the user on the dashboard when the configured path is non-standard so it’s clear which directory is in use.
  • Filemtime-Based Asset Versioning: CSS/JS URL cache-busting now uses filemtime() of the actual files, so CDN/browser caches auto-invalidate whenever StageIt pushes out a file change — no more cached-JS gotchas after updates.
  • Config Page Reorganised: Configuration → Deployment now has two clearly marked sections: “Common Settings” (Deployment Speed, Chunk Size, Log Level, Debug Logging) and “Advanced / Edge Case Settings” (all three edge-case dropdowns) separated by an orange divider.

🐛 Bug Fixes

  • vbLog Crash on Missing Log Directory: Fixed fwrite(): Argument #1 must be of type resource, false given fatal error when the configured log directory could not be opened. Logging now silently disables itself rather than crashing the deploy.

v6.2.12 2026-03-27

Plugin Language Fix for Extensions Manager

🐛 Bug Fixes

  • Plugin Name/Description Not Translated: Fixed plugin showing raw language keys (PLG_SYSTEM_STAGEIT and PLG_SYSTEM_STAGEIT_DESCRIPTION) in Joomla’s Extensions Manager instead of translated text. Added missing .sys.ini language files to the plugin. Thanks to Tom E. for reporting this bug — enjoy your one-week StageIt membership extension!

v6.2.11 2026-03-21

Composer Autoloader Fix

🐛 Bug Fixes

  • Composer Autoloader Mismatch on Rebuild: Fixed staging rebuild leaving stale Composer autoloader files (autoload.php, autoload_real.php) with mismatched hashes, causing 500 errors. File copy now compares both size and modification time instead of size alone, ensuring updated files are always re-copied even when their size hasn’t changed

v6.2.10 2026-03-11

Removal Method Messaging, Translations & Config Path Fix

📦 New Features

  • Removal Method Messaging: Staging removal now displays which method is being used (Fast Native or Standard PHP) and explains why, shown both during the operation and upon completion
  • Translated Removal Messages: All 8 removal method strings fully translated into all 15 supported languages

🐛 Bug Fixes

  • Configuration Path Doubling: Fixed log_path and tmp_path being doubled in staging configuration.php during deploy and sync operations — paths like staging/administrator/logs/staging/administrator/logs are now correctly resolved using JPATH_ROOT

⚙️ Changes

  • Default Log Level: New installations now default to “Warnings and Errors Only” instead of “All Operations” for the operations log level

v6.2.9 2026-03-05

Logging, Diagnostics & System Check Fixes

📦 New Features

  • Debug Logging: New toggleable debug log for detailed diagnostic output during staging removal — writes to a separate stageit-debug.log file, controlled via a new “Debug Logging” setting in the Deployment tab
  • Debug Log Viewer: Log Viewer page now has “Operations Log” and “Debug Log” tabs with clear, download, and view support for both log files
  • Operations Log Level: New setting to control operations log verbosity — “All Operations” (default), “Warnings and Errors Only”, or “Off”

🐛 Bug Fixes

  • Operations Log Completion Spam: Fixed “StageIt completed without any warnings or errors” being logged on every AJAX chunk instead of once at the end — completion messages now only appear when operations actually finish
  • Log Filter False Positives: Fixed “Warnings and Errors Only” log level matching ERROR anywhere in log messages (e.g., filenames like error.php) instead of only matching message prefixes — now uses preg_match for prefix-only matching
  • Staging Removal Crash: Fixed count(): Argument #1 must be of type Countable|array, false given error when removing staging environment. vbDb::_showTables() can return false on failure, and count(false) is a fatal error in PHP 8. Added is_array() guard in both stgAjaxRemove and stgAjaxRemoveOptimized
  • System Check: File Permissions Always Failing: Fixed $prechecks['files'] threshold set to 99 instead of 1, causing the file permission check to always report an error regardless of actual permissions
  • System Check: AJAX Check Always Failing: The file permissions bug cascaded into the AJAX connectivity check, making it always return an error since _prechecks() returns the last error found
  • PHP Config Error Now Shows Missing Extensions: When PHP extensions are missing, the error popup now lists which specific extensions are missing (e.g., “Missing extensions: mbstring, zip”) instead of a generic message
  • Improved PHP Config Error Message: Updated error text to direct licensed users to contact support at [email protected] with the specific extension information
  • Fatal Parse Error in vbLog: Fixed missing closing brace in _error() method that caused unexpected token "private" fatal error on every page load

v6.2.8 2026-02-28

Optimized Staging Removal & Database Cloning Fixes

📦 New Features

  • Optimized Staging Removal: New stgAjaxRemoveOptimized class uses native OS commands (rd/rm -rf) for 10-100x faster staging area removal, with automatic fallback to PHP methods
  • Configurable Optimization: Enable/disable optimized removal and native commands via component configuration, with configurable chunk size (10-200 files)
  • Enhanced Progress Tracking: Real-time progress with detailed file counts, performance monitoring (files/sec, ETA), and method detection (Native vs PHP) in UI

🐛 Bug Fixes

  • Staging Removal Fallback Crash: Fixed Call to undefined method stgAjaxRemove::removeFiles() error when the optimized removal class falls back to the original class mid-operation — added removeFiles() and removeDirectories() fallback methods to stgAjaxRemove
  • Critical: Chunked Clone Position Tracking: Fixed infinite loop during database deployment caused by saving the starting position ($pos) instead of the current table index ($n) when a large table required multiple chunks
  • Checkpoint Poisoning: Clear checkpoint data when a chunked table clone fails, preventing stale offsets from being applied to unrelated tables
  • Missing Target Table Safety: Added safety check in _cloneTableChunked — if target table doesn't exist at a non-zero offset, reset and recreate from scratch
  • Deterministic Chunked Cloning: Added ORDER BY on primary key to chunked INSERT...SELECT queries, preventing duplicate key errors
  • Improved Error Logging: Database errors now log the actual MySQL error message for better diagnostics

🐛 Version 6.2.7 (2026-02-05)

Log Viewer Memory Fix

🐛 Bug Fixes

  • Out-of-Memory Fix: Log viewer now reads only the last 2 MB of large log files instead of loading the entire file into memory
  • Truncation Warning: Displays a translated warning when the log is too large to show in full, with guidance to use the Download button

🌐 Version 6.2.6 (2026-02-05)

Comprehensive Multi-Lingual Support & Foreign Key Fix

🌐 Multi-Lingual Support

  • Complete Component Internationalization: All template strings now use Text::_() for full translation support
  • Plugin Multi-Lingual: System plugin now fully translated with 48 language keys per language
  • Translated Installation Welcome: Post-installation message with "Go to Control Panel" link now displayed in user's language
  • 15 Languages Supported:
    • English (en-GB) - Base language
    • Dutch (nl-NL)
    • German (de-DE)
    • Spanish (es-ES)
    • French (fr-FR)
    • Italian (it-IT)
    • Portuguese Brazilian (pt-BR)
    • Russian (ru-RU)
    • Polish (pl-PL)
    • Japanese (ja-JP)
    • Chinese Simplified (zh-CN)
    • Turkish (tr-TR)
    • Greek (el-GR)
    • Czech (cs-CZ)
    • Swedish (sv-SE)
  • Language File Structure: Each language includes both main (.ini) and system (.sys.ini) translation files

🐛 Bug Fixes

  • Foreign Key Constraint Error: Fixed "Cannot delete or update a parent row: a foreign key constraint fails" error when removing staging environment
  • Table Drop Order: Now disables foreign key checks before dropping staging tables, then re-enables afterward

🔧 Technical Improvements

  • vbDb Key Check Methods: Made _disableKeyChecks() and _enableKeyChecks() public for use in staging removal
  • Enable Key Checks Bug: Fixed bug where enableKeyChecks() was setting foreign_key_checks = 0 instead of 1

🧹 Version 6.2.5 (2026-02-03)

CSS Cleanup & Duplicate Rule Removal

🧹 CSS Consolidation

  • Duplicate Rule Removal: Removed duplicate #stageit, #stageit h1, and #stageit p, #stageit li rules that were overriding dark mode styling
  • Consolidated Typography: Single authoritative rules for h1, h4, li elements with proper CSS variable support
  • Removed "NEW CHANGES" Section: Cleaned up temporary CSS section that duplicated existing rules

🔧 Styling Improvements

  • Font Inheritance: Updated typography to use font-family: inherit for consistency with Atum template
  • Rem Units: Scalable typography using rem units (1.5rem for h1, 1rem for h4, 0.875rem for li)
  • Color Variables: Ensured all text elements use var(--bs-body-color) and var(--bs-secondary-color) for dark mode

📦 Cache Busting

  • Asset Version Updated: CSS/JS version parameter updated to 6.2.5 for browser cache refresh

🎨 Version 6.2.4 (2026-02-03)

Comprehensive Dark Mode Support

🎨 Dark Mode Fixes

  • Main Container: Updated #stageit, #stg_main, #stg_header to use CSS variables for backgrounds
  • Sidebar Navigation: Updated submenu styling with CSS variables for dark mode compatibility
  • Tab Panels: jQuery UI tabs now use CSS variables for backgrounds and borders
  • Form Fields: All input, select, textarea elements use CSS variables for colors and borders
  • Environment Tab: Config page plugin settings now dark mode compatible
  • Process Steps: Action progress steps and progress bar updated for dark mode
  • Popups: Popup dialogs and overlay styling fixed for dark mode

🔧 UI Improvements

  • Buttons: Updated button styling with proper border-radius and CSS variable colors
  • Progress Bar: Simplified progress bar styling using Bootstrap success color
  • Not Done Indicator: Added CSS-only circle indicator for pending steps (no image required)
  • Form Focus States: Modern focus ring using Bootstrap primary color

📦 Removed Legacy Code

  • Removed obsolete IE6-9 gradient filters
  • Simplified form input styling by removing complex gradients
  • Cleaned up vendor prefixes for modern browser support

🐛 Version 6.2.3 (2026-02-03)

Data Tables Save Validation Fix

🐛 Bug Fix

  • Table Exclusion Confirmation Required: Fixed missing save validation that allowed saving excluded tables without checking the confirmation checkbox
  • Alert on Save: Users now see an alert message if they try to save while tables are excluded but the confirmation box is unchecked
  • Auto-Navigate to Confirmation: On validation failure, automatically switches to Data Tables tab and scrolls to confirmation checkbox

🎨 Version 6.2.2 (2026-02-03)

Backups Page Dark Mode & UI Consistency

🎨 Dark Mode Fixes

  • Backups Table Styling: Fixed unreadable white-on-white text in dark mode for backup tables
  • CSS Variables: Updated all table styling to use Bootstrap 5 CSS variables (--bs-body-bg, --bs-body-color, --bs-border-color, --bs-tertiary-bg)
  • Row Hover States: Added hover effect on table rows using --bs-secondary-bg
  • Both Themes Supported: Explicit light mode and dark mode selectors for Atum compatibility

🔧 Icon System Update

  • Joomla Icon Fonts: Replaced missing image-based icons with Joomla's built-in icon fonts
  • Delete Icon: Now uses icon-trash class (red #dc3545)
  • Restore Icon: Now uses icon-refresh class (green #198754)
  • Dark Mode Compatible: Icon colors work in both light and dark themes

🎨 Typography Modernization

  • CSS Variables for Colors: All text now uses var(--bs-body-color) for automatic dark/light mode support
  • Rem Units: Replaced hardcoded pixel fonts with scalable rem units (0.875rem for body text, 1.25rem for h2, 1.5rem for h1)
  • Font Inheritance: Typography now inherits from Atum template (font-family: inherit)

📦 Cache Busting

  • Asset Versioning: Added version parameter to CSS and JS includes (?v=6.2.2)
  • Prevents Stale Cache: Browser fetches fresh assets after updates

🔧 Version 6.2.1 (2026-02-02)

Joomla 6 Table Groups & UI Update

🔧 Improvements

  • Updated Core Table Groups: Modernized the hardcoded Joomla core table list for Joomla 5/6 compatibility
  • New Table Groups Added: Added 5 new groups for Joomla 5/6 features:
    • Joomla Workflows (workflows, workflow_associations, workflow_stages, workflow_transitions)
    • Joomla Custom Fields (fields, fields_categories, fields_groups, fields_values)
    • Joomla Privacy and Logging (action_logs, action_log_config, privacy_consents, privacy_requests)
    • Joomla Scheduler (scheduler_tasks)
    • Joomla Guided Tours (guidedtours, guidedtour_steps)
  • Removed Obsolete Tables: Removed references to tables no longer in Joomla 5/6 (weblinks, core_log_searches, sections, legacy banner names)
  • Smart Search Update: Updated finder table references to match Joomla 5/6 schema (single finder_links_terms instead of 0-f split)
  • New Core Tables: Added mail_templates, tuf_metadata, user_mfa, webauthn_credentials, template_overrides, history, schemaorg

🎨 UI Enhancements

  • Table Exclusion UI Redesign: Improved Data Tables tab with native checkboxes and Atum dark/light mode compatibility
  • Group Selection Badges: Visual indicators showing count of selected tables in collapsed groups (e.g., “3 selected”)
  • Clear All Button: Quick reset button to uncheck all table exclusions
  • Exclusion Confirmation: Confirmation checkbox with support disclaimer when excluding tables
  • Consistent Styling: Fixed row heights and minimum widths for uniform appearance

🔍 Version 6.2.0 (2026-01-01)

Log Viewer & Large Table Support Release

🔍 Log Viewer

  • Dedicated Log View: New admin view at View Log menu item to view, download, and clear the StageIt log file
  • Dark-Themed Display: Log content displayed in a styled monospace code block with dark background
  • Log Management: Clear log and download log buttons for easy log file management
  • Log File Info: Shows log file path, size, and last modified date
  • Centralized Log Location: Moved log file to /administrator/logs/stageit-log.txt for better organization

📊 Detailed Operation Logging

  • Sync Operations: Full logging of sync process including folder mapping, file backups, and database syncing
  • File-Level Visibility: Each file backup and sync operation is now logged individually
  • Table Sync Logging: Database table sync operations logged with row counts and progress
  • Skipped Items: Logs when tables are skipped (unchanged) or when structure-only sync is performed

🔄 Large Table Chunked Cloning

  • Chunked Database Operations: Large tables (10,000+ rows) are now cloned in configurable chunks to prevent timeouts
  • Configurable Thresholds: CHUNK_THRESHOLD (default 10,000 rows) and CHUNK_SIZE (default 5,000 rows) constants
  • Progress Tracking: Chunked operations report progress percentage during sync
  • Table Info Methods: New _getTableRowCount() and _getTableInfo() methods for table size detection

💾 Checkpoint System for Resume Capability

  • Operation Checkpoints: Long-running operations save checkpoints to allow resume after timeout or crash
  • Automatic Resume: If a sync operation was interrupted, it automatically resumes from the last checkpoint
  • 1-Hour Expiry: Checkpoints expire after 1 hour to prevent stale resume attempts
  • Checkpoint Logging: All checkpoint save/load operations are logged for transparency

🛠️ Technical Improvements

  • Controller Actions: New clearLog() and downloadLog() controller methods
  • View Registration: Log view properly registered in controller display switch
  • Menu Integration: "VIEW LOG" added to admin submenu

🚀 Version 6.1.0 (2025-11-19)

🔧 StageIt-5 Merge & Staging DB Helpers

🚀 New & Improved

  • Staging Database Helpers: Added controller endpoints to test DB connections and create staging DB/users with clear fallback guidance.
  • Plugin Settings Persistence: Component now saves plugin params directly and clears plugin/system caches so banner settings take effect immediately.
  • Error Logging Reliability: Extended vbJson to write full stack traces to multiple log locations (prefers administrator/logs/com_stageit.log.php with fallbacks).
  • Component UI for Plugin Settings: Environment tab renders plugin banner options (backend/frontend visibility, colors, gradients, reappear toggle) with live user group lists and modern styling.
  • AJAX Error UX: StageIt JS now surfaces errors via Joomla messages, truncates oversized responses, and logs full details to console for debugging.
  • Parity with StageIt 5.3.3: Ported the 5.3.3 frontend banner & visibility release (frontend banner toggle, backend/frontend user group controls, immediate param loading, build/encoding fixes).

🔧 Packaging & Compatibility

  • Joomla 6 Packaging: Build scripts and manifests aligned to Joomla 6 naming/output; package, component, and plugin versions bumped to 6.1.0.
  • Manifest Updates: Plugin manifest on Joomla 6 schema with updated version and description.

🎨 Version 6.0.3 (2025-11-19)

🎨 Frontend Banner & Visibility Controls Release

🚀 New Features

  • Frontend Banner Support: Added option to display the StageIt banner on the frontend site
  • User Group Visibility Controls: Select specific user groups that can see the banner (backend and frontend separately)
  • Joomla 6 User Group Selection: Uses native usergrouplist field type for multi-select user group checkboxes

🔧 Component Integration

  • Environment Tab Updates: Added frontend banner toggle and user group visibility settings to component configuration
  • Unified Settings: Plugin settings now fully manageable from StageIt component's Environment tab
  • Immediate Effect: Settings saved from component now take effect immediately without requiring plugin page visit

📦 Build System Fixes

  • Package Structure Fix: Fixed build script to create proper admin/ folder structure in component ZIP
  • Build Script Modernization: Batch file now calls PowerShell script for reliable package creation
  • XML Encoding Fix: Resolved character encoding issues in plugin manifest

🐛 Bug Fixes

  • Fresh Parameter Loading: Plugin now reads parameters directly from database to ensure latest settings are used
  • Form Compatibility: Fixed parameter loading to preserve Joomla's form system compatibility
  • Dark Mode Styling: User group checkboxes now properly styled for dark mode using CSS variables

🛠️ Version 6.0.2 (2025-11-18)

Banner Scroll Behavior Enhancement Release

🎨 Banner UX Improvements

  • Non-Sticky Top Banner: Banner now scrolls naturally with page content instead of staying fixed at top
  • Dual Banner System: Top banner scrolls away, bottom banner appears when top is out of view
  • IntersectionObserver: Uses modern browser API for efficient scroll detection
  • Smooth Transitions: Clean appearance/disappearance of bottom banner
  • Respects Settings: "Banner Reappears at Bottom" setting now properly controls whether bottom banner appears

🔧 Technical Changes

  • CSS Restructure: Changed from single fixed banner to dual banner approach (top relative, bottom fixed)
  • Inline JavaScript: Banner scroll behavior now embedded in plugin for frontend compatibility
  • Body Padding: Removed top padding, added bottom padding only when bottom banner visible
  • Updated Selectors: All CSS selectors updated for new dual banner IDs

🛡️ Version 6.0.1 (2025-11-12)

Installation Safety & Update Server Cleanup Release

🛡️ Version Compatibility Enforcement

  • Joomla Version Checking: Added preflight() installer method to prevent installation on incompatible Joomla versions
  • Strict Version Requirements: StageIt 6 now enforces Joomla 6.0.0 - 6.999.999 only (blocks J3, J4, and J5)
  • Clear Error Messages: Users attempting to install on wrong Joomla version get helpful guidance:
    • Joomla 3.x users directed to StageIt 3
    • Joomla 4.x users directed to StageIt 4
    • Joomla 5.x users directed to StageIt 5
  • Installation Prevention: Returns false from preflight to completely block incompatible installations

🧹 Update Server Cleanup

  • Single Update Site Policy: Removed <updateservers> section from component manifest (only package declares update server)
  • Automatic Cleanup: Installer now removes legacy component-level update sites from older StageIt versions
  • Orphaned Site Removal: Smart cleanup removes update sites that are no longer linked to any extension
  • Duplicate Prevention: Prevents Joomla from creating multiple update site entries for the same extension
  • Legacy URL Cleanup: Continues to remove old stageitpro update URLs from previous versions

📝 Developer Documentation

  • Update Server Reminders: Added XML comments to component and plugin manifests reminding developers that only pkg_stageit.xml should declare update servers
  • Version Enforcement Documentation: Added comments clarifying that preflight checks enforce Joomla version requirements

🔧 Technical Improvements

  • Database Integrity: Enhanced update site cleanup checks reference counts before deleting to avoid breaking other extensions
  • Error Handling: All database operations wrapped in try-catch blocks for graceful failure handling
  • Component Detection: Improved logic to find and clean up component-specific update site mappings

🚀 Version 6.0.0 (2025-11-11)

Joomla 6 Compatibility Release

🚀 Joomla 6 Native Support

  • Updated Manifests: All XML manifests updated to Joomla 6.0 specification
  • PHP 8.3.0+ Requirement: Minimum PHP version updated to 8.3.0 for Joomla 6 compatibility
  • Version Alignment: Extension version updated to 6.0.0 to align with Joomla 6
  • Update Server: Modified update server URLs to support Joomla 6 releases
  • Build Scripts: Updated build and packaging scripts for Joomla 6 deployment

📦 Native Library Migration & Code Modernization

  • REMOVED PCLZip: Replaced deprecated PCLZip 2.8.2 with Joomla's native Joomla\Archive\Archive class
  • PHP 8.3 Compatibility: Eliminated all deprecated PHP functions and legacy code
  • Modern Archive Handling: Now uses Joomla's native archive system for zip operations
  • Enhanced Error Handling: Archive errors now use Joomla's native message system
  • Streamlined Codebase: Removed legacy code dependencies

🎨 System Plugin Banner Enhancements

  • Simplified Banner Control: Streamlined to simple Yes/No toggle (removed confusing Auto-Detect option)
  • Toggle Switch UI: Replaced × close button with elegant toggle switch for hiding banner
  • One-Click Hide: Added toggle switch with hover tooltip ("Click to turn off banner")
  • Auto-Enable on Install: Plugin now automatically enabled during package installation
  • Fixed URL Detection: Corrected staging detection logic to properly identify /stageit/ URLs
  • Live/Staging Detection: Banner correctly shows "LIVE SITE" or "STAGING SITE" based on URL path

✨ User Interface Improvements

  • Action Button Icons: Added meaningful emoji icons to all action buttons:
    • Begin (launching new staging environment)
    • Rebuild Staging (refresh/rebuild)
    • Remove Staging (deletion)
    • Sync with Live (fast synchronization)
    • Log in (access buttons)
  • Improved Button Sizing: Widened "Sync with Live" button to 300px to prevent text wrapping
  • Visual Clarity: Icons provide instant recognition of button actions

🔧 Technical Improvements

  • Extension Schema: Updated extension version attributes from 5.0 to 6.0
  • Target Platform: Updated target platform from "joomla 5.*" to "joomla 6.*"
  • Package Names: Build output generates packages with "Joomla_6_v6.0.0" naming convention
  • Installation Script: Enhanced postflight script to auto-enable plugin and cleanup old files

🔧 Version 5.2.0 (2025-10-25)

Ultra-Simple Plugin Architecture & Complete Installation Fixes Release

🚀 Major Plugin Redesign

  • Ultra-Simple Architecture: Completely rewrote plugin from 245 lines to 139 lines with modular structure
  • Smart Staging Detection: Intelligent detection with conditional switch button only when staging directory exists
  • Clean Fallback Display: Shows simple "LIVE SITE" text when no staging available (no unnecessary buttons)
  • Enhanced Button Logic: "Switch to Live" always available on staging, "Switch to Staging" only when staging exists

🎨 Full Style Settings Integration

  • Complete Color Support: All plugin style settings now functional (gradient/solid, text colors, button colors)
  • Animated Gradients: Restored gradient animations with customizable duration from plugin settings
  • Visibility Controls: Proper permission checking (All users/Managers/Super Users) working correctly
  • Forced Mode Support: Manual staging/live override option fully integrated

🎨 Button Styling Enhancements

  • StageIt Button Targeting: Fixed button readability with proper #0b5ed7 color for StageIt-specific buttons only
  • Hover States: Added consistent #59a645 hover color for both light and dark modes on StageIt buttons
  • Sync Button Fix: Ensured "Sync with Live" button is fully visible and readable in all themes
  • Scoped CSS: Applied styling only to StageIt component buttons, preserving Joomla core UI elements

🐛 Complete Installation Error Resolution

  • "File does not exist com_stageit": Added missing entry point file to site files section
  • "Source folder not found": Removed obsolete media folder references from component manifest
  • Entry Point Declaration: Properly declared com_stageit file in manifest <files> section
  • Clean Package Structure: Eliminated all manifest inconsistencies and validation warnings
  • Zero Installation Errors: Achieved completely clean installation process for professional deployment

🔧 CSS Architecture Modernization

  • Proper Joomla 5 Structure: Moved CSS from deprecated media/ folder to component resources/css/
  • Legacy File Cleanup: Removed duplicate and obsolete CSS files from old media structure
  • Build Script Enhancement: Updated package builder to handle proper file structure and cleanup
  • Installation Script: Enhanced with cleanupOldFiles() method for seamless upgrades from older versions

📦 Package Quality Improvements

  • XML Validation: Added automatic XML validation to build process to prevent installation errors
  • Clean Plugin Packaging: Fixed plugin ZIP creation to include only essential files (no backup/dev files)
  • Standalone Testing: Created standalone plugin packages for independent testing before full integration
  • Professional Structure: Maintained all existing functionality while dramatically simplifying codebase

🔧 Development Tools Enhanced

  • Build Script Validation: Enhanced build process with XML syntax checking and file filtering
  • Testing Workflow: Improved development workflow with standalone plugin testing capability
  • Error Prevention: Proactive validation prevents "Can't find Joomla XML setup file" errors
  • Comprehensive Documentation: Updated JOOMLA5-CHECKLIST.md with all lessons learned from real-world deployment

📦 Version 5.1.4 (2025-10-25)

Joomla 5 Modernization & Installation Fixes Release

📦 Installation & Packaging Fixes

  • Package Structure: Fixed component manifest naming (stageit.xmlcom_stageit.xml) and proper folder hierarchy
  • ZIP Compatibility: Implemented forward slash paths in ZIP files to prevent installation errors
  • Schema Updates: Updated manifests from version 3.0 to 5.0 for full Joomla 5 compatibility
  • Media Path Fix: Corrected media folder references in component manifest (mediaadmin/media)
  • Component Entry Point: Added required com_stageit.php site file for proper component structure
  • jQuery UI Repair: Replaced corrupted jQuery UI library with clean version from CDN
  • Warning-Free Installation: Eliminated all installation warnings for professional client deployment

🛡️ System Dashboard Compatibility

  • Smart Page Filtering: Plugin now uses whitelist approach to prevent interference with system pages
  • Dashboard Protection: Completely excludes system dashboard, check-in, and configuration pages from banner injection
  • AJAX Safety: Blocks all AJAX/API requests to prevent system check interference
  • Global Check-in Fix: Resolved issues with Joomla's global check-in functionality

🔧 Modern System Requirements

  • PHP 8.1+ Support: Updated minimum PHP requirement from 5.3.10 to 8.1.0 (Joomla 5 standard)
  • Memory Optimization: Increased memory requirement from 128MB to 256MB for modern operations
  • Timeout Updates: Extended execution timeout from 30s to 60s for reliable deployments
  • Extension Validation: Replaced obsolete safe_mode checks with essential PHP extension validation
  • Memory Detection: Improved memory limit detection including unlimited memory support

🔧 Development Tools

  • Pre-build Validation: Added comprehensive package validation script (validate-package.ps1)
  • Component Templates: Created Joomla 5 component template generator (create-template.ps1)
  • Best Practices Guide: Added comprehensive development checklist (JOOMLA5-CHECKLIST.md)
  • Build Integration: Enhanced build script with automatic validation and forward-slash ZIP creation

🚀 Joomla 5 Compatibility Enhancements

  • Database Layer: Fixed deprecated Quote()quote() and query()execute() methods for full J5 compatibility
  • View Classes: Removed legacy jimport statements and JViewLegacy compatibility layers
  • Class Naming: Updated to PSR standards (StageItViewdefaultStageItViewDefault)
  • Asset Management: Implemented modern Web Asset Manager for improved performance
  • Error Handling: Added structured exception handling and modern Joomla logging system
  • Log Path Fix: Corrected staging log path to use stageit/administrator/logs instead of administrator/stageit/logs

🔍 Code Quality Improvements

  • Modern PHP: Updated error handling with proper Exception classes
  • Logging System: Replaced custom vbLog with native Joomla\CMS\Log\Log
  • Input Handling: Modernized using Factory::getApplication()->input
  • Copyright: Updated copyright notices to 2025

🎨 CSS Optimization

  • File Size Reduction: Removed ~293 lines of unused CSS (20% reduction)
  • Legacy Cleanup: Removed obsolete Joomla 2.5/3 styles and unused components
  • Performance: Eliminated unused search, pagination, gallery, and Sales Pro CSS
  • Maintainability: Cleaner stylesheet with only essential styles retained

🔧 Developer Experience

  • Future-Ready: Fully compatible with Joomla 5.x architecture
  • Standards Compliant: Follows modern Joomla coding standards
  • Error Recovery: Enhanced debugging and error reporting capabilities

🐛 Version 5.1.3 (2025-10-24)

  • Admin URL rule corrected: STAGING at /stageit/administrator, LIVE at /administrator.
  • Fixed System Dashboard red-X issue by guarding for HTML-only responses in onBeforeCompileHead/onAfterRender.
  • Removed unsafe injection fallback for non-HTML (no-<body>) responses.
  • Switch button targets updated: staging → /administrator/, live → /stageit/administrator/.
  • XML Standardization: Unified all XML manifests with consistent version numbering, creation dates, and copyright notices
  • Initial Git Repository: Established version control with GitHub integration for professional development workflow
  • No changes to styles/colors/labels; behavior preserved otherwise.

🔧 Version 5.1.2 (2025-10-23)

  • Update Sites hardening: Only the package declares the update server (URL: https://www.php-web-design.com/updates/check.php?ext=stageit6). Component/plugin manifests no longer register update sites.
  • Self-healing installer: Package postflight collapses duplicate update-site rows, removes legacy stageitpro, and ensures only the package is mapped to the update site.
  • Cosmetic: Update server named "StageIt Update Server", enabled by default.

🔧 Version 5.1.1 (2025-10-22)

  • Update Sites cleanup: Package now installs with a single update server (package-level) and removes stageitpro legacy endpoint. Component/plugin manifests no longer register update sites. Postflight script de-duplicates mappings so only the package is linked to ext=stageit6.

🚀 Version 5.1.0 (2025-10-22)

Consolidated release since 5.0.2. Highlights:

🔧 System Plugin

  • Joomla 5 / PHP 8–safe rewrite using a proper CMSPlugin class and SubscriberInterface.
  • Safe string concatenation; removed typed property conflicts.
  • Strict /stageit detection by root name or URL path; logs detection reason to /administrator/logs/stageit.log.php (root-name-stageit, url-path-stageit, default-live).
  • Automatic Live ↔ Staging switch buttons with safety checks.

🎨 Style & Theming

  • New Style tab with:
    • Style Mode (default gradient).
    • Gradient Cycle default 5s (min 5, max 120).
    • Live (solid) #59a645; Live gradient #59a645 → #356732; Live text #ffffff.
    • Staging (solid) #f79034; Staging gradient #f79034 → #c05627; Staging text #ffffff.
    • Button Link Color (default #ffffff) applied to "Go to Live / Staging" links.
  • Dark-mode hardened for Atum/Bootstrap tokens, with fallbacks to handle caching/overrides.

🎨 Admin UI

  • Converted legacy .button markup to Bootstrap .btn variants; tables use .table.table-striped.align-middle.
  • Removed prior admin helpers (seconds suffix, input-width caps, preview swatch).

📦 Packaging & Installer

  • Installer uses inner plugin package and now reflects the correct defaults and runtime logic on fresh installs.
  • Unified manifests (schema 4.0) and metadata; consolidated changelog.

🐛 Reliability

  • Fixes for parse errors (method placement, $autoloadLanguage), CSS cache-busting (?v= on stylesheet), and consistent asset loading.

🎨 Version 5.0.12 (2025-10-19)

  • Phase B (markup): Replaced custom classes with Bootstrap counterparts in admin templates.
    • .buttonbtn variants (remove → btn-outline-danger; login/rebuild → btn-primary; otherwise → btn-secondary).
    • Tables with .stg_table/.grouptable now include table table-striped align-middle.
    • Inputs/Textareas now use form-control; select uses form-select.
  • Theme: Continues to use token-based CSS so Atum Dark/Light toggles automatically.

🎨 Version 5.0.11 (2025-10-19)

  • Theme: Switched to Joomla 5 / Bootstrap 5 tokens in media/com_stageit/css/admin.css (variables-only, theme-aware).
  • Behavior: Removed body-class injection; StageIt styles are scoped to #stageit and derive from Atum tokens, so Dark/Light toggles automatically.
  • Customization: Preserved requested dark background #171c24 for #stageit in dark mode only.
  • Packaging: Loaded CSS via WebAsset on admin option=com_stageit; manifests bumped to 5.0.11.

🐛 Version 5.0.10 (2025-10-19)

  • Fix: Rewrote the system plugin with a safe NOWDOC-based inline JS for adding the com_stageit body class (eliminates the PHP parse error around catch).
  • Theme: Continues loading media/com_stageit/css/admin.css via WebAsset (onBeforeCompileHead).

🎨 Version 5.0.9 (2025-10-19)

  • Theme: Move Dark/Light CSS to a static asset media/com_stageit/css/admin.css and load via WebAsset on admin StageIt pages.
  • Reliability: Ensure <body> has the com_stageit class so selectors body.admin.com_stageit always match.
  • Packaging: Manifest now installs the media/com_stageit/css/admin.css file.

🎨 Version 5.0.8 (2025-10-19)

  • Dark Mode: Set #stageit background to #171c24 in dark mode (per request). Implemented as an inline CSS override so it takes precedence over earlier rules.

🐛 Version 5.0.7 (2025-10-19)

  • Fix: Removed the bool type from $autoloadLanguage in the system plugin to avoid inheritance conflict with CMSPlugin (which declares it untyped). This resolves the install-time fatal error.

🎨 Version 5.0.6 (2025-10-19)

  • Dark/Light Mode: Adopted the proven selectors & values; CSS is injected inline at onBeforeCompileHead so no media/ file is required.
  • Reliability: Ensures <body> has the com_stageit class on admin StageIt pages so body.admin.com_stageit selectors always match.
  • Packaging: All manifests set to schema 4.0; version bumped to 5.0.6.

🐛 Version 5.0.1 (historic)

  • Fix: Resolved parse error by converting the system plugin to a proper Joomla 5 class and defining getSubscribedEvents() inside the class.
  • Improve: Enabled $autoloadLanguage = true and moved manifests to schema 4.0.

🚀 Version 5.0.0

  • Joomla 5 native baseline (no legacy plugin required).
  • Theme: Full Dark/Light mode compatibility in the admin (scoped to body.admin.com_stageit).
  • Backups View: Implemented dark-mode "odd row" styling while preserving header look.
  • Packaging: Initial J5 manifests and structure; media assets under media/com_stageit with correct references.

Add comment

Submit