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

add export feature

This commit is contained in:
Lukas Winkler 2022-11-30 14:05:37 +01:00
parent b21526ef85
commit 07fd3c679f
Signed by: lukas
GPG key ID: 54DE4D798D244853
9 changed files with 114 additions and 40 deletions

View file

@ -1,5 +1,8 @@
.PHONY: things
all: makemessages compilemessages
makemessages: makemessages:
python manage.py makemessages -l de --extension=html,txt,jinja,py python manage.py makemessages -l de --extension=html,txt,jinja,py --ignore "node_modules/*"
compilemessages: compilemessages:
python manage.py compilemessages python manage.py compilemessages

View file

@ -20,6 +20,6 @@
<a href="https://rpgnotes.lw1.at/ " class="btn btn-primary btn-lg px-4 gap-3" target="_blank"> <a href="https://rpgnotes.lw1.at/ " class="btn btn-primary btn-lg px-4 gap-3" target="_blank">
{% trans %}Homepage{% endtrans %} {% trans %}Homepage{% endtrans %}
</a> </a>
{% endif %} {% endif %}
<a class="btn btn-outline-secondary" href="{{ url("export") }}">{% trans %}Export{% endtrans %}</a>
{% endblock %} {% endblock %}

View file

@ -0,0 +1,13 @@
{% extends "tenantbase.jinja" %}
{% block title %}{% trans %}Export{% endtrans %}{% endblock %}
{% block content %}
<h1>{% trans %}Export{% endtrans %}</h1>
<p>{% trans trimmed %}
RPGnotes is an experimental website.
To avoid lock-in of campaign data, you can always export all of your data here:
{% endtrans %}</p>
<a href="{{ url("exportdata") }}" class="btn btn-lg btn-primary">{% trans %}Export{% endtrans %}</a>
{% endblock %}

View file

@ -5,5 +5,7 @@ from campaigns import views as campaign_views
urlpatterns = [ urlpatterns = [
path("", campaign_views.CampaignDetailView.as_view(), name="campaigndetail"), path("", campaign_views.CampaignDetailView.as_view(), name="campaigndetail"),
path("edit", campaign_views.CampaignEditView.as_view(), name="campaignedit"), path("edit", campaign_views.CampaignEditView.as_view(), name="campaignedit"),
path("export", campaign_views.ExportHelpView.as_view(), name="export"),
path("export/data", campaign_views.export, name="exportdata"),
path("delete", campaign_views.CampaignDeleteView.as_view(), name="campaigndelete"), path("delete", campaign_views.CampaignDeleteView.as_view(), name="campaigndelete"),
] ]

View file

@ -1,14 +1,23 @@
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.core import serializers
from django.core.mail import mail_admins from django.core.mail import mail_admins
from django.http import HttpResponse, HttpRequest, JsonResponse
from django.shortcuts import redirect from django.shortcuts import redirect
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.text import slugify from django.utils.text import slugify
from django.views import generic from django.views import generic
from django.views.generic import TemplateView
from tenant_users.tenants.tasks import provision_tenant from tenant_users.tenants.tasks import provision_tenant
from campaigns.forms import CampaignForm from campaigns.forms import CampaignForm
from campaigns.models import Campaign from campaigns.models import Campaign
from characters.models import Character
from common.middlewares import demo_campaign_id from common.middlewares import demo_campaign_id
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 from users.models import TenantUser
@ -86,3 +95,28 @@ class CampaignDeleteView(LoginRequiredMixin, generic.DeleteView):
self.object: Campaign = self.get_object() self.object: Campaign = self.get_object()
self.object.delete_tenant() self.object.delete_tenant()
return redirect("http://test.localhost:8000/") return redirect("http://test.localhost:8000/")
class ExportHelpView(TemplateView):
template_name = "campaigns/campaign_export.jinja"
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)

View file

@ -52,13 +52,13 @@ def save_draft(request: HttpRequest) -> HttpResponse:
@condition(etag_func=calc_etag) @condition(etag_func=calc_etag)
def debug_css(request): def debug_css(request: HttpRequest) -> HttpResponse:
css, source_map = get_css(debug=True) css, source_map = get_css(debug=True)
return HttpResponse(css, content_type="text/css") return HttpResponse(css, content_type="text/css")
@condition(etag_func=calc_etag) @condition(etag_func=calc_etag)
def debug_css_sourcemap(request): def debug_css_sourcemap(request: HttpRequest) -> HttpResponse:
css, source_map = get_css(debug=True) css, source_map = get_css(debug=True)
return HttpResponse(source_map, content_type="application/json") return HttpResponse(source_map, content_type="application/json")

Binary file not shown.

View file

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-05 21:15+0200\n" "POT-Creation-Date: 2022-11-30 14:01+0100\n"
"PO-Revision-Date: 2022-06-19 14:13+0200\n" "PO-Revision-Date: 2022-06-19 14:13+0200\n"
"Last-Translator: Lukas Winkler <translations@lw1.at>\n" "Last-Translator: Lukas Winkler <translations@lw1.at>\n"
"Language-Team: \n" "Language-Team: \n"
@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.1\n" "X-Generator: Poedit 3.1\n"
#: campaigns/models.py:12 common/models/nameslugmodel.py:8 loot/models.py:14 #: campaigns/models.py:12 common/models/nameslugmodel.py:8 loot/models.py:24
#: users/models.py:10 #: users/models.py:10
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
@ -47,15 +47,29 @@ msgstr ""
msgid "Homepage" msgid "Homepage"
msgstr "Startseite" msgstr "Startseite"
#: campaigns/templates/campaigns/campaign_detail.jinja:24
#: campaigns/templates/campaigns/campaign_export.jinja:3
#: campaigns/templates/campaigns/campaign_export.jinja:6
#: campaigns/templates/campaigns/campaign_export.jinja:12
msgid "Export"
msgstr "Export"
#: campaigns/templates/campaigns/campaign_edit.jinja:5 #: campaigns/templates/campaigns/campaign_edit.jinja:5
msgid "Add new campaign" msgid "Add new campaign"
msgstr "Neue Campagne erstellen" msgstr "Neue Campagne erstellen"
#: campaigns/templates/campaigns/campaign_edit.jinja:9 #: campaigns/templates/campaigns/campaign_edit.jinja:9
#: loot/templates/loot/edit.jinja:27 loot/templates/loot/edit.jinja:30 #: loot/templates/loot/edit.jinja:18 loot/templates/loot/edit.jinja:21
msgid "Add" msgid "Add"
msgstr "Hinzufügen" msgstr "Hinzufügen"
#: campaigns/templates/campaigns/campaign_export.jinja:8
msgid ""
"RPGnotes is an experimental website. To avoid lock-in of campaign data, you "
"can always export all of your data here:"
msgstr "RPGnotes ist eine experimentelle Webseite. Damit Campaign-Daten weiterverwendet werden können, "
"können hier immer alle Daten exportiert werden:"
#: campaigns/templates/campaigns/campaign_overview.jinja:3 #: campaigns/templates/campaigns/campaign_overview.jinja:3
#: campaigns/templates/campaigns/campaign_overview.jinja:9 #: campaigns/templates/campaigns/campaign_overview.jinja:9
msgid "Campaign Overview" msgid "Campaign Overview"
@ -92,7 +106,7 @@ msgid "Faction"
msgstr "Fraktion" msgstr "Fraktion"
#: characters/models.py:41 characters/templates/characters/detail.jinja:61 #: characters/models.py:41 characters/templates/characters/detail.jinja:61
#: locations/models.py:26 loot/models.py:28 #: locations/models.py:26 loot/models.py:38
#: loot/templates/loot/overview.jinja:17 #: loot/templates/loot/overview.jinja:17
msgid "Location" msgid "Location"
msgstr "Ort" msgstr "Ort"
@ -133,7 +147,7 @@ msgstr "Charakter hinzufügen"
#: days/templates/days/day_detail.jinja:24 #: days/templates/days/day_detail.jinja:24
#: factions/templates/factions/detail.jinja:24 #: factions/templates/factions/detail.jinja:24
#: locations/templates/locations/detail.jinja:22 #: locations/templates/locations/detail.jinja:22
#: loot/templates/loot/overview.jinja:60 notes/templates/notes/detail.jinja:22 #: loot/templates/loot/overview.jinja:62 notes/templates/notes/detail.jinja:22
msgid "Edit" msgid "Edit"
msgstr "Bearbeiten" msgstr "Bearbeiten"
@ -206,7 +220,7 @@ msgstr "Mitglieder"
msgid "Part of" msgid "Part of"
msgstr "Teil von" msgstr "Teil von"
#: locations/models.py:22 loot/models.py:18 notes/models.py:22 #: locations/models.py:22 loot/models.py:28 notes/models.py:22
msgid "Image" msgid "Image"
msgstr "Bild" msgstr "Bild"
@ -222,27 +236,36 @@ msgstr "Ort hinzufügen"
msgid "Contains" msgid "Contains"
msgstr "Enthält" msgstr "Enthält"
#: loot/models.py:15 loot/templates/loot/overview.jinja:14 #: loot/models.py:25 loot/templates/loot/overview.jinja:14
msgid "Quantity" msgid "Quantity"
msgstr "Anzahl" msgstr "Anzahl"
#: loot/models.py:16 #: loot/models.py:26
msgid "Value (Gold)" msgid "Value (Gold)"
msgstr "Wert (Gold)" msgstr "Wert (Gold)"
#: loot/models.py:17 #: loot/models.py:27
msgid "Weight (lb)" msgid "Weight (lb)"
msgstr "Gewicht (lb)" msgstr "Gewicht (lb)"
#: loot/models.py:22 loot/templates/loot/overview.jinja:16 #: loot/models.py:32 loot/templates/loot/overview.jinja:16
msgid "Claimant" msgid "Claimant"
msgstr "Beansprucht von" msgstr "Beansprucht von"
#: loot/models.py:31 #: loot/models.py:41
msgid "Magic Item" msgid "Magic Item"
msgstr "Magisches Item" msgstr "Magisches Item"
#: loot/models.py:35 loot/models.py:36 loot/templates/loot/overview.jinja:3 #: loot/models.py:42
msgid "Former"
msgstr "Ehemalig"
#: loot/models.py:46 loot/templates/loot/overview.jinja:18
#: loot/templates/loot/overview.jinja:77
msgid "Type"
msgstr "Typ"
#: loot/models.py:51 loot/models.py:52 loot/templates/loot/overview.jinja:3
#: loot/templates/loot/overview.jinja:6 templates/tenantbase.jinja:42 #: loot/templates/loot/overview.jinja:6 templates/tenantbase.jinja:42
msgid "Loot" msgid "Loot"
msgstr "Loot" msgstr "Loot"
@ -252,45 +275,43 @@ msgstr "Loot"
msgid "Edit \"%(object)s\"" msgid "Edit \"%(object)s\""
msgstr "\"%(object)s\" bearbeiten" msgstr "\"%(object)s\" bearbeiten"
#: loot/templates/loot/edit.jinja:7 loot/templates/loot/edit.jinja:9 #: loot/templates/loot/edit.jinja:7
#: loot/templates/loot/edit.jinja:11 loot/templates/loot/edit.jinja:13
msgid "Delete"
msgstr "Löschen"
#: loot/templates/loot/edit.jinja:16
msgid "Add new" msgid "Add new"
msgstr "Neu erstellen" msgstr "Neu erstellen"
#: loot/templates/loot/edit.jinja:22 #: loot/templates/loot/edit.jinja:15
#, fuzzy
#| msgid "Session"
msgid "Add Session" msgid "Add Session"
msgstr "Session" msgstr "Session hinzufügen"
#: loot/templates/loot/edit.jinja:27 loot/templates/loot/edit.jinja:30 #: loot/templates/loot/edit.jinja:18 loot/templates/loot/edit.jinja:21
#: templates/common/languageselect.jinja:17 #: templates/common/languageselect.jinja:17
#: templates/registration/registration_form.jinja:9 #: templates/registration/registration_form.jinja:9
#: users/templates/users/edit.jinja:10 #: users/templates/users/edit.jinja:10
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
#: loot/templates/loot/edit.jinja:24 loot/templates/loot/edit.jinja:26
#: loot/templates/loot/edit.jinja:28 loot/templates/loot/edit.jinja:30
msgid "Delete"
msgstr "Löschen"
#: loot/templates/loot/overview.jinja:13 #: loot/templates/loot/overview.jinja:13
msgid "Item" msgid "Item"
msgstr "Objekt" msgstr "Objekt"
#: loot/templates/loot/overview.jinja:15 loot/templates/loot/overview.jinja:83 #: loot/templates/loot/overview.jinja:15 loot/templates/loot/overview.jinja:89
msgid "Total Value" msgid "Total Value"
msgstr "Gesamtwert" msgstr "Gesamtwert"
#: loot/templates/loot/overview.jinja:67 #: loot/templates/loot/overview.jinja:69
msgid "Value each" msgid "Value each"
msgstr "Wert pro Stück" msgstr "Wert pro Stück"
#: loot/templates/loot/overview.jinja:71 #: loot/templates/loot/overview.jinja:73
msgid "Weight" msgid "Weight"
msgstr "Gewicht" msgstr "Gewicht"
#: loot/templates/loot/overview.jinja:86 #: loot/templates/loot/overview.jinja:92
msgid "Add Loot" msgid "Add Loot"
msgstr "Loot hinzufügen" msgstr "Loot hinzufügen"
@ -306,11 +327,11 @@ msgstr "Notizen"
msgid "Add Note" msgid "Add Note"
msgstr "Notiz hinzufügen" msgstr "Notiz hinzufügen"
#: rpg_notes/settings.py:196 #: rpg_notes/settings.py:197
msgid "German" msgid "German"
msgstr "Deutsch" msgstr "Deutsch"
#: rpg_notes/settings.py:197 #: rpg_notes/settings.py:198
msgid "English" msgid "English"
msgstr "Englisch" msgstr "Englisch"
@ -332,16 +353,17 @@ msgid "Permission Denied"
msgstr "Zugriff verweigert" msgstr "Zugriff verweigert"
#: templates/403.jinja:10 #: templates/403.jinja:10
#, python-format msgid ""
msgid "You might want to go back to the <a href=\"%(url)s\">homepage</a>." "You might want to go back to the <a href=\"https://rpgnotes.lw1.at/"
"\">homepage</a>."
msgstr "" msgstr ""
"Du möchtest vielleicht zurück zur <a href=\"%(url)s\">Startseite</a> gehen." "Du möchtest vielleicht zurück zur <a href=\"https://rpgnotes.lw1.at/\">Startseite</a> gehen."
#: templates/base.jinja:37 templates/tenantbase.jinja:88 #: templates/base.jinja:39 templates/tenantbase.jinja:88
msgid "Log out" msgid "Log out"
msgstr "Abmelden" msgstr "Abmelden"
#: templates/base.jinja:39 templates/common/homepage.jinja:20 #: templates/base.jinja:41 templates/common/homepage.jinja:20
#: templates/registration/login.jinja:21 #: templates/registration/login.jinja:21
msgid "Log in" msgid "Log in"
msgstr "Anmelden" msgstr "Anmelden"
@ -361,7 +383,7 @@ msgstr "Zurück"
#: templates/common/homepage.jinja:10 #: templates/common/homepage.jinja:10
msgid "" msgid ""
"An experimental, collaborative note taking app and wiki optimized for RPG " "An experimental, collaborative note taking app and wiki optimized for RPG "
"games." "games"
msgstr "" msgstr ""
"Eine experimentelle, kollaborative Notiz-App und Wiki optimiert für RPGs" "Eine experimentelle, kollaborative Notiz-App und Wiki optimiert für RPGs"

View file

@ -8,7 +8,7 @@
<div class="col-lg-6 mx-auto"> <div class="col-lg-6 mx-auto">
<p class="lead mb-4"> <p class="lead mb-4">
{% trans trimmed %} {% trans trimmed %}
An experimental, collaborative note taking app and wiki optimized for RPG games. An experimental, collaborative note taking app and wiki optimized for RPG games
{% endtrans %} {% endtrans %}
</p> </p>
<div class="d-grid gap-2 d-sm-flex justify-content-sm-center"> <div class="d-grid gap-2 d-sm-flex justify-content-sm-center">