You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by vd...@apache.org on 2013/07/31 12:07:50 UTC

svn commit: r1508800 - in /openmeetings/trunk/singlewebapp: WebContent/openmeetings/js/ src/org/apache/openmeetings/web/app/ src/org/apache/openmeetings/web/pages/auth/

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);
 		}
 	}