From ed02fdbba00a1c353b313bb97d2ec47e722a2114 Mon Sep 17 00:00:00 2001
From: daniel <daniel.haag@uibk.ac.at>
Date: Thu, 4 Jun 2020 12:04:00 +0200
Subject: [PATCH] openolat#196: add node access type configuration to create
 course repository entry controller

---
 ...CreateCourseRepositoryEntryController.java | 39 ++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

diff --git a/src/main/java/at/ac/uibk/course/CreateCourseRepositoryEntryController.java b/src/main/java/at/ac/uibk/course/CreateCourseRepositoryEntryController.java
index f6c70a63f4a..37f8fc6d1f0 100644
--- a/src/main/java/at/ac/uibk/course/CreateCourseRepositoryEntryController.java
+++ b/src/main/java/at/ac/uibk/course/CreateCourseRepositoryEntryController.java
@@ -63,6 +63,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormEvent;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.components.form.flexible.impl.elements.FormSubmit;
 import org.olat.core.gui.components.link.Link;
+import org.olat.core.gui.components.util.KeyValues;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
@@ -88,9 +89,15 @@ import org.olat.core.util.mail.MailTemplate;
 import org.olat.core.util.mail.MailerResult;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
+import org.olat.course.condition.ConditionNodeAccessProvider;
+import org.olat.course.config.CourseConfig;
 import org.olat.course.editor.PublishProcess;
 import org.olat.course.editor.PublishSetInformations;
 import org.olat.course.editor.StatusDescription;
+import org.olat.course.learningpath.manager.LearningPathNodeAccessProvider;
+import org.olat.course.nodeaccess.NodeAccessProviderIdentifier;
+import org.olat.course.nodeaccess.NodeAccessService;
+import org.olat.course.nodeaccess.NodeAccessType;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.tree.CourseEditorTreeModel;
 import org.olat.course.tree.CourseEditorTreeNode;
@@ -131,7 +138,10 @@ public class CreateCourseRepositoryEntryController extends FormBasicController
 	private Object userObject;
 	private FlexiAutoCompleterController autocompleterC;
 	private LicenseType licenseType;
+	private SingleSelection nodeAccessEl;
 
+	@Autowired
+	private NodeAccessService nodeAccessService;
 	@Autowired
 	private RepositoryManager repositoryManager;
 	@Autowired
@@ -149,7 +159,7 @@ public class CreateCourseRepositoryEntryController extends FormBasicController
 	private String userName;
 	private Identity userIdentity;
 
-	private Boolean isAdministrativeUser = false;
+	private boolean isAdministrativeUser = false;
 
 	private MultipleSelectionElement ownerCheckBoxes;
 	private FormLayoutContainer ownerCheckBoxButtonContainer;
@@ -406,6 +416,30 @@ public class CreateCourseRepositoryEntryController extends FormBasicController
 				.addDropdownSingleselect("form.catalog.entry", formLayout, catalogKeys, catalogValues, catalogStyles);
 		catalogDropdownElement.setVisible(false);
 		
+		/************************************************************************************************
+		 * Add Node Access Type configuration form items see also:
+		 * org.olat.repository.ui.author.CreateCourseRepositoryEntryController
+		 ************************************************************************************************/
+
+		KeyValues nodeAccessKV = new KeyValues();
+		String helpText = "";
+		for (NodeAccessProviderIdentifier identifier : nodeAccessService.getNodeAccessProviderIdentifer()) {
+			String title = identifier.getDisplayName(getLocale());
+			nodeAccessKV.add(KeyValues.entry(identifier.getType(), title));
+			helpText += "<strong>" + title + "</strong><br />" + identifier.getToolTipHelpText(getLocale()) + "<br /><br />";
+		}
+		nodeAccessEl = uifactory.addRadiosVertical("cif.node.access", "cif.node.access", formLayout,
+				nodeAccessKV.keys(), nodeAccessKV.values());
+
+		nodeAccessEl.select(ConditionNodeAccessProvider.TYPE, true);
+		nodeAccessEl.addActionListener(FormEvent.ONCHANGE);
+
+		nodeAccessEl.setHelpText(helpText);
+		nodeAccessEl.setHelpUrlForManualPage("Learning path course");
+
+		// only administrative users are allowed to change this at the moment
+		nodeAccessEl.setVisible(isAdministrativeUser);
+
 		/************************************************************************************************
 		 * Add Create and Cancel Buttons
 		 ************************************************************************************************/
@@ -724,6 +758,9 @@ public class CreateCourseRepositoryEntryController extends FormBasicController
 			}
 		}
 
+		// this sets the type of the course ("learningPath"/"Condition")
+		CourseFactory.initNodeAccessType(addedEntry, NodeAccessType.of(nodeAccessEl.getSelectedKey()));
+
 		repositoryManager.setDescriptionAndName(addedEntry, displayname,
 				description, "", "", externalCourseId, "", managedFlags, null);
 
-- 
GitLab