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

137 lines
4.4 KiB
Python
Raw Normal View History

2022-07-04 19:43:58 +02:00
from django.contrib.auth.mixins import LoginRequiredMixin
2022-11-30 14:05:37 +01:00
from django.core import serializers
2021-09-24 19:20:09 +02:00
from django.core.mail import mail_admins
2022-11-30 14:05:37 +01:00
from django.http import HttpResponse, HttpRequest, JsonResponse
2021-08-29 13:58:21 +02:00
from django.shortcuts import redirect
from django.urls import reverse_lazy
from django.utils.text import slugify
from django.views import generic
2022-11-30 14:05:37 +01:00
from django.views.generic import TemplateView
2021-08-29 13:58:21 +02:00
from tenant_users.tenants.tasks import provision_tenant
2021-08-29 00:20:02 +02:00
2021-08-29 13:58:21 +02:00
from campaigns.forms import CampaignForm
from campaigns.models import Campaign
2022-11-30 14:05:37 +01:00
from characters.models import Character
from common.middlewares import demo_campaign_id
2023-05-28 12:52:21 +02:00
from common.models import Draft
2022-11-30 14:05:37 +01:00
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
2023-07-09 18:43:41 +02:00
from rpg_notes.settings import HOME_DOMAIN_URL
2021-08-29 13:58:21 +02:00
from users.models import TenantUser
2022-07-04 19:43:58 +02:00
class CampaignListView(LoginRequiredMixin, generic.ListView):
2021-10-15 20:10:50 +02:00
template_name = "campaigns/campaign_overview.jinja"
2021-08-29 13:58:21 +02:00
model = Campaign
context_object_name = "campaigns"
def get_queryset(self):
current_user: TenantUser = self.request.user
2021-09-05 22:04:14 +02:00
return current_user.tenants.exclude(id=1)
2021-08-29 13:58:21 +02:00
2022-07-04 19:43:58 +02:00
class CampaignCreateView(LoginRequiredMixin, generic.FormView):
2021-10-15 20:10:50 +02:00
template_name = "campaigns/campaign_edit.jinja"
2021-08-29 13:58:21 +02:00
form_class = CampaignForm
def form_valid(self, form):
name = form.cleaned_data.get("name")
slug = slugify(name).replace("-", "")
print(slug)
2021-09-07 18:52:49 +02:00
user: TenantUser = self.request.user
super_user = TenantUser.objects.get(id=1)
fqdn = provision_tenant(name, slug, super_user.email, is_staff=True)
2021-09-24 19:20:09 +02:00
mail_admins(f"New Campaign created: {name}", "", fail_silently=True)
2021-09-07 18:52:49 +02:00
campaign = Campaign.objects.get(name=name)
campaign.add_user(user)
2021-08-29 13:58:21 +02:00
return redirect("http://" + fqdn)
class CampaignDetailView(generic.DetailView):
2021-10-15 20:10:50 +02:00
template_name = "campaigns/campaign_detail.jinja"
2021-08-29 13:58:21 +02:00
model = Campaign
slug_url_kwarg = "campslug"
2021-09-06 20:34:43 +02:00
def get_object(self, queryset=None) -> Campaign:
2021-08-29 13:58:21 +02:00
return self.request.tenant
2021-09-06 20:34:43 +02:00
def get_context_data(self, **kwargs):
2023-04-25 22:16:28 +02:00
context = super().get_context_data(**kwargs)
players = self.object.user_set.exclude(pk__in=[1, 2])
2021-09-14 20:10:38 +02:00
context["players"] = {}
player: TenantUser
for player in players:
context["players"][player] = player.characters.all()
context["is_demo"] = self.request.tenant.pk == demo_campaign_id
2021-09-06 20:34:43 +02:00
return context
2021-08-29 13:58:21 +02:00
2022-07-04 19:43:58 +02:00
class CampaignEditView(LoginRequiredMixin, generic.UpdateView):
2021-10-15 20:10:50 +02:00
template_name = "campaigns/campaign_edit.jinja"
2021-08-29 13:58:21 +02:00
model = Campaign
form_class = CampaignForm
2021-08-29 13:58:21 +02:00
slug_url_kwarg = "campslug"
def get_object(self, queryset=None):
return self.request.tenant
2022-07-04 19:43:58 +02:00
class CampaignDeleteView(LoginRequiredMixin, generic.DeleteView):
2021-08-29 13:58:21 +02:00
"""
broken at the moment
"""
2021-10-15 21:47:49 +02:00
template_name = "common/confirm_delete.jinja"
2021-08-29 13:58:21 +02:00
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()
2023-07-09 18:43:41 +02:00
return redirect(HOME_DOMAIN_URL)
2022-11-30 14:05:37 +01:00
class ExportHelpView(TemplateView):
template_name = "campaigns/campaign_export.jinja"
2023-05-28 12:52:21 +02:00
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:
2023-05-28 13:05:08 +02:00
return Draft.objects.all().order_by("-created")
return Draft.objects.filter(author=current_user).order_by("-created")
2023-05-28 12:52:21 +02:00
2022-11-30 14:05:37 +01:00
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)