Hello everyone,
We are happy to announce a new release of KoboToolbox!
This release consists of:
- KPI version 2.024.33
- Pyxform version 1.9.0, unchanged from the previous release
- Enketo version 6.2.2, unchanged from the previous release
New features
PR | Description |
---|---|
kpi#4970 | Improved support for RTL languages such as Arabic, Farsi, and Urdu Any user-generated text (survey responses, qualitative analysis responses, etc.) will now correctly display RTL text. This is done regardless of the language selected in user settings, e.g., Arabic text in an English UI will be displayed as RTL). |
kpi#5067 kpi#5065 kpi#5063 kpi#5071 kpi#5035 kpi#5066 |
Access Logs in API KoboToolbox now includes logging for all authentication events per account. Currently, these authentication logs can be accessed through the /api/v2/access-logs/ endpoint. These logs will be accessible through the UI soon. The retention period for the logs is configurable at the server level. These logs can be accessed by superusers for audit purposes through the api/v2/audit-log endpoint as well. |
kpi#5026 | Yoruba UI support for Yoruba was added thanks to our translator community. |
Bug fixes and improvements
PR | Description |
---|---|
kpi#5085 | Add missing field ASR_MT_GOOGLE_REQUEST_TIMEOUT to the constance config |
kpi#4996 | Limit the amount of different button colors. Changes some cancel-like buttons to use the same red color. |
kpi#5033 | Update colour palette to improve accessibility and to prepare for upcoming changes |
kpi#4993 | Update red Buttons to use dark-red for accessibility |
kpi#5017 | Update Archive Project button color |
kpi#5059 | Fix a bug causing translations to fail with large audio files |
kpi#5062 | Update the handling of subscription cancellation |
kpi#5060 | Fix an error in the code where we were checking for âsubscription_intervalâ instead of ârecurring_intervalâ on a subscription. |
kpi#5053 | Front-end adjustments to work with updated service_usage API |
kpi#5052 | Fix the date handling of default plans so that a user who cancels a paid subscription will now have a billing cycle anchored to the end of their subscription |
kpi#5058 | Fix background audio not displaying in Submission Modal |
kpi#5049 | Update conditional row level permissions wording |
kpi#5051 | Add toast error message for invalid email addresses when changing email |
kpi#5040 | Fixes UI elements spacing for automatic transcription flow. And fixes sharing form bug - after submitting user permissions, the editor was not closing. |
kpi#5030 | Allow only owners to be able to delete a shared project. |
kpi#5032 | Fix an error where renaming a group or moving a question into a group prevented the data from being displayed in the data table |
kpi#5024 | Fix infinite spinner happening when switching projects using sidebar |
kpi#5018 | Improve transfer projects UI |
kpi#5008 | Fix a timeout that was occurring when trying to view the table for a project view that was set to look at all countries. |
kpi#5013 | Reject 2FA activation with API when option is disabled for that account This PR includes a fix for the stripe module that made logins fail when Stripe is not enabled in the settings |
kpi#5009 | Fixes switching between submissions in Submission Modal in cases when previous/next submission was coming from previous/next page of Data Table results. Includes some internal code cleanup. |
kpi#4999 | Improve errors when a snapshot is not found instead of forcing login, so editing a submission will return a 404 instead of a 401 if the snapshot does not actually exist. |
kpi#5003 | Fix extra submission details so that they are copied over when a submission is duplicated |
kpi#4991 | Retrieve organization data only for logged-in users to prevent error messages |
kpi#4990 | Fixes Data Table styles after recent react-table update. Also slightly improves the looks of bulk checkbox button. |
kpi#4933 | Allow users to select between translated labels and XML names for displayed form questions in NLP UI |
kpi#4994 | Limits future usage of ASR and MT once user has reached their plan limit. |
kpi#4980 | Replace deprecated buttons with Button component with new ones |
kpi#4989 | Reject 2FA activation via API when option is disabled for that account |
kpi#4947 | Fix some bugs preventing async automated translations with Google. |
Of interest to developers
PR | Description |
---|---|
kpi#5064 | Add created_by and last_modified_by fields to asset model |
kpi#5076 | Fix audit_log import formatting |
kpi#5072 | Fix broken One-time-authentication tests |
kpi#5088 | Apply --no-install-recommends to OpenJDK install |
kpi#5012 | Update Node version to 20.17.0 for release builds, and run the front-end tests in Node 20 and 22 in CI. |
kpi#5001 | Set up React Query to simplify state management on new features. Install additional linter plugins and tools related to React and React Query. |
kpi#5048 | Health-check /service_health/minimal/ now skips all middleware. This allows health checks to bypass ALLOWED_HOSTS. |
kpi#5044 | Get source from requests Enable parsing the source (browser and OS) from a request. |
kpi#4884 | Supplement the existing âŚ/enketo/edit/ and âŚ/enketo/view/ endpoints, which return JSON responses that include Enketo URLs, with âŚ/enketo/redirect/edit/ and âŚ/enketo/redirect/view/ endpoints, which return HTTP 302 redirects to the Enketo URLs |
kpi#5039 | Refactor /api/v2/data endpoint |
kpi#5031 | Improve XML parsing with defusedxml |
kpi#5020 | Create an abstract model which provides date_created and date_modified fieldsRefactor existing models to inherit from the abstract model, replacing the individual date_created and date_modified fields. |
kpi#4899 | Add pages to Django app HTML requests for server errors (500) and page not found (404). |
kpi#4997 | Remove remnants of legacy Context API usage that was causing React 18 to show deprecation warnings in the developer console. Also removes the âprop-typesâ library and converts the reactCreateBemElement function to TypeScript. |
kpi#5016 | Alphabetize paginators file |
kpi#5000 | Update ESLint config to accept separate type imports in TS again |
kpi#4975 | Add provision_server management commandAutomates setup of social applications and constance configurations through running ./manage.py provision_server along with specified arguments. |
kpi#5004 | Use env.bool instead of brittle string matching for the SKIP_CELERY environment variable |
kpi#4992 | Upgrade to React 18 and related packages. |
kpi#4988 | Refactor constance setting assignments in tests to use override_config |
kpi#4985 | Update linters for VS Code, move files from kobo-common into kpi |