diff --git a/app/__init__.py b/app/__init__.py index 9d57e9e41..c5353e032 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -30,7 +30,8 @@ moment = Moment() def create_app(config_class=Config): - app = Flask(__name__) + app = Flask(__name__, static_url_path="/ScoDoc/static", static_folder="static") + app.logger.setLevel(logging.DEBUG) app.config.from_object(config_class) db.init_app(app) migrate.init_app(app, db) diff --git a/app/main/routes.py b/app/main/routes.py index a0235849f..5d4b9e5a3 100644 --- a/app/main/routes.py +++ b/app/main/routes.py @@ -20,7 +20,9 @@ context = None @bp.route("/") @bp.route("/index") def index(): - return render_template("main/index.html", title=u"Essai Flask") + return render_template( + "main/index.html", title=u"Essai Flask", current_app=flask.current_app + ) @bp.route("/test_vue") diff --git a/app/scodoc/html_sco_header.py b/app/scodoc/html_sco_header.py index 13ad4186b..ca50b1770 100644 --- a/app/scodoc/html_sco_header.py +++ b/app/scodoc/html_sco_header.py @@ -64,7 +64,7 @@ def standard_html_header(): - + %s""" % ( scu.SCO_ENCODING, diff --git a/app/scodoc/notes_table.py b/app/scodoc/notes_table.py index 7caab4916..1abdb72e9 100644 --- a/app/scodoc/notes_table.py +++ b/app/scodoc/notes_table.py @@ -177,7 +177,7 @@ class NotesTable: context, "use_ue_coefs", formsemestre_id ) # Infos sur les etudiants - self.inscrlist = context.do_formsemestre_inscription_list( + self.inscrlist = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args={"formsemestre_id": formsemestre_id} ) # infos identite etudiant diff --git a/app/scodoc/sco_compute_moy.py b/app/scodoc/sco_compute_moy.py index f5f6496c0..9c6714791 100644 --- a/app/scodoc/sco_compute_moy.py +++ b/app/scodoc/sco_compute_moy.py @@ -376,7 +376,7 @@ def do_formsemestre_moyennes(context, nt, formsemestre_id): liste des moduleimpls avec notes en attente. """ # sem = sco_formsemestre.get_formsemestre(context, formsemestre_id) - # inscr = context.do_formsemestre_inscription_list( + # inscr = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, # args={"formsemestre_id": formsemestre_id} # ) # etudids = [x["etudid"] for x in inscr] diff --git a/app/scodoc/sco_dept.py b/app/scodoc/sco_dept.py index 8d422a758..6720c96d7 100644 --- a/app/scodoc/sco_dept.py +++ b/app/scodoc/sco_dept.py @@ -35,7 +35,9 @@ import sco_news import sco_up_to_date import sco_formsemestre from gen_tables import GenTable -from sco_permissions import ScoEtudInscrit, ScoEditApo +from sco_permissions import Permission, ScoEtudInscrit, ScoEditApo +import html_sco_header +import sco_formsemestre_inscriptions def index_html(context, REQUEST=None, showcodes=0, showsemtable=0): @@ -78,7 +80,9 @@ def index_html(context, REQUEST=None, showcodes=0, showsemtable=0): sem["tmpcode"] = "" # Nombre d'inscrits: args = {"formsemestre_id": sem["formsemestre_id"]} - ins = context.Notes.do_formsemestre_inscription_list(args=args) + ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list( + context, args=args + ) nb = len(ins) # nb etudiants sem["nb_inscrits"] = nb if nb > 0: diff --git a/app/scodoc/sco_formsemestre.py b/app/scodoc/sco_formsemestre.py index c38d5862e..e3896a789 100644 --- a/app/scodoc/sco_formsemestre.py +++ b/app/scodoc/sco_formsemestre.py @@ -130,8 +130,9 @@ def formsemestre_enrich(context, sem): # imports ici pour eviter refs circulaires import sco_formsemestre_edit import scolars + from app.views import notes - F = context.formation_list(args={"formation_id": sem["formation_id"]})[0] + F = notes.formation_list(context, args={"formation_id": sem["formation_id"]})[0] parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"]) # 'S1', 'S2', ... ou '' pour les monosemestres if sem["semestre_id"] != NO_SEMESTRE_ID: diff --git a/app/scodoc/sco_formsemestre_exterieurs.py b/app/scodoc/sco_formsemestre_exterieurs.py index e9f6d38d8..6794ac116 100644 --- a/app/scodoc/sco_formsemestre_exterieurs.py +++ b/app/scodoc/sco_formsemestre_exterieurs.py @@ -100,7 +100,7 @@ def formsemestre_ext_create_form(context, etudid, formsemestre_id, REQUEST=None) # et seulement si pas inscrit au même semestre_id d'un semestre ordinaire ScoDoc. # Les autres situations (eg redoublements en changeant d'établissement) # doivent être gérées par les validations de semestres "antérieurs" - insem = context.do_formsemestre_inscription_list( + insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args={"etudid": etudid, "etat": "I"} ) semlist = [ diff --git a/app/scodoc/sco_formsemestre_inscriptions.py b/app/scodoc/sco_formsemestre_inscriptions.py index 6acc2961f..02acb2c5c 100644 --- a/app/scodoc/sco_formsemestre_inscriptions.py +++ b/app/scodoc/sco_formsemestre_inscriptions.py @@ -33,6 +33,7 @@ from notes_log import log from sco_exceptions import ScoValueError from sco_permissions import ScoEtudInscrit from sco_codes_parcours import UE_STANDARD, UE_SPORT, UE_TYPE_NAME +import notesdb as ndb from notesdb import ScoDocCursor, DateISOtoDMY, DateDMYtoISO from TrivialFormulator import TrivialFormulator, TF @@ -43,6 +44,145 @@ import sco_formsemestre import sco_moduleimpl import sco_groups +# --- Gestion des inscriptions aux semestres +_formsemestre_inscriptionEditor = ndb.EditableTable( + "notes_formsemestre_inscription", + "formsemestre_inscription_id", + ("formsemestre_inscription_id", "etudid", "formsemestre_id", "etat", "etape"), + sortkey="formsemestre_id", +) + + +def do_formsemestre_inscription_list(context, *args, **kw): + "list formsemestre_inscriptions" + cnx = ndb.GetDBConnexion() + return _formsemestre_inscriptionEditor.list(cnx, *args, **kw) + + +def do_formsemestre_inscription_create(context, args, REQUEST, method=None): + "create a formsemestre_inscription (and sco event)" + cnx = ndb.GetDBConnexion() + log("do_formsemestre_inscription_create: args=%s" % str(args)) + sems = sco_formsemestre.do_formsemestre_list( + context, {"formsemestre_id": args["formsemestre_id"]} + ) + if len(sems) != 1: + raise ScoValueError("code de semestre invalide: %s" % args["formsemestre_id"]) + sem = sems[0] + # check lock + if sem["etat"] != "1": + raise ScoValueError("inscription: semestre verrouille") + # + r = _formsemestre_inscriptionEditor.create(cnx, args) + # Evenement + scolars.scolar_events_create( + cnx, + args={ + "etudid": args["etudid"], + "event_date": time.strftime("%d/%m/%Y"), + "formsemestre_id": args["formsemestre_id"], + "event_type": "INSCRIPTION", + }, + ) + # Log etudiant + logdb( + REQUEST, + cnx, + method=method, + etudid=args["etudid"], + msg="inscription en semestre %s" % args["formsemestre_id"], + commit=False, + ) + # + sco_core.inval_cache( + context, formsemestre_id=args["formsemestre_id"] + ) # > inscription au semestre + return r + + +def do_formsemestre_inscription_delete(context, oid, formsemestre_id=None): + "delete formsemestre_inscription" + cnx = ndb.GetDBConnexion() + _formsemestre_inscriptionEditor.delete(cnx, oid) + + sco_core.inval_cache( + context, formsemestre_id=formsemestre_id + ) # > desinscription du semestre + + +def do_formsemestre_inscription_edit(context, args=None, formsemestre_id=None): + "edit a formsemestre_inscription" + cnx = ndb.GetDBConnexion() + _formsemestre_inscriptionEditor.edit(cnx, args) + sco_core.inval_cache( + context, formsemestre_id=formsemestre_id + ) # > modif inscription semestre (demission ?) + + +def do_formsemestre_desinscription(context, etudid, formsemestre_id, REQUEST=None): + """Désinscription d'un étudiant. + Si semestre extérieur et dernier inscrit, suppression de ce semestre. + """ + sem = sco_formsemestre.get_formsemestre(context, formsemestre_id) + # -- check lock + if sem["etat"] != "1": + raise ScoValueError("desinscription impossible: semestre verrouille") + + # -- Si decisions de jury, desinscription interdite + nt = sco_core.get_notes_cache(context).get_NotesTable(context, formsemestre_id) + if nt.etud_has_decision(etudid): + raise ScoValueError( + "desinscription impossible: l'étudiant a une décision de jury (la supprimer avant si nécessaire)" + ) + + insem = do_formsemestre_inscription_list(context, + args={"formsemestre_id": formsemestre_id, "etudid": etudid} + ) + if not insem: + raise ScoValueError("%s n'est pas inscrit au semestre !" % etudid) + insem = insem[0] + # -- desinscription de tous les modules + cnx = ndb.GetDBConnexion() + cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) + cursor.execute( + "select moduleimpl_inscription_id from notes_moduleimpl_inscription Im, notes_moduleimpl M where Im.etudid=%(etudid)s and Im.moduleimpl_id = M.moduleimpl_id and M.formsemestre_id = %(formsemestre_id)s", + {"etudid": etudid, "formsemestre_id": formsemestre_id}, + ) + res = cursor.fetchall() + moduleimpl_inscription_ids = [x[0] for x in res] + for moduleimpl_inscription_id in moduleimpl_inscription_ids: + sco_moduleimpl.do_moduleimpl_inscription_delete( + context, moduleimpl_inscription_id, formsemestre_id=formsemestre_id + ) + # -- desincription du semestre + do_formsemestre_inscription_delete( + context, insem["formsemestre_inscription_id"], formsemestre_id=formsemestre_id + ) + # --- Semestre extérieur + if sem["modalite"] == "EXT": + inscrits = do_formsemestre_inscription_list(context, + args={"formsemestre_id": formsemestre_id} + ) + nbinscrits = len(inscrits) + if nbinscrits == 0: + log( + "do_formsemestre_desinscription: suppression du semestre extérieur %s" + % formsemestre_id + ) + sco_formsemestre_edit.do_formsemestre_delete( + context, formsemestre_id, REQUEST=REQUEST + ) + + if REQUEST: + logdb( + REQUEST, + cnx, + method="formsemestre_desinscription", + etudid=etudid, + msg="desinscription semestre %s" % formsemestre_id, + commit=False, + ) + def do_formsemestre_inscription_with_modules( context, @@ -61,7 +201,7 @@ def do_formsemestre_inscription_with_modules( args = {"formsemestre_id": formsemestre_id, "etudid": etudid} if etat is not None: args["etat"] = etat - context.do_formsemestre_inscription_create(args, REQUEST, method=method) + do_formsemestre_inscription_create(context, args, REQUEST, method=method) log( "do_formsemestre_inscription_with_modules: etudid=%s formsemestre_id=%s" % (etudid, formsemestre_id) @@ -135,7 +275,7 @@ def formsemestre_inscription_with_modules_form( ) F = html_sco_header.sco_footer(context, REQUEST) sems = sco_formsemestre.do_formsemestre_list(context, args={"etat": "1"}) - insem = context.do_formsemestre_inscription_list( + insem = do_formsemestre_inscription_list(context, args={"etudid": etudid, "etat": "I"} ) if sems: diff --git a/app/scodoc/sco_formsemestre_status.py b/app/scodoc/sco_formsemestre_status.py index b67c770f7..1e3d8e02a 100644 --- a/app/scodoc/sco_formsemestre_status.py +++ b/app/scodoc/sco_formsemestre_status.py @@ -579,7 +579,7 @@ def fill_formsemestre(context, sem, REQUEST=None): sco_formsemestre.formsemestre_etape_apo_str(sem) or "Pas de code étape" ) - inscrits = context.Notes.do_formsemestre_inscription_list( + inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args={"formsemestre_id": formsemestre_id} ) sem["nbinscrits"] = len(inscrits) @@ -977,7 +977,7 @@ def formsemestre_status(context, formsemestre_id=None, REQUEST=None): Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list( context, formsemestre_id=formsemestre_id ) - # inscrits = context.do_formsemestre_inscription_list( + # inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, # args={"formsemestre_id": formsemestre_id} # ) prev_ue_id = None diff --git a/app/scodoc/sco_formsemestre_validation.py b/app/scodoc/sco_formsemestre_validation.py index dd3cd1c3d..360838a4e 100644 --- a/app/scodoc/sco_formsemestre_validation.py +++ b/app/scodoc/sco_formsemestre_validation.py @@ -864,7 +864,7 @@ def do_formsemestre_validation_auto(context, formsemestre_id, REQUEST): for etudid in etudids: etud = scolars.get_etud_info(etudid=etudid, filled=True)[0] Se = sco_parcours_dut.SituationEtudParcours(context, etud, formsemestre_id) - ins = context.do_formsemestre_inscription_list( + ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, {"etudid": etudid, "formsemestre_id": formsemestre_id} )[0] @@ -966,7 +966,7 @@ def formsemestre_fix_validation_ues(context, formsemestre_id, REQUEST=None): for etudid in etudids: etud = scolars.get_etud_info(etudid=etudid, filled=True)[0] Se = sco_parcours_dut.SituationEtudParcours(context, etud, formsemestre_id) - ins = context.do_formsemestre_inscription_list( + ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, {"etudid": etudid, "formsemestre_id": formsemestre_id} )[0] decision_sem = nt.get_etud_decision_sem(etudid) diff --git a/app/scodoc/sco_groups.py b/app/scodoc/sco_groups.py index 7bc3ac175..00a983066 100644 --- a/app/scodoc/sco_groups.py +++ b/app/scodoc/sco_groups.py @@ -1321,7 +1321,7 @@ def create_etapes_partition(context, formsemestre_id, partition_name="apo_etapes vides ne sont pas supprimés). """ log("create_etapes_partition(%s)" % formsemestre_id) - ins = context.do_formsemestre_inscription_list( + ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args={"formsemestre_id": formsemestre_id} ) etapes = {i["etape"] for i in ins if i["etape"]} diff --git a/app/scodoc/sco_inscr_passage.py b/app/scodoc/sco_inscr_passage.py index 72176cb99..068450d99 100644 --- a/app/scodoc/sco_inscr_passage.py +++ b/app/scodoc/sco_inscr_passage.py @@ -110,7 +110,7 @@ def list_inscrits(context, formsemestre_id, with_dems=False): ) # optimized else: args = {"formsemestre_id": formsemestre_id} - ins = context.Notes.do_formsemestre_inscription_list(args=args) + ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args=args) inscr = {} for i in ins: etudid = i["etudid"] diff --git a/app/scodoc/sco_liste_notes.py b/app/scodoc/sco_liste_notes.py index 1ea7f709e..abf6bca9b 100644 --- a/app/scodoc/sco_liste_notes.py +++ b/app/scodoc/sco_liste_notes.py @@ -286,7 +286,7 @@ def _make_table_notes( # infos identite etudiant etud = scolars.get_etud_info(etudid=etudid, filled=1)[0] # infos inscription - inscr = context.do_formsemestre_inscription_list( + inscr = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, {"etudid": etudid, "formsemestre_id": M["formsemestre_id"]} )[0] diff --git a/app/scodoc/sco_moduleimpl.py b/app/scodoc/sco_moduleimpl.py index 31bb0e881..fb84f0a9a 100644 --- a/app/scodoc/sco_moduleimpl.py +++ b/app/scodoc/sco_moduleimpl.py @@ -232,7 +232,7 @@ def do_moduleimpl_inscrit_etuds( """ # Verifie qu'ils sont tous bien inscrits au semestre for etudid in etudids: - insem = context.do_formsemestre_inscription_list( + insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args={"formsemestre_id": formsemestre_id, "etudid": etudid} ) if not insem: diff --git a/app/scodoc/sco_moduleimpl_inscriptions.py b/app/scodoc/sco_moduleimpl_inscriptions.py index d3d768e73..65ea7dc0a 100644 --- a/app/scodoc/sco_moduleimpl_inscriptions.py +++ b/app/scodoc/sco_moduleimpl_inscriptions.py @@ -238,7 +238,7 @@ def moduleimpl_inscriptions_stats(context, formsemestre_id, REQUEST=None): authuser = REQUEST.AUTHENTICATED_USER sem = sco_formsemestre.get_formsemestre(context, formsemestre_id) - inscrits = context.do_formsemestre_inscription_list( + inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args={"formsemestre_id": formsemestre_id} ) set_all = set([x["etudid"] for x in inscrits]) @@ -465,7 +465,7 @@ def get_etuds_with_capitalized_ue(context, formsemestre_id): nt = sco_core.get_notes_cache(context).get_NotesTable( context, formsemestre_id ) # > get_ues, get_etud_ue_status - inscrits = context.do_formsemestre_inscription_list( + inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args={"formsemestre_id": formsemestre_id} ) ues = nt.get_ues() @@ -544,7 +544,7 @@ def do_etud_desinscrit_ue(context, etudid, formsemestre_id, ue_id, REQUEST=None) def do_etud_inscrit_ue(context, etudid, formsemestre_id, ue_id, REQUEST=None): """Incrit l'etudiant de tous les modules de cette UE dans ce semestre.""" # Verifie qu'il est bien inscrit au semestre - insem = context.do_formsemestre_inscription_list( + insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args={"formsemestre_id": formsemestre_id, "etudid": etudid} ) if not insem: diff --git a/app/scodoc/sco_photos.py b/app/scodoc/sco_photos.py index b6d5d917a..549ba48e0 100644 --- a/app/scodoc/sco_photos.py +++ b/app/scodoc/sco_photos.py @@ -64,7 +64,7 @@ from scolog import logdb # Full paths on server's filesystem. Something like "/opt/scodoc/var/scodoc/photos" PHOTO_DIR = os.path.join(Config.INSTANCE_HOME, "var", "scodoc", "photos") -ICONS_DIR = os.path.join(SCO_SRC_DIR, "static", "icons") +ICONS_DIR = os.path.join(SCO_SRC_DIR, "app", "static", "icons") UNKNOWN_IMAGE_PATH = os.path.join(ICONS_DIR, "unknown.jpg") UNKNOWN_IMAGE_URL = "get_photo_image?etudid=" # with empty etudid => unknown face image IMAGE_EXT = ".jpg" diff --git a/app/scodoc/sco_placement.py b/app/scodoc/sco_placement.py index e0d561124..ac906fd99 100644 --- a/app/scodoc/sco_placement.py +++ b/app/scodoc/sco_placement.py @@ -298,7 +298,7 @@ def do_placement(context, REQUEST): 0 ] # XXX utiliser ZScolar (parent) # infos inscription - inscr = context.do_formsemestre_inscription_list( + inscr = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, {"etudid": etudid, "formsemestre_id": M["formsemestre_id"]} )[0] if inscr["etat"] != "D": diff --git a/app/scodoc/sco_report.py b/app/scodoc/sco_report.py index e8fce7431..aafcf0708 100644 --- a/app/scodoc/sco_report.py +++ b/app/scodoc/sco_report.py @@ -451,7 +451,7 @@ def table_suivi_cohorte( logt("B: etuds sets") sem["members"] = orig_set for s in sems: - ins = context.do_formsemestre_inscription_list( + ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args={"formsemestre_id": s["formsemestre_id"]} ) # sans dems inset = set([i["etudid"] for i in ins]) diff --git a/app/scodoc/sco_saisie_notes.py b/app/scodoc/sco_saisie_notes.py index 732952ca3..44cca3900 100644 --- a/app/scodoc/sco_saisie_notes.py +++ b/app/scodoc/sco_saisie_notes.py @@ -1006,7 +1006,7 @@ def _get_sorted_etuds(context, E, etudids, formsemestre_id): scolars.format_etud_ident(e) etuds.append(e) # infos inscription dans ce semestre - e["inscr"] = context.do_formsemestre_inscription_list( + e["inscr"] = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, {"etudid": etudid, "formsemestre_id": formsemestre_id} )[0] # Groupes auxquels appartient cet étudiant: diff --git a/app/scodoc/sco_synchro_etuds.py b/app/scodoc/sco_synchro_etuds.py index 71bd12a34..1cb2456dd 100644 --- a/app/scodoc/sco_synchro_etuds.py +++ b/app/scodoc/sco_synchro_etuds.py @@ -770,7 +770,7 @@ def update_etape_formsemestre_inscription(context, ins, etud): """ if etud["etape"] != ins["etape"]: ins["etape"] = etud["etape"] - context.do_formsemestre_inscription_edit(args=ins) + sco_formsemestre_inscriptions.do_formsemestre_inscription_edit(context, args=ins) def formsemestre_import_etud_admission( @@ -783,7 +783,7 @@ def formsemestre_import_etud_admission( N'affecte pas les etudiants inconnus sur le portail. """ sem = sco_formsemestre.get_formsemestre(context, formsemestre_id) - ins = context.do_formsemestre_inscription_list({"formsemestre_id": formsemestre_id}) + ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, {"formsemestre_id": formsemestre_id}) log( "formsemestre_import_etud_admission: %s (%d etuds)" % (formsemestre_id, len(ins)) diff --git a/app/scodoc/sco_utils.py b/app/scodoc/sco_utils.py index aec571c40..e81e431b6 100644 --- a/app/scodoc/sco_utils.py +++ b/app/scodoc/sco_utils.py @@ -234,7 +234,7 @@ if not os.path.exists(SCO_TMP_DIR): # ----- Les logos: /opt/scodoc/var/scodoc/config/logos SCODOC_LOGOS_DIR = os.path.join(SCODOC_CFG_DIR, "logos") -# Dans les sources: +# Racine projet: /.../ScoDoc/ SCO_SRC_DIR = os.path.join(Config.INSTANCE_HOME, "Products", "ScoDoc") # - Les outils distribués SCO_TOOLS_DIR = os.path.join(SCO_SRC_DIR, "config") @@ -820,7 +820,7 @@ def icontag(name, file_format="png", **attrs): """ if ("width" not in attrs) or ("height" not in attrs): if name not in ICONSIZES: - img_file = SCO_SRC_DIR + "/static/icons/%s.%s" % (name, file_format) + img_file = SCO_SRC_DIR + "/app/static/icons/%s.%s" % (name, file_format) im = PILImage.open(img_file) width, height = im.size[0], im.size[1] ICONSIZES[name] = (width, height) # cache diff --git a/app/scodoc/scolars.py b/app/scodoc/scolars.py index 6c7e8f053..3f632cae3 100644 --- a/app/scodoc/scolars.py +++ b/app/scodoc/scolars.py @@ -926,7 +926,7 @@ def fillEtudsInfo(context, etuds): format_etud_ident(etud) # Semestres dans lesquel il est inscrit - ins = context.Notes.do_formsemestre_inscription_list({"etudid": etudid}) + ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, {"etudid": etudid}) etud["ins"] = ins sems = [] cursem = None # semestre "courant" ou il est inscrit diff --git a/static/DataTables/ColReorder-1.3.3/css/colReorder.bootstrap.css b/app/static/DataTables/ColReorder-1.3.3/css/colReorder.bootstrap.css similarity index 100% rename from static/DataTables/ColReorder-1.3.3/css/colReorder.bootstrap.css rename to app/static/DataTables/ColReorder-1.3.3/css/colReorder.bootstrap.css diff --git a/static/DataTables/ColReorder-1.3.3/css/colReorder.bootstrap.min.css b/app/static/DataTables/ColReorder-1.3.3/css/colReorder.bootstrap.min.css similarity index 100% rename from static/DataTables/ColReorder-1.3.3/css/colReorder.bootstrap.min.css rename to app/static/DataTables/ColReorder-1.3.3/css/colReorder.bootstrap.min.css diff --git a/static/DataTables/ColReorder-1.3.3/css/colReorder.dataTables.css b/app/static/DataTables/ColReorder-1.3.3/css/colReorder.dataTables.css similarity index 100% rename from static/DataTables/ColReorder-1.3.3/css/colReorder.dataTables.css rename to app/static/DataTables/ColReorder-1.3.3/css/colReorder.dataTables.css diff --git a/static/DataTables/ColReorder-1.3.3/css/colReorder.dataTables.min.css b/app/static/DataTables/ColReorder-1.3.3/css/colReorder.dataTables.min.css similarity index 100% rename from static/DataTables/ColReorder-1.3.3/css/colReorder.dataTables.min.css rename to app/static/DataTables/ColReorder-1.3.3/css/colReorder.dataTables.min.css diff --git a/static/DataTables/ColReorder-1.3.3/css/colReorder.foundation.css b/app/static/DataTables/ColReorder-1.3.3/css/colReorder.foundation.css similarity index 100% rename from static/DataTables/ColReorder-1.3.3/css/colReorder.foundation.css rename to app/static/DataTables/ColReorder-1.3.3/css/colReorder.foundation.css diff --git a/static/DataTables/ColReorder-1.3.3/css/colReorder.foundation.min.css b/app/static/DataTables/ColReorder-1.3.3/css/colReorder.foundation.min.css similarity index 100% rename from static/DataTables/ColReorder-1.3.3/css/colReorder.foundation.min.css rename to app/static/DataTables/ColReorder-1.3.3/css/colReorder.foundation.min.css diff --git a/static/DataTables/ColReorder-1.3.3/css/colReorder.jqueryui.css b/app/static/DataTables/ColReorder-1.3.3/css/colReorder.jqueryui.css similarity index 100% rename from static/DataTables/ColReorder-1.3.3/css/colReorder.jqueryui.css rename to app/static/DataTables/ColReorder-1.3.3/css/colReorder.jqueryui.css diff --git a/static/DataTables/ColReorder-1.3.3/css/colReorder.jqueryui.min.css b/app/static/DataTables/ColReorder-1.3.3/css/colReorder.jqueryui.min.css similarity index 100% rename from static/DataTables/ColReorder-1.3.3/css/colReorder.jqueryui.min.css rename to app/static/DataTables/ColReorder-1.3.3/css/colReorder.jqueryui.min.css diff --git a/static/DataTables/ColReorder-1.3.3/js/dataTables.colReorder.js b/app/static/DataTables/ColReorder-1.3.3/js/dataTables.colReorder.js similarity index 100% rename from static/DataTables/ColReorder-1.3.3/js/dataTables.colReorder.js rename to app/static/DataTables/ColReorder-1.3.3/js/dataTables.colReorder.js diff --git a/static/DataTables/ColReorder-1.3.3/js/dataTables.colReorder.min.js b/app/static/DataTables/ColReorder-1.3.3/js/dataTables.colReorder.min.js similarity index 100% rename from static/DataTables/ColReorder-1.3.3/js/dataTables.colReorder.min.js rename to app/static/DataTables/ColReorder-1.3.3/js/dataTables.colReorder.min.js diff --git a/static/DataTables/DataTables-1.10.15/css/dataTables.bootstrap.css b/app/static/DataTables/DataTables-1.10.15/css/dataTables.bootstrap.css similarity index 100% rename from static/DataTables/DataTables-1.10.15/css/dataTables.bootstrap.css rename to app/static/DataTables/DataTables-1.10.15/css/dataTables.bootstrap.css diff --git a/static/DataTables/DataTables-1.10.15/css/dataTables.bootstrap.min.css b/app/static/DataTables/DataTables-1.10.15/css/dataTables.bootstrap.min.css similarity index 100% rename from static/DataTables/DataTables-1.10.15/css/dataTables.bootstrap.min.css rename to app/static/DataTables/DataTables-1.10.15/css/dataTables.bootstrap.min.css diff --git a/static/DataTables/DataTables-1.10.15/css/dataTables.foundation.css b/app/static/DataTables/DataTables-1.10.15/css/dataTables.foundation.css similarity index 100% rename from static/DataTables/DataTables-1.10.15/css/dataTables.foundation.css rename to app/static/DataTables/DataTables-1.10.15/css/dataTables.foundation.css diff --git a/static/DataTables/DataTables-1.10.15/css/dataTables.foundation.min.css b/app/static/DataTables/DataTables-1.10.15/css/dataTables.foundation.min.css similarity index 100% rename from static/DataTables/DataTables-1.10.15/css/dataTables.foundation.min.css rename to app/static/DataTables/DataTables-1.10.15/css/dataTables.foundation.min.css diff --git a/static/DataTables/DataTables-1.10.15/css/dataTables.jqueryui.css b/app/static/DataTables/DataTables-1.10.15/css/dataTables.jqueryui.css similarity index 100% rename from static/DataTables/DataTables-1.10.15/css/dataTables.jqueryui.css rename to app/static/DataTables/DataTables-1.10.15/css/dataTables.jqueryui.css diff --git a/static/DataTables/DataTables-1.10.15/css/dataTables.jqueryui.min.css b/app/static/DataTables/DataTables-1.10.15/css/dataTables.jqueryui.min.css similarity index 100% rename from static/DataTables/DataTables-1.10.15/css/dataTables.jqueryui.min.css rename to app/static/DataTables/DataTables-1.10.15/css/dataTables.jqueryui.min.css diff --git a/static/DataTables/DataTables-1.10.15/css/dataTables.semanticui.css b/app/static/DataTables/DataTables-1.10.15/css/dataTables.semanticui.css similarity index 100% rename from static/DataTables/DataTables-1.10.15/css/dataTables.semanticui.css rename to app/static/DataTables/DataTables-1.10.15/css/dataTables.semanticui.css diff --git a/static/DataTables/DataTables-1.10.15/css/dataTables.semanticui.min.css b/app/static/DataTables/DataTables-1.10.15/css/dataTables.semanticui.min.css similarity index 100% rename from static/DataTables/DataTables-1.10.15/css/dataTables.semanticui.min.css rename to app/static/DataTables/DataTables-1.10.15/css/dataTables.semanticui.min.css diff --git a/static/DataTables/DataTables-1.10.15/css/jquery.dataTables.css b/app/static/DataTables/DataTables-1.10.15/css/jquery.dataTables.css similarity index 100% rename from static/DataTables/DataTables-1.10.15/css/jquery.dataTables.css rename to app/static/DataTables/DataTables-1.10.15/css/jquery.dataTables.css diff --git a/static/DataTables/DataTables-1.10.15/css/jquery.dataTables.min.css b/app/static/DataTables/DataTables-1.10.15/css/jquery.dataTables.min.css similarity index 100% rename from static/DataTables/DataTables-1.10.15/css/jquery.dataTables.min.css rename to app/static/DataTables/DataTables-1.10.15/css/jquery.dataTables.min.css diff --git a/static/DataTables/DataTables-1.10.15/css/jquery.dataTables_themeroller.css b/app/static/DataTables/DataTables-1.10.15/css/jquery.dataTables_themeroller.css similarity index 100% rename from static/DataTables/DataTables-1.10.15/css/jquery.dataTables_themeroller.css rename to app/static/DataTables/DataTables-1.10.15/css/jquery.dataTables_themeroller.css diff --git a/static/DataTables/DataTables-1.10.15/images/sort_asc.png b/app/static/DataTables/DataTables-1.10.15/images/sort_asc.png similarity index 100% rename from static/DataTables/DataTables-1.10.15/images/sort_asc.png rename to app/static/DataTables/DataTables-1.10.15/images/sort_asc.png diff --git a/static/DataTables/DataTables-1.10.15/images/sort_asc_disabled.png b/app/static/DataTables/DataTables-1.10.15/images/sort_asc_disabled.png similarity index 100% rename from static/DataTables/DataTables-1.10.15/images/sort_asc_disabled.png rename to app/static/DataTables/DataTables-1.10.15/images/sort_asc_disabled.png diff --git a/static/DataTables/DataTables-1.10.15/images/sort_both.png b/app/static/DataTables/DataTables-1.10.15/images/sort_both.png similarity index 100% rename from static/DataTables/DataTables-1.10.15/images/sort_both.png rename to app/static/DataTables/DataTables-1.10.15/images/sort_both.png diff --git a/static/DataTables/DataTables-1.10.15/images/sort_desc.png b/app/static/DataTables/DataTables-1.10.15/images/sort_desc.png similarity index 100% rename from static/DataTables/DataTables-1.10.15/images/sort_desc.png rename to app/static/DataTables/DataTables-1.10.15/images/sort_desc.png diff --git a/static/DataTables/DataTables-1.10.15/images/sort_desc_disabled.png b/app/static/DataTables/DataTables-1.10.15/images/sort_desc_disabled.png similarity index 100% rename from static/DataTables/DataTables-1.10.15/images/sort_desc_disabled.png rename to app/static/DataTables/DataTables-1.10.15/images/sort_desc_disabled.png diff --git a/static/DataTables/DataTables-1.10.15/js/dataTables.bootstrap.js b/app/static/DataTables/DataTables-1.10.15/js/dataTables.bootstrap.js similarity index 100% rename from static/DataTables/DataTables-1.10.15/js/dataTables.bootstrap.js rename to app/static/DataTables/DataTables-1.10.15/js/dataTables.bootstrap.js diff --git a/static/DataTables/DataTables-1.10.15/js/dataTables.bootstrap.min.js b/app/static/DataTables/DataTables-1.10.15/js/dataTables.bootstrap.min.js similarity index 100% rename from static/DataTables/DataTables-1.10.15/js/dataTables.bootstrap.min.js rename to app/static/DataTables/DataTables-1.10.15/js/dataTables.bootstrap.min.js diff --git a/static/DataTables/DataTables-1.10.15/js/dataTables.foundation.js b/app/static/DataTables/DataTables-1.10.15/js/dataTables.foundation.js similarity index 100% rename from static/DataTables/DataTables-1.10.15/js/dataTables.foundation.js rename to app/static/DataTables/DataTables-1.10.15/js/dataTables.foundation.js diff --git a/static/DataTables/DataTables-1.10.15/js/dataTables.foundation.min.js b/app/static/DataTables/DataTables-1.10.15/js/dataTables.foundation.min.js similarity index 100% rename from static/DataTables/DataTables-1.10.15/js/dataTables.foundation.min.js rename to app/static/DataTables/DataTables-1.10.15/js/dataTables.foundation.min.js diff --git a/static/DataTables/DataTables-1.10.15/js/dataTables.jqueryui.js b/app/static/DataTables/DataTables-1.10.15/js/dataTables.jqueryui.js similarity index 100% rename from static/DataTables/DataTables-1.10.15/js/dataTables.jqueryui.js rename to app/static/DataTables/DataTables-1.10.15/js/dataTables.jqueryui.js diff --git a/static/DataTables/DataTables-1.10.15/js/dataTables.jqueryui.min.js b/app/static/DataTables/DataTables-1.10.15/js/dataTables.jqueryui.min.js similarity index 100% rename from static/DataTables/DataTables-1.10.15/js/dataTables.jqueryui.min.js rename to app/static/DataTables/DataTables-1.10.15/js/dataTables.jqueryui.min.js diff --git a/static/DataTables/DataTables-1.10.15/js/dataTables.semanticui.js b/app/static/DataTables/DataTables-1.10.15/js/dataTables.semanticui.js similarity index 100% rename from static/DataTables/DataTables-1.10.15/js/dataTables.semanticui.js rename to app/static/DataTables/DataTables-1.10.15/js/dataTables.semanticui.js diff --git a/static/DataTables/DataTables-1.10.15/js/dataTables.semanticui.min.js b/app/static/DataTables/DataTables-1.10.15/js/dataTables.semanticui.min.js similarity index 100% rename from static/DataTables/DataTables-1.10.15/js/dataTables.semanticui.min.js rename to app/static/DataTables/DataTables-1.10.15/js/dataTables.semanticui.min.js diff --git a/static/DataTables/DataTables-1.10.15/js/jquery.dataTables.js b/app/static/DataTables/DataTables-1.10.15/js/jquery.dataTables.js similarity index 100% rename from static/DataTables/DataTables-1.10.15/js/jquery.dataTables.js rename to app/static/DataTables/DataTables-1.10.15/js/jquery.dataTables.js diff --git a/static/DataTables/DataTables-1.10.15/js/jquery.dataTables.min.js b/app/static/DataTables/DataTables-1.10.15/js/jquery.dataTables.min.js similarity index 100% rename from static/DataTables/DataTables-1.10.15/js/jquery.dataTables.min.js rename to app/static/DataTables/DataTables-1.10.15/js/jquery.dataTables.min.js diff --git a/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.bootstrap.css b/app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.bootstrap.css similarity index 100% rename from static/DataTables/FixedColumns-3.2.2/css/fixedColumns.bootstrap.css rename to app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.bootstrap.css diff --git a/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.bootstrap.min.css b/app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.bootstrap.min.css similarity index 100% rename from static/DataTables/FixedColumns-3.2.2/css/fixedColumns.bootstrap.min.css rename to app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.bootstrap.min.css diff --git a/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.dataTables.css b/app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.dataTables.css similarity index 100% rename from static/DataTables/FixedColumns-3.2.2/css/fixedColumns.dataTables.css rename to app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.dataTables.css diff --git a/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.dataTables.min.css b/app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.dataTables.min.css similarity index 100% rename from static/DataTables/FixedColumns-3.2.2/css/fixedColumns.dataTables.min.css rename to app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.dataTables.min.css diff --git a/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.foundation.css b/app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.foundation.css similarity index 100% rename from static/DataTables/FixedColumns-3.2.2/css/fixedColumns.foundation.css rename to app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.foundation.css diff --git a/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.foundation.min.css b/app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.foundation.min.css similarity index 100% rename from static/DataTables/FixedColumns-3.2.2/css/fixedColumns.foundation.min.css rename to app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.foundation.min.css diff --git a/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.jqueryui.css b/app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.jqueryui.css similarity index 100% rename from static/DataTables/FixedColumns-3.2.2/css/fixedColumns.jqueryui.css rename to app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.jqueryui.css diff --git a/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.jqueryui.min.css b/app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.jqueryui.min.css similarity index 100% rename from static/DataTables/FixedColumns-3.2.2/css/fixedColumns.jqueryui.min.css rename to app/static/DataTables/FixedColumns-3.2.2/css/fixedColumns.jqueryui.min.css diff --git a/static/DataTables/FixedColumns-3.2.2/js/dataTables.fixedColumns.js b/app/static/DataTables/FixedColumns-3.2.2/js/dataTables.fixedColumns.js similarity index 100% rename from static/DataTables/FixedColumns-3.2.2/js/dataTables.fixedColumns.js rename to app/static/DataTables/FixedColumns-3.2.2/js/dataTables.fixedColumns.js diff --git a/static/DataTables/FixedColumns-3.2.2/js/dataTables.fixedColumns.min.js b/app/static/DataTables/FixedColumns-3.2.2/js/dataTables.fixedColumns.min.js similarity index 100% rename from static/DataTables/FixedColumns-3.2.2/js/dataTables.fixedColumns.min.js rename to app/static/DataTables/FixedColumns-3.2.2/js/dataTables.fixedColumns.min.js diff --git a/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.bootstrap.css b/app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.bootstrap.css similarity index 100% rename from static/DataTables/FixedHeader-3.1.2/css/fixedHeader.bootstrap.css rename to app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.bootstrap.css diff --git a/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.bootstrap.min.css b/app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.bootstrap.min.css similarity index 100% rename from static/DataTables/FixedHeader-3.1.2/css/fixedHeader.bootstrap.min.css rename to app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.bootstrap.min.css diff --git a/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.dataTables.css b/app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.dataTables.css similarity index 100% rename from static/DataTables/FixedHeader-3.1.2/css/fixedHeader.dataTables.css rename to app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.dataTables.css diff --git a/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.dataTables.min.css b/app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.dataTables.min.css similarity index 100% rename from static/DataTables/FixedHeader-3.1.2/css/fixedHeader.dataTables.min.css rename to app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.dataTables.min.css diff --git a/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.foundation.css b/app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.foundation.css similarity index 100% rename from static/DataTables/FixedHeader-3.1.2/css/fixedHeader.foundation.css rename to app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.foundation.css diff --git a/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.foundation.min.css b/app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.foundation.min.css similarity index 100% rename from static/DataTables/FixedHeader-3.1.2/css/fixedHeader.foundation.min.css rename to app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.foundation.min.css diff --git a/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.jqueryui.css b/app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.jqueryui.css similarity index 100% rename from static/DataTables/FixedHeader-3.1.2/css/fixedHeader.jqueryui.css rename to app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.jqueryui.css diff --git a/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.jqueryui.min.css b/app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.jqueryui.min.css similarity index 100% rename from static/DataTables/FixedHeader-3.1.2/css/fixedHeader.jqueryui.min.css rename to app/static/DataTables/FixedHeader-3.1.2/css/fixedHeader.jqueryui.min.css diff --git a/static/DataTables/FixedHeader-3.1.2/js/dataTables.fixedHeader.js b/app/static/DataTables/FixedHeader-3.1.2/js/dataTables.fixedHeader.js similarity index 100% rename from static/DataTables/FixedHeader-3.1.2/js/dataTables.fixedHeader.js rename to app/static/DataTables/FixedHeader-3.1.2/js/dataTables.fixedHeader.js diff --git a/static/DataTables/FixedHeader-3.1.2/js/dataTables.fixedHeader.min.js b/app/static/DataTables/FixedHeader-3.1.2/js/dataTables.fixedHeader.min.js similarity index 100% rename from static/DataTables/FixedHeader-3.1.2/js/dataTables.fixedHeader.min.js rename to app/static/DataTables/FixedHeader-3.1.2/js/dataTables.fixedHeader.min.js diff --git a/static/DataTables/Responsive-2.1.1/css/responsive.bootstrap.css b/app/static/DataTables/Responsive-2.1.1/css/responsive.bootstrap.css similarity index 100% rename from static/DataTables/Responsive-2.1.1/css/responsive.bootstrap.css rename to app/static/DataTables/Responsive-2.1.1/css/responsive.bootstrap.css diff --git a/static/DataTables/Responsive-2.1.1/css/responsive.bootstrap.min.css b/app/static/DataTables/Responsive-2.1.1/css/responsive.bootstrap.min.css similarity index 100% rename from static/DataTables/Responsive-2.1.1/css/responsive.bootstrap.min.css rename to app/static/DataTables/Responsive-2.1.1/css/responsive.bootstrap.min.css diff --git a/static/DataTables/Responsive-2.1.1/css/responsive.dataTables.css b/app/static/DataTables/Responsive-2.1.1/css/responsive.dataTables.css similarity index 100% rename from static/DataTables/Responsive-2.1.1/css/responsive.dataTables.css rename to app/static/DataTables/Responsive-2.1.1/css/responsive.dataTables.css diff --git a/static/DataTables/Responsive-2.1.1/css/responsive.dataTables.min.css b/app/static/DataTables/Responsive-2.1.1/css/responsive.dataTables.min.css similarity index 100% rename from static/DataTables/Responsive-2.1.1/css/responsive.dataTables.min.css rename to app/static/DataTables/Responsive-2.1.1/css/responsive.dataTables.min.css diff --git a/static/DataTables/Responsive-2.1.1/css/responsive.foundation.css b/app/static/DataTables/Responsive-2.1.1/css/responsive.foundation.css similarity index 100% rename from static/DataTables/Responsive-2.1.1/css/responsive.foundation.css rename to app/static/DataTables/Responsive-2.1.1/css/responsive.foundation.css diff --git a/static/DataTables/Responsive-2.1.1/css/responsive.foundation.min.css b/app/static/DataTables/Responsive-2.1.1/css/responsive.foundation.min.css similarity index 100% rename from static/DataTables/Responsive-2.1.1/css/responsive.foundation.min.css rename to app/static/DataTables/Responsive-2.1.1/css/responsive.foundation.min.css diff --git a/static/DataTables/Responsive-2.1.1/css/responsive.jqueryui.css b/app/static/DataTables/Responsive-2.1.1/css/responsive.jqueryui.css similarity index 100% rename from static/DataTables/Responsive-2.1.1/css/responsive.jqueryui.css rename to app/static/DataTables/Responsive-2.1.1/css/responsive.jqueryui.css diff --git a/static/DataTables/Responsive-2.1.1/css/responsive.jqueryui.min.css b/app/static/DataTables/Responsive-2.1.1/css/responsive.jqueryui.min.css similarity index 100% rename from static/DataTables/Responsive-2.1.1/css/responsive.jqueryui.min.css rename to app/static/DataTables/Responsive-2.1.1/css/responsive.jqueryui.min.css diff --git a/static/DataTables/Responsive-2.1.1/js/dataTables.responsive.js b/app/static/DataTables/Responsive-2.1.1/js/dataTables.responsive.js similarity index 100% rename from static/DataTables/Responsive-2.1.1/js/dataTables.responsive.js rename to app/static/DataTables/Responsive-2.1.1/js/dataTables.responsive.js diff --git a/static/DataTables/Responsive-2.1.1/js/dataTables.responsive.min.js b/app/static/DataTables/Responsive-2.1.1/js/dataTables.responsive.min.js similarity index 100% rename from static/DataTables/Responsive-2.1.1/js/dataTables.responsive.min.js rename to app/static/DataTables/Responsive-2.1.1/js/dataTables.responsive.min.js diff --git a/static/DataTables/Responsive-2.1.1/js/responsive.bootstrap.js b/app/static/DataTables/Responsive-2.1.1/js/responsive.bootstrap.js similarity index 100% rename from static/DataTables/Responsive-2.1.1/js/responsive.bootstrap.js rename to app/static/DataTables/Responsive-2.1.1/js/responsive.bootstrap.js diff --git a/static/DataTables/Responsive-2.1.1/js/responsive.bootstrap.min.js b/app/static/DataTables/Responsive-2.1.1/js/responsive.bootstrap.min.js similarity index 100% rename from static/DataTables/Responsive-2.1.1/js/responsive.bootstrap.min.js rename to app/static/DataTables/Responsive-2.1.1/js/responsive.bootstrap.min.js diff --git a/static/DataTables/Responsive-2.1.1/js/responsive.foundation.js b/app/static/DataTables/Responsive-2.1.1/js/responsive.foundation.js similarity index 100% rename from static/DataTables/Responsive-2.1.1/js/responsive.foundation.js rename to app/static/DataTables/Responsive-2.1.1/js/responsive.foundation.js diff --git a/static/DataTables/Responsive-2.1.1/js/responsive.foundation.min.js b/app/static/DataTables/Responsive-2.1.1/js/responsive.foundation.min.js similarity index 100% rename from static/DataTables/Responsive-2.1.1/js/responsive.foundation.min.js rename to app/static/DataTables/Responsive-2.1.1/js/responsive.foundation.min.js diff --git a/static/DataTables/Responsive-2.1.1/js/responsive.jqueryui.js b/app/static/DataTables/Responsive-2.1.1/js/responsive.jqueryui.js similarity index 100% rename from static/DataTables/Responsive-2.1.1/js/responsive.jqueryui.js rename to app/static/DataTables/Responsive-2.1.1/js/responsive.jqueryui.js diff --git a/static/DataTables/Responsive-2.1.1/js/responsive.jqueryui.min.js b/app/static/DataTables/Responsive-2.1.1/js/responsive.jqueryui.min.js similarity index 100% rename from static/DataTables/Responsive-2.1.1/js/responsive.jqueryui.min.js rename to app/static/DataTables/Responsive-2.1.1/js/responsive.jqueryui.min.js diff --git a/static/DataTables/datatables.css b/app/static/DataTables/datatables.css similarity index 100% rename from static/DataTables/datatables.css rename to app/static/DataTables/datatables.css diff --git a/static/DataTables/datatables.js b/app/static/DataTables/datatables.js similarity index 100% rename from static/DataTables/datatables.js rename to app/static/DataTables/datatables.js diff --git a/static/DataTables/datatables.min.css b/app/static/DataTables/datatables.min.css similarity index 100% rename from static/DataTables/datatables.min.css rename to app/static/DataTables/datatables.min.css diff --git a/static/DataTables/datatables.min.js b/app/static/DataTables/datatables.min.js similarity index 100% rename from static/DataTables/datatables.min.js rename to app/static/DataTables/datatables.min.js diff --git a/static/README b/app/static/README similarity index 100% rename from static/README rename to app/static/README diff --git a/static/css/autosuggest_inquisitor.css b/app/static/css/autosuggest_inquisitor.css similarity index 100% rename from static/css/autosuggest_inquisitor.css rename to app/static/css/autosuggest_inquisitor.css diff --git a/static/css/calabs.css b/app/static/css/calabs.css similarity index 100% rename from static/css/calabs.css rename to app/static/css/calabs.css diff --git a/static/css/groups.css b/app/static/css/groups.css similarity index 100% rename from static/css/groups.css rename to app/static/css/groups.css diff --git a/static/css/gt_table.css b/app/static/css/gt_table.css similarity index 100% rename from static/css/gt_table.css rename to app/static/css/gt_table.css diff --git a/static/css/menu.css b/app/static/css/menu.css similarity index 100% rename from static/css/menu.css rename to app/static/css/menu.css diff --git a/static/css/multiple-select.css b/app/static/css/multiple-select.css similarity index 100% rename from static/css/multiple-select.css rename to app/static/css/multiple-select.css diff --git a/static/css/multiple-select.png b/app/static/css/multiple-select.png similarity index 100% rename from static/css/multiple-select.png rename to app/static/css/multiple-select.png diff --git a/static/css/radar_bulletin.css b/app/static/css/radar_bulletin.css similarity index 100% rename from static/css/radar_bulletin.css rename to app/static/css/radar_bulletin.css diff --git a/static/css/rickshaw.min.css b/app/static/css/rickshaw.min.css similarity index 100% rename from static/css/rickshaw.min.css rename to app/static/css/rickshaw.min.css diff --git a/static/css/scodoc.css b/app/static/css/scodoc.css similarity index 100% rename from static/css/scodoc.css rename to app/static/css/scodoc.css diff --git a/static/css/verticalhisto.css b/app/static/css/verticalhisto.css similarity index 100% rename from static/css/verticalhisto.css rename to app/static/css/verticalhisto.css diff --git a/static/icons/arrow_down.png b/app/static/icons/arrow_down.png similarity index 100% rename from static/icons/arrow_down.png rename to app/static/icons/arrow_down.png diff --git a/static/icons/arrow_none.png b/app/static/icons/arrow_none.png similarity index 100% rename from static/icons/arrow_none.png rename to app/static/icons/arrow_none.png diff --git a/static/icons/arrow_up.png b/app/static/icons/arrow_up.png similarity index 100% rename from static/icons/arrow_up.png rename to app/static/icons/arrow_up.png diff --git a/static/icons/as_pointer.png b/app/static/icons/as_pointer.png similarity index 100% rename from static/icons/as_pointer.png rename to app/static/icons/as_pointer.png diff --git a/static/icons/borgne_img.png b/app/static/icons/borgne_img.png similarity index 100% rename from static/icons/borgne_img.png rename to app/static/icons/borgne_img.png diff --git a/static/icons/bt_gif.png b/app/static/icons/bt_gif.png similarity index 100% rename from static/icons/bt_gif.png rename to app/static/icons/bt_gif.png diff --git a/static/icons/bullet_arrow.png b/app/static/icons/bullet_arrow.png similarity index 100% rename from static/icons/bullet_arrow.png rename to app/static/icons/bullet_arrow.png diff --git a/static/icons/bullet_plus.png b/app/static/icons/bullet_plus.png similarity index 100% rename from static/icons/bullet_plus.png rename to app/static/icons/bullet_plus.png diff --git a/static/icons/bullet_warning_img.png b/app/static/icons/bullet_warning_img.png similarity index 100% rename from static/icons/bullet_warning_img.png rename to app/static/icons/bullet_warning_img.png diff --git a/static/icons/calendar_img.png b/app/static/icons/calendar_img.png similarity index 100% rename from static/icons/calendar_img.png rename to app/static/icons/calendar_img.png diff --git a/static/icons/contact_img.png b/app/static/icons/contact_img.png similarity index 100% rename from static/icons/contact_img.png rename to app/static/icons/contact_img.png diff --git a/static/icons/correspondant_img.png b/app/static/icons/correspondant_img.png similarity index 100% rename from static/icons/correspondant_img.png rename to app/static/icons/correspondant_img.png diff --git a/static/icons/delete_img.png b/app/static/icons/delete_img.png similarity index 100% rename from static/icons/delete_img.png rename to app/static/icons/delete_img.png diff --git a/static/icons/delete_small_dis_img.png b/app/static/icons/delete_small_dis_img.png similarity index 100% rename from static/icons/delete_small_dis_img.png rename to app/static/icons/delete_small_dis_img.png diff --git a/static/icons/delete_small_img.png b/app/static/icons/delete_small_img.png similarity index 100% rename from static/icons/delete_small_img.png rename to app/static/icons/delete_small_img.png diff --git a/static/icons/devel_img.png b/app/static/icons/devel_img.png similarity index 100% rename from static/icons/devel_img.png rename to app/static/icons/devel_img.png diff --git a/static/icons/edit_img.png b/app/static/icons/edit_img.png similarity index 100% rename from static/icons/edit_img.png rename to app/static/icons/edit_img.png diff --git a/static/icons/emptygroupicon_img.png b/app/static/icons/emptygroupicon_img.png similarity index 100% rename from static/icons/emptygroupicon_img.png rename to app/static/icons/emptygroupicon_img.png diff --git a/static/icons/entreprise_img.png b/app/static/icons/entreprise_img.png similarity index 100% rename from static/icons/entreprise_img.png rename to app/static/icons/entreprise_img.png diff --git a/static/icons/entreprise_side_img.png b/app/static/icons/entreprise_side_img.png similarity index 100% rename from static/icons/entreprise_side_img.png rename to app/static/icons/entreprise_side_img.png diff --git a/static/icons/eye_img.png b/app/static/icons/eye_img.png similarity index 100% rename from static/icons/eye_img.png rename to app/static/icons/eye_img.png diff --git a/static/icons/firefox_fr.png b/app/static/icons/firefox_fr.png similarity index 100% rename from static/icons/firefox_fr.png rename to app/static/icons/firefox_fr.png diff --git a/static/icons/flag_uk_img.png b/app/static/icons/flag_uk_img.png similarity index 100% rename from static/icons/flag_uk_img.png rename to app/static/icons/flag_uk_img.png diff --git a/static/icons/formula.png b/app/static/icons/formula.png similarity index 100% rename from static/icons/formula.png rename to app/static/icons/formula.png diff --git a/static/icons/groupicon_img.png b/app/static/icons/groupicon_img.png similarity index 100% rename from static/icons/groupicon_img.png rename to app/static/icons/groupicon_img.png diff --git a/static/icons/hide_img.png b/app/static/icons/hide_img.png similarity index 100% rename from static/icons/hide_img.png rename to app/static/icons/hide_img.png diff --git a/static/icons/hl_corner_bl.png b/app/static/icons/hl_corner_bl.png similarity index 100% rename from static/icons/hl_corner_bl.png rename to app/static/icons/hl_corner_bl.png diff --git a/static/icons/hl_corner_br.png b/app/static/icons/hl_corner_br.png similarity index 100% rename from static/icons/hl_corner_br.png rename to app/static/icons/hl_corner_br.png diff --git a/static/icons/hl_corner_tl.png b/app/static/icons/hl_corner_tl.png similarity index 100% rename from static/icons/hl_corner_tl.png rename to app/static/icons/hl_corner_tl.png diff --git a/static/icons/hl_corner_tr.png b/app/static/icons/hl_corner_tr.png similarity index 100% rename from static/icons/hl_corner_tr.png rename to app/static/icons/hl_corner_tr.png diff --git a/static/icons/info-16_img.png b/app/static/icons/info-16_img.png similarity index 100% rename from static/icons/info-16_img.png rename to app/static/icons/info-16_img.png diff --git a/static/icons/info-24_img.png b/app/static/icons/info-24_img.png similarity index 100% rename from static/icons/info-24_img.png rename to app/static/icons/info-24_img.png diff --git a/static/icons/interdit_img.png b/app/static/icons/interdit_img.png similarity index 100% rename from static/icons/interdit_img.png rename to app/static/icons/interdit_img.png diff --git a/static/icons/loading.jpg b/app/static/icons/loading.jpg similarity index 100% rename from static/icons/loading.jpg rename to app/static/icons/loading.jpg diff --git a/static/icons/lock32_img.png b/app/static/icons/lock32_img.png similarity index 100% rename from static/icons/lock32_img.png rename to app/static/icons/lock32_img.png diff --git a/static/icons/lock_img.png b/app/static/icons/lock_img.png similarity index 100% rename from static/icons/lock_img.png rename to app/static/icons/lock_img.png diff --git a/static/icons/menuarrow1_img.png b/app/static/icons/menuarrow1_img.png similarity index 100% rename from static/icons/menuarrow1_img.png rename to app/static/icons/menuarrow1_img.png diff --git a/static/icons/minus18_img.png b/app/static/icons/minus18_img.png similarity index 100% rename from static/icons/minus18_img.png rename to app/static/icons/minus18_img.png diff --git a/static/icons/minus_img.png b/app/static/icons/minus_img.png similarity index 100% rename from static/icons/minus_img.png rename to app/static/icons/minus_img.png diff --git a/static/icons/next_img.png b/app/static/icons/next_img.png similarity index 100% rename from static/icons/next_img.png rename to app/static/icons/next_img.png diff --git a/static/icons/notes_icon.png b/app/static/icons/notes_icon.png similarity index 100% rename from static/icons/notes_icon.png rename to app/static/icons/notes_icon.png diff --git a/static/icons/notes_img.png b/app/static/icons/notes_img.png similarity index 100% rename from static/icons/notes_img.png rename to app/static/icons/notes_img.png diff --git a/static/icons/nouv_img.png b/app/static/icons/nouv_img.png similarity index 100% rename from static/icons/nouv_img.png rename to app/static/icons/nouv_img.png diff --git a/static/icons/pdficon16x20_img.png b/app/static/icons/pdficon16x20_img.png similarity index 100% rename from static/icons/pdficon16x20_img.png rename to app/static/icons/pdficon16x20_img.png diff --git a/static/icons/pdficon_img.png b/app/static/icons/pdficon_img.png similarity index 100% rename from static/icons/pdficon_img.png rename to app/static/icons/pdficon_img.png diff --git a/static/icons/plus18_img.png b/app/static/icons/plus18_img.png similarity index 100% rename from static/icons/plus18_img.png rename to app/static/icons/plus18_img.png diff --git a/static/icons/plus_img.png b/app/static/icons/plus_img.png similarity index 100% rename from static/icons/plus_img.png rename to app/static/icons/plus_img.png diff --git a/static/icons/prev_img.png b/app/static/icons/prev_img.png similarity index 100% rename from static/icons/prev_img.png rename to app/static/icons/prev_img.png diff --git a/static/icons/pythonpoweredsmall_img.png b/app/static/icons/pythonpoweredsmall_img.png similarity index 100% rename from static/icons/pythonpoweredsmall_img.png rename to app/static/icons/pythonpoweredsmall_img.png diff --git a/static/icons/roundedge_img.png b/app/static/icons/roundedge_img.png similarity index 100% rename from static/icons/roundedge_img.png rename to app/static/icons/roundedge_img.png diff --git a/static/icons/rssscodoc_img.png b/app/static/icons/rssscodoc_img.png similarity index 100% rename from static/icons/rssscodoc_img.png rename to app/static/icons/rssscodoc_img.png diff --git a/static/icons/sco_icon.png b/app/static/icons/sco_icon.png similarity index 100% rename from static/icons/sco_icon.png rename to app/static/icons/sco_icon.png diff --git a/static/icons/scologo_img.png b/app/static/icons/scologo_img.png similarity index 100% rename from static/icons/scologo_img.png rename to app/static/icons/scologo_img.png diff --git a/static/icons/smallpolar_img.png b/app/static/icons/smallpolar_img.png similarity index 100% rename from static/icons/smallpolar_img.png rename to app/static/icons/smallpolar_img.png diff --git a/static/icons/status_green_img.png b/app/static/icons/status_green_img.png similarity index 100% rename from static/icons/status_green_img.png rename to app/static/icons/status_green_img.png diff --git a/static/icons/status_greenorange_img.gif b/app/static/icons/status_greenorange_img.gif similarity index 100% rename from static/icons/status_greenorange_img.gif rename to app/static/icons/status_greenorange_img.gif diff --git a/static/icons/status_orange_img.png b/app/static/icons/status_orange_img.png similarity index 100% rename from static/icons/status_orange_img.png rename to app/static/icons/status_orange_img.png diff --git a/static/icons/status_visible_img.png b/app/static/icons/status_visible_img.png similarity index 100% rename from static/icons/status_visible_img.png rename to app/static/icons/status_visible_img.png diff --git a/static/icons/table_brushed_jpg.png b/app/static/icons/table_brushed_jpg.png similarity index 100% rename from static/icons/table_brushed_jpg.png rename to app/static/icons/table_brushed_jpg.png diff --git a/static/icons/takebacktheweb_small.png b/app/static/icons/takebacktheweb_small.png similarity index 100% rename from static/icons/takebacktheweb_small.png rename to app/static/icons/takebacktheweb_small.png diff --git a/static/icons/trust_firefox_gif.png b/app/static/icons/trust_firefox_gif.png similarity index 100% rename from static/icons/trust_firefox_gif.png rename to app/static/icons/trust_firefox_gif.png diff --git a/static/icons/ul_corner_bl.png b/app/static/icons/ul_corner_bl.png similarity index 100% rename from static/icons/ul_corner_bl.png rename to app/static/icons/ul_corner_bl.png diff --git a/static/icons/ul_corner_br.png b/app/static/icons/ul_corner_br.png similarity index 100% rename from static/icons/ul_corner_br.png rename to app/static/icons/ul_corner_br.png diff --git a/static/icons/ul_corner_tl.png b/app/static/icons/ul_corner_tl.png similarity index 100% rename from static/icons/ul_corner_tl.png rename to app/static/icons/ul_corner_tl.png diff --git a/static/icons/ul_corner_tr.png b/app/static/icons/ul_corner_tr.png similarity index 100% rename from static/icons/ul_corner_tr.png rename to app/static/icons/ul_corner_tr.png diff --git a/static/icons/unknown.jpg b/app/static/icons/unknown.jpg similarity index 100% rename from static/icons/unknown.jpg rename to app/static/icons/unknown.jpg diff --git a/static/icons/unknown_img.png b/app/static/icons/unknown_img.png similarity index 100% rename from static/icons/unknown_img.png rename to app/static/icons/unknown_img.png diff --git a/static/icons/warning16_img.png b/app/static/icons/warning16_img.png similarity index 100% rename from static/icons/warning16_img.png rename to app/static/icons/warning16_img.png diff --git a/static/icons/warning21_img.png b/app/static/icons/warning21_img.png similarity index 100% rename from static/icons/warning21_img.png rename to app/static/icons/warning21_img.png diff --git a/static/icons/warning_img.png b/app/static/icons/warning_img.png similarity index 100% rename from static/icons/warning_img.png rename to app/static/icons/warning_img.png diff --git a/static/icons/xlsicon_img.png b/app/static/icons/xlsicon_img.png similarity index 100% rename from static/icons/xlsicon_img.png rename to app/static/icons/xlsicon_img.png diff --git a/static/index.html b/app/static/index.html similarity index 100% rename from static/index.html rename to app/static/index.html diff --git a/static/jQuery/jquery-1.12.4.min.js b/app/static/jQuery/jquery-1.12.4.min.js similarity index 100% rename from static/jQuery/jquery-1.12.4.min.js rename to app/static/jQuery/jquery-1.12.4.min.js diff --git a/static/jQuery/jquery-migrate-1.2.0.min.js b/app/static/jQuery/jquery-migrate-1.2.0.min.js similarity index 100% rename from static/jQuery/jquery-migrate-1.2.0.min.js rename to app/static/jQuery/jquery-migrate-1.2.0.min.js diff --git a/static/jQuery/jquery.js b/app/static/jQuery/jquery.js similarity index 100% rename from static/jQuery/jquery.js rename to app/static/jQuery/jquery.js diff --git a/static/js/abs_ajax.js b/app/static/js/abs_ajax.js similarity index 100% rename from static/js/abs_ajax.js rename to app/static/js/abs_ajax.js diff --git a/static/js/apo_semset_maq_status.js b/app/static/js/apo_semset_maq_status.js similarity index 100% rename from static/js/apo_semset_maq_status.js rename to app/static/js/apo_semset_maq_status.js diff --git a/static/js/bulletin.js b/app/static/js/bulletin.js similarity index 100% rename from static/js/bulletin.js rename to app/static/js/bulletin.js diff --git a/static/js/calabs.js b/app/static/js/calabs.js similarity index 100% rename from static/js/calabs.js rename to app/static/js/calabs.js diff --git a/static/js/editPartitionForm.js b/app/static/js/editPartitionForm.js similarity index 100% rename from static/js/editPartitionForm.js rename to app/static/js/editPartitionForm.js diff --git a/static/js/edit_ue.js b/app/static/js/edit_ue.js similarity index 100% rename from static/js/edit_ue.js rename to app/static/js/edit_ue.js diff --git a/static/js/etud_debouche.js b/app/static/js/etud_debouche.js similarity index 100% rename from static/js/etud_debouche.js rename to app/static/js/etud_debouche.js diff --git a/static/js/etud_info.js b/app/static/js/etud_info.js similarity index 100% rename from static/js/etud_info.js rename to app/static/js/etud_info.js diff --git a/static/js/export_results.js b/app/static/js/export_results.js similarity index 100% rename from static/js/export_results.js rename to app/static/js/export_results.js diff --git a/static/js/formsemestre_ext_edit_ue_validations.js b/app/static/js/formsemestre_ext_edit_ue_validations.js similarity index 100% rename from static/js/formsemestre_ext_edit_ue_validations.js rename to app/static/js/formsemestre_ext_edit_ue_validations.js diff --git a/static/js/groupmgr.js b/app/static/js/groupmgr.js similarity index 100% rename from static/js/groupmgr.js rename to app/static/js/groupmgr.js diff --git a/static/js/groups_view.js b/app/static/js/groups_view.js similarity index 100% rename from static/js/groups_view.js rename to app/static/js/groups_view.js diff --git a/static/js/map_lycees.js b/app/static/js/map_lycees.js similarity index 100% rename from static/js/map_lycees.js rename to app/static/js/map_lycees.js diff --git a/static/js/module_tag_editor.js b/app/static/js/module_tag_editor.js similarity index 100% rename from static/js/module_tag_editor.js rename to app/static/js/module_tag_editor.js diff --git a/static/js/radar_bulletin.js b/app/static/js/radar_bulletin.js similarity index 100% rename from static/js/radar_bulletin.js rename to app/static/js/radar_bulletin.js diff --git a/static/js/recap_parcours.js b/app/static/js/recap_parcours.js similarity index 100% rename from static/js/recap_parcours.js rename to app/static/js/recap_parcours.js diff --git a/static/js/saisie_notes.js b/app/static/js/saisie_notes.js similarity index 100% rename from static/js/saisie_notes.js rename to app/static/js/saisie_notes.js diff --git a/static/js/sco_ue_external.js b/app/static/js/sco_ue_external.js similarity index 100% rename from static/js/sco_ue_external.js rename to app/static/js/sco_ue_external.js diff --git a/static/js/scodoc.js b/app/static/js/scodoc.js similarity index 100% rename from static/js/scodoc.js rename to app/static/js/scodoc.js diff --git a/static/js/trombino.js b/app/static/js/trombino.js similarity index 100% rename from static/js/trombino.js rename to app/static/js/trombino.js diff --git a/static/js/ue_list.js b/app/static/js/ue_list.js similarity index 100% rename from static/js/ue_list.js rename to app/static/js/ue_list.js diff --git a/static/js/validate_previous_ue.js b/app/static/js/validate_previous_ue.js similarity index 100% rename from static/js/validate_previous_ue.js rename to app/static/js/validate_previous_ue.js diff --git a/static/libjs/AutoSuggest.js b/app/static/libjs/AutoSuggest.js similarity index 100% rename from static/libjs/AutoSuggest.js rename to app/static/libjs/AutoSuggest.js diff --git a/static/libjs/AutoSuggest_2.1.3_comp.js b/app/static/libjs/AutoSuggest_2.1.3_comp.js similarity index 100% rename from static/libjs/AutoSuggest_2.1.3_comp.js rename to app/static/libjs/AutoSuggest_2.1.3_comp.js diff --git a/static/libjs/bootstrap-3.1.1-dist/._css b/app/static/libjs/bootstrap-3.1.1-dist/._css similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/._css rename to app/static/libjs/bootstrap-3.1.1-dist/._css diff --git a/static/libjs/bootstrap-3.1.1-dist/._fonts b/app/static/libjs/bootstrap-3.1.1-dist/._fonts similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/._fonts rename to app/static/libjs/bootstrap-3.1.1-dist/._fonts diff --git a/static/libjs/bootstrap-3.1.1-dist/._js b/app/static/libjs/bootstrap-3.1.1-dist/._js similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/._js rename to app/static/libjs/bootstrap-3.1.1-dist/._js diff --git a/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.css b/app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.css similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.css rename to app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.css diff --git a/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.css.map b/app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.css.map similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.css.map rename to app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.css.map diff --git a/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.min.css b/app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.min.css similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.min.css rename to app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap-theme.min.css diff --git a/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.css b/app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.css similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.css rename to app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.css diff --git a/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.css.map b/app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.css.map similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.css.map rename to app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.css.map diff --git a/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.min.css b/app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.min.css similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.min.css rename to app/static/libjs/bootstrap-3.1.1-dist/css/._bootstrap.min.css diff --git a/static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.css b/app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.css similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.css rename to app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.css diff --git a/static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.css.map b/app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.css.map similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.css.map rename to app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.css.map diff --git a/static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css b/app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css rename to app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css diff --git a/static/libjs/bootstrap-3.1.1-dist/css/bootstrap.css b/app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap.css similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/bootstrap.css rename to app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap.css diff --git a/static/libjs/bootstrap-3.1.1-dist/css/bootstrap.css.map b/app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap.css.map similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/bootstrap.css.map rename to app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap.css.map diff --git a/static/libjs/bootstrap-3.1.1-dist/css/bootstrap.min.css b/app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap.min.css similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/css/bootstrap.min.css rename to app/static/libjs/bootstrap-3.1.1-dist/css/bootstrap.min.css diff --git a/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.eot b/app/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.eot similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.eot rename to app/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.eot diff --git a/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.svg b/app/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.svg similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.svg rename to app/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.svg diff --git a/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.ttf b/app/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.ttf similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.ttf rename to app/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.ttf diff --git a/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.woff b/app/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.woff similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.woff rename to app/static/libjs/bootstrap-3.1.1-dist/fonts/._glyphicons-halflings-regular.woff diff --git a/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.eot b/app/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.eot rename to app/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.eot diff --git a/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.svg b/app/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.svg rename to app/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.svg diff --git a/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.ttf b/app/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.ttf rename to app/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.ttf diff --git a/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.woff b/app/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.woff rename to app/static/libjs/bootstrap-3.1.1-dist/fonts/glyphicons-halflings-regular.woff diff --git a/static/libjs/bootstrap-3.1.1-dist/js/._bootstrap.js b/app/static/libjs/bootstrap-3.1.1-dist/js/._bootstrap.js similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/js/._bootstrap.js rename to app/static/libjs/bootstrap-3.1.1-dist/js/._bootstrap.js diff --git a/static/libjs/bootstrap-3.1.1-dist/js/._bootstrap.min.js b/app/static/libjs/bootstrap-3.1.1-dist/js/._bootstrap.min.js similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/js/._bootstrap.min.js rename to app/static/libjs/bootstrap-3.1.1-dist/js/._bootstrap.min.js diff --git a/static/libjs/bootstrap-3.1.1-dist/js/bootstrap.js b/app/static/libjs/bootstrap-3.1.1-dist/js/bootstrap.js similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/js/bootstrap.js rename to app/static/libjs/bootstrap-3.1.1-dist/js/bootstrap.js diff --git a/static/libjs/bootstrap-3.1.1-dist/js/bootstrap.min.js b/app/static/libjs/bootstrap-3.1.1-dist/js/bootstrap.min.js similarity index 100% rename from static/libjs/bootstrap-3.1.1-dist/js/bootstrap.min.js rename to app/static/libjs/bootstrap-3.1.1-dist/js/bootstrap.min.js diff --git a/static/libjs/bootstrap-multiselect/bootstrap-multiselect.css b/app/static/libjs/bootstrap-multiselect/bootstrap-multiselect.css similarity index 100% rename from static/libjs/bootstrap-multiselect/bootstrap-multiselect.css rename to app/static/libjs/bootstrap-multiselect/bootstrap-multiselect.css diff --git a/static/libjs/bootstrap-multiselect/bootstrap-multiselect.js b/app/static/libjs/bootstrap-multiselect/bootstrap-multiselect.js similarity index 100% rename from static/libjs/bootstrap-multiselect/bootstrap-multiselect.js rename to app/static/libjs/bootstrap-multiselect/bootstrap-multiselect.js diff --git a/static/libjs/bubble.js b/app/static/libjs/bubble.js similarity index 100% rename from static/libjs/bubble.js rename to app/static/libjs/bubble.js diff --git a/static/libjs/d3.v3.min.js b/app/static/libjs/d3.v3.min.js similarity index 100% rename from static/libjs/d3.v3.min.js rename to app/static/libjs/d3.v3.min.js diff --git a/static/libjs/fullcalendar/THIS_IS_VERSION_2.0.0-beta2 b/app/static/libjs/fullcalendar/THIS_IS_VERSION_2.0.0-beta2 similarity index 100% rename from static/libjs/fullcalendar/THIS_IS_VERSION_2.0.0-beta2 rename to app/static/libjs/fullcalendar/THIS_IS_VERSION_2.0.0-beta2 diff --git a/static/libjs/fullcalendar/fullcalendar.css b/app/static/libjs/fullcalendar/fullcalendar.css similarity index 100% rename from static/libjs/fullcalendar/fullcalendar.css rename to app/static/libjs/fullcalendar/fullcalendar.css diff --git a/static/libjs/fullcalendar/fullcalendar.min.js b/app/static/libjs/fullcalendar/fullcalendar.min.js similarity index 100% rename from static/libjs/fullcalendar/fullcalendar.min.js rename to app/static/libjs/fullcalendar/fullcalendar.min.js diff --git a/static/libjs/fullcalendar/fullcalendar.print.css b/app/static/libjs/fullcalendar/fullcalendar.print.css similarity index 100% rename from static/libjs/fullcalendar/fullcalendar.print.css rename to app/static/libjs/fullcalendar/fullcalendar.print.css diff --git a/static/libjs/jQuery-tagEditor/bower.json b/app/static/libjs/jQuery-tagEditor/bower.json similarity index 100% rename from static/libjs/jQuery-tagEditor/bower.json rename to app/static/libjs/jQuery-tagEditor/bower.json diff --git a/static/libjs/jQuery-tagEditor/demo.html b/app/static/libjs/jQuery-tagEditor/demo.html similarity index 100% rename from static/libjs/jQuery-tagEditor/demo.html rename to app/static/libjs/jQuery-tagEditor/demo.html diff --git a/static/libjs/jQuery-tagEditor/jquery.caret.min.js b/app/static/libjs/jQuery-tagEditor/jquery.caret.min.js similarity index 100% rename from static/libjs/jQuery-tagEditor/jquery.caret.min.js rename to app/static/libjs/jQuery-tagEditor/jquery.caret.min.js diff --git a/static/libjs/jQuery-tagEditor/jquery.tag-editor.css b/app/static/libjs/jQuery-tagEditor/jquery.tag-editor.css similarity index 100% rename from static/libjs/jQuery-tagEditor/jquery.tag-editor.css rename to app/static/libjs/jQuery-tagEditor/jquery.tag-editor.css diff --git a/static/libjs/jQuery-tagEditor/jquery.tag-editor.js b/app/static/libjs/jQuery-tagEditor/jquery.tag-editor.js similarity index 100% rename from static/libjs/jQuery-tagEditor/jquery.tag-editor.js rename to app/static/libjs/jQuery-tagEditor/jquery.tag-editor.js diff --git a/static/libjs/jQuery-tagEditor/jquery.tag-editor.min.js b/app/static/libjs/jQuery-tagEditor/jquery.tag-editor.min.js similarity index 100% rename from static/libjs/jQuery-tagEditor/jquery.tag-editor.min.js rename to app/static/libjs/jQuery-tagEditor/jquery.tag-editor.min.js diff --git a/static/libjs/jQuery-tagEditor/readme.md b/app/static/libjs/jQuery-tagEditor/readme.md similarity index 100% rename from static/libjs/jQuery-tagEditor/readme.md rename to app/static/libjs/jQuery-tagEditor/readme.md diff --git a/static/libjs/jQuery-tagEditor/tag-editor.jquery.json b/app/static/libjs/jQuery-tagEditor/tag-editor.jquery.json similarity index 100% rename from static/libjs/jQuery-tagEditor/tag-editor.jquery.json rename to app/static/libjs/jQuery-tagEditor/tag-editor.jquery.json diff --git a/static/libjs/jinplace-1.2.1.min.js b/app/static/libjs/jinplace-1.2.1.min.js similarity index 100% rename from static/libjs/jinplace-1.2.1.min.js rename to app/static/libjs/jinplace-1.2.1.min.js diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/animated-overlay.gif b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/animated-overlay.gif similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/animated-overlay.gif rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/animated-overlay.gif diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_222222_256x240.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_222222_256x240.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_222222_256x240.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_222222_256x240.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_2e83ff_256x240.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_2e83ff_256x240.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_2e83ff_256x240.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_454545_256x240.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_454545_256x240.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_454545_256x240.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_454545_256x240.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_888888_256x240.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_888888_256x240.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_888888_256x240.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_888888_256x240.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_cd0a0a_256x240.png similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_cd0a0a_256x240.png rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/images/ui-icons_cd0a0a_256x240.png diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/jquery-ui-1.10.4.custom.css b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/jquery-ui-1.10.4.custom.css similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/jquery-ui-1.10.4.custom.css rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/jquery-ui-1.10.4.custom.css diff --git a/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/jquery-ui-1.10.4.custom.min.css b/app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/jquery-ui-1.10.4.custom.min.css similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/css/smoothness/jquery-ui-1.10.4.custom.min.css rename to app/static/libjs/jquery-ui-1.10.4.custom/css/smoothness/jquery-ui-1.10.4.custom.min.css diff --git a/static/libjs/jquery-ui-1.10.4.custom/js/jquery-ui-1.10.4.custom.min.js b/app/static/libjs/jquery-ui-1.10.4.custom/js/jquery-ui-1.10.4.custom.min.js similarity index 100% rename from static/libjs/jquery-ui-1.10.4.custom/js/jquery-ui-1.10.4.custom.min.js rename to app/static/libjs/jquery-ui-1.10.4.custom/js/jquery-ui-1.10.4.custom.min.js diff --git a/static/libjs/jquery.field.min.js b/app/static/libjs/jquery.field.min.js similarity index 100% rename from static/libjs/jquery.field.min.js rename to app/static/libjs/jquery.field.min.js diff --git a/static/libjs/jquery.ui.map.full.min.js b/app/static/libjs/jquery.ui.map.full.min.js similarity index 100% rename from static/libjs/jquery.ui.map.full.min.js rename to app/static/libjs/jquery.ui.map.full.min.js diff --git a/static/libjs/menu.js b/app/static/libjs/menu.js similarity index 100% rename from static/libjs/menu.js rename to app/static/libjs/menu.js diff --git a/static/libjs/moment.min.js b/app/static/libjs/moment.min.js similarity index 100% rename from static/libjs/moment.min.js rename to app/static/libjs/moment.min.js diff --git a/static/libjs/purl.js b/app/static/libjs/purl.js similarity index 100% rename from static/libjs/purl.js rename to app/static/libjs/purl.js diff --git a/static/libjs/qtip/LICENSE b/app/static/libjs/qtip/LICENSE similarity index 100% rename from static/libjs/qtip/LICENSE rename to app/static/libjs/qtip/LICENSE diff --git a/static/libjs/qtip/jquery.qtip-3.0.3.min.css b/app/static/libjs/qtip/jquery.qtip-3.0.3.min.css similarity index 100% rename from static/libjs/qtip/jquery.qtip-3.0.3.min.css rename to app/static/libjs/qtip/jquery.qtip-3.0.3.min.css diff --git a/static/libjs/qtip/jquery.qtip-3.0.3.min.js b/app/static/libjs/qtip/jquery.qtip-3.0.3.min.js similarity index 100% rename from static/libjs/qtip/jquery.qtip-3.0.3.min.js rename to app/static/libjs/qtip/jquery.qtip-3.0.3.min.js diff --git a/static/libjs/rickshaw.min.js b/app/static/libjs/rickshaw.min.js similarity index 100% rename from static/libjs/rickshaw.min.js rename to app/static/libjs/rickshaw.min.js diff --git a/static/libjs/sorttable.js b/app/static/libjs/sorttable.js similarity index 100% rename from static/libjs/sorttable.js rename to app/static/libjs/sorttable.js diff --git a/static/mobile/asset-manifest.json b/app/static/mobile/asset-manifest.json similarity index 100% rename from static/mobile/asset-manifest.json rename to app/static/mobile/asset-manifest.json diff --git a/static/mobile/favicon.ico b/app/static/mobile/favicon.ico similarity index 100% rename from static/mobile/favicon.ico rename to app/static/mobile/favicon.ico diff --git a/static/mobile/index.html b/app/static/mobile/index.html similarity index 100% rename from static/mobile/index.html rename to app/static/mobile/index.html diff --git a/static/mobile/manifest.json b/app/static/mobile/manifest.json similarity index 100% rename from static/mobile/manifest.json rename to app/static/mobile/manifest.json diff --git a/static/mobile/robots.txt b/app/static/mobile/robots.txt similarity index 100% rename from static/mobile/robots.txt rename to app/static/mobile/robots.txt diff --git a/static/mobile/scologo.png b/app/static/mobile/scologo.png similarity index 100% rename from static/mobile/scologo.png rename to app/static/mobile/scologo.png diff --git a/static/mobile/static/css/2.4c97ca4f.chunk.css b/app/static/mobile/static/css/2.4c97ca4f.chunk.css similarity index 100% rename from static/mobile/static/css/2.4c97ca4f.chunk.css rename to app/static/mobile/static/css/2.4c97ca4f.chunk.css diff --git a/static/mobile/static/css/2.4c97ca4f.chunk.css.map b/app/static/mobile/static/css/2.4c97ca4f.chunk.css.map similarity index 100% rename from static/mobile/static/css/2.4c97ca4f.chunk.css.map rename to app/static/mobile/static/css/2.4c97ca4f.chunk.css.map diff --git a/static/mobile/static/css/main.6be5a531.chunk.css b/app/static/mobile/static/css/main.6be5a531.chunk.css similarity index 100% rename from static/mobile/static/css/main.6be5a531.chunk.css rename to app/static/mobile/static/css/main.6be5a531.chunk.css diff --git a/static/mobile/static/css/main.6be5a531.chunk.css.map b/app/static/mobile/static/css/main.6be5a531.chunk.css.map similarity index 100% rename from static/mobile/static/css/main.6be5a531.chunk.css.map rename to app/static/mobile/static/css/main.6be5a531.chunk.css.map diff --git a/static/mobile/static/js/2.fb06b1f5.chunk.js b/app/static/mobile/static/js/2.fb06b1f5.chunk.js similarity index 100% rename from static/mobile/static/js/2.fb06b1f5.chunk.js rename to app/static/mobile/static/js/2.fb06b1f5.chunk.js diff --git a/static/mobile/static/js/2.fb06b1f5.chunk.js.LICENSE.txt b/app/static/mobile/static/js/2.fb06b1f5.chunk.js.LICENSE.txt similarity index 100% rename from static/mobile/static/js/2.fb06b1f5.chunk.js.LICENSE.txt rename to app/static/mobile/static/js/2.fb06b1f5.chunk.js.LICENSE.txt diff --git a/static/mobile/static/js/2.fb06b1f5.chunk.js.map b/app/static/mobile/static/js/2.fb06b1f5.chunk.js.map similarity index 100% rename from static/mobile/static/js/2.fb06b1f5.chunk.js.map rename to app/static/mobile/static/js/2.fb06b1f5.chunk.js.map diff --git a/static/mobile/static/js/3.b810fcea.chunk.js b/app/static/mobile/static/js/3.b810fcea.chunk.js similarity index 100% rename from static/mobile/static/js/3.b810fcea.chunk.js rename to app/static/mobile/static/js/3.b810fcea.chunk.js diff --git a/static/mobile/static/js/3.b810fcea.chunk.js.map b/app/static/mobile/static/js/3.b810fcea.chunk.js.map similarity index 100% rename from static/mobile/static/js/3.b810fcea.chunk.js.map rename to app/static/mobile/static/js/3.b810fcea.chunk.js.map diff --git a/static/mobile/static/js/main.1a008285.chunk.js b/app/static/mobile/static/js/main.1a008285.chunk.js similarity index 100% rename from static/mobile/static/js/main.1a008285.chunk.js rename to app/static/mobile/static/js/main.1a008285.chunk.js diff --git a/static/mobile/static/js/main.1a008285.chunk.js.map b/app/static/mobile/static/js/main.1a008285.chunk.js.map similarity index 100% rename from static/mobile/static/js/main.1a008285.chunk.js.map rename to app/static/mobile/static/js/main.1a008285.chunk.js.map diff --git a/static/mobile/static/js/runtime-main.f39ba660.js b/app/static/mobile/static/js/runtime-main.f39ba660.js similarity index 100% rename from static/mobile/static/js/runtime-main.f39ba660.js rename to app/static/mobile/static/js/runtime-main.f39ba660.js diff --git a/static/mobile/static/js/runtime-main.f39ba660.js.map b/app/static/mobile/static/js/runtime-main.f39ba660.js.map similarity index 100% rename from static/mobile/static/js/runtime-main.f39ba660.js.map rename to app/static/mobile/static/js/runtime-main.f39ba660.js.map diff --git a/static/robots.txt b/app/static/robots.txt similarity index 100% rename from static/robots.txt rename to app/static/robots.txt diff --git a/app/templates/main/index.html b/app/templates/main/index.html index 7ce106fb5..e214e2d36 100644 --- a/app/templates/main/index.html +++ b/app/templates/main/index.html @@ -33,6 +33,12 @@ + +

