set_changeset_author_on_login signal

This commit is contained in:
Laura Klünder 2018-11-23 21:41:02 +01:00
parent 8c5b2e734a
commit f511526aac
4 changed files with 18 additions and 8 deletions

View file

@ -1,4 +1,5 @@
from django.apps import AppConfig 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 from django.db.models.signals import m2m_changed, post_delete, post_save
@ -7,6 +8,8 @@ class EditorConfig(AppConfig):
def ready(self): def ready(self):
from c3nav.editor.models import ChangeSet from c3nav.editor.models import ChangeSet
from c3nav.editor.signals import set_changeset_author_on_login
post_save.connect(ChangeSet.object_changed_handler) post_save.connect(ChangeSet.object_changed_handler)
post_delete.connect(ChangeSet.object_changed_handler) post_delete.connect(ChangeSet.object_changed_handler)
m2m_changed.connect(ChangeSet.object_changed_handler) m2m_changed.connect(ChangeSet.object_changed_handler)
user_logged_in.connect(set_changeset_author_on_login)

View file

@ -92,7 +92,7 @@ class ChangeSet(models.Model):
return ChangeSet.objects.none() return ChangeSet.objects.none()
@classmethod @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. Get the changeset for the current request.
If a changeset is associated with the session id, it will be returned. 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') changeset_pk = request.session.get('changeset')
if changeset_pk is not None: if changeset_pk is not None:
qs = ChangeSet.objects.select_related(*select_related).exclude(state__in=('applied', 'finallyrejected')) 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: 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: else:
qs = qs.filter(author__isnull=True) qs = qs.filter(author__isnull=True)
try: try:

View file

@ -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()

View file

@ -53,11 +53,6 @@ def register_view(request):
if form.is_valid(): if form.is_valid():
user = form.save() user = form.save()
login(request, user) login(request, user)
if request.changeset.pk is not None:
request.changeset.author = user
request.changeset.save()
return redirect(redirect_path) return redirect(redirect_path)
else: else:
form = UserCreationForm() form = UserCreationForm()