diff --git a/advlabdb/__init__.py b/advlabdb/__init__.py index 9054cdf..1c593a9 100644 --- a/advlabdb/__init__.py +++ b/advlabdb/__init__.py @@ -46,17 +46,15 @@ adminSpace = Admin( app, name="Admin@AdvLabDB", url="/admin", - endpoint="adminSpace", template_mode="bootstrap3", - index_view=customClasses.SecureAdminIndexView(name="Home", url="/admin", endpoint="adminSpace"), + index_view=customClasses.SecureAdminIndexView(name="Home", url="/admin", endpoint="admin"), ) assistantSpace = Admin( app, name="Assistant@AdvLabDB", url="/assistant", - endpoint="assistantSpace", template_mode="bootstrap3", - index_view=customClasses.SecureAssistantIndexView(name="Home", url="/assistant", endpoint="assistantSpace"), + index_view=customClasses.SecureAssistantIndexView(name="Home", url="/assistant", endpoint="assistant"), ) from . import models diff --git a/advlabdb/adminModelViews.py b/advlabdb/adminModelViews.py index 18af61d..c7367f4 100644 --- a/advlabdb/adminModelViews.py +++ b/advlabdb/adminModelViews.py @@ -414,7 +414,7 @@ class StudentView(SecureAdminModelView): column_extra_row_actions = [ EndpointLinkRowAction( icon_class="fa fa-history", - endpoint="experimentmark.index_view", + endpoint="admin_experiment_mark.index_view", id_arg="flt1_0", title="Experiments history", ) @@ -499,17 +499,17 @@ class PartStudentView(SecureAdminModelView): column_extra_row_actions = [ StudentEndpointLinkRowAction( icon_class="fa fa-user", - endpoint="student.details_view", + endpoint="admin_student.details_view", title="Student", ), GroupEndpointLinkRowAction( icon_class="fa fa-users", - endpoint="group.details_view", + endpoint="admin_group.details_view", title="Group", ), PartEndpointLinkRowAction( icon_class="fa fa-puzzle-piece", - endpoint="part.details_view", + endpoint="admin_part.details_view", title="Part", ), ] @@ -565,6 +565,8 @@ class GroupView(SecureAdminModelView): return CustomForm + can_view_details = True + column_display_all_relations = True column_exclude_list = [ @@ -719,7 +721,7 @@ class SemesterExperimentView(SecureAdminModelView): column_extra_row_actions = [ ExperimentEndpointLinkRowAction( icon_class="fa fa-flask", - endpoint="experiment.details_view", + endpoint="admin_experiment.details_view", title="Experiment", ), ] @@ -823,7 +825,7 @@ class AssistantView(SecureAdminModelView): column_extra_row_actions = [ UserEndpointLinkRowAction( icon_class="fa fa-user", - endpoint="user.details_view", + endpoint="admin_user.details_view", title="User", ), ] @@ -851,7 +853,7 @@ class AdminView(SecureAdminModelView): column_extra_row_actions = [ UserEndpointLinkRowAction( icon_class="fa fa-user", - endpoint="user.details_view", + endpoint="admin_user.details_view", title="User", ), ] @@ -965,6 +967,8 @@ class GroupExperimentView(SecureAdminModelView): note = group_experiment_note_field() + can_view_details = True + column_display_all_relations = True column_filters = ( @@ -978,12 +982,12 @@ class GroupExperimentView(SecureAdminModelView): column_extra_row_actions = [ GroupEndpointLinkRowAction( icon_class="fa fa-users", - endpoint="group.details_view", + endpoint="admin_group.details_view", title="Group", ), SemesterExperimentEndpointLinkRowAction( icon_class="fa fa-flask", - endpoint="semesterexperiment.details_view", + endpoint="admin_semester_experiment.details_view", title="SemesterExperiment", ), ] @@ -1080,12 +1084,12 @@ class AppointmentView(SecureAdminModelView): column_extra_row_actions = [ GroupExperimentEndpointLinkRowAction( icon_class="fa fa-flask", - endpoint="groupexperiment.details_view", + endpoint="admin_group_experiment.details_view", title="GroupExperiment", ), AssistantEndpointLinkRowAction( icon_class="fa fa-user-secret", - endpoint="assistant.details_view", + endpoint="admin_assistant.details_view", title="Assistant", ), ] @@ -1233,17 +1237,17 @@ class ExperimentMarkView(SecureAdminModelView): column_extra_row_actions = [ PartStudentEndpointLinkRowAction( icon_class="fa fa-user", - endpoint="partstudent.details_view", + endpoint="admin_part_student.details_view", title="PartStudent", ), GroupExperimentEndpointLinkRowAction( icon_class="fa fa-flask", - endpoint="groupexperiment.details_view", + endpoint="admin_group_experiment.details_view", title="GroupExperiment", ), AssistantEndpointLinkRowAction( icon_class="fa fa-user-secret", - endpoint="assistant.details_view", + endpoint="admin_assistant.details_view", title="Assistant", ), ] @@ -1508,20 +1512,20 @@ class DocsView(SecureAdminBaseView): return self.render("docs/docs.html", role="admin") -adminSpace.add_view(StudentView(Student, db.session, url="student")) -adminSpace.add_view(PartStudentView(PartStudent, db.session, url="part_student")) -adminSpace.add_view(GroupView(Group, db.session, url="group")) -adminSpace.add_view(GroupExperimentView(GroupExperiment, db.session, url="group_experiment")) -adminSpace.add_view(AppointmentView(Appointment, db.session, url="appointment")) -adminSpace.add_view(ExperimentMarkView(ExperimentMark, db.session, url="experiment_mark")) -adminSpace.add_view(ExperimentView(Experiment, db.session, url="experiment")) -adminSpace.add_view(SemesterExperimentView(SemesterExperiment, db.session, url="semester_experiment")) -adminSpace.add_view(SemesterView(Semester, db.session, url="semester")) -adminSpace.add_view(PartView(Part, db.session, url="part")) -adminSpace.add_view(AssistantView(Assistant, db.session, url="assistant")) -adminSpace.add_view(AdminView(Admin, db.session, url="admin")) -adminSpace.add_view(UserView(User, db.session, url="user")) -adminSpace.add_view(ProgramView(Program, db.session, url="program")) +adminSpace.add_view(StudentView(Student, url="student")) +adminSpace.add_view(PartStudentView(PartStudent, url="part_student")) +adminSpace.add_view(GroupView(Group, url="group")) +adminSpace.add_view(GroupExperimentView(GroupExperiment, url="group_experiment")) +adminSpace.add_view(AppointmentView(Appointment, url="appointment")) +adminSpace.add_view(ExperimentMarkView(ExperimentMark, url="experiment_mark")) +adminSpace.add_view(ExperimentView(Experiment, url="experiment")) +adminSpace.add_view(SemesterExperimentView(SemesterExperiment, url="semester_experiment")) +adminSpace.add_view(SemesterView(Semester, url="semester")) +adminSpace.add_view(PartView(Part, url="part")) +adminSpace.add_view(AssistantView(Assistant, url="assistant")) +adminSpace.add_view(AdminView(Admin, url="admin")) +adminSpace.add_view(UserView(User, url="user")) +adminSpace.add_view(ProgramView(Program, url="program")) adminSpace.add_view(ImportView(name="Import", url="import")) adminSpace.add_view(ActionsView(name="Actions", url="actions")) adminSpace.add_view(AnalysisView(name="Analysis", url="analysis")) diff --git a/advlabdb/assistantModelViews.py b/advlabdb/assistantModelViews.py index 3be12a5..582d783 100644 --- a/advlabdb/assistantModelViews.py +++ b/advlabdb/assistantModelViews.py @@ -60,7 +60,7 @@ class AssistantGroupExperimentView(SecureAssistantModelView): column_extra_row_actions = [ EndpointLinkRowAction( icon_class="fa fa-pencil", - endpoint="assistant_groupexperiment.form_view", + endpoint="assistant_group_experiment.form_view", title="Edit", ) ] @@ -225,12 +225,8 @@ class AssistantDocsView(SecureAssistantBaseView): return self.render("docs/docs.html", role="assistant") -assistantSpace.add_view( - AssistantGroupExperimentView( - GroupExperiment, db.session, endpoint="assistant_groupexperiment", url="group_experiment" - ) -) -assistantSpace.add_view(AssistantUserView(User, db.session, endpoint="assistant_user", url="user")) -assistantSpace.add_view(AssistantDocsView(name="Docs", endpoint="assistant_docs", url="docs")) +assistantSpace.add_view(AssistantGroupExperimentView(GroupExperiment, url="group_experiment")) +assistantSpace.add_view(AssistantUserView(User, url="user")) +assistantSpace.add_view(AssistantDocsView(name="Docs", url="docs")) initActiveSemesterMenuLinks(assistantSpace) diff --git a/advlabdb/customClasses.py b/advlabdb/customClasses.py index 83b9610..6368bf7 100644 --- a/advlabdb/customClasses.py +++ b/advlabdb/customClasses.py @@ -28,6 +28,14 @@ def assistantViewIsAccessible(): return current_user.has_role("assistant") +def get_url(kwargs): + url = kwargs["url"] + if "/" in url: + raise ModelViewException("url can not contain a slash!") + + return url + + class CustomIndexView(AdminIndexView): def inaccessible_callback(self, name, **kwargs): # Redirect to login page if user doesn't have access @@ -205,6 +213,10 @@ class SecureAdminModelView(CustomModelView): edit_template = "admin_edit.html" details_template = "admin_details.html" + def __init__(self, model, **kwargs): + url = get_url(kwargs) + super().__init__(model, db.session, endpoint="admin_" + url, **kwargs) + def is_accessible(self): return adminViewIsAccessible() @@ -232,6 +244,10 @@ class SecureAssistantModelView(CustomModelView): can_create = False can_delete = False + def __init__(self, model, **kwargs): + url = get_url(kwargs) + super().__init__(model, db.session, endpoint="assistant_" + url, **kwargs) + def is_accessible(self): return assistantViewIsAccessible() @@ -305,11 +321,19 @@ class SecureAssistantModelView(CustomModelView): class SecureAdminBaseView(BaseView): + def __init__(self, **kwargs): + url = get_url(kwargs) + super().__init__(endpoint="admin_" + url, **kwargs) + def is_accessible(self): return adminViewIsAccessible() class SecureAssistantBaseView(BaseView): + def __init__(self, **kwargs): + url = get_url(kwargs) + super().__init__(endpoint="assistant_" + url, **kwargs) + def is_accessible(self): return assistantViewIsAccessible() diff --git a/advlabdb/routes.py b/advlabdb/routes.py index 4c0db0b..d66e8e8 100644 --- a/advlabdb/routes.py +++ b/advlabdb/routes.py @@ -16,22 +16,19 @@ def util_processor(): @app.route("/") def index(): if current_user.has_role("admin"): - url = url_for("index") + "admin" - - if current_user.login_count == 1: - url += "/docs" - - return redirect(url) + endpoint_base = "admin" elif current_user.has_role("assistant"): - url = url_for("index") + "assistant" - - if current_user.login_count == 1: - url += "/docs" - - return redirect(url) + endpoint_base = "assistant" else: return redirect(url_for("security.login")) + if current_user.login_count == 1: + url = url_for(endpoint_base + ".docs_view") + else: + url = url_for(endpoint_base + ".index") + + return redirect(url) + @app.route("/set_semester") @auth_required()