Updated basically the rest of the pages.

This commit is contained in:
Andrew Lalis 2019-05-17 20:39:28 +02:00 committed by andrewlalis
parent 13dd59aa8f
commit 3333fec82e
16 changed files with 196 additions and 253 deletions

View File

@ -1,5 +1,6 @@
package nl.andrewlalis.teaching_assistant_assistant.controllers.students.entity;
import nl.andrewlalis.teaching_assistant_assistant.controllers.UserPageController;
import nl.andrewlalis.teaching_assistant_assistant.model.people.Student;
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.StudentRepository;
import nl.andrewlalis.teaching_assistant_assistant.services.StudentService;
@ -16,7 +17,7 @@ import java.util.Optional;
* Controller for editing a student entity.
*/
@Controller("/students/{id}/edit")
public class StudentEntityEditController {
public class StudentEntityEditController extends UserPageController {
private StudentRepository studentRepository;
private StudentService studentService;

View File

@ -1,24 +1,22 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar_content})}">
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Import Students From CSV', content=~{::#content})}">
<head>
<title>Import Students via CSV</title>
</head>
<body>
<div id="content">
<h1>Import Students from CSV File</h1>
<div id="content" class="row justify-content-center">
<p>
Use this form to import student data from a CSV which has been generated by a Google form. As of right now, the column headers are hard-coded, but in the future it will be possible to dynamically import data from any CSV file by custom header format definitions.
</p>
<form method="post" action="#" enctype="multipart/form-data" th:action="@{/courses/{code}/import_students(code=${course.getCode()})}">
<div class="page_row">
<form method="post" enctype="multipart/form-data" th:action="@{/courses/{code}/import_students(code=${course.getCode()})}">
<div class="form-row">
<label for="file_input">File:</label>
<input id="file_input" type="file" name="file" accept="text/csv"/>
</div>
<div class="page_row">
<div class="form-row">
<button type="submit">Submit</button>
</div>
@ -26,9 +24,5 @@
</div>
<div id="sidebar_content">
</div>
</body>
</html>

View File

@ -1,18 +1,33 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<meta charset="UTF-8">
<title>Student Teams</title>
</head>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Student Teams for ' + ${course.getCode()}, content=~{::#content}, actions=~{::#actions})}">
<body>
<div id="content">
<h1>Student Teams for <span th:text="${course.getName()}"></span></h1>
<div id="actions">
<a class="btn btn-primary m-1" th:href="@{/courses/{code}/student_teams/generate_repositories(code=${course.getCode()})}">
Generate Repositories
</a>
<a class="btn btn-primary m-1" th:href="@{/courses/{code}/student_teams/branch_protection_update(code=${course.getCode()})}">
Update Branch Protection
</a>
<a class="btn btn-primary m-1" th:href="@{/courses/{code}/student_teams/export(code=${course.getCode()})}">
Export
</a>
<a class="btn btn-primary m-1" th:href="@{/courses/{code}/student_teams/export_contact_info(code=${course.getCode()})}">
Export Team Contact Details
</a>
<a class="btn btn-primary m-1" th:href="@{/courses/{code}/student_teams/create(code=${course.getCode()})}">
Create New Student Team
</a>
<a class="btn btn-primary m-1" th:href="@{/courses/{code}/student_teams/merge_single_teams(code=${course.getCode()})}">
Merge Single Teams
</a>
</div>
<div id="content" class="row justify-content-center">
<div th:if="${course.getStudentTeams().isEmpty()}">
<p>No student teams.</p>
</div>
<table>
<table class="table">
<tr>
<th>Team</th>
<th>Students</th>
@ -53,26 +68,5 @@
</table>
</div>
<div id="sidebar">
<div class="sidebar_block">
<a th:href="@{/courses/{code}/student_teams/generate_repositories(code=${course.getCode()})}">Generate Repositories</a>
</div>
<div class="sidebar_block">
<a th:href="@{/courses/{code}/student_teams/branch_protection_update(code=${course.getCode()})}">Update Branch Protection</a>
</div>
<div class="sidebar_block">
<a th:href="@{/courses/{code}/student_teams/export(code=${course.getCode()})}">Export</a>
</div>
<div class="sidebar_block">
<a th:href="@{/courses/{code}/student_teams/export_contact_info(code=${course.getCode()})}">Export Team Contact Details</a>
</div>
<div class="sidebar_block">
<a th:href="@{/courses/{code}/student_teams/create(code=${course.getCode()})}">Create New Student Team</a>
</div>
<div class="sidebar_block">
<a th:href="@{/courses/{code}/student_teams/merge_single_teams(code=${course.getCode()})}">Merge Single Teams</a>
</div>
</div>
</body>
</html>

View File

@ -1,28 +1,19 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<title>Create Student Team</title>
</head>
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Create Student Team', content=~{::#content})}">
<body>
<div id="content">
<h1>Create a New Student Team</h1>
<div id="content" class="row justify-content-center">
<p>
Creates a new student team for the <span th:text="${course.getName()}"></span> course, without any assigned TA team or student members.
</p>
<form action="#" th:action="@{/courses/{code}/student_teams/create(code=${course.getCode()})}" enctype="application/x-www-form-urlencoded" method="post">
<form th:action="@{/courses/{code}/student_teams/create(code=${course.getCode()})}" enctype="application/x-www-form-urlencoded" method="post">
<div class="page_row">
<button type="submit">Submit</button>
<div class="form-row">
<input type="submit" value="Submit" class="btn btn-primary"/>
</div>
</form>
</div>
<div id="sidebar">
</div>
</body>
</html>

View File

@ -1,14 +1,39 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<meta charset="UTF-8">
<title>Student Team</title>
</head>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Student Team ' + ${student_team.getId()}, content=~{::#content}, actions=~{::#actions})}">
<body>
<div id="content">
<h1>Student Team <span th:text="${student_team.getId()}"></span></h1>
<div id="actions">
<th:block th:if="${student_team.getGithubRepositoryName() == null && student_team.getAssignedTeachingAssistantTeam() != null}">
<a
class="btn btn-primary m-1"
th:href="@{/courses/{code}/student_teams/{id}/generate_repository
(code=${student_team.getCourse().getCode()}, id=${student_team.getId()})}"
>Generate Repository</a>
</th:block>
<th:block th:if="${student_team.getGithubRepositoryName() != null}">
<a
class="btn btn-primary m-1"
th:href="@{/courses/{code}/student_teams/{id}/delete_repository
(code=${student_team.getCourse().getCode()}, id=${student_team.getAssignedTeachingAssistantTeam().getId()})}"
>Archive Repository</a>
</th:block>
<a
class="btn btn-primary m-1"
th:href="@{/courses/{code}/student_teams/{id}/add_student(code=${student_team.getCourse().getCode()}, id=${student_team.getId()})}">
Add Student To Team
</a>
<a
class="btn btn-primary m-1"
th:href="@{/courses/{code}/student_teams/{id}/assign_teaching_assistant_team(code=${student_team.getCourse().getCode()}, id=${student_team.getId()})}">
Assign Teaching Assistant Team
</a>
<a
class="btn btn-primary m-1"
th:href="@{/courses/{code}/student_teams/{id}/remove(code=${student_team.getCourse().getCode()}, id=${student_team.getId()})}">Remove This Team</a>
</div>
<div id="content" class="row justify-content-center">
<ul>
<li>
Github Repository:
@ -43,39 +68,13 @@
</div>
<div id="sidebar">
<div class="sidebar_block" th:if="${student_team.getGithubRepositoryName() == null && student_team.getAssignedTeachingAssistantTeam() != null}">
<a
th:href="@{/courses/{code}/student_teams/{id}/generate_repository
(code=${student_team.getCourse().getCode()}, id=${student_team.getId()})}"
>Generate Repository</a>
<div class="sidebar_block" >
</div>
<div class="sidebar_block" th:if="${student_team.getGithubRepositoryName() != null}">
<a
th:href="@{/courses/{code}/student_teams/{id}/delete_repository
(code=${student_team.getCourse().getCode()}, id=${student_team.getAssignedTeachingAssistantTeam().getId()})}"
>Archive Repository</a>
</div>
<div class="sidebar_block" >
<div class="sidebar_block">
<a th:href="@{/courses/{code}/student_teams/{id}/add_student(code=${student_team.getCourse().getCode()}, id=${student_team.getId()})}">
Add Student To Team
</a>
</div>
<div class="sidebar_block">
<a th:href="@{/courses/{code}/student_teams/{id}/assign_teaching_assistant_team(code=${student_team.getCourse().getCode()}, id=${student_team.getId()})}">
Assign Teaching Assistant Team
</a>
</div>
<div class="sidebar_block">
<a th:href="@{/courses/{code}/student_teams/{id}/remove(code=${student_team.getCourse().getCode()}, id=${student_team.getId()})}">Remove This Team</a>
<p>
Removes this team permanently, and archives the repository.
</p>
</div>
</div>
</body>
</html>

View File

@ -1,28 +1,22 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<title>Add Student To Team</title>
</head>
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Add Student To Team', content=~{::#content})}" lang="en">
<body>
<div id="content">
<h1>Add a Student to Team <span th:text="${student_team.getId()}"></span></h1>
<div id="content" class="row justify-content-center">
<form
action="#"
th:action="@{/courses/{code}/student_teams/{id}/add_student(code=${course.getCode()}, id=${student_team.getId()})}"
enctype="application/x-www-form-urlencoded"
method="post"
>
<div class="page_row">
<div class="form-row">
<label for="student_select">Select a Student to Add:</label>
<select id="student_select" name="student_id" required>
<select id="student_select" name="student_id" class="form-control" required>
<option th:each="student: ${eligible_students}" th:value="${student.getId()}" th:text="${student.getFullName()}"></option>
</select>
</div>
<div class="page_row">
<button type="submit">Submit</button>
<div class="form-row">
<input type="submit" class="btn btn-primary" value="Submit"/>
</div>
</form>
</div>

View File

@ -1,22 +1,16 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<title>Assign Teaching Assistant Team</title>
</head>
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Assign Teaching Assistant Team', content=~{::#content})}">
<body>
<div id="content">
<h1>Assign a Teaching Assistant Team to Student Team <span th:text="${student_team.getId()}"></span></h1>
<div id="content" class="row justify-content-center">
<form
action="#"
th:action="@{/courses/{code}/student_teams/{id}/assign_teaching_assistant_team(code=${course.getCode()}, id=${student_team.getId()})}"
enctype="application/x-www-form-urlencoded"
method="post"
>
<div class="page_row">
<div class="form-row">
<label for="ta_team_select">Select a Team:</label>
<select id="ta_team_select" name="teaching_assistant_team_id">
<select id="ta_team_select" name="teaching_assistant_team_id" class="form-control">
<option value="-1">None</option>
<option
th:each="team: ${course.getTeachingAssistantTeams()}" th:value="${team.getId()}"
@ -25,8 +19,8 @@
</select>
</div>
<div class="page_row">
<button type="submit">Submit</button>
<div class="form-row">
<input type="submit" value="Submit" class="btn btn-primary"/>
</div>
</form>
</div>

View File

@ -1,16 +1,11 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<meta charset="UTF-8">
<title>Generate Repositories</title>
</head>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Generate Repositories', content=~{::#content})}">
<body>
<div id="content">
<h1>Generate Repositories for all Student Teams in <span th:text="${course.getName()}"></span></h1>
<div id="content" class="row justify-content-center">
<p>
Be careful, this may take a little while...
Generate Repositories for all Student Teams in <span th:text="${course.getName()}"></span>. Be careful, this may take a little while...
</p>
<form
@ -23,9 +18,5 @@
</form>
</div>
<div id="sidebar">
</div>
</body>
</html>

View File

@ -1,15 +1,16 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<meta charset="UTF-8">
<title>Students</title>
</head>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Students in ' + ${course.getCode()}, content=~{::#content}, actions=~{::#actions})}">
<body>
<div id="content">
<h1>Students in <span th:text="${course.getName()}"></span></h1>
<div id="actions">
<a class="btn btn-primary m-1" th:href="@{/courses/{code}/students/invite_all(code=${course.getCode()})}">
Invite All Students To Repository
</a>
</div>
<table>
<div id="content">
<table class="table table-striped">
<tr>
<th>Student</th>
<th>Student Number</th>
@ -25,11 +26,5 @@
</table>
</div>
<div id="sidebar">
<div class="sidebar_block">
<a th:href="@{/courses/{code}/students/invite_all(code=${course.getCode()})}">Invite All Students To Repository</a>
</div>
</div>
</body>
</html>

View File

@ -8,7 +8,7 @@
<div id="content">
<h1>Invite All Students in <span th:text="${course.getName()}"></span> to Repository</h1>
<!-- TODO: Upgrade the basic method by which students gain access to the repository. Follow instructions from Github. -->
<p>
Be careful, this may take a little while...
</p>

