mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-12 03:01:32 +00:00
The official image from streamline does not currently work for the arm64 platform. As a temporary measure, the source code and docker build scripts have been lifted from the official images and are used to build locally. Some additional modifications are made to reduce overall image size, these are documented in docker/README.md
169 lines
4.5 KiB
PHP
169 lines
4.5 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Symfony\Component\Mime\Part;
|
|
|
|
use Symfony\Component\Mime\Exception\InvalidArgumentException;
|
|
use Symfony\Component\Mime\Header\Headers;
|
|
|
|
/**
|
|
* @author Fabien Potencier <fabien@symfony.com>
|
|
*/
|
|
class DataPart extends TextPart
|
|
{
|
|
/** @internal */
|
|
protected array $_parent;
|
|
|
|
private ?string $filename = null;
|
|
private string $mediaType;
|
|
private ?string $cid = null;
|
|
|
|
/**
|
|
* @param resource|string|File $body Use a File instance to defer loading the file until rendering
|
|
*/
|
|
public function __construct($body, ?string $filename = null, ?string $contentType = null, ?string $encoding = null)
|
|
{
|
|
if ($body instanceof File && !$filename) {
|
|
$filename = $body->getFilename();
|
|
}
|
|
|
|
$contentType ??= $body instanceof File ? $body->getContentType() : 'application/octet-stream';
|
|
[$this->mediaType, $subtype] = explode('/', $contentType);
|
|
|
|
parent::__construct($body, null, $subtype, $encoding);
|
|
|
|
if (null !== $filename) {
|
|
$this->filename = $filename;
|
|
$this->setName($filename);
|
|
}
|
|
$this->setDisposition('attachment');
|
|
}
|
|
|
|
public static function fromPath(string $path, ?string $name = null, ?string $contentType = null): self
|
|
{
|
|
return new self(new File($path), $name, $contentType);
|
|
}
|
|
|
|
/**
|
|
* @return $this
|
|
*/
|
|
public function asInline(): static
|
|
{
|
|
return $this->setDisposition('inline');
|
|
}
|
|
|
|
/**
|
|
* @return $this
|
|
*/
|
|
public function setContentId(string $cid): static
|
|
{
|
|
if (!str_contains($cid, '@')) {
|
|
throw new InvalidArgumentException(sprintf('Invalid cid "%s".', $cid));
|
|
}
|
|
|
|
$this->cid = $cid;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getContentId(): string
|
|
{
|
|
return $this->cid ?: $this->cid = $this->generateContentId();
|
|
}
|
|
|
|
public function hasContentId(): bool
|
|
{
|
|
return null !== $this->cid;
|
|
}
|
|
|
|
public function getMediaType(): string
|
|
{
|
|
return $this->mediaType;
|
|
}
|
|
|
|
public function getPreparedHeaders(): Headers
|
|
{
|
|
$headers = parent::getPreparedHeaders();
|
|
|
|
if (null !== $this->cid) {
|
|
$headers->setHeaderBody('Id', 'Content-ID', $this->cid);
|
|
}
|
|
|
|
if (null !== $this->filename) {
|
|
$headers->setHeaderParameter('Content-Disposition', 'filename', $this->filename);
|
|
}
|
|
|
|
return $headers;
|
|
}
|
|
|
|
public function asDebugString(): string
|
|
{
|
|
$str = parent::asDebugString();
|
|
if (null !== $this->filename) {
|
|
$str .= ' filename: '.$this->filename;
|
|
}
|
|
|
|
return $str;
|
|
}
|
|
|
|
public function getFilename(): ?string
|
|
{
|
|
return $this->filename;
|
|
}
|
|
|
|
public function getContentType(): string
|
|
{
|
|
return implode('/', [$this->getMediaType(), $this->getMediaSubtype()]);
|
|
}
|
|
|
|
private function generateContentId(): string
|
|
{
|
|
return bin2hex(random_bytes(16)).'@symfony';
|
|
}
|
|
|
|
public function __sleep(): array
|
|
{
|
|
// converts the body to a string
|
|
parent::__sleep();
|
|
|
|
$this->_parent = [];
|
|
foreach (['body', 'charset', 'subtype', 'disposition', 'name', 'encoding'] as $name) {
|
|
$r = new \ReflectionProperty(TextPart::class, $name);
|
|
$this->_parent[$name] = $r->getValue($this);
|
|
}
|
|
$this->_headers = $this->getHeaders();
|
|
|
|
return ['_headers', '_parent', 'filename', 'mediaType'];
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function __wakeup()
|
|
{
|
|
$r = new \ReflectionProperty(AbstractPart::class, 'headers');
|
|
$r->setValue($this, $this->_headers);
|
|
unset($this->_headers);
|
|
|
|
if (!\is_array($this->_parent)) {
|
|
throw new \BadMethodCallException('Cannot unserialize '.__CLASS__);
|
|
}
|
|
foreach (['body', 'charset', 'subtype', 'disposition', 'name', 'encoding'] as $name) {
|
|
if (null !== $this->_parent[$name] && !\is_string($this->_parent[$name]) && !$this->_parent[$name] instanceof File) {
|
|
throw new \BadMethodCallException('Cannot unserialize '.__CLASS__);
|
|
}
|
|
$r = new \ReflectionProperty(TextPart::class, $name);
|
|
$r->setValue($this, $this->_parent[$name]);
|
|
}
|
|
unset($this->_parent);
|
|
}
|
|
}
|