Release Notes - version 2.021.09

Hello, we’re happy to announce that a new version with some major features (and many smaller fixes!) was recently deployed:


  • A bulk-editing feature to facilitate data cleaning across many submissions
  • A new and improved way to create, share, and discover form content in the library through Public Collections
  • A method for project managers to quickly duplicate an existing submission into a new record

Note: some metadata is now required when sharing a collection publicly, with the hope that this encourages high-quality content, discourages accidental sharing, and makes it easier for others to discover what you’ve shared. If you find any of your public collections are no longer shared after this release, please share them again. You will receive a message asking you to enter any missing metadata if necessary.

New features and enhancements

PR Description Related Issues
#2559 Implement new public collections feature
This is the big feature from Enable users to organize and search for public library collections - #12 by mike.destaubin
Fixes #2293, #1282, #1860, #2157, #2586, #280, #2559, #2783, #2813
Fixes partially #1983
Closes #2332, #2381
#2941 Add user interface for new bulk submission edit feature
It can be accessed through Table View after checkbox-selecting multiple submissions/rows.
Part of #2760
Related to #2920
#2920 Add API support for bulk updating of submission
A shiny new feature that allows for the bulk editing/updating of a project’s submissions, to facilitate data cleaning.
Part of #2760
Closes #2929
#2928 Add user interface for new submission duplication feature Fixes #2896
#2897 Duplicate submissions feature
Implement the backend functionality and API endpoint for the duplication of a single submission.
closes #2893
closes #2894
#3021 Improve the experience of entering tags by adding clearer instructions, saving the last tag automatically (in case someone forgets to press ENTER after typing), preventing duplicate tags from being entered, and allowing comma-separated tags to be pasted into the input field
#2945 Allow non-owners to remove themselves from a shared asset
This change allows users with whom a project has been shared, but who cannot edit that project’s permissions, to remove themselves from the project. This feature was requested in the community forum.
closes #2940
#2851 Allow someone to clone a library item that’s part of a collection, even when they have read-only access to that collection. In this scenario, the cloned item goes into “My Library” of the person requesting the clone. Fixes #2836
#2830 Search more fields by default when no explicit search field is given. A term without a field will perform a case-insensitive, substring (partial) match on the following: summary (contains the labels of all questions), name, UID, owner’s username, tags, and description. Closes #2814

Bug fixes and other improvements

PR Description Related Issues
#3027 Make it possible to clone some old library items that have no associated versions by automatically creating a version if needed Closes #3020
#3026 Add a small “x” button for clearing filter header in the (previously unreleased) library table. Fixes #2996
#2978 Don’t display non-survey assets in the Projects list after they are created
Immediately after creating new Library Item (collection, template, etc.) it was showing up in the Projects List (/forms) under Drafts. Now it is properly filtered out by type.
Fixes #2976
#2955 Fix to allow for child assets to be visible in public collections when unsubscribed or non-owner
Allow the contents (child questions, blocks, and templates) of any discoverable, public collection to be visible in the list view to non-owners and those who have not subscribed to the collection.
Closes #2951
#2953 Show an “access denied” message instead of blocking actions in less obvious ways if someone manually constructs a URL to a view that they do not have permission to access Fixes #2655 #2944
#2949 Fix a crash in the auto report when a graph style override was saved with a non-English UI language.
Also fixes a related issue in unreleased public collections code where the projects list could crash when the UI language was not English.
#2886 Treat specifically-assigned permissions as an extension of rights given to anonymous users. For example, if a project has public data, then a user who only has explicit access to view that project’s form should still be able to access the public data. Fixes #2870
#2872 Add tweaks to the (previously unreleased) public collections feature
All the important functional fixes for Public Collections are included. And almost all of the visual changes from the designs are here.
Fixes #2833
Fixes #2735
#2796 Fix bulk library XLS imports (a way to import several questions and blocks at once), which had been broken after a pyxform upgrade. Fixes #2262

Of interest to self-hosters

PR Description Related Issues
#3034 Avoid resetting dates when migrating collections to assets
Preserve the creation and modification dates of collections when altering the database structure. If all goes well, this change has no visible effects.
Fixes #3033
#3008 Store ConfigurationFile content in a public place
Allow installations using local storage (not S3, which already worked) to customize logos and the login page background, by placing these image uploads in a publicly-accessible location
Closes #1738
Related to kobotoolbox/kobo-docker#175
#2862 Previously, when the trash icon in the UI was pressed to delete the export, the file remained in S3 or local storage. This change causes the file to be removed. Fixes #2253
#2861 Reduce service_health timeout from 45 seconds to 10 seconds Closees #2642

