From 1dd4e2fb691594c2dd225e6ce55383c35f9ad0f7 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Wed, 18 Sep 2019 19:46:18 +0200
Subject: [PATCH] OO-4251: add organisation to the curriculum list

---
 .../org/olat/basesecurity/OrganisationService.java    |  6 ++++++
 .../olat/basesecurity/manager/OrganisationDAO.java    | 10 ++++++++++
 .../basesecurity/manager/OrganisationServiceImpl.java |  6 ++++++
 .../ui/CurriculumListManagerController.java           | 11 +++++++++++
 .../curriculum/ui/CurriculumManagerDataModel.java     |  4 +++-
 .../org/olat/modules/curriculum/ui/CurriculumRow.java |  7 +++++++
 .../curriculum/ui/_i18n/LocalStrings_de.properties    |  1 +
 .../curriculum/ui/_i18n/LocalStrings_en.properties    |  1 +
 8 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/olat/basesecurity/OrganisationService.java b/src/main/java/org/olat/basesecurity/OrganisationService.java
index 6eda45de1d3..065edd64e7d 100644
--- a/src/main/java/org/olat/basesecurity/OrganisationService.java
+++ b/src/main/java/org/olat/basesecurity/OrganisationService.java
@@ -93,6 +93,12 @@ public interface OrganisationService {
 	 */
 	public List<Organisation> getOrganisations();
 	
+	/**
+	 * 
+	 * @return true if an other organisation as the default is available
+	 */
+	public boolean isMultiOrganisations();
+	
 	/**
 	 * Search the organisations by status.
 	 * 
diff --git a/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java b/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java
index 45b9539a2ed..bd1354f3f5b 100644
--- a/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java
+++ b/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java
@@ -183,6 +183,16 @@ public class OrganisationDAO {
 				.getResultList();
 	}
 	
+	public long count(OrganisationStatus[] status) {
+		QueryBuilder sb = new QueryBuilder(256);
+		sb.append("select count(org.key) from organisation org")
+		  .append(" where org.status ").in(status);
+		List<Long> count = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), Long.class)
+				.getResultList();
+		return count == null || count.isEmpty() || count.get(0) == null ? 0 : count.get(0).longValue();
+	}
+	
 	public List<OrganisationMember> getMembers(OrganisationRef organisation, SearchMemberParameters params) {
 		QueryBuilder sb = new QueryBuilder(256);
 		sb.append("select ident, membership.role, membership.inheritanceModeString from organisation org")
diff --git a/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java b/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java
index dafcd20fc89..30ccb725ae2 100644
--- a/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java
+++ b/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java
@@ -292,6 +292,12 @@ public class OrganisationServiceImpl implements OrganisationService, Initializin
 		return organisationDao.find(OrganisationStatus.notDelete());
 	}
 	
+	@Override
+	public boolean isMultiOrganisations() {
+		// TODO Auto-generated method stub
+		return  organisationDao.count(OrganisationStatus.notDelete()) > 1;
+	}
+
 	@Override
 	public List<Organisation> getOrganisations(OrganisationStatus[] status) {
 		return organisationDao.find(status);
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java
index de294f91f37..f4c4416bdc6 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java
@@ -25,6 +25,8 @@ import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import org.olat.basesecurity.OrganisationModule;
+import org.olat.basesecurity.OrganisationService;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.form.flexible.FormItem;
@@ -99,10 +101,15 @@ public class CurriculumListManagerController extends FormBasicController impleme
 	
 	private int counter = 0;
 	private final Roles roles;
+	private final boolean isMultiOrganisations;
 	private final CurriculumSecurityCallback secCallback;
 
 	@Autowired
 	private CurriculumService curriculumService;
+	@Autowired
+	private OrganisationModule organisationModule;
+	@Autowired
+	private OrganisationService organisationService;
 	
 	public CurriculumListManagerController(UserRequest ureq, WindowControl wControl, TooledStackedPanel toolbarPanel,
 			CurriculumSecurityCallback secCallback) {
@@ -111,6 +118,7 @@ public class CurriculumListManagerController extends FormBasicController impleme
 		this.secCallback = secCallback;
 		roles = ureq.getUserSession().getRoles();
 		toolbarPanel.addListener(this);
+		isMultiOrganisations = organisationService.isMultiOrganisations();
 
 		initForm(ureq);
 		loadModel(null, true);
@@ -136,6 +144,9 @@ public class CurriculumListManagerController extends FormBasicController impleme
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CurriculumCols.displayName, "select"));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CurriculumCols.identifier, "select"));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, CurriculumCols.externalId, "select"));
+		if(organisationModule.isEnabled()) {
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(isMultiOrganisations, CurriculumCols.organisation));
+		}
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CurriculumCols.numOfElements));
 		DefaultFlexiColumnModel editCol = new DefaultFlexiColumnModel("edit.icon", CurriculumCols.edit.ordinal(), "edit",
 				new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("edit"), "edit"),
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumManagerDataModel.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumManagerDataModel.java
index 4c73aab75dd..f37ade085d2 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumManagerDataModel.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumManagerDataModel.java
@@ -93,6 +93,7 @@ implements SortableFlexiTableDataModel<CurriculumRow>, FilterableFlexiTableModel
 			case displayName: return row.getDisplayName();
 			case identifier: return row.getIdentifier();
 			case externalId: return row.getExternalId();
+			case organisation: return row.getOrganisation();
 			case numOfElements: return row.getNumOfElements();
 			case edit: return row.canManage();
 			case tools: return row.getTools();
@@ -119,7 +120,8 @@ implements SortableFlexiTableDataModel<CurriculumRow>, FilterableFlexiTableModel
 		externalId("table.header.external.id"),
 		numOfElements("table.header.num.elements"),
 		edit("edit.icon"),
-		tools("table.header.tools");
+		tools("table.header.tools"),
+		organisation("table.header.organisation");
 		
 		private final String i18nHeaderKey;
 		
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumRow.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumRow.java
index 7ed28e85b59..c3e4334882a 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumRow.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumRow.java
@@ -80,6 +80,13 @@ public class CurriculumRow implements CurriculumRef {
 		return curriculum.getExternalId();
 	}
 	
+	public String getOrganisation() {
+		if(curriculum.getOrganisation() != null) {
+			return curriculum.getOrganisation().getDisplayName();
+		}
+		return null;
+	}
+	
 	public long getNumOfElements() {
 		return numOfElements;
 	}
diff --git a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_de.properties
index b7b74cedc0f..126d05a73cf 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_de.properties
@@ -120,6 +120,7 @@ table.header.num.of.members=Mitglieder
 table.header.num.of.participants=Teilnehmer
 table.header.num.of.coaches=Betreuer
 table.header.num.of.owners=Besitzer
+table.header.organisation=Organisation
 table.header.repository.entry.displayName=Titel der Lernressource
 table.header.repository.entry.externalRef=Identifier
 table.header.resources=Ref.
diff --git a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_en.properties
index 9c105987a2d..6ac44019df7 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_en.properties
@@ -120,6 +120,7 @@ table.header.num.of.coaches=Coaches
 table.header.num.of.members=Members
 table.header.num.of.owners=Owners
 table.header.num.of.participants=Participants
+table.header.organisation=Organisation
 table.header.repository.entry.displayName=Title of learning resource
 table.header.repository.entry.externalRef=Reference
 table.header.resources=Ref.
-- 
GitLab