workflows: use "everybody" as empty label for message/comment actions (#55410)

This commit is contained in:
Frédéric Péters 2021-07-05 21:15:57 +02:00
parent 0c3f1f55fe
commit cb0d1b8092
4 changed files with 40 additions and 13 deletions

View File

@ -1763,6 +1763,32 @@ class WidgetList(quixote.form.widget.WidgetList):
return r.getvalue()
class WidgetListOfRoles(WidgetList):
def __init__(self, name, value=None, roles=None, **kwargs):
self.first_element_empty_label = kwargs.pop('first_element_empty_label', '---')
super().__init__(
name,
value=value,
element_type=SingleSelectWidget,
element_kwargs={
'render_br': False,
'options': [(None, '---', None)] + roles or [],
},
**kwargs,
)
def get_widgets(self):
seen = False
for widget in super().get_widgets():
# change first option (empty value) of first element to use a specific label
if not seen and isinstance(widget, SingleSelectWidget):
widget.full_options = widget.full_options[:]
widget.full_options[0] = list(widget.full_options[0])
widget.full_options[0][1] = self.first_element_empty_label
seen = True
yield widget
class WidgetDict(quixote.form.widget.WidgetDict):
# Fix the title and hint setting
# FIXME: to be fixed in Quixote upstream : title and hint parameters should be removed

View File

@ -50,6 +50,12 @@ function prepare_widget_list_elements() {
}
}
);
if (name_attr == 'to$add_element') {
/* replace 1st list element by an empty label, as it's used
* to remove an actual selection */
$(new_row).find('option[value="None"]').first().text('----');
}
/* add new row after the last row */
$(row).after($(new_row));

View File

@ -26,7 +26,7 @@ from wcs.workflows import (
)
from ..qommon import _, ezt, get_logger
from ..qommon.form import SingleSelectWidget, TextWidget, WidgetList
from ..qommon.form import TextWidget, WidgetListOfRoles
from ..qommon.template import TemplateError
@ -95,16 +95,13 @@ class RegisterCommenterWorkflowStatusItem(WorkflowStatusItem):
)
if 'to' in parameters:
form.add(
WidgetList,
WidgetListOfRoles,
'%sto' % prefix,
title=_('To'),
element_type=SingleSelectWidget,
value=self.to or [],
add_element_label=self.get_add_role_label(),
element_kwargs={
'render_br': False,
'options': [(None, '---', None)] + self.get_list_of_roles(include_logged_in_users=False),
},
first_element_empty_label=_('Everybody'),
roles=self.get_list_of_roles(include_logged_in_users=False),
)
def get_parameters(self):

View File

@ -49,6 +49,7 @@ from .qommon.form import (
ValidatedStringWidget,
VarnameWidget,
WidgetList,
WidgetListOfRoles,
WysiwygTextWidget,
)
from .qommon.humantime import seconds2humanduration
@ -3341,16 +3342,13 @@ class DisplayMessageWorkflowStatusItem(WorkflowStatusItem):
)
if 'to' in parameters:
form.add(
WidgetList,
WidgetListOfRoles,
'%sto' % prefix,
title=_('To'),
element_type=SingleSelectWidget,
value=self.to or [],
add_element_label=self.get_add_role_label(),
element_kwargs={
'render_br': False,
'options': [(None, '---', None)] + self.get_list_of_roles(include_logged_in_users=False),
},
first_element_empty_label=_('Everybody'),
roles=self.get_list_of_roles(include_logged_in_users=False),
)
def get_parameters(self):