diff --git a/verse/selector.py b/verse/selector.py index 207d8d5..4e0c120 100644 --- a/verse/selector.py +++ b/verse/selector.py @@ -6,39 +6,25 @@ from flask_login import current_user from usermodel import User from distribusimodel import Distribusis -from forms.selectorform import SelectorForm +from forms.selectorform import SelectorForm from statuspengguna.helper import HasDistribusi from statuspengguna.helper import DistribusiSelected - +from statuspengguna.helper import SelectCurrentDistribusi from app import db def SelectNewDistribusi(): print("make a new distribusi") selectorform = SelectorForm() - user = User.query.filter_by(email=current_user.email).first() - try: - user.currentdistribusi = "new" - db.session.commit() - except: - db.session.rollback() - selectorform.distribusis.errors.append("Unknown error occured!") - flash("An error occured !", "danger") + SelectCurrentDistribusi("new") return selectorform def SelectUpdateDistribusi(distribusiname): print(f"Update this distribusi {distribusiname}") selectorform = SelectorForm() - user = User.query.filter_by(email=current_user.email).first() - try: - user.currentdistribusi = distribusiname - db.session.commit() - except: - db.session.rollback() - selectorform.distribusis.errors.append("Unknown error occured!") - flash("An error occured !", "danger") + SelectCurrentDistribusi(distribusiname) return selectorform @@ -55,6 +41,11 @@ def DeleteDistribusi(distribusiname): db.session.commit() userfolder = os.path.join("stash", distribusi.distribusiname) shutil.rmtree(userfolder) + cssfolder = os.path.join( + "themes/userstyles", + distribusi.distribusiname + ) + shutil.rmtree(cssfolder) except: db.session.rollback() selectorform.distribusis.errors.append("Unknown error occured!") diff --git a/verse/start.py b/verse/start.py index 4743921..b198a95 100644 --- a/verse/start.py +++ b/verse/start.py @@ -47,6 +47,7 @@ from statuspengguna.helper import ( IsCssSelected, CurrentDistribusi, HasDistribusi, + IsDistribusiLive, ResetUserState, ) from statuspengguna.loginuser import LoginUser @@ -70,7 +71,7 @@ def index(): ResetUserState() uploadform = UploadForm() distribusis = Distribusis.query.filter( - Distribusis.distribusiname.isnot(None) + Distribusis.visible.isnot(False) ).all() distribusies = {} for distribusi in distribusis: @@ -109,6 +110,7 @@ def distribusi(): selectorvisible = SelectorVisible() current_distribusi = CurrentDistribusi() files_uploaded = IsZipUploaded(current_distribusi) + distribusi_live = IsDistribusiLive(current_distribusi) css_selected = IsCssSelected(current_distribusi) user = User.query.filter_by(email=current_user.email).first() distribusi = Distribusis.query.filter_by( @@ -128,15 +130,17 @@ def distribusi(): os.remove(os.path.join(userfolder, zipfilename)) # To Do: Make sure nothing can be executed from the upload folder cssfile = "" - for filename in os.listdir(userfolder): + cssfolder = os.path.join("themes/userstyles", distribusi.distribusiname) + for filename in os.listdir(cssfolder): if filename.endswith(".css"): - cssfile = os.path.join(userfolder, filename) + cssfile = os.path.join(cssfolder, filename) parser = build_argparser() args = parser.parse_args(["-s", cssfile]) distribusify(args, userfolder) distribusi.visible = True user.currentdistribusi = None + os.remove(cssfile) db.session.commit() return redirect(url_for("index")) template = render_template( @@ -146,6 +150,7 @@ def distribusi(): themeform=themeform, selectorform=selectorform, files_uploaded=files_uploaded, + distribusi_live=distribusi_live, css_selected=css_selected, selectorvisible=selectorvisible, ) @@ -168,6 +173,7 @@ def upload(): else: uploadform = UploadUpdatedFiles(APP.config["UPLOAD_FOLDER"]) files_uploaded = IsZipUploaded(uploadform.sitename.data) + distribusi_live = IsDistribusiLive(current_distribusi) css_selected = IsCssSelected(current_distribusi) template = render_template( "distribusi.html", @@ -176,6 +182,7 @@ def upload(): themeform=themeform, selectorform=selectorform, files_uploaded=files_uploaded, + distribusi_live=distribusi_live, css_selected=css_selected, selectorvisible=selectorvisible, ) @@ -193,15 +200,20 @@ def theme(): selectorvisible = SelectorVisible() current_distribusi = CurrentDistribusi() + print(current_distribusi) files_uploaded = IsZipUploaded(current_distribusi) + distribusi_live = IsDistribusiLive(current_distribusi) + css_selected = IsCssSelected(current_distribusi) if themeform.validate_on_submit(): - newuserfolder = os.path.join("stash", current_distribusi) + newcssfolder = os.path.join("themes/userstyles", current_distribusi) + if not os.path.exists(newcssfolder): + os.mkdir(newcssfolder) copycssfile = os.path.join( "themes", "{}.css".format(themeform.theme.data), ) - shutil.copy(copycssfile, newuserfolder) + shutil.copy(copycssfile, newcssfolder) css_selected = IsCssSelected(current_distribusi) template = render_template( @@ -211,6 +223,7 @@ def theme(): themeform=themeform, selectorform=selectorform, files_uploaded=files_uploaded, + distribusi_live=distribusi_live, css_selected=css_selected, selectorvisible=selectorvisible, ) @@ -223,6 +236,7 @@ def editor(): editorform = EditorForm() current_distribusi = CurrentDistribusi() files_uploaded = IsZipUploaded(current_distribusi) + distribusi_live = IsDistribusiLive(current_distribusi) cssplaceholder = "Try out your CSS here" with open('themes/editor/placeholder.css') as f: cssplaceholder = f.read() @@ -233,7 +247,8 @@ def editor(): htmlplaceholder = f.read() print(htmlplaceholder) if editorform.validate_on_submit(): - userfolder = os.path.join("stash", current_distribusi) + userfolder = os.path.join("themes/userstyles", current_distribusi) + os.mkdir(newuserfolder) cssfilename = "{}.css".format(editorform.cssname.data) with open(os.path.join(userfolder, cssfilename), "w") as cssfile: cssfile.write(editorform.css.data) @@ -242,6 +257,7 @@ def editor(): template = render_template( "editor.html", files_uploaded=files_uploaded, + distribusi_live=distribusi_live, editorform=editorform, htmlplaceholder=htmlplaceholder, ) @@ -280,7 +296,10 @@ def selector(): uploadform.tags.data = distribusi.tags files_uploaded = IsZipUploaded(current_distribusi) - css_selected = IsCssSelected(current_distribusi) + distribusi_live = IsDistribusiLive(current_distribusi) + # because the user has chosen to update his distribusi, we assume + # no selected css. + css_selected = False selectorvisible = SelectorVisible() template = render_template( @@ -290,6 +309,7 @@ def selector(): themeform=themeform, selectorform=selectorform, files_uploaded=files_uploaded, + distribusi_live=distribusi_live, css_selected=css_selected, selectorvisible=selectorvisible, ) diff --git a/verse/statuspengguna/helper.py b/verse/statuspengguna/helper.py index 75c2bfe..81227e0 100644 --- a/verse/statuspengguna/helper.py +++ b/verse/statuspengguna/helper.py @@ -13,12 +13,25 @@ def IsZipUploaded(distribusiname): if os.path.exists(os.path.join(userfolder, zipfilename)): print("folder with zipfile found, file uploaded") return True + print("distribusi folder has no zipfile") + return False + + +def IsDistribusiLive(distribusiname): + userfolder = os.path.join("stash", distribusiname) + if os.path.exists(userfolder): + zipfilename = "{}.zip".format(distribusiname) + if os.path.exists(os.path.join(userfolder, zipfilename)): + print("folder with zipfile found, file uploaded") + return False + if len(os.listdir(userfolder)) > 0: + return True print("distribusi folder is empty") return False def IsCssSelected(distribusiname): - userfolder = os.path.join("stash", distribusiname) + userfolder = os.path.join("themes/userstyles", distribusiname) if os.path.exists(userfolder): for file in os.listdir(userfolder): if file.endswith(".css"): @@ -33,9 +46,6 @@ def HasDistribusi(): if distribusi is None: print("no distribusi found") return False - if distribusi.visible is False: - print("distribusi not visible") - return False return True @@ -43,8 +53,6 @@ def CurrentDistribusi(): user = User.query.filter_by(email=current_user.email).first() if user.currentdistribusi is None: return "None" - if user.currentdistribusi == "new": - return "new" return user.currentdistribusi @@ -67,6 +75,17 @@ def ResetUserState(): flash("An error occured !", "danger") +def SelectCurrentDistribusi(distribusiname): + user = User.query.filter_by(email=current_user.email).first() + try: + user.currentdistribusi = distribusiname + db.session.commit() + except: + db.session.rollback() + selectorform.distribusis.errors.append("Unknown error occured!") + flash("An error occured !", "danger") + + # def IsThemeSelected # def IsCustomThemePresent # def IsDistribusiLive diff --git a/verse/templates/distribusiworkflow/editcss.html b/verse/templates/distribusiworkflow/editcss.html index de4a2ba..8b67066 100644 --- a/verse/templates/distribusiworkflow/editcss.html +++ b/verse/templates/distribusiworkflow/editcss.html @@ -1,6 +1,6 @@

(Optional) Step 3: Edit

- {% if files_uploaded %} + {% if files_uploaded or distribusi_live %}

Go to CSS editor

{% else %}

diff --git a/verse/templates/distribusiworkflow/launch.html b/verse/templates/distribusiworkflow/launch.html index a8b2449..9a18504 100644 --- a/verse/templates/distribusiworkflow/launch.html +++ b/verse/templates/distribusiworkflow/launch.html @@ -1,10 +1,10 @@

Step 4: Distribusi

-

Run distribusi on your files, this will generate your website and make +

Run distribusi on your files. This will generate your website and make your content public.

{{ distribusiform.csrf_token }} - {% if files_uploaded %} + {% if files_uploaded or distribusi_live %}
{{ distribusiform.submit }}
diff --git a/verse/templates/distribusiworkflow/theme.html b/verse/templates/distribusiworkflow/theme.html index 13f27cb..98bffa3 100644 --- a/verse/templates/distribusiworkflow/theme.html +++ b/verse/templates/distribusiworkflow/theme.html @@ -8,7 +8,7 @@ {{ themeform.theme.label }} {{ themeform.theme }} - {% if files_uploaded %} + {% if files_uploaded or distribusi_live %}
{{ themeform.save }}
diff --git a/verse/templates/editor.html b/verse/templates/editor.html index 0f31170..722ded2 100644 --- a/verse/templates/editor.html +++ b/verse/templates/editor.html @@ -19,7 +19,7 @@
- {% if files_uploaded %} + {% if files_uploaded or distribusi_live %}
{{ editorform.cssname.label }} {{ editorform.cssname }} diff --git a/verse/themes/userstyles/.gitignore b/verse/themes/userstyles/.gitignore new file mode 100644 index 0000000..94548af --- /dev/null +++ b/verse/themes/userstyles/.gitignore @@ -0,0 +1,3 @@ +* +*/ +!.gitignore diff --git a/verse/upload.py b/verse/upload.py index 04ef6ae..4fc3d16 100644 --- a/verse/upload.py +++ b/verse/upload.py @@ -1,16 +1,20 @@ import os import shutil from flask import flash +from flask_login import current_user from sqlalchemy.exc import ( IntegrityError, InvalidRequestError, ) +from app import db + from usermodel import User from distribusimodel import Distribusis -from flask_login import current_user + from statuspengguna.helper import CurrentDistribusi +from statuspengguna.helper import SelectCurrentDistribusi from forms.uploadform import UploadForm -from app import db + def UploadNewDistribusi(uploadfolder): @@ -39,7 +43,7 @@ def UploadNewDistribusi(uploadfolder): "distribusi name already exists!" ) flash("distribusi name already exists!", "warning") - + SelectCurrentDistribusi(newdistribusi.distribusiname) zipfilename = "{}.zip".format(newdistribusi.distribusiname) zipfile = uploadform.zipfile.data zipfile.save(os.path.join(uploadfolder, zipfilename))