Photo Upload

This commit is contained in:
Daniel Grams 2020-06-23 21:17:22 +02:00
parent 7dc40147aa
commit 37859688cc
6 changed files with 36 additions and 13 deletions

29
app.py
View File

@ -48,6 +48,11 @@ security = Security(app, user_datastore)
def get_locale():
return request.accept_languages.best_match(app.config['LANGUAGES'])
def get_event_category_name(category):
return lazy_gettext('Event_' + category.name)
app.jinja_env.filters['event_category_name'] = lambda u: get_event_category_name(u)
def print_dynamic_texts():
gettext('Event_Art')
gettext('Event_Book')
@ -165,12 +170,12 @@ def add_role_to_org_member(org_member, role):
if OrgMemberRole.query.with_parent(org_member).filter_by(name = role.name).first() is None:
org_member.roles.append(role)
def upsert_image_with_data(image, data):
def upsert_image_with_data(image, data, encoding_format = "image/jpeg"):
if image is None:
image = Image()
image.data = b64decode(data)
image.encoding_format = "image/jpeg"
image.data = data
image.encoding_format = encoding_format
return image
@ -319,6 +324,8 @@ def upsert_event(event_name, host, location_name, start, description, link = Non
if category is not None:
result.category = upsert_event_category(category)
else:
result.category = upsert_event_category('Other')
return result
@ -969,22 +976,30 @@ def event_create():
if not can_create_event():
abort(401)
form = CreateEventForm()
form = CreateEventForm(category_id=upsert_event_category('Other').id)
form.host_id.choices = sorted([(ooa.id, ooa.organization.name if ooa.organization is not None else ooa.admin_unit.name) for ooa in get_event_hosts()], key=lambda ooa: ooa[1])
form.host_id.choices.insert(0, (0, ''))
form.place_id.choices = [(p.id, p.name) for p in Place.query.order_by('name')]
form.place_id.choices.insert(0, (0, ''))
form.category_id.choices = sorted([(c.id, get_event_category_name(c)) for c in EventCategory.query.all()], key=lambda ooa: ooa[1])
if form.validate_on_submit():
event = Event()
form.populate_obj(event)
event.admin_unit = get_admin_unit('Stadt Goslar')
eventDate = EventDate(event_id = event.id, start=form.start.data)
event.dates.append(eventDate)
if form.photo_file.data:
fs = form.photo_file.data
event.photo = upsert_image_with_data(event.photo, fs.read(), fs.content_type)
db.session.commit()
flash(gettext('Event successfully created'))
return redirect(url_for('events'))
flash(gettext('Event successfully created'), 'success')
return redirect(url_for('event', event_id=event.id))
return render_template('event/create.html', form=form)
@app.route("/eventsuggestions")
@ -1015,7 +1030,7 @@ def event_suggestion_create():
eventDate = EventSuggestionDate(event_suggestion_id = event.id, start=form.start.data)
event.dates.append(eventDate)
db.session.commit()
flash(gettext('Event suggestion successfully created'))
flash(gettext('Event suggestion successfully created'), 'success')
return redirect(url_for('home'))
return render_template('event_suggestion/create.html', form=form)

View File

@ -1,5 +1,6 @@
from flask_babelex import lazy_gettext
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed
from wtforms import StringField, SubmitField, TextAreaField, SelectField
from wtforms.fields.html5 import DateTimeLocalField
from wtforms.validators import DataRequired, Optional
@ -14,3 +15,6 @@ class CreateEventForm(FlaskForm):
place_id = SelectField(lazy_gettext('Place'), validators=[DataRequired()], coerce=int)
host_id = SelectField(lazy_gettext('Host'), validators=[DataRequired()], coerce=int)
category_id = SelectField(lazy_gettext('Category'), validators=[DataRequired()], coerce=int)
photo_file = FileField(lazy_gettext('Photo'), validators=[FileAllowed(['jpg', 'jpeg', 'png'], lazy_gettext('Images only!'))])

View File

@ -241,7 +241,7 @@ class Event(db.Model, TrackableMixin):
verified = Column(Boolean())
photo_id = db.Column(db.Integer, db.ForeignKey('image.id'))
photo = db.relationship('Image', uselist=False)
category_id = db.Column(db.Integer, db.ForeignKey('eventcategory.id'))
category_id = db.Column(db.Integer, db.ForeignKey('eventcategory.id'), nullable=False)
category = relationship('EventCategory', uselist=False)
dates = relationship('EventDate', backref=backref('event', lazy=False), cascade="all, delete-orphan")

View File

@ -1,9 +1,11 @@
{%- with messages = get_flashed_messages(with_categories=true) -%}
<!-- Categories: success (green), info (blue), warning (yellow), danger (red) -->
{% if messages %}
<ul class="flashes">
{% for category, message in messages %}
<li class="{{ category }}">{{ message }}</li>
<div class="alert alert-{{ category }} alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<!-- <strong>Title</strong> --> {{ message }}
</div>
{% endfor %}
</ul>
{% endif %}
{%- endwith %}

View File

@ -35,7 +35,7 @@
{% if event.category_id %}
<div class="my-4">
<div><i class="fa fa-fw fa-archive" data-toggle="tooltip" title="{{ _('Category') }}"></i> {{ _('Event_' + event.category.name) }}</div>
<div><i class="fa fa-fw fa-archive" data-toggle="tooltip" title="{{ _('Category') }}"></i> {{ event.category | event_category_name }}</div>
</div>
{% endif %}

View File

@ -4,7 +4,7 @@
{% block content %}
<h1>{{ _('Create event') }}</h1>
<form action="{{ url_for('event_create') }}" method="POST">
<form action="{{ url_for('event_create') }}" method="POST" enctype="multipart/form-data">
{{ form.hidden_tag() }}
<div class="card mb-4">
@ -41,6 +41,8 @@
{{ _('Additional information') }}
</div>
<div class="card-body">
{{ render_field_with_errors(form.photo_file) }}
{{ render_field_with_errors(form.category_id, class="autocomplete w-100") }}
{{ render_field_with_errors(form.external_link) }}
{{ render_field_with_errors(form.ticket_link) }}
</div>