From d9a2cc44393d332cb7ed26ebbc2f60e28f4753cc Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 17 Feb 2015 13:59:50 +0100
Subject: [PATCH] OO-1441: use always the bulk delete controller with
 confirmation to delete repository resources

---
 .../olat/repository/RepositoryService.java    |   7 +
 .../_i18n/LocalStrings_ar.properties          |   2 +-
 .../_i18n/LocalStrings_bg.properties          |   4 +-
 .../_i18n/LocalStrings_cs.properties          |   2 +-
 .../_i18n/LocalStrings_da.properties          |   2 +-
 .../_i18n/LocalStrings_de.properties          |   4 +-
 .../_i18n/LocalStrings_el.properties          |   2 +-
 .../_i18n/LocalStrings_en.properties          |   4 +-
 .../_i18n/LocalStrings_fa.properties          |   2 +-
 .../_i18n/LocalStrings_fr.properties          |   4 +-
 .../_i18n/LocalStrings_it.properties          |   2 +-
 .../_i18n/LocalStrings_jp.properties          |   2 +-
 .../_i18n/LocalStrings_lt.properties          |   2 +-
 .../_i18n/LocalStrings_nl_NL.properties       |   2 +-
 .../_i18n/LocalStrings_pt_BR.properties       |   4 +-
 .../_i18n/LocalStrings_pt_PT.properties       |   2 +-
 .../_i18n/LocalStrings_ru.properties          |   2 +-
 .../_i18n/LocalStrings_sq.properties          |   3 +-
 .../_i18n/LocalStrings_zh_CN.properties       |   2 +-
 .../_i18n/LocalStrings_zh_TW.properties       |   2 +-
 .../manager/RepositoryEntryRelationDAO.java   |  24 ++++
 .../manager/RepositoryServiceImpl.java        |   6 +-
 .../ui/RepositoryEntryRuntimeController.java  |  59 ++++-----
 .../ui/author/AuthorListController.java       | 122 +++++-------------
 .../ui/author/ConfirmDeleteController.java    |  84 ++++++++----
 .../ui/author/_content/confirm_delete.html    |   9 ++
 .../RepositoryEntryRelationDAOTest.java       |  23 ++++
 27 files changed, 209 insertions(+), 174 deletions(-)
 create mode 100644 src/main/java/org/olat/repository/ui/author/_content/confirm_delete.html

