From 4a2c1c0ee04009d617be9bf41f3cd3de09b8cf64 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Fri, 3 Jan 2020 10:18:12 +0100 Subject: [PATCH] OO-4432: allow to move forum's thread from wiki to forum course elements --- .../modules/fo/export/FinishCallback.java | 17 +++-- .../export/_i18n/LocalStrings_de.properties | 4 +- .../modules/fo/ui/MessageListController.java | 63 ++++++++++++------- .../modules/fo/ui/_content/threadview.html | 5 +- 4 files changed, 51 insertions(+), 38 deletions(-) diff --git a/src/main/java/org/olat/modules/fo/export/FinishCallback.java b/src/main/java/org/olat/modules/fo/export/FinishCallback.java index 60f2a8eb8d9..7f4e7442ea8 100644 --- a/src/main/java/org/olat/modules/fo/export/FinishCallback.java +++ b/src/main/java/org/olat/modules/fo/export/FinishCallback.java @@ -63,26 +63,25 @@ public class FinishCallback implements StepRunnerCallback { mailService = CoreSpringFactory.getImpl(MailManager.class); } - @Override public Step execute(UserRequest ureq, WindowControl wControl, StepsRunContext runContext) { - FOCourseNode node = (FOCourseNode)runContext.get(SendMailStepForm.FORUM); + FOCourseNode targetNode = (FOCourseNode)runContext.get(SendMailStepForm.FORUM); ICourse course = (ICourse)runContext.get(SendMailStepForm.ICOURSE); CourseEnvironment courseEnv = course.getCourseEnvironment(); - Forum chosenforum = node.loadOrCreateForum(courseEnv); - Message msg = (Message)runContext.get(SendMailStepForm.MESSAGE_TO_MOVE); - msg = forumManager.getMessageById(msg.getKey()); + Forum chosenforum = targetNode.loadOrCreateForum(courseEnv); + Message msgToMove = (Message)runContext.get(SendMailStepForm.MESSAGE_TO_MOVE); + msgToMove = forumManager.getMessageById(msgToMove.getKey()); Message parentMessage = (Message)runContext.get(SendMailStepForm.PARENT_MESSAGE); if (parentMessage!= null) { parentMessage = forumManager.getMessageById(parentMessage.getKey()); } - if (msg.getParentKey() == null && msg.getThreadtop() == null) { - msg = forumManager.createOrAppendThreadInAnotherForum(msg, chosenforum, parentMessage); + if (msgToMove.getParentKey() == null && msgToMove.getThreadtop() == null) { + forumManager.createOrAppendThreadInAnotherForum(msgToMove, chosenforum, parentMessage); } else { - msg = forumManager.moveMessageToAnotherForum(msg, chosenforum, parentMessage); + forumManager.moveMessageToAnotherForum(msgToMove, chosenforum, parentMessage); } DBFactory.getInstance().commit();//commit before sending event - if ((Boolean)runContext.get(SendMailStepForm.SENDMAIL)) { + if (((Boolean)runContext.get(SendMailStepForm.SENDMAIL)).booleanValue()) { sendMail(ureq, wControl, runContext); } return StepsMainRunController.DONE_MODIFIED; diff --git a/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_de.properties index 23762952375..a183d309e4c 100644 --- a/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_de.properties @@ -3,8 +3,8 @@ step.select.forum=Forum ausw\u00E4hlen step.select.thread=Diskussionsfaden ausw\u00E4hlen step.select.comment=Kommentar ausw\u00E4hlen step.send.mail=Mail verschicken -forum.select=select -forum.forum=forum +forum.select=Ausw\u00E4hlen +forum.forum=Forum forum.thread=Diskussionsfaden forum.comment=Beitrag many.children.move=\n{0} Antworten werden mitverschoben. diff --git a/src/main/java/org/olat/modules/fo/ui/MessageListController.java b/src/main/java/org/olat/modules/fo/ui/MessageListController.java index 96510f26fed..ffb77483e55 100644 --- a/src/main/java/org/olat/modules/fo/ui/MessageListController.java +++ b/src/main/java/org/olat/modules/fo/ui/MessageListController.java @@ -35,6 +35,7 @@ import org.olat.core.commons.persistence.DBFactory; import org.olat.core.commons.services.mark.Mark; import org.olat.core.commons.services.mark.MarkResourceStat; import org.olat.core.commons.services.mark.MarkingService; +import org.olat.core.commons.services.notifications.SubscriptionContext; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.commons.services.vfs.VFSRepositoryService; import org.olat.core.dispatcher.mapper.Mapper; @@ -205,7 +206,7 @@ public class MessageListController extends BasicController implements GenericEve mainVC = createVelocityContainer("threadview"); mainVC.contextPut("threadMode", Boolean.TRUE); mainVC.contextPut("thumbMapper", thumbnailMapper); - mainVC.contextPut("guestOnly", new Boolean(guestOnly)); + mainVC.contextPut("guestOnly", Boolean.valueOf(guestOnly)); messageTableCtrl = new ForumMessageListController(ureq, getWindowControl(), forum, false); listenTo(messageTableCtrl); @@ -557,7 +558,7 @@ public class MessageListController extends BasicController implements GenericEve orderedList.add(message.getMessage()); } List<MessageNode> children = message.getChildren(); - if(children.size() > 0) { + if(!children.isEmpty()) { if(children.size() > 1) { Collections.sort(children); } @@ -815,8 +816,8 @@ public class MessageListController extends BasicController implements GenericEve private void doDeliverAttachment(UserRequest ureq, String cmd) { MediaResource res = null; try { - int index = cmd.lastIndexOf("_"); - String attachmentPosition = cmd.substring(cmd.indexOf("_") + 1, index); + int index = cmd.lastIndexOf('_'); + String attachmentPosition = cmd.substring(cmd.indexOf('_') + 1, index); String messageKey = cmd.substring(index + 1); int position = Integer.parseInt(attachmentPosition); @@ -1273,7 +1274,7 @@ public class MessageListController extends BasicController implements GenericEve mainVC.contextPut("mode", "one"); mainVC.contextPut("threadMode", Boolean.FALSE); - if(backupViews != null && backupViews.size() > 0) { + if(backupViews != null && !backupViews.isEmpty()) { List<MessageView> oneView = new ArrayList<>(1); oneView.add(backupViews.get(0)); mainVC.contextPut("messages", oneView); @@ -1304,7 +1305,7 @@ public class MessageListController extends BasicController implements GenericEve mainVC.contextPut("mode", "one"); mainVC.contextPut("threadMode", Boolean.FALSE); - if(backupViews != null && backupViews.size() > 0) { + if(backupViews != null && !backupViews.isEmpty()) { List<MessageView> oneView = new ArrayList<>(1); for(MessageView message:backupViews) { if(message.getKey().equals(messageKey)) { @@ -1312,7 +1313,7 @@ public class MessageListController extends BasicController implements GenericEve } } mainVC.contextPut("messages", oneView); - if(oneView.size() > 0) { + if(!oneView.isEmpty()) { messageTableCtrl.setSelectView(oneView.get(0)); } else { showWarning("error.message.deleted"); @@ -1398,18 +1399,11 @@ public class MessageListController extends BasicController implements GenericEve // starting thread runContext.put(SendMailStepForm.START_THREADTOP, message.getThreadtop() == null ? message : message.getThreadtop()); // get start course - PropertyManager propertyManager = PropertyManager.getInstance(); - Long forumResourceableId = forum.getResourceableId(); - Property forumproperty = propertyManager.getPropertyByLongValue(forumResourceableId, FOCourseNode.FORUM_KEY); - if (forumproperty != null) { - Long resourcetypeId = forumproperty.getResourceTypeId(); - String resourcetypeName = forumproperty.getResourceTypeName(); - OLATResourceable olatResourceable = olatManager.findResourceable(resourcetypeId, resourcetypeName); - RepositoryEntry startCourse = repositoryManager.lookupRepositoryEntry(olatResourceable, false); - if (startCourse != null) { - runContext.put(SendMailStepForm.START_COURSE, startCourse); - } + RepositoryEntry courseEntry = getStartCourse(); + if(courseEntry != null) { + runContext.put(SendMailStepForm.START_COURSE, courseEntry); } + listenTo(exportCtrl); getWindowControl().pushAsModalDialog(exportCtrl.getInitialComponent()); } else { @@ -1417,6 +1411,31 @@ public class MessageListController extends BasicController implements GenericEve } } + private RepositoryEntry getStartCourse() { + PropertyManager propertyManager = PropertyManager.getInstance(); + Long forumResourceableId = forum.getResourceableId(); + Property forumproperty = propertyManager.getPropertyByLongValue(forumResourceableId, FOCourseNode.FORUM_KEY); + if (forumproperty != null) { + Long resourcetypeId = forumproperty.getResourceTypeId(); + String resourcetypeName = forumproperty.getResourceTypeName(); + OLATResourceable olatResourceable = olatManager.findResourceable(resourcetypeId, resourcetypeName); + RepositoryEntry startCourse = repositoryManager.lookupRepositoryEntry(olatResourceable, false); + if (startCourse != null) { + return startCourse; + } + } + SubscriptionContext ctx = foCallback.getSubscriptionContext(); + if(ctx != null && "CourseModule".equals(ctx.getResName())) { + OLATResourceable olatResourceable = OresHelper.createOLATResourceableInstance("CourseModule", ctx.getResId()); + RepositoryEntry startCourse = repositoryManager.lookupRepositoryEntry(olatResourceable, false); + if (startCourse != null) { + return startCourse; + } + } + + return null; + } + private void doFinalizeMove(UserRequest ureq, MessageView messageToMove, Long parentMessageKey) { if (foCallback.mayEditMessageAsModerator()) { Message message = forumManager.getMessageById(messageToMove.getKey()); @@ -1434,12 +1453,8 @@ public class MessageListController extends BasicController implements GenericEve } private void doOpenVisitingCard(UserRequest ureq, Identity creator) { - ControllerCreator userInfoMainControllerCreator = new ControllerCreator() { - @Override - public Controller createController(UserRequest lureq, WindowControl lwControl) { - return new UserInfoMainController(lureq, lwControl, creator, true, false); - } - }; + ControllerCreator userInfoMainControllerCreator = (lureq, lwControl) + -> new UserInfoMainController(lureq, lwControl, creator, true, false); //wrap the content controller into a full header layout ControllerCreator layoutCtrlr = BaseFullWebappPopupLayoutFactory.createAuthMinimalPopupLayout(ureq, userInfoMainControllerCreator); PopupBrowserWindow pbw = getWindowControl().getWindowBackOffice().getWindowManager().createNewPopupBrowserWindowFor(ureq, layoutCtrlr); diff --git a/src/main/java/org/olat/modules/fo/ui/_content/threadview.html b/src/main/java/org/olat/modules/fo/ui/_content/threadview.html index d2be910974c..b762a96b386 100644 --- a/src/main/java/org/olat/modules/fo/ui/_content/threadview.html +++ b/src/main/java/org/olat/modules/fo/ui/_content/threadview.html @@ -146,9 +146,8 @@ #if($r.available("exile_${message.key}")) <div class="btn-group"> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> - <i class="o_icon o_icon-fw o_icon_actions"></i> - <span class="caret"></span> + <button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown"> + <i class="o_icon o_icon-fw o_icon_actions"> </i><span class="caret"> </span> </button> <ul class="dropdown-menu dropdown-menu-right"> #if($r.available("split_${message.key}")) -- GitLab