|
|
@ -4,10 +4,10 @@ import shutil |
|
|
|
from flask import flash, render_template, redirect, url_for |
|
|
|
from flask_login import current_user |
|
|
|
from sqlalchemy.exc import ( |
|
|
|
DatabaseError, |
|
|
|
DataError, |
|
|
|
InterfaceError, |
|
|
|
InvalidRequestError, |
|
|
|
DatabaseError, |
|
|
|
DataError, |
|
|
|
InterfaceError, |
|
|
|
InvalidRequestError, |
|
|
|
) |
|
|
|
|
|
|
|
from app import db |
|
|
@ -25,148 +25,148 @@ from statuspengguna.helper import UserHelper |
|
|
|
|
|
|
|
|
|
|
|
def DistribusiSelector(): |
|
|
|
uploadform = UploadForm() |
|
|
|
selectorform = SelectorForm() |
|
|
|
selectorform.distribusis.choices = DistribusisInfo.userdistribusinames() |
|
|
|
current_distribusi = UserHelper.current_distribusi() |
|
|
|
if selectorform.validate_on_submit(): |
|
|
|
if selectorform.new.data: |
|
|
|
SelectNewDistribusi() |
|
|
|
if selectorform.describe.data: |
|
|
|
return SelectDescribeDistribusi(selectorform.distribusis.data) |
|
|
|
if selectorform.delete.data: |
|
|
|
selectorform = DeleteDistribusi(selectorform.distribusis.data) |
|
|
|
selectorform.distribusis.choices = ( |
|
|
|
DistribusisInfo.userdistribusinames() |
|
|
|
) |
|
|
|
if selectorform.update.data: |
|
|
|
SelectUpdateDistribusi(selectorform.distribusis.data) |
|
|
|
current_distribusi = UserHelper.current_distribusi() |
|
|
|
uploadform = AutoFillInUploadForm(uploadform, current_distribusi) |
|
|
|
|
|
|
|
return RenderDistribusiTemplate( |
|
|
|
selectorform, uploadform, current_distribusi |
|
|
|
) |
|
|
|
uploadform = UploadForm() |
|
|
|
selectorform = SelectorForm() |
|
|
|
selectorform.distribusis.choices = DistribusisInfo.userdistribusinames() |
|
|
|
current_distribusi = UserHelper.current_distribusi() |
|
|
|
if selectorform.validate_on_submit(): |
|
|
|
if selectorform.new.data: |
|
|
|
SelectNewDistribusi() |
|
|
|
if selectorform.describe.data: |
|
|
|
return SelectDescribeDistribusi(selectorform.distribusis.data) |
|
|
|
if selectorform.delete.data: |
|
|
|
selectorform = DeleteDistribusi(selectorform.distribusis.data) |
|
|
|
selectorform.distribusis.choices = ( |
|
|
|
DistribusisInfo.userdistribusinames() |
|
|
|
) |
|
|
|
if selectorform.update.data: |
|
|
|
SelectUpdateDistribusi(selectorform.distribusis.data) |
|
|
|
current_distribusi = UserHelper.current_distribusi() |
|
|
|
uploadform = AutoFillInUploadForm(uploadform, current_distribusi) |
|
|
|
|
|
|
|
return RenderDistribusiTemplate( |
|
|
|
selectorform, uploadform, current_distribusi |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
def AutoFillInUploadForm(uploadform, current_distribusi): |
|
|
|
distribusi = Distribusis.query.filter_by( |
|
|
|
distribusiname=current_distribusi |
|
|
|
).first() |
|
|
|
uploadform.sitename.data = distribusi.distribusiname |
|
|
|
uploadform.sitename.render_kw = {"readonly": True} |
|
|
|
uploadform.category.data = distribusi.category |
|
|
|
uploadform.year.data = distribusi.year |
|
|
|
uploadform.tags.data = distribusi.tags |
|
|
|
return uploadform |
|
|
|
distribusi = Distribusis.query.filter_by( |
|
|
|
distribusiname=current_distribusi |
|
|
|
).first() |
|
|
|
uploadform.sitename.data = distribusi.distribusiname |
|
|
|
uploadform.sitename.render_kw = {"readonly": True} |
|
|
|
uploadform.category.data = distribusi.category |
|
|
|
uploadform.year.data = distribusi.year |
|
|
|
uploadform.tags.data = distribusi.tags |
|
|
|
return uploadform |
|
|
|
|
|
|
|
|
|
|
|
def SelectNewDistribusi(): |
|
|
|
print("make a new distribusi") |
|
|
|
SelectCurrentDistribusi("new") |
|
|
|
print("make a new distribusi") |
|
|
|
SelectCurrentDistribusi("new") |
|
|
|
|
|
|
|
|
|
|
|
def SelectDescribeDistribusi(distribusiname): |
|
|
|
return redirect( |
|
|
|
url_for( |
|
|
|
"describer.show_distribusi_files", |
|
|
|
distribusiname=distribusiname, |
|
|
|
) |
|
|
|
) |
|
|
|
return redirect( |
|
|
|
url_for( |
|
|
|
"describer.show_distribusi_files", |
|
|
|
distribusiname=distribusiname, |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
def SelectUpdateDistribusi(distribusiname): |
|
|
|
print(f"Update this distribusi {distribusiname}") |
|
|
|
SelectCurrentDistribusi(distribusiname) |
|
|
|
print(f"Update this distribusi {distribusiname}") |
|
|
|
SelectCurrentDistribusi(distribusiname) |
|
|
|
|
|
|
|
|
|
|
|
def DeleteDistribusi(distribusiname): |
|
|
|
print(f"delete this distribusi {distribusiname}") |
|
|
|
selectorform = SelectorForm() |
|
|
|
try: |
|
|
|
user = User.query.filter_by(email=current_user.email).first() |
|
|
|
distribusi = Distribusis.query.filter_by( |
|
|
|
distribusiname=distribusiname |
|
|
|
).first() |
|
|
|
if distribusi.userid is user.id: |
|
|
|
db.session.delete(distribusi) |
|
|
|
db.session.commit() |
|
|
|
userfolder = os.path.join("stash", distribusi.distribusiname) |
|
|
|
if os.path.exists(userfolder): |
|
|
|
shutil.rmtree(userfolder) |
|
|
|
cssfolder = os.path.join( |
|
|
|
"themes/userthemes", distribusi.distribusiname |
|
|
|
) |
|
|
|
if os.path.exists(cssfolder): |
|
|
|
shutil.rmtree(cssfolder) |
|
|
|
if distribusi.publictheme is not None: |
|
|
|
publicthemefolder = os.path.join( |
|
|
|
"themes/publicthemes", distribusi.distribusiname |
|
|
|
) |
|
|
|
if os.path.exists(publicthemefolder): |
|
|
|
shutil.rmtree(publicthemefolder) |
|
|
|
# SelectField error is list is a tuple?? why?? |
|
|
|
# selectorform.distribusis.errors.append("Distribusi deleted!") |
|
|
|
except (InvalidRequestError, DataError, InterfaceError, DatabaseError): |
|
|
|
db.session.rollback() |
|
|
|
# selectorform.distribusis.errors.append("Unknown error occured!") |
|
|
|
flash("An error occured !", "danger") |
|
|
|
return selectorform |
|
|
|
print(f"delete this distribusi {distribusiname}") |
|
|
|
selectorform = SelectorForm() |
|
|
|
try: |
|
|
|
user = User.query.filter_by(email=current_user.email).first() |
|
|
|
distribusi = Distribusis.query.filter_by( |
|
|
|
distribusiname=distribusiname |
|
|
|
).first() |
|
|
|
if distribusi.userid is user.id: |
|
|
|
db.session.delete(distribusi) |
|
|
|
db.session.commit() |
|
|
|
userfolder = os.path.join("stash", distribusi.distribusiname) |
|
|
|
if os.path.exists(userfolder): |
|
|
|
shutil.rmtree(userfolder) |
|
|
|
cssfolder = os.path.join( |
|
|
|
"themes/userthemes", distribusi.distribusiname |
|
|
|
) |
|
|
|
if os.path.exists(cssfolder): |
|
|
|
shutil.rmtree(cssfolder) |
|
|
|
if distribusi.publictheme is not None: |
|
|
|
publicthemefolder = os.path.join( |
|
|
|
"themes/publicthemes", distribusi.distribusiname |
|
|
|
) |
|
|
|
if os.path.exists(publicthemefolder): |
|
|
|
shutil.rmtree(publicthemefolder) |
|
|
|
# SelectField error is list is a tuple?? why?? |
|
|
|
# selectorform.distribusis.errors.append("Distribusi deleted!") |
|
|
|
except (InvalidRequestError, DataError, InterfaceError, DatabaseError): |
|
|
|
db.session.rollback() |
|
|
|
# selectorform.distribusis.errors.append("Unknown error occured!") |
|
|
|
flash("An error occured !", "danger") |
|
|
|
return selectorform |
|
|
|
|
|
|
|
|
|
|
|
def SelectCurrentDistribusi(distribusiname): |
|
|
|
if not current_user.is_authenticated: |
|
|
|
return |
|
|
|
user = User.query.filter_by(email=current_user.email).first() |
|
|
|
try: |
|
|
|
user.currentdistribusi = distribusiname |
|
|
|
db.session.commit() |
|
|
|
except (InvalidRequestError, DataError, InterfaceError, DatabaseError): |
|
|
|
db.session.rollback() |
|
|
|
flash("An error occured !", "danger") |
|
|
|
if not current_user.is_authenticated: |
|
|
|
return |
|
|
|
user = User.query.filter_by(email=current_user.email).first() |
|
|
|
try: |
|
|
|
user.currentdistribusi = distribusiname |
|
|
|
db.session.commit() |
|
|
|
except (InvalidRequestError, DataError, InterfaceError, DatabaseError): |
|
|
|
db.session.rollback() |
|
|
|
flash("An error occured !", "danger") |
|
|
|
|
|
|
|
|
|
|
|
def DistribusiSelected(): |
|
|
|
user = User.query.filter_by(email=current_user.email).first() |
|
|
|
if user.currentdistribusi is None: |
|
|
|
return False |
|
|
|
return True |
|
|
|
user = User.query.filter_by(email=current_user.email).first() |
|
|
|
if user.currentdistribusi is None: |
|
|
|
return False |
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
def SelectorVisible(): |
|
|
|
has_distribusi = UserHelper.has_distribusi() |
|
|
|
distribusi_selected = DistribusiSelected() |
|
|
|
if distribusi_selected: |
|
|
|
return False |
|
|
|
if not has_distribusi: |
|
|
|
return False |
|
|
|
return True |
|
|
|
has_distribusi = UserHelper.has_distribusi() |
|
|
|
distribusi_selected = DistribusiSelected() |
|
|
|
if distribusi_selected: |
|
|
|
return False |
|
|
|
if not has_distribusi: |
|
|
|
return False |
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
def RenderDistribusiTemplate(selectorform, uploadform, current_distribusi): |
|
|
|
distribusiform = DistribusiForm() |
|
|
|
themeform = ThemeForm() |
|
|
|
publicthemeform = PublicThemeForm() |
|
|
|
publicthemeform.publicthemes.choices = DistribusisInfo.publicthemes() |
|
|
|
files_uploaded = UserHelper.is_zip_uploaded(current_distribusi) |
|
|
|
distribusi_live = UserHelper.is_distribusi_live(current_distribusi) |
|
|
|
|
|
|
|
# because the user has chosen to update his distribusi, we assume |
|
|
|
# no selected css. |
|
|
|
css_selected = False |
|
|
|
selectorvisible = SelectorVisible() |
|
|
|
limit_reached = UserHelper.distribusi_limit_reached() |
|
|
|
template = render_template( |
|
|
|
"distribusi.html", |
|
|
|
uploadform=uploadform, |
|
|
|
distribusiform=distribusiform, |
|
|
|
themeform=themeform, |
|
|
|
publicthemeform=publicthemeform, |
|
|
|
selectorform=selectorform, |
|
|
|
files_uploaded=files_uploaded, |
|
|
|
distribusi_live=distribusi_live, |
|
|
|
css_selected=css_selected, |
|
|
|
selectorvisible=selectorvisible, |
|
|
|
limit_reached=limit_reached, |
|
|
|
) |
|
|
|
return template |
|
|
|
distribusiform = DistribusiForm() |
|
|
|
themeform = ThemeForm() |
|
|
|
publicthemeform = PublicThemeForm() |
|
|
|
publicthemeform.publicthemes.choices = DistribusisInfo.publicthemes() |
|
|
|
files_uploaded = UserHelper.is_zip_uploaded(current_distribusi) |
|
|
|
distribusi_live = UserHelper.is_distribusi_live(current_distribusi) |
|
|
|
|
|
|
|
# because the user has chosen to update his distribusi, we assume |
|
|
|
# no selected css. |
|
|
|
css_selected = False |
|
|
|
selectorvisible = SelectorVisible() |
|
|
|
limit_reached = UserHelper.distribusi_limit_reached() |
|
|
|
template = render_template( |
|
|
|
"distribusi.html", |
|
|
|
uploadform=uploadform, |
|
|
|
distribusiform=distribusiform, |
|
|
|
themeform=themeform, |
|
|
|
publicthemeform=publicthemeform, |
|
|
|
selectorform=selectorform, |
|
|
|
files_uploaded=files_uploaded, |
|
|
|
distribusi_live=distribusi_live, |
|
|
|
css_selected=css_selected, |
|
|
|
selectorvisible=selectorvisible, |
|
|
|
limit_reached=limit_reached, |
|
|
|
) |
|
|
|
return template |
|
|
|