distribusi-verse/verse/distribusiselector.py

164 lines
5.5 KiB
Python
Raw Normal View History

2022-03-19 16:19:51 +01:00
import os
import shutil
2022-03-23 21:30:59 +01:00
from flask import flash, render_template
2022-03-19 16:19:51 +01:00
from flask_login import current_user
from sqlalchemy.exc import (
DataError,
DatabaseError,
InterfaceError,
InvalidRequestError,
)
from usermodel import User
from distribusimodel import Distribusis
2022-03-23 21:30:59 +01:00
from distribusisinfo import DistribusisInfo
2022-03-19 16:19:51 +01:00
from forms.selectorform import SelectorForm
2022-03-23 21:30:59 +01:00
from forms.uploadform import UploadForm
from forms.distribusiform import DistribusiForm
from forms.themeform import ThemeForm
from forms.publicthemeform import PublicThemeForm
# UserPengguna
from statuspengguna.helper import UserHelper
2022-03-23 21:30:59 +01:00
2022-03-19 16:19:51 +01:00
from app import db
def DistribusiSelector():
2022-03-23 21:30:59 +01:00
uploadform = UploadForm()
selectorform = SelectorForm()
selectorform.distribusis.choices = DistribusisInfo.userdistribusinames()
current_distribusi = UserHelper.current_distribusi()
2022-03-23 21:30:59 +01:00
if selectorform.validate_on_submit():
if selectorform.new.data:
SelectNewDistribusi()
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()
2022-03-23 21:30:59 +01:00
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.term.data = distribusi.term
uploadform.course.data = distribusi.course
uploadform.academicyear.data = distribusi.year
uploadform.tags.data = distribusi.tags
return uploadform
2022-03-19 16:19:51 +01:00
def SelectNewDistribusi():
print("make a new distribusi")
SelectCurrentDistribusi("new")
def SelectUpdateDistribusi(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)
2022-03-19 16:19:51 +01:00
cssfolder = os.path.join(
"themes/userthemes", distribusi.distribusiname
)
if os.path.exists(cssfolder):
shutil.rmtree(cssfolder)
2022-03-27 18:02:51 +02:00
if distribusi.publictheme is not None:
publicthemefolder = os.path.join(
"themes/publicthemes", distribusi.distribusiname
)
if os.path.exists(publicthemefolder):
shutil.rmtree(publicthemefolder)
2022-03-23 21:30:59 +01:00
# SelectField error is list is a tuple?? why??
# selectorform.distribusis.errors.append("Distribusi deleted!")
2022-03-19 16:19:51 +01:00
except (InvalidRequestError, DataError, InterfaceError, DatabaseError):
db.session.rollback()
2022-03-23 21:30:59 +01:00
# selectorform.distribusis.errors.append("Unknown error occured!")
2022-03-19 16:19:51 +01:00
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")
def DistribusiSelected():
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()
2022-03-19 16:19:51 +01:00
distribusi_selected = DistribusiSelected()
if distribusi_selected:
return False
if not has_distribusi:
return False
return True
2022-03-23 21:30:59 +01:00
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)
2022-03-23 21:30:59 +01:00
# 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()
2022-03-23 21:30:59 +01:00
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