⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 submitnewtopic.pm

📁 codestriker is a develop useful tool to review code on web user interface.
💻 PM
📖 第 1 页 / 共 2 页
字号:
################################################################################ 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 + -