Skip to content

Releases: rdmorganiser/rdmo

2.4.4

26 Mar 15:06
e77e2ca

Choose a tag to compare

How to upgrade

pip install --upgrade rdmo
python manage.py upgrade

Changelog 📔

Bug fixes 🐛

Due to a breaking change in Django Rest Framework 3.17.0 several bugs needed to be fixed (#1567):

  • Refactor REST_FRAMEWORK settings
  • Fix page serializers
  • Pin Django Rest Framework minor version

Milestones: 2.4.4

2.4.3

16 Mar 09:27
8737fb0

Choose a tag to compare

How to upgrade

pip install --upgrade rdmo
python manage.py upgrade

Changelog 📔

Update Mar 23, 2026 🚨

Due to an unfortunate update in Django Rest Framework (see #1567) it needs to be downgraded after installation or upgrade to work with RDMO 2.4.3:

pip install `djangorestframwork~=3.16.0`

Important ⚠️

Due to an error in our release process, RDMO 2.4.1 and RDMO 2.4.2 used an outdated Node.js
version to build the front-end assets.

Breaking changes ⚠️

(same as for RDMO 2.4.2)

Only if you use django-allauth, e.g. for the login with ORCID: The current django-allauth version does not trust the X-Forwarded-For header anymore (release note). The header for the IP of the client needs to be set manually in RDMO:

ALLAUTH_TRUSTED_CLIENT_IP_HEADER = "X-Forwarded-For"

Maintenance and Dependencies 🔧

  • Fix npm management script and build with correct node version.
  • Upgrade node from 22.16 to 22.22
  • Upgrade copy-webpack-plugin upgrade.

Milestones:
2.4.3

Commit history: 2.4.2...2.4.3

2.4.2

13 Mar 10:04
dce1f64

Choose a tag to compare

How to upgrade

pip install --upgrade rdmo
python manage.py upgrade

Changelog 📔

Breaking changes ⚠️

Only if you use django-allauth, e.g. for the login with ORCID: The current django-allauth version does not trust the X-Forwarded-For header anymore (release note). The header for the IP of the client needs to be set manually in RDMO:

ALLAUTH_TRUSTED_CLIENT_IP_HEADER = "X-Forwarded-For"

Maintenance and Dependencies 🔧

  • Revert copy-webpack-plugin upgrade, which caused missing static files in RDMO 2.4.1.
  • Add additional checks to build management script.

Commit history: 2.4.1...2.4.2

2.4.1

09 Mar 14:58
5f506b2

Choose a tag to compare

How to upgrade

pip install --upgrade rdmo
python manage.py upgrade

Changelog 📔

Breaking changes ⚠️

  • Plugins should now use the signals in rdmo/projects/signals.py instead of post_save of the Value model, since
    the latter will trigger when copying projects or creating snapshots, which leads to unintended creation of
    Value instances (see rdmorganiser/rdmo-plugins-orcid#2).

Bug fixes 🐛

  • Fix filtering of tasks and views when creating new projects and refactor sync functionality (#1518).
  • Fix removal of blank inputs in the interview (#1532).
  • Fix manual input of dates in the date picker widget in the interview and the filter in the projects table (#1539).
  • Fix catalog export template.
  • Fix timestamps of snapshots in copied projects: Snapshots and values will keep their original
    created timestamp, but will update their updated timestamp.

Commit history: 2.4.0...2.4.1

2.4.0

15 Dec 09:55
cda25ed

Choose a tag to compare

How to upgrade

pip install --upgrade rdmo
python manage.py upgrade

Changelog 📔

Main improvements ⭐

  • Rewrite progress bar and navigation using a new AnswerTree class (#1346)
  • Allow links in select dropdown by optionset provider plugins (#1408)

Breaking changes ⚠️

  • The filtering behaviour of sites in a multisite setup for catalogs, tasks and views was changed (#1488).
    From now on, but only when settings.MULTISITE = True, a catalog that does not have any sites associated
    with it will not be available to any site. Before those catalogs were available to all sites. For non-multisite
    instances, this behaviour will not change. A data migration for catalogs is included in this release, so that
    no extra action is required when updating.
  • The rules is_editor_for_current_site and is_reviewer_for_current_site (which might be used in templates) were
    removed and the equivalent is_editor and is_reviewer can be used instead (#1431).

Bug fixes 🐛

  • Fix a bug with the autosave of checkboxes, radio buttons and additional input (#1406)
  • Fix a bug where text and icons overlap in the interview (#1398)
  • Fix datepicker date conversion in interview (#1465)
  • Fix a bug with legacy management permissions and disable the latter in a multisite setup (#1425)
  • Fix a bug with verbose name that contain a space (#1453)
  • Fix a bug with site availability of catalogs in a multisite setup (#1481)

Translations 🌍

  • Consistent naming of "Tabs" in every language (#1459)
  • Language improvements in the French localisation (#1397)
  • Several minor fixes (#1411, #1424)

Maintenance and Dependencies 🔧

  • Drop support for Python 3.9
  • Add all and recommended dependency groups
  • Ignore fewer ruff rules (B007, B006, B018)
  • Use zizmor to harden CI setup
  • Update poedit management script to work on macOS
  • Add checks for shibboleth setup (#1407)
  • Add cookies to window (#1473)
  • Use dynamic versioning (#1486)

Milestones: 2.3.3, 2.4.0

Commit history: 2.3.2...2.4.0

2.3.2

04 Jul 14:55

Choose a tag to compare

How to upgrade

pip install --upgrade rdmo
python manage.py upgrade

Changelog 📔

RDMO 2.3.2 (July 4, 2025)

  • Improve ORCID branding display and social connections page (#1376)
  • Hide management panels by default (#1377)
  • Fix sets in the interview (#1367)
  • Fix copy value and apply only to empty sets (#1384)
  • Fix compute progress for non-empty values (#1374)
  • Fix bugs in sync of project tasks and views (#1362)
    • Added management command ./manage.py sync_projects, with flags --tasks, --views or --show
  • Fix scroll focus (#1372)
  • Fix options in project export (use uri_path)
  • Fix historical typo in naming of QuerySet classes
  • Add a PNG version of the logo

Maintenance and Dependencies 🔧

  • Removed dependency on pytz from management commands (#1382)
  • Refactor export tests and include tests code in coverage (#1319)
  • Update NodeJS version to 22 LTS (#1371)

Important changes to templates 🔧

In RDMO 2.3.0, we made changes to the core/base.html template. If changed this file in you local theme you need to update it accordingly. At the top, the current language is set at an attribute to <html>:

{% load static compress core_tags i18n %}{% get_current_language as lang_code %}<!DOCTYPE html>
<html lang="{{ lang_code }}">

The {% block vendor %} needs to be removed.

The {% block css %} now looks like this:

    {% block css %}
    <link rel="stylesheet" href="{% static 'core/css/base.css' %}" />

    {% compress css %}
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/base.scss' %}" />
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/fonts.scss' %}" />
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/footer.scss' %}" />

    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/style.scss' %}" />
    {% endcompress %}

    {% endblock %}

And the {% block js %} now looks like this:

    {% block js %}
    <script src="{% url 'javascript-catalog' %}"></script>
    <script src="{% static 'core/js/base.js' %}"></script>
    {% endblock %}

See https://github.com/rdmorganiser/rdmo/blob/2.3.0/rdmo/core/templates/core/base.html for the file in the 2.3.0 branch.

We also changed slightly changed the projects/project_detail_sidebar.html template. If changed this file in you local theme you need to update it and change the url name project_question to project_interview:

...
<ul class="list-unstyled">
    <li id="project-questions">
        <strong>
            {% if can_change_value %}
            <a href="{% url 'project_interview' project.pk %}">{% trans 'Answer questions' %}</a>
            {% else %}
            <a href="{% url 'project_interview' project.pk %}">{% trans 'View questions' %}</a>
            {% endif %}
        </strong>
    </li>
</ul>
...

2.3.1

16 May 15:17
d31198a

Choose a tag to compare

How to upgrade

pip install --upgrade rdmo
python manage.py upgrade

Changelog 📔

RDMO 2.3.1 (May 16, 2025)

  • Allow / in the URI path of conditions, tasks, and views (#1316)
  • Add /api/v1/projects/projects/user/ endpoint and refactor/fix projects table (#1318)
  • Add options endpoint to API list (#1313)
  • Use ACCOUNT_SIGNUP_FIELDS instead of ACCOUNT_EMAIL_REQUIRED (#1322)
  • Use SESSION_COOKIE_* settings for store_id cookie (#1321)
  • Fix translations (#1317)
  • Fix badge-optional and move interview-block-options
  • Improve styling for empty question sets (without questions)
  • Clean tags and special html characters in contact message
  • Fix interview management panels by fixing configureStore (#1314)
  • Fix copy of elements in management interface for multisite (#1339)
  • Fix bug when reference documents are configured as strings (#1341)
  • Fix bug in display of warnings at import of catalog elements (#1340)
  • Fix bug in display of value and unit in range slider (#1353)
  • Fix the resolving of multiple conditional questions in interview
  • Fix bug with the back button and conditions
  • Fix jumping of cursor when values are stored in the interview
  • Fix {more} functionality (#1351)
  • Fix focus in interview and scroll to top when changing pages
  • Update dependencies

Important changes to templates 🔧

In RDMO 2.3.0, we made changes to the core/base.html template. If changed this file in you local theme you need to update it accordingly. At the top, the current language is set at an attribute to <html>:

{% load static compress core_tags i18n %}{% get_current_language as lang_code %}<!DOCTYPE html>
<html lang="{{ lang_code }}">

The {% block vendor %} needs to be removed.

The {% block css %} now looks like this:

    {% block css %}
    <link rel="stylesheet" href="{% static 'core/css/base.css' %}" />

    {% compress css %}
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/base.scss' %}" />
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/fonts.scss' %}" />
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/footer.scss' %}" />

    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/style.scss' %}" />
    {% endcompress %}

    {% endblock %}

And the {% block js %} now looks like this:

    {% block js %}
    <script src="{% url 'javascript-catalog' %}"></script>
    <script src="{% static 'core/js/base.js' %}"></script>
    {% endblock %}

See https://github.com/rdmorganiser/rdmo/blob/2.3.0/rdmo/core/templates/core/base.html for the file in the 2.3.0 branch.

We also changed slightly changed the projects/project_detail_sidebar.html template. If changed this file in you local theme you need to update it and change the url name project_question to project_interview:

...
<ul class="list-unstyled">
    <li id="project-questions">
        <strong>
            {% if can_change_value %}
            <a href="{% url 'project_interview' project.pk %}">{% trans 'Answer questions' %}</a>
            {% else %}
            <a href="{% url 'project_interview' project.pk %}">{% trans 'View questions' %}</a>
            {% endif %}
        </strong>
    </li>
</ul>
...

2.3.0

11 Apr 13:49
1d29d96

Choose a tag to compare

How to upgrade

pip install --upgrade rdmo
python manage.py upgrade

Changelog 📔

  • Add new interview interface based on React and Redux (#518)
    • Text and Textarea widgets are now saved automatically
    • Select dropdown widgets are now always searchable
    • Show the unit of a question next to the answer field (#499)
    • Tabs (e.g. Datasets) and single values can be reused in different projects.
    • An "Apply to all" button can be used to paste information into all the tabs.
    • Remove custom widgets feature (remove QUESTIONS_WIDGETS from settings)
    • Fix several issues regarding the interview (#501, #224, #1191)
    • Display attributes in interview to admins, editors, reviewers (#224)
    • Improve accessibility (#514, #1199)
  • Add the possibility to copy a project including all its values.
  • Add the option to make a project "visible" to all users (#152).
    • Users interact with visible projects as if they would have the Guest role.
    • With the new review feature, this can be used for templates for projects and datasets.
    • Sites and groups can be used to restrict this behaviour.
    • This feature is enabled by default via the PROJECT_VISIBILITY setting
  • Add a contact form modal to each question to contact support (#502)
    • PROJECT_CONTACT = True and PROJECT_CONTACT_RECIPIENTS = [list of email strings]
      enable this feature
  • Add signal handlers to automatically sync of project views and tasks (#345, #966, #1198)
    • When PROJECT_VIEWS_SYNC = True or PROJECT_TASKS_SYNC = True is set, the views or
      tasks for a project are automatically synchronized, depending on the
      catalogs configured for them.
  • Add snapshot export plugins (which work like project export plugins)
    • Add PROJECT_SNAPSHOT_EXPORTS to settings to register snapshot export plugins
  • Refactor the accept field for project import plugins
    • The field is now a dict of the form {'content_type': ['suffix']}
    • The old form should still work
  • Add rdmo.accounts.middleware.TermsAndConditionsRedirectMiddleware' (#141, #161)
    • The (optional) middleware checks if a user has already confirmed the Terms of use.
    • If not, users need to confirm to proceed.
    • Optionally, when a confirmation renewal is required, the ACCOUNT_TERMS_OF_USE_DATE = '2025-02-25'
      can be set to invalidate previous confirmations.
  • Add rdmo-admin script
    • rdmo-admin npm run [build:prod|build|watch] can be used to build the front end
    • rdmo-admin build can be used to build the python package
    • rdmo-admin messages [make|compile] can be used create and compile the translations
    • rdmo-admin clean can be used remove most files which are not version controlled
  • Add the support for custom markdown templates injected into help texts
    • The code {{ code }} is replaced by a template specified in the MARKDOWN_TEMPLATES setting
    • The `TEMPLATES_EXECUTE_SCRIPT_TAGS' setting controls whether Java script code can be executed.
  • Add minimum required version to RDMO XML exports (#1205).
  • Use the uri instead of path for attributes in the Django admin interface.
  • Fix a set of bugs where the maximum length of a field was not correctly validated by the API.
  • Use lualatex when using Pandoc >= 3.0.
  • Remove the download_vendor_files step of the setup
    • Remove VENDOR and VENDOR_CDN from settings.
  • Remove django-rest-swagger dependency and add drf-spectacular as an optional dependency.
    • Can be installed with pip install rdmo[openapi].
  • Update Python and JavaScript dependencies.
  • Drop support for Python 3.8.

Breaking Changes ⚠️

Maintenance 🛠️

  • webpack: added build:dist, fails on non-performance warnings (#1197)

Important changes to rdmo-app 🔧

Since django-swagger is not used anymore, it needs to be removed from the urlpatterns in config/urls.py.

urlpatterns = [
    ...
    path('api/v1/', include('rdmo.core.urls.swagger')),  <- remove this line
    ...
]

How to setup the new, optional drf-spectacular interface is described here: https://rdmo.readthedocs.io/en/latest/configuration/openapi.html.

Important changes to templates 🔧

In RDMO 2.3.0, we made changes to the core/base.html template. If changed this file in you local theme you need to update it accordingly. At the top, the current language is set at an attribute to <html>:

{% load static compress core_tags i18n %}{% get_current_language as lang_code %}<!DOCTYPE html>
<html lang="{{ lang_code }}">

The {% block vendor %} needs to be removed.

The {% block css %} now looks like this:

    {% block css %}
    <link rel="stylesheet" href="{% static 'core/css/base.css' %}" />

    {% compress css %}
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/base.scss' %}" />
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/fonts.scss' %}" />
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/footer.scss' %}" />

    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/style.scss' %}" />
    {% endcompress %}

    {% endblock %}

And the {% block js %} now looks like this:

    {% block js %}
    <script src="{% url 'javascript-catalog' %}"></script>
    <script src="{% static 'core/js/base.js' %}"></script>
    {% endblock %}

See https://github.com/rdmorganiser/rdmo/blob/2.3.0/rdmo/core/templates/core/base.html for the file in the 2.3.0 branch.

We also changed slightly changed the projects/project_detail_sidebar.html template. If changed this file in you local theme you need to update it and change the url name project_question to project_interview:

...
<ul class="list-unstyled">
    <li id="project-questions">
        <strong>
            {% if can_change_value %}
            <a href="{% url 'project_interview' project.pk %}">{% trans 'Answer questions' %}</a>
            {% else %}
            <a href="{% url 'project_interview' project.pk %}">{% trans 'View questions' %}</a>
            {% endif %}
        </strong>
    </li>
</ul>
...

2.3.0rc2

20 Mar 12:34

Choose a tag to compare

2.3.0rc2 Pre-release
Pre-release

How to upgrade

pip install --upgrade rdmo==2.3.0rc2
python manage.py upgrade

Important changes to templates

In RDMO 2.3.0, we made changes to the core/base.html template. If changed this file in you local theme you need to update it accordingly. At the top, the current language is set at an attribute to <html>:

{% load static compress core_tags i18n %}{% get_current_language as lang_code %}<!DOCTYPE html>
<html lang="{{ lang_code }}">

The {% block vendor %} needs to be removed.

The {% block css %} now looks like this:

    {% block css %}
    <link rel="stylesheet" href="{% static 'core/css/base.css' %}" />

    {% compress css %}
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/base.scss' %}" />
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/fonts.scss' %}" />
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/footer.scss' %}" />

    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/style.scss' %}" />
    {% endcompress %}

    {% endblock %}

And the {% block js %} now looks like this:

    {% block js %}
    <script src="{% url 'javascript-catalog' %}"></script>
    <script src="{% static 'core/js/base.js' %}"></script>
    {% endblock %}

See https://github.com/rdmorganiser/rdmo/blob/2.3.0/rdmo/core/templates/core/base.html for the file in the 2.3.0 branch.

We also changed slightly changed the projects/project_detail_sidebar.html template. If changed this file in you local theme you need to update it and change the url name project_question to project_interview:

...
<ul class="list-unstyled">
    <li id="project-questions">
        <strong>
            {% if can_change_value %}
            <a href="{% url 'project_interview' project.pk %}">{% trans 'Answer questions' %}</a>
            {% else %}
            <a href="{% url 'project_interview' project.pk %}">{% trans 'View questions' %}</a>
            {% endif %}
        </strong>
    </li>
</ul>
...

Changelog

  • Add new interview interface based on React and Redux (#518)
    • Text and Textarea widgets are now saved automatically
    • Select dropdown widgets are now always searchable
    • Show the unit of a question next to the answer field (#499)
    • Tabs (e.g. Datasets) and single values can be reused in different projects.
    • An "Apply to all" button can be used to paste information into all the tabs.
    • Remove custom widgets feature (remove QUESTIONS_WIDGETS from settings)
    • Fix several issues regarding the interview (#501, #224, #1191)
    • Display attributes in interview to admins, editors, reviewers (#224)
    • Improve accessibility (#514, #1199)
  • Add the possibility to copy a project including all its values.
  • Add the option to make a project "visible" to all users (#152).
    • Users interact with visible projects as if they would have the Guest role.
    • With the new review feature, this can be used for templates for projects and datasets.
    • Sites and groups can be used to restrict this behaviour.
    • This feature is enabled by default via the PROJECT_VISIBILITY setting
  • Add a contact form modal to each question to contact support (#502)
    • PROJECT_CONTACT = True and PROJECT_CONTACT_RECIPIENTS = [list of email strings]
      enable this feature
  • Add signal handlers to automatically sync of project views and tasks (#345, #966, #1198)
    • When PROJECT_VIEWS_SYNC = True or PROJECT_TASKS_SYNC = True is set, the views or
      tasks for a project are automatically synchronized, depending on the
      catalogs configured for them.
  • Add snapshot export plugins (which work like project export plugins)
    • Add PROJECT_SNAPSHOT_EXPORTS to settings to register snapshot export plugins
  • Refactor the accept field for project import plugins
    • The field is now a dict of the form {'content_type': ['suffix']}
    • The old form should still work
  • Add rdmo.accounts.middleware.TermsAndConditionsRedirectMiddleware' (#141, #161)
    • The (optional) middleware checks if a user has already confirmed the Terms of use.
    • If not, users need to confirm to proceed.
    • Optionally, when a confirmation renewal is required, the ACCOUNT_TERMS_OF_USE_DATE = '2025-02-25'
      can be set to invalidate previous confirmations.
  • Add rdmo-admin script
    • rdmo-admin npm run [build:prod|build|watch] can be used to build the front end
    • rdmo-admin build can be used to build the python package
    • rdmo-admin messages [make|compile] can be used create and compile the translations
    • rdmo-admin clean can be used remove most files which are not version controlled
  • Add the support for custom markdown templates injected into help texts
    • The code {{ code }} is replaced by a template specified in the MARKDOWN_TEMPLATES setting
    • The `TEMPLATES_EXECUTE_SCRIPT_TAGS' setting controls whether Java script code can be executed.
  • Add minimum required version to RDMO XML exports (#1205).
  • Use the uri instead of path for attributes in the Django admin interface.
  • Fix a set of bugs where the maximum length of a field was not correctly validated by the API.
  • Use lualatex when using Pandoc >= 3.0.
  • Remove the download_vendor_files step of the setup
    • Remove VENDOR and VENDOR_CDN from settings.
  • Remove PROJECT_QUESTIONS_AUTOSAVE and PROJECT_QUESTIONS_CYCLE_SETS.
  • Update Python and JavaScript dependencies.
  • Drop support for Python 3.8.

2.3.0rc1

28 Feb 11:54
afee934

Choose a tag to compare

2.3.0rc1 Pre-release
Pre-release

How to upgrade

pip install --upgrade rdmo==2.3.0rc1
python manage.py upgrade

Important changes to templates

In RDMO 2.3.0, we made changes to the core/base.html template. If changed this file in you local theme you need to update it accordingly. At the top, the current language is set at an attribute to <html>:

{% load static compress core_tags i18n %}{% get_current_language as lang_code %}<!DOCTYPE html>
<html lang="{{ lang_code }}">

The {% block vendor %} needs to be removed.

The {% block css %} now looks like this:

    {% block css %}
    <link rel="stylesheet" href="{% static 'core/css/base.css' %}" />

    {% compress css %}
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/base.scss' %}" />
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/fonts.scss' %}" />
    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/footer.scss' %}" />

    <link rel="stylesheet" type="text/x-scss" href="{% static 'core/css/style.scss' %}" />
    {% endcompress %}

    {% endblock %}

And the {% block js %} now looks like this:

    {% block js %}
    <script src="{% url 'javascript-catalog' %}"></script>
    <script src="{% static 'core/js/base.js' %}"></script>
    {% endblock %}

See https://github.com/rdmorganiser/rdmo/blob/2.3.0/rdmo/core/templates/core/base.html for the file in the 2.3.0 branch.

We also changed slightly changed the projects/project_detail_sidebar.html template. If changed this file in you local theme you need to update it and change the url name project_question to project_interview:

...
<ul class="list-unstyled">
    <li id="project-questions">
        <strong>
            {% if can_change_value %}
            <a href="{% url 'project_interview' project.pk %}">{% trans 'Answer questions' %}</a>
            {% else %}
            <a href="{% url 'project_interview' project.pk %}">{% trans 'View questions' %}</a>
            {% endif %}
        </strong>
    </li>
</ul>
...

Changelog

  • Add new interview interface based on React and Redux (#518)
    • Text and Textarea widgets are now saved automatically
    • Select dropdown widgets are now always searchable
    • Show the unit of a question next to the answer field (#499)
    • Tabs (e.g. Datasets) and single values can be reused in different projects.
    • An "Apply to all" button can be used to paste information into all the tabs.
    • Remove custom widgets feature (remove QUESTIONS_WIDGETS from settings)
    • Fix several issues regarding the interview (#501, #224, #1191)
    • Display attributes in interview to admins, editors, reviewers (#224)
    • Improve accessibility (#514, #1199)
  • Add the possibility to copy a project including all its values.
  • Add the option to make a project "visible" to all users (#152).
    • Users interact with visible projects as if they would have the Guest role.
    • With the new review feature, this can be used for templates for projects and datasets.
    • Sites and groups can be used to restrict this behaviour.
    • This feature is enabled by default via the PROJECT_VISIBILITY setting
  • Add a contact form modal to each question to contact support (#502)
    • PROJECT_CONTACT = True and PROJECT_CONTACT_RECIPIENTS = [list of email strings]
      enable this feature
  • Add signal handlers to automatically sync of project views and tasks (#345, #966, #1198)
    • When PROJECT_VIEWS_SYNC = True or PROJECT_TASKS_SYNC = True is set, the views or
      tasks for a project are automatically synchronized, depending on the
      catalogs configured for them.
  • Add snapshot export plugins (which work like project export plugins)
    • Add PROJECT_SNAPSHOT_EXPORTS to settings to register snapshot export plugins
  • Refactor the accept field for project import plugins
    • The field is now a dict of the form {'content_type': ['suffix']}
    • The old form should still work
  • Add rdmo.accounts.middleware.TermsAndConditionsRedirectMiddleware' (#141, #161)
    • The (optional) middleware checks if a user has already confirmed the Terms of use.
    • If not, users need to confirm to proceed.
    • Optionally, when a confirmation renewal is required, the ACCOUNT_TERMS_OF_USE_DATE = '2025-02-25'
      can be set to invalidate previous confirmations.
  • Add rdmo-admin script
    • rdmo-admin npm run [build:prod|build|watch] can be used to build the front end
    • rdmo-admin build can be used to build the python package
    • rdmo-admin messages [make|compile] can be used create and compile the translations
    • rdmo-admin clean can be used remove most files which are not version controlled
  • Add the support for custom markdown templates injected into help texts
    • The code {{ code }} is replaced by a template specified in the MARKDOWN_TEMPLATES setting
    • The `TEMPLATES_EXECUTE_SCRIPT_TAGS' setting controls whether Java script code can be executed.
  • Add minimum required version to RDMO XML exports (#1205).
  • Use the uri instead of path for attributes in the Django admin interface.
  • Fix a set of bugs where the maximum length of a field was not correctly validated by the API.
  • Use lualatex when using Pandoc >= 3.0.
  • Remove the download_vendor_files step of the setup
    • Remove VENDOR and VENDOR_CDN from settings.
  • Remove PROJECT_QUESTIONS_AUTOSAVE and PROJECT_QUESTIONS_CYCLE_SETS.
  • Update Python and JavaScript dependencies.
  • Drop support for Python 3.8.