add flatpages
This commit is contained in:
@@ -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
0
fet2020/core/__init__.py
Normal file
29
fet2020/core/admin.py
Normal file
29
fet2020/core/admin.py
Normal 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
19
fet2020/core/apps.py
Normal 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
11
fet2020/core/forms.py
Normal 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")}
|
||||||
27
fet2020/core/migrations/0001_initial.py
Normal file
27
fet2020/core/migrations/0001_initial.py
Normal 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',),
|
||||||
|
),
|
||||||
|
]
|
||||||
0
fet2020/core/migrations/__init__.py
Normal file
0
fet2020/core/migrations/__init__.py
Normal file
18
fet2020/core/models.py
Normal file
18
fet2020/core/models.py
Normal 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
3
fet2020/core/tests.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
3
fet2020/core/views.py
Normal file
3
fet2020/core/views.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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/
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
8
fet2020/templates/flatpages/default.html
Normal file
8
fet2020/templates/flatpages/default.html
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{% extends 'layout.html' %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="grid-container">
|
||||||
|
{{ flatpage.content }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
68
fet2020/templates/flatpages/social_media.html
Normal file
68
fet2020/templates/flatpages/social_media.html
Normal 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 %}
|
||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user