Admin page for Piki pages improved
This commit is contained in:
parent
e7c60df5df
commit
b30d86a21d
@ -2,18 +2,51 @@ from django.contrib import admin
|
||||
from simple_history.admin import SimpleHistoryAdmin
|
||||
|
||||
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):
|
||||
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')
|
||||
search_fields = ('rel_path', 'tags', )
|
||||
list_filter = (
|
||||
('deleted', admin.BooleanFieldListFilter),
|
||||
('group', admin.RelatedFieldListFilter),
|
||||
('other_perms_read', admin.BooleanFieldListFilter),
|
||||
('other_perms_write', admin.BooleanFieldListFilter),
|
||||
)
|
||||
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)
|
||||
|
@ -1,7 +1,5 @@
|
||||
from typing import Any, Mapping
|
||||
from django import forms
|
||||
from django.forms.renderers import BaseRenderer
|
||||
from django.forms.utils import ErrorList
|
||||
from django.contrib.auth.models import Group
|
||||
|
||||
from .models import PikiPage
|
||||
|
||||
@ -17,6 +15,19 @@ class EditForm(forms.ModelForm):
|
||||
"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
|
||||
page_name = forms.CharField(max_length=500, label="Change the page name:", required=True)
|
||||
|
||||
|
22
pages/templates/admin/set_group.html
Normal file
22
pages/templates/admin/set_group.html
Normal 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 %}
|
22
pages/templates/admin/set_perms.html
Normal file
22
pages/templates/admin/set_perms.html
Normal 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 %}
|
Loading…
x
Reference in New Issue
Block a user