Fix proposal submission.
This commit is contained in:
parent
52d3e827c8
commit
b871613d24
|
@ -1,6 +1,7 @@
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
|
||||||
from .models import SpeakerProposal, EventProposal, EventTrack, Url, UrlType
|
from .models import SpeakerProposal, EventProposal, EventTrack, Url, UrlType
|
||||||
|
|
||||||
|
@ -178,19 +179,26 @@ class EventProposalForm(forms.ModelForm):
|
||||||
# TODO: make sure the track is part of the current camp, needs camp as form kwarg to verify
|
# TODO: make sure the track is part of the current camp, needs camp as form kwarg to verify
|
||||||
return track
|
return track
|
||||||
|
|
||||||
def save(self, user, event_type, commit=True):
|
def save(self, commit=True, user=None, event_type=None):
|
||||||
self.instance.user = user
|
eventproposal = super().save(commit=False)
|
||||||
self.instance.event_type = event_type
|
if user:
|
||||||
super().save(commit=True)
|
eventproposal.user = user
|
||||||
if self.cleaned_data.get('slides_url') and (self.instance.event_type.name == 'Talk' or self.instance.event_type.name == 'Lightning Talk'):
|
if event_type:
|
||||||
slides_url = Url()
|
eventproposal.event_type = event_type
|
||||||
slides_url.eventproposal = self.instance
|
eventproposal.save()
|
||||||
slides_url.url = self.cleaned_data['slides_url']
|
|
||||||
slides_url.urltype = UrlType.objects.get(name="Slides")
|
|
||||||
slides_url.save()
|
|
||||||
return self.instance
|
|
||||||
|
|
||||||
|
|
||||||
|
if self.cleaned_data.get('slides_url') and event_type.name in ['Talk', 'Lightning Talk']:
|
||||||
|
url = self.cleaned_data.get('slides_url')
|
||||||
|
if not eventproposal.urls.filter(url=url).exists():
|
||||||
|
slides_url = Url()
|
||||||
|
slides_url.eventproposal = eventproposal
|
||||||
|
slides_url.url = url
|
||||||
|
slides_url.urltype = UrlType.objects.get(name="Slides")
|
||||||
|
slides_url.save()
|
||||||
|
|
||||||
|
return eventproposal
|
||||||
|
|
||||||
def __init__(self, camp, eventtype=None, *args, **kwargs):
|
def __init__(self, camp, eventtype=None, *args, **kwargs):
|
||||||
# initialise form
|
# initialise form
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
@ -274,7 +282,7 @@ class EventProposalForm(forms.ModelForm):
|
||||||
self.fields['submission_notes'].label = 'Talk Notes'
|
self.fields['submission_notes'].label = 'Talk Notes'
|
||||||
self.fields['submission_notes'].help_text = 'Private notes regarding this talk. Only visible to yourself and the BornHack organisers.'
|
self.fields['submission_notes'].help_text = 'Private notes regarding this talk. Only visible to yourself and the BornHack organisers.'
|
||||||
|
|
||||||
if eventtype.name == "Lightning Talk":
|
if self.fields.get('slides_url') and eventtype.name == "Lightning Talk":
|
||||||
self.fields['slides_url'].help_text += " You will only get assigned a slot if you have provided slides (a title slide is enough if you don't use slides for the talk). You can add an URL later if need be."
|
self.fields['slides_url'].help_text += " You will only get assigned a slot if you have provided slides (a title slide is enough if you don't use slides for the talk). You can add an URL later if need be."
|
||||||
|
|
||||||
# no duration for talks
|
# no duration for talks
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
import logging
|
import logging
|
||||||
import os
|
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
from django.views.generic import ListView, TemplateView, DetailView, View
|
from django.views.generic import ListView, TemplateView, DetailView, View
|
||||||
from django.views.generic.edit import CreateView, UpdateView, DeleteView, FormView
|
from django.views.generic.edit import CreateView, UpdateView, DeleteView
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.views.decorators.http import require_safe
|
|
||||||
from django.http import Http404, HttpResponse
|
from django.http import Http404, HttpResponse
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.contrib.admin.views.decorators import staff_member_required
|
from django.contrib.admin.views.decorators import staff_member_required
|
||||||
|
@ -14,14 +12,13 @@ from django.contrib import messages
|
||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.template import Engine, Context
|
from django.template import Engine, Context
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from betterforms.multiform import MultiModelForm
|
from betterforms.multiform import MultiModelForm
|
||||||
import icalendar
|
import icalendar
|
||||||
|
|
||||||
from camps.mixins import CampViewMixin
|
from camps.mixins import CampViewMixin
|
||||||
|
from program.models import Url, UrlType
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
EnsureUnapprovedProposalMixin,
|
|
||||||
EnsureUserOwnsProposalMixin,
|
EnsureUserOwnsProposalMixin,
|
||||||
EnsureWritableCampMixin,
|
EnsureWritableCampMixin,
|
||||||
EnsureCFPOpenMixin,
|
EnsureCFPOpenMixin,
|
||||||
|
@ -417,11 +414,7 @@ class EventProposalCreateView(LoginRequiredMixin, CampViewMixin, EnsureWritableC
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
# set camp and user for this eventproposal
|
# set camp and user for this eventproposal
|
||||||
eventproposal = form.save(
|
eventproposal = form.save(user=self.request.user, event_type=self.event_type)
|
||||||
user=self.request.user,
|
|
||||||
event_type=self.event_type,
|
|
||||||
commit=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
# add the speakerproposal to the eventproposal
|
# add the speakerproposal to the eventproposal
|
||||||
eventproposal.speakers.add(self.speakerproposal)
|
eventproposal.speakers.add(self.speakerproposal)
|
||||||
|
@ -569,10 +562,7 @@ class CombinedProposalSubmitView(LoginRequiredMixin, CampViewMixin, CreateView):
|
||||||
Save the object(s) here before redirecting
|
Save the object(s) here before redirecting
|
||||||
"""
|
"""
|
||||||
if hasattr(self, 'speakerproposal'):
|
if hasattr(self, 'speakerproposal'):
|
||||||
eventproposal = form.save(commit=False)
|
eventproposal = form.save(user=self.request.user, event_type=self.eventtype)
|
||||||
eventproposal.user = self.request.user
|
|
||||||
eventproposal.event_type = self.eventtype
|
|
||||||
eventproposal.save()
|
|
||||||
eventproposal.speakers.add(self.speakerproposal)
|
eventproposal.speakers.add(self.speakerproposal)
|
||||||
else:
|
else:
|
||||||
# first save the SpeakerProposal
|
# first save the SpeakerProposal
|
||||||
|
@ -584,7 +574,7 @@ class CombinedProposalSubmitView(LoginRequiredMixin, CampViewMixin, CreateView):
|
||||||
speakerproposal.save()
|
speakerproposal.save()
|
||||||
|
|
||||||
# then save the eventproposal
|
# then save the eventproposal
|
||||||
eventproposal = form['eventproposal'].save(commit=False)
|
eventproposal = form['eventproposal'].save(user=self.request.user, event_type=self.eventtype)
|
||||||
eventproposal.user = self.request.user
|
eventproposal.user = self.request.user
|
||||||
eventproposal.event_type = self.eventtype
|
eventproposal.event_type = self.eventtype
|
||||||
eventproposal.save()
|
eventproposal.save()
|
||||||
|
|
Loading…
Reference in a new issue