summaryrefslogtreecommitdiffstats
path: root/process_bug.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'process_bug.cgi')
-rwxr-xr-xprocess_bug.cgi309
1 files changed, 309 insertions, 0 deletions
diff --git a/process_bug.cgi b/process_bug.cgi
new file mode 100755
index 000000000..27b54de94
--- /dev/null
+++ b/process_bug.cgi
@@ -0,0 +1,309 @@
+#! /usr/bonsaitools/bin/mysqltcl
+# -*- Mode: tcl; indent-tabs-mode: nil -*-
+#
+# The contents of this file are subject to the Mozilla Public License
+# Version 1.0 (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): Terry Weissman <terry@mozilla.org>
+
+source "CGI.tcl"
+
+confirm_login
+
+puts "Content-type: text/html\n"
+
+GetVersionTable
+
+if {![cequal $FORM(product) $dontchange]} {
+ set prod [FormData product]
+ set vok [expr [lsearch -exact $versions($prod) \
+ [FormData version]] >= 0]
+ set cok [expr [lsearch -exact $components($prod) \
+ [FormData component]] >= 0]
+ if {!$vok || !$cok} {
+ puts "<H1>Changing product means changing version and component.</H1>"
+ puts "You have chosen a new product, and now the version and/or"
+ puts "component fields are not correct. Please set them now.<p>"
+ puts "<form>"
+ puts "<table>"
+ puts "<tr>"
+ puts "<td align=right><b>Product:</b></td>"
+ puts "<td>$prod</td>"
+ puts "</tr><tr>"
+ puts "<td align=right><b>Version:</b></td>"
+ puts "<td>[Version_element [FormData version] $prod]</td>"
+ puts "</tr><tr>"
+ puts "<td align=right><b>Component:</b></td>"
+ puts "<td>[Component_element [FormData component] $prod]</td>"
+ puts "</tr>"
+ puts "</table>"
+ foreach i [array names FORM] {
+ if {[lsearch -exact {version component} $i] < 0} {
+ puts "<input type=hidden name=$i value=\"[value_quote $FORM($i)]\">"
+ }
+ }
+ puts "<input type=submit value=Commit>"
+ puts "</form>"
+ puts "</hr>"
+ puts "<a href=query.cgi>Cancel all this and go back to the query page.</a>"
+ exit
+ }
+}
+
+
+if {[info exists FORM(id)]} {
+ set idlist $FORM(id)
+} else {
+ set idlist {}
+ foreach i [array names FORM] {
+ if {[string match "id_*" $i]} {
+ lappend idlist [crange $i 3 end]
+ }
+ }
+}
+
+if {![info exists FORM(who)]} {
+ set FORM(who) $COOKIE(Bugzilla_login)
+}
+
+puts "<TITLE>Update Bug $idlist</TITLE>"
+if {[info exists FORM(id)]} {
+ navigation_header
+}
+puts "<HR>"
+set query "update bugs\nset"
+set comma ""
+umask 0
+
+proc DoComma {} {
+ global query comma
+ append query "$comma\n "
+ set comma ","
+}
+
+proc ChangeStatus {str} {
+ global dontchange query
+ if {![cequal $str $dontchange]} {
+ DoComma
+ append query "bug_status = '$str'"
+ }
+}
+
+proc ChangeResolution {str} {
+ global dontchange query
+ if {![cequal $str $dontchange]} {
+ DoComma
+ append query "resolution = '$str'"
+ }
+}
+
+
+
+
+foreach field {rep_platform priority bug_severity url summary \
+ component bug_file_loc short_desc \
+ status_summary product version component} {
+ if {[info exists FORM($field)]} {
+ if {![cequal $FORM($field) $dontchange]} {
+ DoComma
+ regsub -all "'" [FormData $field] "''" value
+ append query "$field = '$value'"
+ }
+ }
+}
+
+
+
+ConnectToDatabase
+
+switch -exact $FORM(knob) {
+ none {}
+ accept {
+ ChangeStatus ASSIGNED
+ }
+ clearresolution {
+ ChangeResolution {}
+ }
+ resolve {
+ ChangeStatus RESOLVED
+ ChangeResolution $FORM(resolution)
+ }
+ reassign {
+ ChangeStatus NEW
+ DoComma
+ set newid [DBNameToIdAndCheck $FORM(assigned_to)]
+ append query "assigned_to = $newid"
+ }
+ reassignbycomponent {
+ if {[cequal $FORM(component) $dontchange]} {
+ puts "You must specify a component whose owner should get assigned"
+ puts "these bugs."
+ exit 0
+ }
+ ChangeStatus NEW
+ DoComma
+ SendSQL "select initialowner from components
+where program='[SqlQuote $FORM(product)]'
+and value='[SqlQuote $FORM(component)]'"
+ set newname [lindex [FetchSQLData] 0]
+ set newid [DBNameToIdAndCheck $newname 1]
+ append query "assigned_to = $newid"
+ }
+ reopen {
+ ChangeStatus REOPENED
+ }
+ verify {
+ ChangeStatus VERIFIED
+ }
+ close {
+ ChangeStatus CLOSED
+ }
+ duplicate {
+ ChangeStatus RESOLVED
+ ChangeResolution DUPLICATE
+ set num $FORM(dup_id)
+ if {[catch {incr num}]} {
+ puts "You must specify a bug number of which this bug is a"
+ puts "duplicate. The bug has not been changed."
+ exit
+ }
+ if {$FORM(dup_id) == $FORM(id)} {
+ puts "Nice try. But it doesn't really make sense to mark a bug as"
+ puts "a duplicate of itself, does it?"
+ exit
+ }
+ AppendComment $FORM(dup_id) $FORM(who) "*** Bug $FORM(id) has been marked as a duplicate of this bug. ***"
+ append FORM(comment) "\n\n*** This bug has been marked as a duplicate of $FORM(dup_id) ***"
+ exec ./processmail $FORM(dup_id) < /dev/null > /dev/null 2> /dev/null &
+ }
+ default {
+ puts "Unknown action $FORM(knob)!"
+ exit
+ }
+}
+
+
+if {[lempty $idlist]} {
+ puts "You apparently didn't choose any bugs to modify."
+ puts "<p>Click <b>Back</b> and try again."
+ exit
+}
+
+if {[cequal $comma ""]} {
+ set comment {}
+ if {[info exists FORM(comment)]} {
+ set comment $FORM(comment)
+ }
+ if {[cequal $comment ""]} {
+ puts "Um, you apparently did not change anything on the selected bugs."
+ puts "<p>Click <b>Back</b> and try again."
+ exit
+ }
+}
+
+set basequery $query
+
+proc SnapShotBug {id} {
+ global log_columns
+ SendSQL "select [join $log_columns ","] from bugs where bug_id = $id"
+ return [FetchSQLData]
+}
+
+
+foreach id $idlist {
+ SendSQL "lock tables bugs write, bugs_activity write, cc write, profiles write"
+ set oldvalues [SnapShotBug $id]
+
+ set query "$basequery\nwhere bug_id = $id"
+
+# puts "<PRE>$query</PRE>"
+
+ if {![cequal $comma ""]} {
+ if { [SendSQL $query] != 0 } {
+ puts "<H1>Error -- Changes not applied</H1>"
+ puts "OK, the database rejected the changes for some reason"
+ puts "which bugzilla can't deal with. The error string returned"
+ puts "was:<PRE>$oramsg(errortxt)</PRE>"
+ puts "Here is the query which caused the error:"
+ puts "<PRE>$query</PRE>"
+ }
+ while {[MoreSQLData]} {
+ FetchSQLData
+ }
+ }
+
+ if {[info exists FORM(comment)]} {
+ AppendComment $id $FORM(who) [FormData comment]
+ }
+
+ if {[info exists FORM(cc)] && [ShowCcList $id] != [lookup FORM cc]} {
+ set ccids(zz) 1
+ unset ccids(zz)
+ foreach person [split $FORM(cc) " ,"] {
+ if {![cequal $person ""]} {
+ set id [DBNameToIdAndCheck $person]
+ set ccids($id) 1
+ }
+ }
+
+ SendSQL "delete from cc where bug_id = $id"
+ while {[MoreSQLData]} { FetchSQLData }
+ foreach ccid [array names ccids] {
+ SendSQL "insert into cc (bug_id, who) values ($id, $ccid)"
+ while { [ MoreSQLData ] } { FetchSQLData }
+ }
+ }
+
+# oracommit $lhandle
+
+ set newvalues [SnapShotBug $id]
+ foreach col $log_columns {
+ set old [lvarpop oldvalues]
+ set new [lvarpop newvalues]
+ if {![cequal $old $new]} {
+ if {![info exists whoid]} {
+ set whoid [DBNameToIdAndCheck $FORM(who)]
+ SendSQL "select delta_ts from bugs where bug_id = $id"
+ set timestamp [lindex [FetchSQLData] 0]
+ }
+ if {[cequal $col assigned_to]} {
+ set old [DBID_to_name $old]
+ set new [DBID_to_name $new]
+ }
+ set q "insert into bugs_activity (bug_id,who,when,field,oldvalue,newvalue) values ($id,$whoid,$timestamp,'[SqlQuote $col]','[SqlQuote $old]','[SqlQuote $new]')"
+ # puts "<pre>$q</pre>"
+ SendSQL $q
+ }
+ }
+
+ puts "<TABLE BORDER=1><TD><H1>Changes Submitted</H1>"
+ puts "<TD><A HREF=\"show_bug.cgi?id=$id\">Back To BUG# $id</A></TABLE>"
+ flush stdout
+
+ SendSQL "unlock tables"
+
+ exec ./processmail $id < /dev/null > /dev/null 2> /dev/null &
+}
+
+if {[info exists next_bug]} {
+ set FORM(id) $next_bug
+ puts "<HR>"
+
+ navigation_header
+ source "bug_form.tcl"
+} else {
+ puts "<BR><A HREF=\"query.cgi\">Back To Query Page</A>"
+}