Totara Talent Experience Platform Release Notes

Totara TXP 17.0 is now available

 
David Curry (Core Developer)
Totara TXP 17.0 is now available
by David Curry (Core Developer) - Tuesday, 8 November 2022, 6:35 PM
Group Totara

Hello Everyone,

I am pleased to announce that the Totara 17.0 release is now available.
This release includes:

  • External API with HR services
  • The ability to apply achievement paths in bulk to competencies
  • Centralised performance activity notifications
  • New Weka editor features

Along with many more improvements and fixes, please refer to the full changelogs below.

For detailed change-management information, please see the Technical Release Notes immediately following this post.

A big thank you as well to everyone who has contributed to this release!


Kind regards,

Release Team


Release 17.0 (08th November 2022):
==================================

New features:

    TL-29075       Approval workflows platform with XState

                   The approval workflows feature is designed to give Totara developers and admins
                   a system for modelling business processes that require a user to submit
                   information and/or get approval from one or more other users before something is
                   allowed to happen. It consists of a workflow manager (for admins) and an
                   applications dashboard (for applicants and approvers).

                   It includes the XState front-end framework for managing the complexity of
                   single-page Tui applications in a systematic way.

                   This is a developer preview release, which means:
                   * There is a single, simple approvalform plugin, and no integration with other
                   parts of Totara TXP.
                   * Application form definitions must be created by a developer, and embedded in
                   an approvalform subplugin.
                   * Simple workflows can be created by admins, but complex workflows must be
                   scripted by a developer.
                   * A custom report source and table is required to produce an application report
                   with columns that reference submitted form data.
                   * Approval workflows is disabled and off-menu by default.

    TL-31318       Competency achievement paths can now be copied to other competencies in bulk

                   To improve the efficiency of managing competency achievement paths we've
                   introduced the ability to copy an existing achievement path onto many other
                   competencies.

                   As the achievement path may be dependent upon the competency's scale, the admin
                   can only copy an achievement path to competencies in the same framework.

                   The copied achievement path will overwrite any pre-existing achievement path on
                   the copy to competencies, the action is not reversible.

                   The copy action does not copy courses, or child competencies associated with an
                   achievement path.

                   The copy action does copy courses linked from a learning plan.

    TL-34139       External GraphQL API

                   Added a new external API framework to provide a modern, flexible and extensible
                   API to allow third-party services to access and modify Totara functionality and
                   data.

                   Features include:
                   * GraphQL endpoint with OAuth 2.0 for authentication.
                   * Administration interface for managing multiple individual API clients.
                   * Each API client uses a service user account to allow access control to be
                   managed via roles and capabilities.
                   * New preconfigured 'API user' role.
                   * Site-wide and per-client configuration options to control if client is
                   enabled, API usage (such as rate limiting), token expiry times and debug message
                   levels.
                   * API events logged in site logs, filterable via 'API' source option.
                   * Multitenancy aware, allowing for the creation and management of tenant-level
                   API clients by tenant members, with appropriate access limitations.
                   * In-product reference documentation, providing up-to-date reference
                   documentation for the API based on the site version, including any third-party
                   API customisations.

                   The new API is disabled by default, but can be enabled for Enterprise customers
                   via the 'Configure features' administration menu option.

                   See the developer documentation for more information about Totara APIs:

                   https://help.totaralearning.com/display/DEV/API+documentation

    TL-34707       Auditing for centralised notifications

                   After a site has been upgraded to Totara 17, the centralised notifications
                   system will start recording logs of which notifiable events have been triggered,
                   and which notifications are sent out as a result. These logs can be viewed by
                   users with the permission totara/notification:auditnotifications, by following
                   the 'View notification logs' link on the notification management page, or user
                   profile.

                   These logs are displayed via embedded reports, as such there are three new
                   report sources:
                   * Notification event log - Displays logs for all the events that trigger a
                   notification
                   * Notification log - Displays logs for all the notifications triggered by an
                   event
                   * Notification delivery log - Displays logs for all messages sent by a
                   notification

                   For more information see
                   https://totara.help/17/docs/auditing-centralised-notifications

    TL-34796       Added API services to support creating, updating, deleting and viewing users and job assignments

                   Added API services to the new external API framework (see TL-34139) to allow
                   external access to core HR services. This includes:
                   * Creating users
                   * Updating users
                   * Deleting users
                   * Suspending or unsuspending users
                   * Fetching a list of users and their profile data
                   * Creating job assignments
                   * Updating job assignments
                   * Deleting job assignments

                   User services include support for fetching and updating user profile fields, but
                   not for creating or modifying the fields themselves via the API.

                   Job assignment services include support for setting organisations and positions,
                   though not for managing the position and organisation frameworks themselves via
                   the API.

                   For more information on HR services syntax and supported options, see the
                   in-product API reference documentation.

    TL-35158       Layout support in Weka

                   As a result of user research, support for multi-column layout has been added to
                   the Weka editor. This allows users and content authors more flexibility in how
                   they choose to present content.

                   There are options for one-, two- and three-column layouts, with varying column
                   sizes.

                   Weka layouts are available in Engage resources, Perform static content elements,
                   and in Totara Learn when using Weka as the editor.

                   In Totara Mobile, content added to Weka layouts will not be visible as it does
                   not yet support layouts.

Important:

    TL-35320       Updated system requirements

                   * Increased the minimum required PHP version to 7.4.3
                   * Added support for PHP 8.1
                   * Added support for MariaDB 10.7.2+
                   * Added support for MariaDB 10.8.3+
                   * Increased minimum required Python version for Machine Learning to 3.7

                   Information on our recommended system environments can be found on the help
                   site:
                   https://help.totaralearning.com/display/TPD/Recommended+hosting+environments

Security issues:

    TL-35316       Removed database migration tool web interface

                   The experimental database migration tool web interface located under
                   'Development > Experimental > Database migration' has been removed. Please use
                   the command line version of this tool instead.

                   Also available in 16.7 and later releases.

Performance improvements:

    TL-33272       Regrading of large courses is now offset to cron

                   When a course has more than 100 enrolments or 100 grade items, any regrading
                   necessary (such as adding a new activity or changing grade settings) will be
                   done on the next cron run rather than blocking page load. When this happens, a
                   message is displayed to the user to let them know that grades are being
                   recalculated.

                   For smaller courses, the regrading is done in real time.

                   This is a follow-up to an earlier patch (TL-31570), which introduced background
                   regrading, but only when adding a new activity.

                   Also available in 16.2 and later releases.

    TL-33362       Improved the loading time of the course enrolled users page

                   Also available in 16.1 and later releases.

    TL-33363       Deleting an enrolment instance has been shifted to a background task

                   Previously when deleting an enrolment instance from a course, users would be
                   unenrolled immediately and then the instance would be deleted. If the number of
                   enrolled users was large, the page may take a long time to respond.

                   With this patch, the deletion is shifted into a background task run on the next
                   cron run.

                   Also available in 16.2 and later releases.

    TL-34063       Improved the performance of the user activity page

                   Also available in 16.1 and later releases.

    TL-34361       Improved the performance when a user signs up for a seminar event

                   When a user books for a seminar event, the system verifies whether this will
                   result in a booking conflict. Previously, this check was done multiple times
                   during the signup process. This patch now caches the result for one minute,
                   allowing the reduction of repeating the same query multiple times during this
                   time.

                   Also available in 16.6 and later releases.

    TL-34382       Improved performance for the user search when selecting performance activity participants

                   Also available in 16.2 and later releases.

    TL-34400       Fixed GraphQL performance regression from latest graphql-php library update

                   The latest version of the webonyx/graphql-php library added schema validation
                   that is unnecessarily repeated for each call by default. This patch switches the
                   unnecessary validation off, improving performance of all GraphQL operations.

                   Also available in 16.2 and later releases.

    TL-35218       Improved the performance of the current learning block and the GraphQL query returning the current learning items for Mobile

                   Also available in 16.5 and later releases.

    TL-35721       Improved the performance of Manager's manager relationship with MariaDB

                   This was most noticeable while activating a performance activity using the
                   Manager's manager relation, where multiple relations needed to be fetched.

                   Also available in 16.6 and later releases.

    TL-35726       Fixed overzealous user loading while viewing a users performance activities

                   Previously while loading the subject instances for a participant in a
                   performance activity, a lot of unnecessary users were loaded into memory to
                   generate the relations. This has been fixed to only load relevant users.

