Passed
Push — master ( 63cc32...87bec5 )
by Julito
09:23 queued 11s
created

CreateMessageAttachmentAction   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 16
c 1
b 0
f 0
dl 0
loc 32
rs 10
wmc 2

1 Method

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 27 2
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
declare(strict_types=1);
6
7
namespace Chamilo\CoreBundle\Controller\Api;
8
9
use Chamilo\CoreBundle\Entity\Message;
10
use Chamilo\CoreBundle\Entity\MessageAttachment;
11
use Chamilo\CoreBundle\Repository\Node\MessageAttachmentRepository;
12
use Doctrine\ORM\EntityManager;
13
use Exception;
14
use Symfony\Component\HttpFoundation\File\UploadedFile;
15
use Symfony\Component\HttpFoundation\Request;
16
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
17
18
class CreateMessageAttachmentAction extends BaseResourceFileAction
19
{
20
    /**
21
     * @throws Exception
22
     */
23
    public function __invoke(Request $request, MessageAttachmentRepository $repo, EntityManager $em): MessageAttachment
24
    {
25
        /** @var UploadedFile $uploadedFile */
26
        $uploadedFile = $request->files->get('file');
27
28
        if (empty($uploadedFile)) {
29
            throw new BadRequestHttpException('file is required');
30
        }
31
32
        $messageRepo = $em->getRepository(Message::class);
33
34
        $message = $messageRepo->find($request->get('messageId'));
35
36
        $attachment = (new MessageAttachment())
37
            ->setFilename($uploadedFile->getFilename())
38
            ->setMessage($message)
39
            ->setParent($message->getSender())
40
            ->setCreator($message->getSender())
41
        ;
42
43
        $message->addAttachment($attachment);
44
45
        $em->persist($attachment);
46
        $repo->addFile($attachment, $uploadedFile);
47
        $em->flush();
48
49
        return $attachment;
50
    }
51
}
52