From f511526aac5103242317bc689e2d322faffc5634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Fri, 23 Nov 2018 21:41:02 +0100 Subject: [PATCH] set_changeset_author_on_login signal --- src/c3nav/editor/apps.py | 3 +++ src/c3nav/editor/models/changeset.py | 6 +++--- src/c3nav/editor/signals.py | 12 ++++++++++++ src/c3nav/editor/views/account.py | 5 ----- 4 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 src/c3nav/editor/signals.py diff --git a/src/c3nav/editor/apps.py b/src/c3nav/editor/apps.py index 462dc00a..a7c1e22b 100644 --- a/src/c3nav/editor/apps.py +++ b/src/c3nav/editor/apps.py @@ -1,4 +1,5 @@ from django.apps import AppConfig +from django.contrib.auth import user_logged_in from django.db.models.signals import m2m_changed, post_delete, post_save @@ -7,6 +8,8 @@ class EditorConfig(AppConfig): def ready(self): from c3nav.editor.models import ChangeSet + from c3nav.editor.signals import set_changeset_author_on_login post_save.connect(ChangeSet.object_changed_handler) post_delete.connect(ChangeSet.object_changed_handler) m2m_changed.connect(ChangeSet.object_changed_handler) + user_logged_in.connect(set_changeset_author_on_login) diff --git a/src/c3nav/editor/models/changeset.py b/src/c3nav/editor/models/changeset.py index 8cebe6f0..94435d39 100644 --- a/src/c3nav/editor/models/changeset.py +++ b/src/c3nav/editor/models/changeset.py @@ -92,7 +92,7 @@ class ChangeSet(models.Model): return ChangeSet.objects.none() @classmethod - def get_for_request(cls, request, select_related=None): + def get_for_request(cls, request, select_related=None, as_logged_out=False): """ Get the changeset for the current request. If a changeset is associated with the session id, it will be returned. @@ -108,9 +108,9 @@ class ChangeSet(models.Model): changeset_pk = request.session.get('changeset') if changeset_pk is not None: qs = ChangeSet.objects.select_related(*select_related).exclude(state__in=('applied', 'finallyrejected')) - if request.user.is_authenticated: + if request.user.is_authenticated and not as_logged_out: if not request.user_permissions.review_changesets: - qs = qs.filter(Q(author=request.user) | Q(author__isnull=True)) + qs = qs.filter(author=request.user) else: qs = qs.filter(author__isnull=True) try: diff --git a/src/c3nav/editor/signals.py b/src/c3nav/editor/signals.py new file mode 100644 index 00000000..81b0d147 --- /dev/null +++ b/src/c3nav/editor/signals.py @@ -0,0 +1,12 @@ +from c3nav.editor.models import ChangeSet + + +def set_changeset_author_on_login(sender, user, request, **kwargs): + try: + changeset = request.changeset + except AttributeError: + changeset = ChangeSet.get_for_request(request, as_logged_out=True) + + if changeset.pk is not None: + changeset.author = user + changeset.save() diff --git a/src/c3nav/editor/views/account.py b/src/c3nav/editor/views/account.py index b89a1f21..e5837aa1 100644 --- a/src/c3nav/editor/views/account.py +++ b/src/c3nav/editor/views/account.py @@ -53,11 +53,6 @@ def register_view(request): if form.is_valid(): user = form.save() login(request, user) - - if request.changeset.pk is not None: - request.changeset.author = user - request.changeset.save() - return redirect(redirect_path) else: form = UserCreationForm()