Failed Conditions
Pull Request — 4.0 (#3650)
by chihiro
08:02
created

MailService::sendOrderMail()   B

Complexity

Conditions 3
Paths 4

Size

Total Lines 64

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 36
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
nc 4
nop 1
dl 0
loc 64
ccs 36
cts 36
cp 1
crap 3
rs 8.7853
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/*
4
 * This file is part of EC-CUBE
5
 *
6
 * Copyright(c) LOCKON CO.,LTD. All Rights Reserved.
7
 *
8
 * http://www.lockon.co.jp/
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Eccube\Service;
15
16
use Eccube\Common\EccubeConfig;
17
use Eccube\Entity\BaseInfo;
18
use Eccube\Entity\Customer;
19
use Eccube\Entity\MailHistory;
20
use Eccube\Entity\MailTemplate;
21
use Eccube\Entity\Order;
22
use Eccube\Entity\OrderItem;
23
use Eccube\Entity\Shipping;
24
use Eccube\Event\EccubeEvents;
25
use Eccube\Event\EventArgs;
26
use Eccube\Repository\BaseInfoRepository;
27
use Eccube\Repository\MailHistoryRepository;
28
use Eccube\Repository\MailTemplateRepository;
29
use Symfony\Component\EventDispatcher\EventDispatcher;
30
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
31
32
class MailService
33
{
34
    /**
35
     * @var \Swift_Mailer
36
     */
37
    protected $mailer;
38
39
    /**
40
     * @var MailTemplateRepository
41
     */
42
    protected $mailTemplateRepository;
43
44
    /**
45
     * @var MailHistoryRepository
46
     */
47
    private $mailHistoryRepository;
48
49
    /**
50
     * @var EventDispatcher
51
     */
52
    protected $eventDispatcher;
53
54
    /**
55
     * @var BaseInfo
56
     */
57
    protected $BaseInfo;
58
59
    /**
60
     * @var EccubeConfig
61
     */
62
    protected $eccubeConfig;
63
64
    /**
65
     * @var \Twig_Environment
66
     */
67
    protected $twig;
68
69
    /**
70
     * MailService constructor.
71
     *
72
     * @param \Swift_Mailer $mailer
73
     * @param MailTemplateRepository $mailTemplateRepository
74
     * @param MailHistoryRepository $mailHistoryRepository
75
     * @param BaseInfoRepository $baseInfoRepository
76
     * @param EventDispatcherInterface $eventDispatcher
77
     * @param \Twig_Environment $twig
78
     * @param EccubeConfig $eccubeConfig
79
     */
80 140
    public function __construct(
81
        \Swift_Mailer $mailer,
82
        MailTemplateRepository $mailTemplateRepository,
83
        MailHistoryRepository $mailHistoryRepository,
84
        BaseInfoRepository $baseInfoRepository,
85
        EventDispatcherInterface $eventDispatcher,
86
        \Twig_Environment $twig,
87
        EccubeConfig $eccubeConfig
88
    ) {
89 140
        $this->mailer = $mailer;
90 140
        $this->mailTemplateRepository = $mailTemplateRepository;
91 140
        $this->mailHistoryRepository = $mailHistoryRepository;
92 140
        $this->BaseInfo = $baseInfoRepository->get();
93 140
        $this->eventDispatcher = $eventDispatcher;
0 ignored issues
show
Documentation Bug introduced by
$eventDispatcher is of type object<Symfony\Component...entDispatcherInterface>, but the property $eventDispatcher was declared to be of type object<Symfony\Component...atcher\EventDispatcher>. Are you sure that you always receive this specific sub-class here, or does it make sense to add an instanceof check?

Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a given class or a super-class is assigned to a property that is type hinted more strictly.

Either this assignment is in error or an instanceof check should be added for that assignment.

class Alien {}

class Dalek extends Alien {}

class Plot
{
    /** @var  Dalek */
    public $villain;
}

$alien = new Alien();
$plot = new Plot();
if ($alien instanceof Dalek) {
    $plot->villain = $alien;
}
Loading history...
94 140
        $this->eccubeConfig = $eccubeConfig;
95 140
        $this->twig = $twig;
96
    }
97
98
    /**
99
     * Send customer confirm mail.
100
     *
101
     * @param $Customer 会員情報
102
     * @param string $activateUrl アクティベート用url
103
     */
104 2 View Code Duplication
    public function sendCustomerConfirmMail(\Eccube\Entity\Customer $Customer, $activateUrl)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
105
    {
106 2
        log_info('仮会員登録メール送信開始');
107
108 2
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_entry_confirm_mail_template_id']);
109
110 2
        $body = $this->twig->render($MailTemplate->getFileName(), [
111 2
            'Customer' => $Customer,
112 2
            'BaseInfo' => $this->BaseInfo,
113 2
            'activateUrl' => $activateUrl,
114 2
        ]);
115 2
116
        $message = (new \Swift_Message())
117
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
118 2
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
119 2
            ->setTo([$Customer->getEmail()])
120 2
            ->setBcc($this->BaseInfo->getEmail01())
121 2
            ->setReplyTo($this->BaseInfo->getEmail03())
122 2
            ->setReturnPath($this->BaseInfo->getEmail04());
123 2
124 2
        // HTMLテンプレートが存在する場合
125 2
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
126
        if (!is_null($htmlFileName)) {
127 2
            $htmlBody = $this->twig->render($htmlFileName, [
128
                'Customer' => $Customer,
129 2
                'BaseInfo' => $this->BaseInfo,
130 2
                'activateUrl' => $activateUrl,
131 2
            ]);
132 2
133
            $message
134 2
                ->setContentType('text/plain; charset=UTF-8')
135
                ->setBody($body, 'text/plain')
136 2
                ->addPart($htmlBody, 'text/html');
137
        } else {
138 2
            $message->setBody($body);
139
        }
140 2
141
        $event = new EventArgs(
142 2
            [
143
                'message' => $message,
144
                'Customer' => $Customer,
145
                'BaseInfo' => $this->BaseInfo,
146
                'activateUrl' => $activateUrl,
147
            ],
148
            null
149
        );
150 2
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_CUSTOMER_CONFIRM, $event);
151
152 2
        $count = $this->mailer->send($message, $failures);
153
154 2
        log_info('仮会員登録メール送信完了', ['count' => $count]);
155
156 2
        return $count;
157 2
    }
