Completed
Push — master ( baa46f...086585 )
by Roberto
05:33 queued 02:06
created

Base::renderTemplate()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 34
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 34
ccs 0
cts 34
cp 0
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 30
nc 1
nop 8
crap 2

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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
    protected $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
    protected $fields;
106
    /**
107
     * PHPMailer class
108
     * @var \PHPMailer
109
     */
110
    protected $mail;
111
    /**
112
     * Xml content
113
     * @var string
114
     */
115
    protected $xml;
116
    /**
117
     * PDF content
118
     * @var string
119
     */
120
    protected $pdf;
121
122
    /**
123
     * Render a template with valid data
124
     * @param string $template
125
     * @param string $destinatario
126
     * @param string $data
127
     * @param string $numero
128
     * @param string $valor
129
     * @param string $chave
130
     * @param string $correcao
131
     * @param string $conduso
132
     * @return string
133
     */
134
    protected function renderTemplate(
135
        $template,
136
        $destinatario = '',
137
        $data = '',
138
        $numero = '',
139
        $valor = 0,
140
        $chave = '',
141
        $correcao = '',
142
        $conduso = ''
143
    ) {
144
        $dt = new \DateTime(str_replace('T', ' ', $data));
145
        $search = array(
146
            '{destinatario}',
147
            '{data}',
148
            '{numero}',
149
            '{valor}',
150
            '{emitente}',
151
            '{chave}',
152
            '{correcao}',
153
            '{conduso}'
154
        );
155
        $replace = array(
156
          $destinatario,
157
          $dt->format('d/m/Y'),
158
          $numero,
159
          number_format($valor, 2, ',', '.'),
160
          $this->config->fantasy,
0 ignored issues
show
Bug introduced by
The property config does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
161
          $chave,
162
          $correcao,
163
          $conduso
164
        );
165
        $template = str_replace($search, $replace, $template);
166
        return $template;
167
    }
168
    
169
    /**
170
     * Remove all invalid addresses
171
     */
172
    protected function removeInvalidAdresses()
173
    {
174
        //This resulted array should be repeated fields removed
175
        //and all not valid strings, and also trim and strtolower strings
176
        $this->addresses = array_unique($this->addresses);
177
        $this->addresses = array_map(array($this, 'clearAddressString'), $this->addresses);
178
        $this->addresses = array_filter($this->addresses, array($this, 'checkEmailAddress'));
179
    }
180
    
181
    /**
182
     * Build Message
183
     * @return string
184
     */
185
    protected function render()
186
    {
187
        //depending on the document a different template should be loaded
188
        //and having data patterns appropriately substituted
189
        $template = $this->templates[$this->type];
190
        if (! empty($this->template)) {
191
            $template = $this->template;
192
        }
193
        return $this->renderTemplate(
194
            $template,
195
            $this->fields->destinatario,
196
            $this->fields->data,
197
            $this->fields->numero,
198
            $this->fields->valor,
199
            $this->fields->chave,
200
            $this->fields->correcao,
201
            $this->fields->conduso
202
        );
203
    }
204
    
205
    /**
206
     * Attach all documents to message
207
     */
208
    protected function attach()
209
    {
210
        $this->mail->addStringAttachment(
211
            $this->xml,
212
            $this->type . '.xml'
213
        );
214
        if (! empty($this->pdf)) {
215
            $this->mail->addStringAttachment(
216
                $this->xml,
217
                $this->type . '.pdf'
218
            );
219
        }
220
    }
221
    
222
    /**
223
     * Returns only valid email string
224
     * @param string $email
225
     * @return boolean
226
     */
227
    protected function checkEmailAddress($email)
228
    {
229
        return filter_var($email, FILTER_VALIDATE_EMAIL);
230
    }
231
    
232
    /**
233
     * Format email address string removing garbage and
234
     * set to lower characters
235
     * @param string $email
236
     * @return string
237
     */
238
    protected function clearAddressString($email)
239
    {
240
        return preg_replace('/[ ,;:]+/', '', strtolower($email));
241
    }
242
}
243