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 2019/12/18 15:12:26 UTC
[openmeetings] branch master updated: [OPENMEETINGS-2010] private
chats are being closed on room exit
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push:
new 6716a9d [OPENMEETINGS-2010] private chats are being closed on room exit
6716a9d is described below
commit 6716a9dcfd53451e4056ce0b552fa270d82bb7d3
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Wed Dec 18 22:12:13 2019 +0700
[OPENMEETINGS-2010] private chats are being closed on room exit
---
.../apache/openmeetings/db/dao/basic/ChatDao.java | 8 ++++++
.../openmeetings/db/entity/basic/ChatMessage.java | 29 ++++++++++++++++++++--
.../apache/openmeetings/web/room/RoomPanel.java | 2 ++
.../openmeetings/web/room/menu/RoomMenuPanel.java | 5 ++++
.../apache/openmeetings/web/user/chat/raw-chat.js | 6 +++++
5 files changed, 48 insertions(+), 2 deletions(-)
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
index c0620ab..2624887 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
@@ -70,10 +70,18 @@ public class ChatDao {
public List<ChatMessage> getUserRecent(long userId, Date date, long start, long count) {
return setLimits(em.createNamedQuery("getChatMessagesByUserTime", ChatMessage.class)
.setParameter(PARAM_USER_ID, userId)
+ .setParameter("status", ChatMessage.Status.CLOSED)
.setParameter("date", date)
, start, count).getResultList();
}
+ public void closeMessages(long userId) {
+ em.createNamedQuery("chatCloseMessagesByUser")
+ .setParameter(PARAM_USER_ID, userId)
+ .setParameter("status", ChatMessage.Status.CLOSED)
+ .executeUpdate();
+ }
+
public ChatMessage update(ChatMessage entity) {
return update(entity, null);
}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
index d1b1073..db801d0 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
@@ -22,6 +22,8 @@ import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@@ -44,10 +46,15 @@ import org.simpleframework.xml.Root;
@NamedQuery(name = "getGlobalChatMessages", query = "SELECT c FROM ChatMessage c WHERE c.toUser IS NULL AND c.toRoom IS NULL ORDER BY c.sent DESC")
@NamedQuery(name = "getChatMessagesByRoom", query = "SELECT c FROM ChatMessage c WHERE c.toUser IS NULL AND c.toRoom.id = :roomId"
+ " AND (true = :all OR (false = :all AND c.needModeration = false)) ORDER BY c.sent DESC")
-@NamedQuery(name = "getChatMessagesByUser", query = "SELECT c FROM ChatMessage c WHERE c.toUser IS NOT NULL AND c.toRoom IS NULL AND "
+@NamedQuery(name = "getChatMessagesByUser", query = "SELECT c FROM ChatMessage c WHERE "
+ + "c.toUser IS NOT NULL AND c.toRoom IS NULL AND "
+ "(c.fromUser.id = :userId OR c.toUser.id = :userId) ORDER BY c.sent DESC")
-@NamedQuery(name = "getChatMessagesByUserTime", query = "SELECT c FROM ChatMessage c WHERE c.toUser IS NOT NULL AND c.toRoom IS NULL AND "
+@NamedQuery(name = "getChatMessagesByUserTime", query = "SELECT c FROM ChatMessage c WHERE "
+ + "c.toUser IS NOT NULL AND c.toRoom IS NULL AND c.status <> :status AND "
+ "(c.fromUser.id = :userId OR c.toUser.id = :userId) AND c.sent > :date ORDER BY c.sent DESC")
+@NamedQuery(name = "chatCloseMessagesByUser", query = "UPDATE ChatMessage c SET c.status = :status WHERE "
+ + "c.toUser IS NOT NULL AND c.toRoom IS NULL AND c.status <> :status AND "
+ + "(c.fromUser.id = :userId OR c.toUser.id = :userId)")
@NamedQuery(name = "deleteChatGlobal", query = "DELETE FROM ChatMessage c WHERE c.toUser IS NULL AND c.toRoom IS NULL")
@NamedQuery(name = "deleteChatRoom", query = "DELETE FROM ChatMessage c WHERE c.toUser IS NULL AND c.toRoom.id = :roomId")
@NamedQuery(name = "deleteChatUser", query = "DELETE FROM ChatMessage c WHERE c.toRoom IS NULL AND c.toUser.id = :userId")
@@ -57,6 +64,11 @@ import org.simpleframework.xml.Root;
public class ChatMessage implements IDataProviderEntity {
private static final long serialVersionUID = 1L;
+ public enum Status {
+ OPEN
+ , CLOSED
+ }
+
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@@ -98,6 +110,11 @@ public class ChatMessage implements IDataProviderEntity {
@Element(name = "from_name", data = true, required = false)
private String fromName; // this is required for users with no first/last name specified
+ @Column(name = "status")
+ @Element(data = true, required = false)
+ @Enumerated(EnumType.STRING)
+ private Status status;
+
@Override
public Long getId() {
return id;
@@ -163,4 +180,12 @@ public class ChatMessage implements IDataProviderEntity {
public void setFromName(String fromName) {
this.fromName = fromName;
}
+
+ public Status getStatus() {
+ return status;
+ }
+
+ public void setStatus(Status status) {
+ this.status = status;
+ }
}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index 17884d2..81e174f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -19,6 +19,7 @@
package org.apache.openmeetings.web.room;
import static java.time.Duration.ZERO;
+import static org.apache.openmeetings.core.util.ChatWebSocketHelper.ID_USER_PREFIX;
import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
import static org.apache.openmeetings.web.app.WebSession.getUserId;
import static org.apache.openmeetings.web.room.wb.InterviewWbPanel.INTERVIEWWB_JS_REFERENCE;
@@ -467,6 +468,7 @@ public class RoomPanel extends BasePanel {
case roomExit:
sidebar.update(handler);
sidebar.addActivity(new Activity(m, Activity.Type.roomExit), handler);
+ handler.appendJavaScript("Chat.removeTab('" + ID_USER_PREFIX + m.getUserId() + "');");
break;
case roomClosed:
handler.add(room.setVisible(false));
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
index 64be71f..28e6447 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
@@ -22,6 +22,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_TITLE;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL;
import static org.apache.openmeetings.util.OpenmeetingsVariables.getBaseUrl;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
import static org.apache.openmeetings.web.util.GroupLogoResourceReference.getUrl;
import static org.apache.openmeetings.web.util.OmUrlFragment.ROOMS_PUBLIC;
@@ -33,6 +34,7 @@ import org.apache.commons.lang3.time.FastDateFormat;
import org.apache.openmeetings.core.remote.KurentoHandler;
import org.apache.openmeetings.core.remote.StreamProcessor;
import org.apache.openmeetings.core.util.WebSocketHelper;
+import org.apache.openmeetings.db.dao.basic.ChatDao;
import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
import org.apache.openmeetings.db.entity.basic.Client;
import org.apache.openmeetings.db.entity.room.Room;
@@ -104,6 +106,8 @@ public class RoomMenuPanel extends Panel {
@SpringBean
private ConfigurationDao cfgDao;
@SpringBean
+ private ChatDao chatDao;
+ @SpringBean
private KurentoHandler kHandler;
@SpringBean
private StreamProcessor streamProcessor;
@@ -137,6 +141,7 @@ public class RoomMenuPanel extends Panel {
@Override
public void onClick(AjaxRequestTarget target) {
+ chatDao.closeMessages(getUserId());
exit(target);
}
};
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js
index 5cc09cc..0b0697d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js
@@ -362,6 +362,12 @@ var Chat = function() {
}
function _setRoomMode(_mode) {
roomMode = _mode;
+ if (isInited() && !roomMode) {
+ // remove all private chats on room exit
+ $('li[aria-controls^="chatTab-u"]').remove();
+ $('div[id^="chatTab-u"]').remove();
+ tabs.tabs("refresh");
+ }
_reinit({userId: userId, all: allPrefix, room: roomPrefix, sendOnEnter: sendOn === SEND_ENTER});
}
function _scrollDown(area) {