summaryrefslogtreecommitdiffstats
path: root/qa/extensions/QA/Extension.pm
blob: 764bbb03bd51fe0c3be63d26bfe5abd1e86c2240 (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
# 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 strict;
use base 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($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($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;