barbushin/php-imap

View on GitHub
src/PhpImap/IncomingMailAttachment.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
 
declare(strict_types=1);
 
namespace PhpImap;
 
use const FILEINFO_NONE;
use finfo;
use UnexpectedValueException;
 
/**
* @see https://github.com/barbushin/php-imap
*
* @author Barbushin Sergey http://linkedin.com/in/barbushin
*
* @property string|false|null $filePath lazy attachment data file
*
* @psalm-type fileinfoconst = 0|2|16|1024|1040|8|32|128|256|16777216
*/
class IncomingMailAttachment
{
/** @var string|null */
public $id;
 
/** @var string|null */
public $contentId;
 
/** @var int|null */
public $type;
 
/** @var int|null */
public $encoding;
 
/** @var string|null */
public $subtype;
 
/** @var string|null */
public $description;
 
/** @var string|null */
public $name;
 
/** @var int|null */
public $sizeInBytes;
 
/** @var string|null */
public $disposition;
 
/** @var string|null */
public $charset;
 
/** @var bool|null */
public $emlOrigin;
 
/** @var string|null */
public $fileInfoRaw;
 
/** @var string|null */
public $fileInfo;
 
/** @var string|null */
public $mime;
 
/** @var string|null */
public $mimeEncoding;
 
/** @var string|null */
public $fileExtension;
 
/** @var string|null */
public $mimeType;
 
/** @var string|null */
private $file_path;
 
/** @var DataPartInfo|null */
private $dataInfo;
 
/** @var string|null */
private $filePath;
 
/**
* @return false|string
*/
public function __get(string $name)
{
if ('filePath' !== $name) {
\trigger_error("Undefined property: IncomingMailAttachment::$name");
}
 
if (!isset($this->file_path)) {
return false;
}
 
$this->filePath = $this->file_path;
 
if (@\file_exists($this->file_path)) {
return $this->filePath;
}
 
return $this->filePath;
}
 
/**
* Sets the file path.
*
* @param string $filePath File path incl. file name and optional extension
*/
public function setFilePath(string $filePath): void
{
$this->file_path = $filePath;
}
 
/**
* Sets the data part info.
*
* @param DataPartInfo $dataInfo Date info (file content)
*/
public function addDataPartInfo(DataPartInfo $dataInfo): void
{
$this->dataInfo = $dataInfo;
}
 
/**
* Gets information about a file.
*
* @param int $fileinfo_const Any predefined constant. See https://www.php.net/manual/en/fileinfo.constants.php
*
* @psalm-param fileinfoconst $fileinfo_const
*/
public function getFileInfo(int $fileinfo_const = FILEINFO_NONE): string
{
$finfo = new finfo($fileinfo_const);
 
return $finfo->buffer($this->getContents());
}
 
/**
* Gets the file content.
*/
public function getContents(): string
{
if (null === $this->dataInfo) {
throw new UnexpectedValueException(static::class.'::$dataInfo has not been set by calling '.self::class.'::addDataPartInfo()');
}
 
return $this->dataInfo->fetch();
}
 
/**
* Saves the attachment object on the disk.
*
* @return bool True, if it could save the attachment on the disk
*/
public function saveToDisk(): bool
{
if (null === $this->dataInfo) {
return false;
}
 
if (false === \file_put_contents($this->__get('filePath'), $this->dataInfo->fetch())) {
unset($this->filePath, $this->file_path);
 
return false;
}
 
return true;
}
}