/lib/mail/Attachment.php
PHP | 225 lines | 107 code | 21 blank | 97 comment | 9 complexity | c968420a139108758845e6bfece544d5 MD5 | raw file
Possible License(s): MIT, LGPL-3.0
- <?php
- /**
- * This helper builds the Attachment object for a /mail/send API call
- */
- namespace SendGrid\Mail;
- use SendGrid\Helper\Assert;
- /**
- * This class is used to construct a Attachment object for the /mail/send API call
- *
- * @package SendGrid\Mail
- */
- class Attachment implements \JsonSerializable
- {
- /** @var $content string Base64 encoded content */
- private $content;
- /** @var $type string Mime type of the attachment */
- private $type;
- /** @var $filename string File name of the attachment */
- private $filename;
- /** @var $disposition string How the attachment should be displayed: inline or attachment, default is attachment */
- private $disposition;
- /** @var $content_id string Used when disposition is inline to display the file within the body of the email */
- private $content_id;
- /**
- * Optional constructor
- *
- * @param string $content Base64 encoded content
- * @param string $type Mime type of the attachment
- * @param string $filename File name of the attachment
- * @param string $disposition How the attachment should be displayed: inline
- * or attachment, default is attachment
- * @param string $content_id Used when disposition is inline to display the
- * file within the body of the email
- * @throws \SendGrid\Mail\TypeException
- */
- public function __construct(
- $content = null,
- $type = null,
- $filename = null,
- $disposition = null,
- $content_id = null
- ) {
- if (isset($content)) {
- $this->setContent($content);
- }
- if (isset($type)) {
- $this->setType($type);
- }
- if (isset($filename)) {
- $this->setFilename($filename);
- }
- if (isset($disposition)) {
- $this->setDisposition($disposition);
- }
- if (isset($content_id)) {
- $this->setContentID($content_id);
- }
- }
- /**
- * Add the content to a Attachment object
- *
- * @param string $content Base64 encoded content
- *
- * @throws \SendGrid\Mail\TypeException
- */
- public function setContent($content)
- {
- Assert::minLength($content, 'content', 1);
- if (!$this->isBase64($content)) {
- $this->content = base64_encode($content);
- } else {
- $this->content = $content;
- }
- }
- /**
- * Retrieve the content from a Attachment object
- *
- * @return string
- */
- public function getContent()
- {
- return $this->content;
- }
- /**
- * Add the mime type to a Attachment object
- *
- * @param string $type Mime type of the attachment
- *
- * @throws \SendGrid\Mail\TypeException
- */
- public function setType($type)
- {
- Assert::minLength($type, 'type', 1);
- $this->type = $type;
- }
- /**
- * Retrieve the mime type from a Attachment object
- *
- * @return string
- */
- public function getType()
- {
- return $this->type;
- }
- /**
- * Add the file name to a Attachment object
- *
- * @param string $filename File name of the attachment
- *
- * @throws \SendGrid\Mail\TypeException
- */
- public function setFilename($filename)
- {
- Assert::string($filename, 'filename');
- $this->filename = $filename;
- }
- /**
- * Retrieve the file name from a Attachment object
- *
- * @return string
- */
- public function getFilename()
- {
- return $this->filename;
- }
- /**
- * Add the disposition to a Attachment object
- *
- * @param string $disposition How the attachment should be displayed:
- * inline or attachment, default is attachment
- *
- * @throws \SendGrid\Mail\TypeException
- */
- public function setDisposition($disposition)
- {
- Assert::anyOf($disposition, 'disposition', ['inline', 'attachment']);
- $this->disposition = $disposition;
- }
- /**
- * Retrieve the disposition from a Attachment object
- *
- * @return string
- */
- public function getDisposition()
- {
- return $this->disposition;
- }
- /**
- * Add the content id to a Attachment object
- *
- * @param string $content_id Used when disposition is inline to display
- * the file within the body of the email
- * @throws \SendGrid\Mail\TypeException
- */
- public function setContentID($content_id)
- {
- Assert::string($content_id, 'content_id');
- $this->content_id = $content_id;
- }
- /**
- * Retrieve the content id from a Attachment object
- *
- * @return string
- */
- public function getContentID()
- {
- return $this->content_id;
- }
- /**
- * Verifies whether or not the provided string is a valid base64 string
- *
- * @param $string string The string that has to be checked
- * @return bool
- */
- private function isBase64($string)
- {
- $decoded_data = base64_decode($string, true);
- $encoded_data = base64_encode($decoded_data);
- if ($encoded_data != $string) {
- return false;
- }
- return true;
- }
- /**
- * Return an array representing a Attachment object for the Twilio SendGrid API
- *
- * @return null|array
- */
- public function jsonSerialize()
- {
- return array_filter(
- [
- 'content' => $this->getContent(),
- 'type' => $this->getType(),
- 'filename' => $this->getFilename(),
- 'disposition' => $this->getDisposition(),
- 'content_id' => $this->getContentID()
- ],
- function ($value) {
- return $value !== null;
- }
- ) ?: null;
- }
- }