def update(self): """Read and validate form data, and update model if necessary. Also choose the correct template to render. """ self.field_errors = [] self.template = self.select_template if 'CANCEL' in self.request: self.request.response.redirect( absoluteURL(self.context, self.request)) return if 'date' in self.request: try: self.date = parse_date(self.request['date']) except ValueError: self.error = _("Invalid date. Please use YYYY-MM-DD format.") else: self.term = getTermForDate(self.date) if self.term is None: self.error = _("The date does not belong to any term.") self.date = None if self.date: self.template = self.form_template if self.date and 'SUBMIT' in self.request: replacements = self.extractMeetings() if self.field_errors: self.error = self.field_error_message else: self.updateExceptions(replacements) self.request.response.redirect( absoluteURL(self.context, self.request))
def setHolidays(self, term): term.addWeekdays(0, 1, 2, 3, 4, 5, 6) holidays = self.request.form.get('holiday', []) if not isinstance(holidays, list): holidays = [holidays] for holiday in holidays: try: term.remove(parse_date(holiday)) except ValueError: pass # ignore ill-formed or out-of-range dates toggle = [n for n in range(7) if ('TOGGLE_%d' % n) in self.request] if toggle: term.toggleWeekdays(*toggle)
def date(self): event_date = self.request.get('date', None) if event_date is None: return None return parse_date(event_date)
def dateTitle(self): return parse_date(self.request['date'])
def getDate(self): if 'date' in self.request: return parse_date(self.request['date']) else: return datetime.date.today()
def update(self): self.template = self.date_template if 'CANCEL' in self.request: self.request.response.redirect( absoluteURL(self.context, self.request)) return if 'date' in self.request: try: self.date = parse_date(self.request['date']) except ValueError: self.error = _("The date you entered is invalid." " Please use the YYYY-MM-DD format.") return if not self.date in self.context: self.error = _("The date you entered does not belong to" " this term.") return if not self.context.isSchoolday(self.date): self.error = _("The date you entered is not a schoolday.") return self.template = self.replacement_template if 'replacement' in self.request: try: self.replacement = parse_date(self.request['replacement']) except ValueError: self.error = _("The replacement date you entered is invalid.") self.template = self.replacement_template return if self.date and self.replacement: if self.context.last < self.replacement: # XXX: I wonder if all places that are dependent on # term start/end dates are updated properly self.context.last = self.replacement # XXX: assert?! assert not self.context.isSchoolday(self.replacement) assert self.context.isSchoolday(self.date) self.context.add(self.replacement) notify(EmergencyDayEvent(self.date, self.replacement)) # XXX: Following code should be move to the event subscriber, but! # It wants to store translated messages, and in current default # case the event description will be stored in the language # from somebodys browser settings. Now that's naughty! # If only we had 'apllication language' separate form 'user # presentation language' this problem would go away. # # Post calendar events to schoolwide calendar calendar = ISchoolToolCalendar(ISchoolToolApplication(None)) dtstart = datetime.datetime.combine(self.date, datetime.time()) msg = _('School cancelled due to emergency.' ' Replacement day $replacement.', mapping={'replacement': str(self.replacement)}) msg = translate(msg, context=self.request) calendar.addEvent( CalendarEvent(dtstart, datetime.timedelta(), msg, allday=True)) dtstart = datetime.datetime.combine(self.replacement, datetime.time()) msg = _('Replacement day for emergency day $emergency.', mapping={'emergency': str(self.date)}) msg = translate(msg, context=self.request) calendar.addEvent( CalendarEvent(dtstart, datetime.timedelta(), msg, allday=True)) self.request.response.redirect( absoluteURL(self.context, self.request))