diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java index b3d80fb3be460c8719f5010cba302630cb887263..7a23039ccc73e635291086c63ab0ea688e72e77f 100644 --- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java +++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java @@ -589,8 +589,8 @@ public class CurriculumElementDAO { sb.and() .append("exists (select membership.key from bgroupmember as membership") .append(" where membership.identity.key=:managerKey") - .append(" and (membership.group.key=baseGroup.key or organis.group.key=baseGroup.key)") - .append(" and role in ('").append(CurriculumRoles.curriculummanager).append("','").append(OrganisationRoles.administrator).append("')") + .append(" and membership.role").in(CurriculumRoles.curriculummanager, CurriculumRoles.owner, OrganisationRoles.administrator) + .append(" and (membership.group.key=baseGroup.key or membership.group.key=organis.group.key)") .append(")"); } diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java index d192662e7df41274a35f8de3b55a1e5ac34f289e..6adeee7cbb1d60d1948dc4c0fa8265517a5e4e14 100644 --- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java +++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java @@ -30,8 +30,10 @@ import java.util.UUID; import org.junit.Assert; import org.junit.Test; +import org.olat.basesecurity.OrganisationService; import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; +import org.olat.core.id.Organisation; import org.olat.modules.curriculum.Curriculum; import org.olat.modules.curriculum.CurriculumCalendars; import org.olat.modules.curriculum.CurriculumElement; @@ -45,6 +47,8 @@ import org.olat.modules.curriculum.CurriculumRoles; import org.olat.modules.curriculum.CurriculumService; import org.olat.modules.curriculum.model.CurriculumElementImpl; import org.olat.modules.curriculum.model.CurriculumElementInfos; +import org.olat.modules.curriculum.model.CurriculumElementSearchInfos; +import org.olat.modules.curriculum.model.CurriculumElementSearchParams; import org.olat.modules.curriculum.model.CurriculumImpl; import org.olat.repository.RepositoryEntry; import org.olat.test.JunitTestHelper; @@ -69,6 +73,8 @@ public class CurriculumElementDAOTest extends OlatTestCase { private CurriculumElementTypeDAO curriculumElementTypeDao; @Autowired private CurriculumService curriculumService; + @Autowired + private OrganisationService organisationService; @Test public void createCurriculumElement() { @@ -337,6 +343,68 @@ public class CurriculumElementDAOTest extends OlatTestCase { Assert.assertEquals(element, elementsByKey.get(0)); } + @Test + public void searchElementsWithParams_permissions() { + Identity nobody = JunitTestHelper.createAndPersistIdentityAsRndUser("curriculum-nobody"); + Organisation defOrganisation = organisationService.getDefaultOrganisation(); + Identity curriculumAdmin = JunitTestHelper.createAndPersistIdentityAsRndAdmin("curriculum-admin"); + Curriculum curriculum = curriculumDao.createAndPersist("cur-for-el-6", "Curriculum for element", "Curriculum", defOrganisation); + String externalId = UUID.randomUUID().toString(); + String identifier = UUID.randomUUID().toString(); + CurriculumElement element = curriculumElementDao.createCurriculumElement(identifier, "6.1 Element", + CurriculumElementStatus.active, null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum); + dbInstance.commit(); + element.setExternalId(externalId); + element = curriculumElementDao.update(element); + dbInstance.commitAndCloseSession(); + + //search by external id, administrator + CurriculumElementSearchParams adminSearchParams = new CurriculumElementSearchParams(curriculumAdmin); + adminSearchParams.setElementId(externalId); + List<CurriculumElementSearchInfos> elementsByExternalId = curriculumElementDao.searchElements(adminSearchParams); + Assert.assertNotNull(elementsByExternalId); + Assert.assertEquals(1, elementsByExternalId.size()); + Assert.assertEquals(element, elementsByExternalId.get(0).getCurriculumElement()); + + //search by identifier + CurriculumElementSearchParams nobodySearchParams = new CurriculumElementSearchParams(nobody); + nobodySearchParams.setElementId(externalId); + List<CurriculumElementSearchInfos> noElements = curriculumElementDao.searchElements(nobodySearchParams); + Assert.assertNotNull(noElements); + Assert.assertTrue(noElements.isEmpty()); + } + + /** + * The method only checks the query syntax, not the results. + */ + @Test + public void searchElementsWithParams_allParameters() { + Organisation defOrganisation = organisationService.getDefaultOrganisation(); + Identity curriculumAdmin = JunitTestHelper.createAndPersistIdentityAsRndAdmin("curriculum-admin"); + Curriculum curriculum = curriculumDao.createAndPersist("cur-for-el-6", "Curriculum for element", "Curriculum", defOrganisation); + String externalId = UUID.randomUUID().toString(); + String identifier = UUID.randomUUID().toString(); + CurriculumElement element = curriculumElementDao.createCurriculumElement(identifier, "6.1 Element", + CurriculumElementStatus.active, null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum); + dbInstance.commit(); + element.setExternalId(externalId); + element = curriculumElementDao.update(element); + dbInstance.commitAndCloseSession(); + + //search by external id, administrator + CurriculumElementSearchParams adminSearchParams = new CurriculumElementSearchParams(curriculumAdmin); + adminSearchParams.setElementId(externalId); + adminSearchParams.setElementBeginDate(new Date()); + adminSearchParams.setElementEndDate(new Date()); + adminSearchParams.setElementText("Hello"); + adminSearchParams.setEntryId("734"); + adminSearchParams.setEntryText("Course"); + adminSearchParams.setSearchString("Search"); + List<CurriculumElementSearchInfos> elementsByExternalId = curriculumElementDao.searchElements(adminSearchParams); + Assert.assertNotNull(elementsByExternalId); + + } + @Test public void getDescendants() { Curriculum curriculum = curriculumDao.createAndPersist("cur-for-el-5", "Curriculum for element", "Curriculum", null);