diff --git a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java index 3aa6a46c30b804dce4f7ae4eca09e78f45d57d2e..7e5eaa254be79884ac08dedd110737b7d676cf1a 100644 --- a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java +++ b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java @@ -145,7 +145,7 @@ public class PortfolioCourseNode extends AbstractAccessableCourseNode implements String message = trans.translate("guestnoaccess.message"); controller = MessageUIFactory.createInfoMessage(ureq, wControl, title, message); } else { - controller = new PortfolioCourseNodeRunController(ureq, wControl, userCourseEnv, ne, this); + controller = new PortfolioCourseNodeRunController(ureq, wControl, userCourseEnv, this); } Controller ctrl = TitledWrapperHelper.getWrapper(ureq, wControl, controller, this, "o_ep_icon"); return new NodeRunConstructionResult(ctrl); diff --git a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java index 8606ae2f1a8c4f82395dbec12a1b1665e763fa52..7203c7e19ae8c35de8e3c692b8150dc58481361f 100644 --- a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java +++ b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java @@ -50,7 +50,6 @@ import org.olat.course.nodes.PortfolioCourseNode; import org.olat.course.nodes.portfolio.PortfolioCourseNodeConfiguration.DeadlineType; import org.olat.course.run.scoring.ScoreAccounting; import org.olat.course.run.scoring.ScoreEvaluation; -import org.olat.course.run.userview.NodeEvaluation; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.modules.ModuleConfiguration; import org.olat.portfolio.EPLoggingAction; @@ -93,7 +92,7 @@ public class PortfolioCourseNodeRunController extends FormBasicController { private StaticTextElement deadlineDateText; public PortfolioCourseNodeRunController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, - NodeEvaluation ne, PortfolioCourseNode courseNode) { + PortfolioCourseNode courseNode) { super(ureq, wControl, "run"); this.courseNode = courseNode; diff --git a/src/main/java/org/olat/modules/fo/manager/ForumManager.java b/src/main/java/org/olat/modules/fo/manager/ForumManager.java index 854a129a27d7a6d9db399667f6a9d321f2fadb08..f1353a6da19eb9e1e98a1818bdfc76a6a80afe67 100644 --- a/src/main/java/org/olat/modules/fo/manager/ForumManager.java +++ b/src/main/java/org/olat/modules/fo/manager/ForumManager.java @@ -731,13 +731,15 @@ public class ForumManager { // make sure the message is reloaded if it is not in the hibernate session cache Message reloadedMessage = dbInstance.getCurrentEntityManager().find(MessageImpl.class, m.getKey()); - // delete all properties of one single message - deleteMessageProperties(forumKey, reloadedMessage); - dbInstance.getCurrentEntityManager().remove(reloadedMessage); - - //delete all flags - OLATResourceable ores = OresHelper.createOLATResourceableInstance(Forum.class, forumKey); - markingService.getMarkManager().deleteMarks(ores, m.getKey().toString()); + if(reloadedMessage != null) { + // delete all properties of one single message + deleteMessageProperties(forumKey, reloadedMessage); + dbInstance.getCurrentEntityManager().remove(reloadedMessage); + + //delete all flags + OLATResourceable ores = OresHelper.createOLATResourceableInstance(Forum.class, forumKey); + markingService.getMarkManager().deleteMarks(ores, m.getKey().toString()); + } if(log.isDebug()){ log.debug("Deleting message ", m.getKey().toString()); diff --git a/src/test/java/org/olat/modules/fo/ForumManagerTest.java b/src/test/java/org/olat/modules/fo/ForumManagerTest.java index 1d9a09babb2ffa041d87b84d1ebf27eac43ad17c..c26a929e54441a54cb0889d3c69ad4d4746b62fe 100644 --- a/src/test/java/org/olat/modules/fo/ForumManagerTest.java +++ b/src/test/java/org/olat/modules/fo/ForumManagerTest.java @@ -41,6 +41,7 @@ import org.olat.core.id.Identity; import org.olat.modules.fo.manager.ForumManager; import org.olat.modules.fo.model.ForumThread; import org.olat.modules.fo.model.ForumUserStatistics; +import org.olat.modules.fo.model.MessageImpl; import org.olat.modules.fo.ui.MessagePeekview; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; @@ -965,6 +966,34 @@ public class ForumManagerTest extends OlatTestCase { Assert.assertEquals(messageToSplit, reloadedMessageToSplit_2.getThreadtop()); Assert.assertEquals(messageToSplit, reloadedMessageToSplit_2.getParent()); } + + /** + * The test doesn't test directly the method but check + * if the loading mechanism in the method work in 2 different + * cases and if it accept already deleted messages + * + */ + @Test + public void deleteMessagePropertiesTree_checkFindBehavior() { + Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-10"); + Forum fo = forumManager.addAForum(); + dbInstance.commit(); + + Message topMessage = forumManager.createMessage(fo, id1, false); + topMessage.setTitle("Future deleted message 1"); + topMessage.setBody("Future deleted stuff"); + forumManager.addTopMessage(topMessage); + dbInstance.commit(); + + //reload + Message reloadedMessage = dbInstance.getCurrentEntityManager().find(MessageImpl.class, topMessage.getKey()); + Assert.assertNotNull(reloadedMessage); + //reload inexistent message + Message inexistentMessage = dbInstance.getCurrentEntityManager().find(MessageImpl.class, -23l); + Assert.assertNull(inexistentMessage); + + dbInstance.commitAndCloseSession(); + } @Test public void deleteMessageTree() {