Rewrite edit blocs and themes
This commit is contained in:
333
app/routes.py
333
app/routes.py
@@ -1,6 +1,7 @@
|
||||
from app import app
|
||||
from flask import render_template, url_for, request, flash, redirect, session, make_response
|
||||
import json
|
||||
from markupsafe import escape
|
||||
from werkzeug.utils import secure_filename
|
||||
import os
|
||||
from app.forms import ImageForm, ImageUpload
|
||||
@@ -12,121 +13,128 @@ from copy import deepcopy
|
||||
from app.forms import Login
|
||||
from functools import wraps
|
||||
from app.utils import login_required
|
||||
from flask_wtf.csrf import CSRFProtect
|
||||
|
||||
csrf = CSRFProtect(app)
|
||||
|
||||
|
||||
app.secret_key = 'your_secret_key'
|
||||
|
||||
|
||||
app.config.from_pyfile('config.py')
|
||||
DB = DataSite(app.config['JSON_FILE'], app.config['STATIC_PATH'])
|
||||
DB.loadFile()
|
||||
tmp = deepcopy(DB)
|
||||
|
||||
|
||||
USERS_FOLDER = app.config['USERS_FOLDER']
|
||||
bcrypt = Bcrypt(app)
|
||||
|
||||
EXT_IMG = {'.jpg', '.JPG', '.png', '.PNG', '.gif', '.GIF', '.bmp', '.BMP', '.jpeg', '.JPEG' }
|
||||
|
||||
@app.route('/')
|
||||
@app.route('/index.html')
|
||||
def index():
|
||||
DB.loadFile()
|
||||
config = DB.datas['config']
|
||||
menu = DB.datas['menu']
|
||||
myblocs = DB.datas['blocs']
|
||||
return render_template('/index.html.tpl',
|
||||
config=config,
|
||||
menu=menu,
|
||||
myblocs=myblocs)
|
||||
@app.route('/', methods=['GET', 'POST'])
|
||||
@app.route('/index.html', methods=['GET', 'POST'])
|
||||
@app.route('/login', methods=['GET', 'POST'])
|
||||
def login():
|
||||
form = Login()
|
||||
if 'username' in session :
|
||||
resp = redirect(url_for('edit', _external=True))
|
||||
else :
|
||||
resp = redirect(url_for('login', _external=True))
|
||||
|
||||
if request.method == 'POST' :
|
||||
login = str(request.form['login'])
|
||||
password = str(request.form['passwd'])
|
||||
if login in os.listdir(USERS_FOLDER):
|
||||
db = DataSite(login, USERS_FOLDER)
|
||||
passwd_bcrypt = db.datas['config']['passwd']
|
||||
|
||||
if bcrypt.check_password_hash(passwd_bcrypt, password) is True:
|
||||
session['username'] = login
|
||||
resp = redirect(url_for('edit', _external=True))
|
||||
else:
|
||||
flash(u'Mauvais mot de passe', 'error')
|
||||
|
||||
else:
|
||||
resp = render_template('/admin/login.html', form=form)
|
||||
|
||||
return resp
|
||||
|
||||
@app.route( '/logout/', methods=['GET'] )
|
||||
@login_required
|
||||
def logout():
|
||||
session.pop('username', None) # Supprimer username de la session s'il s'y trouve
|
||||
session.clear()
|
||||
return redirect(url_for('login'))
|
||||
|
||||
|
||||
@app.route('/edit/save')
|
||||
@login_required
|
||||
def savefile():
|
||||
DB.saveJson(tmp.datas)
|
||||
DB.loadFile()
|
||||
tmp.emptyTrash()
|
||||
user = '%s'% escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
db.saveJson(TMP.datas)
|
||||
db.emptyTrash()
|
||||
return redirect(url_for('edit'))
|
||||
|
||||
@app.route('/edit')
|
||||
@login_required
|
||||
def edit():
|
||||
theme = tmp.datas['config']['theme']
|
||||
menu = DB.datas['menu']
|
||||
print('edit_menu' + str(menu))
|
||||
myblocs = tmp.datas['blocs']
|
||||
user = '%s'% escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
theme = db.datas['config']['theme']
|
||||
menu = db.datas['menu']
|
||||
myblocs = db.datas['blocs']
|
||||
return render_template('/edit.html.tpl',
|
||||
blocEdit="",
|
||||
config=DB.datas['config'],
|
||||
config=db.datas['config'],
|
||||
menu=menu,
|
||||
theme=theme,
|
||||
myblocs=myblocs
|
||||
)
|
||||
|
||||
|
||||
@app.route('/edit/<bloc>', methods=['GET', 'POST'])
|
||||
@app.route('/edit/<page>')
|
||||
@login_required
|
||||
def editBloc(bloc):
|
||||
theme = tmp.datas['config']['theme']
|
||||
menu= tmp.datas['menu']
|
||||
myblocs = tmp.datas['blocs']
|
||||
form = MyBlocs.makeForm(tmp.datas['blocs'][bloc])
|
||||
bloc = tmp.datas['blocs'][bloc]
|
||||
if request.method == 'POST':
|
||||
if form.validate_on_submit():
|
||||
tmp.updateDatas(bloc, form)
|
||||
flash(u'Vos changements on été pris en compte', 'success')
|
||||
|
||||
if "hx-request" in request.headers:
|
||||
return render_template(theme+'/_'+bloc['type']+'.html',
|
||||
bloc=bloc)
|
||||
else:
|
||||
return redirect(url_for('edit'))
|
||||
|
||||
if "hx-request" in request.headers:
|
||||
return render_template(theme+'/_'+bloc['type']+'-edit.html',
|
||||
bloc=bloc,
|
||||
form=form)
|
||||
else:
|
||||
return render_template(theme+'/edit.html',
|
||||
config=DB.datas['config'],
|
||||
menu=menu,
|
||||
myblocs=myblocs,
|
||||
blocEdit=bloc['name'],
|
||||
form=form)
|
||||
|
||||
@app.route('/view/<bloc>', methods=['GET'])
|
||||
@login_required
|
||||
def viewBloc(bloc):
|
||||
theme = tmp.datas['config']['theme']
|
||||
myblocs = tmp.datas['blocs']
|
||||
form = MyBlocs.makeForm(tmp.datas['blocs'][bloc])
|
||||
bloc = tmp.datas['blocs'][bloc]
|
||||
|
||||
return render_template(theme+'/_'+bloc['type']+'.html',
|
||||
bloc=bloc)
|
||||
|
||||
def edit(page):
|
||||
user = '%s'% escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
blocs_page = db.getpage()
|
||||
theme = db.datas['config']['theme']
|
||||
menu = db.datas['menu']
|
||||
myblocs = db.datas['blocs']
|
||||
return render_template('/edit.html.tpl',
|
||||
blocEdit="",
|
||||
config=db.datas['config'],
|
||||
menu=menu,
|
||||
theme=theme,
|
||||
myblocs=myblocs
|
||||
)
|
||||
|
||||
|
||||
@app.route('/edit/images/<bloc>/<image>', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def editPhoto(image, bloc):
|
||||
theme = tmp.datas['config']['theme']
|
||||
user = '%s'% escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
theme = db.datas['config']['theme']
|
||||
form = ImageForm()
|
||||
mesimages = tmp.datas['blocs'][bloc]
|
||||
|
||||
if request.method == 'POST':
|
||||
if form.validate_on_submit():
|
||||
tmp.updateImg(bloc, mesimages[image], form)
|
||||
else:
|
||||
flash(u'Image non modifier', error)
|
||||
|
||||
|
||||
form = MyBlocs.makeForm(tmp.datas['blocs'][bloc])
|
||||
if "hx-request" in request.headers:
|
||||
return render_template(theme+'/_gallery-edit.html',
|
||||
bloc=mesimages,
|
||||
form=form)
|
||||
else:
|
||||
return redirect ('/edit#'+bloc)
|
||||
mesimages = db.datas['blocs'][bloc]
|
||||
if form.validate_on_submit():
|
||||
if request.method == 'POST':
|
||||
db.updateImg(bloc, mesimages[image], form)
|
||||
db.saveJson()
|
||||
form = MyBlocs.makeForm(db.datas['blocs'][bloc])
|
||||
if "hx-request" in request.headers:
|
||||
return render_template(theme+'/blocs/edit/images_list.html',
|
||||
theme=theme,
|
||||
bloc=mesimages,
|
||||
form=form)
|
||||
else:
|
||||
return redirect ('/edit#'+bloc)
|
||||
else:
|
||||
return render_template(theme+'/_image-edit'+'.html', form=form, image=mesimages[image], bloc=mesimages)
|
||||
|
||||
return render_template(theme+'/blocs/edit/_image-edit'+'.html', form=form, image=mesimages[image], bloc=mesimages)
|
||||
|
||||
@app.route('/upload-gallery/<bloc>', methods=['POST'])
|
||||
@login_required
|
||||
def drop_upload(bloc):
|
||||
user = '%s'% escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
file = request.files['file']
|
||||
filename = secure_filename(file.filename)
|
||||
ext = os.path.splitext(filename)[-1]
|
||||
@@ -157,64 +165,133 @@ def drop_upload(bloc):
|
||||
with Image.open(os.path.join(save_path, 'fullsize', filename )) as img :
|
||||
img.thumbnail((300,300))
|
||||
img.save(os.path.join(save_path, 'thumbnails', filename ) )
|
||||
tmp.addImg(bloc, filename)
|
||||
db.addImg(bloc, filename)
|
||||
db.saveJson()
|
||||
return make_response(('Chunk upload succesfull', 200))
|
||||
|
||||
|
||||
@app.route('/edit/images/<bloc>/del/<image>', methods=['GET'])
|
||||
@login_required
|
||||
def delImage(bloc, image):
|
||||
tmp.delImg(image)
|
||||
user = '%s'% escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
db.delImg(image)
|
||||
db.saveJson()
|
||||
return redirect ('/edit#'+bloc)
|
||||
|
||||
@app.route('/edit/<blocname>', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def editBloc(blocname):
|
||||
user = '%s'% escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
theme = db.datas['config']['theme']
|
||||
bloc = db.datas['blocs'][blocname]
|
||||
form = MyBlocs.makeForm(bloc)
|
||||
|
||||
if request.method == 'POST':
|
||||
if form.validate_on_submit():
|
||||
print(form.name.data)
|
||||
db.datas['blocs'][form.name.data]=DataSite.updateBloc(bloc, form)
|
||||
db.saveJson()
|
||||
flash(u'Vos changements on été pris en compte et enregistré', 'success')
|
||||
else:
|
||||
print(form.errors)
|
||||
|
||||
if "hx-request" in request.headers:
|
||||
return render_template(theme+'/blocs/_'+bloc['type']+'.html',
|
||||
theme=theme,
|
||||
bloc=db.datas['blocs'][blocname])
|
||||
else:
|
||||
return redirect(url_for('edit'))
|
||||
|
||||
|
||||
else:
|
||||
if "hx-request" in request.headers:
|
||||
return render_template(theme+'/blocs/edit/_'+bloc['type']+'.html',
|
||||
theme=theme,
|
||||
bloc=bloc,
|
||||
form=form)
|
||||
else:
|
||||
return render_template('/edit.html.tpl',
|
||||
config=db.datas['config'],
|
||||
menu=db.datas['menu'],
|
||||
myblocs=db.datas['blocs'],
|
||||
theme=theme,
|
||||
blocEdit=bloc['name'],
|
||||
form=form)
|
||||
|
||||
@app.route('/view/<bloc>', methods=['GET'])
|
||||
@login_required
|
||||
def viewBloc(bloc):
|
||||
user = '%s'% escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
theme = db.datas['config']['theme']
|
||||
myblocs = db.datas['blocs']
|
||||
form = MyBlocs.makeForm(db.datas['blocs'][bloc])
|
||||
bloc = db.datas['blocs'][bloc]
|
||||
|
||||
return render_template(theme+'/blocs/_'+bloc['type']+'.html',
|
||||
bloc=bloc)
|
||||
|
||||
@app.route('/addBloc', methods=['POST'])
|
||||
@login_required
|
||||
def addBloc():
|
||||
user = '%s'% escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
for key in request.form:
|
||||
print (key +':'+ request.form[key])
|
||||
blocName = request.form['blocName']
|
||||
blocType = request.form['blocType']
|
||||
bloc = MyBlocs.new(blocName, blocType)
|
||||
if bloc != None:
|
||||
db.datas['blocs'][blocName] = { 'name': blocName, 'type': blocType}
|
||||
flash (u'Bloc ajouté avec succès', 'succes');
|
||||
else:
|
||||
return make_response(('Invalid type of bloc ', 500))
|
||||
|
||||
db.saveJson()
|
||||
if "hx-request" in request.headers:
|
||||
return render_template('/admin/_blocs-list.html',
|
||||
myblocs=db.datas['blocs'])
|
||||
else:
|
||||
return redirect(url_for('edit'))
|
||||
|
||||
@app.route('/sortblocs', methods=['POST'])
|
||||
@login_required
|
||||
def sortblocs():
|
||||
user = '%s'% escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
config = db.datas['config']
|
||||
menu = db.datas['menu']
|
||||
myblocs = deepcopy(TMP.datas['blocs'])
|
||||
db.datas['blocs']=dict()
|
||||
for bloc in request.form:
|
||||
if bloc != 'csrf_token':
|
||||
bloc_name = bloc.replace("bloc-", "", 2)
|
||||
db.datas['blocs'][bloc_name] = myblocs[bloc_name]
|
||||
flash (u'Les blocs ont été réagencés', 'succes');
|
||||
db.saveJson()
|
||||
return redirect(url_for('edit'))
|
||||
|
||||
@app.route('/editmenu', methods=['POST'])
|
||||
@login_required
|
||||
def editMenu():
|
||||
print (request.form)
|
||||
DB.datas['menu']=dict()
|
||||
user = '%s'% escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
db.datas['menu']=dict()
|
||||
for menu in request.form:
|
||||
if '§§' in menu:
|
||||
submenu = menu.split("§§")
|
||||
if submenu[0] in DB.datas['menu'].keys():
|
||||
DB.datas['menu'][submenu[0]] = DB.datas['menu'][submenu[0]] | {submenu[1]: str(request.form[menu])}
|
||||
if submenu[0] in db.datas['menu'].keys():
|
||||
db.datas['menu'][submenu[0]] = db.datas['menu'][submenu[0]] | {submenu[1]: str(request.form[menu])}
|
||||
else:
|
||||
DB.datas['menu'][submenu[0]] = {submenu[1]: str(request.form[menu])}
|
||||
db.datas['menu'][submenu[0]] = {submenu[1]: str(request.form[menu])}
|
||||
|
||||
elif menu == 'csrf_token':
|
||||
pass
|
||||
else:
|
||||
DB.datas['menu'][menu] = str(request.form[menu])
|
||||
print (DB.datas['menu'])
|
||||
flash (u'Le menu a bien été modifier', 'succes');
|
||||
return make_response(('Update menu succesfull', 200))
|
||||
|
||||
|
||||
|
||||
|
||||
@app.route('/login', methods=['GET', 'POST'])
|
||||
def login():
|
||||
theme = DB.datas['config']['theme']
|
||||
form = Login()
|
||||
if 'username' in session :
|
||||
resp = redirect(url_for('edit', _external=True))
|
||||
else :
|
||||
resp = redirect(url_for('login', _external=True))
|
||||
if request.method == 'POST' :
|
||||
password = str(request.form['passwd'])
|
||||
passwd_bcrypt = DB.datas['config']['passwd']
|
||||
db.datas['menu'][menu] = str(request.form[menu])
|
||||
|
||||
if bcrypt.check_password_hash(passwd_bcrypt, password) is True:
|
||||
session['username'] = "logged"
|
||||
resp = redirect(url_for('edit', _external=True))
|
||||
else:
|
||||
flash(u'Mauvais mot de passe', 'error')
|
||||
|
||||
else:
|
||||
resp = render_template(theme+'/login.html', form=form)
|
||||
|
||||
return resp
|
||||
|
||||
@app.route( '/logout/', methods=['GET'] )
|
||||
@login_required
|
||||
def logout():
|
||||
session.pop('username', None) # Supprimer username de la session s'il s'y trouve
|
||||
session.clear()
|
||||
return redirect(url_for('index'))
|
||||
db.saveJson()
|
||||
flash (u'Le menu a bien été modifier', 'success');
|
||||
return redirect(url_for('edit'))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user