Improvements:

    TL-20269       Added a setting and scheduled task to delete old records from the course completion log

                   The course completion log table stores transaction history for the completion
                   editor, and can grow very large on sites with a lot of activity. A new 'Delete
                   course completion logs after' setting allows admins to automatically cull the
                   oldest records from the log. Once those records are deleted, they will no longer
                   appear in the completion editor as history.

                   The default is to never delete old logs, and no data is purged on upgrade until
                   the setting is changed.

                   Also available in 16.1 and later releases.

    TL-22579       Added new alignment setting for the featured links block

                   Added the following options:
                   * Left align
                   * Centre align
                   * Right align
                   * Justified

                   The justified option will position the links with even spacing across the block.

    TL-25521       Implemented visibility options for site policies

                   Site policy visibility can now be set to all users (the default), authenticated
                   users only, or guest users only.

                   Also available in 16.1 and later releases.

    TL-29549       Added displaying manual rating comments in the competency activity log

                   Comments that were added when manually rating a user's competency will now be
                   displayed in the user's activity log for that competency.

                   Also available in 16.2 and later releases.

    TL-30485       Updated strings on the Engage access form when creating a resource and added an info icon button to the topic selector

                   Also available in 16.4 and later releases.

    TL-31660       Improved the help text for seminar third-party email setting

                   Also available in 16.1 and later releases.

    TL-32119       Added the missing event trigger for suspended users

                   Also available in 16.2 and later releases.

    TL-32731       Clicking on an Engage article no longer triggers editing mode

                   Users who have permission to edit an Engage article are no longer put into edit
                   mode when they click on it. This allows those users to follow links and interact
                   with the article as users normally would. A new edit icon is added to the
                   article for those who have permission to edit it that enables them to toggle in
                   and out of editing mode.

                   Also available in 16.7 and later releases.

    TL-33052       Added a seminar 'Attendance status' report builder column and filter

                   Also available in 16.2 and later releases.

    TL-33261       Improved the visual display of information within the Course completion status block
    TL-33365       Changed 'Course compatible in-app' setting to 'Mobile-friendly course' and updated the help text

                   When the Totara Mobile app is enabled, courses that are marked as
                   'Mobile-friendly' will open in the app; those that are not will be opened in the
                   mobile web browser instead. The behaviour of this setting has not changed, only
                   the label and help text explaining it.

                   Also available in 16.1 and later releases.

    TL-33439       Improved the help text regarding the use of event roles in seminar activities

                   Also available in 16.1 and later releases.

    TL-33491       Started recording any changed HR Import settings within the config log database table

                   Also available in 16.2 and later releases.

    TL-33498       Fixed missing legacy 'Session date/time changed' message when removing the last session of a seminar

                   When the last session of a seminar event is removed, all appropriate users will
                   now receive a 'Session date/time changed' message with an ical attachment to
                   allow the removal of the calendar entry from their calendars.

                   Also available in 16.1 and later releases.

    TL-33661       Replaced the 'Close' button with 'Cancel' button in the 'Manage participation' modal for performance activities
    TL-33738       Improved wording when setting course completion date

                   Also available in 16.1 and later releases.

    TL-33790       Keyboard shortcut (ctrl + k) added to open the Weka link dialog

                   Also available in 16.2 and later releases.

    TL-33851       Ensured all roles names consistently use title case
    TL-34051       Added spacing on delete topic confirmation modal body text

                   Also available in 16.1 and later releases.

    TL-34135       Pass OAuth 2.0 request data to xAPI statement created event

                   Upon a successful Oauth 2.0 authentication during an xAPI statement request, the
                   system now stores the client_id in the event metadata, allowing event listeners
                   to identify the specific source of the statement.

    TL-34145       Improved the select/deselect all functionality when looking at the question bank

                   Also available in 16.1 and later releases.

    TL-34166       Improved wording in content visibility settings of resources and playlists

                   Also available in 16.4 and later releases.

    TL-34228       Removed the separation of evidence shown in Record of Learning and the Evidence bank

                   There is no longer any separation of evidence items based on the type of the
                   evidence item. The same evidence type can now be used when uploading evidence
                   from csv files or when adding evidence items in the Evidence bank, and all items
                   can now be shown in both the Record of Learning and Evidence bank reports.

                   By default the Record of Learning report will be filtered to only show evidence
                   that was uploaded (i.e. their source is 'Completion history import'). Similarly,
                   the Evidence bank reports will by default be filtered to only show evidence
                   items that were 'Manually created'. As this is a normal report filter, users can
                   change / clear the filter to show both uploaded and/or manually created items in
                   any one of these reports.

                   Also available in 16.2 and later releases.

    TL-34296       Added client side 'alphanumeric' validation and help text for custom field short names to improve user experience

                   Also available in 16.3 and later releases.

    TL-34300       Removed broken sorting functionality from the Progress column on the Course completion report

                   Also available in 16.1 and later releases.

    TL-34408       Removed webapi index page

                   Removed the webapi index page as the information on it belongs in user
                   documentation rather than in product. With the addition of the new external API
                   this information was out of date and may have caused confusion.

    TL-34482       Added core_string_format and core_text_format to GraphQL schema to fix introspection for fields using these formatters
    TL-34570       Updated the environments checks page to support PHP 7.4.3 as the minimum version

                   Added the new Totara 17 server requirements to the environment checks page
                   (Quick-access menu > Server > Environment). Totara 17 requires a minimum PHP
                   version of 7.4.3.

                   Also available in 16.3 and later releases.

    TL-34613       Replaced the side panel on the multi-section performance activity participant view with the ProgressTrackerNav component

                   In the participant view for multi-section performance activities, the previous
                   side panel has been replaced with the progress tracker component, which includes
                   state icons for each section, such as 'view-only'. The page layout breakpoints
                   were also amended to better support the progress tracker content.

    TL-34641       Added a notification to Perform that is triggered by participant instance submission

                   This gives a Performance Activity Manager the ability to configure notifications
                   to be sent when responding participants submit a completed participant instance.
                   This has been implemented using the centralised notifications framework, so it
                   can be configured at the system level, or for individual performance activities.
                   It is disabled by default.

    TL-34647       Improved warnings around making changes to facetoface_displaysessiontimezones

                   Also available in 16.2 and later releases.

    TL-34703       Weka improvements

                   We have implemented a number of improvements to the baseline Weka functionality.
                   * Image size can be set to large, medium, and small, in addition to the existing
                   original size option
                   * Captions can be added to images
                   * Text can be underlined
                   * Text (paragraphs and headings) can be aligned to the left/centre/right

                   These additions are not currently supported in Totara Mobile.

                   Additionally, there are several quality-of-life improvements to the editor
                   itself:
                   * The Weka toolbar will 'stick' to the top of your screen and remain visible
                   when scrolling down on long content
                   * Weka now has an integral loading spinner to avoid page layout jumps
                   * The menu on image blocks has been redesigned

    TL-34767       Files larger than 5gb can now be uploaded when using cloud file storage with AWS S3

                   Also available in 16.3 and later releases.

    TL-34839       Performance activity reporting improvements

                   Performance activity response data can now be exported to Excel or viewed in
                   Totara. We've also added more filtering options for the response data.

                   We have added messaging to Performance activities and reporting prefiltering
                   pages regarding the visibility of data.

                   We have added a button to the Performance activities page to increase this
                   feature's visibility and usage.

                   We have also moved the performance activity response data report actions into a
                   dropdown menu for each row.

                   The single-select 'Element type' filter is now a multi-select filter.

                   The single-select 'Relationship name' filter is now a multi-select filter.

                   We have added a multi-select filter for 'Review type'.

                   We have added text filters for 'Review item name' and 'Parent element'.

    TL-34844       Cherry-picked MDL-46542 to allow restricting duration units menu to a subset of the available units

                   Also available in 16.3 and later releases.

    TL-34864       Improved UI behaviour for Tenant default values field when the 'Override with file and defaults' value for existing user details field is selected

                   When 'Override with file and defaults' value is selected then 'Tenant default
                   values' field will be disabled.

                   Also available in 16.4 and later releases.

    TL-34888       Allow escaping hyphens with a backslash in OAuth 2.0 field mapping

                   The hyphen character is used as an object nesting divider, i.e.
                   'Country-region-city' field will look up $country->region->city in the userinfo
                   data source. This prevents using the hyphen character as a regular character. We
                   added an ability to use a backslash character before the hyphen to treat it as a
                   regular hyphen.

                   Also available in 16.4 and later releases.

    TL-34897       Migrated performance activity notifications to centralised notifications

                   Previously, performance activities used a custom notifications engine. These
                   have now been migrated to the centralised notifications system. This will allow
                   custom notifications on an activity level.

    TL-35004       User experience improvements to goals functionality

                   Improvements to the goals adder in a goal review:

                   To improve the goal selection experience we've changed the current goals adder
                   sort order for both personal and company goals.
                   * Sort goals in the goals adder by 'Target date', with the latest date being
                   first.
                   * If multiple goals have the same target date they should then be sorted
                   alphabetically (A-Z).
                   * Sort goals without a target date after all those with a target date, and then
                   sorted alphabetically (A-Z).

                   Goal type has been added to the adder content.

                   To improve the selection of goals we've added 'framework' and 'type' filters
                   to the existing company goal adder and a 'type' filter for personal goals.

                   Improvements to the goals user experience:

                   When creating a new goal you have the option to select a 'type', which can be
                   used to add custom fields to goals. Previously there was no method to refresh
                   the page so that custom fields related to the selected type would be available
                   to edit.
                   To address this we've added a new 'Save and continue editing' button.
                   The save action returns the user to the edit form. The custom fields from the
                   selected type are included in the form.

                   We've added a 'Goal type' column and filters for both company and personal
                   goals to allow goals to be sorted and filtered by type.

    TL-35008       Improvements to the performance activities overview participant experience

                   To improve the performance activity participant experience, we have made changes
                   to the participant activities overview UI, moving away from a 'tables within
                   tables' layout, improving the visual information hierarchy, and replacing the
                   expanding detail panel with a modal dialogue component.

                   We have added heading content to the activity details modal. The heading
                   includes Avatar, Username, Type, Creation date, Title and Status. The heading
                   will always be displayed, even when there is a large amount of content.

                   The 'Print activity' option has moved to the meatball menu on the activities
                   summary page.

                   We've separated the activity list data table into two different spaces: the
                   summary table and a view details modal.

                   We've replaced the existing table to include columns for Type, Creation date,
                   Due date, Role, Title and Status. There are now visual cues for complete,
                   overdue and view-only activities.

    TL-35019       Added the ability to set multiple recipients in centralised notifications

                   Previously it was only possible to add one recipient for a notification in the
                   centralised notifications system. When creating or editing a notification you
                   can now select multiple recipients.

    TL-35052       Increased size of the Totara Menu URL field to allow for a url up to 1333 characters in length

                   Also available in 16.4 and later releases.

    TL-35777       Modified user visibility permissions to allow users who can manage API clients to see profile fields of available service account users.

