diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java index d2ffe82f263eb1aa847bf7deee4d1695d55656ca..85652cfe602b83350bc467f5ef20a8ffd242e9b4 100644 --- a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java +++ b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java @@ -125,6 +125,7 @@ public class QuestionItemDetailsController extends BasicController implements To private DeleteConfirmationController deleteConfirmationCtrl; private SelectBusinessGroupController selectGroupCtrl; private PoolsController selectPoolCtrl; + private ShareItemOptionController shareItemsCtrl; private final QPoolSecurityCallback qPoolSecurityCallback; private final QuestionItemsSource itemSource; @@ -475,17 +476,15 @@ public class QuestionItemDetailsController extends BasicController implements To cmc.deactivate(); cleanUp(); } else if(source == selectGroupCtrl) { + cmc.deactivate(); if(event instanceof BusinessGroupSelectionEvent) { BusinessGroupSelectionEvent bge = (BusinessGroupSelectionEvent)event; List<BusinessGroup> groups = bge.getGroups(); if(groups.size() > 0) { QuestionItem item = (QuestionItem)((SelectBusinessGroupController)source).getUserObject(); - doShareItemsWithGroup(ureq, item, groups); - metadatasCtrl.updateShares(); + doShareItemsToGroups(ureq, Collections.singletonList(item), groups); } } - cmc.deactivate(); - cleanUp(); } else if (source == selectPoolCtrl) { cmc.deactivate(); if(event instanceof QPoolSelectionEvent) { @@ -493,10 +492,15 @@ public class QuestionItemDetailsController extends BasicController implements To List<Pool> pools = qpe.getPools(); if(pools.size() > 0) { QuestionItemShort item = (QuestionItemShort)selectPoolCtrl.getUserObject(); - doShareItemsWithPool(ureq, item, pools); - metadatasCtrl.updateShares(); + doShareItemsToPools(ureq, Collections.singletonList(item), pools); } } + } else if(source == shareItemsCtrl) { + if(event instanceof QPoolEvent) { + metadatasCtrl.updateShares(); + fireEvent(ureq, event); + } + cmc.deactivate(); cleanUp(); } else if (source == reviewActionCtrl) { if (QItemReviewEvent.START.equals(event.getCommand())) { @@ -559,6 +563,7 @@ public class QuestionItemDetailsController extends BasicController implements To removeAsListenerAndDispose(reviewStartCtrl); removeAsListenerAndDispose(deleteConfirmationCtrl); removeAsListenerAndDispose(confirmEndOfLifeCtrl); + removeAsListenerAndDispose(shareItemsCtrl); cmc = null; copyConfirmationCtrl = null; conversionConfirmationCtrl = null; @@ -568,6 +573,7 @@ public class QuestionItemDetailsController extends BasicController implements To reviewStartCtrl = null; deleteConfirmationCtrl = null; confirmEndOfLifeCtrl = null; + shareItemsCtrl = null; } private void doConfirmStartReview(UserRequest ureq) { @@ -748,14 +754,40 @@ public class QuestionItemDetailsController extends BasicController implements To listenTo(cmc); } - private void doShareItemsWithGroup(UserRequest ureq, QuestionItemShort item, List<BusinessGroup> groups) { - qpoolService.shareItemsWithGroups(Collections.singletonList(item), groups, false); - fireEvent(ureq, new QPoolEvent(QPoolEvent.ITEM_SHARED)); + private void doShareItemsToGroups(UserRequest ureq, List<QuestionItemShort> items, List<BusinessGroup> groups) { + removeAsListenerAndDispose(shareItemsCtrl); + shareItemsCtrl = new ShareItemOptionController(ureq, getWindowControl(), items, groups, null); + listenTo(shareItemsCtrl); + + String title; + if (groups != null && groups.size() == 1) { + title = translate("share.item.group", new String[] {groups.get(0).getName()}); + } else { + title = translate("share.item.groups"); + } + + cmc = new CloseableModalController(getWindowControl(), translate("close"), + shareItemsCtrl.getInitialComponent(), true, title); + cmc.activate(); + listenTo(cmc); } - - private void doShareItemsWithPool(UserRequest ureq, QuestionItemShort item, List<Pool> pools) { - qpoolService.addItemsInPools(Collections.singletonList(item), pools, false); - fireEvent(ureq, new QPoolEvent(QPoolEvent.ITEM_SHARED)); + + private void doShareItemsToPools(UserRequest ureq, List<QuestionItemShort> items, List<Pool> pools) { + removeAsListenerAndDispose(shareItemsCtrl); + shareItemsCtrl = new ShareItemOptionController(ureq, getWindowControl(), items, null, pools); + listenTo(shareItemsCtrl); + + String title; + if (pools != null && pools.size() == 1) { + title = translate("share.item.pool", new String[] {pools.get(0).getName()}); + } else { + title = translate("share.item.pools"); + } + + cmc = new CloseableModalController(getWindowControl(), translate("close"), + shareItemsCtrl.getInitialComponent(), true, title); + cmc.activate(); + listenTo(cmc); } private void doConfirmDelete(UserRequest ureq, QuestionItem item) {