View File

@ -1,30 +1,53 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<meta charset="UTF-8">
<title>Teaching Assistant Teams</title>
</head>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Teaching Assistants for ' + ${course.getCode()}, content=~{::#content}, actions=~{::#actions})}">
<body>
<div id="content">
<h1>Teaching Assistant Teams for <span th:text="${course.getName()}"></span></h1>
<div id="actions">
<a class="btn btn-primary m-1" th:href="@{/courses/{code}/teaching_assistant_teams/create(code=${course.getCode()})}">
Create Teaching Assistant Team
</a>
<a class="btn btn-primary m-1" th:href="@{/courses/{code}/teaching_assistant_teams/assign_to_student_teams(code=${course.getCode()})}">
Assign Teams to Student Teams
</a>
</div>
<div id="content" class="row justify-content-center">
<div th:if="${course.getTeachingAssistantTeams().isEmpty()}">
<p>No teaching assistant teams.</p>
</div>
<table>
<table class="table table-striped">
<tr>
<th>Team</th>
<th>Teaching Assistants</th>
<th>Github Team</th>
<th>Assigned Student Teams</th>
<th>Delete</th>
</tr>
<tr th:each="taTeam: ${course.getTeachingAssistantTeams()}">
<td>
<a
th:href="@{/courses/{code}/teaching_assistant_teams/{team_id}
<a th:href="@{/courses/{code}/teaching_assistant_teams/{team_id}
(code=${course.getCode()}, team_id=${taTeam.getId()})}">
Teaching Assistant Team <span th:text="${taTeam.getId()}"></span>
</a>
</td>
<td th:each="ta: ${taTeam.getTeachingAssistants()}">
<span th:text="${ta.getFullName()}"></span>
<td>
<div th:each="ta: ${taTeam.getTeachingAssistants()}">
<a th:href="@{/teaching_assistants/{id}(id=${ta.getId()})}" th:text="${ta.getFullName()}"></a><br>
</div>
</td>
<td>
<a
th:href="'https://www.github.com/orgs/' + ${course.getGithubOrganizationName()} + '/teams/' + ${taTeam.getGithubTeamName().toLowerCase()}"
th:text="${taTeam.getGithubTeamName()}"
target="_blank"
></a>
</td>
<td>
<div th:each="studentTeam: ${taTeam.getAssignedStudentTeams()}">
<a th:href="@{/courses/{code}/student_teams/{id}(code=${course.getCode()}, id=${studentTeam.getId()})}" th:text="'Student Team ' + ${studentTeam.getId()}"></a>
</div>
</td>
<td th:text="${taTeam.getGithubTeamName()}"></td>
<td>
<a th:href="@{/courses/{code}/teaching_assistant_teams/{team_id}/delete
(code=${course.getCode()}, team_id=${taTeam.getId()})}">
@ -35,14 +58,5 @@
</table>
</div>
<div id="sidebar">
<div class="sidebar_block">
<a th:href="@{/courses/{code}/teaching_assistant_teams/create(code=${course.getCode()})}">Create Teaching Assistant Team</a>
</div>
<div class="sidebar_block">
<a th:href="@{/courses/{code}/teaching_assistant_teams/assign_to_student_teams(code=${course.getCode()})}">Assign Teams to Student Teams</a>
</div>
</div>
</body>
</html>

View File

@ -1,11 +1,8 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<title>Assign To Student Teams</title>
</head>
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Assign To Student Teams', content=~{::#content})}">
<body>
<div id="content">
<div id="content" class="row justify-content-center">
<form action="#" th:action="@{/courses/{code}/teaching_assistant_teams/assign_to_student_teams(code=${course.getCode()})}" enctype="application/x-www-form-urlencoded" method="post">
<label for="seed_input">Random Seed:</label>
<input id="seed_input" type="number" name="seed" value="0" required/>
@ -13,9 +10,5 @@
</form>
</div>
<div id="sidebar">
</div>
</body>
</html>

View File

