Rev 1295 | Blame | Compare with Previous | Last modification | View Log | RSS feed
################################################################################ Codestriker: Copyright (c) 2001, 2002 David Sitsky. All rights reserved.# sits@users.sourceforge.net## This program is free software; you can redistribute it and modify it under# the terms of the GPL.# Action object for displaying a list of topics.package Codestriker::Action::ListTopicsRSS;use strict;use Codestriker::Http::Template;use Codestriker::Model::Topic;use XML::RSS;# If the input is valid, list the appropriate topics.sub process($$$) {my ($type, $http_input, $http_response) = @_;my $query = $http_response->get_query();# Check if this action is allowed.if ($Codestriker::allow_searchlist == 0) {$http_response->error("This function has been disabled");}# Query the model for the specified data.my $mode = $http_input->get('mode');my ( $sauthor, $sreviewer, $scc, $sbugid,$sstate, $sproject, $stext,$stitle, $sdescription,$scomments, $sbody, $sfilename,$sort_order) = Codestriker::Action::ListTopics::get_topic_list_query_params($http_input);# Query the model for the specified data.my @topics = Codestriker::Model::Topic->query($sauthor, $sreviewer, $scc, $sbugid,$sstate, $sproject, $stext,$stitle, $sdescription,$scomments, $sbody, $sfilename,$sort_order);# Display the data, with each topic title linked to the view topic screen.# If only a single project id is being searched over, set that id in the# cookie.my @project_ids = ();if ($sproject ne "") {@project_ids = split ',', $sproject;}# Print the header. Should really be application/rss+xml, except when# people click on the link they get a pop-up asking for an application# that knows how to show application/rss+xml. Very confusing, so we# will just say it is xml, (which it is of coarse). The link tag in# the template lists it as application/rss+xml.print $query->header(-type=>'application/xml');# Obtain a new URL builder object.my $url_builder = Codestriker::Http::UrlBuilder->new($query);my $rss = new XML::RSS(version => '2.0');my $this_url =$url_builder->list_topics_url_rss($sauthor, $sreviewer, $scc, $sbugid,$stext, $stitle,$sdescription, $scomments,$sbody, $sfilename,[ split ',', $sstate] , \@project_ids);$rss->channel(title=>$Codestriker::title, language=>"en",link=>$this_url);# For each topic, collect all the reviewers, CC, and bugs, and display it# as a row in the table. Each bug should be linked appropriately.foreach my $topic (@topics) {# do the easy stuff first, 1 to 1 mapping into the template.my $link =$url_builder->view_url($topic->{topicid}, -1, $mode,$Codestriker::default_topic_br_mode);my $comment_link = $url_builder->view_comments_url($topic->{topicid});my $description = $topic->{description};my $title = $topic->{title};# Change to 1 to send out the list of files changes in the RSS description.if (0) {my (@filenames, @revisions, @offsets, @binary);$topic->get_filestable(\@filenames,\@revisions,\@offsets,\@binary);$description .= "<p>" . join( "\n",@filenames);}my @comments = $topic->read_comments();$description .= "<p>Comments: " . scalar( @comments ) . ", ";$description .= "State: " . $topic->{topic_state} . ", ";$description .= "Author: " . Codestriker->filter_email($topic->{author});$rss->add_item(title=>$title,permaLink=>$link,description=>$description,author=> Codestriker->filter_email($topic->{author}),pubDate=>Codestriker->format_short_timestamp($topic->{creation_ts}),category=>$topic->{project_name},comments=>$comment_link);}print $rss->as_string();}1;