Add basic editing functionality
This commit is contained in:
@ -6,10 +6,11 @@ from django.core.mail import send_mail
|
||||
from django.db.models import Q
|
||||
from django.http import Http404, HttpResponse
|
||||
from django.urls import reverse
|
||||
from django.urls import reverse_lazy
|
||||
from django.views import View
|
||||
from django.views.generic import DetailView
|
||||
from django.views.generic.base import TemplateView
|
||||
from django.views.generic.edit import CreateView
|
||||
from django.views.generic.edit import CreateView, UpdateView
|
||||
|
||||
from dal import autocomplete
|
||||
|
||||
@ -47,34 +48,45 @@ class PointOfInterest(LoginRequiredMixin, CreateView):
|
||||
form_class = PointOfInterest
|
||||
|
||||
|
||||
class BaseForm(LoginRequiredMixin, CreateView):
|
||||
"""View for base case study form."""
|
||||
template_name = 'map/form-case_study.html'
|
||||
success_url = '/case-study/create/success/'
|
||||
model = CaseStudy
|
||||
|
||||
def send_email(self):
|
||||
"""Sends email to moderator to approve case study."""
|
||||
def send_email(study_id):
|
||||
"""Sends email to moderator to approve case study."""
|
||||
|
||||
try:
|
||||
send_mail(
|
||||
'New case study submitted',
|
||||
NOTIFY_MESSAGE % (
|
||||
settings.SITE_URL,
|
||||
reverse('admin:map_casestudy_change', args=[self.object.id])
|
||||
reverse('admin:map_casestudy_change', args=[study_id])
|
||||
),
|
||||
'noreply@ojuso.org',
|
||||
[settings.DATABASE_EMAIL],
|
||||
fail_silently=False,
|
||||
)
|
||||
|
||||
def form_valid(self, form):
|
||||
except:
|
||||
# XXX This is bad. We should do something more useful with the error
|
||||
# than this.
|
||||
pass
|
||||
|
||||
|
||||
def delete_user_draft(user_id):
|
||||
""" Delete the draft of a given user """
|
||||
|
||||
try:
|
||||
draft = CaseStudyDraft.objects.get(author=user_id)
|
||||
draft.delete()
|
||||
except CaseStudyDraft.DoesNotExist:
|
||||
pass
|
||||
|
||||
|
||||
class FilesHandlerMixin:
|
||||
def remove_bad_fields(self, form):
|
||||
form.cleaned_data.pop('official_project_documents', None)
|
||||
form.cleaned_data.pop('other_documents', None)
|
||||
form.cleaned_data.pop('shapefiles', None)
|
||||
form.cleaned_data.pop('images', None)
|
||||
|
||||
self.object = form.save()
|
||||
|
||||
def add_file_refs(self, form):
|
||||
self.object.official_project_documents.set(form.cleaned_data.get(
|
||||
'official_project_documents_files', []
|
||||
))
|
||||
@ -88,31 +100,35 @@ class BaseForm(LoginRequiredMixin, CreateView):
|
||||
'images_files', []
|
||||
))
|
||||
|
||||
def form_valid(self, form):
|
||||
self.remove_bad_fields(form)
|
||||
self.object.author = self.request.user
|
||||
self.object = form.save()
|
||||
self.add_file_refs(form)
|
||||
self.object.save()
|
||||
|
||||
# Don't error if the email can't be sent
|
||||
try:
|
||||
self.send_email()
|
||||
except:
|
||||
pass
|
||||
|
||||
# Delete the corresponding draft
|
||||
try:
|
||||
draft = CaseStudyDraft.objects.get(author=self.request.user)
|
||||
draft.delete()
|
||||
except CaseStudyDraft.DoesNotExist:
|
||||
pass
|
||||
|
||||
return super().form_valid(form)
|
||||
|
||||
|
||||
class ShortForm(BaseForm):
|
||||
class BaseCreateForm(LoginRequiredMixin, FilesHandlerMixin, CreateView):
|
||||
"""View for base case study form."""
|
||||
template_name = 'map/form-case_study.html'
|
||||
success_url = reverse_lazy('form-success')
|
||||
model = CaseStudy
|
||||
|
||||
def form_valid(self, form):
|
||||
super().form_valid(form)
|
||||
|
||||
send_email(self.object.id)
|
||||
delete_user_draft(self.request.user)
|
||||
|
||||
|
||||
class ShortForm(BaseCreateForm):
|
||||
"""View for short version of case study form."""
|
||||
form_class = ShortCaseStudyForm
|
||||
|
||||
|
||||
class LongForm(BaseForm):
|
||||
class LongForm(BaseCreateForm):
|
||||
"""View for long version of case study form."""
|
||||
form_class = LongCaseStudyForm
|
||||
|
||||
@ -127,6 +143,18 @@ class CaseStudyDetail(DetailView):
|
||||
context_object_name = "case_study"
|
||||
|
||||
|
||||
|
||||
class BaseEditForm(LoginRequiredMixin, FilesHandlerMixin, UpdateView):
|
||||
"""View for base case study form."""
|
||||
template_name = 'map/form-case_study.html'
|
||||
success_url = reverse_lazy('form-success')
|
||||
model = CaseStudy
|
||||
|
||||
|
||||
class EditCaseStudy(BaseEditForm):
|
||||
form_class = ShortCaseStudyForm
|
||||
|
||||
|
||||
class SpatialRefSysAutocomplete(autocomplete.Select2QuerySetView):
|
||||
def get_queryset(self):
|
||||
qs = SpatialRefSys.objects.all()
|
||||
|
Reference in New Issue
Block a user