diff --git a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java index eb6d69f3f093e8190782f1a82f2bc9d058c1a2d8..ed386c402b5826254e7cf2ceaa699f0b0af55d34 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java +++ b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java @@ -19,6 +19,8 @@ */ package org.olat.core.commons.modules.bc.commands; +import java.util.List; + import org.olat.core.CoreSpringFactory; import org.olat.core.commons.editor.htmleditor.HTMLEditorConfig; import org.olat.core.commons.modules.bc.components.FolderComponent; @@ -87,8 +89,16 @@ public class CmdOpenContent extends BasicController implements FolderCommand { status = FolderCommandHelper.sanityCheck(wControl, folderComponent); if(status == FolderCommandStatus.STATUS_SUCCESS) { - currentItem = folderComponent.getCurrentContainerChildren().get(Integer.parseInt(pos)); - status = FolderCommandHelper.sanityCheck2(wControl, folderComponent, currentItem); + int index = Integer.parseInt(pos); + List<VFSItem> children = folderComponent.getCurrentContainerChildren(); + if(index >= 0 && index < children.size()) { + currentItem = folderComponent.getCurrentContainerChildren().get(index); + status = FolderCommandHelper.sanityCheck2(wControl, folderComponent, currentItem); + } else { + status = FolderCommandStatus.STATUS_FAILED; + getWindowControl().setError(translator.translate("failed")); + return null; + } } if(status == FolderCommandStatus.STATUS_FAILED) { return null; diff --git a/src/main/java/org/olat/course/highscore/ui/HighScoreEditController.java b/src/main/java/org/olat/course/highscore/ui/HighScoreEditController.java index 5c5c12e18fa7e17b303fea51c23089422ea98aa6..e66df6649412d87824cd32f4cdc53d2a7d970462 100644 --- a/src/main/java/org/olat/course/highscore/ui/HighScoreEditController.java +++ b/src/main/java/org/olat/course/highscore/ui/HighScoreEditController.java @@ -267,8 +267,13 @@ public class HighScoreEditController extends FormBasicController { config.set(CONFIG_KEY_DATESTART, dateStart.getDate()); config.set(CONFIG_KEY_ANONYMIZE, displayAnonymous.isSelected(0)); if (showListing.isSelected(0)) { - config.set(CONFIG_KEY_BESTONLY, bestOnlyEl.getSelected()); - config.set(CONFIG_KEY_NUMUSER, numTableRows.getIntValue()); + int bestOnly = bestOnlyEl.getSelected(); + config.set(CONFIG_KEY_BESTONLY, bestOnly); + if(bestOnly == 1) { + config.set(CONFIG_KEY_NUMUSER, numTableRows.getIntValue()); + } else { + config.remove(CONFIG_KEY_NUMUSER); + } } fireEvent(ureq, Event.DONE_EVENT); } diff --git a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java index 0db2d79d34d54a4aa756573811982c342a2fa991..7c45555fe28de265e3e0dea44af3f7eb24bb424b 100644 --- a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java +++ b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java @@ -801,6 +801,14 @@ public class GTAManagerImpl implements GTAManager { .setParameter("taskListKey", taskList.getKey()) .executeUpdate(); + StringBuilder taskSb = new StringBuilder(128); + taskSb.append("delete from gtataskrevision as taskrev where taskrev.task.key in (") + .append(" select task.key from gtatask as task where task.taskList.key=:taskListKey)"); + numOfDeletedObjects += dbInstance.getCurrentEntityManager() + .createQuery(taskSb.toString()) + .setParameter("taskListKey", taskList.getKey()) + .executeUpdate(); + String deleteTasks = "delete from gtatask as task where task.taskList.key=:taskListKey"; numOfDeletedObjects += dbInstance.getCurrentEntityManager().createQuery(deleteTasks) .setParameter("taskListKey", taskList.getKey()) diff --git a/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectRunController.java b/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectRunController.java index 302f6feb3bb2118bae2a1daa285c4edd1674faf7..5c8c83a6d199a34f1b014b984a8c2eabc5cf8f7b 100644 --- a/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectRunController.java +++ b/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectRunController.java @@ -181,9 +181,11 @@ public class AdobeConnectRunController extends BasicController implements Activa } private void back() { - mainVC.remove(meetingCtrl.getInitialComponent()); - removeAsListenerAndDispose(meetingCtrl); - meetingCtrl = null; + if(meetingCtrl != null) { + mainVC.remove(meetingCtrl.getInitialComponent()); + removeAsListenerAndDispose(meetingCtrl); + meetingCtrl = null; + } } private void doOpenMeetings(UserRequest ureq) { diff --git a/src/main/java/org/olat/modules/curriculum/ui/component/CurriculumElementViewsRowComparator.java b/src/main/java/org/olat/modules/curriculum/ui/component/CurriculumElementViewsRowComparator.java index 07a39346aa7705330b3d7d7ae7850dbb592a0345..574c33b97f04a09e0c181f7851b77f15751e28c9 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/component/CurriculumElementViewsRowComparator.java +++ b/src/main/java/org/olat/modules/curriculum/ui/component/CurriculumElementViewsRowComparator.java @@ -62,7 +62,12 @@ public class CurriculumElementViewsRowComparator extends FlexiTreeNodeComparator // This case is usually not possible CurriculumElementWithViewsRow p1 = c1.getParent(); CurriculumElementWithViewsRow p2 = c2.getParent(); - c = compareCurriculumElements(p1, p2); + if(p1 == null || p2 == null) { + // reversed because no parent at the top, higher in the hierarchy + c = -compareNullObjects(p1, p2); + } else { + c = compareCurriculumElements(p1, p2); + } } else { // This case is usually not possible c = compareDisplayName(c1, c2); diff --git a/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java b/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java index 4006abd7bf47ae033303418ef117c3d9314703f0..b73a0fc98269fb639235370c2efb81880bbfb227 100644 --- a/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java +++ b/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java @@ -519,6 +519,48 @@ public class GTAManagerTest extends OlatTestCase { Assert.assertEquals(0, deletedAssignedTasks.size()); } + + @Test + public void deleteTaskList_withRevisions() { + Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-29"); + Identity participant = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-30"); + BusinessGroup businessGroup = businessGroupDao.createAndPersist(coach, "gdao", "gdao-rev-delete-desc", -1, -1, false, false, false, false, false); + businessGroupRelationDao.addRole(participant, businessGroup, GroupRole.participant.name()); + dbInstance.commit(); + RepositoryEntry re = deployGTACourse(); + GTACourseNode node = getGTACourseNode(re); + node.getModuleConfiguration().setStringValue(GTACourseNode.GTASK_TYPE, GTAType.group.name()); + TaskList tasks = gtaManager.createIfNotExists(re, node); + File taskFile = new File("bg.txt"); + Assert.assertNotNull(tasks); + dbInstance.commit(); + + //select + AssignmentResponse response = gtaManager.selectTask(businessGroup, tasks, node, taskFile, participant); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(response); + + //check that there is tasks + List<Task> assignedTasks = gtaManager.getTasks(participant, re, node); + Assert.assertNotNull(assignedTasks); + Assert.assertEquals(1, assignedTasks.size()); + + // create a revision date + gtaManager.updateTaskRevisionComment(assignedTasks.get(0), TaskProcess.revision, 1, "Hello", coach); + dbInstance.commitAndCloseSession(); + + //delete + int numOfDeletedObjects = gtaManager.deleteTaskList(re, node); + Assert.assertEquals(3, numOfDeletedObjects); + dbInstance.commitAndCloseSession(); + + //check that there isn't any tasks + List<Task> deletedAssignedTasks = gtaManager.getTasks(participant, re, node); + Assert.assertNotNull(deletedAssignedTasks); + Assert.assertTrue(deletedAssignedTasks.isEmpty()); + } + + /** * Create 2 pseudo nodes in a course, and delete the task of the first node * and check that the task of second are always there.