summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Attachment.pm107
-rwxr-xr-xBug.pm510
-rw-r--r--Bugzilla/Attachment.pm2
-rwxr-xr-xBugzilla/Bug.pm12
-rw-r--r--Bugzilla/BugMail.pm4
-rw-r--r--Bugzilla/Flag.pm5
-rw-r--r--Bugzilla/RelationSet.pm17
-rw-r--r--Bugzilla/Token.pm2
-rw-r--r--RelationSet.pm266
-rw-r--r--Token.pm268
-rwxr-xr-xchecksetup.pl1
-rw-r--r--globals.pl6
-rwxr-xr-xmove.pl6
-rwxr-xr-xpost_bug.cgi4
-rwxr-xr-xprocess_bug.cgi11
-rwxr-xr-xshow_bug.cgi8
-rwxr-xr-xtoken.cgi16
-rwxr-xr-xuserprefs.cgi14
18 files changed, 54 insertions, 1205 deletions
diff --git a/Attachment.pm b/Attachment.pm
deleted file mode 100644
index 84979d3ea..000000000
--- a/Attachment.pm
+++ /dev/null
@@ -1,107 +0,0 @@
-# -*- 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): Terry Weissman <terry@mozilla.org>
-# Myk Melez <myk@mozilla.org>
-
-############################################################################
-# Module Initialization
-############################################################################
-
-use strict;
-
-package Attachment;
-
-# This module requires that its caller have said "require CGI.pl" to import
-# relevant functions from that script and its companion globals.pl.
-
-# Use the Flag module to handle flags.
-use Bugzilla::Flag;
-
-############################################################################
-# Functions
-############################################################################
-
-sub new {
- # Returns a hash of information about the attachment with the given ID.
-
- my ($invocant, $id) = @_;
- return undef if !$id;
- my $self = { 'id' => $id };
- my $class = ref($invocant) || $invocant;
- bless($self, $class);
-
- &::PushGlobalSQLState();
- &::SendSQL("SELECT 1, description, bug_id, isprivate FROM attachments " .
- "WHERE attach_id = $id");
- ($self->{'exists'},
- $self->{'summary'},
- $self->{'bug_id'},
- $self->{'isprivate'}) = &::FetchSQLData();
- &::PopGlobalSQLState();
-
- return $self;
-}
-
-sub query
-{
- # Retrieves and returns an array of attachment records for a given bug.
- # This data should be given to attachment/list.atml in an
- # "attachments" variable.
- my ($bugid) = @_;
-
- my $in_editbugs = &::UserInGroup("editbugs");
- &::SendSQL("SELECT product_id
- FROM bugs
- WHERE bug_id = $bugid");
- my $productid = &::FetchOneColumn();
- my $caneditproduct = &::CanEditProductId($productid);
-
- # Retrieve a list of attachments for this bug and write them into an array
- # of hashes in which each hash represents a single attachment.
- &::SendSQL("
- SELECT attach_id, DATE_FORMAT(creation_ts, '%Y.%m.%d %H:%i'),
- mimetype, description, ispatch, isobsolete, isprivate,
- submitter_id, LENGTH(thedata)
- FROM attachments WHERE bug_id = $bugid ORDER BY attach_id
- ");
- my @attachments = ();
- while (&::MoreSQLData()) {
- my %a;
- my $submitter_id;
- ($a{'attachid'}, $a{'date'}, $a{'contenttype'}, $a{'description'},
- $a{'ispatch'}, $a{'isobsolete'}, $a{'isprivate'}, $submitter_id,
- $a{'datasize'}) = &::FetchSQLData();
-
- # Retrieve a list of flags for this attachment.
- $a{'flags'} = Bugzilla::Flag::match({ 'attach_id' => $a{'attachid'} });
-
- # We will display the edit link if the user can edit the attachment;
- # ie the are the submitter, or they have canedit.
- # Also show the link if the user is not logged in - in that cae,
- # They'll be prompted later
- $a{'canedit'} = ($::userid == 0 || (($submitter_id == $::userid ||
- $in_editbugs) && $caneditproduct));
- push @attachments, \%a;
- }
-
- return \@attachments;
-}
-
-1;
diff --git a/Bug.pm b/Bug.pm
deleted file mode 100755
index 94bd628e2..000000000
--- a/Bug.pm
+++ /dev/null
@@ -1,510 +0,0 @@
-# -*- 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 <endico@mozilla.org>
-# Terry Weissman <terry@mozilla.org>
-# Chris Yeh <cyeh@bluemartini.com>
-
-package Bug;
-
-use strict;
-
-use RelationSet;
-use vars qw($unconfirmedstate $legal_keywords @legal_platform
- @legal_priority @legal_severity @legal_opsys @legal_bugs_status
- @settable_resolution %components %versions %target_milestone
- @enterable_products %milestoneurl %prodmaxvotes);
-
-use CGI::Carp qw(fatalsToBrowser);
-
-use Attachment;
-use Bugzilla::Config;
-use Bugzilla::Constants;
-use Bugzilla::Flag;
-use Bugzilla::FlagType;
-use Bugzilla::User;
-use Bugzilla::Util;
-
-sub fields {
- # Keep this ordering in sync with bugzilla.dtd
- my @fields = qw(bug_id alias creation_ts short_desc delta_ts
- reporter_accessible cclist_accessible
- product component version rep_platform op_sys
- bug_status resolution
- bug_file_loc status_whiteboard keywords
- priority bug_severity target_milestone
- dependson blocked votes
- reporter assigned_to cc
- );
-
- if (Param('useqacontact')) {
- push @fields, "qa_contact";
- }
-
- if (Param('timetrackinggroup')) {
- push @fields, qw(estimated_time remaining_time actual_time);
- }
-
- return @fields;
-}
-
-my %ok_field;
-foreach my $key (qw(error groups
- longdescs milestoneurl attachments
- isopened isunconfirmed
- flag_types num_attachment_flag_types
- show_attachment_flags use_keywords any_flags_requesteeble
- ),
- fields()) {
- $ok_field{$key}++;
-}
-
-# create a new empty bug
-#
-sub new {
- my $type = shift();
- my %bug;
-
- # create a ref to an empty hash and bless it
- #
- my $self = {%bug};
- bless $self, $type;
-
- # construct from a hash containing a bug's info
- #
- if ($#_ == 1) {
- $self->initBug(@_);
- } else {
- confess("invalid number of arguments \($#_\)($_)");
- }
-
- # bless as a Bug
- #
- return $self;
-}
-
-# dump info about bug into hash unless user doesn't have permission
-# user_id 0 is used when person is not logged in.
-#
-sub initBug {
- my $self = shift();
- my ($bug_id, $user_id) = (@_);
-
- $bug_id = trim($bug_id);
-
- my $old_bug_id = $bug_id;
-
- # If the bug ID isn't numeric, it might be an alias, so try to convert it.
- $bug_id = &::BugAliasToID($bug_id) if $bug_id !~ /^[1-9][0-9]*$/;
-
- if ((! defined $bug_id) || (!$bug_id) || (!detaint_natural($bug_id))) {
- # no bug number given or the alias didn't match a bug
- $self->{'bug_id'} = $old_bug_id;
- $self->{'error'} = "InvalidBugId";
- return $self;
- }
-
-# default userid 0, or get DBID if you used an email address
- unless (defined $user_id) {
- $user_id = 0;
- }
- else {
- if ($user_id =~ /^\@/) {
- $user_id = &::DBname_to_id($user_id);
- }
- }
-
- $self->{'whoid'} = $user_id;
-
- my $query = "
- SELECT
- bugs.bug_id, alias, bugs.product_id, products.name, version,
- rep_platform, op_sys, bug_status, resolution, priority,
- bug_severity, bugs.component_id, components.name, assigned_to,
- reporter, bug_file_loc, short_desc, target_milestone,
- qa_contact, status_whiteboard,
- DATE_FORMAT(creation_ts,'%Y.%m.%d %H:%i'),
- delta_ts, ifnull(sum(votes.vote_count),0),
- reporter_accessible, cclist_accessible,
- estimated_time, remaining_time
- from bugs left join votes using(bug_id),
- products, components
- where bugs.bug_id = $bug_id
- AND products.id = bugs.product_id
- AND components.id = bugs.component_id
- group by bugs.bug_id";
-
- &::SendSQL($query);
- my @row = ();
-
- if ((@row = &::FetchSQLData()) && &::CanSeeBug($bug_id, $self->{'whoid'})) {
- my $count = 0;
- my %fields;
- foreach my $field ("bug_id", "alias", "product_id", "product", "version",
- "rep_platform", "op_sys", "bug_status", "resolution",
- "priority", "bug_severity", "component_id", "component",
- "assigned_to", "reporter", "bug_file_loc", "short_desc",
- "target_milestone", "qa_contact", "status_whiteboard",
- "creation_ts", "delta_ts", "votes",
- "reporter_accessible", "cclist_accessible",
- "estimated_time", "remaining_time")
- {
- $fields{$field} = shift @row;
- if (defined $fields{$field}) {
- $self->{$field} = $fields{$field};
- }
- $count++;
- }
- } elsif (@row) {
- $self->{'bug_id'} = $bug_id;
- $self->{'error'} = "NotPermitted";
- return $self;
- } else {
- $self->{'bug_id'} = $bug_id;
- $self->{'error'} = "NotFound";
- return $self;
- }
-
- $self->{'assigned_to'} = new Bugzilla::User($self->{'assigned_to'});
- $self->{'reporter'} = new Bugzilla::User($self->{'reporter'});
-
- if (Param('useqacontact') && $self->{'qa_contact'} > 0) {
- $self->{'qa_contact'} = new Bugzilla::User($self->{'qa_contact'});
- } else {
- $self->{'qa_contact'} = undef;
- }
-
- my $ccSet = new RelationSet;
- $ccSet->mergeFromDB("select who from cc where bug_id=$bug_id");
- my @cc = $ccSet->toArrayOfStrings();
- if (@cc) {
- $self->{'cc'} = \@cc;
- }
-
- if (@::legal_keywords) {
- &::SendSQL("SELECT keyworddefs.name
- FROM keyworddefs, keywords
- WHERE keywords.bug_id = $bug_id
- AND keyworddefs.id = keywords.keywordid
- ORDER BY keyworddefs.name");
- my @list;
- while (&::MoreSQLData()) {
- push(@list, &::FetchOneColumn());
- }
- if (@list) {
- $self->{'keywords'} = join(', ', @list);
- }
- }
-
- $self->{'attachments'} = Attachment::query($self->{bug_id});
-
- # The types of flags that can be set on this bug.
- # If none, no UI for setting flags will be displayed.
- my $flag_types =
- Bugzilla::FlagType::match({ 'target_type' => 'bug',
- 'product_id' => $self->{'product_id'},
- 'component_id' => $self->{'component_id'} });
- foreach my $flag_type (@$flag_types) {
- $flag_type->{'flags'} =
- Bugzilla::Flag::match({ 'bug_id' => $self->{bug_id},
- 'type_id' => $flag_type->{'id'},
- 'target_type' => 'bug' });
- }
- $self->{'flag_types'} = $flag_types;
- $self->{'any_flags_requesteeble'} = grep($_->{'is_requesteeble'}, @$flag_types);
-
- # The number of types of flags that can be set on attachments to this bug
- # and the number of flags on those attachments. One of these counts must be
- # greater than zero in order for the "flags" column to appear in the table
- # of attachments.
- my $num_attachment_flag_types =
- Bugzilla::FlagType::count({ 'target_type' => 'attachment',
- 'product_id' => $self->{'product_id'},
- 'component_id' => $self->{'component_id'},
- 'is_active' => 1 });
- my $num_attachment_flags =
- Bugzilla::Flag::count({ 'target_type' => 'attachment',
- 'bug_id' => $self->{bug_id} });
-
- $self->{'show_attachment_flags'}
- = $num_attachment_flag_types || $num_attachment_flags;
-
- $self->{'milestoneurl'} = $::milestoneurl{$self->{product}};
-
- $self->{'isunconfirmed'} = ($self->{bug_status} eq $::unconfirmedstate);
- $self->{'isopened'} = &::IsOpenedState($self->{bug_status});
-
- my @depends = EmitDependList("blocked", "dependson", $bug_id);
- if (@depends) {
- $self->{'dependson'} = \@depends;
- }
- my @blocked = EmitDependList("dependson", "blocked", $bug_id);
- if (@blocked) {
- $self->{'blocked'} = \@blocked;
- }
-
- return $self;
-}
-
-sub dup_id {
- my ($self) = @_;
-
- return $self->{'dup_id'} if exists $self->{'dup_id'};
-
- $self->{'dup_id'} = undef;
- if ($self->{'resolution'} eq 'DUPLICATE') {
- my $dbh = Bugzilla->dbh;
- $self->{'dup_id'} =
- $dbh->selectrow_array(q{SELECT dupe_of
- FROM duplicates
- WHERE dupe = ?},
- undef,
- $self->{'bug_id'});
- }
- return $self->{'dup_id'};
-}
-
-sub actual_time {
- my ($self) = @_;
-
- return $self->{'actual_time'} if exists $self->{'actual_time'};
-
- if (&::UserInGroup(Param("timetrackinggroup"))) {
- &::SendSQL("SELECT SUM(work_time)
- FROM longdescs WHERE longdescs.bug_id=$self->{bug_id}");
- $self->{'actual_time'} = &::FetchSQLData();
- }
-
- return $self->{'actual_time'};
-}
-
-sub longdescs {
- my ($self) = @_;
-
- return $self->{'longdescs'} if exists $self->{'longdescs'};
-
- $self->{'longdescs'} = &::GetComments($self->{bug_id});
-
- return $self->{'longdescs'};
-}
-
-sub use_keywords {
- return @::legal_keywords;
-}
-
-sub use_votes {
- my ($self) = @_;
-
- return Param('usevotes')
- && $::prodmaxvotes{$self->{product}} > 0;
-}
-
-sub groups {
- my $self = shift;
-
- return $self->{'groups'} if exists $self->{'groups'};
-
- my @groups;
-
- # Some of this stuff needs to go into Bugzilla::User
-
- # For every group, we need to know if there is ANY bug_group_map
- # record putting the current bug in that group and if there is ANY
- # user_group_map record putting the user in that group.
- # The LEFT JOINs are checking for record existence.
- #
- &::SendSQL("SELECT DISTINCT groups.id, name, description," .
- " bug_group_map.group_id IS NOT NULL," .
- " user_group_map.group_id IS NOT NULL," .
- " isactive, membercontrol, othercontrol" .
- " FROM groups" .
- " LEFT JOIN bug_group_map" .
- " ON bug_group_map.group_id = groups.id" .
- " AND bug_id = $self->{'bug_id'}" .
- " LEFT JOIN user_group_map" .
- " ON user_group_map.group_id = groups.id" .
- " AND user_id = $::userid" .
- " AND NOT isbless" .
- " LEFT JOIN group_control_map" .
- " ON group_control_map.group_id = groups.id" .
- " AND group_control_map.product_id = " . $self->{'product_id'} .
- " WHERE isbuggroup");
-
- while (&::MoreSQLData()) {
- my ($groupid, $name, $description, $ison, $ingroup, $isactive,
- $membercontrol, $othercontrol) = &::FetchSQLData();
-
- $membercontrol ||= 0;
-
- # For product groups, we only want to use the group if either
- # (1) The bit is set and not required, or
- # (2) The group is Shown or Default for members and
- # the user is a member of the group.
- if ($ison ||
- ($isactive && $ingroup
- && (($membercontrol == CONTROLMAPDEFAULT)
- || ($membercontrol == CONTROLMAPSHOWN))
- ))
- {
- my $ismandatory = $isactive
- && ($membercontrol == CONTROLMAPMANDATORY);
-
- push (@groups, { "bit" => $groupid,
- "name" => $name,
- "ison" => $ison,
- "ingroup" => $ingroup,
- "mandatory" => $ismandatory,
- "description" => $description });
- }
- }
-
- $self->{'groups'} = \@groups;
-
- return $self->{'groups'};
-}
-
-sub user {
- my $self = shift;
- return $self->{'user'} if exists $self->{'user'};
-
- $self->{'user'} = {};
-
- my $movers = Param("movers");
- $movers =~ s/\s?,\s?/|/g;
- $movers =~ s/@/\@/g;
- $self->{'user'}->{'canmove'} = Param("move-enabled")
- && (defined $::COOKIE{"Bugzilla_login"})
- && ($::COOKIE{"Bugzilla_login"} =~ /$movers/);
-
- # In the below, if the person hasn't logged in ($::userid == 0), then
- # we treat them as if they can do anything. That's because we don't
- # know why they haven't logged in; it may just be because they don't
- # use cookies. Display everything as if they have all the permissions
- # in the world; their permissions will get checked when they log in
- # and actually try to make the change.
- $self->{'user'}->{'canedit'} = $::userid == 0
- || $::userid == $self->{'reporter'}{'id'}
- || (Param('useqacontact') && $self->{'qa_contact'} && $::userid == $self->{'qa_contact'}{'id'})
- || $::userid == $self->{'assigned_to'}{'id'}
- || &::UserInGroup("editbugs");
- $self->{'user'}->{'canconfirm'} = $::userid == 0
- || ($self->{'qa_contact'} && $::userid == $self->{'qa_contact'}{'id'})
- || $::userid == $self->{'assigned_to'}{'id'}
- || &::UserInGroup("editbugs")
- || &::UserInGroup("canconfirm");
-
- return $self->{'user'};
-}
-
-sub choices {
- my $self = shift;
- return $self->{'choices'} if exists $self->{'choices'};
-
- &::GetVersionTable();
-
- $self->{'choices'} = {};
-
- # Fiddle the product list.
- my $seen_curr_prod;
- my @prodlist;
-
- foreach my $product (@::enterable_products) {
- if ($product eq $self->{'product'}) {
- # if it's the product the bug is already in, it's ALWAYS in
- # the popup, period, whether the user can see it or not, and
- # regardless of the disallownew setting.
- $seen_curr_prod = 1;
- push(@prodlist, $product);
- next;
- }
-
- if (!&::CanEnterProduct($product)) {
- # If we're using bug groups to restrict entry on products, and
- # this product has an entry group, and the user is not in that
- # group, we don't want to include that product in this list.
- next;
- }
-
- push(@prodlist, $product);
- }
-
- # The current product is part of the popup, even if new bugs are no longer
- # allowed for that product
- if (!$seen_curr_prod) {
- push (@prodlist, $self->{'product'});
- @prodlist = sort @prodlist;
- }
-
- # Hack - this array contains "". See bug 106589.
- my @res = grep ($_, @::settable_resolution);
-
- $self->{'choices'} =
- {
- 'product' => \@prodlist,
- 'rep_platform' => \@::legal_platform,
- 'priority' => \@::legal_priority,
- 'bug_severity' => \@::legal_severity,
- 'op_sys' => \@::legal_opsys,
- 'bug_status' => \@::legal_bugs_status,
- 'resolution' => \@res,
- 'component' => $::components{$self->{product}},
- 'version' => $::versions{$self->{product}},
- 'target_milestone' => $::target_milestone{$self->{product}},
- };
-
- return $self->{'choices'};
-}
-
-sub EmitDependList {
- my ($myfield, $targetfield, $bug_id) = (@_);
- my @list;
- &::SendSQL("select dependencies.$targetfield, bugs.bug_status
- from dependencies, bugs
- where dependencies.$myfield = $bug_id
- and bugs.bug_id = dependencies.$targetfield
- order by dependencies.$targetfield");
- while (&::MoreSQLData()) {
- my ($i, $stat) = (&::FetchSQLData());
- push @list, $i;
- }
- return @list;
-}
-
-sub AUTOLOAD {
- use vars qw($AUTOLOAD);
- my $attr = $AUTOLOAD;
-
- $attr =~ s/.*:://;
- return unless $attr=~ /[^A-Z]/;
- confess ("invalid bug attribute $attr") unless $ok_field{$attr};
-
- no strict 'refs';
- *$AUTOLOAD = sub {
- my $self = shift;
- if (defined $self->{$attr}) {
- return $self->{$attr};
- } else {
- return '';
- }
- };
-
- goto &$AUTOLOAD;
-}
-
-1;
diff --git a/Bugzilla/Attachment.pm b/Bugzilla/Attachment.pm
index 84979d3ea..9f0467bb7 100644
--- a/Bugzilla/Attachment.pm
+++ b/Bugzilla/Attachment.pm
@@ -26,7 +26,7 @@
use strict;
-package Attachment;
+package Bugzilla::Attachment;
# This module requires that its caller have said "require CGI.pl" to import
# relevant functions from that script and its companion globals.pl.
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm
index 94bd628e2..b1c2ea54d 100755
--- a/Bugzilla/Bug.pm
+++ b/Bugzilla/Bug.pm
@@ -20,12 +20,14 @@
# Contributor(s): Dawn Endico <endico@mozilla.org>
# Terry Weissman <terry@mozilla.org>
# Chris Yeh <cyeh@bluemartini.com>
+# Bradley Baetz <bbaetz@acm.org>
+# Dave Miller <justdave@bugzilla.org>
-package Bug;
+package Bugzilla::Bug;
use strict;
-use RelationSet;
+use Bugzilla::RelationSet;
use vars qw($unconfirmedstate $legal_keywords @legal_platform
@legal_priority @legal_severity @legal_opsys @legal_bugs_status
@settable_resolution %components %versions %target_milestone
@@ -33,7 +35,7 @@ use vars qw($unconfirmedstate $legal_keywords @legal_platform
use CGI::Carp qw(fatalsToBrowser);
-use Attachment;
+use Bugzilla::Attachment;
use Bugzilla::Config;
use Bugzilla::Constants;
use Bugzilla::Flag;
@@ -190,7 +192,7 @@ sub initBug {
$self->{'qa_contact'} = undef;
}
- my $ccSet = new RelationSet;
+ my $ccSet = new Bugzilla::RelationSet;
$ccSet->mergeFromDB("select who from cc where bug_id=$bug_id");
my @cc = $ccSet->toArrayOfStrings();
if (@cc) {
@@ -212,7 +214,7 @@ sub initBug {
}
}
- $self->{'attachments'} = Attachment::query($self->{bug_id});
+ $self->{'attachments'} = Bugzilla::Attachment::query($self->{bug_id});
# The types of flags that can be set on this bug.
# If none, no UI for setting flags will be displayed.
diff --git a/Bugzilla/BugMail.pm b/Bugzilla/BugMail.pm
index 059667a08..fad3ad5d8 100644
--- a/Bugzilla/BugMail.pm
+++ b/Bugzilla/BugMail.pm
@@ -30,7 +30,7 @@ use strict;
package Bugzilla::BugMail;
-use RelationSet;
+use Bugzilla::RelationSet;
use Bugzilla::Config qw(:DEFAULT $datadir);
use Bugzilla::Util;
@@ -166,7 +166,7 @@ sub ProcessOneBug($) {
trick_taint($start);
trick_taint($end);
- my $ccSet = new RelationSet();
+ my $ccSet = new Bugzilla::RelationSet();
$ccSet->mergeFromDB("SELECT who FROM cc WHERE bug_id = $id");
$values{'cc'} = $ccSet->toString();
diff --git a/Bugzilla/Flag.pm b/Bugzilla/Flag.pm
index 2052f9507..8c9a4befe 100644
--- a/Bugzilla/Flag.pm
+++ b/Bugzilla/Flag.pm
@@ -34,8 +34,7 @@ use Bugzilla::User;
use Bugzilla::Config;
use Bugzilla::Util;
use Bugzilla::Error;
-
-use Attachment;
+use Bugzilla::Attachment;
use constant TABLES_ALREADY_LOCKED => 1;
@@ -529,7 +528,7 @@ sub GetTarget {
my $target = { 'exists' => 0 };
if ($attach_id) {
- $target->{'attachment'} = new Attachment($attach_id);
+ $target->{'attachment'} = new Bugzilla::Attachment($attach_id);
if ($bug_id) {
# Make sure the bug and attachment IDs correspond to each other
# (i.e. this is the bug to which this attachment is attached).
diff --git a/Bugzilla/RelationSet.pm b/Bugzilla/RelationSet.pm
index f2f822fc4..628746352 100644
--- a/Bugzilla/RelationSet.pm
+++ b/Bugzilla/RelationSet.pm
@@ -31,15 +31,16 @@
use strict;
-# Everything that uses RelationSet should already have globals.pl loaded
-# so we don't want to load it here. Doing so causes a loop in Perl because
-# globals.pl turns around and does a 'use RelationSet'
+# XXX - mod_perl
+# Everything that uses Bugzilla::RelationSet should already have globals.pl
+# loaded so we don't want to load it here. Doing so causes a loop in Perl
+# because globals.pl turns around and does a 'use Bugzilla::RelationSet'
# See http://bugzilla.mozilla.org/show_bug.cgi?id=72862
-#require "globals.pl";
+#require "../globals.pl";
-package RelationSet;
+package Bugzilla::RelationSet;
-# create a new empty RelationSet
+# create a new empty Bugzilla::RelationSet
#
sub new {
my $type = shift();
@@ -60,7 +61,7 @@ sub new {
confess("invalid number of arguments");
}
- # bless as a RelationSet
+ # bless as a Bugzilla::RelationSet
#
return $self;
}
@@ -81,7 +82,7 @@ sub generateSqlDeltas {
my ( $self, # instance ptr to set representing the existing state
$endState, # instance ptr to set representing the desired state
$table, # table where these relations are kept
- $invariantName, # column held const for a RelationSet (often "bug_id")
+ $invariantName, # column held const for a Bugzilla::RelationSet (often "bug_id")
$invariantValue, # what to hold the above column constant at
$columnName # the column which varies (often a userid)
) = @_;
diff --git a/Bugzilla/Token.pm b/Bugzilla/Token.pm
index f7be40ab3..20ce48050 100644
--- a/Bugzilla/Token.pm
+++ b/Bugzilla/Token.pm
@@ -27,7 +27,7 @@
use strict;
# Bundle the functions in this file together into the "Token" package.
-package Token;
+package Bugzilla::Token;
use Bugzilla::Config;
use Bugzilla::Error;
diff --git a/RelationSet.pm b/RelationSet.pm
deleted file mode 100644
index f2f822fc4..000000000
--- a/RelationSet.pm
+++ /dev/null
@@ -1,266 +0,0 @@
-#
-# 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) 2000 Netscape Communications Corporation. All
-# Rights Reserved.
-#
-# Contributor(s): Dan Mosedale <dmose@mozilla.org>
-# Terry Weissman <terry@mozilla.org>
-# Dave Miller <justdave@syndicomm.com>
-
-# This object models a set of relations between one item and a group
-# of other items. An example is the set of relations between one bug
-# and the users CCed on that bug. Currently, the relation objects are
-# expected to be bugzilla userids. However, this could and perhaps
-# should be generalized to work with non userid objects, such as
-# keywords associated with a bug. That shouldn't be hard to do; it
-# might involve turning this into a virtual base class, and having
-# UserSet and KeywordSet types that inherit from it.
-
-use strict;
-
-# Everything that uses RelationSet should already have globals.pl loaded
-# so we don't want to load it here. Doing so causes a loop in Perl because
-# globals.pl turns around and does a 'use RelationSet'
-# See http://bugzilla.mozilla.org/show_bug.cgi?id=72862
-#require "globals.pl";
-
-package RelationSet;
-
-# create a new empty RelationSet
-#
-sub new {
- my $type = shift();
-
- # create a ref to an empty hash and bless it
- #
- my $self = {};
- bless $self, $type;
-
- # construct from a comma-delimited string
- #
- if ($#_ == 0) {
- $self->mergeFromString($_[0]);
- }
- # unless this was a constructor for an empty list, somebody screwed up.
- #
- elsif ( $#_ != -1 ) {
- confess("invalid number of arguments");
- }
-
- # bless as a RelationSet
- #
- return $self;
-}
-
-# Assumes that the set of relations "FROM $table WHERE $constantSql and
-# $column = $value" is currently represented by $self, and this set should
-# be updated to look like $other.
-#
-# Returns an array of two strings, one INSERT and one DELETE, which will
-# make this change. Either or both strings may be the empty string,
-# meaning that no INSERT or DELETE or both (respectively) need to be done.
-#
-# THE CALLER IS RESPONSIBLE FOR ANY DESIRED LOCKING AND/OR CONSISTENCY
-# CHECKS (not to mention doing the SendSQL() calls).
-#
-sub generateSqlDeltas {
- ($#_ == 5) || confess("invalid number of arguments");
- my ( $self, # instance ptr to set representing the existing state
- $endState, # instance ptr to set representing the desired state
- $table, # table where these relations are kept
- $invariantName, # column held const for a RelationSet (often "bug_id")
- $invariantValue, # what to hold the above column constant at
- $columnName # the column which varies (often a userid)
- ) = @_;
-
- # construct the insert list by finding relations which exist in the
- # end state but not the current state.
- #
- my @endStateRelations = keys(%$endState);
- my @insertList = ();
- foreach ( @endStateRelations ) {
- push ( @insertList, $_ ) if ( ! exists $$self{"$_"} );
- }
-
- # we've built the list. If it's non-null, add required sql chrome.
- #
- my $sqlInsert="";
- if ( $#insertList > -1 ) {
- $sqlInsert = "INSERT INTO $table ($invariantName, $columnName) VALUES " .
- join (",",
- map ( "($invariantValue, $_)" , @insertList )
- );
- }
-
- # construct the delete list by seeing which relations exist in the
- # current state but not the end state
- #
- my @selfRelations = keys(%$self);
- my @deleteList = ();
- foreach ( @selfRelations ) {
- push (@deleteList, $_) if ( ! exists $$endState{"$_"} );
- }
-
- # we've built the list. if it's non-empty, add required sql chrome.
- #
- my $sqlDelete = "";
- if ( $#deleteList > -1 ) {
- $sqlDelete = "DELETE FROM $table WHERE $invariantName = $invariantValue " .
- "AND $columnName IN ( " . join (",", @deleteList) . " )";
- }
-
- return ($sqlInsert, $sqlDelete);
-}
-
-# compare the current object with another.
-#
-sub isEqual {
- ($#_ == 1) || confess("invalid number of arguments");
- my $self = shift();
- my $other = shift();
-
- # get arrays of the keys for faster processing
- #
- my @selfRelations = keys(%$self);
- my @otherRelations = keys(%$other);
-
- # make sure the arrays are the same size
- #
- return 0 if ( $#selfRelations != $#otherRelations );
-
- # bail out if any of the elements are different
- #
- foreach my $relation ( @selfRelations ) {
- return 0 if ( !exists $$other{$relation})
- }
-
- # we made it!
- #
- return 1;
-
-}
-
-# merge the results of a SQL command into this set
-#
-sub mergeFromDB {
- ( $#_ == 1 ) || confess("invalid number of arguments");
- my $self = shift();
-
- &::SendSQL(shift());
- while (my @row = &::FetchSQLData()) {
- $$self{$row[0]} = 1;
- }
-
- return;
-}
-
-# merge a set in string form into this set
-#
-sub mergeFromString {
- ($#_ == 1) || confess("invalid number of arguments");
- my $self = shift();
-
- # do the merge
- #
- foreach my $person (split(/[ ,]/, shift())) {
- if ($person ne "") {
- $$self{&::DBNameToIdAndCheck($person)} = 1;
- }
- }
-}
-
-# remove a set in string form from this set
-#
-sub removeItemsInString {
- ($#_ == 1) || confess("invalid number of arguments");
- my $self = shift();
-
- # do the merge
- #
- foreach my $person (split(/[ ,]/, shift())) {
- if ($person ne "") {
- my $dbid = &::DBNameToIdAndCheck($person);
- if (exists $$self{$dbid}) {
- delete $$self{$dbid};
- }
- }
- }
-}
-
-# remove a set in array form from this set
-#
-sub removeItemsInArray {
- ($#_ > 0) || confess("invalid number of arguments");
- my $self = shift();
-
- # do the merge
- #
- while (my $person = shift()) {
- if ($person ne "") {
- my $dbid = &::DBNameToIdAndCheck($person);
- if (exists $$self{$dbid}) {
- delete $$self{$dbid};
- }
- }
- }
-}
-
-# return the number of elements in this set
-#
-sub size {
- my $self = shift();
-
- my @k = keys(%$self);
- return $#k++;
-}
-
-# return this set in array form
-#
-sub toArray {
- my $self= shift();
-
- return keys(%$self);
-}
-
-# return this set as an array of strings
-#
-sub toArrayOfStrings {
- ($#_ == 0) || confess("invalid number of arguments");
- my $self = shift();
-
- my @result = ();
- foreach my $i ( keys %$self ) {
- push @result, &::DBID_to_name($i);
- }
-
- return sort { lc($a) cmp lc($b) } @result;
-}
-
-# return this set in string form (comma-separated and sorted)
-#
-sub toString {
- ($#_ == 0) || confess("invalid number of arguments");
- my $self = shift();
-
- my @result = ();
- foreach my $i ( keys %$self ) {
- push @result, &::DBID_to_name($i);
- }
-
- return join(',', sort(@result));
-}
-
-1;
diff --git a/Token.pm b/Token.pm
deleted file mode 100644
index f7be40ab3..000000000
--- a/Token.pm
+++ /dev/null
@@ -1,268 +0,0 @@
-# -*- 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): Myk Melez <myk@mozilla.org>
-
-################################################################################
-# Module Initialization
-################################################################################
-
-# Make it harder for us to do dangerous things in Perl.
-use strict;
-
-# Bundle the functions in this file together into the "Token" package.
-package Token;
-
-use Bugzilla::Config;
-use Bugzilla::Error;
-
-use Date::Format;
-
-# This module requires that its caller have said "require CGI.pl" to import
-# relevant functions from that script and its companion globals.pl.
-
-################################################################################
-# Constants
-################################################################################
-
-# The maximum number of days a token will remain valid.
-my $maxtokenage = 3;
-
-################################################################################
-# Functions
-################################################################################
-
-sub IssueEmailChangeToken {
- my ($userid, $old_email, $new_email) = @_;
-
- my $token_ts = time();
- my $issuedate = time2str("%Y-%m-%d %H:%M", $token_ts);
-
- # Generate a unique token and insert it into the tokens table.
- # We have to lock the tokens table before generating the token,
- # since the database must be queried for token uniqueness.
- &::SendSQL("LOCK TABLES tokens WRITE");
- my $token = GenerateUniqueToken();
- my $quotedtoken = &::SqlQuote($token);
- my $quoted_emails = &::SqlQuote($old_email . ":" . $new_email);
- &::SendSQL("INSERT INTO tokens ( userid , issuedate , token ,
- tokentype , eventdata )
- VALUES ( $userid , '$issuedate' , $quotedtoken ,
- 'emailold' , $quoted_emails )");
- my $newtoken = GenerateUniqueToken();
- $quotedtoken = &::SqlQuote($newtoken);
- &::SendSQL("INSERT INTO tokens ( userid , issuedate , token ,
- tokentype , eventdata )
- VALUES ( $userid , '$issuedate' , $quotedtoken ,
- 'emailnew' , $quoted_emails )");
- &::SendSQL("UNLOCK TABLES");
-
- # Mail the user the token along with instructions for using it.
-
- my $template = $::template;
- my $vars = $::vars;
-
- $vars->{'oldemailaddress'} = $old_email . Param('emailsuffix');
- $vars->{'newemailaddress'} = $new_email . Param('emailsuffix');
-
- $vars->{'max_token_age'} = $maxtokenage;
- $vars->{'token_ts'} = $token_ts;
-
- $vars->{'token'} = $token;
- $vars->{'emailaddress'} = $old_email . Param('emailsuffix');
-
- my $message;
- $template->process("account/email/change-old.txt.tmpl", $vars, \$message)
- || ThrowTemplateError($template->error());
-
- open SENDMAIL, "|/usr/lib/sendmail -t -i";
- print SENDMAIL $message;
- close SENDMAIL;
-
- $vars->{'token'} = $newtoken;
- $vars->{'emailaddress'} = $new_email . Param('emailsuffix');
-
- $message = "";
- $template->process("account/email/change-new.txt.tmpl", $vars, \$message)
- || ThrowTemplateError($template->error());
-
- open SENDMAIL, "|/usr/lib/sendmail -t -i";
- print SENDMAIL $message;
- close SENDMAIL;
-
-}
-
-sub IssuePasswordToken {
- # Generates a random token, adds it to the tokens table, and sends it
- # to the user with instructions for using it to change their password.
-
- my ($loginname) = @_;
-
- # Retrieve the user's ID from the database.
- my $quotedloginname = &::SqlQuote($loginname);
- &::SendSQL("SELECT userid FROM profiles WHERE login_name = $quotedloginname");
- my ($userid) = &::FetchSQLData();
-
- my $token_ts = time();
- my $issuedate = time2str("%Y-%m-%d %H:%M", $token_ts);
-
- # Generate a unique token and insert it into the tokens table.
- # We have to lock the tokens table before generating the token,
- # since the database must be queried for token uniqueness.
- &::SendSQL("LOCK TABLES tokens WRITE");
- my $token = GenerateUniqueToken();
- my $quotedtoken = &::SqlQuote($token);
- my $quotedipaddr = &::SqlQuote($::ENV{'REMOTE_ADDR'});
- &::SendSQL("INSERT INTO tokens ( userid , issuedate , token , tokentype , eventdata )
- VALUES ( $userid , '$issuedate' , $quotedtoken , 'password' , $quotedipaddr )");
- &::SendSQL("UNLOCK TABLES");
-
- # Mail the user the token along with instructions for using it.
-
- my $template = $::template;
- my $vars = $::vars;
-
- $vars->{'token'} = $token;
- $vars->{'emailaddress'} = $loginname . Param('emailsuffix');
-
- $vars->{'max_token_age'} = $maxtokenage;
- $vars->{'token_ts'} = $token_ts;
-
- my $message = "";
- $template->process("account/password/forgotten-password.txt.tmpl",
- $vars, \$message)
- || ThrowTemplateError($template->error());
-
- open SENDMAIL, "|/usr/lib/sendmail -t -i";
- print SENDMAIL $message;
- close SENDMAIL;
-
-}
-
-
-sub CleanTokenTable {
- &::SendSQL("LOCK TABLES tokens WRITE");
- &::SendSQL("DELETE FROM tokens
- WHERE TO_DAYS(NOW()) - TO_DAYS(issuedate) >= " . $maxtokenage);
- &::SendSQL("UNLOCK TABLES");
-}
-
-
-sub GenerateUniqueToken {
- # Generates a unique random token. Uses &GenerateRandomPassword
- # for the tokens themselves and checks uniqueness by searching for
- # the token in the "tokens" table. Gives up if it can't come up
- # with a token after about one hundred tries.
-
- my $token;
- my $duplicate = 1;
- my $tries = 0;
- while ($duplicate) {
-
- ++$tries;
- if ($tries > 100) {
- ThrowCodeError("token_generation_error");
- }
-
- $token = &::GenerateRandomPassword();
- &::SendSQL("SELECT userid FROM tokens WHERE token = " . &::SqlQuote($token));
- $duplicate = &::FetchSQLData();
- }
-
- return $token;
-
-}
-
-
-sub Cancel {
- # Cancels a previously issued token and notifies the system administrator.
- # This should only happen when the user accidentally makes a token request
- # or when a malicious hacker makes a token request on behalf of a user.
-
- my ($token, $cancelaction) = @_;
-
- # Quote the token for inclusion in SQL statements.
- my $quotedtoken = &::SqlQuote($token);
-
- # Get information about the token being cancelled.
- &::SendSQL("SELECT issuedate , tokentype , eventdata , login_name , realname
- FROM tokens, profiles
- WHERE tokens.userid = profiles.userid
- AND token = $quotedtoken");
- my ($issuedate, $tokentype, $eventdata, $loginname, $realname) = &::FetchSQLData();
-
- # Get the email address of the Bugzilla maintainer.
- my $maintainer = Param('maintainer');
-
- my $template = $::template;
- my $vars = $::vars;
-
- $vars->{'emailaddress'} = $loginname . Param('emailsuffix');
- $vars->{'maintainer'} = $maintainer;
- $vars->{'remoteaddress'} = $::ENV{'REMOTE_ADDR'};
- $vars->{'token'} = $token;
- $vars->{'tokentype'} = $tokentype;
- $vars->{'issuedate'} = $issuedate;
- $vars->{'eventdata'} = $eventdata;
- $vars->{'cancelaction'} = $cancelaction;
-
- # Notify the user via email about the cancellation.
-
- my $message;
- $template->process("account/cancel-token.txt.tmpl", $vars, \$message)
- || ThrowTemplateError($template->error());
-
- open SENDMAIL, "|/usr/lib/sendmail -t -i";
- print SENDMAIL $message;
- close SENDMAIL;
-
- # Delete the token from the database.
- &::SendSQL("LOCK TABLES tokens WRITE");
- &::SendSQL("DELETE FROM tokens WHERE token = $quotedtoken");
- &::SendSQL("UNLOCK TABLES");
-}
-
-sub DeletePasswordTokens {
- my ($userid, $reason) = @_;
-
- my $dbh = Bugzilla->dbh;
- my $sth = $dbh->prepare("SELECT token " .
- "FROM tokens " .
- "WHERE userid=? AND tokentype='password'");
- $sth->execute($userid);
- while (my $token = $sth->fetchrow_array) {
- Token::Cancel($token, $reason);
- }
-}
-
-sub HasEmailChangeToken {
- # Returns an email change token if the user has one.
-
- my ($userid) = @_;
-
- &::SendSQL("SELECT token FROM tokens WHERE userid = $userid " .
- "AND (tokentype = 'emailnew' OR tokentype = 'emailold') " .
- "LIMIT 1");
- my ($token) = &::FetchSQLData();
-
- return $token;
-}
-
-
-1;
diff --git a/checksetup.pl b/checksetup.pl
index c14339f9a..e2daba47e 100755
--- a/checksetup.pl
+++ b/checksetup.pl
@@ -1348,7 +1348,6 @@ if ($^O !~ /MSWin32/i) {
fixPerms('css', $<, $webservergid, 027, 1);
fixPerms('js', $<, $webservergid, 027, 1);
chmod 0644, 'globals.pl';
- chmod 0644, 'RelationSet.pm';
# Don't use fixPerms here, because it won't change perms on the directory
# unless its using recursion
diff --git a/globals.pl b/globals.pl
index cdb61cd66..399482caa 100644
--- a/globals.pl
+++ b/globals.pl
@@ -74,7 +74,7 @@ use DBI;
use Date::Format; # For time2str().
use Date::Parse; # For str2time().
-use RelationSet;
+use Bugzilla::RelationSet;
# Use standard Perl libraries for cross-platform file/directory manipulation.
use File::Spec;
@@ -354,8 +354,8 @@ sub GetVersionTable {
$mtime = 0;
}
if (time() - $mtime > 3600) {
- use Token;
- Token::CleanTokenTable() if Bugzilla->dbwritesallowed;
+ use Bugzilla::Token;
+ Bugzilla::Token::CleanTokenTable() if Bugzilla->dbwritesallowed;
GenerateVersionTable();
}
require "$datadir/versioncache";
diff --git a/move.pl b/move.pl
index d08830b2b..b4d47a40f 100755
--- a/move.pl
+++ b/move.pl
@@ -30,8 +30,8 @@ require "CGI.pl";
use vars qw($template $userid %COOKIE);
-use Bug;
use Bugzilla;
+use Bugzilla::Bug;
use Bugzilla::Config qw(:DEFAULT $datadir);
use Bugzilla::BugMail;
@@ -106,7 +106,7 @@ my @bugs;
print "<P>\n";
foreach my $id (split(/:/, $::FORM{'buglist'})) {
- my $bug = new Bug($id, $::userid);
+ my $bug = new Bugzilla::Bug($id, $::userid);
push @bugs, $bug;
if (!$bug->error) {
my $exporterid = DBNameToIdAndCheck($exporter);
@@ -155,7 +155,7 @@ $from =~ s/@/\@/;
$msg .= "From: Bugzilla <" . $from . ">\n";
$msg .= "Subject: Moving bug(s) $buglist\n\n";
-my @fieldlist = (Bug::fields(), 'group', 'long_desc', 'attachment');
+my @fieldlist = (Bugzilla::Bug::fields(), 'group', 'long_desc', 'attachment');
my %displayfields;
foreach (@fieldlist) {
$displayfields{$_} = 1;
diff --git a/post_bug.cgi b/post_bug.cgi
index dbc102d3e..d6fda9b3b 100755
--- a/post_bug.cgi
+++ b/post_bug.cgi
@@ -30,7 +30,7 @@ use Bugzilla;
use Bugzilla::Constants;
require "CGI.pl";
-use Bug;
+use Bugzilla::Bug;
use Bugzilla::User;
@@ -478,7 +478,7 @@ if (defined $::FORM{'qa_contact'}) {
}
$vars->{'id'} = $id;
-my $bug = new Bug($id, $::userid);
+my $bug = new Bugzilla::Bug($id, $::userid);
$vars->{'bug'} = $bug;
ThrowCodeError("bug_error", { bug => $bug }) if $bug->error;
diff --git a/process_bug.cgi b/process_bug.cgi
index d81f866e5..774883a9c 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -35,10 +35,9 @@ use Bugzilla;
use Bugzilla::Constants;
require "CGI.pl";
-use Bug;
+use Bugzilla::Bug;
use Bugzilla::User;
-
-use RelationSet;
+use Bugzilla::RelationSet;
# Use the Flag module to modify flag data if the user set flags.
use Bugzilla::Flag;
@@ -330,8 +329,8 @@ my $qacontactid;
# CheckCanChangeField() defines what users are allowed to change what bugs. You
# can add code here for site-specific policy changes, according to the
# instructions given in the Bugzilla Guide and below. Note that you may also
-# have to update the Bug::user() function to give people access to the options
-# that they are permitted to change.
+# have to update the Bugzilla::Bug::user() function to give people access to the
+# options that they are permitted to change.
#
# CheckCanChangeField() should return true if the user is allowed to change this
# field, and false if they are not.
@@ -1752,7 +1751,7 @@ foreach my $id (@idlist) {
# now show the next bug
if ($next_bug) {
if (detaint_natural($next_bug) && CanSeeBug($next_bug, $::userid)) {
- my $bug = new Bug($next_bug, $::userid);
+ my $bug = new Bugzilla::Bug($next_bug, $::userid);
ThrowCodeError("bug_error", { bug => $bug }) if $bug->error;
# next.html.tmpl includes edit.html.tmpl, and therefore we
diff --git a/show_bug.cgi b/show_bug.cgi
index c7a780404..6d971bbfc 100755
--- a/show_bug.cgi
+++ b/show_bug.cgi
@@ -32,7 +32,7 @@ ConnectToDatabase();
use vars qw($template $vars $userid);
-use Bug;
+use Bugzilla::Bug;
my $cgi = Bugzilla->cgi;
@@ -65,10 +65,10 @@ if ($single) {
# Its a bit silly to do the validation twice - that functionality should
# probably move into Bug.pm at some point
ValidateBugID($id);
- push @bugs, new Bug($id, $userid);
+ push @bugs, new Bugzilla::Bug($id, $userid);
} else {
foreach my $id ($cgi->param('id')) {
- my $bug = new Bug($id, $userid);
+ my $bug = new Bugzilla::Bug($id, $userid);
push @bugs, $bug;
}
}
@@ -93,7 +93,7 @@ $vars->{'bug_list'} = \@bug_list;
# If no explicit list is defined, we show all fields. We then exclude any
# on the exclusion list. This is so you can say e.g. "Everything except
# attachments" without listing almost all the fields.
-my @fieldlist = (Bug::fields(), 'group', 'long_desc', 'attachment');
+my @fieldlist = (Bugzilla::Bug::fields(), 'group', 'long_desc', 'attachment');
my %displayfields;
if ($cgi->param("field")) {
diff --git a/token.cgi b/token.cgi
index b02a932d7..f91889009 100755
--- a/token.cgi
+++ b/token.cgi
@@ -41,9 +41,9 @@ require "CGI.pl";
ConnectToDatabase();
quietly_check_login('permit_anonymous');
-# Use the "Token" module that contains functions for doing various
+# Use the "Bugzilla::Token" module that contains functions for doing various
# token-related tasks.
-use Token;
+use Bugzilla::Token;
use Bugzilla::User;
@@ -72,7 +72,7 @@ if ($cgi->param('t')) {
}
- Token::CleanTokenTable();
+ Bugzilla::Token::CleanTokenTable();
# Make sure the token exists in the database.
SendSQL( "SELECT tokentype FROM tokens WHERE token = $::quotedtoken" );
@@ -80,17 +80,17 @@ if ($cgi->param('t')) {
# Make sure the token is the correct type for the action being taken.
if ( grep($::action eq $_ , qw(cfmpw cxlpw chgpw)) && $tokentype ne 'password' ) {
- Token::Cancel($::token, "wrong_token_for_changing_passwd");
+ Bugzilla::Token::Cancel($::token, "wrong_token_for_changing_passwd");
ThrowUserError("wrong_token_for_changing_passwd");
}
if ( ($::action eq 'cxlem')
&& (($tokentype ne 'emailold') && ($tokentype ne 'emailnew')) ) {
- Token::Cancel($::token, "wrong_token_for_cancelling_email_change");
+ Bugzilla::Token::Cancel($::token, "wrong_token_for_cancelling_email_change");
ThrowUserError("wrong_token_for_cancelling_email_change");
}
if ( grep($::action eq $_ , qw(cfmem chgem))
&& ($tokentype ne 'emailnew') ) {
- Token::Cancel($::token, "wrong_token_for_confirming_email_change");
+ Bugzilla::Token::Cancel($::token, "wrong_token_for_confirming_email_change");
ThrowUserError("wrong_token_for_confirming_email_change");
}
}
@@ -176,7 +176,7 @@ sub confirmChangePassword {
sub cancelChangePassword {
$vars->{'message'} = "password_change_canceled";
- Token::Cancel($::token, $vars->{'message'});
+ Bugzilla::Token::Cancel($::token, $vars->{'message'});
print $cgi->header();
$template->process("global/message.html.tmpl", $vars)
@@ -308,7 +308,7 @@ sub cancelChangeEmail {
$vars->{'old_email'} = $old_email;
$vars->{'new_email'} = $new_email;
- Token::Cancel($::token, $vars->{'message'});
+ Bugzilla::Token::Cancel($::token, $vars->{'message'});
SendSQL("LOCK TABLES tokens WRITE");
SendSQL("DELETE FROM tokens
diff --git a/userprefs.cgi b/userprefs.cgi
index f2b9445ed..5466c80cc 100755
--- a/userprefs.cgi
+++ b/userprefs.cgi
@@ -29,7 +29,7 @@ use Bugzilla;
require "CGI.pl";
-use RelationSet;
+use Bugzilla::RelationSet;
# Use global template variables.
use vars qw($template $vars $userid);
@@ -121,9 +121,9 @@ sub SaveAccount {
$cgi->param('Bugzilla_password')
|| ThrowCodeError("old_password_required");
- use Token;
+ use Bugzilla::Token;
# Block multiple email changes for the same user.
- if (Token::HasEmailChangeToken($userid)) {
+ if (Bugzilla::Token::HasEmailChangeToken($userid)) {
ThrowUserError("email_change_in_progress");
}
@@ -133,7 +133,7 @@ sub SaveAccount {
ValidateNewUser($new_login_name)
|| ThrowUserError("account_exists", {email => $new_login_name});
- Token::IssueEmailChangeToken($userid,$old_login_name,
+ Bugzilla::Token::IssueEmailChangeToken($userid,$old_login_name,
$new_login_name);
$vars->{'email_changes_saved'} = 1;
@@ -148,7 +148,7 @@ sub SaveAccount {
sub DoEmail {
if (Param("supportwatchers")) {
- my $watcheduserSet = new RelationSet;
+ my $watcheduserSet = new Bugzilla::RelationSet;
$watcheduserSet->mergeFromDB("SELECT watched FROM watch WHERE" .
" watcher=$userid");
$vars->{'watchedusers'} = $watcheduserSet->toString();
@@ -246,12 +246,12 @@ sub SaveEmail {
SendSQL("LOCK TABLES watch WRITE, profiles READ");
# what the db looks like now
- my $origWatchedUsers = new RelationSet;
+ my $origWatchedUsers = new Bugzilla::RelationSet;
$origWatchedUsers->mergeFromDB("SELECT watched FROM watch WHERE" .
" watcher=$userid");
# Update the database to look like the form
- my $newWatchedUsers = new RelationSet($cgi->param('watchedusers'));
+ my $newWatchedUsers = new Bugzilla::RelationSet($cgi->param('watchedusers'));
my @CCDELTAS = $origWatchedUsers->generateSqlDeltas(
$newWatchedUsers,
"watch",