Bug fixes:

    TL-32849       Fixed the workspace Transfer ownership modal to provide indication if the current owner account was suspended or deleted. 
    TL-34758       Ensured course forum searches using tags that contain spaces works correctly

                   Also available in 16.7 and later releases.

    TL-35053       Fixed code which fetches a list of files to ensure reliable sort order

                   Some utility code which was being used to build the graphql schema was obtaining
                   a list of files in a way which didn't guarantee the order in which the files
                   were returned. This could lead to the schema file being built differently on
                   different environments.

                   This was fixed so the utility method always returns files in alphabetical order.

    TL-35064       Fixed a bug which prevented deleting a section in a performance activity that includes a review question

                   Also available in 16.7 and later releases.

    TL-35138       Blockquotes are no longer removed when saving content in the JSON_EDITOR format
    TL-35154       Added a default sort order based on the 'target date' for goal adders

                   Previously the 'cursor_paginator' used by goal adders would throw an error if a
                   default sort order was not defined. This default sort order has been added. And
                   now when the get_direction() method is used, the system will check that it
                   exists in the instance before it is called. If it does not exist then an empty
                   string will be returned.

    TL-35170       Fixed email casing when matching users for seminar attendance import

                   Also available in 16.7 and later releases.

    TL-35206       Fixed an error on the course page for certain assignment settings that was displayed when debugging was turned on

                   Also available in 16.7 and later releases.

    TL-35506       Added further validation around forced delivery channels when creating / updating notification preferences

                   Also available in 16.7 and later releases.

    TL-35516       Fixed wrong grouping when using multi-select custom field

                   Also available in 16.7 and later releases.

    TL-35536       Fixed recommending workspaces/resources/courses that are not visible to the user.

                   Also available in 16.7 and later releases.

    TL-35548       Fixed duplicate due date program and certification notifications

                   Duplicate program and certification due date and course set due date
                   notifications were being sent if a user was assigned by more than one method.

                   Also available in 16.7 and later releases.

    TL-35572       Removed max-height on responsive images in StaticContentAdminView.vue to fix a bug where the image would stretch when the browser is resized
    TL-35631       Fixed sorting by target dates in goal adder

                   The targetdate columns in the mdl_goal and mdl_goal_personal table are nullable
                   but existing goal code always regarded nulls as zero. A zero (whether a real
                   zero or null) indicated the target date was not set; the goal code implicitly
                   assumed a target date would always come from the UI and therefore it would
                   always be a non zero date.

                   TL-35054 changed the goal adder to sort by target dates by default. However, the
                   goal adder currently uses a cursor paginator that cannot handle nullable
                   columns. This patch changes the targetdate columns to be non nullable and
                   defaulting to 0. This allows the goal adder to paginate by target dates to work
                   and makes the implicit 'zero = not set' assumption explicit.

    TL-35644       Prevented transformation of some right to left CSS styles

                   In some locations, there were styles for right to left languages that were being
                   transformed when they should not have been. These have been fixed so that those
                   styles are no longer transformed

                   Also available in 16.7 and later releases.

    TL-35654       Updated the Comment component to scroll smoothly to the reply box only if it is outside of the scroll view

                   Also available in 16.7 and later releases.

    TL-35666       Allow the placeholder to return an empty string.

                   These changes allow the placeholder to return an empty string which hides the
                   whole sentence from the result. If the placeholder returns null, it returns .

    TL-35715       Reduced duplicate queries on report builder when fetching result count
    TL-35736       Fixed a bug where the focus outline was being applied to the wrong element on Weka video and audio blocks

                   Also available in 16.7 and later releases.

    TL-35739       Fixed the permission check for logged in users to view user field 'descriptionformat'
    TL-35769       Fixed competency progress tracker not showing values higher than the minimum proficient value as proficient
    TL-35791       Fixed managers full name link notification placeholder so that it renders correctly

                   Also available in 16.7 and later releases.

    TL-35810       Fixed a notice that can appear after upgrading from Totara 14 if no recommendations options have been saved.

                   Also available in 16.7 and later releases.

    TL-35884       N/A

Database upgrades:

    TL-35033       Centralised notifications updated to support multiple recipients

                   The 'recipient' field has been deprecated from centralised notifications in
                   favour of a new 'recipients' field which allows for multiple recipients to be
                   added to a single notification.

