Author: vdegtyarev
Date: Wed Jul 31 10:07:50 2013
New Revision: 1508800

URL: http://svn.apache.org/r1508800
Log:
OPENMEETINGS-722 is fixed.

Modified:
    
openmeetings/trunk/singlewebapp/WebContent/openmeetings/js/openmeetings_functions.js
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.java

Modified: 
openmeetings/trunk/singlewebapp/WebContent/openmeetings/js/openmeetings_functions.js
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/WebContent/openmeetings/js/openmeetings_functions.js?rev=1508800&r1=1508799&r2=1508800&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/WebContent/openmeetings/js/openmeetings_functions.js
 (original)
+++ 
openmeetings/trunk/singlewebapp/WebContent/openmeetings/js/openmeetings_functions.js
 Wed Jul 31 10:07:50 2013
@@ -47,7 +47,7 @@ function loadingComplete() {
        lzApp.style.height = '100%';
 }
 
-function getTimeZoneOffset() {
+function getTimeZoneOffsetHours() {
        var rightNow = new Date(), std_time_offset = 
-rightNow.getTimezoneOffset() / 60;
        for (var i = 0; i < 12; ++i) {
                var d = new Date(rightNow.getFullYear(), i, 1, 0, 0, 0, 0), 
offset = -d.getTimezoneOffset() / 60;
@@ -56,5 +56,9 @@ function getTimeZoneOffset() {
                        break;
                }
        }
-    
document.getElementById("lzapp").getTimeZoneOffsetCallback(std_time_offset);
+    return std_time_offset;
+}
+
+function getTimeZoneOffset() {
+    
document.getElementById("lzapp").getTimeZoneOffsetCallback(getTimeZoneOffsetHours());
 }

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java?rev=1508800&r1=1508799&r2=1508800&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java
 Wed Jul 31 10:07:50 2013
@@ -29,6 +29,8 @@ import static org.apache.openmeetings.we
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
+import java.util.List;
+import java.util.Locale;
 import java.util.TimeZone;
 
 import org.apache.openmeetings.data.basic.AuthLevelUtil;
@@ -36,11 +38,15 @@ import org.apache.openmeetings.data.basi
 import org.apache.openmeetings.data.basic.FieldManager;
 import org.apache.openmeetings.data.basic.SessiondataDao;
 import org.apache.openmeetings.data.basic.dao.ConfigurationDao;
+import org.apache.openmeetings.data.basic.dao.OmTimeZoneDao;
 import org.apache.openmeetings.data.user.UserManager;
+import org.apache.openmeetings.data.user.dao.StateDao;
 import org.apache.openmeetings.data.user.dao.UsersDao;
 import org.apache.openmeetings.ldap.LdapLoginManagement;
+import org.apache.openmeetings.persistence.beans.basic.OmTimeZone;
 import org.apache.openmeetings.persistence.beans.basic.Sessiondata;
 import org.apache.openmeetings.persistence.beans.lang.FieldLanguage;
+import org.apache.openmeetings.persistence.beans.user.State;
 import org.apache.openmeetings.persistence.beans.user.User;
 import org.apache.openmeetings.web.user.dashboard.PrivateRoomsWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
@@ -71,9 +77,11 @@ public class WebSession extends Abstract
        private DateFormat sdf;
        private Dashboard dashboard;
        private String baseUrl = null;
+       private Locale browserLocale = null;
        
        public WebSession(Request request) {
                super(request);
+               browserLocale = getLocale();
        }
 
        @Override
@@ -215,6 +223,46 @@ public class WebSession extends Abstract
                this.baseUrl = baseUrl;
        }
        
