diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 750ef479..95aa21c7 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -5,6 +5,16 @@ Changelog for the **SODAR Core** Django app package. Loosely follows the
`Keep a Changelog `_ guidelines.
+Unreleased
+==========
+
+Fixed
+-----
+
+- **Projectroles**
+ - Incorrect app plugin link order in ``get_project_app_links()`` (#1468)
+
+
v1.0.1 (2024-08-08)
===================
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 1a5db10f..75904be5 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -29,7 +29,7 @@
# The short X.Y version
version = '1.0'
# The full version, including alpha/beta/rc tags
-release = '1.0.1'
+release = '1.0.2-WIP'
# -- General configuration ---------------------------------------------------
diff --git a/docs/source/major_changes.rst b/docs/source/major_changes.rst
index a12f6819..aa01701a 100644
--- a/docs/source/major_changes.rst
+++ b/docs/source/major_changes.rst
@@ -10,6 +10,15 @@ older SODAR Core version. For a complete list of changes in current and previous
releases, see the :ref:`full changelog`.
+v1.0.2 (WIP)
+************
+
+Release Highlights
+==================
+
+TBA
+
+
v1.0.1 (2024-08-08)
*******************
diff --git a/projectroles/tests/test_templatetags.py b/projectroles/tests/test_templatetags.py
index 73297dfa..e84668d7 100644
--- a/projectroles/tests/test_templatetags.py
+++ b/projectroles/tests/test_templatetags.py
@@ -604,20 +604,6 @@ def test_get_sidebar_links_project_detail_view(self):
'icon': 'mdi:cube',
'active': True,
},
- {
- 'name': 'app-plugin-bgjobs',
- 'url': f'/bgjobs/list/{self.project.sodar_uuid}',
- 'label': 'Background Jobs',
- 'icon': 'mdi:server',
- 'active': False,
- },
- {
- 'name': 'app-plugin-example_project_app',
- 'url': f'/examples/project/{self.project.sodar_uuid}',
- 'label': 'Example Project App',
- 'icon': 'mdi:rocket-launch',
- 'active': False,
- },
{
'name': 'app-plugin-filesfolders',
'url': f'/files/{self.project.sodar_uuid}',
@@ -632,6 +618,20 @@ def test_get_sidebar_links_project_detail_view(self):
'icon': 'mdi:clock-time-eight',
'active': False,
},
+ {
+ 'name': 'app-plugin-bgjobs',
+ 'url': f'/bgjobs/list/{self.project.sodar_uuid}',
+ 'label': 'Background Jobs',
+ 'icon': 'mdi:server',
+ 'active': False,
+ },
+ {
+ 'name': 'app-plugin-example_project_app',
+ 'url': f'/examples/project/{self.project.sodar_uuid}',
+ 'label': 'Example Project App',
+ 'icon': 'mdi:rocket-launch',
+ 'active': False,
+ },
{
'name': 'project-roles',
'url': f'/project/members/{self.project.sodar_uuid}',
diff --git a/projectroles/tests/test_views_ajax.py b/projectroles/tests/test_views_ajax.py
index 1cd6acca..5a56a72a 100644
--- a/projectroles/tests/test_views_ajax.py
+++ b/projectroles/tests/test_views_ajax.py
@@ -625,20 +625,6 @@ def test_get(self):
'icon': 'mdi:cube',
'active': False,
},
- {
- 'name': 'app-plugin-bgjobs',
- 'url': f'/bgjobs/list/{self.project.sodar_uuid}',
- 'label': 'Background Jobs',
- 'icon': 'mdi:server',
- 'active': False,
- },
- {
- 'name': 'app-plugin-example_project_app',
- 'url': f'/examples/project/{self.project.sodar_uuid}',
- 'label': 'Example Project App',
- 'icon': 'mdi:rocket-launch',
- 'active': False,
- },
{
'name': 'app-plugin-filesfolders',
'url': f'/files/{self.project.sodar_uuid}',
@@ -653,6 +639,20 @@ def test_get(self):
'icon': 'mdi:clock-time-eight',
'active': False,
},
+ {
+ 'name': 'app-plugin-bgjobs',
+ 'url': f'/bgjobs/list/{self.project.sodar_uuid}',
+ 'label': 'Background Jobs',
+ 'icon': 'mdi:server',
+ 'active': False,
+ },
+ {
+ 'name': 'app-plugin-example_project_app',
+ 'url': f'/examples/project/{self.project.sodar_uuid}',
+ 'label': 'Example Project App',
+ 'icon': 'mdi:rocket-launch',
+ 'active': False,
+ },
{
'name': 'project-roles',
'url': f'/project/members/{self.project.sodar_uuid}',
@@ -691,20 +691,6 @@ def test_get_app_links(self):
'icon': 'mdi:cube',
'active': False,
},
- {
- 'name': 'app-plugin-bgjobs',
- 'url': f'/bgjobs/list/{self.project.sodar_uuid}',
- 'label': 'Background Jobs',
- 'icon': 'mdi:server',
- 'active': False,
- },
- {
- 'name': 'app-plugin-example_project_app',
- 'url': f'/examples/project/{self.project.sodar_uuid}',
- 'label': 'Example Project App',
- 'icon': 'mdi:rocket-launch',
- 'active': False,
- },
{
'name': 'app-plugin-filesfolders',
'url': f'/files/{self.project.sodar_uuid}',
@@ -719,6 +705,20 @@ def test_get_app_links(self):
'icon': 'mdi:clock-time-eight',
'active': False,
},
+ {
+ 'name': 'app-plugin-bgjobs',
+ 'url': f'/bgjobs/list/{self.project.sodar_uuid}',
+ 'label': 'Background Jobs',
+ 'icon': 'mdi:server',
+ 'active': False,
+ },
+ {
+ 'name': 'app-plugin-example_project_app',
+ 'url': f'/examples/project/{self.project.sodar_uuid}',
+ 'label': 'Example Project App',
+ 'icon': 'mdi:rocket-launch',
+ 'active': False,
+ },
{
'name': 'project-roles',
'url': f'/project/members/{self.project.sodar_uuid}',
diff --git a/projectroles/utils.py b/projectroles/utils.py
index d52645d3..0ad4e959 100644
--- a/projectroles/utils.py
+++ b/projectroles/utils.py
@@ -206,7 +206,7 @@ def get_project_app_links(
}
)
# Add app plugins links
- app_plugins = get_active_plugins()
+ app_plugins = get_active_plugins(custom_order=True)
for plugin in app_plugins:
if self._is_app_visible(plugin, project, user):
ret.append(