Passed
Push — master ( 9b28ce...1fed75 )
by Julito
11:04
created

GroupRepository::delete()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 5
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
6
7
namespace Chamilo\CoreBundle\Repository;
8
9
use Chamilo\CoreBundle\DataFixtures\AccessGroupFixtures;
10
use Chamilo\CoreBundle\Entity\Group;
11
use Chamilo\CoreBundle\Entity\User;
12
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
13
use Doctrine\Common\Collections\Collection;
14
use Doctrine\Persistence\ManagerRegistry;
15
16
class GroupRepository extends ServiceEntityRepository
17
{
18
    public function __construct(ManagerRegistry $registry)
19
    {
20
        parent::__construct($registry, Group::class);
21
    }
22
23
    public function delete(Group $group): void
24
    {
25
        $em = $this->getEntityManager();
26
        $em->remove($group);
27
        $em->flush();
28
    }
29
30
    /**
31
     * @return User[]|Collection|array
32
     */
33
    public function getAdmins()
34
    {
35
        $criteria = [
36
            'name' => 'admins',
37
        ];
38
39
        /** @var Group|null $group */
40
        $group = $this->findOneBy($criteria);
41
        if (null !== $group) {
42
            return $group->getUsers();
43
        }
44
45
        return [];
46
    }
47
48
    public function createDefaultGroups(AccessGroupFixtures $accessGroupFixtures = null): void
49
    {
50
        $groups = [
51
            [
52
                'code' => 'ADMIN',
53
                'title' => 'Administrators',
54
                'roles' => ['ROLE_ADMIN'],
55
            ],
56
            [
57
                'code' => 'STUDENT',
58
                'title' => 'Students',
59
                'roles' => ['ROLE_STUDENT'],
60
            ],
61
            [
62
                'code' => 'TEACHER',
63
                'title' => 'Teachers',
64
                'roles' => ['ROLE_TEACHER'],
65
            ],
66
            [
67
                'code' => 'RRHH',
68
                'title' => 'Human resources manager',
69
                'roles' => ['ROLE_RRHH'],
70
            ],
71
            [
72
                'code' => 'SESSION_MANAGER',
73
                'title' => 'Session',
74
                'roles' => ['ROLE_SESSION_MANAGER'],
75
            ],
76
            [
77
                'code' => 'QUESTION_MANAGER',
78
                'title' => 'Question manager',
79
                'roles' => ['ROLE_QUESTION_MANAGER'],
80
            ],
81
            [
82
                'code' => 'STUDENT_BOSS',
83
                'title' => 'Student boss',
84
                'roles' => ['ROLE_STUDENT_BOSS'],
85
            ],
86
            [
87
                'code' => 'INVITEE',
88
                'title' => 'Invitee',
89
                'roles' => ['ROLE_INVITEE'],
90
            ],
91
        ];
92
93
        $manager = $this->getEntityManager();
94
95
        foreach ($groups as $groupData) {
96
            $groupExists = $this->findOneBy(['code' => $groupData['code']]);
97
            if (null === $groupExists) {
98
                $group = (new Group($groupData['title']))
99
                    ->setCode($groupData['code'])
100
                ;
101
102
                foreach ($groupData['roles'] as $role) {
103
                    $group->addRole($role);
104
                }
105
                $manager->persist($group);
106
107
                if (null !== $accessGroupFixtures) {
108
                    $accessGroupFixtures->addReference('GROUP_'.$groupData['code'], $group);
109
                }
110
            }
111
        }
112
113
        $manager->flush();
114
    }
115
}
116