From 7d21c77061bb95429ac4984f43c1a61f7b530e5c Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 7 Nov 2016 11:27:45 +0100
Subject: [PATCH] OO-2226: wording and more checkbox to confirmation delete

---
 .../modules/portfolio/manager/BinderDAO.java  |   8 +-
 .../ui/BinderDeliveryOptionsController.java   |  89 ++++++++++++-
 .../ui/ConfirmDeleteBinderController.java     |  35 +++--
 .../ConfirmMoveBinderToTrashController.java   | 122 ++++++++++++++++++
 .../portfolio/ui/DeletedBinderController.java |   2 +-
 .../portfolio/ui/PortfolioHomeController.java |  13 --
 .../ui/TableOfContentController.java          |   7 +-
 .../ui/_content/confirm_delete_binder.html    |  15 ++-
 .../ui/_content/confirm_delete_option.html    |  21 +++
 .../ui/_i18n/LocalStrings_de.properties       |   7 +-
 .../ui/_i18n/LocalStrings_en.properties       |   7 +-
 11 files changed, 280 insertions(+), 46 deletions(-)
 create mode 100644 src/main/java/org/olat/modules/portfolio/ui/ConfirmMoveBinderToTrashController.java
 create mode 100644 src/main/java/org/olat/modules/portfolio/ui/_content/confirm_delete_option.html

