cubicweb/web/views/calendar.py
changeset 11942 756710144b3f
parent 11767 432f87a63057
child 12825 71a842bdf81d
child 12907 d1c953c97d39
equal deleted inserted replaced
11936:46a0366a32af 11942:756710144b3f
    39 MONTHNAMES = ( _('january'), _('february'), _('march'), _('april'), _('may'),
    39 MONTHNAMES = ( _('january'), _('february'), _('march'), _('april'), _('may'),
    40                _('june'), _('july'), _('august'), _('september'), _('october'),
    40                _('june'), _('july'), _('august'), _('september'), _('october'),
    41                _('november'), _('december')
    41                _('november'), _('december')
    42                )
    42                )
    43 
    43 
       
    44 ICAL_EVENT = "event"
       
    45 ICAL_TODO = "todo"
    44 
    46 
    45 class ICalendarableAdapter(EntityAdapter):
    47 class ICalendarableAdapter(EntityAdapter):
    46     __needs_bw_compat__ = True
    48     __needs_bw_compat__ = True
    47     __regid__ = 'ICalendarable'
    49     __regid__ = 'ICalendarable'
    48     __abstract__ = True
    50     __abstract__ = True
    49 
    51 
       
    52     # component type
       
    53     component = ICAL_EVENT
       
    54 
    50     @property
    55     @property
    51     def start(self):
    56     def start(self):
    52         """return start date"""
    57         """return start date"""
    53         raise NotImplementedError
    58         raise NotImplementedError
    54 
    59 
    62 
    67 
    63 try:
    68 try:
    64     from vobject import iCalendar
    69     from vobject import iCalendar
    65 
    70 
    66     class iCalView(EntityView):
    71     class iCalView(EntityView):
    67         """A calendar view that generates a iCalendar file (RFC 2445)
    72         """A calendar view that generates a iCalendar file (RFC 5545)
    68 
    73 
    69         Does apply to ICalendarable compatible entities
    74         Does apply to ICalendarable compatible entities
    70         """
    75         """
    71         __select__ = adaptable('ICalendarable')
    76         __select__ = adaptable('ICalendarable')
    72         paginable = False
    77         paginable = False
    77 
    82 
    78         def call(self):
    83         def call(self):
    79             ical = iCalendar()
    84             ical = iCalendar()
    80             for i in range(len(self.cw_rset.rows)):
    85             for i in range(len(self.cw_rset.rows)):
    81                 task = self.cw_rset.complete_entity(i, 0)
    86                 task = self.cw_rset.complete_entity(i, 0)
    82                 event = ical.add('vevent')
    87                 ical_task = task.cw_adapt_to('ICalendarable')
    83                 event.add('summary').value = task.dc_title()
    88                 if ical_task.component == ICAL_TODO:
    84                 event.add('description').value = task.dc_description()
    89                     elt = ical.add('vtodo')
    85                 icalendarable = task.cw_adapt_to('ICalendarable')
    90                     stop_kw = "due"
    86                 if icalendarable.start:
    91                 else:
    87                     event.add('dtstart').value = icalendarable.start
    92                     elt = ical.add('vevent')
    88                 if icalendarable.stop:
    93                     stop_kw = "dtend"
    89                     event.add('dtend').value = icalendarable.stop
    94                 elt.add('uid').value = task.absolute_url() # unique stable id
       
    95                 elt.add('url').value = task.absolute_url()
       
    96                 elt.add('summary').value = task.dc_title()
       
    97                 elt.add('description').value = task.dc_description()
       
    98                 if ical_task.start:
       
    99                     elt.add('dtstart').value = ical_task.start
       
   100                 if ical_task.stop:
       
   101                     elt.add(stop_kw).value = ical_task.stop
    90 
   102 
    91             buff = ical.serialize()
   103             buff = ical.serialize()
    92             if not isinstance(buff, unicode):
   104             if not isinstance(buff, unicode):
    93                 buff = unicode(buff, self._cw.encoding)
   105                 buff = unicode(buff, self._cw.encoding)
    94             self.w(buff)
   106             self.w(buff)