added form to submit questions via mail
This commit is contained in:
parent
cf59ff986f
commit
c19ded10b1
10
config.ini
10
config.ini
|
@ -3,7 +3,11 @@ port = 5000
|
||||||
bind = 0.0.0.0
|
bind = 0.0.0.0
|
||||||
base_url = https://ab.21x9.org
|
base_url = https://ab.21x9.org
|
||||||
timezone = Europe/Berlin
|
timezone = Europe/Berlin
|
||||||
mail = abgame@21x9.org
|
mailform = false
|
||||||
|
mailserver = localhost:25
|
||||||
|
mailto = abgame@21x9.org
|
||||||
|
mailfrom = abgame@21x9.org
|
||||||
|
mailsubject = A/B Game Questions
|
||||||
separator_char = ;
|
separator_char = ;
|
||||||
theme = dark
|
theme = dark
|
||||||
animations = 1
|
animations = 1
|
||||||
|
@ -20,3 +24,7 @@ questions_prefix = Es gibt derzeit
|
||||||
questions_suffix = Fragen.
|
questions_suffix = Fragen.
|
||||||
send_questions = Einreichen!
|
send_questions = Einreichen!
|
||||||
desc = Ein simples Entweder/Oder-Entscheidungsspiel
|
desc = Ein simples Entweder/Oder-Entscheidungsspiel
|
||||||
|
submit = Absenden
|
||||||
|
submit_questions = <p>Bitte gib deine Fragenvorschläge in das untenstehende Feld ein.</p><p>Wenn du mir einen Gefallen tun möchtest, gib die Vorschläge im Format "A;B" an und schreibe immer nur ein Fragenpaar in eine Zeile.</p><p>Danke!</p>
|
||||||
|
submit_thanks_title = Danke!
|
||||||
|
submit_thanks = <p>Vielen Dank für die Einsendung.</p>
|
||||||
|
|
49
game.py
49
game.py
|
@ -1,8 +1,10 @@
|
||||||
#! /bin/python3
|
#! /bin/python3
|
||||||
|
|
||||||
from flask import Flask, render_template
|
from flask import Flask, render_template, request
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from email.message import EmailMessage
|
||||||
|
import smtplib
|
||||||
import random
|
import random
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
|
@ -25,16 +27,27 @@ i18n = {
|
||||||
'separator': config.get('i18n', 'separator'),
|
'separator': config.get('i18n', 'separator'),
|
||||||
'mailtext': config.get('i18n', 'mail_link'),
|
'mailtext': config.get('i18n', 'mail_link'),
|
||||||
'helptext': config.get('i18n', 'help_link'),
|
'helptext': config.get('i18n', 'help_link'),
|
||||||
'help': config.get('i18n', 'help')
|
'help': config.get('i18n', 'help'),
|
||||||
|
'submit': config.get('i18n', 'submit'),
|
||||||
|
'submit_questions': config.get('i18n', 'submit_questions'),
|
||||||
|
'submit_thanks_title': config.get('i18n', 'submit_thanks_title'),
|
||||||
|
'submit_thanks': config.get('i18n', 'submit_thanks')
|
||||||
}
|
}
|
||||||
conf = {
|
conf = {
|
||||||
'separator_char': config.get('main', 'separator_char'),
|
'separator_char': config.get('main', 'separator_char'),
|
||||||
'mailto': config.get('main', 'mail'),
|
'mailform': config.get('main', 'mailform').lower(),
|
||||||
|
'mailserver': config.get('main', 'mailserver'),
|
||||||
|
'mailto': config.get('main', 'mailto'),
|
||||||
|
'mailfrom': config.get('main', 'mailfrom'),
|
||||||
|
'mailsubject': config.get('main', 'mailsubject'),
|
||||||
'url': config.get('main', 'base_url'),
|
'url': config.get('main', 'base_url'),
|
||||||
'theme': config.get('main', 'theme'),
|
'theme': config.get('main', 'theme'),
|
||||||
'animations': config.get('main', 'animations')
|
'animations': config.get('main', 'animations')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
with open("ab.txt", "r") as f:
|
||||||
|
num_lines = sum(1 for _ in f)
|
||||||
|
|
||||||
def getEpoch():
|
def getEpoch():
|
||||||
now = datetime.now(tz=tz)
|
now = datetime.now(tz=tz)
|
||||||
epoch = now.timestamp()
|
epoch = now.timestamp()
|
||||||
|
@ -52,6 +65,33 @@ def internal_server_error(e):
|
||||||
epoch = getEpoch()
|
epoch = getEpoch()
|
||||||
return render_template('500.html', config=conf, i18n=i18n, epoch=epoch), 500
|
return render_template('500.html', config=conf, i18n=i18n, epoch=epoch), 500
|
||||||
|
|
||||||
|
if conf['mailform'] == "true":
|
||||||
|
@app.route("/form")
|
||||||
|
def mailform():
|
||||||
|
epoch = getEpoch()
|
||||||
|
return render_template('mailform.html', config=conf, i18n=i18n, epoch=epoch, num_lines=num_lines)
|
||||||
|
|
||||||
|
@app.route("/send", methods=['POST', 'GET'])
|
||||||
|
def sendmail():
|
||||||
|
epoch = getEpoch()
|
||||||
|
|
||||||
|
if request.method == 'POST':
|
||||||
|
mailcontent = request.form['questions']
|
||||||
|
else:
|
||||||
|
mailcontent = request.args.get('questions')
|
||||||
|
|
||||||
|
message = EmailMessage()
|
||||||
|
message.set_content(mailcontent)
|
||||||
|
message['Subject'] = conf['mailsubject']
|
||||||
|
message['From'] = conf['mailfrom']
|
||||||
|
message['To'] = conf['mailto']
|
||||||
|
|
||||||
|
smtp_server = smtplib.SMTP(conf['mailserver'])
|
||||||
|
smtp_server.send_message(message)
|
||||||
|
smtp_server.quit()
|
||||||
|
|
||||||
|
return render_template('thanks.html', config=conf, i18n=i18n, epoch=epoch, questions=mailcontent)
|
||||||
|
|
||||||
@app.route("/")
|
@app.route("/")
|
||||||
def hello():
|
def hello():
|
||||||
ablines = []
|
ablines = []
|
||||||
|
@ -69,9 +109,6 @@ def hello():
|
||||||
{'A': str(ab[0]), 'B': str(ab[1])}
|
{'A': str(ab[0]), 'B': str(ab[1])}
|
||||||
)
|
)
|
||||||
|
|
||||||
with open("ab.txt", "r") as f:
|
|
||||||
num_lines = sum(1 for _ in f)
|
|
||||||
|
|
||||||
return render_template('index.html', content=ablines, config=conf, i18n=i18n, num_lines=num_lines, epoch=epoch)
|
return render_template('index.html', content=ablines, config=conf, i18n=i18n, num_lines=num_lines, epoch=epoch)
|
||||||
|
|
||||||
def getContent():
|
def getContent():
|
||||||
|
|
|
@ -48,6 +48,14 @@ a:hover #help {
|
||||||
transform: translate(-50%);
|
transform: translate(-50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
height: 250px;
|
||||||
|
width: 100%;
|
||||||
|
background-color: var(--bg-b);
|
||||||
|
color: var(--fg-b);
|
||||||
|
border: 1px solid var(--bg-a);
|
||||||
|
}
|
||||||
|
|
||||||
#background {
|
#background {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -98,6 +106,10 @@ a:hover #help {
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
.ab {
|
.ab {
|
||||||
float: none;
|
float: none;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
|
|
|
@ -7,9 +7,6 @@
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>{{ title }}</title>
|
<title>{{ title }}</title>
|
||||||
<script type="text/javascript" src="/js/toggle.js?t={{ epoch }}"></script>
|
|
||||||
<script type="text/javascript" src="/js/autoReload.js?t={{ epoch }}"></script>
|
|
||||||
<script type="text/javascript" src="/js/shortcut.js?t={{ epoch }}"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="/css/base.css?t={{ epoch }}">
|
<link rel="stylesheet" type="text/css" href="/css/base.css?t={{ epoch }}">
|
||||||
<link rel="stylesheet" type="text/css" href="/css/colors.css?t={{ epoch }}">
|
<link rel="stylesheet" type="text/css" href="/css/colors.css?t={{ epoch }}">
|
||||||
{%- if config.animations == "1" or config.animations == "true" %}
|
{%- if config.animations == "1" or config.animations == "true" %}
|
||||||
|
@ -41,11 +38,6 @@
|
||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
|
||||||
initToggle();
|
|
||||||
autoReload();
|
|
||||||
monitorRadio();
|
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
|
@ -1,6 +1,10 @@
|
||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
|
<script type="text/javascript" src="/js/toggle.js?t={{ epoch }}"></script>
|
||||||
|
<script type="text/javascript" src="/js/autoReload.js?t={{ epoch }}"></script>
|
||||||
|
<script type="text/javascript" src="/js/shortcut.js?t={{ epoch }}"></script>
|
||||||
|
|
||||||
{%- set id = namespace(value=0) %}
|
{%- set id = namespace(value=0) %}
|
||||||
{%- for question in content %}
|
{%- for question in content %}
|
||||||
{%- set id.value = id.value + 1 %}
|
{%- set id.value = id.value + 1 %}
|
||||||
|
@ -17,7 +21,9 @@
|
||||||
<div id="questions">
|
<div id="questions">
|
||||||
{{ i18n.questions_prefix }} {{ num_lines }} {{ i18n.questions_suffix }}
|
{{ i18n.questions_prefix }} {{ num_lines }} {{ i18n.questions_suffix }}
|
||||||
<br>
|
<br>
|
||||||
<a href="mailto:{{ config.mailto }}">{{ i18n.mailtext }}</a> -
|
{%- if config.mailform == "true" %}
|
||||||
|
<a href="/form">{{ i18n.mailtext }}</a> -
|
||||||
|
{%- endif %}
|
||||||
<a href="#">{{ i18n.helptext }}
|
<a href="#">{{ i18n.helptext }}
|
||||||
<div id="help">
|
<div id="help">
|
||||||
{{ i18n.help|safe }}
|
{{ i18n.help|safe }}
|
||||||
|
@ -30,4 +36,10 @@
|
||||||
<button id="next" type="submit">{{ i18n.more }}</button>
|
<button id="next" type="submit">{{ i18n.more }}</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
initToggle();
|
||||||
|
autoReload();
|
||||||
|
monitorRadio();
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
<form action="/send" method="post">
|
||||||
|
<input type="hidden" name="t" value="{{ epoch }}">
|
||||||
|
<div class="ab">
|
||||||
|
<div class="form">
|
||||||
|
<div><label for="questions">{{ i18n.submit_questions | safe }}</label></div>
|
||||||
|
<div><textarea name="questions" required></textarea></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="footer">
|
||||||
|
<div id="questions">
|
||||||
|
{{ i18n.questions_prefix }} {{ num_lines }} {{ i18n.questions_suffix }}
|
||||||
|
<br>
|
||||||
|
<a href="/">Home</a>
|
||||||
|
</div>
|
||||||
|
{% include 'toggle.html' %}
|
||||||
|
<button id="next" type="submit">{{ i18n.submit }}</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,16 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
<div class="ab">
|
||||||
|
<div class="a">
|
||||||
|
<h1>{{ i18n.submit_thanks_title }}</h1>
|
||||||
|
{{ i18n.submit_thanks | safe }}
|
||||||
|
<p>[<a href="/">Home</a>]</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="footer">
|
||||||
|
<div class="box"> </div>
|
||||||
|
{% include 'toggle.html' %}
|
||||||
|
<div class="box"> </div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue