Changeset 47661

Show
Ignore:
Timestamp:
07/31/06 16:10:38 (2 years ago)
Author:
lregebro
Message:

#1718: When exporting as reader, private events was exported in full.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Zope2/CalZope/trunk/CHANGES

    r47550 r47661  
    1111- the DivDateWidget actually generate datetime.date instances instead of 
    1212  datetime.datetime instance as previously (fixes a 'until' TypeError) 
     13- #1718: When exporting as reader, private events was exported in full. 
    1314New internal features: 
    1415~~~~~~~~~~~~~~~~~~~~~~ 
  • Zope2/CalZope/trunk/tests/test_icalendar.py

    r47592 r47661  
    2525# but hard to reuse doctests in Zope 2 context.. 
    2626import unittest 
    27 from datetime import datetime 
     27from datetime import datetime, timedelta 
    2828from cStringIO import StringIO 
    2929 
    3030from zope.app import zapi 
     31from AccessControl import Unauthorized 
    3132 
    3233from calendartest import CalendarTestCase 
     
    107108        calendar = self.folder.martijn_cal 
    108109        calendar.addAttendee(source.getAttendee('martijn')) 
     110        self.login('martijn') 
    109111 
    110112    def makeRequestAndView(self, string, calendar): 
     
    224226        self.failUnlessEqual(result, []) 
    225227 
    226  
     228    def test_export_private(self): 
     229        # Create some events: 
     230        calendar = self.folder.martijn_cal 
     231        calendar.import_(icalsimple) 
     232        calendar.import_(icalcomplex) 
     233        calendar.import_(icalunicode) 
     234 
     235        calendar.getMainAttendee().createEvent( 
     236            dtstart=datetime(2005, 4, 10, 16, 00), 
     237            duration=timedelta(minutes=60), 
     238            status='TENTATIVE', 
     239            access='PRIVATE', 
     240            title="Private Event", 
     241            description="Private Event Description", 
     242            categories=['Private','Event','Categories']) 
     243 
     244        # New user Lennart: 
     245        self.folder.acl_users._doAddUser('lennart', 'lennart', [''], []) 
     246        self.login('lennart') 
     247 
     248        # Lennart has no rights on Martijns calendar, and can not export it 
     249        self.assertRaises(Unauthorized, calendar.restrictedTraverse,  
     250                          'calendar.ics') 
     251         
     252        # Give Lennart view rights on the calendar: 
     253        calendar.manage_addLocalRoles('lennart', ['AttendeeReader']) 
     254         
     255        # iCalendar export should not include the data of the private event. 
     256        export = calendar.restrictedTraverse('calendar.ics')() 
     257        self.failIf(export.find('Private')!=-1,  
     258                    "Private data visible on export") 
     259 
     260        # Give Lennart manager rights on the calendar: 
     261        calendar.manage_addLocalRoles('lennart', ['AttendeeManager']) 
     262 
     263        # iCalendar export should now include the data of the private event. 
     264        export = calendar.restrictedTraverse('calendar.ics')() 
     265        self.failIf(export.find('Private')==-1,  
     266                    "Private data not visible on export") 
    227267 
    228268 
  • Zope2/CalZope/trunk/zopecal.py

    r45718 r47661  
    2424from random import randrange 
    2525from datetime import datetime, timedelta, date 
    26 import calendar 
     26import calendar, icalendar 
    2727 
    2828# zope 
     
    237237    def _getAttendeeSource(self): 
    238238        return zapi.getUtility(IAttendeeSource, context=self) 
     239 
     240    def export(self, period=(None, None), search_criteria=None): 
     241        """Export calendar data in ICalendar format. 
     242        """ 
     243        ical = icalendar.Calendar() 
     244        ical.add('prodid', '-//CPS Shared Calendar//nuxeo.com//') 
     245        ical.add('version', '1.0') 
     246 
     247        security = getSecurityManager() 
     248        for event in self.getEvents(period, search_criteria): 
     249            private = not security.checkPermission('View event', event.__of__(self)) 
     250            e = event.export(private) 
     251            ical.add_component(e) 
     252        ical_text = ical.as_string() 
     253        self._logger.debug('export generated ical text: \n\n%s\n\n' % ical_text) 
     254        return ical_text 
    239255 
    240256