Merge branch 'master' of github.com:chamilo/chamilo-lms

pull/4161/head
Yannick Warnier 4 years ago
commit 990c75c71e
  1. 33
      public/main/inc/ajax/user_manager.ajax.php
  2. 26
      src/CoreBundle/Repository/Node/UserRepository.php
  3. 33
      tests/CoreBundle/Repository/Node/UserRepositoryTest.php

@ -1,4 +1,5 @@
<?php
/* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\User;
@ -249,7 +250,6 @@ switch ($action) {
$status = isset($_REQUEST['status']) ? (int) $_REQUEST['status'] : DRH;
$role = User::getRoleFromStatus($status);
$users = Container::getUserRepository()->findByRole($role, $_REQUEST['q'], api_get_current_access_url_id());
if (empty($users)) {
@ -272,35 +272,16 @@ switch ($action) {
case 'teacher_to_basis_course':
api_block_anonymous_users(false);
$sortByFirstName = api_sort_by_first_name();
$urlId = api_get_current_access_url_id();
$qb = UserManager::getRepository()->createQueryBuilder('u');
$qb->where(
$qb->expr()->orX(
$qb->expr()->like('u.username', ':q'),
$qb->expr()->like('u.firstname', ':q'),
$qb->expr()->like('u.lastname', ':q')
)
$roleList = ['ROLE_TEACHER', 'ROLE_ADMIN', 'ROLE_SUPER_ADMIN'];
$users = Container::getUserRepository()->findByRoleList(
$roleList,
$_REQUEST['q'],
$urlId
);
if (api_is_multiple_url_enabled()) {
$qb
->innerJoin('ChamiloCoreBundle:AccessUrlRelUser', 'uru', Join::WITH, 'u.id = uru.user')
->andWhere('uru.url = '.$urlId);
}
$qb
->andWhere('u.status != '.DRH.' AND u.status != '.ANONYMOUS)
->orderBy(
$sortByFirstName
? 'u.firstname, u.firstname'
: 'u.firstname, u.lastname'
)
->setParameter('q', '%'.$_REQUEST['q'].'%');
$users = $qb->getQuery()->getResult();
if (!$users) {
echo json_encode([]);
break;

@ -166,14 +166,16 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
return $resourceNode;
}
public function addRoleListQueryBuilder(array $roleList, QueryBuilder $qb = null): QueryBuilder
public function addRoleListQueryBuilder(array $roles, QueryBuilder $qb = null): QueryBuilder
{
$qb = $this->getOrCreateQueryBuilder($qb, 'u');
if (!empty($roleList)) {
$qb
->andWhere('u.roles IN (:roles)')
->setParameter('roles', $roleList, Types::ARRAY)
;
if (!empty($roles)) {
$orX = $qb->expr()->orX();
foreach ($roles as $role) {
$orX->add($qb->expr()->like('u.roles', ':'.$role));
$qb->setParameter($role, '%'.$role.'%');
}
$qb->andWhere($orX);
}
return $qb;
@ -212,6 +214,18 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
return $qb->getQuery()->getResult();
}
public function findByRoleList(array $roleList, string $keyword, int $accessUrlId = 0)
{
$qb = $this->createQueryBuilder('u');
$this->addActiveAndNotAnonUserQueryBuilder($qb);
$this->addAccessUrlQueryBuilder($accessUrlId, $qb);
$this->addRoleListQueryBuilder($roleList, $qb);
$this->addSearchByKeywordQueryBuilder($keyword, $qb);
return $qb->getQuery()->getResult();
}
/**
* Get course user relationship based in the course_rel_user table.
*

@ -311,6 +311,39 @@ class UserRepositoryTest extends AbstractApiTest
$this->assertCount(1, $users);
}
public function testFindByRoleList(): void
{
$userRepo = self::getContainer()->get(UserRepository::class);
// Create user.
$user = $this->createUser('session_manager', 'session_manager');
$user->addRole('ROLE_SESSION_MANAGER');
$userRepo->update($user);
$user = $this->createUser('question_manager', 'question_manager');
$user->addRole('ROLE_QUESTION_MANAGER');
$userRepo->update($user);
$urlId = $this->getAccessUrl()->getId();
$users = $userRepo->findByRoleList(['ROLE_SESSION_MANAGER'], '', $urlId);
$this->assertNotNull($users);
$this->assertCount(1, $users);
$users = $userRepo->findByRoleList(['ROLE_SESSION_MANAGER'], 'session_manager', $urlId);
$this->assertNotNull($users);
$this->assertCount(1, $users);
$users = $userRepo->findByRoleList(['ROLE_QUESTION_MANAGER'], 'question_manager', $urlId);
$this->assertCount(1, $users);
$users = $userRepo->findByRoleList(['ROLE_QUESTION_MANAGER'], 'abc', $urlId);
$this->assertCount(0, $users);
$users = $userRepo->findByRoleList(['ROLE_QUESTION_MANAGER', 'ROLE_SESSION_MANAGER'], '', $urlId);
$this->assertCount(2, $users);
}
public function testAddFriendToUser(): void
{
$em = $this->getEntityManager();

Loading…
Cancel
Save