Passed
Push — master ( 5cd404...d3e89a )
by Roberto
57s
created

Base::checkEmailAddress()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 4
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
3
namespace NFePHP\Mail;
4
5
class Base
6
{
7
    /**
8
     * Html Templates
9
     * @var array
10
     */
11
    protected $templates = [
12
        'NFe'=> "<p><b>Prezados {destinatario},</b></p>" .
13
                "<p>Você está recebendo a Nota Fiscal Eletrônica emitida em {data} com o número " .
14
                "{numero}, de {emitente}, no valor de R$ {valor}. " .
15
                "Junto com a mercadoria, você receberá também um DANFE (Documento " .
16
                "Auxiliar da Nota Fiscal Eletrônica), que acompanha o trânsito das mercadorias.</p>" .
17
                "<p><i>Podemos conceituar a Nota Fiscal Eletrônica como um documento " .
18
                "de existência apenas digital, emitido e armazenado eletronicamente, " .
19
                "com o intuito de documentar, para fins fiscais, uma operação de " .
20
                "circulação de mercadorias, ocorrida entre as partes. Sua validade " .
21
                "jurídica garantida pela assinatura digital do remetente (garantia " .
22
                "de autoria e de integridade) e recepção, pelo Fisco, do documento " .
23
                "eletrônico, antes da ocorrência do Fato Gerador.</i></p>" .
24
                "<p><i>Os registros fiscais e contábeis devem ser feitos, a partir " .
25
                "do próprio arquivo da NF-e, anexo neste e-mail, ou utilizando o " .
26
                "DANFE, que representa graficamente a Nota Fiscal Eletrônica. " .
27
                "A validade e autenticidade deste documento eletrônico pode ser " .
28
                "verificada no site nacional do projeto (www.nfe.fazenda.gov.br), " .
29
                "através da chave de acesso contida no DANFE.</i></p>" .
30
                "<p><i>Para poder utilizar os dados descritos do DANFE na " .
31
                "escrituração da NF-e, tanto o contribuinte destinatário, " .
32
                "como o contribuinte emitente, terão de verificar a validade da NF-e. " .
33
                "Esta validade está vinculada à efetiva existência da NF-e nos " .
34
                "arquivos da SEFAZ, e comprovada através da emissão da Autorização de Uso.</i></p>" .
35
                "<p><b>O DANFE não é uma nota fiscal, nem substitui uma nota fiscal, " .
36
                "servindo apenas como instrumento auxiliar para consulta da NF-e no " .
37
                "Ambiente Nacional.</b></p>" .
38
                "<p>Para mais detalhes, consulte: <a href=\"http://www.nfe.fazenda.gov.br/\">" .
39
                "www.nfe.fazenda.gov.br</a></p>" .
40
                "<br>" .
41
                "<p>Atenciosamente,</p>" .
42
                "<p>{emitente}</p>",
43
        
44
        'CTe'=> "<p><b>Prezados {destinatario},</b></p>" .
45
                "<p>Você está recebendo um Conhecimento de Transporte Eletrônico emitido em {data} com o número " .
46
                "{numero}, de {emitente}, no valor de R$ {valor}. " .
47
                "Junto com a mercadoria, você receberá também um DACTE (Documento " .
48
                "Auxiliar do Conhecimento de Transporte Eletrônico), que acompanha o trânsito das mercadorias.</p>" .
49
                "<p><i>Podemos conceituar o CTe como um documento " .
50
                "de existência apenas digital, emitido e armazenado eletronicamente, " .
51
                "com o intuito de documentar, para fins fiscais, uma operação de " .
52
                "circulação de mercadorias, ocorrida entre as partes. Sua validade " .
53
                "jurídica garantida pela assinatura digital do remetente (garantia " .
54
                "de autoria e de integridade) e recepção, pelo Fisco, do documento " .
55
                "eletrônico, antes da ocorrência do Fato Gerador.</i></p>" .
56
                "<p><i>Os registros fiscais e contábeis devem ser feitos, a partir " .
57
                "do próprio arquivo da NF-e, anexo neste e-mail, ou utilizando o " .
58
                "DACTE, que representa graficamente o Conhecimento de Transporte Eletrônico. " .
59
                "A validade e autenticidade deste documento eletrônico pode ser " .
60
                "verificada no site nacional do projeto (www.cte.fazenda.gov.br), " .
61
                "através da chave de acesso contida no DACTE.</i></p>" .
62
                "<p><i>Para poder utilizar os dados descritos do DACTE na " .
63
                "escrituração do CT-e, tanto o contribuinte destinatário, " .
64
                "como o contribuinte emitente, terão de verificar a validade do CT-e. " .
65
                "Esta validade está vinculada à efetiva existência do CT-e nos " .
66
                "arquivos da SEFAZ, e comprovada através da emissão da Autorização de Uso.</i></p>" .
67
                "<p><b>O DACTE não é um Conhecimento de transporte, nem o substitui, " .
68
                "servindo apenas como instrumento auxiliar para consulta do CT-e no " .
69
                "Ambiente Nacional.</b></p>" .
70
                "<p>Para mais detalhes, consulte: <a href=\"http://www.cte.fazenda.gov.br/\">" .
71
                "www.cte.fazenda.gov.br</a></p>" .
72
                "<br>" .
73
                "<p>Atenciosamente,</p>" .
74
                "<p>{emitente}</p>",
75
                
76
        'CCe'=> "<p><b>Prezados,</b></p>" .
77
                "<p>Você está recebendo uma Carta de Correção referente ao nosso documento " .
78
                "{chave}.</p><p>Essa carta de correção datada de {data} procura corrigir:</p> " .
79
                "<p><b>{correcao}</b></p>" .
80
                "<p><i>{conduso}</i></p>" .
81
                "<p>Atenciosamente,</p>" .
82
                "<p>{emitente}</p>"
83
    ];
84
    
85
    /**
86
     * template user-defined
87
     * @var string
88
     */
89
    public $template;
90
    /**
91
     * Type from xml document NFe, CTe or CCe
92
     * @var string
93
     */
94
    protected $type;
95
    /**
96
     * Addresses to send mail
97
     * This array should be repeated fields removed
98
     * @var array
99
     */
100
    protected $addresses = [];
101
    /**
102
     * Fields from xml
103
     * @var \stdClass
104
     */
105
    public $fields;
106
    /**
107
     * PHPMailer class
108
     * @var \PHPMailer
109
     */
110
    protected $mail;
111
    /**
112
     * Xml content
113
     * @var string
114
     */
115
    public $xml;
116
    /**
117
     * PDF content
118
     * @var string
119
     */
120
    public $pdf;
121
    /**
122
     * config
123
     * @var \stdClass
124
     */
125
    protected $config;
126
127
    /**
128
     * Render a template with valid data
129
     * @param string $template
130
     * @param string $destinatario
131
     * @param string $data
132
     * @param string $numero
133
     * @param string $valor
134
     * @param string $chave
135
     * @param string $correcao
136
     * @param string $conduso
137
     * @return string
138
     */
139
    protected function renderTemplate(
140
        $template,
141
        $destinatario = '',
142
        $data = '',
143
        $numero = '',
144
        $valor = 0,
145
        $chave = '',
146
        $correcao = '',
147
        $conduso = ''
148
    ) {
149
        $dt = new \DateTime(str_replace('T', ' ', $data));
150
        $search = array(
151
            '{destinatario}',
152
            '{data}',
153
            '{numero}',
154
            '{valor}',
155
            '{emitente}',
156
            '{chave}',
157
            '{correcao}',
158
            '{conduso}'
159
        );
160
        $replace = array(
161
            $destinatario,
162
            $dt->format('d/m/Y'),
163
            $numero,
164
            number_format($valor, 2, ',', '.'),
165
            $this->config->fantasy,
166
            $chave,
167
            $correcao,
168
            $conduso
169
        );
170
        $template = str_replace($search, $replace, $template);
171
        return $template;
172
    }
173
    
174
    /**
175
     * Remove all invalid addresses
176
     */
177
    protected function removeInvalidAdresses()
178
    {
179
        //This resulted array should be repeated fields removed
180
        //and all not valid strings, and also trim and strtolower strings
181
        $this->addresses = array_unique($this->addresses);
182
        $this->addresses = array_map(array($this, 'clearAddressString'), $this->addresses);
183
        $this->addresses = array_filter($this->addresses, array($this, 'checkEmailAddress'));
184
    }
185
    
186
    /**
187
     * Build Message
188
     * @return string
189
     */
190
    protected function render()
191
    {
192
        //depending on the document a different template should be loaded
193
        //and having data patterns appropriately substituted
194
        $template = $this->templates[$this->type];
195
        if (!empty($this->template)) {
196
            $template = $this->template;
197
        }
198
        return $this->renderTemplate(
199
            $template,
200
            $this->fields->destinatario,
201
            $this->fields->data,
202
            $this->fields->numero,
203
            $this->fields->valor,
204
            $this->fields->chave,
205
            $this->fields->correcao,
206
            $this->fields->conduso
207
        );
208
    }
209
    
210
    /**
211
     * Attach all documents to message
212
     */
213
    protected function attach()
214
    {
215
        $this->mail->addStringAttachment(
216
            $this->xml,
217
            $this->type . '.xml'
218
        );
219
        if (!empty($this->pdf)) {
220
            $this->mail->addStringAttachment(
221
                $this->pdf,
222
                $this->type . '.pdf',
223
                'base64',
224
                'application/pdf'
225
            );
226
        }
227
    }
228
    
229
    /**
230
     * Returns only valid email string
231
     * @param string $email
232
     * @return boolean
233
     */
234
    protected function checkEmailAddress($email)
235
    {
236
        return filter_var($email, FILTER_VALIDATE_EMAIL);
237
    }
238
    
239
    /**
240
     * Format email address string removing garbage and
241
     * set to lower characters
242
     * @param string $email
243
     * @return string
244
     */
245
    protected function clearAddressString($email)
246
    {
247
        return preg_replace('/[ ,;:]+/', '', strtolower($email));
248
    }
249
}
250