Jesse Vincent wrote:
On Wed, Jan 31, 2007 at 10:04:39AM +1100, Taan Lindemans wrote:
Does anybody else think it would be useful if the Quick Search list
could be modified to include saved searches on a per user basis?
I think that this might want to be another portlet, but I'd love to see
it happen.
Attached is a basic solution to display summaries of Saved Searches in
the Quick Search list. Any Saved Searches added to your "RT at a glance
- Summary" preferences will be added to the bottom of the list. A new
title bar separates them from the queue summaries.
This was achieved by placing a butchered version of "QueueSummary" in
local/html/Elements
A modified MyRT is also included to turn off the actual Saved Search
Ticket list in the Summary section of the homepage.
This was modified on RT-3.6.0 but seems to work on 3.6.3, however none
of the changes to MyRT or ShowSearch (from where a lot of code was cut)
in 3.6.3 have been implemented.
It needs a lot of tidying up, and a new portlet would probably still be
more desirable.
Taan
%# BEGIN BPS TAGGED BLOCK {{{
%#
%# COPYRIGHT:
%#
%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
%# <[EMAIL PROTECTED]>
%#
%# (Except where explicitly superseded by other copyright notices)
%#
%#
%# LICENSE:
%#
%# This work is made available to you under the terms of Version 2 of
%# the GNU General Public License. A copy of that license should have
%# been provided with this software, but in any event can be snarfed
%# from www.gnu.org.
%#
%# This work is distributed in the hope that it will be useful, but
%# WITHOUT ANY WARRANTY; without even the implied warranty of
%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
%# General Public License for more details.
%#
%# You should have received a copy of the GNU General Public License
%# along with this program; if not, write to the Free Software
%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
%#
%#
%# CONTRIBUTION SUBMISSION POLICY:
%#
%# (The following paragraph is not intended to limit the rights granted
%# to you to modify and distribute this software under the terms of
%# the GNU General Public License and is only of importance to you if
%# you choose to contribute your changes and enhancements to the
%# community by submitting them to Best Practical Solutions, LLC.)
%#
%# By intentionally submitting any modifications, corrections or
%# derivatives to this work, or any other work intended for use with
%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
%# you are the copyright holder for those contributions and you grant
%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
%# royalty-free, perpetual, license to use, copy, create derivative
%# works based on those contributions, and sublicense and distribute
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
<table border="0" width="100%">
<tr valign="top">
<td width="70%" class="boxcontainer">
% for my $portlet (@{$portlets->{body}}) {
<% _show("body",$portlet) %>
<br />
% }
%#GAH!
</td>
<td class="boxcontainer">
% for my $portlet (@{$portlets->{summary}}) {
<% _show("summary",$portlet) %>
<br />
% }
</td>
</tr>
</table>
<%INIT>
my %allowed_components = map {$_ => 1} @{$RT::HomepageComponents};
unless (exists $session{'my_rt_portlets'}) {
my ($d_portlets) =
RT::System->new($session{'CurrentUser'})->Attributes->Named('HomepageSettings');
my $user = $session{'CurrentUser'}->UserObj;
$session{'my_rt_portlets'} = $user->Preferences('HomepageSettings',
$d_portlets->Content);
}
my $portlets = $session{'my_rt_portlets'};
sub _show {
my $disptype = shift;
my $entry = shift;
my $type = $entry->{type};
if ($type eq 'component') {
my $name = $entry->{name};
# security check etc.
$m->comp ($name);
}
elsif ($type eq 'system') {
$m->comp ('/Elements/ShowSearch', Name => $entry->{name});
}
elsif ($type eq 'saved') {
if ($disptype eq 'body') {
$m->comp ('/Elements/ShowSearch', SavedSearch => $entry->{name});
}
}
else {
$RT::Logger->error ("unknown portlet type $type");
}
}
</%INIT>
%# BEGIN BPS TAGGED BLOCK {{{
%#
%# COPYRIGHT:
%#
%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
%# <[EMAIL PROTECTED]>
%#
%# (Except where explicitly superseded by other copyright notices)
%#
%#
%# LICENSE:
%#
%# This work is made available to you under the terms of Version 2 of
%# the GNU General Public License. A copy of that license should have
%# been provided with this software, but in any event can be snarfed
%# from www.gnu.org.
%#
%# This work is distributed in the hope that it will be useful, but
%# WITHOUT ANY WARRANTY; without even the implied warranty of
%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
%# General Public License for more details.
%#
%# You should have received a copy of the GNU General Public License
%# along with this program; if not, write to the Free Software
%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
%#
%#
%# CONTRIBUTION SUBMISSION POLICY:
%#
%# (The following paragraph is not intended to limit the rights granted
%# to you to modify and distribute this software under the terms of
%# the GNU General Public License and is only of importance to you if
%# you choose to contribute your changes and enhancements to the
%# community by submitting them to Best Practical Solutions, LLC.)
%#
%# By intentionally submitting any modifications, corrections or
%# derivatives to this work, or any other work intended for use with
%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
%# you are the copyright holder for those contributions and you grant
%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
%# royalty-free, perpetual, license to use, copy, create derivative
%# works based on those contributions, and sublicense and distribute
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
<table border="0" cellspacing="0" cellpadding="1" width="100%">
<tr><th class="collection-as-table"><&|/l&>Queue</&></th>
% for my $condition (@$conditions) {
<th class="collection-as-table"><% $condition->{name} %></th>
% }
</tr>
% my $i;
% for my $queue (@queues) {
% $i++;
% my $queue_cond = "Queue = '$queue->{Name}' AND ";
% my $all_q = $queue_cond . "(Status = 'open' OR Status = 'new' OR Status =
'stalled')";
<tr class="<% $i%2 ? 'oddline' : 'evenline'%>" >
<td><a href="<% $RT::WebPath%>/Search/Results.html?Query=<%$all_q%>" title="<%
$queue->{Description} %>"><%$queue->{Name}%></a></td>
% for my $condition (@$conditions) {
% $Tickets->FromSQL($queue_cond.$condition->{cond}),
<td align="right"><a href="<%
$RT::WebPath%>/Search/Results.html?Query=<%$queue_cond.$condition->{cond}%>"><%
$Tickets->Count %></a></td>
% }
</tr>
% }
<tr><th class="collection-as-table"><&|/l&>Search</&></th>
% for my $condition (@$conditions) {
<th class="collection-as-table"><% $condition->{name} %></th>
% }
</tr>
% my $j;
% for my $portlet (@{$portlets->{summary}}) {
% my $OwnSearch = _list($portlet);
% my $search;
% my $user = $session{'CurrentUser'}->UserObj;
% my $SearchArg;
% my $customize;
% if ($OwnSearch) {
% my ($container_object, $search_id ) = _parse_saved_search ($OwnSearch);
% $search = $container_object->Attributes->WithId($search_id);
% unless ($search->Id && ref ($SearchArg = $search->Content) eq 'HASH') {
% $m->out ("Saved Search $OwnSearch not found");
% return;
% }
% $customize = $RT::WebPath.'/Search/Build.html?'.
% $m->comp('/Elements/QueryString',
% LoadSavedSearch => $OwnSearch);
% my $rows = $user->Preferences('SummaryRows', $RT::DefaultSummaryRows);
% $SearchArg->{'Query'} =~ s/__CurrentUser__/$session{'CurrentUser'}->Id/ge;
% $SearchArg->{'Format'} =~ s/__WebPath__/$RT::WebPath/g;
% $SearchArg->{'Format'} =~ s/__loc\(["']?(\w+)["']?\)__/loc("$1")/ge;
% my $QueryString = '?' . $m->comp('/Elements/QueryString',
% %$SearchArg);
% #map { $_ => $SearchArg->{$_} } qw(Query Order OrderBy));
% my $search_cond = "$SearchArg->{'Query'} AND" ;
% my $all_q = $search_cond . "(Status = 'open' OR Status = 'new' OR Status =
'stalled')";
% $j++;
<tr class="<% $j%2 ? 'oddline' : 'evenline'%>" >
<td><a href="<% $RT::WebPath%>/Search/Results.html?Query=<% $all_q %>"><%
loc($search->Description, $rows) %></
a></td>
% for my $condition (@$conditions){
% my $Tickets = RT::Tickets->new($session{'CurrentUser'});
% $Tickets->FromSQL( $search_cond.$condition->{cond} );
<td align="right"><a href="<%
$RT::WebPath%>/Search/Results.html?Query=<%$search_cond.$condition->{cond}%>"><%
$Tickets->Count %></a></td>
% }
</tr>
% }
% }
</table>
<%INIT>
my @queues;
if ($cache && exists $session{$cache}) {
@queues = @{$session{$cache}};
}
else {
my $Queues = RT::Queues->new($session{'CurrentUser'});
$Queues->UnLimit();
@queues = map {
{ Name => $_->Name, Description => $_->Description,
id => $_->Id } }
grep $queue_filter->($_), @{$Queues->ItemsArrayRef};
$session{$cache} = [EMAIL PROTECTED] if $cache;
}
my $Tickets = RT::Tickets->new($session{'CurrentUser'});
my %allowed_components = map {$_ => 1} @{$RT::HomepageComponents};
unless (exists $session{'my_rt_portlets'}) {
my ($d_portlets) =
RT::System->new($session{'CurrentUser'})->Attributes->Named('HomepageSettings');
my $user = $session{'CurrentUser'}->UserObj;
$session{'my_rt_portlets'} = $user->Preferences('HomepageSettings',
$d_portlets->Content);
}
my $portlets = $session{'my_rt_portlets'};
sub _list {
my $entry = shift;
my $type = $entry->{type};
if ($type eq 'saved') {
return (SavedSearch => $entry->{name}) ;
}
}
</%INIT>
<%ARGS>
$cache => undef
$queue_filter => undef
$conditions => ()
</%ARGS>
_______________________________________________
http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users
Community help: http://wiki.bestpractical.com
Commercial support: [EMAIL PROTECTED]
Discover RT's hidden secrets with RT Essentials from O'Reilly Media.
Buy a copy at http://rtbook.bestpractical.com