Improved course package export so protected lesson video/download attachments referenced by lesson metadata are included and remapped during import.
2.0.69
Improved course package import handling for protected lesson video and download metadata.
2.0.68
Removed the obsolete old database table cleanup section from the dashboard and added compare-version upgrade links to the dashboard Upgrade Options area.
2.0.67
Added public course catalogue search, filter and sort controls for the managed Courses page.
2.0.66
Reworked course package ZIP handling to avoid direct archive file operations while preserving constrained package import and export behaviour.
2.0.65
Refactored course template import helpers to keep course template export/import code easier to review and maintain.
2.0.64
Reworked course package ZIP handling, course template post loading, and course query internals to resolve review findings without suppressions.
2.0.63
Improves database upgrade reliability for course discovery fields before public catalogue queries run.
2.0.62
Fixed upgrade handling for course discovery database fields on existing course tables.
2.0.61
Fixed course catalogue tag filtering, course template export lookups, and ZIP library loading review warnings.
2.0.60
Added course metadata, course tags, catalogue filtering, public badges, search shortcode support and import/export preservation for course discovery data.
2.0.59
Removed the extra post-import action panel from the course package import screen.
2.0.58
Renamed the admin menu to HoloLMS while preserving the full plugin name.
2.0.57
Fixed course package ZIP loading so imports use the correct WordPress ZIP library path and fail safely if the library is unavailable.
2.0.56
Restructured Core course package, page-builder, database and course template internals to reduce large-file and large-function review warnings while preserving behaviour.
Centralised lifecycle hook names while preserving required WordPress registration timing.
2.0.53
Fixed preview detection so WordPress conditional query tags are not called before the main query is available.
2.0.52
Fixed a critical error caused by lifecycle hook changes and restored WordPress-safe hook timing for Core loading, settings, privacy, content post types and course catalogue block registration.
2.0.51
Hardened remaining managed-page state changes and cleanup paths.
Reworked repeated lookup paths and upload/delete wrappers for large-site resilience.
Reduced broad hook work and reviewed large importer/page-builder paths.
2.0.50
Hardened Core state-changing routines with clearer capability and nonce guards.
Removed broad read capability checks from public learner action helpers.
Improved admin setup, rescue import and page-management mutation checks.
2.0.49
Hardened setup, import and maintenance write contexts.
Improved admin nonce handling across Core actions.
Fixed course archive handling and rescue import path validation.
2.0.48
Fixed reported coding-standard issues in setup-page lookup, shortcode-page navigation, ZIP package handling and course-list translation comments.
Reworked setup-page and navigation lookups to use prepared cached database helpers instead of slow meta queries.
Reworked course package ZIP handling to use the WordPress ZIP library and removed the direct admin image include from package media import.
2.0.47
Improved the public course list so Pro course groups show their full hierarchy instead of only the immediate group.
Corrected setup page creation notices so they report setup pages available and newly-created pages separately.
2.0.40
Fixed setup-page creation so stale creation locks can no longer produce false page-creation failures.
Tightened shortcode matching so similar shortcode names such as evidence and evidence portfolio are not confused.
Optimised setup page and shortcode page lookup to reduce expensive Pages scans on admin screens.
2.0.39
Improved setup page creation so stale creation locks are cleared safely and missing Core, Professional and Corporate pages are created together without false duplicate-lock failures.
2.0.38
Hardened setup page creation so existing/duplicate LMS setup pages are reused and safe duplicate setup pages are moved to the Bin during setup repair.
2.0.37
Improved setup page detection and repair so existing LMS-managed setup pages are reused instead of duplicated.
2.0.36
Improved setup page detection so existing LMS shortcode pages are reused instead of duplicated.
Improved LMS-managed page cleanup when managed pages are trashed or deleted.
Included Corporate setup page metadata in the LMS-managed page visibility tools.
2.0.35
Fixed LMS-managed page visibility in the WordPress Pages list so the cleanup toggle shows the actual managed pages instead of stale references.
Stopped the Course Content base page from being recreated immediately after manual deletion.
Improved cleanup of linked LMS content pages when courses, modules or lessons are deleted.
2.0.34
Fixed the Pages admin LMS-managed page toggle so it shows the managed LMS pages directly instead of leaving the normal Pages list visible.
2.0.33
Fixed course package imports so course-group assignment cannot trigger a critical error.
Hardened package import failures so unexpected import exceptions are returned as admin errors instead of front-end critical error screens.
2.0.32
Fixed package media imports for image-based course packages.
Hardened course, module and lesson preview resolution to avoid wrong entity lookups.
Added a Pages admin toggle to show LMS-managed pages when cleanup is needed.
2.0.31
Fixed course settings saves so admin submit buttons reset after AJAX completion.
Fixed imported course package group assignment when Professional course groups are available.
Improved course preview URLs and imported page slug handling so WordPress page slug conflicts do not break LMS routing.
Kept LMS-managed pages visible in the WordPress Pages Bin so old imported pages can be deleted.
2.0.30
Fixed LMS content page resolution so course previews resolve the course page rather than child module pages.
2.0.29
Made quiz admin preview answers selectable while keeping preview submissions disabled.
2.0.28
Applied lesson quiz question-per-attempt pools to displayed questions and submitted scoring.
Ensured quiz submissions only mark the displayed question set.
2.0.27
Improved quiz rendering so admin previews and learner quiz pages show styled selectable answer options instead of plain bullet lists.
2.0.26
Fixed course package import success redirects so completed imports return to the registered Course Import / Export screen instead of an unavailable course settings route when Pro or Corporate has replaced the Core menu.
2.0.24
Fixed course package uploads so importer-only JSON and ZIP packages can be validated by the LMS importer without being rejected by WordPress media upload MIME checks.
2.0.23
Exposed setup, settings and system health pages directly in the LMS admin menu while keeping dashboard links available.
2.0.22
Added complete ZIP course package import/export with separate JSON files for course, modules, lessons, quizzes, assessments, pages, settings and media.
Added package validation and import support for module assessments and final assessments when Pro is active.
Updated course quiz package handling to use the supported quiz importer structure with quiz settings, top-level questions, attempt_limit and strict answer validation.
2.0.21
Improved setup page creation and detection so newly created shortcode pages are recognised immediately.
2.0.20
Improved administrator preview handling for learner-facing pages.
2.0.19
Corrected Core dashboard panel border hierarchy so main panels use a 2px light purple border and nested bordered panels use a 1px red border.
2.0.17
Updated Core admin control panel section borders so main panels use a heavier light purple border and nested bordered panels use a red border with the same shadow treatment.
2.0.16
Updated Core admin control panel cards to use a consistent light purple border and drop shadow instead of coloured vertical card lines.
2.0.15
Reworked LMS-managed page lookup and uninstall cleanup handling to satisfy Core code review requirements without changing existing behaviour.
2.0.14
Added one-click missing page creation and improved admin save handling so supported save actions stay on the saved screen with clear confirmation messages.
2.0.13
Reworked full data uninstall cleanup so plugin-owned LMS content is removed directly in bounded batches instead of running slow post-deletion hooks.
Bounded multisite activation, deactivation and uninstall site loops.
Hid LMS-managed setup and course content pages from the standard WordPress Pages list while keeping direct editing and front-end access available.
2.0.10
Added an administrator-controlled dashboard tool for removing old plugin-owned Core, Professional and Corporate database tables after a database backup.
2.0.9
Reworked the bounded content lookups and uninstall cleanup to use WordPress post APIs instead of direct database calls.
Updated schema self-healing to check every required canonical table and made the System Health table check uncached with the physical v2 table names shown.
2.0.5
Fixed rescue export imports so JSON produced by the Pro rescue exporter is recognised and imported into the v2 Core tables, even when uploaded through the backup or template import forms.
2.0.3
Fixed course content rescue import handling and admin import notices.
Added schema self-healing when canonical content tables are missing after a clean database reset.
2.0.2
Switched active LMS storage to clean v2 database tables and removed runtime reads from the old Core table set.
Added legacy table handling for the v2 schema upgrade path.
Updated course content relations to use v2-specific metadata so old linked posts are not treated as active v2 content.
Tightened the content rescue importer request, capability, upload and escaping paths.
Reduced unnecessary admin loading to improve dashboard performance.
2.0.1
Moved the major architecture update warning to the WordPress plugin update row only, so it is shown before updating and not after installation.
1.3.118
Aligned standalone quiz page detection with the shared Core and Professional quiz workflow.
Kept lesson quiz links on the configured standalone quiz page instead of falling back to lesson pages.
1.3.116
Refreshed the dashboard Upgrade Options section with the current Professional, Corporate and Agency version details.
Checked Core feature wiring and static integrity after the dashboard update.
1.3.114
Fixed explicit database column lists for courses, modules, lessons, quizzes, quiz questions, quiz answers, progress rows, and learner sessions so course listings load correctly.
Replaced the remaining course entitlement SELECT wildcard with an explicit course column list.
1.3.112
Tightened release-review handling for filesystem helpers and controlled schema update includes.
1.3.111
Tightened schema-change execution so database create, alter, and drop routines only run inside activation, controlled upgrade, or uninstall contexts.
Improved WordPress Filesystem initialisation and upload-directory path validation for course package and template handling.
1.3.110
Reworked database schema helpers, CSV export writing, and admin notice loading for WordPress.org submission readiness.
Removed remaining direct schema statement triggers from active PHP code while preserving controlled activation and upgrade behaviour.
1.3.109
Further tightened WordPress.org submission readiness by restructuring request, upload, import, export, activation and internal key-handling paths.
Split large internal implementation files into smaller focused components while preserving existing LMS behaviour.
1.3.103
Tightened request, upload, export and transient-key handling for WordPress.org review.
1.3.102
Tightened request, upload, export and download handling for WordPress.org pre-review checks.
Reworked package/template export downloads to avoid raw output paths while preserving validated admin-only export flows.
Removed dynamic upload request keys from helper handling.
1.3.100
Reworked remaining recurring request, nonce, upload handling, and legacy identifier review items across the plugin without adding suppressions.