mirror of
https://github.com/Findus23/RPGnotes.git
synced 2024-09-19 15:43:45 +02:00
add readonly demo and other minor fixes
This commit is contained in:
parent
d88b331bf2
commit
872d61caea
17 changed files with 203 additions and 57 deletions
|
@ -1,5 +1,11 @@
|
|||
from django import forms
|
||||
|
||||
from campaigns.models import Campaign
|
||||
|
||||
class CampaignForm(forms.Form):
|
||||
|
||||
class CampaignForm(forms.ModelForm):
|
||||
name = forms.CharField(widget=forms.TextInput)
|
||||
|
||||
class Meta:
|
||||
model = Campaign
|
||||
fields = ["name", "language"]
|
||||
|
|
|
@ -5,11 +5,12 @@ from django_tenants.models import DomainMixin
|
|||
from tenant_users.tenants.models import TenantBase
|
||||
|
||||
from rpg_notes.secrets import DEBUG
|
||||
from utils.languages import full_text_languages, full_text_languages_choice
|
||||
|
||||
|
||||
class Campaign(TenantBase):
|
||||
name = models.CharField(_("Name"), max_length=1000, unique=True)
|
||||
language = models.CharField(_("Language"), max_length=100)
|
||||
language = models.CharField(_("Language"), max_length=100, choices=full_text_languages_choice)
|
||||
|
||||
auto_create_schema = True
|
||||
|
||||
|
|
|
@ -3,11 +3,23 @@
|
|||
{% block title %}{{ object }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{{ object }}</h1>
|
||||
<h2>{% trans %}Players{% endtrans %}</h2>
|
||||
<ul>
|
||||
{% for user,characters in players.items() %}
|
||||
<li>{{ user }}{% if characters %} ({{ characters|join(", ") }}){% endif %}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if not is_demo %}
|
||||
<h1>{{ object }}</h1>
|
||||
<h2>{% trans %}Players{% endtrans %}</h2>
|
||||
<ul>
|
||||
{% for user,characters in players.items() %}
|
||||
<li>{{ user }}{% if characters %} ({{ characters|join(", ") }}){% endif %}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<h1>RPGnotes Demo</h1>
|
||||
<p>
|
||||
{% trans %}This is a read-only demo of RPGnotes.{% endtrans %}
|
||||
{% trans %}If you would like to try it yourself, go back to the homepage and sign up.{% endtrans %}
|
||||
</p>
|
||||
<a href="https://rpgnotes.lw1.at/ " class="btn btn-primary btn-lg px-4 gap-3" target="_blank">
|
||||
{% trans %}Homepage{% endtrans %}
|
||||
</a>
|
||||
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -8,6 +8,7 @@ from tenant_users.tenants.tasks import provision_tenant
|
|||
|
||||
from campaigns.forms import CampaignForm
|
||||
from campaigns.models import Campaign
|
||||
from common.middlewares import demo_campaign_id
|
||||
from users.models import TenantUser
|
||||
|
||||
|
||||
|
@ -38,7 +39,7 @@ class CampaignCreateView(LoginRequiredMixin, generic.FormView):
|
|||
return redirect("http://" + fqdn)
|
||||
|
||||
|
||||
class CampaignDetailView(LoginRequiredMixin, generic.DetailView):
|
||||
class CampaignDetailView(generic.DetailView):
|
||||
template_name = "campaigns/campaign_detail.jinja"
|
||||
model = Campaign
|
||||
slug_url_kwarg = "campslug"
|
||||
|
@ -48,19 +49,21 @@ class CampaignDetailView(LoginRequiredMixin, generic.DetailView):
|
|||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(CampaignDetailView, self).get_context_data(**kwargs)
|
||||
players = self.get_object().user_set.exclude(pk__in=[1, 2])
|
||||
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
|
||||
fields = ["name"]
|
||||
form_class = CampaignForm
|
||||
slug_url_kwarg = "campslug"
|
||||
|
||||
def get_object(self, queryset=None):
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
from django.contrib.auth.views import redirect_to_login
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.http import HttpRequest
|
||||
from django.template.response import TemplateResponse
|
||||
|
||||
from campaigns.models import Campaign
|
||||
from rpg_notes.settings import DEBUG
|
||||
from users.models import TenantUser
|
||||
|
||||
demo_campaign_id = 4 if DEBUG else 8
|
||||
|
||||
|
||||
class AuthMiddleware:
|
||||
def __init__(self, get_response):
|
||||
|
@ -19,6 +23,13 @@ class AuthMiddleware:
|
|||
or request.path.startswith("/login") \
|
||||
or request.path.startswith("/css"):
|
||||
return self.get_response(request)
|
||||
if tenant.pk == demo_campaign_id:
|
||||
if request.method in {"GET", "HEAD"} or request.path.startswith("/i18n/setlang"):
|
||||
return self.get_response(request)
|
||||
elif not current_user.is_authenticated:
|
||||
r = TemplateResponse(request, "common/demo_readonly.jinja")
|
||||
r.render()
|
||||
return r
|
||||
if not current_user.is_authenticated:
|
||||
return redirect_to_login(request.get_full_path())
|
||||
if not current_user.tenants.filter(pk=tenant.pk).exists():
|
||||
|
|
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-06-19 14:37+0200\n"
|
||||
"POT-Creation-Date: 2022-07-05 20:20+0200\n"
|
||||
"PO-Revision-Date: 2022-06-19 14:13+0200\n"
|
||||
"Last-Translator: Lukas Winkler <translations@lw1.at>\n"
|
||||
"Language-Team: \n"
|
||||
|
@ -18,19 +18,35 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 3.1\n"
|
||||
|
||||
#: campaigns/models.py:11 common/models/nameslugmodel.py:8 loot/models.py:14
|
||||
#: campaigns/models.py:12 common/models/nameslugmodel.py:8 loot/models.py:14
|
||||
#: users/models.py:10
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: campaigns/models.py:12
|
||||
#: campaigns/models.py:13
|
||||
msgid "Language"
|
||||
msgstr "Sprache"
|
||||
|
||||
#: campaigns/templates/campaigns/campaign_detail.jinja:7
|
||||
#: campaigns/templates/campaigns/campaign_detail.jinja:8
|
||||
msgid "Players"
|
||||
msgstr "Spieler"
|
||||
|
||||
#: campaigns/templates/campaigns/campaign_detail.jinja:17
|
||||
msgid "This is a read-only demo of RPGnotes."
|
||||
msgstr "Dies ist eine nur lesbare Demo von RPGnotes."
|
||||
|
||||
#: campaigns/templates/campaigns/campaign_detail.jinja:18
|
||||
msgid ""
|
||||
"If you would like to try it yourself, go back to the homepage and sign up."
|
||||
msgstr ""
|
||||
"Falls du es selbst ausprobieren willst, gehe zurück zur Startseite und "
|
||||
"registriere dich."
|
||||
|
||||
#: campaigns/templates/campaigns/campaign_detail.jinja:21
|
||||
#: templates/common/demo_readonly.jinja:17
|
||||
msgid "Homepage"
|
||||
msgstr "Startseite"
|
||||
|
||||
#: campaigns/templates/campaigns/campaign_edit.jinja:5
|
||||
msgid "Add new campaign"
|
||||
msgstr "Neue Campagne erstellen"
|
||||
|
@ -53,7 +69,7 @@ msgstr "Campaign erstellen"
|
|||
msgid "Nickname"
|
||||
msgstr "Spitzname"
|
||||
|
||||
#: characters/models.py:26
|
||||
#: characters/models.py:26 common/models/aliasmodel.py:9
|
||||
msgid "Aliases"
|
||||
msgstr "Aliase"
|
||||
|
||||
|
@ -62,6 +78,7 @@ msgid "Subtitle"
|
|||
msgstr "Untertitel"
|
||||
|
||||
#: characters/models.py:31 characters/templates/characters/detail.jinja:53
|
||||
#: common/models/draft.py:13
|
||||
msgid "Player"
|
||||
msgstr "Spieler"
|
||||
|
||||
|
@ -70,11 +87,12 @@ msgid "If no player is selected, this character is considered an NPC."
|
|||
msgstr "Wenn kein Spieler ausgewählt ist, ist dies ein NPC."
|
||||
|
||||
#: characters/models.py:37 characters/templates/characters/detail.jinja:57
|
||||
#: factions/models.py:17
|
||||
#: factions/models.py:11
|
||||
msgid "Faction"
|
||||
msgstr "Fraktion"
|
||||
|
||||
#: characters/models.py:41 locations/models.py:26 loot/models.py:28
|
||||
#: characters/models.py:41 characters/templates/characters/detail.jinja:61
|
||||
#: locations/models.py:26 loot/models.py:28
|
||||
#: loot/templates/loot/overview.jinja:17
|
||||
msgid "Location"
|
||||
msgstr "Ort"
|
||||
|
@ -123,15 +141,19 @@ msgstr "Bearbeiten"
|
|||
msgid "Also known as:"
|
||||
msgstr "Auch bekannt als:"
|
||||
|
||||
#: characters/templates/characters/detail.jinja:74 templates/macros.jinja:28
|
||||
#: characters/templates/characters/detail.jinja:79 templates/macros.jinja:28
|
||||
msgid "Last updated"
|
||||
msgstr "Zuletzt geändert"
|
||||
|
||||
#: characters/templates/characters/detail.jinja:75 templates/macros.jinja:29
|
||||
#: characters/templates/characters/detail.jinja:80 templates/macros.jinja:29
|
||||
msgid "by"
|
||||
msgstr "von"
|
||||
|
||||
#: common/models/descriptionmodel.py:8
|
||||
#: common/models/aliasmodel.py:8
|
||||
msgid "Alias"
|
||||
msgstr "Alias"
|
||||
|
||||
#: common/models/descriptionmodel.py:8 common/models/draft.py:8
|
||||
msgid "Description"
|
||||
msgstr "Beschreibung"
|
||||
|
||||
|
@ -147,7 +169,7 @@ msgstr "Datum"
|
|||
msgid "Session"
|
||||
msgstr "Session"
|
||||
|
||||
#: days/models.py:17 days/templates/days/day_detail.jinja:30
|
||||
#: days/models.py:17 days/templates/days/day_detail.jinja:32
|
||||
msgid "Sessions"
|
||||
msgstr "Sessions"
|
||||
|
||||
|
@ -167,7 +189,7 @@ msgstr "Tag"
|
|||
msgid "Add Day"
|
||||
msgstr "Tag hinzufügen"
|
||||
|
||||
#: factions/models.py:18 templates/tenantbase.jinja:34
|
||||
#: factions/models.py:12 templates/tenantbase.jinja:34
|
||||
msgid "Factions"
|
||||
msgstr "Fraktionen"
|
||||
|
||||
|
@ -180,11 +202,11 @@ msgid "Members"
|
|||
msgstr "Mitglieder"
|
||||
|
||||
#: locations/models.py:19 locations/templates/locations/detail.jinja:41
|
||||
#: notes/models.py:20 notes/templates/notes/detail.jinja:41
|
||||
#: notes/models.py:19 notes/templates/notes/detail.jinja:41
|
||||
msgid "Part of"
|
||||
msgstr "Teil von"
|
||||
|
||||
#: locations/models.py:22 loot/models.py:18 notes/models.py:23
|
||||
#: locations/models.py:22 loot/models.py:18 notes/models.py:22
|
||||
msgid "Image"
|
||||
msgstr "Bild"
|
||||
|
||||
|
@ -256,27 +278,27 @@ msgstr "Speichern"
|
|||
msgid "Item"
|
||||
msgstr "Objekt"
|
||||
|
||||
#: loot/templates/loot/overview.jinja:15 loot/templates/loot/overview.jinja:81
|
||||
#: loot/templates/loot/overview.jinja:15 loot/templates/loot/overview.jinja:83
|
||||
msgid "Total Value"
|
||||
msgstr "Gesamtwert"
|
||||
|
||||
#: loot/templates/loot/overview.jinja:65
|
||||
#: loot/templates/loot/overview.jinja:67
|
||||
msgid "Value each"
|
||||
msgstr "Wert pro Stück"
|
||||
|
||||
#: loot/templates/loot/overview.jinja:69
|
||||
#: loot/templates/loot/overview.jinja:71
|
||||
msgid "Weight"
|
||||
msgstr "Gewicht"
|
||||
|
||||
#: loot/templates/loot/overview.jinja:84
|
||||
#: loot/templates/loot/overview.jinja:86
|
||||
msgid "Add Loot"
|
||||
msgstr "Loot hinzufügen"
|
||||
|
||||
#: notes/models.py:27
|
||||
#: notes/models.py:26
|
||||
msgid "Note"
|
||||
msgstr "Notiz"
|
||||
|
||||
#: notes/models.py:28 templates/tenantbase.jinja:30
|
||||
#: notes/models.py:27 templates/tenantbase.jinja:30
|
||||
msgid "Notes"
|
||||
msgstr "Notizen"
|
||||
|
||||
|
@ -315,29 +337,46 @@ msgid "You might want to go back to the <a href=\"%(url)s\">homepage</a>."
|
|||
msgstr ""
|
||||
"Du möchtest vielleicht zurück zur <a href=\"%(url)s\">Startseite</a> gehen."
|
||||
|
||||
#: templates/base.jinja:37 templates/tenantbase.jinja:76
|
||||
#: templates/base.jinja:37 templates/tenantbase.jinja:82
|
||||
msgid "Log out"
|
||||
msgstr "Abmelden"
|
||||
|
||||
#: templates/base.jinja:39 templates/common/homepage.jinja:18
|
||||
#: templates/base.jinja:39 templates/common/homepage.jinja:20
|
||||
#: templates/registration/login.jinja:21
|
||||
msgid "Log in"
|
||||
msgstr "Anmelden"
|
||||
|
||||
#: templates/common/homepage.jinja:8
|
||||
#: templates/common/demo_readonly.jinja:8
|
||||
msgid ""
|
||||
"This campain is just intended to be a public demo of RPGnotes. Therefore, "
|
||||
"content can't be edited."
|
||||
msgstr ""
|
||||
"Diese Kampagne ist nur als öffentliche Demo von RPGnotes gedacht. Daher kann "
|
||||
"der Inhalt nicht bearbeitet werden."
|
||||
|
||||
#: templates/common/demo_readonly.jinja:14
|
||||
msgid "Go back"
|
||||
msgstr "Zurück"
|
||||
|
||||
#: templates/common/homepage.jinja:10
|
||||
msgid ""
|
||||
"An experimental, collaborative note taking app and wiki optimized for RPG "
|
||||
"games."
|
||||
msgstr ""
|
||||
"Eine experimentelle, kollaborative Notiz-App und Wiki optimiert für RPGs"
|
||||
|
||||
#: templates/common/homepage.jinja:15
|
||||
#: templates/common/homepage.jinja:17
|
||||
msgid "List of Campaigns"
|
||||
msgstr "Liste der Campaigns"
|
||||
|
||||
#: templates/common/homepage.jinja:21
|
||||
#: templates/common/homepage.jinja:23
|
||||
msgid "Sign up"
|
||||
msgstr "Registrieren"
|
||||
|
||||
#: templates/common/homepage.jinja:26
|
||||
msgid "Demo Campain"
|
||||
msgstr "Demo Kampagne"
|
||||
|
||||
#: templates/common/languageselect.jinja:3
|
||||
#: templates/common/languageselect.jinja:6 templates/tenantbase.jinja:66
|
||||
msgid "Change Language"
|
||||
|
@ -354,7 +393,7 @@ msgstr "Aktivierung fehlgeschlagen"
|
|||
|
||||
#: templates/registration/activation_failed.jinja:6
|
||||
msgid "Maybe this activation link has already been clicked before."
|
||||
msgstr ""
|
||||
msgstr "Vielleicht wurde dieser Aktivierungslink schon einmal geklickt"
|
||||
|
||||
#: templates/registration/login.jinja:6
|
||||
msgid "Login"
|
||||
|
@ -397,7 +436,7 @@ msgstr "Suchen"
|
|||
msgid "Go!"
|
||||
msgstr "Los!"
|
||||
|
||||
#: templates/tenantbase.jinja:72 users/templates/users/edit.jinja:5
|
||||
#: templates/tenantbase.jinja:74 users/templates/users/edit.jinja:5
|
||||
msgid "Edit User Account"
|
||||
msgstr "Benutzerkonto bearbeiten"
|
||||
|
||||
|
@ -405,7 +444,7 @@ msgstr "Benutzerkonto bearbeiten"
|
|||
msgid "Email Address"
|
||||
msgstr "E-Mail-Adresse"
|
||||
|
||||
#: users/views.py:37
|
||||
#: users/views.py:38
|
||||
msgid ""
|
||||
"You account was created. Please click the confirmation link in the E-Mail to "
|
||||
"activate it."
|
||||
|
@ -413,14 +452,11 @@ msgstr ""
|
|||
"Dein Account wurde erstellt. Bitte klicke auf den Bestätigungslink in der E-"
|
||||
"Mail um ihn zu aktivieren."
|
||||
|
||||
#: users/views.py:51
|
||||
#: users/views.py:52
|
||||
msgid "Account was successfully activated. You can log in now."
|
||||
msgstr ""
|
||||
"Der Account wurde erfolgreich aktiviert. Du kannst dich jetzt damit anmelden."
|
||||
|
||||
#: users/views.py:61
|
||||
#: users/views.py:62
|
||||
msgid "User account was updated successfully"
|
||||
msgstr "Benutzeraccount wurde erfolgreich bearbeitet"
|
||||
|
||||
#~ msgid "Nobody"
|
||||
#~ msgstr "Niemand"
|
||||
|
|
|
@ -15,7 +15,6 @@ class LootListView(generic.ListView):
|
|||
def get_context_data(self, **kwargs):
|
||||
data = super().get_context_data(**kwargs)
|
||||
data['total_value'] = self.get_queryset().aggregate(Sum("value_gold"))["value_gold__sum"]
|
||||
print(data['total_value'])
|
||||
return data
|
||||
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ class SearchResultsView(TemplateView):
|
|||
template_name = "search/search_results.jinja"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
print(self.request.GET)
|
||||
if "q" not in self.request.GET:
|
||||
return ""
|
||||
query_string = self.request.GET['q']
|
||||
|
|
|
@ -69,3 +69,9 @@
|
|||
transform: translateY(-50%) rotate(359deg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#autocomplete input {
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
|
|
@ -101,3 +101,4 @@ footer {
|
|||
.lum-lightbox {
|
||||
z-index: 50;
|
||||
}
|
||||
|
||||
|
|
22
templates/common/demo_readonly.jinja
Normal file
22
templates/common/demo_readonly.jinja
Normal file
|
@ -0,0 +1,22 @@
|
|||
{% extends "base.jinja" %}
|
||||
|
||||
{% block mainpage %}
|
||||
<div class="px-4 py-5 my-5 text-center">
|
||||
<h1 class="display-5 fw-bold">Can't edit demo instance</h1>
|
||||
<div class="col-lg-6 mx-auto">
|
||||
<p class="lead mb-4">
|
||||
{% trans trimmed %}
|
||||
This campain is just intended to be a public demo of RPGnotes. Therefore, content can't be edited.
|
||||
{% endtrans %}
|
||||
</p>
|
||||
<div class="d-grid gap-2 d-sm-flex justify-content-sm-center">
|
||||
<a href="javascript:history.back()" class="btn btn-primary btn-lg px-4 gap-3">
|
||||
{% trans %}Go back{% endtrans %}
|
||||
</a>
|
||||
<a href="https://rpgnotes.lw1.at/" class="btn btn-outline-secondary btn-lg px-4">
|
||||
{% trans %}Homepage{% endtrans %}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,5 +1,7 @@
|
|||
{% extends "base.jinja" %}
|
||||
|
||||
{% block title %}RPGnotes{% endblock %}
|
||||
|
||||
{% block mainpage %}
|
||||
<div class="px-4 py-5 my-5 text-center">
|
||||
<h1 class="display-5 fw-bold">RPG notes</h1>
|
||||
|
@ -20,6 +22,10 @@
|
|||
<a href="{{ url("django_registration_register") }} " class="btn btn-outline-secondary btn-lg px-4">
|
||||
{% trans %}Sign up{% endtrans %}
|
||||
</a>
|
||||
<a href="https://demo.rpgnotes.lw1.at/ " class="btn btn-primary btn-lg px-4 gap-3" target="_blank">
|
||||
{% trans %}Demo Campain{% endtrans %}
|
||||
</a>
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -68,13 +68,21 @@
|
|||
{% if user.is_staff %}
|
||||
<li><a class="dropdown-item" href="/admin/">Admin</a></li>
|
||||
{% endif %}
|
||||
<li><a class="dropdown-item"
|
||||
href="{{ main_url() }}/profile/">{% trans %}Edit User Account{% endtrans %}</a></li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li><a class="dropdown-item" href="{{ url("logout") }}">{% trans %}Log out{% endtrans %}</a>
|
||||
</li>
|
||||
{% if user.is_authenticated %}
|
||||
<li>
|
||||
<a class="dropdown-item" href="{{ main_url() }}/profile/">
|
||||
{% trans %}Edit User Account{% endtrans %}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="{{ url("logout") }}">
|
||||
{% trans %}Log out{% endtrans %}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
@ -29,8 +29,6 @@ class CustomUserChangeForm(UserChangeForm):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
password = self.fields.get('password')
|
||||
print(password.help_text)
|
||||
password.help_text = password.help_text.replace("../password/", reverse("password_change"))
|
||||
print(password.help_text)
|
||||
self.fields['email'].disabled = True
|
||||
self.fields['last_login'].disabled = True
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from django.contrib import messages
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.contrib.messages.views import SuccessMessageMixin
|
||||
from django.core.mail import mail_admins
|
||||
from django.urls import reverse_lazy
|
||||
|
@ -53,7 +54,7 @@ class CustomActivationView(ActivationView):
|
|||
return user
|
||||
|
||||
|
||||
class UserEditView(SuccessMessageMixin, UpdateView):
|
||||
class UserEditView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
|
||||
template_name = "users/edit.jinja"
|
||||
model = TenantUser
|
||||
form_class = CustomUserChangeForm
|
||||
|
|
37
utils/languages.py
Normal file
37
utils/languages.py
Normal file
|
@ -0,0 +1,37 @@
|
|||
"""
|
||||
list of languages supported by postgresql fulltext search
|
||||
|
||||
SELECT cfgname FROM pg_ts_config
|
||||
|
||||
"""
|
||||
full_text_languages = [
|
||||
"simple",
|
||||
"arabic",
|
||||
"danish",
|
||||
"dutch",
|
||||
"english",
|
||||
"finnish",
|
||||
"french",
|
||||
"german",
|
||||
"greek",
|
||||
"hungarian",
|
||||
"indonesian",
|
||||
"irish",
|
||||
"italian",
|
||||
"lithuanian",
|
||||
"nepali",
|
||||
"norwegian",
|
||||
"portuguese",
|
||||
"romanian",
|
||||
"russian",
|
||||
"spanish",
|
||||
"swedish",
|
||||
"tamil",
|
||||
"turkish"
|
||||
]
|
||||
full_text_languages_choice = []
|
||||
for lang in full_text_languages:
|
||||
full_text_languages_choice.append((
|
||||
lang,
|
||||
"Other" if lang == "simple" else lang.title()
|
||||
))
|
Loading…
Reference in a new issue