Admin page for Piki pages improved

This commit is contained in:
Dirk Alders 2024-10-21 20:15:20 +02:00
parent e7c60df5df
commit b30d86a21d
4 changed files with 93 additions and 5 deletions

View File

@ -2,18 +2,51 @@ from django.contrib import admin
from simple_history.admin import SimpleHistoryAdmin from simple_history.admin import SimpleHistoryAdmin
from .models import PikiPage from .models import PikiPage
from .forms import GroupForm, PermForm
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.contrib.auth.models import Group
class PikiPageAdmin(SimpleHistoryAdmin): class PikiPageAdmin(SimpleHistoryAdmin):
list_display = ('rel_path', 'tags', 'deleted') list_display = ('rel_path', 'tags', 'group', 'other_perms_read', 'other_perms_write')
history_list_display = ('rel_path', 'tags', 'deleted') history_list_display = ('rel_path', 'tags', 'deleted')
search_fields = ('rel_path', 'tags', ) search_fields = ('rel_path', 'tags', )
list_filter = ( list_filter = (
('deleted', admin.BooleanFieldListFilter), ('group', admin.RelatedFieldListFilter),
('other_perms_read', admin.BooleanFieldListFilter), ('other_perms_read', admin.BooleanFieldListFilter),
('other_perms_write', admin.BooleanFieldListFilter), ('other_perms_write', admin.BooleanFieldListFilter),
) )
ordering = ["rel_path"] ordering = ["rel_path"]
actions = ["remove_access_others", "set_group", "set_perms", ]
@admin.action(description="Remove access for others")
def remove_access_others(self, request, query_set):
query_set.update(other_perms_read=False, other_perms_write=False)
@admin.action(description="Set group for pages")
def set_group(self, request, queryset):
if 'apply' in request.POST:
if request.POST.get("group"):
group = Group.objects.get(id=request.POST.get("group"))
else:
group = None
queryset.update(group=group)
self.message_user(request, "Changed group for {} pages".format(queryset.count()))
return HttpResponseRedirect(request.get_full_path())
return render(request, 'admin/set_group.html', context={'pages': queryset, 'form': GroupForm()})
@admin.action(description="Set permissions")
def set_perms(self, request, queryset):
if 'apply' in request.POST:
keys = ["owner_perms_read", "owner_perms_write", "group_perms_read", "group_perms_write", "other_perms_read", "other_perms_write"]
perms = {key: key in request.POST for key in keys}
queryset.update(**perms)
self.message_user(request, "Changed permissions for {} pages".format(queryset.count()))
return HttpResponseRedirect(request.get_full_path())
return render(request, 'admin/set_perms.html', context={'pages': queryset, 'form': PermForm()})
admin.site.disable_action('delete_selected')
admin.site.register(PikiPage, PikiPageAdmin) admin.site.register(PikiPage, PikiPageAdmin)

View File

@ -1,7 +1,5 @@
from typing import Any, Mapping
from django import forms from django import forms
from django.forms.renderers import BaseRenderer from django.contrib.auth.models import Group
from django.forms.utils import ErrorList
from .models import PikiPage from .models import PikiPage
@ -17,6 +15,19 @@ class EditForm(forms.ModelForm):
"other_perms_read", "other_perms_write",] "other_perms_read", "other_perms_write",]
class GroupForm(forms.Form):
group = forms.ModelChoiceField(queryset=Group.objects.all(), required=False)
class PermForm(forms.Form):
owner_perms_read = forms.BooleanField(initial=True, required=False, label="Read (owner)")
owner_perms_write = forms.BooleanField(initial=True, required=False, label="Write (owner)")
group_perms_read = forms.BooleanField(initial=True, required=False, label="Read (group)")
group_perms_write = forms.BooleanField(initial=True, required=False, label="Write (group)")
other_perms_read = forms.BooleanField(initial=True, required=False, label="Read (other)")
other_perms_write = forms.BooleanField(initial=False, required=False, label="Write (other)")
class RenameForm(forms.Form): # Note that it is not inheriting from forms.ModelForm class RenameForm(forms.Form): # Note that it is not inheriting from forms.ModelForm
page_name = forms.CharField(max_length=500, label="Change the page name:", required=True) page_name = forms.CharField(max_length=500, label="Change the page name:", required=True)

View File

@ -0,0 +1,22 @@
{% extends "admin/base_site.html" %}
{% block content %}
<form action="" method="post">
{% csrf_token %}
<p>
Choose a group for the following pages:
</p>
<ul>
{% for page in pages %}
<li>
{{ page.rel_path }}
</li>
<input type="hidden" name="_selected_action" value="{{ page.pk }}" />
{% endfor %}
</ul>
{{ form.as_p }}
<input type="hidden" name="action" value="set_group" />
<input type="submit" name="apply" value="Set"/>
</form>
{% endblock %}

View File

@ -0,0 +1,22 @@
{% extends "admin/base_site.html" %}
{% block content %}
<form action="" method="post">
{% csrf_token %}
<p>
Choose a group for the following pages:
</p>
<ul>
{% for page in pages %}
<li>
{{ page.rel_path }}
</li>
<input type="hidden" name="_selected_action" value="{{ page.pk }}" />
{% endfor %}
</ul>
{{ form.as_p }}
<input type="hidden" name="action" value="set_perms" />
<input type="submit" name="apply" value="Set"/>
</form>
{% endblock %}