Passed
Push — master ( 0e23f3...7cff38 )
by Julito
24:09
created

CreateCCalendarEventAction::__invoke()   B

Complexity

Conditions 6
Paths 12

Size

Total Lines 40
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 21
c 1
b 0
f 0
nc 12
nop 3
dl 0
loc 40
rs 8.9617
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
6
7
namespace Chamilo\CoreBundle\Controller\Api;
8
9
use Chamilo\CoreBundle\Entity\User;
10
use Chamilo\CourseBundle\Entity\CCalendarEvent;
11
use Chamilo\CourseBundle\Repository\CCalendarEventRepository;
12
use DateTime;
13
use Exception;
14
use Symfony\Component\HttpFoundation\Request;
15
use Symfony\Component\Security\Core\Security;
16
17
class CreateCCalendarEventAction extends BaseResourceFileAction
18
{
19
    public function __invoke(Request $request, CCalendarEventRepository $repo, Security $security): CCalendarEvent
20
    {
21
        $event = new CCalendarEvent();
22
        $result = $this->handleCreateRequest($event, $repo, $request);
23
24
        /** @var User $currentUser */
25
        $currentUser = $security->getUser();
26
27
        $event
28
            ->setContent($result['content'] ?? '')
29
            ->setComment($result['comment'] ?? '')
30
            ->setColor($result['color'] ?? '')
31
            ->setStartDate(new DateTime($result['startDate'] ?? ''))
32
            ->setEndDate(new DateTime($result['endDate'] ?? ''))
33
            //->setAllDay($result['allDay'] ?? false)
34
            ->setCollective($result['collective'] ?? false)
35
            ->setCreator($currentUser)
36
        ;
37
38
        // Detect event type based in the resource link array.
39
40
        $type = 'personal';
41
        if (!empty($event->getResourceLinkArray())) {
42
            foreach ($event->getResourceLinkArray() as $link) {
43
                if (isset($link['cid'])) {
44
                    $type = 'course';
45
46
                    break;
47
                }
48
            }
49
        }
50
51
        if ('personal' === $type) {
52
            if ($currentUser->getResourceNode()->getId() !== $event->getParentResourceNode()) {
53
                throw new Exception('Not allowed');
54
            }
55
        }
56
        // @todo check course access? Should be handle by CourseVoter?
57
58
        return $event;
59
    }
60
}
61