diff --git a/src/main/java/org/olat/repository/RepositoryService.java b/src/main/java/org/olat/repository/RepositoryService.java
index 82501935080..4beffbdd972 100644
--- a/src/main/java/org/olat/repository/RepositoryService.java
+++ b/src/main/java/org/olat/repository/RepositoryService.java
@@ -100,6 +100,13 @@ public interface RepositoryService {
 	
 	public int countMembers(RepositoryEntryRef re, String... roles);
 	
+	/**
+	 * Count all members (following up to business groups wainting list)
+	 * @param res
+	 * @return
+	 */
+	public int countMembers(List<? extends RepositoryEntryRef> res);
+	
 	/**
 	 * @param re The repository entry
 	 * @return True if the configuration allowed user to leave the entry right now
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_ar.properties
index fdab835bad7..1419c755391 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_ar.properties
@@ -198,7 +198,6 @@ course.config.changed.text=\u0623\u0646\u062A \u062A\u0631\u064A\u062F \u062A\u0
 course.config.changed.title=\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A
 coursefolder=\u0645\u062C\u0644\u062F \u0627\u0644\u062A\u062E\u0632\u064A\u0646
 cp.may.scorm=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0625\u0636\u0627\u0641\u0629 \u0645\u0635\u062F\u0631 \u0627\u0644\u062A\u0639\u0644\u0645\u060C \u064A\u062D\u062A\u0648\u0649 \u0627\u0644\u0645\u0635\u062F\u0631 \u0639\u0644\u0649 \u0635\u0641\u0627\u062A \u0645\u0639\u064A\u0646\u0629 \u0641\u0649 \u0627\u0633\u0643\u0648\u0631\u0645\u060C \u062D\u0627\u0648\u0644 \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0635\u062F\u0631 \u0643\u0645\u062D\u062A\u0648\u0649 \u062A\u0639\u0644\u064A\u0645 \u0627\u0633\u0643\u0648\u0631\u0645.
-del.confirm=\u0647\u0644 \u062A\u0631\u064A\u062F \u0641\u0639\u0644\u0627\u064B \u062D\u0630\u0641 \u0645\u0635\u062F\u0631 \u0627\u0644\u062A\u0639\u0644\u0645\u061F \u064A\u0642\u0648\u0645 {0} \u0645\u0633\u062A\u062E\u062F\u0645 \u062D\u0627\u0644\u064A\u0627\u064B \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647
 del.header={0} \u062D\u0630\u0641 \u0645\u0635\u062F\u0631 \u0627\u0644\u062A\u0639\u0644\u0645
 details.bookmark=\u0648\u0636\u0639 \u0645\u0641\u0636\u0644\u0627\u062A
 details.catadd=\u0625\u0636\u0627\u0641\u0629 \u0625\u0644\u0649 \u0627\u0644\u062F\u0644\u064A\u0644
@@ -228,6 +227,7 @@ details.referenceinfo=\u0645\u0631\u062C\u0639\u064A\u0627\u062A
 details.referenceinfoheader=\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0639\u0646 \u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645
 details.summaryprop=\u0645\u0644\u062E\u0635 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A
 details.typeinfoheader=\u0646\u0648\u0639 \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0645\u0639\u064A\u0646\u0629
+dialog.confirm.delete=\u0647\u0644 \u062A\u0631\u064A\u062F \u0641\u0639\u0644\u0627\u064B \u062D\u0630\u0641 \u0645\u0635\u062F\u0631 \u0627\u0644\u062A\u0639\u0644\u0645\u061F \u064A\u0642\u0648\u0645 <strong>{0} \u0645\u0633\u062A\u062E\u062F\u0645</strong> \u062D\u0627\u0644\u064A\u0627\u064B \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647
 disabledexportreason=\u0644\u0627 \u064A\u062C\u0628 \u062A\u0646\u0632\u064A\u0644 \u0645\u0635\u062F\u0631 \u0627\u0644\u062A\u0639\u0644\u0645.
 disabledforwardreason=\u064A\u0631\u062C\u0649 \u062D\u0641\u0638 \u0645\u062F\u062E\u0644\u0627\u062A\u0643 \u0623\u0648\u0644\u0627\u064B.
 error.course.alreadylocked=\u0647\u0630\u0627 \u0627\u0644\u0645\u0642\u0631\u0631 \u062D\u0627\u0644\u064A\u0627\u064B \u064A\u062A\u0645 \u062A\u0639\u062F\u064A\u0644\u0647 \u0628\u0648\u0627\u0633\u0637\u0629 {0} \u0648\u0644\u0630\u0644\u0643 \u0641\u0647\u0648 \u0645\u063A\u0644\u0642.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_bg.properties
index cfc153d23b9..4118d8f154c 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_bg.properties
@@ -192,7 +192,6 @@ course.config.changed.text=\u041A\u0443\u0440\u0441\u043E\u0432\u0438\u0442\u043
 course.config.changed.title=\u041F\u0440\u043E\u043C\u044F\u043D\u0430 \u043D\u0430 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
 coursefolder=\u041F\u0430\u043F\u043A\u0430 \u0437\u0430 \u0441\u044A\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435
 cp.may.scorm=CP \u0443\u0447\u0435\u0431\u0435\u043D \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u043D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0431\u044A\u0434\u0435 \u0434\u043E\u0431\u0430\u0432\u0435\u043D. \u0412\u0430\u0448\u0438\u044F\u0442 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u0441\u044A\u0434\u044A\u0440\u0436\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438 \u0441\u043F\u0435\u0446\u0438\u0444\u0438\u0447\u043D\u0438 \u0437\u0430 SCORM. \u041E\u043F\u0438\u0442\u0430\u0439\u0442\u0435 \u0441\u0435 \u0434\u0430 \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u0435 \u0432\u0430\u0448\u0438\u044F \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u043A\u0430\u0442\u043E SCORM \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435.
-del.confirm=\u041D\u0430\u0438\u0441\u0442\u0438\u043D\u0430 \u043B\u0438 \u0438\u0441\u043A\u0430\u0442\u0435 \u0434\u0430 \u0438\u0437\u0442\u0440\u0438\u0435\u0442\u0435 \u0442\u043E\u0437\u0438 \u0443\u0447\u0435\u0431\u0435\u043D \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B? (\u0422\u043E\u0439 \u0441\u0435 \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430 \u043E\u0442 {0} \u043F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0438 \u0432 \u043C\u043E\u043C\u0435\u043D\u0442\u0430)
 del.header=\u0418\u0437\u0442\u0440\u0438\u0439\u0442\u0435 \u0443\u0447\u0435\u0431\u0435\u043D \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B {0}
 details.bookmark=\u041E\u0442\u0431\u0435\u043B\u0435\u0436\u0435\u0442\u0435 \u043B\u044E\u0431\u0438\u043C\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430
 details.catadd=\u041F\u0440\u0438\u0431\u0430\u0432\u0435\u0442\u0435 \u0432 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430
@@ -222,6 +221,9 @@ details.referenceinfo=\u0420\u0435\u0444\u0435\u0440\u0435\u043D\u0446\u0438\u04
 details.referenceinfoheader=\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u0437\u0430 \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u043D\u0435
 details.summaryprop=\u041E\u0431\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043D\u0430 \u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A\u0438
 details.typeinfoheader=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u0447\u043D\u0430 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u0437\u0430 \u0432\u0438\u0434\u0430
+
+dialog.confirm.delete=\u041D\u0430\u0438\u0441\u0442\u0438\u043D\u0430 \u043B\u0438 \u0438\u0441\u043A\u0430\u0442\u0435 \u0434\u0430 \u0438\u0437\u0442\u0440\u0438\u0435\u0442\u0435 \u0442\u043E\u0437\u0438 \u0443\u0447\u0435\u0431\u0435\u043D \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B? (\u0422\u043E\u0439 \u0441\u0435 \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430 \u043E\u0442 <strong>{0} \u043F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0438</strong> \u0432 \u043C\u043E\u043C\u0435\u043D\u0442\u0430)
+
 disabledexportreason=\u0422\u043E\u0437\u0438 \u0443\u0447\u0435\u0431\u0435\u043D \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u043D\u0435 \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043D\u0430\u0441\u044F.
 disabledforwardreason=\u041C\u043E\u043B\u044F, \u043F\u044A\u0440\u0432\u043E \u0437\u0430\u043F\u0430\u0437\u0435\u0442\u0435 \u0432\u0430\u0448\u0438\u0442\u0435 \u0432\u043F\u0438\u0441\u0432\u0430\u043D\u0438\u044F.
 error.course.alreadylocked=\u0422\u043E\u0437\u0438 \u043A\u0443\u0440\u0441 \u0441\u0435 \u0440\u0430\u0434\u0430\u043A\u0442\u0438\u0440\u0430 \u0432 \u043C\u043E\u043C\u0435\u043D\u0442\u0430 \u043E\u0442 {0} \u0438 \u043F\u043E\u0440\u0430\u0434\u0438 \u0442\u043E\u0432\u0430 \u0435 \u0437\u0430\u043A\u043B\u044E\u0447\u0435\u043D.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_cs.properties
index f5c48365c3d..e4b3d0fdef3 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_cs.properties
@@ -184,7 +184,6 @@ cmd.forward=Dal\u0161\u00ED
 confirmation.no.toolHelp=Zru\u0161it akci.
 confirmation.yes.toolHelp=Vymazat studijn\u00ED materi\u00E1l.
 cp.may.scorm=CP learning resource could not be added. Your resource contains SCORM specific attributes. Try adding your resource as SCORM learning content.
-del.confirm=Opravdu chcete smazat tento studijn\u00ED materi\u00E1l? (Pr\u00E1v\u011B je pou\u017E\u00EDv\u00E1n t\u011Bmito u\u017Eivateli\: {0} )
 del.header=Vymazat studijn\u00ED materi\u00E1l
 details.bookmark=Nastavit z\u00E1lo\u017Eku
 details.catadd=Vlo\u017Eit do katalogu
@@ -213,6 +212,7 @@ details.referenceinfo=Odkazy
 details.referenceinfoheader=Pou\u017Eit\u00E9 informace
 details.summaryprop=Seznam vlastnost\u00ED
 details.typeinfoheader=Vlo\u017Eit specifick\u00E9 informace
+dialog.confirm.delete=Opravdu chcete smazat tento studijn\u00ED materi\u00E1l? Pr\u00E1v\u011B je pou\u017E\u00EDv\u00E1n t\u011Bmito u\u017Eivateli\: <strong>{0}</strong> 
 disabledexportreason=Tento zdrojov\u00FD soubor nesm\u00ED b\u00FDt exportov\u00E1n.
 disabledforwardreason=Nejd\u0159\u00EDve vlo\u017Ete Va\u0161e vstupy.
 error.createcopy=B\u011Bhem kop\u00EDrov\u00E1n\u00ED objektu nastala chyba. Akce zru\u0161ena.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_da.properties
index 0ed9ff8d488..de36d48a31c 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_da.properties
@@ -133,7 +133,6 @@ cmd.forward=N\u00E6ste
 confirmation.no.toolHelp=Afbryd handling.
 confirmation.yes.toolHelp=Slet l\u00E6ringsressource.
 cp.may.scorm=CP learning resource could not be added. Your resource contains SCORM specific attributes. Try adding your resource as SCORM learning content.
-del.confirm=Er du sikker p\u00E5 at du vil slette denne l\u00E6ringsressource? (Det bruges af {0} brugere i \u00F8jeblikket)
 del.header=Slet l\u00E6ringsressource
 details.bookmark=S\u00E6t et bogm\u00E6rke
 details.chdesc=Ret beskrivelse
@@ -160,6 +159,7 @@ details.referenceinfo=Referencer
 details.referenceinfoheader=Information om brugen
 details.summaryprop=Resume af indstillinger
 details.typeinfoheader=Information om typen 
+dialog.confirm.delete=Er du sikker p\u00E5 at du vil slette denne l\u00E6ringsressource? Det bruges af <strong>{0} brugere</strong> i \u00F8jeblikket
 disabledexportreason=Denne l\u00E6ringsressource kan ikke eksporteres.
 disabledforwardreason=Gem venligst dine indtastninger f\u00F8rst.
 error.createcopy=Der opstod en fejl under kopiering af objektet. Handlingen er afbrudt.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties
index ae9f6dbb786..bbc0f5a6565 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties
@@ -267,8 +267,6 @@ csc.intro=Wie m\u00F6chten Sie fortfahren?
 csc.label=Wie m\u00F6chten Sie weitermachen?
 csc.startwizard=Einfachen Kurs mit Assistenten erstellen
 csc.title=N\u00E4chste Schritte
-del.confirm=Wollen Sie diese Lernressource wirklich l\u00F6schen? (Im Moment wird sie gerade von {0} Benutzern verwendet)
-del.confirm.corrupted=$\:del.confirm<div class\='o_error'>Diese Lernressource wurde als defekt erkannt und kann daher nicht archiviert werden. Fahren Sie fort um die Ressource ohne Archiv zu entfernen.</div>
 del.header=Lernressource {0} l\u00F6schen
 delete.lifecycle=Semester l\u00F6schen
 delete.lifecycle.confirm=Wollen Sie wirklich den Semester "{1}" mit Referenz "{0}" l\u00F6schen?
@@ -325,6 +323,8 @@ details.typeinfoheader=Typenspezifische Information
 dialog.modal.bg.leave.text=$org.olat.group.ui.main\:dialog.modal.bg.leave.text
 dialog.modal.bg.send.mail=$org.olat.group.ui.main\:dialog.modal.bg.send.mail
 dialog.confirm.delete.notAllDeleteable=Sie haben nicht die Berechtigung alle Lernressourcen zu l\u00F6schen.
+dialog.confirm.delete=Wollen Sie diese Lernressource wirklich l\u00F6schen? Im Moment wird sie gerade von <strong>{0} Benutzern</strong> verwendet.
+dialog.confirm.delete.corrupted=$\:del.confirm<div class\='o_error'>Diese Lernressource wurde als defekt erkannt und kann daher nicht archiviert werden. Fahren Sie fort um die Ressource ohne Archiv zu entfernen.</div>
 disabledexportreason=F\u00FCr diese Lernressource wurde das Exportieren nicht freigegeben.
 disabledforwardreason=Bitte speichern Sie erst Ihre Eingaben.
 edit.lifecycle=Semester editieren
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_el.properties
index 9ad7c8c01e1..d0e1afaa52a 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_el.properties
@@ -207,7 +207,6 @@ csc.intro=\u03A0\u03C9\u03C2 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \
 csc.label=\u03A0\u03CE\u03C2 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03C3\u03C5\u03BD\u03B5\u03C7\u03AF\u03C3\u03B5\u03C4\u03B5;
 csc.startwizard=\u039F\u03B4\u03B7\u03B3\u03CC\u03C2 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1\u03C2 \u03B1\u03C0\u03BB\u03BF\u03CD \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2
 csc.title=\u0395\u03C0\u03CC\u03BC\u03B5\u03BD\u03B1 \u03B2\u03AE\u03BC\u03B1\u03C4\u03B1
-del.confirm=\u0398\u03AD\u03BB\u03B5\u03C4\u03B5 \u03C3\u03AF\u03B3\u03BF\u03C5\u03C1\u03B1 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03B5\u03C4\u03B5 \u03C4\u03BF\u03BD \u03C0\u03CC\u03C1\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2? (\u0391\u03C5\u03C4\u03AE \u03C4\u03B7 \u03C3\u03C4\u03B9\u03B3\u03BC\u03AE \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B1\u03B9 \u03B1\u03C0\u03CC {0} \u03C7\u03C1\u03AE\u03C3\u03C4\u03B5\u03C2)
 del.header=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C0\u03CC\u03C1\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2
 details.bookmark=\u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03C3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B7
 details.catadd=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03C4\u03BF\u03BD \u03BA\u03B1\u03C4\u03AC\u03BB\u03BF\u03B3\u03BF
@@ -237,6 +236,7 @@ details.referenceinfo=\u0391\u03BD\u03B1\u03C6\u03BF\u03C1\u03AD\u03C2
 details.referenceinfoheader=\u03A0\u03BB\u03B7\u03C1\u03BF\u03C6\u03BF\u03C1\u03AF\u03B5\u03C2 \u03C7\u03C1\u03AE\u03C3\u03B7\u03C2
 details.summaryprop=\u03A3\u03CD\u03BD\u03BF\u03C8\u03B7 \u03C4\u03C9\u03BD \u03B9\u03B4\u03B9\u03BF\u03C4\u03AE\u03C4\u03C9\u03BD
 details.typeinfoheader=\u03A0\u03BB\u03B7\u03C1\u03BF\u03C6\u03BF\u03C1\u03AF\u03B5\u03C2 \u03C3\u03C5\u03B3\u03BA\u03B5\u03BA\u03C1\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03CD\u03C0\u03BF\u03C5
+dialog.confirm.delete=\u0398\u03AD\u03BB\u03B5\u03C4\u03B5 \u03C3\u03AF\u03B3\u03BF\u03C5\u03C1\u03B1 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03B5\u03C4\u03B5 \u03C4\u03BF\u03BD \u03C0\u03CC\u03C1\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2? \u0391\u03C5\u03C4\u03AE \u03C4\u03B7 \u03C3\u03C4\u03B9\u03B3\u03BC\u03AE \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B1\u03B9 \u03B1\u03C0\u03CC <strong>{0} \u03C7\u03C1\u03AE\u03C3\u03C4\u03B5\u03C2</strong>.
 disabledexportreason=\u0391\u03C5\u03C4\u03CC\u03C2 \u03BF \u03C0\u03CC\u03C1\u03BF\u03C2 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 \u03B4\u03B5\u03BD \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03BE\u03B1\u03C7\u03B8\u03B5\u03AF.
 disabledforwardreason=\u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03BF\u03CD\u03BC\u03B5 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C3\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03BA\u03B1\u03C4\u03B1\u03C7\u03C9\u03C1\u03AE\u03C3\u03B5\u03B9\u03C2 \u03C3\u03B1\u03C2 \u03C0\u03C1\u03CE\u03C4\u03B1.
 error.course.alreadylocked=\u0391\u03C5\u03C4\u03CC \u03C4\u03BF \u03BC\u03AC\u03B8\u03B7\u03BC\u03B1 \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03AC\u03B6\u03B5\u03C4\u03B1\u03B9 \u03B1\u03C0\u03CC \u03C4\u03BF\u03BD/\u03C4\u03B7\u03BD {0} \u03BA\u03B1\u03B9 \u03B5\u03AF\u03BD\u03B1\u03B9, \u03B5\u03C0\u03BF\u03BC\u03AD\u03BD\u03C9\u03C2, \u03BA\u03BB\u03B5\u03B9\u03B4\u03C9\u03BC\u03AD\u03BD\u03BF.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties
index 54d43f0f8a6..e22bab3b9cb 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties
@@ -266,8 +266,6 @@ csc.intro=How do you want to proceed?
 csc.label=How do you want to proceed?
 csc.startwizard=Create basic course with Wizard
 csc.title=Next steps
-del.confirm=Do you really want to delete this learning resource? (It is used by {0} users at the moment)
-del.confirm.corrupted=$\:del.confirm<div class\='o_error'>This learning resource has been identified as corrupt and therefore can not be archived. Continue to remove the resource from the system without archiving.</div>
 del.header=Delete learning resource {0}
 delete.lifecycle=Delete semester
 delete.lifecycle.confirm=Do you really want to delete semester "{1}" with the references "{0}"?
@@ -321,6 +319,8 @@ details.referenceinfo=References
 details.referenceinfoheader=Information on usage
 details.summaryprop=Summary of settings
 details.typeinfoheader=Type-specific information
+dialog.confirm.delete=Do you really want to delete this learning resource? It is used by <strong>{0} users</strong> at the moment.
+dialog.confirm.delete.corrupted=$\:del.confirm<div class\='o_error'>This learning resource has been identified as corrupt and therefore can not be archived. Continue to remove the resource from the system without archiving.</div>
 dialog.confirm.delete.notAllDeleteable=You don't have the permission to delete all learning resources
 dialog.modal.bg.leave.text=$org.olat.group.ui.main\:dialog.modal.bg.leave.text
 dialog.modal.bg.send.mail=$org.olat.group.ui.main\:dialog.modal.bg.send.mail
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_fa.properties
index f6eaf3e0353..0eb4fb4ccff 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_fa.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_fa.properties
@@ -120,7 +120,6 @@ cmd.forward=\u0628\u0639\u062F\u06CC
 confirmation.no.toolHelp=\u0644\u063A\u0648 \u0639\u0645\u0644\u06CC\u0627\u062A 
 confirmation.yes.toolHelp=\u062D\u0630\u0641 \u0645\u0646\u0628\u0639 \u0622\u0645\u0648\u0632\u0634\u06CC
 cp.may.scorm=CP learning resource could not be added. Your resource contains SCORM specific attributes. Try adding your resource as SCORM learning content.
-del.confirm=\u0622\u06CC\u0627 \u0648\u0627\u0642\u0639\u0627 \u0642\u0635\u062F \u067E\u0627\u06A9 \u06A9\u0631\u062F\u0646 \u0627\u06CC\u0646 \u0645\u0646\u0628\u0639 \u0622\u0645\u0648\u0632\u0634\u06CC \u0631\u0627 \u062F\u0627\u0631\u06CC\u062F\u061F\u0627\u06CC\u0646 \u0645\u0646\u0628\u0639 \u0628\u0647 \u0648\u0633\u06CC\u0644\u0647 \u06A9\u0627\u0631\u0628\u0631 {0}\u062F\u0631 \u062D\u0627\u0644 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0627\u0633\u062A
 del.header=\u062D\u0630\u0641 \u0645\u0646\u0628\u0639 \u0622\u0645\u0648\u0632\u0634\u06CC
 details.bookmark=\u062A\u0646\u0638\u06CC\u0645 \u0646\u0634\u0627\u0646 \u06AF\u0630\u0627\u0631\u06CC
 details.chdesc=\u0627\u0635\u0644\u0627\u062D \u0634\u0631\u062D
@@ -147,6 +146,7 @@ details.referenceinfo=\u0645\u0631\u0627\u062C\u0639
 details.referenceinfoheader=\u0627\u0637\u0644\u0627\u0639\u0627\u062A \u062F\u0631 \u0645\u0648\u0631\u062F \u0686\u06AF\u0648\u0646\u06AF\u06CC \u0627\u0633\u062A\u0641\u0627\u062F\u0647 
 details.summaryprop=\u062E\u0644\u0627\u0635\u0647 \u0627\u06CC \u0627\u0632 \u0645\u0634\u062E\u0635\u0627\u062A
 details.typeinfoheader=\u0627\u0637\u0644\u0627\u0639\u0627\u062A \u0645\u0648\u0627\u0631\u062F \u062E\u0627\u0635
+dialog.confirm.delete=\u0622\u06CC\u0627 \u0648\u0627\u0642\u0639\u0627 \u0642\u0635\u062F \u067E\u0627\u06A9 \u06A9\u0631\u062F\u0646 \u0627\u06CC\u0646 \u0645\u0646\u0628\u0639 \u0622\u0645\u0648\u0632\u0634\u06CC \u0631\u0627 \u062F\u0627\u0631\u06CC\u062F\u061F\u0627\u06CC\u0646 \u0645\u0646\u0628\u0639 \u0628\u0647 \u0648\u0633\u06CC\u0644\u0647 \u06A9\u0627\u0631\u0628\u0631 <strong>{0}\u062F\u0631</strong> \u062D\u0627\u0644 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0627\u0633\u062A
 disabledexportreason=This learning resource must not be exported. 
 disabledforwardreason=\u0644\u0637\u0641\u0627 \u067E\u06CC\u0634 \u0627\u0632 \u0647\u0631 \u06A9\u0627\u0631\u06CC \u0648\u0631\u0648\u062F\u06CC \u0647\u0627 \u0631\u0627 \u0630\u062E\u06CC\u0631\u0647 \u06A9\u0646\u06CC\u062F  
 error.createcopy=An error occured trying to copy the object. Action cancelled.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties
index 3058d5f7af6..c43d34b8cfa 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties
@@ -268,8 +268,6 @@ csc.intro=Comment souhaitez-vous proc\u00E9der?
 csc.label=Comment souhaitez-vous continuer?
 csc.startwizard=Cr\u00E9er un cours simple avec l'assistant
 csc.title=Prochains pas
-del.confirm=Voulez-vous vraiment supprimer cette ressource didactique? (cette ressource est actuellement utilis\u00E9e par {0} utilisateurs)
-del.confirm.corrupted=$\:del.confirm<div class\='o_error'>Cette ressource didactique a \u00E9t\u00E9 jug\u00E9e d\u00E9fectueuse et ne peut donc pas \u00EAtre archiv\u00E9e. Continuez pour effacer la ressource sans l'archiver.</div>
 del.header=Supprimer une ressource didactique 
 delete.lifecycle=Effacer le semestre
 delete.lifecycle.confirm=Voulez-vous vraiment effacer le semestre "{1}" avec la r\u00E9f\u00E9rence "{0}"?
@@ -323,6 +321,8 @@ details.referenceinfo=R\u00E9f\u00E9rences
 details.referenceinfoheader=Informations sur l'application
 details.summaryprop=R\u00E9sum\u00E9 r\u00E9glages
 details.typeinfoheader=Informations typologiques
+dialog.confirm.delete=Voulez-vous vraiment supprimer cette ressource didactique? Cette ressource est actuellement utilis\u00E9e par <strong>{0} utilisateurs</strong>.
+dialog.confirm.delete.corrupted=$\:del.confirm<div class\='o_error'>Cette ressource didactique a \u00E9t\u00E9 jug\u00E9e d\u00E9fectueuse et ne peut donc pas \u00EAtre archiv\u00E9e. Continuez pour effacer la ressource sans l'archiver.</div>
 dialog.confirm.delete.notAllDeleteable=Vous n'avez pas la permission d'effacer toutes les ressources didactiques.
 dialog.modal.bg.leave.text=$org.olat.group.ui.main\:dialog.modal.bg.leave.text
 dialog.modal.bg.send.mail=$org.olat.group.ui.main\:dialog.modal.bg.send.mail
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_it.properties
index 7ee3f6320b4..ec8593120a6 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_it.properties
@@ -208,7 +208,6 @@ csc.intro=Come desidera procedere?
 csc.label=Come desidera proseguire?
 csc.startwizard=Creare un corso semplice con l'assistente
 csc.title=Prossimi passi
-del.confirm=Vuole veramente eliminare la seguente risorsa didattica? (Attualmente viene utilizzata da {0} utente/i.)
 del.header=Eliminare risorsa didattica {0}
 details.bookmark=Creare segnalibro
 details.catadd=Inserire in catalogo
@@ -238,6 +237,7 @@ details.referenceinfo=Riferimenti
 details.referenceinfoheader=Informazione sull'utilizzo
 details.summaryprop=Riassunto delle preferenze
 details.typeinfoheader=Informazione tipologica
+dialog.confirm.delete=Vuole veramente eliminare la seguente risorsa didattica? Attualmente viene utilizzata da <strong>{0} utente/i</strong>.
 disabledexportreason=Per questa risorsa l'esportazione non \u00E8 autorizzata.
 disabledforwardreason=Prima salvi i dati immessi, p.f.
 error.course.alreadylocked=Questo corso viene editato in questo momento da {0} ed \u00E8 dunque bloccato.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_jp.properties
index bd81b6a15a3..304c4090fac 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_jp.properties
@@ -155,7 +155,6 @@ cmd.delete=\u30A4\u30E1\u30FC\u30B8\u3092\u524A\u9664\u3059\u308B
 cmd.finish=\u30A6\u30A3\u30B6\u30FC\u30C9\u3092\u7D42\u4E86\u3059\u308B
 cmd.forward=\u6B21\u3078
 coursefolder=\u30B9\u30C8\u30EC\u30FC\u30B8\u30D5\u30A9\u30EB\u30C0
-del.confirm=\u672C\u5F53\u306B\u3053\u306E\u5B66\u7FD2\u30EA\u30BD\u30FC\u30B9\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B? (\u73FE\u5728\u3001{0} \u540D\u306E\u30E6\u30FC\u30B6\u306B\u5229\u7528\u3055\u308C\u3066\u3044\u307E\u3059)
 del.header=\u5B66\u7FD2\u30EA\u30BD\u30FC\u30B9 {0} \u3092\u524A\u9664\u3059\u308B
 details.bookmark=\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B
 details.catadd=\u30AB\u30BF\u30ED\u30B0\u306B\u8FFD\u52A0\u3059\u308B
@@ -184,6 +183,7 @@ details.referenceinfo=\u53C2\u7167
 details.referenceinfoheader=\u5229\u7528\u60C5\u5831
 details.summaryprop=\u30D7\u30ED\u30D1\u30C6\u30A3\u6982\u8981
 details.typeinfoheader=\u30BF\u30A4\u30D7\u56FA\u6709\u306E\u60C5\u5831
+dialog.confirm.delete=\u672C\u5F53\u306B\u3053\u306E\u5B66\u7FD2\u30EA\u30BD\u30FC\u30B9\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B? \u73FE\u5728\u3001<strong>{0}</strong> \u540D\u306E\u30E6\u30FC\u30B6\u306B\u5229\u7528\u3055\u308C\u3066\u3044\u307E\u3059
 disabledexportreason=\u3053\u306E\u5B66\u7FD2\u30EA\u30BD\u30FC\u30B9\u306F\u3001\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3067\u304D\u307E\u305B\u3093\u3002
 disabledforwardreason=\u307E\u305A\u3001\u3042\u306A\u305F\u306E\u30A8\u30F3\u30C8\u30EA\u3092\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044\u3002
 error.course.alreadylocked=\u73FE\u5728\u3001\u3053\u306E\u30B3\u30FC\u30B9\u306F\u3001{0} \u306B\u3088\u308B\u7DE8\u96C6\u306E\u305F\u3081\u3001\u30ED\u30C3\u30AF\u3055\u308C\u3066\u3044\u307E\u3059\u3002
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_lt.properties
index 3648651380c..8b314092992 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_lt.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_lt.properties
@@ -169,7 +169,6 @@ cmd.forward=Sekantis
 confirmation.no.toolHelp=At\u0161aukti veiksm\u0105
 confirmation.yes.toolHelp=I\u0161trinti mokymosi i\u0161tekli\u0173
 cp.may.scorm=CP mokymosi i\u0161teklius negali b\u016Bti prid\u0117tas. J\u016Bs\u0173 i\u0161tekli\u0173 sudaro SCORM specifiniai atributai. Pabandykite prid\u0117ti j\u016Bs\u0173 i\u0161teklius kaip SCORM mokymosi turin\u012F.
-del.confirm=Ar j\u016Bs tikrai norite i\u0161trinti mokymosi i\u0161tekli\u0173? (\u0160iuo metu {0} naudojamas naudotoj\u0173)
 del.header=I\u0161trinti mokymosi i\u0161tekli\u0173
 details.bookmark=Nustatykite \u017Eym\u0117s \u012Fra\u0161us
 details.chdesc=Modifikuoti apra\u0161ymus
@@ -196,6 +195,7 @@ details.referenceinfo=Rodykl\u0117
 details.referenceinfoheader=Naudojimo informacija
 details.summaryprop=Savybi\u0173 visuma
 details.typeinfoheader=Surinkti specifin\u0119 informacij\u0105
+dialog.confirm.delete=Ar j\u016Bs tikrai norite i\u0161trinti mokymosi i\u0161tekli\u0173? \u0160iuo metu <strong>{0} naudojamas</strong> naudotoj\u0173
 disabledexportreason=\u0160is mokymosi i\u0161teklius negali b\u016Bti eksportuotas
 disabledforwardreason=Pra\u0161ome pirmiau i\u0161saugoti savo \u012Fvestis
 error.createcopy=\u012Evyko klaida bandant kopijuoti objekt\u0105. Veiksmas at\u0161auktas.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_nl_NL.properties
index 55b07053bd2..5ace7908cd3 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_nl_NL.properties
@@ -208,7 +208,6 @@ csc.intro=Hoe wilt u verder gaan?
 csc.label=Hoe wilt u verder gaan?
 csc.startwizard=Maake een eenvoudige cursus aan met Wizard
 csc.title=Volgende stappen
-del.confirm=Weet u zeker dat u dit leermiddel wilt verwijderen? (Het wordt op dit moment gebruikt door {0} gebruikers)
 del.header=Leermiddel {0} verwijderen
 details.bookmark=Bladwijzer instellen
 details.catadd=Catalogus toevoegen
@@ -238,6 +237,7 @@ details.referenceinfo=Referenties
 details.referenceinfoheader=Informatie over gebruik
 details.summaryprop=Opsomming van instellingen
 details.typeinfoheader=Type-specifieke informatie
+dialog.confirm.delete=Weet u zeker dat u dit leermiddel wilt verwijderen? Het wordt op dit moment gebruikt door <strong>{0} gebruikers</strong>
 disabledexportreason=Dit leermiddel mag niet ge\u00EBxporteerd worden.
 disabledforwardreason=Gelieve eerst uw gegevens op te slaan.
 error.course.alreadylocked=Deze cursus word op dit moment ge\u00EBditeerd {0} door en is daarom gesloten.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties
index 8e9d2cd4677..0b04eb16e85 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties
@@ -263,8 +263,6 @@ csc.intro=Como voc\u00EA quer continuar?
 csc.label=Como voc\u00EA quer continuar?
 csc.startwizard=Fa\u00E7a um curso simples com um assistente
 csc.title=Pr\u00F3ximos passos
-del.confirm=Voc\u00EA realmente quer apagar este recurso did\u00E1tico? (est\u00E1 sendo usado por {0} usu\u00E1rios neste momento)
-del.confirm.corrupted=$\:del.confirm<div class\='o_error'> Este recurso did\u00E1tico foi identificado como corrompido e, portanto, n\u00E3o pode ser arquivado. Continue a remover o recurso do sistema sem arquivamento. </div>
 del.header=Apagar recurso did\u00E1tico
 delete.lifecycle=Excluir semestre
 delete.lifecycle.confirm=Voc\u00EA realmente deseja excluir semestre "{1}", com as refer\u00EAncias "{0}"?
@@ -311,6 +309,8 @@ details.referenceinfo=Refer\u00EAncias
 details.referenceinfoheader=Informa\u00E7\u00E3o em uso
 details.summaryprop=Resumo de propriedades
 details.typeinfoheader=Digite a informa\u00E7\u00E3o espec\u00EDfica
+dialog.confirm.delete=Voc\u00EA realmente quer apagar este recurso did\u00E1tico? Est\u00E1 sendo usado por <strong>{0} usu\u00E1rios</strong> neste momento.
+dialog.confirm.delete.corrupted=$\:del.confirm<div class\='o_error'> Este recurso did\u00E1tico foi identificado como corrompido e, portanto, n\u00E3o pode ser arquivado. Continue a remover o recurso do sistema sem arquivamento. </div>
 dialog.modal.bg.leave.text=$org.olat.group.ui.main\:dialog.modal.bg.leave.text
 dialog.modal.bg.send.mail=$org.olat.group.ui.main\:dialog.modal.bg.send.mail
 disabledexportreason=Este recurso did\u00E1tico n\u00E3o deve ser exportado.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_PT.properties
index e61cf601234..9deeba9df09 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_PT.properties
@@ -184,7 +184,6 @@ cmd.forward=Pr\u00F3ximo
 confirmation.no.toolHelp=Cancelar a\u00E7\u00E3o.
 confirmation.yes.toolHelp=Apagar recurso did\u00E1tico.
 cp.may.scorm=Recurso did\u00E1tico IMS-CP n\u00E3o pode ser adicionado. Seu recurso cont\u00E9m atributos espec\u00EDficos de SCORM. Tente adicionar seu recurso como m\u00F3dulo did\u00E1tico SCORM.
-del.confirm=Voc\u00EA realmente quer apagar este recurso did\u00E1tico? (est\u00E1 sendo usado por {0} usu\u00E1rios neste momento)
 del.header=Apagar recurso did\u00E1tico
 details.bookmark=Marcar como favorito
 details.chdesc=Modificar descri\u00E7\u00E3o
@@ -211,6 +210,7 @@ details.referenceinfo=Refer\u00EAncias
 details.referenceinfoheader=Informa\u00E7\u00E3o em uso
 details.summaryprop=Resumo de propriedades
 details.typeinfoheader=Digite a informa\u00E7\u00E3o espec\u00EDfica
+dialog.confirm.delete=Voc\u00EA realmente quer apagar este recurso did\u00E1tico? Est\u00E1 sendo usado por <strong>{0} usu\u00E1rios</strong> neste momento.
 disabledexportreason=Este recurso did\u00E1tico n\u00E3o deve ser exportado.
 disabledforwardreason=Favor salvar seus itens antes.
 error.createcopy=Ocorreu um erro ao tentar copiar o objeto. A\u00E7\u00E3o cancelada.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_ru.properties
index 24b46359e3f..aaa0ae35bb6 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_ru.properties
@@ -141,7 +141,6 @@ course.config.changed.text=\u0412\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u0
 course.config.changed.title=\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A
 coursefolder=\u041F\u0430\u043F\u043A\u0430 \u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F
 cp.may.scorm=\u0423\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 CP \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0431\u044B\u043B\u043E \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C\! \u0412\u0430\u0448\u0435 \u0443\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043F\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B SCORM. \u041F\u043E\u043F\u044B\u0442\u0430\u0439\u0442\u0435\u0441\u044C \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u044D\u0442\u043E \u0443\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 \u043A\u0430\u043A \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 SCORM.
-del.confirm=\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u0443\u0447\u0435\u0431\u043D\u044B\u0439 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B? (\u0412 \u0434\u0430\u043D\u043D\u044B\u0439 \u043C\u043E\u043C\u0435\u043D\u0442 \u043E\u043D \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C {0}.)
 del.header=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0443\u0447\u0435\u0431\u043D\u044B\u0439 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B
 details.bookmark=\u041F\u043E\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0437\u0430\u043A\u043B\u0430\u0434\u043A\u0443
 details.catadd=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u0430\u0442\u0430\u043B\u043E\u0433
@@ -171,6 +170,7 @@ details.referenceinfo=\u0421\u0441\u044B\u043B\u043A\u0438
 details.referenceinfoheader=\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E\u0431 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0438
 details.summaryprop=\u041E\u0431\u0437\u043E\u0440 \u0432\u0441\u0435\u0445 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A 
 details.typeinfoheader=\u0422\u0438\u043F\u043E\u0441\u043F\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F
+dialog.confirm.delete=\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u0443\u0447\u0435\u0431\u043D\u044B\u0439 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B? \u0412 \u0434\u0430\u043D\u043D\u044B\u0439 \u043C\u043E\u043C\u0435\u043D\u0442 \u043E\u043D \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C <strong>{0}</strong>.
 disabledexportreason=\u0414\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0443\u0447\u0435\u0431\u043D\u043E\u0433\u043E \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u0430 \u043D\u0435 \u0431\u044B\u043B\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u044F \u043D\u0430 \u044D\u043A\u0441\u043F\u043E\u0440\u0442.
 disabledforwardreason=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u0435, \u043F\u043E\u0436\u0430\u0439\u043B\u0443\u0441\u0442\u0430, \u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u0412\u0430\u0448\u0438 \u0434\u0430\u043D\u043D\u044B\u0435.
 error.course.alreadylocked=\u042D\u0442\u043E\u0442 \u043A\u0443\u0440\u0441 \u0432 \u0434\u0430\u043D\u043D\u044B\u0439 \u043C\u043E\u043C\u0435\u043D\u0442 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C {0} \u0438 \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_sq.properties
index 0dede02533a..fe252d88b28 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_sq.properties
@@ -133,7 +133,6 @@ cmd.forward=Paso
 confirmation.no.toolHelp=Nd\u00EBrprej aksionin.
 confirmation.yes.toolHelp=Fshij resurs m\u00EBsimi.
 cp.may.scorm=CP resursi i m\u00EBsimit nuk mund t\u00EB shtohet. Resursi juaj p\u00EBrmban SCORM artibute specifike. Provoni t\u00EB shtoni resursin tuaj si SCORM p\u00EBrmbajtje m\u00EBsimi.
-del.confirm=A doni me t\u00EB v\u00EBrtet\u00EB t\u00EB fshini k\u00EBt\u00EB resurs m\u00EBsimi? (N\u00EB k\u00EBt\u00EB \u00E7ast \u00EBsht\u00EB duke u p\u00EBrdorur nga {0} shfryt\u00EBzues)
 del.header=Fshij resurs m\u00EBsimi
 details.bookmark=Cakto referenc\u00EB
 details.chdesc=Ndrysho p\u00EBrshkrimit
@@ -160,6 +159,8 @@ details.referenceinfo=Referencat
 details.referenceinfoheader=Informata mbi p\u00EBrdorimi
 details.summaryprop=P\u00EBrmbledhje e ve\u00E7orive
 details.typeinfoheader=Informata specifike t\u00EB llojit
+dialog.confirm.delete=A doni me t\u00EB v\u00EBrtet\u00EB t\u00EB fshini k\u00EBt\u00EB resurs m\u00EBsimi? N\u00EB k\u00EBt\u00EB \u00E7ast \u00EBsht\u00EB duke u p\u00EBrdorur nga <strong>{0} shfryt\u00EBzues</strong>
+
 disabledexportreason=Ky resurs m\u00EBsimi nuk mund t\u00EB eksportohet
 disabledforwardreason=Ju lutemi ruani s\u00EB pari t\u00EB dh\u00EBnat tuaj.
 error.createcopy=Ka ndodhur nj\u00EB gabim gjat\u00EB tentimit t\u00EB kopjimi t\u00EB objektit. Aksioni u nd\u00EBrpre.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_CN.properties
index 20590cbe4fd..0b02e637736 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_CN.properties
@@ -218,7 +218,6 @@ csc.intro=\u60A8\u60F3\u600E\u4E48\u505A\uFF1F
 csc.label=\u60A8\u60F3\u5982\u4F55\u8FDB\u5165\u4E0B\u4E00\u6B65\uFF1F
 csc.startwizard=\u4EE5\u7B80\u5355\u538B\u7F29\u5305\u7684\u65B9\u5F0F\u521B\u5EFA\u5B66\u7A0B
 csc.title=\u4E0B\u4E00\u6B65
-del.confirm=\u4F60\u60F3\u8981\u5220\u9664\u8BE5\u5B66\u4E60\u8D44\u6E90\u5417\uFF1F(\u5B83\u73B0\u5728\u6B63\u88AB {0} \u4E2A\u7528\u6237\u4F7F\u7528)
 del.header=\u5220\u9664\u5B66\u4E60\u8D44\u6E90
 details.bookmark=\u8BBE\u7F6E\u4E66\u7B7E
 details.catadd=\u52A0\u5165\u76EE\u5F55
@@ -248,6 +247,7 @@ details.referenceinfo=\u5F15\u7528
 details.referenceinfoheader=\u4F7F\u7528\u4FE1\u606F
 details.summaryprop=\u5C5E\u6027\u6982\u8981
 details.typeinfoheader=\u7C7B\u578B\u8BE6\u7EC6\u4FE1\u606F
+dialog.confirm.delete=\u4F60\u60F3\u8981\u5220\u9664\u8BE5\u5B66\u4E60\u8D44\u6E90\u5417\uFF1F \u5B83\u73B0\u5728\u6B63\u88AB <strong>{0} \u4E2A\u7528\u6237\u4F7F\u7528</strong>
 disabledexportreason=\u65E0\u6CD5\u5BFC\u51FA\u8BE5\u5B66\u4E60\u8D44\u6E90
 disabledforwardreason=\u8BF7\u5148\u4FDD\u5B58\u4F60\u7684\u6761\u76EE
 error.course.alreadylocked=\u672C\u5B66\u7A0B\u6B64\u523B\u6B63\u5728\u88AB{0}\u7F16\u8F91\uFF0C\u56E0\u6B64\u73B0\u5728\u9501\u5B9A\u3002
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_TW.properties
index 7e2d52a8929..96e9ca0eea2 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_TW.properties
@@ -149,7 +149,6 @@ csc.intro=\u60A8\u60F3\u8981\u5982\u4F55\u9032\u884C\uFF1F
 csc.label=\u60A8\u60F3\u8981\u5982\u4F55\u9032\u884C\uFF1F
 csc.startwizard=\u5229\u7528\u7CBE\u9748\u5EFA\u7ACB\u4E00\u500B\u55AE\u7D14\u7684\u8AB2\u7A0B
 csc.title=\u4E0B\u4E00\u6B65
-del.confirm=\u60A8\u771F\u7684\u8981\u522A\u9664\u9019\u500B\u5B78\u7FD2\u8CC7\u6E90\u55CE\uFF1F(\u5B83\u73FE\u5728\u6B63\u88AB {0} \u500B\u4F7F\u7528\u8005\u4F7F\u7528)
 del.header=\u522A\u9664\u5B78\u7FD2\u8CC7\u6E90 {0}
 details.bookmark=\u8A2D\u5B9A\u66F8\u7C64
 details.catadd=\u52A0\u5165\u76EE\u9304
@@ -179,6 +178,7 @@ details.referenceinfo=\u53C3\u7167
 details.referenceinfoheader=\u4F7F\u7528\u91CF\u8CC7\u8A0A
 details.summaryprop=\u5C6C\u6027\u6458\u8981
 details.typeinfoheader=\u985E\u578B\u7279\u6709\u8CC7\u8A0A
+dialog.confirm.delete=\u60A8\u771F\u7684\u8981\u522A\u9664\u9019\u500B\u5B78\u7FD2\u8CC7\u6E90\u55CE\uFF1F \u5B83\u73FE\u5728\u6B63\u88AB <strong>{0} \u500B\u4F7F\u7528\u8005\u4F7F\u7528</strong>
 disabledexportreason=\u9019\u500B\u5B78\u7FD2\u8CC7\u6E90\u4E0D\u80FD\u88AB\u532F\u51FA\u3002
 disabledforwardreason=\u8ACB\u5148\u5132\u5B58\u60A8\u7684\u9805\u76EE\u3002
 error.course.alreadylocked=\u9019\u500B\u8AB2\u7A0B\u76EE\u524D\u88AB {0} \u7DE8\u8F2F\u56E0\u6B64\u88AB\u9396\u5B9A\u4E86\u3002
diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java b/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java
index e3d134793cd..62757174ac1 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java
@@ -19,6 +19,7 @@
  */
 package org.olat.repository.manager;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
@@ -250,6 +251,29 @@ public class RepositoryEntryRelationDAO {
 		return count == null ? 0 : count.intValue();
 	}
 	
+	public int countMembers(List<? extends RepositoryEntryRef> res) {
+		if(res == null || res.isEmpty()) return 0;
+		
+		List<Long> repoKeys = new ArrayList<>(res.size());
+		for(RepositoryEntryRef re:res) {
+			repoKeys.add(re.getKey());
+		}
+		
+		StringBuilder sb = new StringBuilder();
+		sb.append("select count(distinct members.identity.key) from ").append(RepositoryEntry.class.getName()).append(" as v")
+		  .append(" inner join v.groups as relGroup")
+		  .append(" inner join relGroup.group as baseGroup")
+		  .append(" inner join baseGroup.members as members")
+		  .append(" where v.key in (:repoKeys)");
+
+		Number count = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), Number.class)
+				.setParameter("repoKeys", repoKeys)
+				.getSingleResult();
+		return count == null ? 0 : count.intValue();
+	}
+	
+	
 	public List<Long> getAuthorKeys(RepositoryEntryRef re) {
 		
 		StringBuilder sb = new StringBuilder();
diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
index 86e5b4dfc1d..a9f9a9b6462 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
@@ -424,7 +424,11 @@ public class RepositoryServiceImpl implements RepositoryService {
 	public int countMembers(RepositoryEntryRef re, String... roles) {
 		return reToGroupDao.countMembers(re, roles);
 	}
-	
+
+	@Override
+	public int countMembers(List<? extends RepositoryEntryRef> res) {
+		return reToGroupDao.countMembers(res);
+	}
 
 	@Override
 	public List<Long> getAuthors(RepositoryEntryRef re) {
diff --git a/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java b/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java
index 9296017bf87..a66dcb11444 100644
--- a/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java
+++ b/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java
@@ -44,8 +44,6 @@ import org.olat.core.gui.control.generic.dtabs.Activateable2;
 import org.olat.core.gui.control.generic.dtabs.DTab;
 import org.olat.core.gui.control.generic.dtabs.DTabs;
 import org.olat.core.gui.control.generic.layout.MainLayoutController;
-import org.olat.core.gui.control.generic.modal.DialogBoxController;
-import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
 import org.olat.core.gui.control.generic.wizard.Step;
 import org.olat.core.gui.control.generic.wizard.StepRunnerCallback;
 import org.olat.core.gui.control.generic.wizard.StepsMainRunController;
@@ -62,7 +60,6 @@ import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.UserSession;
 import org.olat.core.util.Util;
-import org.olat.core.util.coordinate.CoordinatorManager;
 import org.olat.core.util.coordinate.LockResult;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.course.CourseModule;
@@ -70,22 +67,19 @@ import org.olat.course.assessment.AssessmentMode;
 import org.olat.course.assessment.AssessmentModeManager;
 import org.olat.course.assessment.AssessmentModule;
 import org.olat.course.assessment.model.TransientAssessmentMode;
-import org.olat.course.run.RunMainController;
-import org.olat.repository.ErrorList;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryManagedFlag;
 import org.olat.repository.RepositoryEntryRef;
 import org.olat.repository.RepositoryManager;
 import org.olat.repository.RepositoryModule;
 import org.olat.repository.RepositoryService;
-import org.olat.repository.controllers.EntryChangedEvent;
-import org.olat.repository.controllers.EntryChangedEvent.Change;
 import org.olat.repository.handlers.EditionSupport;
 import org.olat.repository.handlers.RepositoryHandler;
 import org.olat.repository.handlers.RepositoryHandlerFactory;
 import org.olat.repository.model.RepositoryEntrySecurity;
 import org.olat.repository.ui.author.AuthoringEditAccessController;
 import org.olat.repository.ui.author.CatalogSettingsController;
+import org.olat.repository.ui.author.ConfirmDeleteController;
 import org.olat.repository.ui.author.CopyRepositoryEntryController;
 import org.olat.repository.ui.author.RepositoryEditDescriptionController;
 import org.olat.repository.ui.author.RepositoryMembersController;
@@ -122,9 +116,9 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController
 	protected Controller accessController;
 	private OrdersAdminController ordersCtlr;
 	private StepsMainRunController closeCtrl;
-	private DialogBoxController deleteDialogCtrl;
 	private CatalogSettingsController catalogCtlr;
 	private CopyRepositoryEntryController copyCtrl;
+	private ConfirmDeleteController confirmDeleteCtrl;
 	protected AuthoringEditAccessController accessCtrl;
 	private RepositoryEntryDetailsController detailsCtrl;
 	private RepositoryMembersController membersEditController;
@@ -556,9 +550,17 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController
 					doCloseResource(ureq);
 				}
 			}
-		} else if(deleteDialogCtrl == source) {
-			if (DialogBoxUIFactory.isYesEvent(event)) {
-				doCompleteDelete(ureq);
+		} else if(confirmDeleteCtrl == source) {
+			if(event == Event.CANCELLED_EVENT) {
+				cmc.deactivate();
+				removeAsListenerAndDispose(confirmDeleteCtrl);
+				removeAsListenerAndDispose(cmc);
+				confirmDeleteCtrl = null;
+				cmc = null;
+			} else if (event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
+				cmc.deactivate();
+				doClose(ureq);
+				cleanUp();
 			}
 		} else if(copyCtrl == source) {
 			cmc.deactivate();
@@ -578,6 +580,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController
 	
 	protected void cleanUp() {
 		removeAsListenerAndDispose(membersEditController);
+		removeAsListenerAndDispose(confirmDeleteCtrl);
 		removeAsListenerAndDispose(accessController);
 		removeAsListenerAndDispose(descriptionCtrl);
 		removeAsListenerAndDispose(catalogCtlr);
@@ -589,6 +592,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController
 		removeAsListenerAndDispose(cmc);
 		
 		membersEditController = null;
+		confirmDeleteCtrl = null;
 		accessController = null;
 		descriptionCtrl = null;
 		catalogCtlr = null;
@@ -843,29 +847,18 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController
 	}
 	
 	private void doDelete(UserRequest ureq) {
-		boolean isOwner = true;
-		if (!isOwner) throw new OLATSecurityException("Trying to delete, but not allowed: user = " + ureq.getIdentity());
-
-		//show how many users are currently using this resource
-		String dialogTitle = translate("del.header", re.getDisplayname());
-		Long resId = re.getResourceableId();
-		OLATResourceable courseRunOres = OresHelper.createOLATResourceableInstance(RunMainController.ORES_TYPE_COURSE_RUN, resId);
-		int cnt = CoordinatorManager.getInstance().getCoordinator().getEventBus().getListeningIdentityCntFor(courseRunOres);
-
-		String dialogText = translate(corrupted ? "del.confirm.corrupted" : "del.confirm", String.valueOf(cnt));
-		deleteDialogCtrl = activateYesNoDialog(ureq, dialogTitle, dialogText, deleteDialogCtrl);
-		deleteDialogCtrl.setUserObject(re);
-	}
-	
-	private void doCompleteDelete(UserRequest ureq) {
-		ErrorList errors = repositoryService.delete(re, getIdentity(), roles, getLocale());
-		if (errors.hasErrors()) {
-			showInfo("info.could.not.delete.entry");
-		} else {
-			fireEvent(ureq, new EntryChangedEvent(re, getIdentity(), Change.deleted));
-			showInfo("info.entry.deleted");
+		if (!reSecurity.isEntryAdmin()) {
+			throw new OLATSecurityException("Trying to delete, but not allowed: user = " + ureq.getIdentity());
 		}
-		doClose(ureq);
+
+		List<RepositoryEntry> entryToDelete = Collections.singletonList(getRepositoryEntry());
+		confirmDeleteCtrl = new ConfirmDeleteController(ureq, getWindowControl(), entryToDelete, false);
+		listenTo(confirmDeleteCtrl);
+		
+		String title = translate("del.header", re.getDisplayname());
+		cmc = new CloseableModalController(getWindowControl(), "close", confirmDeleteCtrl.getInitialComponent(), true, title);
+		listenTo(cmc);
+		cmc.activate();
 	}
 	
 	protected void launchContent(UserRequest ureq, RepositoryEntrySecurity security) {
diff --git a/src/main/java/org/olat/repository/ui/author/AuthorListController.java b/src/main/java/org/olat/repository/ui/author/AuthorListController.java
index 4b0dd252dbf..d31557651d6 100644
--- a/src/main/java/org/olat/repository/ui/author/AuthorListController.java
+++ b/src/main/java/org/olat/repository/ui/author/AuthorListController.java
@@ -81,25 +81,19 @@ import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.Roles;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.StateEntry;
-import org.olat.core.logging.OLATSecurityException;
 import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
-import org.olat.core.util.coordinate.CoordinatorManager;
 import org.olat.core.util.coordinate.LockResult;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.course.CorruptedCourseException;
 import org.olat.course.CourseModule;
-import org.olat.course.run.RunMainController;
-import org.olat.repository.ErrorList;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryManagedFlag;
 import org.olat.repository.RepositoryEntryRef;
 import org.olat.repository.RepositoryManager;
 import org.olat.repository.RepositoryModule;
 import org.olat.repository.RepositoryService;
-import org.olat.repository.controllers.EntryChangedEvent;
-import org.olat.repository.controllers.EntryChangedEvent.Change;
 import org.olat.repository.handlers.RepositoryHandler;
 import org.olat.repository.handlers.RepositoryHandlerFactory;
 import org.olat.repository.handlers.RepositoryHandlerFactory.OrderedRepositoryHandler;
@@ -137,7 +131,6 @@ public class AuthorListController extends FormBasicController implements Activat
 	private AuthorSearchController searchCtrl;
 	private UserSearchController userSearchCtr;
 	private DialogBoxController copyDialogCtrl;
-	private DialogBoxController deleteDialogCtrl;
 	private CopyRepositoryEntryController copyCtrl;
 	private StepsMainRunController closeCtrl;
 	private ConfirmDeleteController confirmDeleteCtrl;
@@ -430,12 +423,6 @@ public class AuthorListController extends FormBasicController implements Activat
 				toolsCalloutCtrl.deactivate();
 				cleanUp();
 			}
-		} else if(deleteDialogCtrl == source) {
-			if (DialogBoxUIFactory.isYesEvent(event)) {
-				AuthoringEntryRow row = (AuthoringEntryRow)deleteDialogCtrl.getUserObject();
-				doCompleteDelete(ureq, row);
-				reloadRows();
-			}
 		} else if(closeCtrl == source) {
 			if(event == Event.CANCELLED_EVENT || event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
 				getWindowControl().pop();
@@ -446,13 +433,14 @@ public class AuthorListController extends FormBasicController implements Activat
 				}
 			}
 		} else if(confirmDeleteCtrl == source) {
-			cmc.deactivate();
-			if(event == Event.DONE_EVENT) {
-				List<AuthoringEntryRow> rows = confirmDeleteCtrl.getRows();
-				doCompleteDelete(ureq, rows);
+			if(event == Event.CANCELLED_EVENT) {
+				cmc.deactivate();
+				cleanUp();
+			} else if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
+				cmc.deactivate();
 				reloadRows();
+				cleanUp();
 			}
-			cleanUp();
 		} else if(copyDialogCtrl == source) {
 			if (DialogBoxUIFactory.isYesEvent(event)) {
 				@SuppressWarnings("unchecked")
@@ -503,7 +491,7 @@ public class AuthorListController extends FormBasicController implements Activat
 		} else if(deleteButton == source) {
 			List<AuthoringEntryRow> rows = getMultiSelectedRows();
 			if(!rows.isEmpty()) {
-				doConfirmDelete(ureq, rows);
+				doDelete(ureq, rows);
 			}
 		} else if(source instanceof FormLink) {
 			FormLink link = (FormLink)source;
@@ -728,33 +716,6 @@ public class AuthorListController extends FormBasicController implements Activat
 		showInfo("details.copy.success", new String[]{ Integer.toString(rows.size()) });
 	}
 	
-	private void doConfirmDelete(UserRequest ureq, List<AuthoringEntryRow> rows) {
-		Roles roles = ureq.getUserSession().getRoles();
-		List<AuthoringEntryRow> deleteableRows = new ArrayList<>(rows.size());
-		for(AuthoringEntryRow row:rows) {
-			boolean managed = RepositoryEntryManagedFlag.isManaged(row.getManagedFlags(), RepositoryEntryManagedFlag.copy);
-			boolean canDelete = roles.isOLATAdmin() || repositoryService.hasRole(ureq.getIdentity(), row, GroupRoles.owner.name())
-					|| repositoryManager.isInstitutionalRessourceManagerFor(getIdentity(), roles, row);
-			if(canDelete && !managed) {
-				deleteableRows.add(row);
-			}
-		}
-		if(deleteableRows.isEmpty()) {
-			showWarning("bulk.update.nothing.selected");
-		} else {
-			removeAsListenerAndDispose(confirmDeleteCtrl);
-			removeAsListenerAndDispose(cmc);
-			
-			confirmDeleteCtrl = new ConfirmDeleteController(ureq, getWindowControl(), deleteableRows, rows.size() != deleteableRows.size());
-			listenTo(confirmDeleteCtrl);
-			
-			String title = translate("details.delete");
-			cmc = new CloseableModalController(getWindowControl(), translate("close"), confirmDeleteCtrl.getInitialComponent(), true, title);
-			listenTo(cmc);
-			cmc.activate();
-		}
-	}
-	
 	private void doCloseResource(UserRequest ureq, AuthoringEntryRow row) {
 		removeAsListenerAndDispose(closeCtrl);
 		
@@ -782,60 +743,35 @@ public class AuthorListController extends FormBasicController implements Activat
 		cmc.activate();
 	}
 	
-	private void doDelete(UserRequest ureq, AuthoringEntryRow row) {
-		boolean isOwner = true;
-		if (!isOwner) throw new OLATSecurityException("Trying to delete, but not allowed: user = " + ureq.getIdentity());
-
-		//show how many users are currently using this resource
-		String dialogTitle = translate("del.header", row.getDisplayname());
-		Long resId = row.getRepositoryEntryResourceable().getResourceableId();
-		OLATResourceable courseRunOres = OresHelper.createOLATResourceableInstance(RunMainController.ORES_TYPE_COURSE_RUN, resId);
-		int cnt = CoordinatorManager.getInstance().getCoordinator().getEventBus().getListeningIdentityCntFor(courseRunOres);
-		
-		boolean corrupted = false;
-		
-		String dialogText = translate(corrupted ? "del.confirm.corrupted" : "del.confirm", String.valueOf(cnt));
-		deleteDialogCtrl = activateYesNoDialog(ureq, dialogTitle, dialogText, deleteDialogCtrl);
-		deleteDialogCtrl.setUserObject(row);
-	}
-	
-	private void doCompleteDelete(UserRequest ureq, AuthoringEntryRow row) {
-		Roles roles = ureq.getUserSession().getRoles();
-		RepositoryEntry entry = repositoryService.loadByKey(row.getKey());
-		if(entry != null) {
-			ErrorList errors = repositoryService.delete(entry, getIdentity(), roles, getLocale());
-			if (errors.hasErrors()) {
-				showInfo("info.could.not.delete.entry");
-			} else {
-				fireEvent(ureq, new EntryChangedEvent(entry, getIdentity(), Change.deleted));
-				showInfo("info.entry.deleted");
-			}
-		}
-	}
-	private void doCompleteDelete(UserRequest ureq, List<AuthoringEntryRow> rows) {
-		boolean allOk = true;
+	private void doDelete(UserRequest ureq, List<AuthoringEntryRow> rows) {
 		Roles roles = ureq.getUserSession().getRoles();
+		List<Long> deleteableRowKeys = new ArrayList<>(rows.size());
 		for(AuthoringEntryRow row:rows) {
-			RepositoryEntry entry = repositoryService.loadByKey(row.getKey());
-			if(entry != null) {
-				ErrorList errors = repositoryService.delete(entry, getIdentity(), roles, getLocale());
-				if (errors.hasErrors()) {
-					showInfo("info.could.not.delete.entry");
-					allOk = false;
-					break;
-				} else {
-					fireEvent(ureq, new EntryChangedEvent(entry, getIdentity(), Change.deleted));
-				}
+			boolean managed = RepositoryEntryManagedFlag.isManaged(row.getManagedFlags(), RepositoryEntryManagedFlag.copy);
+			boolean canDelete = roles.isOLATAdmin() || repositoryService.hasRole(ureq.getIdentity(), row, GroupRoles.owner.name())
+					|| repositoryManager.isInstitutionalRessourceManagerFor(getIdentity(), roles, row);
+			if(canDelete && !managed) {
+				deleteableRowKeys.add(row.getKey());
 			}
-			
 		}
 		
-		if(allOk) {
-			showInfo("info.entry.deleted");
+		List<RepositoryEntry> entriesToDelete = repositoryManager.lookupRepositoryEntries(deleteableRowKeys);
+		if(entriesToDelete.isEmpty()) {
+			showWarning("bulk.update.nothing.selected");
+		} else {
+			removeAsListenerAndDispose(confirmDeleteCtrl);
+			removeAsListenerAndDispose(cmc);
+			
+			confirmDeleteCtrl = new ConfirmDeleteController(ureq, getWindowControl(), entriesToDelete, rows.size() != entriesToDelete.size());
+			listenTo(confirmDeleteCtrl);
+			
+			String title = translate("details.delete");
+			cmc = new CloseableModalController(getWindowControl(), translate("close"), confirmDeleteCtrl.getInitialComponent(), true, title);
+			listenTo(cmc);
+			cmc.activate();
 		}
 	}
 	
-	
 	private void doDownload(UserRequest ureq, AuthoringEntryRow row) {
 		RepositoryHandler typeToDownload = repositoryHandlerFactory.getRepositoryHandler(row.getResourceType());
 		if (typeToDownload == null) {
@@ -1064,7 +1000,7 @@ public class AuthorListController extends FormBasicController implements Activat
 				} else if("close".equals(cmd)) {
 					doCloseResource(ureq, row);
 				} else if("delete".equals(cmd)) {
-					doDelete(ureq, row);
+					doDelete(ureq, Collections.singletonList(row));
 				}
 			}
 		}
diff --git a/src/main/java/org/olat/repository/ui/author/ConfirmDeleteController.java b/src/main/java/org/olat/repository/ui/author/ConfirmDeleteController.java
index 9d1d7370bb7..dceea4594fc 100644
--- a/src/main/java/org/olat/repository/ui/author/ConfirmDeleteController.java
+++ b/src/main/java/org/olat/repository/ui/author/ConfirmDeleteController.java
@@ -33,9 +33,15 @@ import org.olat.core.gui.components.link.Link;
 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.id.Roles;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
+import org.olat.repository.ErrorList;
+import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryService;
+import org.olat.repository.controllers.EntryChangedEvent;
+import org.olat.repository.controllers.EntryChangedEvent.Change;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 
@@ -48,43 +54,50 @@ public class ConfirmDeleteController extends FormBasicController {
 	private FormLink deleteButton;
 	private MultipleSelectionElement acknowledgeEl;
 	
+	private final int numOfMembers;
 	private final boolean notAllDeleteable;
-	private final List<AuthoringEntryRow> rows;
+	private final List<RepositoryEntry> rows;
 	
-	public ConfirmDeleteController(UserRequest ureq, WindowControl wControl, List<AuthoringEntryRow> rows, boolean notAllDeleteable) {
-		super(ureq, wControl);
+	@Autowired
+	private RepositoryService repositoryService;
+	
+	public ConfirmDeleteController(UserRequest ureq, WindowControl wControl, List<RepositoryEntry> rows, boolean notAllDeleteable) {
+		super(ureq, wControl, "confirm_delete");
 		setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator()));
 		
 		this.rows = rows;
 		this.notAllDeleteable = notAllDeleteable;
+		numOfMembers = repositoryService.countMembers(rows);
 		
 		initForm(ureq);
 	}
 
-	public List<AuthoringEntryRow> getRows() {
-		return rows;
-	}
-
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		if(notAllDeleteable) {
-			setFormWarning("dialog.confirm.delete.notAllDeleteable");
-		}
-		
-		StringBuilder message = new StringBuilder();
-		for(AuthoringEntryRow row:rows) {
-			if(message.length() > 0) message.append(", ");
-			message.append(StringHelper.escapeHtml(row.getDisplayname()));
+		if(formLayout instanceof FormLayoutContainer) {
+			FormLayoutContainer layout = (FormLayoutContainer)formLayout;
+			layout.contextPut("notAllDeleteable", new Boolean(notAllDeleteable));
+			layout.contextPut("numOfMembers", Integer.toString(numOfMembers));
+
+			FormLayoutContainer layoutCont = FormLayoutContainer.createDefaultFormLayout("confirm", getTranslator());
+			formLayout.add("confirm", layoutCont);
+			layoutCont.setRootForm(mainForm);
+			
+			StringBuilder message = new StringBuilder();
+			for(RepositoryEntry row:rows) {
+				if(message.length() > 0) message.append(", ");
+				message.append(StringHelper.escapeHtml(row.getDisplayname()));
+			}
+			uifactory.addStaticTextElement("rows", "details.delete.entries", message.toString(), layoutCont);
+			
+			String[] acknowledge = new String[] { translate("details.delete.acknowledge.msg") };
+			acknowledgeEl = uifactory.addCheckboxesHorizontal("confirm", "details.delete.acknowledge", layoutCont, new String[]{ "" },  acknowledge );
+			
+			FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
+			layoutCont.add(buttonsCont);
+			deleteButton = uifactory.addFormLink("details.delete", buttonsCont, Link.BUTTON);
+			uifactory.addFormCancelButton("cancel", buttonsCont, ureq, getWindowControl());
 		}
-		uifactory.addStaticTextElement("rows", "details.delete.entries", message.toString(), formLayout);
-		
-		String acknowledge = translate("details.delete.acknowledge.msg");
-		acknowledgeEl = uifactory.addCheckboxesHorizontal("confirm", "details.delete.acknowledge", formLayout, new String[]{ "" }, new String[] { acknowledge });
-		
-		FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
-		formLayout.add(buttonsCont);
-		deleteButton = uifactory.addFormLink("details.delete", buttonsCont, Link.BUTTON);
-		uifactory.addFormCancelButton("cancel", buttonsCont, ureq, getWindowControl());
 	}
 	
 	@Override
@@ -109,6 +122,7 @@ public class ConfirmDeleteController extends FormBasicController {
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if(deleteButton == source) {
 			if(validateFormLogic(ureq)) {
+				doCompleteDelete(ureq);
 				fireEvent(ureq, Event.DONE_EVENT);
 			}
 		}
@@ -123,4 +137,26 @@ public class ConfirmDeleteController extends FormBasicController {
 	protected void formCancelled(UserRequest ureq) {
 		fireEvent(ureq, Event.CANCELLED_EVENT);
 	}
+	
+	private void doCompleteDelete(UserRequest ureq) {
+		boolean allOk = true;
+		Roles roles = ureq.getUserSession().getRoles();
+		for(RepositoryEntry row:rows) {
+			RepositoryEntry entry = repositoryService.loadByKey(row.getKey());
+			if(entry != null) {
+				ErrorList errors = repositoryService.delete(entry, getIdentity(), roles, getLocale());
+				if (errors.hasErrors()) {
+					allOk = false;
+				} else {
+					fireEvent(ureq, new EntryChangedEvent(entry, getIdentity(), Change.deleted));
+				}
+			}
+		}
+		
+		if(allOk) {
+			showInfo("info.entry.deleted");
+		} else {
+			showWarning("info.could.not.delete.entry");
+		}
+	}
 }
diff --git a/src/main/java/org/olat/repository/ui/author/_content/confirm_delete.html b/src/main/java/org/olat/repository/ui/author/_content/confirm_delete.html
new file mode 100644
index 00000000000..3a65171f1bb
--- /dev/null
+++ b/src/main/java/org/olat/repository/ui/author/_content/confirm_delete.html
@@ -0,0 +1,9 @@
+<div class="o_error">
+	<i class="o_icon o_icon-lg o_icon_important"> </i> $r.translate("dialog.confirm.delete", $numOfMembers)
+</div>
+#if($notAllDeleteable)
+<div class="o_warning">
+	$r.translate("dialog.confirm.delete.notAllDeleteable")
+</div>
+#end
+$r.render("confirm")
\ No newline at end of file
diff --git a/src/test/java/org/olat/repository/manager/RepositoryEntryRelationDAOTest.java b/src/test/java/org/olat/repository/manager/RepositoryEntryRelationDAOTest.java
index f78e8c26c4a..c43dafa61bd 100644
--- a/src/test/java/org/olat/repository/manager/RepositoryEntryRelationDAOTest.java
+++ b/src/test/java/org/olat/repository/manager/RepositoryEntryRelationDAOTest.java
@@ -159,6 +159,29 @@ public class RepositoryEntryRelationDAOTest extends OlatTestCase {
 		Assert.assertTrue(members.contains(id2));
 	}
 	
+	@Test
+	public void countMembers_list() {
+		//create a repository entry with a business group
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("member-1-");
+		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("member-2-");
+		Identity id3 = JunitTestHelper.createAndPersistIdentityAsRndUser("member-3-");
+		Identity id4 = JunitTestHelper.createAndPersistIdentityAsRndUser("member-4-");
+		RepositoryEntry re = repositoryService.create("Rei Ayanami", "rel", "rel", null, null);
+		dbInstance.commit();
+		
+		repositoryEntryRelationDao.addRole(id1, re, GroupRoles.owner.name());
+		repositoryEntryRelationDao.addRole(id2, re, GroupRoles.participant.name());
+		BusinessGroup group = businessGroupService.createBusinessGroup(null, "count relation 1", "tg", null, null, false, false, re);
+	    businessGroupRelationDao.addRole(id2, group, GroupRoles.coach.name());
+	    businessGroupRelationDao.addRole(id3, group, GroupRoles.coach.name());
+	    businessGroupRelationDao.addRole(id4, group, GroupRoles.coach.name());
+	    dbInstance.commitAndCloseSession();
+	    
+		//get the number of members
+	    int numOfMembers = repositoryService.countMembers(Collections.singletonList(re));
+		Assert.assertEquals(4, numOfMembers);
+	}
+	
 	@Test
 	public void getAuthorKeys() {
 		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("auth-1-");
-- 
GitLab