Skip to content
Snippets Groups Projects
Commit 35ca6ca4 authored by gnaegi's avatar gnaegi
Browse files

OO-282 patch from Stephan Clemenz to fix issues in wimba virtual classroom adapter

parent de8698fb
No related branches found
No related tags found
No related merge requests found
...@@ -26,14 +26,14 @@ ...@@ -26,14 +26,14 @@
<!-- Definition of the providers --> <!-- Definition of the providers -->
<bean id="wimbaProvider" class="de.bps.course.nodes.vc.provider.wimba.WimbaClassroomProvider"> <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="providerId" value="wimba" />
<property name="displayName" value="Wimba Classroom" /> <property name="displayName" value="Wimba Classroom" />
<property name="protocol" value="${vc.winba.protocol}" /> <property name="protocol" value="${vc.wimba.protocol}" />
<property name="port" value="${vc.winba.port}" /> <property name="port" value="${vc.wimba.port}" />
<property name="baseUrl" value="${vc.winba.baseurl}" /> <property name="baseUrl" value="${vc.wimba.baseurl}" />
<property name="adminLogin" value="${vc.winba.adminlogin}" /> <property name="adminLogin" value="${vc.wimba.adminlogin}" />
<property name="adminPassword" value="${vc.winba.adminpassword}" /> <property name="adminPassword" value="${vc.wimba.adminpassword}" />
<!-- Options --> <!-- Options -->
<property name="defaultConfig"> <property name="defaultConfig">
<ref bean="wimbaDefaultConfig" /> <ref bean="wimbaDefaultConfig" />
......
...@@ -63,6 +63,8 @@ public class WimbaClassroomConfiguration extends DefaultVCConfiguration implemen ...@@ -63,6 +63,8 @@ public class WimbaClassroomConfiguration extends DefaultVCConfiguration implemen
private boolean powerPointImportEnabled; private boolean powerPointImportEnabled;
/** enable guest access */ /** enable guest access */
private boolean guestAccessAllowed; private boolean guestAccessAllowed;
/** enable registered users access */
private boolean regUsersAccessAllowed;
/* be compatible with old configuration versions */ /* be compatible with old configuration versions */
@SuppressWarnings("unused") private transient boolean chatEnabled; @SuppressWarnings("unused") private transient boolean chatEnabled;
...@@ -116,6 +118,10 @@ public class WimbaClassroomConfiguration extends DefaultVCConfiguration implemen ...@@ -116,6 +118,10 @@ public class WimbaClassroomConfiguration extends DefaultVCConfiguration implemen
return guestAccessAllowed; return guestAccessAllowed;
} }
public boolean isRegUsersAccessAllowed() {
return regUsersAccessAllowed;
}
public void setToolsToStudentsEnabled(boolean toolsToStudentsEnabled) { public void setToolsToStudentsEnabled(boolean toolsToStudentsEnabled) {
this.toolsToStudentsEnabled = toolsToStudentsEnabled; this.toolsToStudentsEnabled = toolsToStudentsEnabled;
} }
...@@ -164,6 +170,10 @@ public class WimbaClassroomConfiguration extends DefaultVCConfiguration implemen ...@@ -164,6 +170,10 @@ public class WimbaClassroomConfiguration extends DefaultVCConfiguration implemen
this.guestAccessAllowed = guestAccessAllowed; this.guestAccessAllowed = guestAccessAllowed;
} }
public void setRegUsersAccessAllowed(boolean regUsersAccessAllowed) {
this.regUsersAccessAllowed = regUsersAccessAllowed;
}
public void setStudentsChatAllowed(boolean studentsChatAllowed) { public void setStudentsChatAllowed(boolean studentsChatAllowed) {
this.studentsChatAllowed = studentsChatAllowed; this.studentsChatAllowed = studentsChatAllowed;
} }
......
...@@ -159,7 +159,8 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { ...@@ -159,7 +159,8 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider {
// set preview mode because this setting has no effect on creation // set preview mode because this setting has no effect on creation
if(success) { if(success) {
success = setPreviewMode(roomId, false, false); success = setPreviewMode(roomId, false, false);
updateRights("Guest", roomId, "Student", false); updateRights(null, roomId, "Student", true, false);
updateGroupRights(null, roomId, "Student", "RegisteredUser", true);
} }
return success; return success;
} }
...@@ -207,10 +208,10 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { ...@@ -207,10 +208,10 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider {
if(!success) handleError(response.getStatus(), null); if(!success) handleError(response.getStatus(), null);
if(wc.isGuestAccessAllowed()) { if(wc.isGuestAccessAllowed()) {
updateRights("Guest", roomId, "Student", false); updateRights(null, roomId, "Student", true, false);
} else if(function.equals("modifyClass")) { } else if(function.equals("modifyClass")) {
// only delete guest access if this is an already existing meeting // only delete guest access if this is an already existing meeting
updateRights("Guest", roomId, "Student", true); updateRights(null, roomId, "Student", true, true);
} }
return success; return success;
...@@ -248,7 +249,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { ...@@ -248,7 +249,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider {
try { try {
url = uri.toURL(); url = uri.toURL();
} catch (MalformedURLException e) { } 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; return url;
...@@ -291,8 +292,8 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { ...@@ -291,8 +292,8 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider {
Map<String, String> parameters = new HashMap<String, String>(); Map<String, String> parameters = new HashMap<String, String>();
parameters.put("function", "getAuthToken"); parameters.put("function", "getAuthToken");
parameters.put("target", PREFIX + identity.getName()); parameters.put("target", PREFIX + identity.getKey());
parameters.put("nickname", identity.getName()); parameters.put("nickname", identity.getUser().getProperty(UserConstants.FIRSTNAME, null).replaceAll("\\W", "_")+"_"+identity.getUser().getProperty(UserConstants.LASTNAME, null).replaceAll("\\W", "_"));
String raw = sendRequest(parameters); String raw = sendRequest(parameters);
WimbaResponse response = getResponseDocument(raw); WimbaResponse response = getResponseDocument(raw);
boolean success = evaluateOk(response); boolean success = evaluateOk(response);
...@@ -337,7 +338,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { ...@@ -337,7 +338,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider {
// create login if necessary // create login if necessary
if(!exists) success = createLogin(identity); if(!exists) success = createLogin(identity);
// update access rights // 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; return success;
} }
...@@ -352,16 +353,26 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { ...@@ -352,16 +353,26 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider {
// create login if necessary // create login if necessary
if(!exists) success = createLogin(identity); if(!exists) success = createLogin(identity);
// update access rights // 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; 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>(); Map<String, String> parameters = new HashMap<String, String>();
parameters.put("function", delete ? "deleteRole" : "createRole"); parameters.put("function", delete ? "deleteRole" : "createRole");
parameters.put("target", PREFIX + roomId); 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); parameters.put("role_id", role);
String raw = sendRequest(parameters); String raw = sendRequest(parameters);
WimbaResponse response = getResponseDocument(raw); WimbaResponse response = getResponseDocument(raw);
...@@ -370,10 +381,34 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { ...@@ -370,10 +381,34 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider {
return success; 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) { private boolean createLogin(Identity identity) {
Map<String, String> parameters = new HashMap<String, String>(); Map<String, String> parameters = new HashMap<String, String>();
parameters.put("function", "createUser"); 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_type", "P");// specified password, see Wimba Classroom 6.0 API Guide, page 8
parameters.put("password", Encoder.encrypt(identity.getName() + "@" + Settings.getApplicationName())); parameters.put("password", Encoder.encrypt(identity.getName() + "@" + Settings.getApplicationName()));
parameters.put("first_name", identity.getUser().getProperty(UserConstants.FIRSTNAME, null)); parameters.put("first_name", identity.getUser().getProperty(UserConstants.FIRSTNAME, null));
...@@ -390,7 +425,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { ...@@ -390,7 +425,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider {
parameters.put("function", "listUser"); parameters.put("function", "listUser");
parameters.put("attribute", "user_id"); parameters.put("attribute", "user_id");
parameters.put("filter01", "user_id"); parameters.put("filter01", "user_id");
parameters.put("filter01value", PREFIX + identity.getName()); parameters.put("filter01value", PREFIX + identity.getKey());
String raw = sendRequest(parameters); String raw = sendRequest(parameters);
WimbaResponse response = getResponseDocument(raw); WimbaResponse response = getResponseDocument(raw);
boolean success = evaluateOk(response); boolean success = evaluateOk(response);
...@@ -492,7 +527,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider { ...@@ -492,7 +527,7 @@ public class WimbaClassroomProvider extends LogDelegator implements VCProvider {
try { try {
url = uri.toURL(); url = uri.toURL();
} catch (MalformedURLException e) { } 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; return url;
......
...@@ -297,17 +297,25 @@ public class WimbaDisplayController extends BasicController { ...@@ -297,17 +297,25 @@ public class WimbaDisplayController extends BasicController {
} }
private void openWimbaUrl(UserRequest ureq, String target) { private void openWimbaUrl(UserRequest ureq, String target) {
boolean success = wimba.createModerator(ureq.getIdentity(), roomId); boolean success = false;
if(success) { if (target.equals(COMMAND_OPEN_WIZARD)) {
wimba.login(ureq.getIdentity(), null); String url = wimba.createServiceUrl(target, null);
String url = wimba.createServiceUrl(target, roomId); RedirectMediaResource rmr = new RedirectMediaResource(url);
RedirectMediaResource rmr = new RedirectMediaResource(url); ureq.getDispatchResult().setResultingMediaResource(rmr);
ureq.getDispatchResult().setResultingMediaResource(rmr); }
} else { else {
// could not create moderator or update the rights success = wimba.createModerator(ureq.getIdentity(), roomId);
getWindowControl().setError(translate("error.update.rights")); if(success) {
return; 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) { private void joinMeeting(UserRequest ureq, boolean guest) {
......
...@@ -24,7 +24,8 @@ ...@@ -24,7 +24,8 @@
<property name="appshareEnabled" value="true" /> <property name="appshareEnabled" value="true" />
<property name="powerPointImportEnabled" value="true" /> <property name="powerPointImportEnabled" value="true" />
<property name="guestAccessAllowed" value="false" /> <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" /> <property name="studentsPrivateChatAllowed" value="true" />
</bean> </bean>
......
...@@ -717,12 +717,12 @@ vc.adobe.usertype=user ...@@ -717,12 +717,12 @@ vc.adobe.usertype=user
vc.adobe.usertype.values=guest,user vc.adobe.usertype.values=guest,user
#Winba #Winba
vc.winba.enabled=false vc.wimba.enabled=false
vc.winba.protocol=http vc.wimba.protocol=http
vc.winba.port=80 vc.wimba.port=80
vc.winba.baseurl=localhost vc.wimba.baseurl=localhost
vc.winba.adminlogin=admin vc.wimba.adminlogin=admin
vc.winba.adminpassword=password vc.wimba.adminpassword=password
#Vitero #Vitero
vc.vitero.enabled=false vc.vitero.enabled=false
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment