1
0
mirror of https://github.com/matt-fidd/stratos.git synced 2026-01-01 22:59:28 +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 * Authentication middleware that redirects unauthenticated users
* back to the login page if they request a page they don't have access * 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) => { app.use((req, res) => {
res.status(404).render('error', { res.status(404).render('error', {
...req.hbsContext,
title: 'Stratos - Error', title: 'Stratos - Error',
code: 404, code: 404,
msg: 'Page Not Found' msg: 'Page Not Found'

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
{{> mainPageHeader name='Log Out' }} {{> mainPageHeader name='Log Out' }}
<div class='formContainer'> <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'> <form action='/logout' method='post'>
<input type='submit' class='btn btn--primary btn--full' value='Log Out'/> <input type='submit' class='btn btn--primary btn--full' value='Log Out'/>
</form> </form>