Example #1
0
 def events(self, req):
     user = req.authname
     event_id = req.args.get("obj_id") or None
     event = Event(self.env, event_id)
     cal_id = event_id and event.calendar or req.args.get("calendar")
     own = True
     if not event_id:
         event.calendar = cal_id
         event.allday = req.args.get("allDay") == "true" and 1 or 0
         ticket = req.args.get("ticket")
         ticket = ticket and Ticket(self.env, int(ticket)) or None
         if ticket and ticket.exists and "TICKET_VIEW" in req.perm(ticket.resource):
             event.ticket = ticket.id
             event.title = ticket["summary"]
             event.time_track = TimeTrack(self.env)
         getdate = lambda x: to_datetime(long(req.args[x]), utc)
         event.dtstart = getdate("date")
         event.dtend = event.dtstart + timedelta(minutes=60)
     else:
         cal = Calendar(self.env, event.calendar)
         own = cal.owner == user
         tt = TimeTrack(self.env, event.id, user)
         event.time_track = tt
     data = {
         "event": event and event_as_dict(event, own) or None,
         "tickets": TicketConfigRPC(self.env).my_active_tickets(req),
         "calendars": [
             cal_as_dict(cal, user)
             for cal in Calendar.select(self.env, owner=user)
             if cal.type != CalendarType.Reference
         ],
     }
     return "itteco_event_form.html", data, None
Example #2
0
 def query(self, req, start, end, tzoffset):
     username =  req.authname
     tz = FixedOffset(tzoffset, 'Browser offset')
     events = [
         event_as_dict(event)
         for event in Event.select(self.env, username, daterange=[start, end])
     ]
     
     return events
Example #3
0
 def events(self, req):
     user = req.authname
     event_id = req.args.get('obj_id') or None
     event = Event(self.env, event_id)
     cal_id = event_id and event.calendar or req.args.get('calendar')
     own = True
     if not event_id:
         event.calendar = cal_id
         event.allday = req.args.get('allDay') == 'true' and 1 or 0
         ticket = req.args.get('ticket')
         ticket = ticket and Ticket(self.env, int(ticket)) or None
         if ticket and ticket.exists and 'TICKET_VIEW' in req.perm(
                 ticket.resource):
             event.ticket = ticket.id
             event.title = ticket['summary']
             event.time_track = TimeTrack(self.env)
         getdate = lambda x: to_datetime(long(req.args[x]), utc)
         event.dtstart = getdate('date')
         event.dtend = event.dtstart + timedelta(minutes=60)
     else:
         cal = Calendar(self.env, event.calendar)
         own = cal.owner == user
         tt = TimeTrack(self.env, event.id, user)
         event.time_track = tt
     data = {
         'event':
         event and event_as_dict(event, own) or None,
         'tickets':
         TicketConfigRPC(self.env).my_active_tickets(req),
         'calendars': [
             cal_as_dict(cal, user)
             for cal in Calendar.select(self.env, owner=user)
             if cal.type != CalendarType.Reference
         ]
     }
     return 'itteco_event_form.html', data, None
Example #4
0
 def save_event(self, req, id, calendar, name, allday, start, end, description, ticket, tz):
     e = Event(self.env, id)
     self.env.log.debug('cal-res=%s, id=%s' % (calendar.resource, calendar.resource.id))
     if calendar.exists and 'CALENDAR_MODIFY' in req.perm(calendar.resource):
         e.title = name
         e.description = description
         e.calendar = calendar.id
         e.ticket = ticket or 0
         e.dtstart = parse_datetime(start, tz)
         e.dtend = parse_datetime(end,tz)
         e.allday = bool_to_int(allday)
         
         if e.exists:
             e.update()
         else:
             e.insert()
     return e
