[%# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This Source Code Form is "Incompatible With Secondary Licenses", as
# defined by the Mozilla Public License, v. 2.0.
#%]
[% IF user.id && (!bug || bug.check_can_change_field('flagtypes.name', 0, 1)) %]
[%# We list flags by looping twice over the flag types relevant for the bug.
# In the first loop, we display existing flags and then, for active types,
# we display UI for adding new flags. In the second loop, we display UI
# for adding additional new flags for those types for which a flag already
# exists but which are multiplicable (can have multiple flags of the type
# on a single bug/attachment).
#%]
[% DEFAULT flag_table_id = "flags" %]
[% UNLESS flag_no_header %]
Flags:
[% IF any_flags_requesteeble %]
Requestee:
[% END %]
[% END %]
[%# Step 1: Display every flag type (except inactive types with no flags). %]
[% FOREACH type = flag_types -%]
[%-# Step 1a: Display existing flag(s). %]
[% FOREACH flag = type.flags %]
[% PROCESS flag_row flag = flag type = type %]
[% END -%]
[% SET flag = "" %]
[% NEXT IF read_only_flags %]
[%-# Step 1b: Display UI for setting flag. %]
[% IF (!type.flags || type.flags.size == 0) && type.is_active %]
[% PROCESS flag_row type = type %]
[% END %]
[% END %]
[% IF !read_only_flags %]
[%# Step 2: Display flag type again (if type is multiplicable). %]
[% FOREACH type = flag_types %]
[% NEXT UNLESS type.flags && type.flags.size > 0 && type.is_multiplicable && type.is_active %]
[% IF !separator_displayed %]
[% separator_displayed = 1 %]
[% END %]
[% PROCESS flag_row type = type addl_text = "addl." %]
[% END %]
[% END %]
[% ELSE %]
[%# The user is logged out. Display flags as read-only. %]
[% header_displayed = 0 %]
[% FOREACH type = flag_types %]
[% FOREACH flag = type.flags %]
[% IF !flag_no_header AND !header_displayed %]
Flags:
[% header_displayed = 1 %]
[% END %]
[% IF flag.setter.name %]
[% flag.setter.nick FILTER html %]:
[% ELSE %]
[% flag.setter.nick FILTER html %]:
[% END %]
[%+ type.name FILTER html FILTER no_break %][% flag.status %]
[% IF flag.requestee %]
[% IF flag.requestee.name %]
([% flag.requestee.nick FILTER html %])
[% ELSE %]
([% flag.requestee.nick FILTER html %])
[% END %]
[% END %]
[% END %]
[% END %]
[% END %]
[%# Display a table row for flags %]
[% BLOCK flag_row %]
[% RETURN IF !flag && !((type.is_requestable && user.can_request_flag(type)) || user.can_set_flag(type)) %]
[% SET fid = flag ? "flag-$flag.id" : "flag_type-$type.id" %]
[% can_edit_flag = (!read_only_flags || (flag && (flag.setter_id == user.id || (flag.requestee_id && flag.requestee_id == user.id)))) ? 1 : 0 %]
[% IF flag %]
[% flag.setter.nick FILTER html %]:
[% ELSE %]
[% addl_text FILTER html %]
[% END %]
[% IF any_flags_requesteeble %]
[% IF (type.is_active && type.is_requestable && type.is_requesteeble) || (flag && flag.requestee) %]
[% SET grant_list = [] %]
[% IF Param('usemenuforusers') %]
[% IF !can_edit_flag || (flag && !(type.is_active && type.is_requestable && type.is_requesteeble)) %]
[%# We are here only because there was already a requestee. In this case,
the only valid action is to remove the requestee or leave it alone;
nothing else. %]
[% grant_list = [flag.requestee] %]
[% ELSE %]
[% grant_list = type.grant_list %]
[% END %]
[% END %]
[% SET flag_name = flag ? "requestee-$flag.id" : "requestee_type-$type.id" %]
[% SET flag_requestee = (flag && flag.requestee) ? flag.requestee.login : '' %]
[% SET flag_multiple = flag ? 0 : type.is_multiplicable * 3 %]
[% SET flag_empty_ok = flag ? 1 : !type.is_multiplicable %]
[% INCLUDE global/userselect.html.tmpl
name => flag_name
id => flag_name
value => flag_requestee
multiple => flag_multiple
emptyok => flag_empty_ok
classes => ["requestee"]
custom_userlist => grant_list
disabled => !can_edit_flag
%]
[% END %]
[% END %]
[% IF type.is_multiplicable && edit_multiple_bugs %]
[% END %]