LoadEvent::load()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 42
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 28
c 1
b 0
f 0
dl 0
loc 42
rs 9.472
cc 4
nc 4
nop 1
1
<?php
2
3
/*
4
 * This file is part of the thealternativezurich/feedback project.
5
 *
6
 * (c) Florian Moser <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace App\DataFixtures;
13
14
use App\DataFixtures\Base\BaseFixture;
15
use App\Entity\Event;
16
use App\Entity\Semester;
17
use Doctrine\Persistence\ObjectManager;
18
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
19
use Symfony\Component\Serializer\SerializerInterface;
20
21
class LoadEvent extends BaseFixture
22
{
23
    public const ORDER = LoadSemester::ORDER + 1;
24
25
    /**
26
     * @var SerializerInterface
27
     */
28
    private $serializer;
29
30
    private $publicDir;
31
32
    /**
33
     * LoadEvent constructor.
34
     */
35
    public function __construct(SerializerInterface $serializer, ParameterBagInterface $parameterBag)
36
    {
37
        $this->serializer = $serializer;
38
        $this->publicDir = $parameterBag->get('PUBLIC_DIR');
39
    }
40
41
    /**
42
     * Load data fixtures with the passed EntityManager.
43
     */
44
    public function load(ObjectManager $manager)
45
    {
46
        //prepare resources
47
        $templateName = 'default.json';
48
        $template = file_get_contents($this->publicDir.'/templates/'.$templateName);
49
        $json = file_get_contents(__DIR__.'/Resources/events.json');
50
51
        //fill semester with events
52
        $semesters = $manager->getRepository(Semester::class)->findAll();
53
        $now = new \DateTime();
54
        foreach ($semesters as $semester) {
55
            //skip if created in the future
56
            if ($semester->getCreationDate() > $now) {
57
                continue;
58
            }
59
60
            /** @var Event[] $events */
61
            $events = $this->serializer->deserialize($json, Event::class.'[]', 'json');
62
            foreach ($events as $event) {
63
                $event->setSemester($semester);
64
                $event->setTemplateName($templateName);
65
                $event->setTemplate($template);
66
                $event->setFeedbackStartTime($event->getFeedbackStartTime().':00');
67
                $event->setFeedbackEndTime($event->getFeedbackEndTime().':00');
68
                $manager->persist($event);
69
            }
70
71
            //add text event
72
            $event = new Event();
73
            $event->setName('Testevent');
74
            $event->setDate((new \DateTime())->format('Y-m-d'));
75
            $event->setFeedbackStartTime('00:01:00');
76
            $event->setFeedbackEndTime('23:59:00');
77
            $event->setTemplateName($templateName);
78
            $event->setTemplate($template);
79
            $event->setHasExercise(true);
80
            $event->setHasLecture(true);
81
            $event->setSemester($semester);
82
            $manager->persist($event);
83
        }
84
85
        $manager->flush();
86
    }
87
88
    /**
89
     * Get the order of this fixture.
90
     *
91
     * @return int
92
     */
93
    public function getOrder()
94
    {
95
        return static::ORDER;
96
    }
97
}
98