diff --git a/src/main/java/org/olat/modules/curriculum/CurriculumService.java b/src/main/java/org/olat/modules/curriculum/CurriculumService.java index 7da86f36a0ab4a2efe1aa60acd86e092341a35c7..67253cdafd5de7a5b678efc1bdf300f4333983c1 100644 --- a/src/main/java/org/olat/modules/curriculum/CurriculumService.java +++ b/src/main/java/org/olat/modules/curriculum/CurriculumService.java @@ -84,6 +84,8 @@ public interface CurriculumService { */ public List<Curriculum> getMyCurriculums(Identity identity); + public boolean hasCurriculums(IdentityRef identity); + /** * The list of curriculums the identity participates. * diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java index b1d1b198a4aa73296d7ffe7bd3745ef500eb5db7..8b5c41594c61952599af43e0d472ce61e87e17db 100644 --- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java +++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java @@ -137,6 +137,24 @@ public class CurriculumDAO { .getResultList(); } + public boolean hasMyCurriculums(IdentityRef identity) { + QueryBuilder sb = new QueryBuilder(256); + sb.append("select curElement.key from curriculumelement curElement") + .append(" inner join curElement.curriculum as cur") + .append(" inner join curElement.group as bGroup") + .append(" inner join bGroup.members membership") + .append(" where membership.identity.key=:memberKey and membership.role ").in(CurriculumRoles.participant, CurriculumRoles.coach, CurriculumRoles.owner) + .append(" and (cur.status is null or cur.status ").in(CurriculumStatus.active.name()).append(")"); + + List<Long> curriculumKeys = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), Long.class) + .setParameter("memberKey", identity.getKey()) + .setFirstResult(0) + .setMaxResults(1) + .getResultList(); + return curriculumKeys != null && !curriculumKeys.isEmpty() && curriculumKeys.get(0) != null; + } + public List<Long> getMyActiveCurriculumKeys(IdentityRef identity) { QueryBuilder sb = new QueryBuilder(256); sb.append("select curElement.curriculum.key from curriculumelement curElement") diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java index b4848382576a103b2ebffde826656fa7ccaf78c1..954ccaa0d30588535c16e3082f3583c9a46ec009 100644 --- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java +++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java @@ -286,6 +286,11 @@ public class CurriculumServiceImpl implements CurriculumService, OrganisationDat return curriculumDao.getMyCurriculums(identity); } + @Override + public boolean hasCurriculums(IdentityRef identity) { + return curriculumDao.hasMyCurriculums(identity); + } + @Override public List<CurriculumRef> getMyActiveCurriculumRefs(Identity identity) { List<Long> curriculumKeys = curriculumDao.getMyActiveCurriculumKeys(identity); diff --git a/src/main/java/org/olat/repository/ui/list/OverviewRepositoryListController.java b/src/main/java/org/olat/repository/ui/list/OverviewRepositoryListController.java index a54de12c040c2b6d32467eb0793b0732a3b70466..d607b447dcff1f6689ab2349ae75156c0401388e 100644 --- a/src/main/java/org/olat/repository/ui/list/OverviewRepositoryListController.java +++ b/src/main/java/org/olat/repository/ui/list/OverviewRepositoryListController.java @@ -46,6 +46,7 @@ import org.olat.core.util.event.EventBus; import org.olat.core.util.event.GenericEventListener; import org.olat.core.util.resource.OresHelper; import org.olat.modules.curriculum.CurriculumModule; +import org.olat.modules.curriculum.CurriculumService; import org.olat.modules.curriculum.ui.CurriculumListController; import org.olat.repository.CatalogEntry; import org.olat.repository.RepositoryManager; @@ -90,7 +91,9 @@ public class OverviewRepositoryListController extends BasicController implements private BreadcrumbedStackedPanel searchCoursesStackPanel; private final boolean isGuestOnly; - private boolean favoritDirty, myDirty; + private boolean myDirty; + private boolean favoritDirty; + private final boolean withCurriculums; private final EventBus eventBus; @@ -100,6 +103,8 @@ public class OverviewRepositoryListController extends BasicController implements private RepositoryModule repositoryModule; @Autowired private CurriculumModule curriculumModule; + @Autowired + private CurriculumService curriculumService; public OverviewRepositoryListController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl); @@ -123,7 +128,8 @@ public class OverviewRepositoryListController extends BasicController implements myCourseLink.setElementCssClass("o_sel_mycourses_my"); segmentView.addSegment(myCourseLink, false); - if(curriculumModule.isEnabled() && curriculumModule.isCurriculumInMyCourses()) { + withCurriculums = withCurriculumTab(); + if(withCurriculums) { curriculumLink = LinkFactory.createLink("search.curriculums", mainVC, this); curriculumLink.setElementCssClass("o_sel_mycurriculums"); segmentView.addSegment(curriculumLink, false); @@ -150,6 +156,11 @@ public class OverviewRepositoryListController extends BasicController implements putInitialPanel(mainPanel); } + private boolean withCurriculumTab() { + return curriculumModule.isEnabled() && curriculumModule.isCurriculumInMyCourses() + && curriculumService.hasCurriculums(getIdentity()); + } + @Override public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { if(entries == null || entries.isEmpty()) { @@ -347,7 +358,7 @@ public class OverviewRepositoryListController extends BasicController implements } private CurriculumListController doOpenCurriculum(UserRequest ureq) { - if(!curriculumModule.isEnabled() || !curriculumModule.isCurriculumInMyCourses()) { + if(!withCurriculums) { return null; } cleanUp(); diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java index 20762c4bb847b0653a187bfaed87af3bc923a83a..ee3261ca861fdfac5acb4f1d36e55f0794a23431 100644 --- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java +++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java @@ -313,6 +313,25 @@ public class CurriculumDAOTest extends OlatTestCase { Assert.assertEquals(curriculum, myCurriculums.get(0)); } + @Test + public void hasMyCurriculums() { + // add a curriculum with a coach in an element + Identity idWithCurriculum = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-for-fun-1"); + Identity idWithout = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-for-fun-2"); + Curriculum curriculum = curriculumService.createCurriculum("CUR-FUN-1", "My funny curriculum 1", "Short desc.", null); + CurriculumElement element = curriculumService.createCurriculumElement("Element-1", "1. Element", CurriculumElementStatus.active, + new Date(), new Date(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum); + dbInstance.commitAndCloseSession(); + curriculumService.addMember(element, idWithCurriculum, CurriculumRoles.participant); + dbInstance.commitAndCloseSession(); + + // has curriculums? + boolean hasCurriculums = curriculumDao.hasMyCurriculums(idWithCurriculum); + Assert.assertTrue(hasCurriculums); + boolean hasNotCurriculums = curriculumDao.hasMyCurriculums(idWithout); + Assert.assertFalse(hasNotCurriculums); + } + @Test public void hasCurriculumRole() { // add a curriculum manager