1.1 --- a/imip_manager.py Mon Jan 12 20:02:24 2015 +0100
1.2 +++ b/imip_manager.py Mon Jan 12 23:07:33 2015 +0100
1.3 @@ -24,7 +24,7 @@
1.4
1.5 LIBRARY_PATH = "/var/lib/imip-agent"
1.6
1.7 -import cgi, os, sys
1.8 +import cgi, os, sys, locale
1.9
1.10 sys.path.append(LIBRARY_PATH)
1.11
1.12 @@ -34,6 +34,7 @@
1.13 get_values, parse_object, to_part, to_timezone
1.14 from imiptools.mail import Messenger
1.15 from imiptools.period import have_conflict, get_slots, get_spans
1.16 +from imiptools.profile import Preferences
1.17 from vCalendar import to_node
1.18 import markup
1.19 import imip_store
1.20 @@ -155,6 +156,7 @@
1.21 self.env = CGIEnvironment()
1.22 user = self.env.get_user()
1.23 self.user = user and get_uri(user) or None
1.24 + self.preferences = None
1.25 self.requests = None
1.26
1.27 self.out = self.env.get_output()
1.28 @@ -193,6 +195,17 @@
1.29 self.requests = self.store.get_requests(self.user)
1.30 return self.requests
1.31
1.32 + # Preference methods.
1.33 +
1.34 + def set_user_locale(self):
1.35 + lang = self.get_preferences().get("LANG")
1.36 + locale.setlocale(locale.LC_TIME, lang or "C")
1.37 +
1.38 + def get_preferences(self):
1.39 + if not self.preferences:
1.40 + self.preferences = Preferences(self.user)
1.41 + return self.preferences
1.42 +
1.43 # Data management methods.
1.44
1.45 def remove_request(self, uid):
1.46 @@ -285,6 +298,8 @@
1.47 on the current page.
1.48 """
1.49
1.50 + self.set_user_locale()
1.51 +
1.52 details = self._get_details(obj)
1.53
1.54 # Provide a summary of the object.
1.55 @@ -292,9 +307,16 @@
1.56 self.page.dl()
1.57
1.58 for name in ["SUMMARY", "DTSTART", "DTEND", "ORGANIZER", "ATTENDEE"]:
1.59 - for value in get_values(details, name):
1.60 + if name in ["DTSTART", "DTEND"]:
1.61 + value, attr = get_item(details, name)
1.62 + tzid = attr.get("TZID")
1.63 + value = to_timezone(get_datetime(value), tzid).strftime("%c")
1.64 self.page.dt(name)
1.65 self.page.dd(value)
1.66 + else:
1.67 + for value in get_values(details, name):
1.68 + self.page.dt(name)
1.69 + self.page.dd(value)
1.70
1.71 self.page.dl.close()
1.72
1.73 @@ -317,8 +339,8 @@
1.74 for t in have_conflict(freebusy, [(dtstart, dtend)], True):
1.75 start, end, found_uid = t[:3]
1.76 if uid != found_uid:
1.77 - start = format_datetime(to_timezone(get_datetime(start), tzid))
1.78 - end = format_datetime(to_timezone(get_datetime(end), tzid))
1.79 + start = to_timezone(get_datetime(start), tzid).strftime("%c")
1.80 + end = to_timezone(get_datetime(end), tzid).strftime("%c")
1.81 self.page.p("Event conflicts with another from %s to %s." % (start, end))
1.82
1.83 def show_requests_on_page(self):
1.84 @@ -376,6 +398,8 @@
1.85
1.86 "Show the calendar for the current user."
1.87
1.88 + self.set_user_locale()
1.89 +
1.90 self.new_page(title="Calendar")
1.91 self.show_requests_on_page()
1.92
1.93 @@ -386,6 +410,11 @@
1.94 page.p("No events scheduled.")
1.95 return
1.96
1.97 + # Set the locale and obtain the user's timezone.
1.98 +
1.99 + prefs = self.get_preferences()
1.100 + tzid = prefs.get("TZID")
1.101 +
1.102 # Day view: start at the earliest known day and produce days until the
1.103 # latest known day, perhaps with expandable sections of empty days.
1.104
1.105 @@ -405,9 +434,11 @@
1.106 page.table(border=1, cellspacing=0, cellpadding=5)
1.107
1.108 for point, active in slots:
1.109 + dt = to_timezone(get_datetime(point), tzid or "UTC")
1.110 +
1.111 page.tr()
1.112 page.th(class_="timeslot")
1.113 - page.add(point)
1.114 + page.add(dt.strftime("%c"))
1.115 page.th.close()
1.116
1.117 for t in active: