diff --git a/jdav_web/jdav_web/settings/components/base.py b/jdav_web/jdav_web/settings/components/base.py index f004e1d..bbb8945 100644 --- a/jdav_web/jdav_web/settings/components/base.py +++ b/jdav_web/jdav_web/settings/components/base.py @@ -46,6 +46,8 @@ INSTALLED_APPS = [ 'finance.apps.FinanceConfig', 'ludwigsburgalpin.apps.LudwigsburgalpinConfig', #'easy_select2', + 'markdownify.apps.MarkdownifyConfig', + 'markdownx', 'djcelery_email', 'nested_admin', 'django_celery_beat', @@ -146,3 +148,43 @@ PASSWORD_HASHERS = [ 'django.contrib.auth.hashers.Argon2PasswordHasher', 'django.contrib.auth.hashers.ScryptPasswordHasher', ] + +MARKDOWNIFY = { + 'default': { + "WHITELIST_TAGS": [ + 'img', + 'abbr', + 'acronym', + 'a', + 'b', + 'blockquote', + 'em', + 'i', + 'li', + 'ol', + 'p', + 'strong', + 'ul', + 'br', + 'code', + 'span', + 'div', 'class', + 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' + ], + "WHITELIST_ATTRS": [ + 'src', + 'href', + 'style', + 'alt', + 'class', + ], + "LINKIFY_TEXT": { + "PARSE_URLS": True, + + # Next key/value-pairs only have effect if "PARSE_URLS" is True + "PARSE_EMAIL": True, + "CALLBACKS": [], + "SKIP_TAGS": [], + } + } +} diff --git a/jdav_web/jdav_web/urls.py b/jdav_web/jdav_web/urls.py index 581d4fc..53fdae7 100644 --- a/jdav_web/jdav_web/urls.py +++ b/jdav_web/jdav_web/urls.py @@ -34,10 +34,17 @@ urlpatterns += i18n_patterns( re_path(r'^members/', include('members.urls', namespace="members")), re_path(r'^LBAlpin/Programm(/)?(20)?[0-9]{0,2}', include('ludwigsburgalpin.urls', namespace="ludwigsburgalpin")), - re_path(r'^$', include('startpage.urls', namespace="startpage")), re_path(r'^_nested_admin/', include('nested_admin.urls')), + re_path(r'^', include('startpage.urls', namespace="startpage")), ) +urlpatterns += [ + re_path(r'^markdownx/', include('markdownx.urls')), +] + +handler404 = 'startpage.views.handler404' +handler500 = 'startpage.views.handler500' + # TODO: django serving from MEDIA_URL should be disabled in production stage # see # http://stackoverflow.com/questions/5871730/need-a-minimal-django-file-upload-example diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 755e279..879600c 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -159,6 +159,7 @@ class MemberAdmin(CommonAdminMixin, admin.ModelAdmin): 'medication', 'tetanus_vaccination', 'photos_may_be_taken', 'legal_guardians', ('good_conduct_certificate_presented_date', 'good_conduct_certificate_presentation_needed'), 'iban', 'has_key', 'has_free_ticket_gym', 'gets_newsletter', 'registered', 'registration_form', + 'image', 'active', 'echoed', ('join_date', 'leave_date'), 'comments', 'technical_comments', @@ -456,7 +457,7 @@ class GroupAdminForm(forms.ModelForm): class GroupAdmin(CommonAdminMixin, admin.ModelAdmin): - fields = ['name', 'year_from', 'year_to', 'leiters'] + fields = ['name', 'description', 'year_from', 'year_to', 'leiters', 'show_website'] form = GroupAdminForm list_display = ('name', 'year_from', 'year_to') inlines = [RegistrationPasswordInline, PermissionOnGroupInline] diff --git a/jdav_web/members/migrations/0012_member_image_group_description.py b/jdav_web/members/migrations/0012_member_image_group_description.py new file mode 100644 index 0000000..91130af --- /dev/null +++ b/jdav_web/members/migrations/0012_member_image_group_description.py @@ -0,0 +1,29 @@ +# Generated by Django 4.0.1 on 2023-04-09 11:46 + +from django.db import migrations, models +import utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('members', '0011_alter_freizeit_date_alter_freizeit_end'), + ] + + operations = [ + migrations.AddField( + model_name='group', + name='description', + field=models.TextField(blank=True, default='', verbose_name='description'), + ), + migrations.AddField( + model_name='group', + name='show_website', + field=models.BooleanField(default=False, verbose_name='show on website'), + ), + migrations.AddField( + model_name='member', + name='image', + field=utils.RestrictedFileField(blank=True, upload_to='people', verbose_name='image'), + ), + ] diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index aad93fe..a59bd80 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -55,6 +55,8 @@ class Group(models.Model): e.g: J1, J2, Jugendleiter, etc. """ name = models.CharField(max_length=50, verbose_name=_('name')) # e.g: J1 + description = models.TextField(verbose_name=_('description'), default='', blank=True) + show_website = models.BooleanField(verbose_name=_('show on website'), default=False) year_from = models.IntegerField(verbose_name=_('lowest year'), default=2010) year_to = models.IntegerField(verbose_name=_('highest year'), default=2011) leiters = models.ManyToManyField('members.Member', verbose_name=_('youth leaders'), @@ -214,6 +216,13 @@ class Member(Person): 'image/jpeg', 'image/png', 'image/gif']) + image = RestrictedFileField(verbose_name=_('image'), + upload_to='people', + blank=True, + max_upload_size=5242880, + content_types=['image/jpeg', + 'image/png', + 'image/gif']) echo_key = models.CharField(max_length=32, default="") echo_expire = models.DateTimeField(default=timezone.now) echoed = models.BooleanField(default=True, verbose_name=_('Echoed')) diff --git a/jdav_web/members/templates/members/register_waiting_list.html b/jdav_web/members/templates/members/register_waiting_list.html index a178316..a9668e6 100644 --- a/jdav_web/members/templates/members/register_waiting_list.html +++ b/jdav_web/members/templates/members/register_waiting_list.html @@ -10,9 +10,17 @@ -
{% trans "Here you can register for the waiting list." %}
++Da wir durch das Engagment unserer ehrenamtlichen Jugendleitern, aber auch die Kletterhalle sowie Ausrüstung limitiert sind können wir nur eine begrenzte Anzahl an Plätzen in den Gruppen anbieten. Damit alle eine faire Changce auf einen Gruppenplatz bekommen, führen wir für die jüngeren Klettergruppen eine gemeinsame Liste. Soblad Plätze frei werden oder eine neue Gruppe gegründet wird seid ihr an der Reihe! Dennoch kann die Wartezeit leider zwischen wenigen Wochen und über einem Jahr variieren. +
+ ++Die Anmeldung für die Gruppen JuMa, +Klettertreff und +Mountainbike laufen separat. +
{% if error_message %}{{ error_message }}
diff --git a/jdav_web/members/views.py b/jdav_web/members/views.py index 0b5cd97..158095a 100644 --- a/jdav_web/members/views.py +++ b/jdav_web/members/views.py @@ -1,4 +1,4 @@ -from django.shortcuts import render +from startpage.views import render from django.utils.translation import gettext_lazy as _ from django.http import HttpResponseRedirect from django.forms import ModelForm, TextInput, DateInput diff --git a/jdav_web/startpage/admin.py b/jdav_web/startpage/admin.py index 8c38f3f..c1dcd06 100644 --- a/jdav_web/startpage/admin.py +++ b/jdav_web/startpage/admin.py @@ -1,3 +1,26 @@ from django.contrib import admin -# Register your models here. +from .models import Post, Image, Section, MemberOnPost + + +class ImageInline(admin.TabularInline): + model = Image + extra = 0 + + +class MemberOnPostInline(admin.TabularInline): + model = MemberOnPost + extra = 0 + + +@admin.register(Post) +class PostAdmin(admin.ModelAdmin): + inlines = [ImageInline, MemberOnPostInline] + list_display = ['title', 'date', 'section', 'absolute_urlname'] + list_filter = ['section'] + search_fields = ['title'] + + +@admin.register(Section) +class SectionAdmin(admin.ModelAdmin): + list_display = ['title', 'absolute_urlname'] diff --git a/jdav_web/startpage/migrations/0001_initial.py b/jdav_web/startpage/migrations/0001_initial.py new file mode 100644 index 0000000..a867c0f --- /dev/null +++ b/jdav_web/startpage/migrations/0001_initial.py @@ -0,0 +1,77 @@ +# Generated by Django 4.0.1 on 2023-04-09 12:11 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import markdownx.models +import utils + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('members', '0012_member_image_group_description'), + ] + + operations = [ + migrations.CreateModel( + name='Section', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=50, verbose_name='Title')), + ('urlname', models.CharField(max_length=25, verbose_name='URL')), + ('website_text', markdownx.models.MarkdownxField(blank=True, default='', verbose_name='website text')), + ], + options={ + 'verbose_name': 'Section', + 'verbose_name_plural': 'Sections', + 'unique_together': {('urlname',)}, + }, + ), + migrations.CreateModel( + name='Post', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='', max_length=50, verbose_name='Title')), + ('urlname', models.CharField(default='', max_length=50, verbose_name='URL')), + ('date', models.DateField(blank=True, default=django.utils.timezone.localdate, null=True, verbose_name='Date')), + ('website_text', markdownx.models.MarkdownxField(blank=True, default='', verbose_name='website text')), + ('detailed', models.BooleanField(default=False, verbose_name='detailed')), + ('groups', models.ManyToManyField(blank=True, to='members.Group', verbose_name='Groups')), + ('section', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='startpage.section', verbose_name='section')), + ], + options={ + 'verbose_name': 'Post', + 'verbose_name_plural': 'Posts', + 'unique_together': {('section', 'urlname')}, + }, + ), + migrations.CreateModel( + name='MemberOnPost', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, default='', verbose_name='Description')), + ('tag', models.CharField(blank=True, default='', max_length=20, verbose_name='Tag')), + ('members', models.ManyToManyField(blank=True, to='members.Member', verbose_name='Member')), + ('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='people', to='startpage.post', verbose_name='Member')), + ], + options={ + 'verbose_name': 'Person', + 'verbose_name_plural': 'Persons', + }, + ), + migrations.CreateModel( + name='Image', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('f', utils.RestrictedFileField(blank=True, upload_to='images', verbose_name='file')), + ('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='startpage.post')), + ], + options={ + 'verbose_name': 'image', + 'verbose_name_plural': 'images', + }, + ), + ] diff --git a/jdav_web/startpage/migrations/__init__.py b/jdav_web/startpage/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jdav_web/startpage/models.py b/jdav_web/startpage/models.py index 71a8362..01fda7a 100644 --- a/jdav_web/startpage/models.py +++ b/jdav_web/startpage/models.py @@ -1,3 +1,102 @@ +import os + from django.db import models +from django.utils.translation import gettext_lazy as _ +from django.utils import timezone +from django.urls import reverse +from utils import RestrictedFileField +from members.models import Group, Member + +from markdownx.models import MarkdownxField + + +class Section(models.Model): + """ + A section of the website. + """ + title = models.CharField(verbose_name=_('Title'), max_length=50) + urlname = models.CharField(verbose_name=_('URL'), max_length=25) + website_text = MarkdownxField(verbose_name=_('website text'), default='', blank=True) + + class Meta: + verbose_name = _('Section') + verbose_name_plural = _('Sections') + unique_together = ['urlname'] + + def __str__(self): + return self.title + + def absolute_urlname(self): + return reverse('startpage:section', args=(self.urlname,)) + absolute_urlname.short_description = 'URL' + + +class Post(models.Model): + """ + A post with title, markdown and images. + """ + title = models.CharField(verbose_name=_('Title'), default='', max_length=50) + urlname = models.CharField(verbose_name=_('URL'), default='', max_length=50) + date = models.DateField(default=timezone.localdate, verbose_name=_('Date'), null=True, blank=True) + website_text = MarkdownxField(verbose_name=_('website text'), default='', blank=True) + + groups = models.ManyToManyField(Group, verbose_name=_('Groups'), blank=True) + detailed = models.BooleanField(verbose_name=_('detailed'), default=False) + + section = models.ForeignKey(Section, verbose_name=_('section'), on_delete=models.SET_NULL, null=True, blank=True) + + def __str__(self): + """String represenation""" + return self.title + + class Meta: + verbose_name = _("Post") + verbose_name_plural = _("Posts") + unique_together = ['section', 'urlname'] + + def absolute_section(self): + if self.section is None: + return 'Aktuelles' + else: + return self.section.title + absolute_section.short_description = _('Section') + + def absolute_urlname(self): + if self.section is None: + return reverse('startpage:post', args=('aktuelles', self.urlname)) + else: + return reverse('startpage:post', args=(self.section.urlname, self.urlname)) + absolute_urlname.short_description = 'URL' + + +class Image(models.Model): + """ + An image on a post. + """ + post = models.ForeignKey(Post, on_delete=models.CASCADE) + # file (not naming it file because of builtin) + f = RestrictedFileField(_('file'), + upload_to='images', + blank=True, + max_upload_size=10485760) + + def __str__(self): + return os.path.basename(self.f.name) if self.f.name else _("Empty") + + class Meta: + verbose_name = _('image') + verbose_name_plural = _('images') + + +class MemberOnPost(models.Model): + """ + One or multiple members on a post. + """ + members = models.ManyToManyField(Member, verbose_name=_('Member'), blank=True) + post = models.ForeignKey(Post, verbose_name=_('Member'), on_delete=models.CASCADE, related_name='people') + description = models.TextField(_('Description'), default='', blank=True) + tag = models.CharField(_('Tag'), max_length=20, default='', blank=True) -# Create your models here. + class Meta: + verbose_name = _("Person") + verbose_name_plural = _("Persons") diff --git a/jdav_web/startpage/templates/startpage/404.html b/jdav_web/startpage/templates/startpage/404.html new file mode 100644 index 0000000..1e1880c --- /dev/null +++ b/jdav_web/startpage/templates/startpage/404.html @@ -0,0 +1,13 @@ +{% extends "startpage/base_subsite.html" %} + +{% block content %} ++Bitte entschuldigen Sie, wir konnten die gewünschte Seite nicht finden. +
++Zurück zur Startseite. +
+ +{% endblock %} diff --git a/jdav_web/startpage/templates/startpage/500.html b/jdav_web/startpage/templates/startpage/500.html new file mode 100644 index 0000000..7eb0c41 --- /dev/null +++ b/jdav_web/startpage/templates/startpage/500.html @@ -0,0 +1,11 @@ +{% extends "startpage/base_subsite.html" %} + +{% block content %} ++Bitte entschuldigen Sie, bei Ihrer Anfrage ist leider ein unerwarteter Fehler aufgetreten. Der Serveradministrator +wurde bereits verständigt. +
+ +{% endblock %} diff --git a/jdav_web/startpage/templates/startpage/aktuelles.html b/jdav_web/startpage/templates/startpage/aktuelles.html new file mode 100644 index 0000000..d33b37c --- /dev/null +++ b/jdav_web/startpage/templates/startpage/aktuelles.html @@ -0,0 +1,21 @@ +{% extends "startpage/base_subsite.html" %} +{% load static %} +{% load markdownify %} +{% load markdown_extras %} + +{% block content %} ++ {{ post.website_text|markdownify|truncatechars:200 }} + weiterlesen +
++Die JDAV Heidelberg bietet verschiedene Gruppen für die Jugend bis 27 Jahre an. Die meisten Gruppen klettern regelmäßig in der Halle und Draußen, aber auch allgemeine Ausfahrten, Wintersport, Hochtouren und Mountenbiken gehöhren zu den Aktivitäten. Nachfolgend findest du eine Übersicht aller Gruppen. Die Teilnahme an den Gruppen erfordert generell eine vorherigen Anmledung, auch wenn Zeit und Ort bekannt sein sollte bitten wir dich nicht einfach dort zu erscheinen. +
+ +Zur Zeit bieten wir die Folgenden Gruppen an:
++{{ group.description }} +
+ +Unsere Jugendgruppen sind ab einem Alter von 9 Jahren. Sie können ihr Kind gerne bereits früher auf die Liste setzen, um die Wartezeit zu verkürzen, sobald ihr Kind das entsprechende Alter erreicht hat.
+ ++Leider haben wir eine sehr große Nachfrage, der wir mit unseren Jugendleiter:innen und unseren Gruppenplätzen nicht nachkommen können. Die Wartezeiten sind sehr unterscheidlich und hängen vom Alter und den verfügbaren Gruppenplätzen ab. Die Wartezeiten kann zwischen einigen Wochen und mehr als einem Jahr liegen. +
+ ++Ja. Sobald ihr Kind regelmäßig an den Gruppenstunden teilnimmt, muss es Mitglied im DAV Heidelberg sein. Für die Aufnahme in die Warteliste ist keine Mitgliedschaft notwenig. +
+ ++Die Jugendgruppen an sich sind kostenlos, allerdings ist eine Vereinsmitgliedschaft und der Halleneintritt nötig. Der Beitrag setzt sich aus zwei Teilen zusammen: +
+ ++
+Während der Gruppenstunden können die Kinder das Material (Klettergurt, Schuhe, Sicherungsgerät, … ) ohne zusätzliche Kosten von der Jugend des DAV Heidelberg ausleihen. +
+ +{% endblock %} diff --git a/jdav_web/startpage/templates/startpage/header.html b/jdav_web/startpage/templates/startpage/header.html new file mode 100644 index 0000000..02ab273 --- /dev/null +++ b/jdav_web/startpage/templates/startpage/header.html @@ -0,0 +1,9 @@ +
+Deutscher Alpenverein Sektion Heidelberg 1869 e.V.
+Jugendreferat
+Harbigweg 20
+69124 Heidelberg, Deutschland
+Tel.: +49 (62 21) 48 40 76
+Fax: +49 (62 21) 43 73 38
+E-Mail: geschaeftsstelle@alpenverein-heidelberg.de
+URL: www.alpenverein-heidelberg.de
+
+Der Deutsche Alpenverein Sektion Heidelberg 1869 wird durch den ersten Vorsitzenden, den zweiten Vorsitzenden und den Schatzmeister vertreten: +
+ ++Dr. Ulf Gieseler (1. Vorsitzender), Paul Jonas (2. Vorsitzender), Marc von der Heydt (Schatzmeister) +(gemäß § 14 Satz der Satzung des Deutschen Alpenvereins Sektion Heidelberg 1869) +
+ ++Der Deutsche Alpenverein Sektion Heidelberg 1869 e.V. ist im Vereinsregister des Amtsgerichts Heidelberg unter der Registernummer VR 486 eingetragen. +
+ +
+Leitung: Eva Engelmann und Robert Scheffler (kommissarisch)
+E-Mail: jugend@alpenverein-heidelberg.de
+URL: www.jdav-hd.de ; www.jdav-heidelberg.de
+
+Haftungsausschluss; Disclaimer +
+ + ++Diese Datenschutz-Information gilt für die Datenverarbeitung durch: +
+ +
+Verantwortlicher: Deutscher Alpenverein Sektion Heidelberg 1869 e.V.
+Harbigweg 20, 69124 Heidelberg
+Email: alpenverein-heidelberg@t-online.de
+Telefon: +49 6221 484076
+
+Zur Auftragsverarbeitung für die jdav Heidelberg ist die Firma reeweb AG Wettsteinplatz 74058 Basel Schweiz beauftragt. Die Datenverarbeitung erfolgt in Rechenzentren in der Schweiz oder Staaten des Europäischen Wirtschaftsraums (EWR). +
+ ++Beim Aufrufen unserer Website jdav-hd.merten.dev werden durch den auf Ihrem Endgerät zum Einsatz kommenden Browser automatisch Informationen an den Server unserer Website gesendet. Diese Informationen werden temporär in einem sog. Logfile gespeichert. Folgende Informationen werden dabei ohne Ihr Zutun erfasst und bis zur automatischen Löschung gespeichert: +
+ ++
+Die genannten Daten werden durch uns zu folgenden Zwecken verarbeitet: +
++Die Rechtsgrundlage für die Datenverarbeitung ist Art. 6 Abs. 1 S. 1 lit. f DSGVO. Unser berechtigtes Interesse folgt aus oben aufgelisteten Zwecken zur Datenerhebung. In keinem Fall verwenden wir die erhobenen Daten zu dem Zweck, Rückschlüsse auf Ihre Person zu ziehen. +
+ ++Darüber hinaus setzen wir beim Besuch unserer Website Cookies ein. Nähere Erläuterungen dazu erhalten Sie unter den Ziff. 4 dieser Datenschutzerklärung. +
+ ++Eine Übermittlung Ihrer persönlichen Daten an Dritte zu anderen als den im Folgenden aufgeführten Zwecken findet nicht statt. +
+ +a) Weitergabe von Daten, die wir im Rahmen Ihres Besuchs unserer Website erheben: + ++Wir geben Ihre persönlichen Daten nur an Dritte weiter, wenn: +
+ ++Zur Weitergabe der Daten im Rahmen einer Mitgliedschaft im Alpenverein Heidelberg beachten Sie bitte auch die Datenschutzerklärung der Sektion unter www.alpenverein-heidelberg.de/datenschutz. +
+ ++Die jdav Heidelberg hat die Firma reeweb AG Wettsteinplatz 74058 Basel Schweiz beauftragt die Daten ihrer Mitglieder zu verwalten. Diese Datenverarbeitung erfolgt in Rechenzentren in der Schweiz oder Staaten des Europäischen Wirtschaftsraums (EWR). +
+ ++Die von Ihnen in Ihrer Beitrittserklärung angegebenen Daten über Ihre persönlichen und sachlichen Verhältnisse (sogenannte personenbezogene Daten) werden gleichermaßen auf Datenverarbeitungs-Systemen der Sektion, der Sie beitreten, wie auch des Bundesverbandes des Deutschen Alpenvereins (DAV) gespeichert und für Verwaltungszwecke der Sektion, bzw. des Bundesverbandes verarbeitet und genutzt werden. Verantwortliche Stelle im Sinne des § 3 (7) BDSG bzw. Art. 4 lit 7. DSGVO ist dabei die Sektion, der Sie beitreten. +
+ ++Eine Übermittlung von Teilen dieser Daten an die jeweiligen Landes- und Sportfachverbände findet nur im Rahmen der in den Satzungen der Landes- und Sportfachverbände festgelegten Zwecke statt. Diese Datenübermittlungen sind notwendig zum Zwecke der Organisation eines Spiel- bzw. Wettkampfbetriebes und zum Zwecke der Einwerbung von öffentlichen Fördermitteln. +
+ ++Wir sichern Ihnen zu, Ihre personenbezogenen Daten vertraulich zu behandeln und nicht an Stellen außerhalb des DAV, weder außerhalb der Sektion, noch außerhalb des Bundesverbandes und der jeweiligen Landes- und Sportfachverbände weiterzugeben. Sie können jederzeit schriftlich Auskunft über die bezüglich Ihrer Person gespeicherten Daten erhalten und Korrektur verlangen, soweit die bei der Sektion und der Bundesgeschäftsstelle gespeicherten Daten unrichtig sind. Sollten die gespeicherten Daten für die Abwicklung der Geschäftsprozesse der Sektion, bzw. des Bundesverbandes nicht erforderlich sein, so können Sie auch eine Sperrung, gegebenenfalls auch eine Löschung Ihrer personenbezogenen Daten verlangen. +
+ ++Nach einer Beendigung der Mitgliedschaft werden Ihre personenbezogenen Daten gelöscht, soweit sie nicht, entsprechend der steuerrechtlichen Vorgaben, aufbewahrt werden müssen. +
+ ++Eine Nutzung Ihrer personenbezogenen Daten für Werbezwecke findet weder durch die Sektion, den Bundesverband, Kooperationspartner des Bundesverbandes des Deutschen Alpenvereins noch durch die jeweiligen Landes- und Sportfachverbände statt. +
+ ++Die Datenverarbeitung erfolgt auf Grundlage des Art. 6 Abs. 1 S. 1 lit. b DSGVO. +
+ ++Wir setzen auf unserer Seite Cookies ein. Hierbei handelt es sich um kleine Dateien, die Ihr Browser automatisch erstellt und die auf Ihrem Endgerät (Laptop, Tablet, Smartphone o.ä.) gespeichert werden, wenn Sie unsere Seite besuchen. Cookies richten auf Ihrem Endgerät keinen Schaden an, enthalten keine Viren, Trojaner oder sonstige Schadsoftware. +
+ ++In dem Cookie werden Informationen abgelegt, die sich jeweils im Zusammenhang mit dem spezifisch eingesetzten Endgerät ergeben. Dies bedeutet jedoch nicht, dass wir dadurch unmittelbar Kenntnis von Ihrer Identität erhalten. +
+ ++Der Einsatz von Cookies dient einerseits dazu, die Nutzung unseres Angebots für Sie angenehmer zu gestalten. So setzen wir sogenannte Session-Cookies ein, um zu erkennen, dass Sie einzelne Seiten unserer Website bereits besucht haben. Diese werden nach Verlassen unserer Seite automatisch gelöscht. +
+ ++Darüber hinaus setzen wir ebenfalls zur Optimierung der Benutzerfreundlichkeit temporäre Cookies ein, die für einen bestimmten festgelegten Zeitraum auf Ihrem Endgerät gespeichert werden. Besuchen Sie unsere Seite erneut, um unsere Dienste in Anspruch zu nehmen, wird automatisch erkannt, dass Sie bereits bei uns waren und welche Eingaben und Einstellungen Sie getätigt haben, um diese nicht noch einmal eingeben zu müssen. +
+ ++Die durch Cookies verarbeiteten Daten sind für die genannten Zwecke zur Wahrung unserer berechtigten Interessen sowie der Dritter nach Art. 6 Abs. 1 S. 1 lit. f DSGVO erforderlich. +
+ ++Die meisten Browser akzeptieren Cookies automatisch. Sie können Ihren Browser jedoch so konfigurieren, dass keine Cookies auf Ihrem Computer gespeichert werden oder stets ein Hinweis erscheint, bevor ein neuer Cookie angelegt wird. Die vollständige Deaktivierung von Cookies kann jedoch dazu führen, dass Sie nicht alle Funktionen unserer Website nutzen können. +
+ ++a) Beschreibung und Umfang der Datenverarbeitung +
+ ++Auf unserer Internetseite sind Kontaktformulare vorhanden, welche für die elektronische Kontaktaufnahme genutzt werden können. Nimmt ein Nutzer diese Möglichkeit wahr, so werden die in der Eingabemaske eingegeben Daten an uns übermittelt und gespeichert. Diese Daten sind: +
+ ++Name, Email-Adresse, Betreff und Inhalt Ihrer Nachricht. +
+ ++Im Zeitpunkt der Absendung der Nachricht werden zudem folgende Daten gespeichert +
+ ++
+Für die Verarbeitung der Daten wird im Rahmen des Absendevorgangs Ihre Einwilligung eingeholt und auf diese Datenschutzerklärung verwiesen. +
+ ++Alternativ ist eine Kontaktaufnahme über die bereitgestellte Email-Adresse möglich. In diesem Fall werden Ihre mit der E-Mail übermittelten personenbezogenen Daten gespeichert. +
+ ++Es erfolgt in diesem Zusammenhang keine Weitergabe der Daten an Dritte. Die Daten werden ausschließlich für die Verarbeitung der Konversation verwendet. +
+ ++Falls im Formular angegeben erfolgt eine Weiterleitung aller eingegeben Daten an die private E-Mail-Adresse der verantwortlichen Jugendleiter. In diesem Fall kann je nach E-Mail Provider des Jugendleiters eine Weitergabe der Daten an Dritte nicht ausgeschlossen werden. +
+ +b) Rechtsgrundlage für die Datenverarbeitung
+ ++Rechtsgrundlage für die Verarbeitung der Daten ist bei Vorliegen Ihrer Einwilligung Art. 6 Abs. 1 lit. a DSGVO. +
+ ++Rechtsgrundlage für die Verarbeitung der Daten, die im Zuge einer Übersendung einer Email übermittelt werden, ist Art. 6 Abs. 1 lit. f DSGVO. Zielt der Email-Kontakt auf den Abschluss eines Vertrages, so ist zusätzliche Rechtsgrundlage für die Verarbeitung Art. 6 Abs. 1 lit. b DSGVO. +
+ +c) Zweck der Datenverarbeitung
+ ++Die Verarbeitung der personenbezogenen Daten aus der Eingabemaske dient uns allein zur Bearbeitung der Kontaktaufnahme. Im Falle einer Kontaktaufnahme per E-Mail liegt hierin auch das erforderliche berechtigte Interesse an der Verarbeitung der Daten. +
+ ++Die sonstigen während des Absendevorgangs verarbeiteten personenbezogenen Daten dienen dazu, einen Missbrauch des Kontaktformulars zu verhindern und die Sicherheit unserer informationstechnischen Systeme sicherzustellen. +
+ +d) Dauer der Speicherung
+ ++Die Daten werden gelöscht, sobald sie für die Erreichung des Zweckes ihrer Erhebung nicht mehr erforderlich sind. Für die personenbezogenen Daten aus der Eingabemaske des Kontaktformulars und diejenigen, die per E-Mail übersandt wurden, ist dies dann der Fall, wenn die jeweilige Konversation mit dem Nutzer beendet ist. Beendet ist die Konversation dann, wenn sich aus den Umständen entnehmen lässt, dass der betroffene Sachverhalt abschließend geklärt ist. +
+ ++Die während des Absendevorgangs zusätzlich erhobenen personenbezogenen Daten werden spätestens nach einer Frist von sieben Tagen gelöscht. +
+ ++Auf unserer Internetseite sind Anmeldeformulare vorhanden, welches für die elektronische Anmeldung zu Jugendgruppen, Kursen und Veranstaltungen unseres Vereins genutzt werden kann. Nimmt ein Nutzer diese Möglichkeit wahr, so werden die in der Eingabemaske eingegeben Daten an uns übermittelt und gespeichert. Für diese Datenverarbeitung ist die Firma reeweb AG Wettsteinplatz 74058 Basel Schweiz beauftragt. Diese Daten sind: +
+ ++Name, Email-Adresse, Telefonnummer, gewählter Kurs, Informationen zu DAV-Mitgliedschaft, Mitgliedsnummer, Alter bzw. Geburtsdatum, Adresse, Informationen zur Verfügbarkeit für Jugendgruppen ggfs. Informationen zur Lawinenausbildung, allfällig übermittelte Bemerkungen. +
+ ++Im Zeitpunkt der Absendung der Nachricht werden zudem folgende Daten gespeichert: +
+ ++
+Für die Verarbeitung der Daten wird im Rahmen des Absendevorgangs Ihre Einwilligung eingeholt und auf diese Datenschutzerklärung verwiesen. +
+ ++Die gespeicherten Daten werden spätestens ein Jahr nach Durchführung der Veranstaltung gelöscht, sofern nicht steuerliche Vorschriften eine längere Speicherdauer vorgeben. Daten auf der unserer Warteliste für Jugendgruppen werden ohne Frist gespeichert und auf Nachfrage bei anmeldung.jdav@alpenverein-heidelberg.de gelöscht werden. +
+ ++Auf unserer Internetseite sind Download-Angebote eingestellt. Nimmt ein Nutzer einen Download vor, so werden Daten an uns übermittelt und gespeichert. Diese Daten sind: +
+ ++
+Rechtsgrundlage für diese Speicherung ist Art. 6 Abs. 1 lit. f. DSGVO. +
+ ++Die gespeicherten Daten werden mit Ende des Besuchs unserer Website gelöscht. +
+ ++Sie haben das Recht: +
+ ++
+Sofern Ihre personenbezogenen Daten auf Grundlage von berechtigten Interessen gemäß Art. 6 Abs. 1 S. 1 lit. f DSGVO verarbeitet werden, haben Sie das Recht, gemäß Art. 21 DSGVO Widerspruch gegen die Verarbeitung Ihrer personenbezogenen Daten einzulegen, soweit dafür Gründe vorliegen, die sich aus Ihrer besonderen Situation ergeben oder sich der Widerspruch gegen Direktwerbung richtet. Im letzten Fall haben Sie ein generelles Widerspruchsrecht, das ohne Angabe einer besonderen Situation von uns umgesetzt wird. +
+ ++Möchten Sie von Ihrem Widerrufs- oder Widerspruchsrecht Gebrauch machen, genügt eine Email an +jugend@alpenverein-heidelberg.de oder +alpenverein-heidelberg@t-online.de. +
+ ++Wir bedienen uns geeigneter technischer und organisatorischer Sicherheitsmaßnahmen, um Ihre Daten gegen zufällige oder vorsätzliche Manipulationen, teilweisen oder vollständigen Verlust, Zerstörung oder gegen den unbefugten Zugriff Dritter zu schützen. Unsere Sicherheitsmaßnahmen werden entsprechend der technologischen Entwicklung fortlaufend verbessert. +
+ ++Diese Datenschutzerklärung ist aktuell gültig und hat den Stand April 2020. +
+ ++Durch die Weiterentwicklung unserer Website und Angebote darüber oder aufgrund geänderter gesetzlicher beziehungsweise behördlicher Vorgaben kann es notwendig werden, diese Datenschutzerklärung zu ändern. Die jeweils aktuelle Datenschutzerklärung kann jederzeit auf der Website unter +www.jdav-hd.de/impressum#datenschutz von Ihnen aufgerufen und falls gewünscht ausgedruckt werden. +
+ +{% endblock %} diff --git a/jdav_web/startpage/templates/startpage/index.html b/jdav_web/startpage/templates/startpage/index.html index 390893c..35d6f44 100644 --- a/jdav_web/startpage/templates/startpage/index.html +++ b/jdav_web/startpage/templates/startpage/index.html @@ -1,2 +1,30 @@ -{% load i18n %} -{% trans "Awesome JDAV website being able to do a lot!" %} +{% extends "startpage/base.html" %} +{% load static %} + +{% block title %} +Startseite +{% endblock %} + +{% block content %} + ++ Herzlich Willkommen auf unserer Webseite. Hier finden Sie alle + Informationen über die jdav Heidelberg. Viel Spaß beim Surfen! +
+
+ {% endif %}
+ | + {{ person.description|markdownify }} + | + {% for member in person.members.all %} +
+
+ {% if member.image %}
+
+
+ {% endif %}
+
+
+ {{ member.name }}
+ |
+ {% endfor %}
+
+ {% endif %}
+