cron et vue personnalisée filtrée sur l'usager connecté (#75154) #150
|
@ -1019,6 +1019,57 @@ def test_anonymise(pub):
|
|||
assert formdata.evolution[1].parts is None
|
||||
|
||||
|
||||
def test_anonymise_custom_view_user_filtered(pub):
|
||||
CardDef.wipe()
|
||||
FormDef.wipe()
|
||||
Workflow.wipe()
|
||||
pub.custom_view_class.wipe()
|
||||
|
||||
carddef = CardDef()
|
||||
carddef.name = 'foo'
|
||||
carddef.store()
|
||||
|
||||
carddata = carddef.data_class()()
|
||||
carddata.data = {'0': 'FOO BAR 0'}
|
||||
carddata.just_created()
|
||||
carddata.jump_status('new')
|
||||
carddata.store()
|
||||
|
||||
custom_view = pub.custom_view_class()
|
||||
custom_view.title = 'card view'
|
||||
custom_view.formdef = carddef
|
||||
custom_view.columns = {'list': [{'id': '0'}]}
|
||||
custom_view.filters = {'filter-user': 'on', 'filter-user-value': '__current__'}
|
||||
custom_view.visibility = 'datasource'
|
||||
custom_view.store()
|
||||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'baz'
|
||||
formdef.fields = [
|
||||
ItemsField(
|
||||
id='1', label='list', type='items', data_source={'type': 'carddef:foo:card-view'}, anonymise=True
|
||||
),
|
||||
]
|
||||
formdef.store()
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.just_created()
|
||||
formdata.data = {
|
||||
'1': ['foo', 'bar'],
|
||||
'1_display': 'foo, bar',
|
||||
}
|
||||
formdata.store()
|
||||
|
||||
pub._set_request(None) # must run without request
|
||||
item = AnonymiseWorkflowStatusItem()
|
||||
item.perform(formdata)
|
||||
formdata.refresh_from_storage()
|
||||
assert formdata.data == {
|
||||
'1': None,
|
||||
'1_display': None,
|
||||
}
|
||||
|
||||
|
||||
def test_remove(pub):
|
||||
formdef = FormDef()
|
||||
formdef.name = 'baz'
|
||||
|
|
|
@ -1734,9 +1734,7 @@ class FormPage(FormdefDirectoryBase):
|
|||
|
||||
def get_criterias_from_query(self, statistics_fields_only=False):
|
||||
query_overrides = get_request().form
|
||||
return self.get_view_criterias(
|
||||
query_overrides, request=get_request(), statistics_fields_only=statistics_fields_only
|
||||
)
|
||||
return self.get_view_criterias(query_overrides, statistics_fields_only=statistics_fields_only)
|
||||
|
||||
def get_field_allowed_operators(self, field):
|
||||
operators = [
|
||||
|
@ -1774,7 +1772,6 @@ class FormPage(FormdefDirectoryBase):
|
|||
def get_view_criterias(
|
||||
self,
|
||||
query_overrides=None,
|
||||
request=None,
|
||||
custom_view=None,
|
||||
compile_templates=False,
|
||||
keep_templates=False,
|
||||
|
@ -1794,6 +1791,8 @@ class FormPage(FormdefDirectoryBase):
|
|||
]
|
||||
criterias = []
|
||||
|
||||
request = get_request()
|
||||
|
||||
filters_dict = {}
|
||||
if self.view:
|
||||
filters_dict.update(self.view.get_filters_dict() or {})
|
||||
|
@ -2031,14 +2030,14 @@ class FormPage(FormdefDirectoryBase):
|
|||
elif filter_field.type == 'user-id':
|
||||
if filter_field_value == '__current__':
|
||||
context_vars = get_publisher().substitutions.get_context_variables(mode='lazy')
|
||||
if get_request().is_in_backoffice() and context_vars.get('form'):
|
||||
if request and request.is_in_backoffice() and context_vars.get('form'):
|
||||
# in case of backoffice submission/edition, take user associated
|
||||
# with the form being submitted/edited, if any.
|
||||
form_user = context_vars.get('form_user')
|
||||
if form_user:
|
||||
filter_field_value = str(form_user.id)
|
||||
elif isinstance(get_request().user, get_publisher().user_class):
|
||||
filter_field_value = str(get_request().user.id)
|
||||
elif request and isinstance(request.user, get_publisher().user_class):
|
||||
filter_field_value = str(request.user.id)
|
||||
else:
|
||||
filter_field_value = None
|
||||
if filter_field_value in ('__current__', None):
|
||||
|
@ -2048,11 +2047,12 @@ class FormPage(FormdefDirectoryBase):
|
|||
elif filter_field.type == 'submission-agent-id':
|
||||
criterias.append(Equal('submission_agent_id', filter_field_value))
|
||||
elif filter_field.type == 'user-function':
|
||||
user_object = None
|
||||
if ':' in filter_field_value:
|
||||
filter_field_value, user_id = filter_field_value.split(':', 1)
|
||||
user_object = None if user_id == '__none__' else get_publisher().user_class().get(user_id)
|
||||
else:
|
||||
user_object = get_request().user
|
||||
elif request:
|
||||
user_object = request.user
|
||||
criterias.append(
|
||||
ElementIntersects(
|
||||
'workflow_merged_roles_dict',
|
||||
|
@ -2061,8 +2061,8 @@ class FormPage(FormdefDirectoryBase):
|
|||
)
|
||||
)
|
||||
elif filter_field.type == 'distance':
|
||||
center_lat = get_request().form.get('center_lat')
|
||||
center_lon = get_request().form.get('center_lon')
|
||||
center_lat = request.form.get('center_lat') if request else None
|
||||
center_lon = request.form.get('center_lon') if request else None
|
||||
if not (center_lat and center_lon):
|
||||
raise RequestError('Distance filter missing a center')
|
||||
center = misc.normalize_geolocation({'lat': center_lat, 'lon': center_lon})
|
||||
|
|
|
@ -2803,6 +2803,8 @@ class ItemsField(WidgetField, ItemFieldMixin):
|
|||
return values
|
||||
|
||||
def store_display_value(self, data, field_id, raise_on_error=False):
|
||||
if not data.get(field_id):
|
||||
return ''
|
||||
options = self.get_options()
|
||||
if not options:
|
||||
return ''
|
||||
|
@ -2827,6 +2829,8 @@ class ItemsField(WidgetField, ItemFieldMixin):
|
|||
return ', '.join(choices)
|
||||
|
||||
def store_structured_value(self, data, field_id, raise_on_error=False):
|
||||
if not data.get(field_id):
|
||||
return
|
||||
if not self.data_source:
|
||||
return
|
||||
try:
|
||||
|
|
Loading…
Reference in New Issue