Skip to content

Commit

Permalink
fix: add FAQ & content pages
Browse files Browse the repository at this point in the history
  • Loading branch information
ohrstrom committed Oct 28, 2022
1 parent 10e8d7a commit efc86ae
Show file tree
Hide file tree
Showing 49 changed files with 1,222 additions and 47 deletions.
12 changes: 0 additions & 12 deletions content/pages/donate.md

This file was deleted.

Empty file added core/faq/__init__.py
Empty file.
38 changes: 38 additions & 0 deletions core/faq/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from django.contrib import admin

from modeltranslation.admin import TranslationAdmin
from .models import Category, Topic


@admin.register(Category)
class CategoryAdmin(TranslationAdmin):
save_on_top = True
list_display = [
"__str__",
"priority",
]
search_fields = [
"name",
]
list_editable = [
"priority",
]


@admin.register(Topic)
class TopicAdmin(TranslationAdmin):
save_on_top = True
list_display = [
"__str__",
"priority",
"category",
]
search_fields = [
"name",
]
list_filter = [
"category",
]
list_editable = [
"priority",
]
Empty file added core/faq/api/__init__.py
Empty file.
32 changes: 32 additions & 0 deletions core/faq/api/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from rest_framework import serializers
from api_extra.serializers import CTUIDModelSerializer
from ..models import Category, Topic


class TopicSerializer(
CTUIDModelSerializer,
serializers.ModelSerializer,
):
class Meta(CTUIDModelSerializer.Meta):
model = Topic
fields = CTUIDModelSerializer.Meta.fields + [
"question",
"answer",
]


class CategorySerializer(
CTUIDModelSerializer,
serializers.ModelSerializer,
):
topics = TopicSerializer(
many=True,
read_only=True,
)

class Meta(CTUIDModelSerializer.Meta):
model = Category
fields = CTUIDModelSerializer.Meta.fields + [
"name",
"topics",
]
11 changes: 11 additions & 0 deletions core/faq/api/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from django.urls import include, path
from rest_framework import routers
from . import views

router = routers.DefaultRouter()
router.register("categories", views.CategoryViewSet)

app_name = "faq"
urlpatterns = [
path("", include(router.urls)),
]
17 changes: 17 additions & 0 deletions core/faq/api/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from rest_framework import mixins, viewsets
from . import serializers
from ..models import Category, Topic


class CategoryViewSet(
mixins.ListModelMixin,
viewsets.GenericViewSet,
):
queryset = Category.objects.all()
serializer_class = serializers.CategorySerializer

def get_queryset(self):
# qs = self.queryset.prefetch_related(
# 'translations',
# )
return self.queryset
6 changes: 6 additions & 0 deletions core/faq/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class FaqConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "faq"
103 changes: 103 additions & 0 deletions core/faq/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# Generated by Django 3.2.15 on 2022-10-27 12:23

from django.db import migrations, models
import django.db.models.deletion
import uuid


class Migration(migrations.Migration):

initial = True

dependencies = []

operations = [
migrations.CreateModel(
name="Category",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created", models.DateTimeField(auto_now_add=True, db_index=True)),
("updated", models.DateTimeField(auto_now=True, db_index=True)),
(
"uuid",
models.UUIDField(db_index=True, default=uuid.uuid4, editable=False),
),
(
"uid",
models.CharField(
db_index=True,
editable=False,
max_length=8,
null=True,
unique=True,
),
),
("name", models.CharField(max_length=64)),
("name_en", models.CharField(max_length=64, null=True)),
("name_de", models.CharField(max_length=64, null=True)),
("name_fr", models.CharField(max_length=64, null=True)),
("priority", models.PositiveSmallIntegerField(default=0)),
],
options={
"verbose_name": "Category",
"ordering": ["-priority", "name"],
},
),
migrations.CreateModel(
name="Topic",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created", models.DateTimeField(auto_now_add=True, db_index=True)),
("updated", models.DateTimeField(auto_now=True, db_index=True)),
(
"uuid",
models.UUIDField(db_index=True, default=uuid.uuid4, editable=False),
),
(
"uid",
models.CharField(
db_index=True,
editable=False,
max_length=8,
null=True,
unique=True,
),
),
("question", models.TextField(max_length=256)),
("question_en", models.TextField(max_length=256, null=True)),
("question_de", models.TextField(max_length=256, null=True)),
("question_fr", models.TextField(max_length=256, null=True)),
("answer", models.TextField()),
("answer_en", models.TextField(null=True)),
("answer_de", models.TextField(null=True)),
("answer_fr", models.TextField(null=True)),
("priority", models.PositiveSmallIntegerField(default=0)),
(
"category",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="faq.category"
),
),
],
options={
"verbose_name": "Topic",
"ordering": ["category", "-priority", "question"],
},
),
]
Empty file added core/faq/migrations/__init__.py
Empty file.
58 changes: 58 additions & 0 deletions core/faq/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
from django.db import models
from base.models.mixins import TimestampedModelMixin, CTUIDModelMixin


