v6.6.1 (2026-10-14)
Fixed
- Stripe restricted keys were cut off when saved in the plugin, because the key fields stopped at 99 characters. Test and live keys and webhook secrets now accept longer values. Re-enter a key that was saved truncated [Stripe]
v6.6.0 (2026-10-10)
New
- Create a course, its first date and its sessions in one save. The new course form has a "First date" block; leave it empty to add dates later [Courses]
- A course date saved without sessions gets one session per day automatically, at the default times set in the options. Switch it off on the form to add sessions yourself [Course Dates]
- Booking email templates no longer have to be chosen on every course and course date. Leave them on "Use default" and set the default once in the options [Options]
- Waiting list for guests: visitors without an account can join with a name and email when guest checkout is on. Joining sends a confirmation email with a link to leave the list [Waiting List]
- Free seats are offered to the waiting list in the order people joined, to as many people as there are seats, and an offer is held for a number of hours before the next person is told [Waiting List]
- Waiting list entries are shown in My Applications, and the course date's Waiting List tab shows name, email, seats, date joined and date notified, with "Notify now" and "Remove" [Waiting List]
- Undo a payment that was marked by mistake: a booking marked Paid by hand can be put back to Pending, and the payment record is reversed [Bookings]
- Reactivate a cancelled or expired booking, if its course date still has room [Bookings]
- The status of a booking is changed from a menu that names each action, in the bookings list and on the course date's Attendees tab [Bookings]
- Bookings list: filter by status and by course date, search by guest email [Bookings]
- Attendee list with one row per seat, totals per status and a Print button. The course date's Attendees tab shows the people a customer brought, guest emails, and booked / capacity / waiting totals [Participants]
- Calendar: click an event for its time, place, description and a Book button; new List view; course dates without sessions are shown as all-day events [Calendar]
- Sessions page: optional grouping by course, and course dates without sessions are listed as "All Day" [Sessions]
- Course dates list shows the number of sessions and booked / capacity [Course Dates]
- New option to expire unpaid online-payment bookings after a number of hours and release their seats. Off by default; bookings that asked for an invoice are never expired [Options]
- New option "Delete all data on uninstall". Off by default: uninstalling keeps your courses, bookings and payment records [Options]
Changed
- "Check Capacity" is now on unless you switch it off. If you never saved this option, seat limits start being enforced after the update and full course dates offer the waiting list. A capacity of 0 means unlimited. Set the option to No to keep the old behaviour [Options]
- A session outside its course date's start and finish is accepted and extends the course date, instead of being refused [Sessions]
- The old calendar layouts (list, top panel, session calendar) are removed; the calendar's own List view replaces them [Calendar]
Fixed
- Security: deleting a session did not check a security token or permission, and a crafted address could delete every session [Sessions]
- Security: saving generated sessions and joining or leaving the waiting list now require a security token [Sessions, Waiting List]
- Security: a coupon code was matched as a pattern, so entering % in the cart redeemed the first unused coupon. The whole code has to match now [Cart, Coupons]
- Security: adding a coupon to a booking and transferring a registrant now require a security token and the edit permission [Bookings]
- Adding a coupon to a booking in the administrator could change the prices of a different booking and left the booking itself as it was. It now reprices every course date of the booking the way the cart does, only while the booking is not paid, and a coupon it replaces becomes available again [Bookings]
- Transferring a registrant whose booking has a coupon took the discount off every seat of the moved course date. The coupon is applied once to the whole booking again, as in the cart [Bookings]
- "Paid" in the bookings list could mark the booking in the row above [Bookings]
- Capacity was not checked on the first booking of a course date, so one booking could exceed it [Checkout]
- Two visitors booking the last seat at the same moment could both get it [Checkout]
- Changing a booking's status on its edit form skipped the payment record, the emails and the waiting list [Bookings]
- A full course in the cart hid the other courses in it [Checkout]
- The waiting list email could describe a different date of the same course, and was sent to everybody on the list for a single seat [Waiting List]
- Sessions were listed in no fixed order on the course page, in the cart, on the booking and in emails; courses sharing a day were mixed together [Sessions]
- Changing a course date's start date overwrote its finish date; the finish date could be set before the start date [Course Dates]
- "Generate sessions" produced nothing for a one-day course date and skipped the last day [Sessions]
- The calendar stayed empty when a course date had no sessions, and one apostrophe or line break in a text could stop it from rendering. Month and day names follow the site language [Calendar]
- A one-day course date disappeared from the lists on its own day [Courses]
- Saving a course failed with an error on Joomla 4 when Smart Search was enabled [Courses]
- The course list failed when opened without its own menu item [Courses]
- A booking with many named attendees could fail to save [Checkout]
- The cart gave no reason when a quantity was refused; a script error appeared on every checkout submit [Checkout]
- The tutor shown on course dates and sessions came from the old contacts table [Tutors]
- Request Invoice acted on bookings that had chosen another payment method [Payments]
- Joomla 6: removed screens and scripts that no longer worked, and replaced calls that Joomla is retiring [Maintenance]
v6.5.0 (2026-09-17)
New
- Card payments with Stripe. The new "JoomCourses - PaymentStripe" plugin sends customers to Stripe's own payment page, so card details never touch your site. Apple Pay, Google Pay and any methods you enable in Stripe appear automatically. The plugin installs disabled: enable it, add your keys and register the webhook address it shows you [Payments]
- Refund a paid booking from its edit screen. The money goes back through the payment provider and the booking is marked Refunded [Bookings]
- A refund you make in the Stripe Dashboard now marks the booking Refunded here as well [Payments]
- New "Payment Received Email Template" option: email customers when their payment succeeds, not only when they book. Leave it unset and nothing changes [Options]
Fixed
- Security: a booking's status could be changed by a forged request. The status links now carry a security token [Bookings]
- Security: clicking the green "Paid" badge marked a booking Refunded straight away without returning any money to the customer. It now opens the booking instead [Bookings]
- Pricing: customers could be charged a different amount than the cart showed. The cart, the booking, the confirmation email and the payment now always agree. This affected "amount off" and "set price to" coupons, carts that still showed VAT with "Show VAT" switched off, and totals that were a cent apart. Bookings made before this update keep the amounts they were saved with [Cart]
- Changing a quantity in the cart showed the prices from before the change [Cart]
- The booking confirmation email ignored the coupon discount [Emails]
- Bookings paid with a coupon were recorded in the accounting figures for less than they cost [Payments]
- PayPal could be asked for a cent less than the booking total [Payments]
- A payment could be recorded twice when the provider's confirmation and the customer's return to the site arrived at the same moment [Payments]
- A successful payment could be reported back to the provider as failed, so it kept retrying [Payments]
- Waiting-list emails were never sent. Bookings that are cancelled, refunded or expired now notify the waiting list, if a template is chosen in the options [Options]
- A guest's link to their own booking did not work when their email address contained a "+" [Cart]
v6.4.2 (2026-09-13)
Improvements
- New "Courses per Page" option on the Courses menu item. Choose "All" to list every course on a single page; the pagination is then hidden. The setting is per menu item and applies to the List, Grid and Table layouts alike [Courses menu item]
v6.4.1 (2026-09-03)
Fixed
- The Associations tab offered an association slot for the course's own language: an English course was still offered an "English" association. Only the other content languages are listed now [Course edit view]
- Changing a course's Language while editing threw a JavaScript error, so the associations were neither reset nor was the "existing associations will be reset" warning shown. Both work again [Course edit view]
- Removed a leftover MooTools script that threw "window.addEvent is not a function" in the browser console on every load of the Course edit screen. It referenced fields that no longer exist [Course edit view]
v6.4.0 (2026-08-28)
Fixed
- The Language column showed "Undefined" for every course assigned to a specific language. The list query never joined the languages table [Courses view]
- The Language filter in Filter Options had no effect: the selection was stored but never applied to the query [Courses and Course Dates views]
- The frontend ignored the site language entirely, so on a multilingual site every language's pages listed the courses, course dates and calendar entries of all languages [Frontend]
- The batch dialog for courses was an empty leftover from another component: it had no options, used obsolete MooTools code and submitted the wrong task. It has been rebuilt and its toolbar button restored [Courses view]
- Course dates can now be assigned a language in batch [Course Dates view]
- Uninstalling the package failed on PHP 8 with "count(): Argument #1 must be of type Countable|array, int given". The uninstall routines of the PayPal and Request Invoice payment plugins called count() on a scalar [Payment plugins]
- On a fresh install the bundled plugins were left disabled, so the System and Smart Search plugins and both payment methods had to be enabled by hand. The package install script was named after another product, so Joomla never ran it. Updating to 6.4.0 also repairs sites that were installed this way: if none of the JoomCourses plugins is currently enabled, the ones the package ships enabled are switched back on. Sites where the plugins were configured by hand are left exactly as they are [Package installer]
Improvements
- Courses now support Joomla's Multilingual Associations. Translations of a course can be linked from a new Associations tab, they show up in Components → Multilingual Associations, the Courses list gained an Association column, and the Language Switcher module now jumps from a course to its translation [Backend, Frontend]
- A course and its associated translations can share one schedule, so course dates only have to be maintained once instead of being recreated for every language. Controlled by the new "Share Course Dates Across Translations" option, enabled by default [Options → General]
- A booking taken on a shared course date is now described with the course title of the language it was booked in, both in the cart and in the booking confirmation e-mail [Frontend]
- Added indexes on the course and course date language and course_id columns [Database]
v6.3.1 (2026-07-09)
Fixed
- Unused coupons could never be deleted — every coupon was reported as "Cannot delete used coupon id xx" [Coupons view]
- Coupons could not be saved because the mandatory "Currency" field was read-only and empty. It is now a currency selector [Coupon form]
- Clearing "Valid from" or "Valid until" no longer fails with "Incorrect datetime value" and is now stored correctly [Coupon type form]
- "Save as Copy" on a coupon type now creates its price/currency record, so coupons generated from the copy get a valid currency [Coupon type form]
- Reactivating a coupon now clears the applied date instead of writing a zero date [Backend]
- The coupon status filter is combined correctly with the other filters [Coupons view]
Improvements
- Coupons can now be created one at a time with a "New" toolbar button. Leave the coupon number empty to generate it from the coupon type's mask [Coupons view]
- "Generate coupons" moved from a panel above the list into a toolbar button that opens a modal, with inline validation and a confirmation message [Coupons view]
- Coupon generation now checks permissions and the security token, caps the quantity at 500, and reports why it failed instead of redirecting silently
- Coupons and Coupon types now use the standard Joomla search tools, adding filters for status, coupon type, discount type and currency
- Coupons can now be searched by coupon number as well as title [Coupons view]
- Legacy zero dates are converted to NULL on update, and the currency column no longer defaults to the invalid code '0'
v6.3.0 (2026-06-28)
New Features
- Import sessions into a course date from a CSV or Excel (XLSX) file, with a column-mapping step and a validation preview [Course date form]
- Per-course-date iCalendar (.ics) export [Course dates view]
Fixed
- Keep "Add session" and "Generate sessions" inside the course-date modal instead of breaking out of it [Backend]
v6.2.1 (2026-06-07)
New Features
- Add iCalendar (.ics) calendar export
- Add booking comments field
- New backend dashboard
- Ability to add tutors from backend
Improved
- harden confirmation email
- Stop leaking tutor email in URLs and de-index tutor pages
- Auto-fill tutor form from linked user and harden migration
- Split tutors off into their own table and MVC
- Add Participants admin view for per-course attendance lists
- New backend left navigation integrated with Joomla main navigation
Fixed
- without need of compatiblity plugin
- waiting list button showing empty cart error on full courses
- coupon number mask crash and support # placeholder
v6.1.0 (2026-03-09)
New Features
- Transfer registrant application between courses
v6.0.1 (2025-11-10)
New Features
- Joomla 6 support without need of compatiblity plugin
- Joomla 5.4 support without need of compatiblity plugin
- PHP 8.4 support
Improved
- Package implementation on installation
Fixed
- without need of compatiblity plugin
v5.8.2 (2025-03-04)
Improved
- Filter redone using Joomla xml filter [Course dates view]
- allow html on popovers [course view]
Fixed
- missed delete buttons [Courses dates view]
- database checker warnings
v5.8.0 (2025-01-16)
Improved
- hide additional attendees block if this feature disabled
- display no course date found if doesn't have courses dates [Courses Table]
- maintenance tool that let you update specific sql update file version
Fixed
- some database compatiblity issues
v5.7.0 (2024-10-22)
Improved
- UI/UX improvements in many layouts
- Removed some non used old code
Fixed
- missed lock-in fields in form [XML] [Course date Form]
- in some cases saving refdata doesn't work [Options Form]
- missed BS class in ordering field [Options Form]
- backport to support Joomla 4 when edit new course on modal [Edit course] [Backend]
v5.6.0 (2024-10-02)
New Features
- display courses list as table [Course Views]
- manage course dates withing course edit form
- ability to generate mass course dates
- Generate bulk sessions from course date
- ability to hide category in course view
- ability to hide tags in course view
Improved
- fullcalendar updated to last version
- support calendar locale
- additional attendees now redone from scratch and attendees data are store on application listing
- some params moved to new tab "Single Course" for better organization
Fixed
- some php warnings if course description not set [Course View]
- show/hide capacity was not working
- fatal error on refdata view
v5.2.0 (04/12/2023)
Improved
- Application form UI/UX [Backend]
Fixed
- SEF links not generated correctly [Finder Plugin]
- some php warnings [Calendar field xml]
v5.1.0 (11/11/2023)
New Features
- Joomla 5 support without need of B/C plugin
Improved
- UI/UX of repeatable form in cart registration
Fixed
- Fatal error on create if finder plugin enabled
v5.0 (26/10/2023)
New Features
- Joomla 5 support with no B/C plugin
Improved
- replaced old filter system with new joomla filter in view courses
- removed first auto added feild group (attendees field)
v4.9.0 (31/08/2023)
New Features
- Ability to exclude custom fields from guest checkout form
- Ability to enable predefined fields in guest checkout form
Improved
- product info links updated [Dashboard]
- language files tag removed to follow J4 standard
Fixed
- checkout method data missed in 2 steps form [Cart]
- disable payment not working on Guest checkout
v4.8.0 (12/07/2023)
New Features
- update quantity cart if additional attendees field (as custom field used)
- 2 steps checkout [Guest checkout]
- ability to show/hide capacity, location and availability [Sessions View]
- allow registered users to checkout as guest users
Improved
- Checkout method toggle now use BS5 radio toggle buttons
- display course date price [Sessions View]
- sessions table UI/UX improved
- sessions management now in separated tab [UI/UX] [Course date form]
- PHP 8.2 compatibility
Fixed
- cart quantity was not working correctly
- show page heading was not working [Cart view]
- PHP 8.2 compatibility
v4.7.0 (29/05/2023)
Fixed
- wrong book now links [Sessions view]
- some other issues [Sessions view]
- nullable dates issues [SQL
v4.6.2 (05/04/2023)
Improved
- cart routing was improved
Fixed
- removed some non used code [Empty cart layout]
- Some php warnings [Book button layout]
v4.6.0 (16/03/2023)
Improved
- Book button use JLayout for better reuse
- removed non used option from config
- download xml field removed [Config]
- many php warnings [PHP 8.1+ compatibility]
Fixed
- waiting list feature was not working correctly
- check capacity was not working correctly
v4.6.0 (16/03/2023)
Improved
- Book button use JLayout for better reuse
- removed non used option from config
- download xml field removed [Config]
- many php warnings [PHP 8.1+ compatibility]
Fixed
- waiting list feature was not working correctly
- check capacity was not working correctly
- some issues related to nullable date check in mysql queries
v4.5.1 (11/03/2023)
Improved
- change status dropdown UI/UX improved [Applications] [Backend]
Fixed
- double error if email already exists [Cart]
- wrong translation constant value of Email existing
- double alias segments in course link for some cases [Routing]
v4.5.0 (27/02/2023)
New Features
- support Joomla Download ID
Fixed
- missed default value of usergroup after registration
- fatal error when user plugin enabled
v4.4.6 (18/02/2023)
Fixed
- Somes issues on Joomla database checker
- Somes issues on finder plugin
v4.4.4 (27/12/2022)
Improved
- subcategories now use courses root item id [Routing]
- don't display tabs if cat has subcats or items
Fixed
- db warnings [Joomla Database Checker]
- delete button was missed [Coupons Types] [Backend]
- user group field doesn't display list [Config]
- course date doesn't save if location and dates not set
v4.4.0 (10/11/2022)
Improved
- tutor card info now use Layout helper for better reuse [Tutors View]
Fixed
- save email template was not working [Backend]
v4.3.0 (21/10/2022)
New Features
- Ability to disbale payments from config
Fixed
- Some PHP Warnings , and compatiblity with PHP 8.1
v4.2.0 (21/04/2022)
Fixed
- fatal error when cach payment selected [J4]
- message doesn't display in application item [Request Invoice Plugin [J4]
- wrong default value of currencies
- missed default values of config params in some places
- fatal error on cart checkout due to php compatibility
- MYSQL issues with text data type [J4] [SQL]
- PHP 8 Compatibility [Model Cart]
v4.1.0 (10/03/2022)
Fixed
- some wrong bootstrap classes ml & mr should be ms & me
- pagination code should not be in course view
- Experience level & group values doesn't hide [Cardhorizontal Layout]
v4.0 (28/02/2022)
Improved
- Joomla 4 support
- Bootstrap 5 support
- Remove of old assets (BS4 and fontawesome)
- UI/UX of dashboard improved
v1.3.9.1 (15/10/2021)
Fixed
- Payment form doesn't display on pending status [Application View]
v1.3.9 (23/08/2021)
New Feature
- Request an Invoice [Payment Gateway]
Fixed
- Infinte loop when checking unique username on application save [Cart Model]
- Some php warnings [Cart Model]
v1.3.8.7 (09/07/2021)
Improved
- All application placeholders was added [Email Template]
Fixed
- Guest user can't access to thanks/failed pages after payment [Pay view]
- Paypal callback link doesn't work in some cases [Paypal Plugin]
- Reinstall fails [PayPal Plugin]
v1.3.8.3 (18/03/2021)
Improved
- Search + Finder plugins disabled by default on first installation
Fixed
- Coupon code was not working correctly [Cart]
- Wrong JText [Cart controller]
- Wrong JText of Courses in Search view [Joomla Search Integration]
- Issue with guest user password [Guest Checkout]
- 2 wrong JText options of Courses order param [Config]
v1.3.8 (06/03/2021)
New Features
- Integration with Joomla search component [New Plugin]
- Integration with Joomla Advanced search component (Finder) [New Plugin]
- Ability to order courses (most recent, oldest, title alpha, reverse alpha, random, order, rever order ...) [Courses View]
Improved
- Added Access column on course [SQL]
Fixed
- Wrong guest email column in sql update file [SQL]
- PHP Warning [Courses view]
- Fields disabling from config doesn't work on user profile, user registration [User Plugin]
v1.3.7 (23/01/2021)
New Features
- Guest Checkout Mode
Improved
- Captcha on register moved to tab cart [Config]
- User group param moved to Registration form tab [Config]
- Cart UI/UX improved and now use JLayout for better reuse [Cart View]
Fixed
- Missed Language constant COM_JOOMCOURSES_AUTHENTIFICATION_FAILED value
- Cash payment not displayed in applications list
- Contact was not published automatically when is added from checkout
v1.3.6 (25/11/2020)
New Features
- Support onContentPrepare event in private content modal
Improved
- VND currency added to currencies list
Fixed
- Wrong rows and columns if single day has multiple sessions [Sessions view]
v1.3.5.5 (28/07/2020)
New Features
- Ability to display custom fields values using placeholders [Email Confirmation]
v1.3.5.4 (25/06/2020)
Fixed
- Wrong course id in link on view sessions [Router Helper]
- Contact id not saved in application when custom fields enabled [Cart Model]
- PHP warnings when changing category and custom fields enabled [Course edit] [Backend]
- Ordering not working [Course Edit form]
- Show success message instead of info message when booking submitted [Cart view]
v1.3.5.1 (23/05/2020)
Fixed
- Margin bottom missed of card container [Course Card layout]
- Fatal error if session description not empty [Application view]
v1.3.5 (22/05/2020)
Improved
- Status/ price columns UI improved [My Applications View]
- Use template link color and headers size [Bootstrap]
- Details and courses list UI/UX improved [Application view]
- Open private content of each course in modal [Application view
Fixed
- Course description doesn't show on popover [Cart view]
- Sort icon doesn't display [Sessions View]
- Table not responsive [Sessions View]
v1.3.4 (07/05/2020)
New Features
- Ability to enable / disable / require salutation field [Cart view] [Contact Registration]
Improved
- Warning message now use alert class [Cart view]
Fixed
- Broken course link [Cart view]
v1.3.3 (14/04/2020)
Improved
- Cart view now can be attached to a menu item [Cart view]
- Intelligent method to get cart menu item id [Route Helper]
Fixed
- Can't edit custom field value [ACL]
v1.3.2.4 (06/03/2020)
Improved
- Responsive course dates table
Fixed
- Some issues in routing system [Route helper] [Router file]
- Book now button doesn't display in some conditions [Card course layout]
v1.3.2.3 (28/02/2020)
New Features
- Ability to hide / show coupon code [Cart View]
Improved
- Switch status of application UI improved [Applications list] [Backend]
Fixed
- Wrong total tax value [Cart View]
- Book now button doesn't work in relative paths [Cart view]
v1.3.2.1 (15/02/2020)
Improved
- Show buttons param was added to global config [Config]
Fixed
- Course auto deleted if was added from book now button and was already in cart [Cart model]
- Show buttons param was not working when selecting read more option [Courses view]
v1.3.2 (14/02/2020)
New Features
- Ability to disable subcategories tab [Courses view]
- Ability to change courses columns [Courses view]
- Ability to remove courses from cart [Cart view]
Improved
- Disable tabs if there is no subcategories [Courses view]
- Better organization of params in tabs [Courses menu params]
- Merging menu params with global params [Courses model]
Fixed
- Quantity Itemid is wrong [Cart view]
- Wrong layout names [Layouts]
- Wrong category alias [Course layouts]
- Problem when routing category inside courses and subcategories list [Courses view]
- Change buttons display was not working [Courses view]
v1.3.1 (09/02/2020)
Improved
- Use component CSS param removed [Config]
Fixed
- Wrong language constants of payments [Language files]
- Login url was not working when SEF turned [Cart View]
v1.3.0 (05/02/2020)
New Features
- New UI on all views
- Joomla! Custom fields integration in courses and contacts.
- Tutor view with courses
- Tutors view list in frontend and backend
- Joomla captcha plugins integration
- Ability to disable and make required some registration fields
- Categories list view
- Ability to show / hide read more button in course card
Improved
- Routing improved
- Namespaced Fontawesome, no more conflicts with old versions
- Namespaced Bootstrap 4, no more conflicts with old versions
- Built-in captcha removed
v1.2.0 (09/04/2019)
Improved
- Courses list use now grid and cards of bootstrap 4
- My applications view UX improved
Fixed
- Missed page heading in my applications, sessions and calendar views
- Missed description of component in main xml file
- Removed sql update folder cuz not needed
v1.1.1 (28/02/2019)
Fixed
- CSS file not loaded in grid layout
- removed some duplicated files
v1.1.0 (11/02/2019)
New Features
- Display courses in list or grid mode [Courses view]
Improved
- Display no-image picture if course has no image [Courses view]
- Fontawesome library now load on entry point
- course informations now use table instead of dl tag [Course view]
Fixed
- Refresh icon don't show [Cart view]
- Hide book now button if session date is empty [Courses view]
- ROOT text displayed if ROOT category selected [Courses view]
- Plugin system missed in build file
- Spacing added between widget container and graph [dashboard] [backend]
- COM_JOOMCOURSES_GRAPH_APPLICATIONS wrong string name [Language]
- Display warning message in activities widget if is empty [backend] [Dashboard]
- Plugin system missed [Backend] [Plugin]
- Download ID field missed in config [Backend] [Config]
- Wrong website link in copyright comments
- Module installation code commented in installation file to prevent php warnings in installation
- Uninstall file removed
- Wrong controller class name [Controller Pay]
- Wrong constant name in defines
- Wrong categories link [Backend] [Dashboard]
- Wrong vname value in addSubmenu method [Backend] [helper]
- Fix - wrong help link [Backend] [all views]
v1.0 (19/11/2018)
- Initial version