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 the create topic form.package Codestriker::Action::CreateTopic;use strict;use Codestriker::Http::Cookie;use Codestriker::Model::Project;# Create an appropriate form for creating a new topic.sub process($$$) {my ($type, $http_input, $http_response) = @_;my $query = $http_response->get_query();my $obsoletes = $http_input->get('obsoletes');$http_response->generate_header(topic_title=>"Create New Topic",reload=>0, cache=>1);# Obtain a URL builder object.my $url_builder = Codestriker::Http::UrlBuilder->new($query);# Create the hash for the template variables.my $vars = {};$vars->{'error_message'} = "";$vars->{'topic_text'} = "";$vars->{'topic_file'} = "";$vars->{'topic_description'} = "";$vars->{'topic_title'} = $http_input->get('topic_title');$vars->{'bug_ids'} = $http_input->get('bug_ids');$vars->{'feedback'} = $http_input->get('feedback');$vars->{'default_to_head'} = "";# Indicate where the documentation directory and generate the search# url.$vars->{'doc_url'} = $url_builder->doc_url();$vars->{'search_url'} = $url_builder->search_url();# Retrieve the email, reviewers, cc, repository and projectid from# the cookie.$vars->{'email'} =Codestriker::Http::Cookie->get_property($query, 'email');$vars->{'reviewers'} =Codestriker::Http::Cookie->get_property($query, 'reviewers');$vars->{'cc'} =Codestriker::Http::Cookie->get_property($query, 'cc');$vars->{'default_repository'} =Codestriker::Http::Cookie->get_property($query, 'repository');$vars->{'default_projectid'} =Codestriker::Http::Cookie->get_property($query, 'projectid');# Set the default repository to select.if (! (defined $vars->{'default_repository'}) ||$vars->{'default_repository'} eq "") {if ($#Codestriker::valid_repository_names != -1) {# Choose the first repository as the default selection.$vars->{'default_repository'} =$Codestriker::valid_repository_names[0];}}# Indicate the list of valid repositories which can be choosen.$vars->{'repositories'} = \@Codestriker::valid_repository_names;# Read the list of projects available to make that choice available# when a topic is created.my @projects = Codestriker::Model::Project->list('Open');$vars->{'projects'} = \@projects;# If this create topic action obsoletes some topics, then get their# details now. For now, don't check if a topic is stale with the# version parameter.$vars->{'obsoletes'} = $obsoletes;if ($type->set_obsoleted_topics_parameter($vars, $url_builder) == -1) {$http_response->error("Obsoleted topic no longer exists.");}my $template = Codestriker::Http::Template->new("createtopic");$template->process($vars);$http_response->generate_footer();}# Set the obsoleted_topics parameter correctly into $vars. Return -1 if# there was a failure.sub set_obsoleted_topics_parameter {my ($type, $vars, $url_builder) = @_;my $obsoletes = $vars->{'obsoletes'};my @obsoleted_topics = ();if (defined $obsoletes and $obsoletes ne '') {my @topics = split ',', $obsoletes;for (my $i = 0; $i <= $#topics; $i+=2) {my $topicid = $topics[$i];if (Codestriker::Model::Topic::exists($topicid) == 0) {return -1;}my $topic = Codestriker::Model::Topic->new($topicid);my $obsoleted_topic = {};$obsoleted_topic->{title} = $topic->{title};$obsoleted_topic->{view_url} =$url_builder->view_url($topicid, -1);push @obsoleted_topics, $obsoleted_topic;}}$vars->{'obsoleted_topics'} = \@obsoleted_topics;return 0;}1;