diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index de6385a6..8d410fd9 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -36,8 +36,7 @@ Added
- ``UserRetrieveAPIView`` REST API view (#1555)
- ``active`` arg in ``ProjectInviteMixin.make_invite()`` (#1403)
- Ability for users to leave project (#918)
- - ``project_list_highlight`` app setting (#1005)
- - ``PROJECTROLES_PROJECT_LIST_PAGINATION`` Django setting (#1005)
+ - ``project_list_highlight`` and ``project_list_pagination`` app settings (#1005)
Changed
-------
diff --git a/config/settings/base.py b/config/settings/base.py
index a1b6df15..e5ef8977 100644
--- a/config/settings/base.py
+++ b/config/settings/base.py
@@ -637,10 +637,6 @@ def set_logging(level=None):
# PROJECTROLES_BREADCRUMB_STICKY = True
# Custom message to be displayed if site read-only mode is enabled
PROJECTROLES_READ_ONLY_MSG = env.str('PROJECTROLES_READ_ONLY_MSG', None)
-# Default project list pagination page size
-PROJECTROLES_PROJECT_LIST_PAGINATION = env.int(
- 'PROJECTROLES_PROJECT_LIST_PAGINATION', 10
-)
# Hide project apps from the UI (sidebar, dropdown menus and project details)
PROJECTROLES_HIDE_PROJECT_APPS = env.list(
diff --git a/config/settings/test.py b/config/settings/test.py
index c1baee16..99bd6a76 100644
--- a/config/settings/test.py
+++ b/config/settings/test.py
@@ -130,7 +130,6 @@
PROJECTROLES_CUSTOM_JS_INCLUDES = []
PROJECTROLES_CUSTOM_CSS_INCLUDES = []
PROJECTROLES_SIDEBAR_ICON_SIZE = 36
-PROJECTROLES_PROJECT_LIST_PAGINATION = 10
# Bgjobs app settings
BGJOBS_PAGINATION = 15
diff --git a/projectroles/app_settings.py b/projectroles/app_settings.py
index 06c95dcf..e9b39b3e 100644
--- a/projectroles/app_settings.py
+++ b/projectroles/app_settings.py
@@ -47,6 +47,8 @@
APP_SETTING_SCOPE_PROJECT_USER: {'project': True, 'user': True},
APP_SETTING_SCOPE_SITE: {'project': False, 'user': False},
}
+# TODO: Add label for -1 once validation is fixed (see #1564, #1565)
+PROJECT_LIST_PAGE_OPTIONS = [10, 25, 50, 100, -1]
DELETE_SCOPE_ERR_MSG = 'Argument "{arg}" must be set for {scope} scope setting'
GLOBAL_PROJECT_ERR_MSG = (
'Overriding global settings for remote projects not allowed'
@@ -154,6 +156,17 @@
user_modifiable=True,
global_edit=True,
),
+ PluginAppSettingDef(
+ name='project_list_pagination',
+ scope=APP_SETTING_SCOPE_USER,
+ type=APP_SETTING_TYPE_INTEGER,
+ default=10,
+ label='Project list page size',
+ description='Amount of projects per page in the project list.',
+ options=PROJECT_LIST_PAGE_OPTIONS,
+ user_modifiable=True,
+ global_edit=True,
+ ),
]
diff --git a/projectroles/static/projectroles/js/project_list.js b/projectroles/static/projectroles/js/project_list.js
index 373ef05d..1abc6c2c 100644
--- a/projectroles/static/projectroles/js/project_list.js
+++ b/projectroles/static/projectroles/js/project_list.js
@@ -351,7 +351,18 @@ $(document).ready(function () {
'#sodar-pr-project-list').find('table').DataTable();
var value = parseInt($(this).val());
dt.page.len(value).draw();
- // TODO: Update user setting here
+ // Update user setting
+ $.ajax({
+ url: 'project/api/settings/set/user',
+ method: 'POST',
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify({
+ 'plugin_name': 'projectroles',
+ 'setting_name': 'project_list_pagination',
+ 'value': value
+ })
+ })
});
if (projectUuids.length > 0) {
diff --git a/projectroles/templates/projectroles/_project_list.html b/projectroles/templates/projectroles/_project_list.html
index 5e35b4c9..81098a3f 100644
--- a/projectroles/templates/projectroles/_project_list.html
+++ b/projectroles/templates/projectroles/_project_list.html
@@ -31,10 +31,8 @@
{% endif %}
- {# TODO: Get user setting instead #}
- {% get_django_setting 'PROJECTROLES_PROJECT_LIST_PAGINATION' 10 as list_pagination %}