mirror of
https://github.com/pretix/pretix.git
synced 2026-05-03 14:54:04 +00:00
Allow to disable filter support for meta properties (#2901)
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 3.2.16 on 2022-11-14 11:32
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pretixbase', '0223_voucher_min_usages'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='eventmetaproperty',
|
||||
name='filter_allowed',
|
||||
field=models.BooleanField(default=True),
|
||||
),
|
||||
]
|
||||
@@ -1580,6 +1580,11 @@ class EventMetaProperty(LoggedModel):
|
||||
verbose_name=_("Valid values"),
|
||||
help_text=_("If you keep this empty, any value is allowed. Otherwise, enter one possible value per line.")
|
||||
)
|
||||
filter_allowed = models.BooleanField(
|
||||
default=True, verbose_name=_("Can be used for filtering"),
|
||||
help_text=_("This field will be shown to filter events or reports in the backend, and it can also be used "
|
||||
"for hidden filter parameters in the frontend (e.g. using the widget).")
|
||||
)
|
||||
|
||||
def full_clean(self, exclude=None, validate_unique=True):
|
||||
super().full_clean(exclude, validate_unique)
|
||||
|
||||
@@ -806,7 +806,8 @@ class OrderSearchFilterForm(OrderFilterForm):
|
||||
# We ignore superuser permissions here. This is intentional – we do not want to show super
|
||||
# users a form with all meta properties ever assigned.
|
||||
return EventMetaProperty.objects.filter(
|
||||
organizer_id__in=self.request.user.teams.values_list('organizer', flat=True)
|
||||
organizer_id__in=self.request.user.teams.values_list('organizer', flat=True),
|
||||
filter_allowed=True,
|
||||
)
|
||||
|
||||
|
||||
@@ -1545,12 +1546,13 @@ class EventFilterForm(FilterForm):
|
||||
@cached_property
|
||||
def meta_properties(self):
|
||||
if self.organizer:
|
||||
return self.organizer.meta_properties.all()
|
||||
return self.organizer.meta_properties.filter(filter_allowed=True)
|
||||
else:
|
||||
# We ignore superuser permissions here. This is intentional – we do not want to show super
|
||||
# users a form with all meta properties ever assigned.
|
||||
return EventMetaProperty.objects.filter(
|
||||
organizer_id__in=self.request.user.teams.values_list('organizer', flat=True)
|
||||
organizer_id__in=self.request.user.teams.values_list('organizer', flat=True),
|
||||
filter_allowed=True,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -182,7 +182,7 @@ class OrganizerUpdateForm(OrganizerForm):
|
||||
class EventMetaPropertyForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = EventMetaProperty
|
||||
fields = ['name', 'default', 'required', 'protected', 'allowed_values']
|
||||
fields = ['name', 'default', 'required', 'protected', 'allowed_values', 'filter_allowed']
|
||||
widgets = {
|
||||
'default': forms.TextInput()
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ class OrganizerDetail(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin
|
||||
ctx = super().get_context_data(**kwargs)
|
||||
ctx['filter_form'] = self.filter_form
|
||||
ctx['meta_fields'] = [
|
||||
self.filter_form['meta_{}'.format(p.name)] for p in self.organizer.meta_properties.all()
|
||||
self.filter_form['meta_{}'.format(p.name)] for p in self.organizer.meta_properties.filter(filter_allowed=True)
|
||||
]
|
||||
return ctx
|
||||
|
||||
|
||||
@@ -92,7 +92,8 @@ def filter_qs_by_attr(qs, request):
|
||||
|
||||
props = {
|
||||
p.name: p for p in request.organizer.meta_properties.filter(
|
||||
name__in=attrs.keys()
|
||||
name__in=attrs.keys(),
|
||||
filter_allowed=True,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -73,6 +73,11 @@ def test_attributes_on_page(env, client):
|
||||
r = client.get('/mrmcd/?attr[loc]=HH')
|
||||
assert 'MRMCD2015' in r.rendered_content
|
||||
|
||||
prop.filter_allowed = False
|
||||
prop.save()
|
||||
r = client.get('/mrmcd/?attr[loc]=MA')
|
||||
assert 'MRMCD2015' in r.rendered_content
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_non_public_event_not_on_page(env, client):
|
||||
|
||||
Reference in New Issue
Block a user