aboutsummaryrefslogtreecommitdiff
path: root/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php
blob: 25ef68b3a55168d4e7a4821739683f41f07288f2 (plain) (blame)
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?php

/*
 * This file is part of SwiftMailer.
 * (c) 2004-2009 Chris Corbyn
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

//@require 'Swift/Mime/SimpleMimeEntity.php';
//@require 'Swift/Mime/ContentEncoder.php';
//@require 'Swift/Mime/HeaderSet.php';
//@require 'Swift/FileStream.php';
//@require 'Swift/KeyCache.php';

/**
 * An attachment, in a multipart message.
 * @package Swift
 * @subpackage Mime
 * @author Chris Corbyn
 */
class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity
{
  
  /** Recognized MIME types */
  private $_mimeTypes = array();
  
  /**
   * Create a new Attachment with $headers, $encoder and $cache.
   * @param Swift_Mime_HeaderSet $headers
   * @param Swift_Mime_ContentEncoder $encoder
   * @param Swift_KeyCache $cache
   * @param array $mimeTypes optional
   */
  public function __construct(Swift_Mime_HeaderSet $headers,
    Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache,
    $mimeTypes = array())
  {
    parent::__construct($headers, $encoder, $cache);
    $this->setDisposition('attachment');
    $this->setContentType('application/octet-stream');
    $this->_mimeTypes = $mimeTypes;
  }
  
  /**
   * Get the nesting level used for this attachment.
   * Always returns {@link LEVEL_MIXED}.
   * @return int
   */
  public function getNestingLevel()
  {
    return self::LEVEL_MIXED;
  }
  
  /**
   * Get the Content-Disposition of this attachment.
   * By default attachments have a disposition of "attachment".
   * @return string
   */
  public function getDisposition()
  {
    return $this->_getHeaderFieldModel('Content-Disposition');
  }
  
  /**
   * Set the Content-Disposition of this attachment.
   * @param string $disposition
   */
  public function setDisposition($disposition)
  {
    if (!$this->_setHeaderFieldModel('Content-Disposition', $disposition))
    {
      $this->getHeaders()->addParameterizedHeader(
        'Content-Disposition', $disposition
        );
    }
    return $this;
  }
  
  /**
   * Get the filename of this attachment when downloaded.
   * @return string
   */
  public function getFilename()
  {
    return $this->_getHeaderParameter('Content-Disposition', 'filename');
  }
  
  /**
   * Set the filename of this attachment.
   * @param string $filename
   */
  public function setFilename($filename)
  {
    $this->_setHeaderParameter('Content-Disposition', 'filename', $filename);
    $this->_setHeaderParameter('Content-Type', 'name', $filename);
    return $this;
  }
  
  /**
   * Get the file size of this attachment.
   * @return int
   */
  public function getSize()
  {
    return $this->_getHeaderParameter('Content-Disposition', 'size');
  }
  
  /**
   * Set the file size of this attachment.
   * @param int $size
   */
  public function setSize($size)
  {
    $this->_setHeaderParameter('Content-Disposition', 'size', $size);
    return $this;
  }
  
  /**
   * Set the file that this attachment is for.
   * @param Swift_FileStream $file
   * @param string $contentType optional
   */
  public function setFile(Swift_FileStream $file, $contentType = null)
  {
    $this->setFilename(basename($file->getPath()));
    $this->setBody($file, $contentType);
    if (!isset($contentType))
    {
      $extension = strtolower(substr(
        $file->getPath(), strrpos($file->getPath(), '.') + 1
        ));
      
      if (array_key_exists($extension, $this->_mimeTypes))
      {
        $this->setContentType($this->_mimeTypes[$extension]);
      }
    }
    return $this;
  }
  
}