from django.views.generic import CreateView, DeleteView, ListView from django.http import HttpResponse from django.contrib import messages from django.urls import reverse from django.core.mail import send_mail from django.conf import settings from braces.views import LoginRequiredMixin from crispy_forms.helper import FormHelper from .models import UploadedScript, EventPage class ScriptUploadView(CreateView): model = UploadedScript fields = ['name', 'script'] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) helper = FormHelper() helper.form_tag = False context['form'].helper = helper if self.request.user.is_authenticated: context['scripts'] = UploadedScript.objects.all() return context def form_valid(self, form): out = super().form_valid(form) messages.add_message(self.request, messages.SUCCESS, 'Skript erfolgreich hochgeladen. Vielen Dank!') send_mail( 'Neuer Skript-Upload', '''Ein neues Skript wurde hochgeladen. Name: {} Datei: {} Download hier: {}'''.format( self.object.name, self.object.script.name, self.request.build_absolute_uri(reverse('script_upload'))), settings.DEFAULT_FROM_EMAIL, ['info@feogmbh.de'], fail_silently=True) return out def get_success_url(self): return reverse('script_upload') class ScriptUploadDeleteView(LoginRequiredMixin, DeleteView): model = UploadedScript def get_success_url(self): return reverse('script_upload') class ICSEventsView(ListView): def get_queryset(self): return EventPage.objects.live().filter(show_in_event_calendar=True) def render_to_response(self, context, **response_kwargs): from .utils import generate_events_ics return HttpResponse(generate_events_ics(self.get_queryset()), content_type='text/calendar')