Technical changes:

    TL-32667       Implemented a check for JavaScript errors in behat runs
    TL-32931       Updated behat to support PHP 8.0

                   Also available in 16.2 and later releases.

    TL-33278       Avoid using required column to allow visibility checks in report builder

                   Previously, in order to perform visibility checks in reports, we obtained the
                   data needed by defining required columns which were columns that, although not
                   visible, were present in the report. However, it was noted they were interfering
                   with aggregation, giving unexpected results.

                   Now, 'required joins' have been added in order to perform this task. The
                   information to perform the visibility check is still present, but should not
                   interfere with aggregation.

                   All applicable report sources have been updated to use the new
                   define_requiredjoins function.

                   Please note that custom report sources that use the old way of requiring columns
                   shouldn't be affected by this change, but we recommend that they are updated to
                   use define_requiredjoins to get the correct result when using aggregation.

                   Also available in 16.2 and later releases.

    TL-33368       Moved core entity classes in totara/competency to totara/hierarchy
    TL-33369       Moved course-related entity classes to correct core locations
    TL-34133       The generate_uuid() function has been deprecated

                   Please use \core\uuid::generate() instead. If the PECL UUID extension is not
                   installed, this new function will use random_bytes() instead of mt_rand(), which
                   is more secure.

                   Also available in 16.1 and later releases.

    TL-34180       Converted GraphQL endpoint types from constants to classes

                   Implemented new abstract base endpoint type class. Existing endpoints (mobile,
                   ajax, dev) were converted to use endpoint classes and the new external API
                   endpoint type was added.

                   Endpoint classes define the properties of the specific endpoint and allow core
                   code to be free from endpoint implementation details.

                   For more information see our developer documentation:

                   https://help.totaralearning.com/display/DEV/Extending+GraphQL+APIs

    TL-34181       Split GraphQL schema by endpoint type

                   Previously all GraphQL endpoints shared a single schema. Now the schema has been
                   split so that individual endpoint types have their own schema. This allows the
                   schema to only include services that are relevant to it.

                   For more information see this page in the public developer documentation:

                   https://help.totaralearning.com/display/DEV/GraphQL+schema+file+changes+in+Totara+17

    TL-34258       Added support for 'internal' OAuth 2.0 providers

                   Added support for 'internal' OAuth 2.0 providers which can be managed by other
                   components without showing up in the OAuth 2.0 providers interface.

                   This change has no impact on the behaviour of OAuth 2.0 providers via the UI.

    TL-34261       Added support for per-endpoint global GraphQL middleware

                   Added support for global middleware that is automatically included for all
                   query, mutation and type resolvers of the specified endpoint type (rather than
                   needing to be specified in each resolver).

                   For more information see the developer documentation:

                   https://help.totaralearning.com/display/DEV/Implementing+GraphQL+Middleware

    TL-34263       Relocated GraphQL schema files to appropriate endpoint subfolder

                   Moved GraphQL schema files so they appear in the appropriate GraphQL schema. See
                   TL-34181 for more details on this change.

    TL-34272       Add low-level support for disabling OAuth 2.0 providers

                   Added support for disabling OAuth 2.0 providers in code, allowing other
                   components to specify if a provider is active. Inactive OAuth 2.0 providers will
                   temporarily reject all access tokens until re-enabled.

                   This change does not include the ability to disable OAuth 2.0 providers via the
                   UI.

    TL-34328       Added support for customisation of global middleware via a hook

                   Add support for a hook that can be used to modify the global middleware that is
                   applied to GraphQL resolvers.

                   This allows for third-party customisation of the global middleware chain.

                   For more information see the API documentation:

                   https://help.totaralearning.com/display/DEV/Extending+GraphQL+APIs

    TL-34380       GraphQL endpoints converted to use API controller

                   A new base api controller class was implemented and the existing GraphQL
                   endpoints (ajax, mobile, dev) were converted to make use of it.

                   This allows common functionality to be abstracted and improves the testability
                   of GraphQL endpoints.

    TL-34426       Replaced calls to deprecated strftime function for PHP 8.1 support

                   In PHP 8.1 the strftime function is deprecated. This is used in various places
                   in Totara, for things such as handling date/time formats defined in language
                   strings. To continue supporting these language strings as they are, the calls
                   have been been replaced with \totara_core\strftime::format which can be swapped
                   in.

                   All existing placeholders are supported, however the %x, %X and %c placeholders
                   may give slightly different results as they are based on your locale and server
                   setup.

    TL-34780       Introduced a 'jsoneditor' plugin type for JSON_EDITOR schema extensions
    TL-34783       GraphQL type, query and mutation resolvers are now abstract classes instead of interfaces

                   Previously we had interfaces for type_resolver, query_resolver and
                   mutation_resolver which were implemented by GraphQL resolver classes.

                   Now those interfaces have been converted to abstract classes so that default
                   methods can be included. This requires any existing resolver classes to be
                   updated - instead of:

                   class your_resolver implements type_resolver, has_middleware \{ }

                   it should now be:

                   class your_resolver extends type_resolver \{ }

                   (the same for query_resolver and mutation_resolver).

                   The has_middleware interface has been deprecated since the get_middleware()
                   method is now included in the base resolver classes, so it is no longer
                   necessary to include ' implements has_middleware' in your resolvers.

                   Additionally, the final keyword has been removed from any core resolver classes
                   that set it, to allow partners more flexibility in extending core resolvers.

    TL-34833       Allowed notification Tui components to be reusable in existing page layouts
    TL-34875       Editor variants have been standardised

                   'Variants' are an editor concept, currently only used by Weka, that allow
                   developers to select a set of editor features to enable. In Weka, this means
                   which 'extensions' (editor plugins) are enabled, which implement things like
                   links and bulleted lists.

                   Previously, there were a handful of core variants (standard, description, and
                   simple).

                   In addition to those three, we have added two additional core variants, 'full',
                   containing all editor features and intended for use cases such as article
                   content, and 'basic', which contains a limited feature set suitable for things
                   like adding comments.

                   The 'basic' and 'simple' variants are include-based, meaning they do not
                   automatically include Weka extensions added through plugins. Weka extensions
                   must instead declare when they wish to be added to these variants.

                   'mention' and 'hashtag' extensions have also been removed from the standardised
                   variants, and must be manually enabled at each editor usage as they only work
                   correctly when the corresponding backend support is in place.

                   Please see the Weka documentation for more information:
                   https://help.totaralearning.com/display/DEV/Weka+editor

    TL-34899       Fixed an issue where isset on an entity returns false if the relationship exists but is not loaded

                   Also available in 16.4 and later releases.

    TL-35113       Added GraphQL schema diff tool

                   Added schema diff tool to allow developers to identify API schema changes
                   between two versions.

                   The tool can identify both non-breaking and breaking changes (changes that will
                   impact existing usage of the API).

                   For more information see our developer documentation:

                   https://help.totaralearning.com/display/DEV/Changes+to+the+GraphQL+APIs#ChangestotheGraphQLAPIs-ToolingtosupporttrackingAPIchanges

    TL-35482       Updated webapi README to reflect changes to core APIs

Tui front end framework:

    TL-26199       Refactored the CSS in the Tui Range component
    TL-26667       An error is now thrown for invalid Tui CSS imports, eliminating the confusing in-browser error messages

                   Also available in 16.2 and later releases.

    TL-29586       Added 'toHaveNoViolations()' to jest's expect() result

                   When using JavaScript unit tests (as provided by jest), a 'toHaveNoViolations'
                   function has been added to the 'expect()' return value. This allows the test to
                   check the accessibility of the given component and avoids importing the function
                   from jest-axe package 'toHaveNoViolations()'.

                   Also available in 16.4 and later releases.

    TL-31494       Added an optional @reset event and showReset prop to display a filter reset button in the FilterBar component
    TL-32798       Changed Delete bootstrap icon from Trash fill to Trash outline

                   Also available in 16.1 and later releases.

    TL-34032       Updated layout of adders to work better on mobile devices

                   Also available in 16.1 and later releases.

    TL-34086       Updated webpack and other packages to support Node 18

                   If you have previously customised webpack builds using the hooks
                   in {{build.config.js}} or by modifying the core webpack configuration, you may
                   have to update these to be compatible with webpack 5. If you have not made any
                   customisations to the webpack builds, you shouldn't need to take any action
                   here.

                   Also available in 16.3 and later releases.

    TL-34151       Fixed keyboard navigation in nested Tui modals

                   Also available in 16.1 and later releases.

    TL-34385       Updated the computeError method in FormField.vue to only return the error as a string to prevent an 'Invalid Prop' Vue warning.

                   Also available in 16.2 and later releases.

    TL-34481       Fixed keyboard accessibility of the Dropdown vue component

                   Also available in 16.2 and later releases.

    TL-34555       Fixed the function dom/position/getBox to be functional in IE11

                   Also available in 16.4 and later releases.

    TL-34963       Added a core component for implementing buttons with custom UI

                   It's now possible to implement buttons with completely custom UI using the core
                   ButtonAria component. See the samples page for ButtonAria for more details.

                   Implementing custom buttons using the native button element is difficult, as
                   theme styles typically set a lot of properties directly on the button element.

    TL-35202       Added Uniform wrapper for TagList component
    TL-35490       Stopped disabled DropDownItem being focusable via keyboard navigation
    TL-35525       Updated focus style of dropdown to meet accessibility requirements

                   Also available in 16.6 and later releases.