Config

+
+ static_url_path={{current_app.static_url_path}}
+ static_folder={{current_app.static_folder}} +
{% endblock %} \ No newline at end of file diff --git a/app/views/__init__.py b/app/views/__init__.py index 2299417a4..307d77e68 100644 --- a/app/views/__init__.py +++ b/app/views/__init__.py @@ -9,3 +9,6 @@ absences_bp = Blueprint("absences", __name__) essais_bp = Blueprint("essais", __name__) from app.views import notes, scolar, absences, essais + +scolar.context.Notes = notes.context +scolar.context.Absences = absences.context diff --git a/app/views/notes.py b/app/views/notes.py index 2d8d50d4a..fdc48636d 100644 --- a/app/views/notes.py +++ b/app/views/notes.py @@ -1721,81 +1721,27 @@ def edit_enseignants_form_delete(context, REQUEST, moduleimpl_id, ens_id): ) -# --- Gestion des inscriptions aux modules -_formsemestre_inscriptionEditor = ndb.EditableTable( - "notes_formsemestre_inscription", - "formsemestre_inscription_id", - ("formsemestre_inscription_id", "etudid", "formsemestre_id", "etat", "etape"), - sortkey="formsemestre_id", +# --- Gestion des inscriptions aux semestres + +# Ancienne API, pas certain de la publier en ScoDoc8 +# sco_publish( +# "/do_formsemestre_inscription_create", +# sco_formsemestre_inscriptions.do_formsemestre_inscription_create, +# Permission.ScoEtudInscrit, +# ) +# sco_publish( +# "/do_formsemestre_inscription_edit", +# sco_formsemestre_inscriptions.do_formsemestre_inscription_edit, +# Permission.ScoEtudInscrit, +# ) + +sco_publish( + "/do_formsemestre_inscription_list", + sco_formsemestre_inscriptions.do_formsemestre_inscription_list, + Permission.ScoView, ) -@bp.route("/do_formsemestre_inscription_create") -@permission_required(Permission.ScoEtudInscrit) -@scodoc7func(context) -def do_formsemestre_inscription_create(context, args, REQUEST, method=None): - "create a formsemestre_inscription (and sco event)" - cnx = ndb.GetDBConnexion() - log("do_formsemestre_inscription_create: args=%s" % str(args)) - sems = sco_formsemestre.do_formsemestre_list( - context, {"formsemestre_id": args["formsemestre_id"]} - ) - if len(sems) != 1: - raise ScoValueError("code de semestre invalide: %s" % args["formsemestre_id"]) - sem = sems[0] - # check lock - if sem["etat"] != "1": - raise ScoValueError("inscription: semestre verrouille") - # - r = context._formsemestre_inscriptionEditor.create(cnx, args) - # Evenement - scolars.scolar_events_create( - cnx, - args={ - "etudid": args["etudid"], - "event_date": time.strftime("%d/%m/%Y"), - "formsemestre_id": args["formsemestre_id"], - "event_type": "INSCRIPTION", - }, - ) - # Log etudiant - logdb( - REQUEST, - cnx, - method=method, - etudid=args["etudid"], - msg="inscription en semestre %s" % args["formsemestre_id"], - commit=False, - ) - # - sco_core.inval_cache( - context, formsemestre_id=args["formsemestre_id"] - ) # > inscription au semestre - return r - - -@bp.route("/do_formsemestre_inscription_delete") -@permission_required(Permission.ScoImplement) -@scodoc7func(context) -def do_formsemestre_inscription_delete(context, oid, formsemestre_id=None): - "delete formsemestre_inscription" - cnx = ndb.GetDBConnexion() - context._formsemestre_inscriptionEditor.delete(cnx, oid) - - sco_core.inval_cache( - context, formsemestre_id=formsemestre_id - ) # > desinscription du semestre - - -@bp.route("/do_formsemestre_inscription_list") -@permission_required(Permission.ScoView) -@scodoc7func(context) -def do_formsemestre_inscription_list(context, *args, **kw): - "list formsemestre_inscriptions" - cnx = ndb.GetDBConnexion() - return context._formsemestre_inscriptionEditor.list(cnx, *args, **kw) - - @bp.route("/do_formsemestre_inscription_listinscrits") @permission_required(Permission.ScoView) @scodoc7func(context) @@ -1807,25 +1753,13 @@ def do_formsemestre_inscription_listinscrits( r = cache.get(formsemestre_id) if r is None: # retreive list - r = context.do_formsemestre_inscription_list( + r = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args={"formsemestre_id": formsemestre_id, "etat": "I"} ) cache.set(formsemestre_id, r) return scu.sendResult(REQUEST, r, format=format, name="inscrits") -@bp.route("/do_formsemestre_inscription_edit") -@permission_required(Permission.ScoImplement) -@scodoc7func(context) -def do_formsemestre_inscription_edit(context, args=None, formsemestre_id=None): - "edit a formsemestre_inscription" - cnx = ndb.GetDBConnexion() - context._formsemestre_inscriptionEditor.edit(cnx, args) - sco_core.inval_cache( - context, formsemestre_id=formsemestre_id - ) # > modif inscription semestre (demission ?) - - @bp.route("/formsemestre_desinscription") @permission_required(Permission.ScoImplement) @scodoc7func(context) @@ -1877,7 +1811,7 @@ def formsemestre_desinscription( sem["date_debut"], sem["date_fin"], ) - inscrits = context.do_formsemestre_inscription_list( + inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(context, args={"formsemestre_id": formsemestre_id} ) nbinscrits = len(inscrits) @@ -1905,72 +1839,11 @@ def formsemestre_desinscription( ) -@bp.route("/do_formsemestre_desinscription") -@permission_required(Permission.ScoImplement) -@scodoc7func(context) -def do_formsemestre_desinscription(context, etudid, formsemestre_id, REQUEST=None): - """Désinscription d'un étudiant. - Si semestre extérieur et dernier inscrit, suppression de ce semestre. - """ - sem = sco_formsemestre.get_formsemestre(context, formsemestre_id) - # -- check lock - if sem["etat"] != "1": - raise ScoValueError("desinscription impossible: semestre verrouille") - - # -- Si decisions de jury, desinscription interdite - nt = sco_core.get_notes_cache(context).get_NotesTable(context, formsemestre_id) - if nt.etud_has_decision(etudid): - raise ScoValueError( - "desinscription impossible: l'étudiant a une décision de jury (la supprimer avant si nécessaire)" - ) - - insem = context.do_formsemestre_inscription_list( - args={"formsemestre_id": formsemestre_id, "etudid": etudid} - ) - if not insem: - raise ScoValueError("%s n'est pas inscrit au semestre !" % etudid) - insem = insem[0] - # -- desinscription de tous les modules - cnx = ndb.GetDBConnexion() - cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) - cursor.execute( - "select moduleimpl_inscription_id from notes_moduleimpl_inscription Im, notes_moduleimpl M where Im.etudid=%(etudid)s and Im.moduleimpl_id = M.moduleimpl_id and M.formsemestre_id = %(formsemestre_id)s", - {"etudid": etudid, "formsemestre_id": formsemestre_id}, - ) - res = cursor.fetchall() - moduleimpl_inscription_ids = [x[0] for x in res] - for moduleimpl_inscription_id in moduleimpl_inscription_ids: - sco_moduleimpl.do_moduleimpl_inscription_delete( - context, moduleimpl_inscription_id, formsemestre_id=formsemestre_id - ) - # -- desincription du semestre - context.do_formsemestre_inscription_delete( - insem["formsemestre_inscription_id"], formsemestre_id=formsemestre_id - ) - # --- Semestre extérieur - if sem["modalite"] == "EXT": - inscrits = context.do_formsemestre_inscription_list( - args={"formsemestre_id": formsemestre_id} - ) - nbinscrits = len(inscrits) - if nbinscrits == 0: - log( - "do_formsemestre_desinscription: suppression du semestre extérieur %s" - % formsemestre_id - ) - sco_formsemestre_edit.do_formsemestre_delete( - context, formsemestre_id, REQUEST=REQUEST - ) - - if REQUEST: - logdb( - REQUEST, - cnx, - method="formsemestre_desinscription", - etudid=etudid, - msg="desinscription semestre %s" % formsemestre_id, - commit=False, - ) +sco_publish( + "/do_formsemestre_desinscription", + sco_formsemestre_inscriptions.do_formsemestre_desinscription, + Permission.ScoEtudInscrit, +) @bp.route("/etud_desinscrit_ue") diff --git a/app/views/scolar.py b/app/views/scolar.py index 57ff3721a..788cf4aee 100644 --- a/app/views/scolar.py +++ b/app/views/scolar.py @@ -120,6 +120,7 @@ from app.scodoc import sco_find_etud from app.scodoc import sco_photos from app.scodoc import sco_formsemestre from app.scodoc import sco_formsemestre_edit +from app.scodoc import sco_formsemestre_inscriptions from app.scodoc import sco_news from app.scodoc import html_sco_header from app.scodoc import html_sidebar @@ -287,7 +288,7 @@ def showEtudLog(context, etudid, format="html", REQUEST=None): # ---------- PAGE ACCUEIL (listes) -------------- -sco_publish("/index_html", sco_dept.index_html, Permission.ScoView) +sco_publish("/", sco_dept.index_html, Permission.ScoView) @bp.route("/rssnews") @@ -901,14 +902,14 @@ def _doDem_or_Def_Etudiant( if sem["etat"] != "1": raise ScoValueError("Modification impossible: semestre verrouille") # - ins = context.Notes.do_formsemestre_inscription_list( - {"etudid": etudid, "formsemestre_id": formsemestre_id} + ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list( + context, {"etudid": etudid, "formsemestre_id": formsemestre_id} )[0] if not ins: raise ScoException("etudiant non inscrit ?!") ins["etat"] = etat_new - context.Notes.do_formsemestre_inscription_edit( - args=ins, formsemestre_id=formsemestre_id + sco_formsemestre_inscriptions.do_formsemestre_inscription_edit( + context, args=ins, formsemestre_id=formsemestre_id ) logdb(REQUEST, cnx, method=operation_method, etudid=etudid) scolars.scolar_events_create( @@ -1005,15 +1006,15 @@ def _doCancelDem_or_Def( parameters={"etudid": etudid, "formsemestre_id": formsemestre_id}, ) # - ins = context.Notes.do_formsemestre_inscription_list( - {"etudid": etudid, "formsemestre_id": formsemestre_id} + ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list( + context, {"etudid": etudid, "formsemestre_id": formsemestre_id} )[0] if ins["etat"] != etat_current: raise ScoException("etudiant non %s !!!" % etat_current) # obviously a bug ins["etat"] = etat_new cnx = ndb.GetDBConnexion() - context.Notes.do_formsemestre_inscription_edit( - args=ins, formsemestre_id=formsemestre_id + sco_formsemestre_inscriptions.do_formsemestre_inscription_edit( + context, args=ins, formsemestre_id=formsemestre_id ) logdb(REQUEST, cnx, method=operation_method, etudid=etudid) cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) @@ -2015,8 +2016,8 @@ sco_publish( def stat_bac(context, formsemestre_id): "Renvoie statistisques sur nb d'etudiants par bac" cnx = ndb.GetDBConnexion() - ins = context.Notes.do_formsemestre_inscription_list( - args={"formsemestre_id": formsemestre_id} + ins = sco_formsemestre_inscriptions.do_formsemestre_inscription_list( + context, args={"formsemestre_id": formsemestre_id} ) Bacs = {} # type bac : nb etud for i in ins: @@ -2039,3 +2040,32 @@ sco_publish( ) context.populate(globals()) + + +class FakeUsers: + """Temporary for ScoDoc8 devs""" + + def user_info(self, user_name="test8"): + return { + "user_name": user_name, + "nom": user_name, + "prenom": "", + "email": "", + "dept": "", + "nomprenom": user_name, + "prenomnom": user_name, + "prenom_fmt": "", + "nom_fmt": user_name, + "nomcomplet": user_name, + "nomplogin": user_name, + "nomnoacc": scu.suppress_accents(user_name), + "passwd_temp": 0, + "status": "", + "date_expiration": None, + } + + def get_userlist(self, dept=None, with_olds=False): + return [self.user_info()] + + +context.Users = FakeUsers() \ No newline at end of file diff --git a/config.py b/config.py index 1311f1e4d..85a4206da 100755 --- a/config.py +++ b/config.py @@ -34,8 +34,9 @@ class ConfigClass(object): # For legacy ScoDoc7 installs: postgresql user SCODOC7_SQL_USER = os.environ.get("SCODOC7_SQL_USER", "www-data") DEFAULT_SQL_PORT = os.environ.get("DEFAULT_SQL_PORT", "5432") - - SERVER_NAME = os.environ.get("SERVER_NAME") + # STATIC_URL_PATH = "/ScoDoc/static" + # static_folder = "stat" + # SERVER_NAME = os.environ.get("SERVER_NAME") def __init__(self): """Used to build some config variable at startup time""" diff --git a/refactor.py b/refactor.py index 5db1eb55c..2a4af4f4e 100644 --- a/refactor.py +++ b/refactor.py @@ -178,6 +178,9 @@ def refactor(modulemethod, src_filenames): source2 = source.replace( "context." + method + "(", module + "." + method + "(context, " ) + source2 = source2.replace( + "context.Notes." + method + "(", module + "." + method + "(context, " + ) else: # call in the same module: source2 = source.replace("context." + method + "(", method + "(context, ")