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:
parent
b21526ef85
commit
07fd3c679f
9 changed files with 114 additions and 40 deletions
5
Makefile
5
Makefile
|
@ -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
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
13
campaigns/templates/campaigns/campaign_export.jinja
Normal file
13
campaigns/templates/campaigns/campaign_export.jinja
Normal 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 %}
|
|
@ -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"),
|
||||||
]
|
]
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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.
|
@ -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"
|
||||||
|
|
||||||
|
|
|
@ -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">
|
||||||
|
|
Loading…
Reference in a new issue