📄 submitnewtopic.pm
字号:
################################################################################ 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 submission of a new topic.package Codestriker::Action::SubmitNewTopic;use strict;use File::Temp qw/ tempfile /;use FileHandle;use Codestriker::Model::Topic;use Codestriker::Repository::RepositoryFactory;use Codestriker::Repository::ScmBug;use Codestriker::FileParser::Parser;use Codestriker::Model::Project;use Codestriker::TopicListeners::Manager;# If the input is valid, create the appropriate topic into the database.sub process($$$) { my ($type, $http_input, $http_response) = @_; my $query = $http_response->get_query(); # Check that the appropriate fields have been filled in. my $topic_title = $http_input->get('topic_title'); my $topic_description = $http_input->get('topic_description'); my $reviewers = $http_input->get('reviewers'); my $email = $http_input->get('email'); my $cc = $http_input->get('cc'); my $fh = $http_input->get('fh'); my $topic_file = $http_input->get('fh_filename'); my $fh_mime_type = $http_input->get('fh_mime_type'); my $bug_ids = $http_input->get('bug_ids'); my $repository_name = $http_input->get('repository'); my $projectid = $http_input->get('projectid'); my $project_name = $http_input->get('project_name'); my $start_tag = $http_input->get('start_tag'); my $end_tag = $http_input->get('end_tag'); my $module = $http_input->get('module'); my $obsoletes = $http_input->get('obsoletes'); my $default_to_head = $http_input->get('default_to_head'); my $topic_state = $http_input->get('topic_state'); my $email_event = $http_input->get('email_event'); my $feedback = ""; my $topic_text = ""; my $url_builder = Codestriker::Http::UrlBuilder->new($query); # Indicate whether the topic text needs to be retrieved by the repository # object. Need to handle the case where ScmBug is defined, but the user # is still uploading their topic text manually, and have specified a bug ID. my $retrieve_text_from_rep = 0; if ((($start_tag ne "" || $end_tag ne "") && $module ne "") || (defined $Codestriker::scmbug_hostname && $Codestriker::scmbug_hostname ne '' && $bug_ids ne '' && (! defined $fh))) { $retrieve_text_from_rep = 1; # Check if this action is permitted. if (scalar(@Codestriker::valid_repositories) == 0) { $feedback .= "Repository functionality has been disabled. " . "Can't create topic text usings tags.\n"; } } # Check if the state is valid. if (! grep /^$topic_state$/, @Codestriker::topic_states) { $http_response->error("Topic state $topic_state unrecognised"); } if ($topic_title eq "") { $feedback .= "No topic title was entered.\n"; } if ($topic_description eq "") { $feedback .= "No topic description was entered.\n"; } if ($email eq "") { $feedback .= "No email address was entered.\n"; } if (!defined $fh && $retrieve_text_from_rep == 0) { $feedback .= "No filename or module/tags were entered.\n"; } if ($reviewers eq "") { $feedback .= "No reviewers were entered.\n"; } if ($retrieve_text_from_rep && defined $fh) { $feedback .= "Topic text specified using tags and uploaded file.\n"; $feedback .= "Please choose one topic text method, and try again.\n"; } $http_response->generate_header(topic_title=>"Create New Topic", email=>$email, reviewers=>$reviewers, cc=>$cc, repository=>$repository_name, projectid=>$projectid, reload=>0, cache=>0); # Set the error_vars in case of any errors that will require forwarding # to the create topic screen again. my $error_vars = {}; $error_vars->{'version'} = $Codestriker::VERSION; $error_vars->{'feedback'} = $feedback; $error_vars->{'email'} = $email; $error_vars->{'reviewers'} = $reviewers; $error_vars->{'cc'} = $cc; $error_vars->{'topic_file'} = $topic_file; $error_vars->{'topic_description'} = $topic_description; $error_vars->{'topic_title'} = $topic_title; $error_vars->{'bug_ids'} = $bug_ids; $error_vars->{'states'} = \@Codestriker::topic_states; $error_vars->{'default_repository'} = $repository_name; $error_vars->{'repositories'} = \@Codestriker::valid_repository_names; $error_vars->{'start_tag'} = $start_tag; $error_vars->{'end_tag'} = $end_tag; $error_vars->{'module'} = $module; $error_vars->{'obsoletes'} = $obsoletes; $error_vars->{'default_to_head'} = $default_to_head; $error_vars->{'default_projectid'} = $projectid; my $repository = undef; my $repository_url = undef; if (scalar(@Codestriker::valid_repositories)) { # Set the repository to the default if it is not entered. if ($repository_name eq "" || scalar(@Codestriker::valid_repository_names) == 1) { $repository_name = $Codestriker::valid_repository_names[0]; } # Check if the repository argument is in fact a configured # repository. $repository_url = $Codestriker::repository_url_map->{$repository_name}; if (defined $repository_url) { $repository = Codestriker::Repository::RepositoryFactory->get($repository_url); } if (! defined $repository) { $feedback .= "The repository value set for \"$repository_name\" is invalid.\n" . "Please correct this value in your codestriker.conf file, " . "and try again.\n"; } } # Set the projectid to the first (default) if it is invalid. my @projects = Codestriker::Model::Project->list(); my $found_project = 0; foreach my $project (@projects) { if ((defined $projectid && $project->{id} == $projectid) || (defined $project_name && $project->{name} eq $project_name)) { $projectid = $project->{id}; $found_project = 1; last; } } if ($found_project == 0) { $projectid = $projects[0]->{id}; } # Make sure all the conditions from the topic listeners are satisified. $feedback .= Codestriker::TopicListeners::Manager::topic_pre_create ($email, $topic_title, $topic_description, $bug_ids, $reviewers, $cc, $repository_url, $projectid); # If there is a problem with the input, redirect to the create screen # with the message. if ($feedback ne "") { if (defined $fh) { $feedback .= "For security reasons, please re-enter the " . "file name to upload, if required.\n"; } _forward_create_topic($error_vars, $feedback, $url_builder); $http_response->generate_footer(); return; } my $topicid = Codestriker::Model::Topic::create_new_topicid(); # If the topic text needs to be retrieved from the repository object, # create a temporary file to store the topic text. my $temp_topic_fh; my $temp_error_fh; if ($retrieve_text_from_rep && defined $repository) { # Store the topic text into temporary files. if (defined $Codestriker::tmpdir && $Codestriker::tmpdir ne "") { $temp_topic_fh = tempfile(DIR => $Codestriker::tmpdir); $temp_error_fh = tempfile(DIR => $Codestriker::tmpdir); } else { $temp_topic_fh = tempfile();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -