Skip to content

What's New v10.2

Brent Cordis edited this page Mar 15, 2026 · 3 revisions

What's New in Proclaim 10.2

Released March 15, 2026 — Media chapters, subtitles, YouTube OAuth, AI assist improvements, and 100+ bug fixes.

For the previous release, see What's New v10.1.


Highlights

Media Chapters & Subtitles (PR #1142)

Media files now support chapter markers and subtitle tracks as first-class features:

  • Chapter timestamps — Subform on the media file edit form for time + label pairs
  • Clickable chapter list — Frontend renders a chapter list below the player; clicking seeks to that time (HTML5 video/audio and YouTube iframes)
  • Active chapter highlighting — Current chapter is highlighted during playback
  • Subtitle tracks — Subform for VTT/SRT caption files with language, kind, and source URL
  • VTT file upload — Custom upload field validates VTT/SRT files and stores them in media/com_proclaim/vtt/
  • Timestamp links.cwm-timestamp links in study text seek the nearest player on the page

YouTube OAuth Integration (PR #1142)

Connect your YouTube server to import chapters and download captions directly:

  • Import Chapters — One-click import of chapter timestamps from YouTube video descriptions
  • Download Captions — List available caption tracks and download as VTT files
  • OAuth status field — Visual indicator of connection status in server settings
  • Addon capability flagssupportsChapters() and supportsCaptions() on 7 platform addons (YouTube, Vimeo, Wistia, Dailymotion, Facebook, Rumble, Soundcloud)

Per-Media Copy Description (PR #1142)

Each media file's "Copy Description" button now generates a platform-optimized description:

  • Server format templates — Configure a description template per server with placeholders: {title}, {series}, {teachers}, {date}, {scriptures}, {topics}, {chapters}, {studyintro}, {url}
  • Chapter timestamps — Formatted in 0:00 Label format recognized by YouTube, Vimeo, and most platforms
  • Frontend URL — Auto-detects SEF menu item path for the sermon link

AI Assist Enhancements (PR #1142)

  • Chapter generation — AI can now suggest chapter timestamps based on video context
  • Toggle checkboxes — Choose which fields to generate (topics, intro, text, chapters)
  • Topic saving fix — Multiple AI-suggested topics now save correctly (was only saving one)
  • Joomla 6 editor API — Updated to use non-deprecated JoomlaEditor.get().getValue()/setValue()

Google Drive Server Addon (PR #1139)

A new server addon for Google Drive enables embedding documents, spreadsheets, and presentations directly in sermon/message pages.

Supported URL formats:

  • drive.google.com/file/d/{ID}/view — Generic Drive files
  • drive.google.com/open?id={ID} — Legacy sharing links
  • docs.google.com/document/d/{ID}/edit — Google Docs
  • docs.google.com/spreadsheets/d/{ID}/edit — Google Sheets
  • docs.google.com/presentation/d/{ID}/edit — Google Slides

Setup: Create a new Server, choose "Google Drive" as the type. No configuration needed — just start creating media files with Google Drive URLs.

Interactive Transcripts (PR #1148)

Media files with VTT/SRT subtitle tracks now automatically display an interactive transcript panel below the player:

  • Scrollable transcript — each VTT cue rendered as a clickable line with timestamp
  • Click-to-seek — clicking any line seeks the player to that timestamp (HTML5 audio/video and YouTube iframes)
  • Active cue highlighting — current cue highlighted during playback with auto-scroll
  • Search/filter — text input filters transcript lines with match highlighting
  • Dark mode aware — uses Bootstrap 5.3 theme variables throughout
  • Print friendly — full transcript shown without scroll constraints
  • Caption file cleanup — locally stored VTT files automatically deleted when the media record is deleted

No configuration needed — if a media file has a subtitle track, the transcript panel appears automatically on the sermon detail page.

Chunked Export/Import (PR #1140)

Large database backup/restore operations now use chunked processing with async post-restore steps, preventing timeout failures on big installations.


Improvements

YouTube Module

  • Countdown timer — Shows time remaining until scheduled live stream
  • Notify button — Browser notification when stream goes live
  • Mini-player (PiP) — Floating player when scrolled past the main embed
  • Quota optimization — Smart pre-check with videos.list (1 unit) instead of search.list (100 units); 15-minute throttle on empty searches; centralized file cache for quota/schedule data

Admin Performance (PR #1138)

  • Eliminated getTableColumns() calls from 7 list models
  • Static config cache for CwmserverModel::getConfig()
  • Scalar subqueries replace GROUP BY aggregation in messages list

Podcast Enhancements

  • Multi-platform podcast links with Podcast Index API integration
  • Configurable iTunes settings with deprecated tag cleanup
  • Artwork validation on save

Schema-Driven Layout Editor Settings (PR #1135)

Settings modal is now driven by XML schema — adding a new per-element setting requires only editing XML and adding language strings. No JavaScript changes needed.

Analytics

  • Archived indicators and status filter (All/Published/Archived)
  • Drill-down views for series, message, and media
  • Printable pastor-ready reports
  • CSV export

Other Improvements

  • URL normalization on save for all platform addons
  • Reset Hits confirmation dialog
  • Default teacher auto-fill on new messages
  • Modal series field (Select/New/Edit/Clear buttons)
  • Social sharing with GDPR-compliant local option
  • Legacy com_biblestudy URL redirects to com_proclaim
  • Help system migrated from local HTML to GitHub wiki

Bug Fixes

YouTube API Quota

  • Prevent quota exhaustion from search.list overuse (was burning ~200 units/minute with no active stream)
  • Centralized file cache for throttle and scheduled start times
  • AJAX polling now only checks known video IDs (1 unit), no more expensive search fallback

AI Assist

  • Topics saving only one instead of multiple
  • Chapter generation not displaying results
  • Deprecated Joomla editor API warnings on Joomla 6

Image Handling

  • Protect source image from deletion during thumbnail cleanup
  • Prevent File::copy error when source image is missing

Frontend

  • Series filter not clearing due to stale session state
  • AJAX pagination page numbers, position, and CSS
  • Clear button disabled and filter state lost
  • CSRF gate removed from read-only filter endpoint
  • Landing page SEF URLs, session state bleeding, page caching
  • Handle legacy Proclaim 9.x SEF URLs and download redirects
  • Handle NULL series_id with custom not-found page

Dark Mode

  • Theme-aware colors throughout (tables, cards, buttons, YouTube integration)
  • WCAG AA contrast compliance for alerts and badges
  • Removed all hardcoded CSS colors

Database

  • Correct AUTO_INCREMENT counters after backup restore
  • Cast integer properties in Table bind() for PHP 8.3
  • Add missing primary keys for sites upgraded from v7/v8/v9

Play Tracking

  • Re-init YouTube IFrame API players after AJAX filter
  • Track inline mp3 plays and Fancybox audio overlays
  • Use Joomla <base href> for multilingual play tracking URLs

Security

  • Escape exception text in innerHTML to prevent XSS (CodeQL #47)

Testing

  • 523 PHPUnit tests (1,149 assertions) — all pass
  • 246 Jest tests (18 suites) — includes 45 new tests for chapters, VTT upload, AI assist, YouTube tracks, plus 15 for interactive transcripts
  • PHP CS Fixer: 0 issues across 376 files
  • PHP syntax: 1,245 files clean
  • Code quality scan: Full 4-area scan (admin PHP, site PHP, JS, modules/plugins) — zero critical issues

Requirements

  • PHP 8.3+
  • Joomla 5.1+ (also runs natively on Joomla 6 without backward compatibility layer)

Developer Changes

New Field Classes

  • ShowVersesField, ScriptureSeparatorField, DateFormatField — extracted from duplicated XML options into reusable custom field classes
  • VttUploadField — VTT/SRT caption file upload with validation
  • DescriptionFormatField — Description template editor with placeholder reference
  • YoutubeOAuthStatusField — OAuth connection status indicator

New Helpers

  • CwmyoutubeFileCache — Centralized file-based cache for YouTube quota, throttle, and schedule data
  • CwmdescriptionHelper — Template-based video description builder with placeholder replacement

New JavaScript Modules

  • cwm-player-chapters.es6.js — Chapter list rendering and seek handling
  • cwm-vtt-upload.es6.js — VTT file upload handler
  • cwm-youtube-tracks.es6.js — YouTube chapter import and caption download
  • cwm-transcript.es6.js — Interactive transcript panel with VTT parsing, seek, search, and active cue sync

Addon API

  • supportsChapters() / supportsCaptions() — Override in addon classes to enable platform-specific chapter/caption features
  • formatChaptersForDescription() — Static method for platform-compatible timestamp formatting

Clone this wiki locally