diff --git a/.gitignore b/.gitignore index 29199e7..59ad020 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,6 @@ jspm_packages # IntelliJ files .iml + +# Visual Studio Code +.vscode diff --git a/frame-server/config.example b/frame-server/config.example index 04f4655..08869c6 100644 --- a/frame-server/config.example +++ b/frame-server/config.example @@ -15,6 +15,8 @@ const config = { $meta: 'This file configures the plot device.', projectName: '{{projectName}}', appUrl: '{{appUrl}}', + appLogoPath: '{{appLogoPath}}', + appIconPath: '{{appIconPath}}', port: { web: { $filter: 'env', diff --git a/frame-server/server.js b/frame-server/server.js index 601c1ac..bf79030 100644 --- a/frame-server/server.js +++ b/frame-server/server.js @@ -13,4 +13,5 @@ Composer((err, server) => { console.log('Started the plot device on port ' + server.info.port); }); + }); diff --git a/frame-server/server/api/contact.js b/frame-server/server/api/contact.js index 63deda3..3a8b0c2 100644 --- a/frame-server/server/api/contact.js +++ b/frame-server/server/api/contact.js @@ -34,6 +34,9 @@ internals.applyRoutes = function (server, next) { }; const template = 'contact'; + // add project name to the payload so it can be used in the email template + request.payload.projectName = Config.get('/projectName'); + mailer.sendEmail(emailOptions, template, request.payload, (err, info) => { if (err) { diff --git a/frame-server/server/api/index.js b/frame-server/server/api/index.js index 45e28f1..ce80ab9 100644 --- a/frame-server/server/api/index.js +++ b/frame-server/server/api/index.js @@ -1,5 +1,7 @@ 'use strict'; +const Config = require('../config/config'); + exports.register = function (server, options, next) { server.route({ @@ -7,11 +9,10 @@ exports.register = function (server, options, next) { path: '/', handler: function (request, reply) { - reply({ message: 'Welcome to BYO-CAT!' }); + reply({ message: 'Welcome to ' + Config.getAppTitle() + '!' }); } }); - next(); }; diff --git a/frame-server/server/api/invite.js b/frame-server/server/api/invite.js index bfcb3b5..da30ed2 100644 --- a/frame-server/server/api/invite.js +++ b/frame-server/server/api/invite.js @@ -214,16 +214,15 @@ internals.applyRoutes = function (server, next) { dynamicQuestions: dynamicSignupQuestions, configUrl: Config.SERVER_URL, emailToFill: invite.email, - favicon: Config.getAppName() + "/logo.png", - logoname: Config.getProfileLogo() + favicon: Config.getAppIcon(), + logoname: Config.getAppLogo() }); }else{ return reply.view('invite_expired', { title: Config.getAppTitle(), configUrl: Config.SERVER_URL, - favicon: Config.getAppName() + "/logo.png", - logoname: Config.getProfileLogo() - + favicon: Config.getAppIcon(), + logoname: Config.getAppLogo() }); } }); diff --git a/frame-server/server/api/login.js b/frame-server/server/api/login.js index c2d64b2..30d02a7 100644 --- a/frame-server/server/api/login.js +++ b/frame-server/server/api/login.js @@ -262,7 +262,8 @@ internals.applyRoutes = function (server, next) { }; const template = 'forgot-password'; const context = { - key: results.keyHash.key + key: results.keyHash.key, + projectName: Config.get('/projectName') }; mailer.sendEmail(emailOptions, template, context, done); diff --git a/frame-server/server/api/signup.js b/frame-server/server/api/signup.js index 27a52f6..3963609 100644 --- a/frame-server/server/api/signup.js +++ b/frame-server/server/api/signup.js @@ -164,6 +164,9 @@ internals.applyRoutes = function (server, next) { }; const template = 'welcome'; + // add project name to the payload so it can be used in the email template + request.payload.projectName = Config.get('/projectName'); + mailer.sendEmail(emailOptions, template, request.payload, (err) => { if (err) { @@ -385,6 +388,9 @@ internals.applyRoutes = function (server, next) { }; const template = 'welcome'; + // add project name to the payload so it can be used in the email template + request.payload.projectName = Config.get('/projectName'); + mailer.sendEmail(emailOptions, template, request.payload, (err) => { if (err) { diff --git a/frame-server/server/api/surveys.js b/frame-server/server/api/surveys.js index f8b7f5d..60f1eea 100644 --- a/frame-server/server/api/surveys.js +++ b/frame-server/server/api/surveys.js @@ -67,8 +67,8 @@ internals.applyRoutes = function (server, next) { configUrl: Config.SERVER_URL, questions: demographicJSON, createdSurveyId: createdSurvey._id, - logoname: "/logo.png", - favicon: "/logo.png", + logoname: Config.getAppLogo(), + favicon: Config.getAppIcon(), name: isAccount ? request.auth.credentials.user.roles.account.name : request.auth.credentials.user.roles.admin.name }); diff --git a/frame-server/server/api/userRegSystem.js b/frame-server/server/api/userRegSystem.js index e55fa69..5e1329c 100755 --- a/frame-server/server/api/userRegSystem.js +++ b/frame-server/server/api/userRegSystem.js @@ -11,7 +11,8 @@ const Boom = require('boom'); const FeatureToggles = require('../config/feature-toggles.js'); const contactJSON = require(Config.getProfilePath() + "/contact_info.json"); const helpJSON = require(Config.getProfilePath() + "/help_text.json"); -let logoName = "logo.png"; +let logoName = Config.getAppLogo(); +let iconName = Config.getAppIcon(); const dynamicSignupQuestions = require(Config.getProfilePath() + "/signup_dynamic_questions.json"); const Joi = require('joi'); @@ -71,7 +72,7 @@ internals.applyRoutes = function (server, next) { configUrl: Config.SERVER_URL, loggedIn: true, isClinician: true, - favicon: logoName, + favicon: iconName, logoname: logoName, studies: {}, name: request.auth.credentials.user.roles.admin.name @@ -87,7 +88,7 @@ internals.applyRoutes = function (server, next) { instructions: instructions, helpTextOn: FeatureToggles.TOGGLE_HELP_TEXT, configUrl: Config.SERVER_URL, - favicon: logoName, + favicon: iconName, logoname: logoName, loggedIn: true, isClinician: false, @@ -105,7 +106,7 @@ internals.applyRoutes = function (server, next) { instructions: instructions, helpTextOn: FeatureToggles.TOGGLE_HELP_TEXT, configUrl: Config.SERVER_URL, - favicon: logoName, + favicon: iconName, logoname: logoName, loggedIn: false, isClinician: false, @@ -131,7 +132,7 @@ internals.applyRoutes = function (server, next) { { title: 'Create a clinician', configUrl: Config.SERVER_URL, - favicon: logoName, + favicon: iconName, logoname: logoName, loggedIn: true, isClinician: true, @@ -209,7 +210,7 @@ internals.applyRoutes = function (server, next) { return reply.view('login_accessible', { title: Config.getAppTitle(), configUrl: Config.SERVER_URL, - favicon: logoName, + favicon: iconName, logoname: logoName }); } @@ -230,7 +231,7 @@ internals.applyRoutes = function (server, next) { title: Config.getAppTitle(), dynamicQuestions: dynamicSignupQuestions, configUrl: Config.SERVER_URL, - favicon: logoName, + favicon: iconName, logoname: logoName }); } @@ -242,7 +243,7 @@ internals.applyRoutes = function (server, next) { handler: function (request, reply) { return reply.view('forgot_accessible', { title: Config.getAppTitle(), - favicon: logoName, + favicon: iconName, configUrl: Config.SERVER_URL, logoname: logoName }); @@ -259,59 +260,42 @@ internals.applyRoutes = function (server, next) { } }, handler: function (request, reply) { + let context = { + title: Config.getAppTitle(), + officePhone: contactJSON["office_phone"], + directPhone: contactJSON["direct_phone"], + contactName: contactJSON["name"] ? contactJSON["name"] : "", + email: contactJSON["email"], + favicon: iconName, + logoname: logoName, + configUrl: Config.SERVER_URL, + googleMapUrl: contactJSON["googleMapUrl"], + + // the following will be overwritten depending on the state + loggedIn: false, + isClinician: false, + name: '' + }; - let officePhone = contactJSON["office_phone"]; - let directPhone = contactJSON["direct_phone"]; - let email = contactJSON["email"]; - let name = contactJSON["email"] ? contactJSON["email"] : ""; if (request.auth.isAuthenticated) { + context.loggedIn = true; + let isAccount = request.auth.credentials.user.roles.account ? true : false; if (!isAccount) { - return reply.view('contact_accessible', { - title: Config.getAppTitle(), - officePhone: officePhone, - directPhone: directPhone, - email: email, - favicon: logoName, - configUrl: Config.SERVER_URL, - logoname: Config.getProfileLogo(), - loggedIn: true, - isClinician: true, - contactName: name, - name: request.auth.credentials.user.roles.admin.name, - - }); - + context.isClinician = true; + context.name = request.auth.credentials.user.roles.admin.name; } else { - return reply.view('contact_accessible', { - title: Config.getAppTitle(), - officePhone: officePhone, - directPhone: directPhone, - email: email, - favicon: logoName, - configUrl: Config.SERVER_URL, - logoname: Config.getProfileLogo(), - loggedIn: true, - isClinician: false, - contactName: name, - name: request.auth.credentials.user.roles.account.name, - }); + context.isClinician = false; + context.name = request.auth.credentials.user.roles.account.name; } } else { - return reply.view('contact_accessible', { - title: Config.getAppTitle(), - officePhone: officePhone, - directPhone: directPhone, - email: email, - favicon: logoName, - configUrl: Config.SERVER_URL, - loggedIn: false, - logoname: Config.getProfileLogo(), - isClinician: false, - name: '' - }); + context.loggedIn = false; + context.isClinician = false; + context.name = ''; } + + return reply.view('contact_accessible', context); } }); @@ -321,9 +305,9 @@ internals.applyRoutes = function (server, next) { handler: function (request, reply) { return reply.view('reset_accessible', { title: Config.getAppTitle(), - favicon: logoName, + favicon: iconName, configUrl: Config.SERVER_URL, - logoname: Config.getProfileLogo() + logoname: logoName }); } }); @@ -342,8 +326,8 @@ internals.applyRoutes = function (server, next) { return reply.view('userSurveyDetails_temp', { title: Config.getAppTitle(), - favicon: logoName, - logoname: Config.getProfileLogo(), + favicon: iconName, + logoname: logoName, configUrl: Config.SERVER_URL, meanScore: Config.meanScoreValue, loggedIn: request.auth.isAuthenticated, @@ -389,9 +373,9 @@ internals.applyRoutes = function (server, next) { configUrl: Config.SERVER_URL, name: isAccount ? request.auth.credentials.user.roles.account.name : request.auth.credentials.user.roles.admin.name, isClinician: true, - logoname: Config.getProfileLogo(), + logoname: logoName, loggedIn: true, - favicon: logoName, + favicon: iconName, username: request.auth.credentials.user.username }); } @@ -434,11 +418,11 @@ internals.applyRoutes = function (server, next) { configUrl: Config.SERVER_URL, name: isAccount ? request.auth.credentials.user.roles.account.name : request.auth.credentials.user.roles.admin.name, isClinician: true, - favicon: logoName, + favicon: iconName, username: request.auth.credentials.user.username, studies: result, id: request.auth.credentials.user._id, - logoname: Config.getProfileLogo() + logoname: logoName }); }); } diff --git a/frame-server/server/auth.js b/frame-server/server/auth.js index 75d150a..9c68051 100644 --- a/frame-server/server/auth.js +++ b/frame-server/server/auth.js @@ -15,7 +15,7 @@ internals.applyStrategy = function (server, next) { server.auth.strategy('session', 'cookie', { password: Config.get('/cookieSecret'), - cookie: 'sid-BYO-CAT', + cookie: 'sid-' + Config.get('/projectName').replace(' ', '-'), isSecure: false, validateFunc: function (request, data, callback) { diff --git a/frame-server/server/config/config.js b/frame-server/server/config/config.js index ca0828c..1dcfc8d 100644 --- a/frame-server/server/config/config.js +++ b/frame-server/server/config/config.js @@ -38,6 +38,14 @@ var Config = { getAppName: function () { return appConfig.get('/projectName'); + }, + + getAppLogo: function () { + return appConfig.get('/appLogoPath'); + }, + + getAppIcon: function () { + return appConfig.get('/appIconPath'); } }; diff --git a/frame-server/server/emails/contact.hbs.md b/frame-server/server/emails/contact.hbs.md index d1f7d92..0968d3a 100644 --- a/frame-server/server/emails/contact.hbs.md +++ b/frame-server/server/emails/contact.hbs.md @@ -6,4 +6,4 @@ | Email: | {{email}} | | Message: | {{message}} | -The BYO-CAT Team +The {{projectName}} Team diff --git a/frame-server/server/emails/forgot-password.hbs.md b/frame-server/server/emails/forgot-password.hbs.md index 27bb0ff..f346db2 100644 --- a/frame-server/server/emails/forgot-password.hbs.md +++ b/frame-server/server/emails/forgot-password.hbs.md @@ -6,4 +6,4 @@ need this key to do it. __Key:__ {{key}} -The BYO-CAT Team +The {{projectName}} Team diff --git a/frame-server/server/emails/signup-invitation.hbs.md b/frame-server/server/emails/signup-invitation.hbs.md index 9f3f7d3..0b7532e 100644 --- a/frame-server/server/emails/signup-invitation.hbs.md +++ b/frame-server/server/emails/signup-invitation.hbs.md @@ -1,5 +1,5 @@ ### Signup Invitation -You have been invited to create an account at BYO-CAT. Please click the following link to proceed: {{url}} +You have been invited to create an account at {{projectName}}. Please click the following link to proceed: {{url}} -The BYO-CAT Team +The {{projectName}} Team diff --git a/frame-server/server/emails/welcome.hbs.md b/frame-server/server/emails/welcome.hbs.md index 245287f..1792f24 100644 --- a/frame-server/server/emails/welcome.hbs.md +++ b/frame-server/server/emails/welcome.hbs.md @@ -7,4 +7,4 @@ Here are your login credentials: | ---------:|:------------ | | Username: | {{username}} | -The BYO-CAT Team +The {{projectName}} Team diff --git a/frame-server/server/profile/contact_info.json b/frame-server/server/profile/contact_info.json index cef6075..979d54a 100644 --- a/frame-server/server/profile/contact_info.json +++ b/frame-server/server/profile/contact_info.json @@ -1,6 +1,10 @@ { + "omit" : "ommiting any of the field below will disable them from being displayed on the Contact page", + "direct_phone": "XXX-XXX-XXXX", "office_phone": "XXX-XXX-XXXX", - "email": "Em@il.com" + "email": "Em@il.com", + "name": "Contact Name", + "googleMapUrl": "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d2948.662352514737!2d-71.106583!3d42.3497216!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x89e379f0c4e57a97%3A0xf082dcc3e210c53c!2sBU+Hariri+Institute+for+Computing!5e0!3m2!1sen!2sus!4v1492773318343" } diff --git a/frame-server/server/profile/homepage_text.json b/frame-server/server/profile/homepage_text.json index c227247..2335955 100644 --- a/frame-server/server/profile/homepage_text.json +++ b/frame-server/server/profile/homepage_text.json @@ -1,5 +1,5 @@ { - "major_text": "BYO-CAT stands for Build Your Own CAT. CAT is a Computer Adaptive test, which is an extremely customisable survey platform having customisable question banks, evaluation metrics and result structures. The Cat version of the BYO-CAT Profile assesses your likes, dislikes and preferences towards cats.", + "major_text": "BYO-CAT stands for Build Your Own CAT. CAT is a Computer Adaptive test, which is an extremely customisable survey platform having customisable question banks, evaluation metrics and result structures. The example implementation assesses your likes, dislikes and preferences towards cats.", "minor_text": "An adaptive survey platform for CAT lovers", "instructions": [ { diff --git a/frame-server/server/web/views/contact_accessible.ejs b/frame-server/server/web/views/contact_accessible.ejs index 54b1293..cc51658 100644 --- a/frame-server/server/web/views/contact_accessible.ejs +++ b/frame-server/server/web/views/contact_accessible.ejs @@ -16,7 +16,13 @@
- + <% if(locals.googleMapUrl) { %> + + <% } %> diff --git a/frame-server/server/web/views/layout.ejs b/frame-server/server/web/views/layout.ejs index 1147f71..4c93ceb 100755 --- a/frame-server/server/web/views/layout.ejs +++ b/frame-server/server/web/views/layout.ejs @@ -13,7 +13,7 @@ <%=title%> - + diff --git a/frame-server/server/web/views/login_accessible.ejs b/frame-server/server/web/views/login_accessible.ejs index 89e7392..52e7f7a 100644 --- a/frame-server/server/web/views/login_accessible.ejs +++ b/frame-server/server/web/views/login_accessible.ejs @@ -65,7 +65,7 @@ basil.set('cookie', data); l.stop(); if (JSON.parse(data).changePass) { - alertModal("Your Password Has Expired", "SCI-FI users are required to change their password every 90 days. You will be emailed a code and redirected to the password reset form.", function() { + alertModal("Your Password Has Expired", "Users are required to change their password every 90 days. You will be emailed a code and redirected to the password reset form.", function() { forgotPassword('<%= configUrl %>', usnm); }); } else { diff --git a/frame-server/server/web/views/partials/footer.ejs b/frame-server/server/web/views/partials/footer.ejs index da2b375..295f60b 100755 --- a/frame-server/server/web/views/partials/footer.ejs +++ b/frame-server/server/web/views/partials/footer.ejs @@ -1,4 +1,4 @@ diff --git a/frame-server/server/web/views/partials/footer_accessible.ejs b/frame-server/server/web/views/partials/footer_accessible.ejs index 5533a92..e66c409 100755 --- a/frame-server/server/web/views/partials/footer_accessible.ejs +++ b/frame-server/server/web/views/partials/footer_accessible.ejs @@ -1,7 +1,7 @@
- + Copyright © 2017 SAIL.
diff --git a/frame-server/server/web/views/partials/navbar.ejs b/frame-server/server/web/views/partials/navbar.ejs index 76c038d..dde8ed1 100755 --- a/frame-server/server/web/views/partials/navbar.ejs +++ b/frame-server/server/web/views/partials/navbar.ejs @@ -15,12 +15,5 @@
- + <%- include('./noJavascript'); %> diff --git a/frame-server/server/web/views/partials/navbarWelcome.ejs b/frame-server/server/web/views/partials/navbarWelcome.ejs index e297289..ba99870 100644 --- a/frame-server/server/web/views/partials/navbarWelcome.ejs +++ b/frame-server/server/web/views/partials/navbarWelcome.ejs @@ -14,14 +14,7 @@ - + <%- include('./noJavascript'); %>