Enable creating and editing of events, and QR codes
This commit is contained in:
parent
9d08c27135
commit
dfd0c33be7
5 changed files with 41 additions and 1 deletions
|
@ -5,6 +5,7 @@ from flask_login import LoginManager
|
||||||
from flask_assets import Bundle, Environment
|
from flask_assets import Bundle, Environment
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
from flask_mail import Mail, email_dispatched
|
from flask_mail import Mail, email_dispatched
|
||||||
|
from flask_qrcode import QRcode
|
||||||
|
|
||||||
|
|
||||||
db = SQLAlchemy()
|
db = SQLAlchemy()
|
||||||
|
@ -13,6 +14,7 @@ login = LoginManager()
|
||||||
environment = Environment()
|
environment = Environment()
|
||||||
cors = CORS()
|
cors = CORS()
|
||||||
mail = Mail()
|
mail = Mail()
|
||||||
|
qrcode = QRcode()
|
||||||
|
|
||||||
def create_app():
|
def create_app():
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
@ -25,6 +27,7 @@ def create_app():
|
||||||
environment.init_app(app)
|
environment.init_app(app)
|
||||||
cors.init_app(app)
|
cors.init_app(app)
|
||||||
mail.init_app(app)
|
mail.init_app(app)
|
||||||
|
qrcode.init_app(app)
|
||||||
|
|
||||||
scss = Bundle('css/style.scss', filters='scss',
|
scss = Bundle('css/style.scss', filters='scss',
|
||||||
output='css/style.css')
|
output='css/style.css')
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
from flask import render_template, redirect, request, url_for, flash
|
import flask
|
||||||
|
from flask import Response, render_template, redirect, request, url_for, flash
|
||||||
from flask_login import current_user, login_required
|
from flask_login import current_user, login_required
|
||||||
from goathacks.admin import bp, forms
|
from goathacks.admin import bp, forms
|
||||||
from goathacks import db
|
from goathacks import db
|
||||||
from goathacks.models import Event
|
from goathacks.models import Event
|
||||||
|
|
||||||
|
import io, qrcode
|
||||||
|
import qrcode.image.pure
|
||||||
|
|
||||||
@bp.route("/events")
|
@bp.route("/events")
|
||||||
@login_required
|
@login_required
|
||||||
def list_events():
|
def list_events():
|
||||||
|
@ -14,6 +18,14 @@ def list_events():
|
||||||
|
|
||||||
return render_template("events/list.html", events=events)
|
return render_template("events/list.html", events=events)
|
||||||
|
|
||||||
|
@bp.route("/events/events.json")
|
||||||
|
@login_required
|
||||||
|
def events_json():
|
||||||
|
if not current_user.is_admin:
|
||||||
|
return redirect(url_for("dashboard.home"))
|
||||||
|
events = Event.query.all()
|
||||||
|
return Event.create_json_output(events)
|
||||||
|
|
||||||
@bp.route("/events/new", methods=["GET", "POST"])
|
@bp.route("/events/new", methods=["GET", "POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def new_event():
|
def new_event():
|
||||||
|
@ -67,3 +79,16 @@ def edit_event(id):
|
||||||
form = forms.EventForm(obj=event)
|
form = forms.EventForm(obj=event)
|
||||||
|
|
||||||
return render_template("events/new_event.html", form=form)
|
return render_template("events/new_event.html", form=form)
|
||||||
|
|
||||||
|
@bp.route("/events/qrcode/<int:id>")
|
||||||
|
@login_required
|
||||||
|
def qrcode_event(id):
|
||||||
|
if not current_user.is_admin:
|
||||||
|
return redirect(url_for("dashboard.home"))
|
||||||
|
|
||||||
|
event = Event.query.filter_by(id=id).first()
|
||||||
|
if event is None:
|
||||||
|
flash("Event does not exist")
|
||||||
|
return redirect(url_for("admin.list_events"))
|
||||||
|
|
||||||
|
return render_template("events/qrcode.html", event=event)
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
<div style="height: 100%; color: white;">
|
<div style="height: 100%; color: white;">
|
||||||
<h2>Events</h2>
|
<h2>Events</h2>
|
||||||
|
Get a JSON readout of events <a href="{{ url_for('admin.events_json')
|
||||||
|
}}">here</a>
|
||||||
<table class="table table-striped table-hover table-condensed" style="color:
|
<table class="table table-striped table-hover table-condensed" style="color:
|
||||||
white;">
|
white;">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -15,6 +17,7 @@
|
||||||
<th>End</th>
|
<th>End</th>
|
||||||
<th>Category</th>
|
<th>Category</th>
|
||||||
<th>Checked in</th>
|
<th>Checked in</th>
|
||||||
|
<th>QR Code</th>
|
||||||
<th><a href="{{url_for('admin.new_event')}}">New</a></th>
|
<th><a href="{{url_for('admin.new_event')}}">New</a></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -28,6 +31,8 @@
|
||||||
<td>{{ event.end_time }}</td>
|
<td>{{ event.end_time }}</td>
|
||||||
<td>{{ event.category }}</td>
|
<td>{{ event.category }}</td>
|
||||||
<td>{{ event.get_checkins()|length }}</td>
|
<td>{{ event.get_checkins()|length }}</td>
|
||||||
|
<td><a href='{{ url_for("admin.qrcode_event", id=event.id)
|
||||||
|
}}'>QR Code</a></td>
|
||||||
<td><a href="{{url_for('admin.edit_event', id=event.id)}}">Edit</a></td>
|
<td><a href="{{url_for('admin.edit_event', id=event.id)}}">Edit</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
6
goathacks/templates/events/qrcode.html
Normal file
6
goathacks/templates/events/qrcode.html
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<head>
|
||||||
|
<title>QR Code for {{ event.name }}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<img src="{{ qrcode(url_for('events.workshop_checkin', id=event.id)) }}">
|
||||||
|
</body>
|
|
@ -1,6 +1,7 @@
|
||||||
alembic==1.8.1
|
alembic==1.8.1
|
||||||
click==8.1.3
|
click==8.1.3
|
||||||
Flask==2.2.2
|
Flask==2.2.2
|
||||||
|
Flask-QRCode
|
||||||
Flask-Assets
|
Flask-Assets
|
||||||
Flask-CORS
|
Flask-CORS
|
||||||
Flask-Mail
|
Flask-Mail
|
||||||
|
|
Loading…
Add table
Reference in a new issue