File size: 1,806 Bytes
d2897cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
<?php

namespace Mautic\EmailBundle\MonitoredEmail;

class Message
{
    public $id;

    public $date;

    public $subject;

    public $fromName;

    public $fromAddress;

    public $to = [];

    public $toString;

    public $cc         = [];

    public $replyTo    = [];

    public $inReplyTo  = false;

    public $returnPath = false;

    public $references = [];

    public string $textPlain = '';

    public $textHtml;

    public string $dsnReport  = '';

    public string $dsnMessage = '';

    public $fblReport;

    public $fblMessage;

    public $xHeaders = [];

    /**
     * @var Attachment[]
     */
    protected $attachments = [];

    public function addAttachment(Attachment $attachment): void
    {
        $this->attachments[$attachment->id] = $attachment;
    }

    /**
     * @return Attachment[]
     */
    public function getAttachments()
    {
        return $this->attachments;
    }

    /**
     * Get array of internal HTML links placeholders.
     *
     * @return array attachmentId => link placeholder
     */
    public function getInternalLinksPlaceholders(): array
    {
        return preg_match_all('/=["\'](ci?d:([\w\.%*@-]+))["\']/i', $this->textHtml, $matches) ? array_combine($matches[2], $matches[1]) : [];
    }

    /**
     * @return mixed
     */
    public function replaceInternalLinks($baseUri)
    {
        $baseUri     = rtrim($baseUri, '\\/').'/';
        $fetchedHtml = $this->textHtml;
        foreach ($this->getInternalLinksPlaceholders() as $attachmentId => $placeholder) {
            if (isset($this->attachments[$attachmentId])) {
                $fetchedHtml = str_replace($placeholder, $baseUri.basename($this->attachments[$attachmentId]->filePath), $fetchedHtml);
            }
        }

        return $fetchedHtml;
    }
}