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
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
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
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
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')
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')