summaryrefslogtreecommitdiffstats
path: root/xt/extensions/QA/Extension.pm
blob: 2259cfecc8c7277b8dc99bf0fd84445ad1eef65f (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
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This Source Code Form is "Incompatible With Secondary Licenses", as
# defined by the Mozilla Public License, v. 2.0.

package Bugzilla::Extension::QA;

use 5.14.0;
use strict;
use warnings;

use parent qw(Bugzilla::Extension);

use Bugzilla::Extension::QA::Util;
use Bugzilla::Constants;
use Bugzilla::Error;
use Bugzilla::Util;
use Bugzilla::Bug;
use Bugzilla::User;

our $VERSION = '1.0';

sub page_before_template {
    my ($self, $args) = @_;
    return if $args->{page_id} ne 'qa/email_in.html';

    my $template = Bugzilla->template;
    my $cgi = Bugzilla->cgi;
    print $cgi->header;

    # Needed to make sure he can access and edit bugs.
    my $user = Bugzilla::User->check(scalar $cgi->param('sender'));
    Bugzilla->set_user($user);

    my ($output, $tmpl_file);
    my $action = $cgi->param('action') || '';
    my $vars = { sender => $user, action => $action, pid => $$ };

    if ($action eq 'create') {
        $tmpl_file = 'qa/create_bug.txt.tmpl';
    }
    elsif ($action eq 'create_with_headers') {
        $tmpl_file = 'qa/create_bug_with_headers.txt.tmpl';
    }
    elsif ($action =~ /^update(_with_headers)?$/) {
        my $f = $1 || '';
        $tmpl_file = "qa/update_bug$f.txt.tmpl";
        my $bug = Bugzilla::Bug->check(scalar $cgi->param('bug_id'));
        $vars->{bug_id} = $bug->id;
    }
    else {
        ThrowUserError('unknown_action', { action => $action });
    }

    $template->process($tmpl_file, $vars, \$output)
      or ThrowTemplateError($template->error());

    my $file = "/tmp/email_in_$$.txt";
    open(FH, '>', $file);
    print FH $output;
    close FH;

    $output = `email_in.pl -v < $file 2>&1`;
    unlink $file;

    parse_output($output, $vars);

    $template->process('qa/results.html.tmpl', $vars)
      or ThrowTemplateError($template->error());
}

__PACKAGE__->NAME;