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 adding a comment to a topic line.package Codestriker::Action::EditComment;use strict;use Codestriker::Model::Topic;use Codestriker::Http::Render;# Create an appropriate form for adding a comment to a topic.sub process($$$) {my ($type, $http_input, $http_response) = @_;# Obtain a new URL builder object.my $query = $http_response->get_query();my $url_builder = Codestriker::Http::UrlBuilder->new($query);# Retrieve the appropriate input fields.my $line = $http_input->get('line');my $fn = $http_input->get('fn');my $new = $http_input->get('new');my $topicid = $http_input->get('topic');my $context = $http_input->get('context');my $email = $http_input->get('email');my $mode = $http_input->get('mode');my $tabwidth = $http_input->get('tabwidth');my $anchor = $http_input->get('a');my $fview = $http_input->get('fview');# Retrieve the appropriate topic details.my $topic = Codestriker::Model::Topic->new($topicid);# Retrieve the comment details for this topic.my @comments = $topic->read_comments();# Retrieve line-by-line versions of the description.my @document_description = split /\n/, $topic->{description};# Display the header of this page.$http_response->generate_header(topic=>$topic,topic_title=>"Edit Comment: $topic->{title}",email=>$email,mode=>$mode,tabwidth=>$tabwidth,repository=>$Codestriker::repository_name_map->{$topic->{repository}},reload=>0, cache=>0);# Create the hash for the template variables.my $vars = {};$vars->{'topic_title'} = $topic->{title};Codestriker::Action::ViewTopic::ProcessTopicHeader($vars, $topic,$url_builder, $fview,$tabwidth, 1, 0);my $view_topic_url = $url_builder->view_url($topicid, $line, $mode);my $view_comments_url = $url_builder->view_comments_url($topicid);$vars->{'view_topic_url'} = $view_topic_url;$vars->{'view_comments_url'} = $view_comments_url;$vars->{'doc_url'} = $url_builder->doc_url();# Retrieve the context in question. Allow the user to increase it# or decrease it appropriately.my $inc_context = ($context <= 0) ? 1 : $context*2;my $dec_context = ($context <= 0) ? 0 : int($context/2);my $inc_context_url =$url_builder->edit_url($fn, $line, $new, $topicid,$inc_context, $anchor, "");my $dec_context_url =$url_builder->edit_url($fn, $line, $new, $topicid,$dec_context, $anchor, "");$vars->{'inc_context_url'} = $inc_context_url;$vars->{'dec_context_url'} = $dec_context_url;$vars->{'context'} = "";if ($line != -1) {# Retrieve the context for a comment made against a specific line.my $delta = Codestriker::Model::Delta->get_delta($topicid, $fn,$line, $new);$vars->{'context'} =$query->pre(Codestriker::Http::Render->get_context($line,$context, 1,$delta->{old_linenumber},$delta->{new_linenumber},$delta->{text},$new)) .$query->p . "\n";}# Display the comments which have been made for this line number# in chronological order.my @display_comments = ();for (my $i = 0; $i <= $#comments; $i++) {if ($comments[$i]{fileline} == $line &&$comments[$i]{filenumber} == $fn &&$comments[$i]{filenew} == $new) {my $display_comment = {};my $author = $comments[$i]{author};$display_comment->{author} = Codestriker->filter_email($author);$display_comment->{date} = $comments[$i]{date};$display_comment->{data} = $comments[$i]{data};$display_comment->{metrics} = $comments[$i]{metrics};$display_comment->{line} = "";$display_comment->{lineurl} = "";$display_comment->{linename} = "";$display_comment->{line} = "";$display_comment->{lineurl} = "";$display_comment->{linename} = "";push @display_comments, $display_comment;}}$vars->{'comments'} = \@display_comments;# Store the metrics associated with this comment, if any. Store the# metrics configuration, in addition to the current values set for this# comment state, if any.my @metrics = ();my $current_metrics_for_comment;if ($#display_comments > -1) {$current_metrics_for_comment = $display_comments[0]->{metrics};}foreach my $metric_config (@{ $Codestriker::comment_state_metrics }) {my $metric_data = {};$metric_data->{name} = $metric_config->{name};$metric_data->{values} = $metric_config->{values};$metric_data->{default_value} = $metric_config->{default_value};$metric_data->{current_value} =$current_metrics_for_comment->{$metric_config->{name}};push @metrics, $metric_data;}$vars->{'metrics'} = \@metrics;# Populate the form values.$vars->{'line'} = $line;$vars->{'topic'} = $topicid;$vars->{'mode'} = $mode;$vars->{'anchor'} = $anchor;$vars->{'email'} = $email;$vars->{'fn'} = $fn;$vars->{'new'} = $new;# Add the "other" reviewers, which is all the reviewers without the# address set in $email.my @reviewers = split ', ', $topic->{reviewers};@reviewers = grep !/^$email$/, @reviewers;$vars->{'reviewers'} = \@reviewers;# Display the output via the template.my $template = Codestriker::Http::Template->new("editcomment");$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;