Skip to content

Commit

Permalink
Merge pull request #104 from openboxes/feature/#95-allow-user-to-choo…
Browse files Browse the repository at this point in the history
…se-timezone

#95 allow user to choose timezone
  • Loading branch information
jmiranda committed Sep 14, 2015
2 parents d478de8 + 931854b commit 61dda5f
Show file tree
Hide file tree
Showing 13 changed files with 112 additions and 62 deletions.
12 changes: 8 additions & 4 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
language: groovy

jdk:
- openjdk7

before_install:
- sudo add-apt-repository -y ppa:groovy-dev/grails
- sudo apt-get update
- sudo apt-get install grails-1.3.9

script: "grails test-app unit: --non-interactive"
script: 'grails test-app unit: --non-interactive'
cache:
directories:
- "$HOME/.grails"
- "$HOME/.ivy2"
notifications:
slack:
secure: NJ2bhtLK2Xn0vPfq/lAxehuwLshp50Uep1mHMTbiQ7WK/YxNhLbrjgIbh9ZcM/UxZ4AhYX3Wv4VUI9iyEa06XUNTtxaM3ia8Eqao1wTVMl9N0RvU+VgHINORmyZZlf4MNBOZItwsmZT2b094gAfPIg7r8VuCo1wVqGjubVfTeUQ=
6 changes: 3 additions & 3 deletions grails-app/conf/DataSource.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ environments {
dataSource {
//dbCreate = "update"
url = "jdbc:mysql:https://localhost:3306/openboxes_dev?autoReconnect=true&zeroDateTimeBehavior=convertToNull&sessionVariables=storage_engine=InnoDB"
loggingSql = true
format_sql = true
use_sql_comments = true
loggingSql = false
format_sql = false
use_sql_comments = false
}
}
test {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,18 @@ class AuthController {
if (userInstance) {

// FIXME Handle setting timezone based on configuration
TimeZone userTimezone = TimeZone.getTimeZone("America/New_York")
String browserTimezone = request.getParameter("browserTimezone")
if (browserTimezone != null) {
userTimezone = TimeZone.getTimeZone(browserTimezone)
}
TimeZone userTimezone = TimeZone.getTimeZone("America/New_York")
// Check for user's preferred timezone
if (userInstance.timezone) {
userTimezone = TimeZone.getTimeZone(userInstance.timezone)
}
// If there's no user preference timezone, use the browser timezone (login page sets parameter)
else {
String browserTimezone = request.getParameter("browserTimezone")
if (browserTimezone != null) {
userTimezone = TimeZone.getTimeZone(browserTimezone)
}
}
session.timezone = userTimezone;

// Check if user is active -- redirect back to login page
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,11 @@ class UserController {
updateRoles(userInstance, params.locationRolePairs)
}

if (params.timezone) {
session.timezone = TimeZone.getTimeZone(params.timezone)

}

if (!userInstance.hasErrors() && userInstance.save(flush: true)) {
// if this is the current user, update reference to that user in the session
if (session.user.id == userInstance?.id) {
Expand Down
2 changes: 2 additions & 0 deletions grails-app/domain/org/pih/warehouse/core/User.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class User extends Person {
String password; // encrypted password
String passwordConfirm; // password confirm used on signup and password reset
Locale locale; // the user's locale
String timezone

Date lastLoginDate; // keep track of the user's last login
Location warehouse; // keep track of the user's last warehouse
Expand Down Expand Up @@ -46,6 +47,7 @@ class User extends Person {
})
passwordConfirm(blank: false)
locale(nullable: true)
timezone(nullable:true)
lastLoginDate(nullable: true)
//useSavedLocation(nullable:true)
warehouse(nullable: true)
Expand Down
17 changes: 17 additions & 0 deletions grails-app/migrations/0.6.x/add-column-user-timezone.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http:https://www.liquibase.org/xml/ns/dbchangelog/1.9"
xmlns:xsi="http:https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http:https://www.liquibase.org/xml/ns/dbchangelog/1.9 http:https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">
<changeSet author="jmiranda (generated)" id="1442206717583-1">
<preConditions onFail="MARK_RAN">
<not>
<columnExists tableName="user" columnName="timezone"/>
</not>
</preConditions>
<addColumn tableName="user">
<column name="timezone" type="VARCHAR(255)">
<constraints nullable="true" />
</column>
</addColumn>
</changeSet>
</databaseChangeLog>
1 change: 1 addition & 0 deletions grails-app/migrations/0.6.x/changelog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@

<include file="0.6.x/modify-column-order-unit-price.xml"/>
<include file="0.6.x/create-table-inventory-item-snapshot.xml"/>
<include file="0.6.x/add-column-user-timezone.xml"/>

</databaseChangeLog>
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ class UserService {
eq("active", Boolean.valueOf(params.status))
}

order("lastName", "desc")
//order("lastName", "desc")
}

return results;
Expand Down
17 changes: 17 additions & 0 deletions grails-app/taglib/org/pih/warehouse/FormatDateTagLib.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.pih.warehouse

import org.codehaus.groovy.grails.plugins.web.taglib.FormatTagLib

class FormatDateTagLib extends FormatTagLib {

static namespace = "g"

def formatDate = { attrs, body ->
log.info "Date format: " + attrs
FormatTagLib formatTagLib = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.FormatTagLib')
if (session.timezone) {
attrs.timeZone = session.timezone
}
out << formatTagLib.formatDate.call(attrs)
}
}
75 changes: 38 additions & 37 deletions grails-app/views/auth/signup.gsp
Original file line number Diff line number Diff line change
Expand Up @@ -27,26 +27,30 @@
</g:hasErrors>

<div id="loginBox" class="box">

<h2>
<img src="${createLinkTo(dir:'images/icons/silk',file:'lock.png')}" class="middle"/> Signup for an account
</h2>
<table>
<tbody>
<tr class="">
<td>

<tr class="prop">
<td colspan="2">
<warehouse:message code="auth.alreadyHaveAccount.text"/>
<g:link class="list" controller="auth" action="login">
<warehouse:message code="auth.login.label" default="Login"/>
</g:link>
</td>

</tr>
<tr class="">

<tr class="prop">
<td class="name middle right">
<label for="email"><warehouse:message code="user.email.label" default="Email" /></label>
</td>
<td class="value ${hasErrors(bean: userInstance, field: 'email', 'errors')}">
<g:textField name="email" value="${userInstance?.email}" class="text" size="40"/>
</td>
</tr>
<tr class="">
<tr class="prop">
<td class="name middle right" width="35%">
<label for="firstName"><warehouse:message code="user.firstName.label" default="First Name" /></label>
</td>
Expand All @@ -55,7 +59,7 @@
</td>
</tr>

<tr class="">
<tr class="prop">
<td class="name middle right">
<label for="lastName"><warehouse:message code="user.lastName.label" default="Last Name" /></label>
</td>
Expand All @@ -64,20 +68,29 @@
</td>
</tr>

<tr class="">
<td class="middle right">
<label for="locale"><warehouse:message code="default.locale.label"/></label>
</td>
<td class="value ${hasErrors(bean: userInstance, field: 'locale', 'errors')}">
<div style="width: 235px">
<g:select name="locale" from="${ grailsApplication.config.openboxes.locale.supportedLocales.collect{ new Locale(it) } }"
optionValue="displayName" value="${userInstance?.locale}" noSelection="['':'']" class="chzn-select-deselect"/>
</div>
</td>
</tr>
<tr class="prop">
<td class="name middle right">
<label for="locale"><warehouse:message code="default.locale.label"/></label>
</td>
<td class="value ${hasErrors(bean: userInstance, field: 'locale', 'errors')}">
<div style="width: 235px">
<g:select name="locale" from="${ grailsApplication.config.openboxes.locale.supportedLocales.collect{ new Locale(it) } }"
optionValue="displayName" value="${userInstance?.locale}" noSelection="['':'']" class="chzn-select-deselect"/>
</div>
</td>
</tr>
<tr class="prop">
<td valign="top" class="name">
<label for="locale"><warehouse:message
code="default.timezone.label" default="Timezone" /></label></td>
<td valign="top" class="value">
<g:select id="timezone" name="timezone" from="${TimeZone.getAvailableIDs().sort()}"
noSelection="['':'']" value="${userInstance?.timezone}" class="chzn-select-deselect"/>
</td>
</tr>

<tr class="">
<td class="middle right">
<tr class="prop">
<td class="name middle right">
<label for="username"><warehouse:message code="user.username.label" default="Username" /></label>
</td>
<td class="${hasErrors(bean: userInstance, field: 'username', 'errors')}">
Expand All @@ -86,7 +99,7 @@
</tr>


<tr class="">
<tr class="prop">
<td class="name middle right">
<label for="password"><warehouse:message code="user.password.label" default="Password" /></label>
</td>
Expand All @@ -95,35 +108,23 @@
</td>
</tr>

<tr class="">
<td class="middle right">
<tr class="prop">
<td class="name middle right">
<label for="passwordConfirm"><warehouse:message code="user.confirmPassword.label" default="Confirm Password" /></label>
</td>
<td class="value ${hasErrors(bean: userInstance, field: 'passwordConfirm', 'errors')}">
<g:passwordField name="passwordConfirm" value="${userInstance?.passwordConfirm}" class="text" size="40" />
</td>
</tr>
<tr class="">
<tr class="prop">
<td class="middle right"></td>
<td valign="top">
<button type="submit" class="button icon approve">
<warehouse:message code="auth.signup.label"/>
</button>



</td>
</tr>
<tr class="prop">
<td colspan="2">
<warehouse:message code="auth.alreadyHaveAccount.text"/>
<g:link class="list" controller="auth" action="login">
<warehouse:message code="auth.login.label" default="Login"/>
</g:link>
</td>

</tr>
</tbody>
</tbody>
</table>
</div>

Expand Down
15 changes: 6 additions & 9 deletions grails-app/views/user/edit.gsp
Original file line number Diff line number Diff line change
Expand Up @@ -97,19 +97,16 @@
optionValue="displayName" value="${userInstance?.locale}" noSelection="['null':'']" class="chzn-select-deselect"/>
</td>
</tr>
<%--
<tr class="prop">
<td valign="top" class="name"><warehouse:message
code="default.timezone.label" default="Timezone" /></td>
<td valign="top" class="name">
<label for="locale"><warehouse:message
code="default.timezone.label" default="Timezone" /></label></td>
<td valign="top" class="value">
${session?.timezone?.ID}
${session?.timezone?.displayName}
<g:timeZoneSelect name="myTimeZone" value="" />
<g:select id="timezone" name="timezone" from="${TimeZone.getAvailableIDs().sort()}"
noSelection="['':'']"
value="${userInstance?.timezone}" class="chzn-select-deselect"/>
</td>
</tr>
--%>

</tbody>
</table>
</div>
Expand Down
2 changes: 1 addition & 1 deletion grails-app/views/user/list.gsp
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
<tr>
<g:sortableColumn property="active" title="${warehouse.message(code: 'user.active.label')}" />
<g:sortableColumn property="username" title="${warehouse.message(code: 'user.username.label')}" />
<g:sortableColumn property="firstName" title="${warehouse.message(code: 'default.name.label')}" />
<g:sortableColumn property="lastName" title="${warehouse.message(code: 'default.name.label')}" />
<g:sortableColumn property="email" title="${warehouse.message(code: 'user.email.label')}" />
<g:sortableColumn property="locale" title="${warehouse.message(code: 'default.locale.label')}" />
<!-- <g:sortableColumn property="email" title="${warehouse.message(code: 'user.role.label', default: 'Roles')}" /> -->
Expand Down
3 changes: 1 addition & 2 deletions grails-app/views/user/show.gsp
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,7 @@
<td valign="top" class="name"><label><warehouse:message
code="default.timezone.label" default="Timezone" /></label></td>
<td valign="top" class="value">
${session?.timezone?.ID}
${session?.timezone?.displayName}
${userInstance?.timezone}
</td>
</tr>
<tr class="prop">
Expand Down

0 comments on commit 61dda5f

Please sign in to comment.