blob: 796c1ad3bfa9fcd1976e4bbcf202f378ed7d679f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
# -*- 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 GuidedBugEntry Bugzilla Extension.
#
# The Initial Developer of the Original Code is the Mozilla Foundation
# Portions created by the Initial Developer are Copyright (C) 2011 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Byron Jones <glob@mozilla.com>
package Bugzilla::Extension::GuidedBugEntry;
use strict;
use base qw(Bugzilla::Extension);
use Bugzilla::Token;
use Bugzilla::Error;
use Bugzilla::Status;
use Bugzilla::Util 'url_quote';
use Bugzilla::UserAgent;
our $VERSION = '1';
sub enter_bug_start {
my ($self, $args) = @_;
my $vars = $args->{vars};
my $template = Bugzilla->template;
my $cgi = Bugzilla->cgi;
my $user = Bugzilla->user;
# hack for skipping old guided code when enabled
$vars->{'disable_guided'} = 1;
# force guided format for new users
my $format = $cgi->param('format') || '';
if (
$format eq 'guided' ||
(
$format eq '' &&
!$user->in_group('canconfirm')
)
) {
# skip the first step if a product is provided
if ($cgi->param('product')) {
print $cgi->redirect('enter_bug.cgi?format=guided#h=dupes|' .
url_quote($cgi->param('product')));
exit;
}
$self->_init_vars($vars);
print $cgi->header();
$template->process('guided/guided.html.tmpl', $vars)
|| ThrowTemplateError($template->error());
exit;
}
# we use the __default__ format to bypass the guided entry
# it isn't understood upstream, so remove it once a product
# has been selected.
if (
($cgi->param('format') && $cgi->param('format') eq "__default__")
&& ($cgi->param('product') && $cgi->param('product') ne '')
) {
$cgi->delete('format')
}
}
sub _init_vars {
my ($self, $vars) = @_;
my $user = Bugzilla->user;
my @enterable_products = @{$user->get_enterable_products};
ThrowUserError('no_products') unless scalar(@enterable_products);
my @classifications = ({object => undef, products => \@enterable_products});
my $class;
foreach my $product (@enterable_products) {
$class->{$product->classification_id}->{'object'} ||=
new Bugzilla::Classification($product->classification_id);
push(@{$class->{$product->classification_id}->{'products'}}, $product);
}
@classifications =
sort {
$a->{'object'}->sortkey <=> $b->{'object'}->sortkey
|| lc($a->{'object'}->name) cmp lc($b->{'object'}->name)
} (values %$class);
$vars->{'classifications'} = \@classifications;
my @open_states = BUG_STATE_OPEN();
$vars->{'open_states'} = \@open_states;
$vars->{'token'} = issue_session_token('create_bug');
$vars->{'platform'} = detect_platform();
$vars->{'op_sys'} = detect_op_sys();
}
sub page_before_template {
my ($self, $args) = @_;
my $page = $args->{'page_id'};
my $vars = $args->{'vars'};
return unless $page eq 'guided_products.js';
# import product -> security group mappings from the BMO ext
our %product_sec_groups;
eval q#use Bugzilla::Extension::BMO::Data '%product_sec_groups'#;
return if $@;
$vars->{'products'} = \%product_sec_groups;
}
__PACKAGE__->NAME;
|