Form zur Prüfung und Ablehnung trennen

This commit is contained in:
Daniel Grams 2020-11-04 09:15:08 +01:00
parent 86a93cb31a
commit 58344bc3be
21 changed files with 121 additions and 73 deletions

View File

@ -93,4 +93,8 @@ tr.table-line-through td {
.text-highlight {
color: #dc3545!important;
}
.w-normal {
max-width: 1024px;
}

View File

@ -866,7 +866,7 @@ if (URL) {
<div class="py-1">
<label class="btn btn-secondary mb-0" for="photo-image_file" title="{{ _('Choose image file') }}">
<input type="file" class="sr-only" id="photo-image_file" name="photo" accept="image/*" />
<span>{{ _('Choose image file') }}...</span>
<span>{{ _('Choose image file') }}&hellip;</span>
</label>
<button id="photo-edit-btn" class="btn btn-outline-secondary show-if-photo-exists"><i class="fa fa-edit"></i></button>
<button id="photo-delete-btn" class="btn btn-outline-secondary show-if-photo-exists"><i class="fa fa-trash"></i></button>
@ -919,7 +919,7 @@ if (URL) {
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
{% if user_rights['can_update_event'] %}
<a class="dropdown-item" href="{{ url_for('event_update', event_id=event.id) }}"><i class="fa fa-edit"></i> {{ _('Edit event') }}</a>
<a class="dropdown-item" href="{{ url_for('event_delete', event_id=event.id) }}"><i class="fa fa-trash"></i> {{ _('Delete event') }}...</a>
<a class="dropdown-item" href="{{ url_for('event_delete', event_id=event.id) }}"><i class="fa fa-trash"></i> {{ _('Delete event') }}&hellip;</a>
{% endif %}
{% if user_rights['can_reference_event'] %}
<a class="dropdown-item" href="{{ url_for('event_reference', event_id=event.id) }}"><i class="fa fa-link"></i> {{ _('Reference event') }}</a>
@ -944,3 +944,48 @@ if (URL) {
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.9/cropper.css" integrity="sha512-949FvIQOibfhLTgmNws4F3DVlYz3FmCRRhJznR22hx76SKkcpZiVV5Kwo0iwK9L6BFuY+6mpdqB2+vDIGVuyHg==" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cropper/1.0.1/jquery-cropper.js" integrity="sha512-7H4tikIFoyAdYD31w/uNYvvAUL6gyunWXLwTQ7ZXkyjD+brw+PfJpLxFkANnbkKnSJzU89YpnF3fJKbpvV+QYg==" crossorigin="anonymous"></script>
{% endmacro %}
{% macro render_event_suggestion(event_suggestion) %}
<div class="card mb-3">
<div class="card-header">
{{ _('Event suggestion') }}
</div>
<div class="card-body">
{% if event_suggestion.photo_id %}
<div class="">
{{ render_image(event_suggestion.photo, class='rounded', style='object-fit: cover; height: 20vh;') }}
</div>
{% endif %}
<div class="text-highlight text-uppercase font-weight-bold">{{ event_suggestion.start | dateformat('full') }} um {{ event_suggestion.start | timeformat('short') }}</div>
<div class="font-weight-bold" style="font-size: 1.8rem;">{{ event_suggestion.name }}</div>
<div class="text-muted">{{ event_suggestion.event_place.name or event_suggestion.event_place_text }}</div>
<div class="mt-3"><i class="fa fa-fw fa-sitemap"></i> {{ event_suggestion.organizer.name or event_suggestion.organizer_text }}</div>
{{ render_link_prop(event_suggestion.external_link) }}
<div class="my-2">{{ event_suggestion.description }}</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
{{ _('Contact') }}
</div>
<div class="card-body">
{{ render_string_prop(event_suggestion.contact_name, 'fa-user') }}
{{ render_email_prop(event_suggestion.contact_email) }}
{{ render_phone_prop(event_suggestion.contact_phone) }}
</div>
</div>
<div class="card mb-3">
<div class="card-header">
{{ _('Review status') }}
</div>
<div class="card-body">
{{ render_event_review_status(event_suggestion) }}
</div>
</div>
{% endmacro %}

View File

@ -7,7 +7,7 @@
{{ render_event_menu(user_rights, event) }}
<div style="max-width: 1024px;">
<div class="w-normal">
{{ render_event_props(event, event.start, event.end, dates, user_can_verify_event) }}

View File

@ -273,7 +273,7 @@
</nav>
</div>
<div class="spinner-border m-3" role="status" id="spinner" style="display: none;">
<span class="sr-only">Loading...</span>
<span class="sr-only">Loading&hellip;</span>
</div>
<div class="alert alert-danger m-3" role="alert" id="error_alert" style="display: none;"></div>
</div>

View File

@ -20,7 +20,7 @@
{{ render_event_menu(user_rights, event_date.event) }}
<div style="max-width: 1024px;">
<div class="w-normal">
{{ render_event_props(event, event_date.start, event_date.end) }}
</div>

View File

@ -118,7 +118,7 @@
</script>
{% endblock %}
{% block content %}
<div style="max-width: 1024px;">
<div class="w-normal">
<h1>{{ _('Create event suggestion') }}</h1>

View File

@ -0,0 +1,24 @@
{% extends "layout_manage.html" %}
{% set active_id = "reviews" %}
{% from "_macros.html" import render_event_suggestion, render_image, render_radio_buttons, render_phone_prop, render_email_prop, render_string_prop, render_field_with_errors, render_field, render_event_props, render_image_with_link, render_place, render_link_prop %}
{% block title %}
{{ event_suggestion.name }}
{% endblock %}
{% block content %}
<h1>{{ _('Reject event suggestion') }}</h1>
<div class="w-normal">
{{ render_event_suggestion(event_suggestion) }}
<div class="my-4">
<form action="" method="POST">
{{ form.hidden_tag() }}
{{ render_field_with_errors(form.rejection_resaon) }}
<p>{{ form.submit(class="btn btn-danger")|safe }}</p>
</form>
</div>
</div>
{% endblock %}

View File

@ -1,5 +1,6 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_image, render_radio_buttons, render_phone_prop, render_email_prop, render_string_prop, render_field_with_errors, render_field, render_event_props, render_image_with_link, render_place, render_link_prop %}
{% extends "layout_manage.html" %}
{% set active_id = "reviews" %}
{% from "_macros.html" import render_event_suggestion, render_image, render_radio_buttons, render_phone_prop, render_email_prop, render_string_prop, render_field_with_errors, render_field, render_event_props, render_image_with_link, render_place, render_link_prop %}
{% block title %}
{{ event_suggestion.name }}
{% endblock %}
@ -7,59 +8,20 @@
<h1>{{ _('Review event suggestion') }}</h1>
<div class="card mb-3">
<div class="card-header">
{{ _('Event suggestion') }}
</div>
<div class="card-body">
<div class="w-normal">
{% if event_suggestion.photo_id %}
<div class="">
{{ render_image(event_suggestion.photo, class='rounded', style='object-fit: cover; height: 20vh;') }}
</div>
{% endif %}
{{ render_event_suggestion(event_suggestion) }}
<div class="text-highlight text-uppercase font-weight-bold">{{ event_suggestion.start | dateformat('full') }} um {{ event_suggestion.start | timeformat('short') }}</div>
<div class="font-weight-bold" style="font-size: 1.8rem;">{{ event_suggestion.name }}</div>
<div class="text-muted">{{ event_suggestion.event_place.name or event_suggestion.event_place_text }}</div>
<div class="mt-3"><i class="fa fa-fw fa-sitemap"></i> {{ event_suggestion.organizer.name or event_suggestion.organizer_text }}</div>
{{ render_link_prop(event_suggestion.external_link) }}
<div class="my-2">{{ event_suggestion.description }}</div>
</div>
{% if event_suggestion.verified and event_suggestion.event_id %}
<div class="my-4">
<a class="btn btn-success" href="{{ url_for('event', event_id=event_suggestion.event_id) }}" role="button"><i class="fa fa-arrow-right"></i> {{ _('View event') }}</a>
</div>
{% else %}
<div class="d-flex justify-content-between my-4">
<a class="btn btn-success m-1" href="{{ url_for('event_create_for_admin_unit_id', id=event_suggestion.admin_unit_id, event_suggestion_id=event_suggestion.id) }}" role="button"><i class="fa fa-arrow-right"></i> {{ _('Create event from suggestion') }}&hellip;</a>
<a class="btn btn-danger m-1" href="{{ url_for('event_suggestion_reject', event_suggestion_id=event_suggestion.id) }}" role="button"><i class="fa fa-ban"></i> {{ _('Reject event suggestion') }}&hellip;</a>
</div>
{% endif %}
</div>
<div class="card mb-3">
<div class="card-header">
{{ _('Contact') }}
</div>
<div class="card-body">
{{ render_string_prop(event_suggestion.contact_name, 'fa-user') }}
{{ render_email_prop(event_suggestion.contact_email) }}
{{ render_phone_prop(event_suggestion.contact_phone) }}
</div>
</div>
{% if event_suggestion.verified and event_suggestion.event_id %}
<div class="my-4">
<a class="btn btn-success" href="{{ url_for('event', event_id=event_suggestion.event_id) }}" role="button"><i class="fa fa-arrow-right"></i> {{ _('View event') }}</a>
</div>
{% else %}
<div class="my-4">
<a class="btn btn-success" href="{{ url_for('event_create_for_admin_unit_id', id=event_suggestion.admin_unit_id, event_suggestion_id=event_suggestion.id) }}" role="button"><i class="fa fa-arrow-right"></i> {{ _('Create event from suggestion') }}</a>
</div>
<div class="font-italic font-weight-bold my-4 text-uppercase">
oder
</div>
<div class="my-4">
<form action="" method="POST">
{{ form.hidden_tag() }}
{{ render_field_with_errors(form.rejection_resaon) }}
<p>{{ form.submit(class="btn btn-danger")|safe }}</p>
</form>
</div>
{% endif %}
{% endblock %}

View File

@ -25,7 +25,7 @@
<div class="dropdown-menu">
<a class="dropdown-item" href="{{ url_for('event', event_id=event.id) }}">{{ _('View') }}</a>
<a class="dropdown-item" href="{{ url_for('event_update', event_id=event.id) }}">{{ _('Edit') }}</a>
<a class="dropdown-item" href="{{ url_for('event_delete', event_id=event.id) }}">{{ _('Delete') }}...</a>
<a class="dropdown-item" href="{{ url_for('event_delete', event_id=event.id) }}">{{ _('Delete') }}&hellip;</a>
</div>
</div>
{{ render_event_status_pill(event) }}

View File

@ -18,7 +18,7 @@
<div class="dropdown d-inline-block">
<button class="btn btn-link dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{ invitation.email }}</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="{{ url_for('manage_admin_unit_invitation_delete', id=invitation.id) }}">{{ _('Delete') }}...</a>
<a class="dropdown-item" href="{{ url_for('manage_admin_unit_invitation_delete', id=invitation.id) }}">{{ _('Delete') }}&hellip;</a>
</div>
</div>
</li>
@ -33,7 +33,7 @@
<button class="btn btn-link dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{ member.user.email }}</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="{{ url_for('manage_admin_unit_member_update', id=member.id) }}">{{ _('Edit') }}</a>
<a class="dropdown-item" href="{{ url_for('manage_admin_unit_member_delete', id=member.id) }}">{{ _('Delete') }}...</a>
<a class="dropdown-item" href="{{ url_for('manage_admin_unit_member_delete', id=member.id) }}">{{ _('Delete') }}&hellip;</a>
</div>
</div>
<small>{{ render_roles(member.roles)}}</small>

View File

@ -20,7 +20,7 @@
<div class="dropdown-menu">
<a class="dropdown-item" href="{{ url_for('event_create_for_admin_unit_id', id=admin_unit.id, organizer_id=organizer.id) }}">{{ _('Create event') }}</a>
<a class="dropdown-item" href="{{ url_for('organizer_update', id=organizer.id) }}">{{ _('Edit') }}</a>
<a class="dropdown-item" href="{{ url_for('organizer_delete', id=organizer.id) }}">{{ _('Delete') }}...</a>
<a class="dropdown-item" href="{{ url_for('organizer_delete', id=organizer.id) }}">{{ _('Delete') }}&hellip;</a>
<!--<a class="dropdown-item" href="#">{{ _('Assistents') }}</a>-->
</div>
</div>

View File

@ -25,7 +25,7 @@
<button class="btn btn-link dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{ place.name }}</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="{{ url_for('event_place_update', id=place.id) }}">{{ _('Edit') }}</a>
<a class="dropdown-item" href="{{ url_for('event_place_delete', id=place.id) }}">{{ _('Delete') }}...</a>
<a class="dropdown-item" href="{{ url_for('event_place_delete', id=place.id) }}">{{ _('Delete') }}&hellip;</a>
</div>
</div>
</li>

View File

@ -16,7 +16,7 @@
<div class="dropdown d-inline-block">
<button class="btn btn-link dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{ request.event.name }}</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="{{ url_for('event_reference_request_review', id=request.id) }}">{{ _('Review request') }}...</a>
<a class="dropdown-item" href="{{ url_for('event_reference_request_review', id=request.id) }}">{{ _('Review request') }}&hellip;</a>
</div>
</div>
{{ render_reference_request_review_status_pill(request) }}

View File

@ -18,7 +18,7 @@
<div class="dropdown-menu">
<a class="dropdown-item" href="{{ url_for('event', event_id=reference.event.id) }}">{{ _('View') }}</a>
<a class="dropdown-item" href="{{ url_for('event_reference_update', id=reference.id) }}">{{ _('Edit') }}</a>
<a class="dropdown-item" href="{{ url_for('reference_delete', id=reference.id) }}">{{ _('Delete') }}...</a>
<a class="dropdown-item" href="{{ url_for('reference_delete', id=reference.id) }}">{{ _('Delete') }}&hellip;</a>
</div>
</div>
{{ render_event_status_pill(reference.event) }}

View File

@ -16,7 +16,7 @@
<div class="dropdown d-inline-block">
<button class="btn btn-link dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{ event_suggestion.name }}</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="{{ url_for('event_suggestion_review', event_suggestion_id=event_suggestion.id) }}">{{ _('Review event suggestion') }}...</a>
<a class="dropdown-item" href="{{ url_for('event_suggestion_review', event_suggestion_id=event_suggestion.id) }}">{{ _('Review event suggestion') }}&hellip;</a>
</div>
</div>
{{ render_event_review_status_pill(event_suggestion) }}

View File

@ -116,7 +116,7 @@ $( function() {
</div>
</div>
<div class="spinner-border m-3" role="status" id="spinner" style="display: none;">
<span class="sr-only">Loading...</span>
<span class="sr-only">Loading&hellip;</span>
</div>
<div class="alert alert-danger m-3" role="alert" id="error_alert" style="display: none;"></div>
</div>

View File

@ -20,7 +20,7 @@
{{ render_field(form.submit) }}
</form>
<div class="mt-3" style="max-width: 1024px;">
<div class="mt-3 w-normal">
{{ render_event_props(event, event.start, event.end, dates) }}

View File

@ -16,7 +16,7 @@
{% endblock %}
{% block content %}
<div style="max-width: 1024px;">
<div class="w-normal">
{{ render_event_props(event, event_date.start, event_date.end) }}
</div>

View File

@ -647,7 +647,7 @@ msgstr "Unzulässig"
#: forms/event_suggestion.py:52
msgid "Reject event suggestion"
msgstr "Vorgeschlagene Veranstaltung ablehen"
msgstr "Vorgeschlagene Veranstaltung ablehnen"
#: forms/organizer.py:37 templates/manage/organizers.html:12
#: templates/organizer/create.html:10

View File

@ -51,11 +51,23 @@ def event_suggestion_create_for_admin_unit(au_short_name):
flash_errors(form)
return render_template('event_suggestion/create.html', form=form, admin_unit=admin_unit)
@app.route('/event_suggestion/<int:event_suggestion_id>/review', methods=('GET', 'POST'))
@app.route('/event_suggestion/<int:event_suggestion_id>/review')
def event_suggestion_review(event_suggestion_id):
event_suggestion = EventSuggestion.query.get_or_404(event_suggestion_id)
access_or_401(event_suggestion.admin_unit, 'event:verify')
return render_template('event_suggestion/review.html',
admin_unit=event_suggestion.admin_unit,
event_suggestion=event_suggestion)
@app.route('/event_suggestion/<int:event_suggestion_id>/reject', methods=('GET', 'POST'))
def event_suggestion_reject(event_suggestion_id):
event_suggestion = EventSuggestion.query.get_or_404(event_suggestion_id)
access_or_401(event_suggestion.admin_unit, 'event:verify')
if event_suggestion.verified:
return redirect(url_for('event_suggestion_review', event_suggestion_id=event_suggestion.id))
form = RejectEventSuggestionForm(obj=event_suggestion)
if form.validate_on_submit():
@ -76,8 +88,9 @@ def event_suggestion_review(event_suggestion_id):
else:
flash_errors(form)
return render_template('event_suggestion/review.html',
return render_template('event_suggestion/reject.html',
form=form,
admin_unit=event_suggestion.admin_unit,
event_suggestion=event_suggestion)
@app.route('/event_suggestion/<int:event_suggestion_id>/review_status')