Bug 81185, Bug 70605 - Fix chfield <select>

git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1300 6955db30-a419-402b-8a0d-67ecbb4d7f56
master
vfilippov 2011-07-21 13:44:45 +00:00
parent f8d92a0850
commit a50fa41f30
6 changed files with 64 additions and 54 deletions

View File

@ -319,7 +319,7 @@ sub SPECIAL_ORDER
return $cache->{special_order} = $special_order;
}
# Backward-compatibility for old field names. Goes old_name => new_name.
# Backwards-compatibility for old field names. Goes old_name => new_name.
sub COLUMN_ALIASES
{
my $cache = Bugzilla->cache_fields;
@ -460,7 +460,7 @@ sub STATIC_COLUMNS
}
# Do the actual column-getting from fielddefs, now.
my @bugsjoin;
my @bugid_fields;
foreach my $field (Bugzilla->get_fields)
{
my $id = $field->name;
@ -470,19 +470,19 @@ sub STATIC_COLUMNS
$columns->{$id}->{nocharts} = $field->obsolete;
if ($field->type == FIELD_TYPE_BUG_ID)
{
push @bugsjoin, $field;
push @bugid_fields, $field;
}
}
# Fields of bugs related to selected by some BUG_ID type field
foreach my $field (@bugsjoin)
foreach my $field (@bugid_fields)
{
my $id = $field->name;
my $join = [ "LEFT JOIN bugs bugs_$id ON bugs_$id.bug_id=bugs.$id" ];
foreach my $subfield (Bugzilla->get_fields({ obsolete => 0, buglist => 1 }))
{
my $subid = $subfield->name;
if ($columns->{$subid}->{name} eq "bugs.$subid")
if ($subid ne 'bug_id' && $columns->{$subid}->{name} eq "bugs.$subid")
{
$columns->{$id.'_'.$subid} = {
name => "bugs_$id.".$subfield->name,

View File

@ -807,25 +807,50 @@ sub create {
lc_messages => Bugzilla->messages,
# HTML <select>
# html_select(name, { <attr> => <value> }, <selected value>, (
# [ { id => <option value>, name => <option text> }, ... ]
# OR
# { <option value> => <option text>, ... } # will be sorted on text
# OR
# [ <option value>, ... ], { <option value> => <option text>, ... }
# ))
html_select => sub
{
my ($name, $values, $valuenames, $selected, $args) = @_;
my ($name, $selected, $values, $valuenames, $attrs) = @_;
$selected = '' if !defined $selected;
$selected = { map { $_ => 1 } list $selected };
$name = html_quote($name);
my $html = '<select name="'.$name.'" id="'.$name.'">';
if (ref $valuenames eq 'ARRAY')
my $html = '<select name="'.$name.'" id="'.$name.'"';
if ($attrs)
{
$values = [ map { $_->{name} } @$valuenames ];
$valuenames = { map { $_->{name} => $_->{title} } @$valuenames };
$html .= ' '.html_quote($_).'="'.html_quote($attrs->{$_}).'"' for keys %$attrs;
}
$html .= '>';
if (ref $values eq 'HASH')
{
$valuenames = $values;
$values = [ sort { $values->{$a} cmp $values->{$b} } keys %$values ];
}
if (!$values || !@$values)
{
}
elsif (!ref $values->[0])
{
for (@$values)
{
$html .= '<option value="'.html_quote($_).'"';
$html .= ' selected="selected"' if $selected->{$_};
$html .= '>'.html_quote($valuenames->{$_}).'</option>';
}
}
else
{
$values ||= [ keys %$valuenames ];
}
for (@$values)
{
$html .= '<option value="'.html_quote($_).'"';
$html .= ' selected="selected"' if $selected eq $_;
$html .= '>'.html_quote($valuenames->{$_}).'</option>';
for (@$values)
{
$html .= '<option value="'.html_quote($_->{id}).'"';
$html .= ' selected="selected"' if $selected->{$_->{id}};
$html .= '>'.html_quote($_->{name}).'</option>';
}
}
$html .= '</select>';
return $html;

View File

@ -173,7 +173,11 @@ if (!@{$default->{chfieldto}} || $default->{chfieldto}->[0] eq '')
}
# "where one or more of the following changed:"
$vars->{chfield} = [ map { $_->name } @{ Bugzilla::Search->CHANGEDFROMTO_FIELDS } ];
$vars->{chfield} = [
sort { $a->{name} cmp $b->{name} }
map { { id => $_->{name}, name => $_->{description} } }
@{ Bugzilla::Search->CHANGEDFROMTO_FIELDS }
];
# Boolean charts

View File

@ -10,7 +10,7 @@
# | -------------------------- |
# ------------------------------
#
# If there is single term inside some AND/OR, it is shown without fieldset.
# If there is just a single term inside some AND/OR, it is shown without fieldset.
# So, if the whole chart consists of a single term, the form would look like:
#
# "field type value [OR] [AND] [NOT] [OR]"
@ -59,8 +59,8 @@
[% FOREACH col = row %]
[% J = loop.count - 1 %]
[% "<br />" IF J %]
[% html_select("field$C-$I-$J", '', chart_fields, col.field) %]
[%- html_select("type$C-$I-$J", chart_types, lc_messages.operator_descs, col.type)
[% html_select("field$C-$I-$J", col.field, chart_fields) %]
[%- html_select("type$C-$I-$J", col.type, chart_types, lc_messages.operator_descs)
%]<input id="[% "value$C-$I-$J" %]" name="[% "value$C-$I-$J" %]" value="[% col.value | html %]" size="40" />
[% END %]

View File

@ -67,7 +67,7 @@ addListener(window, 'load', function() {
<th align="right">
<label for="short_desc" accesskey="s"><u>S</u>ummary</label>:
</th>
<td>[% html_select('short_desc_type', text_types, lc_messages.operator_descs, default.short_desc_type.0) %]</td>
<td>[% html_select('short_desc_type', default.short_desc_type.0, text_types, lc_messages.operator_descs) %]</td>
<td>
<input name="short_desc" id="short_desc" size="40"
value="[% default.short_desc.0 FILTER html %]">
@ -219,7 +219,7 @@ addListener(window, 'load', function() {
</th>
<td>
[% t = field.name _ '_type' %]
[% html_select(t, text_types, lc_messages.operator_descs, default.$t.0) %]
[% html_select(t, default.$t.0, text_types, lc_messages.operator_descs) %]
</td>
<td>
<input name="[% field.name %]" id="[% field.name %]" size="40"
@ -236,7 +236,7 @@ addListener(window, 'load', function() {
</th>
<td>
[% keywords_types = ['allwords', 'anywords', 'nowords', 'regexp', 'notregexp'] %]
[% html_select('keywords_type', keywords_types, lc_messages.operator_descs, default.keywords_type.0) %]
[% html_select('keywords_type', default.keywords_type.0, keywords_types, lc_messages.operator_descs) %]
</td>
<td>
<input name="keywords" id="keywords" size="40"
@ -442,18 +442,13 @@ addListener(window, 'load', function() {
</tr>
<tr>
<td>
<select name="emailtype[% n %]">
[% FOREACH qv = [
{ name => "exact", description => "is" },
{ name => "substring", description => "contains" },
{ name => "notequals", description => "is not" },
{ name => "regexp", description => "matches regexp" },
{ name => "notregexp", description => "doesn't match regexp" } ] %]
<option value="[% qv.name %]"
[% " selected" IF default.emailtype.$n == qv.name %]>[% qv.description %]</option>
[% END %]
</select>
[% html_select('emailtype' _ n, default.emailtype.$n, [
{ id => "exact", name => "is" },
{ id => "substring", name => "contains" },
{ id => "notequals", name => "is not" },
{ id => "regexp", name => "matches regexp" },
{ id => "notregexp", name => "doesn't match regexp" }
]) %]
</td>
</tr>
<tr>
@ -492,8 +487,7 @@ addListener(window, 'load', function() {
<label for="votes">Only [% terms.bugs %] with at least</label>:
</td>
<td>
<input name="votes" id="votes" size="3"
value="[% default.votes.0 FILTER html %]">
<input name="votes" id="votes" size="3" value="[% default.votes.0 FILTER html %]" />
votes
</td>
</tr>
@ -517,25 +511,12 @@ addListener(window, 'load', function() {
<input name="chfieldfrom" id="chfieldfrom"
size="10" value="[% default.chfieldfrom.0 FILTER html %]">
and <input name="chfieldto" size="10" value="[% default.chfieldto.0 FILTER html %]">
<br>(YYYY-MM-DD or relative dates)
<br />(YYYY-MM-DD or relative dates)
</dd>
<dt><label for="chfieldwho">By user:</label></dt>
<dd><input name="chfieldwho" id="chfieldwho" size="20" value="[% default.chfieldwho.0 | html %]" /> (user login)</dd>
<dt><label for="chfield">where one or more of the following changed</label>:</dt>
<dd>
[% chfields = [] %]
[% FOREACH field = chfield %]
[% chfields.push({value => field, desc => (field_descs.$field || field) }) %]
[% END %]
<select name="chfield" id="chfield" multiple="multiple" size="4">
[% FOREACH field = chfields.sort('desc') %]
<option value="[% field.value FILTER html %]"
[% " selected" IF lsearch(default.chfield, field.value) != -1 %]>
[% field.desc FILTER html %]</option>
[% END %]
</select>
</dd>
<dd>[% html_select('chfield', default.chfield, chfield, '', { multiple => 'multiple' }) %]</dd>
<dt>and <label for="chfieldvalue">the new value was</label>:</dt>
<dd>
<input name="chfieldvalue" id="chfieldvalue"

View File

@ -75,7 +75,7 @@
and remember these as my default search options
</label>
</p>
[% IF userdefaultquery %]
<p>
<a href="query.cgi?nukedefaultquery=1">