2025.12.31 02:49:47 (cachyos.cmoser.eu)
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from django import forms
|
||||
from django import forms
|
||||
from .models import Page,Image
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
@@ -12,12 +12,14 @@ class PageForm(forms.ModelForm):
|
||||
'content_type_data',
|
||||
'content',
|
||||
]
|
||||
|
||||
|
||||
|
||||
class PageDeleteForm(forms.Form):
|
||||
slug = forms.SlugField(allow_unicode=False,
|
||||
required=False,
|
||||
label=_("Slug"))
|
||||
|
||||
|
||||
|
||||
class PageAdminForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Page
|
||||
@@ -29,8 +31,8 @@ class PageAdminForm(forms.ModelForm):
|
||||
'content_type_data',
|
||||
'content',
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
class ImageUploadView(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Image
|
||||
@@ -39,7 +41,8 @@ class ImageUploadView(forms.ModelForm):
|
||||
"alt",
|
||||
"description",
|
||||
]
|
||||
|
||||
|
||||
|
||||
class ImageEditView(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Image
|
||||
@@ -47,8 +50,8 @@ class ImageEditView(forms.ModelForm):
|
||||
"alt",
|
||||
"description",
|
||||
]
|
||||
|
||||
|
||||
|
||||
class ImageDeleteView(forms.Form):
|
||||
slug = forms.SlugField(allow_unicode=False,
|
||||
required=False)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
from pathlib import Path
|
||||
from django.conf import settings
|
||||
|
||||
from django_project.settings import STATIC_URL
|
||||
|
||||
TINYWIKI_USER_CONFIG = getattr(settings,
|
||||
"TINYWIKI_USER_CONFIG",
|
||||
|
||||
@@ -27,10 +27,11 @@
|
||||
{% endif %}
|
||||
{% if user_can_delete_wiki_page %}
|
||||
<button class="btn btn-danger"
|
||||
type="button"
|
||||
hx-get="{% url 'tinywiki:hx-page-delete' pk=page.pk %}"
|
||||
hx-target="#modal-here"
|
||||
hx-swap="innerHTML"
|
||||
hx-trigger="clicked"
|
||||
hx-trigger="click"
|
||||
data-bs-toggle="modal"
|
||||
data-bs-target="#modal-here"
|
||||
>{% translate "Delete Page" %}</button>
|
||||
|
||||
@@ -6,18 +6,24 @@
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form method="POST">
|
||||
<form method="post" action="{% url 'tinywiki:hx-page-delete' pk=page.pk %}">
|
||||
{% csrf_token %}
|
||||
<p>
|
||||
{% with page.slug as page_slug %}
|
||||
{% blocktranslate %}Type <b>{{ page_slug }}</b> in the field below to delete the Wiki-Page.{% endblocktranslate %}
|
||||
{% endwith %}
|
||||
<div class="form-floating form-floating-sm">
|
||||
<div>
|
||||
<label for="form.slug.id-for-label" class="visually-hidden">{{ form.slug.label }}</label>
|
||||
{% render_field form.slug class="form-control form-cotrol-sm" placeholder=page.slug %}
|
||||
<label for="{{ form.slug.auto_id }}">{{ form.slug }}</label>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-end">
|
||||
<button class="btn btn-danger" type="submit">{% translate "Delete the page" %}</button>
|
||||
<button class="btn btn-danger"
|
||||
type="submit"
|
||||
hx-trigger="click"
|
||||
hx-post="{% url 'tinywiki:hx-page-delete' pk=page.pk %}"
|
||||
>{% translate "Delete the page" %}</button>
|
||||
<button clasS="btn btn-secondary" type="button" data-bs-dismiss="modal">{% translate "Cancel" %}</button>
|
||||
</div>
|
||||
</p>
|
||||
@@ -25,3 +31,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.min.js"></script>
|
||||
|
||||
@@ -87,13 +87,13 @@ class PageCreateView(LoginRequiredMixin, UserPassesTestMixin, FormView):
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['create']=True
|
||||
context['slug'] = self.request.GET.get('slug',None)
|
||||
context.setdefault("title_extra","")
|
||||
context.setdefault("slug_extra","")
|
||||
context.setdefault("content_type_extra","")
|
||||
context.setdefault("status_extra","")
|
||||
context.setdefault("content_extra","")
|
||||
context['create'] = True
|
||||
context['slug'] = self.request.GET.get('slug', None)
|
||||
context.setdefault("title_extra", "")
|
||||
context.setdefault("slug_extra", "")
|
||||
context.setdefault("content_type_extra", "")
|
||||
context.setdefault("status_extra", "")
|
||||
context.setdefault("content_extra", "")
|
||||
|
||||
return context
|
||||
|
||||
@@ -169,7 +169,7 @@ class PageCreateView(LoginRequiredMixin, UserPassesTestMixin, FormView):
|
||||
))
|
||||
|
||||
|
||||
class PageEditView(LoginRequiredMixin,UserPassesTestMixin,FormView):
|
||||
class PageEditView(LoginRequiredMixin, UserPassesTestMixin, FormView):
|
||||
template_name = "tinywiki/page/edit.html"
|
||||
bs_template_name = "tinywiki/page/bs-edit.html"
|
||||
form_class = PageForm
|
||||
@@ -185,15 +185,15 @@ class PageEditView(LoginRequiredMixin,UserPassesTestMixin,FormView):
|
||||
return self.bs_template_name
|
||||
return self.template_name
|
||||
|
||||
def get_context_data(self,page,**kwargs):
|
||||
def get_context_data(self, page, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['create']=False
|
||||
context['page']=page
|
||||
context.setdefault("title_extra","")
|
||||
context.setdefault("slug_extra","")
|
||||
context.setdefault("content_type_extra","")
|
||||
context.setdefault("status_extra","")
|
||||
context.setdefault("content_extra","")
|
||||
context['create'] = False
|
||||
context['page'] = page
|
||||
context.setdefault("title_extra", "")
|
||||
context.setdefault("slug_extra", "")
|
||||
context.setdefault("content_type_extra", "")
|
||||
context.setdefault("status_extra", "")
|
||||
context.setdefault("content_extra", "")
|
||||
return context
|
||||
|
||||
def form_invalid(self, form):
|
||||
@@ -233,12 +233,12 @@ class PageEditView(LoginRequiredMixin,UserPassesTestMixin,FormView):
|
||||
content_extra=content_extra,
|
||||
))
|
||||
|
||||
def get(self,request,slug:str):
|
||||
instance = get_object_or_404(Page,slug=slug)
|
||||
def get(self, request, slug:str):
|
||||
instance = get_object_or_404(Page, slug=slug)
|
||||
user = request.user
|
||||
if (instance.slug.startswith('tw-')
|
||||
and not user.is_staff
|
||||
and not user.has_perm('page.tinywiki-edit-system')):
|
||||
and not user.is_staff
|
||||
and not user.has_perm('page.tinywiki-edit-system')):
|
||||
raise PermissionDenied(_("Only staff users and wiki-admins are allowed to edit TinyWiki system pages!"))
|
||||
|
||||
if user.pk != instance.author.pk:
|
||||
@@ -254,8 +254,8 @@ class PageEditView(LoginRequiredMixin,UserPassesTestMixin,FormView):
|
||||
self.get_template_name(),
|
||||
self.get_context_data(page=instance))
|
||||
|
||||
def post(self,request,slug:str):
|
||||
instance = get_object_or_404(Page,slug=slug)
|
||||
def post(self, request, slug:str):
|
||||
instance = get_object_or_404(Page, slug=slug)
|
||||
user = request.user
|
||||
if (instance.slug.startswith('tw-') and not user.is_staff):
|
||||
raise PermissionDenied(_("Only staff users are allowed to edit TinyWiki system pages!"))
|
||||
@@ -274,7 +274,7 @@ class PageEditView(LoginRequiredMixin,UserPassesTestMixin,FormView):
|
||||
def get_form(self):
|
||||
return self.get_form_class()(instance=self.instance,**self.get_form_kwargs())
|
||||
|
||||
def form_valid(self,form):
|
||||
def form_valid(self, form):
|
||||
user = self.request.user
|
||||
instance = form.save(commit=False)
|
||||
instance.created_by = user
|
||||
@@ -289,9 +289,11 @@ class PageEditView(LoginRequiredMixin,UserPassesTestMixin,FormView):
|
||||
self.get_template_name(),
|
||||
self.get_context_data(slug_invalid=True))
|
||||
|
||||
class PageDeleteView(LoginRequiredMixin,UserPassesTestMixin,FormView):
|
||||
|
||||
class PageDeleteView(LoginRequiredMixin, UserPassesTestMixin, FormView):
|
||||
template_name = "tinywiki/page/delete.html"
|
||||
form_class = PageDeleteForm
|
||||
|
||||
def test_func(self) -> bool:
|
||||
if self.request.user.is_staff:
|
||||
return True
|
||||
@@ -299,36 +301,38 @@ class PageDeleteView(LoginRequiredMixin,UserPassesTestMixin,FormView):
|
||||
return True
|
||||
return False
|
||||
|
||||
def get(self,request:HttpRequest,slug:str)->HttpResponse:
|
||||
instance = get_object_or_404(Page,slug=slug)
|
||||
def get(self, request: HttpRequest, slug: str) -> HttpResponse:
|
||||
instance = get_object_or_404(Page, slug=slug)
|
||||
if not request.user.is_staff and not instance.author == request.user:
|
||||
raise PermissionDenied()
|
||||
|
||||
print("PAGE-DELETE")
|
||||
|
||||
return render(request,
|
||||
self.template_name,
|
||||
self.get_context_data(form=self.get_form_class()(),
|
||||
page=instance))
|
||||
|
||||
def form_invalid(self,form:PageDeleteForm)->HttpResponse:
|
||||
return redirect(reverse('tinywiki:page',kwargs={'slug':self.instance.slug}))
|
||||
def form_invalid(self, form: PageDeleteForm) -> HttpResponse:
|
||||
return redirect(reverse('tinywiki:page', kwargs={'slug': self.instance.slug}))
|
||||
|
||||
def form_valid(self,form:PageDeleteForm)->HttpResponse:
|
||||
def form_valid(self, form: PageDeleteForm) -> HttpResponse:
|
||||
if self.instance.slug == form.cleaned_data['slug']:
|
||||
try:
|
||||
self.instance.delete()
|
||||
return redirect(reverse("tinywiki:home"))
|
||||
except: pass
|
||||
except Exception:
|
||||
pass
|
||||
return redirect(reverse('tinywiki:page',kwargs={'slug':self.instance.slug}))
|
||||
|
||||
|
||||
def post(self,request:HttpRequest,slug:str)->HttpResponse:
|
||||
self.instance = get_object_or_404(Page,slug=slug)
|
||||
if not request.user.is_staff and not instance.author == request.user:
|
||||
def post(self, request: HttpRequest, slug: str) -> HttpResponse:
|
||||
self.instance = get_object_or_404(Page, slug=slug)
|
||||
if not request.user.is_staff and not self.instance.author == request.user:
|
||||
raise PermissionDenied()
|
||||
return super().post(request)
|
||||
|
||||
|
||||
class HxPageEditView(LoginRequiredMixin,UserPassesTestMixin,FormView):
|
||||
class HxPageEditView(LoginRequiredMixin, UserPassesTestMixin, FormView):
|
||||
template_name = "tinywiki/page/hx-edit.html"
|
||||
bs_template_name = "tinywiki/page/hx-bs-edit.html"
|
||||
form_class = PageForm
|
||||
@@ -389,8 +393,8 @@ class HxPageEditView(LoginRequiredMixin,UserPassesTestMixin,FormView):
|
||||
page=self.instance,
|
||||
))
|
||||
|
||||
def post(self,request,pk:int):
|
||||
instance = get_object_or_404(Page,pk=pk)
|
||||
def post(self, request, pk:int):
|
||||
instance = get_object_or_404(Page, pk=pk)
|
||||
user = request.user
|
||||
if (instance.slug.startswith('tw-') and not user.is_staff):
|
||||
raise PermissionDenied(_("Only staff users are allowed to edit TinyWiki system pages!"))
|
||||
@@ -416,11 +420,48 @@ class HxPageEditView(LoginRequiredMixin,UserPassesTestMixin,FormView):
|
||||
instance.last_edited_by = user
|
||||
try:
|
||||
form.save(commit=True)
|
||||
return render(self.request,self.get_template_name(),self.get_context_data(save_success=True))
|
||||
return render(self.request, self.get_template_name(),self.get_context_data(save_success=True))
|
||||
except:
|
||||
return render(self.request,
|
||||
self.get_template_name(),
|
||||
self.get_context_data(save_success=False))
|
||||
|
||||
class HxPageDeleteView(View):
|
||||
pass
|
||||
class HxPageDeleteView(LoginRequiredMixin, UserPassesTestMixin, FormView):
|
||||
template_name = "tinywiki/page/hx-bs-delete.html"
|
||||
form_class = PageDeleteForm
|
||||
|
||||
def test_func(self) -> bool:
|
||||
if self.request.user.is_staff:
|
||||
return True
|
||||
if self.request.user.has_perm('tinyiwki-delete-all') or self.request.user.has_perm('tinywiki-delete'):
|
||||
return True
|
||||
return False
|
||||
|
||||
def get(self, request: HttpRequest, pk: int) -> HttpResponse:
|
||||
instance = get_object_or_404(Page, pk=pk)
|
||||
if not request.user.is_staff and not instance.author == request.user:
|
||||
raise PermissionDenied()
|
||||
|
||||
return render(request,
|
||||
self.template_name,
|
||||
self.get_context_data(form=self.get_form_class()(),
|
||||
page=instance))
|
||||
|
||||
def form_invalid(self, form: PageDeleteForm) -> HttpResponse:
|
||||
return redirect(reverse('tinywiki:page', kwargs={'slug': self.instance.slug}))
|
||||
|
||||
def form_valid(self, form: PageDeleteForm) -> HttpResponse:
|
||||
if self.instance.slug == form.cleaned_data['slug']:
|
||||
try:
|
||||
self.instance.delete()
|
||||
return redirect(reverse("tinywiki:home"))
|
||||
except Exception as ex:
|
||||
print(ex)
|
||||
else:
|
||||
print(form.cleaned_data['slug'])
|
||||
return redirect(reverse('tinywiki:page', kwargs={'slug': self.instance.slug}))
|
||||
|
||||
def post(self, request: HttpRequest, pk: int) -> HttpResponse:
|
||||
self.instance = get_object_or_404(Page, pk=pk)
|
||||
|
||||
return super().post(request)
|
||||
|
||||
Reference in New Issue
Block a user