Of interest to devevelopers

PR Description Related Issues
#3042 Fix missing directory error when npm building
The first run of npm run build could fail because the translatable strings extractor would attempt to write its output to a file in a directory that didn’t exist yet.
#3041 Include all beta-tested changes (mainly public collections)
All changes here should be described already by individual PRs. This simply brings a variety of work into the master branch after beta testing on a staging server.
#3017 added multicheckbox component
Adds component that takes in an array of items to be displayed in a list with a checkbox.
#3015 Fix reports view returns a 500
Reports are broken in public collections branch.
#2986 Adds new Toggle switch component
ToggleSwitch component is introduced in a temporarily blocked PR #2946, moved here for faster use
TODO: After this is merged apply #2985 to this component
#2985 Common components directory
Moved Checkbox, TextBox and Radio components to js/components/common directory and updated all import paths to work.
#2979 Resolve differences between my merge and Olivier’s
Two developers independently resolved conflicts in a complex merge and then compared their results.
#2960 Fix infinitely loading form builder (as related to an unreleased change) Followup to #2958
#2958 Fix unreleased change that caused owners to not be able to edit their own forms :grimacing: Related to #2953
#2954 refactored query limit constant
Refactored constant in map.es6 that caused a circular dependency
#2952 Improve routes configuration
This is just a code cleanup that will allow to reuse routes in a safer way.
#2933 Refactor get_label_for_permission()
Fix a problem with fetching the label of a non-assignable permission
#2891 Fix an issue (in unreleased code) where switching between projects could cause some UI components not to load correctly Fixes #2885
#2887 Fix bulk library imports by renaming the “library” XLSForm worksheet to “survey” before processing with pyxform Part of #2262
#2882 Copy library route and store functionality to single collection view Fixes #2834
#2871 Delete users in both KPI and KoBoCAT databases at once (only when users have no data in their accounts; helpful for development and testing) Fixes #2509
#2867 Add double quotes to language filters and change filterBy type
Surrounds every filter with double quotes to avoid spacing issue for other filter types.

Semi-hacked double quotes around language all filteredValue query parameters just before sending the query as to avoid any bad interactions down the road (specifically checks for filteredValue in assetsTable)
Fixes #2866 but other filters can also trigger the same exception due to actually being less than 3 characters (not just a spacing issue): Organisations, Countries, for example
#2859 Make access_type an array
#2858 Give priority to collections on sorting with param collections_first
#2857 Removing nested children from asset detail endpoint
#2852 Adding __filtered_queryset variable to prevent double calls of filter_queryset()
#2849 (previously deployed) Stop scrolling to the bottom of the page when adding a new question in the form builder. This is the same fix as #2874 but applied to previously unreleased public collections code. Fixes #2837
#2845 Disable Django DEBUG by default when the appropriate environment variable has not been set
#2844 Rename member_since to date_joined for consistency in the user serializer
#2841 Added id’s of subscribed collection assets to permission filter
When querying for subscribed collections, right now ?=parent__uid:<some uid> returns nothing. As a temporary fix we union a query for all subscribed collection assets with a query for their parents
Part of #2832
#2840 Added failing test for getting subscribed collections
Added a failing test that checks if we can grab subscribed collection assets with its parent__uid
Part of #2832
#2839 Verify parent write access before moving a child from/to a collection.
#2828 Added ContentType import and fixed typo
#2818 Add tests for asset (collection) subscriptions
#2816 Simplify asset permissions
#2811 Optimization to load assets list endpoint
#2805 Update query parser parameters for front end
#2798 Fix bulk library imports by introducing a “less strict” XLS to dictionary converter that does not delete unrecognized worksheets. This approach was superseded by #2887. Part of #2262
#2580 Make collections a type of asset instead of a separate model
#2570 Store collections as a type of asset instead of a separate model
#2564 Accept WriteableJSON as dictionaries when PATCHing assets
#2555 Added asset subscription to API v2
#2547 Add sorting to Asset endpoint
#2534 Replaced ‘django.core.exceptions.ValidationError’ with ‘rest_framework.serializers.ValidationError’
#2531 Add public collection stats to user view
#2525 Add public collection related details to asset endpoints
1 Like