class Category(
CTUIDModelMixin,
TimestampedModelMixin,
models.Model,
):
name = models.CharField(
max_length=64,
)
priority = models.PositiveSmallIntegerField(
default=0,
)

class Meta:
app_label = "faq"
verbose_name = "Category"
verbose_name_plural = "Categories"
ordering = [
"-priority",
"name",
]

def __str__(self):
return self.name


class Topic(
CTUIDModelMixin,
TimestampedModelMixin,
models.Model,
):
question = models.TextField(
max_length=256,
)
answer = models.TextField()
priority = models.PositiveSmallIntegerField(
default=0,
)
category = models.ForeignKey(
Category,
on_delete=models.CASCADE,
related_name="topics",
)

class Meta:
app_label = "faq"
verbose_name = "Topic"
ordering = [
"category",
"-priority",
"question",
]

def __str__(self):
return self.question
17 changes: 17 additions & 0 deletions core/faq/translation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from modeltranslation.translator import register, TranslationOptions
from .models import Category, Topic


@register(Category)
class CategoryTranslationOptions(TranslationOptions):
fields = [
"name",
]


@register(Topic)
class TopicTranslationOptions(TranslationOptions):
fields = [
"question",
"answer",
]
1 change: 1 addition & 0 deletions core/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
"rating",
"broadcast",
"catalog",
"faq",
"redirect",
"electronic_mail",
"stats",
Expand Down
8 changes: 8 additions & 0 deletions core/urls_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ def api_root(request, format=None):
"api:catalog:api-root",
request=request,
),
"faq/": reverse(
"api:faq:api-root",
request=request,
),
}
)

Expand Down Expand Up @@ -134,6 +138,10 @@ def api_root(request, format=None):
"catalog/",
include("catalog.api.urls", "catalog"),
),
path(
"faq/",
include("faq.api.urls", "faq"),
),
path(
"redirect/",
include("redirect.api.urls", "redirect"),
Expand Down
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"@sentry/vue": "^6.18.2",
"@stripe/stripe-js": "^1.24.0",
"@vueuse/core": "8.3.1",
"@vueuse/router": "^9.4.0",
"axios": "^0.26.1",
"bowser": "^2.11.0",
"color": "^4.2.3",
Expand All @@ -37,6 +38,7 @@
"sass": "^1.49.9",
"shaka-player": "4.1.0",
"shifty": "^2.17.1",
"showdown": "^2.1.0",
"vue": "^3.2.31",
"vue-i18n": "^9.1.9",
"vue-router": "^4.0.12",
Expand All @@ -51,6 +53,7 @@
"@types/node-schedule": "^1.3.2",
"@types/pulltorefreshjs": "^0.1.5",
"@types/qs": "^6.9.7",
"@types/showdown": "^2.0.0",
"@vitejs/plugin-vue": "^2.2.2",
"@vue/eslint-config-prettier": "^7.0.0",
"@vue/eslint-config-typescript": "^10.0.0",
Expand Down
3 changes: 3 additions & 0 deletions src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import SideMenu from "@/components/navigation/SideMenu.vue";
import GlobalSearch from "@/components/navigation/GlobalSearch.vue";
import AuthPanel from "@/components/account/AuthPanel.vue";
import Subscribe from "@/components/subscription/Subscribe.vue";
import GeoblockNotice from "@/components/geolocation/GeoblockNotice.vue";
import Player from "@/components/player/Player.vue";
import MobilePlayer from "@/components/player/mobile/Player.vue";
import Notifications from "@/components/notification/Notifications.vue";
Expand All @@ -29,6 +30,7 @@ export default defineComponent({
Notifications,
AuthPanel,
Subscribe,
GeoblockNotice,
Player,
ClaimVoucher,
DebugPanel,
Expand Down Expand Up @@ -62,6 +64,7 @@ export default defineComponent({
</router-view>
<AuthPanel />
<Subscribe />
<GeoblockNotice />
<ClaimVoucher />
<component :is="playerComponent" />
<DebugPanel />
Expand Down
2 changes: 1 addition & 1 deletion src/api/account.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ async function logout() {
}

async function checkLoginEmail(email: string) {
const url = `${ACCOUNT_ENDPOINT}send-email-login/?email=${email}`;
const url = `${ACCOUNT_ENDPOINT}send-email-login/?email=${encodeURIComponent(email)}`;
const response = await APIClient.get(url);
return response.data;
}
Expand Down
Loading

0 comments on commit efc86ae

Please sign in to comment.