Skip to main content
Version 9.1.247 (27 July 2026)
Identity & Authorisation
Error when clicking on the Not yet registered? link (#153319)
Problem
Error when clicking on the Not yet registered? link
Solution
This happened due to a SQL query which was not properly formed, leading to an extra double quote " in the query
Added functionality for v9 pages to open on the mobile app using a token (#138802)
Problem
When a v9 page is opened from within the Mobile Learning App, the user is directed to the login page instead of automatically logging the user in like with v8 pages.
Solution
Added support for an authorisation header.
Content Management
Prevent SVG uploads in all image resource areas (#143842)
Problem
SVG files could still be selected in some image upload areas after the earlier update, especially when older saved settings were still in use. This left a way to upload a file type that should be blocked for security.
Solution
SVG has been removed wherever image upload options are available, and uploads are rejected if an SVG is submitted directly. Existing saved settings can no longer make SVG selectable. Image types are also kept consistent for badges, banners, and avatars.
Block SVG uploads for badges, avatars and rich text images (#143842)
Problem
Across the product, SVG image files are meant to be disallowed because they can carry hidden active content. However, the image settings for badges, avatars and rich-text-editor images still listed SVG as an accepted file type. This meant SVG files could be uploaded in those areas, leaving a gap that the rest of the system does not have.
Solution
SVG has been removed from the list of accepted file types for badge, avatar and rich-text images. These areas now only accept standard, safe image formats (PNG, JPG/JPEG, GIF, and TIFF for rich text), bringing them in line with the rest of the application and closing the upload gap.
Imports
Add ID column to notifications import table (#153003)
Problem
Request to display the Import ID on the imports details screen, making debugging and support easier
Solution
Add an ID column to the notifications import table
Ensure results on ListUserPeopleGroups APIs are not filtered based on empty usernames (#153216)
Problem
When V8 bulk processing requests all user people groups, it requests the username as an empty string in the array. This then causes the import to not receive any data
Solution
Add a measure in V9 to remove all empty usernames and return all data when only an empty string is received
Ruleset Management
Ensure the pill is not fixed to its position to fix overflow issues (#152442)
Problem
Display issue when on the Integrations tab and the system menu is pinned. The integrations menu (General, Content Server and Payroll) overlaps with the content to the right of it.
Solution
Make the pill position absolute and not fixed to fix the overflow issue
Corrected ruleset deletion on master data items (#143128)
Problem
The generic ruleset delete script was also identifying parent tables without a RulesetId column for deletion. In the MasterData database, this caused shared metadata tables such as [MasterData].[Tables] to be included because ruleset-specific child records reference them by keys like TableId.
Solution
Exclude the MasterData schema from the parent-table delete discovery where the parent table has no RulesetId. Also ensure backups only filter by RulesetId when the target table actually contains that column; otherwise, back up the full table using @RulesetId = 0.
Extend error logging and add ruleset creation master data for the communication portal (#152171)
Problem
When errors occur during ruleset creation, critical details are not logged for support. Master data is not copied for the communication portal to the new ruleset
Solution
Introduce integration of the Communication Portal service into the ruleset creation workflow, ensuring that ruleset setup is coordinated across all relevant services. It adds a new gRPC endpoint for anonymous ruleset creation in the Communication Portal, updates the Account API to call this endpoint, and improves error logging throughout the ruleset creation process. Additionally, it includes internal refactoring and new command handlers for copying master data. These changes ensure that the Communication Portal is now a first-class participant in ruleset provisioning and that error information is more complete across the distributed setup process.
Notifications
Ensure EditedBy reflects logged-in username by passing in session username as parameter (#152025)
Problem
We currently don't store the details of the user that triggered a notification. This is important to know for notifications like the passwords reset and welcome notifications.
Solution
Ensure EditedBy reflects the logged-in username by passing in the session username as parameter
Communication Portal
Implemented archiving for elapsed system alerts (#151781)
Problem
When system alerts have elapsed, the recipient alerts must be archived
Solution
Add a Quartz job that runs every 1hour that updates all the recipient alerts if the system alert has elapsed
Implemented persistence state for slitter and returned unread discussions first (#153049, #153091)
153049
Problem
Splitter position is not remembered
Solution
Request to implement a change to remember the position of the splitter as the user drags
153091
Problem
Unread discussions are not brought back first, which means on many discussions if over page size it does only come up when searching for
Solution
Created a change to return unread discussions first
Resolved New container overlay (#153090)
Problem
Difficult to hover on the plus to get access to the new
Solution
Change the styling and event listeners to ensure that it is easy to open the overlay and select an item
Data Warehouse
Added field BookingStatus within lmEventScheduleAttendees (#151434)
Problem
Field BookingStatus needs to be added for lmEventScheduleAttendees
Solution
Added field BookingStatus within lmEventScheduleAttendees
Created cleanup Data Dictionary script (#151627)
Problem
Data Dictionary entries need to be deleted that are not linked to Tenant 1
Solution
Created Data Dictionary cleanup script to remove entries that are not linked to Tenant 1
Added check for accUserLoginStats within DWHDataIntegrityReport (#142732)
Problem
accUserLoginStats needs to be added for DWH weekly integrity report check
Solution
Added a check for accUserLoginStats within monGenerateDWHDataIntegrityReport
Problem
New field LastRefreshedDate needs to be added - Integrity check needs to be added for accUserLoginStats
Solution
Added new field LastRefreshedDate - Added Integrity check for accUserLoginStats to ensure the entries are being added as expected for the first of each month - Corrected Live DB Server name for V8 accUserLoginStats calculation
Added step for cmScormFolder_Staging to update CompanyCode (#151058)
Problem
The insert for cmScormFolderUploads did not work as expected due to the join for CompanyCode not matching for cmScormFolder_Staging
Solution
Added a step for cmScormFolder_Staging to update CompanyCode for the join for cmScormFolderUploads to work as expected
Added new SSIS Packages to the monitoring report (#142737)
Problem
New SSIS Packages need to be added to the DatawarehouseJobResultsReport
Solution
Added new SSIS Packages CommunicationPortal_ETL.dtsx and ContentManagement_ETL.dtsx within DatawarehouseJobResultsReport
Added step to remove archived entries within lmStudentSubjects (#152973)
Problem
With each DWH run, previous entries for lmStudentSubjects are not removed due to records not having YearID
Solution
Added step to remove archived entries within lmStudentSubjects
Job Management
Ensure description displays on modal (#151675)
Problem
Description displays 'true' on modal, instead of the saved description
Solution
Change JavaScript so the description displays on the modal
Resolved People Group Role Permission overrides (#152827)
Problem
Editing a user’s existing people-group link to enable permission override created a new custom role link but left the original non-overridden link in place. An earlier attempt to fix this in the API link handler was too broad and caused normal linking of additional roles to be replaced unintentionally.
Solution
The fix was narrowed to the actual edit flow. Normal LinkUserPeopleGroupRole behaviour remains additive, with only exact duplicate links prevented. When editing an existing user people-group link and switching it to override permissions, the UI now carries the original UserPeopleGroupRoleId; the system creates or updates the custom override role, links it, and then unlinks only that original row. This preserves standard linking behaviour while ensuring an overridden link does not leave the old base link behind.
Resolved Reporting Lines not pulling through on Edit Appointment (#152476)
Problem
The Editor View is being generated with a Blank Liens ViewModel even if there is data
Solution
Add a check: if there is a userId given, pull the reporting lines to be displayed
People Management
Resolved: User not being materialised after frontend addition (#152930)
Problem
When a user has been added from the frontend, the user is then replicated to the read-only database, but during this, a call has been made to materialise the new user based on appointment. If the user has not replicated yet and materialisation triggers first, no user is materialised to all people
Solution
Add a wait operation method to ensure all the requested users are replicated to materialised read-only users before executing the people group materialisation
Learning Management
Prevent duplicate subject cycles (#152166)
Problem
When setting up a subject, the same cycle could be added more than once. This could leave a subject with duplicate terms.
Solution
The cycle list now excludes cycles already assigned to the subject. Saving also prevents duplicate cycles from being created if an outdated page or another request tries to submit them.
Report Builder
Corrected default font on report export (#152899)
Problem
The default font on report builder export is incorrect.
Solution
Corrected the default font.
Reset the modal each time it opens and load KPI pages in a consistent order so “Load More” adds only the next set of items (#152620)
Problem
The KPI library “Load More” list reused old modal data and loaded later pages in an order that caused repeated items.
Solution
Reset the modal each time it opens and load KPI pages in a consistent order so “Load More” adds only the next set of items.