summaryrefslogtreecommitdiff
path: root/rt/share/html/Search/Elements/ResultsRSSView
diff options
context:
space:
mode:
Diffstat (limited to 'rt/share/html/Search/Elements/ResultsRSSView')
-rw-r--r--rt/share/html/Search/Elements/ResultsRSSView122
1 files changed, 49 insertions, 73 deletions
diff --git a/rt/share/html/Search/Elements/ResultsRSSView b/rt/share/html/Search/Elements/ResultsRSSView
index 0bce7ec..f392369 100644
--- a/rt/share/html/Search/Elements/ResultsRSSView
+++ b/rt/share/html/Search/Elements/ResultsRSSView
@@ -46,41 +46,7 @@
%#
%# END BPS TAGGED BLOCK }}}
<%INIT>
-my $current_user = $session{CurrentUser};
-
-if ( $m->request_comp->path =~ RT->Config->Get('WebNoAuthRegex') ) {
- my $path = $m->dhandler_arg;
-
- my $notfound = sub {
- my $mesg = shift;
- $r->headers_out->{'Status'} = '404 Not Found';
- $RT::Logger->info("Error encountered in rss generation: $mesg");
- $m->clear_and_abort;
- };
-
- $notfound->("Invalid path: $path") unless $path =~ m!^([^/]+)/([^/]+)/?!;
-
- my ( $name, $auth ) = ( $1, $2 );
-
- # Unescape parts
- $name =~ s/\%([0-9a-z]{2})/chr(hex($1))/gei;
-
- # Decode from bytes to characters
- $name = Encode::decode( "UTF-8", $name );
-
- my $user = RT::User->new(RT->SystemUser);
- $user->Load($name);
- $notfound->("Invalid user: $user") unless $user->id;
-
- $notfound->("Invalid authstring")
- unless $user->ValidateAuthString( $auth,
- $ARGS{Query} . $ARGS{Order} . $ARGS{OrderBy} );
-
- $current_user = RT::CurrentUser->new;
- $current_user->Load($user);
-}
-
-my $Tickets = RT::Tickets->new($current_user);
+my $Tickets = RT::Tickets->new($session{'CurrentUser'});
$Tickets->FromSQL($ARGS{'Query'});
if ($OrderBy =~ /\|/) {
# Multiple Sorts
@@ -92,48 +58,58 @@ if ($OrderBy =~ /\|/) {
} else {
$Tickets->OrderBy(FIELD => $OrderBy, ORDER => $Order);
}
-$r->content_type('application/rss+xml');
-
-
+$r->content_type('application/rss+xml; charset=utf-8');
- # create an RSS 1.0 file (http://purl.org/rss/1.0/)
- use XML::RSS;
- my $rss = XML::RSS->new(version => '1.0');
- $rss->channel(
- title => RT->Config->Get('rtname').": Search " . $ARGS{'Query'},
- link => RT->Config->Get('WebURL'),
- description => "",
- dc => {
- },
- generator => "RT v" . $RT::VERSION,
- syn => {
- updatePeriod => "hourly",
- updateFrequency => "1",
- updateBase => "1901-01-01T00:00+00:00",
- },
- );
+use XML::RSS;
+my $rss = XML::RSS->new(version => '1.0');
+my $url;
+if ( RT->Config->Get('CanonicalizeURLsInFeeds') ) {
+ $url = RT->Config->Get('WebURL');
+} else {
+ $url = RT::Interface::Web::GetWebURLFromRequest();
+}
- while ( my $Ticket = $Tickets->Next()) {
- my $creator_str = $m->scomp('/Elements/ShowUser', User => $Ticket->CreatorObj);
- $creator_str =~ s/[\r\n]//g;
-
- # Get the plain-text content; it is interpreted as HTML by RSS
- # readers, so it must be escaped (and is escaped _again_ when
- # inserted into the XML).
- my $content = $Ticket->Transactions->First->Content;
- $content = $m->interp->apply_escapes( $content, 'h');
- $rss->add_item(
- title => $Ticket->Subject || loc('No Subject'),
- link => RT->Config->Get('WebURL')."Ticket/Display.html?id=".$Ticket->id,
- description => $content,
- dc => { creator => $creator_str,
- date => $Ticket->CreatedObj->RFC2822,
- },
- guid => $Ticket->Queue . '_' . $Ticket->id,
- );
- }
+my $base_date = RT::Date->new( RT->SystemUser );
+$base_date->SetToNow;
+$base_date->SetToMidnight;
+
+$rss->channel(
+ title => RT->Config->Get('rtname').": Search " . $ARGS{'Query'},
+ link => $url,
+ description => "",
+ dc => { },
+ generator => "RT v" . $RT::VERSION,
+ syn => {
+ updatePeriod => "hourly",
+ updateFrequency => "1",
+ updateBase => $base_date->W3CDTF,
+ },
+);
+
+
+while ( my $Ticket = $Tickets->Next()) {
+ my $creator_str = $Ticket->CreatorObj->Format;
+ $creator_str =~ s/[\r\n]//g;
+
+ # Get the plain-text content; it is interpreted as HTML by RSS
+ # readers, so it must be escaped (and is escaped _again_ when
+ # inserted into the XML).
+ my $content = $Ticket->Transactions->First->Content;
+ $content = $m->interp->apply_escapes( $content, 'h');
+
+ $rss->add_item(
+ title => $Ticket->Subject || loc('No Subject'),
+ link => $url . "Ticket/Display.html?id=".$Ticket->id,
+ description => $content,
+ dc => {
+ creator => $creator_str,
+ date => $Ticket->CreatedObj->W3CDTF,
+ },
+ guid => $Ticket->Queue . '_' . $Ticket->id,
+ );
+}
$m->out($rss->as_string);
$m->abort();