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.utils import timezone
from datetime import timedelta
from core.models import CustomFlatPage
from .models import JobPosting
from posts.models import Post
def index(request):
job_postings_cutoff = timezone.now().date() - timedelta(30) # 30days from now
job_postings = JobPosting.all_jobPosting.filter(publishDate__gt=job_postings_cutoff)
bb_info = Post.objects.filter(slug="blackboard").first()
bb_empty = Post.objects.filter(slug="blackboard-empty").first()
bb_info = CustomFlatPage.objects.filter(title__iexact="blackboard").first()
bb_empty = CustomFlatPage.objects.filter(title__iexact="blackboard empty").first()
context = {
"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
def createPadifNotExists(padID):
def createPadifNotExists(padID, text="helloworld"):
if not __checkPadExists(padID=padID):
with ep_client() as (epc, group):
if not epc or not group:
return None
epc.createGroupPad(
groupID = group["groupID"], padName=padID, text="helloworld"
groupID = group["groupID"], padName=padID, text=text
)
return padID

View File

@@ -66,7 +66,9 @@ INSTALLED_APPS = [
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"django.contrib.sites",
"django.contrib.sitemaps",
"django.contrib.flatpages",
"taggit",
"ckeditor",
"ckeditor_uploader",
@@ -77,6 +79,7 @@ INSTALLED_APPS = [
"django_filters",
"django_static_jquery_ui",
"fontawesome-free",
"core.apps.CoreConfig",
"posts.apps.PostsConfig",
"members.apps.MembersConfig",
"documents.apps.DocumentsConfig",
@@ -94,6 +97,7 @@ MIDDLEWARE = [
"fet2020.middleware.FETHeaderMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware",
]
ROOT_URLCONF = "fet2020.urls"
@@ -181,6 +185,10 @@ USE_TZ = True
LOCALE_PATHS = [os.path.join(BASE_DIR, "locale")]
# Sites
SITE_ID = 1
# Static files (CSS, JavaScript, Images)
# 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 .sitemaps import sitemaps
from django.contrib import flatpages
from django.urls import re_path
router = routers.DefaultRouter()
router.register(r"posts", PostViewSet)
router.register(r"members", MemberViewSet)
@@ -38,10 +42,13 @@ urlpatterns = [
path("member/", include(member_urlpatterns), name="member"),
path("blackboard/", include("blackboard.urls"), name="blackboard"),
path("tasks/", include("tasks.urls"), name="tasks"),
path('pages/', include('django.contrib.flatpages.urls')),
path(
"sitemap.xml",
sitemap,
{"sitemaps": sitemaps},
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)

View File

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

View File

@@ -165,11 +165,18 @@ class FetMeetingForm(PostForm):
class PostSearchForm(forms.Form):
year_of_first_post = Post.objects.get_queryset().last().public_date.year
years = range(year_of_first_post, timezone.now().date().year + 1)
year_choices = [('', _('Alle'))] + [(i, i) for i in years]
year_choices = [('', _('Alle'))]
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)
month = forms.ChoiceField(label="Monat", choices=month_choices, required=False)

View File

@@ -1,15 +1,18 @@
import re
import logging
from urllib.request import URLError
from datetime import timedelta
from django.contrib.auth.models import User
from django.core.validators import ValidationError
from django.db import models
from django.template.loader import render_to_string
from django.urls import reverse
from django.utils import timezone
from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _
from taggit.managers import TaggableManager
from core.models import CustomFlatPage
from documents import getPadHTML, setPadHTML, createPadifNotExists
from .managers import (
PostManager,
@@ -26,7 +29,14 @@ request_logger = logging.getLogger("django.request")
def create_pad_for_post(slug, typ="agenda"):
"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):

View File

@@ -6,11 +6,11 @@
<h1>Blackboard</h1>
{% if bb_info %}
{{ bb_info.body|safe }}
{{ bb_info.content|safe }}
{% endif %}
{% if bb_empty and not job_postings %}
{{ bb_empty.body|safe }}
{{ bb_empty.content|safe }}
{% endif %}
<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="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 class="cell small-6 medium-3 large-3 padding-bottom-2">

View File

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