#!/usr/bin/perl -wT # -*- Mode: perl; indent-tabs-mode: nil -*- # # The contents of this file are subject to the Mozilla Public # License Version 1.1 (the "License"); you may not use this file # except in compliance with the License. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or # implied. See the License for the specific language governing # rights and limitations under the License. # # The Original Code is the Bugzilla Bug Tracking System. # # The Initial Developer of the Original Code is Netscape Communications # Corporation. Portions created by Netscape are # Copyright (C) 1998 Netscape Communications Corporation. All # Rights Reserved. # # Contributor(s): Dawn Endico # Terry Weissman # Dave Miller use strict; use lib qw(.); require "CGI.pl"; use vars qw($template $userid); use Bugzilla; use Bugzilla::Constants; use Bugzilla::Bug; use Bugzilla::Config qw(:DEFAULT $datadir); use Bugzilla::BugMail; my $cgi = Bugzilla->cgi; unless ( Param("move-enabled") ) { print $cgi->header(); PutHeader("Move Bugs"); print "\n

Sorry. Bug moving is not enabled here. "; print "If you need to move a bug, contact " . Param("maintainer"); PutFooter(); exit; } my $user = Bugzilla->login(LOGIN_REQUIRED); if (!defined $cgi->param('buglist')) { print $cgi->header(); PutHeader("Move Bugs"); print "Move bugs either from the bug display page or perform a "; print "query and change several bugs at once.\n"; print "If you don't see the move button, then you either aren't "; print "logged in or aren't permitted to."; PutFooter(); exit; } unless ($user->is_mover) { print $cgi->header(); PutHeader("Move Bugs"); print "

You do not have permission to move bugs

\n"; PutFooter(); exit; } my @bugs; my $exporterid = $user->id; print $cgi->header(); PutHeader("Move Bugs"); foreach my $id (split(/:/, scalar($cgi->param('buglist')))) { my $bug = new Bugzilla::Bug($id, $exporterid); push @bugs, $bug; if (!$bug->error) { my $fieldid = GetFieldID("bug_status"); my $cur_status= $bug->bug_status; SendSQL("INSERT INTO bugs_activity " . "(bug_id,who,bug_when,fieldid,removed,added) VALUES " . "($id,$exporterid,now(),$fieldid,'$cur_status','RESOLVED')"); $fieldid = GetFieldID("resolution"); my $cur_res= $bug->resolution; SendSQL("INSERT INTO bugs_activity " . "(bug_id,who,bug_when,fieldid,removed,added) VALUES " . "($id,$exporterid,now(),$fieldid,'$cur_res','MOVED')"); SendSQL("UPDATE bugs SET bug_status =\"RESOLVED\", resolution =\"MOVED\", delta_ts = NOW() WHERE bug_id=\"$id\""); my $comment = ""; if (defined $cgi->param('comment') && $cgi->param('comment') !~ /^\s*$/) { $comment .= $cgi->param('comment') . "\n\n"; } $comment .= "Bug moved to " . Param("move-to-url") . ".\n\n"; $comment .= "If the move succeeded, " . $user->login . " will receive a mail\n"; $comment .= "containing the number of the new bug in the other database.\n"; $comment .= "If all went well, please mark this bug verified, and paste\n"; $comment .= "in a link to the new bug. Otherwise, reopen this bug.\n"; SendSQL("INSERT INTO longdescs (bug_id, who, bug_when, thetext) VALUES " . "($id, $exporterid, now(), " . SqlQuote($comment) . ")"); print "

Bug $id moved to " . Param("move-to-url") . ".
\n"; Bugzilla::BugMail::Send($id, { 'changer' => $user->login }); } } my $buglist = $cgi->param('buglist'); $buglist =~ s/:/,/g; my $host = Param("urlbase"); $host =~ s#http://([^/]+)/.*#$1#; my $to = Param("move-to-address"); $to =~ s/@/\@/; my $msg = "To: $to\n"; my $from = Param("moved-from-address"); $from =~ s/@/\@/; $msg .= "From: Bugzilla <" . $from . ">\n"; $msg .= "Subject: Moving bug(s) $buglist\n\n"; my @fieldlist = (Bugzilla::Bug::fields(), 'group', 'long_desc', 'attachment'); my %displayfields; foreach (@fieldlist) { $displayfields{$_} = 1; } $template->process("bug/show.xml.tmpl", { bugs => \@bugs, displayfields => \%displayfields, }, \$msg) || ThrowTemplateError($template->error()); $msg .= "\n"; Bugzilla::BugMail::MessageToMTA($msg); PutFooter();