Recommendations engine:

    TL-35129       The legacy Recommendations Engine is deprecated

                   The Recommendations Engine (also called Recommenders) introduced with Totara 13,
                   is now deprecated. It will be removed from Totara 18 onwards. It has been
                   replaced by the Machine Learning Service.  The Machine Learning Service was
                   introduced in Totara 15.

                   The Machine Learning Service brings several improvements over the
                   Recommendations Engine: better performance at scale combined with real-time
                   generation of recommendation data. The legacy version will work normally in
                   Totara 17, but will display a warning message.

                   Instructions on migrating to the Machine Learning Service can be found here:
                   https://help.totaralearning.com/display/DEV/Machine+Learning+Service

Library updates:

    TL-28252       Upgraded library Video.js to 7.18.1
    TL-32213       Upgraded GraphQL-tag library to version 2.12.4
    TL-33146       Upgraded development library "stylelint" from 12.0 to 14.6

                   Also available in 16.4 and later releases.

    TL-33904       Upgraded library dompdf to version 1.2.2

                   We now use a modified version of this library on Github which contains
                   Totara-specific changes.

    TL-34192       Updated npm dependencies

                   Dependencies:

                   * @babel/runtime: 7.13.10 -> 7.18.9
                   * date-fns: 2.24.0 -> 2.29.1
                   * graphql: 15.5.0 -> 15.8.0
                   * graphql-tag: 2.12.4 -> 2.12.6
                   * prosemirror-commands: 1.1.12 -> 1.3.0
                   * prosemirror-dropcursor: 1.3.5 -> 1.5.0
                   * prosemirror-gapcursor: 1.2.0 -> 1.3.1
                   * prosemirror-history: 1.2.0 -> 1.3.0
                   * prosemirror-inputrules: 1.1.3 -> 1.2.0
                   * prosemirror-keymap: 1.1.5 -> 1.2.0
                   * prosemirror-model: 1.15.0 -> 1.18.1
                   * prosemirror-state: 1.3.4 -> 1.4.1
                   * prosemirror-transform: 1.3.3 -> 1.6.0
                   * prosemirror-view: 1.21.0 -> 1.27.
                   * vue-apollo: 3.0.7 -> 3.1.0

                   Also available in 16.4 and later releases.

    TL-34372       Upgraded library adodb/adodb-php to 5.22.2
    TL-34375       Updated the SVGGraph library to improve support for PHP 8.1

                   Also available in 16.3 and later releases.

    TL-34383       Updated the SCSSSPHP library to improve support for PHP 8.1

                   Also available in 16.3 and later releases.

    TL-34399       Upgraded library nyholm/psr7 to 1.5.1
    TL-34417       Upgraded library box/spout to a 3.3.0 forked version
    TL-34449       Upgraded symfony/polyfill-php libraries

                   * Upgraded library symfony/polyfill-php74 to version 1.25.0
                   * Upgraded library symfony/polyfill-php80 to version 1.25.0
                   * Installed library symfony/polyfill-php81 version 1.25.0

    TL-34450       Upgraded library phpmailer/phpmailer to 6.5.4
    TL-34454       Upgraded library simplepie/simplepie to 1.6.0
    TL-34457       Upgraded library sabberworm/php-css-parser to 8.4.0
    TL-34459       Upgraded library ops/json-schema to version 2.3.0
    TL-34460       Upgraded library michelf/php-markdown to 1.9.1
    TL-34463       Upgraded library league/oauth2-server to 8.3.5 for PHP 8.1 support
    TL-34470       Upgraded library mathiasmullie/minify to 1.3.68
    TL-34489       Upgraded library wikimedia/less.php to support php 8.1
    TL-34528       Upgraded library phpseclib/phpseclib to 2.0.37
    TL-34534       Upgraded library ezyang/htmlpurifer to a 4.15.0 forked version
    TL-34535       Upgraded library PHPOffice/PhpSpreadsheet to 1.23.0
    TL-34942       Upgraded optional library microsoft/azure-storage-blob to 1.5.4
    TL-35130       Updated Python libraries

                   Also available in 16.3 and later releases.

    TL-35369       Upgraded optional library aws/aws-sdk-php to 3.235.7

Chris Snyder
Re: Totara TXP 17.0 is now available
by Chris Snyder - Tuesday, 8 November 2022, 6:37 PM
Group Totara

Totara TXP 17 Technical Release Notes

A change management guide for Totara developers and implementers.

A version of these notes with a linked table of contents appears in our source code as release_notes.md.

Table of contents

  • System requirements
  • Breaking code changes
  • GraphQL API
  • Capabilities
  • Scheduled tasks
  • Notifications
  • Site administration
  • Hooks
  • Events
  • Plugins
  • Tui components
  • Deprecations

System requirements

  • PHP
    Added PHP 8.1 support
    PHP 7.3 is no longer supported.
    Note that max_input_vars minimum has increased in recent releases to 5000.

  • MariaDB
    Added MariaDB 10.7 and 10.8 support.

  • MySQL - No change

  • PostgreSQL - No change

  • MSSQL - No change

  • Python (for Machine Learning Service)
    Python 3.6 is no longer supported

  • Node.js
    Node 12 is no longer supported

  • Web browsers
    IE11 is no longer supported

Breaking code changes

GraphQL resolver classes

The GraphQL resolver interfaces have been changed to abstract classes which implement rate-limiting and middleware definitions.

All custom GraphQL resolver classes must be updated:

  • Change implements mutation_resolver to extends mutation_resolver
  • Change implements query_resolver to extends query_resolver
  • Change implements type_resolver to extends type_resolver

Consider in each case whether to override the default methods in the abstract class.

The final keyword has been removed from all core resolver classes that included it, to allow more flexibility for partners wanting to extend existing GraphQL services.

Perform front end

Moved mod_perform/src/js/redirect.js to tui/src/js/dom/form.js, any existing reference will need their paths updated.

In components replace mod_perform/redirect with tui/dom/form.

Notifications front end

Split NotificationPage.vue into two components so that the notification UI can be used in different page layouts.
- NotificationPage.vue now just handles the page layout and Notifications.vue contains the logic previously contained in NotificationPage.vue.
- Ensure any customisations previously made to NotificationPage.vue is correctly split between these two components.

Course container

Moved two PHP entity classes to core, with renames.
- Moved server/container/classes/entity/module.php to server/lib/classes/entity/course_module.php
- Moved server/container/classes/entity/section.php to server/lib/classes/entity/course_section.php

Competency

Moved these server/totara/competency/classes/entity files to server/totara/hierarchy/classes/entity
- scale_assignment.php
- scale_value.php
- scale.php
- competency.php
- competency_repository.php
- competency_type.php
- competency_framework
- competency_framework_repository
- assignment_availability

Moved and renamed totara_competency\entity\competency_scale_assignment to totara_hierarchy\entity\scale_assignment

Moved these server/totara/competency/classes/entity files to server/lib/classes/entity:
- course_repository.php
- course_categories.php
- course.php

GraphQL API

Totara 17 provides three separate-but-related GraphQL APIs: external, AJAX, and Mobile.

Changes to external API

For full documentation of the Totara 17.0 external API, see https://graphql-schema.totara.com/docs/totara-17.0.html

New queries

  • core_user_users
    Return a paginated list of users in the system.

  • totara_webapi_status
    Simple query returning "ok" to test that you are able to successfully execute GraphQL queries.

New mutations

  • core_user_create_user
    Create a new user.

  • core_user_update_user
    Update the specified target user with new properties.

  • core_user_delete_user
    Delete the target user.

  • totara_job_create_job_assignment
    Creates a new job assignment.

  • totara_job_update_job_assignment
    Mutation to delete a job assignment.

  • totara_job_delete_job_assignment
    Updates a specific target job assignment with new properties.

Important changes to AJAX / Mobile APIs

  • Query.core was removed - this was a placeholder query that didn't do anything
  • Mutation.todo was removed - this was a placeholder mutation that didn't do anything
  • core_user.interests changed type from Boolean to String

Additionally, the following AJAX schema changes have been made to support multiple recipients in notification configurations:

Mutation deprecations
- totara_notification_create_custom_notification_preference in favour of totara_notification_create_custom_notification_preference_v2
- totara_notification_toggle_notifiable_event in favour of totara_notification_toggle_notifiable_event_v2
- totara_notification_create_notification_preference in favour of totara_notification_create_notification_preference_v2
- totara_notification_update_notification_preference in favour of totara_notification_update_notification_preference_v2
- totara_notification_override_notification_preference in favour of totara_notification_override_notification_preference_v2

