get('name');
}
protected function _setSubject(?string $value): void
{
$this->set('name', $value);
}
/**
* @return bool
*/
protected function _hasSubject(): bool
{
return $this->has('name');
}
protected function _hasFromName(): bool
{
return $this->has('fromString');
}
protected function _hasFromAddress(): bool
{
return $this->has('fromString');
}
protected function _hasReplyToName(): bool
{
return $this->has('replyToString');
}
protected function _hasReplyToAddress(): bool
{
return $this->has('replyToString');
}
protected function _getFromName(): ?string
{
if (!$this->has('fromString')) {
return null;
}
$string = EmailUtil::parseFromName($this->get('fromString'));
if ($string === '') {
return null;
}
return $string;
}
protected function _getFromAddress(): ?string
{
if (!$this->has('fromString')) {
return null;
}
return EmailUtil::parseFromAddress($this->get('fromString'));
}
protected function _getReplyToName(): ?string
{
if (!$this->has('replyToString')) {
return null;
}
$string = $this->get('replyToString');
if (!$string) {
return null;
}
return EmailUtil::parseFromName(
trim(explode(';', $string)[0])
);
}
protected function _getReplyToAddress(): ?string
{
if (!$this->has('replyToString')) {
return null;
}
$string = $this->get('replyToString');
if (!$string) {
return null;
}
return EmailUtil::parseFromAddress(
trim(explode(';', $string)[0])
);
}
protected function _setIsRead(?bool $value): void
{
$this->setInContainer('isRead', $value !== false);
if ($value === true || $value === false) {
$this->setInContainer('isUsers', true);
return;
}
$this->setInContainer('isUsers', false);
}
/**
* @deprecated As of v7.4. As the system user ID may be not constant in the future.
*/
public function isManuallyArchived(): bool
{
if ($this->getStatus() !== Email::STATUS_ARCHIVED) {
return false;
}
return true;
}
/**
* @todo Revise.
* @deprecated
*/
public function addAttachment(Attachment $attachment): void
{
if (!$this->id) {
return;
}
$attachment->set('parentId', $this->id);
$attachment->set('parentType', Email::ENTITY_TYPE);
if (!$this->entityManager) {
throw new RuntimeException();
}
$this->entityManager->saveEntity($attachment);
}
protected function _getBodyPlain(): ?string
{
return $this->getBodyPlain();
}
public function hasBodyPlain(): bool
{
return $this->hasInContainer('bodyPlain') && $this->getFromContainer('bodyPlain');
}
public function getBodyPlain(): ?string
{
if ($this->getFromContainer('bodyPlain')) {
return $this->getFromContainer('bodyPlain');
}
/** @var string $body */
$body = $this->get('body') ?? '';
$breaks = ["
", "
", "
", "
", "<br />", "<br/>", "<br>"];
$body = str_ireplace($breaks, "\r\n", $body);
$body = strip_tags($body);
$reList = [
'&(quot|#34);',
'&(amp|#38);',
'&(lt|#60);',
'&(gt|#62);',
'&(nbsp|#160);',
'&(iexcl|#161);',
'&(cent|#162);',
'&(pound|#163);',
'&(copy|#169);',
'&(reg|#174);',
];
$replaceList = [
'',
'&',
'<',
'>',
' ',
'¡',
'¢',
'£',
'©',
'®',
];
foreach ($reList as $i => $re) {
/** @var string $body */
$body = mb_ereg_replace($re, $replaceList[$i], $body, 'i');
}
return $body;
}
public function getBodyPlainForSending(): string
{
return $this->getBodyPlain() ?? '';
}
public function getBodyForSending(): string
{
$body = $this->get('body') ?? '';
if (!empty($body)) {
$attachmentList = $this->getInlineAttachmentList();
foreach ($attachmentList as $attachment) {
$id = $attachment->getId();
$body = str_replace(
"\"?entryPoint=attachment&id={$id}\"",
"\"cid:{$id}\"",
$body
);
}
}
return str_replace(
"
",
"",
$body
);
}
/**
* @return Attachment[]
*/
public function getInlineAttachmentList(): array
{
$idList = [];
$body = $this->get('body');
if (empty($body)) {
return [];
}
$matches = [];
if (!preg_match_all("/\?entryPoint=attachment&id=([^&=\"']+)/", $body, $matches)) {
return [];
}
if (empty($matches[1]) || !is_array($matches[1])) {
return [];
}
$attachmentList = [];
foreach ($matches[1] as $id) {
if (in_array($id, $idList)) {
continue;
}
$idList[] = $id;
if (!$this->entityManager) {
throw new RuntimeException();
}
/** @var Attachment|null $attachment */
$attachment = $this->entityManager->getEntityById(Attachment::ENTITY_TYPE, $id);
if ($attachment) {
$attachmentList[] = $attachment;
}
}
return $attachmentList;
}
public function getDateSent(): ?DateTime
{
/** @var ?DateTime */
return $this->getValueObject('dateSent');
}
public function getSubject(): ?string
{
return $this->get('subject');
}
/**
* @param Email::STATUS_* $status
*/
public function setStatus(string $status): self
{
$this->set('status', $status);
return $this;
}
public function setSubject(?string $subject): self
{
$this->set('subject', $subject);
return $this;
}
/**
* @param string[] $idList
*/
public function setAttachmentIdList(array $idList): self
{
$this->setLinkMultipleIdList('attachments', $idList);
return $this;
}
public function getBody(): ?string
{
return $this->get('body');
}
public function setBody(?string $body): self
{
$this->set('body', $body);
return $this;
}
public function setBodyPlain(?string $bodyPlain): self
{
$this->set('bodyPlain', $bodyPlain);
return $this;
}
public function isHtml(): ?bool
{
return $this->get('isHtml');
}
public function isRead(): ?bool
{
return $this->get('isRead');
}
public function setIsHtml(bool $isHtml = true): self
{
$this->set('isHtml', $isHtml);
return $this;
}
public function setIsPlain(bool $isPlain = true): self
{
$this->set('isHtml', !$isPlain);
return $this;
}
public function setFromAddress(?string $address): self
{
$this->set('from', $address);
return $this;
}
/**
* @param string[] $addressList
*/
public function setToAddressList(array $addressList): self
{
$this->set('to', implode(';', $addressList));
return $this;
}
/**
* @param string[] $addressList
*/
public function setCcAddressList(array $addressList): self
{
$this->set('cc', implode(';', $addressList));
return $this;
}
/**
* @param string[] $addressList
*/
public function setBccAddressList(array $addressList): self
{
$this->set('bcc', implode(';', $addressList));
return $this;
}
/**
* @param string[] $addressList
*/
public function setReplyToAddressList(array $addressList): self
{
$this->set('replyTo', implode(';', $addressList));
return $this;
}
public function addToAddress(string $address): self
{
$list = $this->getToAddressList();
$list[] = $address;
$this->set('to', implode(';', $list));
return $this;
}
public function addCcAddress(string $address): self
{
$list = $this->getCcAddressList();
$list[] = $address;
$this->set('cc', implode(';', $list));
return $this;
}
public function addBccAddress(string $address): self
{
$list = $this->getBccAddressList();
$list[] = $address;
$this->set('bcc', implode(';', $list));
return $this;
}
public function addReplyToAddress(string $address): self
{
$list = $this->getReplyToAddressList();
$list[] = $address;
$this->set('replyTo', implode(';', $list));
return $this;
}
public function getFromString(): ?string
{
return $this->get('fromString');
}
public function getFromAddress(): ?string
{
if (!$this->hasInContainer('from') && !$this->isNew()) {
$this->getEmailRepository()->loadFromField($this);
}
return $this->get('from');
}
/**
* @return string[]
*/
public function getToAddressList(): array
{
if (!$this->hasInContainer('to') && !$this->isNew()) {
$this->getEmailRepository()->loadToField($this);
}
$value = $this->get('to');
if (!$value) {
return [];
}
return explode(';', $value);
}
/**
* @return string[]
*/
public function getCcAddressList(): array
{
if (!$this->hasInContainer('cc') && !$this->isNew()) {
$this->getEmailRepository()->loadCcField($this);
}
$value = $this->get('cc');
if (!$value) {
return [];
}
return explode(';', $value);
}
/**
* @return string[]
*/
public function getBccAddressList(): array
{
if (!$this->hasInContainer('bcc') && !$this->isNew()) {
$this->getEmailRepository()->loadBccField($this);
}
$value = $this->get('bcc');
if (!$value) {
return [];
}
return explode(';', $value);
}
/**
* @return string[]
*/
public function getReplyToAddressList(): array
{
if (!$this->hasInContainer('replyTo') && !$this->isNew()) {
$this->getEmailRepository()->loadReplyToField($this);
}
$value = $this->get('replyTo');
if (!$value) {
return [];
}
return explode(';', $value);
}
public function setDummyMessageId(): self
{
$this->set('messageId', 'dummy:' . Util::generateId());
return $this;
}
public function getMessageId(): ?string
{
return $this->get('messageId');
}
public function getParentType(): ?string
{
return $this->get('parentType');
}
public function getParentId(): ?string
{
return $this->get('parentId');
}
public function getParent(): ?LinkParent
{
/** @var ?LinkParent */
return $this->getValueObject('parent');
}
public function setParent(?LinkParent $parent): self
{
$this->setValueObject('parent', $parent);
return $this;
}
public function getStatus(): ?string
{
return $this->get('status');
}
public function getAccount(): ?Link
{
/** @var ?Link */
return $this->getValueObject('account');
}
public function getTeams(): LinkMultiple
{
/** @var LinkMultiple */
return $this->getValueObject('teams');
}
public function getCreatedBy(): ?Link
{
/** @var ?Link */
return $this->getValueObject('createdBy');
}
public function getSentBy(): ?Link
{
/** @var ?Link */
return $this->getValueObject('sentBy');
}
public function getGroupFolder(): ?Link
{
/** @var ?Link */
return $this->getValueObject('groupFolder');
}
public function getReplied(): ?Link
{
/** @var ?Link */
return $this->getValueObject('replied');
}
/**
* @return string[]
*/
public function getAttachmentIdList(): array
{
/** @var string[] */
return $this->getLinkMultipleIdList('attachments');
}
private function getEmailRepository(): EmailRepository
{
if (!$this->entityManager) {
throw new RuntimeException();
}
/** @var EmailRepository */
return $this->entityManager->getRepository(Email::ENTITY_TYPE);
}
public function setRepliedId(?string $repliedId): self
{
$this->set('repliedId', $repliedId);
return $this;
}
public function setMessageId(?string $messageId): self
{
$this->set('messageId', $messageId);
return $this;
}
public function setGroupFolderId(?string $groupFolderId): self
{
$this->set('groupFolderId', $groupFolderId);
return $this;
}
public function setDateSent(?DateTime $dateSent): self
{
$this->setValueObject('dateSent', $dateSent);
return $this;
}
public function setAssignedUserId(?string $assignedUserId): self
{
$this->set('assignedUserId', $assignedUserId);
return $this;
}
public function addAssignedUserId(string $assignedUserId): self
{
$this->addLinkMultipleId('assignedUsers', $assignedUserId);
return $this;
}
public function addUserId(string $userId): self
{
$this->addLinkMultipleId('users', $userId);
return $this;
}
public function addTeamId(string $teamId): self
{
$this->addLinkMultipleId('teams', $teamId);
return $this;
}
public function setTeams(LinkMultiple $teams): self
{
$this->setValueObject('teams', $teams);
return $this;
}
}