From 397beebc19dfac0417a64fdbcfb4e6657f6ad9f5 Mon Sep 17 00:00:00 2001 From: "terry%mozilla.org" <> Date: Fri, 7 Jan 2000 05:16:13 +0000 Subject: Add support for a new "keywords" feature. This lets some central authority maintain a list of keywords, and users can associate any keyword with any bug. The new functionality won't appear until at least one keyword is defined. Note that you *must* run the "checksetup.pl" script after updating this change, in order to create the new required tables "keywords" and "keyworddefs". --- editkeywords.cgi | 379 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 379 insertions(+) create mode 100755 editkeywords.cgi (limited to 'editkeywords.cgi') diff --git a/editkeywords.cgi b/editkeywords.cgi new file mode 100755 index 000000000..03525f725 --- /dev/null +++ b/editkeywords.cgi @@ -0,0 +1,379 @@ +#!/usr/bonsaitools/bin/perl -w +# -*- 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 Terry Weissman. +# Portions created by Terry Weissman are +# Copyright (C) 2000 Terry Weissman. All +# Rights Reserved. +# +# Contributor(s): Terry Weissman + +use diagnostics; +use strict; + +require "CGI.pl"; + +my $localtrailer = "edit more keywords"; + + +# +# Displays a text like "a.", "a or b.", "a, b or c.", "a, b, c or d." +# + +sub PutTrailer (@) +{ + my (@links) = ("Back to the query page", @_); + + my $count = $#links; + my $num = 0; + print "

