def event_editor(id): event = Event.query.get_or_404(id) form = EventForm(obj=event) if request.method == 'POST': if current_user == event.user_id: form.populate_obj(event) db.session.add(event) db.session.commit() return redirect("/") return render_template('event_edit.html', event=event, form=form)
def post(self): form = EventForm(request.form) if not form.validate_on_submit(): save_form_to_session(request.form) return redirect(url_for("EventView:new")) event = Event() form.populate_obj(event) event.save() for day in event.days: day_plan = DailyPlan(date=day, event=event) day_plan.save() return redirect(url_for("EventView:show", id=event.id))
class EventView(HelperFlaskView): decorators = [login_required] @login_required def before_request(self, name, id=None): self.event = Event.load(id) def before_show(self, id): self.validate_show(self.event) def before_edit(self, id): self.validate_edit(self.event) def before_update(self, id): self.validate_edit(self.event) def before_delete(self, id): self.validate_delete(self.event) def index(self): return self.template() def show(self, id): return self.template() def new(self): self.form = EventForm() return self.template() def edit(self, id): self.form = EventForm(obj=self.event) return self.template() def post(self): form = EventForm(request.form) if not form.validate_on_submit(): save_form_to_session(request.form) return redirect(url_for("EventView:new")) event = Event() form.populate_obj(event) event.save() for day in event.days: day_plan = DailyPlan(date=day, event=event) day_plan.save() return redirect(url_for("EventView:show", id=event.id)) @route("update/<id>", methods=["POST"]) def update(self, id): self.form = EventForm(request.form) old_people_count = None new_people_count = None if self.event.people_count != self.form.people_count.data: old_people_count = self.event.people_count new_people_count = int(self.form.people_count.data) self.form.populate_obj(self.event) self.event.edit() if old_people_count and new_people_count: for daily_plan in self.event.daily_plans: for daily_recipe in daily_plan.daily_recipes: if daily_recipe.portion_count == old_people_count: daily_recipe.portion_count = new_people_count daily_recipe.edit() # TODO: do this only if date changed (70) # self.event.delete_old_daily_plans() self.event.add_new_daily_plans() if turbo.can_push(): try: turbo.push( turbo.update( self.template(template_name="_update_warning"), target=f"event-{id}-update-warning", ), to=self.event.other_user_ids, ) except Exception as e: from sentry_sdk import capture_exception capture_exception(e) return redirect(url_for("EventView:show", id=self.event.id)) @route("events/delete/<id>", methods=["POST"]) def delete(self, id): self.event.delete() return redirect(url_for("EventView:index")) @route("duplicate/<id>", methods=["POST"]) def duplicate(self, id): new_event = self.event.duplicate() return redirect(url_for("EventView:show", id=new_event.id)) @route("events/toggle_archived/<id>", methods=["POST"]) def toggle_archived(self, id): self.event.toggle_archived() return redirect(url_for("EventView:show", id=self.event.id)) @route("toggle_shared/<id>", methods=["POST"]) def toggle_shared(self, id): toggled = self.event.toggle_shared() if toggled is True: flash("akce byla zveřejněna.", "success") else: flash("akce byla skryta před veřejností.", "success") return redirect(url_for("EventView:show", id=self.event.id)) @route("share_all_used_recipes/<id>", methods=["POST"]) def share_all_used_recipes(self, id): self.event.share_all_used_recipes() flash("všechny recepty byly zveřejněny.", "success") return redirect(url_for("EventView:show", id=self.event.id)) def warnings(self, id): return self.template(template_name="_warnings")