Query deprecations
- totara_notification_event_resolvers in favour of totara_notification_event_resolvers_v2
- totara_notification_notification_preference in favour of totara_notification_notification_preference_v2

New capabilities

Hierarchy capabilities

  • Assign company goal renamed to Manage goal assignments
    totara/hierarchy:managegoalassignments
    This is an admin capability which let a user manage any goal assignment in the system.

  • Manage manager assigned goals
    totara/hierarchy:managemanagerassignedgoal
    Allows the user to manage a manager's assigned goals.

Notifications capabilities

  • Audit course notifications
    moodle/course:auditcoursenotifications
    Allows the user to view notification log reports for course notifications.

  • Audit performance activity notifications
    mod/perform:audit_notifications
    Allows the user to view notification log reports for performance activity notifications.

  • Audit program messages
    totara/program:auditmessages
    Allows the user to view notification log reports for program notifications.

  • Audit notifications
    totara/notification:auditnotifications
    Blanket capability allowing the user to view notification log reports for all notifications.

External API capabilities

  • Manage API clients
    totara/api:manageclients
    Allows the user to create, edit, and delete external API clients.

  • Manage API client settings
    totara/api:managesettings
    Allows the user to manage settings of existing external API clients.

  • View API documentation
    totara/api:viewdocumentation
    Allows the user to view the in-product external API documentation.

Approval workflows capabilities

Application capabilities

Note that most application capabilities have three or four versions, depending on whether they should apply to anyone (_any), the owner/creator of the application (_owner), the applicant/subject of the application (_applicant), or someone with a role in the user context of the applicant (_user) such as their manager.

  • Create applications
    mod/approval:create_application_any
    mod/approval:create_application_applicant
    mod/approval:create_application_user
    Allows the user to create applications for themselves (_applicant) or on behalf of other users.

  • View draft applications in the dashboard
    mod/approval:view_draft_in_dashboard_application_any
    mod/approval:view_draft_in_dashboard_application_applicant
    mod/approval:view_draft_in_dashboard_application_user
    Allows the user to see draft application in the applications dashboard.

  • View draft applications
    mod/approval:view_draft_application_any
    mod/approval:view_draft_application_owner
    mod/approval:view_draft_application_applicant
    mod/approval:view_draft_application_user
    Allows the user to view draft applications.

  • Edit draft applications
    mod/approval:edit_draft_application_any
    mod/approval:edit_draft_application_owner
    mod/approval:edit_draft_application_applicant
    mod/approval:edit_draft_application_user
    Allows the user to edit draft applications.

  • Delete draft applications
    mod/approval:delete_draft_application_any
    mod/approval:delete_draft_application_owner
    mod/approval:delete_draft_application_applicant
    mod/approval:delete_draft_application_user
    Allows the user to delete draft applications.

  • View applications in the dashboard
    mod/approval:view_in_dashboard_application_any
    mod/approval:view_in_dashboard_application_applicant
    mod/approval:view_in_dashboard_application_user
    Allows the user to see non-draft applications in the applications dashboard.

  • View pending applications in the dashboard
    mod/approval:view_in_dashboard_pending_application_any
    mod/approval:view_in_dashboard_pending_application_user
    Allows the user to see applications which are awaiting their approval in the applications dashboard.

  • View applications
    mod/approval:view_application_any
    mod/approval:view_application_owner
    mod/approval:view_application_applicant
    mod/approval:view_application_user
    Allows the user to view non-draft applications.

  • View pending applications
    mod/approval:view_pending_application_any
    mod/approval:view_pending_application_user
    Allows the user to view applications which are awaiting their approval.

  • Edit unsubmitted applications
    mod/approval:edit_unsubmitted_application_any
    mod/approval:edit_unsubmitted_application_owner
    mod/approval:edit_unsubmitted_application_applicant
    mod/approval:edit_unsubmitted_application_user
    Allows the user to edit non-draft applications at a form stage.

  • Edit in-approvals applications
    mod/approval:edit_in_approvals_application_any
    mod/approval:edit_in_approvals_application_owner
    mod/approval:edit_in_approvals_application_applicant
    mod/approval:edit_in_approvals_application_user
    Allows the user to edit applications that are at an approval stage.

  • Edit pending submitted applications
    mod/approval:edit_in_approvals_pending_application_any
    mod/approval:edit_in_approvals_pending_application_user
    Allows the user to edit applications which are awaiting their approval.

  • Edit first approval level applications
    mod/approval:edit_first_approval_level_application_any
    mod/approval:edit_first_approval_level_application_owner
    mod/approval:edit_first_approval_level_application_applicant
    mod/approval:edit_first_approval_level_application_user
    Allows the user to edit applications that are at an approval stage, but have not been approved by anyone yet.

  • Edit first approval level pending applications
    mod/approval:edit_first_approval_level_pending_application_any
    mod/approval:edit_first_approval_level_pending_application_user
    Allows the user to edit applications that are awaiting their approval, and have not been approved by anyone else yet.

  • Edit applications without invalidating exist approvals
    mod/approval:edit_without_invalidating_approvals_any
    mod/approval:edit_without_invalidating_approvals_owner
    mod/approval:edit_without_invalidating_approvals_applicant
    mod/approval:edit_without_invalidating_approvals_user
    Allows the user to edit applications that have already been approved, without invalidating those approvals.

  • Edit full form on applications
    mod/approval:edit_full_application_any
    mod/approval:edit_full_application_owner
    mod/approval:edit_full_application_applicant
    mod/approval:edit_full_application_user
    Allows the user to edit all form fields in the application to date, rather than just the ones defined at the current stage.

  • Approve applications
    mod/approval:approve_application_any
    mod/approval:approve_application_owner
    mod/approval:approve_application_applicant
    mod/approval:approve_application_user
    Allows the user to approve applications that are at an approval stage.

  • Approve pending applications
    mod/approval:approve_pending_application_any
    mod/approval:approve_pending_application_owner
    mod/approval:approve_pending_application_applicant
    mod/approval:approve_pending_application_user
    Allows the user to approve applications that are awaiting their approval.

  • Upload files to applications
    mod/approval:attach_file_to_application_any
    mod/approval:attach_file_to_application_owner
    mod/approval:attach_file_to_application_applicant
    mod/approval:attach_file_to_application_user
    Allows the user to upload files to rich text fields when editing applications.

  • View comments on applications
    mod/approval:view_comment_on_application_any
    mod/approval:view_comment_on_application_owner
    mod/approval:view_comment_on_application_applicant
    mod/approval:view_comment_on_application_user
    Allows the user to view comments associated with applications.

  • Post comments on applications
    mod/approval:post_comment_on_application_any
    mod/approval:post_comment_on_application_owner
    mod/approval:post_comment_on_application_applicant
    mod/approval:post_comment_on_application_user
    Allows the user to post comments on applications.

  • Post comments on pending applications
    mod/approval:post_comment_on_pending_application_any
    mod/approval:post_comment_on_pending_application_user
    Allows the user to post comments on applications that are awaiting their approval.

  • Withdraw unsubmitted applications
    mod/approval:withdraw_unsubmitted_application_any
    mod/approval:withdraw_unsubmitted_application_owner
    mod/approval:withdraw_unsubmitted_application_applicant
    mod/approval:withdraw_unsubmitted_application_user
    Allows the user to withdraw submitted applications that are at a form stage.

  • Withdraw in-approvals applications
    mod/approval:withdraw_in_approvals_application_any
    mod/approval:withdraw_in_approvals_application_owner
    mod/approval:withdraw_in_approvals_application_applicant
    mod/approval:withdraw_in_approvals_application_user
    Allows the user to withdraw submitted applications that are at an approval stage.

  • Backdate applications
    mod/approval:backdate_application_any
    mod/approval:backdate_application_owner
    mod/approval:backdate_application_applicant
    mod/approval:backdate_application_user
    Allows the user to set application date fields earlier than today's date.

Workflow management capabilities

  • Manage workflows
    mod/approval:manage_workflows
    Allows the user to access the workflow management interface. This capability is required for all of the others below.

  • Create workflows from templates
    mod/approval:create_workflow_from_template
    Allows the user to create workflows from an existing template.

  • Create workflows
    mod/approval:create_workflow
    Allows the user to create new workflows.

  • Clone existing workflows
    mod/approval:clone_workflow
    Allows the user to clone existing workflows.

  • Edit draft workflows
    mod/approval:edit_draft_workflow
    Allows the user to manage draft workflows.

  • Edit active workflows
    mod/approval:edit_active_workflow
    Allows the user to manage active workflows.

  • Publish/activate draft workflows
    mod/approval:activate_workflow
    Allows the user to activate draft workflows, so they can be used by applicants.

  • Archive active workflows
    mod/approval:archive_workflow
    Allows the user to archive active workflows, so that they no longer accept new applications.

  • Save workflows as templates
    mod/approval:create_workflow_template
    Allows the user to save workflows as workflow templates.

  • Edit templates
    mod/approval:edit_workflow_template
    Allows the user to manage workflow templates.

  • Manage stages (create, edit, reorder, clone, delete)
    mod/approval:manage_workflow_stages
    Allows the user to configure stages on a (draft) workflow.

  • Manage formviews
    mod/approval:manage_workflow_form_view
    Allows the user to manage form views on a (draft) workflow's stages.

  • Add approval levels
    mod/approval:add_workflow_approval_level
    Allows the user to add approval levels to a (draft) workflow's approval stages.

  • Change approval level order
    mod/approval:reorder_workflow_approval_level
    Allows the uset to change the order of approval levels on a (draft) workflow's approval stages.

  • Manage individual approvers
    mod/approval:manage_individual_workflow_approvers
    Allows the user to manage individual approvers on a workflow.

  • Manage relationship approvers
    mod/approval:manage_relationship_workflow_approvers
    Allows the user to manage relationship approvers (aka manager) on a workflow.

  • Manage assignment overrides
    mod/approval:manage_workflow_assignment_overrides
    Allows the user to manage assignment approver overrides (alternate approvers) on a workflow.

  • Manage transitions
    mod/approval:manage_workflow_transitions
    Allows the user to manage (draft) workflow interactions, controlling how applications move from stage to stage.

  • Manage notifications
    mod/approval:manage_workflow_notifications
    Allows the user to manage per-stage workflow notifications.

  • Move applications to a different workflows
    mod/approval:move_application_between_workflows
    Allows the user to move applications from one workflow to another.

  • Delete approval level
    mod/approval:delete_workflow_approval_level
    Allows the user to delete an approval level from a (draft) workflow's approval stage.

  • Manage form plugin lookup tables
    mod/approval:manage_lookup_tables
    Allows the user to manage custom tables used by approvalform plugins.

  • View workflow's applications report
    mod/approval:view_workflow_applications_report
    Allows the user to view a workflow's application response data in report format.

New scheduled tasks

Added Delete notification logs task as part of centralised notifications.

Disabled deprecated Periodically check notification trigger conditions task for performance activities

Added Regenerate role capability maps task to optimise application dashboard loading as part of approval workflows

New notifications

Perform notifications

Performance activity custom notifications are converted on upgrade to centralised notifications.

