mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-02-22 00:49:35 -06:00
Oh we need to respect owner for migration
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
# from src-ui/src/app/data/ui-settings.ts
|
||||||
DASHBOARD_VIEWS_VISIBLE_IDS_KEY = (
|
DASHBOARD_VIEWS_VISIBLE_IDS_KEY = (
|
||||||
"general-settings:saved-views:dashboard-views-visible-ids"
|
"general-settings:saved-views:dashboard-views-visible-ids"
|
||||||
)
|
)
|
||||||
@@ -27,12 +28,19 @@ def _set_default_visibility_ids(apps, schema_editor):
|
|||||||
UiSettings = apps.get_model("documents", "UiSettings")
|
UiSettings = apps.get_model("documents", "UiSettings")
|
||||||
User = apps.get_model("auth", "User")
|
User = apps.get_model("auth", "User")
|
||||||
|
|
||||||
dashboard_visible_ids = list(
|
dashboard_visible_ids_by_owner: dict[int, list[int]] = {}
|
||||||
SavedView.objects.filter(show_on_dashboard=True).values_list("id", flat=True),
|
for owner_id, view_id in SavedView.objects.filter(
|
||||||
)
|
owner__isnull=False,
|
||||||
sidebar_visible_ids = list(
|
show_on_dashboard=True,
|
||||||
SavedView.objects.filter(show_in_sidebar=True).values_list("id", flat=True),
|
).values_list("owner_id", "id"):
|
||||||
)
|
dashboard_visible_ids_by_owner.setdefault(owner_id, []).append(view_id)
|
||||||
|
|
||||||
|
sidebar_visible_ids_by_owner: dict[int, list[int]] = {}
|
||||||
|
for owner_id, view_id in SavedView.objects.filter(
|
||||||
|
owner__isnull=False,
|
||||||
|
show_in_sidebar=True,
|
||||||
|
).values_list("owner_id", "id"):
|
||||||
|
sidebar_visible_ids_by_owner.setdefault(owner_id, []).append(view_id)
|
||||||
|
|
||||||
for user in User.objects.all():
|
for user in User.objects.all():
|
||||||
ui_settings, _ = UiSettings.objects.get_or_create(
|
ui_settings, _ = UiSettings.objects.get_or_create(
|
||||||
@@ -46,10 +54,14 @@ def _set_default_visibility_ids(apps, schema_editor):
|
|||||||
changed = False
|
changed = False
|
||||||
|
|
||||||
if current_settings.get(DASHBOARD_VIEWS_VISIBLE_IDS_KEY) is None:
|
if current_settings.get(DASHBOARD_VIEWS_VISIBLE_IDS_KEY) is None:
|
||||||
current_settings[DASHBOARD_VIEWS_VISIBLE_IDS_KEY] = dashboard_visible_ids
|
current_settings[DASHBOARD_VIEWS_VISIBLE_IDS_KEY] = (
|
||||||
|
dashboard_visible_ids_by_owner.get(user.id, [])
|
||||||
|
)
|
||||||
changed = True
|
changed = True
|
||||||
if current_settings.get(SIDEBAR_VIEWS_VISIBLE_IDS_KEY) is None:
|
if current_settings.get(SIDEBAR_VIEWS_VISIBLE_IDS_KEY) is None:
|
||||||
current_settings[SIDEBAR_VIEWS_VISIBLE_IDS_KEY] = sidebar_visible_ids
|
current_settings[SIDEBAR_VIEWS_VISIBLE_IDS_KEY] = (
|
||||||
|
sidebar_visible_ids_by_owner.get(user.id, [])
|
||||||
|
)
|
||||||
changed = True
|
changed = True
|
||||||
|
|
||||||
if changed:
|
if changed:
|
||||||
@@ -61,27 +73,33 @@ def _restore_visibility_fields(apps, schema_editor):
|
|||||||
SavedView = apps.get_model("documents", "SavedView")
|
SavedView = apps.get_model("documents", "SavedView")
|
||||||
UiSettings = apps.get_model("documents", "UiSettings")
|
UiSettings = apps.get_model("documents", "UiSettings")
|
||||||
|
|
||||||
dashboard_visible_ids = set()
|
dashboard_visible_ids_by_owner: dict[int, set[int]] = {}
|
||||||
sidebar_visible_ids = set()
|
sidebar_visible_ids_by_owner: dict[int, set[int]] = {}
|
||||||
|
|
||||||
for ui_settings in UiSettings.objects.all():
|
for ui_settings in UiSettings.objects.all():
|
||||||
current_settings = ui_settings.settings
|
current_settings = ui_settings.settings
|
||||||
if not isinstance(current_settings, dict):
|
if not isinstance(current_settings, dict):
|
||||||
continue
|
continue
|
||||||
dashboard_visible_ids.update(
|
dashboard_visible_ids_by_owner[ui_settings.user_id] = _parse_visible_ids(
|
||||||
_parse_visible_ids(current_settings.get(DASHBOARD_VIEWS_VISIBLE_IDS_KEY)),
|
current_settings.get(DASHBOARD_VIEWS_VISIBLE_IDS_KEY),
|
||||||
)
|
)
|
||||||
sidebar_visible_ids.update(
|
sidebar_visible_ids_by_owner[ui_settings.user_id] = _parse_visible_ids(
|
||||||
_parse_visible_ids(current_settings.get(SIDEBAR_VIEWS_VISIBLE_IDS_KEY)),
|
current_settings.get(SIDEBAR_VIEWS_VISIBLE_IDS_KEY),
|
||||||
)
|
)
|
||||||
|
|
||||||
SavedView.objects.update(show_on_dashboard=False, show_in_sidebar=False)
|
SavedView.objects.update(show_on_dashboard=False, show_in_sidebar=False)
|
||||||
if dashboard_visible_ids:
|
for owner_id, dashboard_visible_ids in dashboard_visible_ids_by_owner.items():
|
||||||
SavedView.objects.filter(id__in=dashboard_visible_ids).update(
|
if not dashboard_visible_ids:
|
||||||
|
continue
|
||||||
|
SavedView.objects.filter(
|
||||||
|
owner_id=owner_id,
|
||||||
|
id__in=dashboard_visible_ids,
|
||||||
|
).update(
|
||||||
show_on_dashboard=True,
|
show_on_dashboard=True,
|
||||||
)
|
)
|
||||||
if sidebar_visible_ids:
|
for owner_id, sidebar_visible_ids in sidebar_visible_ids_by_owner.items():
|
||||||
SavedView.objects.filter(id__in=sidebar_visible_ids).update(
|
if not sidebar_visible_ids:
|
||||||
|
continue
|
||||||
|
SavedView.objects.filter(owner_id=owner_id, id__in=sidebar_visible_ids).update(
|
||||||
show_in_sidebar=True,
|
show_in_sidebar=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ class TestMigrateSavedViewVisibilityToUiSettings(TestMigrations):
|
|||||||
|
|
||||||
self.user_with_empty_settings = User.objects.create(username="user1")
|
self.user_with_empty_settings = User.objects.create(username="user1")
|
||||||
self.user_with_existing_settings = User.objects.create(username="user2")
|
self.user_with_existing_settings = User.objects.create(username="user2")
|
||||||
self.user_without_settings = User.objects.create(username="user3")
|
self.user_with_owned_views = User.objects.create(username="user3")
|
||||||
self.user_with_empty_settings_id = self.user_with_empty_settings.id
|
self.user_with_empty_settings_id = self.user_with_empty_settings.id
|
||||||
self.user_with_existing_settings_id = self.user_with_existing_settings.id
|
self.user_with_existing_settings_id = self.user_with_existing_settings.id
|
||||||
self.user_without_settings_id = self.user_without_settings.id
|
self.user_with_owned_views_id = self.user_with_owned_views.id
|
||||||
|
|
||||||
self.dashboard_view = SavedView.objects.create(
|
self.dashboard_view = SavedView.objects.create(
|
||||||
owner=self.user_with_empty_settings,
|
owner=self.user_with_empty_settings,
|
||||||
@@ -43,6 +43,13 @@ class TestMigrateSavedViewVisibilityToUiSettings(TestMigrations):
|
|||||||
show_in_sidebar=False,
|
show_in_sidebar=False,
|
||||||
sort_field="created",
|
sort_field="created",
|
||||||
)
|
)
|
||||||
|
self.other_owner_visible_view = SavedView.objects.create(
|
||||||
|
owner=self.user_with_owned_views,
|
||||||
|
name="other-owner-visible",
|
||||||
|
show_on_dashboard=True,
|
||||||
|
show_in_sidebar=True,
|
||||||
|
sort_field="created",
|
||||||
|
)
|
||||||
|
|
||||||
UiSettings.objects.create(user=self.user_with_empty_settings, settings={})
|
UiSettings.objects.create(user=self.user_with_empty_settings, settings={})
|
||||||
UiSettings.objects.create(
|
UiSettings.objects.create(
|
||||||
@@ -83,15 +90,15 @@ class TestMigrateSavedViewVisibilityToUiSettings(TestMigrations):
|
|||||||
self.assertEqual(existing_settings["preserve"], "value")
|
self.assertEqual(existing_settings["preserve"], "value")
|
||||||
|
|
||||||
created_settings = UiSettings.objects.get(
|
created_settings = UiSettings.objects.get(
|
||||||
user_id=self.user_without_settings_id,
|
user_id=self.user_with_owned_views_id,
|
||||||
).settings
|
).settings
|
||||||
self.assertCountEqual(
|
self.assertCountEqual(
|
||||||
created_settings[DASHBOARD_VIEWS_VISIBLE_IDS_KEY],
|
created_settings[DASHBOARD_VIEWS_VISIBLE_IDS_KEY],
|
||||||
[self.dashboard_view.id],
|
[self.other_owner_visible_view.id],
|
||||||
)
|
)
|
||||||
self.assertCountEqual(
|
self.assertCountEqual(
|
||||||
created_settings[SIDEBAR_VIEWS_VISIBLE_IDS_KEY],
|
created_settings[SIDEBAR_VIEWS_VISIBLE_IDS_KEY],
|
||||||
[self.dashboard_view.id, self.sidebar_only_view.id],
|
[self.other_owner_visible_view.id],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -123,6 +130,11 @@ class TestReverseMigrateSavedViewVisibilityFromUiSettings(TestMigrations):
|
|||||||
name="view-3",
|
name="view-3",
|
||||||
sort_field="created",
|
sort_field="created",
|
||||||
)
|
)
|
||||||
|
self.view4 = SavedView.objects.create(
|
||||||
|
owner=user2,
|
||||||
|
name="view-4",
|
||||||
|
sort_field="created",
|
||||||
|
)
|
||||||
|
|
||||||
UiSettings.objects.create(
|
UiSettings.objects.create(
|
||||||
user=user1,
|
user=user1,
|
||||||
@@ -134,23 +146,30 @@ class TestReverseMigrateSavedViewVisibilityFromUiSettings(TestMigrations):
|
|||||||
UiSettings.objects.create(
|
UiSettings.objects.create(
|
||||||
user=user2,
|
user=user2,
|
||||||
settings={
|
settings={
|
||||||
DASHBOARD_VIEWS_VISIBLE_IDS_KEY: [self.view2.id, self.view3.id],
|
DASHBOARD_VIEWS_VISIBLE_IDS_KEY: [
|
||||||
SIDEBAR_VIEWS_VISIBLE_IDS_KEY: [],
|
self.view2.id,
|
||||||
|
self.view3.id,
|
||||||
|
self.view4.id,
|
||||||
|
],
|
||||||
|
SIDEBAR_VIEWS_VISIBLE_IDS_KEY: [self.view4.id],
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
UiSettings.objects.create(user=user3, settings={})
|
UiSettings.objects.create(user=user3, settings={})
|
||||||
|
|
||||||
def test_visibility_fields_restored_from_any_user_visibility(self) -> None:
|
def test_visibility_fields_restored_from_owner_visibility(self) -> None:
|
||||||
SavedView = self.apps.get_model("documents", "SavedView")
|
SavedView = self.apps.get_model("documents", "SavedView")
|
||||||
|
|
||||||
restored_view1 = SavedView.objects.get(pk=self.view1.id)
|
restored_view1 = SavedView.objects.get(pk=self.view1.id)
|
||||||
restored_view2 = SavedView.objects.get(pk=self.view2.id)
|
restored_view2 = SavedView.objects.get(pk=self.view2.id)
|
||||||
restored_view3 = SavedView.objects.get(pk=self.view3.id)
|
restored_view3 = SavedView.objects.get(pk=self.view3.id)
|
||||||
|
restored_view4 = SavedView.objects.get(pk=self.view4.id)
|
||||||
|
|
||||||
self.assertTrue(restored_view1.show_on_dashboard)
|
self.assertTrue(restored_view1.show_on_dashboard)
|
||||||
self.assertTrue(restored_view2.show_on_dashboard)
|
self.assertFalse(restored_view2.show_on_dashboard)
|
||||||
self.assertTrue(restored_view3.show_on_dashboard)
|
self.assertFalse(restored_view3.show_on_dashboard)
|
||||||
|
self.assertTrue(restored_view4.show_on_dashboard)
|
||||||
|
|
||||||
self.assertFalse(restored_view1.show_in_sidebar)
|
self.assertFalse(restored_view1.show_in_sidebar)
|
||||||
self.assertTrue(restored_view2.show_in_sidebar)
|
self.assertTrue(restored_view2.show_in_sidebar)
|
||||||
self.assertFalse(restored_view3.show_in_sidebar)
|
self.assertFalse(restored_view3.show_in_sidebar)
|
||||||
|
self.assertTrue(restored_view4.show_in_sidebar)
|
||||||
|
|||||||
Reference in New Issue
Block a user