Example #5
0
    def _process_ical_request(self, req):
        req.send_response(200)
        req.send_header('Content-Type', 'text/calendar;charset=utf-8')
        req.end_headers()
        def escape_value(text): 
            s = ''.join(map(lambda c: (c in ';,\\') and '\\' + c or c, text))
            return '\\n'.join(re.split(r'[\r\n]+', s))

        def write_prop(name, value, params={}):
            text = ';'.join([name] + [k + '=' + v for k, v in params.items()]) \
                 + ':' + escape_value(value)
            firstline = 1
            while text:
                if not firstline: text = ' ' + text
                else: firstline = 0
                req.write(text[:75] + CRLF)
                text = text[75:]

        def write_date(name, value, params={}):
            params['VALUE'] = 'DATE'
            write_prop(name, format_date(value, '%Y%m%d', req.tz), params)

        def write_utctime(name, value, params={}):
            write_prop(name, format_datetime(value, '%Y%m%dT%H%M%SZ', utc),
                       params)

        cal_guid = req.args.get('cal_guid')
        events=[]
        user_name = req.authname
        if(cal_guid):
            db = self.env.get_db_cnx()
            cursor = db.cursor()
            cursor.execute("""
                SELECT sid
                  FROM session_attribute
                 WHERE name='cal_alias' AND value=%s""",
               (cal_guid,)
            )
            row = cursor.fetchone()
            if row:
                user_name, = row
        events=Event.select(self.env, user_name)
                
        write_prop('BEGIN', 'VCALENDAR')
        write_prop('VERSION', '2.0')
        write_prop('PRODID', '-//Edgewall Software//NONSGML Trac %s//Itteco Plugin %s//EN'
                   % (trac.__version__,itteco.__version__))
        write_prop('METHOD', 'PUBLISH')
        write_prop('X-WR-CALNAME', '%s - Calendar' % user_name )

        host = req.base_url[req.base_url.find('://') + 3:]

        for e in events:
            uid = '<%s/calendar/%s/%s@%s>' % (req.base_path, e.calendar, e.id,host)
            write_prop('BEGIN', 'VEVENT')
            write_prop('UID', uid)
            write_utctime('DTSTAMP', e.dtstart)
            write_utctime('DTSTART', e.dtstart)
            write_utctime('DTEND', e.dtend)
            write_prop('SUMMARY', "%s" % (e.title))
            write_prop('URL', req.base_url + '/calendar/web')
            if e.description:
                write_prop('DESCRIPTION', e.description)
            write_prop('END', 'VEVENT')
            
        write_prop('END', 'VCALENDAR')
Example #6
0
    def _process_ical_request(self, req):
        req.send_response(200)
        req.send_header('Content-Type', 'text/calendar;charset=utf-8')
        req.end_headers()

        def escape_value(text):
            s = ''.join(map(lambda c: (c in ';,\\') and '\\' + c or c, text))
            return '\\n'.join(re.split(r'[\r\n]+', s))

        def write_prop(name, value, params={}):
            text = ';'.join([name] + [k + '=' + v for k, v in params.items()]) \
                 + ':' + escape_value(value)
            firstline = 1
            while text:
                if not firstline: text = ' ' + text
                else: firstline = 0
                req.write(text[:75] + CRLF)
                text = text[75:]

        def write_date(name, value, params={}):
            params['VALUE'] = 'DATE'
            write_prop(name, format_date(value, '%Y%m%d', req.tz), params)

        def write_utctime(name, value, params={}):
            write_prop(name, format_datetime(value, '%Y%m%dT%H%M%SZ', utc),
                       params)

        cal_guid = req.args.get('cal_guid')
        events = []
        user_name = req.authname
        if (cal_guid):
            db = self.env.get_db_cnx()
            cursor = db.cursor()
            cursor.execute(
                """
                SELECT sid
                  FROM session_attribute
                 WHERE name='cal_alias' AND value=%s""", (cal_guid, ))
            row = cursor.fetchone()
            if row:
                user_name, = row
        events = Event.select(self.env, user_name)

        write_prop('BEGIN', 'VCALENDAR')
        write_prop('VERSION', '2.0')
        write_prop(
            'PRODID',
            '-//Edgewall Software//NONSGML Trac %s//Itteco Plugin %s//EN' %
            (trac.__version__, itteco.__version__))
        write_prop('METHOD', 'PUBLISH')
        write_prop('X-WR-CALNAME', '%s - Calendar' % user_name)

        host = req.base_url[req.base_url.find('://') + 3:]

        for e in events:
            uid = '<%s/calendar/%s/%s@%s>' % (req.base_path, e.calendar, e.id,
                                              host)
            write_prop('BEGIN', 'VEVENT')
            write_prop('UID', uid)
            write_utctime('DTSTAMP', e.dtstart)
            write_utctime('DTSTART', e.dtstart)
            write_utctime('DTEND', e.dtend)
            write_prop('SUMMARY', "%s" % (e.title))
            write_prop('URL', req.base_url + '/calendar/web')
            if e.description:
                write_prop('DESCRIPTION', e.description)
            write_prop('END', 'VEVENT')

        write_prop('END', 'VCALENDAR')