The following default notifications have been added, to match the old default behaviour of performance activities. They are disabled by default unless indicated.

  • Participant due date reminder - due today (for subject)
  • Participant due date reminder - due today (for other participants)
  • Participant due date reminder - overdue (for subject)
  • Participant due date reminder - overdue (for other participants)
  • Participant due date reminder - due in 2 days (for subject)
  • Participant due date reminder - due in 2 days (for other participants)
  • Completion of subject instance (for subject)
  • Completion of subject instance (for other participants)
  • Participant instance completion by direct report (for subject)
  • Participant instance completion by direct report (for manager)
  • Participant instance completion by external respondent (for subject)
  • Participant instance completion by external respondent (for manager)
  • Participant instance completion by manager (for subject)
  • Participant instance completion by manager's manager (for subject)
  • Participant instance completion by manager's manager (for manager)
  • Participant instance completion by mentor (for subject)
  • Participant instance completion by mentor (for manager)
  • Participant instance completion by peer (for subject)
  • Participant instance completion by peer (for manager)
  • Participant instance completion by reviewer (for subject)
  • Participant instance completion by reviewer (for manager)
  • Participant instance completion by subject (for manager)
  • Participant instance created (for subject) (enabled)
  • Participant instance created (for other participants) (enabled)
  • Participant instance created - reminder 1 day later (for subject)
  • Participant instance created - reminder 1 day later (for other participants)
  • Reopened activity (for subject)
  • Reopened activity (for other participants)
  • Participant selection (for subject) (enabled)
  • Participant selection (for manager, manager's manager, and appraiser) (enabled)

Approval workflows notifications

These notifications are all disabled by default.

  • Application approved (at Level)
  • Application denied (at Level)
  • Application awaiting approval (at Level) - for applicant
  • Application awaiting approval (at Level) - for approvers
  • Application has been fully approved
  • Application has completed (workflow stage)
  • Application has entered (workflow stage)
  • Application has been submitted
  • Application has been withdrawn

Site administration

Shared services settings

  • Enable API - enableapi
    Allow external systems to connect to your Totara site, to access data and perform operations.
    (default No)

Messaging and notification settings

  • Enable notification logs - notificationlogs
    When enabled, notification logs are aggregated for auditing and troubleshooting purposes.
    (default Yes)

  • Days to keep notification logs - totara_notification_log_days_to_keep
    (default 30)

API settings

  • Site rate limit - totara_api | site_rate_limit
    Maximum query complexity cost allowed per minute on this site.
    (default 500,000)

  • Client rate limit - totara_api | client_rate_limit
    Maximum query complexity cost allowed per minute for an individual client on this site.
    (default 250,000)

  • Maximum query complexity - totara_api | max_query_complexity
    Maximum complexity allowed for an individual query.
    (default 6,000)

  • Maximum query depth - totara_api | max_query_depth
    Maximum depth allowed for an individual query.
    (default 15)

  • Default token expiration - totara_api | default_token_expiration
    Length of time that a token will be valid, before expiration.
    (default 24 hours)

  • Enable GraphQL introspection - totara_api | enable_introspection
    Allow clients to ask for information about the GraphQL schema. This includes data like types, fields, queries and mutations.
    (default No)

Experimental settings

  • Enable Approval Workflows - enableapproval_workflows
    When enabled, Approval Workflows features will be accessible.
    (default No)

New hooks

Added three hooks to support the external API:

  • totara_webapi\hook\api_hook
    Allows defining middleware based on endpoint_type, component, or resolver

  • totara_webapi\hook\handle_request_pre_hook
    Allows third parties to intercept API requests prior to processing and reject or modify the request based on their own criteria.

  • totara_webapi\hook\handle_request_post_hook
    Allows third parties to intercept API requests after processing and reject or modify the request based on their own criteria.

New events

Competencies events

  • Pathways copied
    totara_competency\event\pathways_copied_bulk
    Triggered when competency pathways are copied in bulk from one competency to others.

Approval workflows events

Application events

  • Application completed
    mod_approval\event\application_completed
    Triggered when an application reaches an end stage.

  • Existing approvals invalidated due to rejection or withdrawal
    mod_approval\event\approvals_invalidated
    Triggered when approvals are invalidated because an application has been rejected or withdrawn during an approval stage.

  • Application approved
    mod_approval\event\level_approved
    Triggered when an application is approved at an approval level.

  • Application rejected
    mod_approval\event\level_rejected
    Triggered when an application is rejected at an approval level.

  • Application entered new level
    mod_approval\event\level_started
    Triggered when an application enters an approval stage, or advances to the next approval level.

  • Application fully-approved at stage
    mod_approval\event\stage_all_approved
    Triggered when an application has been approved at all levels in an approval stage.

  • Application ended current stage
    mod_approval\event\stage_ended
    Triggered when an application leaves a workflow stage.

  • Application entered new stage
    mod_approval\event\stage_started
    Triggered when an application enters a workflow stage.

  • Application submitted
    mod_approval\event\stage_submitted
    Triggered when an application form is submitted.

  • Application withdrawn
    mod_approval\event\stage_withdrawn
    Triggered when an application is withdrawn.

Workflow administration events

  • Form version updated
    mod_approval\event\form_version_updated
    Triggered when an approval form is updated (status change or plugin schema refresh).

  • Workflow assignment archived
    mod_approval\event\workflow_assignment_archived
    Triggered when an assignment override is archived.

  • Workflow assignment created
    mod_approval\event\workflow_assignment_created
    Triggered when an assignment override is created.

  • Workflow assignment deleted
    mod_approval\event\workflow_assignment_deleted
    Triggered when an assignment override is deleted.

  • Workflow cloned
    mod_approval\event\workflow_cloned
    Triggered when an existing workflow is cloned.

  • Workflow created
    mod_approval\event\workflow_created
    Triggered when a new workflow is created.

  • Workflow deleted
    mod_approval\event\workflow_deleted
    Triggered when a workflow is deleted.

  • Workflow details edited
    mod_approval\event\workflow_edited
    Triggered when a workflow's details (name, description, ID number) are changed.

  • Workflow stage approval level created
    mod_approval\event\workflow_stage_approval_level_created
    Triggered when a new approval level is added to an approval workflow stage.

  • Workflow stage approval level deleted
    mod_approval\event\workflow_stage_approval_level_deleted
    Triggered when an approval level is deleted from an approval workflow stage.

  • Workflow stage approval levels reordered
    mod_approval\event\workflow_stage_approval_levels_reordered
    Triggered when the order of approval levels has changed.

  • Approvers on assignment changed
    mod_approval\event\workflow_stage_assignment_approvers_for_level_changed
    Triggered whenever there is a change to how approvers are defined for a workflow's default assignment, or an assignment override.

  • Workflow stage created
    mod_approval\event\workflow_stage_created
    Triggered when a new stage is added to a workflow.

  • Workflow stage deleted
    mod_approval\event\workflow_stage_deleted
    Triggered when a stage is deleted from a workflow.

  • Workflow stage name changed
    mod_approval\event\workflow_stage_edited
    Triggered when the name of a workflow stage changes.

  • Workflow stage formviews updated
    mod_approval\event\workflow_stage_form_views_updated
    Triggered when the form views (which form fields are in use) on a stage changes.

  • Workflow archived
    mod_approval\event\workflow_version_archived
    Triggered when a workflow is archived.

  • Workflow version published
    mod_approval\event\workflow_version_published
    Triggered when a draft workflow is published.

  • Workflow version unarchived
    mod_approval\event\workflow_version_unarchived
    Triggered when an archived workflow is unarchived.

New plugins

Totara plugins

  • External API - totara_api
    sever/totara/api
    Implements the external GraphQL API and API client management.
    Depends on totara_tenant and totara_oauth2.

Course containers

  • Approval Workflow - container_approval
    server/container/type/approval
    Workflow container, holds workflow configuration and workflow assignments.

Activity modules

  • Approval workflow - mod_approval
    sever/mod/approval
    (not a standard course activity module)
    Implements approval workflows, holds workflow assignment information.
    Depends on container_approval, editor_weka, and totara_comment.

Approval Workflow Form sub-plugins (new)

Approval workflow form plugins define the form schema for a specific type of workflow, and implement advanced functionality such as custom field validation and scheduled tasks.

  • Simple Request Form - approvalform_simple
    server/mod/approval/form/simple
    Implements a simple request form to demonstrate approval workflows.

JSON Editor plugins (new)

JSON editor plugins implement node definitions for FORMAT_JSON_EDITOR editors. This controls the structure of each node, as well as how it is rendered.

  • Simple multi lang - jsoneditor_simple_multi_lang server/text_format/json_editor/extensions/simple_multi_lang
    Format plugin implementing internationalisation support for centralised notifications. This was previously part of weka_simple_multi_lang, but was split out as part of the separation of the JSON Editor format and Weka plugins. Depends on filter_multi_lang

New Tui components

  • buttons/ButtonAria
    The ButtonAria component is a way to render a button with no built-in styling.

  • form/FormTagList
    TagList component wrapped for Uniform.

  • form/InputCurrency
    A uniform input for currency values.

Deprecations

Perform

Deprecated Tui components to support legacy performance activity notifications:
- RedirectWithPost JavaScript function
- NotificationSection.vue
- RecipientsTable.vue
- TriggersTable.vue

Deprecated Tui components for displaying performance activity actions, replaced by a single RowActions component:
- ElementActions.vue
- ExportRowAction.vue
- SubjectInstanceActions.vue
- SubjectUserActions.vue

Changed name of renderer method in mod_perform\controllers\reporting\performance namespace:
- deprecated renders_performance_reports::get_rendered_action_card()
- replacement renders_performance_reports::get_action_card()

Legacy performance activity notification classes and methods deprecated in mod_perform\notification namespace:
- dealer::class
- dealer_participant_selection::class
- factory::create_dealer_on_subject_instance()
- factory::create_dealer_on_subject_instances_for_manual_participants()
- factory::create_dealer_on_participant_instances()
- factory::create_mailer_on_notification()
- mailer::class

Deprecated other performance activity notification classes:
- mod_perform\task\check_notification_trigger_task::class (the associated scheduled task has been disabled)
- mod_perform\webapi\resolver\query\notifications::class

Deprecated a linked review element response report class:
- hierarchy_goal\performelement_linked_review\response_report::class
- use \hierarchy_goal\performelement_linked_review\personal_goal_response_report or \hierarchy_goal\performelement_linked_review\company_goal_response_report instead.

Machine learning

ML Recommender has been deprecated in favour of the ML Service.

Report builder

Course

Audience visibility columns have been replaced by audience visibility joins.

  • namespace \coure_course\rb\traits
    deprecated required_columns::add_audiencevisibility_columns()
    replacement required_joins::add_audiencevisibility_joins()

Seminar

Audience visibility columns have been replaced by audience visibility joins.

  • namespace \mod_facetoface\rb\traits
    deprecated required_columns::add_audiencevisibility_columns()
    replacement required_joins::add_audiencevisibility_joins()

Feedback activity

The session_value and sessiontrainer joins in server\mod\feedback\rb_sources\rb_source_feedback_summary.php::define_joinlist() have been deprecated.

GraphQL API

The has_middleware interface is deprecated; the new abstract resolver classes have has_middleware() methods (see Breaking changes).

Notifications

Deprecated notification_preference methods that only allowed one recipient:

  • class \totara_notification\builder\notification_preference_builder
    deprecated set_recipient()
    use set_recipients()

  • class \totara_notification\model\notification_preference
    deprecated get_recipient()
    use get_recipients()

  • class \totara_notification\model\notification_preference_value
    deprecated get_recipient()
    use get_recipients()

Deprecated resolvers for deprecated notification_preference GraphQL mutations:

  • namespace \totara_notification\webapi\resolver\mutation\
    deprecated create_notification_preference::class
    use create_notification_preference_v2::class

  • namespace \totara_notification\webapi\resolver\mutation\
    deprecated toggle_notifiable_event::class
    use toggle_notifiable_event_v2::class

  • namespace \totara_notification\webapi\resolver\mutation\ deprecated update_notification_preference::class
    use update_notification_preference_v2::class

Deprecated resolvers for deprecated notification_preference GraphQL queries:

  • namespace \totara_notification\webapi\resolver\query\
    deprecated event_resolvers::class
    use event_resolvers_v2::class

  • namespace \totara_notification\webapi\resolver\query\
    deprecated notification_preference::class
    use notification_preference_v2:class

  • namespace \totara_notification\webapi\resolver\query\
    deprecated notification_preferences::class
    use notification_preferences_v2::class

Deprecated resolvers for deprecated notification_preference GraphQL types:

  • namespace \totara_notification\webapi\resolver\type\
    deprecated event_resolver::class
    use event_resolver_v2:class

  • namespace \totara_notification\webapi\resolver\type\
    deprecated notification_preference::class
    use notification_preference_v2::class

Split single notification capability check into separate manage and audit capability checks:

  • class \totara_notification\factory\capability_factory
    deprecated get_capabilities()
    use get_manage_capabilities()
    or use get_audit_capabilities()

Weka

Deprecated passing "usage-identifier" prop to Weka.vue without also passing "variant".

Loading JSON_EDITOR node definitions from weka plugins has been deprecated, please create a "jsoneditor" plugin to contain the node definitions instead.

All area-specific variants (identifiable by containing a "-") have been deprecated and replaced with a small set of core variants.

The weka_simple_multi_lang\json_editor\node\lang_block(s) classes were renamed to jsoneditor_simple_multi_lang\json_editor\node\lang_block(s) as the node definitions were moved to a "jsoneditor" plugin.

Core

The generate_uuid() function has been deprecated in favour of \core\uuid::generate()

The workaround_max_input_vars() function has been deprecated with no replacement due to warnings in PHP 8+; there has been a required increase in the minimum max_input_vars PHP setting to compensate (some course activities use a large number of input variables)