From 450ea2e8452e709a796e58c338cb6fd711394ffe Mon Sep 17 00:00:00 2001 From: Christian Moser Date: Wed, 14 Jan 2026 17:58:06 +0100 Subject: [PATCH] 2026.01.14 17:58:06 (cachyos.cmoser.eu) --- django_project/settings.py | 1 + tinywiki/context_processors.py | 8 ++++++- tinywiki/views/base.py | 40 +++++++++++++++------------------- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/django_project/settings.py b/django_project/settings.py index af52c4e..449da37 100644 --- a/django_project/settings.py +++ b/django_project/settings.py @@ -124,6 +124,7 @@ TEMPLATES = [ 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'tinywiki.context_processors.sidebar', + 'tinywiki.context_processors.base_template', ], }, }, diff --git a/tinywiki/context_processors.py b/tinywiki/context_processors.py index 6154842..9a25c34 100644 --- a/tinywiki/context_processors.py +++ b/tinywiki/context_processors.py @@ -1,10 +1,16 @@ from django.http import HttpRequest from django.utils.safestring import mark_safe from .models import SidebarSection +from . import settings def sidebar(request: HttpRequest = None): sections = [ section.widget for section in SidebarSection.objects.filter(is_visible=True).order_by('-priority') ] - return {'tinywiki_sidebar': mark_safe("\n".join(sections))} + return { + 'tinywiki_sidebar': mark_safe("\n".join(sections)) + } + +def base_template(request: HttpRequest = None): + return {'base_template': settings.TINYWIKI_BASE_TEMPLATE} diff --git a/tinywiki/views/base.py b/tinywiki/views/base.py index 2bd68da..a164c4a 100644 --- a/tinywiki/views/base.py +++ b/tinywiki/views/base.py @@ -4,67 +4,65 @@ from django.views.generic import FormView as DjangoFormView from typing import Any class Base: - base_template_name = settings.TINYWIKI_BASE_TEMPLATE - @property def user_can_edit_pages(self)->bool: - if (self.request.user.is_staff + if (self.request.user.is_staff or self.request.user.has_perm('page.tiynwiki-edit') or self.request.user.has_perm('page.tinywiki-edit-all')): return True return False - + @property def user_can_edit_all_pages(self)->bool: - if (self.request.user.is_staff + if (self.request.user.is_staff or self.request.user.has_perm('page.tinywiki-edit-all')): return True return False - + @property def user_can_edit_system_pages(self)->bool: - if (self.request.user.is_staff + if (self.request.user.is_staff or self.request.user.has_perm('page.tiynwiki-edit-system')): return True return False - + @property def user_can_create_pages(self)->bool: - if (self.request.user.is_staff + if (self.request.user.is_staff or self.request.user.has_perm('page.tiynwiki-create')): return True return False - + @property def user_can_create_system_pages(self)->bool: - if (self.request.user.is_staff + if (self.request.user.is_staff or self.request.user.has_perm('page.tiynwiki-create-system')): return True return False - + def page_is_creatable(self,slug:str)->bool: if not slug: return False if slug.startswith('tw-'): return self.user_can_create_system_pages return self.user_can_create_pages - + def page_is_editable(self,page)->bool: if page.slug.startswith('tw-'): return self.user_can_edit_system_pages - elif (self.user_can_edit_all_pages + elif (self.user_can_edit_all_pages or (self.request.user.pk == page.author.pk and self.user_can_edit_pages)): return True return False - + @classmethod def get_base_template_name(cls)->str: return cls.base_template_name - + @classmethod def get_template_name(cls)->str: return cls.template_name - + def get_tinywiki_context_data(self): create_pages = False if self.request.user.is_authenticated: @@ -73,22 +71,20 @@ class Base: return { 'brand_logo': settings.TINYWIKI_BRAND_LOGO, 'brand_name': settings.TINYWIKI_BRAND_NAME, - 'base_template': self.get_base_template_name(), 'use_bootstrap': settings.USE_BOOTSTRAP, 'user_can_create_wiki_pages':create_pages } - + class View(Base,DjangoView): template_name = "tinywiki" - + def get_context_data(self,**kwargs): context = self.get_tinywiki_context_data() context.update(kwargs) return context - + class FormView(Base,DjangoFormView): def get_context_data(self, **kwargs) -> dict[str, Any]: context = self.get_tinywiki_context_data() context.update(kwargs) return super().get_context_data(**context) - \ No newline at end of file