X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FSearch%2FElements%2FResultsRSSView;h=6edbda684118d8beacfc005ccc31af8b8a82da4f;hb=44dd00a3ff974a17999e86e64488e996edc71e3c;hp=0bce7ec45c627c99e243cd008e63f587a2e190e7;hpb=919e930aa9279b3c5cd12b593889cd6de79d67bf;p=freeside.git diff --git a/rt/share/html/Search/Elements/ResultsRSSView b/rt/share/html/Search/Elements/ResultsRSSView index 0bce7ec45..6edbda684 100644 --- a/rt/share/html/Search/Elements/ResultsRSSView +++ b/rt/share/html/Search/Elements/ResultsRSSView @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2019 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -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();