add flatpages
This commit is contained in:
@@ -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
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
|
||||
|
||||
|
||||
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
|
||||
|
||||
@@ -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/
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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">
|
||||
|
||||
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="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">
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user