@ -1,25 +1,25 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<title>Create Teaching Assistant Team</title>
</head>
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Create Teaching Assistant Team', content=~{::#content})}">
<body>
<div id="content">
<div id="content" class="row justify-content-center">
<div class="col-sm-12 col-md-6">
<form action="#" th:action="@{/courses/{code}/teaching_assistant_teams(code=${course.getCode()})}" enctype="application/x-www-form-urlencoded" method="post">
<div class="form-row">
<label for="ta_team_github_team_name">Github team name:</label>
<input id="ta_team_github_team_name" type="text" name="github_team_name"/>
<input id="ta_team_github_team_name" type="text" name="github_team_name" class="form-control"/>
</div>
<div class="form-row">
<label for="ta_team_member_1">Select the first Team Member:</label>
<select id="ta_team_member_1" name="id_1">
<select id="ta_team_member_1" name="id_1" class="form-control">
<option th:each="ta: ${course.getTeachingAssistants()}" th:value="${ta.getId()}" th:text="${ta.getFullName()}"></option>
</select>
</div>
<button type="submit">Submit</button>
<input type="submit" value="Submit" class="btn btn-primary"/>
</form>
</div>
<div id="sidebar">
</div>
</div>

View File

@ -1,13 +1,11 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Teaching Assistant Team ' + ${teachingAssistantTeam.getId()}, content=~{::#content})}">
<head>
<title>Teaching Assistant Team</title>
</head>
<body>
<div id="content">
<h1>Teaching Assistant Team <span th:text="${teachingAssistantTeam.getId()}"></span> for <span th:text="${course.getName()}"></span></h1>
<div id="content" class="row justify-content-center">
<ul>
<li>
Github Team Name: <code th:text="${teachingAssistantTeam.getGithubTeamName()}"></code>
@ -35,9 +33,5 @@
</ul>
</div>
<div id="sidebar">
</div>
</body>
</html>

View File

@ -1,14 +1,18 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<title>Teaching Assistants</title>
</head>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Teaching Assistants for ' + ${course.getCode()}, content=~{::#content}, actions=~{::#actions})}">
<body>
<div id="content">
<h1>Teaching Assistants for <span th:text="${course.getName()}"></span></h1>
<div id="actions">
<a class="btn btn-primary m-1" th:href="@{/courses/{code}/teaching_assistants/create(code=${course.getCode()})}">Add Teaching Assistant</a>
</div>
<table>
<div id="content">
<table class="table table-striped">
<tr>
<th>Teaching Assistant</th>
<th>Email</th>
<th>Id</th>
</tr>
<tr th:each="teachingAssistant: ${course.getTeachingAssistants()}">
<td>
<a th:href="@{/teaching_assistants/{id}(id=${teachingAssistant.getId()})}"><span th:text="${teachingAssistant.getFullName()}"></span></a>
@ -19,11 +23,5 @@
</table>
</div>
<div id="sidebar">
<div class="sidebar_block">
<a th:href="@{/courses/{code}/teaching_assistants/create(code=${course.getCode()})}">Add Teaching Assistant</a>
</div>
</div>
</body>
</html>

View File

@ -1,53 +1,44 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
<head>
<title>Edit Student</title>
</head>
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (title='Edit Student', content=~{::#content})}">
<body>
<div id="content">
<h1>Edit Student: <span th:text="${student.getFullName()}"></span></h1>
<div id="content" class="row justify-content-center">
<div class="col-sm-12 col-md-6">
<form
action="#"
th:action="@{/students/{id}/edit(id=${student.getId()})}" th:object="${student}"
method="post"
>
<div class="page_row">
<div class="form-row">
<label for="first_name_input">First Name:</label>
<input id="first_name_input" type="text" th:field="*{firstName}" required />
</div>
<div class="page_row">
<div class="form-row">
<label for="last_name_input">Last Name:</label>
<input id="last_name_input" type="text" th:field="*{lastName}" required />
</div>
<div class="page_row">
<div class="form-row">
<label for="email_input">Email Address:</label>
<input id="email_input" type="email" th:field="*{emailAddress}" required />
</div>
<div class="page_row">
<div class="form-row">
<label for="github_username_input">Github Username:</label>
<input id="github_username_input" type="text" th:field="*{githubUsername}" required />
</div>
<div class="page_row">
<div class="form-row">
<label for="student_number_input">Student Number:</label>
<input id="student_number_input" type="number" th:field="*{studentNumber}" required />
</div>
<div class="page_row">
<div class="form-row">
<button type="submit">Submit</button>
</div>
</form>
</div>
<div id="sidebar">
</div>
</div>
</body>