Added support for IndexNow.
Added ability to allow administrators to fire webhooks for specific events.
Added the ability to moderate or replace posted email addresses with an obfuscated placeholder in content.
Added the CSRF key to the dynamic chart delete link.
Implemented the banned IP addresses check for PBR content.
Improved the REST API self diagnostics test and returned errors.
Added few missing language strings for email stats.
Updated HTMLPurifier to 4.14.0.
Updated CKEditor to 4.17.1.
Improved security for iframe embedding.
Improved the default Robots.txt file to further increase crawl efficiency.
Improved error handling when unexpected errors are encountered in upgrader.
Fixed an issue where the AdminCP member history for posting restrictions may not show the correct length of time.
Fixed an issue where the ACP Moderator Stats can time out with too many moderators
Fixed an issue where cloud customers could see an incorrect cache error message.
Fixed an issue where Profile Settings would throw an error instead of showing a validation error.
Fixed an external link on the ACP gateway settings page to open in a new window.
Fixed an issue where the cleanup task would return an error when it was executed via a cron job because of the missing session.
Fixed an issue where awarding points or a badge wouldn't trigger the member sync and group promotion routines.
Fixed some missing headings and value formatting in statistic tables.
Fixed a display issue in the admin control panel for RSS import badges.
Fixed an issue where cloning groups could leave incorrect search index permissions.
Fixed sub-sub menu items showing in the wrong location when viewing the menu on mobile.
Fixed a niche issue when using Redis for view logging and the task runs before any views have been logged.
Fixed an issue where splitting multiple posts from a topic into a new one wouldn't update the search index properly.
Fixed an issue where banned members were shown in achievement widgets.
Fixed the broken link to status replies and comments inside the similar content widget.
Fixed an incorrect css variable (--dialog--boxSHadow).
Fixed an issue where copying an achievement rule wouldn't copy the additional language strings.
Fixed the duplicate rel attribute in the Twitter share widget.
Fixed an issue where personal messages were incorrectly awarded points.
Fixed an issue where streams limited by tags did not show any results when using Elastic Search.
Fixed an issue sending bulk mail when selecting one of the 'validating' options.
Fixed an issue where some AdminCP text editor tags may not show descriptions.
Fixed an issue where downloading a file may have the wrong filename when it has a long extension.
Fixed the style tag on the offline page.
Fixed an issue where banned and spammer member filter options were showing for bulk mail.
Fixed a missing language string in the related content widget.
Fixed an issue on the ACP - Social Media Promotion Page which returned the Permissions Warning even when no promotion services were available.
Fixed a broken language string on the re-authenticate login prompt.
Fixed social media promotion throwing an error if the Facebook or Twitter login handler is disabled.
Fixed an issue where hidden or non-approved content was shown in the "Similar Content" Elastic Search widget (note: it was only shown to those with permission to see it).
Fixed an issue where some emails may have two HTML wrappers.
Fixed an issue where moderator logs may show untranslated content types.
Fixed some issues upgrading from < 4.0.0 when using MySQL 8.0.2 or newer.
Fixed broken "reveal author" buttons when an anonymous user is deleted.
Fixed the broken ranks XML export.
Fixed an issue where streams configured to return only content items returned also comments and reviews.
Fixed the insert existing attachment page jump form not working in bulk mail.
Bing Sitemap Support was removed because they deprecated the service.
Fixed few issues in archived QA Topics.
Fixed an issue where the cleanup task could fail when cron was used to run the tasks.
Fixed an issue where expanding nodes in the advanced search form node selector element could be slow or time out.
Fixed an issue where achievement ranks and badges were not exporting using the correct language.
Fixed an issue where the Club::recountMembers() method would return the DB query instance instead of the value.
Fixed an issue where content may not be anonymized after deleting members.
Fixed some issues caused by badly formed dates in the leaderboard.
Fixed an issue with activity streams with the 'members I follow' filter on Elastic Search.
Fixed the breadcrumb navigation inside Clubs.
Fixed an issue where JSON-LD may not show an author for Q&A topics.
Fixed an issue where solved statistics may not show correctly.
Fixed an issue where it was possible to create a redirect forum without setting a redirect target.
Fixed an issue where 'Unmark as Solution' moderator log was missing the post id.
Fixed an issue where Tax wasn't shown in the subscription upgrade charge.
Fixed an issue where the 'new products' block on the Store page may not show accurate stock levels.
Fixed the HTML structure of the Featured Products widget, which previously resulted in a broken paragraph tag.
Fixed the customer page throwing an error if an application that implements a package type is uninstalled.
Removed stripe.js from non Commerce related pages.
Fixed an issue with submitting file links without uploading a file when multiple files are not allowed.
Fixed an issue where search for templates did not return the correct results.
Fixed an issue where turning on template editing diff reduces the size of the editor.
Fixed an error shown on the create event form when an invalid input date is provided.
Fixed an issue where the current date was not selected when creating an event from the day view.
Fixed a minor issue when converting soft deleted topics from MyBB.
REST & Webhooks
Added new webhooks which are fired when content is deleted.
Changes affecting third-party developers and designers
Added backticks to table names in update and delete queries.
Updated the method definition for changesForHistory() in MemberRestriction extensions.
Fixed an issue with the template Hextorgb plugin throwing an error.
The member_edited webhook will now only be fired if there are any data in the $changes parameter.
Changed the $useWrapper parameter in \IPS\Email::buildFromContent() to a class constant instead of bool.
Download this file