Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
bugzilla
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
etersoft
bugzilla
Commits
65d75763
Commit
65d75763
authored
Oct 29, 2009
by
mkanat%bugzilla.org
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 524234: When there are no search results, include helpful links
Patch by Max Kanat-Alexander <mkanat@bugzilla.org> r=dkl, a=mkanat
parent
c51e34ce
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
83 additions
and
33 deletions
+83
-33
User.pm
Bugzilla/User.pm
+15
-8
buglist.cgi
buglist.cgi
+29
-16
buglist.css
skins/standard/buglist.css
+5
-0
list.html.tmpl
template/en/default/list/list.html.tmpl
+34
-9
No files found.
Bugzilla/User.pm
View file @
65d75763
...
...
@@ -712,17 +712,19 @@ sub get_selectable_classifications {
}
sub
can_enter_product
{
my
(
$self
,
$
product_name
,
$warn
)
=
@_
;
my
(
$self
,
$
input
,
$warn
)
=
@_
;
my
$dbh
=
Bugzilla
->
dbh
;
if
(
!
defined
(
$product_name
)
)
{
if
(
!
defined
$input
)
{
return
unless
$warn
==
THROW_ERROR
;
ThrowUserError
(
'no_products'
);
}
my
$product
=
new
Bugzilla::
Product
({
name
=>
$product_name
});
my
$product
=
blessed
(
$input
)
?
$input
:
new
Bugzilla::
Product
({
name
=>
$input
});
my
$can_enter
=
$product
&&
grep
(
$_
->
name
eq
$product
->
name
,
@
{
$self
->
get_enterable_products
});
$product
&&
grep
(
$_
->
name
eq
$product
->
name
,
@
{
$self
->
get_enterable_products
});
return
1
if
$can_enter
;
...
...
@@ -731,21 +733,26 @@ sub can_enter_product {
# Check why access was denied. These checks are slow,
# but that's fine, because they only happen if we fail.
# We don't just use $product->name for error messages, because if it
# changes case from $input, then that's a clue that the product does
# exist but is hidden.
my
$name
=
blessed
(
$input
)
?
$input
->
name
:
$input
;
# The product could not exist or you could be denied...
if
(
!
$product
||
!
$product
->
user_has_access
(
$self
))
{
ThrowUserError
(
'entry_access_denied'
,
{
product
=>
$product_name
});
ThrowUserError
(
'entry_access_denied'
,
{
product
=>
$name
});
}
# It could be closed for bug entry...
elsif
(
!
$product
->
is_active
)
{
ThrowUserError
(
'product_disabled'
,
{
product
=>
$product
});
ThrowUserError
(
'product_disabled'
,
{
product
=>
$product
});
}
# It could have no components...
elsif
(
!
@
{
$product
->
components
})
{
ThrowUserError
(
'missing_component'
,
{
product
=>
$product
});
ThrowUserError
(
'missing_component'
,
{
product
=>
$product
});
}
# It could have no versions...
elsif
(
!
@
{
$product
->
versions
})
{
ThrowUserError
(
'missing_version'
,
{
product
=>
$product
});
ThrowUserError
(
'missing_version'
,
{
product
=>
$product
});
}
die
"can_enter_product reached an unreachable location."
;
...
...
buglist.cgi
View file @
65d75763
...
...
@@ -691,12 +691,7 @@ if (grep('relevance', @displaycolumns) && !$fulltext) {
# Severity, priority, resolution and status are required for buglist
# CSS classes.
my
@selectcolumns
=
(
"bug_id"
,
"bug_severity"
,
"priority"
,
"bug_status"
,
"resolution"
);
# if using classification, we also need to look in product.classification_id
if
(
Bugzilla
->
params
->
{
"useclassification"
})
{
push
(
@selectcolumns
,
"product"
);
}
"resolution"
,
"product"
);
# remaining and actual_time are required for percentage_complete calculation:
if
(
lsearch
(
\
@displaycolumns
,
"percentage_complete"
)
>=
0
)
{
...
...
@@ -721,11 +716,10 @@ foreach my $col (@displaycolumns) {
push
(
@selectcolumns
,
$col
)
if
!
grep
(
$_
eq
$col
,
@selectcolumns
);
}
# If the user is editing multiple bugs, we also make sure to select the
product
#
and status because the values of those fields determine
what options the user
# If the user is editing multiple bugs, we also make sure to select the
#
status, because the values of that field determines
what options the user
# has for modifying the bugs.
if
(
$dotweak
)
{
push
(
@selectcolumns
,
"product"
)
if
!
grep
(
$_
eq
'product'
,
@selectcolumns
);
push
(
@selectcolumns
,
"bug_status"
)
if
!
grep
(
$_
eq
'bug_status'
,
@selectcolumns
);
}
...
...
@@ -1092,6 +1086,25 @@ $vars->{'splitheader'} = $cgi->cookie('SPLITHEADER') ? 1 : 0;
$vars
->
{
'quip'
}
=
GetQuip
();
$vars
->
{
'currenttime'
}
=
localtime
(
time
());
# See if there's only one product in all the results (or only one product
# that we searched for), which allows us to provide more helpful links.
my
@products
=
keys
%
$bugproducts
;
my
$one_product
;
if
(
scalar
(
@products
)
==
1
)
{
$one_product
=
new
Bugzilla::
Product
({
name
=>
$products
[
0
]
});
}
# This is used in the "Zarroo Boogs" case.
elsif
(
my
@product_input
=
$cgi
->
param
(
'product'
))
{
if
(
scalar
(
@product_input
)
==
1
and
$product_input
[
0
]
ne
''
)
{
$one_product
=
new
Bugzilla::
Product
({
name
=>
$cgi
->
param
(
'product'
)
});
}
}
# We only want the template to use it if the user can actually
# enter bugs against it.
if
(
Bugzilla
->
user
->
can_enter_product
(
$one_product
))
{
$vars
->
{
'one_product'
}
=
$one_product
;
}
# The following variables are used when the user is making changes to multiple bugs.
if
(
$dotweak
&&
scalar
@bugs
)
{
if
(
!
$vars
->
{
'caneditbugs'
})
{
...
...
@@ -1143,19 +1156,19 @@ if ($dotweak && scalar @bugs) {
$vars
->
{
'new_bug_statuses'
}
=
Bugzilla::
Status
->
new_from_list
(
$bug_status_ids
);
# The groups the user belongs to and which are editable for the given buglist.
my
@products
=
keys
%
$bugproducts
;
$vars
->
{
'groups'
}
=
GetGroups
(
\
@products
);
# If all bugs being changed are in the same product, the user can change
# their version and component, so generate a list of products, a list of
# versions for the product (if there is only one product on the list of
# products), and a list of components for the product.
if
(
scalar
(
@products
)
==
1
)
{
my
$product
=
new
Bugzilla::
Product
({
name
=>
$products
[
0
]});
$vars
->
{
'versions'
}
=
[
map
(
$_
->
name
,
@
{
$product
->
versions
})];
$vars
->
{
'components'
}
=
[
map
(
$_
->
name
,
@
{
$product
->
components
})];
$vars
->
{
'targetmilestones'
}
=
[
map
(
$_
->
name
,
@
{
$product
->
milestones
})]
if
Bugzilla
->
params
->
{
'usetargetmilestone'
};
if
(
$one_product
)
{
$vars
->
{
'versions'
}
=
[
map
(
$_
->
name
,
@
{
$one_product
->
versions
})];
$vars
->
{
'components'
}
=
[
map
(
$_
->
name
,
@
{
$one_product
->
components
})];
if
(
Bugzilla
->
params
->
{
'usetargetmilestone'
})
{
$vars
->
{
'targetmilestones'
}
=
[
map
(
$_
->
name
,
@
{
$one_product
->
milestones
})];
}
}
}
...
...
skins/standard/buglist.css
View file @
65d75763
...
...
@@ -28,6 +28,11 @@
margin-right
:
2em
;
}
.zero_results
,
.zero_result_links
{
font-size
:
120%
;
font-weight
:
bold
;
}
.bz_id_column
{
}
...
...
template/en/default/list/list.html.tmpl
View file @
65d75763
...
...
@@ -142,7 +142,7 @@
<span class="bz_result_count">
[% IF bugs.size == 0 %]
[% terms.zeroSearchResults %].
<span class="zero_results">[% terms.zeroSearchResults %].</span>
[% ELSIF bugs.size == 1 %]
One [% terms.bug %] found.
[% ELSE %]
...
...
@@ -150,6 +150,18 @@
[% END %]
</span>
[% IF bugs.size == 0 %]
<ul class="zero_result_links">
<li>[% PROCESS enter_bug_link %]</li>
[% IF one_product.defined %]
<li><a href="enter_bug.cgi">File a new [% terms.bug %] in a
different product</a></li>
[% END %]
<li><a href="[% PROCESS edit_search_url %]">Edit this search</a></li>
<li><a href="query.cgi">Start a new search</a></li>
</ul>
[% END %]
<br>
[%############################################################################%]
...
...
@@ -226,11 +238,7 @@
[% END %]
<td valign="middle" class="bz_query_edit">
[% editqueryname = searchname OR defaultsavename OR '' %]
<a href="query.cgi?[% urlquerypart FILTER html %]
[% IF editqueryname != '' %]&known_name=
[% editqueryname FILTER url_quote %]
[% END %]">Edit Search</a>
<a href="[% PROCESS edit_search_url %]">Edit Search</a>
</td>
[% IF searchtype == "saved" %]
...
...
@@ -259,10 +267,9 @@
</tr>
</table>
[% IF
cgi.param('product').size == 1 && cgi.param('product') != ""
%]
[% IF
one_product.defined
%]
<p class="bz_query_single_product">
<a href="enter_bug.cgi?product=[% cgi.param('product') FILTER url_quote %]">File
a new [% terms.bug %] in the "[% cgi.param('product') FILTER html %]" product</a>
[% PROCESS enter_bug_link %]
</p>
[% END %]
...
...
@@ -271,3 +278,21 @@
[%############################################################################%]
[% PROCESS global/footer.html.tmpl %]
[% BLOCK edit_search_url %]
[% editqueryname = searchname OR defaultsavename OR '' %]
query.cgi?[% urlquerypart FILTER html %]
[%- IF editqueryname != '' %]&known_name=
[%- editqueryname FILTER url_quote %]
[% END %]
[% END %]
[% BLOCK enter_bug_link %]
<a href="enter_bug.cgi
[%- IF one_product.defined %]?product=
[%- one_product.name FILTER url_quote %][% END %]">File
a new [% terms.bug %]
[% IF one_product.defined %]
in the "[% one_product.name FILTER html %]" product
[% END %]</a>
[% END %]
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment