From 81c3300c56b914b8ae2e8359ce602c4b6423b581 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 26 Jun 2013 11:03:15 +0200
Subject: [PATCH] OO-535: delete only possible in "My questions", wordings,
 feedback after question import as file

---
 .../core/_i18n/LocalStrings_en.properties     |  1 +
 .../flexible/elements/FlexiTableElement.java  | 12 ++++++++++
 .../table/AbstractFlexiTableRenderer.java     |  4 +++-
 .../elements/table/FlexiTableElementImpl.java | 11 +++++++++
 .../olat/group/manager/BusinessGroupDAO.java  |  4 ++++
 .../olat/ims/qti/QTI12MetadataController.java |  2 +-
 .../olat/ims/qti/_content/qti_metadatas.html  |  4 ++--
 .../ims/qti/_i18n/LocalStrings_de.properties  |  4 ++++
 .../ims/qti/_i18n/LocalStrings_en.properties  |  4 ++++
 .../modules/qpool/ui/ImportController.java    | 10 +++++++-
 .../ui/QuestionItemDetailsController.java     |  9 ++++---
 .../modules/qpool/ui/QuestionItemsSource.java |  2 ++
 .../qpool/ui/QuestionListController.java      |  6 +++--
 .../ui/QuestionPoolMainEditorController.java  |  1 +
 .../modules/qpool/ui/QuestionsController.java | 12 ++++++----
 .../qpool/ui/_content/item_details.html       |  4 +++-
 .../olat/modules/qpool/ui/_content/items.html |  4 +++-
 .../qpool/ui/_i18n/LocalStrings_de.properties | 24 +++++++++----------
 .../qpool/ui/_i18n/LocalStrings_en.properties |  8 +++----
 .../qpool/ui/admin/PoolsAdminController.java  | 12 ++++++++--
 .../QEducationalContextsAdminController.java  |  2 +-
 .../ui/admin/QItemTypeEditController.java     |  2 +-
 .../ui/admin/QItemTypesAdminController.java   |  2 +-
 .../ui/admin/QLicensesAdminController.java    |  2 +-
 .../ui/admin/_i18n/LocalStrings_de.properties | 17 ++++++-------
 .../datasource/CollectionOfItemsSource.java   |  5 ++++
 .../ui/datasource/DefaultItemsSource.java     | 10 ++++++++
 .../ui/datasource/SharedItemsSource.java      |  5 ++++
 .../ui/metadata/MetadatasController.java      |  4 ++++
 .../qpool/ui/metadata/SharingController.java  |  3 +++
 30 files changed, 142 insertions(+), 48 deletions(-)

diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties
index 861c326dcff..786300fd276 100644
--- a/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties
@@ -15,6 +15,7 @@ error.header=Error
 error.jpbwrapper.renderfailed=This component cannot be displayed anymore. Please start component again.
 error.noformpostdata=Attention\! Due to problems concerning your browser some data could not be transferred. Please use the "Back" button and try again.
 expand=Expand
+extsearch=Advanced search
 finish=Finish
 form.checkall=Select all
 form.date.datevalid=Date must be valid
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java
index 16bf5e8fc7d..5f2ad6b6421 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java
@@ -59,6 +59,18 @@ public interface FlexiTableElement extends FormItem {
 	 */
 	public void setMultiSelect(boolean enable);
 	
+	/**
+	 * 
+	 * @return true if the user can customize the columns of the table
+	 */
+	public boolean isCustomizeColumns();
+
+	/**
+	 * Enable customizing of columns
+	 * @param customizeColumns
+	 */
+	public void setCustomizeColumns(boolean customizeColumns);
+	
 	/**
 	 * @return The CSS selector used to calculate the height of the table
 	 * (datatables variant only)
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java
index f729bd9b15f..1007d22045e 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java
@@ -78,7 +78,9 @@ public abstract class AbstractFlexiTableRenderer implements ComponentRenderer {
 		if(ftE.getExtendedSearchButton() != null) {
 			renderFormItem(renderer, sb, ftE.getExtendedSearchButton(), ubu, translator, renderResult, args);
 		}
-		renderFormItem(renderer, sb, ftE.getCustomButton(), ubu, translator, renderResult, args);
+		if(ftE.getCustomButton() != null && ftE.isCustomizeColumns()) {
+			renderFormItem(renderer, sb, ftE.getCustomButton(), ubu, translator, renderResult, args);
+		}
 	}
 	
 	protected void renderFormItem(Renderer renderer, StringOutput sb, FormItem item, URLBuilder ubu, Translator translator,
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
index d4f0210ca67..8175849286c 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
@@ -72,6 +72,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	//settings
 	private boolean multiSelect;
 	private FlexiTableRendererType rendererType = FlexiTableRendererType.classic;
+	private boolean customizeColumns = true;
 	
 	private int rowCount = -1;
 	
@@ -178,6 +179,16 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	public void setMultiSelect(boolean multiSelect) {
 		this.multiSelect = multiSelect;
 	}
+	
+	
+
+	public boolean isCustomizeColumns() {
+		return customizeColumns;
+	}
+
+	public void setCustomizeColumns(boolean customizeColumns) {
+		this.customizeColumns = customizeColumns;
+	}
 
 	public String getWrapperSelector() {
 		return wrapperSelector;
diff --git a/src/main/java/org/olat/group/manager/BusinessGroupDAO.java b/src/main/java/org/olat/group/manager/BusinessGroupDAO.java
index ee090d9f642..8e714e06efa 100644
--- a/src/main/java/org/olat/group/manager/BusinessGroupDAO.java
+++ b/src/main/java/org/olat/group/manager/BusinessGroupDAO.java
@@ -653,6 +653,10 @@ public class BusinessGroupDAO {
 	public List<BusinessGroupView> findBusinessGroupWithAuthorConnection(Identity author) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select bgi from ").append(BusinessGroupViewImpl.class.getName()).append(" as bgi ")
+		  .append("inner join fetch bgi.ownerGroup ownerGroup ")
+			.append("inner join fetch bgi.partipiciantGroup participantGroup ")
+			.append("inner join fetch bgi.waitingGroup waitingGroup ")
+			.append("inner join fetch bgi.resource bgResource ")
 		  .append("where bgi.key in (")
 		  .append("  select rel.group.key from ").append(BGResourceRelation.class.getName()).append(" as rel ")
 		  .append("  where rel.resource.key in (")
diff --git a/src/main/java/org/olat/ims/qti/QTI12MetadataController.java b/src/main/java/org/olat/ims/qti/QTI12MetadataController.java
index 2ec074aeae0..a7d3702bb27 100644
--- a/src/main/java/org/olat/ims/qti/QTI12MetadataController.java
+++ b/src/main/java/org/olat/ims/qti/QTI12MetadataController.java
@@ -65,7 +65,7 @@ public class QTI12MetadataController extends FormBasicController  {
 			leftSettingsCont.setRootForm(mainForm);
 			formLayout.add("leftSettings", leftSettingsCont);
 			
-			String shuffleStr = Boolean.toString(question.isShuffle());
+			String shuffleStr = translate(question.isShuffle() ? "editor.true" : "editor.false");
 			uifactory.addStaticTextElement("form.imd.shuffle", shuffleStr, leftSettingsCont);
 			
 			String duration = "";
diff --git a/src/main/java/org/olat/ims/qti/_content/qti_metadatas.html b/src/main/java/org/olat/ims/qti/_content/qti_metadatas.html
index 420ebb195d9..938d8797a7a 100644
--- a/src/main/java/org/olat/ims/qti/_content/qti_metadatas.html
+++ b/src/main/java/org/olat/ims/qti/_content/qti_metadatas.html
@@ -1,6 +1,6 @@
 #if($r.available("leftSettings") || $r.available("rightSettings"))
 	<fieldset>
-		<legend>Settings</legend>
+		<legend>$r.translate("editor.settings")</legend>
 		<div class="b_clearfix">
 			<div class="b_c50l">
 				<div class="b_subcl">
@@ -17,7 +17,7 @@
 #end
 #if($r.available("leftFeedback") || $r.available("rightFeedback"))
 	<fieldset>
-		<legend>Feedbacks</legend>
+		<legend>$r.translate("editor.feedback")</legend>
 		<div class="b_clearfix">
 			<div class="b_c50l">
 				<div class="b_subcl">
diff --git a/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_de.properties
index cf176e01dbb..e13cc040ac1 100644
--- a/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_de.properties
@@ -34,6 +34,10 @@ notReleased=Nicht abgegeben
 open=Offen
 date=Datum
 dur=Dauer
+editor.true=Ja
+editor.false=Nein
+editor.settings=Einstellungen
+editor.feedback=Feedbacks
 editor.newquestion=Neue Frage
 editor.newquestiontext=Neue Frage
 editor.newresponsetext=Neue Antwort
diff --git a/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_en.properties
index f1ee9af447f..c9c7993e7da 100644
--- a/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_en.properties
@@ -35,6 +35,10 @@ open=Open
 date=Date
 days=Days
 dur=Duration
+editor.settings=Settings
+editor.feedback=Feedbacks
+editor.true=Yes
+editor.false=No
 editor.newquestion=New question
 editor.newquestiontext=New question
 editor.newresponsetext=New answer
diff --git a/src/main/java/org/olat/modules/qpool/ui/ImportController.java b/src/main/java/org/olat/modules/qpool/ui/ImportController.java
index 7596affff35..3e59b338869 100644
--- a/src/main/java/org/olat/modules/qpool/ui/ImportController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/ImportController.java
@@ -20,6 +20,7 @@
 package org.olat.modules.qpool.ui;
 
 import java.io.File;
+import java.util.List;
 
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
@@ -31,6 +32,7 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.modules.qpool.QPoolService;
+import org.olat.modules.qpool.QuestionItem;
 
 /**
  * 
@@ -85,8 +87,14 @@ public class ImportController extends FormBasicController {
 	protected void formOK(UserRequest ureq) {
 		String filename = fileEl.getUploadFileName();
 		File file = fileEl.getUploadFile();
-		qpoolservice.importItems(getIdentity(), getLocale(), filename, file);
+		List<QuestionItem> importItems = qpoolservice.importItems(getIdentity(), getLocale(), filename, file);
 		fireEvent(ureq, Event.DONE_EVENT);
+		
+		if(importItems.isEmpty()) {
+			showWarning("import.failed");
+		} else {
+			showInfo("import.success", Integer.toString(importItems.size()));
+		}
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java
index 1e73cae4692..9e4aa2a2816 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java
@@ -80,7 +80,7 @@ public class QuestionItemDetailsController extends BasicController implements St
 	private final QuestionPoolModule poolModule;
 	private final QPoolService qpoolService;
 	
-	public QuestionItemDetailsController(UserRequest ureq, WindowControl wControl, QuestionItem item, boolean editable) {
+	public QuestionItemDetailsController(UserRequest ureq, WindowControl wControl, QuestionItem item, boolean editable, boolean deletable) {
 		super(ureq, wControl);
 
 		poolModule = CoreSpringFactory.getImpl(QuestionPoolModule.class);
@@ -112,8 +112,10 @@ public class QuestionItemDetailsController extends BasicController implements St
 		
 		shareItem = LinkFactory.createButton("share.item", mainVC, this);
 		copyItem = LinkFactory.createButton("copy", mainVC, this);
-		deleteItem = LinkFactory.createButton("delete.item", mainVC, this);
-		deleteItem.setVisible(canEdit);
+		if(deletable) {
+			deleteItem = LinkFactory.createButton("delete.item", mainVC, this);
+			deleteItem.setVisible(canEdit);
+		}
 		exportItem = LinkFactory.createButton("export.item", mainVC, this);
 		
 		mainVC.put("type_specifics", previewCtrl.getInitialComponent());
@@ -179,6 +181,7 @@ public class QuestionItemDetailsController extends BasicController implements St
 				if(groups.size() > 0) {
 					QuestionItem item = (QuestionItem)((SelectBusinessGroupController)source).getUserObject();
 					doShareItems(ureq, item, groups);
+					metadatasCtrl.updateShares();
 				}
 			}
 			cmc.deactivate();
diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionItemsSource.java b/src/main/java/org/olat/modules/qpool/ui/QuestionItemsSource.java
index 99166952cf4..e263c503387 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionItemsSource.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionItemsSource.java
@@ -44,6 +44,8 @@ public interface QuestionItemsSource {
 	
 	public boolean isRemoveEnabled();
 	
+	public boolean isDeleteEnabled();
+	
 	public void removeFromSource(List<QuestionItemShort> items);
 	
 	public int getNumOfItems();
diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
index f01f7713d2d..f49168663de 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
@@ -127,7 +127,9 @@ public class QuestionListController extends AbstractItemListController implement
 		copyItem = uifactory.addFormLink("copy", formLayout, Link.BUTTON);
 		importItem = uifactory.addFormLink("import.item", formLayout, Link.BUTTON);
 		authorItem = uifactory.addFormLink("author.item", formLayout, Link.BUTTON);
-		deleteItem = uifactory.addFormLink("delete.item", formLayout, Link.BUTTON);
+		if(getSource().isDeleteEnabled()) {
+			deleteItem = uifactory.addFormLink("delete.item", formLayout, Link.BUTTON);
+		}
 		bulkChange = uifactory.addFormLink("bulk.change", formLayout, Link.BUTTON);
 	}
 
@@ -666,7 +668,7 @@ public class QuestionListController extends AbstractItemListController implement
 		removeAsListenerAndDispose(currentDetailsCtrl);
 		removeAsListenerAndDispose(currentMainDetailsCtrl);
 		
-		currentDetailsCtrl = new QuestionItemDetailsController(ureq, getWindowControl(), item, editable);
+		currentDetailsCtrl = new QuestionItemDetailsController(ureq, getWindowControl(), item, editable, getSource().isDeleteEnabled());
 		currentDetailsCtrl.setStackedController(stackPanel);
 		listenTo(currentDetailsCtrl);
 		currentMainDetailsCtrl = new LayoutMain3ColsController(ureq, getWindowControl(), currentDetailsCtrl);
diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionPoolMainEditorController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionPoolMainEditorController.java
index bd734c919ed..3c7614ddd5c 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionPoolMainEditorController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionPoolMainEditorController.java
@@ -350,6 +350,7 @@ public class QuestionPoolMainEditorController extends BasicController implements
 	private void doSelectMyQuestions(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
 		DefaultItemsSource source = new DefaultItemsSource(getIdentity(), ureq.getUserSession().getRoles(), "My"); 
 		source.getDefaultParams().setAuthor(getIdentity());
+		source.setDeleteEnabled(true);
 		if(myQuestionsCtrl == null) {
 			WindowControl swControl = addToHistory(ureq, OresHelper.createOLATResourceableType("My"), null);
 			myQuestionsCtrl = new QuestionsController(ureq, swControl, source, "my");
diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionsController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionsController.java
index cfd47305a6b..814a3997199 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionsController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionsController.java
@@ -91,8 +91,10 @@ public class QuestionsController extends BasicController implements Activateable
 		mainVC.put("preview", previewCtrl.getInitialComponent());
 		mainVC.contextPut("tableId", listCtrl.getTableFormDispatchId());
 		
-		deleteItem = LinkFactory.createButton("delete.item", mainVC, this);
-		deleteItem.setEnabled(false);
+		if(source.isDeleteEnabled()) {
+			deleteItem = LinkFactory.createButton("delete.item", mainVC, this);
+			deleteItem.setEnabled(false);
+		}
 		selectItem = LinkFactory.createButton("select.item", mainVC, this);
 		selectItem.setEnabled(false);
 
@@ -199,13 +201,15 @@ public class QuestionsController extends BasicController implements Activateable
 	}
 	
 	private void doUpdateDetails(UserRequest ureq, QuestionItemView itemView) {
-		deleteItem.setVisible(itemView.isEditable());
+		if(deleteItem != null) {
+			deleteItem.setVisible(itemView.isEditable());
+			deleteItem.setEnabled(true);
+		}
 		QuestionItem item = qpoolService.loadItemById(itemView.getKey());
 		detailsCtrl.updateItem(item, itemView.isEditable());
 		previewCtrl.updateItem(ureq, item);
 		
 		selectItem.setEnabled(true);
-		deleteItem.setEnabled(true);
 	}
 	
 	private void doDelete(UserRequest ureq, QuestionItemShort item) {
diff --git a/src/main/java/org/olat/modules/qpool/ui/_content/item_details.html b/src/main/java/org/olat/modules/qpool/ui/_content/item_details.html
index a78c63878c9..80776906c29 100644
--- a/src/main/java/org/olat/modules/qpool/ui/_content/item_details.html
+++ b/src/main/java/org/olat/modules/qpool/ui/_content/item_details.html
@@ -13,7 +13,9 @@ $r.render("metadatas")
 		$r.render("export.item")
 		$r.render("share.item")
 		$r.render("copy")
-		$r.render("delete.item")
+		#if($r.available("delete.item"))
+			$r.render("delete.item")
+		#end
 	</div>
 </div>
 $r.render("comments")
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/qpool/ui/_content/items.html b/src/main/java/org/olat/modules/qpool/ui/_content/items.html
index a0752c58cd1..49f6794ac9c 100644
--- a/src/main/java/org/olat/modules/qpool/ui/_content/items.html
+++ b/src/main/java/org/olat/modules/qpool/ui/_content/items.html
@@ -14,7 +14,9 @@
 <div id="qbuttons" class="b_clearfix o_qpool_button_bar_box">
 	<div class="o_qpool_button_bar">
 		$r.render("select.item")
-		$r.render("delete.item")
+		#if($r.available("delete.item"))
+			$r.render("delete.item")
+		#end
 	</div>
 </div>
 <script type="text/javascript">
diff --git a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties
index 1e9ef91e81d..4eea335a393 100644
--- a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties
@@ -7,8 +7,8 @@ remove=-
 topnav.qpool=Q-Pool
 topnav.qpool.alt=Question pools
 create.collection.description=Geben Sie zu Ihrer Liste einen Namen.
-bulk.change=Metadaten ändern
-bulk.change.description=Hier k\u00F6nnen Sie in 1 Schritt mehrere Attributen von mehreren Fragen ändern.
+bulk.change=Metadaten \u00E4ndern
+bulk.change.description=Hier k\u00F6nnen Sie in 1 Schritt mehrere Attributen von mehreren Fragen \u00E4ndern.
 collection.name=Name
 collection.creationDate=Erstellt am
 copy=Kopieren
@@ -17,8 +17,8 @@ delete.item=L\u00F6schen
 delete.collection=Liste l\u00F6schen
 details=Detailansicht
 rename.collection=Liste umbenennen
-next=Weiter
-previous=Vorherig
+next=N\u00E4chste
+previous=Vorherige
 confirm.delete=Wollen Sie wirklich diese Frage l\u00F6schen? Sie wird von allen Gruppen, allen Pools und allen Listen gel\u00F6scht.
 confirm.delete.source=Wollen Sie wirklich diese Liste l\u00F6schen?
 confirm.unshare=Wollen Sie wirklich diese Frage von "{0}" entfernen?
@@ -27,10 +27,10 @@ menu.admin=Administration
 menu.admin.alt=Administration
 menu.admin.studyfields=Fachbereich
 menu.admin.studyfields.alt=Fachbereich
-menu.admin.types=Typ
-menu.admin.types.alt=Typ
-menu.admin.levels=Level
-menu.admin.levels.alt=Level
+menu.admin.types=Fragetyp
+menu.admin.types.alt=Fragetyp
+menu.admin.levels=Stufe
+menu.admin.levels.alt=Stufe
 menu.admin.licenses=Lizenz
 menu.admin.licenses.alt=Lizenz
 menu.database=Fragendatenbank
@@ -72,7 +72,7 @@ question.difficulty=Itemschwierigkeit
 question.difficulty.example=Wert zwischen 0.0 und 1.0, zum Beispiel 0.3
 question.stdevDifficulty=Standardabweichung Itemschwierigkeit
 question.stdevDifficulty.example=$\:question.difficulty.example
-question.differentiation=Trennschärfe
+question.differentiation=Trennsch\u00E4rfe
 question.differentiation.example=Wert zwischen -1.0 und 1.0, zum Beispiel 0.1
 question.numOfAnswerAlternatives=Anzahl Antwortalternativen
 question.usage=Verwendung in Tests
@@ -116,12 +116,12 @@ item.copied={0} Frage wurde kopiert.
 pool.key=ID
 pool.name=Name
 pool.public=\u00D6ffentlich
-pool.owners=Owners
+pool.owners=Besitzer
 create.pool=Pool erstellen
 delete.pool=Pool l\u00F6schen
 delete.pool.confirm=Wollen Sie wirklich diesen Pool "{0}" l\u00F6schen?
 edit.pool=Pool editieren
-error.select.one=Sie müssen mindestens eine Frage wählen.
+error.select.one=Sie müssen mindestens eine Frage w\u00E4hlen.
 inWork=In Bearbeitung
 inReview=In Review
 used=Verwendet
@@ -138,8 +138,6 @@ item.type.kprim=KPrim
 item.type.essay=Essay
 item.type.unkown=Unbekannt
 author.item=Autorenrechte
-author.choose.title=Autoren auswählen
-author.confirm.title=Bestätigen
 share.item=Freigeben
 unshare.item=Entfernen
 share.pool=Zu Pool freigeben
diff --git a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties
index bad4a20f8a1..a868b0d514e 100644
--- a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties
@@ -75,7 +75,7 @@ question.stdevDifficulty.example=$\:question.difficulty.example
 question.differentiation=Differentiation
 question.differentiation.example=Value between -1.0 and 1.0. Example: 0.1
 question.numOfAnswerAlternatives=Number of alternative responses
-question.usage=Usage in tests
+question.usage=Used in tests
 question.assessmentType=Test type
 question.assessmentType.summative=Summative
 question.assessmentType.formative=Formative
@@ -127,7 +127,7 @@ inWork=In work
 inReview=In review
 used=Used
 shared=Shared
-mark=Bookmarked
+mark=Bookmark
 rights=Rights
 applications=Applications
 technics=Technical
@@ -137,9 +137,7 @@ item.type.sc=Single-Choice
 item.type.kprim=KPrim
 item.type.essay=Essay
 item.type.unkown=Unkown
-author.item=Autorenrechte
-author.choose.title=Autoren auswählen
-author.confirm.title=Bestätigen
+author.item=Author rights
 share.item=Share
 unshare.item=Remove
 share.pool=Share with pool
diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/PoolsAdminController.java b/src/main/java/org/olat/modules/qpool/ui/admin/PoolsAdminController.java
index 98a21d00793..d1c51e4501f 100644
--- a/src/main/java/org/olat/modules/qpool/ui/admin/PoolsAdminController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/admin/PoolsAdminController.java
@@ -35,7 +35,10 @@ import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
 import org.olat.core.gui.components.form.flexible.elements.FormLink;
 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.elements.table.BooleanCellRenderer;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.CSSIconFlexiCellRenderer;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
@@ -99,7 +102,12 @@ public class PoolsAdminController extends FormBasicController {
 		//add the table
 		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.id.i18nKey(), Cols.id.ordinal(), true, "key"));
-		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.publicPool.i18nKey(), Cols.publicPool.ordinal(), true, "name"));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, Cols.publicPool.i18nKey(), Cols.publicPool.ordinal(),
+				true, "publicPool", FlexiColumnModel.ALIGNMENT_LEFT,
+				new BooleanCellRenderer(
+						new CSSIconFlexiCellRenderer("o_public"),
+						new CSSIconFlexiCellRenderer("o_private"))
+		));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.name.i18nKey(), Cols.name.ordinal(), true, "name"));
 		columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("edit", translate("edit"), "edit-pool"));
 		columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("pool.owners", translate("pool.owners"), "owners-pool"));
@@ -220,7 +228,7 @@ public class PoolsAdminController extends FormBasicController {
 			listenTo(groupCtrl);
 	
 			cmc = new CloseableModalController(getWindowControl(), translate("close"),
-					groupCtrl.getInitialComponent(), true, translate("manage.owners"));
+					groupCtrl.getInitialComponent(), true, translate("pool.owners"));
 			cmc.activate();
 			listenTo(cmc);
 		}
diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/QEducationalContextsAdminController.java b/src/main/java/org/olat/modules/qpool/ui/admin/QEducationalContextsAdminController.java
index d3c1491a58b..d2b1e9fa4b1 100644
--- a/src/main/java/org/olat/modules/qpool/ui/admin/QEducationalContextsAdminController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/admin/QEducationalContextsAdminController.java
@@ -218,7 +218,7 @@ public class QEducationalContextsAdminController extends FormBasicController {
 		listenTo(editCtrl);
 		
 		cmc = new CloseableModalController(getWindowControl(), translate("close"),
-				editCtrl.getInitialComponent(), true, translate("edit.pool"));
+				editCtrl.getInitialComponent(), true, translate("create.level"));
 		cmc.activate();
 		listenTo(cmc);	
 	}
diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypeEditController.java b/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypeEditController.java
index fea6e8ce785..ab4bca387b2 100644
--- a/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypeEditController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypeEditController.java
@@ -65,7 +65,7 @@ public class QItemTypeEditController extends FormBasicController {
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		String name = itemType == null ? "" : itemType.getType();
-		nameEl = uifactory.addTextElement("type.type", "type.type", 128, name, formLayout);
+		nameEl = uifactory.addTextElement("type.type", "type.type.alt", 128, name, formLayout);
 
 		FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
 		buttonsCont.setRootForm(mainForm);
diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypesAdminController.java b/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypesAdminController.java
index 8eb067cd70a..4206a2b0b54 100644
--- a/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypesAdminController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypesAdminController.java
@@ -219,7 +219,7 @@ public class QItemTypesAdminController extends FormBasicController {
 		listenTo(editCtrl);
 		
 		cmc = new CloseableModalController(getWindowControl(), translate("close"),
-				editCtrl.getInitialComponent(), true, translate("edit.pool"));
+				editCtrl.getInitialComponent(), true, translate("create.type"));
 		cmc.activate();
 		listenTo(cmc);	
 	}
diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java b/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java
index 7a9c696bcc9..ef181f33c09 100644
--- a/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java
@@ -176,7 +176,7 @@ public class QLicensesAdminController extends FormBasicController {
 		listenTo(editCtrl);
 		
 		cmc = new CloseableModalController(getWindowControl(), translate("close"),
-				editCtrl.getInitialComponent(), true, translate("edit.pool"));
+				editCtrl.getInitialComponent(), true, translate("create.license"));
 		cmc.activate();
 		listenTo(cmc);	
 	}
diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_de.properties
index 41b56645f6a..262824aaf9a 100644
--- a/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_de.properties
@@ -1,24 +1,25 @@
 #Mon Mar 02 09:54:04 CET 2009
 level.key=ID
-level.level=Level
-level.translation=Ubersetzung
+level.level=Stufe
+level.translation=\u00DCbersetzung
 type.key=ID
 type.type=Typ
-type.translation=Ubersetzung
+type.type.alt=Fragetyp
+type.translation=\u00DCbersetzung
 license.id=ID
 license.key=Lizenz
 delete.type=Löschen
 delete.type.confirm=Wollen Sie wirklich dieser Typ löschen?
 delete.level=Löschen
-delete.level.confirm=Wollen Sie wirklich dieser Level löschen?
+delete.level.confirm=Wollen Sie wirklich dieser Stufe löschen?
 delete.license=Löschen
 delete.license.confirm=Wollen Sie wirklich dieser Lizenz löschen?
-create.level=Level erstellen
+create.level=Stufe erstellen
 create.license=Lizenz erstellen
-create.type=Typ erstellen
+create.type=Fragetyp erstellen
 add.taxonomyLevel=Fachbereich erstellen
 edit.taxonomyLevel=Fachbereich bearbeiten
 educational.context.deleted=Fachbereich wurde erfolgreich gelöscht
 educational.context.notdeleted=Fachbereich wurde nicht gelöscht, probably in use
-item.type.deleted=Typ wurde erfolgreich gelöscht
-item.type.notdeleted=Typ wurde nicht gelöscht, probably in use
\ No newline at end of file
+item.type.deleted=Fragetyp wurde erfolgreich gelöscht
+item.type.notdeleted=Fragetyp wurde nicht gelöscht, probably in use
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/qpool/ui/datasource/CollectionOfItemsSource.java b/src/main/java/org/olat/modules/qpool/ui/datasource/CollectionOfItemsSource.java
index a0238a783c4..6d8a155b801 100644
--- a/src/main/java/org/olat/modules/qpool/ui/datasource/CollectionOfItemsSource.java
+++ b/src/main/java/org/olat/modules/qpool/ui/datasource/CollectionOfItemsSource.java
@@ -76,6 +76,11 @@ public class CollectionOfItemsSource implements QuestionItemsSource {
 		return true;
 	}
 
+	@Override
+	public boolean isDeleteEnabled() {
+		return false;
+	}
+
 	@Override
 	public void removeFromSource(List<QuestionItemShort> items) {
 		qpoolService.removeItemsFromCollection(items, collection);
diff --git a/src/main/java/org/olat/modules/qpool/ui/datasource/DefaultItemsSource.java b/src/main/java/org/olat/modules/qpool/ui/datasource/DefaultItemsSource.java
index 40d8cfa8935..2fe902bce88 100644
--- a/src/main/java/org/olat/modules/qpool/ui/datasource/DefaultItemsSource.java
+++ b/src/main/java/org/olat/modules/qpool/ui/datasource/DefaultItemsSource.java
@@ -45,6 +45,7 @@ import org.olat.modules.qpool.ui.QuestionItemsSource;
 public class DefaultItemsSource implements QuestionItemsSource {
 
 	private boolean removeEnabled = false;
+	private boolean deleteEnabled = false;
 	private final String name;
 	private final QPoolService qpoolService;
 	private final SearchQuestionItemParams defaultParams;
@@ -86,6 +87,15 @@ public class DefaultItemsSource implements QuestionItemsSource {
 		this.removeEnabled = removeEnabled;
 	}
 
+	@Override
+	public boolean isDeleteEnabled() {
+		return deleteEnabled;
+	}
+
+	public void setDeleteEnabled(boolean deleteEnabled) {
+		this.deleteEnabled = deleteEnabled;
+	}
+
 	@Override
 	public void removeFromSource(List<QuestionItemShort> items) {
 		//
diff --git a/src/main/java/org/olat/modules/qpool/ui/datasource/SharedItemsSource.java b/src/main/java/org/olat/modules/qpool/ui/datasource/SharedItemsSource.java
index ffe73ecc5d2..b665bb66b00 100644
--- a/src/main/java/org/olat/modules/qpool/ui/datasource/SharedItemsSource.java
+++ b/src/main/java/org/olat/modules/qpool/ui/datasource/SharedItemsSource.java
@@ -77,6 +77,11 @@ public class SharedItemsSource implements QuestionItemsSource {
 		return roles.isOLATAdmin() || roles.isPoolAdmin() || admin;
 	}
 
+	@Override
+	public boolean isDeleteEnabled() {
+		return false;
+	}
+
 	@Override
 	public void removeFromSource(List<QuestionItemShort> items) {
 		qpoolService.removeItemsFromResource(items, resource);
diff --git a/src/main/java/org/olat/modules/qpool/ui/metadata/MetadatasController.java b/src/main/java/org/olat/modules/qpool/ui/metadata/MetadatasController.java
index 810d1122e97..c085d93f36f 100644
--- a/src/main/java/org/olat/modules/qpool/ui/metadata/MetadatasController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/metadata/MetadatasController.java
@@ -236,6 +236,10 @@ public class MetadatasController extends BasicController {
 		mainVC.put("details_rights", rightsCtrl.getInitialComponent());
 	}
 	
+	public void updateShares() {
+		sharingCtrl.setItem(getItem());
+	}
+	
 	public QuestionItem updateVersionNumber() {
 		if(item instanceof QuestionItemImpl && StringHelper.containsNonWhitespace(item.getItemVersion())) {
 			String version = item.getItemVersion();
diff --git a/src/main/java/org/olat/modules/qpool/ui/metadata/SharingController.java b/src/main/java/org/olat/modules/qpool/ui/metadata/SharingController.java
index 494938d3a67..f3df3d265cd 100644
--- a/src/main/java/org/olat/modules/qpool/ui/metadata/SharingController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/metadata/SharingController.java
@@ -84,12 +84,14 @@ public class SharingController extends FormBasicController {
 		poolInfosColumnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel("pool.name", 1));
 		poolInfosModel = new PoolInfosDataModel(poolInfosColumnsModel);
 		poolInfosTable = uifactory.addTableElement(ureq, getWindowControl(), "pools", poolInfosModel, getTranslator(), formLayout);
+		poolInfosTable.setCustomizeColumns(false);
 		
 		//list of authors
 		FlexiTableColumnModel authorsColumnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
 		authorsColumnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel("sharing.author.name", 0));
 		authorsModel = new AuthorDataModel(authorsColumnsModel);
 		authorsTable = uifactory.addTableElement(ureq, getWindowControl(), "authors", authorsModel, getTranslator(), formLayout);
+		authorsTable.setCustomizeColumns(false);
 
 		//list of groups
 		FlexiTableColumnModel sharesColumnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
@@ -101,6 +103,7 @@ public class SharingController extends FormBasicController {
 		sharesColumnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel("pool.name", 1));
 		sharesModel = new SharesDataModel(poolInfosColumnsModel);
 		sharesTable = uifactory.addTableElement(ureq, getWindowControl(), "shares", sharesModel, getTranslator(), formLayout);
+		sharesTable.setCustomizeColumns(false);
 	}
 	
 	@Override
-- 
GitLab