diff --git a/app.py b/app.py index 5779824..bed9d94 100644 --- a/app.py +++ b/app.py @@ -662,6 +662,9 @@ def can_create_event(): def can_update_event(event): return can_create_event() +def can_delete_event(event): + return can_update_event(event) + def can_create_place(): return can_create_event() @@ -1288,7 +1291,7 @@ def api_events(): result['event'] = structured_events return jsonify(result) -from forms.event import CreateEventForm, UpdateEventForm +from forms.event import CreateEventForm, UpdateEventForm, DeleteEventForm from forms.event_suggestion import CreateEventSuggestionForm from forms.place import CreatePlaceForm, UpdatePlaceForm from forms.organization import CreateOrganizationForm, UpdateOrganizationForm @@ -1364,6 +1367,33 @@ def event_update(event_id): form=form, event=event) +@app.route('/event//delete', methods=('GET', 'POST')) +def event_delete(event_id): + event = Event.query.get_or_404(event_id) + + if not can_delete_event(event): + abort(401) + + form = DeleteEventForm() + + if form.validate_on_submit(): + if form.name.data != event.name: + flash(gettext('Entered name does not match event name'), 'danger') + else: + try: + db.session.delete(event) + db.session.commit() + flash(gettext('Event successfully deleted'), 'success') + return redirect(url_for('events')) + except SQLAlchemyError as e: + flash(handleSqlError(e), 'danger') + else: + flash_errors(form) + + return render_template('event/delete.html', + form=form, + event=event) + @app.route("/events/rrule", methods=['POST']) def event_rrule(): year = request.json['year'] diff --git a/forms/event.py b/forms/event.py index b52213e..21a4bcf 100644 --- a/forms/event.py +++ b/forms/event.py @@ -99,4 +99,8 @@ class CreateEventForm(FlaskForm): return True class UpdateEventForm(CreateEventForm): - submit = SubmitField(lazy_gettext("Update event")) \ No newline at end of file + submit = SubmitField(lazy_gettext("Update event")) + +class DeleteEventForm(FlaskForm): + submit = SubmitField(lazy_gettext("Delete event")) + name = StringField(lazy_gettext('Name'), validators=[DataRequired()]) \ No newline at end of file diff --git a/templates/event/delete.html b/templates/event/delete.html new file mode 100644 index 0000000..32bb67e --- /dev/null +++ b/templates/event/delete.html @@ -0,0 +1,24 @@ +{% extends "layout.html" %} +{% from "_macros.html" import render_datepicker_js, render_field_with_errors, render_field %} + +{% block content %} + +

{{ _('Delete event') }} "{{ event.name }}"

+ +
+ {{ form.hidden_tag() }} + +
+
+ {{ _('Event') }} +
+
+ {{ render_field_with_errors(form.name) }} +
+
+ + {{ render_field(form.submit) }} + +
+ +{% endblock %} diff --git a/templates/event/read.html b/templates/event/read.html index b82f96d..b45baba 100644 --- a/templates/event/read.html +++ b/templates/event/read.html @@ -29,6 +29,7 @@ {% if can_update_event %}
{{ _('Update event') }} + {{ _('Delete event') }}...
{% endif %}