src/CoreBundle/Repository/GroupRepository.php
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\CoreBundle\Repository;
use Chamilo\CoreBundle\DataFixtures\AccessGroupFixtures;
use Chamilo\CoreBundle\Entity\Group;
use Chamilo\CoreBundle\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Common\Collections\Collection;
use Doctrine\Persistence\ManagerRegistry;
class GroupRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Group::class);
}
public function delete(Group $group): void
{
$em = $this->getEntityManager();
$em->remove($group);
$em->flush();
}
/**
* @return User[]|Collection|array
*/
public function getAdmins()
{
$criteria = [
'title' => 'admins',
];
/** @var Group|null $group */
$group = $this->findOneBy($criteria);
if (null !== $group) {
return $group->getUsers();
}
return [];
}
public function getDefaultGroups(): array
{
return [
[
'code' => 'ADMIN',
'title' => 'Administrators',
'roles' => ['ROLE_ADMIN'],
],
[
'code' => 'STUDENT',
'title' => 'Students',
'roles' => ['ROLE_STUDENT'],
],
[
'code' => 'TEACHER',
'title' => 'Teachers',
'roles' => ['ROLE_TEACHER'],
],
[
'code' => 'RRHH',
'title' => 'Human resources manager',
'roles' => ['ROLE_HR'],
],
[
'code' => 'SESSION_MANAGER',
'title' => 'Session',
'roles' => ['ROLE_SESSION_MANAGER'],
],
[
'code' => 'QUESTION_MANAGER',
'title' => 'Question manager',
'roles' => ['ROLE_QUESTION_MANAGER'],
],
[
'code' => 'STUDENT_BOSS',
'title' => 'Student boss',
'roles' => ['ROLE_STUDENT_BOSS'],
],
[
'code' => 'INVITEE',
'title' => 'Invitee',
'roles' => ['ROLE_INVITEE'],
],
];
}
public function createDefaultGroups(?AccessGroupFixtures $accessGroupFixtures = null): void
{
$em = $this->getEntityManager();
$groups = $this->getDefaultGroups();
foreach ($groups as $groupItem) {
$groupExists = $this->findOneBy(['code' => $groupItem['code']]);
if (null === $groupExists) {
$group = (new Group($groupItem['title']))
->setCode($groupItem['code'])
;
foreach ($groupItem['roles'] as $role) {
$group->addRole($role);
}
$em->persist($group);
if (null !== $accessGroupFixtures) {
$accessGroupFixtures->addReference('GROUP_'.$groupItem['code'], $group);
}
}
}
$em->flush();
}
}