Author: solomax
Date: Thu Dec  3 19:03:33 2015
New Revision: 1717837

URL: http://svn.apache.org/viewvc?rev=1717837&view=rev
Log:
[OPENMEETINGS-887] actions are added to the global chat

Added:
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.html
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.html
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.html
      - copied, changed from r1717826, 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.html
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
      - copied, changed from r1717714, 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.html
      - copied unchanged from r1717712, 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.html
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
      - copied, changed from r1717712, 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.html
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/images/connect.png
   (with props)
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.html
      - copied unchanged from r1717651, 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
      - copied, changed from r1717714, 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.html
      - copied unchanged from r1717651, 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
      - copied, changed from r1717651, 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/connect.png
   (with props)
Removed:
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.html
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.html
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java
Modified:
    
openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
    
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
    openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/chat.css
    openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/forms.css
    openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/theme.css
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/chat.css
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/forms.css
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css

Modified: 
openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
 Thu Dec  3 19:03:33 2015
@@ -1437,11 +1437,6 @@
                                canvas._drawarea.stopStreaming(value);
                        } else if (value.message=='roomClosed'){
                                canvas.roomClosed();
-                       } else if (value.message=='inviteToRoom'){
-                               if ($debug) Debug.write("Incoming Room 
Invitation ",value);
-                       } else if (value.message=='inviteToRoomAnswer'){
-                               if ($debug) Debug.write("Incoming Room 
inviteToRoomAnswer ",value);
-                               new lz.errorPopup(canvas, {error: 
value.usermessage});
                        } else {
                                if ($debug) Debug.warn("Unknown Event 
-newMessageByRoomAndDomain- ",value);
                        }

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 Thu Dec  3 19:03:33 2015
@@ -67,6 +67,7 @@ import org.apache.openmeetings.web.util.
 import org.apache.openmeetings.web.util.JpgRecordingResourceReference;
 import org.apache.openmeetings.web.util.Mp4RecordingResourceReference;
 import org.apache.openmeetings.web.util.OggRecordingResourceReference;
+import org.apache.openmeetings.web.util.ProfileImageResourceReference;
 import org.apache.openmeetings.web.util.UserDashboardPersister;
 import org.apache.wicket.Localizer;
 import org.apache.wicket.Page;
@@ -154,6 +155,7 @@ public class Application extends Authent
                mountResource("/recordings/mp4/${id}", new 
Mp4RecordingResourceReference());
                mountResource("/recordings/ogg/${id}", new 
OggRecordingResourceReference());
                mountResource("/recordings/jpg/${id}", new 
JpgRecordingResourceReference()); //should be in sync with VideoPlayer
+               mountResource("/profile/${id}", new 
ProfileImageResourceReference()); //should be in sync with VideoPlayer
        }
 
        private static class NoVersionMapper extends MountedMapper {

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ProfileImagePanel.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
 Thu Dec  3 19:03:33 2015
@@ -18,68 +18,24 @@
  */
 package org.apache.openmeetings.web.common;
 
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.apache.openmeetings.web.app.Application.getBean;
+import static 
org.apache.openmeetings.web.util.ProfileImageResourceReference.getUrl;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.net.URI;
-
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.image.Image;
-import org.apache.wicket.request.resource.ByteArrayResource;
-import org.apache.wicket.util.io.IOUtils;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
 
 public class ProfileImagePanel extends BasePanel {
        private static final long serialVersionUID = 1L;
-       private static final Logger log = 
Red5LoggerFactory.getLogger(ProfileImagePanel.class, webAppRootKey);
        protected final WebMarkupContainer profile;
        
        public ProfileImagePanel(String id, final long userId) {
                super(id);
                
                profile = new TransparentWebMarkupContainer("profile");
-               String uri = getBean(UserDao.class).get(userId).getPictureuri();
-               boolean absolute = false;
-               try {
-                       absolute = URI.create(uri).isAbsolute();
-               } catch (Exception e) {
-                       //no-op
-               }
-               if (absolute) {
-                       profile.add(new 
WebMarkupContainer("img").add(AttributeModifier.append("alt", 
Application.getString(5L)), AttributeModifier.append("src", uri)));
-               } else {
-                       profile.add(new Image("img", new 
ByteArrayResource("image/jpeg") {
-                               private static final long serialVersionUID = 1L;
-
-                               @Override
-                               protected ResourceResponse 
newResourceResponse(Attributes attributes) {
-                                       ResourceResponse rr = 
super.newResourceResponse(attributes);
-                                       rr.disableCaching();
-                                       return rr;
-                               }
-                               
-                               @Override
-                               protected byte[] getData(Attributes attributes) 
{
-                                       String uri = 
getBean(UserDao.class).get(userId).getPictureuri();
-                                       File img = 
OmFileHelper.getUserProfilePicture(userId, uri);
-                                       try (InputStream is = new 
FileInputStream(img)) {
-                                               return IOUtils.toByteArray(is);
-                                       } catch (Exception e) {
-                                               log.error("failed to get bytes 
from image", e);
-                                       }
-                                       return null;
-                               }
-                       }));
-               }
+               profile.add(new WebMarkupContainer("img").add(
+                               AttributeModifier.append("alt", 
Application.getString(5L))
+                               , AttributeModifier.append("src", 
getUrl(getRequestCycle(), userId))));
                add(profile.setOutputMarkupId(true));
        }
 }

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
 Thu Dec  3 19:03:33 2015
@@ -57,5 +57,6 @@
        <div wicket:id="aboutDialog"></div>
        <div wicket:id="userInfoDialog"></div>
        <div wicket:id="newMessageDialog"></div>
+       <div wicket:id="inviteUserDialog"></div>
 </wicket:extend>
 </html>

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
 Thu Dec  3 19:03:33 2015
@@ -50,8 +50,9 @@ import org.apache.openmeetings.web.commo
 import org.apache.openmeetings.web.common.menu.MenuPanel;
 import org.apache.openmeetings.web.user.AboutDialog;
 import org.apache.openmeetings.web.user.ChatPanel;
-import org.apache.openmeetings.web.user.profile.MessageDialog;
-import org.apache.openmeetings.web.user.profile.UserInfoDialog;
+import org.apache.openmeetings.web.user.InviteUserToRoomDialog;
+import org.apache.openmeetings.web.user.MessageDialog;
+import org.apache.openmeetings.web.user.UserInfoDialog;
 import org.apache.openmeetings.web.util.ContactsHelper;
 import org.apache.openmeetings.web.util.OmUrlFragment;
 import org.apache.wicket.Component;
@@ -96,6 +97,7 @@ public class MainPage extends BaseInited
        private final ChatPanel chat;
        private final MessageDialog newMessage;
        private final UserInfoDialog userInfo;
+       private final InviteUserToRoomDialog inviteUser;
        
        public MainPage(PageParameters pp) {
                super();
@@ -161,6 +163,7 @@ public class MainPage extends BaseInited
                        }
                });
                add(userInfo = new UserInfoDialog("userInfoDialog", 
newMessage));
+               add(inviteUser = new 
InviteUserToRoomDialog("inviteUserDialog"));
                add(new AbstractDefaultAjaxBehavior() {
                        private static final long serialVersionUID = 1L;
 
@@ -221,6 +224,20 @@ public class MainPage extends BaseInited
                                log.debug("WebSocketBehavior::onClose");
                        }
                });
+               add(new AbstractDefaultAjaxBehavior() {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void respond(AjaxRequestTarget target) {
+                               inviteUser.open(target, 
getParam(getComponent(), PARAM_USER_ID).toLong());
+                       }
+                       
+                       @Override
+                       public void renderHead(Component component, 
IHeaderResponse response) {
+                               super.renderHead(component, response);
+                               response.render(new 
PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("inviteUser",
 this, explicit(PARAM_USER_ID)), "inviteUser")));
+                       }
+               });
                //load preselected content
                add(areaBehavior = new 
AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
                        private static final long serialVersionUID = 1L;

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
 Thu Dec  3 19:03:33 2015
@@ -28,6 +28,7 @@ import static org.apache.openmeetings.we
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.apache.openmeetings.web.room.RoomPanel.isModerator;
 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.util.ArrayList;
@@ -124,11 +125,11 @@ public class ChatPanel extends BasePanel
                return o.put("scope", scope).put("scopeName", scopeName);
        }
        
-       public static JSONObject getMessage(List<ChatMessage> list) throws 
JSONException {
+       public JSONObject getMessage(List<ChatMessage> list) throws 
JSONException {
                return getMessage(getUserId(), list);
        }
        
-       private static JSONObject getMessage(long curUserId, List<ChatMessage> 
list) throws JSONException {
+       private JSONObject getMessage(long curUserId, List<ChatMessage> list) 
throws JSONException {
                JSONArray arr = new JSONArray();
                for (ChatMessage m : list) {
                        String smsg = m.getMessage();
@@ -136,7 +137,12 @@ public class ChatPanel extends BasePanel
                        arr.put(setScope(new JSONObject(), m, curUserId)
                                .put("id", m.getId())
                                .put("message", smsg)
-                               .put("from", m.getFromUser().getFirstname() + " 
" + m.getFromUser().getLastname())
+                               .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("sent", 
getDateFormat().format(m.getSent())));
                }
                return new JSONObject()

Added: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.html
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.html?rev=1717837&view=auto
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.html
 (added)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.html
 Thu Dec  3 19:03:33 2015
@@ -0,0 +1,30 @@
+<?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>
+       <form wicket:id="form">
+               <textarea wicket:id="message" style="width: 100%; height: 
100px;"></textarea>
+               <div>
+                       <input type="checkbox" wicket:id="enterRoom" /><label 
wicket:for="enterRoom"><wicket:message key="1134"/></label>
+               </div>
+       </form>
+</wicket:panel>
+</html>

Added: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java?rev=1717837&view=auto
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
 (added)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
 Thu Dec  3 19:03:33 2015
@@ -0,0 +1,90 @@
+/*
+ * 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;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class InviteUserMessageDialog extends AbstractFormDialog<String>  {
+       private static final long serialVersionUID = 1L;
+       private final DialogButton send = new DialogButton("send", 
Application.getString(1139));
+       private final DialogButton cancel = new DialogButton("cancel", 
Application.getString(219));
+       private final Form<Void> form = new Form<Void>("form");
+       private final TextArea<String> message = new TextArea<>("message", 
Model.of(""));
+       private final CheckBox enterRoom = new CheckBox("enterRoom", 
Model.of(false));
+       
+       public InviteUserMessageDialog(String id) {
+               super(id, Application.getString(1138));
+               add(form.add(message.setRequired(true), 
enterRoom).setOutputMarkupId(true));
+       }
+
+       public void open(IPartialPageRequestHandler handler, Long roomId, Long 
userId) {
+               Room r = getBean(RoomDao.class).get(roomId);
+               User u = getBean(UserDao.class).get(getUserId());
+               message.setModelObject(String.format("%s %s %s %s", 
u.getFirstname(), u.getLastname(), getString("1137"), r.getName()));
+               enterRoom.setModelObject(false);
+               handler.add(form);
+               open(handler);
+       }
+       
+       @Override
+       protected List<DialogButton> getButtons() {
+               return Arrays.asList(send, cancel);
+       }
+       
+       @Override
+       protected DialogButton getSubmitButton() {
+               return send;
+       }
+
+       @Override
+       public Form<?> getForm() {
+               return form;
+       }
+
+       @Override
+       protected void onError(AjaxRequestTarget target) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       protected void onSubmit(AjaxRequestTarget target) {
+               // TODO Auto-generated method stub
+               
+       }
+}

Added: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.html
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.html?rev=1717837&view=auto
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.html
 (added)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.html
 Thu Dec  3 19:03:33 2015
@@ -0,0 +1,34 @@
+<?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 class="rooms desc info-text"><wicket:message key="1132"/></div>
+       <div class="rooms title"><wicket:message key="777"/></div>
+       <div class="room list container">
+               <div wicket:id="publicRooms"></div>
+       </div>
+       <div class="rooms title"><wicket:message key="779"/></div>
+       <div class="room list container">
+               <div wicket:id="privateRooms"></div>
+       </div>
+       <div wicket:id="inviteMsg"/>
+</wicket:panel>
+</html>

Added: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java?rev=1717837&view=auto
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
 (added)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
 Thu Dec  3 19:03:33 2015
@@ -0,0 +1,103 @@
+/*
+ * 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;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.user.rooms.RoomListPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class InviteUserToRoomDialog extends AbstractDialog<String> {
+       private static final long serialVersionUID = 1L;
+       private DialogButton cancel = new DialogButton("cancel", 
Application.getString(219));
+       private final RoomListPanel publicRooms;
+       private final RoomListPanel privateRooms;
+       private final InviteUserMessageDialog inviteMsg = new 
InviteUserMessageDialog("inviteMsg"); 
+       private Long userId;
+
+       private class InviteRoomListPanel extends RoomListPanel {
+               private static final long serialVersionUID = 1L;
+
+               public InviteRoomListPanel(String id, List<Room> rooms, final 
String label) {
+                       super(id, rooms, label);
+               }
+               
+               @Override
+               public void onRoomEnter(AjaxRequestTarget target, Long roomId) {
+                       //FIXME TODO only show message if other user is online
+                       inviteMsg.open(target, roomId, userId);
+               }
+       }
+       
+       public InviteUserToRoomDialog(String id) {
+               super(id, Application.getString(1131));
+               add(publicRooms = new InviteRoomListPanel("publicRooms", new 
ArrayList<Room>(), Application.getString(1135)));
+               add(privateRooms = new InviteRoomListPanel("privateRooms", new 
ArrayList<Room>(), Application.getString(1135)));
+               add(inviteMsg);
+       }
+       
+       private List<Room> getPrivateRooms(Long userId1, Long userId2, RoomDao 
roomDao) {
+               List<Long> orgIds = new ArrayList<>();
+               List<Long> orgIds2 = new ArrayList<>();
+               UserDao userDao = getBean(UserDao.class);
+               for (GroupUser gu : userDao.get(userId1).getGroupUsers()) {
+                       orgIds.add(gu.getGroup().getId());
+               }
+               for (GroupUser gu : userDao.get(userId2).getGroupUsers()) {
+                       orgIds2.add(gu.getGroup().getId());
+               }
+               orgIds.retainAll(orgIds2);
+               List<Room> result = new ArrayList<>();
+               for (Long orgId : orgIds) {
+                       result.addAll(roomDao.getGroupRooms(orgId));
+               }
+               return result;
+       }
+       
+       public void open(IPartialPageRequestHandler handler, Long userId) {
+               this.userId = userId;
+               RoomDao roomDao = getBean(RoomDao.class);
+               publicRooms.update(handler, roomDao.getPublicRooms());
+               privateRooms.update(handler, getPrivateRooms(getUserId(), 
userId, roomDao));
+               open(handler);
+       }
+       
+       @Override
+       protected List<DialogButton> getButtons() {
+               return Arrays.asList(cancel);
+       }
+       
+       @Override
+       public void onClose(IPartialPageRequestHandler handler, DialogButton 
button) {
+       }
+}

Copied: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.html
 (from r1717826, 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.html)
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.html?p2=openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.html&p1=openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.html&r1=1717826&r2=1717837&rev=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.html
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.html
 Thu Dec  3 19:03:33 2015
@@ -77,4 +77,4 @@
                </table>
        </form>
 </wicket:panel>
-</html>
\ No newline at end of file
+</html>

Copied: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
 (from r1717714, 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.java)
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java?p2=openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java&p1=openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.java&r1=1717714&r2=1717837&rev=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.java
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
 Thu Dec  3 19:03:33 2015
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.web.user.profile;
+package org.apache.openmeetings.web.user;
 
 import static 
org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
 import static 
org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;

Copied: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
 (from r1717712, 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java)
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java?p2=openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java&p1=openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java&r1=1717712&r2=1717837&rev=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
 Thu Dec  3 19:03:33 2015
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.web.user.profile;
+package org.apache.openmeetings.web.user;
 
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
@@ -26,6 +26,7 @@ import java.util.List;
 
 import org.apache.openmeetings.db.dao.user.UserContactDao;
 import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.user.profile.UserProfilePanel;
 import org.apache.openmeetings.web.util.ContactsHelper;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.WebMarkupContainer;

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js
 Thu Dec  3 19:03:33 2015
@@ -17,8 +17,13 @@
  * under the License.
  */
 var chatTabs, tabTemplate = "<li><a href='#{href}'>#{label}</a></li>"
-       , msgTemplate = "<div id='chat-msg-id-#{id}'><span 
class='from'>#{from}</span><span class='date'>#{sent}</span>#{msg}</div>"
-       , acceptTemplate = "<span class='tick om-icon align-right clickable' 
data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var 
e=$(this);acceptMessage(e.data(\"roomid\"),e.data(\"msgid\"));e.parent().remove();'></span>"
+       , msgTemplate = "<div id='chat-msg-id-#{id}'><img class='profile' 
src='#{imgSrc}'/><span class='from' 
data-user-id='#{userId}'>#{from}</span><span class='date 
align-right'>#{sent}</span>#{msg}</div>"
+       , acceptTemplate = "<div class='tick om-icon align-right clickable' 
data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var 
e=$(this);acceptMessage(e.data(\"roomid\"),e.data(\"msgid\"));e.parent().remove();'></div>"
+       , infoTemplate = "<div class='user om-icon align-right clickable' 
data-user-id='#{userId}' onclick='var 
e=$(this);showUserInfo(e.data(\"userId\"));'></div>"
+       , addTemplate = "<div class='add om-icon align-right clickable' 
data-user-id='#{userId}' onclick='var 
e=$(this);addContact(e.data(\"userId\"));'></div>"
+       , messageTemplate = "<div class='new-email om-icon align-right 
clickable' data-user-id='#{userId}' onclick='var 
e=$(this);privateMessage(e.data(\"userId\"));'></div>"
+       , inviteTemplate = "<div class='invite om-icon align-right clickable' 
data-user-id='#{userId}' onclick='var 
e=$(this);inviteUser(e.data(\"userId\"));'></div>"
+       , clearBlock = "<div class='clear'></div>"
        , closeBlock = "<span class='ui-icon ui-icon-close' 
role='presentation'></span>"
        , closedHeight = "20px", openedHeight = "345px";
 $(function() {
@@ -86,8 +91,17 @@ function addChatMessage(m) {
                var msg;
                for (var i = 0; i < m.msg.length; ++i) {
                        var cm = m.msg[i];
-                       //needModeration
-                       msg = $(msgTemplate.replace(/#\{id\}/g, 
cm.id).replace(/#\{from\}/g, cm.from).replace(/#\{sent\}/g, 
cm.sent).replace(/#\{msg\}/g, cm.message));
+                       msg = $(msgTemplate.replace(/#\{id\}/g, cm.id)
+                                       .replace(/#\{userId\}/g, cm.from.id)
+                                       .replace(/#\{imgSrc\}/g, cm.from.img)
+                                       .replace(/#\{from\}/g, cm.from.name)
+                                       .replace(/#\{sent\}/g, cm.sent)
+                                       .replace(/#\{msg\}/g, cm.message));
+                       var date = msg.children('.date');
+                       date.after(infoTemplate.replace(/#\{userId\}/g, 
cm.from.id));
+                       date.after(addTemplate.replace(/#\{userId\}/g, 
cm.from.id));
+                       date.after(messageTemplate.replace(/#\{userId\}/g, 
cm.from.id));
+                       date.after(inviteTemplate.replace(/#\{userId\}/g, 
cm.from.id));
                        if (cm.needModeration) {
                                
msg.append(acceptTemplate.replace(/#\{msgid\}/g, cm.id).replace(/#\{roomid\}/g, 
cm.scope.substring(9)));
                        }
@@ -97,6 +111,7 @@ function addChatMessage(m) {
                        if (m.mode == "accept") {
                                $('#chat-msg-id-' + cm.id).remove();
                        }
+                       msg.append(clearBlock);
                        $('#' + cm.scope).append(msg);
                }
                if (msg[0]) {

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
 Thu Dec  3 19:03:33 2015
@@ -56,7 +56,8 @@
                                                                <td 
wicket:id="search"></td>
                                                                <td 
style="white-space: nowrap;"><div wicket:id="add" class="add om-icon clickable" 
wicket:message="title:1186"
                                                                        
></div><div wicket:id="message" class="new-email om-icon clickable" 
wicket:message="title:1253"
-                                                                       
></div><div wicket:id="view" class="user om-icon clickable" 
wicket:message="title:1236"></div></td>
+                                                                       
></div><div wicket:id="view" class="user om-icon clickable" 
wicket:message="title:1236"
+                                                                       
></div><div wicket:id="invite" class="invite om-icon clickable" 
wicket:message="title:1131"></div></td>
                                                        </tr>
                                                </tbody>
                                        </table>

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
 Thu Dec  3 19:03:33 2015
@@ -125,6 +125,7 @@ public class UserSearchPanel extends Use
                                item.add(new 
WebMarkupContainer("add").setVisible(userId != getUserId() && 
!contactsDao.isContact(userId, getUserId()))
                                                
.add(AttributeAppender.append("onclick", String.format("addContact(%s);", 
userId))));
                                item.add(new 
WebMarkupContainer("message").setVisible(userId != 
getUserId()).add(AttributeAppender.append("onclick", 
String.format("privateMessage(%s);", userId))));
+                               item.add(new 
WebMarkupContainer("invite").setVisible(userId != 
getUserId()).add(AttributeAppender.append("onclick", 
String.format("inviteUser(%s);", userId))));
                                //item.add(new TooltipBehavior(new 
Options("content", "TODO:: Picture will be displayed"))); //FIXME 
                        }
                };

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
 Thu Dec  3 19:03:33 2015
@@ -27,11 +27,11 @@ import org.apache.wicket.core.request.ha
 
 public class RoomEnterBehavior extends AjaxEventBehavior {
        private static final long serialVersionUID = 1L;
-       private final long roomid;
+       protected final long roomId;
        
-       public RoomEnterBehavior(long roomid) {
+       public RoomEnterBehavior(long roomId) {
                super("click");
-               this.roomid = roomid;
+               this.roomId = roomId;
        }
 
        public static OmUrlFragment getRoomUrlFragment(long roomId) {
@@ -44,6 +44,6 @@ public class RoomEnterBehavior extends A
        
        @Override
        protected void onEvent(AjaxRequestTarget target) {
-               roomEnter((MainPage)getComponent().getPage(), target, roomid);
+               roomEnter((MainPage)getComponent().getPage(), target, roomId);
        }
 }

Added: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.html?rev=1717837&view=auto
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.html
 (added)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.html
 Thu Dec  3 19:03:33 2015
@@ -0,0 +1,37 @@
+<?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>
+       <table class="room-list">
+               <tr wicket:id="list" class="room-row">
+                       <td>
+                               <div wicket:id="roomContainer">         
+                                       <span wicket:id="roomName">[room 
name]</span><br/>
+                                       <wicket:message key="398" />&nbsp;<span 
wicket:id="curUsers"></span>&nbsp;/&nbsp;<span
+                                       
wicket:id="totalUsers"></span>&nbsp;&nbsp;<span wicket:id="refresh" 
+                                       class="ui-icon 
ui-icon-arrowrefresh-1-n" style="display: inline-block"></span>
+                               </div>
+                       </td>
+                       <td><button wicket:id="btn"><span 
wicket:id="label"></span></button></td>
+               </tr>
+       </table>
+</wicket:panel>
+</html>

Added: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java?rev=1717837&view=auto
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
 (added)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
 Thu Dec  3 19:03:33 2015
@@ -0,0 +1,110 @@
+/*
+ * 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.rooms;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.ui.form.button.Button;
+
+public class RoomListPanel extends UserPanel {
+       private static final long serialVersionUID = 1L;
+       private final ListView<Room> list;
+
+       public RoomListPanel(String id, List<Room> rooms, final String label) {
+               super(id);
+               setOutputMarkupId(true);
+               add(list = new ListView<Room>("list", rooms) {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void populateItem(ListItem<Room> item) {
+                               final Room r = item.getModelObject();
+                               WebMarkupContainer roomContainer;
+                               item.add((roomContainer = new 
WebMarkupContainer("roomContainer")).add(new AjaxEventBehavior("click"){
+                                       private static final long 
serialVersionUID = 1L;
+                                       
+                                       @Override
+                                       protected void 
onEvent(AjaxRequestTarget target) {
+                                               onContainerClick(target, r);
+                                       }
+                               }));
+                               roomContainer.add(new Label("roomName", 
r.getName()));
+                               final Label curUsers = new Label("curUsers", 
new 
Model<Integer>(Application.getBean(ISessionManager.class).getClientListByRoom(r.getId()).size()));
+                               
roomContainer.add(curUsers.setOutputMarkupId(true));
+                               roomContainer.add(new Label("totalUsers", 
r.getNumberOfPartizipants()));
+                               item.add(new Button("btn").add(new 
Label("label", label)).add(new RoomEnterBehavior(r.getId()) {
+                                       private static final long 
serialVersionUID = 1L;
+
+                                       @Override
+                                       protected void 
onEvent(AjaxRequestTarget target) {
+                                               onRoomEnter(target, roomId);
+                                       }
+                               }));
+                               roomContainer.add(new AjaxLink<Void>("refresh") 
{
+                                       private static final long 
serialVersionUID = 1L;
+
+                                       @Override
+                                       public void onClick(AjaxRequestTarget 
target) {
+                                               
target.add(curUsers.setDefaultModelObject(Application.getBean(ISessionManager.class).getClientListByRoom(r.getId()).size()));
+                                               onRefreshClick(target, r);
+                                       }
+                               });
+                       }
+               });
+       }
+       
+       public void update(IPartialPageRequestHandler handler, List<Room> 
rooms) {
+               list.setList(rooms);
+               handler.add(this);
+       }
+
+       /**
+        * this method need to be overriden to perform custom actions on room 
container click
+        */
+       public void onContainerClick(AjaxRequestTarget target, Room r) {
+       }
+
+       /**
+        * this method need to be overriden to perform custom actions on room 
refresh click
+        */
+       public void onRefreshClick(AjaxRequestTarget target, Room r) {
+       }
+
+       /**
+        * this method need to be overriden to perform custom actions on room 
enter click
+        */
+       public void onRoomEnter(AjaxRequestTarget target, Long roomId) {
+               RoomEnterBehavior.roomEnter((MainPage)getPage(), target, 
roomId);
+       }
+}

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
 Thu Dec  3 19:03:33 2015
@@ -23,19 +23,7 @@
        <table>
                <tr>
                        <td style="vertical-align: top">
-                               <table class="room-list">
-                                       <tr wicket:id="list" class="room-row">
-                                               <td>
-                                                       <div 
wicket:id="roomContainer">         
-                                                               <span 
wicket:id="roomName">[room name]</span><br/>
-                                                               <wicket:message 
key="398" />&nbsp;<span wicket:id="curUsers"></span>&nbsp;/&nbsp;<span
-                                                               
wicket:id="totalUsers"></span>&nbsp;&nbsp;<span wicket:id="refresh" 
-                                                               class="ui-icon 
ui-icon-arrowrefresh-1-n" style="display: inline-block"></span>
-                                                       </div>
-                                               </td>
-                                               <td><button 
wicket:id="enter"><wicket:message key="131"/></button></td>
-                                       </tr>
-                               </table>
+                               <div wicket:id="list"></div>
                        </td>
                        <td style="vertical-align: top">
                                <!-- Users in this Room -->

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
 Thu Dec  3 19:03:33 2015
@@ -32,9 +32,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.UserPanel;
-import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.image.Image;
@@ -45,8 +43,6 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.request.resource.ByteArrayResource;
 import org.apache.wicket.util.io.IOUtils;
 
-import com.googlecode.wicket.jquery.ui.form.button.Button;
-
 public class RoomsPanel extends UserPanel {
        private static final long serialVersionUID = 1L;
        private final WebMarkupContainer clientsContainer = new 
WebMarkupContainer("clientsContainer");
@@ -60,37 +56,20 @@ public class RoomsPanel extends UserPane
 
        public RoomsPanel(String id, List<Room> rooms) {
                super(id);
-               add(new ListView<Room>("list", rooms) {
+               add(new RoomListPanel("list", rooms, 
Application.getString(131)) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
-                       protected void populateItem(ListItem<Room> item) {
-                               final Room r = item.getModelObject();
-                               WebMarkupContainer roomContainer;
-                               item.add((roomContainer = new 
WebMarkupContainer("roomContainer")).add(new AjaxEventBehavior("click"){
-                                       private static final long 
serialVersionUID = 1L;
-                                       
-                                       @Override
-                                       protected void 
onEvent(AjaxRequestTarget target) {
-                                               roomId = r.getId();
-                                               updateRoomDetails(target);
-                                       }
-                               }));
-                               roomContainer.add(new Label("roomName", 
r.getName()));
-                               final Label curUsers = new Label("curUsers", 
new 
Model<Integer>(Application.getBean(ISessionManager.class).getClientListByRoom(r.getId()).size()));
-                               
roomContainer.add(curUsers.setOutputMarkupId(true));
-                               roomContainer.add(new Label("totalUsers", 
r.getNumberOfPartizipants()));
-                               item.add(new Button("enter").add(new 
RoomEnterBehavior(r.getId())));
-                               roomContainer.add(new AjaxLink<Void>("refresh") 
{
-                                       private static final long 
serialVersionUID = 1L;
-
-                                       @Override
-                                       public void onClick(AjaxRequestTarget 
target) {
-                                               roomId = r.getId();
-                                               
target.add(curUsers.setDefaultModelObject(Application.getBean(ISessionManager.class).getClientListByRoom(r.getId()).size()));
-                                               updateRoomDetails(target);
-                                       }
-                               });
+                       public void onContainerClick(AjaxRequestTarget target, 
Room r) {
+                               roomId = r.getId();
+                               updateRoomDetails(target);
+                       }
+                       
+                       @Override
+                       public void onRefreshClick(AjaxRequestTarget target, 
Room r) {
+                               super.onRefreshClick(target, r);
+                               roomId = r.getId();
+                               updateRoomDetails(target);
                        }
                });
                

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
 Thu Dec  3 19:03:33 2015
@@ -19,9 +19,9 @@
   
 -->
 <html xmlns:wicket="http://wicket.apache.org";>
-       <wicket:panel>
-               <div wicket:id="title" class="rooms title"></div>
-               <div wicket:id="desc" class="rooms desc info-text"></div>
-               <div wicket:id="rooms"></div>
-       </wicket:panel>
+<wicket:panel>
+       <div wicket:id="title" class="rooms title"></div>
+       <div wicket:id="desc" class="rooms desc info-text"></div>
+       <div wicket:id="rooms"></div>
+</wicket:panel>
 </html>

Added: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java?rev=1717837&view=auto
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java
 (added)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java
 Thu Dec  3 19:03:33 2015
@@ -0,0 +1,101 @@
+/*
+ * 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.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.URI;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.ByteArrayResource;
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.util.io.IOUtils;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ProfileImageResourceReference extends ResourceReference {
+       private static final long serialVersionUID = 1L;
+       private static final Logger log = 
Red5LoggerFactory.getLogger(ProfileImageResourceReference.class, webAppRootKey);
+
+       public ProfileImageResourceReference() {
+               super(ProfileImageResourceReference.class, "profile");
+       }
+       
+       public static String getUrl(RequestCycle rc, Long userId) {
+               return getUrl(rc, getBean(UserDao.class).get(userId));
+       }
+       
+       public static String getUrl(RequestCycle rc, User u) {
+               String uri = u.getPictureuri();
+               if (!isAbsolute(uri)) {
+                       uri = rc.urlFor(new ProfileImageResourceReference(), 
new PageParameters().add("id", u.getId())).toString();
+               }
+               return uri;
+       }
+
+       private static boolean isAbsolute(String uri) {
+               boolean absolute = false;
+               try {
+                       absolute = URI.create(uri).isAbsolute();
+               } catch (Exception e) {
+                       //no-op
+               }
+               return absolute;
+       }
+       
+       @Override
+       public IResource getResource() {
+               return new ByteArrayResource("image/jpeg") {
+                       private static final long serialVersionUID = 1L;
+                       private Long userId = null;
+
+                       @Override
+                       protected ResourceResponse 
newResourceResponse(Attributes attributes) {
+                               PageParameters params = 
attributes.getParameters();
+                               userId = params.get("id").toOptionalLong();
+                               ResourceResponse rr = 
super.newResourceResponse(attributes);
+                               rr.disableCaching();
+                               return rr;
+                       }
+                       
+                       @Override
+                       protected byte[] getData(Attributes attributes) {
+                               String uri = 
getBean(UserDao.class).get(userId).getPictureuri();
+                               if (!isAbsolute(uri)) {
+                                       File img = 
OmFileHelper.getUserProfilePicture(userId, uri);
+                                       try (InputStream is = new 
FileInputStream(img)) {
+                                               return IOUtils.toByteArray(is);
+                                       } catch (Exception e) {
+                                               log.error("failed to get bytes 
from image", e);
+                                       }
+                               }
+                               return null;
+                       }
+               };
+       }
+}

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
 (original)
+++ 
openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
 Thu Dec  3 19:03:33 2015
@@ -49,7 +49,6 @@ import org.apache.wicket.util.io.IOUtils
 import org.apache.wicket.util.resource.FileResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
-import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.time.Time;
 import org.slf4j.Logger;
 
@@ -138,16 +137,6 @@ public abstract class RecordingResourceR
        abstract String getFileName(Recording r);
        abstract File getFile(Recording r);
        
-       private Long getLong(StringValue id) {
-               Long result = null;
-               try {
-                       result = id.toLongObject();
-               } catch(Exception e) {
-                       //no-op
-               }
-               return result;
-       }
-       
        private Recording getRecording(Long id) {
                Recording r = getBean(RecordingDao.class).get(id);
                // TODO should we process public?
@@ -171,14 +160,13 @@ public abstract class RecordingResourceR
        
        private Recording getRecording(Attributes attributes) {
                PageParameters params = attributes.getParameters();
-               StringValue idStr = params.get("id");
-               Long id = getLong(idStr);
+               Long id = params.get("id").toOptionalLong();
                WebSession ws = WebSession.get();
                if (id != null && ws.isSignedIn()) {
                        return getRecording(id);
                } else {
                        ws.invalidate();
-                       if (ws.signIn(idStr.toString())) {
+                       if (ws.signIn(params.get("id").toString())) {
                                return getRecording(getRecordingId());
                        }
                }

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/chat.css
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/chat.css?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/chat.css 
(original)
+++ openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/chat.css 
Thu Dec  3 19:03:33 2015
@@ -60,6 +60,11 @@
     font-style: italic;
     font-size: smaller;
 }
+#chatPanel #chat .messageArea img.profile {
+       vertical-align: middle;
+    max-height: 38px;
+    max-width: 38px;
+}
 #chatPanel #chat .messageArea .from {
        margin-left: 5px;
     margin-right: 5px;
@@ -73,4 +78,5 @@
 #chatMessage .wysiwyg-editor {
        height: 70px;
        max-height: 70px;
+       max-width: 500px;
 }

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/forms.css
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/forms.css?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/forms.css 
(original)
+++ openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/forms.css 
Thu Dec  3 19:03:33 2015
@@ -75,4 +75,4 @@ div.formCancelButton>div {
        border: none;
        margin-left: 2px;
        margin-top: 2px;
-}
\ No newline at end of file
+}

Added: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/images/connect.png
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/images/connect.png?rev=1717837&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/images/connect.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: 
openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/theme.css
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/theme.css?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/theme.css 
(original)
+++ openmeetings/branches/3.1.x/openmeetings-web/src/main/webapp/css/theme.css 
Thu Dec  3 19:03:33 2015
@@ -377,6 +377,9 @@ html, body {
 .doc.file.om-icon {
        background-image: url(images/report.png);
 }
+.invite.om-icon {
+       background-image: url(images/connect.png);
+}
 .selected .file.item {
        background-color: #0099FF;
 }
@@ -629,3 +632,9 @@ form .input {
 #contents .btn-file>input {
        transform: translate(-3000px, 0) scale(1);
 }
+.room.list.container {
+       height: 150px;
+       max-height: 150px;
+       overflow-y: auto;
+       border: 1px solid #cccccc;
+}

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 Thu Dec  3 19:03:33 2015
@@ -67,6 +67,7 @@ import org.apache.openmeetings.web.util.
 import org.apache.openmeetings.web.util.JpgRecordingResourceReference;
 import org.apache.openmeetings.web.util.Mp4RecordingResourceReference;
 import org.apache.openmeetings.web.util.OggRecordingResourceReference;
+import org.apache.openmeetings.web.util.ProfileImageResourceReference;
 import org.apache.openmeetings.web.util.UserDashboardPersister;
 import org.apache.wicket.Localizer;
 import org.apache.wicket.Page;
@@ -154,6 +155,7 @@ public class Application extends Authent
                mountResource("/recordings/mp4/${id}", new 
Mp4RecordingResourceReference());
                mountResource("/recordings/ogg/${id}", new 
OggRecordingResourceReference());
                mountResource("/recordings/jpg/${id}", new 
JpgRecordingResourceReference()); //should be in sync with VideoPlayer
+               mountResource("/profile/${id}", new 
ProfileImageResourceReference()); //should be in sync with VideoPlayer
        }
 
        private static class NoVersionMapper extends MountedMapper {

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ProfileImagePanel.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
 Thu Dec  3 19:03:33 2015
@@ -18,68 +18,24 @@
  */
 package org.apache.openmeetings.web.common;
 
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.apache.openmeetings.web.app.Application.getBean;
+import static 
org.apache.openmeetings.web.util.ProfileImageResourceReference.getUrl;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.net.URI;
-
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.image.Image;
-import org.apache.wicket.request.resource.ByteArrayResource;
-import org.apache.wicket.util.io.IOUtils;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
 
 public class ProfileImagePanel extends BasePanel {
        private static final long serialVersionUID = 1L;
-       private static final Logger log = 
Red5LoggerFactory.getLogger(ProfileImagePanel.class, webAppRootKey);
        protected final WebMarkupContainer profile;
        
        public ProfileImagePanel(String id, final long userId) {
                super(id);
                
                profile = new TransparentWebMarkupContainer("profile");
-               String uri = getBean(UserDao.class).get(userId).getPictureuri();
-               boolean absolute = false;
-               try {
-                       absolute = URI.create(uri).isAbsolute();
-               } catch (Exception e) {
-                       //no-op
-               }
-               if (absolute) {
-                       profile.add(new 
WebMarkupContainer("img").add(AttributeModifier.append("alt", 
Application.getString(5L)), AttributeModifier.append("src", uri)));
-               } else {
-                       profile.add(new Image("img", new 
ByteArrayResource("image/jpeg") {
-                               private static final long serialVersionUID = 1L;
-
-                               @Override
-                               protected ResourceResponse 
newResourceResponse(Attributes attributes) {
-                                       ResourceResponse rr = 
super.newResourceResponse(attributes);
-                                       rr.disableCaching();
-                                       return rr;
-                               }
-                               
-                               @Override
-                               protected byte[] getData(Attributes attributes) 
{
-                                       String uri = 
getBean(UserDao.class).get(userId).getPictureuri();
-                                       File img = 
OmFileHelper.getUserProfilePicture(userId, uri);
-                                       try (InputStream is = new 
FileInputStream(img)) {
-                                               return IOUtils.toByteArray(is);
-                                       } catch (Exception e) {
-                                               log.error("failed to get bytes 
from image", e);
-                                       }
-                                       return null;
-                               }
-                       }));
-               }
+               profile.add(new WebMarkupContainer("img").add(
+                               AttributeModifier.append("alt", 
Application.getString(5L))
+                               , AttributeModifier.append("src", 
getUrl(getRequestCycle(), userId))));
                add(profile.setOutputMarkupId(true));
        }
 }

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
 Thu Dec  3 19:03:33 2015
@@ -57,5 +57,6 @@
        <div wicket:id="aboutDialog"></div>
        <div wicket:id="userInfoDialog"></div>
        <div wicket:id="newMessageDialog"></div>
+       <div wicket:id="inviteUserDialog"></div>
 </wicket:extend>
 </html>

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
 Thu Dec  3 19:03:33 2015
@@ -51,8 +51,9 @@ import org.apache.openmeetings.web.room.
 import org.apache.openmeetings.web.room.message.RoomMessage;
 import org.apache.openmeetings.web.user.AboutDialog;
 import org.apache.openmeetings.web.user.ChatPanel;
-import org.apache.openmeetings.web.user.profile.MessageDialog;
-import org.apache.openmeetings.web.user.profile.UserInfoDialog;
+import org.apache.openmeetings.web.user.InviteUserToRoomDialog;
+import org.apache.openmeetings.web.user.MessageDialog;
+import org.apache.openmeetings.web.user.UserInfoDialog;
 import org.apache.openmeetings.web.util.ContactsHelper;
 import org.apache.openmeetings.web.util.OmUrlFragment;
 import org.apache.wicket.Component;
@@ -97,6 +98,7 @@ public class MainPage extends BaseInited
        private final ChatPanel chat;
        private final MessageDialog newMessage;
        private final UserInfoDialog userInfo;
+       private final InviteUserToRoomDialog inviteUser;
        
        public MainPage(PageParameters pp) {
                super();
@@ -162,6 +164,7 @@ public class MainPage extends BaseInited
                        }
                });
                add(userInfo = new UserInfoDialog("userInfoDialog", 
newMessage));
+               add(inviteUser = new 
InviteUserToRoomDialog("inviteUserDialog"));
                add(new AbstractDefaultAjaxBehavior() {
                        private static final long serialVersionUID = 1L;
 
@@ -227,6 +230,20 @@ public class MainPage extends BaseInited
                                }
                        }
                });
+               add(new AbstractDefaultAjaxBehavior() {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void respond(AjaxRequestTarget target) {
+                               inviteUser.open(target, 
getParam(getComponent(), PARAM_USER_ID).toLong());
+                       }
+                       
+                       @Override
+                       public void renderHead(Component component, 
IHeaderResponse response) {
+                               super.renderHead(component, response);
+                               response.render(new 
PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("inviteUser",
 this, explicit(PARAM_USER_ID)), "inviteUser")));
+                       }
+               });
                //load preselected content
                add(areaBehavior = new 
AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
                        private static final long serialVersionUID = 1L;

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
 Thu Dec  3 19:03:33 2015
@@ -28,6 +28,7 @@ import static org.apache.openmeetings.we
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.apache.openmeetings.web.room.RoomPanel.isModerator;
 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.util.ArrayList;
@@ -124,11 +125,11 @@ public class ChatPanel extends BasePanel
                return o.put("scope", scope).put("scopeName", scopeName);
        }
        
-       public static JSONObject getMessage(List<ChatMessage> list) throws 
JSONException {
+       public JSONObject getMessage(List<ChatMessage> list) throws 
JSONException {
                return getMessage(getUserId(), list);
        }
        
-       private static JSONObject getMessage(long curUserId, List<ChatMessage> 
list) throws JSONException {
+       private JSONObject getMessage(long curUserId, List<ChatMessage> list) 
throws JSONException {
                JSONArray arr = new JSONArray();
                for (ChatMessage m : list) {
                        String smsg = m.getMessage();
@@ -136,7 +137,12 @@ public class ChatPanel extends BasePanel
                        arr.put(setScope(new JSONObject(), m, curUserId)
                                .put("id", m.getId())
                                .put("message", smsg)
-                               .put("from", m.getFromUser().getFirstname() + " 
" + m.getFromUser().getLastname())
+                               .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("sent", 
getDateFormat().format(m.getSent())));
                }
                return new JSONObject()

Added: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.html?rev=1717837&view=auto
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.html
 (added)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.html
 Thu Dec  3 19:03:33 2015
@@ -0,0 +1,30 @@
+<?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>
+       <form wicket:id="form">
+               <textarea wicket:id="message" style="width: 100%; height: 
100px;"></textarea>
+               <div>
+                       <input type="checkbox" wicket:id="enterRoom" /><label 
wicket:for="enterRoom"><wicket:message key="1134"/></label>
+               </div>
+       </form>
+</wicket:panel>
+</html>

Added: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java?rev=1717837&view=auto
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
 (added)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
 Thu Dec  3 19:03:33 2015
@@ -0,0 +1,90 @@
+/*
+ * 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;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class InviteUserMessageDialog extends AbstractFormDialog<String>  {
+       private static final long serialVersionUID = 1L;
+       private final DialogButton send = new DialogButton("send", 
Application.getString(1139));
+       private final DialogButton cancel = new DialogButton("cancel", 
Application.getString(219));
+       private final Form<Void> form = new Form<Void>("form");
+       private final TextArea<String> message = new TextArea<>("message", 
Model.of(""));
+       private final CheckBox enterRoom = new CheckBox("enterRoom", 
Model.of(false));
+       
+       public InviteUserMessageDialog(String id) {
+               super(id, Application.getString(1138));
+               add(form.add(message.setRequired(true), 
enterRoom).setOutputMarkupId(true));
+       }
+
+       public void open(IPartialPageRequestHandler handler, Long roomId, Long 
userId) {
+               Room r = getBean(RoomDao.class).get(roomId);
+               User u = getBean(UserDao.class).get(getUserId());
+               message.setModelObject(String.format("%s %s %s %s", 
u.getFirstname(), u.getLastname(), getString("1137"), r.getName()));
+               enterRoom.setModelObject(false);
+               handler.add(form);
+               open(handler);
+       }
+       
+       @Override
+       protected List<DialogButton> getButtons() {
+               return Arrays.asList(send, cancel);
+       }
+       
+       @Override
+       protected DialogButton getSubmitButton() {
+               return send;
+       }
+
+       @Override
+       public Form<?> getForm() {
+               return form;
+       }
+
+       @Override
+       protected void onError(AjaxRequestTarget target) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       protected void onSubmit(AjaxRequestTarget target) {
+               // TODO Auto-generated method stub
+               
+       }
+}

Added: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.html?rev=1717837&view=auto
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.html
 (added)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.html
 Thu Dec  3 19:03:33 2015
@@ -0,0 +1,34 @@
+<?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 class="rooms desc info-text"><wicket:message key="1132"/></div>
+       <div class="rooms title"><wicket:message key="777"/></div>
+       <div class="room list container">
+               <div wicket:id="publicRooms"></div>
+       </div>
+       <div class="rooms title"><wicket:message key="779"/></div>
+       <div class="room list container">
+               <div wicket:id="privateRooms"></div>
+       </div>
+       <div wicket:id="inviteMsg"/>
+</wicket:panel>
+</html>


Reply via email to