1
0
Fork 0
mirror of https://github.com/Findus23/RPGnotes.git synced 2024-09-19 15:43:45 +02:00
RPGnotes/campaigns/views.py

135 lines
4.3 KiB
Python

from django.contrib.auth.mixins import LoginRequiredMixin
from django.core import serializers
from django.core.mail import mail_admins
from django.http import HttpResponse, HttpRequest, JsonResponse
from django.shortcuts import redirect
from django.urls import reverse_lazy
from django.utils.text import slugify
from django.views import generic
from django.views.generic import TemplateView
from tenant_users.tenants.tasks import provision_tenant
from campaigns.forms import CampaignForm
from campaigns.models import Campaign
from characters.models import Character
from common.middlewares import demo_campaign_id
from common.models import Draft
from days.models import Session, IngameDay
from factions.models import Faction
from locations.models import Location
from loot.models import Loot, LootType
from notes.models import Note
from users.models import TenantUser
class CampaignListView(LoginRequiredMixin, generic.ListView):
template_name = "campaigns/campaign_overview.jinja"
model = Campaign
context_object_name = "campaigns"
def get_queryset(self):
current_user: TenantUser = self.request.user
return current_user.tenants.exclude(id=1)
class CampaignCreateView(LoginRequiredMixin, generic.FormView):
template_name = "campaigns/campaign_edit.jinja"
form_class = CampaignForm
def form_valid(self, form):
name = form.cleaned_data.get("name")
slug = slugify(name).replace("-", "")
print(slug)
user: TenantUser = self.request.user
super_user = TenantUser.objects.get(id=1)
fqdn = provision_tenant(name, slug, super_user.email, is_staff=True)
mail_admins(f"New Campaign created: {name}", "", fail_silently=True)
campaign = Campaign.objects.get(name=name)
campaign.add_user(user)
return redirect("http://" + fqdn)
class CampaignDetailView(generic.DetailView):
template_name = "campaigns/campaign_detail.jinja"
model = Campaign
slug_url_kwarg = "campslug"
def get_object(self, queryset=None) -> Campaign:
return self.request.tenant
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
players = self.object.user_set.exclude(pk__in=[1, 2])
context["players"] = {}
player: TenantUser
for player in players:
context["players"][player] = player.characters.all()
context["is_demo"] = self.request.tenant.pk == demo_campaign_id
return context
class CampaignEditView(LoginRequiredMixin, generic.UpdateView):
template_name = "campaigns/campaign_edit.jinja"
model = Campaign
form_class = CampaignForm
slug_url_kwarg = "campslug"
def get_object(self, queryset=None):
return self.request.tenant
class CampaignDeleteView(LoginRequiredMixin, generic.DeleteView):
"""
broken at the moment
"""
template_name = "common/confirm_delete.jinja"
model = Campaign
slug_url_kwarg = "campslug"
success_url = reverse_lazy('campaigndetail')
def get_object(self, queryset=None):
return self.request.tenant
def delete(self, request, *args, **kwargs):
self.object: Campaign = self.get_object()
self.object.delete_tenant()
return redirect("http://test.localhost:8000/")
class ExportHelpView(TemplateView):
template_name = "campaigns/campaign_export.jinja"
class DraftView(LoginRequiredMixin, generic.ListView):
template_name = "campaigns/draftview.jinja"
model = Draft
context_object_name = "drafts"
def get_queryset(self):
current_user: TenantUser = self.request.user
if current_user.is_superuser:
return Draft.objects.all().order_by("-created")
return Draft.objects.filter(author=current_user).order_by("-created")
def export(request: HttpRequest) -> HttpResponse:
models = {
"characters": Character,
"sessions": Session,
"ingameday": IngameDay,
"factions": Faction,
"locations": Location,
"loottype": LootType,
"loot": Loot,
"notes": Note,
}
data = {}
for name, obj in models.items():
data[name] = serializers.serialize("python", obj.objects.all())
data["campaign"] = serializers.serialize("python", [request.tenant])[0]
# return JsonResponse({"c": list(Character.objects.all().values())})
return JsonResponse(data, safe=False)