Author: solomax
Date: Sun Feb 5 15:46:17 2017
New Revision: 1781776
URL: http://svn.apache.org/viewvc?rev=1781776&view=rev
Log:
[OPENMEETINGS-1548] additional fix on emotions, code clean-up
Added:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.html
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/images/folder_explore.png
(with props)
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/images/group.png
(with props)
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.html
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/images/folder_explore.png
(with props)
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/images/group.png
(with props)
Modified:
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/interviewConferenceRoom.lzx
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/library.lzx
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/restrictedConferenceRoom.lzx
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.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/user/chat/ChatPanel.html
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.js
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.min.js
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/chat.css
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/theme.css
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.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/user/chat/ChatPanel.html
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.js
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.min.js
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/chat.css
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/theme.css
Modified:
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
Sun Feb 5 15:46:17 2017
@@ -92,7 +92,7 @@ public class Room implements IDataProvid
public static final int CONFERENCE_TYPE_ID = 1;
public static final int RESTRICTED_TYPE_ID = 3;
public static final int INTERVIEW_TYPE_ID = 4;
-
+
public enum Right {
superModerator
, moderator
@@ -104,7 +104,7 @@ public class Room implements IDataProvid
, mute
, exclusive
}
-
+
@XmlType(namespace="org.apache.openmeetings.room.element")
public enum RoomElement {
TopBar
@@ -116,7 +116,7 @@ public class Room implements IDataProvid
, Whiteboard
, MicrophoneStatus
}
-
+
public enum Type {
conference(CONFERENCE_TYPE_ID)
//, audience(2)
@@ -124,24 +124,24 @@ public class Room implements IDataProvid
, interview(INTERVIEW_TYPE_ID);
//, custom(5)
private int id;
-
+
Type() {} //default;
Type(int id) {
this.id = id;
}
-
+
public int getId() {
return id;
}
-
+
public static Type get(Long type) {
return get(type == null ? 1 : type.intValue());
}
-
+
public static Type get(Integer type) {
return get(type == null ? 1 : type.intValue());
}
-
+
public static Type get(int type) {
Type rt = Type.conference;
switch (type) {
@@ -157,7 +157,7 @@ public class Room implements IDataProvid
return rt;
}
}
-
+
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@@ -230,7 +230,7 @@ public class Room implements IDataProvid
@Column(name = "is_audio_only", nullable = false)
@Element(name = "isAudioOnly", data = true, required = false)
private boolean audioOnly;
-
+
@Column(name = "is_closed", nullable = false)
@Element(data = true, required = false)
private boolean closed;
@@ -287,15 +287,15 @@ public class Room implements IDataProvid
@Column(name = "sip_enabled", nullable = false)
@Element(data = true, required = false)
private boolean sipEnabled;
-
+
@Column(name = "confno")
@Element(data = true, required = false)
private String confno;
-
+
@Column(name = "pin")
@Element(data = true, required = false)
private String pin;
-
+
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "room_id", insertable = true, updatable = true)
@ElementDependent
@@ -520,7 +520,7 @@ public class Room implements IDataProvid
public boolean isHidden(RoomElement e) {
return hiddenElements != null && hiddenElements.contains(e);
}
-
+
public boolean hide(RoomElement e) {
if (hiddenElements == null) {
hiddenElements = new HashSet<>();
Modified:
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/interviewConferenceRoom.lzx
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/interviewConferenceRoom.lzx?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/interviewConferenceRoom.lzx
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/interviewConferenceRoom.lzx
Sun Feb 5 15:46:17 2017
@@ -7,16 +7,16 @@
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
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
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-
+
-->
<library>
@@ -24,18 +24,17 @@
<handler name="oninit">
canvas.currentRoomObj.hideScreenSharing = true;
</handler>
-
- <!--
- User Panel and Participants List
- -->
- <baseRoomSidebar name="_sidePanel"/>
-
- <!--
- Whiteboard in Interview Room Type those are the Video Pods
- -->
- <interviewWhiteboard name="_whiteboardInterview" x="${
parent._sidePanel.width }"
- width="${ canvas.width - parent._sidePanel.width }" />
-
+
+ <!--
+ User Panel and Participants List
+ -->
+ <baseRoomSidebar name="_sidePanel"/>
+
+ <!--
+ Whiteboard in Interview Room Type those are the Video Pods
+ -->
+ <interviewWhiteboard name="_whiteboardInterview" x="${
parent._sidePanel.width }"
+ width="${ canvas.width - parent._sidePanel.width }" />
</class>
</library>
Modified:
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/library.lzx
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/library.lzx?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/library.lzx
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/library.lzx
Sun Feb 5 15:46:17 2017
@@ -7,34 +7,33 @@
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
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
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-
+
-->
<library>
-
<resource name="userstatus_multiframe_rsc">
<frame src="resources/bullet_ball_glass_green.png"/> <!-- user
-->
<frame src="resources/bullet_ball_glass_yellow.png"/> <!-- mod
-->
<frame src="resources/bullet_ball_glass_red.png"/> <!--
whiteboard allow -->
</resource>
-
+
<!-- FamFam Icon Set -->
<resource name="screen_allow_rsc" src="resources/monitor_add.png" />
<!-- FamFam Icon Set -->
- <resource name="screen_deny_rsc" src="resources/monitor_delete.png" />
- <!-- FamFam Icon Set -->
- <resource name="remote_allow_rsc" src="resources/mouse_add.png" />
- <!-- FamFam Icon Set -->
- <resource name="remote_deny_rsc" src="resources/mouse_delete.png" />
-
+ <resource name="screen_deny_rsc" src="resources/monitor_delete.png" />
+ <!-- FamFam Icon Set -->
+ <resource name="remote_allow_rsc" src="resources/mouse_add.png" />
+ <!-- FamFam Icon Set -->
+ <resource name="remote_deny_rsc" src="resources/mouse_delete.png" />
+
<!-- FamFam Icon Set -->
<resource name="a_allow_rsc" src="resources/micro_small_add.png" />
<!-- FamFam Icon Set -->
@@ -43,30 +42,30 @@
<resource name="av_allow_rsc" src="resources/audio_and_video.png" />
<!-- FamFam Icon Set -->
<resource name="av_deny_rsc" src="resources/audio_and_video_no.png" />
-
+
<!-- APL author sebawagner -->
<resource name="kick_user_rsc" src="resources/cancel_icon.png" />
-
+
<!-- APL author sebawagner -->
<resource name="mute_micro_btn_rsc">
- <frame src="resources/mute_micro.png" />
- <frame src="resources/mute_micro_red.png" />
- </resource>
-
- <!-- APL author sebawagner -->
- <resource name="mute_btn_rsc" src="resources/mute_micro.png" />
- <!-- APL author sebawagner -->
- <resource name="unmute_btn_rsc" src="resources/mute_micro_red.png" />
-
+ <frame src="resources/mute_micro.png" />
+ <frame src="resources/mute_micro_red.png" />
+ </resource>
+
+ <!-- APL author sebawagner -->
+ <resource name="mute_btn_rsc" src="resources/mute_micro.png" />
+ <!-- APL author sebawagner -->
+ <resource name="unmute_btn_rsc" src="resources/mute_micro_red.png" />
+
<!-- APL author sebawagner -->
<resource name="sidebar_tab_btn">
<frame src="resources/sidebar_close.png" />
<frame src="resources/sidebar_open.png" />
</resource>
-
+
<include href="roomSidebar/" />
- <include href="baseConferenceRoom.lzx" />
- <include href="flexibleConferenceRoom.lzx" />
- <include href="restrictedConferenceRoom.lzx" />
- <include href="interviewConferenceRoom.lzx" />
+ <include href="baseConferenceRoom.lzx" />
+ <include href="flexibleConferenceRoom.lzx" />
+ <include href="restrictedConferenceRoom.lzx" />
+ <include href="interviewConferenceRoom.lzx" />
</library>
Modified:
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/restrictedConferenceRoom.lzx
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/restrictedConferenceRoom.lzx?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/restrictedConferenceRoom.lzx
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/restrictedConferenceRoom.lzx
Sun Feb 5 15:46:17 2017
@@ -7,36 +7,35 @@
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
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
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-
+
-->
<library>
<class name="restrictedConferenceRoom" extends="baseConferenceRoom">
- <baseRoomSidebar name="_sidePanel"/>
-
- <view name="_videoviewcontent_hideWhiteboard" y="0" x="${
parent._sidePanel.width }"
- width="${canvas.width-parent._sidePanel.width}"
height="${canvas.height- 5}" clip="true"
+ <baseRoomSidebar name="_sidePanel"/>
+
+ <view name="_videoviewcontent_hideWhiteboard" y="0" x="${
parent._sidePanel.width }"
+ width="${canvas.width-parent._sidePanel.width}"
height="${canvas.height- 5}" clip="true"
visible="${ !canvas.currentRoomObj.hideWhiteboard }">
- <view name="_inn" width="${parent.width-10}">
+ <view name="_inn" width="${parent.width-10}">
<wrappinglayout axis="x" spacing="10"/>
</view>
<om_vscrollbar name="_attenddeescrollbar"
visibility="visible"></om_vscrollbar>
</view>
-
- <fixedFileExplorerWhiteboardPanel name="_whiteboard" labelid="615"
- y="0" x="${ parent._sidePanel.width }"
- width="${ canvas.width - parent._sidePanel.width }"
- height="${ canvas.height }" />
-
+
+ <fixedFileExplorerWhiteboardPanel name="_whiteboard" labelid="615"
+ y="0" x="${ parent._sidePanel.width }"
+ width="${ canvas.width - parent._sidePanel.width }"
+ height="${ canvas.height }" />
</class>
</library>
Modified:
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
Sun Feb 5 15:46:17 2017
@@ -111,13 +111,13 @@ public class ImportInitvalues {
private RoomDao roomDao;
@Autowired
private LabelDao labelDao;
-
+
private int progress = 0;
public int getProgress() {
return progress;
}
-
+
public void loadMainMenu() {
/*
* ######################## Dashboard Menu Points
@@ -157,7 +157,7 @@ public class ImportInitvalues {
navimanagement.addMainStructure("adminModuleEmail", null, 24,
"main.menu.admin.email", LEVEL_ADMIN, "Administration of Emails",
admin.getId(), "main.menu.admin.email.desc");
log.debug("MainMenu ADDED");
}
-
+
public void loadErrorMappingsFromXML() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new
File(OmFileHelper.getLanguagesDir(), OmFileHelper.nameOfErrorFile));
@@ -222,10 +222,10 @@ public class ImportInitvalues {
cfgDao.add("email_userpass", cfg.mailAuthPass, null, "System
auth email password");
cfgDao.add("mail.smtp.starttls.enable", cfg.mailUseTls, null,
"Enable TLS 1=true, 0=false");
-
+
cfgDao.add("mail.smtp.connection.timeout", "30000", null,
"Socket connection timeout value in
milliseconds. Default is 30 seconds (30000).");
-
+
cfgDao.add("mail.smtp.timeout", "30000", null,
"Socket I/O timeout value in milliseconds.
Default is 30 seconds (30000).");
@@ -268,7 +268,7 @@ public class ImportInitvalues {
+ "The Font has to exist on the Server
which runs Red5");
cfgDao.add(CONFIG_APPLICATION_BASE_URL, cfg.baseUrl, null,
"Base URL your OPenmeetings installation will be accessible at.");
-
+
// ***************************************
// ***************************************
// red5SIP Integration Coniguration Values
@@ -329,7 +329,7 @@ public class ImportInitvalues {
// mute/unmute audio key code
cfgDao.add("mute.keycode", "118", null,
"A hot key code for the 'mute/unmute audio'
functionality. Keycode 118 is F7");
-
+
// system-wide ldap params
cfgDao.add(CONFIG_DEFAULT_LDAP_ID, "0", null, "Ldap domain
selected by default in the login screen");
@@ -341,9 +341,9 @@ public class ImportInitvalues {
, "Area to be shown to the user after login.
Possible values are: "
+ "user/dashboard, user/calendar,
user/record, rooms/my, rooms/group, rooms/public, admin/user, admin/connection"
+ ", admin/group, admin/room,
admin/config, admin/lang, admin/ldap, admin/backup, admin/server,
admin/oauth2");
-
+
// oauth2 params
- cfgDao.add(CONFIG_IGNORE_BAD_SSL, "no", null,
+ cfgDao.add(CONFIG_IGNORE_BAD_SSL, "no", null,
"Set \"yes\" or \"no\" to enable/disable ssl
certifications checking for OAuth2");
cfgDao.add(CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY, "", null,
@@ -382,7 +382,7 @@ public class ImportInitvalues {
r.setWaitForRecording(false);
r.setAllowRecording(true);
-
+
if (groupId != null) {
RoomGroup ro = new RoomGroup();
ro.setRoom(r);
@@ -393,7 +393,7 @@ public class ImportInitvalues {
r = roomDao.update(r, null);
return r;
}
-
+
public void loadDefaultRooms(boolean createRooms, long langId) {
if (createRooms) {
createRoom(labelDao.getString("install.room.public.interview", langId),
Type.interview, 16L, true, null);
@@ -461,7 +461,7 @@ public class ImportInitvalues {
yandexServer.setFirstnameParamName("first_name");
yandexServer.setLastnameParamName("last_name");
oauthDao.update(yandexServer, null);
-
+
// Google
OAuthServer googleServer = new OAuthServer();
googleServer.setName("Google");
@@ -480,7 +480,7 @@ public class ImportInitvalues {
googleServer.setFirstnameParamName("given_name");
googleServer.setLastnameParamName("family_name");
oauthDao.update(googleServer, null);
-
+
// Facebook
OAuthServer facebookServer = new OAuthServer();
facebookServer.setName("Facebook");
@@ -499,7 +499,7 @@ public class ImportInitvalues {
facebookServer.setLastnameParamName("last_name");
oauthDao.update(facebookServer, null);
}
-
+
//
------------------------------------------------------------------------------
public void loadSystem(InstallationConfig cfg, boolean force) throws
Exception {
Modified:
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
Sun Feb 5 15:46:17 2017
@@ -54,7 +54,7 @@ public class OpenmeetingsVariables {
public static int DEFAULT_MINUTES_REMINDER_SEND = 15;
public static String DEFAULT_BASE_URL =
"http://localhost:5080/openmeetings/";
-
+
public static final String WEB_DATE_PATTERN = "dd.MM.yyyy HH:mm:ss";
//FIXME need to be made locale based
public static String webAppRootKey = null;
public static String webAppRootPath = null;
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
Sun Feb 5 15:46:17 2017
@@ -75,9 +75,9 @@ import com.googlecode.wicket.jquery.ui.w
/**
* CRUD operations in form for {@link User}
- *
+ *
* @author swagner
- *
+ *
*/
public class UserForm extends AdminBaseForm<User> {
private static final long serialVersionUID = 1L;
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=1781776&r1=1781775&r2=1781776&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
Sun Feb 5 15:46:17 2017
@@ -40,6 +40,7 @@ import org.apache.openmeetings.web.commo
import
org.apache.openmeetings.web.common.ConfirmableAjaxBorder.ConfirmableBorderDialog;
import org.apache.openmeetings.web.room.RoomPanel;
import org.apache.openmeetings.web.room.RoomPanel.Action;
+import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
@@ -47,6 +48,7 @@ import org.apache.wicket.extensions.mark
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.PriorityHeaderItem;
import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
@@ -78,8 +80,7 @@ public class RoomSidebar extends Panel {
public static final String PARAM_SETTINGS = "s";
private final RoomPanel room;
private final TabbedPanel tabs;
- private final ITab userTab;
- private final ITab fileTab;
+ private final ITab userTab, fileTab;
private UploadDialog upload;
private RoomFilePanel roomFiles;
private final SelfIconsPanel selfRights;
@@ -232,7 +233,7 @@ public class RoomSidebar extends Panel {
this.room = room;
updateShowFiles();
- userTab = new ITab() {
+ userTab = new OmTab() {
private static final long serialVersionUID = 1L;
@Override
@@ -241,6 +242,11 @@ public class RoomSidebar extends Panel {
}
@Override
+ public String getCssClass() {
+ return "om-icon big tab user";
+ }
+
+ @Override
public IModel<String> getTitle() {
return Model.of(getString("613"));
}
@@ -250,7 +256,7 @@ public class RoomSidebar extends Panel {
return new UserFragment(containerId,
"user-panel");
}
};
- fileTab = new ITab() {
+ fileTab = new OmTab() {
private static final long serialVersionUID = 1L;
@Override
@@ -259,6 +265,11 @@ public class RoomSidebar extends Panel {
}
@Override
+ public String getCssClass() {
+ return "om-icon big tab file";
+ }
+
+ @Override
public IModel<String> getTitle() {
return Model.of(getString("614"));
}
@@ -281,6 +292,17 @@ public class RoomSidebar extends Panel {
public void onActivate(AjaxRequestTarget target, int
index, ITab tab) {
selectedIdx = index;
}
+
+ @Override
+ protected WebMarkupContainer newTabContainer(String id,
String tabId, ITab tab, int index) {
+ WebMarkupContainer t =
super.newTabContainer(id, tabId, tab, index);
+ Label link = newTitleLabel("link",
tab.getTitle());
+ link.add(AttributeModifier.replace("href", "#"
+ tabId));
+ link.add(AttributeModifier.append("class",
((OmTab)tab).getCssClass()));
+ link.add(AttributeModifier.append("title",
tab.getTitle()));
+ t.replace(link);
+ return t;
+ }
}).setOutputMarkupId(true));
selfRights = new SelfIconsPanel("icons", room.getClient(),
room, true);
add(addFolder);
@@ -433,4 +455,11 @@ public class RoomSidebar extends Panel {
selectedIdx = 1;
tabs.reload(handler);
}
+
+ private static abstract class OmTab implements ITab {
+ private static final long serialVersionUID = 1L;
+
+ public abstract String getCssClass();
+ }
}
+
Added:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.html
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.html?rev=1781776&view=auto
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.html
(added)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.html
Sun Feb 5 15:46:17 2017
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ 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
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+ <div id="chatTabs">
+ <ul>
+ <li><a href="#chatTab-all"><wicket:message
key="1494"/></a></li>
+ </ul>
+ <div id="chatTab-all" class="messageArea"></div>
+ </div>
+ <form wicket:id="sendForm">
+ <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>
+ <td style="width: 50px">
+ <div wicket:id="send"><wicket:message
key="220"/></div>
+ <input type="hidden"
wicket:id="activeTab" id="activeChatTab"/>
+ </td>
+ </tr>
+ </table>
+ </form>
+</wicket:panel>
+</html>
Added:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java?rev=1781776&view=auto
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
(added)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
Sun Feb 5 15:46:17 2017
@@ -0,0 +1,350 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * 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
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.chat;
+
+import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
+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.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;
+import static org.apache.openmeetings.web.app.WebSession.getRights;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.room.RoomPanel.isModerator;
+import static
org.apache.openmeetings.web.user.chat.EmotionsResources.EMOTIONS_CSS_REFERENCE;
+import static
org.apache.openmeetings.web.user.chat.EmotionsResources.EMOTIONS_JS_REFERENCE;
+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 java.time.Duration;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ChatDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+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.common.ConfirmableAjaxBorder;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.HiddenField;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.protocol.ws.WebSocketSettings;
+import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
+import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
+import org.apache.wicket.protocol.ws.api.registry.PageIdKey;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
+
+public class Chat extends Panel {
+ private static final long serialVersionUID = 1L;
+ private static final Logger log =
Red5LoggerFactory.getLogger(Chat.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 final AbstractDefaultAjaxBehavior acceptMessage = new
AbstractDefaultAjaxBehavior() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void respond(AjaxRequestTarget target) {
+ try {
+ long msgId =
getRequest().getRequestParameters().getParameterValue(PARAM_MSG_ID).toLong();
+ long roomId =
getRequest().getRequestParameters().getParameterValue(PARAM_ROOM_ID).toLong();
+ ChatDao dao = getBean(ChatDao.class);
+ ChatMessage m = dao.get(msgId);
+ if (m.isNeedModeration() &&
isModerator(getUserId(), roomId)) {
+ m.setNeedModeration(false);
+ dao.update(m);
+ sendRoom(m,
getMessage(Arrays.asList(m)).put("mode", "accept").toString());
+ } else {
+ log.error("It seems like we are being
hacked!!!!");
+ }
+ } catch (Exception e) {
+ log.error("Unexpected exception while accepting
chat message", e);
+ }
+ }
+ };
+
+ private static JSONObject setScope(JSONObject o, ChatMessage m, long
curUserId) {
+ String scope, scopeName;
+ if (m.getToUser() != null) {
+ User u = curUserId == m.getToUser().getId() ?
m.getFromUser() : m.getToUser();
+ scope = ID_USER_PREFIX + u.getId();
+ scopeName = String.format("%s %s", u.getFirstname(),
u.getLastname());
+ } else if (m.getToRoom() != null) {
+ scope = ID_ROOM_PREFIX + m.getToRoom().getId();
+ scopeName = String.format("%s %s",
Application.getString(406), m.getToRoom().getId());
+ o.put("needModeration", m.isNeedModeration());
+ } else {
+ scope = ID_ALL;
+ scopeName = Application.getString(1494);
+ }
+ return o.put("scope", scope).put("scopeName", scopeName);
+ }
+
+ public JSONObject getMessage(List<ChatMessage> list) {
+ return getMessage(getUserId(), list);
+ }
+
+ private JSONObject getMessage(long curUserId, List<ChatMessage> list) {
+ JSONArray arr = new JSONArray();
+ for (ChatMessage m : list) {
+ String smsg = m.getMessage();
+ smsg = smsg == null ? smsg : " " +
smsg.replaceAll(" ", " ") + " ";
+ arr.put(setScope(new JSONObject(), m, curUserId)
+ .put("id", m.getId())
+ .put("message", smsg)
+ .put("from", new JSONObject()
+ .put("id",
m.getFromUser().getId())
+ .put("name",
m.getFromUser().getFirstname() + " " + m.getFromUser().getLastname())
+ .put("img",
getUrl(getRequestCycle(), m.getFromUser().getId()))
+
+ )
+ .put("actions", curUserId ==
m.getFromUser().getId() ? "short" : "full")
+ .put("sent",
getDateFormat().format(m.getSent())));
+ }
+ return new JSONObject()
+ .put("type", "chat")
+ .put("msg", arr);
+ }
+
+ public Chat(String id) {
+ super(id);
+ setOutputMarkupPlaceholderTag(true);
+ setMarkupId(id);
+
+ add(acceptMessage, new Behavior() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void renderHead(Component component,
IHeaderResponse response) {
+ ChatDao dao = getBean(ChatDao.class);
+ //FIXME limited count should be loaded with
"earlier" link
+ List<ChatMessage> list = new
ArrayList<ChatMessage>(dao.getGlobal(0, 30));
+ for(Long roomId : getUserRooms(getUserId())) {
+ Room r =
getBean(RoomDao.class).get(roomId);
+ list.addAll(dao.getRoom(roomId, 0, 30,
!r.isChatModerated() || isModerator(getUserId(), roomId)));
+ }
+ 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(");");
+
response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
+ }
+ super.renderHead(component, response);
+ }
+ });
+ add(new ChatForm("sendForm"));
+ }
+
+ public CharSequence addRoom(Room r) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(String.format("addChatTab('%1$s%2$d', '%3$s %2$d');",
ID_ROOM_PREFIX, r.getId(), Application.getString(406)));
+ List<ChatMessage> list =
getBean(ChatDao.class).getRoom(r.getId(), 0, 30, !r.isChatModerated() ||
isModerator(getUserId(), r.getId()));
+ if (list.size() > 0) {
+
sb.append("addChatMessage(").append(getMessage(list).toString()).append(");");
+ }
+ return sb;
+ }
+
+ @Override
+ public void renderHead(IHeaderResponse response) {
+ super.renderHead(response);
+ response.render(new
PriorityHeaderItem(JavaScriptHeaderItem.forReference(EMOTIONS_JS_REFERENCE)));
+ response.render(new
PriorityHeaderItem(JavaScriptHeaderItem.forReference(new
JavaScriptResourceReference(Chat.class, "chat.js"))));
+
response.render(CssHeaderItem.forReference(EMOTIONS_CSS_REFERENCE));
+ response.render(CssHeaderItem.forUrl("css/chat.css"));
+ response.render(new
PriorityHeaderItem(getNamedFunction("acceptMessage", acceptMessage,
explicit(PARAM_ROOM_ID), explicit(PARAM_MSG_ID))));
+ }
+
+ 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(Right.moderator))) {
+ IWebSocketConnection con =
reg.getConnection(Application.get(), c.getSessionId(), new
PageIdKey(c.getPageId()));
+ if (con != null) {
+ con.sendMessage(msg);
+ }
+ }
+ } catch (Exception e) {
+ log.error("Error while sending message to
room", e);
+ }
+ }
+ }
+
+ private class ChatForm extends Form<Void> {
+ private static final long serialVersionUID = 1L;
+ private final ChatToolbar toolbar = new
ChatToolbar("toolbarContainer");
+ private final WysiwygEditor chatMessage = new
WysiwygEditor("chatMessage", Model.of(""), toolbar);
+ private final HiddenField<String> activeTab = new
HiddenField<String>("activeTab", Model.of(""));
+
+ ChatForm(String id) {
+ super(id);
+ add(toolbar
+ , activeTab
+ , chatMessage.setOutputMarkupId(true)
+ , new AjaxButton("send") {
+ private static final long
serialVersionUID = 1L;
+
+ @Override
+ protected void
onSubmit(AjaxRequestTarget target) {
+ ChatDao dao =
getBean(ChatDao.class);
+ ChatMessage m = new
ChatMessage();
+
m.setMessage(chatMessage.getDefaultModelObjectAsString());
+ m.setSent(new Date());
+
m.setFromUser(getBean(UserDao.class).get(getUserId()));
+ try {
+ String scope =
activeTab.getModelObject();
+ if (scope != null) {
+ if
(ID_ALL.equals(scope)) {
+ //we
done
+ } else if
(scope.startsWith(ID_ROOM_PREFIX)) {
+ Room r
=
getBean(RoomDao.class).get(Long.parseLong(scope.substring(ID_ROOM_PREFIX.length())));
+ if
(isUserInRoom(r.getId(), getUserId())) {
+
m.setToRoom(r);
+ } else {
+
log.error("It seems like we are being hacked!!!!");
+
return;
+ }
+
m.setNeedModeration(r.isChatModerated() &&
!isModerator(m.getFromUser().getId(), r.getId()));
+ } else if
(scope.startsWith(ID_USER_PREFIX)) {
+ User u
=
getBean(UserDao.class).get(Long.parseLong(scope.substring(ID_USER_PREFIX.length())));
+
m.setToUser(u);
+ }
+ }
+ } catch (Exception e) {
+ //no-op
+ }
+ dao.update(m);
+ String msg =
getMessage(Arrays.asList(m)).toString();
+ if (m.getToRoom() != null) {
+ sendRoom(m, msg);
+ } else if (m.getToUser() !=
null) {
+
IWebSocketConnectionRegistry reg =
WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry();
+ for (Client c :
Application.getClients(getUserId())) {
+ try {
+
IWebSocketConnection con = reg.getConnection(Application.get(),
c.getSessionId(), new PageIdKey(c.getPageId()));
+ if (con
!= null) {
+
con.sendMessage(msg);
+ }
+ } catch
(Exception e) {
+
log.error("Error while sending message to room", e);
+ }
+ }
+ msg =
getMessage(m.getToUser().getId(), Arrays.asList(m)).toString();
+ for (Client c :
Application.getClients(m.getToUser().getId())) {
+ try {
+
IWebSocketConnection con = reg.getConnection(Application.get(),
c.getSessionId(), new PageIdKey(c.getPageId()));
+ if (con
!= null) {
+
con.sendMessage(msg);
+ }
+ } catch
(Exception e) {
+
log.error("Error while sending message to room", e);
+ }
+ }
+ } else {
+
IWebSocketConnectionRegistry reg =
WebSocketSettings.Holder.get(getApplication()).getConnectionRegistry();
+ for
(IWebSocketConnection c : reg.getConnections(getApplication())) {
+ try {
+
c.sendMessage(msg);
+ }
catch(Exception e) {
+
log.error("Error while sending message", e);
+ }
+ }
+ }
+
chatMessage.setDefaultModelObject("");
+ target.add(chatMessage);
+ };
+ });
+ }
+
+ @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-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html
Sun Feb 5 15:46:17 2017
@@ -22,27 +22,8 @@
<wicket:panel>
<div id="chat" class="ui-state-default">
<div onclick="toggleChat();" class="control block clickable
ui-widget-header ui-state-active"><div class="ui-icon ui-icon-caret-1-n
sort-icon"></div><div class="label"><wicket:message key="244"/></div></div>
- <div id="chatTabs">
- <ul>
- <li><a href="#chatTab-all"><wicket:message
key="1494"/></a></li>
- </ul>
- <div id="chatTab-all" class="messageArea"></div>
- </div>
- <form wicket:id="sendForm">
- <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>
- <td style="width: 50px">
- <div
wicket:id="send"><wicket:message key="220"/></div>
- <input type="hidden"
wicket:id="activeTab" id="activeChatTab"/>
- </td>
- </tr>
- </table>
- </form>
+ <div wicket:id="chat"></div>
</div>
</wicket:panel>
</html>
+
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java
Sun Feb 5 15:46:17 2017
@@ -18,174 +18,31 @@
*/
package org.apache.openmeetings.web.user.chat;
-import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
import static
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_CHAT;
-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.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;
-import static org.apache.openmeetings.web.app.WebSession.getRights;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.room.RoomPanel.isModerator;
-import static
org.apache.openmeetings.web.user.chat.EmotionsResources.EMOTIONS_CSS_REFERENCE;
-import static
org.apache.openmeetings.web.user.chat.EmotionsResources.EMOTIONS_JS_REFERENCE;
-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 java.time.Duration;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.basic.ChatDao;
import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.db.dao.room.RoomDao;
-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.room.Room.RoomElement;
-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.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;
import
org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
-import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
-import org.apache.wicket.markup.head.PriorityHeaderItem;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.HiddenField;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.protocol.ws.WebSocketSettings;
-import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
-import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
-import org.apache.wicket.protocol.ws.api.registry.PageIdKey;
-import org.apache.wicket.request.resource.JavaScriptResourceReference;
-import org.json.JSONArray;
-import org.json.JSONObject;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-
-import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
-import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
@AuthorizeInstantiation({"Dashboard", "Room"})
public class ChatPanel extends BasePanel {
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 final AbstractDefaultAjaxBehavior acceptMessage = new
AbstractDefaultAjaxBehavior() {
- private static final long serialVersionUID = 1L;
-
- @Override
- protected void respond(AjaxRequestTarget target) {
- try {
- long msgId =
getRequest().getRequestParameters().getParameterValue(PARAM_MSG_ID).toLong();
- long roomId =
getRequest().getRequestParameters().getParameterValue(PARAM_ROOM_ID).toLong();
- ChatDao dao = getBean(ChatDao.class);
- ChatMessage m = dao.get(msgId);
- if (m.isNeedModeration() &&
isModerator(getUserId(), roomId)) {
- m.setNeedModeration(false);
- dao.update(m);
- sendRoom(m,
getMessage(Arrays.asList(m)).put("mode", "accept").toString());
- } else {
- log.error("It seems like we are being
hacked!!!!");
- }
- } catch (Exception e) {
- log.error("Unexpected exception while accepting
chat message", e);
- }
- }
- };
-
- private static JSONObject setScope(JSONObject o, ChatMessage m, long
curUserId) {
- String scope, scopeName;
- if (m.getToUser() != null) {
- User u = curUserId == m.getToUser().getId() ?
m.getFromUser() : m.getToUser();
- scope = ID_USER_PREFIX + u.getId();
- scopeName = String.format("%s %s", u.getFirstname(),
u.getLastname());
- } else if (m.getToRoom() != null) {
- scope = ID_ROOM_PREFIX + m.getToRoom().getId();
- scopeName = String.format("%s %s",
Application.getString(406), m.getToRoom().getId());
- o.put("needModeration", m.isNeedModeration());
- } else {
- scope = ID_ALL;
- scopeName = Application.getString(1494);
- }
- return o.put("scope", scope).put("scopeName", scopeName);
- }
-
- public JSONObject getMessage(List<ChatMessage> list) {
- return getMessage(getUserId(), list);
- }
-
- private JSONObject getMessage(long curUserId, List<ChatMessage> list) {
- JSONArray arr = new JSONArray();
- for (ChatMessage m : list) {
- String smsg = m.getMessage();
- smsg = smsg == null ? smsg : " " +
smsg.replaceAll(" ", " ") + " ";
- arr.put(setScope(new JSONObject(), m, curUserId)
- .put("id", m.getId())
- .put("message", smsg)
- .put("from", new JSONObject()
- .put("id",
m.getFromUser().getId())
- .put("name",
m.getFromUser().getFirstname() + " " + m.getFromUser().getLastname())
- .put("img",
getUrl(getRequestCycle(), m.getFromUser().getId()))
-
- )
- .put("actions", curUserId ==
m.getFromUser().getId() ? "short" : "full")
- .put("sent",
getDateFormat().format(m.getSent())));
- }
- return new JSONObject()
- .put("type", "chat")
- .put("msg", arr);
- }
+ private final Chat chat;
public ChatPanel(String id) {
super(id);
setOutputMarkupPlaceholderTag(true);
setMarkupId(id);
- add(acceptMessage, new Behavior() {
- private static final long serialVersionUID = 1L;
-
- @Override
- public void renderHead(Component component,
IHeaderResponse response) {
- ChatDao dao = getBean(ChatDao.class);
- //FIXME limited count should be loaded with
"earlier" link
- List<ChatMessage> list = new
ArrayList<ChatMessage>(dao.getGlobal(0, 30));
- for(Long roomId : getUserRooms(getUserId())) {
- Room r =
getBean(RoomDao.class).get(roomId);
- list.addAll(dao.getRoom(roomId, 0, 30,
!r.isChatModerated() || isModerator(getUserId(), roomId)));
- }
- 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(");");
-
response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
- }
- super.renderHead(component, response);
- }
- });
- add(new ChatForm("sendForm"));
+ add(chat = new Chat("chat"));
}
public void roomEnter(Room r, AjaxRequestTarget target) {
@@ -198,12 +55,8 @@ public class ChatPanel extends BasePanel
if (!showDashboardChat) {
sb.append("$('#chat').show();");
}
- sb.append(String.format("addChatTab('%1$s%2$d', '%3$s %2$d');",
ID_ROOM_PREFIX, r.getId(), Application.getString(406)));
+ sb.append(chat.addRoom(r));
sb.append(r.isChatOpened() ? "openChat();" : "closeChat();");
- List<ChatMessage> list =
getBean(ChatDao.class).getRoom(r.getId(), 0, 30, !r.isChatModerated() ||
isModerator(getUserId(), r.getId()));
- if (list.size() > 0) {
-
sb.append("addChatMessage(").append(getMessage(list).toString()).append(");");
- }
sb.append("});");
target.appendJavaScript(sb);
}
@@ -212,7 +65,7 @@ public class ChatPanel extends BasePanel
if (r.isHidden(RoomElement.Chat)) {
return;
}
- handler.appendJavaScript(String.format("if (typeof
removeChatTab == 'function') { removeChatTab('%1$s%2$d'); }", ID_ROOM_PREFIX,
r.getId()));
+ handler.appendJavaScript(String.format("if (typeof
removeChatTab == 'function') { removeChatTab('%1$s%2$d'); }",
Chat.ID_ROOM_PREFIX, r.getId()));
if (!showDashboardChat) {
StringBuilder sb = new StringBuilder();
sb.append("$(function() {");
@@ -227,7 +80,7 @@ public class ChatPanel extends BasePanel
if (handler != null) {
handler.add(this);
if (visible) {
- handler.appendJavaScript("reinit();");
+ handler.appendJavaScript("chatReinit();");
}
}
}
@@ -235,11 +88,6 @@ public class ChatPanel extends BasePanel
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
- response.render(new
PriorityHeaderItem(JavaScriptHeaderItem.forReference(EMOTIONS_JS_REFERENCE)));
- response.render(new
PriorityHeaderItem(JavaScriptHeaderItem.forReference(new
JavaScriptResourceReference(ChatPanel.class, "chat.js"))));
-
response.render(CssHeaderItem.forReference(EMOTIONS_CSS_REFERENCE));
- response.render(CssHeaderItem.forUrl("css/chat.css"));
- response.render(new
PriorityHeaderItem(getNamedFunction("acceptMessage", acceptMessage,
explicit(PARAM_ROOM_ID), explicit(PARAM_MSG_ID))));
if (!showDashboardChat) {
StringBuilder sb = new StringBuilder();
sb.append("$(document).ready(function(){");
@@ -249,151 +97,5 @@ 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(Right.moderator))) {
- IWebSocketConnection con =
reg.getConnection(Application.get(), c.getSessionId(), new
PageIdKey(c.getPageId()));
- if (con != null) {
- con.sendMessage(msg);
- }
- }
- } catch (Exception e) {
- log.error("Error while sending message to
room", e);
- }
- }
- }
-
- private class ChatForm extends Form<Void> {
- private static final long serialVersionUID = 1L;
- private final ChatToolbar toolbar = new
ChatToolbar("toolbarContainer");
- private final WysiwygEditor chatMessage = new
WysiwygEditor("chatMessage", Model.of(""), toolbar);
- private final HiddenField<String> activeTab = new
HiddenField<String>("activeTab", Model.of(""));
-
- ChatForm(String id) {
- super(id);
- add(toolbar
- , activeTab
- , chatMessage.setOutputMarkupId(true)
- , new AjaxButton("send") {
- private static final long
serialVersionUID = 1L;
-
- @Override
- protected void
onSubmit(AjaxRequestTarget target) {
- ChatDao dao =
getBean(ChatDao.class);
- ChatMessage m = new
ChatMessage();
-
m.setMessage(chatMessage.getDefaultModelObjectAsString());
- m.setSent(new Date());
-
m.setFromUser(getBean(UserDao.class).get(getUserId()));
- try {
- String scope =
activeTab.getModelObject();
- if (scope != null) {
- if
(ID_ALL.equals(scope)) {
- //we
done
- } else if
(scope.startsWith(ID_ROOM_PREFIX)) {
- Room r
=
getBean(RoomDao.class).get(Long.parseLong(scope.substring(ID_ROOM_PREFIX.length())));
- if
(isUserInRoom(r.getId(), getUserId())) {
-
m.setToRoom(r);
- } else {
-
log.error("It seems like we are being hacked!!!!");
-
return;
- }
-
m.setNeedModeration(r.isChatModerated() &&
!isModerator(m.getFromUser().getId(), r.getId()));
- } else if
(scope.startsWith(ID_USER_PREFIX)) {
- User u
=
getBean(UserDao.class).get(Long.parseLong(scope.substring(ID_USER_PREFIX.length())));
-
m.setToUser(u);
- }
- }
- } catch (Exception e) {
- //no-op
- }
- dao.update(m);
- String msg =
getMessage(Arrays.asList(m)).toString();
- if (m.getToRoom() != null) {
- sendRoom(m, msg);
- } else if (m.getToUser() !=
null) {
-
IWebSocketConnectionRegistry reg =
WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry();
- for (Client c :
Application.getClients(getUserId())) {
- try {
-
IWebSocketConnection con = reg.getConnection(Application.get(),
c.getSessionId(), new PageIdKey(c.getPageId()));
- if (con
!= null) {
-
con.sendMessage(msg);
- }
- } catch
(Exception e) {
-
log.error("Error while sending message to room", e);
- }
- }
- msg =
getMessage(m.getToUser().getId(), Arrays.asList(m)).toString();
- for (Client c :
Application.getClients(m.getToUser().getId())) {
- try {
-
IWebSocketConnection con = reg.getConnection(Application.get(),
c.getSessionId(), new PageIdKey(c.getPageId()));
- if (con
!= null) {
-
con.sendMessage(msg);
- }
- } catch
(Exception e) {
-
log.error("Error while sending message to room", e);
- }
- }
- } else {
-
IWebSocketConnectionRegistry reg =
WebSocketSettings.Holder.get(getApplication()).getConnectionRegistry();
- for
(IWebSocketConnection c : reg.getConnections(getApplication())) {
- try {
-
c.sendMessage(msg);
- }
catch(Exception e) {
-
log.error("Error while sending message", e);
- }
- }
- }
-
chatMessage.setDefaultModelObject("");
- target.add(chatMessage);
- };
- });
- }
-
- @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-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
Sun Feb 5 15:46:17 2017
@@ -36,31 +36,36 @@
var editor = $('#chatMessage .wysiwyg-editor');
editor.html(editor.html() + ' ' + emoticon + ' ');
}
- $(function() {
- var emots = [":-)", ":)", ":o)", ":c)", ":^)", ":-D",
":-(", ":-9", ";-)", ":-P", ":-p", ":-Ã", ":-b"
- , ":-O", ":-/", ":-X", ":-#", ":'(", "B-)",
"8-)", ":-\\", ";*(", ":-*", ":]", ":>", "=]", "=)", "8)"
- , ":}", ":D", "8D", "XD", "xD", "=D", ":(",
":<", ":[", ":{", "=(", ";)", ";]", ";D", ":P", ":p"
- , "=P", "=p", ":b", ":Ã", ":O", "8O", ":/",
"=/", ":S", ":#", ":X", "B)", "O:)", "<3", ";(", ">:)"
- , ">;)", ">:(", "O_o", "O_O", "o_o", "0_o",
"T_T", "^_^", "?-)"];
+ function initChatToolbar() {
+ var emtBtn = $('#emoticons');
+ emtBtn.html('');
+ emtBtn.append(' ' + emoticon.emoticonize(':)') + ' <b
class="caret"></b>');
+ var emots = [].concat.apply([],
[emoticon.threeCharEmoticons, emoticon.twoCharEmoticons]);
+ for (var ei in emoticon.specialEmoticons) {
+ emots.push(ei);
+ }
var emotMenuList = $('#emotMenuList');
- var rowSize = 15;
+ emotMenuList.html('');
+ var rowSize = 20;
var row = $('<tr></tr>');
for (var i = 0; i < emots.length; ++i) {
row.append('<td><div class="emt"
onclick="emtClick(\'' + emots[i] + '\');">'
- + emots[i] + '</div></td>');
+ + emoticon.emoticonize(emots[i]) +
'</div></td>');
if (i != 0 && i % rowSize == 0) {
emotMenuList.append(row);
row = $('<tr></tr>');
}
}
- //$('.emt').emoticonize();
+ }
+ $(function() {
+ initChatToolbar();
});
</script>
</wicket:head>
<wicket:panel>
<div wicket:id="toolbar" class="btn-toolbar" data-role="editor-toolbar">
<div class="btn-group">
- <a id="emoticons" class="chat btn emt dropdown-toggle"
data-toggle="dropdown" title="Emoticons"> :) <b class="caret"></b></a>
+ <a id="emoticons" class="chat btn emt dropdown-toggle"
data-toggle="dropdown" title="Emoticons"></a>
<ul class="chat dropdown-menu" >
<li>
<table id="emotMenuList">
@@ -83,3 +88,4 @@
</div>
</wicket:panel>
</html>
+
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
Sun Feb 5 15:46:17 2017
@@ -42,9 +42,10 @@ $(function() {
//no-op
}
});
- reinit();
+ chatReinit();
});
-function reinit() {
+function chatReinit() {
+ initChatToolbar();
chatTabs = $("#chatTabs").tabs({
activate: function(event, ui) {
$('#activeChatTab').val(ui.newPanel[0].id);
@@ -84,9 +85,12 @@ function toggleChat() {
function activateTab(id) {
chatTabs.tabs("option", "active", chatTabs.find('a[href="#' + id +
'"]').parent().index());
}
+function chatInited() {
+ return !!$("#chatTabs").data("ui-tabs");
+}
function addChatTab(id, label) {
- if (!$("#chatTabs").data("ui-tabs")) {
- reinit();
+ if (!chatInited()) {
+ chatReinit();
}
if ($('#chat').length < 1 || $('#' + id).length) {
return;
@@ -103,7 +107,9 @@ function addChatTab(id, label) {
function removeChatTab(id) {
$('li[aria-controls="' + id + '"]').remove();
$('#' + id).remove();
- chatTabs.tabs("refresh");
+ if (chatInited()) {
+ chatTabs.tabs("refresh");
+ }
}
function addChatMessage(m) {
if ($('#chat').length > 0 && m && m.type == "chat") {
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.js
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.js?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.js
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.js
Sun Feb 5 15:46:17 2017
@@ -16,10 +16,11 @@ var CSSEmoticon = function() {
":-)", ":o)", ":c)", ":^)", ":-D", ":-(", ":-9", ";-)", ":-P",
":-p", ":-Ã", ":-b", ":-O", ":-/", ":-X", ":-#", ":'(", "B-)", "8-)", ";*(",
":-*", ":-\\",
"?-)" // <== This is my own invention, it's a smiling pirate
(with an eye-patch)!
];
-
+ this.threeCharEmoticons = this.threeCharacterEmoticons.slice();
this.twoCharacterEmoticons = [ // separate these out so that we can add
a letter-spacing between the characters for better proportions
":)", ":]", "=]", "=)", "8)", ":}", ":D", ":(", ":[", ":{",
"=(", ";)", ";]", ";D", ":P", ":p", "=P", "=p", ":b", ":Ã", ":O", ":/", "=/",
":S", ":#", ":X", "B)", ":|", ":\\", "=\\", ":*", ":>", ":<"
];
+ this.twoCharEmoticons = this.twoCharacterEmoticons.slice();
this.specialEmoticons = { // emoticons to be treated with a special
class, hash specifies the additional class to add, along with standard
css-emoticon class
">:)": {cssClass: "red-emoticon small-emoticon
spaced-emoticon"},
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.min.js
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.min.js?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.min.js
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/cssemoticons.min.js
Sun Feb 5 15:46:17 2017
@@ -1,2 +1,2 @@
/* Dual licensed under the MIT and GPL licenses */
-var
CSSEmoticon=function(){this.escapeCharacters=[")","(","*","[","]","{","}","|","^","<",">","\\","?","+","=","."];this.threeCharacterEmoticons=[":-)",":o)",":c)",":^)",":-D",":-(",":-9",";-)",":-P",":-p",":-Ã",":-b",":-O",":-/",":-X",":-#",":'(","B-)","8-)",";*(",":-*",":-\\","?-)"];this.twoCharacterEmoticons=[":)",":]","=]","=)","8)",":}",":D",":(",":[",":{","=(",";)",";]",";D",":P",":p","=P","=p",":b",":Ã",":O",":/","=/",":S",":#",":X","B)",":|",":\\","=\\",":*",":>",":<"];this.specialEmoticons={">:)":{cssClass:"red-emoticon
small-emoticon spaced-emoticon"},">;)":{cssClass:"red-emoticon
small-emoticon spaced-emoticon"},">:(":{cssClass:"red-emoticon
small-emoticon spaced-emoticon"},">: )":{cssClass:"red-emoticon
small-emoticon"},">; )":{cssClass:"red-emoticon small-emoticon"},">:
(":{cssClass:"red-emoticon small-emoticon"},";(":{cssClass:"red-emoticon
spaced-emoticon"},"<3":{cssClass:"pink-emoticon
counter-rotated"},"O_O":{cssClass:"no-rotate"},"o
_o":{cssClass:"no-rotate"},"0_o":{cssClass:"no-rotate"},"O_o":{cssClass:"no-rotate"},"T_T":{cssClass:"no-rotate"},"^_^":{cssClass:"no-rotate"},"O:)":{cssClass:"small-emoticon
spaced-emoticon"},"O:
)":{cssClass:"small-emoticon"},"8D":{cssClass:"small-emoticon
spaced-emoticon"},"XD":{cssClass:"small-emoticon
spaced-emoticon"},"xD":{cssClass:"small-emoticon
spaced-emoticon"},"=D":{cssClass:"small-emoticon
spaced-emoticon"},"8O":{cssClass:"small-emoticon
spaced-emoticon"},"[+=..]":{cssClass:"no-rotate nintendo-controller"}};var
a=new RegExp('(\\'+this.escapeCharacters.join('|\\')+')','g');var
b='(^|[\\s\\0])';for(var
c=this.threeCharacterEmoticons.length-1;c>=0;--c){this.threeCharacterEmoticons[c]=this.threeCharacterEmoticons[c].replace(a,'\\$1');this.threeCharacterEmoticons[c]=new
RegExp(b+'('+this.threeCharacterEmoticons[c]+')','g');}for(var
c=this.twoCharacterEmoticons.length-1;c>=0;--c){this.twoCharacterEmoticons[c]=this.twoCharacterEmoticons[c].replace(a,'\\$1');this.twoCharacterEm
oticons[c]=new RegExp(b+'('+this.twoCharacterEmoticons[c]+')','g');}for(var d
in
this.specialEmoticons){this.specialEmoticons[d].regexp=d.replace(a,'\\$1');this.specialEmoticons[d].regexp=new
RegExp(b+'('+this.specialEmoticons[d].regexp+')','g');}this.defaults={animate:true,delay:500,exclude:'pre,code,.no-emoticons'};};CSSEmoticon.prototype.emoticonize=function(a,b){var
c={};for(var d in this.defaults)c[d]=this.defaults[d];for(var d in
b)c[d]=b[d];var e='span.css-emoticon';if(c.exclude)e+=','+c.exclude;var
f=e.split(',');var g='css-emoticon';if(c.animate)g+=' un-transformed-emoticon
animated-emoticon';for(var h in this.specialEmoticons){var i=g+"
"+this.specialEmoticons[h].cssClass;a=a.replace(this.specialEmoticons[h].regexp,"$1<span
class='"+i+"'>$2</span>");}for(var d in this.threeCharacterEmoticons){var
j=this.threeCharacterEmoticons[d];a=a.replace(j,"$1<span
class='"+g+"'>$2</span>");}for(var d in this.twoCharacterEmoticons){var
j=this.twoCharacterEmoticons[d];a=a.replace(j,"$1<
span class='"+g+"
spaced-emoticon'>$2</span>");}if(c.animate)setTimeout(function(){var
a=document.body.getElementsByClassName("un-transformed-emoticon");for(var b in
a)if(typeof
a[b]=="object")a[b].classList.remove("un-transformed-emoticon");},c.delay);return
a;};
\ No newline at end of file
+var
CSSEmoticon=function(){this.escapeCharacters=[")","(","*","[","]","{","}","|","^","<",">","\\","?","+","=","."];this.threeCharacterEmoticons=[":-)",":o)",":c)",":^)",":-D",":-(",":-9",";-)",":-P",":-p",":-Ã",":-b",":-O",":-/",":-X",":-#",":'(","B-)","8-)",";*(",":-*",":-\\","?-)"];this.threeCharEmoticons=this.threeCharacterEmoticons.slice();this.twoCharacterEmoticons=[":)",":]","=]","=)","8)",":}",":D",":(",":[",":{","=(",";)",";]",";D",":P",":p","=P","=p",":b",":Ã",":O",":/","=/",":S",":#",":X","B)",":|",":\\","=\\",":*",":>",":<"];this.twoCharEmoticons=this.twoCharacterEmoticons.slice();this.specialEmoticons={">:)":{cssClass:"red-emoticon
small-emoticon spaced-emoticon"},">;)":{cssClass:"red-emoticon
small-emoticon spaced-emoticon"},">:(":{cssClass:"red-emoticon
small-emoticon spaced-emoticon"},">: )":{cssClass:"red-emoticon
small-emoticon"},">; )":{cssClass:"red-emoticon small-emoticon"},">:
(":{cssClass:"red-emoticon small-emoticon"},";(":{cssCl
ass:"red-emoticon spaced-emoticon"},"<3":{cssClass:"pink-emoticon
counter-rotated"},"O_O":{cssClass:"no-rotate"},"o_o":{cssClass:"no-rotate"},"0_o":{cssClass:"no-rotate"},"O_o":{cssClass:"no-rotate"},"T_T":{cssClass:"no-rotate"},"^_^":{cssClass:"no-rotate"},"O:)":{cssClass:"small-emoticon
spaced-emoticon"},"O:
)":{cssClass:"small-emoticon"},"8D":{cssClass:"small-emoticon
spaced-emoticon"},"XD":{cssClass:"small-emoticon
spaced-emoticon"},"xD":{cssClass:"small-emoticon
spaced-emoticon"},"=D":{cssClass:"small-emoticon
spaced-emoticon"},"8O":{cssClass:"small-emoticon
spaced-emoticon"},"[+=..]":{cssClass:"no-rotate nintendo-controller"}};var
a=new RegExp('(\\'+this.escapeCharacters.join('|\\')+')','g');var
b='(^|[\\s\\0])';for(var
c=this.threeCharacterEmoticons.length-1;c>=0;--c){this.threeCharacterEmoticons[c]=this.threeCharacterEmoticons[c].replace(a,'\\$1');this.threeCharacterEmoticons[c]=new
RegExp(b+'('+this.threeCharacterEmoticons[c]+')','g');}for(var
c=this.twoCharacterEmoticon
s.length-1;c>=0;--c){this.twoCharacterEmoticons[c]=this.twoCharacterEmoticons[c].replace(a,'\\$1');this.twoCharacterEmoticons[c]=new
RegExp(b+'('+this.twoCharacterEmoticons[c]+')','g');}for(var d in
this.specialEmoticons){this.specialEmoticons[d].regexp=d.replace(a,'\\$1');this.specialEmoticons[d].regexp=new
RegExp(b+'('+this.specialEmoticons[d].regexp+')','g');}this.defaults={animate:true,delay:500,exclude:'pre,code,.no-emoticons'};};CSSEmoticon.prototype.emoticonize=function(a,b){var
c={};for(var d in this.defaults)c[d]=this.defaults[d];for(var d in
b)c[d]=b[d];var e='span.css-emoticon';if(c.exclude)e+=','+c.exclude;var
f=e.split(',');var g='css-emoticon';if(c.animate)g+=' un-transformed-emoticon
animated-emoticon';for(var h in this.specialEmoticons){var i=g+"
"+this.specialEmoticons[h].cssClass;a=a.replace(this.specialEmoticons[h].regexp,"$1<span
class='"+i+"'>$2</span>");}for(var d in this.threeCharacterEmoticons){var
j=this.threeCharacterEmoticons[d];a=a.replace(j,"$1<span clas
s='"+g+"'>$2</span>");}for(var d in this.twoCharacterEmoticons){var
j=this.twoCharacterEmoticons[d];a=a.replace(j,"$1<span class='"+g+"
spaced-emoticon'>$2</span>");}if(c.animate)setTimeout(function(){var
a=document.body.getElementsByClassName("un-transformed-emoticon");for(var b in
a)if(typeof
a[b]=="object")a[b].classList.remove("un-transformed-emoticon");},c.delay);return
a;};
\ No newline at end of file
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java
Sun Feb 5 15:46:17 2017
@@ -75,7 +75,7 @@ public class OmUrlFragment implements Se
public static final OmUrlFragment PROFILE_MESSAGES = new
OmUrlFragment(AreaKeys.profile, TYPE_MESSAGES);
public static final OmUrlFragment CALENDAR = new
OmUrlFragment(AreaKeys.user, TYPE_CALENDAR);
public static final OmUrlFragment ROOMS_PUBLIC = new
OmUrlFragment(AreaKeys.rooms, TYPE_PUBLIC);
-
+
public enum AreaKeys {
user
, admin
@@ -83,7 +83,7 @@ public class OmUrlFragment implements Se
, room
, rooms
}
-
+
public enum MenuActions {
dashboardModuleStartScreen
, dashboardModuleCalendar
@@ -104,13 +104,13 @@ public class OmUrlFragment implements Se
, adminModuleOAuth
, adminModuleEmail
}
-
+
public enum MenuParams {
publicTabButton
, privateTabButton
, myTabButton
}
-
+
public static OmUrlFragment get() {
String[] arr =
getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANDING_ZONE,
String.class, "").split("/");
if (arr != null && arr.length == 2) {
@@ -122,16 +122,16 @@ public class OmUrlFragment implements Se
}
return DASHBOARD;
}
-
+
public OmUrlFragment(AreaKeys area, String type) {
this.setArea(area);
this.setType(type);
}
-
+
public OmUrlFragment(MenuActions action) {
this(action, MenuParams.myTabButton);
}
-
+
public OmUrlFragment(MenuActions action, MenuParams params) {
switch(action) {
case dashboardModuleStartScreen:
@@ -228,7 +228,7 @@ public class OmUrlFragment implements Se
public void setType(String type) {
this.type = type;
}
-
+
public static BasePanel getPanel(AreaKeys area, String type) {
BasePanel basePanel = null;
switch(area) {
@@ -301,7 +301,7 @@ public class OmUrlFragment implements Se
}
return basePanel;
}
-
+
public String getLink() {
return getBean(ConfigurationDao.class).getBaseUrl() + "#" +
getArea().name() + "/" + getType();
}
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/chat.css
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/chat.css?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/chat.css
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/chat.css
Sun Feb 5 15:46:17 2017
@@ -27,47 +27,47 @@
#chatPanel #chat {
height: 20px;
}
-#chatPanel #chat .btn-toolbar {
+##chat .btn-toolbar {
margin-top: 2px;
margin-bottom: 0;
margin-left: 5px;
}
-#chatPanel #chat #chatTabs.ui-tabs {
+#chat #chatTabs.ui-tabs {
padding: 0;
}
-#chatPanel #chat #chatTabs.ui-tabs .ui-tabs-nav {
+#chat #chatTabs.ui-tabs .ui-tabs-nav {
padding: 0;
}
-#chatPanel #chat #chatTabs.ui-tabs .ui-tabs-nav li {
+#chat #chatTabs.ui-tabs .ui-tabs-nav li {
margin: 0;
}
-#chatPanel #chat #chatTabs.ui-tabs .ui-tabs-nav li .ui-icon.ui-icon-close {
+#chat #chatTabs.ui-tabs .ui-tabs-nav li .ui-icon.ui-icon-close {
float: left;
}
-#chatPanel #chat #chatTabs.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+#chat #chatTabs.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
padding: 2px .5em;
float: left;
}
-#chatPanel #chat .control.block .ui-icon {
+#chat .control.block .ui-icon {
text-align: center;
}
-#chatPanel #chat .control.block .label {
+#chat .control.block .label {
display: inline-block;
padding-left: 20px;
}
-#chatPanel #chat .messageArea .date {
- margin-right: 5px;
- font-style: italic;
- font-size: smaller;
+#chat .messageArea .date {
+ margin-right: 5px;
+ font-style: italic;
+ font-size: smaller;
}
-#chatPanel #chat .messageArea img.profile {
+#chat .messageArea img.profile {
vertical-align: middle;
- max-height: 38px;
- max-width: 38px;
+ max-height: 38px;
+ max-width: 38px;
}
-#chatPanel #chat .messageArea .from {
+#chat .messageArea .from {
margin-left: 5px;
- margin-right: 5px;
+ margin-right: 5px;
font-weight: bold;
}
.ui-tabs .ui-tabs-panel.messageArea {
Added:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/images/folder_explore.png
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/images/folder_explore.png?rev=1781776&view=auto
==============================================================================
Binary file - no diff available.
Propchange:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/images/folder_explore.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/images/group.png
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/images/group.png?rev=1781776&view=auto
==============================================================================
Binary file - no diff available.
Propchange:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/images/group.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
Sun Feb 5 15:46:17 2017
@@ -271,3 +271,14 @@
padding: .1em .7em;
font-weight: bolder;
}
+.room.sidebar.left .tab.om-icon.big {
+ padding: 0em 1em 0 2.5em;
+ line-height: 30px;
+}
+.room.sidebar.left .tab.om-icon.big.user {
+ background-image: url(images/group.png);
+}
+.room.sidebar.left .tab.om-icon.big.file {
+ background-image: url(images/folder_explore.png);
+}
+
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/theme.css
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/theme.css?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/theme.css
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/theme.css
Sun Feb 5 15:46:17 2017
@@ -322,7 +322,7 @@ html, body {
background-image: url(images/email_add.png);
}
.user.om-icon {
- background: url(images/user.png);
+ background-image: url(images/user.png);
}
.refresh.om-icon {
background-image: url(images/refresh.png);
@@ -686,3 +686,4 @@ form .input {
width: 75%;
vertical-align: middle;
}
+
Modified:
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java?rev=1781776&r1=1781775&r2=1781776&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
(original)
+++
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
Sun Feb 5 15:46:17 2017
@@ -92,7 +92,7 @@ public class Room implements IDataProvid
public static final int CONFERENCE_TYPE_ID = 1;
public static final int RESTRICTED_TYPE_ID = 3;
public static final int INTERVIEW_TYPE_ID = 4;
-
+
public enum Right {
superModerator
, moderator
@@ -104,7 +104,7 @@ public class Room implements IDataProvid
, mute
, exclusive
}
-
+
@XmlType(namespace="org.apache.openmeetings.room.element")
public enum RoomElement {
TopBar
@@ -116,7 +116,7 @@ public class Room implements IDataProvid
, Whiteboard
, MicrophoneStatus
}
-
+
public enum Type {
conference(CONFERENCE_TYPE_ID)
//, audience(2)
@@ -124,24 +124,24 @@ public class Room implements IDataProvid
, interview(INTERVIEW_TYPE_ID);
//, custom(5)
private int id;
-
+
Type() {} //default;
Type(int id) {
this.id = id;
}
-
+
public int getId() {
return id;
}
-
+
public static Type get(Long type) {
return get(type == null ? 1 : type.intValue());
}
-
+
public static Type get(Integer type) {
return get(type == null ? 1 : type.intValue());
}
-
+
public static Type get(int type) {
Type rt = Type.conference;
switch (type) {
@@ -157,7 +157,7 @@ public class Room implements IDataProvid
return rt;
}
}
-
+
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@@ -230,7 +230,7 @@ public class Room implements IDataProvid
@Column(name = "is_audio_only", nullable = false)
@Element(name = "isAudioOnly", data = true, required = false)
private boolean audioOnly;
-
+
@Column(name = "is_closed", nullable = false)
@Element(data = true, required = false)
private boolean closed;
@@ -287,15 +287,15 @@ public class Room implements IDataProvid
@Column(name = "sip_enabled", nullable = false)
@Element(data = true, required = false)
private boolean sipEnabled;
-
+
@Column(name = "confno")
@Element(data = true, required = false)
private String confno;
-
+
@Column(name = "pin")
@Element(data = true, required = false)
private String pin;
-
+
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "room_id", insertable = true, updatable = true)
@ElementDependent
@@ -520,7 +520,7 @@ public class Room implements IDataProvid
public boolean isHidden(RoomElement e) {
return hiddenElements != null && hiddenElements.contains(e);
}
-
+
public boolean hide(RoomElement e) {
if (hiddenElements == null) {
hiddenElements = new HashSet<>();