diff --git a/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java b/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java
index 0e6bd02c934..d344ae00880 100644
--- a/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java
+++ b/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java
@@ -419,8 +419,8 @@ public class BinderDAO {
 		  .append("   where pageSection.binder.key=binder.key and page.section.key=pageSection.key and comment.resId=page.key and comment.resName='Page'")
 		  .append(" ) as numOfComments")
 		  .append(" from pfbinder as binder")
-		  .append(" inner join binder.baseGroup as baseGroup")
-		  .append(" inner join baseGroup.members as membership")
+		  .append(" left join binder.baseGroup as baseGroup")
+		  .append(" left join baseGroup.members as membership")
 		  .append(" left join binder.entry binderEntry")
 		  .append(" where binder.key=:binderKey");
 		
@@ -467,8 +467,8 @@ public class BinderDAO {
 		  .append("   where pageSection.binder.key=binder.key and page.section.key=pageSection.key and comment.resId=page.key and comment.resName='Page'")
 		  .append(" ) as numOfComments")
 		  .append(" from pfbinder as binder")
-		  .append(" inner join binder.baseGroup as baseGroup")
-		  .append(" inner join baseGroup.members as membership")
+		  .append(" left join binder.baseGroup as baseGroup")
+		  .append(" left join baseGroup.members as membership")
 		  .append(" left join binder.entry binderEntry")
 		  .append(" where binder.olatResource is null and membership.identity.key=:identityKey and membership.role=:role");
 		if(deleted) {
diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderDeliveryOptionsController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderDeliveryOptionsController.java
index 6c897257d44..f67fe3c25dc 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/BinderDeliveryOptionsController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/BinderDeliveryOptionsController.java
@@ -29,7 +29,9 @@ import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 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.closablewrapper.CloseableModalController;
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.StateEntry;
@@ -52,6 +54,9 @@ public class BinderDeliveryOptionsController extends FormBasicController impleme
 	private MultipleSelectionElement newEntriesEl;
 	private MultipleSelectionElement deleteBinderEl;
 	
+	private CloseableModalController deleteOptionCmcCtrl;
+	private ConfirmDeleteOptionController deleteOptionCtrl;
+	
 	private final Binder binder;
 	private final BinderDeliveryOptions deliveryOptions;
 	
@@ -80,7 +85,7 @@ public class BinderDeliveryOptionsController extends FormBasicController impleme
 		deleteBinderEl = uifactory.addCheckboxesHorizontal("canDeleteBinder", "allow.delete.binder", formLayout, onKeys, onValues);
 		deleteBinderEl.addActionListener(FormEvent.ONCHANGE);
 		if(deliveryOptions.isAllowDeleteBinder()) {
-			deleteBinderEl.select(onKeys[0], true);
+			deleteBinderEl.select(onKeys[0], false);
 		}
 		
 		FormLayoutContainer buttonsLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
@@ -103,7 +108,7 @@ public class BinderDeliveryOptionsController extends FormBasicController impleme
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if(source == deleteBinderEl) {
 			if(deleteBinderEl.isAtLeastSelected(1)) {
-				showWarning("allow.delete.binder.warning");
+				doConfirmDeleteOption(ureq);
 			}
 		}
 		super.formInnerEvent(ureq, source, event);
@@ -117,4 +122,84 @@ public class BinderDeliveryOptionsController extends FormBasicController impleme
 		deliveryOptions.setAllowDeleteBinder(allowDeleteBinder);
 		portfolioService.setDeliveryOptions(binder.getOlatResource(), deliveryOptions);
 	}
+	
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		if(deleteOptionCtrl == source) {
+			if(event != Event.DONE_EVENT) {
+				deleteBinderEl.uncheckAll();
+			}
+			deleteOptionCmcCtrl.deactivate();
+			cleanUp();
+		} else if(deleteOptionCmcCtrl == source) {
+			deleteBinderEl.uncheckAll();
+			cleanUp();
+		}
+		super.event(ureq, source, event);
+	}
+	
+	private void cleanUp() {
+		removeAsListenerAndDispose(deleteOptionCmcCtrl);
+		removeAsListenerAndDispose(deleteOptionCtrl);
+		deleteOptionCmcCtrl = null;
+		deleteOptionCtrl = null;
+	}
+
+	private void doConfirmDeleteOption(UserRequest ureq) {
+		if(deleteOptionCtrl != null) return;
+		
+		deleteOptionCtrl = new ConfirmDeleteOptionController(ureq, getWindowControl());
+		listenTo(deleteOptionCtrl);
+		
+		String title = translate("create.new.binder");
+		deleteOptionCmcCtrl = new CloseableModalController(getWindowControl(), null, deleteOptionCtrl.getInitialComponent(), true, title, true);
+		listenTo(deleteOptionCmcCtrl);
+		deleteOptionCmcCtrl.activate();
+	}
+	
+	private class ConfirmDeleteOptionController extends FormBasicController {
+		
+		private MultipleSelectionElement acknowledgeEl;
+		
+		public ConfirmDeleteOptionController(UserRequest ureq, WindowControl wControl) {
+			super(ureq, wControl, "confirm_delete_option");
+			initForm(ureq);
+		}
+
+		@Override
+		protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+			String[] values = new String[] { translate("allow.delete.binder.warning")	 };
+			acknowledgeEl = uifactory.addCheckboxesHorizontal("acknowledge", "confirmation", formLayout, onKeys, values);
+			uifactory.addFormCancelButton("cancel", formLayout, ureq, getWindowControl());
+			uifactory.addFormSubmitButton("delete", "ok", formLayout);
+		}
+
+		@Override
+		protected void doDispose() {
+			//
+		}
+
+		@Override
+		protected boolean validateFormLogic(UserRequest ureq) {
+			boolean allOk = true;
+			
+			acknowledgeEl.clearError();
+			if(!acknowledgeEl.isAtLeastSelected(1)) {
+				acknowledgeEl.setErrorKey("form.mandatory.hover", null);
+				allOk &= false;
+			}
+			
+			return allOk & super.validateFormLogic(ureq);
+		}
+
+		@Override
+		protected void formOK(UserRequest ureq) {
+			fireEvent(ureq, Event.DONE_EVENT);
+		}
+
+		@Override
+		protected void formCancelled(UserRequest ureq) {
+			fireEvent(ureq, Event.CANCELLED_EVENT);
+		}
+	}
 }
