backoffice: allow role specific custom view to be default (#77193) #633
|
@ -915,32 +915,61 @@ def test_backoffice_custom_view_is_default(pub):
|
|||
assert pub.custom_view_class.get(2).is_default is True # super user - private
|
||||
assert pub.custom_view_class.get(3).is_default is True # super user - shared
|
||||
|
||||
# not possible to define more than one default private view
|
||||
# role default view
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp.forms['save-custom-view']['title'] = 'view 4'
|
||||
resp.forms['save-custom-view']['visibility'] = 'owner'
|
||||
resp.forms['save-custom-view']['visibility'] = 'role'
|
||||
resp.forms['save-custom-view']['role'] = agent.roles[0]
|
||||
resp.forms['save-custom-view']['is_default'] = True
|
||||
resp = resp.forms['save-custom-view'].submit()
|
||||
|
||||
assert pub.custom_view_class.count() == 4
|
||||
assert pub.custom_view_class.get(1).is_default is False # simple user - private
|
||||
assert pub.custom_view_class.get(2).is_default is False # super user - private
|
||||
assert pub.custom_view_class.get(2).is_default is True # super user - private
|
||||
assert pub.custom_view_class.get(3).is_default is True # super user - shared
|
||||
assert pub.custom_view_class.get(4).is_default is True # super user - private 2
|
||||
assert pub.custom_view_class.get(4).is_default is True # role view
|
||||
|
||||
# not possible to define more than one default shared view
|
||||
# not possible to define more than one default private view
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp.forms['save-custom-view']['title'] = 'view 5'
|
||||
resp.forms['save-custom-view']['visibility'] = 'any'
|
||||
resp.forms['save-custom-view']['visibility'] = 'owner'
|
||||
resp.forms['save-custom-view']['is_default'] = True
|
||||
resp = resp.forms['save-custom-view'].submit()
|
||||
assert pub.custom_view_class.count() == 5
|
||||
assert pub.custom_view_class.get(1).is_default is False # simple user - private
|
||||
assert pub.custom_view_class.get(2).is_default is False # super user - private
|
||||
assert pub.custom_view_class.get(3).is_default is True # super user - shared
|
||||
assert pub.custom_view_class.get(4).is_default is True # role view
|
||||
assert pub.custom_view_class.get(5).is_default is True # super user - private 2
|
||||
|
||||
# not possible to define more than one default shared view
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
resp.forms['save-custom-view']['title'] = 'view 6'
|
||||
resp.forms['save-custom-view']['visibility'] = 'any'
|
||||
resp.forms['save-custom-view']['is_default'] = True
|
||||
resp = resp.forms['save-custom-view'].submit()
|
||||
assert pub.custom_view_class.count() == 6
|
||||
assert pub.custom_view_class.get(1).is_default is False # simple user - private
|
||||
assert pub.custom_view_class.get(2).is_default is False # super user - private
|
||||
assert pub.custom_view_class.get(3).is_default is False # super user - shared
|
||||
assert pub.custom_view_class.get(4).is_default is True # super user - private 2
|
||||
assert pub.custom_view_class.get(5).is_default is True # super user - shared 2
|
||||
assert pub.custom_view_class.get(4).is_default is True # role view
|
||||
assert pub.custom_view_class.get(5).is_default is True # super user - private 2
|
||||
assert pub.custom_view_class.get(6).is_default is True # super user - shared 2
|
||||
|
||||
# check most specific default custom view is used
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert resp.pyquery('#appbar h2').text() == 'form title - view 5' # owner
|
||||
|
||||
pub.custom_view_class.remove_object(5)
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert resp.pyquery('#appbar h2').text() == 'form title - view 4' # role
|
||||
|
||||
pub.custom_view_class.remove_object(4)
|
||||
resp = app.get('/backoffice/management/form-title/')
|
||||
assert resp.pyquery('#appbar h2').text() == 'form title - view 6' # any
|
||||
|
||||
|
||||
def test_backoffice_default_custom_view(pub):
|
||||
|
|
|
@ -814,7 +814,7 @@ class FormPage(Directory, TempfileDirectoryMixin):
|
|||
self.get_custom_views(
|
||||
[
|
||||
Equal('is_default', True),
|
||||
Contains('visibility', ['any', 'owner']),
|
||||
Contains('visibility', ['any', 'role', 'owner']),
|
||||
]
|
||||
)
|
||||
)
|
||||
|
@ -826,6 +826,17 @@ class FormPage(Directory, TempfileDirectoryMixin):
|
|||
self.default_view = view
|
||||
return
|
||||
|
||||
# search for first default role custom view
|
||||
user = get_request().user
|
||||
if user:
|
||||
user_role_ids = user.get_roles()
|
||||
|
||||
for view in custom_views:
|
||||
if view.visibility != 'role':
|
||||
continue
|
||||
if view.role_id in user_role_ids:
|
||||
self.default_view = view
|
||||
return
|
||||
|
||||
# default user custom view not found, search in 'any' custom views
|
||||
for view in custom_views:
|
||||
if view.visibility != 'any':
|
||||
|
@ -858,7 +869,7 @@ class FormPage(Directory, TempfileDirectoryMixin):
|
|||
Equal('formdef_type', self.formdef.xml_root_node),
|
||||
Equal('formdef_id', str(self.formdef.id)),
|
||||
] + (criterias or [])
|
||||
for view in get_publisher().custom_view_class.select(clause=criterias):
|
||||
for view in get_publisher().custom_view_class.select(clause=criterias, order_by='id'):
|
||||
if view.match(get_request().user, self.formdef):
|
||||
yield view
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Les rôles d'un user sont toujours ordonnés de la même façon ? Si un user a plusieurs rôles, et qu'il existe une vue par défaut pour plus d'un de ses rôles, le résultat sera toujours le même ?
Il n'y a pas de problème par rapport à la liste des rôles, l'itération principale se fait sur la liste des vues, mais si jamais l'ordre de celle-ci changeait, on pourrait en effet voir une vue qui change, j'ai ajouté cette modification au patch :
pour garantir qu'on récupère toujours les listes dans le même ordre.