From 4d0fedab1f03dcd427d6f20cbf00784b4dd1c4f9 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Thu, 25 Jul 2019 14:14:44 +0200 Subject: [PATCH] Fix #548: Mods can now change a library visibility through the admin UI --- api/funkwhale_api/manage/serializers.py | 9 +++++ api/funkwhale_api/manage/views.py | 1 + api/tests/manage/test_views.py | 12 +++++++ changes/changelog.d/548.enhancement | 1 + .../src/views/admin/library/LibraryDetail.vue | 34 +++++++++++++++++-- 5 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 changes/changelog.d/548.enhancement diff --git a/api/funkwhale_api/manage/serializers.py b/api/funkwhale_api/manage/serializers.py index 67e0178e0..be67f5068 100644 --- a/api/funkwhale_api/manage/serializers.py +++ b/api/funkwhale_api/manage/serializers.py @@ -500,6 +500,15 @@ class ManageLibrarySerializer(serializers.ModelSerializer): "followers_url", "actor", ] + read_only_fields = [ + "fid", + "uuid", + "id", + "url", + "domain", + "actor", + "creation_date", + ] def get_uploads_count(self, obj): return getattr(obj, "_uploads_count", obj.uploads_count) diff --git a/api/funkwhale_api/manage/views.py b/api/funkwhale_api/manage/views.py index c788dd96b..313cb681b 100644 --- a/api/funkwhale_api/manage/views.py +++ b/api/funkwhale_api/manage/views.py @@ -200,6 +200,7 @@ follows_subquery = ( class ManageLibraryViewSet( mixins.ListModelMixin, mixins.RetrieveModelMixin, + mixins.UpdateModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet, ): diff --git a/api/tests/manage/test_views.py b/api/tests/manage/test_views.py index 72394052c..c6571b04d 100644 --- a/api/tests/manage/test_views.py +++ b/api/tests/manage/test_views.py @@ -322,6 +322,18 @@ def test_library_detail(factories, superuser_api_client): assert response.data["id"] == library.id +def test_library_update(factories, superuser_api_client): + library = factories["music.Library"](privacy_level="public") + url = reverse( + "api:v1:manage:library:libraries-detail", kwargs={"uuid": library.uuid} + ) + response = superuser_api_client.patch(url, {"privacy_level": "me"}) + + assert response.status_code == 200 + library.refresh_from_db() + assert library.privacy_level == "me" + + def test_library_detail_stats(factories, superuser_api_client): library = factories["music.Library"]() url = reverse( diff --git a/changes/changelog.d/548.enhancement b/changes/changelog.d/548.enhancement new file mode 100644 index 000000000..99cd04941 --- /dev/null +++ b/changes/changelog.d/548.enhancement @@ -0,0 +1 @@ +Mods can now change a library visibility through the admin UI (#548) diff --git a/front/src/views/admin/library/LibraryDetail.vue b/front/src/views/admin/library/LibraryDetail.vue index beec7e2b4..db53bd2b5 100644 --- a/front/src/views/admin/library/LibraryDetail.vue +++ b/front/src/views/admin/library/LibraryDetail.vue @@ -96,7 +96,16 @@ - {{ sharedLabels.fields.privacy_level.shortChoices[object.privacy_level] }} + + @@ -308,7 +317,28 @@ export default { }, getQuery (field, value) { return `${field}:"${value}"` - } + }, + updateObj(attr, toNull) { + let newValue = this.object[attr] + if (toNull && !newValue) { + newValue = null + } + let params = {} + params[attr] = newValue + axios.patch(`manage/library/libraries/${this.id}/`, params).then( + response => { + logger.default.info( + `${attr} was updated succcessfully to ${newValue}` + ) + }, + error => { + logger.default.error( + `Error while setting ${attr} to ${newValue}`, + error + ) + } + ) + }, }, computed: { labels() {