158 2
159 2
    /**
160 2
     * Send customer complete mail.
161
     *
162
     * @param $Customer 会員情報
163 2
     */
164 2 View Code Duplication
    public function sendCustomerCompleteMail(\Eccube\Entity\Customer $Customer)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
165 2
    {
166 2
        log_info('会員登録完了メール送信開始');
167 2
168 2
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_entry_complete_mail_template_id']);
169 2
170 2
        $body = $this->twig->render($MailTemplate->getFileName(), [
171
            'Customer' => $Customer,
172 2
            'BaseInfo' => $this->BaseInfo,
173
        ]);
174 2
175 2
        $message = (new \Swift_Message())
176 2
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
177
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
178 2
            ->setTo([$Customer->getEmail()])
179
            ->setBcc($this->BaseInfo->getEmail01())
180 2
            ->setReplyTo($this->BaseInfo->getEmail03())
181
            ->setReturnPath($this->BaseInfo->getEmail04());
182 2
183
        // HTMLテンプレートが存在する場合
184 2
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
185
        if (!is_null($htmlFileName)) {
186 2
            $htmlBody = $this->twig->render($htmlFileName, [
187
                'Customer' => $Customer,
188
                'BaseInfo' => $this->BaseInfo,
189
            ]);
190
191
            $message
192
                ->setContentType('text/plain; charset=UTF-8')
193
                ->setBody($body, 'text/plain')
194
                ->addPart($htmlBody, 'text/html');
195 2
        } else {
196
            $message->setBody($body);
197 2
        }
198
199 2
        $event = new EventArgs(
200
            [
201 2
                'message' => $message,
202 2
                'Customer' => $Customer,
203 2
                'BaseInfo' => $this->BaseInfo,
204 2
            ],
205 2
            null
206
        );
207
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_CUSTOMER_COMPLETE, $event);
208 2
209 2
        $count = $this->mailer->send($message);
210 2
211 2
        log_info('会員登録完了メール送信完了', ['count' => $count]);
212 2
213 2
        return $count;
214 2
    }
215 2
216
    /**
217 2
     * Send withdraw mail.
218
     *
219 2
     * @param $Customer Customer
220 2
     * @param $email string
221 2
     */
222 2 View Code Duplication
    public function sendCustomerWithdrawMail(Customer $Customer, string $email)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
223
    {
224 2
        log_info('退会手続き完了メール送信開始');
225
226 2
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_customer_withdraw_mail_template_id']);
227
228 2
        $body = $this->twig->render($MailTemplate->getFileName(), [
229
            'Customer' => $Customer,
230 2
            'BaseInfo' => $this->BaseInfo,
231
        ]);
232 2
233
        $message = (new \Swift_Message())
234
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
235
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
236
            ->setTo([$email])
237
            ->setBcc($this->BaseInfo->getEmail01())
238
            ->setReplyTo($this->BaseInfo->getEmail03())
239
            ->setReturnPath($this->BaseInfo->getEmail04());
240 4
241
        // HTMLテンプレートが存在する場合
242 4
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
243
        if (!is_null($htmlFileName)) {
244 4
            $htmlBody = $this->twig->render($htmlFileName, [
245
                'Customer' => $Customer,
246 4
                'BaseInfo' => $this->BaseInfo,
247 4
            ]);
248 4
249 4
            $message
250 4
                ->setContentType('text/plain; charset=UTF-8')
251
                ->setBody($body, 'text/plain')
252
                ->addPart($htmlBody, 'text/html');
253
        } else {
254 4
            $message->setBody($body);
255 4
        }
256 4
257 4
        $event = new EventArgs(
258 4
            [
259 4
                'message' => $message,
260 4
                'Customer' => $Customer,
261 4
                'BaseInfo' => $this->BaseInfo,
262
                'email' => $email,
263 4
            ],
264
            null
265 4
        );
266 4
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_CUSTOMER_WITHDRAW, $event);
267 4
268
        $count = $this->mailer->send($message);
269 4
270
        log_info('退会手続き完了メール送信完了', ['count' => $count]);
271 4
272
        return $count;
273 4
    }
274
275 4
    /**
276
     * Send contact mail.
277 4
     *
278
     * @param $formData お問い合わせ内容
279
     */
280 View Code Duplication
    public function sendContactMail($formData)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
281
    {
282
        log_info('お問い合わせ受付メール送信開始');
283
284
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_contact_mail_template_id']);
285
286
        $body = $this->twig->render($MailTemplate->getFileName(), [
287
            'data' => $formData,
288
            'BaseInfo' => $this->BaseInfo,
289
        ]);
290
291
        // 問い合わせ者にメール送信
292
        $message = (new \Swift_Message())
293
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
294
            ->setFrom([$this->BaseInfo->getEmail02() => $this->BaseInfo->getShopName()])
295
            ->setTo([$formData['email']])
296
            ->setBcc($this->BaseInfo->getEmail02())
297
            ->setReplyTo($this->BaseInfo->getEmail02())
298
            ->setReturnPath($this->BaseInfo->getEmail04());
299
300
        // HTMLテンプレートが存在する場合
301 7
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
302
        if (!is_null($htmlFileName)) {
303 7
            $htmlBody = $this->twig->render($htmlFileName, [
304
                'data' => $formData,
305 7
                'BaseInfo' => $this->BaseInfo,
306
            ]);
307 7
308 7
            $message
309 7
                ->setContentType('text/plain; charset=UTF-8')
310 7
                ->setBody($body, 'text/plain')
311
                ->addPart($htmlBody, 'text/html');
312
        } else {
313 7
            $message->setBody($body);
314 7
        }
315 7
316 7
        $event = new EventArgs(
317 7
            [
318 7
                'message' => $message,
319 7
                'formData' => $formData,
320 7
                'BaseInfo' => $this->BaseInfo,
321
            ],
322 7
            null
323
        );
324 7
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_CONTACT, $event);
325 7
326 7
        $count = $this->mailer->send($message);
327 7
328
        log_info('お問い合わせ受付メール送信完了', ['count' => $count]);
329 7
330
        return $count;
331 7
    }
332
333 7
    /**
334
     * Alias of sendContactMail().
335 7
     *
336
     * @param $formData お問い合わせ内容
337 7
     *
338
     * @see sendContactMail()
339
     * @deprecated since 3.0.0, to be removed in 3.1
340
     * @see https://github.com/EC-CUBE/ec-cube/issues/1315
341
     */
342
    public function sendrContactMail($formData)
