display redirectslugs correctly

This commit is contained in:
Laura Klünder 2024-08-26 20:46:12 +02:00
parent 1055adb27c
commit f04475672f
2 changed files with 34 additions and 1 deletions

View file

@ -379,7 +379,8 @@ class ChangeSet(models.Model):
"""
Get the number of changed objects.
"""
return len(self.changes.changed_objects)
return len([changed_object for changed_object in self.changes.changed_objects
if changed_object.obj.model != "locationredirect"])
def get_changed_objects_by_model(self, model):
if isinstance(model, str):

View file

@ -15,6 +15,8 @@ from c3nav.editor.forms import ChangeSetForm, RejectForm, get_editor_form
from c3nav.editor.models import ChangeSet
from c3nav.editor.views.base import sidebar_view
from c3nav.mapdata.fields import I18nField
from c3nav.mapdata.models import LocationSlug
from c3nav.mapdata.models.locations import LocationRedirect
@sidebar_view(select_related=('last_update', 'last_state_update', 'last_change', 'author'))
@ -203,10 +205,24 @@ def changeset_detail(request, pk):
# redirect_changed_objects = []
# todo: display redirects nicely
added_redirects = {}
removed_redirects = {}
for changed_object in changeset.changes.changed_objects:
if changed_object.obj.model == "locationredirect":
if changed_object.created and not changed_object.deleted:
added_redirects.setdefault(changed_object.fields["target"], set()).add(changed_object.fields["slug"])
elif changed_object.deleted:
orig_values = changeset.changes.prev_values["locationredirect"][changed_object.obj.id]
removed_redirects.setdefault(orig_values["target"], set()).add(orig_values["slug"])
else:
raise ValueError # dafuq? not possibile through the editor
current_lang = get_language()
for changed_object in changeset.changes.changed_objects:
model = apps.get_model("mapdata", changed_object.obj.model)
if model == LocationRedirect:
continue
changes = []
title = None
@ -322,6 +338,22 @@ def changeset_detail(request, pk):
'value': item,
})
if issubclass(model, LocationSlug):
for slug in added_redirects.get(changed_object.obj.id, ()):
changes.append({
'icon': 'chevron-right',
'class': 'info',
'title': _('Redirect slugs'),
'value': slug,
})
for slug in removed_redirects.get(changed_object.obj.id, ()):
changes.append({
'icon': 'chevron-left',
'class': 'info',
'title': _('Redirect slugs'),
'value': slug,
})
if changed_object.deleted:
changes.append({
'icon': 'minus',