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.
Performance Management
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.