343
    {
344
        $this->sendContactMail($formData);
345
    }
346 2
347
    /**
348 2
     * Send order mail.
349
     *
350
     * @param \Eccube\Entity\Order $Order 受注情報
351 2
     *
352
     * @return \Swift_Message
353 2
     */
354 2
    public function sendOrderMail(\Eccube\Entity\Order $Order)
355 2
    {
356 2
        log_info('受注メール送信開始');
357 2
358 2
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_order_mail_template_id']);
359
360
        $body = $this->twig->render($MailTemplate->getFileName(), [
361 2
            'Order' => $Order,
362 2
        ]);
363 2
364 2
        $message = (new \Swift_Message())
365 2
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
366 2
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
367 2
            ->setTo([$Order->getEmail()])
368 2
            ->setBcc($this->BaseInfo->getEmail01())
369
            ->setReplyTo($this->BaseInfo->getEmail03())
370 2
            ->setReturnPath($this->BaseInfo->getEmail04());
371
372 2
        // HTMLテンプレートが存在する場合
373 2
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
374 2
        if (!is_null($htmlFileName)) {
375 2
            $htmlBody = $this->twig->render($htmlFileName, [
376
                'Order' => $Order,
377 2
            ]);
378
379 2
            $message
380
                ->setContentType('text/plain; charset=UTF-8')
381 2
                ->setBody($body, 'text/plain')
382
                ->addPart($htmlBody, 'text/html');
383 2
        } else {
384
            $message->setBody($body);
385 2
        }
386
387
        $event = new EventArgs(
388
            [
389
                'message' => $message,
390
                'Order' => $Order,
391
                'MailTemplate' => $MailTemplate,
392
                'BaseInfo' => $this->BaseInfo,
393
            ],
394
            null
395
        );
396
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_ORDER, $event);
397
398
        $count = $this->mailer->send($message);
399
400
        $MailHistory = new MailHistory();
401 3
        $MailHistory->setMailSubject($message->getSubject())
402
            ->setMailBody($message->getBody())
403 3
            ->setOrder($Order)
404
            ->setSendDate(new \DateTime());
405 3
406 3
        // HTML用メールの設定
407 3
        $multipart = $message->getChildren();
408 3
        if (count($multipart) > 0) {
409
            $MailHistory->setMailHtmlBody($multipart[0]->getBody());
410
        }
411 3
412 3
        $this->mailHistoryRepository->save($MailHistory);
413 3
414 3
        log_info('受注メール送信完了', ['count' => $count]);
415 3
416 3
        return $message;
417 3
    }
418 3
419
    /**
420 3
     * Send admin customer confirm mail.
421
     *
422 3
     * @param $Customer 会員情報
423 3
     * @param string $activateUrl アクティベート用url
424 3
     */
425 3 View Code Duplication
    public function sendAdminCustomerConfirmMail(\Eccube\Entity\Customer $Customer, $activateUrl)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
426
    {
427 3
        log_info('仮会員登録再送メール送信開始');
428
429 3
        /* @var $MailTemplate \Eccube\Entity\MailTemplate */
430
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_entry_confirm_mail_template_id']);
431 3
432
        $body = $this->twig->render($MailTemplate->getFileName(), [
433 3
            'BaseInfo' => $this->BaseInfo,
434
            'Customer' => $Customer,
435 3
            'activateUrl' => $activateUrl,
436
        ]);
437
438
        $message = (new \Swift_Message())
439
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
440
            ->setFrom([$this->BaseInfo->getEmail03() => $this->BaseInfo->getShopName()])
441
            ->setTo([$Customer->getEmail()])
442
            ->setBcc($this->BaseInfo->getEmail01())
443
            ->setReplyTo($this->BaseInfo->getEmail03())
444 1
            ->setReturnPath($this->BaseInfo->getEmail04());
445
446 1
        // HTMLテンプレートが存在する場合
447
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
448 1
        if (!is_null($htmlFileName)) {
449 1
            $htmlBody = $this->twig->render($htmlFileName, [
450 1
                'BaseInfo' => $this->BaseInfo,
451 1
                'Customer' => $Customer,
452 1
                'activateUrl' => $activateUrl,
453 1
            ]);
454 1
455 1
            $message
456
                ->setContentType('text/plain; charset=UTF-8')
457
                ->setBody($body, 'text/plain')
458 1
                ->addPart($htmlBody, 'text/html');
459 1
        } else {
460 1
            $message->setBody($body);
461 1
        }
462 1
463 1
        $event = new EventArgs(
464 1
            [
465 1
                'message' => $message,
466
                'Customer' => $Customer,
467 1
                'BaseInfo' => $this->BaseInfo,
468
                'activateUrl' => $activateUrl,
469 1
            ],
470 1
            null
471 1
        );
472 1
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_ADMIN_CUSTOMER_CONFIRM, $event);
473
474 1
        $count = $this->mailer->send($message);
