Author: solomax
Date: Fri Apr 29 09:57:49 2016
New Revision: 1741602

URL: http://svn.apache.org/viewvc?rev=1741602&view=rev
Log:
[OPENMEETINGS-1381] sip dialog is moved to html5

Added:
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.html
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
Removed:
    
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/sip/
Modified:
    
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
    
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
    
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
    
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
    
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
    
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/library.lzx
    
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
    
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
    
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
    
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
 Fri Apr 29 09:57:49 2016
@@ -20,6 +20,7 @@ package org.apache.openmeetings.core.rem
 
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SIP_ENABLED;
 
 import java.util.Date;
 import java.util.List;
@@ -458,7 +459,7 @@ public class MainService implements IPen
 
        public List<Configuration> getGeneralOptions(String SID) {
                try {
-                       return configurationDao.get("exclusive.audio.keycode", 
"red5sip.enable", CONFIG_MAX_UPLOAD_SIZE_KEY, "mute.keycode", 
CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY);
+                       return configurationDao.get("exclusive.audio.keycode", 
CONFIG_SIP_ENABLED, CONFIG_MAX_UPLOAD_SIZE_KEY, "mute.keycode", 
CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY);
                } catch (Exception err) {
                        log.error("[getGeneralOptions]",err);
                }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 Fri Apr 29 09:57:49 2016
@@ -2083,35 +2083,34 @@ public class ScopeApplicationAdapter ext
                return (c != null && c > 0) ? "(" + (c - 1) + ")" : "";
        }
        
-    public synchronized int updateSipTransport() {
+       public synchronized int updateSipTransport() {
                log.debug("-----------  updateSipTransport");
-        IConnection current = Red5.getConnectionLocal();
-        String streamid = current.getClient().getId();
-        Client client = sessionManager.getClientByStreamId(streamid, null);
-        Long roomId = client.getRoomId();
-        Integer count = roomManager.getSipConferenceMembersNumber(roomId); 
-        String newNumber = getSipTransportLastname(count);
-        log.debug("getSipConferenceMembersNumber: " + newNumber);
-        if (!newNumber.equals(client.getLastname())) {
-            client.setLastname(newNumber);
-            sessionManager.updateClientByStreamId(streamid, client, false, 
null);
-            log.debug("updateSipTransport: {}, {}, {}, {}, {}", new 
Object[]{client.getPublicSID(),
-                    client.getRoomId(), client.getFirstname(), 
client.getLastname(), client.getAvsettings()});
-            sendMessageWithClient(new 
String[]{"personal",client.getFirstname(),client.getLastname()});
-        }
-        return count != null && count > 0 ? count - 1 : 0; 
-    }
-
-    /**
-     * Perform call to specified phone number and join to conference
-     * @param number to call
-     */
-       public synchronized void joinToConfCall(String number) {
                IConnection current = Red5.getConnectionLocal();
                String streamid = current.getClient().getId();
-               Client currentClient = 
sessionManager.getClientByStreamId(streamid, null);
+               Client client = sessionManager.getClientByStreamId(streamid, 
null);
+               Long roomId = client.getRoomId();
+               Integer count = 
roomManager.getSipConferenceMembersNumber(roomId);
+               String newNumber = getSipTransportLastname(count);
+               log.debug("getSipConferenceMembersNumber: " + newNumber);
+               if (!newNumber.equals(client.getLastname())) {
+                       client.setLastname(newNumber);
+                       sessionManager.updateClientByStreamId(streamid, client, 
false, null);
+                       log.debug("updateSipTransport: {}, {}, {}, {}, {}", new 
Object[] { client.getPublicSID(), client.getRoomId(),
+                                       client.getFirstname(), 
client.getLastname(), client.getAvsettings() });
+                       sendMessageWithClient(new String[] { "personal", 
client.getFirstname(), client.getLastname() });
+               }
+               return count != null && count > 0 ? count - 1 : 0;
+       }
+
+       /**
+        * Perform call to specified phone number and join to conference
+        * 
+        * @param number
+        *            to call
+        */
+       public void joinToConfCall(String number, Room r) {
                try {
-                       String sipNumber = 
getSipNumber(currentClient.getRoomId());
+                       String sipNumber = (r != null && r.getConfno() != null) 
? r.getConfno() : null;
                        log.debug("asterisk -rx \"originate Local/" + number + 
"@rooms-out extension " + sipNumber + "@rooms-originate\"");
                        Runtime.getRuntime().exec(new String[] { "asterisk", 
"-rx", "originate Local/" + number + "@rooms-out extension " + sipNumber + 
"@rooms-originate" });
                } catch (IOException e) {
@@ -2119,15 +2118,6 @@ public class ScopeApplicationAdapter ext
                }
        }
 
-    public synchronized String getSipNumber(Long roomId) {
-        Room r = roomDao.get(roomId);
-        if(r != null && r.getConfno() != null) {
-            log.debug("getSipNumber: roomId: {}, sipNumber: {}", new 
Object[]{roomId, r.getConfno()});
-            return r.getConfno();
-        }
-        return null;
-    }
-
        public void setSipTransport(Long roomId, String publicSID, String 
broadCastId) {
                log.debug("-----------  setSipTransport");
                IConnection current = Red5.getConnectionLocal();

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
 Fri Apr 29 09:57:49 2016
@@ -22,6 +22,7 @@ import static org.apache.openmeetings.ut
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_NAME;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SIP_ENABLED;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.configKeyCryptClassName;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
@@ -187,6 +188,10 @@ public class ConfigurationDao implements
                return val;
        }
 
+       public boolean isSipEnabled() {
+               return "yes".equals(getConfValue(CONFIG_SIP_ENABLED, 
String.class, "no"));
+       }
+
        @Override
        public Configuration get(long id) {
                return get(Long.valueOf(id));

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
 Fri Apr 29 09:57:49 2016
@@ -184,12 +184,8 @@ public class RoomDao implements IDataPro
                        : em.createNamedQuery("getRoomsCapacityByIds", 
Long.class).setParameter("ids", ids).getSingleResult();
        }
        
-       private boolean isSipEnabled() {
-               return "yes".equals(cfgDao.getConfValue("red5sip.enable", 
String.class, "no"));
-       }
-       
        private String getSipNumber(long roomId) {
-               if (isSipEnabled()) {
+               if (cfgDao.isSipEnabled()) {
                        return cfgDao.getConfValue("red5sip.room_prefix", 
String.class, "400") + roomId;
                }
                return null;
@@ -203,7 +199,7 @@ public class RoomDao implements IDataPro
                } else {
                        entity.setUpdated(new Date());
                }
-               if (entity.isSipEnabled() && isSipEnabled()) {
+               if (entity.isSipEnabled() && cfgDao.isSipEnabled()) {
                        String sipNumber = getSipNumber(entity.getId());
                        if (sipNumber != null && 
!sipNumber.equals(entity.getConfno())) {
                                entity.setConfno(sipNumber);

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
 Fri Apr 29 09:57:49 2016
@@ -515,7 +515,7 @@ public class Room implements IDataProvid
                }
                return hiddenElements.add(e);
        }
-       
+
        public List<RoomGroup> getRoomGroups() {
                return roomGroups;
        }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
 Fri Apr 29 09:57:49 2016
@@ -397,8 +397,7 @@ public class User implements IDataProvid
                                throw new RuntimeException("Password of invalid 
length is provided");
                        }
                }
-               String sipEnabled = configDao.getConfValue("red5sip.enable", 
String.class, "no");
-               if("yes".equals(sipEnabled)) {
+               if (configDao.isSipEnabled()) {
                        AsteriskSipUser u = getSipUser();
                        if (u == null) {
                                setSipUser(u = new AsteriskSipUser());

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/library.lzx
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/library.lzx?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/library.lzx
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/library.lzx
 Fri Apr 29 09:57:49 2016
@@ -44,8 +44,6 @@
        <include href="popups/" />
        <include href="moderation/" />
        
-    <include href="sip/" />
-    
     <include href="flexibleConferenceRoom/" />
     
 </library>

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 Fri Apr 29 09:57:49 2016
@@ -45,6 +45,7 @@ import static org.apache.openmeetings.ut
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS_SHOW;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_QUALITY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SIP_ENABLED;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
@@ -266,7 +267,7 @@ public class ImportInitvalues {
                // red5SIP Integration Coniguration Values
                // ***************************************
 
-               cfgDao.add("red5sip.enable", cfg.red5SipEnable, null, "Enable 
to enable the red5SIP integration ");
+               cfgDao.add(CONFIG_SIP_ENABLED, cfg.red5SipEnable, null, "Enable 
to enable the red5SIP integration ");
                cfgDao.add("red5sip.room_prefix", cfg.red5SipRoomPrefix, null,
                                "Numerical prefix for OM rooms created inside 
the SIP");
                cfgDao.add("red5sip.exten_context", cfg.red5SipExtenContext, 
null,

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 Fri Apr 29 09:57:49 2016
@@ -28,6 +28,7 @@ public class OpenmeetingsVariables {
        public static final String CONFIG_OAUTH_REGISTER_KEY = 
"allow.oauth.register";
        public static final String CONFIG_LOGIN_MIN_LENGTH_KEY = 
"user.login.minimum.length";
        public static final String CONFIG_MAX_UPLOAD_SIZE_KEY = 
"max_upload_size";
+       public static final String CONFIG_SIP_ENABLED = "red5sip.enable";
        public static final String CONFIG_PASS_MIN_LENGTH_KEY = 
"user.pass.minimum.length";
        public static final String CONFIG_RSS_FEED1_KEY = "rss_feed1";
        public static final String CONFIG_RSS_FEED2_KEY = "rss_feed2";

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
 Fri Apr 29 09:57:49 2016
@@ -31,5 +31,6 @@
        <div wicket:id="createPoll"></div>
        <div wicket:id="vote"></div>
        <div wicket:id="pollResults"></div>
+       <div wicket:id="sipDialer"></div>
 </wicket:panel>
 </html>

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 Fri Apr 29 09:57:49 2016
@@ -69,6 +69,7 @@ public class RoomMenuPanel extends Panel
        private final CreatePollDialog createPoll;
        private final VoteDialog vote;
        private final PollResultsDialog pollResults;
+       private final SipDialerDialog sipDialer;
        private final MenuPanel menuPanel;
        private final StartSharingButton shareBtn;
        private final Label roomName;
@@ -171,7 +172,14 @@ public class RoomMenuPanel extends Panel
                        pollResults.open(target);
                }
        };
-       private final RoomMenuItem sipDialerMenuItem = new 
RoomMenuItem(Application.getString(1447), Application.getString(1488), false);
+       private final RoomMenuItem sipDialerMenuItem = new 
RoomMenuItem(Application.getString(1447), Application.getString(1488), false) {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               public void onClick(AjaxRequestTarget target) {
+                       sipDialer.open(target);
+               }
+       };
 
        public RoomMenuPanel(String id, final RoomPanel room) {
                super(id);
@@ -187,9 +195,9 @@ public class RoomMenuPanel extends Panel
                add(createPoll = new CreatePollDialog("createPoll", 
room.getRoom().getId()));
                add(vote = new VoteDialog("vote"));
                add(pollResults = new PollResultsDialog("pollResults", 
room.getRoom().getId()));
+               add(sipDialer = new SipDialerDialog("sipDialer", room));
        }
        
-       
        @Override
        protected void onInitialize() {
                super.onInitialize();
@@ -251,7 +259,8 @@ public class RoomMenuPanel extends Panel
                        return;
                }
                Room r = room.getRoom();
-               boolean pollExists = getBean(PollDao.class).hasPoll(r.getId());
+               PollDao pollDao = getBean(PollDao.class);
+               boolean pollExists = pollDao.hasPoll(r.getId());
                User u = getBean(UserDao.class).get(getUserId());
                boolean notExternalUser = u.getType() != User.Type.external && 
u.getType() != User.Type.contact;
                exitMenuItem.setEnabled(notExternalUser);//TODO check this
@@ -267,21 +276,23 @@ public class RoomMenuPanel extends Panel
                
applyWbMenuItem.setEnabled(!room.getClient().hasRight(Client.Right.whiteBoard));
                
applyAvMenuItem.setEnabled(!room.getClient().hasRight(Client.Right.audio) || 
!room.getClient().hasRight(Client.Right.video));
                pollCreateMenuItem.setEnabled(moder);
-               pollVoteMenuItem.setEnabled(pollExists && notExternalUser && 
!getBean(PollDao.class).hasVoted(r.getId(), getUserId()));
-               pollResultMenuItem.setEnabled(pollExists || 
getBean(PollDao.class).getArchived(r.getId()).size() > 0);
+               pollVoteMenuItem.setEnabled(pollExists && notExternalUser && 
!pollDao.hasVoted(r.getId(), getUserId()));
+               pollResultMenuItem.setEnabled(pollExists || 
pollDao.getArchived(r.getId()).size() > 0);
+               sipDialerMenuItem.setEnabled(r.isSipEnabled() && 
getBean(ConfigurationDao.class).isSipEnabled());
                //TODO sip menus
                menuPanel.update(handler);
                //FIXME TODO askBtn should be visible if moder is in room
                StringBuilder roomClass = new StringBuilder("room name");
                StringBuilder roomTitle = new StringBuilder();
                if (room.getRecordingUser() != null) {
-                       org.apache.openmeetings.db.entity.room.Client recUser = 
getBean(ISessionManager.class).getClientByPublicSID(room.getRecordingUser(), 
null); //TODO check server
+                       ISessionManager sessMngr = 
getBean(ISessionManager.class);
+                       org.apache.openmeetings.db.entity.room.Client recUser = 
sessMngr.getClientByPublicSID(room.getRecordingUser(), null); //TODO check 
server
                        if (recUser != null) {
                                roomTitle.append(String.format("%s %s %s %s 
%s", getString("419")
                                                , recUser.getUsername(), 
recUser.getFirstname(), recUser.getLastname(), 
df.get().format(recUser.getConnectedSince())));
                                roomClass.append(" screen");
                        }
-                       org.apache.openmeetings.db.entity.room.Client pubUser = 
getBean(ISessionManager.class).getClientByPublicSID(room.getPublishingUser(), 
null); //TODO check server
+                       org.apache.openmeetings.db.entity.room.Client pubUser = 
sessMngr.getClientByPublicSID(room.getPublishingUser(), null); //TODO check 
server
                        if (pubUser != null) {
                                if (recUser != null) {
                                        roomTitle.append('\n');

Added: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.html?rev=1741602&view=auto
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.html
 (added)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.html
 Fri Apr 29 09:57:49 2016
@@ -0,0 +1,57 @@
+<?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="sip">
+               <div class="button-row">
+                       <form wicket:id="form">
+                               <input wicket:id="number" class="sip-number" 
type="text"/>
+                               <span id="sip-dialer-btn-erase">&#8592;</span>
+                               <input type="submit" wicket:id="submit" 
class="invisible-form-component"/>
+                       </form>
+               </div>
+               <div class="button-row">
+                       <button id="sip-dialer-btn-7" data-value="7">7</button>
+                       <button id="sip-dialer-btn-8" data-value="8">8</button>
+                       <button id="sip-dialer-btn-9" data-value="9">9</button>
+               </div>
+               <div class="button-row">
+                       <button id="sip-dialer-btn-4" data-value="4">4</button>
+                       <button id="sip-dialer-btn-5" data-value="5">5</button>
+                       <button id="sip-dialer-btn-6" data-value="6">6</button>
+               </div>
+               <div class="button-row">
+                       <button id="sip-dialer-btn-1" data-value="1">1</button>
+                       <button id="sip-dialer-btn-2" data-value="2">2</button>
+                       <button id="sip-dialer-btn-3" data-value="3">3</button>
+               </div>
+               <div class="button-row">
+                       <button id="sip-dialer-btn-0" data-value="0">0</button>
+               </div>
+       </div>
+       <div wicket:id="feedback"></div>
+       <script type="text/javascript">
+               $('.sip').on('keydown', sipKeyDown).on('keyup', sipKeyUp);
+               $('.sip .button-row button').button().on('click', sipBtnClick);
+               $('#sip-dialer-btn-erase').button().on('click', 
sipBtnEraseClick);
+       </script>
+</wicket:panel>
+</html>

Added: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java?rev=1741602&view=auto
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
 (added)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
 Fri Apr 29 09:57:49 2016
@@ -0,0 +1,104 @@
+/*
+ * 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.room.menu;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class SipDialerDialog extends AbstractFormDialog<String> {
+       private static final long serialVersionUID = 1L;
+       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final DialogButton call = new DialogButton("call", 
Application.getString(1448));
+       private final DialogButton close = new DialogButton("close", 
Application.getString(85));
+       private final Form<String> form = new Form<>("form", Model.of(""));
+       private final TextField<String> number = new TextField<>("number", 
Model.of(""));
+       private final RoomPanel room;
+
+       public SipDialerDialog(String id, RoomPanel room) {
+               super(id, "");
+               this.room = room;
+               AjaxButton ab = new AjaxButton("submit") { //FAKE button so 
"submit-on-enter" works as expected
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void onSubmit(AjaxRequestTarget target, 
Form<?> form) {
+                               SipDialerDialog.this.onSubmit(target);
+                       }
+                       
+                       @Override
+                       protected void onError(AjaxRequestTarget target, 
Form<?> form) {
+                               SipDialerDialog.this.onError(target);
+                       }
+               };
+               form.setDefaultButton(ab);
+               add(feedback.setOutputMarkupId(true), form.add(number, ab));
+       }
+       
+       @Override
+       protected void onInitialize() {
+               super.onInitialize();
+               setTitle(Model.of(getString("1003")));
+       }
+
+       @Override
+       public int getWidth() {
+               return 300;
+       }
+       
+       @Override
+       protected List<DialogButton> getButtons() {
+               return Arrays.asList(call, close);
+       }
+       
+       @Override
+       public DialogButton getSubmitButton() {
+               return call;
+       }
+
+       @Override
+       public Form<?> getForm() {
+               return form;
+       }
+
+       @Override
+       protected void onError(AjaxRequestTarget target) {
+               target.add(feedback);
+       }
+
+       @Override
+       protected void onSubmit(AjaxRequestTarget target) {
+               
getBean(ScopeApplicationAdapter.class).joinToConfCall(number.getModelObject(), 
room.getRoom());
+       }
+}

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
 Fri Apr 29 09:57:49 2016
@@ -51,6 +51,40 @@ function startPrivateChat(el) {
        openChat();
        $('#chatMessage .wysiwyg-editor').click();
 }
+/***** functions required by SIP   ******/
+function sipBtnClick() {
+       var txt = $('.sip-number');
+       txt.val(txt.val() + $(this).data('value'));
+}
+function sipBtnEraseClick() {
+       var txt = $('.sip-number');
+       var t = txt.val();
+       if (!!t) {
+               txt.val(t.substring(0, t.length -1));
+       }
+}
+function sipGetKey(evt) {
+       var k = -1;
+       if (evt.keyCode > 47 && evt.keyCode < 58) {
+               k = evt.keyCode - 48;
+       }
+       if (evt.keyCode > 95 && evt.keyCode < 106) {
+               k = evt.keyCode - 96;
+       }
+       return k;
+}
+function sipKeyDown(evt) {
+       var k = sipGetKey(evt);
+       if (k > 0) {
+               $('#sip-dialer-btn-' + k).addClass('ui-state-active');
+       }
+}
+function sipKeyUp(evt) {
+       var k = sipGetKey(evt);
+       if (k > 0) {
+               $('#sip-dialer-btn-' + k).removeClass('ui-state-active');
+       }
+}
 
 /***** functions required by SWF   ******/
 function audioActivity(uid, active) {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
 Fri Apr 29 09:57:49 2016
@@ -206,3 +206,17 @@
        max-height: 100px;
        overflow-y: auto;
 }
+.sip .button-row {
+       text-align: center;
+       margin: 5px;
+}
+.sip .button-row input.sip-number {
+       width: 130px;
+}
+.sip .button-row #sip-dialer-btn-erase {
+       margin-left: 5px;
+}
+.sip .button-row #sip-dialer-btn-erase .ui-button-text {
+       padding: .1em .7em;
+       font-weight: bolder;
+}

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
 Fri Apr 29 09:57:49 2016
@@ -20,6 +20,7 @@ package org.apache.openmeetings.core.rem
 
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SIP_ENABLED;
 
 import java.util.Date;
 import java.util.List;
@@ -458,7 +459,7 @@ public class MainService implements IPen
 
        public List<Configuration> getGeneralOptions(String SID) {
                try {
-                       return configurationDao.get("exclusive.audio.keycode", 
"red5sip.enable", CONFIG_MAX_UPLOAD_SIZE_KEY, "mute.keycode", 
CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY);
+                       return configurationDao.get("exclusive.audio.keycode", 
CONFIG_SIP_ENABLED, CONFIG_MAX_UPLOAD_SIZE_KEY, "mute.keycode", 
CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY);
                } catch (Exception err) {
                        log.error("[getGeneralOptions]",err);
                }

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 Fri Apr 29 09:57:49 2016
@@ -2083,35 +2083,34 @@ public class ScopeApplicationAdapter ext
                return (c != null && c > 0) ? "(" + (c - 1) + ")" : "";
        }
        
-    public synchronized int updateSipTransport() {
+       public synchronized int updateSipTransport() {
                log.debug("-----------  updateSipTransport");
-        IConnection current = Red5.getConnectionLocal();
-        String streamid = current.getClient().getId();
-        Client client = sessionManager.getClientByStreamId(streamid, null);
-        Long roomId = client.getRoomId();
-        Integer count = roomManager.getSipConferenceMembersNumber(roomId); 
-        String newNumber = getSipTransportLastname(count);
-        log.debug("getSipConferenceMembersNumber: " + newNumber);
-        if (!newNumber.equals(client.getLastname())) {
-            client.setLastname(newNumber);
-            sessionManager.updateClientByStreamId(streamid, client, false, 
null);
-            log.debug("updateSipTransport: {}, {}, {}, {}, {}", new 
Object[]{client.getPublicSID(),
-                    client.getRoomId(), client.getFirstname(), 
client.getLastname(), client.getAvsettings()});
-            sendMessageWithClient(new 
String[]{"personal",client.getFirstname(),client.getLastname()});
-        }
-        return count != null && count > 0 ? count - 1 : 0; 
-    }
-
-    /**
-     * Perform call to specified phone number and join to conference
-     * @param number to call
-     */
-       public synchronized void joinToConfCall(String number) {
                IConnection current = Red5.getConnectionLocal();
                String streamid = current.getClient().getId();
-               Client currentClient = 
sessionManager.getClientByStreamId(streamid, null);
+               Client client = sessionManager.getClientByStreamId(streamid, 
null);
+               Long roomId = client.getRoomId();
+               Integer count = 
roomManager.getSipConferenceMembersNumber(roomId);
+               String newNumber = getSipTransportLastname(count);
+               log.debug("getSipConferenceMembersNumber: " + newNumber);
+               if (!newNumber.equals(client.getLastname())) {
+                       client.setLastname(newNumber);
+                       sessionManager.updateClientByStreamId(streamid, client, 
false, null);
+                       log.debug("updateSipTransport: {}, {}, {}, {}, {}", new 
Object[] { client.getPublicSID(), client.getRoomId(),
+                                       client.getFirstname(), 
client.getLastname(), client.getAvsettings() });
+                       sendMessageWithClient(new String[] { "personal", 
client.getFirstname(), client.getLastname() });
+               }
+               return count != null && count > 0 ? count - 1 : 0;
+       }
+
+       /**
+        * Perform call to specified phone number and join to conference
+        * 
+        * @param number
+        *            to call
+        */
+       public void joinToConfCall(String number, Room r) {
                try {
-                       String sipNumber = 
getSipNumber(currentClient.getRoomId());
+                       String sipNumber = (r != null && r.getConfno() != null) 
? r.getConfno() : null;
                        log.debug("asterisk -rx \"originate Local/" + number + 
"@rooms-out extension " + sipNumber + "@rooms-originate\"");
                        Runtime.getRuntime().exec(new String[] { "asterisk", 
"-rx", "originate Local/" + number + "@rooms-out extension " + sipNumber + 
"@rooms-originate" });
                } catch (IOException e) {
@@ -2119,15 +2118,6 @@ public class ScopeApplicationAdapter ext
                }
        }
 
-    public synchronized String getSipNumber(Long roomId) {
-        Room r = roomDao.get(roomId);
-        if(r != null && r.getConfno() != null) {
-            log.debug("getSipNumber: roomId: {}, sipNumber: {}", new 
Object[]{roomId, r.getConfno()});
-            return r.getConfno();
-        }
-        return null;
-    }
-
        public void setSipTransport(Long roomId, String publicSID, String 
broadCastId) {
                log.debug("-----------  setSipTransport");
                IConnection current = Red5.getConnectionLocal();

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
 Fri Apr 29 09:57:49 2016
@@ -22,6 +22,7 @@ import static org.apache.openmeetings.ut
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_NAME;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SIP_ENABLED;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.configKeyCryptClassName;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
@@ -187,6 +188,10 @@ public class ConfigurationDao implements
                return val;
        }
 
+       public boolean isSipEnabled() {
+               return "yes".equals(getConfValue(CONFIG_SIP_ENABLED, 
String.class, "no"));
+       }
+
        @Override
        public Configuration get(long id) {
                return get(Long.valueOf(id));

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
 Fri Apr 29 09:57:49 2016
@@ -184,12 +184,8 @@ public class RoomDao implements IDataPro
                        : em.createNamedQuery("getRoomsCapacityByIds", 
Long.class).setParameter("ids", ids).getSingleResult();
        }
        
-       private boolean isSipEnabled() {
-               return "yes".equals(cfgDao.getConfValue("red5sip.enable", 
String.class, "no"));
-       }
-       
        private String getSipNumber(long roomId) {
-               if (isSipEnabled()) {
+               if (cfgDao.isSipEnabled()) {
                        return cfgDao.getConfValue("red5sip.room_prefix", 
String.class, "400") + roomId;
                }
                return null;
@@ -203,7 +199,7 @@ public class RoomDao implements IDataPro
                } else {
                        entity.setUpdated(new Date());
                }
-               if (entity.isSipEnabled() && isSipEnabled()) {
+               if (entity.isSipEnabled() && cfgDao.isSipEnabled()) {
                        String sipNumber = getSipNumber(entity.getId());
                        if (sipNumber != null && 
!sipNumber.equals(entity.getConfno())) {
                                entity.setConfno(sipNumber);

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
 Fri Apr 29 09:57:49 2016
@@ -397,8 +397,7 @@ public class User implements IDataProvid
                                throw new RuntimeException("Password of invalid 
length is provided");
                        }
                }
-               String sipEnabled = configDao.getConfValue("red5sip.enable", 
String.class, "no");
-               if("yes".equals(sipEnabled)) {
+               if (configDao.isSipEnabled()) {
                        AsteriskSipUser u = getSipUser();
                        if (u == null) {
                                setSipUser(u = new AsteriskSipUser());

Modified: 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 Fri Apr 29 09:57:49 2016
@@ -45,6 +45,7 @@ import static org.apache.openmeetings.ut
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS_SHOW;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_QUALITY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SIP_ENABLED;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
@@ -266,7 +267,7 @@ public class ImportInitvalues {
                // red5SIP Integration Coniguration Values
                // ***************************************
 
-               cfgDao.add("red5sip.enable", cfg.red5SipEnable, null, "Enable 
to enable the red5SIP integration ");
+               cfgDao.add(CONFIG_SIP_ENABLED, cfg.red5SipEnable, null, "Enable 
to enable the red5SIP integration ");
                cfgDao.add("red5sip.room_prefix", cfg.red5SipRoomPrefix, null,
                                "Numerical prefix for OM rooms created inside 
the SIP");
                cfgDao.add("red5sip.exten_context", cfg.red5SipExtenContext, 
null,

Modified: 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 Fri Apr 29 09:57:49 2016
@@ -28,6 +28,7 @@ public class OpenmeetingsVariables {
        public static final String CONFIG_OAUTH_REGISTER_KEY = 
"allow.oauth.register";
        public static final String CONFIG_LOGIN_MIN_LENGTH_KEY = 
"user.login.minimum.length";
        public static final String CONFIG_MAX_UPLOAD_SIZE_KEY = 
"max_upload_size";
+       public static final String CONFIG_SIP_ENABLED = "red5sip.enable";
        public static final String CONFIG_PASS_MIN_LENGTH_KEY = 
"user.pass.minimum.length";
        public static final String CONFIG_RSS_FEED1_KEY = "rss_feed1";
        public static final String CONFIG_RSS_FEED2_KEY = "rss_feed2";

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
 Fri Apr 29 09:57:49 2016
@@ -31,5 +31,6 @@
        <div wicket:id="createPoll"></div>
        <div wicket:id="vote"></div>
        <div wicket:id="pollResults"></div>
+       <div wicket:id="sipDialer"></div>
 </wicket:panel>
 </html>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 Fri Apr 29 09:57:49 2016
@@ -69,6 +69,7 @@ public class RoomMenuPanel extends Panel
        private final CreatePollDialog createPoll;
        private final VoteDialog vote;
        private final PollResultsDialog pollResults;
+       private final SipDialerDialog sipDialer;
        private final MenuPanel menuPanel;
        private final StartSharingButton shareBtn;
        private final Label roomName;
@@ -171,7 +172,14 @@ public class RoomMenuPanel extends Panel
                        pollResults.open(target);
                }
        };
-       private final RoomMenuItem sipDialerMenuItem = new 
RoomMenuItem(Application.getString(1447), Application.getString(1488), false);
+       private final RoomMenuItem sipDialerMenuItem = new 
RoomMenuItem(Application.getString(1447), Application.getString(1488), false) {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               public void onClick(AjaxRequestTarget target) {
+                       sipDialer.open(target);
+               }
+       };
 
        public RoomMenuPanel(String id, final RoomPanel room) {
                super(id);
@@ -187,9 +195,9 @@ public class RoomMenuPanel extends Panel
                add(createPoll = new CreatePollDialog("createPoll", 
room.getRoom().getId()));
                add(vote = new VoteDialog("vote"));
                add(pollResults = new PollResultsDialog("pollResults", 
room.getRoom().getId()));
+               add(sipDialer = new SipDialerDialog("sipDialer", room));
        }
        
-       
        @Override
        protected void onInitialize() {
                super.onInitialize();
@@ -251,7 +259,8 @@ public class RoomMenuPanel extends Panel
                        return;
                }
                Room r = room.getRoom();
-               boolean pollExists = getBean(PollDao.class).hasPoll(r.getId());
+               PollDao pollDao = getBean(PollDao.class);
+               boolean pollExists = pollDao.hasPoll(r.getId());
                User u = getBean(UserDao.class).get(getUserId());
                boolean notExternalUser = u.getType() != User.Type.external && 
u.getType() != User.Type.contact;
                exitMenuItem.setEnabled(notExternalUser);//TODO check this
@@ -267,21 +276,23 @@ public class RoomMenuPanel extends Panel
                
applyWbMenuItem.setEnabled(!room.getClient().hasRight(Client.Right.whiteBoard));
                
applyAvMenuItem.setEnabled(!room.getClient().hasRight(Client.Right.audio) || 
!room.getClient().hasRight(Client.Right.video));
                pollCreateMenuItem.setEnabled(moder);
-               pollVoteMenuItem.setEnabled(pollExists && notExternalUser && 
!getBean(PollDao.class).hasVoted(r.getId(), getUserId()));
-               pollResultMenuItem.setEnabled(pollExists || 
getBean(PollDao.class).getArchived(r.getId()).size() > 0);
+               pollVoteMenuItem.setEnabled(pollExists && notExternalUser && 
!pollDao.hasVoted(r.getId(), getUserId()));
+               pollResultMenuItem.setEnabled(pollExists || 
pollDao.getArchived(r.getId()).size() > 0);
+               sipDialerMenuItem.setEnabled(r.isSipEnabled() && 
getBean(ConfigurationDao.class).isSipEnabled());
                //TODO sip menus
                menuPanel.update(handler);
                //FIXME TODO askBtn should be visible if moder is in room
                StringBuilder roomClass = new StringBuilder("room name");
                StringBuilder roomTitle = new StringBuilder();
                if (room.getRecordingUser() != null) {
-                       org.apache.openmeetings.db.entity.room.Client recUser = 
getBean(ISessionManager.class).getClientByPublicSID(room.getRecordingUser(), 
null); //TODO check server
+                       ISessionManager sessMngr = 
getBean(ISessionManager.class);
+                       org.apache.openmeetings.db.entity.room.Client recUser = 
sessMngr.getClientByPublicSID(room.getRecordingUser(), null); //TODO check 
server
                        if (recUser != null) {
                                roomTitle.append(String.format("%s %s %s %s 
%s", getString("419")
                                                , recUser.getUsername(), 
recUser.getFirstname(), recUser.getLastname(), 
df.get().format(recUser.getConnectedSince())));
                                roomClass.append(" screen");
                        }
-                       org.apache.openmeetings.db.entity.room.Client pubUser = 
getBean(ISessionManager.class).getClientByPublicSID(room.getPublishingUser(), 
null); //TODO check server
+                       org.apache.openmeetings.db.entity.room.Client pubUser = 
sessMngr.getClientByPublicSID(room.getPublishingUser(), null); //TODO check 
server
                        if (pubUser != null) {
                                if (recUser != null) {
                                        roomTitle.append('\n');

Added: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.html?rev=1741602&view=auto
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.html
 (added)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.html
 Fri Apr 29 09:57:49 2016
@@ -0,0 +1,57 @@
+<?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="sip">
+               <div class="button-row">
+                       <form wicket:id="form">
+                               <input wicket:id="number" class="sip-number" 
type="text"/>
+                               <span id="sip-dialer-btn-erase">&#8592;</span>
+                               <input type="submit" wicket:id="submit" 
class="invisible-form-component"/>
+                       </form>
+               </div>
+               <div class="button-row">
+                       <button id="sip-dialer-btn-7" data-value="7">7</button>
+                       <button id="sip-dialer-btn-8" data-value="8">8</button>
+                       <button id="sip-dialer-btn-9" data-value="9">9</button>
+               </div>
+               <div class="button-row">
+                       <button id="sip-dialer-btn-4" data-value="4">4</button>
+                       <button id="sip-dialer-btn-5" data-value="5">5</button>
+                       <button id="sip-dialer-btn-6" data-value="6">6</button>
+               </div>
+               <div class="button-row">
+                       <button id="sip-dialer-btn-1" data-value="1">1</button>
+                       <button id="sip-dialer-btn-2" data-value="2">2</button>
+                       <button id="sip-dialer-btn-3" data-value="3">3</button>
+               </div>
+               <div class="button-row">
+                       <button id="sip-dialer-btn-0" data-value="0">0</button>
+               </div>
+       </div>
+       <div wicket:id="feedback"></div>
+       <script type="text/javascript">
+               $('.sip').on('keydown', sipKeyDown).on('keyup', sipKeyUp);
+               $('.sip .button-row button').button().on('click', sipBtnClick);
+               $('#sip-dialer-btn-erase').button().on('click', 
sipBtnEraseClick);
+       </script>
+</wicket:panel>
+</html>

Added: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java?rev=1741602&view=auto
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
 (added)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
 Fri Apr 29 09:57:49 2016
@@ -0,0 +1,104 @@
+/*
+ * 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.room.menu;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class SipDialerDialog extends AbstractFormDialog<String> {
+       private static final long serialVersionUID = 1L;
+       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final DialogButton call = new DialogButton("call", 
Application.getString(1448));
+       private final DialogButton close = new DialogButton("close", 
Application.getString(85));
+       private final Form<String> form = new Form<>("form", Model.of(""));
+       private final TextField<String> number = new TextField<>("number", 
Model.of(""));
+       private final RoomPanel room;
+
+       public SipDialerDialog(String id, RoomPanel room) {
+               super(id, "");
+               this.room = room;
+               AjaxButton ab = new AjaxButton("submit") { //FAKE button so 
"submit-on-enter" works as expected
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void onSubmit(AjaxRequestTarget target, 
Form<?> form) {
+                               SipDialerDialog.this.onSubmit(target);
+                       }
+                       
+                       @Override
+                       protected void onError(AjaxRequestTarget target, 
Form<?> form) {
+                               SipDialerDialog.this.onError(target);
+                       }
+               };
+               form.setDefaultButton(ab);
+               add(feedback.setOutputMarkupId(true), form.add(number, ab));
+       }
+       
+       @Override
+       protected void onInitialize() {
+               super.onInitialize();
+               setTitle(Model.of(getString("1003")));
+       }
+
+       @Override
+       public int getWidth() {
+               return 300;
+       }
+       
+       @Override
+       protected List<DialogButton> getButtons() {
+               return Arrays.asList(call, close);
+       }
+       
+       @Override
+       public DialogButton getSubmitButton() {
+               return call;
+       }
+
+       @Override
+       public Form<?> getForm() {
+               return form;
+       }
+
+       @Override
+       protected void onError(AjaxRequestTarget target) {
+               target.add(feedback);
+       }
+
+       @Override
+       protected void onSubmit(AjaxRequestTarget target) {
+               
getBean(ScopeApplicationAdapter.class).joinToConfCall(number.getModelObject(), 
room.getRoom());
+       }
+}

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
 Fri Apr 29 09:57:49 2016
@@ -91,6 +91,40 @@ function startPrivateChat(el) {
        openChat();
        $('#chatMessage .wysiwyg-editor').click();
 }
+/***** functions required by SIP   ******/
+function sipBtnClick() {
+       var txt = $('.sip-number');
+       txt.val(txt.val() + $(this).data('value'));
+}
+function sipBtnEraseClick() {
+       var txt = $('.sip-number');
+       var t = txt.val();
+       if (!!t) {
+               txt.val(t.substring(0, t.length -1));
+       }
+}
+function sipGetKey(evt) {
+       var k = -1;
+       if (evt.keyCode > 47 && evt.keyCode < 58) {
+               k = evt.keyCode - 48;
+       }
+       if (evt.keyCode > 95 && evt.keyCode < 106) {
+               k = evt.keyCode - 96;
+       }
+       return k;
+}
+function sipKeyDown(evt) {
+       var k = sipGetKey(evt);
+       if (k > 0) {
+               $('#sip-dialer-btn-' + k).addClass('ui-state-active');
+       }
+}
+function sipKeyUp(evt) {
+       var k = sipGetKey(evt);
+       if (k > 0) {
+               $('#sip-dialer-btn-' + k).removeClass('ui-state-active');
+       }
+}
 
 /***** functions required by SWF   ******/
 function audioActivity(uid, active) {

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css?rev=1741602&r1=1741601&r2=1741602&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css 
(original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css 
Fri Apr 29 09:57:49 2016
@@ -206,3 +206,17 @@
        max-height: 100px;
        overflow-y: auto;
 }
+.sip .button-row {
+       text-align: center;
+       margin: 5px;
+}
+.sip .button-row input.sip-number {
+       width: 130px;
+}
+.sip .button-row #sip-dialer-btn-erase {
+       margin-left: 5px;
+}
+.sip .button-row #sip-dialer-btn-erase .ui-button-text {
+       padding: .1em .7em;
+       font-weight: bolder;
+}


Reply via email to