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 is saved incorrectly when copy/copying/pasting or dragging and dropping an image, leadingresulting toin 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

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

       


      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

       

      ResolvedFields validationare onincorrectly sharedvalidating editorsas required while the sections are disabled – System Message Subject, Email Subject, SMS Subject and FormSMS submissionMessage (#152935, #152685)#152935)

      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 

      When editing a System Message, there isn’t a popup to send the system message again, and the screen just goes blank – Changes are being saved (#152685)

      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

       

      ResolvedIssue GanttControlwith dividernew paging that has been implemented on the Specific People, Specific Jobs and thePeople pagingGroups oftabs targetfor audienceBanners and System Messages (#152475, #151524)#152475)

      Problem

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

       

      Solution

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

      Unable to move the split screen barrier for Banner Notifications (#151524)

      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

       

      ResolvedDisplay Navissue headerwhen activeselecting statethe andCommunications tagtab background– The tab selection highlight goes away, unable to see which tab has been selected when on Communications (#152441, #151610)#152441)

      Problem

       

      Solution

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

      Display issues on Banners (#151610)

      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 onin the previous fix,fix; the 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 createcreation (#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

      User is taken to the top of the Virtual Tours modal when clicking on Editing tools on the second slide (#152207)

      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. 

      Module which Virtual Tour is being set up / edited to be added to Virtual Tour heading (#152245)

      Problem

        Error on saving after slides have been deleted

        Solution

          Ensure virtual tour slides can be saved after removing a slide 

          Error on Saving after slides have been deleted (#152964)

          Problem

          • Error on saving after slides have been deleted

           

          Solution

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

           

          Edit Help Page Information not translated when logging in with Afrikaans (#152905)

          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

          Display on contract and template setup an asterisk (*) and red border instead of just a snack message, when required (#152461)

          Problem

            Only a snack was displayed when a required field was not completed.

             

            Solution

              We now display on contract and template setup an asterisk (*) and red border instead of just a snack message when required 

               


              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

                   


                  TranslationsIdentity & Authorisation

                  TranslationsCorrect Translation for externalthe loginsPassword reset toast messages (#152530)#152474)

                  Problem

                  • IssueThe withsystem errordisplays messageIncorrect translationsnone whentranslated values for the Password reset toast messages ("passwordDoesNotMatch")

                  Solution

                    Correct Translation for the Password reset toast messages


                    System Help

                    Ensure empty HTML bodies are not saved (#152596)

                    Problem

                      When using Microsoftthe login;syncfusion editor and you clear the messagetextbox, showsit thestill translationsaves pathHTML tags, instead of a blank string

                       

                      Solution

                      • UpdateValidate externalthe loginbody translationsfrom the Syncfusion editor first and ensure that it contains content; otherwise, save a blank string. Note: also added a migration to useclear TranslateAsync"empty" HTML bodies