"Add/Edit/delete turn"
This commit is contained in:
parent
ecfc6232a8
commit
f1ec84ef16
235
participate.py
235
participate.py
|
@ -296,6 +296,32 @@ def save_turn(role_id, day, start, end):
|
|||
return False
|
||||
return True
|
||||
|
||||
def update_turn_by_id(turn_id, role_id, wday, start, end):
|
||||
""" Update turn with provided data """
|
||||
check_turn = Tetawebapp_turns.query.filter_by(id=turn_id).count()
|
||||
if check_turn == 0:
|
||||
# User does not exist
|
||||
print "[+] User does not exist"
|
||||
return False
|
||||
turn = Tetawebapp_turns.query.filter_by(id=turn_id).first()
|
||||
setattr(turn, 'role_id', role_id)
|
||||
setattr(turn, 'wday', wday)
|
||||
setattr(turn, 'start_time', start)
|
||||
setattr(turn, 'end_time', end)
|
||||
try:
|
||||
db.session.add(turn)
|
||||
commit = db.session.commit()
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
print "[+] Error at update_turn:"
|
||||
print "------------------------------"
|
||||
print "%s" % e.message
|
||||
print "------------------------------"
|
||||
return False
|
||||
if commit != None:
|
||||
return False
|
||||
return True
|
||||
|
||||
def drop_turn(turn_id):
|
||||
""" Delete staff turn """
|
||||
try:
|
||||
|
@ -480,13 +506,19 @@ def account_by_id(ID):
|
|||
if session['is_admin']:
|
||||
page = str(request.url_rule)
|
||||
menu = get_menu(page)
|
||||
user = Tetawebapp_users.query.filter_by(id=ID).first()
|
||||
message = "ID de l'utilisateur non conforme"
|
||||
staffers = Tetawebapp_users.query.filter_by(is_admin=0).order_by(Tetawebapp_users.name).all()
|
||||
user_id = int(ID.encode('utf-8'))
|
||||
user = Tetawebapp_users.query.filter_by(id=user_id).first()
|
||||
return render_template('account_by_id.html', menu=menu, user=user)
|
||||
# User is not admin
|
||||
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
except AttributeError:
|
||||
# User is not logged in
|
||||
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
except ValueError:
|
||||
# ID is not an integer
|
||||
return render_template('list_users.html', menu=menu, staffers=staffers, message=message)
|
||||
|
||||
@app.route("/account/update/<ID>", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
|
@ -502,20 +534,23 @@ def update_account_by_id(ID):
|
|||
name = request.form.get('name').encode('utf-8')
|
||||
phone = request.form.get('phone').encode('utf-8')
|
||||
diet = request.form.get('diet').encode('utf-8')
|
||||
if update_user_by_id(ID, login, password, confirm, name, phone, diet):
|
||||
message = "ID de l'utilisateur non conforme"
|
||||
staffers = Tetawebapp_users.query.filter_by(is_admin=0).order_by(Tetawebapp_users.name).all()
|
||||
user_id = int(ID.encode('utf-8'))
|
||||
if update_user_by_id(user_id, login, password, confirm, name, phone, diet):
|
||||
user = Tetawebapp_users.query.filter_by(id=ID).first()
|
||||
message = check_user_info()
|
||||
else:
|
||||
message = "Erreur lors de l'enregistrement des données."
|
||||
return render_template('account_by_id.html',
|
||||
menu=menu,
|
||||
user=user,
|
||||
message=message)
|
||||
return render_template('account_by_id.html', menu=menu, user=user,message=message)
|
||||
# User is not admin
|
||||
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
except AttributeError:
|
||||
# User is not logged in
|
||||
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
except ValueError:
|
||||
# ID is not an integer
|
||||
return render_template('list_users.html', menu=menu, staffers=staffers, message=message)
|
||||
|
||||
@app.route("/account/delete/<ID>", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
|
@ -524,17 +559,22 @@ def delete_account(ID):
|
|||
try:
|
||||
if session['is_admin']:
|
||||
message = "Erreur lors de la suppression.".decode('utf-8')
|
||||
if delete_user(ID):
|
||||
message = ''
|
||||
page = str(request.url_rule)
|
||||
menu = get_menu(page)
|
||||
staffers = Tetawebapp_users.query.filter_by(is_admin=0).order_by(Tetawebapp_users.name).all()
|
||||
user_id = int(ID.encode('utf-8'))
|
||||
if delete_user(user_id):
|
||||
message = ''
|
||||
staffers = Tetawebapp_users.query.filter_by(is_admin=0).order_by(Tetawebapp_users.name).all()
|
||||
return render_template('list_users.html', menu=menu, staffers=staffers, message=message)
|
||||
# User is not admin
|
||||
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
except AttributeError:
|
||||
# User is not logged in
|
||||
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
except ValueError:
|
||||
# ID is not an integer
|
||||
return render_template('list_users.html', menu=menu, staffers=staffers, message=message)
|
||||
|
||||
@app.route("/turns", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
|
@ -596,25 +636,52 @@ def add_turn():
|
|||
|
||||
@app.route("/turn/<ID>", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
def update_turn_by_id(ID):
|
||||
|
||||
def turn_by_id(ID):
|
||||
try:
|
||||
if session['is_admin']:
|
||||
page = str(request.url_rule)
|
||||
menu = get_menu(page)
|
||||
roles = Tetawebapp_roles.query.order_by(Tetawebapp_roles.id).all()
|
||||
days = ['Jeudi', 'Vendredi', 'Samedi', 'Dimanche']
|
||||
message = 'ID du tour de staff non conforme'
|
||||
turns = Tetawebapp_turns.query.join(Tetawebapp_roles, Tetawebapp_turns.role_id==Tetawebapp_roles.id).add_columns(Tetawebapp_roles.role).order_by(Tetawebapp_turns.role_id).all()
|
||||
turn_id = int(ID.encode('utf-8'))
|
||||
turn = Tetawebapp_turns.query.filter_by(id=ID).first()
|
||||
return render_template('turn_by_id.html', menu=menu, page=page, turn=turn, roles=roles, days=days)
|
||||
except AttributeError:
|
||||
# User is not logged in
|
||||
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
except ValueError:
|
||||
# ID is not an integer
|
||||
return render_template('list_turns.html', menu=menu, page=page, turns=turns, message=message)
|
||||
|
||||
|
||||
#~ @app.route("/turn/update/<ID>", methods=['GET', 'POST'])
|
||||
#~ @check_session
|
||||
#~ def update_turn(ID):
|
||||
#~ """ Update given staff turn """
|
||||
#~ try:
|
||||
#~ if session['is_admin']:
|
||||
#~ page = str(request.url_rule)
|
||||
#~ menu = get_menu(page)
|
||||
#~ turn = Tetawebapp_turns.query.filter_by(id=ID).join(Tetawebapp_roles, Tetawebapp_turns.role_id==Tetawebapp_roles.id).add_columns(Tetawebapp_roles.role).order_by(Tetawebapp_turns.role_id).all()
|
||||
#~ return render_template('update_turn.html', menu=menu, page=page, turn=turn)
|
||||
#~ # User is not admin
|
||||
#~ return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
#~ except AttributeError:
|
||||
#~ # User is not logged in
|
||||
#~ return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
@app.route("/turn/update/<ID>", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
def update_turn(ID):
|
||||
""" Update given staff turn """
|
||||
try:
|
||||
role_id = request.form.get('role_id').encode('utf-8')
|
||||
day = request.form.get('day').encode('utf-8')
|
||||
start = request.form.get('start').encode('utf-8')
|
||||
end = request.form.get('end').encode('utf-8')
|
||||
if session['is_admin']:
|
||||
page = str(request.url_rule)
|
||||
menu = get_menu(page)
|
||||
turns = Tetawebapp_turns.query.join(Tetawebapp_roles, Tetawebapp_turns.role_id==Tetawebapp_roles.id).add_columns(Tetawebapp_roles.role).order_by(Tetawebapp_turns.role_id).all()
|
||||
message = "Erreur lors de l'enregistrement.".decode('utf-8')
|
||||
turn_id = int(ID.encode('utf-8'))
|
||||
if update_turn_by_id(turn_id, role_id, day, start, end):
|
||||
turns = Tetawebapp_turns.query.join(Tetawebapp_roles, Tetawebapp_turns.role_id==Tetawebapp_roles.id).add_columns(Tetawebapp_roles.role).order_by(Tetawebapp_turns.role_id).all()
|
||||
message = ''
|
||||
return render_template('list_turns.html', menu=menu, page=page, turns=turns, message=message)
|
||||
# User is not admin
|
||||
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
except AttributeError as e:
|
||||
# User is not logged in
|
||||
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
except ValueError:
|
||||
# ID is not an integer
|
||||
return render_template('list_turns.html', menu=menu, page=page, turns=turns, message=message)
|
||||
|
||||
@app.route("/turn/delete/<ID>", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
|
@ -626,7 +693,8 @@ def delete_turn(ID):
|
|||
page = str(request.url_rule)
|
||||
menu = get_menu(page)
|
||||
turns = Tetawebapp_turns.query.join(Tetawebapp_roles, Tetawebapp_turns.role_id==Tetawebapp_roles.id).add_columns(Tetawebapp_roles.role).order_by(Tetawebapp_turns.role_id).all()
|
||||
if drop_turn(ID):
|
||||
turn_id = int(ID.encode('utf-8'))
|
||||
if drop_turn(turn_id):
|
||||
message = ''
|
||||
turns = Tetawebapp_turns.query.join(Tetawebapp_roles, Tetawebapp_turns.role_id==Tetawebapp_roles.id).add_columns(Tetawebapp_roles.role).order_by(Tetawebapp_turns.role_id).all()
|
||||
return render_template('list_turns.html', menu=menu, turns=turns, message=message)
|
||||
|
@ -636,116 +704,9 @@ def delete_turn(ID):
|
|||
except AttributeError:
|
||||
# User is not logged in
|
||||
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@app.route("/basics", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
def basics():
|
||||
""" Basics page """
|
||||
page = str(request.url_rule)
|
||||
menu = get_menu(page)
|
||||
return render_template('basics.html', menu=menu)
|
||||
|
||||
@app.route("/inputs", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
def inputs():
|
||||
""" Show the input collection """
|
||||
page = str(request.url_rule)
|
||||
menu = get_menu(page)
|
||||
return render_template('inputs.html', menu=menu)
|
||||
|
||||
@app.route("/ajax", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
def ajax():
|
||||
""" Propose various AJAX tests """
|
||||
page = str(request.url_rule)
|
||||
menu = get_menu(page)
|
||||
return render_template('ajax.html', menu=menu)
|
||||
|
||||
@app.route("/database", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
def database():
|
||||
""" A blah on using databases """
|
||||
page = str(request.url_rule)
|
||||
menu = get_menu(page)
|
||||
return render_template('database.html', menu=menu)
|
||||
|
||||
@app.route("/todo", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
def todo():
|
||||
""" The famous TODO list """
|
||||
page = str(request.url_rule)
|
||||
menu = get_menu(page)
|
||||
return render_template('todo.html', menu=menu)
|
||||
|
||||
########################################################################
|
||||
# AJAX routes
|
||||
########################################################################
|
||||
|
||||
@app.route("/get_html_from_ajax", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
def get_html_from_ajax():
|
||||
""" Return HTML code to an AJAX request
|
||||
It may generate a 404 http error for testing purpose """
|
||||
if int(random.random()*10) % 2:
|
||||
# Randomly generate 404 HTTP response
|
||||
return render_template('error.html'), 404
|
||||
return render_template('ajax_html.html')
|
||||
|
||||
@app.route("/get_value_from_ajax", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
def get_value_from_ajax():
|
||||
""" Return a randomly generated value to an AJAX request
|
||||
It may return an error code for testing purpose """
|
||||
err_code = 'TETA_ERR'
|
||||
RND = int(random.random()*10)
|
||||
if RND % 2:
|
||||
# Randomly generate error
|
||||
return err_code
|
||||
return str(RND)
|
||||
|
||||
@app.route("/set_value_from_ajax/<value>", methods=['GET', 'POST'])
|
||||
@check_session
|
||||
def set_value_from_ajax(value):
|
||||
""" Accept a value from an AJAX request
|
||||
It may return an error code for testing purpose """
|
||||
err_code = 'TETA_ERR'
|
||||
if value != 'We Make Porn':
|
||||
return 'True'
|
||||
return err_code
|
||||
|
||||
@app.route("/upload", methods=['POST'])
|
||||
@check_session
|
||||
def upload():
|
||||
""" Save a file from AJAX request
|
||||
Files are saved in UPLOADED_FILES_DEST (see config.local.py) """
|
||||
err_code = 'TETA_ERR'
|
||||
RND = int(random.random()*10)
|
||||
if RND % 2:
|
||||
# Randomly generate error
|
||||
print err_code
|
||||
return err_code
|
||||
uploaded_files = []
|
||||
if len(request.files) > 0 and request.files['files']:
|
||||
uploaded_files = request.files.getlist("files")
|
||||
print "Uploaded files:"
|
||||
for f in uploaded_files:
|
||||
print ' [+] %s [%s]' % (f.filename, f.content_type)
|
||||
# Before saving you should:
|
||||
# - Secure the filename
|
||||
# - Check file size
|
||||
# - Check content type
|
||||
f.save(os.path.join(app.config['UPLOADED_FILES_DEST'], f.filename))
|
||||
f.close()
|
||||
return "OK"
|
||||
except ValueError:
|
||||
# ID is not an integer
|
||||
return render_template('list_turns.html', menu=menu, page=page, turns=turns, message=message)
|
||||
|
||||
########################################################################
|
||||
# Main
|
||||
|
|
|
@ -54,7 +54,7 @@ function save_turn() {
|
|||
alert("Heure de début invalide.\n\nVeuillez respecter le format HH:MM:SS");
|
||||
return false;
|
||||
}
|
||||
if (! regTime.test(end)){
|
||||
if (! regTime.test(end) || s_end[0] > 23 || s_end[1] > 59 || s_end[2] > 59){
|
||||
alert("Heure de fin invalide.\n\nVeuillez respecter le format HH:MM:SS");
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -1,49 +0,0 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}Ajax{% endblock %}
|
||||
{% block main %}
|
||||
<section class='inline'>
|
||||
<article class='left'>
|
||||
<h3>Get HTML response from AJAX</h3>
|
||||
<p>Click the refresh button to get the HTML response.</p>
|
||||
<p>The response may randomly be a voluntary error so you should try it more than once.</p>
|
||||
Refresh: <input type='button' class='refresh' value=' '
|
||||
onclick='javascript:get_html_from_ajax(document.getElementById("html_container"), "/get_html_from_ajax");'>
|
||||
</article>
|
||||
<article class='right'>
|
||||
<h3>Upload files with AJAX</h3>
|
||||
<p>Select files to upload</p>
|
||||
<p>The response may randomly be a voluntary error so you should try it more than once.</p>
|
||||
Upload files:
|
||||
<div class='file_upload'>
|
||||
<!--
|
||||
Input file is a tricky hack (see tetawebapp.css and tetawebapp.js)
|
||||
-->
|
||||
<input type='button' id='upload_icon_1' class='upload' title='Upload' value=' '/>
|
||||
<input type='file' id='upload_input_1' multiple
|
||||
title='Upload'
|
||||
onchange='javascript:upload_file_from_ajax(this, "/upload", "TETA_ERR");'
|
||||
onmouseover='javascript:lit(document.getElementById("upload_icon_1"));'
|
||||
onmouseout='javascript:unlit(document.getElementById("upload_icon_1"));'/>
|
||||
</div>
|
||||
</article>
|
||||
</section>
|
||||
<hr/>
|
||||
<article class='right' id='html_container'></article>
|
||||
<hr/>
|
||||
<section class='inline'>
|
||||
<article class='left'>
|
||||
<h3>Set value via AJAX</h3>
|
||||
<p>Send value to the application.</p>
|
||||
<p>If value is empty or is "We Make Porn" (case sensitive), an error is raised.</p>
|
||||
<input type='text' id='value_sender'>
|
||||
<input type='button' value="Try me" onclick='javascript:set_value_from_ajax(document.getElementById("value_sender"), "/set_value_from_ajax", "TETA_ERR");'>
|
||||
</article>
|
||||
<article class='right'>
|
||||
<h3>Get value from AJAX</h3>
|
||||
<p>Get a random value from the application.</p>
|
||||
<p>Randomly raises a voluntary error so you should try it more than once.</p>
|
||||
<input type='text' id='value_receiver'>
|
||||
<input type='button' value="Try me" onclick='javascript:get_value_from_ajax(document.getElementById("value_receiver"), "/get_value_from_ajax", "TETA_ERR");'>
|
||||
</article>
|
||||
</section>
|
||||
{% endblock %}
|
|
@ -1,24 +0,0 @@
|
|||
<h3>This is the title</h3>
|
||||
<img src='/static/images/dummy_pic.png' alt='dummy pic' title='dummy pic'/>
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
|
||||
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
|
||||
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
|
||||
officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit,
|
||||
sed do eiusmod tempor incididunt ut labore
|
||||
</p>
|
||||
<p>This <a href='/plop.html'>link</a> will lead to an error page</p>
|
||||
<p>
|
||||
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
|
||||
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
|
||||
officia desers unt mollit anim id est laborum.
|
||||
</p>
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
|
||||
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
|
||||
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
|
||||
officia deserunt mollit anim id est laborum.
|
||||
</p>
|
|
@ -1,12 +0,0 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}Articles{% endblock %}
|
||||
{% block main %}
|
||||
<article>
|
||||
<h3>Informations personnelles</h3>
|
||||
<p>
|
||||
Please select your article
|
||||
</p>
|
||||
</article>
|
||||
<article id='article_receiver'>
|
||||
</article>
|
||||
{% endblock %}
|
|
@ -1,65 +0,0 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}Articles{% endblock %}
|
||||
{% block main %}
|
||||
<article class='right'>
|
||||
<h3>Article #{{ ID }}</h3>
|
||||
<img src='/static/images/dummy_pic.png' alt='dummy pic' title='dummy pic'/>
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
|
||||
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
|
||||
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
|
||||
officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit,
|
||||
sed do eiusmod tempor incididunt ut labore
|
||||
</p>
|
||||
<p>This <a href='/plop.html'>link</a> will lead to an error page</p>
|
||||
<p>
|
||||
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
|
||||
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
|
||||
officia desers unt mollit anim id est laborum.
|
||||
</p>
|
||||
<ul>
|
||||
<li>plop</li>
|
||||
<li>plap</li>
|
||||
<li>plip</li>
|
||||
</ul>
|
||||
<ol>
|
||||
<li>plop</li>
|
||||
<li>plap</li>
|
||||
<li>plip</li>
|
||||
</ol>
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
|
||||
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
|
||||
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
|
||||
officia deserunt mollit anim id est laborum.
|
||||
</p>
|
||||
</article>
|
||||
<article class='left'>
|
||||
<h3>Another disposition</h3>
|
||||
<img src='/static/images/dummy_pic.png' alt='dummy pic' title='dummy pic'/>
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
|
||||
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
|
||||
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
|
||||
officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit,
|
||||
sed do eiusmod tempor incididunt ut labore
|
||||
</p>
|
||||
<p>
|
||||
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
|
||||
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
|
||||
officia deserunt mollit anim id est laborum.
|
||||
</p>
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
|
||||
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
|
||||
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
|
||||
officia deserunt mollit anim id est laborum.
|
||||
</p>
|
||||
</article>
|
||||
{% endblock %}
|
|
@ -1,68 +0,0 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}Basics{% endblock %}
|
||||
{% block main %}
|
||||
<article class='right'>
|
||||
<h3>Basics</h3>
|
||||
<p>
|
||||
Thanks to <a href='http://flask.pocoo.org/'>Python/Flask</a> with <strong>TetaWebApp</strong> most of the output things come to life via
|
||||
<a href='http://jinja.pocoo.org/docs/2.10/'>Jinja2 HTML templates</a>
|
||||
and is 100% <strong title='Bulshit inside'>HTML5 ready©</strong>.
|
||||
</p>
|
||||
<p>
|
||||
Colors and fonts are managed from separated CSS files letting you easily
|
||||
change the default theme to your favorite colors and icon set.
|
||||
</p>
|
||||
<pre>
|
||||
/*
|
||||
* Here are the font definitions.
|
||||
* You can modify it or create your own and make it loaded
|
||||
* after this one in the HTML header section of the index.html
|
||||
* template file.
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto Condensed";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: var(--font-normal);
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto Condensed";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: var(--font-bold);
|
||||
}
|
||||
</pre>
|
||||
<pre>
|
||||
/*
|
||||
* Here are the base color scheme and icon set.
|
||||
* You can modify it or create your own using the same variables
|
||||
* and make it loaded after this one but before the fonts.css in
|
||||
* the HTML header section of the index.html template file.
|
||||
*/
|
||||
:root {
|
||||
--coloured-bg: #FF5D00;
|
||||
--light-coloured-bg: #FFB387;
|
||||
--clear-bg: #E5E5E5;
|
||||
--mid-bg: #BBBBBB;
|
||||
--dark-bg: #2B2B2B;
|
||||
--dark-border: #888888;
|
||||
--text-color: #555555;
|
||||
--white: #FFFFFF;
|
||||
--black: #000000;
|
||||
--font-normal: url("/static/fonts/RobotoCondensed-Regular.ttf") format("truetype");
|
||||
--font-bold: url("/static/fonts/RobotoCondensed-Bold.ttf") format("truetype");
|
||||
--banner-logo: url(/static/images/logo.png);
|
||||
--add_icon: url(/static/images/add.png);
|
||||
--edit_icon: url(/static/images/edit.png);
|
||||
--login_icon: url(/static/images/login.png);
|
||||
--logout_icon: url(/static/images/logout.png);
|
||||
--refresh_icon: url(/static/images/refresh.png);
|
||||
--save_icon: url(/static/images/save.png);
|
||||
--search_icon: url(/static/images/search.png);
|
||||
--trash_icon: url(/static/images/trash.png);
|
||||
}
|
||||
</pre>
|
||||
</article>
|
||||
{% endblock %}
|
|
@ -1,12 +0,0 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}Database{% endblock %}
|
||||
{% block main %}
|
||||
<article class='right'>
|
||||
<h3>Accessing database</h3>
|
||||
<p>
|
||||
Even if using <a href='http://flask-sqlalchemy.pocoo.org/2.3/'>Flask-SQLAlchemy</a> to retrieve data
|
||||
stored in <strong>Postgres</strong> databases is the recommended way to use <strong>TetaWebApp</strong>,
|
||||
you're free to use the database connector that suits your need.
|
||||
</p>
|
||||
</article>
|
||||
{% endblock %}
|
|
@ -1,53 +0,0 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}Inputs{% endblock %}
|
||||
{% block main %}
|
||||
<article class='right'>
|
||||
<h3>The input collection</h3>
|
||||
<p>
|
||||
Have a look to the input collection:
|
||||
</p>
|
||||
<input type='text'/>
|
||||
<button>Click me</button>
|
||||
<br/>
|
||||
<textarea cols='25'></textarea>
|
||||
<br/>
|
||||
<select>
|
||||
{% for item in menu %}
|
||||
<option>{{ item[0] }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<input type='submit' value='Click me too'/>
|
||||
<br/>
|
||||
<input type='button' value='And me !' />
|
||||
<br/>
|
||||
<input type='button' class='add' title='Add' value=' '/>
|
||||
<input type='button' class='edit' title='Edit' value=' '/>
|
||||
<input type='button' class='login' title='Login' value=' '/>
|
||||
<input type='button' class='logout' title='Logout' value=' ' onclick='javascript:logout();'/>
|
||||
<input type='button' class='refresh' title='Refresh' value=' '/>
|
||||
<input type='button' class='save' title='Save' value=' '/>
|
||||
<input type='button' class='search' title='Search' value=' '/>
|
||||
<input type='button' class='trash' title='Trash' value=' '/>
|
||||
<!--
|
||||
Input file is a tricky hack (see tetawebapp.css and tetawebapp.js)
|
||||
-->
|
||||
<div class='file_upload'>
|
||||
<input type='button' id='upload_icon_1' class='upload' title='Upload' value=' '/>
|
||||
<input type='file' id='upload_input_1' name='files' multiple
|
||||
title='Upload'
|
||||
onchange='javascript:upload_file_from_ajax(this, "/upload", "TETA_ERR");'
|
||||
onmouseover='javascript:lit(document.getElementById("upload_icon_1"));'
|
||||
onmouseout='javascript:unlit(document.getElementById("upload_icon_1"));'/>
|
||||
</div>
|
||||
<br/>
|
||||
<pre>
|
||||
#!/bin/sh
|
||||
# This is code sample
|
||||
while [ 1 ]
|
||||
do
|
||||
echo "Tits or GTFO !"
|
||||
sleep .1
|
||||
done
|
||||
</pre>
|
||||
</article>
|
||||
{% endblock %}
|
|
@ -1,18 +0,0 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}Login{% endblock %}
|
||||
{% block nav %}{% endblock %}
|
||||
{% block main %}
|
||||
<article class='login'>
|
||||
<h3>Login</h3>
|
||||
</article>
|
||||
{% if message != '' %}
|
||||
<pre>{{ message }}</pre>
|
||||
{% endif %}
|
||||
<article class='left'>
|
||||
<form method='POST' action='/login'>
|
||||
Login: <input id='login' name='login' type='text' />
|
||||
Password: <input id='password' name='password' type='password' />
|
||||
<input type='submit' value='Log me in' onclick='javascript:return verify_login();'>
|
||||
</form>
|
||||
</article>
|
||||
{% endblock %}
|
|
@ -1,18 +0,0 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}TODO{% endblock %}
|
||||
{% block main %}
|
||||
<article class='right'>
|
||||
<h3>TODO list</h3>
|
||||
<ul>
|
||||
<li><strike>Basic menu management</strike></li>
|
||||
<li>Installation wizard</li>
|
||||
<li>Back office for basic content management</li>
|
||||
<li><strike>Basic Ajax support</strike></li>
|
||||
<li><strike>Session management</strike></li>
|
||||
<li>File upload</li>
|
||||
<li>Basic documentation</li>
|
||||
<li><strike>Horizontal navbar</strike></li>
|
||||
<li><strike>License</strike></li>
|
||||
</ul>
|
||||
</article>
|
||||
{% endblock %}
|
|
@ -0,0 +1,30 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}Mise à jour du tour de staff{% endblock %}
|
||||
{% block main %}
|
||||
<article>
|
||||
<h3>Tour de staff:</h3>
|
||||
<form method='POST' action='/turn/update/{{ turn.id }}'>
|
||||
<label>Role: </label><select id='role_id' name='role_id'>
|
||||
{% for role in roles %}
|
||||
{% set selected = '' %}
|
||||
{% if role.id == turn.role_id %}
|
||||
{% set selected="selected" %}
|
||||
{% endif %}
|
||||
<option {{ selected }} value='{{ role.id }}'>{{ role.role }}</option>
|
||||
{% endfor %}
|
||||
</select><br/>
|
||||
<label>Jour de la semaine: </label><select id='day' name='day'>
|
||||
{% for day in days %}
|
||||
{% set selected = '' %}
|
||||
{% if turn.wday == day %}
|
||||
{% set selected="selected" %}
|
||||
{% endif %}
|
||||
<option {{ selected }} value='{{ day }}'>{{ day }}</option>
|
||||
{% endfor %}
|
||||
</select><br/>
|
||||
<label>Début (HH:MM:SS) </label><input id='start' name='start' type='text' maxlength=8 value='{{ turn.start_time }}'/><br/>
|
||||
<label>Fin: (HH:MM:SS) </label><input id='end' name='end' type='text' maxlength=8 value='{{ turn.end_time }}'/><br/>
|
||||
<input type='submit' value='Enregistrer' onclick='javascript:return save_turn();'/>
|
||||
</form>
|
||||
</article>
|
||||
{% endblock %}
|
|
@ -1,22 +0,0 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}Nouveau tour de staff{% endblock %}
|
||||
{% block main %}
|
||||
<article>
|
||||
<h3>Miuse à jour du tour de staff</h3>
|
||||
<form method='POST' action='/turn/update/{{ turn[0].id }}'>
|
||||
<label>Role: </label><select id='role_id' name='role_id'>
|
||||
{% for role in roles %}
|
||||
<option value='{{ role.id }}'>{{ role.role }}</option>
|
||||
{% endfor %}
|
||||
</select><br/>
|
||||
<label>Jour de la semaine: </label><select id='day' name='day'>
|
||||
{% for day in days %}
|
||||
<option value='{{ day }}'>{{ day }}</option>
|
||||
{% endfor %}
|
||||
</select><br/>
|
||||
<label>Début (HH:MM:SS) </label><input id='start' name='start' type='text' maxlength=8/><br/>
|
||||
<label>Fin: (HH:MM:SS) </label><input id='end' name='end' type='text' maxlength=8/><br/>
|
||||
<input type='submit' value='Enregistrer' onclick='javascript:return save_turn();'/>
|
||||
</form>
|
||||
</article>
|
||||
{% endblock %}
|
Loading…
Reference in New Issue