1
0
mirror of https://github.com/matt-fidd/stratos.git synced 2026-01-01 20:59:30 +00:00

Added generalised handlebars context

This commit is contained in:
2022-04-19 00:21:40 +00:00
parent 35b4030d27
commit 52c44f298e
9 changed files with 47 additions and 35 deletions

12
app.js
View File

@@ -102,6 +102,17 @@ async function main() {
}
}));
// Generic handlebars context
app.use((req, res, next) => {
req.hbsContext = {
name: req.session?.fullName,
userType: req.session?.userType,
title: 'Stratos'
};
next();
});
/*
* Authentication middleware that redirects unauthenticated users
* back to the login page if they request a page they don't have access
@@ -145,6 +156,7 @@ async function main() {
*/
app.use((req, res) => {
res.status(404).render('error', {
...req.hbsContext,
title: 'Stratos - Error',
code: 404,
msg: 'Page Not Found'

View File

@@ -20,9 +20,9 @@ router.get('/dashboard', async (req, res) => {
const classes = await u.getClasses();
return res.render('dashboard', {
...req.hbsContext,
title: 'Stratos - Dashboard',
current: 'Dashboard',
name: req.session.fullName,
stats: [
{
value: classes.length,
@@ -55,9 +55,9 @@ router.all(/user\/(.{36})(\/.*)?/, async (req, res, next) => {
u = await new User(req.db, req.params[0]);
} catch (e) {
return res.status(400).render('error', {
...req.hbsContext,
title: 'Stratos - Error',
current: 'Dashboard',
name: req.session.fullName,
code: 400,
msg: e.message
});
@@ -77,9 +77,9 @@ router.get('/user/:id', (req, res) => {
const u = req.user;
return res.render('user', {
...req.hbsContext,
title: `Stratos - ${u.shortName}`,
current: 'Dashboard',
name: req.session.fullName,
user: u
});
});

View File

@@ -14,11 +14,10 @@ router.get('/classes', async (req, res) => {
const u = await new User(req.db, req.session.userId);
return res.render('classes', {
...req.hbsContext,
title: 'Stratos - Classes',
current: 'Classes',
name: req.session.fullName,
classes: await u.getClasses(),
userType: req.session.userType
classes: await u.getClasses()
});
});
@@ -26,9 +25,9 @@ router.get('/class/add', async (req, res) => {
const subjects = await Subject.getAllSubjects(req.db);
res.render('addClass', {
...req.hbsContext,
title: 'Stratos - Add class',
current: 'Classes',
name: req.session.fullName,
subjects: subjects
});
});
@@ -62,9 +61,9 @@ router.all(/class\/(.{36})(\/.*)?/, async (req, res, next) => {
c = await new Class(req.db, req.params[0]);
} catch (e) {
return res.status(400).render('error', {
...req.hbsContext,
title: 'Stratos - Error',
current: 'Classes',
name: req.session.fullName,
code: 400,
msg: e.message
});

View File

@@ -12,6 +12,7 @@ const validator = require('../lib/validator');
router.get('/', (req, res) => {
return res.render('index', {
...req.hbsContext,
title: 'Stratos - Home'
});
});
@@ -21,6 +22,7 @@ router.get('/login', (req, res) => {
return res.redirect('/admin');
return res.render('login', {
...req.hbsContext,
title: 'Stratos - Login',
redirect_to: req.query?.redirect_to
});
@@ -28,20 +30,22 @@ router.get('/login', (req, res) => {
router.get('/register', (req, res) => {
return res.render('register', {
...req.hbsContext,
title: 'Stratos - Register'
});
});
router.get('/password-reset', (req, res) => {
return res.render('password-reset', {
...req.hbsContext,
title: 'Stratos - Password Recovery'
});
});
router.get('/logout', (req, res) => {
return res.render('logout', {
title: 'Stratos - Logout',
username: req.session.fullName
...req.hbsContext,
title: 'Stratos - Logout'
});
});
@@ -124,6 +128,7 @@ router.post('/register', async (req, res) => {
} catch (e) {
console.error(e);
return res.render('error', {
...req.hbsContext,
code: 400,
msg: 'Unable to create account'
});
@@ -196,6 +201,7 @@ router.get('/password-reset/:uuid/:token', async (req, res) => {
}
return res.render('change-password', {
...req.hbsContext,
uuid: uuid,
token: token
});

View File

@@ -7,9 +7,9 @@ router.get('/reports', (req, res, next) => {
/* eslint-disable multiline-comment-style */
/*
return res.render('reports', {
...req.hbsContext,
title: 'Stratos - Reports',
current: 'Reports',
name: req.session.fullName
current: 'Reports'
});
*/
/* eslint-enable multiline-comment-style */

View File

@@ -16,9 +16,9 @@ router.get('/:id', async (req, res) => {
const testCount = recentTests.length + upcomingTests.length;
return res.render('class', {
...req.hbsContext,
title: `Stratos - ${c.name}`,
current: 'Classes',
name: req.session.fullName,
className: c.name,
teachers: c.teachers,
members: c.students,
@@ -30,7 +30,6 @@ router.get('/:id', async (req, res) => {
deleteLink: `${linkRoot}/delete`,
membersLink: `${linkRoot}/members`,
teachersLink: `${linkRoot}/teachers`,
userType: req.session.userType,
stats: [
{
value: testCount,
@@ -76,10 +75,9 @@ router.get('/:id/:memberType(members|teachers)', (req, res) => {
}
return res.render('classUsers', {
...req.hbsContext,
title: `Stratos - ${c.name}`,
current: 'Classes',
name: req.session.fullName,
userType: req.session.userType,
className: c.name,
users: users,
addLink: addLink,
@@ -116,9 +114,9 @@ router.get('/:id/:userType(members|teachers)/add', (req, res) => {
});
return res.render('addClassUser', {
...req.hbsContext,
title: `Stratos - ${c.name}`,
current: 'Classes',
name: req.session.fullName,
className: c.name,
postLink: `/admin/class/${c.id}/${req.params.userType}/add`,
newType: userType.slice(0, -1),
@@ -153,9 +151,9 @@ router.post('/:id/:userType(members|teachers)/add', async (req, res) => {
return res.redirect(`${rejectURL}/?err=no_user`);
return res.render('addClassUser2', {
...req.hbsContext,
title: `Stratos - ${c.name}`,
current: 'Classes',
name: req.session.fullName,
className: c.name,
postLink: `/admin/class/${c.id}/members/add2`,
newType: 'student',
@@ -224,12 +222,12 @@ router.get('/:id/:userType(members|teachers)/:userId/remove',
`/${u.id}/remove`;
return res.render('removeClassUser', {
...req.hbsContext,
title: `Stratos - ${c.name}`,
current: 'Classes',
name: req.session.fullName,
u: u,
postLink: postLink,
pageTitle: `Remove a ${userType.slice(0, -1)}`,
pageTitle: `Remove a ${userType.slice(0, -1)}`
});
}
);
@@ -246,9 +244,9 @@ router.post('/:id/:userType(members|teachers)/:userId/remove',
} catch (e) {
console.error(e);
return res.render('error', {
...req.hbsContext,
title: 'Stratos - Error',
current: 'Classes',
name: req.session.fullName,
msg: `Can not remove this user: ${e.message}`
});
}

View File

@@ -20,9 +20,9 @@ router.get('/:id', async (req, res) => {
}
return res.render('test', {
...req.hbsContext,
title: `Stratos - ${t.template.name}`,
current: 'Tests',
name: req.session.fullName,
testName: t.template.name,
class: t.class,
subject: t.class.subject.name,
@@ -30,7 +30,6 @@ router.get('/:id', async (req, res) => {
reportsLink: `${linkRoot}/reports`,
resultsLink: `${linkRoot}/results`,
deleteLink: `${linkRoot}/delete`,
userType: req.session.userType,
testResults: results,
stats: [
{
@@ -67,11 +66,10 @@ router.get('/:id/results', async (req, res) => {
const results = await t.getTestResults();
return res.render('testResults', {
...req.hbsContext,
title: `Stratos - ${t.template.name}`,
current: 'Tests',
name: req.session.fullName,
testName: t.template.name,
userType: req.session.userType,
testResults: results,
linkRoot: linkRoot,
addLink: `${linkRoot}/add`
@@ -122,9 +120,9 @@ router.get('/:id/results/add', async (req, res) => {
.filter(s => !existingResults.includes(s.id));
return res.render('addTestResult', {
...req.hbsContext,
title: `Stratos - ${t.template.name}`,
current: 'Tests',
name: req.session.fullName,
testName: t.template.name,
linkRoot: linkRoot,
students: students,

View File

@@ -13,11 +13,10 @@ router.get('/tests', async (req, res) => {
const u = await new User(req.db, req.session.userId);
return res.render('tests', {
...req.hbsContext,
title: 'Stratos - Tests',
current: 'Tests',
name: req.session.fullName,
tests: await u.getTests(),
userType: req.session.userType
tests: await u.getTests()
});
});
@@ -32,9 +31,9 @@ router.get('/test/add', async (req, res) => {
const [ testTemplates, classes ] = await Promise.all(promises);
res.render('addTest', {
...req.hbsContext,
title: 'Stratos - Add test',
current: 'Tests',
name: req.session.fullName,
testTemplates: testTemplates,
classes: classes
});
@@ -72,9 +71,9 @@ router.post('/test/add', async (req, res) => {
router.get('/testTemplate/add', (req, res) => {
res.render('addTestTemplate', {
...req.hbsContext,
title: 'Stratos - Add test template',
current: 'Tests',
name: req.session.fullName
current: 'Tests'
});
});
@@ -103,9 +102,9 @@ router.post('/testTemplate/add', async (req, res) => {
console.error(e);
return res.render('error', {
...req.hbsContext,
title: 'Stratos - Error',
current: 'Tests',
name: req.session.fullName,
msg: 'Could not create test template'
});
}
@@ -119,9 +118,9 @@ router.all(/test\/(.{36})(\/.*)?/, async (req, res, next) => {
t = await new Test(req.db, req.params[0]);
} catch (e) {
return res.status(400).render('error', {
...req.hbsContext,
title: 'Stratos - Error',
current: 'Tests',
name: req.session.fullName,
code: 400,
msg: e.message
});

View File

@@ -1,7 +1,7 @@
{{> mainPageHeader name='Log Out' }}
<div class='formContainer'>
<p style='text-align: center;'>You are logged in as <span class='hl'>{{ username }}</span></p>
<p style='text-align: center;'>You are logged in as <span class='hl'>{{ name }}</span></p>
<form action='/logout' method='post'>
<input type='submit' class='btn btn--primary btn--full' value='Log Out'/>
</form>