diff --git a/jdav_web/jdav_web/settings/components/jet.py b/jdav_web/jdav_web/settings/components/jet.py index e261545..7fe28cd 100644 --- a/jdav_web/jdav_web/settings/components/jet.py +++ b/jdav_web/jdav_web/settings/components/jet.py @@ -52,6 +52,7 @@ JET_SIDE_MENU_ITEMS = [ {'app_label': 'startpage', 'permissions': ['startpage'], 'items': [ {'name': 'section', 'permissions': ['startpage.view_section']}, {'name': 'post', 'permissions': ['startpage.view_post']}, + {'name': 'link', 'permissions': ['startpage.view_link']}, ]}, {'label': 'Externe Links', 'items' : [ { 'label': 'Nextcloud', 'url': CLOUD_LINK, 'url_blank': True }, diff --git a/jdav_web/jdav_web/views.py b/jdav_web/jdav_web/views.py index 1d6c251..c692dbe 100644 --- a/jdav_web/jdav_web/views.py +++ b/jdav_web/jdav_web/views.py @@ -2,7 +2,9 @@ from django.http import HttpResponse from django.views.static import serve from django.conf import settings from django.contrib.admin.views.decorators import staff_member_required - +from django.contrib import admin +from django.shortcuts import render +from startpage.models import Link import re @@ -28,3 +30,19 @@ def media_access(request, path): return media_unprotected(request, path) else: return media_protected(request, path) + + +def custom_admin_view(request): + """ + this methods provides access to models in order to render a custom admin page index site. + """ + app_list = admin.site.get_app_list(request) + context = { + 'app_list': app_list, + 'site_header': admin.site.site_header, + 'site_title': admin.site.site_title, + 'external_links': Link.objects.all() + } + return render(request, 'admin/index.html', context) + +admin.site.index = custom_admin_view diff --git a/jdav_web/startpage/admin.py b/jdav_web/startpage/admin.py index 724f17d..e950659 100644 --- a/jdav_web/startpage/admin.py +++ b/jdav_web/startpage/admin.py @@ -2,8 +2,10 @@ from django.contrib import admin from django.conf import settings from django import forms from django.utils.translation import gettext_lazy as _ +from django.db.models import TextField +from django.forms import Textarea -from .models import Post, Image, Section, MemberOnPost +from .models import Post, Image, Section, MemberOnPost, Link class ImageInline(admin.TabularInline): @@ -40,3 +42,14 @@ class SectionForm(forms.ModelForm): class SectionAdmin(admin.ModelAdmin): list_display = ['title', 'absolute_urlname'] form = SectionForm + + +@admin.register(Link) +class LinkAdmin(admin.ModelAdmin): + list_display = ['title', 'url', 'visible'] + + formfield_overrides = { + TextField: {'widget': Textarea(attrs={'rows': 2, 'cols': 40})} + } + + diff --git a/jdav_web/startpage/migrations/0004_link.py b/jdav_web/startpage/migrations/0004_link.py new file mode 100644 index 0000000..b3f6184 --- /dev/null +++ b/jdav_web/startpage/migrations/0004_link.py @@ -0,0 +1,25 @@ +# Generated by Django 4.0.1 on 2025-02-24 22:35 + +from django.db import migrations, models +import utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('startpage', '0003_alter_post_section'), + ] + + operations = [ + migrations.CreateModel( + name='Link', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('icon', utils.RestrictedFileField(blank=True, upload_to='icons', verbose_name='Link Icon')), + ('title', models.CharField(blank=True, default='', max_length=100, verbose_name='Title')), + ('description', models.CharField(blank=True, default='', max_length=300, verbose_name='Description')), + ('url', models.URLField(max_length=250)), + ('visible', models.BooleanField(default=True, verbose_name='Sichtbar')), + ], + ), + ] diff --git a/jdav_web/startpage/migrations/0005_alter_link_description.py b/jdav_web/startpage/migrations/0005_alter_link_description.py new file mode 100644 index 0000000..ee10b97 --- /dev/null +++ b/jdav_web/startpage/migrations/0005_alter_link_description.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.1 on 2025-02-25 00:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('startpage', '0004_link'), + ] + + operations = [ + migrations.AlterField( + model_name='link', + name='description', + field=models.TextField(blank=True, default='', verbose_name='Description'), + ), + ] diff --git a/jdav_web/startpage/models.py b/jdav_web/startpage/models.py index 5a78512..070fa00 100644 --- a/jdav_web/startpage/models.py +++ b/jdav_web/startpage/models.py @@ -101,3 +101,27 @@ class MemberOnPost(models.Model): class Meta: verbose_name = _("Person") verbose_name_plural = _("Persons") + + +class Link(models.Model): + """ + Link to external resources that should be shown on the internal startpage. + """ + + title = models.CharField(_('Title'), max_length=100, default='', blank=True) + description = models.TextField(_('Description'), default='', blank=True) + url = models.URLField(max_length=250) + + icon = RestrictedFileField(verbose_name=_('Link Icon'), + upload_to='icons', + blank=True, + max_upload_size=5, + content_types=['image/jpeg', + 'image/png', + 'image/gif']) + + visible = models.BooleanField(verbose_name=_('Sichtbar'), default=True) + + def __str__(self): + return self.title + \ No newline at end of file diff --git a/jdav_web/startpage/templates/startpage/contact.html b/jdav_web/startpage/templates/startpage/contact.html new file mode 100644 index 0000000..ac75a82 --- /dev/null +++ b/jdav_web/startpage/templates/startpage/contact.html @@ -0,0 +1,18 @@ +{% load common %} + + +

Ansprechpersonen

+{% comment %} +Nicht alles im Leben ist ein automatisierter Prozess. Falls du trotz KOMPASS nicht mehr +weiterweißt oder sonst der Schuh drückt, schreibe eine E-Mail an eine der folgenden Personen: +{% endcomment %} +
+ + + + + \ No newline at end of file diff --git a/jdav_web/templates/admin/index.html b/jdav_web/templates/admin/index.html index cf085d1..7bb5776 100644 --- a/jdav_web/templates/admin/index.html +++ b/jdav_web/templates/admin/index.html @@ -98,67 +98,103 @@ Hier kannst du E-Mails an deine Gruppe oder an andere Menschen in der JDAV {% se {% block sidebar %}
+ Jugendreferat + + jugendreferat@jdav-hd.de +
- - - - - - - - - - - - - - - - -
- Nextcloud - - Hier liegen Vorlagen für Formulare und nützliche Handbücher. -
- DAV 360 - - Zugriff zu Online Office, Teams und deinem DAV Mailaccount. -
- Julei-Wiki - - Informationen zum Jugendleiter*in-sein. -
- Dokumentation - - Kompass Dokumentation -
- -

Ansprechpersonen

-{% comment %} -Nicht alles im Leben ist ein automatisierter Prozess. Falls du trotz KOMPASS nicht mehr -weiterweißt oder sonst der Schuh drückt, schreibe eine E-Mail an eine der folgenden Personen: -{% endcomment %}
- - - - - - - - - -
- Jugendreferat - - jugendreferat@jdav-hd.de -
- Fragen zum Kompass - - digitales@jdav-hd.de -
+ +

Links

+ + + + + +
+ +{% include "startpage/contact.html" %} +
{% endblock %}