good stuff

This commit is contained in:
pacnpal
2024-10-29 21:29:16 -04:00
parent 4e970400ef
commit 6880f36b99
42 changed files with 2835 additions and 262 deletions

View File

@@ -1,12 +1,48 @@
from django.views.generic import DetailView, ListView
from django.views.generic import DetailView, ListView, CreateView
from django.shortcuts import get_object_or_404
from django.core.serializers.json import DjangoJSONEncoder
from django.urls import reverse
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.contenttypes.models import ContentType
from django.http import JsonResponse, HttpResponseRedirect
from .models import Park, ParkArea
from rides.models import Ride
from core.views import SlugRedirectMixin
from moderation.mixins import EditSubmissionMixin, PhotoSubmissionMixin, InlineEditMixin, HistoryMixin
from moderation.models import EditSubmission
class ParkDetailView(SlugRedirectMixin, DetailView):
class ParkCreateView(LoginRequiredMixin, CreateView):
model = Park
template_name = 'parks/park_form.html'
fields = ['name', 'location', 'country', 'description', 'owner', 'status',
'opening_date', 'closing_date', 'operating_season', 'size_acres', 'website']
def form_valid(self, form):
# If user is moderator or above, save directly
if self.request.user.role in ['MODERATOR', 'ADMIN', 'SUPERUSER']:
self.object = form.save()
return HttpResponseRedirect(self.get_success_url())
# Otherwise, create a submission
cleaned_data = form.cleaned_data.copy()
# Convert model instances to IDs for JSON serialization
if cleaned_data.get('owner'):
cleaned_data['owner'] = cleaned_data['owner'].id
submission = EditSubmission.objects.create(
user=self.request.user,
content_type=ContentType.objects.get_for_model(Park),
submission_type='CREATE',
changes=cleaned_data,
reason=self.request.POST.get('reason', ''),
source=self.request.POST.get('source', '')
)
return HttpResponseRedirect(reverse('parks:park_list'))
def get_success_url(self):
return reverse('parks:park_detail', kwargs={'slug': self.object.slug})
class ParkDetailView(SlugRedirectMixin, EditSubmissionMixin, PhotoSubmissionMixin, InlineEditMixin, HistoryMixin, DetailView):
model = Park
template_name = 'parks/park_detail.html'
context_object_name = 'park'
@@ -27,9 +63,9 @@ class ParkDetailView(SlugRedirectMixin, DetailView):
return context
def get_redirect_url_pattern(self):
return 'park_detail'
return 'parks:park_detail'
class ParkAreaDetailView(SlugRedirectMixin, DetailView):
class ParkAreaDetailView(SlugRedirectMixin, EditSubmissionMixin, PhotoSubmissionMixin, InlineEditMixin, HistoryMixin, DetailView):
model = ParkArea
template_name = 'parks/area_detail.html'
context_object_name = 'area'
@@ -54,7 +90,7 @@ class ParkAreaDetailView(SlugRedirectMixin, DetailView):
return context
def get_redirect_url_pattern(self):
return 'area_detail'
return 'parks:area_detail'
def get_redirect_url_kwargs(self):
return {