From a2831bd3047080a23eb9ee2f7d162d2c97bdd5a9 Mon Sep 17 00:00:00 2001 From: francis Date: Mon, 20 May 2024 11:07:10 +0200 Subject: [PATCH 01/24] chore: no extra checks fix --- backend/api/serializers/project_serializer.py | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/backend/api/serializers/project_serializer.py b/backend/api/serializers/project_serializer.py index b4493229..2cd65ffa 100644 --- a/backend/api/serializers/project_serializer.py +++ b/backend/api/serializers/project_serializer.py @@ -2,6 +2,7 @@ from api.models.group import Group from api.models.project import Project from api.models.submission import Submission, ExtraCheckResult, StructureCheckResult, StateEnum +from api.models.checks import ExtraCheck, StructureCheck from api.serializers.course_serializer import CourseSerializer from django.core.files.uploadedfile import InMemoryUploadedFile from django.utils import timezone @@ -33,6 +34,24 @@ def to_representation(self, instance: Project): if (groups_submitted > non_empty_groups): non_empty_groups = groups_submitted + extra_checks_count = ExtraCheck.objects.filter( + project=instance + ).count() + + if extra_checks_count: + passed_extra_checks_submission_ids = ExtraCheckResult.objects.filter( + submission__group__project=instance, + submission__is_valid=True, + result=StateEnum.SUCCESS + ).values_list('submission__id', flat=True) + + passed_extra_checks_group_ids = Submission.objects.filter( + id__in=passed_extra_checks_submission_ids + ).values_list('group_id', flat=True) + + unique_groups = set(passed_extra_checks_group_ids) + extra_checks_passed = len(unique_groups) + passed_structure_checks_submission_ids = StructureCheckResult.objects.filter( submission__group__project=instance, submission__is_valid=True, @@ -46,18 +65,12 @@ def to_representation(self, instance: Project): unique_groups = set(passed_structure_checks_group_ids) structure_checks_passed = len(unique_groups) - passed_extra_checks_submission_ids = ExtraCheckResult.objects.filter( - submission__group__project=instance, - submission__is_valid=True, - result=StateEnum.SUCCESS - ).values_list('submission__id', flat=True) - - passed_extra_checks_group_ids = Submission.objects.filter( - id__in=passed_extra_checks_submission_ids - ).values_list('group_id', flat=True) + # If there are no extra checks, we can set extra_checks_passed equal to structure_checks_passed + if not extra_checks_count: + extra_checks_passed = structure_checks_passed - unique_groups = set(passed_extra_checks_group_ids) - extra_checks_passed = len(unique_groups) + # If the extra checks succeed, the structure checks also succeed + structure_checks_passed -= extra_checks_passed # The total number of passed extra checks combined with the number of passed structure checks # can never exceed the total number of submissions (the seeder does not account for this restriction) From 1ab223e3c1375a5b14c8cfd1884b6dbdf04ab6ab Mon Sep 17 00:00:00 2001 From: Vincent Vallaeys Date: Mon, 20 May 2024 15:11:08 +0200 Subject: [PATCH 02/24] Adds all possible error messages to submission fixtures --- backend/api/fixtures/realistic/realistic.yaml | 306 ++++++++++++++++++ 1 file changed, 306 insertions(+) diff --git a/backend/api/fixtures/realistic/realistic.yaml b/backend/api/fixtures/realistic/realistic.yaml index bf2f4f15..2b101567 100644 --- a/backend/api/fixtures/realistic/realistic.yaml +++ b/backend/api/fixtures/realistic/realistic.yaml @@ -324,6 +324,54 @@ submission_time: 2024-05-11 12:08:21.147551+00:00 is_valid: true zip: fixtures/realistic/projects/0/0/submissions/1/submission_2/submission.zip +- model: api.submission + pk: 5 + fields: + group: 1 + submission_number: 5 + submission_time: 2024-05-12 12:08:21.147551+00:00 + is_valid: true + zip: fixtures/realistic/projects/0/0/submissions/1/submission_2/submission.zip +- model: api.submission + pk: 6 + fields: + group: 1 + submission_number: 6 + submission_time: 2024-05-13 12:08:21.147551+00:00 + is_valid: true + zip: fixtures/realistic/projects/0/0/submissions/1/submission_2/submission.zip +- model: api.submission + pk: 7 + fields: + group: 1 + submission_number: 7 + submission_time: 2024-05-14 12:08:21.147551+00:00 + is_valid: true + zip: fixtures/realistic/projects/0/0/submissions/1/submission_2/submission.zip +- model: api.submission + pk: 8 + fields: + group: 1 + submission_number: 8 + submission_time: 2024-05-15 12:08:21.147551+00:00 + is_valid: true + zip: fixtures/realistic/projects/0/0/submissions/1/submission_2/submission.zip +- model: api.submission + pk: 9 + fields: + group: 1 + submission_number: 9 + submission_time: 2024-05-16 12:08:21.147551+00:00 + is_valid: true + zip: fixtures/realistic/projects/0/0/submissions/1/submission_2/submission.zip +- model: api.submission + pk: 10 + fields: + group: 1 + submission_number: 10 + submission_time: 2024-05-17 12:08:21.147551+00:00 + is_valid: true + zip: fixtures/realistic/projects/0/0/submissions/1/submission_2/submission.zip # MARK: Check Result - model: api.checkresult @@ -434,6 +482,168 @@ submission: 4 result: SUCCESS error_message: null +- model: api.checkresult + pk: 13 + fields: + polymorphic_ctype: + - api + - structurecheckresult + submission: 5 + result: FAILED + error_message: BLOCKED_EXTENSION +- model: api.checkresult + pk: 14 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 5 + result: FAILED + error_message: FAILED_STRUCTURE_CHECK +- model: api.checkresult + pk: 15 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 5 + result: FAILED + error_message: FAILED_STRUCTURE_CHECK +- model: api.checkresult + pk: 16 + fields: + polymorphic_ctype: + - api + - structurecheckresult + submission: 6 + result: FAILED + error_message: OBLIGATED_EXTENSION_NOT_FOUND +- model: api.checkresult + pk: 17 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 6 + result: FAILED + error_message: FAILED_STRUCTURE_CHECK +- model: api.checkresult + pk: 18 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 6 + result: FAILED + error_message: FAILED_STRUCTURE_CHECK +- model: api.checkresult + pk: 19 + fields: + polymorphic_ctype: + - api + - structurecheckresult + submission: 7 + result: FAILED + error_message: FILE_DIR_NOT_FOUND +- model: api.checkresult + pk: 20 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 7 + result: FAILED + error_message: FAILED_STRUCTURE_CHECK +- model: api.checkresult + pk: 21 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 7 + result: FAILED + error_message: FAILED_STRUCTURE_CHECK +- model: api.checkresult + pk: 22 + fields: + polymorphic_ctype: + - api + - structurecheckresult + submission: 8 + result: SUCCESS + error_message: null +- model: api.checkresult + pk: 23 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 8 + result: FAILED + error_message: DOCKER_IMAGE_ERROR +- model: api.checkresult + pk: 24 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 8 + result: FAILED + error_message: TIME_LIMIT +- model: api.checkresult + pk: 25 + fields: + polymorphic_ctype: + - api + - structurecheckresult + submission: 9 + result: SUCCESS + error_message: null +- model: api.checkresult + pk: 26 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 9 + result: FAILED + error_message: MEMORY_LIMIT +- model: api.checkresult + pk: 27 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 9 + result: FAILED + error_message: CHECK_ERROR +- model: api.checkresult + pk: 28 + fields: + polymorphic_ctype: + - api + - structurecheckresult + submission: 10 + result: SUCCESS + error_message: null +- model: api.checkresult + pk: 29 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 10 + result: FAILED + error_message: RUNTIME_ERROR +- model: api.checkresult + pk: 30 + fields: + polymorphic_ctype: + - api + - extracheckresult + submission: 10 + result: FAILED + error_message: UNKNOWN # MARK: Strucure Check results - model: api.structurecheckresult @@ -452,6 +662,30 @@ pk: 10 fields: structure_check: 0 +- model: api.structurecheckresult + pk: 13 + fields: + structure_check: 0 +- model: api.structurecheckresult + pk: 16 + fields: + structure_check: 0 +- model: api.structurecheckresult + pk: 19 + fields: + structure_check: 0 +- model: api.structurecheckresult + pk: 22 + fields: + structure_check: 0 +- model: api.structurecheckresult + pk: 25 + fields: + structure_check: 0 +- model: api.structurecheckresult + pk: 28 + fields: + structure_check: 0 # MARK: Extra Check Results - model: api.extracheckresult @@ -502,6 +736,78 @@ extra_check: 1 log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_1.txt artifact: "" +- model: api.extracheckresult + pk: 14 + fields: + extra_check: 0 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_0.txt + artifact: "" +- model: api.extracheckresult + pk: 15 + fields: + extra_check: 1 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_1.txt + artifact: "" +- model: api.extracheckresult + pk: 17 + fields: + extra_check: 0 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_0.txt + artifact: "" +- model: api.extracheckresult + pk: 18 + fields: + extra_check: 1 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_1.txt + artifact: "" +- model: api.extracheckresult + pk: 20 + fields: + extra_check: 0 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_0.txt + artifact: "" +- model: api.extracheckresult + pk: 21 + fields: + extra_check: 1 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_1.txt + artifact: "" +- model: api.extracheckresult + pk: 23 + fields: + extra_check: 0 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_0.txt + artifact: "" +- model: api.extracheckresult + pk: 24 + fields: + extra_check: 1 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_1.txt + artifact: "" +- model: api.extracheckresult + pk: 26 + fields: + extra_check: 0 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_0.txt + artifact: "" +- model: api.extracheckresult + pk: 27 + fields: + extra_check: 1 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_1.txt + artifact: "" +- model: api.extracheckresult + pk: 29 + fields: + extra_check: 0 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_0.txt + artifact: "" +- model: api.extracheckresult + pk: 30 + fields: + extra_check: 1 + log_file: fixtures/realistic/projects/0/0/submissions/1/submission_2/logs/log_extra_check_1.txt + artifact: "" # MARK: Teachers - model: api.teacher From 00f5ea2a162a8113c76d99b3522c8e769ced23e9 Mon Sep 17 00:00:00 2001 From: Bram Meir <159529490+BramMeir@users.noreply.github.com> Date: Mon, 20 May 2024 15:15:48 +0200 Subject: [PATCH 03/24] Cleanup translations (#442) * fix: show toggle button project list also when there are only projects in the past * fix: cleanup translations * fix: default submission status argument * chore: remove unused translations * chore: cleanup translations * fix: linting --- frontend/src/assets/lang/app/en.json | 88 +++++------------- frontend/src/assets/lang/app/nl.json | 89 ++++++------------- .../src/components/admin/LazyDataTable.vue | 2 +- .../components/layout/admin/AdminHeader.vue | 2 +- .../components/layout/admin/AdminSidebar.vue | 2 +- .../src/components/projects/ProjectList.vue | 14 +-- .../TeacherAssistantSearch.vue | 3 + .../buttons/CourseRoleAddButton.vue | 2 +- frontend/src/types/Project.ts | 2 +- frontend/src/views/admin/DockerImagesView.vue | 12 +-- frontend/src/views/admin/UsersView.vue | 2 +- .../src/views/authentication/VerifyView.vue | 11 ++- .../src/views/courses/SearchCourseView.vue | 2 +- .../src/views/projects/CreateProjectView.vue | 10 +-- .../src/views/projects/UpdateProjectView.vue | 8 +- 15 files changed, 90 insertions(+), 159 deletions(-) diff --git a/frontend/src/assets/lang/app/en.json b/frontend/src/assets/lang/app/en.json index 9e86d683..b90ecd77 100644 --- a/frontend/src/assets/lang/app/en.json +++ b/frontend/src/assets/lang/app/en.json @@ -2,16 +2,14 @@ "layout": { "header": { "logo": "Ghent University logo", - "login": "login", + "login": "Login", "view": "View as {0}", "user": "Logged in as {0}", "navigation": { "dashboard": "Dashboard", "calendar": "Calendar", - "courses": "courses", - "projects": "projects", - "settings": "preferences", - "help": "help" + "courses": "Courses", + "projects": "Projects" }, "language": { "nl": "Nederlands", @@ -46,7 +44,7 @@ "coming": "Near deadlines", "deadline": "Deadline", "days": "Today at {hour} | Tomorrow at {hour} | In {count} days", - "ago": "{count} days ago", + "ago": "1 day ago | {count} days ago", "groupName": "Group name", "groupPopulation": "Size", "groupStatus": "Status", @@ -63,10 +61,10 @@ "edit": "Edit project", "name": "Project name", "description": "Description", - "start_date": "Start project", - "group_size": "Number of students in a group (1 for an individual project)", - "number_of_groups": "Number of groups (optional, otherwise #students / group size)", - "max_score": "Maximum score that can be achieved", + "startDate": "Start project", + "numberStudentsGroup": "Number of students in a group (1 for an individual project)", + "numberOfGroups": "Number of groups (optional, otherwise #students / group size)", + "maxScore": "Maximum score that can be achieved", "visibility": "Make project visible to students", "scoreVisibility": "Make score, when uploaded, automatically visible to students", "submissionStructure": "Structure of how a submission should be made", @@ -82,7 +80,7 @@ "dockerImage": "Docker image", "timeLimit": "Time limit for execution (in seconds)", "memoryLimit": "Memory limit for execution (in MB)", - "showLog": "Making the extra logs of the docker container visible to the students" + "showLog": "Make the extra logs of the docker container visible to the students" } }, "submissions": { @@ -110,7 +108,6 @@ "clone": "Clone course", "cloneAssistants": "Clone assistants:", "cloneTeachers": "Clone teachers:", - "cloneCourse": "Clone teachers:", "name": "Course name", "description": "Description", "excerpt": "Short description", @@ -122,17 +119,14 @@ "noProjects": "No projects available for this course", "teachersAndAssistants": { "title": "People linked to this course", - "enroll": "Add as {0}", - "leave": "Remove from course", "edit": "Edit users", "search": { "search": "Search", "faculty": "Faculty", - "role": "Role", - "no_role": "None", + "noRole": "None", "placeholder": "Search a user by name", "title": "Find users to link to this course", - "results": "{0} users found for set filters" + "results": "1 user found for set filters | {count} users found for set filters" } }, "search": { @@ -141,10 +135,7 @@ "year": "Academic year", "placeholder": "Search a course by name", "title": "Search a course", - "results": "{0} courses found for set filters" - }, - "searchByLink": { - "placeholder": "Find a course using the registration link" + "results": "1 course found for set filters | {count} courses found for set filters" }, "share": { "title": "Activate invitation link", @@ -157,14 +148,13 @@ "helpers": { "errors": { "notFound": "Not found", - "notFoundDetail": "Source not found", - "unauthorized": "unauthorized", + "notFoundDetail": "Source not found.", + "unauthorized": "Unauthorized", "unauthorizedDetail": "You are not authorized to access this resource.", - "server": "Server Error", - "serverDetail": "An error occurred on the server.", - "network": "Network Error", + "server": "Server error", + "network": "Network error", "networkDetail": "Unable to reach the server.", - "request": "request error", + "request": "Request error", "requestDetail": "An error occurred while creating the request." } } @@ -176,8 +166,6 @@ "createProject": "Create a new project", "searchCourse": "Search a course", "createCourse": "Create a new course", - "public": "Public", - "protected": "Protected", "csv": "Download grades as a .csv file" }, "card": { @@ -201,7 +189,6 @@ "teacher": "No courses found. Create a new course with the button below.", "search": "No courses found for the given search criteria." }, - "noResults": "No results.", "noIncomingProjects": "No projects with a deadline within 7 days.", "selectCourse": "Select the course for which you want to create a project:", "showPastProjects": "Projects with passed deadline" @@ -250,7 +237,7 @@ "save": { "error": { "title": "Invalid save operation", - "detail": "You are trying to save an item without selecting it" + "detail": "You are trying to save an item without selecting it." } } } @@ -266,25 +253,8 @@ "leaveCourse": "Are you sure you want to leave this course? You will no longer have access to this course.", "shareCourse": "By activating the invitation link, you allow students in possession of this link to enroll in this course. Please copy the generated link, only when you click on \"Activate invitation link\" will this link become active." }, - "protectedCourses": { - "screen1": { - "title": "Obtain invitation link", - "content": "Teachers can choose to make their courses private. This means you have to ask the teacher for an invitation link, to be able to join the course." - }, - "screen2": { - "title": "Search course", - "content": "Use the invitation link to search a course. If you can't find the course, ask the teacher to share a new link." - - }, - "screen3": { - "title": "Enroll", - "content": "Enroll in the course. Now you can see all the current projects, deadlines, ..." - - } - }, "admin": { "title": "Admin", - "keyword": "Keyword", "id": "ID", "list": "List", "add": "Add", @@ -303,31 +273,19 @@ "roles": "Roles" }, "user": "User", - "assistants": { - "title": "Assistants" - }, "assistant": "Assistant", - "students": { - "title": "Students" - }, "student": "Student", - "teachers": { - "title": "Teachers" - }, "teacher": "Teacher", - "catalog": "Catalog", - "docker_images": { + "dockerImages": { "title": "Docker Images", - "name_input": "Name of docker image", + "nameInput": "Name of docker image", "name": "Name", "owner": "Owner ID", - "public": "Public", - "private": "Private" + "public": "Public" }, - "none_found": "No matching data.", + "noneFound": "No matching data.", "loading": "Loading data. Please wait.", - "safeGuard": "Are you sure?", - "no_file": "No file found." + "safeGuard": "Are you sure?" }, "primevue": { "startsWith": "Starts with", diff --git a/frontend/src/assets/lang/app/nl.json b/frontend/src/assets/lang/app/nl.json index 884cb246..e9ed6148 100644 --- a/frontend/src/assets/lang/app/nl.json +++ b/frontend/src/assets/lang/app/nl.json @@ -9,9 +9,7 @@ "dashboard": "Dashboard", "calendar": "Kalender", "courses": "Vakken", - "projects": "Projecten", - "settings": "Voorkeuren", - "help": "Help" + "projects": "Projecten" }, "language": { "nl": "Nederlands", @@ -25,7 +23,7 @@ "projects": "Lopende projecten" }, "verify": { - "redirect": "Je wordt zo meteen doorverwezen" + "redirect": "Je wordt zo meteen doorverwezen..." }, "login": { "title": "Inloggen", @@ -34,7 +32,7 @@ "button": "UGent login", "card": { "title": "Ypovoli", - "subtitle": "Het officieel indieningsplatform van de Universiteit Gent." + "subtitle": "Het officiële indieningsplatform van de Universiteit Gent." } }, "calendar": { @@ -46,7 +44,7 @@ "coming": "Aankomende deadlines", "deadline": "Deadline", "days": "Vandaag om {hour} | Morgen om {hour} | Over {count} dagen", - "ago": "{count} dagen geleden", + "ago": "1 dag geleden | {count} dagen geleden", "groupName": "Groepsnaam", "groupPopulation": "Grootte", "groupStatus": "Status", @@ -63,14 +61,16 @@ "edit": "Bewerk project", "name": "Projectnaam", "description": "Beschrijving", - "start_date": "Start project", - "group_size": "Aantal studenten per groep (1 voor individueel project)", - "number_of_groups": "Aantal groepen (optioneel, anders #studenten / grootte groep)", - "max_score": "Maximale te behalen score", + "startDate": "Start project", + "numberStudentsGroup": "Aantal studenten per groep (1 voor individueel project)", + "numberOfGroups": "Aantal groepen (optioneel, anders #studenten / grootte groep)", + "maxScore": "Maximale te behalen score", "visibility": "Project zichtbaar maken voor studenten", "scoreVisibility": "Maak score, wanneer ingevuld, automatisch zichtbaar voor studenten", "submissionStructure": "Structuur van hoe de indiening moet gebeuren", "noStudents": "Geen studenten in deze groep", + "locked": "Gesloten", + "unlocked": "Open", "extraChecks": { "title": "Automatische checks op een indiening", "add": "Nieuwe check", @@ -84,7 +84,7 @@ } }, "submissions": { - "title": "Inzendingen", + "title": "Indieningen", "submit": "Indienen", "course": "Vak", "chooseFile": "Kies bestand(en)", @@ -112,24 +112,21 @@ "description": "Beschrijving", "excerpt": "Korte beschrijving", "faculty": "Faculteit", - "private": "Gesloten vak (studenten kunnen enkel inschrijven via uitnodigingslink)", + "private": "Gesloten vak (studenten kunnen enkel inschrijven met een uitnodigingslink)", "year": "Academiejaar", "enroll": "Inschrijven", "leave": "Uitschrijven", "noProjects": "Geen projecten beschikbaar voor dit vak", "teachersAndAssistants": { "title": "Lesgevers gelinkt aan dit vak", - "enroll": "Voeg toe als {0}", - "leave": "Verwijder uit vak", "edit": "Bewerk gebruikers", "search": { "search": "Zoeken", "faculty": "Faculteit", - "role": "Rol", - "no_role": "Geen", + "noRole": "Geen", "placeholder": "Zoek een gebruiker op naam", "title": "Zoek gebuikers om aan dit vak toe te voegen", - "results": "{0} gebruikers gevonden voor ingestelde filters" + "results": "1 gebruiker gevonden voor ingestelde filters | {count} gebruikers gevonden voor ingestelde filters" } }, "search": { @@ -138,28 +135,24 @@ "year": "Academiejaar", "placeholder": "Zoek een vak op naam", "title": "Zoek een vak", - "results": "{0} vakken gevonden voor ingestelde filters" - }, - "searchByLink": { - "placeholder": "Zoek een vak gebruik makende van een uitnodigingslink" + "results": "1 vak gevonden voor ingestelde filters | {count} vakken gevonden voor ingestelde filters" }, "share": { "title": "Activeer invitatielink", "duration": "Geldigheidsduur van link (in dagen):", "link": "Invitatielink:" } - } + } }, "composables": { "helpers": { "errors": { - "notFound": "Niet Gevonden", + "notFound": "Niet gevonden", "notFoundDetail": "Bron niet gevonden.", "unauthorized": "Onbevoegd", "unauthorizedDetail": "Je bent niet bevoegd om deze bron te bereiken.", - "server": "Server Fout", - "serverDetail": "Er vond een fout plaats op de server.", - "network": "Netwerk Fout", + "server": "Server fout", + "network": "Netwerk fout", "networkDetail": "Kan de server niet bereiken.", "request": "Fout verzoek", "requestDetail": "Een fout vond plaats tijdens het maken van het verzoek." @@ -173,8 +166,6 @@ "createProject": "Creëer nieuw project", "searchCourse": "Zoek een vak", "createCourse": "Maak een vak", - "public": "Publiek", - "protected": "Besloten", "csv": "Download punten als een .csv bestand" }, "card": { @@ -191,14 +182,13 @@ "list": { "noProjects": { "student": "Geen lopende projecten gevonden voor alle ingeschreven vakken. Schrijf in op een openbaar vak met de zoekfunctie, of gebruik een uitnodiginslink van een lesgever.", - "teacher": "Geen lopende projecten gevonden voor de vakken waarvoor je lesgever bent." + "teacher": "Geen lopende projecten gevonden voor de vakken waarvoor je lesgever bent. Maak een nieuw project voor een vak met onderstaande knop." }, "noCourses": { "student": "Geen vakken gevonden. Schrijf in op een openbaar vak met de zoekfunctie, of gebruik een uitnodiginslink van een lesgever.", "teacher": "Geen vakken gevonden. Maak een vak aan met onderstaande knop.", "search": "Geen vakken gevonden voor de gegeven zoekcriteria." }, - "noResults": "Geen resultaten.", "noIncomingProjects": "Geen projecten met een deadline binnen de 7 dagen.", "selectCourse": "Selecteer het vak waarvoor je een project wil maken:", "showPastProjects": "Projecten met verstreken deadline" @@ -246,8 +236,8 @@ "admin": { "save": { "error": { - "title": "Ongeldige opsla operatie", - "detail": "U probeert een item op te slaan zonder dit te selecteren" + "title": "Ongeldige opsla bewerking", + "detail": "U probeert een item op te slaan zonder dit te selecteren." } } } @@ -263,24 +253,8 @@ "leaveCourse": "Ben je zeker dat je dit vak wil verlaten? Je zal geen toegang meer hebben tot dit vak.", "shareCourse": "Door het activeren van de invitatielink staat u studenten in bezit van deze link toe zich in te schrijven voor dit vak. Gelieve de gegenereerde link te kopiëren, pas wanneer u op \"Activeer invitatielink\" klikt zal deze link actief worden." }, - "protectedCourses": { - "screen1": { - "title": "Bemachtigen link", - "content": "Professoren kunnen kiezen om hun vakken niet publiek te maken. Vraag de prof om een invitatielink te delen om te kunnen toetreden tot het vak." - }, - "screen2": { - "title": "Vak zoeken", - "content": "Gebruik de link om het vak te zoeken. Als je het vak niet kan vinden, kan je de prof vragen om een nieuwe link te delen." - - }, - "screen3": { - "title": "Inschrijven", - "content": "Schrijf je in voor het vak. Je kan nu een overzicht raadplegen van alle lopende projecten, deadlines, ..." - } - }, "admin": { "title": "Beheerder", - "keyword": "Trefwoord", "id": "ID", "list": "Lijst", "add": "Voeg toe", @@ -299,28 +273,17 @@ "roles": "Functies" }, "user": "Gebruiker", - "assistants": { - "title": "Assistenten" - }, "assistant": "Assistent", - "students": { - "title": "Studenten" - }, "student": "Student", - "teachers": { - "title": "Proffen" - }, "teacher": "Prof", - "catalog": "Catalogus", - "docker_images": { + "dockerImages": { "title": "Docker Images", - "name_input": "Naam van docker image", + "nameInput": "Naam van docker image", "name": "Naam", "owner": "Eigenaar ID", - "public": "Publiek", - "private": "Privaat" + "public": "Publiek" }, - "none_found": "Geen overeenkomende data gevonden.", + "noneFound": "Geen overeenkomende data gevonden.", "loading": "Aan het laden. Wacht even aub.", "safeGuard": "Bent u het zeker?" }, diff --git a/frontend/src/components/admin/LazyDataTable.vue b/frontend/src/components/admin/LazyDataTable.vue index dcdfe499..49b91e89 100644 --- a/frontend/src/components/admin/LazyDataTable.vue +++ b/frontend/src/components/admin/LazyDataTable.vue @@ -118,7 +118,7 @@ defineExpose({ fetch });