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

Reply via email to