Skip to content
This repository was archived by the owner on Oct 2, 2024. It is now read-only.

Commit cfd5a82

Browse files
committed
update permissions panel to meet panel spec for wagtail 3.0
1 parent d3e9486 commit cfd5a82

File tree

3 files changed

+91
-29
lines changed

3 files changed

+91
-29
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Generated by Django 4.0.10 on 2023-08-10 21:05
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('wagtailcore', '0069_log_entry_jsonfield'),
11+
('test_page', '0001_initial'),
12+
]
13+
14+
operations = [
15+
migrations.CreateModel(
16+
name='TaxTestPage',
17+
fields=[
18+
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
19+
('taxonomy_json', models.TextField(blank=True, null=True)),
20+
],
21+
options={
22+
'abstract': False,
23+
},
24+
bases=('wagtailcore.page', models.Model),
25+
),
26+
]

test_page/models.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,15 @@ class TestModel(ModelTaxonomyPermissionsMixin):
5656
def __str__(self):
5757
return 'TestModel - {0}'.format(self.id)
5858

59-
pre_save.connect(format_permissions_json, sender=TestModel)
59+
class TaxTestPage(Page, TaxonomyMixin):
60+
61+
taxonomy_term_panels = [
62+
TaxonomyPanel('taxonomy_json', taxonomy_terms_id='test_taxonomy'),
63+
]
64+
65+
edit_handler = TabbedInterface([
66+
ObjectList(Page.content_panels, heading='Content'),
67+
ObjectList(taxonomy_term_panels, heading='Taxonomy'),
68+
])
69+
70+
pre_save.connect(format_permissions_json, sender=TestModel)

wagtailreacttaxonomy/panels.py

Lines changed: 53 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -83,34 +83,6 @@ def render_as_object(self):
8383

8484

8585
class PermissionsPanel(FieldPanel):
86-
object_template = "wagtailadmin/panels/permissions_panel.html"
87-
field_template = "wagtailadmin/panels/permissions_panel.html"
88-
89-
def render_as_object(self):
90-
return mark_safe(render_to_string(self.object_template, {
91-
'self': self,
92-
self.TEMPLATE_VAR: self,
93-
'field': self.bound_field,
94-
'permission_terms_json': self.load_permission_terms(),
95-
'permission_terms_error_message': self.permission_terms_error_message,
96-
'permission_actions': json.dumps(self.permission_actions),
97-
'permission_type': self.permission_type,
98-
}))
99-
100-
def load_permission_terms(self):
101-
permission_terms_json = None
102-
try:
103-
data = TaxonomyTerms.objects.get(taxonomy_id=self.permission_terms_id)
104-
try:
105-
json.loads(data.terms_json)
106-
except json.decoder.JSONDecodeError:
107-
self.permission_terms_error_message = '"Permission Terms" json wrong format'
108-
permission_terms_json = data.terms_json
109-
except TaxonomyTerms.DoesNotExist:
110-
self.permission_terms_error_message = 'No "Permission Terms" for this id: "{}"'.format(
111-
self.permission_terms_id
112-
)
113-
return permission_terms_json
11486

11587
def __init__(self, field_name, permission_terms_id, permission_actions, permission_type, *args, **kwargs):
11688
super().__init__(field_name, *args, **kwargs)
@@ -129,3 +101,56 @@ def clone_kwargs(self):
129101
widget=self.widget if hasattr(self, 'widget') else None,
130102
)
131103
return kwargs
104+
105+
def get_bound_panel(self, instance=None, request=None, form=None ):
106+
if self.model is None:
107+
raise ImproperlyConfigured(
108+
"%s.bind_to_model(model) must be called before get_bound_panel"
109+
% type(self).__name__
110+
)
111+
112+
if not issubclass(self.BoundPanel, EditHandler.BoundPanel):
113+
raise ImproperlyConfigured(
114+
"%s.BoundPanel must be a subclass of EditHandler.BoundPanel"
115+
% type(self).__name__
116+
)
117+
118+
return self.BoundPanel(
119+
panel=self, instance=instance, request=request, form=form
120+
)
121+
122+
class BoundPanel(FieldPanel.BoundPanel):
123+
124+
object_template = "wagtailadmin/panels/permissions_panel.html"
125+
field_template = "wagtailadmin/panels/permissions_panel.html"
126+
127+
def render_as_object(self):
128+
return mark_safe(render_to_string(self.object_template, {
129+
'self': self,
130+
self.panel.TEMPLATE_VAR: self,
131+
'field': self.bound_field,
132+
'permission_terms_json': self.load_permission_terms(),
133+
'permission_terms_error_message': self.permission_terms_error_message,
134+
'permission_actions': json.dumps(self.panel.permission_actions),
135+
'permission_type': self.panel.permission_type,
136+
}))
137+
138+
def load_permission_terms(self):
139+
permission_terms_json = None
140+
try:
141+
data = TaxonomyTerms.objects.get(taxonomy_id=self.panel.permission_terms_id)
142+
try:
143+
json.loads(data.terms_json)
144+
except json.decoder.JSONDecodeError:
145+
self.permission_terms_error_message = '"Permission Terms" json wrong format'
146+
permission_terms_json = data.terms_json
147+
except TaxonomyTerms.DoesNotExist:
148+
self.permission_terms_error_message = 'No "Permission Terms" for this id: "{}"'.format(
149+
self.panel.permission_terms_id
150+
)
151+
return permission_terms_json
152+
153+
def __init__(self, panel, instance, request, form,):
154+
super().__init__(panel=panel, instance=instance, request=request, form=form)
155+
self.permission_terms_error_message = None
156+

0 commit comments

Comments
 (0)