Attachment.pm 3.6 KB
Newer Older
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
# -*- 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 strict;

package Attachment;

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

34 35 36
# Use the Flag module to handle flags.
use Bugzilla::Flag;

37 38 39 40
############################################################################
# Functions
############################################################################

41 42 43 44 45 46 47 48 49 50
sub new {
    # Returns a hash of information about the attachment with the given ID.

    my ($invocant, $id) = @_;
    return undef if !$id;
    my $self = { 'id' => $id };
    my $class = ref($invocant) || $invocant;
    bless($self, $class);
    
    &::PushGlobalSQLState();
51
    &::SendSQL("SELECT 1, description, bug_id, isprivate FROM attachments " . 
52
               "WHERE attach_id = $id");
53 54 55 56
    ($self->{'exists'},
     $self->{'summary'},
     $self->{'bug_id'},
     $self->{'isprivate'}) = &::FetchSQLData();
57 58 59 60 61
    &::PopGlobalSQLState();

    return $self;
}

62
sub query
63
{
64 65 66
  # Retrieves and returns an array of attachment records for a given bug. 
  # This data should be given to attachment/list.atml in an
  # "attachments" variable.
67 68
  my ($bugid) = @_;

69
  my $in_editbugs = &::UserInGroup("editbugs");
70 71 72 73 74
  &::SendSQL("SELECT product_id
           FROM bugs 
           WHERE bug_id = $bugid");
  my $productid = &::FetchOneColumn();
  my $caneditproduct = &::CanEditProductId($productid);
75 76 77 78

  # 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("
79 80
              SELECT attach_id, DATE_FORMAT(creation_ts, '%Y.%m.%d %H:%i'),
              mimetype, description, ispatch, isobsolete, isprivate, submitter_id
81 82 83 84 85
              FROM attachments WHERE bug_id = $bugid ORDER BY attach_id
            ");
  my @attachments = ();
  while (&::MoreSQLData()) {
    my %a;
86 87
    my $submitter_id;
    ($a{'attachid'}, $a{'date'}, $a{'contenttype'}, $a{'description'},
88 89
     $a{'ispatch'}, $a{'isobsolete'}, $a{'isprivate'}, $submitter_id) 
        = &::FetchSQLData();
90

91 92 93
    # Retrieve a list of flags for this attachment.
    $a{'flags'} = Bugzilla::Flag::match({ 'attach_id' => $a{'attachid'} });
    
94 95 96 97
    # We will display the edit link if the user can edit the attachment;
    # ie the are the submitter, or they have canedit.
    # Also show the link if the user is not logged in - in that cae,
    # They'll be prompted later
98 99
    $a{'canedit'} = ($::userid == 0 || (($submitter_id == $::userid ||
                     $in_editbugs) && $caneditproduct));
100 101
    push @attachments, \%a;
  }
102 103
  
  return \@attachments;  
104
}
105 106

1;