from django.utils.translation import gettext_lazy as _ from django.shortcuts import get_object_or_404 from django.urls import reverse_lazy from django.views.generic.detail import DetailView from django.views.generic.edit import CreateView, DeleteView, UpdateView from django.views.generic.list import ListView from orchestra.contrib.musician.mixins import (CustomContextMixin, ExtendedPaginationMixin, UserTokenRequiredMixin) from orchestra.contrib.webapps.models import WebApp, WebAppOption from orchestra.contrib.musician.tidy_forms.webapps import WebappOptionCreateForm, WebappOptionUpdateForm from orchestra.contrib.musician.settings import MUSICIAN_EDIT_ENABLE_PHP_OPTIONS class WebappListView(CustomContextMixin, UserTokenRequiredMixin, ListView): model = WebApp template_name = "musician/webapps/webapp_list.html" extra_context = { # Translators: This message appears on the page title 'title': _('Webapps'), } def get_queryset(self): return self.model.objects.filter(account=self.request.user) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({ 'description': _("A web app is the directory where your website is stored. Through SFTP, you can access this directory and upload/edit/delete files."), 'description2': _("Each Webapp has its own SFTP user, which is created automatically when the Webapp is created.") }) return context class WebappDetailView(CustomContextMixin, UserTokenRequiredMixin, DetailView): template_name = "musician/webapps/webapp_detail.html" extra_context = { # Translators: This message appears on the page title 'title': _('webapp details'), } def get_queryset(self): return WebApp.objects.filter(account=self.request.user) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({ 'edit_allowed_PHP_options': MUSICIAN_EDIT_ENABLE_PHP_OPTIONS }) return context class WebappAddOptionView(CustomContextMixin, UserTokenRequiredMixin, CreateView): model = WebAppOption form_class = WebappOptionCreateForm template_name = "musician/webapps/webapp_option_form.html" def get_form_kwargs(self): kwargs = super().get_form_kwargs() webapp = get_object_or_404(WebApp, account=self.request.user, pk=self.kwargs["pk"]) kwargs['webapp'] = webapp return kwargs def get_success_url(self): return reverse_lazy("musician:webapp-detail", kwargs={"pk": self.kwargs["pk"]}) class WebappDeleteOptionView(CustomContextMixin, UserTokenRequiredMixin, DeleteView): model = WebAppOption template_name = "musician/webapps/webappoption_check_delete.html" pk_url_kwarg = "option_pk" def get_queryset(self): qs = WebAppOption.objects.filter(webapp__account=self.request.user, webapp=self.kwargs["pk"]) return qs def get_success_url(self): return reverse_lazy("musician:webapp-detail", kwargs={"pk": self.kwargs["pk"]}) def delete(self, request, *args, **kwargs): object = self.get_object() response = super().delete(request, *args, **kwargs) object.webapp.save() return response class WebappUpdateOptionView(CustomContextMixin, UserTokenRequiredMixin, UpdateView): model = WebAppOption form_class = WebappOptionUpdateForm template_name = "musician/webapps/webapp_option_form.html" pk_url_kwarg = "option_pk" def get_queryset(self): qs = WebAppOption.objects.filter(webapp__account=self.request.user, webapp=self.kwargs["pk"]) return qs def get_success_url(self): return reverse_lazy("musician:webapp-detail", kwargs={"pk": self.kwargs["pk"]})