Big commit i'm sorry ...
This commit is contained in:
358
app/routes.py
358
app/routes.py
@@ -1,9 +1,10 @@
|
||||
from app import app
|
||||
from flask import render_template, url_for, request, flash, redirect, session, make_response
|
||||
from flask import render_template, url_for, request, flash, redirect, session, make_response, send_from_directory
|
||||
import json
|
||||
from markupsafe import escape
|
||||
from werkzeug.utils import secure_filename
|
||||
import os
|
||||
import re
|
||||
from app.forms import ImageForm, ImageUpload
|
||||
from app.models.sites import DataSite
|
||||
from app.models.blocs import MyBlocs
|
||||
@@ -17,20 +18,15 @@ from flask_wtf.csrf import CSRFProtect
|
||||
|
||||
csrf = CSRFProtect(app)
|
||||
|
||||
|
||||
app.secret_key = 'your_secret_key'
|
||||
|
||||
|
||||
app.config.from_pyfile('config.py')
|
||||
|
||||
|
||||
THEMES_FOLDER = './themes/'
|
||||
USERS_FOLDER = app.config['USERS_FOLDER']
|
||||
bcrypt = Bcrypt(app)
|
||||
|
||||
EXT_IMG = {'.jpg', '.JPG', '.png', '.PNG', '.gif', '.GIF', '.bmp', '.BMP', '.jpeg', '.JPEG' }
|
||||
|
||||
@app.route('/', methods=['GET', 'POST'])
|
||||
@app.route('/index.html', methods=['GET', 'POST'])
|
||||
@app.route('/login', methods=['GET', 'POST'])
|
||||
def login():
|
||||
form = Login()
|
||||
@@ -65,91 +61,79 @@ def logout():
|
||||
return redirect(url_for('login'))
|
||||
|
||||
|
||||
@app.route('/edit/save')
|
||||
@login_required
|
||||
def savefile():
|
||||
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():
|
||||
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'],
|
||||
menu=menu,
|
||||
theme=theme,
|
||||
myblocs=myblocs
|
||||
)
|
||||
@app.route('/edit/<page>')
|
||||
@app.route('/', methods=['GET'], defaults={'page': ''})
|
||||
@app.route('/<page>/', methods=['GET'])
|
||||
@login_required
|
||||
def edit(page):
|
||||
user = '%s'% escape(session['username'])
|
||||
page = '%s' % escape(page)
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
blocs_page = db.getpage()
|
||||
mypages = db.getPages()
|
||||
theme = db.datas['config']['theme']
|
||||
menu = db.datas['menu']
|
||||
myblocs = db.datas['blocs']
|
||||
myblocs = db.getBlocs(page)['blocs']
|
||||
|
||||
return render_template('/edit.html.tpl',
|
||||
blocEdit="",
|
||||
config=db.datas['config'],
|
||||
menu=menu,
|
||||
theme=theme,
|
||||
pagesList=mypages,
|
||||
page=page,
|
||||
myblocs=myblocs
|
||||
)
|
||||
|
||||
|
||||
@app.route('/edit/images/<bloc>/<image>', methods=['GET', 'POST'])
|
||||
@app.route('/edit/images/<bloc>/<image>', methods=['GET', 'POST'], defaults={'page': ''})
|
||||
@app.route('/<page>/edit/images/<bloc>/<image>', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def editPhoto(image, bloc):
|
||||
def editPhoto(page, image, bloc):
|
||||
user = '%s'% escape(session['username'])
|
||||
page = '%s' % escape(page)
|
||||
image = '%s' % escape(image)
|
||||
bloc = '%s' % escape(bloc)
|
||||
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
theme = db.datas['config']['theme']
|
||||
form = ImageForm()
|
||||
mesimages = db.datas['blocs'][bloc]
|
||||
myblocs = db.getBlocs(page)['blocs']
|
||||
|
||||
if form.validate_on_submit():
|
||||
if request.method == 'POST':
|
||||
db.updateImg(bloc, mesimages[image], form)
|
||||
db.saveJson()
|
||||
myblocs[bloc][image] = db.updateImg(image, form)
|
||||
db.saveBlocs(page, myblocs)
|
||||
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)
|
||||
if "hx-request" in request.headers:
|
||||
return make_response(('Image modified', 200))
|
||||
else:
|
||||
return redirect ('/edit#'+bloc)
|
||||
return redirect ('/#'+bloc)
|
||||
else:
|
||||
return render_template(theme+'/blocs/edit/_image-edit'+'.html', form=form, image=mesimages[image], bloc=mesimages)
|
||||
return render_template(THEMES_FOLDER+theme+'/blocs/edit/_image-edit'+'.html', form=form, image=myblocs[bloc][image], bloc=myblocs[bloc])
|
||||
|
||||
@app.route('/upload-gallery/<bloc>', methods=['POST'])
|
||||
|
||||
@app.route('/upload-gallery/<bloc>', methods=['POST'], defaults={'page': ''})
|
||||
@app.route('/<page>/upload-gallery/<bloc>', methods=['POST'])
|
||||
@login_required
|
||||
def drop_upload(bloc):
|
||||
def drop_upload(page, bloc):
|
||||
user = '%s'% escape(session['username'])
|
||||
page = '%s' % escape(page)
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
datas = dict()
|
||||
file = request.files['file']
|
||||
filename = secure_filename(file.filename)
|
||||
myblocs = db.getBlocs(page)['blocs']
|
||||
ext = os.path.splitext(filename)[-1]
|
||||
save_path = "./app/static/img/portfolio"
|
||||
save_path = os.path.join(USERS_FOLDER, user, 'public', 'img' )
|
||||
if ext not in EXT_IMG :
|
||||
return make_response(('Le fichier n\'est pas une image', 400))
|
||||
|
||||
current_chunk = int(request.form['dzchunkindex'])
|
||||
print (current_chunk)
|
||||
|
||||
if (os.path.isfile(os.path.join(save_path, 'fullsize', filename ))) and current_chunk == 0:
|
||||
if (os.path.isfile(os.path.join(save_path, filename ))) and current_chunk == 0:
|
||||
return make_response(('Un fichier avec le même nom existe déjà', 400))
|
||||
|
||||
try:
|
||||
with open(os.path.join(save_path, 'fullsize', filename ), 'ab') as f:
|
||||
with open(os.path.join(save_path, filename ), 'ab') as f:
|
||||
f.seek(int(request.form['dzchunkbyteoffset']))
|
||||
f.write(file.stream.read())
|
||||
except OSError:
|
||||
@@ -159,117 +143,231 @@ def drop_upload(bloc):
|
||||
|
||||
if current_chunk + 1 == total_chunks:
|
||||
# This was the last chunk, the file should be complete and the size we expect
|
||||
if os.path.getsize(os.path.join(save_path, 'fullsize', filename )) != int(request.form['dztotalfilesize']):
|
||||
if os.path.getsize(os.path.join(save_path, filename )) != int(request.form['dztotalfilesize']):
|
||||
return make_response(('La taille du fichier source est différentes', 500))
|
||||
else:
|
||||
with Image.open(os.path.join(save_path, 'fullsize', filename )) as img :
|
||||
img.thumbnail((300,300))
|
||||
with Image.open(os.path.join(save_path, filename )) as img :
|
||||
img.thumbnail((640,480))
|
||||
img.save(os.path.join(save_path, 'thumbnails', filename ) )
|
||||
db.addImg(bloc, filename)
|
||||
db.saveJson()
|
||||
|
||||
myblocs[bloc][filename] = db.addImg(filename)
|
||||
db.saveBlocs(page, myblocs)
|
||||
return make_response(('Chunk upload succesfull', 200))
|
||||
|
||||
@app.route('/edit/images/<bloc>/del/<image>', methods=['GET'])
|
||||
@login_required
|
||||
def delImage(bloc, 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'])
|
||||
@app.route('/edit/images/<bloc>/del/<image>', methods=['GET'], defaults={'page': ''})
|
||||
@app.route('/<page>/edit/images/<bloc>/del/<image>', methods=['GET'])
|
||||
@login_required
|
||||
def editBloc(blocname):
|
||||
def delImage(page, bloc, image):
|
||||
user = '%s'% escape(session['username'])
|
||||
page = '%s' % escape(page)
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
myblocs = db.getBlocs(page)['blocs']
|
||||
|
||||
myblocs[bloc] = db.delImg(myblocs[bloc], image)
|
||||
db.saveBlocs(page, myblocs)
|
||||
|
||||
return make_response(('Image removed', 200))
|
||||
|
||||
|
||||
@app.route('/imgs_list/<blocname>', methods=['GET'], defaults={'page': ''})
|
||||
@app.route('/<page>/imgs_list/<blocname>', methods=['GET'])
|
||||
@login_required
|
||||
def imagesList(page, blocname):
|
||||
user = '%s'% escape(session['username'])
|
||||
page = '%s' % escape(page)
|
||||
blocname = '%s' % escape(blocname)
|
||||
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
theme = db.datas['config']['theme']
|
||||
bloc = db.datas['blocs'][blocname]
|
||||
form = MyBlocs.makeForm(bloc)
|
||||
myblocs = db.getBlocs(page)['blocs']
|
||||
bloc = myblocs[blocname]
|
||||
|
||||
return render_template(THEMES_FOLDER+theme+'/blocs/edit/images_list.html',page=page,
|
||||
bloc=bloc)
|
||||
|
||||
|
||||
@app.route('/edit/<blocname>', methods=['GET', 'POST'], defaults={'page': ''})
|
||||
@app.route('/<page>/edit/<blocname>', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def editBloc(page, blocname):
|
||||
user = '%s'% escape(session['username'])
|
||||
page = '%s' % escape(page)
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
theme = db.datas['config']['theme']
|
||||
myblocs = db.getBlocs(page)['blocs']
|
||||
bloc = myblocs[blocname]
|
||||
form = MyBlocs.makeForm(bloc)
|
||||
|
||||
if request.method == 'POST':
|
||||
datas=dict()
|
||||
if form.validate_on_submit():
|
||||
print(form.name.data)
|
||||
db.datas['blocs'][form.name.data]=DataSite.updateBloc(bloc, form)
|
||||
db.saveJson()
|
||||
|
||||
for field, value in request.form.items():
|
||||
print (field)
|
||||
if field != 'csrf_token' and field != 'image':
|
||||
myblocs[blocname][field] = value
|
||||
if 'image' in request.files.keys():
|
||||
file = request.files['image']
|
||||
print ('filename: '+ file.filename)
|
||||
filename = secure_filename(file.filename)
|
||||
bg_custom = 'bg_custom_'+bloc['name']+filename
|
||||
print('bg_custom : '+ bg_custom)
|
||||
file.save(os.path.join(USERS_FOLDER, user, 'public', 'img', bg_custom ))
|
||||
if 'bg_img' in bloc.keys():
|
||||
db.delImg(bloc, bloc['bg_img'])
|
||||
|
||||
|
||||
myblocs[blocname]['bg_img'] = bg_custom
|
||||
|
||||
db.saveBlocs(page, myblocs)
|
||||
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',
|
||||
return render_template(THEMES_FOLDER+theme+'/blocs/_'+bloc['type']+'.html',
|
||||
theme=theme,
|
||||
bloc=db.datas['blocs'][blocname])
|
||||
page=page,
|
||||
bloc=myblocs[blocname])
|
||||
else:
|
||||
return redirect(url_for('edit'))
|
||||
|
||||
|
||||
else:
|
||||
if "hx-request" in request.headers:
|
||||
return render_template(theme+'/blocs/edit/_'+bloc['type']+'.html',
|
||||
return render_template(THEMES_FOLDER+theme+'/blocs/edit/_'+bloc['type']+'.html',
|
||||
theme=theme,
|
||||
bloc=bloc,
|
||||
page=page,
|
||||
form=form)
|
||||
else:
|
||||
return render_template('/edit.html.tpl',
|
||||
config=db.datas['config'],
|
||||
menu=db.datas['menu'],
|
||||
myblocs=db.datas['blocs'],
|
||||
myblocs=myblocs,
|
||||
page=page,
|
||||
theme=theme,
|
||||
blocEdit=bloc['name'],
|
||||
form=form)
|
||||
|
||||
@app.route('/view/<bloc>', methods=['GET'])
|
||||
@app.route('/view/<bloc>', methods=['GET'], defaults={'page': ''})
|
||||
@app.route('/<page>/view/<bloc>', methods=['GET'])
|
||||
@login_required
|
||||
def viewBloc(bloc):
|
||||
def viewBloc(page, bloc):
|
||||
user = '%s'% escape(session['username'])
|
||||
page = '%s' % escape(page)
|
||||
|
||||
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]
|
||||
myblocs = db.getBlocs(page)['blocs']
|
||||
bloc = myblocs[bloc]
|
||||
|
||||
return render_template(theme+'/blocs/_'+bloc['type']+'.html',
|
||||
return render_template(THEMES_FOLDER+theme+'/blocs/_'+bloc['type']+'.html',
|
||||
bloc=bloc)
|
||||
|
||||
@app.route('/addBloc', methods=['POST'])
|
||||
@app.route('/addBloc', methods=['POST'], defaults={'page': ''})
|
||||
@app.route('/<page>/addBloc', methods=['POST'])
|
||||
@login_required
|
||||
def addBloc():
|
||||
def addBloc(page):
|
||||
user = '%s'% escape(session['username'])
|
||||
page = '%s' % escape(page)
|
||||
|
||||
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))
|
||||
datas = dict()
|
||||
myblocs = db.getBlocs(page)['blocs']
|
||||
|
||||
blocName = '%s' % escape(request.form['blocName'])
|
||||
blocType = request.form['blocType']
|
||||
bloc = MyBlocs.new(blocName, blocType, db.datas['config']['theme'])
|
||||
test_name = "^[A-Za-z0-9_-]*$"
|
||||
|
||||
if bloc != None:
|
||||
if bool(re.match(test_name, blocName)) :
|
||||
|
||||
myblocs[blocName] = { 'name': blocName, 'type': blocType}
|
||||
flash (u'Bloc ajouté avec succès', 'succes');
|
||||
else:
|
||||
return make_response(('Invalid bloc Name', 500))
|
||||
|
||||
db.saveBlocs(page, myblocs)
|
||||
|
||||
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'])
|
||||
|
||||
|
||||
@app.route('/addPage', methods=['POST'])
|
||||
@login_required
|
||||
def sortblocs():
|
||||
def addPage():
|
||||
user = '%s'% escape(session['username'])
|
||||
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
datas = dict()
|
||||
|
||||
pageName = '%s' % escape(request.form['pageName'])
|
||||
pageType = request.form['pageType']
|
||||
test_name = "^[A-Za-z0-9_-]*$"
|
||||
if bool(re.match(test_name, pageName)) :
|
||||
try :
|
||||
page = db.new_page(pageName, pageType)
|
||||
except FileExistsError:
|
||||
return make_response(('Page already exist', 500))
|
||||
else:
|
||||
flash (u'Page créé avec succès', 'success');
|
||||
else:
|
||||
return make_response(('Invalid type ', 500))
|
||||
|
||||
|
||||
mypages = db.getPages()
|
||||
return redirect(url_for('edit', page=pageName))
|
||||
|
||||
@app.route('/rmPage/<pageName>')
|
||||
@login_required
|
||||
def rmPage(pageName):
|
||||
pageName = '%s' % escape(pageName)
|
||||
user = '%s'% escape(session['username'])
|
||||
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
|
||||
try:
|
||||
db.rm_page(pageName)
|
||||
flash (u'Page supprimé avec succès', 'success');
|
||||
except OSError as e:
|
||||
flash (u"La page n'a pa pu être supprimer", 'error');
|
||||
|
||||
|
||||
return redirect(url_for('edit'))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@app.route('/sortblocs', methods=['POST'], defaults={'page': ''})
|
||||
@app.route('/<page>/sortblocs', methods=['POST'])
|
||||
@login_required
|
||||
def sortblocs(page):
|
||||
user = '%s'% escape(session['username'])
|
||||
page = '%s' % escape(page)
|
||||
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
config = db.datas['config']
|
||||
menu = db.datas['menu']
|
||||
myblocs = deepcopy(TMP.datas['blocs'])
|
||||
db.datas['blocs']=dict()
|
||||
datas = dict()
|
||||
myblocs = dict()
|
||||
|
||||
myblocs_orig = db.getBlocs(page)['blocs']
|
||||
|
||||
for bloc in request.form:
|
||||
if bloc != 'csrf_token':
|
||||
bloc_name = bloc.replace("bloc-", "", 2)
|
||||
db.datas['blocs'][bloc_name] = myblocs[bloc_name]
|
||||
myblocs[bloc_name] = myblocs_orig[bloc_name]
|
||||
flash (u'Les blocs ont été réagencés', 'succes');
|
||||
db.saveJson()
|
||||
|
||||
db.saveBlocs(page, myblocs)
|
||||
|
||||
return redirect(url_for('edit'))
|
||||
|
||||
@app.route('/editmenu', methods=['POST'])
|
||||
@@ -291,7 +389,59 @@ def editMenu():
|
||||
else:
|
||||
db.datas['menu'][menu] = str(request.form[menu])
|
||||
|
||||
db.saveJson()
|
||||
db.saveMenu(db.datas['menu'])
|
||||
flash (u'Le menu a bien été modifier', 'success');
|
||||
return redirect(url_for('edit'))
|
||||
|
||||
|
||||
@app.route('/public/img/<filename>')
|
||||
@login_required
|
||||
def myimgs(filename):
|
||||
user = '%s' % escape(session['username'])
|
||||
return send_from_directory(
|
||||
os.path.join(USERS_FOLDER, user, 'public', 'img'), filename )
|
||||
|
||||
@app.route('/public/img/thumbnails/<filename>')
|
||||
@login_required
|
||||
def mythumbnails(filename):
|
||||
user = '%s' % escape(session['username'])
|
||||
return send_from_directory(
|
||||
os.path.join(USERS_FOLDER, user, 'public', 'img', 'thumbnails'), filename )
|
||||
|
||||
@app.route('/favicon.ico', methods=['GET'])
|
||||
@app.route('/favicon.ico/', methods=['GET'])
|
||||
def favicon():
|
||||
return make_response(('Ok! ', 200))
|
||||
|
||||
|
||||
|
||||
@app.route('/publish', methods=['GET'])
|
||||
@login_required
|
||||
def publish():
|
||||
user = '%s' % escape(session['username'])
|
||||
db = DataSite(user, USERS_FOLDER)
|
||||
listPages = db.getPages()
|
||||
theme = db.datas['config']['theme']
|
||||
menu = db.datas['menu']
|
||||
|
||||
for page in listPages:
|
||||
myblocs = db.getBlocs(page)['blocs']
|
||||
htmlExport = render_template('/index.html.tpl',
|
||||
config=db.datas['config'],
|
||||
menu=menu,
|
||||
theme=theme,
|
||||
page=page,
|
||||
myblocs=myblocs)
|
||||
db.writeHTML(theme, page, htmlExport)
|
||||
|
||||
# Export index.html landing page
|
||||
myblocs = db.getBlocs('')['blocs']
|
||||
htmlExport = render_template('/index.html.tpl',
|
||||
config=db.datas['config'],
|
||||
menu=menu,
|
||||
theme=theme,
|
||||
page='/',
|
||||
myblocs=myblocs)
|
||||
|
||||
db.writeHTML(theme, 'index', htmlExport)
|
||||
return redirect(url_for('edit'))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user