475
476 1
        log_info('仮会員登録再送メール送信完了', ['count' => $count]);
477
478 1
        return $count;
479
    }
480 1
481
    /**
482 1
     * Send admin order mail.
483
     *
484
     * @param Order $Order 受注情報
485
     * @param $formData 入力内容
486
     *
487
     * @return \Swift_Message
488
     *
489
     * @throws \Twig_Error_Loader
490
     * @throws \Twig_Error_Runtime
491 1
     * @throws \Twig_Error_Syntax
492
     */
493 1
    public function sendAdminOrderMail(Order $Order, $formData)
494
    {
495 1
        log_info('受注管理通知メール送信開始');
496
497 1
        $message = (new \Swift_Message())
498 1
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$formData['mail_subject'])
499 1
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
500 1
            ->setTo([$Order->getEmail()])
501 1
            ->setBcc($this->BaseInfo->getEmail01())
502 1
            ->setReplyTo($this->BaseInfo->getEmail03())
503
            ->setReturnPath($this->BaseInfo->getEmail04());
504
505 1
        if (is_null($formData['html_tpl_data'])) {
506 1
            $message->setBody($formData['tpl_data']);
507 1
        } else {
508 1
            $message
509 1
                ->setContentType('text/plain; charset=UTF-8')
510 1
                ->setBody($formData['tpl_data'], 'text/plain')
511 1
                ->addPart($formData['html_tpl_data'], 'text/html');
512 1
        }
513
514 1
        $event = new EventArgs(
515
            [
516 1
                'message' => $message,
517 1
                'Order' => $Order,
518 1
                'formData' => $formData,
519 1
                'BaseInfo' => $this->BaseInfo,
520
            ],
521 1
            null
522
        );
523 1
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_ADMIN_ORDER, $event);
524
525 1
        $count = $this->mailer->send($message);
526
527 1
        log_info('受注管理通知メール送信完了', ['count' => $count]);
528
529 1
        return $message;
530
    }
531
532
    /**
533
     * Send password reset notification mail.
534
     *
535
     * @param $Customer 会員情報
536
     * @param string $reset_url
537
     */
538
    public function sendPasswordResetNotificationMail(\Eccube\Entity\Customer $Customer, $reset_url)
539
    {
540
        log_info('パスワード再発行メール送信開始');
541
542
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_forgot_mail_template_id']);
543
        $body = $this->twig->render($MailTemplate->getFileName(), [
544
            'BaseInfo' => $this->BaseInfo,
545
            'Customer' => $Customer,
546
            'expire' => $this->eccubeConfig['eccube_customer_reset_expire'],
547
            'reset_url' => $reset_url,
548
        ]);
549
550
        $message = (new \Swift_Message())
551
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
552
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
553
            ->setTo([$Customer->getEmail()])
554
            ->setReplyTo($this->BaseInfo->getEmail03())
555
            ->setReturnPath($this->BaseInfo->getEmail04());
556
557
        // HTMLテンプレートが存在する場合
558
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
559
        if (!is_null($htmlFileName)) {
560
            $htmlBody = $this->twig->render($htmlFileName, [
561
                'BaseInfo' => $this->BaseInfo,
562
                'Customer' => $Customer,
563
                'expire' => $this->eccubeConfig['eccube_customer_reset_expire'],
564
                'reset_url' => $reset_url,
565
            ]);
566
567 4
            $message
568
                ->setContentType('text/plain; charset=UTF-8')
569 4
                ->setBody($body, 'text/plain')
570
                ->addPart($htmlBody, 'text/html');
571 4
        } else {
572
            $message->setBody($body);
573
        }
574 4
575 4
        $event = new EventArgs(
576 4
            [
577 4
                'message' => $message,
578 4
                'Customer' => $Customer,
579 4
                'BaseInfo' => $this->BaseInfo,
580 4
                'resetUrl' => $reset_url,
581 4
            ],
582 4
            null
583
        );
584 4
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_PASSWORD_RESET, $event);
585
586 4
        $count = $this->mailer->send($message);
