diff --git a/src/main/java/org/olat/modules/portfolio/PortfolioService.java b/src/main/java/org/olat/modules/portfolio/PortfolioService.java index 0170118f6ecf81bb843e6dc88a24c5e708b9b9dc..ef0e0fbe79d0cdb7d824f2a7031ab20d1209b645 100644 --- a/src/main/java/org/olat/modules/portfolio/PortfolioService.java +++ b/src/main/java/org/olat/modules/portfolio/PortfolioService.java @@ -334,6 +334,13 @@ public interface PortfolioService { public void changeAccessRights(List<Identity> identities, List<AccessRightChange> changes); + /** + * The method remove all access rights of the specified identity + * to the specified binder. + * + * @param binder The binder to access + * @param identity The identity with access rights + */ public void removeAccessRights(Binder binder, Identity identity); public List<Category> getCategories(PortfolioElement element); diff --git a/src/main/java/org/olat/modules/portfolio/ui/SharedItemsController.java b/src/main/java/org/olat/modules/portfolio/ui/SharedItemsController.java index 9763f4c6a628d922752ea5f566fee76ff450a96c..d9105db2b8c2916433bd76291072cf454337b907 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/SharedItemsController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/SharedItemsController.java @@ -43,8 +43,11 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionE import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer; import org.olat.core.gui.components.stack.TooledStackedPanel; import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.dtabs.Activateable2; +import org.olat.core.gui.control.generic.modal.DialogBoxController; +import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.id.OLATResourceable; import org.olat.core.id.UserConstants; import org.olat.core.id.context.BusinessControlFactory; @@ -88,6 +91,7 @@ public class SharedItemsController extends FormBasicController implements Activa private final List<UserPropertyHandler> userPropertyHandlers; private BinderController binderCtrl; + private DialogBoxController confirmLeaveCtrl; @Autowired private UserManager userManager; @@ -147,6 +151,10 @@ public class SharedItemsController extends FormBasicController implements Activa selectRenderer.setIconRightCSS("o_icon-sw o_icon_start"); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, true, "select", -1, "select", false, null, FlexiColumnModel.ALIGNMENT_LEFT, selectRenderer)); + StaticFlexiCellRenderer leaveRenderer = new StaticFlexiCellRenderer(translate("leave"), "leave"); + leaveRenderer.setIconRightCSS("o_icon-sw o_icon_delete"); + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, false, "leave", -2, "leave", false, null, + FlexiColumnModel.ALIGNMENT_LEFT, leaveRenderer)); model = new SharedItemsDataModel(columnsModel, getLocale()); tableEl = uifactory.addTableElement(getWindowControl(), "table", model, 20, false, getTranslator(), formLayout); @@ -220,6 +228,17 @@ public class SharedItemsController extends FormBasicController implements Activa } } + @Override + protected void event(UserRequest ureq, Controller source, Event event) { + if(confirmLeaveCtrl == source) { + if(DialogBoxUIFactory.isOkEvent(event) || DialogBoxUIFactory.isYesEvent(event)) { + SharedItemRow row = (SharedItemRow)confirmLeaveCtrl.getUserObject(); + doLeaveBinder(row); + } + } + super.event(ureq, source, event); + } + @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { if(tableEl == source) { @@ -232,6 +251,8 @@ public class SharedItemsController extends FormBasicController implements Activa if(activeateable != null) { activeateable.activate(ureq, null, null); } + } else if("leave".equals(cmd)) { + doConfirmLeaveBinder(ureq, row); } } else if(event instanceof FlexiTableSearchEvent) { FlexiTableSearchEvent se = (FlexiTableSearchEvent)event; @@ -314,6 +335,20 @@ public class SharedItemsController extends FormBasicController implements Activa } } + private void doConfirmLeaveBinder(UserRequest ureq, SharedItemRow row) { + String title = translate("leave"); + String text = translate("leave.explain"); + confirmLeaveCtrl = activateOkCancelDialog(ureq, title, text, confirmLeaveCtrl); + confirmLeaveCtrl.setUserObject(row); + listenTo(confirmLeaveCtrl); + } + + private void doLeaveBinder(SharedItemRow row) { + Binder binder = portfolioService.getBinderByKey(row.getBinderKey()); + portfolioService.removeAccessRights(binder, getIdentity()); + loadModel(tableEl.getQuickSearchString()); + } + private static class AssessedBinderSectionComparator implements Comparator<AssessedBinderSection> { @Override diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties index d5060b2c93324343b1d50c771f97720e1a529c16..58ec6cac83361a88cb6fede1c228ac8416dd08ad 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties @@ -189,6 +189,8 @@ invitation.mail.success=Die eingeladenen Personen wurden erfolgreich per E-Mail issue=Ausgabe language=Language lastName=Name +leave=Entfernen +leave.explain=Wollen Sie wirklich diese Sammelmappe von ihre Liste entfernen? Der Author muss wieder ihene den Zugriff geben um diese Mappe wieder zu sehen. mail=Mail mail.body=Nachricht mail.subject=Betreffzeile diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties index 87b5021df359baaa1cecb10579f1afc43cbbb048..7a4b2f31f1e00f40d79c5f6373fffb956a587b9e 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties @@ -189,6 +189,8 @@ invitation.mail.success=The persons invited have been notified successfully via issue=Issue language=Sprache lastName=Last name +leave=Remove +leave.explain=Do you really want to remove this binder from the list? The author of the binder will need to give you access to it again if you want to visit it again. mail=E-mail mail.body=Mail body mail.subject=Mail subject