You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2016/04/28 11:09:50 UTC
svn commit: r1741397 - in /openmeetings/application:
branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/
branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/
branches/3.2.x/openmeetin...
Author: solomax
Date: Thu Apr 28 09:09:49 2016
New Revision: 1741397
URL: http://svn.apache.org/viewvc?rev=1741397&view=rev
Log:
[OPENMEETINGS-1376] no 'ghost' users are being displayed, user enters the room with the correct rights
Modified:
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
Modified: openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java Thu Apr 28 09:09:49 2016
@@ -32,6 +32,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
+import org.apache.openmeetings.IApplication;
import org.apache.openmeetings.core.data.conference.RoomManager;
import org.apache.openmeetings.core.data.whiteboard.WhiteboardManager;
import org.apache.openmeetings.core.remote.RecordingService;
@@ -186,7 +187,7 @@ public class ScopeApplicationAdapter ext
rcm.setSwfurl(swfURL);
rcm.setTcUrl(tcUrl);
rcm.setPublicSID(uid);
- rcm = sessionManager.add(rcm, null);
+ rcm = sessionManager.add(((IApplication)Application.get(OpenmeetingsVariables.wicketApplicationName)).updateClient(rcm), null);
if (rcm == null) {
log.warn("Failed to create Client on room connect");
return false;
@@ -1418,7 +1419,7 @@ public class ScopeApplicationAdapter ext
return roomClientList;
}
- public synchronized List<Client> getCurrentModeratorList() {
+ public List<Client> getCurrentModeratorList() {
try {
IConnection current = Red5.getConnectionLocal();
Client client = sessionManager.getClientByStreamId(current.getClient().getId(), null);
Modified: openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java Thu Apr 28 09:09:49 2016
@@ -80,12 +80,11 @@ public class SessionManager implements I
server = serverUtil.getCurrentServer();
}
c.setConnectedSince(new Date());
+ c.setRoomEnter(new Date());
if (Strings.isEmpty(c.getPublicSID())) {
c.setPublicSID(UUID.randomUUID().toString());
}
c.setServer(server);
- c.setIsMod(false);
- c.setCanDraw(false);
if (cache.containsKey(null, c.getStreamid())) {
log.error("Tried to add an existing Client " + c.getStreamid());
Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java Thu Apr 28 09:09:49 2016
@@ -20,6 +20,7 @@ package org.apache.openmeetings;
import javax.servlet.ServletContext;
+import org.apache.openmeetings.db.entity.room.Client;
import org.apache.openmeetings.db.entity.room.Invitation;
import org.apache.wicket.request.IExceptionMapper;
import org.apache.wicket.request.IRequestMapper;
@@ -34,6 +35,7 @@ public interface IApplication {
String getOmString(long id);
String getOmString(long id, long languageId);
String getOmString(String key, long languageId);
+ Client updateClient(Client rcl);
String getOmContactsLink();
String getOmInvitationLink(String baseUrl, Invitation i);
String urlForActivatePage(PageParameters pp);
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java Thu Apr 28 09:09:49 2016
@@ -49,6 +49,7 @@ import org.apache.openmeetings.db.entity
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.db.entity.user.User.Type;
import org.apache.openmeetings.util.InitializationContainer;
+import org.apache.openmeetings.web.app.Client.Right;
import org.apache.openmeetings.web.pages.ActivatePage;
import org.apache.openmeetings.web.pages.MainPage;
import org.apache.openmeetings.web.pages.NotInitedPage;
@@ -105,7 +106,7 @@ public class Application extends Authent
private static boolean isInstalled;
private static ConcurrentHashMap<String, Client> ONLINE_USERS = new ConcurrentHashMap<>();
private static ConcurrentHashMap<String, Client> INVALID_SESSIONS = new ConcurrentHashMap<>();
- private static ConcurrentHashMap<Long, Set<Client>> ROOMS = new ConcurrentHashMap<>();
+ private static ConcurrentHashMap<Long, Set<String>> ROOMS = new ConcurrentHashMap<>();
//additional maps for faster searching should be created
private DashboardContext dashboardContext;
private static Set<String> STRINGS_WITH_APP = new HashSet<>(); //FIXME need to be removed
@@ -222,6 +223,20 @@ public class Application extends Authent
}
}
+ @Override
+ public org.apache.openmeetings.db.entity.room.Client updateClient(org.apache.openmeetings.db.entity.room.Client rcl) {
+ Client client = getOnlineClient(rcl.getPublicSID());
+ if (rcl == null || client == null) {
+ return rcl;
+ }
+ rcl.setIsSuperModerator(client.hasRight(Right.superModerator));
+ rcl.setIsMod(client.hasRight(Right.moderator));
+ rcl.setIsBroadcasting(client.hasRight(Right.audio));
+ rcl.setCanVideo(client.hasRight(Right.video));
+ rcl.setCanDraw(client.hasRight(Right.whiteBoard));
+ return rcl;
+ }
+
public static Client getOnlineClient(String uid) {
return uid == null ? null : ONLINE_USERS.get(uid);
}
@@ -284,15 +299,15 @@ public class Application extends Authent
}
public static void removeInvalidSession(String sessionId) {
- if (INVALID_SESSIONS.containsKey(sessionId)){
+ if (sessionId != null){
INVALID_SESSIONS.remove(sessionId);
}
}
public static Client addUserToRoom(Client c) {
log.debug("Adding online room client: {}, room: {}", c.getUid(), c.getRoomId());
- ROOMS.putIfAbsent(c.getRoomId(), new ConcurrentHashSet<Client>());
- ROOMS.get(c.getRoomId()).add(c);
+ ROOMS.putIfAbsent(c.getRoomId(), new ConcurrentHashSet<String>());
+ ROOMS.get(c.getRoomId()).add(c.getUid());
return c;
}
@@ -305,27 +320,35 @@ public class Application extends Authent
public static Client removeUserFromRoom(Client c) {
log.debug("Removing online room client: {}, room: {}", c.getUid(), c.getRoomId());
if (c.getRoomId() != null) {
- Set<Client> clients = ROOMS.get(c.getRoomId());
+ Set<String> clients = ROOMS.get(c.getRoomId());
if (clients != null) {
- clients.remove(c);
- if (clients.isEmpty()) {
- ROOMS.remove(c.getRoomId());
- }
+ clients.remove(c.getUid());
c.setRoomId(null);
}
}
return c;
}
- public static Set<Client> getRoomUsers(long roomId) {
- return ROOMS.containsKey(roomId) ? ROOMS.get(roomId) : new HashSet<Client>();
+ public static List<Client> getRoomClients(long roomId) {
+ List<Client> clients = new ArrayList<>();
+ Set<String> uids = ROOMS.get(roomId);
+ if (uids != null) {
+ for (String uid : uids) {
+ Client c = getOnlineClient(uid);
+ if (c != null) {
+ clients.add(c);
+ }
+ }
+ }
+ return clients;
}
public static Set<Long> getUserRooms(long userId) {
- Set<Long> result = new HashSet<Long>();
- for (Entry<Long, Set<Client>> me : ROOMS.entrySet()) {
- for (Client c : me.getValue()) {
- if (c.getUserId() == userId) {
+ Set<Long> result = new HashSet<>();
+ for (Entry<Long, Set<String>> me : ROOMS.entrySet()) {
+ for (String uid : me.getValue()) {
+ Client c = getOnlineClient(uid);
+ if (c != null && c.getUserId().equals(userId)) {
result.add(me.getKey());
}
}
@@ -334,10 +357,10 @@ public class Application extends Authent
}
public static boolean isUserInRoom(long roomId, long userId) {
- if (ROOMS.containsKey(roomId)) {
- Set<Client> clients = ROOMS.get(roomId);
- for (Client c : clients) {
- if (c.getUserId() == userId) {
+ Set<String> clients = ROOMS.get(roomId);
+ if (clients != null) {
+ for (String uid : clients) {
+ if (getOnlineClient(uid).getUserId().equals(userId)) {
return true;
}
}
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java Thu Apr 28 09:09:49 2016
@@ -104,6 +104,9 @@ public class Client implements IDataProv
}
public boolean hasRight(Right right) {
+ if (Right.superModerator == right) {
+ return rights.contains(right);
+ }
return rights.contains(Right.superModerator) || rights.contains(Right.moderator) ? true : rights.contains(right);
}
@@ -170,4 +173,10 @@ public class Client implements IDataProv
return false;
return true;
}
+
+ @Override
+ public String toString() {
+ return "Client [uid=" + uid + ", sessionId=" + sessionId + ", pageId=" + pageId + ", userId=" + userId + ", roomId=" + roomId
+ + ", rights=" + rights + ", activities=" + activities + ", connectedSince=" + connectedSince + "]";
+ }
}
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java Thu Apr 28 09:09:49 2016
@@ -36,7 +36,6 @@ import org.apache.openmeetings.web.commo
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
@@ -47,7 +46,6 @@ import org.apache.wicket.markup.html.pan
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
-import org.apache.wicket.util.time.Duration;
import com.googlecode.wicket.jquery.core.JQueryBehavior;
import com.googlecode.wicket.jquery.core.Options;
@@ -143,14 +141,6 @@ public abstract class FileTreePanel exte
add(trees.add(treesView).setOutputMarkupId(true));
updateSizes();
add(sizes.add(new Label("homeSize", homeSize), new Label("publicSize", publicSize)).setOutputMarkupId(true));
- sizes.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(30)) {
- private static final long serialVersionUID = 1L;
-
- @Override
- protected void onPostProcessTarget(AjaxRequestTarget target) {
- updateSizes();
- }
- });
add(errorsDialog);
}
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java Thu Apr 28 09:09:49 2016
@@ -25,7 +25,7 @@ import org.apache.openmeetings.core.remo
import org.apache.openmeetings.core.session.SessionManager;
import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
import org.apache.openmeetings.db.entity.room.Client;
-import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.app.Application;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
@@ -51,17 +51,12 @@ public class RoomBroadcaster {
}
public static void sendUpdatedClient(org.apache.openmeetings.web.app.Client client) {
- org.apache.openmeetings.db.entity.room.Client rcl = getClient(client.getUid());
+ org.apache.openmeetings.db.entity.room.Client rcl = Application.get().updateClient(getClient(client.getUid()));
log.debug("----------- sendUpdatedClient ");
if (rcl == null) {
return;
}
- rcl.setIsSuperModerator(client.hasRight(Right.superModerator));
- rcl.setIsMod(client.hasRight(Right.moderator));
- rcl.setIsBroadcasting(client.hasRight(Right.audio));
- rcl.setCanVideo(client.hasRight(Right.video));
- rcl.setCanDraw(client.hasRight(Right.whiteBoard));
// Put the mod-flag to true for this client
getBean(SessionManager.class).updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java Thu Apr 28 09:09:49 2016
@@ -21,7 +21,7 @@ package org.apache.openmeetings.web.room
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import static org.apache.openmeetings.web.app.Application.addUserToRoom;
import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.Application.getRoomUsers;
+import static org.apache.openmeetings.web.app.Application.getRoomClients;
import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
import static org.apache.openmeetings.web.app.WebSession.getUserId;
@@ -31,6 +31,7 @@ import java.util.Calendar;
import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.user.GroupUserDao;
import org.apache.openmeetings.db.dao.user.UserDao;
import org.apache.openmeetings.db.entity.calendar.Appointment;
import org.apache.openmeetings.db.entity.calendar.MeetingMember;
@@ -134,7 +135,6 @@ public class RoomPanel extends BasePanel
@Override
protected void onInitialize() {
- getClient().setRoomId(r.getId());
super.onInitialize();
Component accessDenied = new WebMarkupContainer(ACCESS_DENIED_ID).setVisible(false);
Component eventDetail = new WebMarkupContainer(EVENT_DETAILS_ID).setVisible(false);
@@ -157,14 +157,14 @@ public class RoomPanel extends BasePanel
}
}
};
- room.add(wbArea.add(new SwfPanel("whiteboard", getClient())));
+ room.add(wbArea.add(new SwfPanel("whiteboard", r.getId(), getClient().getUid())));
room.add(aab);
room.add(sidebar = new RoomSidebar("sidebar", this));
room.add(activities = new ActivitiesPanel("activities", this));
add(roomClosed = new RedirectMessageDialog("room-closed", "1098", r.isClosed(), r.getRedirectURL()));
if (r.isClosed()) {
room.setVisible(false);
- } else if (getRoomUsers(r.getId()).size() >= r.getNumberOfPartizipants()) {
+ } else if (getRoomClients(r.getId()).size() >= r.getNumberOfPartizipants()) {
accessDenied = new ExpiredMessageDialog(ACCESS_DENIED_ID, getString("99"), menu);
room.setVisible(false);
} else {
@@ -334,19 +334,31 @@ public class RoomPanel extends BasePanel
protected void onBeforeRender() {
super.onBeforeRender();
if (room.isVisible()) {
- addUserToRoom(getClient().setRoomId(getRoom().getId()));
+ //We are setting initial rights here
+ Client c = getClient();
+ addUserToRoom(c.setRoomId(getRoom().getId()));
User u = getBean(UserDao.class).get(getUserId());
- //TODO do we need to check GroupModerationRights ????
if (AuthLevelUtil.hasAdminLevel(u.getRights())) {
- getClient().getRights().add(Client.Right.moderator);
+ //admin user get superModerator level, no-one can kick him/her
+ c.getRights().add(Right.superModerator);
} else {
- if (!r.isModerated() && 1 == getRoomUsers(r.getId()).size()) {
- getClient().getRights().add(Client.Right.moderator);
- } else if (r.isModerated()) {
- //TODO why do we need supermoderator ????
- for (RoomModerator rm : r.getModerators()) {
- if (getUserId() == rm.getUser().getId()) {
- getClient().getRights().add(Client.Right.moderator);
+ if (!r.isModerated() && 1 == getRoomClients(r.getId()).size()) {
+ //room is not moderated, first user is moderator!
+ c.getRights().add(Right.moderator);
+ }
+ //performing loop here to set possible 'superModerator' right
+ for (RoomModerator rm : r.getModerators()) {
+ if (getUserId().equals(rm.getUser().getId())) {
+ c.getRights().add(rm.isSuperModerator() ? Right.superModerator : Right.moderator);
+ break;
+ }
+ }
+ //no need to loop if client is moderator
+ if (!c.hasRight(Right.moderator) && !r.getRoomGroups().isEmpty()) {
+ for (RoomGroup rg : r.getRoomGroups()) {
+ GroupUser gu = getBean(GroupUserDao.class).getByGroupAndUser(rg.getGroup().getId(), getUserId());
+ if (gu.isModerator()) {
+ c.getRights().add(Right.moderator);
break;
}
}
@@ -359,7 +371,7 @@ public class RoomPanel extends BasePanel
WebSocketSettings settings = WebSocketSettings.Holder.get(Application.get());
IWebSocketConnectionRegistry reg = settings.getConnectionRegistry();
Executor executor = settings.getWebSocketPushMessageExecutor();
- for (Client c : getRoomUsers(m.getRoomId())) {
+ for (Client c : getRoomClients(m.getRoomId())) {
try {
final IWebSocketConnection wsConnection = reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId()));
if (wsConnection != null) {
@@ -381,8 +393,8 @@ public class RoomPanel extends BasePanel
}
public static boolean hasRight(long userId, long roomId, Client.Right r) {
- for (Client c : getRoomUsers(roomId)) {
- if (c.getUserId() == userId && c.hasRight(r)) {
+ for (Client c : getRoomClients(roomId)) {
+ if (c.getUserId().equals(userId) && c.hasRight(r)) {
return true;
}
}
@@ -391,7 +403,7 @@ public class RoomPanel extends BasePanel
public static void sendRoom(long roomId, String msg) {
IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry();
- for (Client c : getRoomUsers(roomId)) {
+ for (Client c : getRoomClients(roomId)) {
try {
reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId())).sendMessage(msg);
} catch (Exception e) {
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java Thu Apr 28 09:09:49 2016
@@ -35,7 +35,6 @@ import org.apache.openmeetings.db.dao.se
import org.apache.openmeetings.db.dao.server.SessiondataDao;
import org.apache.openmeetings.db.entity.server.SOAPLogin;
import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.web.app.Client;
import org.apache.openmeetings.web.app.WebSession;
import org.apache.openmeetings.web.common.BasePanel;
import org.apache.wicket.RuntimeConfigurationType;
@@ -67,8 +66,8 @@ public class SwfPanel extends BasePanel
this(id, new PageParameters());
}
- public SwfPanel(String id, Client c) {
- this(id, addServer(c.getRoomId(), true).add("uid", c.getUid()));
+ public SwfPanel(String id, Long roomId, String uid) {
+ this(id, addServer(roomId, true).add("uid", uid));
}
public SwfPanel(String id, PageParameters pp) {
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java Thu Apr 28 09:09:49 2016
@@ -319,8 +319,7 @@ public class RoomMenuPanel extends Panel
Client c = room.getClient();
removeUserFromRoom(c);
if (broadcast) {
- RoomMessage m = new RoomMessage(room.getRoom().getId(), c.getUserId(), RoomMessage.Type.roomExit);
- RoomPanel.broadcast(m);
+ RoomPanel.broadcast(new RoomMessage(room.getRoom().getId(), c.getUserId(), RoomMessage.Type.roomExit));
}
}
}
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java Thu Apr 28 09:09:49 2016
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web.room
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import static org.apache.openmeetings.web.app.Application.getOnlineClient;
-import static org.apache.openmeetings.web.app.Application.getRoomUsers;
+import static org.apache.openmeetings.web.app.Application.getRoomClients;
import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
@@ -177,8 +177,7 @@ public class RoomSidebar extends Panel {
private ListView<Client> updateUsers() {
//TODO do we need sort??
- users.getList().clear();
- users.getList().addAll(getRoomUsers(room.getRoom().getId()));
+ users.setList(getRoomClients(room.getRoom().getId()));
return users;
}
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java Thu Apr 28 09:09:49 2016
@@ -32,7 +32,7 @@ public class ModeratorRightIcon extends
@Override
protected boolean isClickable() {
- return super.isClickable() && !client.hasRight(Right.superModerator);
+ return (self && !hasRight()) || (!self && room.getClient().hasRight(Right.moderator) && !client.hasRight(Right.superModerator));
}
@Override
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java Thu Apr 28 09:09:49 2016
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web.user
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.Application.getRoomUsers;
+import static org.apache.openmeetings.web.app.Application.getRoomClients;
import static org.apache.openmeetings.web.app.Application.getUserRooms;
import static org.apache.openmeetings.web.app.Application.isUserInRoom;
import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
@@ -227,7 +227,7 @@ public class ChatPanel extends BasePanel
private static void sendRoom(ChatMessage m, String msg) {
IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry();
- for (Client c : getRoomUsers(m.getToRoom().getId())) {
+ for (Client c : getRoomClients(m.getToRoom().getId())) {
try {
if (!m.isNeedModeration() || (m.isNeedModeration() && c.hasRight(Client.Right.moderator))) {
IWebSocketConnection con = reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId()));
Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java Thu Apr 28 09:09:49 2016
@@ -32,6 +32,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
+import org.apache.openmeetings.IApplication;
import org.apache.openmeetings.core.data.conference.RoomManager;
import org.apache.openmeetings.core.data.whiteboard.WhiteboardManager;
import org.apache.openmeetings.core.remote.RecordingService;
@@ -186,7 +187,7 @@ public class ScopeApplicationAdapter ext
rcm.setSwfurl(swfURL);
rcm.setTcUrl(tcUrl);
rcm.setPublicSID(uid);
- rcm = sessionManager.add(rcm, null);
+ rcm = sessionManager.add(((IApplication)Application.get(OpenmeetingsVariables.wicketApplicationName)).updateClient(rcm), null);
if (rcm == null) {
log.warn("Failed to create Client on room connect");
return false;
@@ -1418,7 +1419,7 @@ public class ScopeApplicationAdapter ext
return roomClientList;
}
- public synchronized List<Client> getCurrentModeratorList() {
+ public List<Client> getCurrentModeratorList() {
try {
IConnection current = Red5.getConnectionLocal();
Client client = sessionManager.getClientByStreamId(current.getClient().getId(), null);
Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java Thu Apr 28 09:09:49 2016
@@ -80,12 +80,11 @@ public class SessionManager implements I
server = serverUtil.getCurrentServer();
}
c.setConnectedSince(new Date());
+ c.setRoomEnter(new Date());
if (Strings.isEmpty(c.getPublicSID())) {
c.setPublicSID(UUID.randomUUID().toString());
}
c.setServer(server);
- c.setIsMod(false);
- c.setCanDraw(false);
if (cache.containsKey(null, c.getStreamid())) {
log.error("Tried to add an existing Client " + c.getStreamid());
Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java Thu Apr 28 09:09:49 2016
@@ -20,6 +20,7 @@ package org.apache.openmeetings;
import javax.servlet.ServletContext;
+import org.apache.openmeetings.db.entity.room.Client;
import org.apache.openmeetings.db.entity.room.Invitation;
import org.apache.wicket.request.IExceptionMapper;
import org.apache.wicket.request.IRequestMapper;
@@ -34,6 +35,7 @@ public interface IApplication {
String getOmString(long id);
String getOmString(long id, long languageId);
String getOmString(String key, long languageId);
+ Client updateClient(Client rcl);
String getOmContactsLink();
String getOmInvitationLink(String baseUrl, Invitation i);
String urlForActivatePage(PageParameters pp);
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java Thu Apr 28 09:09:49 2016
@@ -49,6 +49,7 @@ import org.apache.openmeetings.db.entity
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.db.entity.user.User.Type;
import org.apache.openmeetings.util.InitializationContainer;
+import org.apache.openmeetings.web.app.Client.Right;
import org.apache.openmeetings.web.pages.ActivatePage;
import org.apache.openmeetings.web.pages.MainPage;
import org.apache.openmeetings.web.pages.NotInitedPage;
@@ -105,7 +106,7 @@ public class Application extends Authent
private static boolean isInstalled;
private static ConcurrentHashMap<String, Client> ONLINE_USERS = new ConcurrentHashMap<>();
private static ConcurrentHashMap<String, Client> INVALID_SESSIONS = new ConcurrentHashMap<>();
- private static ConcurrentHashMap<Long, Set<Client>> ROOMS = new ConcurrentHashMap<>();
+ private static ConcurrentHashMap<Long, Set<String>> ROOMS = new ConcurrentHashMap<>();
//additional maps for faster searching should be created
private DashboardContext dashboardContext;
private static Set<String> STRINGS_WITH_APP = new HashSet<>(); //FIXME need to be removed
@@ -222,6 +223,20 @@ public class Application extends Authent
}
}
+ @Override
+ public org.apache.openmeetings.db.entity.room.Client updateClient(org.apache.openmeetings.db.entity.room.Client rcl) {
+ Client client = getOnlineClient(rcl.getPublicSID());
+ if (rcl == null || client == null) {
+ return rcl;
+ }
+ rcl.setIsSuperModerator(client.hasRight(Right.superModerator));
+ rcl.setIsMod(client.hasRight(Right.moderator));
+ rcl.setIsBroadcasting(client.hasRight(Right.audio));
+ rcl.setCanVideo(client.hasRight(Right.video));
+ rcl.setCanDraw(client.hasRight(Right.whiteBoard));
+ return rcl;
+ }
+
public static Client getOnlineClient(String uid) {
return uid == null ? null : ONLINE_USERS.get(uid);
}
@@ -284,15 +299,15 @@ public class Application extends Authent
}
public static void removeInvalidSession(String sessionId) {
- if (INVALID_SESSIONS.containsKey(sessionId)){
+ if (sessionId != null){
INVALID_SESSIONS.remove(sessionId);
}
}
public static Client addUserToRoom(Client c) {
log.debug("Adding online room client: {}, room: {}", c.getUid(), c.getRoomId());
- ROOMS.putIfAbsent(c.getRoomId(), new ConcurrentHashSet<Client>());
- ROOMS.get(c.getRoomId()).add(c);
+ ROOMS.putIfAbsent(c.getRoomId(), new ConcurrentHashSet<String>());
+ ROOMS.get(c.getRoomId()).add(c.getUid());
return c;
}
@@ -305,27 +320,35 @@ public class Application extends Authent
public static Client removeUserFromRoom(Client c) {
log.debug("Removing online room client: {}, room: {}", c.getUid(), c.getRoomId());
if (c.getRoomId() != null) {
- Set<Client> clients = ROOMS.get(c.getRoomId());
+ Set<String> clients = ROOMS.get(c.getRoomId());
if (clients != null) {
- clients.remove(c);
- if (clients.isEmpty()) {
- ROOMS.remove(c.getRoomId());
- }
+ clients.remove(c.getUid());
c.setRoomId(null);
}
}
return c;
}
- public static Set<Client> getRoomUsers(long roomId) {
- return ROOMS.containsKey(roomId) ? ROOMS.get(roomId) : new HashSet<Client>();
+ public static List<Client> getRoomClients(long roomId) {
+ List<Client> clients = new ArrayList<>();
+ Set<String> uids = ROOMS.get(roomId);
+ if (uids != null) {
+ for (String uid : uids) {
+ Client c = getOnlineClient(uid);
+ if (c != null) {
+ clients.add(c);
+ }
+ }
+ }
+ return clients;
}
public static Set<Long> getUserRooms(long userId) {
- Set<Long> result = new HashSet<Long>();
- for (Entry<Long, Set<Client>> me : ROOMS.entrySet()) {
- for (Client c : me.getValue()) {
- if (c.getUserId() == userId) {
+ Set<Long> result = new HashSet<>();
+ for (Entry<Long, Set<String>> me : ROOMS.entrySet()) {
+ for (String uid : me.getValue()) {
+ Client c = getOnlineClient(uid);
+ if (c != null && c.getUserId().equals(userId)) {
result.add(me.getKey());
}
}
@@ -334,10 +357,10 @@ public class Application extends Authent
}
public static boolean isUserInRoom(long roomId, long userId) {
- if (ROOMS.containsKey(roomId)) {
- Set<Client> clients = ROOMS.get(roomId);
- for (Client c : clients) {
- if (c.getUserId() == userId) {
+ Set<String> clients = ROOMS.get(roomId);
+ if (clients != null) {
+ for (String uid : clients) {
+ if (getOnlineClient(uid).getUserId().equals(userId)) {
return true;
}
}
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java Thu Apr 28 09:09:49 2016
@@ -104,6 +104,9 @@ public class Client implements IDataProv
}
public boolean hasRight(Right right) {
+ if (Right.superModerator == right) {
+ return rights.contains(right);
+ }
return rights.contains(Right.superModerator) || rights.contains(Right.moderator) ? true : rights.contains(right);
}
@@ -170,4 +173,10 @@ public class Client implements IDataProv
return false;
return true;
}
+
+ @Override
+ public String toString() {
+ return "Client [uid=" + uid + ", sessionId=" + sessionId + ", pageId=" + pageId + ", userId=" + userId + ", roomId=" + roomId
+ + ", rights=" + rights + ", activities=" + activities + ", connectedSince=" + connectedSince + "]";
+ }
}
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java Thu Apr 28 09:09:49 2016
@@ -36,7 +36,6 @@ import org.apache.openmeetings.web.commo
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
@@ -47,7 +46,6 @@ import org.apache.wicket.markup.html.pan
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
-import org.apache.wicket.util.time.Duration;
import com.googlecode.wicket.jquery.core.JQueryBehavior;
import com.googlecode.wicket.jquery.core.Options;
@@ -143,14 +141,6 @@ public abstract class FileTreePanel exte
add(trees.add(treesView).setOutputMarkupId(true));
updateSizes();
add(sizes.add(new Label("homeSize", homeSize), new Label("publicSize", publicSize)).setOutputMarkupId(true));
- sizes.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(30)) {
- private static final long serialVersionUID = 1L;
-
- @Override
- protected void onPostProcessTarget(AjaxRequestTarget target) {
- updateSizes();
- }
- });
add(errorsDialog);
}
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java Thu Apr 28 09:09:49 2016
@@ -25,7 +25,7 @@ import org.apache.openmeetings.core.remo
import org.apache.openmeetings.core.session.SessionManager;
import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
import org.apache.openmeetings.db.entity.room.Client;
-import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.app.Application;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
@@ -51,17 +51,12 @@ public class RoomBroadcaster {
}
public static void sendUpdatedClient(org.apache.openmeetings.web.app.Client client) {
- org.apache.openmeetings.db.entity.room.Client rcl = getClient(client.getUid());
+ org.apache.openmeetings.db.entity.room.Client rcl = Application.get().updateClient(getClient(client.getUid()));
log.debug("----------- sendUpdatedClient ");
if (rcl == null) {
return;
}
- rcl.setIsSuperModerator(client.hasRight(Right.superModerator));
- rcl.setIsMod(client.hasRight(Right.moderator));
- rcl.setIsBroadcasting(client.hasRight(Right.audio));
- rcl.setCanVideo(client.hasRight(Right.video));
- rcl.setCanDraw(client.hasRight(Right.whiteBoard));
// Put the mod-flag to true for this client
getBean(SessionManager.class).updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java Thu Apr 28 09:09:49 2016
@@ -21,7 +21,7 @@ package org.apache.openmeetings.web.room
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import static org.apache.openmeetings.web.app.Application.addUserToRoom;
import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.Application.getRoomUsers;
+import static org.apache.openmeetings.web.app.Application.getRoomClients;
import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
import static org.apache.openmeetings.web.app.WebSession.getUserId;
@@ -31,6 +31,7 @@ import java.util.Calendar;
import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.user.GroupUserDao;
import org.apache.openmeetings.db.dao.user.UserDao;
import org.apache.openmeetings.db.entity.calendar.Appointment;
import org.apache.openmeetings.db.entity.calendar.MeetingMember;
@@ -150,7 +151,6 @@ public class RoomPanel extends BasePanel
@Override
protected void onInitialize() {
- getClient().setRoomId(r.getId());
super.onInitialize();
Component accessDenied = new WebMarkupContainer(ACCESS_DENIED_ID).setVisible(false);
Component eventDetail = new WebMarkupContainer(EVENT_DETAILS_ID).setVisible(false);
@@ -182,7 +182,7 @@ public class RoomPanel extends BasePanel
add(roomClosed = new RedirectMessageDialog("room-closed", "1098", r.isClosed(), r.getRedirectURL()));
if (r.isClosed()) {
room.setVisible(false);
- } else if (getRoomUsers(r.getId()).size() >= r.getNumberOfPartizipants()) {
+ } else if (getRoomClients(r.getId()).size() >= r.getNumberOfPartizipants()) {
accessDenied = new ExpiredMessageDialog(ACCESS_DENIED_ID, getString("99"), menu);
room.setVisible(false);
} else {
@@ -364,19 +364,31 @@ public class RoomPanel extends BasePanel
protected void onBeforeRender() {
super.onBeforeRender();
if (room.isVisible()) {
- addUserToRoom(getClient().setRoomId(getRoom().getId()));
+ //We are setting initial rights here
+ Client c = getClient();
+ addUserToRoom(c.setRoomId(getRoom().getId()));
User u = getBean(UserDao.class).get(getUserId());
- //TODO do we need to check GroupModerationRights ????
if (AuthLevelUtil.hasAdminLevel(u.getRights())) {
- getClient().getRights().add(Client.Right.moderator);
+ //admin user get superModerator level, no-one can kick him/her
+ c.getRights().add(Right.superModerator);
} else {
- if (!r.isModerated() && 1 == getRoomUsers(r.getId()).size()) {
- getClient().getRights().add(Client.Right.moderator);
- } else if (r.isModerated()) {
- //TODO why do we need supermoderator ????
- for (RoomModerator rm : r.getModerators()) {
- if (getUserId() == rm.getUser().getId()) {
- getClient().getRights().add(Client.Right.moderator);
+ if (!r.isModerated() && 1 == getRoomClients(r.getId()).size()) {
+ //room is not moderated, first user is moderator!
+ c.getRights().add(Right.moderator);
+ }
+ //performing loop here to set possible 'superModerator' right
+ for (RoomModerator rm : r.getModerators()) {
+ if (getUserId().equals(rm.getUser().getId())) {
+ c.getRights().add(rm.isSuperModerator() ? Right.superModerator : Right.moderator);
+ break;
+ }
+ }
+ //no need to loop if client is moderator
+ if (!c.hasRight(Right.moderator) && !r.getRoomGroups().isEmpty()) {
+ for (RoomGroup rg : r.getRoomGroups()) {
+ GroupUser gu = getBean(GroupUserDao.class).getByGroupAndUser(rg.getGroup().getId(), getUserId());
+ if (gu.isModerator()) {
+ c.getRights().add(Right.moderator);
break;
}
}
@@ -389,7 +401,7 @@ public class RoomPanel extends BasePanel
WebSocketSettings settings = WebSocketSettings.Holder.get(Application.get());
IWebSocketConnectionRegistry reg = settings.getConnectionRegistry();
Executor executor = settings.getWebSocketPushMessageExecutor();
- for (Client c : getRoomUsers(m.getRoomId())) {
+ for (Client c : getRoomClients(m.getRoomId())) {
try {
final IWebSocketConnection wsConnection = reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId()));
if (wsConnection != null) {
@@ -411,8 +423,8 @@ public class RoomPanel extends BasePanel
}
public static boolean hasRight(long userId, long roomId, Client.Right r) {
- for (Client c : getRoomUsers(roomId)) {
- if (c.getUserId() == userId && c.hasRight(r)) {
+ for (Client c : getRoomClients(roomId)) {
+ if (c.getUserId().equals(userId) && c.hasRight(r)) {
return true;
}
}
@@ -421,7 +433,7 @@ public class RoomPanel extends BasePanel
public static void sendRoom(long roomId, String msg) {
IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry();
- for (Client c : getRoomUsers(roomId)) {
+ for (Client c : getRoomClients(roomId)) {
try {
reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId())).sendMessage(msg);
} catch (Exception e) {
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java Thu Apr 28 09:09:49 2016
@@ -57,7 +57,7 @@ public class SwfPanel extends BasePanel
add(new Label("init", getInitFunction(pp)).setEscapeModelStrings(false));
}
- private ResourceReference newResourceReference() {
+ private static ResourceReference newResourceReference() {
return new JavaScriptResourceReference(SwfPanel.class, "swf-functions.js");
}
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java Thu Apr 28 09:09:49 2016
@@ -319,8 +319,7 @@ public class RoomMenuPanel extends Panel
Client c = room.getClient();
removeUserFromRoom(c);
if (broadcast) {
- RoomMessage m = new RoomMessage(room.getRoom().getId(), c.getUserId(), RoomMessage.Type.roomExit);
- RoomPanel.broadcast(m);
+ RoomPanel.broadcast(new RoomMessage(room.getRoom().getId(), c.getUserId(), RoomMessage.Type.roomExit));
}
}
}
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java Thu Apr 28 09:09:49 2016
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web.room
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import static org.apache.openmeetings.web.app.Application.getOnlineClient;
-import static org.apache.openmeetings.web.app.Application.getRoomUsers;
+import static org.apache.openmeetings.web.app.Application.getRoomClients;
import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
@@ -177,8 +177,7 @@ public class RoomSidebar extends Panel {
private ListView<Client> updateUsers() {
//TODO do we need sort??
- users.getList().clear();
- users.getList().addAll(getRoomUsers(room.getRoom().getId()));
+ users.setList(getRoomClients(room.getRoom().getId()));
return users;
}
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java Thu Apr 28 09:09:49 2016
@@ -32,7 +32,7 @@ public class ModeratorRightIcon extends
@Override
protected boolean isClickable() {
- return super.isClickable() && !client.hasRight(Right.superModerator);
+ return (self && !hasRight()) || (!self && room.getClient().hasRight(Right.moderator) && !client.hasRight(Right.superModerator));
}
@Override
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java?rev=1741397&r1=1741396&r2=1741397&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java Thu Apr 28 09:09:49 2016
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web.user
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.Application.getRoomUsers;
+import static org.apache.openmeetings.web.app.Application.getRoomClients;
import static org.apache.openmeetings.web.app.Application.getUserRooms;
import static org.apache.openmeetings.web.app.Application.isUserInRoom;
import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
@@ -227,7 +227,7 @@ public class ChatPanel extends BasePanel
private static void sendRoom(ChatMessage m, String msg) {
IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry();
- for (Client c : getRoomUsers(m.getToRoom().getId())) {
+ for (Client c : getRoomClients(m.getToRoom().getId())) {
try {
if (!m.isNeedModeration() || (m.isNeedModeration() && c.hasRight(Client.Right.moderator))) {
IWebSocketConnection con = reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId()));