diff --git a/input/forms.py b/input/forms.py
index d73bb10..3a58720 100755
--- a/input/forms.py
+++ b/input/forms.py
@@ -2,6 +2,7 @@ from django.conf import settings
from django.forms import ModelForm, DateField, ChoiceField, RadioSelect, BooleanField
from django.contrib.admin.widgets import AdminDateWidget
from django.utils.html import format_html
+from django.utils.safestring import mark_safe
from .models import Project, Volunteer, ConcreteVolunteer, Extern, ConcreteExtern, IFG, Library, TYPE_CHOICES,\
HonoraryCertificate, Travel, Email, Literature, List,\
@@ -56,8 +57,8 @@ class InternForm(FdbForm):
exclude = ('granted', 'granted_date', 'survey_mail_send', 'survey_mail_date', 'mail_state')
-HOTEL_CHOICES = {'TRUE': format_html('Hotelzimmer benötigt'),
- 'FALSE': format_html('Kein Hotelzimmer benötigt')
+HOTEL_CHOICES = {'TRUE': mark_safe('Hotelzimmer benötigt'),
+ 'FALSE': mark_safe('Kein Hotelzimmer benötigt')
}
@@ -148,8 +149,8 @@ class LiteratureForm(CheckForm):
class Media:
js = ('dropdown/js/literature.js',)
-ADULT_CHOICES = {'TRUE': format_html('Ich bin volljährig.'),
- 'FALSE': format_html('Ich bin noch nicht volljährig.')
+ADULT_CHOICES = {'TRUE': mark_safe('Ich bin volljährig.'),
+ 'FALSE': mark_safe('Ich bin noch nicht volljährig.')
}
diff --git a/input/models.py b/input/models.py
index eeb335c..c761cab 100755
--- a/input/models.py
+++ b/input/models.py
@@ -1,8 +1,7 @@
from datetime import date
from django.db import models
-from django.utils.html import format_html
-
+from django.utils.safestring import mark_safe
EMAIL_STATES = {'NONE': 'noch keine Mail versendet',
'INF': 'die Benachrichtigung zur Projektabschlussmail wurde versendet',
@@ -13,7 +12,7 @@ class Volunteer(models.Model):
realname = models.CharField(max_length=200, null=True, verbose_name="Realname",
help_text="Bitte gib deinen Vornamen und deinen Nachnamen ein.", default='')
email = models.EmailField(max_length=200, null=True, verbose_name='E-Mail-Adresse',
- help_text=format_html('Bitte gib deine E-Mail-Adresse ein, damit dich
Wikimedia Deutschland bei Rückfragen oder für
die Zusage kontaktieren kann.'))
+ help_text=mark_safe('Bitte gib deine E-Mail-Adresse ein, damit dich
Wikimedia Deutschland bei Rückfragen oder für
die Zusage kontaktieren kann.'))
# the following Fields are not supposed to be edited by users
@@ -40,7 +39,7 @@ class Extern(Volunteer):
''' abstract basis class for all data entered by extern volunteers '''
username = models.CharField(max_length=200, null=True, verbose_name='Benutzer_innenname',
- help_text=format_html("Wikimedia Benutzer_innenname"))
+ help_text=mark_safe("Wikimedia Benutzer_innenname"))
# the following Fields are not supposed to be edited by users
service_id = models.CharField(max_length=15, null=True, blank=True)
@@ -188,8 +187,8 @@ TRANSPORT_CHOICES = {'BAHN': 'Bahn',
PAYEDBY_CHOICES = {'WMDE': 'WMDE',
'REQU': 'Antragstellender Mensch'}
-HOTEL_CHOICES = {'TRUE': format_html('Hotelzimmer benötigt'),
- 'FALSE': format_html('Kein Hotelzimmer benötigt')
+HOTEL_CHOICES = {'TRUE': mark_safe('Hotelzimmer benötigt'),
+ 'FALSE': mark_safe('Kein Hotelzimmer benötigt')
}
from django.contrib.contenttypes.models import ContentType
@@ -244,15 +243,15 @@ class Grant(Extern):
abstract = True
-TYPE_CHOICES = {'BIB': format_html('Bibliotheksstipendium'),
- 'ELIT': format_html('eLiteraturstipendium'),
- 'MAIL': format_html('E-Mail-Adresse'),
- 'IFG': format_html('Kostenübernahme IFG-Anfrage'),
- 'LIT': format_html('Literaturstipendium'),
- 'LIST': format_html('Mailingliste'),
- 'TRAV': format_html('Reisekosten'),
- 'SOFT': format_html('Softwarestipendium'),
- 'VIS': format_html('Visitenkarten'),
+TYPE_CHOICES = {'BIB': mark_safe('Bibliotheksstipendium'),
+ 'ELIT': mark_safe('eLiteraturstipendium'),
+ 'MAIL': mark_safe('E-Mail-Adresse'),
+ 'IFG': mark_safe('Kostenübernahme IFG-Anfrage'),
+ 'LIT': mark_safe('Literaturstipendium'),
+ 'LIST': mark_safe('Mailingliste'),
+ 'TRAV': mark_safe('Reisekosten'),
+ 'SOFT': mark_safe('Softwarestipendium'),
+ 'VIS': mark_safe('Visitenkarten'),
}
# same model is used for Library, ELitStip and Software!
@@ -270,21 +269,21 @@ class Library(Grant):
return self.library
-SELFBUY_CHOICES = {'TRUE': format_html('Ich möchte das Werk selbst kaufen und per Kostenerstattung bei Wikimedia Deutschland abrechnen.'),
- 'FALSE': format_html('Ich möchte, dass Wikimedia Deutschland das Werk für mich kauft'),
+SELFBUY_CHOICES = {'TRUE': mark_safe('Ich möchte das Werk selbst kaufen und per Kostenerstattung bei Wikimedia Deutschland abrechnen.'),
+ 'FALSE': mark_safe('Ich möchte, dass Wikimedia Deutschland das Werk für mich kauft'),
}
class Literature(Grant):
info = models.CharField(max_length=500, verbose_name='Informationen zum Werk',
- help_text=format_html("Bitte gib alle Informationen zum benötigten Werk an,
\
+ help_text=mark_safe("Bitte gib alle Informationen zum benötigten Werk an,
\
die eine eindeutige Identifizierung ermöglichen (Autor, Titel, Verlag, ISBN, ...)"))
source = models.CharField(max_length=200, verbose_name='Bezugsquelle',
help_text="Bitte gib an, wo du das Werk kaufen möchtest.")
selfbuy = models.CharField( max_length=10, verbose_name='Selbstkauf?', choices=SELFBUY_CHOICES.items(), default='TRUE')
- selfbuy_give_data = models.BooleanField(verbose_name=format_html('Datenweitergabe erlauben'), help_text=format_html('Ich stimme der Weitergabe meiner Daten (Name, Postadresse) an den von mir angegebenen Anbieter/Dienstleister zu.'))
+ selfbuy_give_data = models.BooleanField(verbose_name=mark_safe('Datenweitergabe erlauben'), help_text=mark_safe('Ich stimme der Weitergabe meiner Daten (Name, Postadresse) an den von mir angegebenen Anbieter/Dienstleister zu.'))
selfbuy_data = models.TextField(max_length=1000, verbose_name='Persönliche Daten sowie Adresse', default='',\
- help_text=format_html("Bitte gib hier alle persönlichen Daten an, die wir benötigen, um das Werk
\
+ help_text=mark_safe("Bitte gib hier alle persönlichen Daten an, die wir benötigen, um das Werk
\
für dich zu kaufen und es dir anschließend zu schicken (z.B. Vorname Nachname, Anschrift,
\
Telefonnummer, E-Mail-Adresse usw.). Trenne die einzelnen Angaben durch Zeilenumbrüche."))
intern_notes = models.TextField(max_length=1000, blank=True, verbose_name="interne Anmerkungen")
@@ -315,15 +314,15 @@ MAIL_CHOICES = {'REALNAME': 'Vorname.Nachname',
'USERNAME': 'Username',
'OTHER': 'Sonstiges:'}
-ADULT_CHOICES = {'TRUE': format_html('Ich bin volljährig.'),
- 'FALSE': format_html('Ich bin noch nicht volljährig.')
+ADULT_CHOICES = {'TRUE': mark_safe('Ich bin volljährig.'),
+ 'FALSE': mark_safe('Ich bin noch nicht volljährig.')
}
class Email(Domain):
address = models.CharField(max_length=50,
choices=MAIL_CHOICES.items(),
default='USERNAME', verbose_name='Adressbestandteil',
- help_text=format_html("Bitte gib hier den gewünschten Adressbestandteil an,
der sich vor der Domain befinden soll."))
+ help_text=mark_safe("Bitte gib hier den gewünschten Adressbestandteil an,
der sich vor der Domain befinden soll."))
other = models.CharField(max_length=50,blank=True,null=True, verbose_name="Sonstiges")
adult = models.CharField( max_length=10, verbose_name='Volljährigkeit', choices=ADULT_CHOICES.items(), default='FALSE')
@@ -332,7 +331,7 @@ class Email(Domain):
class List(Domain):
address = models.CharField(max_length=50, default='NO_ADDRESS',
verbose_name="Adressbestandteil für Projektmailingliste",
- help_text=format_html("Bitte gib hier den gewünschten Adressbestandteil an,
der sich vor der Domain befinden soll."))
+ help_text=mark_safe("Bitte gib hier den gewünschten Adressbestandteil an,
der sich vor der Domain befinden soll."))
intern_notes = models.TextField(max_length=1000, blank=True, verbose_name="interne Anmerkungen")
PROJECT_CHOICE = {'PEDIA': 'Wikipedia',
@@ -354,7 +353,7 @@ class BusinessCard(Extern):
help_text='Für welches Wikimedia-Projekt möchtest Du Visitenkarten?')
data = models.TextField(max_length=1000, verbose_name='Persönliche Daten für die Visitenkarten', default='',
- help_text=format_html("Bitte gib hier alle persönlichen Daten an, und zwar genau so,
\
+ help_text=mark_safe("Bitte gib hier alle persönlichen Daten an, und zwar genau so,
\
wie sie (auch in der entsprechenden Reihenfolge) auf den Visitenkarten stehen sollen
\
(z.B. Vorname Nachname, Benutzer:/Benutzerin:, Benutzer-/-innenname, Anschrift,
\
Telefonnummer, E-Mail-Adresse usw.). Trenne die einzelnen Angaben durch Zeilenumbrüche.
\
@@ -363,12 +362,12 @@ class BusinessCard(Extern):
Adresse, die du ebenfalls beantragen kannst, sofern du nicht bereits eine besitzt."))
variant = models.CharField(max_length=5, choices=BC_VARIANT.items(),
default='NOPIC', verbose_name='Variante',
- help_text=format_html('so sehen die Varianten aus: \
+ help_text=mark_safe('so sehen die Varianten aus: \
mit Bild ohne Bild' ))
url_of_pic = models.CharField(max_length=200, verbose_name='Url des Bildes', default='', help_text="Bitte gib die Wikimedia-Commons-URL des Bildes an.")
sent_to = models.TextField(max_length=1000, verbose_name='Versandadresse',
default='', help_text="Bitte gib den Namen und die vollständige Adresse ein, an welche die Visitenkarten geschickt werden sollen.")
- send_data_to_print = models.BooleanField(default=False, verbose_name=format_html('Datenweitergabe erlauben'), help_text=format_html('Hiermit erlaube ich die Weitergabe meiner Daten (Name, Postadresse) an den von Wikimedia
Deutschland ausgewählten Dienstleister (z. B. wir-machen-druck.de) zum Zwecke des direkten
Versands der Druckerzeugnisse an mich.'))
+ send_data_to_print = models.BooleanField(default=False, verbose_name=mark_safe('Datenweitergabe erlauben'), help_text=mark_safe('Hiermit erlaube ich die Weitergabe meiner Daten (Name, Postadresse) an den von Wikimedia
Deutschland ausgewählten Dienstleister (z. B. wir-machen-druck.de) zum Zwecke des direkten
Versands der Druckerzeugnisse an mich.'))
intern_notes = models.TextField(max_length=1000, blank=True, verbose_name="interne Anmerkungen")
diff --git a/input/views.py b/input/views.py
index 2be7384..213ecb5 100755
--- a/input/views.py
+++ b/input/views.py
@@ -2,18 +2,14 @@ from datetime import date
from smtplib import SMTPException
from django.shortcuts import render
-from django.forms import modelformset_factory
from django.http import HttpResponse
+from django.utils.safestring import mark_safe
from formtools.wizard.views import CookieWizardView
-from django.core.mail import send_mail, BadHeaderError, EmailMultiAlternatives
-from django.conf import settings
+from django.core.mail import BadHeaderError, EmailMultiAlternatives
from django.template.loader import get_template
-from django.template import Context
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
-from django.utils.html import format_html
-from django.utils.translation import gettext as _
from .forms import ProjectForm, ExternForm, LibraryForm, IFGForm, LiteratureForm,\
HonoraryCertificateForm, InternForm, TravelForm, EmailForm,\
@@ -102,7 +98,7 @@ class InternView(LoginRequiredMixin, CookieWizardView): # pragma: no cover
self.choice = choice
else:
form = super().get_form(step, data, files)
- form.fields['realname'].help_text = format_html("Vor- und Zuname (Realname), Wer hat das Projekt beantragt?
\
+ form.fields['realname'].help_text = mark_safe("Vor- und Zuname (Realname), Wer hat das Projekt beantragt?
\
Wer ist Hauptansprechperson? Bei WMDE-MAs immer „(WMDE)“,
\
bei externen Partnern „(PART)“ hinzufügen.")
return form
@@ -144,18 +140,18 @@ class InternView(LoginRequiredMixin, CookieWizardView): # pragma: no cover
# these where used as labels in the second form TYPE_CHOICES is used for the first form and the
# text above the second form. only used for BIB, SOFT, ELIT in the moment
-LABEL_CHOICES = {'BIB': format_html('Bibliothek'),
- 'ELIT': format_html('Datenbank/Online-Ressource'),
- 'MAIL': format_html('E-Mail-Adresse'),
- 'IFG': format_html('Kostenübernahme IFG-Anfrage'),
- 'LIT': format_html('Literaturstipendium'),
- 'LIST': format_html('Mailingliste'),
- 'TRAV': format_html('Reisekosten'),
- 'SOFT': format_html('Software'),
- 'VIS': format_html('Visitenkarten'),
+LABEL_CHOICES = {'BIB': mark_safe('Bibliothek'),
+ 'ELIT': mark_safe('Datenbank/Online-Ressource'),
+ 'MAIL': mark_safe('E-Mail-Adresse'),
+ 'IFG': mark_safe('Kostenübernahme IFG-Anfrage'),
+ 'LIT': mark_safe('Literaturstipendium'),
+ 'LIST': mark_safe('Mailingliste'),
+ 'TRAV': mark_safe('Reisekosten'),
+ 'SOFT': mark_safe('Software'),
+ 'VIS': mark_safe('Visitenkarten'),
}
-HELP_CHOICES = {'BIB': format_html("In welchem Zeitraum möchtest du recherchieren oder
wie lange ist der Bibliotheksausweis gültig?"),
+HELP_CHOICES = {'BIB': mark_safe("In welchem Zeitraum möchtest du recherchieren oder
wie lange ist der Bibliotheksausweis gültig?"),
'ELIT': "Wie lange gilt der Zugang?",
'SOFT': "Wie lange gilt die Lizenz?",
}
@@ -180,7 +176,7 @@ class ExternView(CookieWizardView):
print(f'choice detection in ExternView: {TYPE_CHOICES[choice]}')
if choice == 'IFG':
form = IFGForm(data)
- form.fields['notes'].help_text = format_html("Bitte gib an, wie die gewonnenen Informationen den
Wikimedia-Projekten zugute kommen sollen.")
+ form.fields['notes'].help_text = mark_safe("Bitte gib an, wie die gewonnenen Informationen den
Wikimedia-Projekten zugute kommen sollen.")
elif choice in ('BIB', 'SOFT', 'ELIT'):
form = LibraryForm(data)
form.fields['library'].label = LABEL_CHOICES[choice]
@@ -188,7 +184,7 @@ class ExternView(CookieWizardView):
form.fields['duration'].help_text = HELP_CHOICES[choice]
elif choice == 'MAIL':
form = EmailForm(data)
- form.fields['domain'].help_text = format_html("Mit welcher Domain, bzw. für welches Wikimedia-Projekt,
möchtest du eine Mailadresse beantragen?")
+ form.fields['domain'].help_text = mark_safe("Mit welcher Domain, bzw. für welches Wikimedia-Projekt,
möchtest du eine Mailadresse beantragen?")
elif choice == 'LIT':
form = LiteratureForm(data)
form.fields['notes'].help_text = "Bitte gib an, wofür du die Literatur verwenden möchtest."
@@ -196,7 +192,7 @@ class ExternView(CookieWizardView):
form = BusinessCardForm(data)
elif choice == 'LIST':
form = ListForm(data)
- form.fields['domain'].help_text = format_html("Mit welcher Domain, bzw. für welches Wikimedia-Projekt,
möchtest du eine Mailingliste beantragen?")
+ form.fields['domain'].help_text = mark_safe("Mit welcher Domain, bzw. für welches Wikimedia-Projekt,
möchtest du eine Mailingliste beantragen?")
elif choice == 'TRAV':
form = TravelForm(data)
else: # pragma: no cover