Index: reference/library/src/webapp/skin/default/portal.css =================================================================== --- reference/library/src/webapp/skin/default/portal.css (revision 439) +++ reference/library/src/webapp/skin/default/portal.css (working copy) @@ -112,6 +112,16 @@ text-align: center; } +.server-time-container { + float: right; + font-size: 1.1em; + text-align: right; +} + +.server-time { + font-weight: bold; +} + /*PART 2 - HEADER IFRAME SETTINGS*/ /*iframe sizes for different states*/ /*gone for 2.3 Index: portal/portal-impl/impl/src/java/org/sakaiproject/portal/charon/SkinnableCharonPortal.java =================================================================== --- portal/portal-impl/impl/src/java/org/sakaiproject/portal/charon/SkinnableCharonPortal.java (revision 439) +++ portal/portal-impl/impl/src/java/org/sakaiproject/portal/charon/SkinnableCharonPortal.java (working copy) @@ -23,10 +23,13 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.TimeZone; import java.util.Vector; import java.util.Set; import java.util.HashSet; @@ -1410,6 +1413,65 @@ { if (rcontext.uses(INCLUDE_BOTTOM)) { + String userId = SessionManager.getCurrentSessionUserId(); + + //Get user preferences + org.sakaiproject.user.api.Preferences prefs = + PreferencesService.getPreferences(userId); + + Calendar now = Calendar.getInstance(); + Date nowDate = new Date(now.getTimeInMillis()); + + //first set server date and time + TimeZone serverTz = TimeZone.getDefault(); + now.setTimeZone(serverTz); + + rcontext.put("serverTzDisplay", + serverTz.getDisplayName( + serverTz.inDaylightTime(nowDate), + TimeZone.SHORT + ) + ); + + rcontext.put("serverTzGMTOffset", + String.valueOf( + now.getTimeInMillis() + now.get(Calendar.ZONE_OFFSET) + now.get(Calendar.DST_OFFSET) + ) + ); + + //provide the user's preferred timezone information if it is different + + //Get the Properties object that holds user's TimeZone preferences + ResourceProperties props = prefs.getProperties(TimeService.APPLICATION_ID); + + //Get the ID of the timezone using the timezone key. + //Default to 'localTimeZone' (server timezone?) + String preferredTzId = (String) props.get(TimeService.TIMEZONE_KEY); + + if (preferredTzId != null && !preferredTzId.equals(serverTz.getID())) { + TimeZone preferredTz = TimeZone.getTimeZone(preferredTzId); + + now.setTimeZone(preferredTz); + + rcontext.put("showPreferredTzTime", "true"); + + //now set up the portal information + rcontext.put("preferredTzDisplay", + preferredTz.getDisplayName( + preferredTz.inDaylightTime(nowDate), + TimeZone.SHORT + ) + ); + + rcontext.put("preferredTzGMTOffset", + String.valueOf( + now.getTimeInMillis() + now.get(Calendar.ZONE_OFFSET) + now.get(Calendar.DST_OFFSET) + ) + ); + } else { + rcontext.put("showPreferredTzTime", "false"); + } + rcontext.put("pagepopup", false); String copyright = ServerConfigurationService Index: portal/portal-impl/impl/src/bundle/sitenav.properties =================================================================== --- portal/portal-impl/impl/src/bundle/sitenav.properties (revision 439) +++ portal/portal-impl/impl/src/bundle/sitenav.properties (working copy) @@ -28,6 +28,8 @@ sit_presencetitle = Users present: sit_presenceiframetit = Users Present in Site site_newwindow = Opens in a new window +site_servertime_label = Server Time: +site_preferredtime_label = Your Preferred Time: sit_help = Help sit_edit = Edit Index: osp/xsltcharon/xsltcharon-portal/xsl-portal/src/webapp/WEB-INF/transform/portal.xsl =================================================================== --- osp/xsltcharon/xsltcharon-portal/xsl-portal/src/webapp/WEB-INF/transform/portal.xsl (revision 439) +++ osp/xsltcharon/xsltcharon-portal/xsl-portal/src/webapp/WEB-INF/transform/portal.xsl (working copy) @@ -693,6 +693,54 @@ -->