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/11/18 07:13:49 UTC
svn commit: r1770322 - in /openmeetings/application:
branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/
branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/
branches/3.1.x/openmeetings-we...
Author: solomax
Date: Fri Nov 18 07:13:48 2016
New Revision: 1770322
URL: http://svn.apache.org/viewvc?rev=1770322&view=rev
Log:
[OPENMEETINGS-1462] admin can now delete chat messages via UI
Modified:
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java Fri Nov 18 07:13:48 2016
@@ -90,4 +90,16 @@ public class ChatDao {
public void delete(ChatMessage entity, long userId) {
// TODO Auto-generated method stub
}
+
+ public void deleteGlobal() {
+ em.createNamedQuery("deleteChatGlobal").executeUpdate();
+ }
+
+ public void deleteRoom(Long roomId) {
+ em.createNamedQuery("deleteChatRoom").setParameter("roomId", roomId).executeUpdate();
+ }
+
+ public void deleteUser(Long userId) {
+ em.createNamedQuery("deleteChatUser").setParameter("userId", userId).executeUpdate();
+ }
}
Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java Fri Nov 18 07:13:48 2016
@@ -44,12 +44,15 @@ import org.simpleframework.xml.Root;
@NamedQuery(name = "getChatMessageById", query = "SELECT c FROM ChatMessage c WHERE c.id = :id")
, @NamedQuery(name = "getChatMessages", query = "SELECT c FROM ChatMessage c ORDER BY c.id")
, @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.id IS NULL AND c.toRoom.id = :roomId"
+ , @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 "
+ "(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 "
+ "(c.fromUser.id = :userId OR c.toUser.id = :userId) AND c.sent > :date ORDER BY c.sent DESC")
+ , @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")
})
@Table(name = "chat")
@Root(name = "ChatMessage")
Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java Fri Nov 18 07:13:48 2016
@@ -259,6 +259,7 @@ public class WebSession extends Abstract
return false;
}
+ @Override
public Locale getLocale(User u) {
Long langId = u.getLanguageId();
Locale locale = langId == 3 ? Locale.GERMANY : LabelDao.languages.get(langId);
Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html Fri Nov 18 07:13:48 2016
@@ -9,7 +9,7 @@
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
-
+
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -29,7 +29,10 @@
<div id="chatTab-all" class="messageArea"></div>
</div>
<form wicket:id="sendForm">
- <div wicket:id="toolbarContainer"></div>
+ <div style="display: inline-block;" wicket:id="toolbarContainer"></div>
+ <div style="display: inline-block; float: right; margin-right: 10px;">
+ <div class="formCancelButton" wicket:id="ajax-cancel-button" wicket:message="title:442"></div>
+ </div>
<table style="width: 100%">
<tr>
<td><div id="chatMessage" wicket:id="chatMessage"></div></td>
Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java Fri Nov 18 07:13:48 2016
@@ -30,10 +30,13 @@ import static org.apache.openmeetings.we
import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
import static org.apache.openmeetings.web.util.ProfileImageResourceReference.getUrl;
import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
+import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
+import static org.apache.openmeetings.web.app.WebSession.getRights;
+import java.time.Duration;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Calendar;
import java.util.Date;
import java.util.List;
@@ -43,11 +46,12 @@ import org.apache.openmeetings.db.dao.ro
import org.apache.openmeetings.db.dao.user.UserDao;
import org.apache.openmeetings.db.entity.basic.ChatMessage;
import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.Right;
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.web.app.Application;
import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.WebSession;
import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -78,15 +82,15 @@ import com.googlecode.wicket.jquery.ui.p
@AuthorizeInstantiation({"Dashboard", "Room"})
public class ChatPanel extends BasePanel {
- private static final Logger log = Red5LoggerFactory.getLogger(ChatPanel.class, webAppRootKey);
private static final long serialVersionUID = 1L;
+ private static final Logger log = Red5LoggerFactory.getLogger(ChatPanel.class, webAppRootKey);
private static final String ID_TAB_PREFIX = "chatTab-";
private static final String ID_USER_PREFIX = ID_TAB_PREFIX + "u";
public static final String ID_ROOM_PREFIX = ID_TAB_PREFIX + "r";
private static final String ID_ALL = ID_TAB_PREFIX + "all";
private static final String PARAM_MSG_ID = "msgid";
private static final String PARAM_ROOM_ID = "roomid";
- private boolean showDashboardChat = getBean(ConfigurationDao.class).getConfValue(CONFIG_DASHBOARD_SHOW_CHAT, Integer.class, "1") == 1;
+ private boolean showDashboardChat = getBean(ConfigurationDao.class).getConfValue(CONFIG_DASHBOARD_SHOW_CHAT, Integer.class, "1") == 1;
private final AbstractDefaultAjaxBehavior acceptMessage = new AbstractDefaultAjaxBehavior() {
private static final long serialVersionUID = 1L;
@@ -109,7 +113,7 @@ public class ChatPanel extends BasePanel
}
}
};
-
+
private static JSONObject setScope(JSONObject o, ChatMessage m, long curUserId) {
String scope, scopeName;
if (m.getToUser() != null) {
@@ -126,11 +130,11 @@ public class ChatPanel extends BasePanel
}
return o.put("scope", scope).put("scopeName", scopeName);
}
-
+
public JSONObject getMessage(List<ChatMessage> list) throws JSONException {
return getMessage(getUserId(), list);
}
-
+
private JSONObject getMessage(long curUserId, List<ChatMessage> list) throws JSONException {
JSONArray arr = new JSONArray();
for (ChatMessage m : list) {
@@ -171,9 +175,7 @@ public class ChatPanel extends BasePanel
Room r = getBean(RoomDao.class).get(roomId);
list.addAll(dao.getRoom(roomId, 0, 30, !r.isChatModerated() || isModerator(getUserId(), roomId)));
}
- Calendar c = WebSession.getCalendar();
- c.add(Calendar.HOUR_OF_DAY, -1);
- list.addAll(dao.getUserRecent(getUserId(), c.getTime(), 0, 30));
+ list.addAll(dao.getUserRecent(getUserId(), Date.from(Instant.now().minus(Duration.ofHours(1L))), 0, 30));
if (list.size() > 0) {
StringBuilder sb = new StringBuilder();
sb.append("addChatMessage(").append(getMessage(list).toString()).append(");");
@@ -205,7 +207,7 @@ public class ChatPanel extends BasePanel
sb.append("});");
target.appendJavaScript(sb);
}
-
+
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
@@ -220,12 +222,12 @@ public class ChatPanel extends BasePanel
response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
}
}
-
+
private static void sendRoom(ChatMessage m, String msg) {
IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry();
for (Client c : getRoomClients(m.getToRoom().getId())) {
try {
- if (!m.isNeedModeration() || (m.isNeedModeration() && c.hasRight(Room.Right.moderator))) {
+ if (!m.isNeedModeration() || (m.isNeedModeration() && c.hasRight(Right.moderator))) {
IWebSocketConnection con = reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId()));
if (con != null) {
con.sendMessage(msg);
@@ -236,7 +238,7 @@ public class ChatPanel extends BasePanel
}
}
}
-
+
private class ChatForm extends Form<Void> {
private static final long serialVersionUID = 1L;
private final ChatToolbar toolbar = new ChatToolbar("toolbarContainer");
@@ -322,5 +324,49 @@ public class ChatPanel extends BasePanel
};
});
}
+
+ @Override
+ protected void onInitialize() {
+ super.onInitialize();
+ ConfirmableAjaxBorder delBtn = new ConfirmableAjaxBorder("ajax-cancel-button", getString("80"), getString("832"), this) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void onError(AjaxRequestTarget target, Form<?> form) {
+ }
+
+ @Override
+ protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+ ChatDao dao = getBean(ChatDao.class);
+ String scope = activeTab.getModelObject();
+ boolean clean = false;
+ try {
+ if (scope == null || ID_ALL.equals(scope)) {
+ scope = ID_ALL;
+ dao.deleteGlobal();
+ clean = true;
+ } else if (scope.startsWith(ID_ROOM_PREFIX)) {
+ Room r = getBean(RoomDao.class).get(Long.parseLong(scope.substring(ID_ROOM_PREFIX.length())));
+ if (r != null) {
+ dao.deleteRoom(r.getId());
+ clean = true;
+ }
+ } else if (scope.startsWith(ID_USER_PREFIX)) {
+ User u = getBean(UserDao.class).get(Long.parseLong(scope.substring(ID_USER_PREFIX.length())));
+ if (u != null) {
+ dao.deleteUser(u.getId());
+ clean = true;
+ }
+ }
+ } catch (Exception e) {
+ //no-op
+ }
+ if (clean) {
+ target.appendJavaScript("$('#" + scope + "').html('')");
+ }
+ }
+ };
+ add(delBtn.setVisible(hasAdminLevel(getRights())));
+ }
}
}
Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java Fri Nov 18 07:13:48 2016
@@ -90,4 +90,16 @@ public class ChatDao {
public void delete(ChatMessage entity, long userId) {
// TODO Auto-generated method stub
}
+
+ public void deleteGlobal() {
+ em.createNamedQuery("deleteChatGlobal").executeUpdate();
+ }
+
+ public void deleteRoom(Long roomId) {
+ em.createNamedQuery("deleteChatRoom").setParameter("roomId", roomId).executeUpdate();
+ }
+
+ public void deleteUser(Long userId) {
+ em.createNamedQuery("deleteChatUser").setParameter("userId", userId).executeUpdate();
+ }
}
Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java Fri Nov 18 07:13:48 2016
@@ -44,12 +44,15 @@ import org.simpleframework.xml.Root;
@NamedQuery(name = "getChatMessageById", query = "SELECT c FROM ChatMessage c WHERE c.id = :id")
, @NamedQuery(name = "getChatMessages", query = "SELECT c FROM ChatMessage c ORDER BY c.id")
, @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.id IS NULL AND c.toRoom.id = :roomId"
+ , @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 "
+ "(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 "
+ "(c.fromUser.id = :userId OR c.toUser.id = :userId) AND c.sent > :date ORDER BY c.sent DESC")
+ , @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")
})
@Table(name = "chat")
@Root(name = "ChatMessage")
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java Fri Nov 18 07:13:48 2016
@@ -265,6 +265,7 @@ public class WebSession extends Abstract
return false;
}
+ @Override
public Locale getLocale(User u) {
Long langId = u.getLanguageId();
Locale locale = langId == 3 ? Locale.GERMANY : LabelDao.languages.get(langId);
Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html Fri Nov 18 07:13:48 2016
@@ -9,7 +9,7 @@
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
-
+
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -29,7 +29,10 @@
<div id="chatTab-all" class="messageArea"></div>
</div>
<form wicket:id="sendForm">
- <div wicket:id="toolbarContainer"></div>
+ <div style="display: inline-block;" wicket:id="toolbarContainer"></div>
+ <div style="display: inline-block; float: right; margin-right: 10px;">
+ <div class="formCancelButton" wicket:id="ajax-cancel-button" wicket:message="title:442"></div>
+ </div>
<table style="width: 100%">
<tr>
<td><div id="chatMessage" wicket:id="chatMessage"></div></td>
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=1770322&r1=1770321&r2=1770322&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 Fri Nov 18 07:13:48 2016
@@ -30,10 +30,13 @@ import static org.apache.openmeetings.we
import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
import static org.apache.openmeetings.web.util.ProfileImageResourceReference.getUrl;
import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
+import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
+import static org.apache.openmeetings.web.app.WebSession.getRights;
+import java.time.Duration;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Calendar;
import java.util.Date;
import java.util.List;
@@ -48,8 +51,8 @@ import org.apache.openmeetings.db.entity
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.web.app.Application;
import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.WebSession;
import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -81,15 +84,15 @@ import com.googlecode.wicket.jquery.ui.p
@AuthorizeInstantiation({"Dashboard", "Room"})
public class ChatPanel extends BasePanel {
- private static final Logger log = Red5LoggerFactory.getLogger(ChatPanel.class, webAppRootKey);
private static final long serialVersionUID = 1L;
+ private static final Logger log = Red5LoggerFactory.getLogger(ChatPanel.class, webAppRootKey);
private static final String ID_TAB_PREFIX = "chatTab-";
private static final String ID_USER_PREFIX = ID_TAB_PREFIX + "u";
public static final String ID_ROOM_PREFIX = ID_TAB_PREFIX + "r";
private static final String ID_ALL = ID_TAB_PREFIX + "all";
private static final String PARAM_MSG_ID = "msgid";
private static final String PARAM_ROOM_ID = "roomid";
- private boolean showDashboardChat = getBean(ConfigurationDao.class).getConfValue(CONFIG_DASHBOARD_SHOW_CHAT, Integer.class, "1") == 1;
+ private boolean showDashboardChat = getBean(ConfigurationDao.class).getConfValue(CONFIG_DASHBOARD_SHOW_CHAT, Integer.class, "1") == 1;
private final AbstractDefaultAjaxBehavior acceptMessage = new AbstractDefaultAjaxBehavior() {
private static final long serialVersionUID = 1L;
@@ -174,9 +177,7 @@ public class ChatPanel extends BasePanel
Room r = getBean(RoomDao.class).get(roomId);
list.addAll(dao.getRoom(roomId, 0, 30, !r.isChatModerated() || isModerator(getUserId(), roomId)));
}
- Calendar c = WebSession.getCalendar();
- c.add(Calendar.HOUR_OF_DAY, -1);
- list.addAll(dao.getUserRecent(getUserId(), c.getTime(), 0, 30));
+ list.addAll(dao.getUserRecent(getUserId(), Date.from(Instant.now().minus(Duration.ofHours(1L))), 0, 30));
if (list.size() > 0) {
StringBuilder sb = new StringBuilder();
sb.append("addChatMessage(").append(getMessage(list).toString()).append(");");
@@ -351,5 +352,49 @@ public class ChatPanel extends BasePanel
};
});
}
+
+ @Override
+ protected void onInitialize() {
+ super.onInitialize();
+ ConfirmableAjaxBorder delBtn = new ConfirmableAjaxBorder("ajax-cancel-button", getString("80"), getString("832"), this) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void onError(AjaxRequestTarget target, Form<?> form) {
+ }
+
+ @Override
+ protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+ ChatDao dao = getBean(ChatDao.class);
+ String scope = activeTab.getModelObject();
+ boolean clean = false;
+ try {
+ if (scope == null || ID_ALL.equals(scope)) {
+ scope = ID_ALL;
+ dao.deleteGlobal();
+ clean = true;
+ } else if (scope.startsWith(ID_ROOM_PREFIX)) {
+ Room r = getBean(RoomDao.class).get(Long.parseLong(scope.substring(ID_ROOM_PREFIX.length())));
+ if (r != null) {
+ dao.deleteRoom(r.getId());
+ clean = true;
+ }
+ } else if (scope.startsWith(ID_USER_PREFIX)) {
+ User u = getBean(UserDao.class).get(Long.parseLong(scope.substring(ID_USER_PREFIX.length())));
+ if (u != null) {
+ dao.deleteUser(u.getId());
+ clean = true;
+ }
+ }
+ } catch (Exception e) {
+ //no-op
+ }
+ if (clean) {
+ target.appendJavaScript("$('#" + scope + "').html('')");
+ }
+ }
+ };
+ add(delBtn.setVisible(hasAdminLevel(getRights())));
+ }
}
}
Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java Fri Nov 18 07:13:48 2016
@@ -90,4 +90,16 @@ public class ChatDao {
public void delete(ChatMessage entity, long userId) {
// TODO Auto-generated method stub
}
+
+ public void deleteGlobal() {
+ em.createNamedQuery("deleteChatGlobal").executeUpdate();
+ }
+
+ public void deleteRoom(Long roomId) {
+ em.createNamedQuery("deleteChatRoom").setParameter("roomId", roomId).executeUpdate();
+ }
+
+ public void deleteUser(Long userId) {
+ em.createNamedQuery("deleteChatUser").setParameter("userId", userId).executeUpdate();
+ }
}
Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java Fri Nov 18 07:13:48 2016
@@ -44,12 +44,15 @@ import org.simpleframework.xml.Root;
@NamedQuery(name = "getChatMessageById", query = "SELECT c FROM ChatMessage c WHERE c.id = :id")
, @NamedQuery(name = "getChatMessages", query = "SELECT c FROM ChatMessage c ORDER BY c.id")
, @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.id IS NULL AND c.toRoom.id = :roomId"
+ , @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 "
+ "(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 "
+ "(c.fromUser.id = :userId OR c.toUser.id = :userId) AND c.sent > :date ORDER BY c.sent DESC")
+ , @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")
})
@Table(name = "chat")
@Root(name = "ChatMessage")
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java Fri Nov 18 07:13:48 2016
@@ -265,6 +265,7 @@ public class WebSession extends Abstract
return false;
}
+ @Override
public Locale getLocale(User u) {
Long langId = u.getLanguageId();
Locale locale = langId == 3 ? Locale.GERMANY : LabelDao.languages.get(langId);
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html?rev=1770322&r1=1770321&r2=1770322&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html Fri Nov 18 07:13:48 2016
@@ -9,7 +9,7 @@
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
-
+
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -29,7 +29,10 @@
<div id="chatTab-all" class="messageArea"></div>
</div>
<form wicket:id="sendForm">
- <div wicket:id="toolbarContainer"></div>
+ <div style="display: inline-block;" wicket:id="toolbarContainer"></div>
+ <div style="display: inline-block; float: right; margin-right: 10px;">
+ <div class="formCancelButton" wicket:id="ajax-cancel-button" wicket:message="title:442"></div>
+ </div>
<table style="width: 100%">
<tr>
<td><div id="chatMessage" wicket:id="chatMessage"></div></td>
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=1770322&r1=1770321&r2=1770322&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 Fri Nov 18 07:13:48 2016
@@ -30,10 +30,13 @@ import static org.apache.openmeetings.we
import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
import static org.apache.openmeetings.web.util.ProfileImageResourceReference.getUrl;
import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
+import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
+import static org.apache.openmeetings.web.app.WebSession.getRights;
+import java.time.Duration;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Calendar;
import java.util.Date;
import java.util.List;
@@ -48,8 +51,8 @@ import org.apache.openmeetings.db.entity
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.web.app.Application;
import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.WebSession;
import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -81,15 +84,15 @@ import com.googlecode.wicket.jquery.ui.p
@AuthorizeInstantiation({"Dashboard", "Room"})
public class ChatPanel extends BasePanel {
- private static final Logger log = Red5LoggerFactory.getLogger(ChatPanel.class, webAppRootKey);
private static final long serialVersionUID = 1L;
+ private static final Logger log = Red5LoggerFactory.getLogger(ChatPanel.class, webAppRootKey);
private static final String ID_TAB_PREFIX = "chatTab-";
private static final String ID_USER_PREFIX = ID_TAB_PREFIX + "u";
public static final String ID_ROOM_PREFIX = ID_TAB_PREFIX + "r";
private static final String ID_ALL = ID_TAB_PREFIX + "all";
private static final String PARAM_MSG_ID = "msgid";
private static final String PARAM_ROOM_ID = "roomid";
- private boolean showDashboardChat = getBean(ConfigurationDao.class).getConfValue(CONFIG_DASHBOARD_SHOW_CHAT, Integer.class, "1") == 1;
+ private boolean showDashboardChat = getBean(ConfigurationDao.class).getConfValue(CONFIG_DASHBOARD_SHOW_CHAT, Integer.class, "1") == 1;
private final AbstractDefaultAjaxBehavior acceptMessage = new AbstractDefaultAjaxBehavior() {
private static final long serialVersionUID = 1L;
@@ -174,9 +177,7 @@ public class ChatPanel extends BasePanel
Room r = getBean(RoomDao.class).get(roomId);
list.addAll(dao.getRoom(roomId, 0, 30, !r.isChatModerated() || isModerator(getUserId(), roomId)));
}
- Calendar c = WebSession.getCalendar();
- c.add(Calendar.HOUR_OF_DAY, -1);
- list.addAll(dao.getUserRecent(getUserId(), c.getTime(), 0, 30));
+ list.addAll(dao.getUserRecent(getUserId(), Date.from(Instant.now().minus(Duration.ofHours(1L))), 0, 30));
if (list.size() > 0) {
StringBuilder sb = new StringBuilder();
sb.append("addChatMessage(").append(getMessage(list).toString()).append(");");
@@ -351,5 +352,49 @@ public class ChatPanel extends BasePanel
};
});
}
+
+ @Override
+ protected void onInitialize() {
+ super.onInitialize();
+ ConfirmableAjaxBorder delBtn = new ConfirmableAjaxBorder("ajax-cancel-button", getString("80"), getString("832"), this) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void onError(AjaxRequestTarget target, Form<?> form) {
+ }
+
+ @Override
+ protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+ ChatDao dao = getBean(ChatDao.class);
+ String scope = activeTab.getModelObject();
+ boolean clean = false;
+ try {
+ if (scope == null || ID_ALL.equals(scope)) {
+ scope = ID_ALL;
+ dao.deleteGlobal();
+ clean = true;
+ } else if (scope.startsWith(ID_ROOM_PREFIX)) {
+ Room r = getBean(RoomDao.class).get(Long.parseLong(scope.substring(ID_ROOM_PREFIX.length())));
+ if (r != null) {
+ dao.deleteRoom(r.getId());
+ clean = true;
+ }
+ } else if (scope.startsWith(ID_USER_PREFIX)) {
+ User u = getBean(UserDao.class).get(Long.parseLong(scope.substring(ID_USER_PREFIX.length())));
+ if (u != null) {
+ dao.deleteUser(u.getId());
+ clean = true;
+ }
+ }
+ } catch (Exception e) {
+ //no-op
+ }
+ if (clean) {
+ target.appendJavaScript("$('#" + scope + "').html('')");
+ }
+ }
+ };
+ add(delBtn.setVisible(hasAdminLevel(getRights())));
+ }
}
}