diff --git a/frontend/src/components/Assessments.vue b/frontend/src/components/Assessments.vue index 8e963659..86798c99 100644 --- a/frontend/src/components/Assessments.vue +++ b/frontend/src/components/Assessments.vue @@ -8,7 +8,29 @@ :columns="getAssessmentColumns()" :rows="assessments.data" row-key="name" - :options="{ selectable: false, showTooltip: false }" + :options="{ + selectable: false, + showTooltip: false, + getRowRoute: (row) => { + if (row.submission) { + return { + name: 'AssignmentSubmission', + params: { + assignmentName: row.assessment_name, + submissionName: row.submission.name, + }, + } + } else { + return { + name: 'AssignmentSubmission', + params: { + assignmentName: row.assessment_name, + submissionName: 'new', + }, + } + } + }, + }" > diff --git a/frontend/src/components/UserDropdown.vue b/frontend/src/components/UserDropdown.vue index 8e39867f..adb97a02 100644 --- a/frontend/src/components/UserDropdown.vue +++ b/frontend/src/components/UserDropdown.vue @@ -53,7 +53,7 @@ diff --git a/frontend/src/pages/CreateCourse.vue b/frontend/src/pages/CreateCourse.vue index 41305b79..1de964fd 100644 --- a/frontend/src/pages/CreateCourse.vue +++ b/frontend/src/pages/CreateCourse.vue @@ -221,7 +221,7 @@ const course = reactive({ onMounted(() => { if (!user.data?.is_moderator || !user.data?.is_instructor) { - window.location.href = '/login' + router.push({ name: 'Courses' }) } if (props.courseName !== 'new') { courseResource.reload() diff --git a/frontend/src/router.js b/frontend/src/router.js index 61163aff..785d9cb6 100644 --- a/frontend/src/router.js +++ b/frontend/src/router.js @@ -96,6 +96,12 @@ const routes = [ component: () => import('@/pages/JobCreation.vue'), props: true, }, + { + path: '/assignment-submission/:assignmentName/:submissionName', + name: 'AssignmentSubmission', + component: () => import('@/pages/AssignmentSubmission.vue'), + props: true, + }, ] let router = createRouter({ diff --git a/frontend/src/stores/session.js b/frontend/src/stores/session.js index c4ced34f..564db2d8 100644 --- a/frontend/src/stores/session.js +++ b/frontend/src/stores/session.js @@ -41,20 +41,10 @@ export const sessionStore = defineStore('lms-session', () => { }, }) - const branding = createResource({ - url: 'lms.lms.api.get_branding', - auto: true, - cache: true, - onSuccess(data) { - document.querySelector("link[rel='icon']").href = data.favicon - }, - }) - return { user, isLoggedIn, login, logout, - branding, } }) diff --git a/lms/lms/doctype/lms_assignment/lms_assignment.json b/lms/lms/doctype/lms_assignment/lms_assignment.json index 654989d5..a0e3dde8 100644 --- a/lms/lms/doctype/lms_assignment/lms_assignment.json +++ b/lms/lms/doctype/lms_assignment/lms_assignment.json @@ -64,7 +64,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2023-10-06 12:08:46.898950", + "modified": "2024-04-05 12:01:36.601160", "modified_by": "Administrator", "module": "LMS", "name": "LMS Assignment", @@ -94,6 +94,15 @@ "role": "Moderator", "share": 1, "write": 1 + }, + { + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "LMS Student", + "share": 1 } ], "show_title_field_in_link": 1, diff --git a/lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json b/lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json index 86c71c4d..609d1258 100644 --- a/lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json +++ b/lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json @@ -156,7 +156,7 @@ "index_web_pages_for_search": 1, "links": [], "make_attachments_public": 1, - "modified": "2023-10-06 15:14:55.984714", + "modified": "2024-04-05 15:57:22.758563", "modified_by": "Administrator", "module": "LMS", "name": "LMS Assignment Submission", @@ -174,6 +174,18 @@ "role": "System Manager", "share": 1, "write": 1 + }, + { + "create": 1, + "email": 1, + "export": 1, + "if_owner": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "LMS Student", + "share": 1, + "write": 1 } ], "sort_field": "modified", diff --git a/lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.py b/lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.py index c35f5b49..d99ff566 100644 --- a/lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.py +++ b/lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.py @@ -11,10 +11,15 @@ from frappe.email.doctype.email_template.email_template import get_email_templat class LMSAssignmentSubmission(Document): def validate(self): self.validate_duplicates() + self.validate_url() def after_insert(self): if not frappe.flags.in_test: - self.send_mail() + outgoing_email_account = frappe.get_cached_value( + "Email Account", {"default_outgoing": 1, "enable_outgoing": 1}, "name" + ) + if outgoing_email_account: + self.send_mail() def validate_duplicates(self): if frappe.db.exists( @@ -28,6 +33,10 @@ class LMSAssignmentSubmission(Document): ) ) + def validate_url(self): + if self.type == "URL" and not validate_url(self.answer): + frappe.throw(_("Please enter a valid URL.")) + def send_mail(self): subject = _("New Assignment Submission") template = "assignment_submission"