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("&nbsp;", " ") + " ";
+                       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("&nbsp;", " ") + " ";
-                       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)", ":|", ":\\", "=\\", ":*", ":&gt;", ":&lt;"
        ];
+       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
                "&gt;:)": {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)",":|",":\\","=\\",":*",":&gt;",":&lt;"];this.specialEmoticons={"&gt;:)":{cssClass:"red-emoticon
 small-emoticon spaced-emoticon"},"&gt;;)":{cssClass:"red-emoticon 
small-emoticon spaced-emoticon"},"&gt;:(":{cssClass:"red-emoticon 
small-emoticon spaced-emoticon"},"&gt;: )":{cssClass:"red-emoticon 
small-emoticon"},"&gt;; )":{cssClass:"red-emoticon small-emoticon"},"&gt;: 
(":{cssClass:"red-emoticon small-emoticon"},";(":{cssClass:"red-emoticon 
spaced-emoticon"},"&lt;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)",":|",":\\","=\\",":*",":&gt;",":&lt;"];this.twoCharEmoticons=this.twoCharacterEmoticons.slice();this.specialEmoticons={"&gt;:)":{cssClass:"red-emoticon
 small-emoticon spaced-emoticon"},"&gt;;)":{cssClass:"red-emoticon 
small-emoticon spaced-emoticon"},"&gt;:(":{cssClass:"red-emoticon 
small-emoticon spaced-emoticon"},"&gt;: )":{cssClass:"red-emoticon 
small-emoticon"},"&gt;; )":{cssClass:"red-emoticon small-emoticon"},"&gt;: 
(":{cssClass:"red-emoticon small-emoticon"},";(":{cssCl
 ass:"red-emoticon spaced-emoticon"},"&lt;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<>();


Reply via email to