diff --git a/src/main/java/org/olat/modules/portfolio/ui/ConfirmDeleteBinderController.java b/src/main/java/org/olat/modules/portfolio/ui/ConfirmDeleteBinderController.java
index ec4ffb36089..49e8903d26f 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/ConfirmDeleteBinderController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/ConfirmDeleteBinderController.java
@@ -31,7 +31,6 @@ 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.util.StringHelper;
-import org.olat.modules.portfolio.BinderStatus;
 import org.olat.modules.portfolio.model.BinderStatistics;
 
 /**
@@ -44,19 +43,17 @@ public class ConfirmDeleteBinderController extends FormBasicController {
 	
 	private static final String[] onKeys = new String[]{ "on" };
 	
-	private MultipleSelectionElement acknowledgeEl;
+	private MultipleSelectionElement acknowledgeEl, acknowledge2El;
 	
-	private final boolean danger;
 	private final List<BinderStatistics> stats;
 	
-	public ConfirmDeleteBinderController(UserRequest ureq, WindowControl wControl, BinderStatistics stats, boolean danger) {
-		this(ureq, wControl, Collections.singletonList(stats), danger);
+	public ConfirmDeleteBinderController(UserRequest ureq, WindowControl wControl, BinderStatistics stats) {
+		this(ureq, wControl, Collections.singletonList(stats));
 	}
 	
-	public ConfirmDeleteBinderController(UserRequest ureq, WindowControl wControl, List<BinderStatistics> stats, boolean danger) {
+	public ConfirmDeleteBinderController(UserRequest ureq, WindowControl wControl, List<BinderStatistics> stats) {
 		super(ureq, wControl, "confirm_delete_binder");
 		this.stats = stats;
-		this.danger = danger;
 		initForm(ureq);
 	}
 	
@@ -70,14 +67,12 @@ public class ConfirmDeleteBinderController extends FormBasicController {
 		int numOfPages = 0;
 		int numOfSections = 0;
 		int numOfComments = 0;
-		boolean deleted = false;
 		for(BinderStatistics stat:stats) {
 			if(names.length() > 0) names.append(", ");
 			names.append(StringHelper.escapeHtml(stat.getTitle()));
 			numOfPages += stat.getNumOfPages();
 			numOfSections += stat.getNumOfSections();
 			numOfComments += stat.getNumOfComments();
-			deleted |=  BinderStatus.deleted.name().equals(stat.getStatus());
 		}
 
 		String[] args = new String[] {
@@ -89,17 +84,14 @@ public class ConfirmDeleteBinderController extends FormBasicController {
 		if(formLayout instanceof FormLayoutContainer) {
 			FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout;
 			layoutCont.contextPut("msg", translate("delete.binder.warning", args));
-			layoutCont.contextPut("dangerCssClass", danger || deleted ? "o_error" : "o_warning");
+			layoutCont.contextPut("dangerCssClass", "o_error");
 		}
 		
-		String[] onValues;
-		if(danger || deleted) {
-			onValues = new String[]{ translate("delete.binder.acknowledge") };
-		} else {
-			onValues = new String[]{ translate("trash.binder.acknowledge") };
-		}
-		
-		acknowledgeEl = uifactory.addCheckboxesHorizontal("acknowledge", "delete.binder.acknowledge", formLayout, onKeys, onValues);
+		String[] onValues = new String[]{ translate("delete.binder.acknowledge") };
+		acknowledgeEl = uifactory.addCheckboxesHorizontal("acknowledge", "confirmation", formLayout, onKeys, onValues);
+		String[] on2Values = new String[]{ translate("delete.binder.acknowledge.2") };
+		acknowledge2El = uifactory.addCheckboxesHorizontal("acknowledge2", "confirmation", formLayout, onKeys, on2Values);
+
 		uifactory.addFormCancelButton("cancel", formLayout, ureq, getWindowControl());
 		uifactory.addFormSubmitButton("delete", "delete.binder", formLayout);
 	}
@@ -113,11 +105,18 @@ public class ConfirmDeleteBinderController extends FormBasicController {
 	protected boolean validateFormLogic(UserRequest ureq) {
 		boolean allOk = true;
 		
+		acknowledgeEl.clearError();
 		if(!acknowledgeEl.isAtLeastSelected(1)) {
 			acknowledgeEl.setErrorKey("form.mandatory.hover", null);
 			allOk &= false;
 		}
 		
+		acknowledge2El.clearError();
+		if(!acknowledge2El.isAtLeastSelected(1)) {
+			acknowledge2El.setErrorKey("form.mandatory.hover", null);
+			allOk &= false;
+		}
+		
 		return allOk & super.validateFormLogic(ureq);
 	}
 
diff --git a/src/main/java/org/olat/modules/portfolio/ui/ConfirmMoveBinderToTrashController.java b/src/main/java/org/olat/modules/portfolio/ui/ConfirmMoveBinderToTrashController.java
new file mode 100644
index 00000000000..1da16ba6460
--- /dev/null
+++ b/src/main/java/org/olat/modules/portfolio/ui/ConfirmMoveBinderToTrashController.java
@@ -0,0 +1,122 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.portfolio.ui;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
+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.util.StringHelper;
+import org.olat.modules.portfolio.model.BinderStatistics;
+
+/**
+ * 
+ * Initial date: 7 nov. 2016<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ConfirmMoveBinderToTrashController extends FormBasicController {
+	
+	private static final String[] onKeys = new String[]{ "on" };
+	
+	private MultipleSelectionElement acknowledgeEl;
+	
+	private final List<BinderStatistics> stats;
+	
+	public ConfirmMoveBinderToTrashController(UserRequest ureq, WindowControl wControl, BinderStatistics stats) {
+		this(ureq, wControl, Collections.singletonList(stats));
+	}
+	
+	public ConfirmMoveBinderToTrashController(UserRequest ureq, WindowControl wControl, List<BinderStatistics> stats) {
+		super(ureq, wControl, "confirm_delete_binder");
+		this.stats = stats;
+		initForm(ureq);
+	}
+	
+	public List<BinderStatistics> getBinderStatistics() {
+		return stats;
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		StringBuilder names =  new StringBuilder();
+		int numOfPages = 0;
+		int numOfSections = 0;
+		int numOfComments = 0;
+		for(BinderStatistics stat:stats) {
+			if(names.length() > 0) names.append(", ");
+			names.append(StringHelper.escapeHtml(stat.getTitle()));
+			numOfPages += stat.getNumOfPages();
+			numOfSections += stat.getNumOfSections();
+			numOfComments += stat.getNumOfComments();
+		}
+
+		String[] args = new String[] {
+				names.toString(),
+				Integer.toString(numOfSections),
+				Integer.toString(numOfPages),
+				Integer.toString(numOfComments)
+		};
+		if(formLayout instanceof FormLayoutContainer) {
+			FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout;
+			layoutCont.contextPut("msg", translate("delete.binder.warning", args));
+			layoutCont.contextPut("dangerCssClass", "o_warning");
+		}
+		
+		String[] onValues = new String[]{ translate("trash.binder.acknowledge") };
+		acknowledgeEl = uifactory.addCheckboxesHorizontal("acknowledge", "delete.binder.acknowledge", formLayout, onKeys, onValues);
+		uifactory.addFormCancelButton("cancel", formLayout, ureq, getWindowControl());
+		uifactory.addFormSubmitButton("delete", "delete.binder", formLayout);
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	protected boolean validateFormLogic(UserRequest ureq) {
+		boolean allOk = true;
+		
+		if(!acknowledgeEl.isAtLeastSelected(1)) {
+			acknowledgeEl.setErrorKey("form.mandatory.hover", null);
+			allOk &= false;
+		}
+		
+		return allOk & super.validateFormLogic(ureq);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		fireEvent(ureq, Event.DONE_EVENT);
+	}
+
+	@Override
+	protected void formCancelled(UserRequest ureq) {
+		fireEvent(ureq, Event.CANCELLED_EVENT);
+	}
+}
diff --git a/src/main/java/org/olat/modules/portfolio/ui/DeletedBinderController.java b/src/main/java/org/olat/modules/portfolio/ui/DeletedBinderController.java
index e5b8d0efb3b..00585599cdf 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/DeletedBinderController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/DeletedBinderController.java
@@ -170,7 +170,7 @@ public class DeletedBinderController extends BinderListController {
 				stats.add(row.getStatistics());
 			}
 
-			deleteBinderCtrl = new ConfirmDeleteBinderController(ureq, getWindowControl(), stats, true);
+			deleteBinderCtrl = new ConfirmDeleteBinderController(ureq, getWindowControl(), stats);
 			listenTo(deleteBinderCtrl);
 			
 			String title = translate("delete.binder");
diff --git a/src/main/java/org/olat/modules/portfolio/ui/PortfolioHomeController.java b/src/main/java/org/olat/modules/portfolio/ui/PortfolioHomeController.java
index 5035d0100d8..fcced8b83ff 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/PortfolioHomeController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/PortfolioHomeController.java
@@ -250,19 +250,6 @@ public class PortfolioHomeController extends BasicController implements Activate
 		return myPortfolioListCtrl;
 	}
 	
-	private void doOpenLastEditedBindersEntry(UserRequest ureq) {
-		Page lastModifiedPage = portfolioService.getLastPage(getIdentity(), true);
-		if(lastModifiedPage == null) {
-			//show message
-		} else {
-			Binder binder = lastModifiedPage.getSection().getBinder();
-			List<ContextEntry> entries = new ArrayList<>();
-			entries.add(BusinessControlFactory.getInstance().createContextEntry(OresHelper.createOLATResourceableInstance(Binder.class, binder.getKey())));
-			BinderListController ctrl = doOpenMyBinders(ureq);
-			ctrl.activate(ureq, entries, null);
-		}
-	}
-	
 	private TrashController doDeletedPages(UserRequest ureq) {
 		OLATResourceable bindersOres = OresHelper.createOLATResourceableInstance("Trash", 0l);
 		WindowControl swControl = addToHistory(ureq, bindersOres, null);
diff --git a/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java b/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java
index 7a93f8df54a..78e5deb2b64 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java
@@ -97,9 +97,10 @@ public class TableOfContentController extends BasicController implements TooledC
 	private SectionEditController newSectionCtrl;
 	private SectionEditController editSectionCtrl;
 	private AssignmentEditController newAssignmentCtrl;
+	private ConfirmDeleteBinderController deleteBinderCtrl;
 	private SectionDatesEditController editSectionDatesCtrl;
 	private BinderMetadataEditController binderMetadataCtrl;
-	private ConfirmDeleteBinderController moveBinderToTrashCtrl, deleteBinderCtrl;
+	private ConfirmMoveBinderToTrashController moveBinderToTrashCtrl;
 	private DialogBoxController confirmCloseSectionCtrl, confirmReopenSectionCtrl,
 				confirmDeleteSectionCtrl, confirmRestoreBinderCtrl;
 	
@@ -723,7 +724,7 @@ public class TableOfContentController extends BasicController implements TooledC
 		if(moveBinderToTrashCtrl != null) return;
 		
 		BinderStatistics stats = portfolioService.getBinderStatistics(binder);
-		moveBinderToTrashCtrl = new ConfirmDeleteBinderController(ureq, getWindowControl(), stats, false);
+		moveBinderToTrashCtrl = new ConfirmMoveBinderToTrashController(ureq, getWindowControl(), stats);
 		listenTo(moveBinderToTrashCtrl);
 		
 		String title = translate("delete.binder");
@@ -754,7 +755,7 @@ public class TableOfContentController extends BasicController implements TooledC
 		if(moveBinderToTrashCtrl != null) return;
 		
 		BinderStatistics stats = portfolioService.getBinderStatistics(binder);
-		deleteBinderCtrl = new ConfirmDeleteBinderController(ureq, getWindowControl(), stats, false);
+		deleteBinderCtrl = new ConfirmDeleteBinderController(ureq, getWindowControl(), stats);
 		listenTo(deleteBinderCtrl);
 		
 		String title = translate("delete.binder");
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_content/confirm_delete_binder.html b/src/main/java/org/olat/modules/portfolio/ui/_content/confirm_delete_binder.html
index 131d92decc5..b8b266cdfbd 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_content/confirm_delete_binder.html
+++ b/src/main/java/org/olat/modules/portfolio/ui/_content/confirm_delete_binder.html
@@ -1,12 +1,25 @@
-<div class="$dangerCssClass">
+<div class="$dangerCssClass clearfix">
 	<i class="o_icon o_icon-lg o_icon_important"> </i> $msg
 </div>
+<div class="clearfix">
 $r.render("acknowledge")
 #if($f.hasError("acknowledge"))
 	<div class="clearfix">
 		$r.render("acknowledge_ERROR")
 	</div>
 #end
+</div>
+#if($r.available("acknowledge2"))
+<div class="clearfix">
+	$r.render("acknowledge2")
+	#if($f.hasError("acknowledge2"))
+		<div class="clearfix">
+			$r.render("acknowledge2_ERROR")
+		</div>
+	#end
+</div>
+#end
+
 <div class="o_button_group">
 	$r.render("cancel")
 	$r.render("delete")
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_content/confirm_delete_option.html b/src/main/java/org/olat/modules/portfolio/ui/_content/confirm_delete_option.html
new file mode 100644
index 00000000000..037cd8dd350
--- /dev/null
+++ b/src/main/java/org/olat/modules/portfolio/ui/_content/confirm_delete_option.html
@@ -0,0 +1,21 @@
+<fieldset class="o_form form-horizontal">
+	<div class="form-group o_warning $f.getElementCssClass("acknowledge") #if($f.hasError("acknowledge")) has-feedback has-error #end clearfix">
+		#if ($f.hasLabel("acknowledge") && $r.visible("acknowledge_LABEL"))
+			$r.render("acknowledge_LABEL", "acknowledge", "col-sm-3")
+		#end
+		<div class='col-sm-9'>
+			$r.render("acknowledge", "form")
+			#if($f.hasError("acknowledge"))
+				<span class="o_icon o_icon_error form-control-feedback"></span>
+			#end
+		</div>
+		#if($f.hasError("acknowledge"))
+			<div class="col-sm-offset-3 col-sm-9">
+				$r.render("acknowledge_ERROR")
+			</div>
+		#end
+	</div>
+	<div class="col-sm-offset-3 col-sm-9">
+		$r.render("cancel") $r.render("delete")
+	</div>
+</fieldset>
\ No newline at end of file
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 badab662b6a..f5feb9a8392 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
@@ -53,6 +53,7 @@ attachments.error.file.exists=Diese Datei existiert bereits und kann nicht erneu
 attachments.upload.successful=Die Datei {0} wurde erfolgreich hochgeladen. Bei Bedarf k\u00F6nnen noch weitere Dateien angeh\u00E4ngt werden.
 author=Autor
 begin.date=Beginn
+binder.atleastone=Bitte w\u00E4hlen Sie mindestens eine Mappe.
 binder.by=von {0}
 binder.entry.name=Zum Kurs
 binder.last.update=Letzte \u00C4nderung
@@ -78,6 +79,7 @@ comment.one=1 Kommentar
 comment.several={0} Kommentare
 comment.title=Kommentare
 comment.zero=Noch keine Kommentare
+confirmation=Best\u00E4tigung
 create.binder=Mappe erstellen
 create.empty.binder=Leere Mappe erstellen
 create.empty.binder.from.course=Mappe f\u00FCr Portfolioaufgabe aus Kurs erstellen
@@ -102,7 +104,8 @@ delete.assignment.confirm.descr=Wollen Sie wirklich diesem Aufgabe "{0}" l\u00F6
 delete.assignment.confirm.title=Aufgabe l\u00F6schen
 delete.assignment.in.use.confirm.descr=$\:delete.assignment.confirm.descr <div class\='o_warning'>Es gibt schon Benutzer die es angefangen haben.</div>
 delete.binder=Mappe l\u00F6schen
-delete.binder.acknowledge=Ich verstehe dass alle Eintr\u00E4ge werden definitive gel\u00F6scht
+delete.binder.acknowledge=Ich verstehe dass die Mappe und alle ihre Eintr\u00E4ge werden definitive gel\u00F6scht.
+delete.binder.acknowledge.2=Ich verstehe dass ich die Mappe nicht mehr wiedererstellen kann.
 delete.binder.success=Die Mappe wurde erfolgreich gel\u00F6scht.
 delete.binder.warning=Wollen Sie wirklich die Mappe "{0}" l\u00F6schen? Sie enth\u00E4lt <strong>{1}</strong> Bereiche, <strong>{2}</strong> Eintr\u00E4ge und <sstrong>{3}</strong> Kommentar.
 delete.def.page=Eintrag l\u00F6schen
@@ -273,7 +276,7 @@ reopen.section.confirm.descr=Wollen Sie diesen Bereich "{0}" neu er\u00F6ffnen?
 reopen.section.confirm.title=Bereich er\u00F6ffnen
 restore.binder=Wiedererstellen
 restore.binder.confirm.title=Mappe wiedererstellen
-restore.binder.confirm.descr=Wollen sie die Mappe "{0}" wiedererstellen?
+restore.binder.confirm.descr=Wollen sie die Mappe "{0}" wiedererstellen? Sie wird wieder in "Meine Portfolio Mappen" erscheinen.
 restore.binder.success=Die Mappe wurde erfolgreich wiedererstellt.
 restore.page=Wiedererstellen
 revision.confirm.descr=Wollen Sie diesen Eintrag "{0}" neu \u00FCberarbeiten lassen?
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 59f45f3fc7e..69dc78c707e 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
@@ -53,6 +53,7 @@ attachments.error.file.exists=This file already exists and can therefore not be
 attachments.upload.successful=File {0} successfully uploaded. Other files can still be attached if needed.
 author=Author
 begin.date=Begin
+binder.atleastone=Please select at least one binder.
 binder.by=by {0}
 binder.entry.name=Regarding course
 binder.last.update=Last update
@@ -78,6 +79,7 @@ comment.one=1 comment
 comment.several={0} comments
 comment.title=Comments
 comment.zero=Still no comments
+confirmation=Confirmation
 create.binder=Create binder
 create.empty.binder=New empty binder
 create.empty.binder.from.course=New binder from course portfolio task
@@ -102,7 +104,8 @@ delete.assignment.confirm.descr=Do you really want to delete this assignment "{0
 delete.assignment.confirm.title=Delete assignment
 delete.assignment.in.use.confirm.descr=$\:delete.assignment.confirm.descr <div class\='o_warning'>There are already users which started the assignment.</div>
 delete.binder=Delete binder
-delete.binder.acknowledge=I understand that all the entries will be deleted.
+delete.binder.acknowledge=I understand that the binder and all its entries will be definetly deleted.
+delete.binder.acknowledge.2=I understand that the binder cannot be restored again.
 delete.binder.success=Binder is successfully deleted.
 delete.binder.warning=Do you really want to delete the binder "{0}"? It contains <strong>{1}</strong> sections, <strong>{2}</strong> entries and <strong>{3}</strong> comments.
 delete.def.page=Delete entry
@@ -272,7 +275,7 @@ reopen.section=Reopen
 reopen.section.confirm.descr=Do you want to reopen this section "{0}"?
 reopen.section.confirm.title=Reopen section
 restore.binder=Restore
-restore.binder.confirm.descr=Do you want to restore the binder "{0}"?
+restore.binder.confirm.descr=Do you want to restore the binder "{0}"? It will appear in "My binders" again.
 restore.binder.confirm.title=Restore binder
 restore.binder.success=The binder was successfully restored.
 restore.page=Restore
-- 
GitLab