Rewrite edit blocs and themes

This commit is contained in:
2026-03-28 12:20:30 +01:00
committed by kitoy
parent 9497c64b09
commit 3a5edc30bb
32 changed files with 627 additions and 373 deletions

View File

@@ -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'))