add flatpages

This commit is contained in:
2021-05-13 16:31:05 +00:00
parent bf41aeca1a
commit 66dc28da88
21 changed files with 237 additions and 20 deletions

View File

@@ -1,17 +1,16 @@
from datetime import timedelta
from django.shortcuts import render from django.shortcuts import render
from django.utils import timezone from django.utils import timezone
from datetime import timedelta from core.models import CustomFlatPage
from .models import JobPosting from .models import JobPosting
from posts.models import Post
def index(request): def index(request):
job_postings_cutoff = timezone.now().date() - timedelta(30) # 30days from now job_postings_cutoff = timezone.now().date() - timedelta(30) # 30days from now
job_postings = JobPosting.all_jobPosting.filter(publishDate__gt=job_postings_cutoff) job_postings = JobPosting.all_jobPosting.filter(publishDate__gt=job_postings_cutoff)
bb_info = Post.objects.filter(slug="blackboard").first() bb_info = CustomFlatPage.objects.filter(title__iexact="blackboard").first()
bb_empty = Post.objects.filter(slug="blackboard-empty").first() bb_empty = CustomFlatPage.objects.filter(title__iexact="blackboard empty").first()
context = { context = {
"job_postings": job_postings, "job_postings": job_postings,

0
fet2020/core/__init__.py Normal file
View File

29
fet2020/core/admin.py Normal file
View File

@@ -0,0 +1,29 @@
from django.contrib import admin
from django.contrib.flatpages.admin import FlatPageAdmin
from django.contrib.flatpages.models import FlatPage
from django.contrib.sites.models import Site
from django.utils.translation import ugettext_lazy as _
from .forms import FlatPageForm
from .models import CustomFlatPage
# Define a new FlatPageAdmin
class CustomFlatPageAdmin(FlatPageAdmin):
form = FlatPageForm
fieldsets = (
(None, {'fields': ('url', 'title', 'content',)}),
(_('Advanced options'), {
'classes': ('collapse',),
'fields': ('registration_required', 'template_name'),
}),
)
list_display = ["url", "title", "registration_required"]
list_filter = ('registration_required',)
# Re-register FlatPageAdmin
admin.site.unregister(FlatPage)
admin.site.register(CustomFlatPage, CustomFlatPageAdmin)
admin.site.unregister(Site)

19
fet2020/core/apps.py Normal file
View File

@@ -0,0 +1,19 @@
from django.apps import AppConfig
from django.conf import settings
from django.db.models.signals import post_migrate
def update_default_site(sender, **kwargs):
from django.contrib.sites.models import Site
site = Site.objects.get_current()
site.domain = settings.HOST_NAME
site.name = 'FET'
site.save()
class CoreConfig(AppConfig):
name = 'core'
def ready(self):
post_migrate.connect(update_default_site, sender=self)

11
fet2020/core/forms.py Normal file
View File

@@ -0,0 +1,11 @@
from ckeditor_uploader.widgets import CKEditorUploadingWidget
from django import forms
from .models import CustomFlatPage
class FlatPageForm(forms.ModelForm):
class Meta:
model = CustomFlatPage
fields = '__all__'
widgets = {"content": CKEditorUploadingWidget(config_name="default")}

View File

@@ -0,0 +1,27 @@
# Generated by Django 3.1.5 on 2021-05-13 13:53
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('flatpages', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='CustomFlatPage',
fields=[
('flatpage_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='flatpages.flatpage')),
],
options={
'verbose_name': 'Statische Webseite',
'verbose_name_plural': 'Statische Webseiten',
},
bases=('flatpages.flatpage',),
),
]

View File

18
fet2020/core/models.py Normal file
View File

@@ -0,0 +1,18 @@
from django.conf import settings
from django.contrib.flatpages.models import FlatPage
from django.contrib.sites.models import Site
from django.db import models
class CustomFlatPage(FlatPage):
# Managers
objects = models.Manager()
class Meta:
verbose_name = "Statische Webseite"
verbose_name_plural = "Statische Webseiten"
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
self.sites.set([Site.objects.get(pk=settings.SITE_ID)])

3
fet2020/core/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
fet2020/core/views.py Normal file
View File

@@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

View File

@@ -63,13 +63,13 @@ def __checkPadExists(padID=None):
return False return False
def createPadifNotExists(padID): def createPadifNotExists(padID, text="helloworld"):
if not __checkPadExists(padID=padID): if not __checkPadExists(padID=padID):
with ep_client() as (epc, group): with ep_client() as (epc, group):
if not epc or not group: if not epc or not group:
return None return None
epc.createGroupPad( epc.createGroupPad(
groupID = group["groupID"], padName=padID, text="helloworld" groupID = group["groupID"], padName=padID, text=text
) )
return padID return padID

View File

@@ -66,7 +66,9 @@ INSTALLED_APPS = [
"django.contrib.sessions", "django.contrib.sessions",
"django.contrib.messages", "django.contrib.messages",
"django.contrib.staticfiles", "django.contrib.staticfiles",
"django.contrib.sites",
"django.contrib.sitemaps", "django.contrib.sitemaps",
"django.contrib.flatpages",
"taggit", "taggit",
"ckeditor", "ckeditor",
"ckeditor_uploader", "ckeditor_uploader",
@@ -77,6 +79,7 @@ INSTALLED_APPS = [
"django_filters", "django_filters",
"django_static_jquery_ui", "django_static_jquery_ui",
"fontawesome-free", "fontawesome-free",
"core.apps.CoreConfig",
"posts.apps.PostsConfig", "posts.apps.PostsConfig",
"members.apps.MembersConfig", "members.apps.MembersConfig",
"documents.apps.DocumentsConfig", "documents.apps.DocumentsConfig",
@@ -94,6 +97,7 @@ MIDDLEWARE = [
"fet2020.middleware.FETHeaderMiddleware", "fet2020.middleware.FETHeaderMiddleware",
"django.contrib.messages.middleware.MessageMiddleware", "django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware",
"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware",
] ]
ROOT_URLCONF = "fet2020.urls" ROOT_URLCONF = "fet2020.urls"
@@ -181,6 +185,10 @@ USE_TZ = True
LOCALE_PATHS = [os.path.join(BASE_DIR, "locale")] LOCALE_PATHS = [os.path.join(BASE_DIR, "locale")]
# Sites
SITE_ID = 1
# Static files (CSS, JavaScript, Images) # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/ # https://docs.djangoproject.com/en/3.0/howto/static-files/

View File

@@ -16,6 +16,10 @@ from members.viewsets import (
from rest_framework import routers from rest_framework import routers
from .sitemaps import sitemaps from .sitemaps import sitemaps
from django.contrib import flatpages
from django.urls import re_path
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register(r"posts", PostViewSet) router.register(r"posts", PostViewSet)
router.register(r"members", MemberViewSet) router.register(r"members", MemberViewSet)
@@ -38,10 +42,13 @@ urlpatterns = [
path("member/", include(member_urlpatterns), name="member"), path("member/", include(member_urlpatterns), name="member"),
path("blackboard/", include("blackboard.urls"), name="blackboard"), path("blackboard/", include("blackboard.urls"), name="blackboard"),
path("tasks/", include("tasks.urls"), name="tasks"), path("tasks/", include("tasks.urls"), name="tasks"),
path('pages/', include('django.contrib.flatpages.urls')),
path( path(
"sitemap.xml", "sitemap.xml",
sitemap, sitemap,
{"sitemaps": sitemaps}, {"sitemaps": sitemaps},
name="django.contrib.sitemaps.views.sitemap", name="django.contrib.sitemaps.views.sitemap",
), ),
re_path(r'^(?P<url>.*/)$', flatpages.views.flatpage),
path('impressum/', flatpages.views.flatpage, {'url': '/impressum/'}, name='impressum'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@@ -4,7 +4,7 @@ from django.http import Http404
from django.shortcuts import render from django.shortcuts import render
from collections import deque from collections import deque
from posts.models import Post from core.models import CustomFlatPage
from .models import Member, JobMember, JobGroup from .models import Member, JobMember, JobGroup
@@ -42,7 +42,7 @@ def index(request):
pinned_job_groups, unpinned_job_groups = __get_job_groups() pinned_job_groups, unpinned_job_groups = __get_job_groups()
members = deque(Member.all_members.all()) members = deque(Member.all_members.all())
fs_info = Post.objects.filter(slug="fachschaft").first() fs_info = CustomFlatPage.objects.filter(title__iexact="fachschaft").first()
context = { context = {
"pinned_job_groups": pinned_job_groups, "pinned_job_groups": pinned_job_groups,
@@ -86,7 +86,7 @@ def members_view(request, filter=None):
logger.info("Wrong member role '{}'".format(filter)) logger.info("Wrong member role '{}'".format(filter))
raise Http404("no member role") raise Http404("no member role")
fs_info = Post.objects.filter(slug="fachschaft").first() fs_info = CustomFlatPage.objects.filter(title__iexact="fachschaft").first()
context = { context = {
"pinned_job_groups": pinned_job_groups, "pinned_job_groups": pinned_job_groups,

View File

@@ -165,11 +165,18 @@ class FetMeetingForm(PostForm):
class PostSearchForm(forms.Form): class PostSearchForm(forms.Form):
year_of_first_post = Post.objects.get_queryset().last().public_date.year year_choices = [('', _('Alle'))]
years = range(year_of_first_post, timezone.now().date().year + 1)
year_choices = [('', _('Alle'))] + [(i, i) for i in years]
month_choices = [('', _('Alle'))] + list(MONTHS.items()) month_choices = [('', _('Alle'))] + list(MONTHS.items())
try:
first_post = Post.objects.get_queryset().last()
if first_post:
year_of_first_post = first_post.public_date.year
years = range(year_of_first_post, timezone.now().date().year + 1)
year_choices += [(i, i) for i in years]
except:
pass
year = forms.ChoiceField(label="Jahr", choices=year_choices, required=False) year = forms.ChoiceField(label="Jahr", choices=year_choices, required=False)
month = forms.ChoiceField(label="Monat", choices=month_choices, required=False) month = forms.ChoiceField(label="Monat", choices=month_choices, required=False)

View File

@@ -1,15 +1,18 @@
import re import re
import logging import logging
from urllib.request import URLError
from datetime import timedelta from datetime import timedelta
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.validators import ValidationError from django.core.validators import ValidationError
from django.db import models from django.db import models
from django.template.loader import render_to_string
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from django.utils.text import slugify from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from taggit.managers import TaggableManager from taggit.managers import TaggableManager
from core.models import CustomFlatPage
from documents import getPadHTML, setPadHTML, createPadifNotExists from documents import getPadHTML, setPadHTML, createPadifNotExists
from .managers import ( from .managers import (
PostManager, PostManager,
@@ -26,7 +29,14 @@ request_logger = logging.getLogger("django.request")
def create_pad_for_post(slug, typ="agenda"): def create_pad_for_post(slug, typ="agenda"):
"Creates a Etherpad Pad and returns EtherpadKey" "Creates a Etherpad Pad and returns EtherpadKey"
return createPadifNotExists(slug + "-" + typ) padID = createPadifNotExists(slug + "-" + typ)
if padID:
page = CustomFlatPage.objects.filter(title__iexact=typ).first()
if page:
setPadHTML(padID, page.content)
return padID
class Category(models.Model): class Category(models.Model):

View File

@@ -6,11 +6,11 @@
<h1>Blackboard</h1> <h1>Blackboard</h1>
{% if bb_info %} {% if bb_info %}
{{ bb_info.body|safe }} {{ bb_info.content|safe }}
{% endif %} {% endif %}
{% if bb_empty and not job_postings %} {% if bb_empty and not job_postings %}
{{ bb_empty.body|safe }} {{ bb_empty.content|safe }}
{% endif %} {% endif %}
<div class="grid-x grid-margin-x"> <div class="grid-x grid-margin-x">

View File

@@ -0,0 +1,8 @@
{% extends 'layout.html' %}
{% block content %}
<div class="grid-container">
{{ flatpage.content }}
</div>
{% endblock %}

View File

@@ -0,0 +1,68 @@
{% extends 'layout.html' %}
{% block content %}
<div class="grid-container">
<div class="grid-x padding-top-1">
<div class="cell large-4 medium-4"></div>
<div class="cell large-4 medium-4">
<a href="mailto:service@fet.at">
<div class="social-media-box">
<span class="social-media-badge badge">
<span class="social-media-badge-symbol">
<i class="far fa-envelope"></i>
</span>
</span>
<span class="social-media-text">Schreib uns ein Mail :)</span>
</div>
</a>
<a href="https://discord.fet.at">
<div class="social-media-box">
<span class="social-media-badge badge">
<span class="social-media-badge-symbol">
<i class="fab fa-discord"></i>
</span>
</span>
<span class="social-media-text">Komm auf unseren Discord-Server!</span>
</div>
</a>
<a href="https://instagram.fet.at">
<div class="social-media-box">
<span class="social-media-badge badge">
<span class="social-media-badge-symbol">
<i class="fab fa-instagram-square"></i>
</span>
</span>
<span class="social-media-text">Instagram</span>
</div>
</a>
<a href="https://telegram.fet.at">
<div class="social-media-box">
<span class="social-media-badge badge">
<span class="social-media-badge-symbol">
<i class="fab fa-telegram"></i>
</span>
</span>
<span class="social-media-text">Telegram</span>
</div>
</a>
<a href="https://facebook.fet.at">
<div class="social-media-box">
<span class="social-media-badge badge">
<span class="social-media-badge-symbol">
<i class="fab fa-facebook-square"></i>
</span>
</span>
<span class="social-media-text">Facebook</span>
</div>
</a>
</div>
</div>
</div>
{% endblock %}

View File

@@ -82,7 +82,7 @@
<div class="grid-y footer-grid-y"> <div class="grid-y footer-grid-y">
<div class="cell small-6 medium-9 large-9"> <div class="cell small-6 medium-9 large-9">
<a class="footer-link" href="{% url 'posts.show' 'impressum' %}" >Impressum</a> <a class="footer-link" href="{% url 'impressum' %}" >Impressum</a>
</div> </div>
<div class="cell small-6 medium-3 large-3 padding-bottom-2"> <div class="cell small-6 medium-3 large-3 padding-bottom-2">

View File

@@ -55,7 +55,7 @@
<div class="grid-x"> <div class="grid-x">
<div class="cell padding-top-1 padding-left-1 padding-right-1" style="background-color: white; text-align: justify;"> <div class="cell padding-top-1 padding-left-1 padding-right-1" style="background-color: white; text-align: justify;">
{% if fs_info %} {% if fs_info %}
{{ fs_info.body|safe }} {{ fs_info.content|safe }}
{% endif %} {% endif %}
</div> </div>
</div> </div>