You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.2 KiB
119 lines
3.2 KiB
<?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();
|
|
}
|
|
}
|
|
|