587 4
588 4
        log_info('パスワード再発行メール送信完了', ['count' => $count]);
589 4
590 4
        return $count;
591
    }
592 4
593
    /**
594 4
     * Send password reset notification mail.
595
     *
596
     * @param $Customer 会員情報
597
     * @param string $password
598
     */
599 View Code Duplication
    public function sendPasswordResetCompleteMail(\Eccube\Entity\Customer $Customer, $password)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
600
    {
601
        log_info('パスワード変更完了メール送信開始');
602
603
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_reset_complete_mail_template_id']);
604
605
        $body = $this->twig->render($MailTemplate->getFileName(), [
606
            'BaseInfo' => $this->BaseInfo,
607
            'Customer' => $Customer,
608 4
            'password' => $password,
609 4
        ]);
610 4
611
        $message = (new \Swift_Message())
612
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
613 4
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
614
            ->setTo([$Customer->getEmail()])
615 4
            ->setBcc($this->BaseInfo->getEmail01())
616 4
            ->setReplyTo($this->BaseInfo->getEmail03())
617 4
            ->setReturnPath($this->BaseInfo->getEmail04());
618 4
619 4
        // HTMLテンプレートが存在する場合
620
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
621
        if (!is_null($htmlFileName)) {
622
            $htmlBody = $this->twig->render($htmlFileName, [
623
                'BaseInfo' => $this->BaseInfo,
624
                'Customer' => $Customer,
625
                'password' => $password,
626
            ]);
627
628
            $message
629
                ->setContentType('text/plain; charset=UTF-8')
630
                ->setBody($body, 'text/plain')
631
                ->addPart($htmlBody, 'text/html');
632
        } else {
633
            $message->setBody($body);
634
        }
635
636
        $event = new EventArgs(
637
            [
638
                'message' => $message,
639
                'Customer' => $Customer,
640
                'BaseInfo' => $this->BaseInfo,
641
                'password' => $password,
642
            ],
643
            null
644
        );
645
        $this->eventDispatcher->dispatch(EccubeEvents::MAIL_PASSWORD_RESET_COMPLETE, $event);
646
647
        $count = $this->mailer->send($message);
648
649
        log_info('パスワード変更完了メール送信完了', ['count' => $count]);
650
651
        return $count;
652
    }
653
654
    /**
655
     * ポイントでマイナス発生時にメール通知する。
656
     *
657
     * @param Order $Order
658
     * @param int $currentPoint
659
     * @param int $changePoint
660
     */
661
    public function sendPointNotifyMail(\Eccube\Entity\Order $Order, $currentPoint = 0, $changePoint = 0)
662
    {
663
        $body = $this->twig->render('Mail/point_notify.twig', [
664
            'Order' => $Order,
665
            'currentPoint' => $currentPoint,
666
            'changePoint' => $changePoint,
667
        ]);
668
669
        $message = (new \Swift_Message())
670
            ->setSubject('['.$this->BaseInfo->getShopName().'] ポイント通知')
671
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
672
            ->setTo([$this->BaseInfo->getEmail01()])
673
            ->setBcc($this->BaseInfo->getEmail01())
674
            ->setReplyTo($this->BaseInfo->getEmail03())
675
            ->setReturnPath($this->BaseInfo->getEmail04());
676
677
        // HTMLテンプレートが存在する場合
678
        $htmlFileName = $this->getHtmlTemplate('Mail/point_notify.twig');
679
        if (!is_null($htmlFileName)) {
680
            $htmlBody = $this->twig->render($htmlFileName, [
681
                'Order' => $Order,
682
                'currentPoint' => $currentPoint,
683
                'changePoint' => $changePoint,
684
            ]);
685
686
            $message
687
                ->setContentType('text/plain; charset=UTF-8')
688
                ->setBody($body, 'text/plain')
689
                ->addPart($htmlBody, 'text/html');
690
        } else {
691
            $message->setBody($body);
692
        }
693
694
        $this->mailer->send($message);
695
    }
