diff options
Diffstat (limited to 'bug_form.pl')
-rw-r--r-- | bug_form.pl | 398 |
1 files changed, 0 insertions, 398 deletions
diff --git a/bug_form.pl b/bug_form.pl deleted file mode 100644 index b4a2ef678..000000000 --- a/bug_form.pl +++ /dev/null @@ -1,398 +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> -# Dave Miller <justdave@syndicomm.com> -# Vaskin Kissoyan <vkissoyan@yahoo.com> - -use strict; - -use RelationSet; -use Bugzilla::Constants; -# Use the Attachment module to display attachments for the bug. -use Attachment; - -# Use the Flag modules to display flags on the bug. -use Bugzilla::Flag; -use Bugzilla::FlagType; - -sub show_bug { - # Shut up misguided -w warnings about "used only once". For some reason, - # "use vars" chokes on me when I try it here. - sub bug_form_pl_sillyness { - my $zz; - $zz = %::FORM; - $zz = %::proddesc; - $zz = %::prodmaxvotes; - $zz = @::enterable_products; - $zz = @::settable_resolution; - $zz = $::unconfirmedstate; - $zz = $::milestoneurl; - $zz = $::template; - $zz = $::vars; - $zz = @::legal_priority; - $zz = @::legal_platform; - $zz = @::legal_severity; - $zz = @::legal_bug_status; - $zz = @::target_milestone; - $zz = @::components; - $zz = @::legal_keywords; - $zz = @::versions; - $zz = @::legal_opsys; - } - - # Use templates - my $template = $::template; - my $vars = $::vars; - - $vars->{'GetBugLink'} = \&GetBugLink; - $vars->{'lsearch'} = \&lsearch, - $vars->{'header_done'} = (@_), - - quietly_check_login(); - - my $id = $::FORM{'id'}; - - if (!defined($id)) { - $template->process("bug/choose.html.tmpl", $vars) - || ThrowTemplateError($template->error()); - exit; - } - - my %user = %{$vars->{'user'}}; - my %bug; - - # Populate the bug hash with the info we get directly from the DB. - 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, sum(votes.count), - estimated_time, remaining_time - FROM bugs LEFT JOIN votes USING(bug_id), products, components - WHERE bugs.bug_id = $id - AND bugs.product_id = products.id - AND bugs.component_id = components.id - GROUP BY bugs.bug_id"; - - SendSQL($query); - - # The caller is meant to have checked this. Abort here so that - # we don't get obscure SQL errors, below - if (!MoreSQLData()) { - $vars->{'bug_id'} = $id; - ThrowCodeError("no_bug_data"); - } - - my $value; - my $disp_date; - my @row = FetchSQLData(); - 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", - "estimated_time", "remaining_time") - { - $value = shift(@row); - $bug{$field} = defined($value) ? $value : ""; - } - - # General arrays of info about the database state - GetVersionTable(); - - # Fiddle the product list. - my $seen_curr_prod; - my @prodlist; - - foreach my $product (@::enterable_products) { - if ($product eq $bug{'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, $bug{'product'}); - @prodlist = sort @prodlist; - } - - $vars->{'product'} = \@prodlist; - $vars->{'rep_platform'} = \@::legal_platform; - $vars->{'priority'} = \@::legal_priority; - $vars->{'bug_severity'} = \@::legal_severity; - $vars->{'op_sys'} = \@::legal_opsys; - $vars->{'bug_status'} = \@::legal_bug_status; - - # Hack - this array contains "" for some reason. See bug 106589. - shift @::settable_resolution; - $vars->{'resolution'} = \@::settable_resolution; - - $vars->{'component_'} = $::components{$bug{'product'}}; - $vars->{'version'} = $::versions{$bug{'product'}}; - $vars->{'target_milestone'} = $::target_milestone{$bug{'product'}}; - $bug{'milestoneurl'} = $::milestoneurl{$bug{'product'}} || - "notargetmilestone.html"; - - $vars->{'use_votes'} = Param('usevotes') - && $::prodmaxvotes{$bug{'product'}} > 0; - - # Add additional, calculated fields to the bug hash - if (@::legal_keywords) { - $vars->{'use_keywords'} = 1; - - SendSQL("SELECT keyworddefs.name - FROM keyworddefs, keywords - WHERE keywords.bug_id = $id - AND keyworddefs.id = keywords.keywordid - ORDER BY keyworddefs.name"); - my @keywords; - while (MoreSQLData()) { - push(@keywords, FetchOneColumn()); - } - - $bug{'keywords'} = \@keywords; - } - - # Attachments - $bug{'attachments'} = Attachment::query($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' => $bug{'product_id'}, - 'component_id' => $bug{'component_id'} }); - foreach my $flag_type (@$flag_types) { - $flag_type->{'flags'} = - Bugzilla::Flag::match({ 'bug_id' => $id , - 'type_id' => $flag_type->{'id'} , - 'target_type' => 'bug' }); - } - $vars->{'flag_types'} = $flag_types; - $vars->{'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' => $bug{'product_id'}, - 'component_id' => $bug{'component_id'}, - 'is_active' => 1 }); - my $num_attachment_flags = - Bugzilla::Flag::count({ 'target_type' => 'attachment', - 'bug_id' => $id }); - - $vars->{'show_attachment_flags'} - = $num_attachment_flag_types || $num_attachment_flags; - - # Dependencies - my @list; - SendSQL("SELECT dependson FROM dependencies WHERE - blocked = $id ORDER BY dependson"); - while (MoreSQLData()) { - my ($i) = FetchSQLData(); - push(@list, $i); - } - - if (UserInGroup(Param("timetrackinggroup"))) { - - SendSQL("SELECT SUM(work_time) - FROM longdescs WHERE longdescs.bug_id=$id"); - $bug{'actual_time'} = FetchSQLData(); - - } - - $bug{'dependson'} = \@list; - - my @list2; - SendSQL("SELECT blocked FROM dependencies WHERE - dependson = $id ORDER BY blocked"); - while (MoreSQLData()) { - my ($i) = FetchSQLData(); - push(@list2, $i); - } - - $bug{'blocked'} = \@list2; - - # Groups - my @groups; - - # 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 = $bug{'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 = " . $bug{'product_id'} . - " WHERE isbuggroup"); - - $user{'inallgroups'} = 1; - - while (MoreSQLData()) { - my ($groupid, $name, $description, $ison, $ingroup, $isactive, - $membercontrol, $othercontrol) = FetchSQLData(); - - $bug{'inagroup'} = 1 if ($ison); - $membercontrol ||= 0; - - if ($isactive && ($membercontrol == CONTROLMAPMANDATORY)) { - $bug{'inagroup'} = 1; - } - # For product groups, we only want to display the checkbox 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)) - )) - { - $user{'inallgroups'} &= $ingroup; - - my $mandatory; - if ($isactive && ($membercontrol == CONTROLMAPMANDATORY)) { - $mandatory = 1; - } else { - $mandatory = 0; - } - if (($ison) || ($ingroup)) { - push (@groups, { "bit" => $groupid, - "ison" => $ison, - "ingroup" => $ingroup, - "mandatory" => $mandatory, - "description" => $description }); - } - } - } - - # If the bug is restricted to a group, get flags that allow - # the user to set whether or not the reporter - # and cc list can see the bug even if they are not members of all - # groups to which the bug is restricted. - if ($bug{'inagroup'}) { - - # Determine whether or not the bug is always accessible by the - # reporter, QA contact, and/or users on the cc: list. - SendSQL("SELECT reporter_accessible, cclist_accessible - FROM bugs - WHERE bug_id = $id - "); - ($bug{'reporter_accessible'}, - $bug{'cclist_accessible'}) = FetchSQLData(); - } - $vars->{'groups'} = \@groups; - - my $movers = Param("movers"); - $user{'canmove'} = Param("move-enabled") - && (defined $::COOKIE{"Bugzilla_login"}) - && ($::COOKIE{"Bugzilla_login"} =~ /$movers/); - - # User permissions - - # 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. - $user{'canedit'} = $::userid == 0 - || $::userid == $bug{'reporter'} - || $::userid == $bug{'qa_contact'} - || $::userid == $bug{'assigned_to'} - || UserInGroup("editbugs"); - $user{'canconfirm'} = ($::userid == 0) - || UserInGroup("canconfirm") - || UserInGroup("editbugs"); - - # Bug states - $bug{'isunconfirmed'} = ($bug{'bug_status'} eq $::unconfirmedstate); - $bug{'isopened'} = IsOpenedState($bug{'bug_status'}); - - # People involved with the bug - $bug{'assigned_to_email'} = DBID_to_name($bug{'assigned_to'}); - $bug{'assigned_to'} = DBID_to_real_or_loginname($bug{'assigned_to'}); - $bug{'reporter'} = DBID_to_real_or_loginname($bug{'reporter'}); - $bug{'qa_contact'} = $bug{'qa_contact'} > 0 ? - DBID_to_name($bug{'qa_contact'}) : ""; - - my $ccset = new RelationSet; - $ccset->mergeFromDB("SELECT who FROM cc WHERE bug_id=$id"); - - my @cc = $ccset->toArrayOfStrings(); - $bug{'cc'} = \@cc if $cc[0]; - - # Next bug in list (if there is one) - my @bug_list; - if ($::COOKIE{"BUGLIST"} && $id) - { - @bug_list = split(/:/, $::COOKIE{"BUGLIST"}); - } - $vars->{'bug_list'} = \@bug_list; - - $bug{'comments'} = GetComments($bug{'bug_id'}); - - # This is length in number of comments - $bug{'longdesclength'} = scalar(@{$bug{'comments'}}); - - # Add the bug and user hashes to the variables - $vars->{'bug'} = \%bug; - $vars->{'user'} = \%user; - - # Generate and return the UI (HTML page) from the appropriate template. - $template->process("bug/edit.html.tmpl", $vars) - || ThrowTemplateError($template->error()); -} - -1; - |