From 16d103e8e438fe26d25d601e29986110a6ac2e83 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Tue, 21 Aug 2018 15:49:42 +0200 Subject: [PATCH] OO-3286: limit the queries to the repository entries with lectures enabled --- .../olat/modules/lecture/LectureService.java | 8 ++- .../lecture/manager/LectureBlockDAO.java | 14 +++-- .../lecture/manager/LectureBlockDAOTest.java | 60 ++++++++++++++++--- .../olat/restapi/LecturesBlocksRootTest.java | 16 ++++- 4 files changed, 82 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/olat/modules/lecture/LectureService.java b/src/main/java/org/olat/modules/lecture/LectureService.java index 47e8db28553..f41f0640813 100644 --- a/src/main/java/org/olat/modules/lecture/LectureService.java +++ b/src/main/java/org/olat/modules/lecture/LectureService.java @@ -402,7 +402,9 @@ public interface LectureService { public List<LectureBlock> getLectureBlocks(RepositoryEntryRef entry); /** - * Search lecture blocks. It returns only lecture blocks with a teacher. + * Search lecture blocks. It returns only lecture blocks with a teacher and + * if the repository entry has the lectures enabled. + * * * @param searchParams The search parameters * @return A list of lecture blocks @@ -427,7 +429,9 @@ public interface LectureService { public List<LectureBlockWithTeachers> getLectureBlocksWithTeachers(RepositoryEntryRef entry, IdentityRef teacher, LecturesBlockSearchParameters searchParams); /** - * The list of lecture blocks of a specific teacher + * The list of lecture blocks of a specific teacher. The lecture blocks come + * from repository entry where the lectures are enabled. + * * @param teacher The teacher to search with. * @return A list of lecture blocks. */ diff --git a/src/main/java/org/olat/modules/lecture/manager/LectureBlockDAO.java b/src/main/java/org/olat/modules/lecture/manager/LectureBlockDAO.java index 9fa718cfab6..3478e6c6c69 100644 --- a/src/main/java/org/olat/modules/lecture/manager/LectureBlockDAO.java +++ b/src/main/java/org/olat/modules/lecture/manager/LectureBlockDAO.java @@ -168,9 +168,12 @@ public class LectureBlockDAO { .append(" inner join block.teacherGroup tGroup") .append(" inner join tGroup.members membership") .append(" inner join fetch block.entry entry"); - boolean where = false; - where = addSearchParametersToQuery(sb, where, searchParams); - + boolean where = addSearchParametersToQuery(sb, false, searchParams); + where = PersistenceHelper.appendAnd(sb, where); + sb.append(" exists (select config.key from lectureentryconfig config") + .append(" where config.entry.key=entry.key and config.lectureEnabled=true") + .append(" )"); + TypedQuery<LectureBlock> query = dbInstance.getCurrentEntityManager() .createQuery(sb.toString(), LectureBlock.class); addSearchParametersToQuery(query, searchParams); @@ -185,7 +188,10 @@ public class LectureBlockDAO { .append(" inner join fetch block.entry entry") .append(" where membership.identity.key=:teacherKey"); addSearchParametersToQuery(sb, true, searchParams); - + sb.append(" and exists (select config.key from lectureentryconfig config") + .append(" where config.entry.key=entry.key and config.lectureEnabled=true") + .append(" )"); + TypedQuery<LectureBlock> query = dbInstance.getCurrentEntityManager() .createQuery(sb.toString(), LectureBlock.class) .setParameter("teacherKey", identityRef.getKey()); diff --git a/src/test/java/org/olat/modules/lecture/manager/LectureBlockDAOTest.java b/src/test/java/org/olat/modules/lecture/manager/LectureBlockDAOTest.java index 39ee466c69f..b9b1ceeaa12 100644 --- a/src/test/java/org/olat/modules/lecture/manager/LectureBlockDAOTest.java +++ b/src/test/java/org/olat/modules/lecture/manager/LectureBlockDAOTest.java @@ -152,7 +152,7 @@ public class LectureBlockDAOTest extends OlatTestCase { public void searchLectureBlocks() { Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-teacher-1"); Identity lectureManager = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-manager-1"); - RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry = createResourceWithLecturesEnabled(); repositoryEntryRelationDao.addRole(lectureManager, entry, OrganisationRoles.lecturemanager.name()); LectureBlock lectureBlock = lectureBlockDao.createLectureBlock(entry); lectureBlock.setStartDate(new Date()); @@ -171,6 +171,27 @@ public class LectureBlockDAOTest extends OlatTestCase { Assert.assertEquals(lectureBlock, loadedBlock); } + @Test + public void searchLectureBlocks_lectureDisabled() { + Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-teacher-1"); + Identity lectureManager = JunitTestHelper.createAndPersistIdentityAsRndUser("lec-manager-1"); + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + repositoryEntryRelationDao.addRole(lectureManager, entry, OrganisationRoles.lecturemanager.name()); + LectureBlock lectureBlock = lectureBlockDao.createLectureBlock(entry); + lectureBlock.setStartDate(new Date()); + lectureBlock.setEndDate(new Date()); + lectureBlock.setTitle("Hello lecture manager"); + lectureBlock = lectureBlockDao.update(lectureBlock); + lectureService.addTeacher(lectureBlock, teacher); + dbInstance.commitAndCloseSession(); + + LecturesBlockSearchParameters searchParams = new LecturesBlockSearchParameters(); + searchParams.setManager(lectureManager); + List<LectureBlock> blocks = lectureBlockDao.searchLectureBlocks(searchParams); + Assert.assertNotNull(blocks); + Assert.assertTrue(blocks.isEmpty()); + } + @Test public void getLectureBlocks_all() { RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); @@ -190,10 +211,9 @@ public class LectureBlockDAOTest extends OlatTestCase { @Test public void loadByTeachers() { Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("teacher-1"); - RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry = createResourceWithLecturesEnabled(); LectureBlock lectureBlock = createMinimalLectureBlock(entry); dbInstance.commitAndCloseSession(); - lectureService.addTeacher(lectureBlock, teacher); dbInstance.commitAndCloseSession(); @@ -206,11 +226,27 @@ public class LectureBlockDAOTest extends OlatTestCase { } @Test - public void loadByTeachers_searchString() { + public void loadByTeachers_lectureDisabled() { Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("teacher-1"); RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); LectureBlock lectureBlock = createMinimalLectureBlock(entry); dbInstance.commitAndCloseSession(); + lectureService.addTeacher(lectureBlock, teacher); + dbInstance.commitAndCloseSession(); + + //search all + LecturesBlockSearchParameters searchParams = new LecturesBlockSearchParameters(); + List<LectureBlock> blocks = lectureBlockDao.loadByTeacher(teacher, searchParams); + Assert.assertNotNull(blocks); + Assert.assertTrue(blocks.isEmpty()); + } + + @Test + public void loadByTeachers_searchString() { + Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("teacher-1"); + RepositoryEntry entry = createResourceWithLecturesEnabled(); + LectureBlock lectureBlock = createMinimalLectureBlock(entry); + dbInstance.commitAndCloseSession(); lectureService.addTeacher(lectureBlock, teacher); dbInstance.commitAndCloseSession(); @@ -234,7 +270,7 @@ public class LectureBlockDAOTest extends OlatTestCase { @Test public void loadByTeachers_startEndDates() { Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("teacher-1"); - RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry = createResourceWithLecturesEnabled(); LectureBlock lectureBlock = createMinimalLectureBlock(entry); dbInstance.commitAndCloseSession(); @@ -267,7 +303,7 @@ public class LectureBlockDAOTest extends OlatTestCase { @Test public void loadByTeachers_startDate() { Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("teacher-3"); - RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry = createResourceWithLecturesEnabled(); LectureBlock lectureBlock = createMinimalLectureBlock(entry); dbInstance.commitAndCloseSession(); @@ -296,7 +332,7 @@ public class LectureBlockDAOTest extends OlatTestCase { @Test public void loadByTeachers_endDate() { Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("teacher-3"); - RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry = createResourceWithLecturesEnabled(); LectureBlock lectureBlock = createMinimalLectureBlock(entry); dbInstance.commitAndCloseSession(); @@ -559,6 +595,16 @@ public class LectureBlockDAOTest extends OlatTestCase { Assert.assertNull(deletedBlock); } + private RepositoryEntry createResourceWithLecturesEnabled() { + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + dbInstance.commit(); + RepositoryEntryLectureConfiguration config = lectureService.getRepositoryEntryLectureConfiguration(entry); + config.setLectureEnabled(true); + lectureService.updateRepositoryEntryLectureConfiguration(config); + dbInstance.commit(); + return entry; + } + private LectureBlock createMinimalLectureBlock(RepositoryEntry entry) { LectureBlock lectureBlock = lectureBlockDao.createLectureBlock(entry); Calendar cal = Calendar.getInstance(); diff --git a/src/test/java/org/olat/restapi/LecturesBlocksRootTest.java b/src/test/java/org/olat/restapi/LecturesBlocksRootTest.java index 364d0254743..88d3bcecd32 100644 --- a/src/test/java/org/olat/restapi/LecturesBlocksRootTest.java +++ b/src/test/java/org/olat/restapi/LecturesBlocksRootTest.java @@ -39,6 +39,7 @@ import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; import org.olat.modules.lecture.LectureBlock; import org.olat.modules.lecture.LectureService; +import org.olat.modules.lecture.RepositoryEntryLectureConfiguration; import org.olat.modules.lecture.restapi.LectureBlockVO; import org.olat.repository.RepositoryEntry; import org.olat.test.JunitTestHelper; @@ -72,7 +73,7 @@ public class LecturesBlocksRootTest extends OlatJerseyTestCase { throws IOException, URISyntaxException { Identity author = JunitTestHelper.createAndPersistIdentityAsRndAuthor("lect-root-all"); - RepositoryEntry entry = JunitTestHelper.deployBasicCourse(author); + RepositoryEntry entry = deployCourseWithLecturesEnabled(author); LectureBlock block = createLectureBlock(entry); dbInstance.commit(); lectureService.addTeacher(block, author); @@ -114,7 +115,7 @@ public class LecturesBlocksRootTest extends OlatJerseyTestCase { Identity author = JunitTestHelper.createAndPersistIdentityAsRndAuthor("lect-root-all"); Identity user = JunitTestHelper.createAndPersistIdentityAsRndAuthor("lect-root-hacker"); - RepositoryEntry entry = JunitTestHelper.deployBasicCourse(author); + RepositoryEntry entry = deployCourseWithLecturesEnabled(author); LectureBlock block = createLectureBlock(entry); dbInstance.commit(); lectureService.addTeacher(block, author); @@ -134,7 +135,7 @@ public class LecturesBlocksRootTest extends OlatJerseyTestCase { public void getLecturesBlock_date() throws IOException, URISyntaxException { Identity author = JunitTestHelper.createAndPersistIdentityAsRndAuthor("lect-root-1"); - RepositoryEntry entry = JunitTestHelper.deployBasicCourse(author); + RepositoryEntry entry = deployCourseWithLecturesEnabled(author); LectureBlock block = createLectureBlock(entry); dbInstance.commit(); lectureService.addTeacher(block, author); @@ -165,6 +166,15 @@ public class LecturesBlocksRootTest extends OlatJerseyTestCase { Assert.assertEquals(entry.getKey(), lectureBlockVo.getRepoEntryKey()); } + private RepositoryEntry deployCourseWithLecturesEnabled(Identity author) { + RepositoryEntry entry = JunitTestHelper.deployBasicCourse(author); + RepositoryEntryLectureConfiguration config = lectureService.getRepositoryEntryLectureConfiguration(entry); + config.setLectureEnabled(true); + lectureService.updateRepositoryEntryLectureConfiguration(config); + dbInstance.commit(); + return entry; + } + private LectureBlock createLectureBlock(RepositoryEntry entry) { LectureBlock lectureBlock = lectureService.createLectureBlock(entry); lectureBlock.setStartDate(new Date()); -- GitLab