696
697
    /**
698
     * 発送通知メールを送信する.
699
     * 発送通知メールは受注ごとに送られる
700
     *
701
     * @param Shipping $Shipping
702
     *
703
     * @throws \Twig_Error
704
     */
705
    public function sendShippingNotifyMail(Shipping $Shipping)
706
    {
707
        log_info('出荷通知メール送信処理開始', ['id' => $Shipping->getId()]);
708
709
        $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_shipping_notify_mail_template_id']);
710
711
        /** @var Order $Order */
712
        $Order = $Shipping->getOrder();
713
        $body = $this->getShippingNotifyMailBody($Shipping, $Order, $MailTemplate->getFileName());
714
715
        $message = (new \Swift_Message())
716
            ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
717
            ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
718
            ->setTo($Order->getEmail())
719
            ->setBcc($this->BaseInfo->getEmail01())
720
            ->setReplyTo($this->BaseInfo->getEmail03())
721
            ->setReturnPath($this->BaseInfo->getEmail04());
722
723
        // HTMLテンプレートが存在する場合
724
        $htmlFileName = $this->getHtmlTemplate($MailTemplate->getFileName());
725
        if (!is_null($htmlFileName)) {
726
            $htmlBody = $this->getShippingNotifyMailBody($Shipping, $Order, $htmlFileName, true);
727
728
            $message
729
                ->setContentType('text/plain; charset=UTF-8')
730
                ->setBody($body, 'text/plain')
731
                ->addPart($htmlBody, 'text/html');
732
        } else {
733
            $message->setBody($body);
734
        }
735
736
        $this->mailer->send($message);
737
738
        $MailHistory = new MailHistory();
739
        $MailHistory->setMailSubject($message->getSubject())
740
                ->setMailBody($message->getBody())
741
                ->setOrder($Order)
742
                ->setSendDate(new \DateTime());
743
744
        // HTML用メールの設定
745
        $multipart = $message->getChildren();
746
        if (count($multipart) > 0) {
747
            $MailHistory->setMailHtmlBody($multipart[0]->getBody());
748
        }
749
750
        $this->mailHistoryRepository->save($MailHistory);
751
752
        log_info('出荷通知メール送信処理完了', ['id' => $Shipping->getId()]);
753
    }
754
755
    /**
756
     * @param Shipping $Shipping
757
     * @param Order $Order
758
     * @param string|null $templateName
759
     * @param boolean $is_html
760
     *
761
     * @return string
762
     *
763
     * @throws \Twig_Error
764
     */
765
    public function getShippingNotifyMailBody(Shipping $Shipping, Order $Order, $templateName = null, $is_html = false)
766
    {
767
        $ShippingItems = array_filter($Shipping->getOrderItems()->toArray(), function (OrderItem $OrderItem) use ($Order) {
768
            return $OrderItem->getOrderId() === $Order->getId();
769
        });
770
771
        if (is_null($templateName)) {
772
            /** @var MailTemplate $MailTemplate */
773
            $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_shipping_notify_mail_template_id']);
774
            $fileName = $MailTemplate->getFileName();
775
        } else {
776
            $fileName = $templateName;
777
        }
778
779
        if ($is_html) {
780
            $htmlFileName = $this->getHtmlTemplate($fileName);
781
            $fileName = !is_null($htmlFileName) ? $htmlFileName : $fileName;
782
        }
783
784
        return $this->twig->render($fileName, [
785
            'Shipping' => $Shipping,
786
            'ShippingItems' => $ShippingItems,
787
        ]);
788
    }
789
790
    /**
791
     * [getHtmlTemplate description]
792
     *
793
     * @param  string $templateName  プレーンテキストメールのファイル名
794
     *
795
     * @return string|null  存在する場合はファイル名を返す
796
     */
797
    public function getHtmlTemplate($templateName)
798
    {
799
        // メールテンプレート名からHTMLメール用テンプレート名を生成
800
        $fileName = explode('.', $templateName);
801
        $suffix = '.html';
802
        $htmlFileName = $fileName[0].$suffix.'.'.$fileName[1];
803
804
        // HTMLメール用テンプレートの存在チェック
805
        if ($this->twig->getLoader()->exists($htmlFileName)) {
806
            return $htmlFileName;
807
        } else {
808
            return null;
809
        }
810
    }
811
}
812