Passed
Pull Request — master (#108)
by Dmitriy
24:06 queued 09:02
created

ContactController::getId()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
c 0
b 0
f 0
dl 0
loc 3
rs 10
nc 1
nop 0
cc 1
1
<?php
2
3
namespace App\Contact;
4
5
use App\Controller;
6
use Psr\Http\Message\ResponseInterface;
7
use Psr\Http\Message\ServerRequestInterface;
8
use Psr\Log\LoggerInterface;
9
use Yiisoft\Aliases\Aliases;
10
use Yiisoft\Http\Method;
11
use Yiisoft\View\WebView;
12
use Yiisoft\Yii\Web\User\User;
13
use Yiisoft\Yii\Web\Data\DataResponseFactoryInterface;
14
15
class ContactController extends Controller
16
{
17
    private ContactMailer $mailer;
18
    private LoggerInterface $logger;
19
20
    public function __construct(
21
        DataResponseFactoryInterface $responseFactory,
22
        Aliases $aliases,
23
        WebView $view,
24
        User $user,
25
        ContactMailer $mailer,
26
        LoggerInterface $logger
27
    ) {
28
        $this->mailer = $mailer;
29
        $this->logger = $logger;
30
        parent::__construct($responseFactory, $user, $aliases, $view);
31
    }
32
33
    public function contact(ServerRequestInterface $request): ResponseInterface
34
    {
35
        $body = $request->getParsedBody();
36
        $parameters = [
37
            'body' => $body,
38
        ];
39
        if ($request->getMethod() === Method::POST) {
40
            $sent = false;
41
            $error = '';
42
43
            try {
44
                foreach (['subject', 'name', 'email', 'content'] as $name) {
45
                    if (empty($body[$name])) {
46
                        throw new \InvalidArgumentException(ucfirst($name) . ' is required');
47
                    }
48
                }
49
50
                $message = new Message($body['name'], $body['email'], $body['subject'], $body['content']);
51
52
                $files = $request->getUploadedFiles();
53
                if (!empty($files['file']) && $files['file']->getError() === UPLOAD_ERR_OK) {
54
                    $message->addFile($files['file']);
55
                }
56
57
                $this->mailer->send($message);
58
59
                $sent = true;
60
            } catch (\Throwable $e) {
61
                $this->logger->error($e);
62
                $error = $e->getMessage();
63
            }
64
            $parameters['sent'] = $sent;
65
            $parameters['error'] = $error;
66
        }
67
68
        $parameters['csrf'] = $request->getAttribute('csrf_token');
69
70
        return $this->render('form', $parameters);
71
    }
72
}
73