+ parsed_url = urlparse(self.path)
+ db = TodoDB(prefix=prefix)
+
+ if parsed_url.path == prefix + '/calendar':
+ start = postvars['start'][0] if len(postvars['start'][0]) > 0 else ''
+ end = postvars['end'][0] if len(postvars['end'][0]) > 0 else ''
+ homepage = f'{prefix}/calendar?t_and=calendar&start={start}&end={end}'
+
+ elif parsed_url.path == prefix + '/todo':
+ task_uuid = postvars['task_uuid'][0]
+ date = postvars['date'][0]
+ db.update_todo(task_uuid, date, postvars['day_weight'][0], 'done' in postvars.keys(), postvars['comment'][0])
+ homepage = f'{prefix}/todo?task={task_uuid}&date={date}'
+
+ elif parsed_url.path == prefix + '/task':
+ id_ = postvars['id'][0]
+ db.update_task(id_, postvars['title'][0], postvars['default_weight'][0], postvars['tags'][0])
+ homepage = f'{prefix}/task?id={id_}'
+
+ elif parsed_url.path in {prefix + '/tasks', prefix + '/day'}:
+ for target in postvars['t_and']:
+ if not target in db.t_filter_and:
+ db.t_filter_and += [target]
+ for target in postvars['t_not']:
+ if not target in db.t_filter_not:
+ db.t_filter_not += [target]
+ if 'hide_unchosen' in postvars.keys():
+ db.hide_unchosen = True
+ if 'hide_done' in postvars.keys():
+ db.hide_done = True
+ data = [('t_and', f) for f in db.t_filter_and] + [('t_not', f) for f in db.t_filter_not] + [('hide_unchosen', int(db.hide_unchosen))] + [('hide_done', int(db.hide_done))]
+
+ if parsed_url.path == prefix + '/tasks':
+ encoded_params = urlencode(data)
+ homepage = f'{prefix}/tasks?{encoded_params}'
+
+ elif parsed_url.path == prefix + '/day':
+ db.selected_date = postvars['original_selected_date'][0]
+ new_selected_date = postvars['new_selected_date'][0]
+ try:
+ datetime.strptime(new_selected_date, DATE_FORMAT)
+ except ValueError:
+ raise PlomException(f"{prefix} bad date string: {new_selected_date}")
+ if new_selected_date != db.selected_date:
+ db.change_selected_days_date(new_selected_date)
+ if 't_uuid' in postvars.keys():
+ for i, uuid in enumerate(postvars['t_uuid']):
+ t = db.tasks[uuid]
+ if uuid in db.selected_day.todos.keys() and ((not 'choose' in postvars) or uuid not in postvars['choose']):
+ del db.selected_day.todos[uuid]
+ if 'choose' in postvars.keys():
+ for i, uuid in enumerate(postvars['t_uuid']):
+ if uuid in postvars['choose']:
+ done = 'done' in postvars and uuid in postvars['done']
+ db.update_todo(uuid, db.selected_date, postvars['day_weight'][i], done, postvars['todo_comment'][i])
+ if 'day_comment' in postvars.keys():
+ db.selected_day.comment = postvars['day_comment'][0]
+ data += [('date', db.selected_date)]
+ encoded_params = urlencode(data)
+ homepage = f'{prefix}/day?{encoded_params}'