\n"; + foreach (@links) { + print $_; + if ($num == $count) { + print ".\n"; + } + elsif ($num == $count-1) { + print " or "; + } + else { + print ", "; + } + $num++; + } + print "\n\n"; +} + + +# +# Displays the form to edit a keyword's parameters +# + +sub EmitFormElements ($$$) +{ + my ($id, $name, $description) = @_; + + $name = value_quote($name); + $description = value_quote($description); + + print qq{}; + + print " Name:\n"; + print " \n"; + print "\n"; + + print " Description:\n"; + print " \n"; + print "\n"; + +} + + +sub Validate ($$) { + my ($name, $description) = @_; + if ($name eq "") { + print "You must enter a non-blank name for the keyword. Please press\n"; + print "Back and try again.\n"; + PutTrailer($localtrailer); + exit; + } + if ($name =~ /,/) { + print "You may not use commas in a keyword name.\n"; + print "Please press Back and try again.\n"; + PutTrailer($localtrailer); + exit; + } + if ($description eq "") { + print "You must enter a non-blank description of the keyword.\n"; + print "Please press Back and try again.\n"; + PutTrailer($localtrailer); + exit; + } +} + + +# +# Preliminary checks: +# + +confirm_login(); + +print "Content-type: text/html\n\n"; + +unless (UserInGroup("editkeywords")) { + PutHeader("Not allowed"); + print "Sorry, you aren't a member of the 'editkeywords' group.\n"; + print "And so, you aren't allowed to add, modify or delete keywords.\n"; + PutTrailer(); + exit; +} + + +my $action = trim($::FORM{action} || ''); + + +if ($action eq "") { + PutHeader("Select keyword"); + print qq{ + + + + + + + +}; + SendSQL("SELECT keyworddefs.id, keyworddefs.name, keyworddefs.description, + COUNT(keywords.bug_id) + FROM keyworddefs LEFT JOIN keywords ON keyworddefs.id = keywords.keywordid + GROUP BY keyworddefs.id + ORDER BY keyworddefs.name"); + while (MoreSQLData()) { + my ($id, $name, $description, $bugs) = FetchSQLData(); + $description ||= "missing"; + $bugs ||= 'none'; + print qq{ + + + + + + +}; + } + print qq{ + + + +
Edit keyword ...DescriptionBugsAction
$name$description$bugsDelete
Add a new keywordAdd
+}; + PutTrailer(); + exit; +} + + +if ($action eq 'add') { + PutHeader("Add keyword"); + print "

\n"; + print "\n"; + + EmitFormElements(-1, '', ''); + + print "
\n
\n"; + print "\n"; + print "\n"; + print "
"; + + my $other = $localtrailer; + $other =~ s/more/other/; + PutTrailer($other); + exit; +} + +# +# action='new' -> add keyword entered in the 'action=add' screen +# + +if ($action eq 'new') { + PutHeader("Adding new keyword"); + + # Cleanups and valididy checks + + my $name = trim($::FORM{name} || ''); + my $description = trim($::FORM{description} || ''); + + Validate($name, $description); + + SendSQL("SELECT id FROM keyworddefs WHERE name = " . SqlQuote($name)); + + if (FetchOneColumn()) { + print "The keyword '$name' already exists. Please press\n"; + print "Back and try again.\n"; + PutTrailer($localtrailer); + exit; + } + + + # Pick an unused number. Be sure to recycle numbers that may have been + # deleted in the past. This code is potentially slow, but it happens + # rarely enough, and there really aren't ever going to be that many + # keywords anyway. + + SendSQL("SELECT id FROM keyworddefs ORDER BY id"); + + my $newid = 1; + + while (MoreSQLData()) { + my $oldid = FetchOneColumn(); + if ($oldid > $newid) { + last; + } + $newid = $oldid + 1; + } + + # Add the new keyword. + SendSQL("INSERT INTO keyworddefs (id, name, description) VALUES ($newid, " . + SqlQuote($name) . "," . + SqlQuote($description) . ")"); + + # Make versioncache flush + unlink "data/versioncache"; + + print "OK, done.

\n"; + PutTrailer($localtrailer); + exit; +} + + + +# +# action='edit' -> present the edit keywords from +# +# (next action would be 'update') +# + +if ($action eq 'edit') { + PutHeader("Edit keyword"); + + my $id = trim($::FORM{id} || 0); + # get data of keyword + SendSQL("SELECT name,description + FROM keyworddefs + WHERE id=$id"); + my ($name, $description) = FetchSQLData(); + if (!$name) { + print "Something screwy is going on. Please try again.\n"; + PutTrailer($localtrailer); + exit; + } + print "

\n"; + print "\n"; + + EmitFormElements($id, $name, $description); + + print "\n"; + print " \n"; + print " \n
Bugs:"; + SendSQL("SELECT count(*) + FROM keywords + WHERE keywordid = $id"); + my $bugs = ''; + $bugs = FetchOneColumn() if MoreSQLData(); + print $bugs || 'none'; + + print "
\n"; + + print "\n"; + print "\n"; + + print "
"; + + my $x = $localtrailer; + $x =~ s/more/other/; + PutTrailer($x); + exit; +} + + +# +# action='update' -> update the keyword +# + +if ($action eq 'update') { + PutHeader("Update keyword"); + + my $id = $::FORM{id}; + my $name = trim($::FORM{name} || ''); + my $description = trim($::FORM{description} || ''); + + Validate($name, $description); + + SendSQL("SELECT id FROM keyworddefs WHERE name = " . SqlQuote($name)); + + my $tmp = FetchOneColumn(); + + if ($tmp && $tmp != $id) { + print "The keyword '$name' already exists. Please press\n"; + print "Back and try again.\n"; + PutTrailer($localtrailer); + exit; + } + + SendSQL("UPDATE keyworddefs SET name = " . SqlQuote($name) . + ", description = " . SqlQuote($description) . + " WHERE id = $id"); + + print "Keyword updated.
\n"; + + # Make versioncache flush + unlink "data/versioncache"; + + PutTrailer($localtrailer); + exit; +} + + +if ($action eq 'delete') { + PutHeader("Delete keyword"); + my $id = $::FORM{id}; + + SendSQL("SELECT name FROM keyworddefs WHERE id=$id"); + my $name = FetchOneColumn(); + + if (!$::FORM{reallydelete}) { + + SendSQL("SELECT count(*) + FROM keywords + WHERE keywordid = $id"); + + my $bugs = FetchOneColumn(); + + if ($bugs) { + + + print qq{ +There are $bugs bugs which have this keyword set. Are you sure you want +to delete the $name keyword? + +
+ + + + +
+}; + + PutTrailer($localtrailer); + exit; + } + } + + SendSQL("DELETE FROM keywords WHERE keywordid = $id"); + SendSQL("DELETE FROM keyworddefs WHERE id = $id"); + + print "Keyword $name deleted.\n"; + + # Make versioncache flush + unlink "data/versioncache"; + + PutTrailer($localtrailer); + exit; +} + +PutHeader("Error"); +print "I don't have a clue what you want.
\n"; + +foreach ( sort keys %::FORM) { + print "$_: $::FORM{$_}
\n"; +} -- cgit v1.2.3-24-g4f1b