cards: add preset datasources for cards filtered on user (#50459)
This commit is contained in:
parent
9cf08439e3
commit
da3e9a5118
|
@ -9673,3 +9673,50 @@ def test_jumps_with_by_and_no_trigger(pub):
|
|||
# it jumps to st2, as jump.by is only related to triggers
|
||||
assert formdef.data_class().count() == 1
|
||||
assert formdef.data_class().select()[0].status == 'wf-st2'
|
||||
|
||||
|
||||
def test_user_filter_auto_custom_view(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
CardDef.wipe()
|
||||
carddef = CardDef()
|
||||
carddef.name = 'items'
|
||||
carddef.user_support = 'optional'
|
||||
carddef.digest_templates = {'default': '{{form_var_name}}'}
|
||||
carddef.fields = [
|
||||
fields.StringField(id='0', label='string', varname='name'),
|
||||
]
|
||||
carddef.store()
|
||||
for i, value in enumerate(['foo', 'bar', 'baz']):
|
||||
carddata = carddef.data_class()()
|
||||
carddata.data = {
|
||||
'0': value,
|
||||
'1': 'attr%s' % i,
|
||||
}
|
||||
carddata.user_id = user.id
|
||||
carddata.just_created()
|
||||
carddata.store()
|
||||
|
||||
carddata.user_id = None # don't associate latest (baz) with user
|
||||
carddata.store()
|
||||
|
||||
ds = {'type': 'carddef:%s' % carddef.url_name}
|
||||
formdef = FormDef()
|
||||
formdef.name = 'foobar'
|
||||
formdef.fields = [
|
||||
fields.ItemField(id='0', label='item', type='item', varname='foo', data_source=ds),
|
||||
]
|
||||
formdef.store()
|
||||
|
||||
app = get_app(pub)
|
||||
resp = app.get(formdef.get_url())
|
||||
assert [x[2] for x in resp.form['f0'].options] == ['bar', 'baz', 'foo']
|
||||
|
||||
formdef.fields[0].data_source['type'] = 'carddef:%s:_with_user_filter' % carddef.url_name
|
||||
formdef.store()
|
||||
resp = app.get(formdef.get_url())
|
||||
assert [x[2] for x in resp.form['f0'].options] == ['---']
|
||||
|
||||
app = login(get_app(pub), username='foo', password='foo')
|
||||
resp = app.get(formdef.get_url())
|
||||
assert [x[2] for x in resp.form['f0'].options] == ['bar', 'foo']
|
||||
|
|
|
@ -155,6 +155,9 @@ class CardDef(FormDef):
|
|||
data_source_id = 'carddef:%s' % carddef.url_name
|
||||
carddefs_by_id[carddef.id] = carddef
|
||||
yield (carddef, carddef.name, data_source_id, None)
|
||||
if carddef.user_support:
|
||||
data_source_id = 'carddef:%s:_with_user_filter' % carddef.url_name
|
||||
yield (carddef, _('%s (filtered on user)') % carddef.name, data_source_id, None)
|
||||
clauses = [Equal('formdef_type', 'carddef'), Equal('visibility', 'datasource')]
|
||||
for custom_view in get_publisher().custom_view_class.select(clauses):
|
||||
carddef = carddefs_by_id.get(custom_view.formdef_id)
|
||||
|
@ -198,13 +201,19 @@ class CardDef(FormDef):
|
|||
order_by = None
|
||||
digest_key = 'default'
|
||||
if len(parts) > 2:
|
||||
if custom_view is None:
|
||||
custom_view = cls.get_data_source_custom_view(data_source_id, carddef=carddef)
|
||||
if not custom_view:
|
||||
return []
|
||||
order_by = custom_view.order_by
|
||||
if not get_by_id:
|
||||
criterias.extend(custom_view.get_criterias(formdef=carddef, compile_templates=True))
|
||||
if parts[2] == '_with_user_filter':
|
||||
if not get_by_id:
|
||||
variables = get_publisher().substitutions.get_context_variables(mode='lazy')
|
||||
user = variables['form_user']
|
||||
criterias.append(Equal('user_id', str(user.id) if user else '-1'))
|
||||
else:
|
||||
if custom_view is None:
|
||||
custom_view = cls.get_data_source_custom_view(data_source_id, carddef=carddef)
|
||||
if not custom_view:
|
||||
return []
|
||||
order_by = custom_view.order_by
|
||||
if not get_by_id:
|
||||
criterias.extend(custom_view.get_criterias(formdef=carddef, compile_templates=True))
|
||||
|
||||
if custom_view:
|
||||
view_digest_key = 'custom-view:%s' % custom_view.get_url_slug()
|
||||
|
|
Loading…
Reference in New Issue