Commit 77109237 authored by Ruslan Zakirov's avatar Ruslan Zakirov
Browse files

$tmpl->UsedBy, $scrips->LimitByTemplate methods and UsedBy ColumnMap

$scrips->LimitByTemplate - limits to scrips that
really use particular template, accounts that global
templates can be overriden.

$tmpl->UsedBy - sugar for above from template side.

UsedBy column map for templates that shows links to
scrips.
parent b32bdda8
......@@ -147,6 +147,85 @@ sub LimitByStage {
);
}
=head2 LimitByTemplate
Takes a L<RT::Template> object and limits scrips to those that
use the template.
=cut
sub LimitByTemplate {
my $self = shift;
my $template = shift;
$self->Limit( FIELD => 'Template', VALUE => $template->Name );
if ( $template->Queue ) {
# if template is local then we are interested in global and
# queue specific scrips
$self->LimitToQueue( $template->Queue );
$self->LimitToGlobal;
}
else { # template is global
# if every queue has a custom version then there
# is no scrip that uses the template
{
my $queues = RT::Queues->new( RT->SystemUser );
my $alias = $queues->Join(
TYPE => 'LEFT',
ALIAS1 => 'main',
FIELD1 => 'id',
TABLE2 => 'Templates',
FIELD2 => 'Queue',
);
$queues->Limit(
LEFTJOIN => $alias,
ALIAS => $alias,
FIELD => 'Name',
VALUE => $template->Name,
);
$queues->Limit(
ALIAS => $alias,
FIELD => 'id',
OPERATOR => 'IS',
VALUE => 'NULL',
);
return $self->Limit( FIELD => 'id', VALUE => 0 )
unless $queues->Count;
}
# otherwise it's either a global scrip or application to
# a queue with custom version of the template.
my $os_alias = RT::ObjectScrips->new( $self->CurrentUser )
->JoinTargetToThis( $self );
my $tmpl_alias = $self->Join(
TYPE => 'LEFT',
ALIAS1 => $os_alias,
FIELD1 => 'ObjectId',
TABLE2 => 'Templates',
FIELD2 => 'Queue',
);
$self->Limit(
LEFTJOIN => $tmpl_alias, ALIAS => $tmpl_alias, FIELD => 'Name', VALUE => $template->Name,
);
$self->Limit(
LEFTJOIN => $tmpl_alias, ALIAS => $tmpl_alias, FIELD => 'Queue', OPERATOR => '!=', VALUE => 0,
);
$self->_OpenParen('UsedBy');
$self->Limit( SUBCLAUSE => 'UsedBy', ALIAS => $os_alias, FIELD => 'ObjectId', VALUE => 0 );
$self->Limit(
SUBCLAUSE => 'UsedBy',
ALIAS => $tmpl_alias,
FIELD => 'id',
OPERATOR => 'IS',
VALUE => 'NULL',
);
$self->_CloseParen('UsedBy');
}
}
sub ApplySortOrder {
my $self = shift;
my $order = shift || 'ASC';
......
......@@ -314,6 +314,21 @@ sub Delete {
return ( $self->SUPER::Delete(@_) );
}
=head2 UsedBy
Returns L<RT::Scrips> limitted to scrips that use this template. Takes
into account that template can be overriden in a queue.
=cut
sub UsedBy {
my $self = shift;
my $scrips = RT::Scrips->new( $self->CurrentUser );
$scrips->LimitByTemplate( $self );
return $scrips;
}
=head2 IsEmpty
Returns true value if content of the template is empty, otherwise
......
......@@ -82,6 +82,20 @@ my $COLUMN_MAP = {
title => 'Empty', # loc
value => sub { $_[0]->IsEmpty? $_[0]->loc('Yes') : $_[0]->loc('No') },
},
UsedBy => {
title => 'Used by scrips', # loc
value => sub {
my @res;
my $scrips = $_[0]->UsedBy;
while ( my $scrip = $scrips->Next ) {
push @res, ', ' if @res;
push @res, \'<a href="', RT->Config->Get('WebPath'), '/Admin/Scrips/Modify.html';
push @res, '?id='. $scrip->id;
push @res, \'" title="', $scrip->Description, \'">', $scrip->id, \'</a>';
}
return @res;
},
},
};
</%ONCE>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment