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 handling the viewing of a topic's properties.package Codestriker::Action::ViewTopicProperties;use strict;use Codestriker::Model::Topic;use Codestriker::Model::Comment;use Codestriker::Http::UrlBuilder;use Codestriker::Http::Render;use Codestriker::Repository::RepositoryFactory;use HTML::Entities ();# If the input is valid, display the topic.sub process($$$) {my ($type, $http_input, $http_response) = @_;my $query = $http_response->get_query();my $topicid = $http_input->get('topic');my $mode = $http_input->get('mode');my $tabwidth = $http_input->get('tabwidth');my $email = $http_input->get('email');my $feedback = $http_input->get('feedback');if (Codestriker::Model::Topic::exists($topicid) == 0) {# Topic no longer exists, most likely its been deleted.$http_response->error("Topic no longer exists.");}# Retrieve the appropriate topic details.my $topic = Codestriker::Model::Topic->new($topicid);# Retrieve the comment details for this topic.my @topic_comments = $topic->read_comments();$http_response->generate_header(topic=>$topic,topic_title=>"Topic Properties: $topic->{title}",mode=>$mode, tabwidth=>$tabwidth,reload=>0, cache=>1);# Retrieve the repository object, if repository functionality is enabled.my $repository;if (scalar(@Codestriker::valid_repositories)) {$repository =Codestriker::Repository::RepositoryFactory->get($topic->{repository});} else {# Indicate not to activate any repository-related links.$topic->{repository} = "";}# Create the hash for the template variables.my $vars = {};$vars->{'feedback'} = $feedback;# Obtain a new URL builder object.my $url_builder = Codestriker::Http::UrlBuilder->new($query);Codestriker::Action::ViewTopic::ProcessTopicHeader($vars, $topic,$url_builder);my @projectids = ($topic->{project_id});$vars->{'view_topic_url'} =$url_builder->view_url($topicid, -1, $mode);$vars->{'view_topicinfo_url'} = $url_builder->view_topicinfo_url($topicid);$vars->{'view_comments_url'} = $url_builder->view_comments_url($topicid);$vars->{'list_projects_url'} = $url_builder->list_projects_url();# Display the "update" message if the topic state has been changed.$vars->{'updated'} = $http_input->get('updated');$vars->{'rc_ok'} = $Codestriker::OK;$vars->{'rc_stale_version'} = $Codestriker::STALE_VERSION;$vars->{'rc_invalid_topic'} = $Codestriker::INVALID_TOPIC;# Store the bug id information, and any linking URLs.$vars->{'bug_db'} = $Codestriker::bug_db;$vars->{'bug_ids'} = $topic->{bug_ids};if (defined $topic->{bug_ids} && $topic->{bug_ids} ne "" &&defined $Codestriker::bugtracker) {my @bug_id_array = split /[\s,]+/, $topic->{bug_ids};$vars->{'bug_id_array'} = \@bug_id_array;$vars->{'bugtracker'} = $Codestriker::bugtracker;}$vars->{'document_reviewers'} =Codestriker->filter_email($topic->{reviewers});# Indicate what repositories are available, and what the topic's# repository is.$vars->{'topic_repository'} = $Codestriker::repository_name_map->{$topic->{repository}};$vars->{'repositories'} = \@Codestriker::valid_repository_names;# Indicate what projects are available, and what the topic's project is.my @projects = Codestriker::Model::Project->list();$vars->{'projects'} = \@projects;$vars->{'project_states'} = \@Codestriker::project_states;$vars->{'projects_enabled'} = Codestriker->projects_disabled() ? 0 : 1;$vars->{'topic_projectid'} = $topic->{project_id};$vars->{'number_of_lines'} = $topic->get_topic_size_in_lines();$vars->{'suggested_topic_size_lines'} =$Codestriker::suggested_topic_size_lines eq "" ? 0 :$Codestriker::suggested_topic_size_lines;# Prepare the data for displaying the state update option.# Make sure the old mode setting is no longer used.if ((! defined $mode) || $mode == $Codestriker::NORMAL_MODE) {$mode = $Codestriker::COLOURED_MODE;}$vars->{'mode'} = $mode;$vars->{'topicid'} = $topic->{topicid};$vars->{'topic_version'} = $topic->{version};$vars->{'states'} = \@Codestriker::topic_states;$vars->{'default_state'} = $topic->{topic_state};$vars->{'description'} = $topic->{description};$vars->{'start_tag'} = $topic->{start_tag};$vars->{'end_tag'} = $topic->{end_tag};$vars->{'module'} = $topic->{module};my $template = Codestriker::Http::Template->new("viewtopicproperties");$template->process($vars);$http_response->generate_footer();# Fire the topic listener to indicate that the user has viewed the topic.Codestriker::TopicListeners::Manager::topic_viewed($email, $topic);}1;