|
|
@ -1,6 +1,6 @@ |
|
|
|
import os |
|
|
|
import shutil |
|
|
|
from flask import flash |
|
|
|
from flask import flash, render_template |
|
|
|
from flask_login import current_user |
|
|
|
from sqlalchemy.exc import ( |
|
|
|
DataError, |
|
|
@ -11,25 +11,70 @@ from sqlalchemy.exc import ( |
|
|
|
|
|
|
|
from usermodel import User |
|
|
|
from distribusimodel import Distribusis |
|
|
|
|
|
|
|
from distribusisinfo import DistribusisInfo |
|
|
|
|
|
|
|
from forms.selectorform import SelectorForm |
|
|
|
from statuspengguna.helper import HasDistribusi |
|
|
|
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 ( |
|
|
|
IsZipUploaded, |
|
|
|
CurrentDistribusi, |
|
|
|
HasDistribusi, |
|
|
|
IsDistribusiLive, |
|
|
|
DistribusiLimitReached, |
|
|
|
) |
|
|
|
|
|
|
|
from app import db |
|
|
|
|
|
|
|
|
|
|
|
def SelectorPage(): |
|
|
|
uploadform = UploadForm() |
|
|
|
selectorform = SelectorForm() |
|
|
|
selectorform.distribusis.choices = DistribusisInfo.userdistribusinames() |
|
|
|
current_distribusi = CurrentDistribusi() |
|
|
|
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 = CurrentDistribusi() |
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
def SelectNewDistribusi(): |
|
|
|
print("make a new distribusi") |
|
|
|
selectorform = SelectorForm() |
|
|
|
SelectCurrentDistribusi("new") |
|
|
|
return selectorform |
|
|
|
|
|
|
|
|
|
|
|
def SelectUpdateDistribusi(distribusiname): |
|
|
|
print(f"Update this distribusi {distribusiname}") |
|
|
|
selectorform = SelectorForm() |
|
|
|
SelectCurrentDistribusi(distribusiname) |
|
|
|
return selectorform |
|
|
|
|
|
|
|
|
|
|
|
def DeleteDistribusi(distribusiname): |
|
|
@ -49,10 +94,11 @@ def DeleteDistribusi(distribusiname): |
|
|
|
"themes/userthemes", distribusi.distribusiname |
|
|
|
) |
|
|
|
shutil.rmtree(cssfolder) |
|
|
|
selectorform.delete.errors.append("Distribusi deleted!") |
|
|
|
# SelectField error is list is a tuple?? why?? |
|
|
|
# selectorform.distribusis.errors.append("Distribusi deleted!") |
|
|
|
except (InvalidRequestError, DataError, InterfaceError, DatabaseError): |
|
|
|
db.session.rollback() |
|
|
|
selectorform.delete.errors.append("Unknown error occured!") |
|
|
|
# selectorform.distribusis.errors.append("Unknown error occured!") |
|
|
|
flash("An error occured !", "danger") |
|
|
|
return selectorform |
|
|
|
|
|
|
@ -84,3 +130,32 @@ def SelectorVisible(): |
|
|
|
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 = IsZipUploaded(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() |
|
|
|
limit_reached = DistribusiLimitReached() |
|
|
|
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 |
|
|
|