From ef227e8ae06512beca5d389c92d45abd942ed287 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Wed, 14 Nov 2012 15:03:18 +0100 Subject: [PATCH] OO-407: differentiate authors from coaches, support error codes from OpenMeetings and more polish overall --- .../collaboration/CollaborationTools.java | 2 +- .../course/nodes/OpenMeetingsCourseNode.java | 34 ++- .../OpenMeetingsEditController.java | 2 +- .../manager/OpenMeetingsException.java | 64 ++--- .../manager/OpenMeetingsManager.java | 7 +- .../manager/OpenMeetingsManagerImpl.java | 220 ++++++++++-------- ...penMeetingsAdminRoomMembersController.java | 2 +- .../ui/OpenMeetingsRecordingController.java | 15 +- .../ui/OpenMeetingsRecordingsController.java | 12 +- .../ui/OpenMeetingsRoomEditController.java | 6 +- .../ui/OpenMeetingsRoomsDataModel.java | 15 +- .../ui/OpenMeetingsRunController.java | 83 +++++-- .../openmeetings/ui/_content/room.html | 9 + .../ui/_i18n/LocalStrings_de.properties | 60 ++--- .../ui/_i18n/LocalStrings_en.properties | 119 ++++++++++ .../ui/_i18n/LocalStrings_fr.properties | 64 +++++ .../ui/_i18n/LocalStrings_en.properties | 4 +- .../olat/repository/RepositoryEntry.hbm.xml | 4 + .../olat/repository/RepositoryManager.java | 14 ++ 19 files changed, 484 insertions(+), 252 deletions(-) create mode 100644 src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_en.properties create mode 100644 src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_fr.properties diff --git a/src/main/java/org/olat/collaboration/CollaborationTools.java b/src/main/java/org/olat/collaboration/CollaborationTools.java index 28fca5cfadd..5cbaced8b6e 100644 --- a/src/main/java/org/olat/collaboration/CollaborationTools.java +++ b/src/main/java/org/olat/collaboration/CollaborationTools.java @@ -571,7 +571,7 @@ public class CollaborationTools implements Serializable { } public Controller createOpenMeetingsController(final UserRequest ureq, WindowControl wControl, final BusinessGroup group, boolean admin) { - OpenMeetingsRunController runController = new OpenMeetingsRunController(ureq, wControl, group, null, null, null, admin); + OpenMeetingsRunController runController = new OpenMeetingsRunController(ureq, wControl, group, null, null, null, admin, admin); return runController; } diff --git a/src/main/java/org/olat/course/nodes/OpenMeetingsCourseNode.java b/src/main/java/org/olat/course/nodes/OpenMeetingsCourseNode.java index cf9c213df14..60884b5c127 100644 --- a/src/main/java/org/olat/course/nodes/OpenMeetingsCourseNode.java +++ b/src/main/java/org/olat/course/nodes/OpenMeetingsCourseNode.java @@ -27,6 +27,7 @@ import org.olat.core.gui.components.stack.StackedController; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.tabbable.TabbableController; +import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.Roles; import org.olat.core.logging.OLog; @@ -47,6 +48,8 @@ import org.olat.course.nodes.openmeetings.OpenMeetingsPeekViewController; import org.olat.course.run.navigation.NodeRunConstructionResult; import org.olat.course.run.userview.NodeEvaluation; import org.olat.course.run.userview.UserCourseEnvironment; +import org.olat.group.BusinessGroupService; +import org.olat.group.model.SearchBusinessGroupParams; import org.olat.modules.openmeetings.manager.OpenMeetingsException; import org.olat.modules.openmeetings.manager.OpenMeetingsManager; import org.olat.modules.openmeetings.ui.OpenMeetingsRoomEditController; @@ -102,28 +105,39 @@ public class OpenMeetingsCourseNode extends AbstractAccessableCourseNode { Roles roles = ureq.getUserSession().getRoles(); // check if user is moderator of the virtual classroom - boolean moderator = roles.isOLATAdmin(); - Long key = userCourseEnv.getCourseEnvironment().getCourseResourceableId(); - if (!moderator) { + boolean admin = roles.isOLATAdmin(); + boolean moderator = admin; + Long resourceId = userCourseEnv.getCourseEnvironment().getCourseResourceableId(); + + if (!admin) { + ICourse course = CourseFactory.loadCourse(resourceId); + RepositoryManager rm = RepositoryManager.getInstance(); + RepositoryEntry re = rm.lookupRepositoryEntry(course, false); if(roles.isInstitutionalResourceManager() || roles.isAuthor()) { - RepositoryManager rm = RepositoryManager.getInstance(); - ICourse course = CourseFactory.loadCourse(key); - RepositoryEntry re = rm.lookupRepositoryEntry(course, false); if (re != null) { - moderator = rm.isOwnerOfRepositoryEntry(ureq.getIdentity(), re) + admin = rm.isOwnerOfRepositoryEntry(ureq.getIdentity(), re) || rm.isInstitutionalRessourceManagerFor(re, ureq.getIdentity()); } } + moderator = admin + || rm.isIdentityInTutorSecurityGroup(ureq.getIdentity(), re.getOlatResource()) + || isCoach(re, ureq.getIdentity()); } - + // create run controller - Long resourceId = userCourseEnv.getCourseEnvironment().getCourseResourceableId(); OLATResourceable ores = OresHelper.createOLATResourceableInstance(CourseModule.class, resourceId); String courseTitle = userCourseEnv.getCourseEnvironment().getCourseTitle(); - Controller runCtr = new OpenMeetingsRunController(ureq, wControl, null, ores, getIdent(), courseTitle, moderator); + Controller runCtr = new OpenMeetingsRunController(ureq, wControl, null, ores, getIdent(), courseTitle, admin, moderator); Controller controller = TitledWrapperHelper.getWrapper(ureq, wControl, runCtr, this, "o_openmeetings_icon"); return new NodeRunConstructionResult(controller); } + + private final boolean isCoach(RepositoryEntry re, Identity identity) { + BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class); + SearchBusinessGroupParams params = new SearchBusinessGroupParams(identity, true, false); + int count = bgs.countBusinessGroups(params, re.getOlatResource()); + return count > 0; + } @Override public Controller createPeekViewRunController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, NodeEvaluation ne) { diff --git a/src/main/java/org/olat/course/nodes/openmeetings/OpenMeetingsEditController.java b/src/main/java/org/olat/course/nodes/openmeetings/OpenMeetingsEditController.java index 0dc7b5ebb33..2c13f111643 100644 --- a/src/main/java/org/olat/course/nodes/openmeetings/OpenMeetingsEditController.java +++ b/src/main/java/org/olat/course/nodes/openmeetings/OpenMeetingsEditController.java @@ -86,7 +86,7 @@ public class OpenMeetingsEditController extends ActivateableTabbableDefaultContr listenTo(editForm); editVc.put("editRooms", editForm.getInitialComponent()); } catch (OpenMeetingsException e) { - editVc.contextPut("error", e.getType().i18nKey()); + editVc.contextPut("error", e.i18nKey()); } } diff --git a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsException.java b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsException.java index 8988f8d6dca..b7bbfa93c9d 100644 --- a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsException.java +++ b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsException.java @@ -33,62 +33,26 @@ public class OpenMeetingsException extends Exception { private static final long serialVersionUID = 3260533359384969602L; public static final String SERVER_NOT_I18N_KEY = "error.notAvailable"; + public static final long SERVER_NOT_AVAILABLE = 0; + public static final long UNKOWN = -1; - private final Type type; - - public OpenMeetingsException(Type type) { - this.type = type; - } - - public OpenMeetingsException(long code) { - this.type = Type.get(code); - } - - public OpenMeetingsException(String message, Type type) { - super(message); - this.type = type; - } - - public OpenMeetingsException(String message, Exception cause, Type type) { - super(message, cause); - this.type = type; + private final long errorCode; + + public OpenMeetingsException(long errorCode) { + this.errorCode = errorCode; } - public OpenMeetingsException(Exception cause, Type type) { + public OpenMeetingsException(Exception cause, long errorCode) { super(cause); - this.type = type; + this.errorCode = errorCode; } - public Type getType() { - return type; - } - - public enum Type { - unkown("error.unkown", 0), - serverNotAvailable("error.notAvailable", 0) - - ; - - - private final String i18nKey; - private final long code; - - private Type(String i18nKey, long code) { - this.i18nKey = i18nKey; - this.code = code; - } - - public String i18nKey() { - return i18nKey; - } - - public static Type get(long code) { - for(Type t:Type.values()) { - if(t.code == code) { - return t; - } - } - return unkown; + public String i18nKey() { + if(errorCode == 0) { + return SERVER_NOT_I18N_KEY; + } else if (errorCode >= -56 && errorCode < 0) { + return "error." + errorCode; } + return "error.-1";//or unkown } } diff --git a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManager.java b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManager.java index add83f43da9..d9ab403d57c 100644 --- a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManager.java +++ b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManager.java @@ -94,14 +94,14 @@ public interface OpenMeetingsManager { * @param roomId * @throws OpenMeetingsException */ - public void openRoom(long roomId) throws OpenMeetingsException; + public OpenMeetingsRoom openRoom(OpenMeetingsRoom room) throws OpenMeetingsException; /** * Close the room * @param roomId * @throws OpenMeetingsException */ - public void closeRoom(long roomId) throws OpenMeetingsException; + public OpenMeetingsRoom closeRoom(OpenMeetingsRoom room) throws OpenMeetingsException; public boolean deleteRoom(OpenMeetingsRoom room); @@ -115,7 +115,8 @@ public interface OpenMeetingsManager { * @param sid * @return */ - public String getRecordingURL(OpenMeetingsRecording recording, String sid); + public String getRecordingURL(OpenMeetingsRecording recording) + throws OpenMeetingsException; /** * A UUID mapped to the identity is saved in a cache diff --git a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java index c4aa604aa10..487335e8fbb 100644 --- a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java +++ b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java @@ -23,7 +23,6 @@ import java.io.File; import java.io.Serializable; import java.io.StringWriter; import java.net.ConnectException; -import java.rmi.RemoteException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -47,7 +46,6 @@ import org.olat.core.util.StringHelper; import org.olat.core.util.WebappHelper; import org.olat.core.util.cache.n.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; -import org.olat.core.util.resource.OresHelper; import org.olat.core.util.xml.XStreamHelper; import org.olat.group.BusinessGroup; import org.olat.modules.openmeetings.OpenMeetingsModule; @@ -57,9 +55,10 @@ import org.olat.modules.openmeetings.model.OpenMeetingsUser; import org.olat.modules.openmeetings.model.RoomReturnInfo; import org.olat.properties.Property; import org.olat.properties.PropertyManager; +import org.olat.repository.RepositoryManager; +import org.olat.repository.model.RepositoryEntryShortImpl; import org.olat.user.DisplayPortraitManager; import org.olat.user.UserDataDeletable; -import org.openmeetings.app.conference.session.xsd.RoomClient; import org.openmeetings.app.persistence.beans.flvrecord.xsd.FlvRecording; import org.openmeetings.app.persistence.beans.rooms.xsd.Rooms; import org.openmeetings.axis.services.AddRoomWithModerationAndRecordingFlags; @@ -74,7 +73,6 @@ import org.openmeetings.axis.services.GetRoomById; import org.openmeetings.axis.services.GetRoomByIdResponse; import org.openmeetings.axis.services.GetRoomWithClientObjectsById; import org.openmeetings.axis.services.GetRoomWithClientObjectsByIdResponse; -import org.openmeetings.axis.services.GetRoomWithCurrentUsersByIdResponse; import org.openmeetings.axis.services.GetRoomsWithCurrentUsersByListAndType; import org.openmeetings.axis.services.GetRoomsWithCurrentUsersByListAndTypeResponse; import org.openmeetings.axis.services.GetSession; @@ -122,6 +120,8 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel private UserDeletionManager userDeletionManager; @Autowired private CoordinatorManager coordinator; + @Autowired + private RepositoryManager repositoryManager; private XStream xStream; private CacheWrapper sessionCache; @@ -192,10 +192,8 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel List<Property> props = getProperties(); Map<Long,String> roomIdToResources = getResourceNames(props); - List<OpenMeetingsRoom> rooms = new ArrayList<OpenMeetingsRoom>(); for(Property prop:props) { - Long roomId = new Long(prop.getLongValue()); RoomReturnInfo infos = realRooms.get(roomId); if(infos != null) { @@ -219,22 +217,30 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel private Map<Long,String> getResourceNames(List<Property> properties) { Map<Long,String> roomIdToResourceName = new HashMap<Long,String>(); - - List<ResourceRoom> resources = new ArrayList<ResourceRoom>(); + Map<Long,List<Long>> resourceIdToRoomIds = new HashMap<Long,List<Long>>(); for(Property prop:properties) { Long roomId = prop.getLongValue(); if(prop.getGrp() != null) { roomIdToResourceName.put(roomId, prop.getGrp().getName()); - } else { - - ResourceRoom rroom = new ResourceRoom(); - rroom.setRoomId(roomId); - OLATResourceable ores = OresHelper.createOLATResourceableInstance(prop.getResourceTypeName(), prop.getResourceTypeId()); - rroom.setResource(ores); + } else if("CourseModule".equals(prop.getResourceTypeName())) { + if(!resourceIdToRoomIds.containsKey(prop.getResourceTypeId())) { + resourceIdToRoomIds.put(prop.getResourceTypeId(), new ArrayList<Long>()); + } + resourceIdToRoomIds.get(prop.getResourceTypeId()).add(roomId); + } + } + + if(!resourceIdToRoomIds.isEmpty()) { + List<RepositoryEntryShortImpl> shortRepos = repositoryManager.loadRepositoryEntryShortsByResource(resourceIdToRoomIds.keySet(), "CourseModule"); + for(RepositoryEntryShortImpl repoEntry : shortRepos) { + List<Long> roomIds = resourceIdToRoomIds.get(repoEntry.getOlatResource().getResourceableId()); + for(Long roomId:roomIds) { + roomIdToResourceName.put(roomId, repoEntry.getDisplayname()); + } } } - return roomIdToResourceName; + return roomIdToResourceName; } @Override @@ -275,14 +281,27 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel SetUserObjectAndGenerateRoomHashByURLAndRecFlagResponse response = userWs.setUserObjectAndGenerateRoomHashByURLAndRecFlag(userObj); String hashedUrl = response.get_return(); - + if(hashedUrl.startsWith("-") && hashedUrl.length() < 5) { + throw new OpenMeetingsException(parseErrorCode(hashedUrl)); + } return hashedUrl; + } catch(OpenMeetingsException e) { + log.error("", e); + throw e; } catch (Exception e) { log.error("", e); throw translateException(e, 0); } } + private long parseErrorCode(String errorCode) { + try { + return Integer.parseInt(errorCode); + } catch (NumberFormatException e) { + return OpenMeetingsException.UNKOWN; + } + } + private String getPortraitURL(Identity identity) { File portrait = DisplayPortraitManager.getInstance().getBigPortrait(identity); if(portrait == null || !portrait.exists()) { @@ -333,7 +352,13 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel SetUserObjectAndGenerateRoomHashByURLResponse response = userWs.setUserObjectAndGenerateRoomHashByURL(userObj); String hashedUrl = response.get_return(); + if(hashedUrl.startsWith("-") && hashedUrl.length() < 5) { + throw new OpenMeetingsException(parseErrorCode(hashedUrl)); + } return hashedUrl; + } catch(OpenMeetingsException e) { + log.error("", e); + throw e; } catch (Exception e) { log.error("", e); throw translateException(e, 0); @@ -342,7 +367,7 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel @Override public OpenMeetingsRoom getRoom(BusinessGroup group, OLATResourceable ores, String subIdentifier) - throws OpenMeetingsException{ + throws OpenMeetingsException { Property prop = getProperty(group, ores, subIdentifier); if(prop == null) { return null; @@ -357,6 +382,9 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel return room; } catch(OpenMeetingsException e) { throw e; + } catch(Exception e) { + log.error("", e); + throw translateException(e, 0); } } return null; @@ -384,29 +412,32 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel return null; } } catch (Exception e) { + log.error("", e); throw translateException(e, 0); } } private OpenMeetingsException translateException(Exception e, long ret) { - OpenMeetingsException.Type type = OpenMeetingsException.Type.unkown; - if(e instanceof AxisFault) { + long type = OpenMeetingsException.UNKOWN; + if(ret < 0) { + type = ret; + } else if(e instanceof AxisFault) { Throwable cause = e.getCause(); if(cause instanceof ConnectException && cause.getMessage() != null && cause.getMessage().contains("onnection refused")) { - type = OpenMeetingsException.Type.serverNotAvailable; + type = OpenMeetingsException.SERVER_NOT_AVAILABLE; } } return new OpenMeetingsException(e, type); } - public void openRoom(long roomId) throws OpenMeetingsException { - closeOpenMeetingsRoom(roomId, true); + public OpenMeetingsRoom openRoom(OpenMeetingsRoom room) throws OpenMeetingsException { + return closeOpenMeetingsRoom(room, false); } - public void closeRoom(long roomId) throws OpenMeetingsException { - closeOpenMeetingsRoom(roomId, false); + public OpenMeetingsRoom closeRoom(OpenMeetingsRoom room) throws OpenMeetingsException { + return closeOpenMeetingsRoom(room, true); } /** @@ -415,22 +446,28 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel * @param status false = close, true = open * @throws OpenMeetingsException */ - private void closeOpenMeetingsRoom(long roomId, boolean status) throws OpenMeetingsException { + private OpenMeetingsRoom closeOpenMeetingsRoom(OpenMeetingsRoom room, boolean status) throws OpenMeetingsException { int responseCode = 0; try { String adminSID = adminLogin(); RoomServiceStub roomWs = getRoomWebService(); CloseRoom closeRoom = new CloseRoom(); - closeRoom.setRoom_id(roomId); + closeRoom.setRoom_id(room.getRoomId()); closeRoom.setSID(adminSID); - closeRoom.setStatus(status); //false = close, true = open + closeRoom.setStatus(status); + //OpenMeetings doc: false = close, true = open + log.audit("Room state changed (true = close, false = open): " + status); CloseRoomResponse closeResponse = roomWs.closeRoom(closeRoom); responseCode = closeResponse.get_return(); if(responseCode < 0) { throw new OpenMeetingsException(responseCode); } + return getRoomById(adminSID, room, room.getRoomId()); + } catch(OpenMeetingsException e) { + log.error("", e); + throw e; } catch (Exception e) { log.error("", e); throw translateException(e, responseCode); @@ -471,23 +508,28 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel return recList; } catch (Exception e) { + log.error("", e); throw translateException(e, 0); } } @Override - public String getRecordingURL(OpenMeetingsRecording recording, String sid) { - if(sid == null) { - sid = adminLogin(); + public String getRecordingURL(OpenMeetingsRecording recording) + throws OpenMeetingsException { + try { + String sid = adminLogin(); + + String url = UriBuilder.fromUri(openMeetingsModule.getOpenMeetingsURI()).path("DownloadHandler") + .queryParam("fileName", recording.getDownloadName()) + .queryParam("moduleName", "lzRecorderApp") + .queryParam("parentPath", "") + .queryParam("room_id", Long.toString(recording.getRoomId())) + .queryParam("sid", sid).build().toString(); + return url; + } catch (Exception e) { + log.error("", e); + throw translateException(e, 0); } - - String url = UriBuilder.fromUri(openMeetingsModule.getOpenMeetingsURI()).path("DownloadHandler") - .queryParam("fileName", recording.getDownloadName()) - .queryParam("moduleName", "lzRecorderApp") - .queryParam("parentPath", "") - .queryParam("room_id", Long.toString(recording.getRoomId())) - .queryParam("sid", sid).build().toString(); - return url; } @Override @@ -618,6 +660,7 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel } return Collections.emptyList(); } catch (Exception e) { + log.error("", e); throw translateException(e, 0); } } @@ -689,54 +732,31 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel return null; } } - - private String adminSID; - private long adminSIDCreationTime; - - private String adminLogin() { + private String adminLogin() + throws OpenMeetingsException { + long returnCode = 0; try { - synchronized(this) { - if(isAdminSIDValid()) { - return adminSID; - } - adminSID = adminLoginInternal(); - adminSIDCreationTime = System.currentTimeMillis(); + String sid = getSessionID(); + LoginUser adminUser = new LoginUser(); + adminUser.setSID(sid); + adminUser.setUsername(openMeetingsModule.getAdminLogin()); + adminUser.setUserpass(openMeetingsModule.getAdminPassword()); + LoginUserResponse loginResponse = getUserWebService().loginUser(adminUser); + returnCode = loginResponse.get_return(); + if(returnCode > 0) { + return sid; } - return adminSID; + throw new OpenMeetingsException(returnCode); + } catch(OpenMeetingsException e) { + log.error("", e); + throw e; } catch (Exception e) { log.error("", e); - return null; + throw translateException(e, returnCode); } } - private String adminLoginInternal() - throws AxisFault, RemoteException { - String sid = getSessionID() ; - LoginUser adminUser = new LoginUser(); - adminUser.setSID(sid); - adminUser.setUsername(openMeetingsModule.getAdminLogin()); - adminUser.setUserpass(openMeetingsModule.getAdminPassword()); - LoginUserResponse loginResponse = getUserWebService().loginUser(adminUser); - long login = loginResponse.get_return(); - return login > 0 ? sid : null; - } - - /** - * - * @return - */ - private boolean isAdminSIDValid() { - if(adminSID != null) { - return true; - /*long age = System.currentTimeMillis() - adminSIDCreationTime; - if(age < 450000) { - return false;//don't cache - }*/ - } - return false; - } - @Override public void deleteAll(BusinessGroup group, OLATResourceable ores, String subIdentifier) throws OpenMeetingsException { @@ -756,15 +776,31 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel @Override public boolean checkConnection(String url, String login, String password) throws OpenMeetingsException { + long returnCode; try { String endPoint = cleanUrl(url) + "/services/UserService?wsdl"; UserServiceStub userWs = new UserServiceStub(endPoint); GetSession getSession = new GetSession(); GetSessionResponse getSessionResponse = userWs.getSession(getSession); - String sessionId = getSessionResponse.get_return().getSession_id(); - return StringHelper.containsNonWhitespace(sessionId); + String sid = getSessionResponse.get_return().getSession_id(); + + LoginUser adminUser = new LoginUser(); + adminUser.setSID(sid); + adminUser.setUsername(login); + adminUser.setUserpass(password); + LoginUserResponse loginResponse = getUserWebService().loginUser(adminUser); + + returnCode = loginResponse.get_return(); + if(returnCode > 0) { + return StringHelper.containsNonWhitespace(sid); + } + throw new OpenMeetingsException(returnCode); + } catch(OpenMeetingsException e) { + log.error("", e); + throw e; } catch (Exception e) { + log.error("", e); throw translateException(e, 0); } } @@ -840,26 +876,4 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel private String cleanUrl(String url) { return url.endsWith("/") ? url.substring(0, url.length() - 1) : url; } - - private static class ResourceRoom { - - private Long roomId; - private OLATResourceable resource; - - public Long getRoomId() { - return roomId; - } - - public void setRoomId(Long roomId) { - this.roomId = roomId; - } - - public OLATResourceable getResource() { - return resource; - } - - public void setResource(OLATResourceable resource) { - this.resource = resource; - } - } -} +} \ No newline at end of file diff --git a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomMembersController.java b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomMembersController.java index f0b35117ba0..93c0e240b8d 100644 --- a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomMembersController.java +++ b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomMembersController.java @@ -162,7 +162,7 @@ public class OpenMeetingsAdminRoomMembersController extends BasicController { mainVC.contextPut("freePlaces", new String[]{Long.toString(numOfFreePlaces)}); } catch (OpenMeetingsException e) { tableCtr.setTableDataModel(new UserToGroupDataModel()); - showError(e.getType().i18nKey()); + showError(e.i18nKey()); } } diff --git a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRecordingController.java b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRecordingController.java index e1587a01d39..6ecd1a9fb44 100644 --- a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRecordingController.java +++ b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRecordingController.java @@ -26,6 +26,7 @@ import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; +import org.olat.modules.openmeetings.manager.OpenMeetingsException; import org.olat.modules.openmeetings.manager.OpenMeetingsManager; import org.olat.modules.openmeetings.model.OpenMeetingsRecording; @@ -45,11 +46,15 @@ public class OpenMeetingsRecordingController extends BasicController { mainVC = createVelocityContainer("recording"); - OpenMeetingsManager openMeetingsManager = CoreSpringFactory.getImpl(OpenMeetingsManager.class); - String url = openMeetingsManager.getRecordingURL(recording, null); - mainVC.contextPut("recordingUrl", url); - mainVC.contextPut("width", new Long(recording.getWidth())); - mainVC.contextPut("height", new Long(recording.getHeight())); + try { + OpenMeetingsManager openMeetingsManager = CoreSpringFactory.getImpl(OpenMeetingsManager.class); + String url = openMeetingsManager.getRecordingURL(recording); + mainVC.contextPut("recordingUrl", url); + mainVC.contextPut("width", new Long(recording.getWidth())); + mainVC.contextPut("height", new Long(recording.getHeight())); + } catch (OpenMeetingsException e) { + e.printStackTrace(); + } putInitialPanel(mainVC); diff --git a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRecordingsController.java b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRecordingsController.java index b293bf74e7d..7728e4e45aa 100644 --- a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRecordingsController.java +++ b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRecordingsController.java @@ -69,7 +69,6 @@ public class OpenMeetingsRecordingsController extends BasicController { listenTo(tableCtr); tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("room.name", OpenMeetingsRecordingsDataModel.Col.name.ordinal(), null, getLocale())); - tableCtr.addColumnDescriptor(new StaticColumnDescriptor("download", "download", translate("download"))); tableCtr.addColumnDescriptor(new StaticColumnDescriptor("view", "view", translate("view"))); tableCtr.setTableDataModel(new OpenMeetingsRecordingsDataModel()); loadModel(); @@ -83,7 +82,7 @@ public class OpenMeetingsRecordingsController extends BasicController { ((OpenMeetingsRecordingsDataModel)tableCtr.getTableDataModel()).setObjects(recordings); tableCtr.modelChanged(); } catch (OpenMeetingsException e) { - showError(e.getType().i18nKey()); + showError(e.i18nKey()); } } @@ -104,9 +103,7 @@ public class OpenMeetingsRecordingsController extends BasicController { TableEvent e = (TableEvent)event; int row = e.getRowId(); OpenMeetingsRecording recording = (OpenMeetingsRecording)tableCtr.getTableDataModel().getObject(row); - if("download".equals(e.getActionId())) { - doDownload(ureq, recording); - }else if("view".equals(e.getActionId())) { + if("view".equals(e.getActionId())) { doView(ureq, recording); } } @@ -125,9 +122,4 @@ public class OpenMeetingsRecordingsController extends BasicController { listenTo(cmc); cmc.activate(); } - - private void doDownload(UserRequest ureq, OpenMeetingsRecording recording) { - String url = openMeetingsManager.getRecordingURL(recording, null); - System.out.println(url); - } } diff --git a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRoomEditController.java b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRoomEditController.java index 9db3444c77c..249c5751eed 100644 --- a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRoomEditController.java +++ b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRoomEditController.java @@ -77,7 +77,7 @@ public class OpenMeetingsRoomEditController extends FormBasicController { this.defaultSettings = defaultSettings; roomTypeKeys = new String[]{ - RoomType.conference.typeStr(), RoomType.audience.typeStr(), RoomType.restricted.typeStr(), RoomType.interview.typeStr() + RoomType.conference.typeStr(), RoomType.restricted.typeStr(), RoomType.interview.typeStr() }; moderationModeKeys = new String[]{"yes", "no"}; @@ -85,7 +85,7 @@ public class OpenMeetingsRoomEditController extends FormBasicController { try { room = openMeetingsManager.getRoom(group, ores, subIdentifier); } catch (OpenMeetingsException e) { - showError(e.getType().i18nKey()); + showError(e.i18nKey()); } if(room != null && room.getSize() != 16 && room.getSize() != 100) { @@ -107,7 +107,7 @@ public class OpenMeetingsRoomEditController extends FormBasicController { roomNameEl = uifactory.addTextElement("roomname", "room.name", 255, name == null ? "" : name, formLayout); String[] roomTypeValues = new String[]{ - translate(RoomType.conference.i18nKey()), translate(RoomType.audience.i18nKey()), translate(RoomType.restricted.i18nKey()), translate(RoomType.interview.i18nKey()) + translate(RoomType.conference.i18nKey()), translate(RoomType.restricted.i18nKey()), translate(RoomType.interview.i18nKey()) }; roomTypeEl = uifactory.addDropdownSingleselect("roomtype", "room.type", formLayout, roomTypeKeys, roomTypeValues, null); if(room != null) { diff --git a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRoomsDataModel.java b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRoomsDataModel.java index d1b169b55f4..f019b604ef2 100644 --- a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRoomsDataModel.java +++ b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRoomsDataModel.java @@ -24,7 +24,6 @@ import java.util.List; import org.olat.core.gui.components.table.TableDataModel; import org.olat.core.util.StringHelper; import org.olat.modules.openmeetings.model.OpenMeetingsRoom; -import org.olat.properties.Property; /** * @@ -85,18 +84,12 @@ public class OpenMeetingsRoomsDataModel implements TableDataModel<OpenMeetingsRo return "-"; } case resource: { - Property property = room.getProperty(); - if(property == null) { - return "???"; - } else if(property.getGrp() != null) { - return property.getGrp().getName(); - } else if(StringHelper.containsNonWhitespace(property.getResourceTypeName())) { - return property.getResourceTypeName() + "(" + property.getResourceTypeId() + ")"; + String resourceName = room.getResourceName(); + if(StringHelper.containsNonWhitespace(resourceName)) { + return resourceName; } - return ""; + return "???"; } - - default: return ""; } } diff --git a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRunController.java b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRunController.java index 4a6f6e481dd..9e1b44ef7a2 100644 --- a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRunController.java +++ b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsRunController.java @@ -57,7 +57,8 @@ public class OpenMeetingsRunController extends BasicController { private OpenMeetingsRoomEditController editController; private final boolean admin; - private final Long roomId; + private final boolean moderator; + private OpenMeetingsRoom room; private final OpenMeetingsModule openMeetingsModule; private final OpenMeetingsManager openMeetingsManager; @@ -66,17 +67,24 @@ public class OpenMeetingsRunController extends BasicController { private final String subIdentifier; public OpenMeetingsRunController(UserRequest ureq, WindowControl wControl, BusinessGroup group, OLATResourceable ores, - String subIdentifier, String resourceName, boolean admin) { + String subIdentifier, String resourceName, boolean admin, boolean moderator) { super(ureq, wControl); this.admin = admin; + this.moderator = moderator; this.group = group; this.ores = ores; this.subIdentifier = subIdentifier; openMeetingsModule = CoreSpringFactory.getImpl(OpenMeetingsModule.class); openMeetingsManager = CoreSpringFactory.getImpl(OpenMeetingsManager.class); - roomId = openMeetingsManager.getRoomId(group, ores, subIdentifier); + + try { + room = openMeetingsManager.getRoom(group, ores, subIdentifier); + } catch (OpenMeetingsException e) { + logError("", e); + } + mainVC = createVelocityContainer("room"); init(ureq); @@ -86,13 +94,13 @@ public class OpenMeetingsRunController extends BasicController { protected void init(UserRequest ureq) { if(!openMeetingsModule.isEnabled()) { mainVC.contextPut("disabled", Boolean.TRUE); - } else if(roomId == null) { + } else if(room == null) { mainVC.contextPut("noroom", Boolean.TRUE); } else if (ureq.getUserSession().getRoles().isGuestOnly() || ureq.getUserSession().getRoles().isInvitee()){ startGuestLink = LinkFactory.createButton("start.room.guest", mainVC, this); mainVC.put("start.room.guest", startGuestLink); } else { - if (admin) { + if (moderator) { openLink = LinkFactory.createButton("open.room", mainVC, this); mainVC.put("open.room", openLink); @@ -101,7 +109,8 @@ public class OpenMeetingsRunController extends BasicController { membersLink = LinkFactory.createButton("room.members", mainVC, this); mainVC.put("room.members", membersLink); - + } + if(admin) { editLink = LinkFactory.createButton("edit", mainVC, this); mainVC.put("edit", editLink); } @@ -113,6 +122,34 @@ public class OpenMeetingsRunController extends BasicController { startLink.setTarget("openmeetings"); mainVC.put("start.room", startLink); } + + updateState(); + } + + private void updateState() { + if(!openMeetingsModule.isEnabled()) { + mainVC.contextPut("disabled", Boolean.TRUE); + } else if(room == null) { + mainVC.contextPut("noroom", Boolean.TRUE); + } else { + boolean closed = room.isClosed(); + if(openLink != null) { + openLink.setVisible(closed); + } + if(closeLink != null) { + closeLink.setVisible(!closed); + } + if(startLink != null) { + startLink.setEnabled(!closed); + } + if(startGuestLink != null) { + startGuestLink.setEnabled(!closed); + } + + mainVC.contextPut("roomName", room.getName()); + mainVC.contextPut("roomComment", room.getComment()); + mainVC.contextPut("roomClosed", new Boolean(closed)); + } } @Override @@ -158,8 +195,8 @@ public class OpenMeetingsRunController extends BasicController { cleanupPopups(); } else if(source == editController) { if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) { - //do something - System.out.println("Room edited"); + room = editController.getRoom(); + updateState(); } cmc.deactivate(); cleanupPopups(); @@ -184,23 +221,25 @@ public class OpenMeetingsRunController extends BasicController { private void doOpen(UserRequest ureq) { try { - openMeetingsManager.openRoom(roomId); + room = openMeetingsManager.openRoom(room); } catch (OpenMeetingsException e) { - showError(e.getType().i18nKey()); + showError(e.i18nKey()); } + updateState(); } private void doClose(UserRequest ureq) { try { - openMeetingsManager.closeRoom(roomId); + room = openMeetingsManager.closeRoom(room); } catch (OpenMeetingsException e) { - showError(e.getType().i18nKey()); + showError(e.i18nKey()); } + updateState(); } private void doOpenRecordings(UserRequest ureq) { cleanupPopups(); - recordingsController = new OpenMeetingsRecordingsController(ureq, getWindowControl(), roomId); + recordingsController = new OpenMeetingsRecordingsController(ureq, getWindowControl(), room.getRoomId()); listenTo(recordingsController); cmc = new CloseableModalController(getWindowControl(), translate("close"), recordingsController.getInitialComponent(), true, translate("recordings")); @@ -219,7 +258,7 @@ public class OpenMeetingsRunController extends BasicController { listenTo(cmc); cmc.activate(); } catch (OpenMeetingsException e) { - showError(e.getType().i18nKey()); + showError(e.i18nKey()); } } @@ -244,31 +283,31 @@ public class OpenMeetingsRunController extends BasicController { } private void redirectToGuestRoom(UserRequest ureq, String firstName, String lastName) { - if(roomId == null && roomId.longValue() <= 0) { + if(room == null && room.getRoomId() <= 0) { showError("room.notfound.error"); } else { try { - String securedHash = openMeetingsManager.setGuestUserToRoom(firstName, lastName, roomId); - String url = openMeetingsManager.getURL(getIdentity(), roomId.longValue(), securedHash, getLocale()); + String securedHash = openMeetingsManager.setGuestUserToRoom(firstName, lastName, room.getRoomId()); + String url = openMeetingsManager.getURL(getIdentity(), room.getRoomId(), securedHash, getLocale()); DisplayOrDownloadComponent cmp = new DisplayOrDownloadComponent("openCommand", url); mainVC.put("openCmd", cmp); } catch (OpenMeetingsException e) { - showError(e.getType().i18nKey()); + showError(e.i18nKey()); } } } private void doStart(UserRequest ureq) { - if(roomId == null && roomId.longValue() <= 0) { + if(room == null && room.getRoomId() <= 0) { showError("room.notfound.error"); } else { try { - String securedHash = openMeetingsManager.setUserToRoom(getIdentity(), roomId, admin); - String url = openMeetingsManager.getURL(getIdentity(), roomId.longValue(), securedHash, getLocale()); + String securedHash = openMeetingsManager.setUserToRoom(getIdentity(), room.getRoomId(), moderator); + String url = openMeetingsManager.getURL(getIdentity(), room.getRoomId(), securedHash, getLocale()); RedirectMediaResource redirect = new RedirectMediaResource(url); ureq.getDispatchResult().setResultingMediaResource(redirect); } catch (OpenMeetingsException e) { - showError(e.getType().i18nKey()); + showError(e.i18nKey()); } } } diff --git a/src/main/java/org/olat/modules/openmeetings/ui/_content/room.html b/src/main/java/org/olat/modules/openmeetings/ui/_content/room.html index fafbc9cc3ec..fdc534debbe 100644 --- a/src/main/java/org/olat/modules/openmeetings/ui/_content/room.html +++ b/src/main/java/org/olat/modules/openmeetings/ui/_content/room.html @@ -3,6 +3,15 @@ #elseif($noroom) <div class="b_warning">$r.translate("room.notfound.error")</div> #else + <h4>$roomName</h4> + #if($roomComment) + <p>$roomComment</p> + #end + + #if($roomClosed) + <p>$r.translate("room.closed.explanation")</p> + #end + #if($r.available("open.room")) $r.render("open.room") $r.render("close.room") diff --git a/src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_de.properties index a2f9e72caae..2b3bff24bbc 100644 --- a/src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_de.properties @@ -4,58 +4,58 @@ check=Serververbindung testen check.ok=Der Verbindungstest war erfolgreich, Sie k\u00F6nnen OpenMeetings nun benutzen. check.nok=Der Verbindungstest war nicht erfolgreich. Bitte pr\u00FCfen Sie die Server URL, der Benutzername und das Passwort des Systembenutzers! enabled=eingeschaltet -error.notAvailable=Der Server ist nicht verfügbar, +error.notAvailable=Der Server ist nicht verf\u00FCgbar, error.unkown=Unerwartet Fehler -error.noroom.short=Der Raum ist noch konfiguiert in "{0}"; -error.noroom.long=Der Raum ist noch konfiguiert in "{0}"; -delete=Löschen -delete.confirm=Wollen Sie wirklich diesen Raum "{0}" löschen? -delete.ok=Der Raum würde erfolgreich gelöscht. -delete.nok=Der Raum konnte nicht gelöscht werden. -kickout=Kick out -kickout.ok=Kick out -kickout.nok=Kick out error +error.noroom.short=Der Raum ist noch nicht konfiguiert in "{0}". +error.noroom.long=Der Raum ist noch nicht konfiguiert in "{0}". +delete=L\u00F6schen +delete.confirm=Wollen Sie wirklich diesen Raum "{0}" l\u00F6schen? +delete.ok=Der Raum w\u00FCrde erfolgreich gel\u00F6scht. +delete.nok=Der Raum konnte nicht gel\u00F6scht werden. +kickout=Nutzer entfernen +kickout.ok=Der Benutzer wurde erfolgreich entfernt. +kickout.nok=Der Benutzer konnte nicht entfernt werden. openmeetings.account=Konfiguration openmeetings.title=OpenMeetings openmeetings.intro=Apache OpenMeetings v2.0 Konfiguration openmeetings.module.enabled=Modul "OpenMeetings" -download=Herunterladen view=Ansehen -table.empty=Kein Raum wurde gefunden. +table.empty=Kein Raum wurde nicht gefunden. recording.name=Name recordings=Aufzeichnungen -recordings.empty=Dieser Raum hat noch kein Aufzeichnung +recordings.empty=Dieser Raum hat noch keine Aufzeichnung rooms.title=Raum +room.closed.explanation=Der Raum ist geschlossen. room.comment=Kommentar -room.members=Mitglieder +room.members=Teilnehmer room.name=Name des Raums room.type=Typ von Raum -room.type.conference=Conference +room.type.conference=Conference (1 - 25 Benutzer) room.type.audience=Audience -room.type.restricted=Restricted -room.type.interview=Interview +room.type.restricted=Webinar (1 - 150 Benutzer) +room.type.interview=Interview (1:1 meeting with recording) room.moderation.mode=Moderation -room.moderation.yes=Moderated -room.moderation.no=No moderation -room.size=Anzhal Benutzere -room.recording=Recording +room.moderation.yes=Moderiert +room.moderation.no=Nicht moderiert +room.size=Teilnehmerzahl +room.recording=Aufzeichnung room.resource=Ressourcen -room.numOfUsers=#Benutzer +room.numOfUsers=#Teilnehmer room.infos=Detailinformationen -room.recording=Recording allowed -start.room=Zum Raum gehen -start.room.guest=Zum Raum gehen +room.recording=Aufzeichnung erlaubt +start.room=Betreten +start.room.guest=Betreten open.room=Offnen close.room=Schliessen room.raw.title=Detailinformationen -guest.room=Benutzer Informationen +guest.room=Teilnehmer Informationen first.name=Vorname last.name=Nachname -users=Benutzer -users.empty=Der Raum ist noch leer +users=Teilnehmerzahl +users.empty=Der Raum ist leer openolat.externaltype=External type -room.notfound.error=Der Raum wurd nicht gefunden -openmeetings.disabled.error=Der Apache OpenMeetings Server ist nicht verf\u00FCgbar +room.notfound.error=Der Raum wurde nicht gefunden +openmeetings.disabled.error=Der Modul "OpenMeetings" ist nicht eingeschaltet. option.baseurl=URL OpenMeetings Server option.adminlogin=Web Service Benutzername option.adminpassword=Web Service Passwort diff --git a/src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_en.properties new file mode 100644 index 00000000000..4f0e9564e50 --- /dev/null +++ b/src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_en.properties @@ -0,0 +1,119 @@ +admin.menu.title=OpenMeetings +admin.menu.title.alt=Configuration of the integration to an Apache OpenMeetings Server +check=Check the connection +check.nok=The server connection and configuration test was not successful. Please check the server URL, the system user name and password you configured. +check.ok=The server connection and configuration test was successful. You can now use OpenMeetings in OpenOLAT. +enabled=enabled +error.notAvailable=The server is not available. +error.unkown=Unexpected error +error.noroom.short=The room is not configured in "{0}". +error.noroom.long=The room is not configured in "{0}". +error.-2=Please enter either an email address or a user name +error.-3=There is no user connected to this username +error.-4=The email containing a special link has been sent to your email address +error.-5=No user found +error.-6=The passwords you entered weren't identical +error.-7=Password and or username too short, required minimum length for user name / password are: +error.-8=Password set. You can now login. +error.-9=No such email address was found. Make sure you entered the same email address you used to create your account. +error.-10=Username not found +error.-11=Invalid password +error.-12=Successfully logged out +error.-13=Password and or login is too short +error.-14=Registration disabled +error.-15=The username is already used +error.-16=System error please contact the administrator +error.-17=The mail address is already registered +error.-18=Your account has been created. You can now login. +error.-19=Invalid email address +error.-20=Duplicate file name, please enter another +error.-21=File name too short +error.-22=Could not save the address +error.-23=User added but you need to assign this user to an usergroup, otherwise they won't be able to log in +error.-24=No field found for the ID +error.-25=No label found +error.-26=Admin authorization required +error.-27=Invalid label ID +error.-28=You have deleted the label +error.-29=Invalid label ID +error.-30=This room is full +error.-31=No invitation available for this invitation code +error.-32=This invitation was already used +error.-33=The invitation code is invalid +error.-34=Invalid password +error.-35=This user is already a member of this usergroup +error.-36=This method needs an adminstration account to be invoked +error.-37=There was no session associated with this ID +error.-38=You cannot delete your own user +error.-39=This is an administrator or moderator account. You can only edit this account through the administration panel. +error.-40=You have successfully signed up. An email with a verification code will be sent to your mailbox. +error.-41=Your account is not activated. Please use the link in the email you received during registration. +error.-42=This session hash has already been used +error.-43=You have to enter your password again to auto create the SIP data +error.-44=This email is already used by another user. +error.-45=This user is already in your contact list or has received an invitation to your contact list that is not answered yet. +error.-46=The user is already denied. +error.-47=The user is already approved. +error.-48=This user contact hash is invalid. +error.-49=There is no such contact. +error.-50=You invitation code is not valid, the code is only valid during this specific date and time: +error.-51=Please enter a password +error.-52=You need an account with user level user, moderator or admin +error.-53=Please enter email +error.-54=You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio. +error.-55=Ping failed, could not find server by this name. +error.-56=Ping failed, multiple servers found with this name. +delete=Delete +delete.confirm=Do you really want to delete this room "{0}"? +delete.ok=The room has successfuly been deleted. +delete.nok=The room could not be deleted for unknown reasons. Please try again later or contact the administrator. +kickout=Kick out +kickout.ok=The user has successfuly been kicked out. +kickout.nok=The user could not be kicked out for unknown reasons. Please try again later or contact the administrator. +openmeetings.account=Configuration +openmeetings.title=OpenMeetings +openmeetings.intro=Configuration Apache OpenMeetings v2.0 +openmeetings.module.enabled=Module "OpenMeetings" +view=View +table.empty=No raum has been found. +recording.name=Name +recordings=Recordings +recordings.empty=This room hasn't any recordings +rooms.title=Room +room.closed.explanation=The room is closed. +room.comment=Comment +room.members=Members +room.name=Room's name +room.type=Room's type +room.type.conference=Conference (1 - 25 users) +room.type.audience=Audience +room.type.restricted=Webinar (1 - 150 users) +room.type.interview=Interview (1:1 meeting with recording) +room.moderation.mode=Moderation +room.moderation.yes=Moderated +room.moderation.no=No moderation +room.size=Number of participants +room.recording=Recording +room.resource=Resources +room.numOfUsers=# Users +room.infos=Detail information +room.recording=Recording allowed +start.room=Enter +start.room.guest=Enter +open.room=Open +close.room=Close +room.raw.title=Detail information +guest.room=User information +first.name=First name +last.name=Last name +users=Users +users.empty=The room is still empty +openolat.externaltype=External type +room.notfound.error=Room not found +openmeetings.disabled.error=The OpenMeetings module is not enabled. +option.baseurl=URL OpenMeetings Server +option.adminlogin=Web Service username +option.adminpassword=Web Service password +chelp.openmeetings1=Help Apache OpenMeetings +chelp.module.title=Apache OpenMeetings: configuration +help.hover.openmeetings=Help to integrate an Apache OpenMeetings Server diff --git a/src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_fr.properties new file mode 100644 index 00000000000..a7db9ea5159 --- /dev/null +++ b/src/main/java/org/olat/modules/openmeetings/ui/_i18n/LocalStrings_fr.properties @@ -0,0 +1,64 @@ +admin.menu.title=OpenMeetings +admin.menu.title.alt=Configuration d'un serveur Apache OpenMeetings +check=Tester la connection +check.nok=Le test de la connection n'a pas \u00E9t\u00E9 couronn\u00E9 de succ\u00E8s. V\u00E9rifiez s'il-vous-pla\u00EEt l'adresse URL du serveur, le nom d'utilisateur et son mot-de-passe. +check.ok=Le test de la connection a \u00E9t\u00E9 couronn\u00E9 de succ\u00E8s. Vous pouvez utiliser OpenMeetings. +enabled=activ\u00E9 +error.notAvailable=le serveur n'est pas disponible. +error.unkown=Erreur inattendue. +error.noroom.short=La salle n'est pas configur\u00E9e pour "{0}". +error.noroom.long=La salle n'est pas configur\u00E9e pour "{0}". +delete=Effacer +delete.confirm=Voulez-vous vraiment effacer la salle "{0}"? +delete.ok=La salle a \u00E9t\u00E9 effac\u00E9e. +delete.nok=La salle n'a pas pu être effac\u00E9e pour une raison inconnue. +kickout=Ejecter +kickout.ok=L'utilisateur a \u00E9t\u00E9 eject\u00E9. +kickout.nok=L'utilisateur n'a pas pu être eject\u00E9 correctement. +openmeetings.account=Configuration +openmeetings.title=OpenMeetings +openmeetings.intro=Configuration Apache OpenMeetings v2.0 +openmeetings.module.enabled=Module "OpenMeetings" +view=Regarder +table.empty=Aucune salle n'a \u00E9t\u00E9 trouv\u00E9e. +recording.name=Nom +recordings=Enregistrements +recordings.empty=La salle n'a aucun enregistrements disponibles. +rooms.title=Salle +room.closed.explanation=La salle est ferm\u00E9e pour l'instant. +room.comment=Commentaire +room.members=Utilisateurs +room.name=Nom de la salle +room.type=Type de la salle +room.type.conference=Conf\u00E9rence (1 - 25 utilisateurs) +room.type.audience=Audience +room.type.restricted=Webinar (1 - 150 utilisateurs) +room.type.interview=Interview (1:1 meeting avec enregistrement) +room.moderation.mode=Mod\u00E9ration +room.moderation.yes=Mod\u00E9r\u00E9 +room.moderation.no=Sans mod\u00E9ration +room.size=Nombre d'utilisateurs +room.recording=Enregistrement +room.resource=Ressources +room.numOfUsers=#Utilisateurs +room.infos=Informations d\u00E9taill\u00E9es +room.recording=Enregistrement possible +start.room=Entrer +start.room.guest=Entrer +open.room=Ouvrir +close.room=Fermer +room.raw.title=Informations d\u00E9taill\u00E9es +guest.room=Informations utilisateur +first.name=Pr\u00E9nom +last.name=Nom +users=Utilisateur +users.empty=La salle est vide. +openolat.externaltype=External type +room.notfound.error=La salle n'a pas pu être trouv\u00E9e +openmeetings.disabled.error=Le module OpenMeetings n'est pas activ\u00E9 +option.baseurl=URL du serveur OpenMeetings +option.adminlogin=Nom d'utilisateur Web Service +option.adminpassword=Mot-de-passe Web Service +chelp.openmeetings1=Aide Apache OpenMeetings +chelp.module.title=Apache OpenMeetings: configuration +help.hover.openmeetings=Aide pour l'int\u00E9gration d'un serveur Apache OpenMeetings diff --git a/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_en.properties index e653e56eade..07818f0e4ba 100644 --- a/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_en.properties @@ -21,7 +21,7 @@ booking.roomSize=Room size booking.title=Meetings check=Test server connection check.nok=The server connection and configuration test was not successful. Please check the server URL, the system user name and password you configured. -check.ok=The server connection and configuration test was successful. You can now use vitero in OLAT. +check.ok=The server connection and configuration test was successful. You can now use vitero in OpenOLAT. check.users=Validate user check.users.nok=Validation fixed {2} problem. check.users.ok=Validation did not detect any problem @@ -42,7 +42,7 @@ chelp.vitero7=Users can see meetings when they are signed in to a meeting or whe chelp.vitero8=Note that the meeting parameters can not be changed after the meeting has been created. delete.confirm=Do you really want to delete the meeting? The meeting will also be removed on the vitero server and can not be restored. delete.nok=The meeting could not be deleted for unknown reasons. Please try again later or contact the administrator. -delete.ok=The meeting has successfuly been deleted +delete.ok=The meeting has successfuly been deleted. enabled=enabled error.bookingCollision=Booking collision. error.bookingDatesInverted=The end date of the meeting must not be before the start date. diff --git a/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml b/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml index 15c46e54026..12204d93dd4 100644 --- a/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml +++ b/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml @@ -132,4 +132,8 @@ cascade="none"/> </class> + <query name="loadRepositoryEntryShortsByResourceableIds"> + <![CDATA[select v from org.olat.repository.model.RepositoryEntryShortImpl v inner join fetch v.olatResource as ores where ores.resId in (:resIds) and ores.resName=:resName]]> + </query> + </hibernate-mapping> diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index 0d572d2c93a..9e1fbf36144 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -666,6 +666,20 @@ public class RepositoryManager extends BasicManager { return shorties; } + /** + * Load a list of repository entry without all the security groups ... + * @param resources + * @return + */ + public List<RepositoryEntryShortImpl> loadRepositoryEntryShortsByResource(Collection<Long> resIds, String resourceType) { + List<RepositoryEntryShortImpl> shorties = dbInstance.getCurrentEntityManager() + .createNamedQuery("loadRepositoryEntryShortsByResourceableIds", RepositoryEntryShortImpl.class) + .setParameter("resIds", resIds) + .setParameter("resName", resourceType) + .getResultList(); + return shorties; + } + /** * Test a repo entry if identity is allowed to launch. * @param ureq -- GitLab