Skip to main content

Version 9.1.246 (27 July 2026)

Image Resources

Fix image upload not working when using copy-paste or drag-and-drop on Syncfusion editors (#152211)

Problem

  • Image source saved incorrectly when copy/pasting or dragging and dropping an image, leading to an image not found after initial upload.

 

Solution

  • Add a handler in the shared Syncfusion editor script to handle image drops and copy/paste the same as when images are uploaded normally

 


Translations

Reset password feedback translation improvements (#152474)

Problem

  • Password and confirm password comparisons were not being properly translated. Also missing a check for leading or trailing spaces

 

Solution

  • Reset password feedback translation improvements

 


Job Management

Remove validation for inherent requirement add (#151675)

Problem

  • Odd behaviour on Inherent Requirements. Unable to add a requirement with the same importance twice + Cannot add a requirement again if it has been deleted.

 

Solution

  • Removed all validation on creating new inherent requirements - should always be able to add a new one, and be left up to user discretion

 


Communication Portal

Resolved console error for integration ErrorHandler (#146859)

Problem

  • The new error logging exposed that the _Integration tab was not actually throwing an application exception. The console message was a browser-level ResizeObserver loop completed with undelivered notifications warning, which was being surfaced through the global window.onerror hook looked like a real app failure. 

 

Solution

  • Updated the global error handling so it still logs real uncaught errors with message/source/stack details, but ignores the known harmless ResizeObserver loop warnings. That removes the false console noise without hiding actual application errors.

 

Resolved datepicker opening up within the card (#152956, #152926)

Problem

  • DateTimePicker component opening within the Card and has no overflow visible

 

Solution

  • Add a change to allow the datepicker to overflow and be visible

 

Resolved validation on shared editors and Form submission (#152935, #152685)

Problem

  • When the toggle is inactive and the form is submitted, validation triggers for the empty fields, which it only must for when the toggle of the editor is active 

 

Solution

  • Add a change to only validate the fields when the toggle is active 

 

Problem

  • When submitting a full form, the post is done and not an AJAX form submission

 

Solution

  • Implemented a change to do an AJAX form submission

 

Resolved chat messages not being able to send (#149151)

Problem

  • Package upgrade which causes certain $.func() errors; a new shim file was added to accommodate these package differences, but the Communication portal is not using it to initialise the emojione area, which causes errors. Also issues with SignalR differences 

 

Solution

  • Implemented the new change within the shim file and the change to be used

 

Resolved Translation Core that does not allow section within section value (#152418)

Problem

  • For translations, it is only one section up, and if there is no key-value pair, the section is not shown; likewise for custom translations that are section within a section 

 

Solution

  • Implemented a change to read the treeview style downwards to identify sections to be able to translate, excluding static sections, and then also for the translator so that it can be identified

 

Resolved GanttControl divider and the paging of target audience (#152475, #151524)

Problem

  • For paging count, not all the page values were rendered because the total count was not returned only has more rows, which show another page as you click through 

 

Solution

  • Added a change to return the total count and show the total page counts 

 

Problem

  • The divider on the Gantt control keeps jumping to the middle and is not allowed to scroll/move freely 

 

Solution

  • Implemented a fix on styling and jQuery to correct the behaviour

 

Resolved Nav header active state and tag background (#152441, #151610)

Problem

 

Solution

  • Implemented a change so that the sub-nav tabs are only selected within the nav tab content itself 

 

Problem

  • When no background colour is selected for the tag or timer, it defaults to incorrect white

 

Solution

  • Add a change to keep empty and update the model to pass an empty string if it is NULL

 

Resolved V8 Email Not triggering system message when active (#152896)

Problem

  • Email from V8 can trigger a system message when configured, but the implementation of system alerts requires a userId to indicate to whom to display, as V8 only sends through a recipient list of emails

 

Solution

  • Implemented a change that only applies in cases where the category ID is passed through to retrieve the userId for that email user within the ruleset.

 

Resolved Upload button difference styling (#149850)

Problem

  • Difference in styling, no corner radius or non-uppercase text

 

Solution

  • Added rounded corners and text decoration to none to remove casing

 

Resolved Loading containers for communication portal (#152682)

Problem

  • Banners and System Alert with nav tabs have been implemented that render for Learning Pathway topic lists, which they should not

 

Solution

  • Add new abstract methods to ensure new rules to allow render modes, split discussion list to render fragment and just render in correct place

 

Allow Discussion to load inside V8 (#152682)

Problem

  • When a learner opens the new Discussion feature from within the older (V8) part of the system, the Discussion area fails to load: the request reaches WebMVC's `DiscussionController`, but the downstream gRPC call to CommunicationPortal.API short-circuits with `User access token unavailable`, and the user is signed out. 

 

Solution

  • Set `AuthenticationType = Bearer` in WebMVC's JWT `TokenValidationParameters`. On `Cookies,Bearer` endpoints the merged principal now carries a Bearer-typed identity, so the existing fast path forwards the inbound token and the local and downstream identities agree. - **Opt-in fallback** (`Authentication:ForwardExternalBearerToken`, default `false`): for requests whose principal lacks a Bearer identity, WebMVC explicitly authenticates the Bearer scheme and forwards the header only when validation succeeds **and** the token does not change the acting user (its `user_id` claim must match any other authenticated principal; missing claims fail closed).
  • Only well-formed `Bearer ` headers are ever forwarded. 

 

Resolved banner metadata not showing on the list (#152734)

Problem

  • The data can be passed in a different format than what is expected can have a wrapper as well

 

Solution

  • Add fallback to correct the path and the value to show the background colour, date and expires date

 


People Management

Correct permission checks on user profile pages - reverse condition on summary page (#152580)

Problem

  • Bug on previous fix, conditional check on summary page was reversed.

 

Solution

  • Correct conditional check for section access 

 

Resolved registration email not being triggered (#148426)

Problem

  • After a user has confirmed their email for registration, another email should trigger to confirm that the request has been submitted, but when a JobProfile has not been selected, it is null and throws an error when trying to be retrieved.
  • Also, some translations are not being retrieved.
  • The disclaimer is not correct in showing a message when there is none 

 

Solution

  • Implemented fix for null check; corrected translations
  • Added a check to set when there was a disclaimer shown

 

Resolved Custom People group role creating new links each change/save (#152827)

Problem

  • When a Custom Org unit role is edited and saved, it keeps adding a new role

 

Solution

  • Removed the check to set the value to null to update the current custom role

 

Display masked email address on password reset (#152465)

Problem

  • The Password reset toast notification does not include a masked email address.

 

Solution

  • Display masked email address on password reset

 

Fixed race where filters loaded after the initial user fetch by restoring them synchronously via lazy useState init (#152201)

Problem

  • When on Terminated filter/tab, and the user opens a person and uses the browser back button/system back button, the Terminated filter/tab shows people that should not be there and a count of 207 instead of 4. The browser back button consistently causes this behaviour while the system back button only causes it occasionally.

 

Solution

  • Moved the saved filterCriteria/searchFilterCriteria restoration from an async useEffect into lazy useState initialisers so they're correct on the very first render, eliminating the race where the user-fetch effect could run with default (unfiltered) criteria before localStorage was read.

 

Resolved count mismatch or hard reload of people management (#149700)

Problem

  • The People Management page could fire multiple startup requests with different people-group/filter values during a hard refresh, and on slower datasets an older response could finish last and overwrite the correct count.

 

Solution

  • The page now waits for filter and people-group restoration before the first load, uses the saved people-group filter as the initial source of truth, and ignores stale responses so only the latest request can update the displayed count.

 

Resolved Required-validation for manage own data fields (#152580)

Problem

  • Server-side required-field validation always treated edits to another user as Administrator, so People Group edits could fail on required fields that were not editable in ESS setup.

 

Solution

  • Pass the intended SelfServiceSettingType from WebMVC to the Account API update commands, and use that type during required-field validation so only required editable fields for the correct setup context are enforced.

 

Ensure non visible/editable fields are correctly bound (#152580)

Problem

  • When the profile fields are disabled due to the ESS settings, the values are not bound and get lost when submitted. 

 

Solution

  • Ensure that the profile values are still bound correctly when they are disabled / not visible due to ESS settings. 

 

Remove forced role check on identity user create (#149668)

Problem

  • When a user only has PG permissions, the new user appointment fails. When an identity user is created requires that the user has People Admin or Tenant Admin roles.

 

Solution

  • Remove explicit role authorisation on Identity user creation. Added a comment to add permission-based auth.

 

Ensure non visible/editable fields are correctly bound (152580)

Problem

  • When the profile fields are disabled due to the ESS settings, the values are not bound and get lost when submitted.

 

Solution

  • Ensure that the profile values are still bound correctly when they are disabled / not visible due to ESS settings.

 


Ruleset Management

Update translation for previously used password (#152464)

Problem

  • The "Number of previous password.." helper text does not describe the function correctly

 

Solution

  • Update translation for previously used password

 


Learning Management

Fix the subject form layout and wording (#152406)

Problem

  • When adding a subject, field spacing was inconsistent, the timetable colour label used the wrong spelling, and the colour controls could overlap or extend outside the dialogue. 

 

Solution

  • The subject form now spaces its fields consistently, uses the correct “Colour” wording for South African and UK English, and keeps the timetable colour selector and value aligned within the dialogue.

 

Prevent incorrectly calculated marks from being saved (#152742)

Problem

  • A learner's term result could sometimes be saved as zero, or as one of the individual assessment marks, even though the marksheet showed captured assessment results. This could cause incorrect or blank results on report cards and require manual data correction.

 

Solution

  • The marksheet now works out the term result again from the learner's captured assessment marks at the moment it is saved. It no longer depends on the displayed calculated cell being ready, while still allowing a genuine zero result and the existing excluded-mark behaviour.

 


Virtual Tours

Problem

  • User is taken to the top of the Virtual Tours modal when clicking on Editing tools on the second slide when the modal scrolls. 

 

Solution

  • Ensure you are not taken to the top of the modal. 

 

Problem

  • Error on saving after slides have been deleted

 

Solution

  • Ensure virtual tour slides can be saved after removing a slide 

 

Problem

  • Edit Help Page Information not translated when logging in with Afrikaans

 

Solution

  • Add missing translation 

 


Performance Management

Fix "Load More" not working correctly when selecting KPI's from the library (#152620)

Problem

  • "Load More" not working correctly when selecting KPI's from the library

 

Solution

  • Ensure that when clicking "Load More", it appends the response, replacing the result set

 


Master Data

"Duplicate data errors" not displaying for certain service master data (#152439)

Problem

  • "Duplicate data error" message did not display for certain services when adding master data where a unique constraint was violated.

 

Solution

  • This happened due to the master data interceptor not being registered for all services in masterdata. Created a shared method to ensure each registered GRPC client adds the interceptor.  

 


Data Warehouse

Added Joins within Data Dictionaries (#152962)

Problem

  • New joins need to be added for ReportBuilder

 

Solution

  • Added a join between jpAppointments and jpJobCompetencies 
  • Added a join between jpAppointments and jpPositionCompetencies

 

Added a step to resolve ReportBuilder errors due to redundant fields being used (#152556)

Problem

  • Currently, there are published reports that fail due to using redundant fields

 

Solution

  • Added a step to resolve ReportBuilder errors due to redundant fields being used within the UpdateDataDictionary SSIS Package

 

Improved the integrity check for published reports on Report Builder (#152556)

Problem

  • The current ReportBuilder integrity check did not pick up all the errors for published reports

 

Solution

  • Updated the script by improving the check for published reports

 

Added new fields within comuSystemAlerts (#152599)

Problem

  • Fields TotalUnread, TotalArchived, TotalUnarchived need to be added within comuSystemAlerts

 

Solution

  • Added fields TotalUnread, TotalArchived, TotalUnarchived within comuSystemAlerts

 


System Access

Correct duplicate submission of OTP token (#152558)

Problem

  • The OTP request is submitted multiple times

 

Solution

  • Make a targeted improvement to the JavaScript event handling for the network speed form on the two-factor authentication login page.
  • The change ensures more robust and predictable form submission behaviour. JavaScript Event Handling Improvements: Changed the event listener from using delegated event handling with $(document).on('submit', ...) to directly binding the submit event on the form.capture-network-speed element.
  • This prevents potential issues with multiple bindings or unintended event bubbling.
  • Added event.stopImmediatePropagation(); after preventing the default submission to ensure that no other event handlers for the submit event are triggered, further reducing the risk of duplicate submissions or side effects.

 


Identity & Authorisation

Correct Translation for the Password reset toast messages (#152474)

Problem

  • The system displays Incorrect none translated values for the Password reset toast messages ("passwordDoesNotMatch")

 

Solution

  • Correct Translation for the Password reset toast messages

 


System Access

Resolve problem on virtual tours with activeTab= query param (#152722)

Problem

  • Landing page when logging in as well as FitAndProper sharelink breaks when accessing

 

Solution

  • Since "activeTab" contains "tab", the first condition matches. But when splitting by "tab=", there's no "tab=" in the string (only "activeTab="), so Split returns a single-element array. Accessing index [1] throws the exception.
  • Check for "tab=" instead of "tab" (includes the equals sign)
  • Check for "activeTab=" instead of "activeTab" (includes the equals sign)
  • Add bounds checking before accessing array indices
  • Limit split to 2 parts for better performance
  • Use case-insensitive comparison for robustness

 


Translations

Translations for external logins (#152530)

Problem

  • Issue with error message translations when using Microsoft login; the message shows the translation path 

 

Solution

  • Update external login translations to use TranslateAsync