Merge 'redirects' app into 'pages'
This commit is contained in:
parent
e8deebae0c
commit
6899b9b9f3
|
@ -1,7 +1,7 @@
|
||||||
## The following requirements were added by pip freeze:
|
|
||||||
amqp==5.1.1
|
amqp==5.1.1
|
||||||
asgiref==3.5.0
|
asgiref==3.5.0
|
||||||
async-timeout==4.0.2
|
async-timeout==4.0.2
|
||||||
|
beautifulsoup4==4.12.2
|
||||||
billiard==3.6.4.0
|
billiard==3.6.4.0
|
||||||
celery==5.2.6
|
celery==5.2.6
|
||||||
certifi==2021.10.8
|
certifi==2021.10.8
|
||||||
|
@ -12,14 +12,14 @@ click-plugins==1.1.1
|
||||||
click-repl==0.2.0
|
click-repl==0.2.0
|
||||||
Deprecated==1.2.13
|
Deprecated==1.2.13
|
||||||
Django==4.0.4
|
Django==4.0.4
|
||||||
git+https://github.com/kikeh/django-dynamic-preferences@375f1a54dba91f81880a86f4a44bc2c42ceab067#egg=django-dynamic-preferences
|
django-dynamic-preferences==1.15.0
|
||||||
django-phonenumber-field==6.1.0
|
django-phonenumber-field==6.1.0
|
||||||
icalendar==4.0.9
|
icalendar==4.0.9
|
||||||
idna==3.3
|
idna==3.3
|
||||||
kombu==5.2.4
|
kombu==5.2.4
|
||||||
librabbitmq==2.0.0
|
librabbitmq==2.0.0
|
||||||
packaging==21.3
|
packaging==21.3
|
||||||
persisting-theory==0.2.1
|
persisting-theory==1.0
|
||||||
phonenumbers==8.12.47
|
phonenumbers==8.12.47
|
||||||
prompt-toolkit==3.0.29
|
prompt-toolkit==3.0.29
|
||||||
psycopg2-binary==2.9.3
|
psycopg2-binary==2.9.3
|
||||||
|
@ -30,6 +30,7 @@ redis==4.2.2
|
||||||
requests==2.27.1
|
requests==2.27.1
|
||||||
sentry-sdk==1.5.10
|
sentry-sdk==1.5.10
|
||||||
six==1.16.0
|
six==1.16.0
|
||||||
|
soupsieve==2.4.1
|
||||||
sqlparse==0.4.2
|
sqlparse==0.4.2
|
||||||
urllib3==1.26.9
|
urllib3==1.26.9
|
||||||
vine==5.0.0
|
vine==5.0.0
|
||||||
|
|
|
@ -3,5 +3,5 @@ from django.urls import path
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", views.metrics, name="metrics"),
|
path("metrics", views.metrics, name="metrics"),
|
||||||
]
|
]
|
||||||
|
|
|
@ -13,7 +13,6 @@ def reimport(modeladmin, request, queryset):
|
||||||
|
|
||||||
@admin.register(Page)
|
@admin.register(Page)
|
||||||
class PageAdmin(admin.ModelAdmin):
|
class PageAdmin(admin.ModelAdmin):
|
||||||
readonly_fields = ("url",)
|
fields = ("url", "content", "title", "visible", "kind")
|
||||||
fields = ("url", "content", "title", "visible")
|
list_display = ("url", "title", "visible", "kind")
|
||||||
list_display = ("title", "url", "visible")
|
|
||||||
actions = (reimport,)
|
actions = (reimport,)
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
<title>Über diese Seite/Impressum</title>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
Wir speichern die folgenden Daten, wenn du dich bei uns registrierst:
|
Wir speichern die folgenden Daten, wenn du dich bei uns registrierst:
|
||||||
<ul>
|
<ul>
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
<title>Häufig gestellte Fragen</title>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h5 class="mb-2">Wann gibt es Schichten?</h5>
|
<h5 class="mb-2">Wann gibt es Schichten?</h5>
|
||||||
<p>
|
<p>
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
|
<title>Karte</title>
|
||||||
<h5 class="subtitle">Hier erscheint bald die Karte mit allen Schichtstandorten</h5>
|
<h5 class="subtitle">Hier erscheint bald die Karte mit allen Schichtstandorten</h5>
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
from ...models import Page
|
from ...models import Page
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
@ -20,7 +21,13 @@ class Command(BaseCommand):
|
||||||
p, created = Page.objects.get_or_create(url=slug)
|
p, created = Page.objects.get_or_create(url=slug)
|
||||||
if (not created) and (not options["force"]):
|
if (not created) and (not options["force"]):
|
||||||
continue
|
continue
|
||||||
p.content = file.read_text()
|
|
||||||
p.title = slug
|
soup = BeautifulSoup(file.read_text(), "html.parser")
|
||||||
|
if soup.title:
|
||||||
|
p.title = soup.title.string
|
||||||
|
soup.title.decompose()
|
||||||
|
else:
|
||||||
|
p.title = slug.title()
|
||||||
|
p.content = str(soup).strip()
|
||||||
p.save()
|
p.save()
|
||||||
print(f"created new page for slug {slug}")
|
print(f'created new page "{p.title}" for slug {slug}')
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Generated by Django 4.0.4 on 2023-04-21 18:28
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("pages", "0001_initial"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="page",
|
||||||
|
name="kind",
|
||||||
|
field=models.CharField(
|
||||||
|
choices=[("redirect", "Redirect"), ("regular", "Regular page")],
|
||||||
|
default="regular",
|
||||||
|
max_length=8,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="page",
|
||||||
|
name="title",
|
||||||
|
field=models.CharField(blank=True, max_length=200),
|
||||||
|
),
|
||||||
|
]
|
|
@ -4,10 +4,22 @@ from django.db import models
|
||||||
|
|
||||||
|
|
||||||
class Page(models.Model):
|
class Page(models.Model):
|
||||||
|
REDIRECT = "redirect"
|
||||||
|
REGULAR = "regular"
|
||||||
|
KIND_CHOICES = [
|
||||||
|
(REDIRECT, "Redirect"),
|
||||||
|
(REGULAR, "Regular page"),
|
||||||
|
]
|
||||||
|
|
||||||
url = models.fields.SlugField(unique=True)
|
url = models.fields.SlugField(unique=True)
|
||||||
content = models.TextField()
|
content = models.TextField()
|
||||||
visible = models.BooleanField(default=True)
|
visible = models.BooleanField(default=True)
|
||||||
title = models.CharField(max_length=200)
|
title = models.CharField(blank=True, max_length=200)
|
||||||
|
kind = models.CharField(choices=KIND_CHOICES, default=REGULAR, max_length=8)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"Page {self.url}"
|
return (
|
||||||
|
f"{self.get_kind_display()} {self.url}" + f" => {self.content}"
|
||||||
|
if self.kind == Page.REDIRECT
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block title %}{{page.title}}{% endblock %}
|
{% block title %}{{ page.title }}{% endblock %}
|
||||||
|
|
||||||
{% block navbar %}
|
{% block navbar %}
|
||||||
<div class="navbar-start">
|
<div class="navbar-start">
|
||||||
|
@ -11,7 +11,7 @@
|
||||||
<p class="navbar-item has-text-danger">Bestätige deine Telefonnummer über den Link in der SMS</p>
|
<p class="navbar-item has-text-danger">Bestätige deine Telefonnummer über den Link in der SMS</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if helper.important_shift %}
|
{% if helper.important_shift %}
|
||||||
<a class="navbar-item" href="{% url 'shift' helper.important_shift.pk %}">{%if helper.important_shift.is_running%}Laufende{% else %}Nächste{% endif %} Schicht ({{ helper.important_shift.start_at|date:"H:i" }})</a>
|
<a class="navbar-item" href="{% url 'shift' helper.important_shift.pk %}">{% if helper.important_shift.is_running %}Laufende{% else %}Nächste{% endif %} Schicht ({{ helper.important_shift.start_at|date:"H:i" }})</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,11 +1,30 @@
|
||||||
from django.views.generic import DetailView
|
from django.views.generic import DetailView
|
||||||
from django.shortcuts import render
|
from django.shortcuts import redirect
|
||||||
|
from django.core.validators import URLValidator
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.http import HttpResponseNotFound
|
||||||
from .models import Page
|
from .models import Page
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
|
|
||||||
class PageView(DetailView):
|
class PageView(DetailView):
|
||||||
template_name = "page.html"
|
|
||||||
queryset = Page.objects.filter(visible=True)
|
queryset = Page.objects.filter(visible=True)
|
||||||
slug_field = "url"
|
slug_field = "url"
|
||||||
|
template_name = "page.html"
|
||||||
|
|
||||||
|
def render_to_response(self, context, **response_kwargs):
|
||||||
|
page = self.object
|
||||||
|
|
||||||
|
if self.object.kind == Page.REDIRECT:
|
||||||
|
target = str(page.content)
|
||||||
|
|
||||||
|
validate_url = URLValidator()
|
||||||
|
try:
|
||||||
|
validate_url(page.content)
|
||||||
|
except ValidationError:
|
||||||
|
return HttpResponseNotFound()
|
||||||
|
|
||||||
|
return redirect(page.content, permanent=True)
|
||||||
|
|
||||||
|
return super().render_to_response(context, **response_kwargs)
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
from django.contrib import admin
|
|
||||||
|
|
||||||
from .models import Redirect
|
|
||||||
|
|
||||||
# Register your models here.
|
|
||||||
admin.site.register(Redirect)
|
|
|
@ -1,6 +0,0 @@
|
||||||
from django.apps import AppConfig
|
|
||||||
|
|
||||||
|
|
||||||
class RedirectsConfig(AppConfig):
|
|
||||||
default_auto_field = "django.db.models.BigAutoField"
|
|
||||||
name = "shiftregister.redirects"
|
|
|
@ -1,20 +0,0 @@
|
||||||
# Generated by Django 4.0.4 on 2022-05-26 13:04
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
initial = True
|
|
||||||
|
|
||||||
dependencies = []
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name="Redirect",
|
|
||||||
fields=[
|
|
||||||
("slug", models.SlugField(primary_key=True, serialize=False)),
|
|
||||||
("target", models.URLField()),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,11 +0,0 @@
|
||||||
from django.db import models
|
|
||||||
|
|
||||||
# Create your models here.
|
|
||||||
|
|
||||||
|
|
||||||
class Redirect(models.Model):
|
|
||||||
slug = models.SlugField(primary_key=True)
|
|
||||||
target = models.URLField()
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f"{self.slug} => {self.target}"
|
|
|
@ -1,3 +0,0 @@
|
||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
# Create your tests here.
|
|
|
@ -1,8 +0,0 @@
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
from . import views
|
|
||||||
|
|
||||||
app_name = "redirects"
|
|
||||||
urlpatterns = [
|
|
||||||
path("<slug:slug>", views.redir, name="redir"),
|
|
||||||
]
|
|
|
@ -1,9 +0,0 @@
|
||||||
from django.shortcuts import redirect, get_object_or_404
|
|
||||||
from .models import Redirect
|
|
||||||
|
|
||||||
# Create your views here.
|
|
||||||
|
|
||||||
|
|
||||||
def redir(request, slug):
|
|
||||||
obj = get_object_or_404(Redirect, pk=slug)
|
|
||||||
return redirect(obj.target)
|
|
|
@ -45,7 +45,6 @@ INSTALLED_APPS = [
|
||||||
"shiftregister.pages.apps.PagesConfig",
|
"shiftregister.pages.apps.PagesConfig",
|
||||||
"shiftregister.metrics.apps.MetricsConfig",
|
"shiftregister.metrics.apps.MetricsConfig",
|
||||||
"shiftregister.signage.apps.SignageConfig",
|
"shiftregister.signage.apps.SignageConfig",
|
||||||
"shiftregister.redirects.apps.RedirectsConfig",
|
|
||||||
"django.contrib.admin",
|
"django.contrib.admin",
|
||||||
"django.contrib.auth",
|
"django.contrib.auth",
|
||||||
"django.contrib.contenttypes",
|
"django.contrib.contenttypes",
|
||||||
|
|
|
@ -4,8 +4,8 @@ from . import views
|
||||||
|
|
||||||
app_name = "signage"
|
app_name = "signage"
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("team/worklist", views.worklist, name="worklist"),
|
path("worklist", views.worklist, name="worklist"),
|
||||||
path("team/worklist/add/<int:shiftid>", views.add_teammember, name="work_add"),
|
path("worklist/add/<int:shiftid>", views.add_teammember, name="work_add"),
|
||||||
path("team/worklist/remove/<int:pk>", views.remove_teammember, name="work_remove"),
|
path("worklist/remove/<int:pk>", views.remove_teammember, name="work_remove"),
|
||||||
path("team/terminal", views.terminal, name="terminal"),
|
path("terminal", views.terminal, name="terminal"),
|
||||||
]
|
]
|
||||||
|
|
|
@ -17,11 +17,10 @@ from django.contrib import admin
|
||||||
from django.urls import include, path
|
from django.urls import include, path
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
path("", include("shiftregister.pages.urls")),
|
||||||
|
path("", include("shiftregister.metrics.urls")),
|
||||||
path("", include("shiftregister.app.urls")),
|
path("", include("shiftregister.app.urls")),
|
||||||
path("team/", include("shiftregister.team.urls")),
|
path("team/", include("shiftregister.team.urls")),
|
||||||
|
path("team/", include("shiftregister.signage.urls")),
|
||||||
path("admin/", admin.site.urls),
|
path("admin/", admin.site.urls),
|
||||||
path("p/", include("shiftregister.pages.urls")),
|
|
||||||
path("r/", include("shiftregister.redirects.urls")),
|
|
||||||
path("metrics/", include("shiftregister.metrics.urls")),
|
|
||||||
path("", include("shiftregister.signage.urls")),
|
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue