Timestamps now show in correct time zone and more lists are sorted correctly

Security issues

The HTTP request handler read_config is now accessible by anonymous users when you're fetching global or site configuration. This fixes an issue with DrillPro apps on Servus.

Talkbook sounds were previously not available to d-bok reader because of a HTTP CORS issue. This should now be fixed.

All Unicode text input should now be normalized to the NFC form to avoid hard-to-notice comparison bugs.

New features

A new template handler, current_timezone is available, which includes the time zone value from the browser (or a default value if not yet set). The default time zone can be set with the global configuration variable timezone.

Enhancements

Timestamps are now shown in the time zone the user expects. This is implemented in the template handler human_date, which is used in most situations to display timestamps. Timestamps generated before this update will show up in the UTC time zone, regardless of what time zone the user uses. The current time zone is now shown in the standard footer template, allowing for easier time zone debugging.

The sort_object template handler now supports locale-aware sorting.

The unpack HTTP request handler now always dispatches to an async job.

The job queue has been reimplemented using Redis queue and distributed locking primitives.

New features

New request handler for images was added that make it possible to quickly measure the dimensions of a rectangle in an image which can be used directly in the findinpicture app. This handler is available in the edit top menu. A copy-to-clipboard button is also available which is focused after a selection is done. Some SVG images are not compatible with this rendering method and can't be properly measured. This issue might be fixed in a later update.

Added user client-side event tracking using HeapAnalytics.com. This can be selectively enabled for a site by setting the heap_analytics_id configuration variable.

When you're creating exercises (app-input objects) it is now possible to quickly look up the app you want to use with the app selector located next to the custom_init input box in the object editor.

Enhancements

The list_config request handler has been completely rewritten to use the new list_config template function.

Bugfixes

When new objects were created a warning about broken default permissions was shown. This should no longer happen if no default permissions are set.

Feature removals / deprecations

The object attributes structure, version and aggregation_level was removed, along with their backing database columns. They have never been used for anything useful. They were removed to save space and decrease user interface complexity.

Default permissions, CodeMirror editor improvements and bugfixes

New features

It's now possible to save a set of default permissions which will be applied whenever you create new objects or containers.

These permissions are also applied when you unpack zip files or upload files directly.

When you create voice recordings using the recorder app these default permissions are not applied.

If you unpack a zip file over existing content the permissions of the existing content will not be modified, although the content will be.

A button has been added to the metadata tab of the container and object editor to allow for generation of the LOM XML content. This should make it easier to add additional titles in other languages.

A help feature has been added to the CodeMirror editor. Press F1 while the cursor is inside the editor to access the help feature.

It's now possible to randomize and sort lines in the CodeMirror editor. You use the keys F8 and F9 respectively to perform these actions.

Enhancements

The current_timestamp template function now returns a DateTime instance instead of a string, allowing for more date math and other behavior. The returned timestamp always has the timezone set to UTC, instead of using local timezone. This does mean that users will see timestamps with an offset from what they're used to, but this can't be improved unless we have some way of gathering the time zone from the browser and storing it in the session (or cookies).

A lot of the behavior around adding and removing permissions to containers and objects has been changed. It should now be more consistent all over.

Some strings in the Spanish translation was updated.

Bugfixes

When the create_response template function was used and the CodeMirror editor was used, saving and sending in content was impossible. This has now been fixed.

HTTP redirects didn't include a CORS header, even if one was specified for the site. This has been fixed.

Feature removals / deprecations

Removed the old and unused get_isbn HTTP request handler.

You must be logged in to read or post comments

Rewritten create_response() feature and various other improvements

New features

The create_response() template function has been more or less completely rewritten. It is now rendered on the page instead of opening a new window/tab. It allows inline editing of a response object. This should improve useability for students quite a lot.

It is now possible to see how much blob storage space a user has consumed.

Enhancements

Added font-size option to the simple TinyMCE editor.

Improved message when object is saved and sent to supervisor.

When rendering origin object while editing a response object, the response is no longer shown in the dropdown, avoiding double display of the same content.

Inconsistent styles for info/warning/error messages has been cleaned up.

Test suite has been improved quite a lot. It can now be run in continuous integration services.

Bugfixes

The human_size() template function now works with the value 0.

Fixed issue with inconsistent padding/margin around some TinyMCE toolbar elements.

Feature removals / deprecations

Several JavaScript functions which are no longer in use have been removed: