summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Attachment.pm
blob: 15ff3a1f33961d6d582716d19bb42465aacbb97d (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
#!/usr/bonsaitools/bin/perl -w
# -*- 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 diagnostics;
use strict;

package Attachment;

# Use the template toolkit (http://www.template-toolkit.org/) to generate
# the user interface (HTML pages and mail messages) using templates in the
# "templates/" subdirectory.
use Template;

# This is the global template object that gets used one or more times by
# the script when it needs to process a template and return the results.
# Configuration parameters can be specified here that apply to all templates
# processed in this file.
my $template = Template->new(
  {
    # Colon-separated list of directories containing templates.
    INCLUDE_PATH => 'template/default' ,
    # Allow templates to be specified with relative paths.
    RELATIVE => 1 
  }
);

# This module requires that its caller have said "require CGI.pl" to import
# relevant functions from that script and its companion globals.pl.

############################################################################
# Functions
############################################################################

sub list
{
  # Displays a table of attachments for a given bug along with links for
  # viewing, editing, or making requests for each attachment.

  my ($bugid) = @_;


  # 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, creation_ts, mimetype, description, ispatch, isobsolete 
              FROM attachments WHERE bug_id = $bugid ORDER BY attach_id
            ");
  my @attachments = ();
  while (&::MoreSQLData()) {
    my %a;
    ($a{'attachid'}, $a{'date'}, $a{'mimetype'}, $a{'description'}, $a{'ispatch'}, $a{'isobsolete'}) = &::FetchSQLData();

    # Format the attachment's creation/modification date into something readable.
    if ($a{'date'} =~ /^(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/) {
        $a{'date'} = "$3/$4/$2&nbsp;$5:$6";
    }

    # Quote HTML characters (&<>) in the description so they display correctly.
    $a{'description'} = &::value_quote($a{'description'});

    # Retrieve a list of status flags that have been set on the attachment.
    &::PushGlobalSQLState();
    &::SendSQL(" 
                SELECT   name 
                FROM     attachstatuses, attachstatusdefs 
                WHERE    attach_id = $a{'attachid'} 
                AND      attachstatuses.statusid = attachstatusdefs.id
                ORDER BY sortkey
              ");
    my @statuses = ();
    while (&::MoreSQLData()) { 
      my ($status) = &::FetchSQLData(); 
      push @statuses , $status;
    }
    $a{'statuses'} = \@statuses;
    &::PopGlobalSQLState();

    push @attachments, \%a;
  }

  my $vars = 
    {
      'bugid' => $bugid , 
      'attachments' => \@attachments , 
      'Param' => \&::Param , # for retrieving global parameters
      'PerformSubsts' => \&::PerformSubsts # for processing global parameters
    };

  $template->process("attachment/list.atml", $vars)
    || &::DisplayError("Template process failed: " . $template->error())
    && exit;

}