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 []