+       public Locale getBrowserLocale(){
+               return browserLocale;
+       }
+
+       public FieldLanguage getLanguageByBrowserLocale() {
+               List<FieldLanguage> languages = 
getBean(FieldLanguageDao.class).getLanguages();
+               for (FieldLanguage l : languages) {
+                       if (getBrowserLocale().getLanguage().equals(new 
Locale(l.getCode()).getLanguage())){
+                               return l;
+                       }
+               }
+               return languages.get(0);
+       }
+
+       public State getCountryByBrowserLocale() {
+               List<State> states = getBean(StateDao.class).getStates();
+               String code = getBrowserLocale().getISO3Country().toUpperCase();
+               for (State s : states) {
+                       if (s.getShortName().toUpperCase().equals(code)){
+                               return s;
+                       }
+               }
+               return states.get(0);
+       }
+
+       public OmTimeZone getOmTimeZoneByBrowserLocale(int offset){
+               TimeZone tz = 
Calendar.getInstance(getBrowserLocale()).getTimeZone();
+               OmTimeZone omTZ = 
getBean(OmTimeZoneDao.class).getOmTimeZoneByIcal(tz.getID());
+               if (omTZ == null){
+                       List<OmTimeZone> omTimeZones = 
getBean(OmTimeZoneDao.class).getOmTimeZones();
+                       for (OmTimeZone timeZone : omTimeZones){
+                               long tzOffset = 
TimeZone.getTimeZone(timeZone.getIcal()).getRawOffset() / 3600000;
+                               if (tzOffset ==  offset){
+                                       return timeZone;  
+                               }
+                       }
+               }
+               return omTZ != null ? omTZ : 
getBean(OmTimeZoneDao.class).getOmTimeZones().get(0);
+       }
+       
        private void initDashboard() {
                DashboardContext dashboardContext = getDashboardContext();
                //FIXME check title etc.

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/RegisterDialog.java?rev=1508800&r1=1508799&r2=1508800&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
 Wed Jul 31 10:07:50 2013
@@ -40,6 +40,8 @@ import org.apache.openmeetings.web.pages
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import 
org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+import org.apache.wicket.markup.head.CssContentHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.Form;
@@ -47,6 +49,7 @@ import org.apache.wicket.markup.html.for
 import org.apache.wicket.markup.html.form.RequiredTextField;
 import org.apache.wicket.markup.html.form.StatelessForm;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -59,6 +62,11 @@ public class RegisterDialog extends Abst
        private DialogButton cancelBtn = new 
DialogButton(WebSession.getString(122));
        private DialogButton registerBtn = new 
DialogButton(WebSession.getString(121));
        private FeedbackPanel feedback = new FeedbackPanel("feedback");
+       private final IModel<OmTimeZone> tzModel = 
Model.of(WebSession.get().getOmTimeZoneByBrowserLocale(0));
+       private final DropDownChoice<OmTimeZone> tzDropDown = new 
DropDownChoice<OmTimeZone>("tz"
+                       , tzModel
+                       , getBean(OmTimeZoneDao.class).getOmTimeZones()
+                       , new ChoiceRenderer<OmTimeZone>("frontEndLabel", 
"jname"));
        private Form<String> form;
        private SignInDialog s;
     private String firstName;
@@ -66,18 +74,32 @@ public class RegisterDialog extends Abst
     private String login;
     private String password;
     private String email;
-    private OmTimeZone tz;
     private State state;
     private FieldLanguage lang;
 
        public RegisterDialog(String id) {
                super(id, WebSession.getString(113));
                add(form = new RegisterForm("form"));
+               lang = WebSession.get().getLanguageByBrowserLocale();
+               state = WebSession.get().getCountryByBrowserLocale();
+               tzDropDown.setOutputMarkupId(true);
        }
 
+       @Override
+       public void renderHead(IHeaderResponse response) {
+               super.renderHead(response);
+               //to remove upper-right close button
+               response.render(new CssContentHeaderItem(".no-close 
.ui-dialog-titlebar-close { display: none; }", "dialog-noclose", ""));
+       }
+       
        public void setSignInDialog(SignInDialog s) {
                this.s = s;
        }
+
+       public void setBrowserTZOffset(AjaxRequestTarget target, int 
browserTZOffset) {
+               
tzModel.setObject(WebSession.get().getOmTimeZoneByBrowserLocale(browserTZOffset));
+               target.add(tzDropDown);
+       }
        
        @Override
        public int getWidth() {
@@ -114,7 +136,8 @@ public class RegisterDialog extends Abst
                getBean(UserManager.class).registerUser(login, password, 
lastName
                                , firstName, email, null, ""/*street*/, 
""/*additionalname*/, ""/*fax*/, ""/*zip*/
                                , state.getState_id(), ""/*town*/, 
lang.getLanguage_id(), ""/*phone*/, false/*sendSMS*/
-                               , "" + getRequestCycle().urlFor(SwfPage.class, 
new PageParameters()), false, tz.getJname());
+                               , "" + getRequestCycle().urlFor(SwfPage.class, 
new PageParameters()), false
+                               , tzModel.getObject().getJname());
        }
        
        class RegisterForm extends StatelessForm<String> {
@@ -150,11 +173,7 @@ public class RegisterDialog extends Abst
                                        , 
getBean(FieldLanguageDao.class).getLanguages()
                                        , new 
ChoiceRenderer<FieldLanguage>("name", "language_id"))
                                
.setRequired(true).setLabel(Model.of(WebSession.getString(111))));
-                       add(new DropDownChoice<OmTimeZone>("tz"
-                                       , new 
PropertyModel<OmTimeZone>(RegisterDialog.this, "tz")
-                                       , 
getBean(OmTimeZoneDao.class).getOmTimeZones()
-                                       , new 
ChoiceRenderer<OmTimeZone>("frontEndLabel", "jname"))
-                               
.setRequired(true).setLabel(Model.of(WebSession.getString(1143))));
+                       
add(tzDropDown.setRequired(true).setLabel(Model.of(WebSession.getString(1143))));
                        add(new DropDownChoice<State>("state"
                                        , new 
PropertyModel<State>(RegisterDialog.this, "state")
                                        , getBean(StateDao.class).getStates()

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.html?rev=1508800&r1=1508799&r2=1508800&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.html
 Wed Jul 31 10:07:50 2013
@@ -19,6 +19,13 @@
   
 -->
 <html xmlns:wicket="http://wicket.apache.org";>
+<wicket:head>
+       <script type="text/javascript" src="js/openmeetings_functions.js" >
+               $(function(){
+                       $('#tzOffset').val(getTimeZoneOffsetHours());
+               });
+       </script>
+</wicket:head>
 <wicket:panel>
        <form wicket:id="signin">
                <table>
@@ -47,5 +54,6 @@
                <span wicket:id="feedback"></span>
                <input type="submit" wicket:id="submit" 
class="invisible-form-component"/>
        </form>
+       <input type="hidden" wicket:id="tzOffset" id="tzOffset"/>
 </wicket:panel>
 </html>

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.java?rev=1508800&r1=1508799&r2=1508800&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.java
 Wed Jul 31 10:07:50 2013
@@ -21,6 +21,7 @@ package org.apache.openmeetings.web.page
 import static 
org.apache.openmeetings.web.app.Application.getAuthenticationStrategy;
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.pages.auth.SignInPage.allowRegister;
+import static org.apache.wicket.ajax.attributes.CallbackParameter.resolved;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -31,17 +32,21 @@ import org.apache.openmeetings.web.app.A
 import org.apache.openmeetings.web.app.OmAuthenticationStrategy;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.pages.SwfPage;
+import org.apache.wicket.Component;
 import org.apache.wicket.RestartResponseException;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.head.CssContentHeaderItem;
 import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.HiddenField;
 import org.apache.wicket.markup.html.form.PasswordTextField;
 import org.apache.wicket.markup.html.form.RequiredTextField;
 import org.apache.wicket.markup.html.form.StatelessForm;
@@ -50,6 +55,7 @@ import org.apache.wicket.markup.html.pan
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.string.StringValue;
 
 import com.googlecode.wicket.jquery.core.JQueryBehavior;
 import com.googlecode.wicket.jquery.core.Options;
@@ -69,10 +75,30 @@ public class SignInDialog extends Abstra
     private ForgetPasswordDialog f;
     private LdapConfig domain;
     private String ldapConfigFileName;
+       private HiddenField<Integer> browserTZOffset;
        
        public SignInDialog(String id) {
                super(id, WebSession.getString(108));
                add(form = new SignInForm("signin"));
+               browserTZOffset = new HiddenField<Integer>("tzOffset", 
Model.of(new Integer(0)));
+               add(browserTZOffset);
+
+               // This code is required to detect time zone offset
+               add(new AbstractDefaultAjaxBehavior() {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       public void renderHead(Component component, 
IHeaderResponse response) {
+                               super.renderHead(component, response);
+                               
response.render(JavaScriptHeaderItem.forScript(getCallbackFunctionBody(resolved("tzOffset",
 "getTimeZoneOffsetHours()")), "getTzOffset"));
+                       }
+                       
+                       @Override
+                       protected void respond(AjaxRequestTarget target) {
+                               StringValue offset = 
getRequestCycle().getRequest().getRequestParameters().getParameterValue("tzOffset");
+                               
browserTZOffset.setModelObject(offset.toInteger()); 
+                       }
+               });
        }
 
        public void setRegisterDialog(RegisterDialog r) {
@@ -126,6 +152,7 @@ public class SignInDialog extends Abstra
        @Override
        public void onClose(AjaxRequestTarget target, DialogButton button) {
                if (registerBtn.equals(button)) {
+                       r.setBrowserTZOffset(target, 
browserTZOffset.getModelObject());
                        r.open(target);
                }
        }


Reply via email to