diff --git a/src/main/java/de/bps/course/nodes/vc/_spring/vcContext.xml b/src/main/java/de/bps/course/nodes/vc/_spring/vcContext.xml index 21fff6194513f5e0d5be6a0105d5b23ec793494c..d21ccb56525d09c8aafb759543e0550731bdc56a 100644 --- a/src/main/java/de/bps/course/nodes/vc/_spring/vcContext.xml +++ b/src/main/java/de/bps/course/nodes/vc/_spring/vcContext.xml @@ -26,14 +26,14 @@ <!-- Definition of the providers --> <bean id="wimbaProvider" class="de.bps.course.nodes.vc.provider.wimba.WimbaClassroomProvider"> - <property name="enabled" value="${vc.winba.enabled}" /> + <property name="enabled" value="${vc.wimba.enabled}" /> <property name="providerId" value="wimba" /> <property name="displayName" value="Wimba Classroom" /> - <property name="protocol" value="${vc.winba.protocol}" /> - <property name="port" value="${vc.winba.port}" /> - <property name="baseUrl" value="${vc.winba.baseurl}" /> - <property name="adminLogin" value="${vc.winba.adminlogin}" /> - <property name="adminPassword" value="${vc.winba.adminpassword}" /> + <property name="protocol" value="${vc.wimba.protocol}" /> + <property name="port" value="${vc.wimba.port}" /> + <property name="baseUrl" value="${vc.wimba.baseurl}" /> + <property name="adminLogin" value="${vc.wimba.adminlogin}" /> + <property name="adminPassword" value="${vc.wimba.adminpassword}" /> <!-- Options --> <property name="defaultConfig"> <ref bean="wimbaDefaultConfig" /> diff --git a/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaClassroomConfiguration.java b/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaClassroomConfiguration.java index 50f9191694bf512996db08c61181bae9f8121b56..8113572e29f54ef3aeedb54ac004a91b74852ddb 100644 --- a/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaClassroomConfiguration.java +++ b/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaClassroomConfiguration.java @@ -63,6 +63,8 @@ public class WimbaClassroomConfiguration extends DefaultVCConfiguration implemen private boolean powerPointImportEnabled; /** enable guest access */ private boolean guestAccessAllowed; + /** enable registered users access */ + private boolean regUsersAccessAllowed; /* be compatible with old configuration versions */ @SuppressWarnings("unused") private transient boolean chatEnabled; @@ -116,6 +118,10 @@ public class WimbaClassroomConfiguration extends DefaultVCConfiguration implemen return guestAccessAllowed; } + public boolean isRegUsersAccessAllowed() { + return regUsersAccessAllowed; + } + public void setToolsToStudentsEnabled(boolean toolsToStudentsEnabled) { this.toolsToStudentsEnabled = toolsToStudentsEnabled; } @@ -164,6 +170,10 @@ public class WimbaClassroomConfiguration extends DefaultVCConfiguration implemen this.guestAccessAllowed = guestAccessAllowed; } + public void setRegUsersAccessAllowed(boolean regUsersAccessAllowed) { + this.regUsersAccessAllowed = regUsersAccessAllowed; + } + public void setStudentsChatAllowed(boolean studentsChatAllowed) { this.studentsChatAllowed = studentsChatAllowed; } diff --git a/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaClassroomProvider.java b/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaClassroomProvider.java index 09003b15a52cb781876d51057ad38871e4ebcd76..1ad6440b5bc02bb8088d0c4c74d95e9146760da7 100644 --- a/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaClassroomProvider.java +++ b/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaClassroomProvider.java @@ -159,7 +159,8 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { // set preview mode because this setting has no effect on creation if(success) { success = setPreviewMode(roomId, false, false); - updateRights("Guest", roomId, "Student", false); + updateRights(null, roomId, "Student", true, false); + updateGroupRights(null, roomId, "Student", "RegisteredUser", true); } return success; } @@ -207,10 +208,10 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { if(!success) handleError(response.getStatus(), null); if(wc.isGuestAccessAllowed()) { - updateRights("Guest", roomId, "Student", false); + updateRights(null, roomId, "Student", true, false); } else if(function.equals("modifyClass")) { // only delete guest access if this is an already existing meeting - updateRights("Guest", roomId, "Student", true); + updateRights(null, roomId, "Student", true, true); } return success; @@ -248,7 +249,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { try { url = uri.toURL(); } catch (MalformedURLException e) { - logWarn("Cannot create access URL to Wimba Classroom meeting for id \"" + PREFIX + roomId + "\" and user \"" + identity.getName() + "\"", e); + logWarn("Cannot create access URL to Wimba Classroom meeting for id \"" + PREFIX + roomId + "\" and user \"" + identity.getName() + "\" ("+identity.getKey()+")", e); } return url; @@ -291,8 +292,8 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { Map<String, String> parameters = new HashMap<String, String>(); parameters.put("function", "getAuthToken"); - parameters.put("target", PREFIX + identity.getName()); - parameters.put("nickname", identity.getName()); + parameters.put("target", PREFIX + identity.getKey()); + parameters.put("nickname", identity.getUser().getProperty(UserConstants.FIRSTNAME, null).replaceAll("\\W", "_")+"_"+identity.getUser().getProperty(UserConstants.LASTNAME, null).replaceAll("\\W", "_")); String raw = sendRequest(parameters); WimbaResponse response = getResponseDocument(raw); boolean success = evaluateOk(response); @@ -337,7 +338,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { // create login if necessary if(!exists) success = createLogin(identity); // update access rights - if(exists | success) success = updateRights(identity.getName(), roomId, "Instructor", false); + if(exists | success) success = updateRights(identity, roomId, "Instructor", false, false); return success; } @@ -352,16 +353,26 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { // create login if necessary if(!exists) success = createLogin(identity); // update access rights - if(exists | success) success = updateRights(identity.getName(), roomId, "Student", false); + if(exists | success) success = updateRights(identity, roomId, "Student", false, false); return success; } - private boolean updateRights(String username, String roomId, String role, boolean delete) { + /** + * + * @param identity + * @param roomId + * @param role + * @param isGuest + * @param delete + * @return + */ + private boolean updateRights(Identity identity, String roomId, String role, boolean isGuest, boolean delete) { + if (identity==null && !isGuest) return false; Map<String, String> parameters = new HashMap<String, String>(); parameters.put("function", delete ? "deleteRole" : "createRole"); parameters.put("target", PREFIX + roomId); - parameters.put("user_id", username.equals("Guest") ? "Guest" : PREFIX + username); + parameters.put("user_id", isGuest ? "Guest" : PREFIX + identity.getKey()); parameters.put("role_id", role); String raw = sendRequest(parameters); WimbaResponse response = getResponseDocument(raw); @@ -370,10 +381,34 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { return success; } + /** + * + * @param identity + * @param roomId + * @param role + * @param group_id + * @param delete + * @return + */ + private boolean updateGroupRights(Identity identity, String roomId, String role, String group_id, boolean delete) { + Map<String, String> parameters = new HashMap<String, String>(); + parameters.put("function", delete ? "deleteRole" : "createRole"); + parameters.put("target", PREFIX + roomId); + parameters.put("group_id", group_id); + parameters.put("role_id", role); + if (identity != null) + parameters.put("user_id", PREFIX + identity.getKey()); + String raw = sendRequest(parameters); + WimbaResponse response = getResponseDocument(raw); + boolean success = evaluateOk(response); + + return success; + } + private boolean createLogin(Identity identity) { Map<String, String> parameters = new HashMap<String, String>(); parameters.put("function", "createUser"); - parameters.put("target", PREFIX + identity.getName()); + parameters.put("target", PREFIX + identity.getKey()); parameters.put("password_type", "P");// specified password, see Wimba Classroom 6.0 API Guide, page 8 parameters.put("password", Encoder.encrypt(identity.getName() + "@" + Settings.getApplicationName())); parameters.put("first_name", identity.getUser().getProperty(UserConstants.FIRSTNAME, null)); @@ -390,7 +425,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { parameters.put("function", "listUser"); parameters.put("attribute", "user_id"); parameters.put("filter01", "user_id"); - parameters.put("filter01value", PREFIX + identity.getName()); + parameters.put("filter01value", PREFIX + identity.getKey()); String raw = sendRequest(parameters); WimbaResponse response = getResponseDocument(raw); boolean success = evaluateOk(response); @@ -492,7 +527,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { try { url = uri.toURL(); } catch (MalformedURLException e) { - logWarn("Cannot create access URL to Wimba Classroom meeting for id \"" + recordingId + "\" and user \"" + identity.getName() + "\"", e); + logWarn("Cannot create access URL to Wimba Classroom meeting for id \"" + recordingId + "\" and user \"" + identity.getName() + "\" ("+identity.getKey()+")", e); } return url; diff --git a/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java b/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java index fb2993e32ba1a8560002aaaa12d18fd37db113cf..303559af35522804cf755727fd7d15ff23bb8064 100644 --- a/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java +++ b/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java @@ -297,17 +297,25 @@ public class WimbaDisplayController extends BasicController { } private void openWimbaUrl(UserRequest ureq, String target) { - boolean success = wimba.createModerator(ureq.getIdentity(), roomId); - if(success) { - wimba.login(ureq.getIdentity(), null); - String url = wimba.createServiceUrl(target, roomId); - RedirectMediaResource rmr = new RedirectMediaResource(url); - ureq.getDispatchResult().setResultingMediaResource(rmr); - } else { - // could not create moderator or update the rights - getWindowControl().setError(translate("error.update.rights")); - return; - } + boolean success = false; + if (target.equals(COMMAND_OPEN_WIZARD)) { + String url = wimba.createServiceUrl(target, null); + RedirectMediaResource rmr = new RedirectMediaResource(url); + ureq.getDispatchResult().setResultingMediaResource(rmr); + } + else { + success = wimba.createModerator(ureq.getIdentity(), roomId); + if(success) { + wimba.login(ureq.getIdentity(), null); + String url = wimba.createServiceUrl(target, roomId); + RedirectMediaResource rmr = new RedirectMediaResource(url); + ureq.getDispatchResult().setResultingMediaResource(rmr); + } else { + // could not create moderator or update the rights + getWindowControl().setError(translate("error.update.rights")); + return; + } + } } private void joinMeeting(UserRequest ureq, boolean guest) { diff --git a/src/main/java/de/bps/course/nodes/vc/provider/wimba/_spring/wimbaContext.xml b/src/main/java/de/bps/course/nodes/vc/provider/wimba/_spring/wimbaContext.xml index 38168a031f2172ada6ff2aab7ec443442ce6d30c..621c9d4878ae7c7475f8dcca0ca51fec59b03145 100644 --- a/src/main/java/de/bps/course/nodes/vc/provider/wimba/_spring/wimbaContext.xml +++ b/src/main/java/de/bps/course/nodes/vc/provider/wimba/_spring/wimbaContext.xml @@ -24,7 +24,8 @@ <property name="appshareEnabled" value="true" /> <property name="powerPointImportEnabled" value="true" /> <property name="guestAccessAllowed" value="false" /> - <property name="studentsChatAllowed" value="true" /> + <property name="regUsersAccessAllowed" value="false" /> + <property name="studentsChatAllowed" value="true" /> <property name="studentsPrivateChatAllowed" value="true" /> </bean> diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties index ded06db47e53536c624fb533c67866359d1992db..1543bc0c989be812d5c91a2319f13a5918f5148a 100644 --- a/src/main/resources/serviceconfig/olat.properties +++ b/src/main/resources/serviceconfig/olat.properties @@ -717,12 +717,12 @@ vc.adobe.usertype=user vc.adobe.usertype.values=guest,user #Winba -vc.winba.enabled=false -vc.winba.protocol=http -vc.winba.port=80 -vc.winba.baseurl=localhost -vc.winba.adminlogin=admin -vc.winba.adminpassword=password +vc.wimba.enabled=false +vc.wimba.protocol=http +vc.wimba.port=80 +vc.wimba.baseurl=localhost +vc.wimba.adminlogin=admin +vc.wimba.adminpassword=password #Vitero vc.vitero.enabled=false