misc: allow duplicated role names (#8373)
This doesn't let the user create such roles as the result will always be confusing lists but at least it won't crash if an external process creates such roles.
This commit is contained in:
parent
e38e9be0ac
commit
31510a0f65
|
@ -443,7 +443,7 @@ def test_form_workflow_remapping(pub):
|
|||
|
||||
def test_form_workflow_role(pub):
|
||||
create_superuser(pub)
|
||||
create_role()
|
||||
role = create_role()
|
||||
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
|
@ -458,10 +458,16 @@ def test_form_workflow_role(pub):
|
|||
|
||||
resp = app.get('/backoffice/forms/1/')
|
||||
resp = resp.click(href='role/_receiver')
|
||||
resp.forms[0]['role_id'] = 'foobar'
|
||||
resp.forms[0]['role_id'] = role.id
|
||||
resp = resp.forms[0].submit('submit')
|
||||
assert FormDef.get(1).workflow_roles == {'_receiver': '1'}
|
||||
|
||||
# check it doesn't fail if a second role with the same name exists
|
||||
role = Role(name='foobar')
|
||||
role.store()
|
||||
resp = app.get('/backoffice/forms/1/')
|
||||
resp = resp.click(href='role/_receiver')
|
||||
|
||||
def test_form_workflow_options(pub):
|
||||
create_superuser(pub)
|
||||
create_role()
|
||||
|
@ -542,7 +548,7 @@ def test_form_roles(pub):
|
|||
|
||||
resp = app.get('/backoffice/forms/1/')
|
||||
resp = resp.click('User Roles')
|
||||
resp.forms[0]['roles$element0'].value = role.name
|
||||
resp.forms[0]['roles$element0'].value = role.id
|
||||
resp = resp.forms[0].submit('submit')
|
||||
assert FormDef.get(1).roles == [role.id]
|
||||
|
||||
|
@ -915,12 +921,12 @@ def test_form_legacy_int_id(pub):
|
|||
|
||||
resp = app.get('/backoffice/forms/1/')
|
||||
resp = resp.click('User Roles')
|
||||
assert resp.forms[0]['roles$element0'].value == 'Logged Users'
|
||||
assert resp.forms[0]['roles$element1'].value == 'ZAB'
|
||||
assert resp.forms[0]['roles$element0'].value == 'logged-users'
|
||||
assert resp.forms[0]['roles$element1'].value == role.id
|
||||
|
||||
resp = app.get('/backoffice/forms/1/')
|
||||
resp = resp.click('Recipient')
|
||||
assert resp.forms[0]['role_id'].value == 'ZAB'
|
||||
assert resp.forms[0]['role_id'].value == role.id
|
||||
|
||||
def test_form_anonymise(pub):
|
||||
create_superuser(pub)
|
||||
|
|
|
@ -568,9 +568,10 @@ class FormDefPage(Directory):
|
|||
def _roles_selection(self, title, attribute, description=None,
|
||||
include_logged_users_role=True):
|
||||
form = Form(enctype='multipart/form-data')
|
||||
options = [(None, '---')]
|
||||
options = [(None, '---', None)]
|
||||
if include_logged_users_role:
|
||||
options.append((logged_users_role().id, logged_users_role().name))
|
||||
options.append((logged_users_role().id,
|
||||
logged_users_role().name, logged_users_role().id))
|
||||
options += get_user_roles()
|
||||
form.add(WidgetList, 'roles', element_type=SingleSelectWidget,
|
||||
value=getattr(self.formdef, attribute),
|
||||
|
|
|
@ -87,6 +87,6 @@ def logged_users_role():
|
|||
|
||||
|
||||
def get_user_roles():
|
||||
t = sorted([(qommon.misc.simplify(x.name), x.id, x.name) for x in Role.select()])
|
||||
t = sorted([(qommon.misc.simplify(x.name), x.id, x.name, x.id) for x in Role.select()])
|
||||
return [x[1:] for x in t]
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ class AggregationEmailWorkflowStatusItem(WorkflowStatusItem):
|
|||
value = self.to,
|
||||
add_element_label = _('Add Role'),
|
||||
element_kwargs = {'render_br': False,
|
||||
'options': [(None, '---')] +
|
||||
'options': [(None, '---', None)] +
|
||||
self.get_list_of_roles(include_logged_in_users=False)})
|
||||
|
||||
def get_parameters(self):
|
||||
|
|
|
@ -115,7 +115,7 @@ class AddAttachmentWorkflowStatusItem(WorkflowStatusItem):
|
|||
value = self.by,
|
||||
add_element_label = _('Add Role'),
|
||||
element_kwargs={'render_br': False,
|
||||
'options': [(None, '---')] + self.get_list_of_roles()})
|
||||
'options': [(None, '---', None)] + self.get_list_of_roles()})
|
||||
if 'required' in parameters:
|
||||
form.add(CheckboxWidget, '%srequired' % prefix, title = _('Required'), value = self.required)
|
||||
if 'title' in parameters:
|
||||
|
|
|
@ -46,7 +46,7 @@ class DispatchWorkflowStatusItem(WorkflowStatusItem):
|
|||
if 'role_id' in parameters:
|
||||
form.add(SingleSelectWidget, '%srole_id' % prefix,
|
||||
title=_('Value for role'), value=str(self.role_id),
|
||||
options=[(None, '----')] + get_user_roles())
|
||||
options=[(None, '----', None)] + get_user_roles())
|
||||
|
||||
def perform(self, formdata):
|
||||
if not (self.role_id and self.role_key):
|
||||
|
|
|
@ -80,7 +80,7 @@ class FormWorkflowStatusItem(WorkflowStatusItem):
|
|||
value = self.by,
|
||||
add_element_label = _('Add Role'),
|
||||
element_kwargs = {'render_br': False,
|
||||
'options': [(None, '---')] +
|
||||
'options': [(None, '---', None)] +
|
||||
self.get_list_of_roles(include_logged_in_users=False)})
|
||||
if 'varname' in parameters:
|
||||
form.add(VarnameWidget, '%svarname' % prefix, required=True,
|
||||
|
|
|
@ -157,7 +157,7 @@ class JumpWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
value=self.by,
|
||||
add_element_label=_('Add Role'),
|
||||
element_kwargs={'render_br': False,
|
||||
'options': [(None, '---')] +
|
||||
'options': [(None, '---', None)] +
|
||||
self.get_list_of_roles(include_logged_in_users=False)})
|
||||
if 'timeout' in parameters:
|
||||
_hint = htmltext(_("ex.: 7 days 1 minute<br/> Usable units of time: %(variables)s. " \
|
||||
|
|
|
@ -32,7 +32,7 @@ class AddRoleWorkflowStatusItem(WorkflowStatusItem):
|
|||
if 'role_id' in parameters:
|
||||
form.add(SingleSelectWidget, '%srole_id' % prefix,
|
||||
title=_('Role to Add'), value=str(self.role_id),
|
||||
options=[(None, '----')] + get_user_roles())
|
||||
options=[(None, '----', None)] + get_user_roles())
|
||||
|
||||
def role_id_export_to_xml(self, item, charset, include_id=False):
|
||||
self._role_export_to_xml('role_id', item, charset,
|
||||
|
@ -76,7 +76,7 @@ class RemoveRoleWorkflowStatusItem(WorkflowStatusItem):
|
|||
if 'role_id' in parameters:
|
||||
form.add(SingleSelectWidget, '%srole_id' % prefix,
|
||||
title=_('Role to Remove'), value=self.role_id,
|
||||
options=[(None, '----')] + get_user_roles())
|
||||
options=[(None, '----', None)] + get_user_roles())
|
||||
|
||||
def perform(self, formdata):
|
||||
if not self.role_id:
|
||||
|
|
|
@ -393,13 +393,13 @@ class Workflow(StorableObject):
|
|||
|
||||
def get_list_of_roles(self, include_logged_in_users=True):
|
||||
t = []
|
||||
t.append(('_submitter', C_('role|User')))
|
||||
t.append(('_submitter', C_('role|User'), '_submitter'))
|
||||
for workflow_role in self.roles.items():
|
||||
t.append(workflow_role)
|
||||
t.append(list(workflow_role) + [workflow_role[0]])
|
||||
if include_logged_in_users:
|
||||
t.append((logged_users_role().id, logged_users_role().name))
|
||||
t.append((logged_users_role().id, logged_users_role().name, logged_users_role().id))
|
||||
if get_user_roles():
|
||||
t.append((None, '----'))
|
||||
t.append((None, '----', None))
|
||||
t.extend(get_user_roles())
|
||||
return t
|
||||
|
||||
|
@ -1174,7 +1174,7 @@ class CommentableWorkflowStatusItem(WorkflowStatusItem):
|
|||
value=self.by,
|
||||
add_element_label=_('Add Role'),
|
||||
element_kwargs={'render_br': False,
|
||||
'options': [(None, '---')] + self.get_list_of_roles()})
|
||||
'options': [(None, '---', None)] + self.get_list_of_roles()})
|
||||
if 'varname' in parameters:
|
||||
form.add(VarnameWidget, '%svarname' % prefix,
|
||||
title=_('Variable Name'), value=self.varname,
|
||||
|
@ -1255,7 +1255,7 @@ class ChoiceWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
value = self.by,
|
||||
add_element_label = _('Add Role'),
|
||||
element_kwargs={'render_br': False,
|
||||
'options': [(None, '---')] + self.get_list_of_roles()})
|
||||
'options': [(None, '---', None)] + self.get_list_of_roles()})
|
||||
if 'backoffice_info_text' in parameters:
|
||||
form.add(WysiwygTextWidget, '%sbackoffice_info_text' % prefix,
|
||||
title=_('Information Text for Backoffice'),
|
||||
|
@ -1321,7 +1321,7 @@ class SendmailWorkflowStatusItem(WorkflowStatusItem):
|
|||
value=self.to,
|
||||
add_element_label=_('Add Role'),
|
||||
element_kwargs={'render_br': False,
|
||||
'options': [(None, '---')] +
|
||||
'options': [(None, '---', None)] +
|
||||
self.get_list_of_roles(include_logged_in_users=False)})
|
||||
if 'subject' in parameters:
|
||||
form.add(StringWidget, '%ssubject' % prefix, title=_('Subject'),
|
||||
|
@ -1595,7 +1595,7 @@ class EditableWorkflowStatusItem(WorkflowStatusItem):
|
|||
value = self.by,
|
||||
add_element_label = _('Add Role'),
|
||||
element_kwargs={'render_br': False,
|
||||
'options': [(None, '---')] + self.get_list_of_roles()})
|
||||
'options': [(None, '---', None)] + self.get_list_of_roles()})
|
||||
if 'status' in parameters:
|
||||
# XXX: look into this one, as None is a perfectly valid value, and
|
||||
# it would put this question in the 'workflow options' part.
|
||||
|
@ -1716,7 +1716,7 @@ class ExportToModel(WorkflowStatusItem):
|
|||
value = self.by,
|
||||
add_element_label = _('Add Role'),
|
||||
element_kwargs={'render_br': False,
|
||||
'options': [(None, '---')] + self.get_list_of_roles()})
|
||||
'options': [(None, '---', None)] + self.get_list_of_roles()})
|
||||
if 'attach_to_history' in parameters:
|
||||
form.add(CheckboxWidget, '%sattach_to_history' % prefix,
|
||||
title=_('Attach generated file to the form history'),
|
||||
|
|
Loading…
Reference in New Issue