diff --git a/browser/calendar.pt b/browser/calendar.pt new file mode 100644 index 0000000..daaa793 --- /dev/null +++ b/browser/calendar.pt @@ -0,0 +1,54 @@ + + + + + + + + + +
+ << + < + + February + 2010 + > + >> +
+ + + + + + + + + +
  + +
+ + +
+
diff --git a/browser/node.py b/browser/node.py index f64e03c..a9c1113 100644 --- a/browser/node.py +++ b/browser/node.py @@ -66,6 +66,7 @@ from loops.versioning.util import getVersion node_macros = ViewPageTemplateFile('node_macros.pt') info_macros = ViewPageTemplateFile('info.pt') +calendar_macros = ViewPageTemplateFile('calendar.pt') class NodeView(BaseView): @@ -141,6 +142,10 @@ class NodeView(BaseView): subMacro=node_macros.macros['presence'], icon='cybertools.icons/group.png', priority=11) + if self.globalOptions('organize.showCalendar'): + cm.register('portlet_left', 'calendar', title=_(u'Calendar'), + subMacro=calendar_macros.macros['main'], + priority=90) # force early portlet registrations by target by setting up target view self.virtualTarget diff --git a/organize/README.txt b/organize/README.txt index 131ec33..564d27a 100644 --- a/organize/README.txt +++ b/organize/README.txt @@ -423,6 +423,24 @@ Show Presence of Other Users >>> component.provideUtility(Presence()) +Calendar +======== + + >>> from loops.organize.browser.event import CalendarInfo + >>> calendar = CalendarInfo(menu, TestRequest(cal_year=2009, cal_month=2)) + >>> mc = calendar.monthCalendar + >>> mc + [[0, 0, 0, 0, 0, 0, 1], + [2, 3, 4, 5, 6, 7, 8], + [9, 10, 11, 12, 13, 14, 15], + [16, 17, 18, 19, 20, 21, 22], + [23, 24, 25, 26, 27, 28, 0]] + >>> calendar.getWeekNumber(mc[0]) + 5 + >>> calendar.isToday(18) + False + + Fin de partie ============= diff --git a/organize/browser/configure.zcml b/organize/browser/configure.zcml index 457837f..35fe923 100644 --- a/organize/browser/configure.zcml +++ b/organize/browser/configure.zcml @@ -69,6 +69,12 @@ factory="loops.organize.browser.party.SendEmail" permission="zope.View" /> + + = now - timedelta(delta)), + key=sort) + + +class Events(ConceptView, BaseEvents): @Lazy def macro(self): @@ -58,18 +77,76 @@ class Events(ConceptView): self.registerDojoDateWidget() return actions - def events(self): - cm = self.loopsRoot.getConceptManager() - tEvent = cm['event'] - hasType = cm.getTypePredicate() - now = datetime.today() - delta = int(self.request.get('delta', - IOptions(adapted(self.context))('delta', [0])[0])) - sort = lambda x: x.adapted.start or now - relViews = (self.childViewFactory(r, self.request, contextIsSecond=True) - for r in tEvent.getChildRelations([hasType], sort=None)) - return sorted((rv for rv in relViews - if not rv.adapted.end or - rv.adapted.end >= now - timedelta(delta)), - key=sort) + +class CalendarInfo(BaseEvents): + + monthNames = ('January', 'February', 'March', 'April', 'May', 'June', + 'July', 'August', 'September', 'October', 'November', 'December') + + weekDays = ('Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su') + + def __init__(self, context, request): + self.context = context + self.request = request + + @Lazy + def today(self): + return date.today() + + @Lazy + def selectedYear(self): + return int(self.request.get('cal_year') or self.today.year) + + @Lazy + def selectedMonth(self): + return int(self.request.get('cal_month') or self.today.month) + + @Lazy + def previousYear(self): + return self.selectedYear - 1 + + @Lazy + def nextYear(self): + return self.selectedYear + 1 + + @Lazy + def previousMonth(self): + m = self.selectedMonth + y = self.selectedYear + if m == 1: + y, m = y - 1, 12 + else: + m -= 1 + return dict(year=y, month=m) + + @Lazy + def nextMonth(self): + m = self.selectedMonth + y = self.selectedYear + if m == 12: + y, m = y + 1, 1 + else: + m += 1 + return dict(year=y, month=m) + + @Lazy + def monthCalendar(self): + return calendar.monthcalendar(self.selectedYear, self.selectedMonth) + + def isToday(self, day): + if not day: + return False + return date(self.selectedYear, self.selectedMonth, day) == self.today + + def getWeekNumber(self, week): + for day in week: + if day: + break + return datetime(self.selectedYear, self.selectedMonth, day).isocalendar()[1] + + def getEvents(self, day): + if not day: + return False + d = datetime(self.selectedYear, self.selectedMonth, day) + return []