def process_show(self, req): req.perm.assert_permission('CAL_VIEW') def stamp_dow (stamp): return time.localtime(stamp)[6] def stamp_floattime (stamp): t = time.localtime(stamp) return t[3] + t[4]/60.0 DIV = 4 def round_begin (x): import math return math.floor (x * DIV) / float (DIV) def round_end (x): import math return math.ceil (x * DIV) / float (DIV) try: date = time.strptime(req.args['date'],"%Y%m%d") except: date = time.localtime () cweek = [[] for _ in xrange(7)] week_range = caltools.get_week_range(date) bg, en = time.mktime(week_range[0]), time.mktime(week_range[1]) for ev in Event.events_between (self.env, bg, en,req.authname): begin = max (bg, ev.get_time_begin ()) end = min (en, ev.get_time_end ()) - 1 for d in xrange(stamp_dow(begin), stamp_dow(end)+1): cweek[d].append(ev) week_start = week_range[0] day_layouts = [cal_layout.layout (evts, round_begin, round_end) for evts in cweek] for d in xrange (len (day_layouts)): today = caltools.relative_day(week_start, d) today_stamp = time.mktime (today) tomorrow_stamp = today_stamp + 24 * 60 * 60 req.hdf['azcalendar.events.%d.date.year' % d] = today[0] req.hdf['azcalendar.events.%d.date.month' % d] = today[1] req.hdf['azcalendar.events.%d.date.day' % d] = today[2] for l in xrange (len (day_layouts[d])): for ev in day_layouts[d][l]: begin = ev.get_time_begin () if begin < today_stamp: begin = 0.0 else: begin = round_begin (stamp_floattime (begin)) end = ev.get_time_end () if end >= tomorrow_stamp: end = 24.0 else: end = round_end (stamp_floattime (end)) base = 'azcalendar.events.%d.events.%d.%d' % (d, l, ev.get_id ()) req.hdf[base + '.id'] = ev.get_id () req.hdf[base + '.title'] = ev.get_title () req.hdf[base + '.priority'] = str(EventPriority[ev.get_priority ()]) req.hdf[base + '.brd_begin'] = int (round (begin * DIV)) req.hdf[base + '.brd_end'] = int (round (end * DIV)) if ev.get_time_begin () < today_stamp or ev.get_time_end () > tomorrow_stamp: fmt = "%d.%m.%Y %H:%M" else: fmt = "%H:%M" req.hdf[base + '.time_begin'] = time.strftime (fmt, time.localtime (ev.get_time_begin())) req.hdf[base + '.time_end'] = time.strftime (fmt, time.localtime (ev.get_time_end())) display_months = [] dm_year, dm_month = caltools.get_month_range (week_start)[0][:2] prev_year, prev_month, prev_day = date[:3] prev_month -= 1 if prev_month < 1: prev_month += 12 prev_year -= 1 prev_day = min (calendar.monthrange (prev_year, prev_month)[1], prev_day) next_year, next_month, next_day = date[:3] next_month += 1 if next_month > 12: next_month -= 12 next_year += 1 next_day = min (calendar.monthrange (next_year, next_month)[1], next_day) for i in range(3): month_range = caltools.get_month_range (tuple([dm_year, dm_month, 1] + [0 for i in range(6)])) interesting_days = {} bg, en = time.mktime(month_range[0]), time.mktime(month_range[1]) evts = Event.events_between (self.env, bg, en, req.authname) for ev in evts: begin = ev.get_time_begin() if begin < bg: begin = 1 else: begin = time.localtime(begin)[2] end = ev.get_time_end() if end > en: end = calendar.monthrange(dm_year, dm_month)[1] else: end = time.localtime(end)[2] priority = ev.get_priority() # Mark interesting days. for day in range (begin, end + 1): if day not in interesting_days or interesting_days[day] < priority: interesting_days[day] = priority interesting_days_l = [(day, str(EventPriority[interesting_days[day]])) for day in interesting_days.keys()] display_months.append ((dm_month - 1, dm_year, interesting_days_l)) dm_month += 1 if dm_month > 12: dm_year += 1 dm_month = 1 req.hdf['azcalendar.prev_date'] = "%04d%02d%02d" % (prev_year, prev_month, prev_day) req.hdf['azcalendar.today_date'] = time.strftime ("%Y%m%d") req.hdf['azcalendar.next_date'] = "%04d%02d%02d" % (next_year, next_month, next_day) for m in xrange (len (display_months)): month, year, impdays = display_months[m] _, numdays = calendar.monthrange (year, month + 1) firstday = calendar.weekday(year, month + 1, 1) req.hdf['azcalendar.months.%d.month' % m] = month req.hdf['azcalendar.months.%d.year' % m] = year req.hdf['azcalendar.months.%d.firstday' % m] = firstday req.hdf['azcalendar.months.%d.numdays' % m] = numdays for d in xrange (len (impdays)): day, priority = impdays[d] req.hdf['azcalendar.months.%d.impdays.%d' % (m, day)] = priority req.hdf['azcalendar.div'] = str(DIV) req.hdf['title'] = "Calendar" add_stylesheet (req, 'hw/css/azcalendar.css') return 'azcalendar.cs', None