2015-06-13 18:06:17 +02:00
|
|
|
//lookup.js
|
2015-08-16 13:42:14 +02:00
|
|
|
/**
|
|
|
|
* Module for handling lookup requests by the user supplied search query.
|
|
|
|
* @module lookup
|
2015-08-16 13:48:08 +02:00
|
|
|
* @author Bram van der Veen <96aa48@gmail.com>
|
2015-08-16 13:42:14 +02:00
|
|
|
*/
|
2015-06-14 23:32:57 +02:00
|
|
|
|
2015-08-16 01:37:27 +02:00
|
|
|
//Importing first-party modules.
|
2016-06-18 15:06:51 +02:00
|
|
|
const fs = require('fs');
|
2015-08-16 01:37:27 +02:00
|
|
|
|
|
|
|
//Importing self-written modules.
|
2016-06-18 15:06:51 +02:00
|
|
|
const config = require('./configuration');
|
|
|
|
const database = require('./database')();
|
2015-08-10 16:46:29 +02:00
|
|
|
|
2015-08-16 01:37:27 +02:00
|
|
|
//Getting local variables from the configuration file.
|
2016-06-18 15:06:51 +02:00
|
|
|
const schoolID = config().schoolID;
|
2015-08-16 01:37:27 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function for doing a lookup in the database containing all records
|
|
|
|
* of students, teachers and classrooms.
|
|
|
|
* @param {Object} req - Request object supplied by Express.
|
|
|
|
* @param {Object} res - Response object supplied by Express.
|
|
|
|
* @param {Function} next - Next function supplied by Express.
|
|
|
|
* @param {String} search - The search query given by the user.
|
|
|
|
*/
|
2015-06-27 15:03:50 +02:00
|
|
|
function get(req, res, next, search) {
|
2015-08-15 16:44:40 +02:00
|
|
|
var index = database.collection('index');
|
|
|
|
easter(search) ? req.easter = easter(search) : null;
|
|
|
|
easter(search) ? search = easter(search).name : null;
|
|
|
|
search = new RegExp(search, 'i');
|
2015-06-23 11:36:31 +02:00
|
|
|
|
2015-08-15 21:48:38 +02:00
|
|
|
if (!config().localDatabase) {
|
2016-06-18 15:26:06 +02:00
|
|
|
index.find({$or : [{id : search}, {name : search}, {first_name : search}, {last_name : search}, {username: search}]}).toArray((err, databaseEntry) => {
|
2015-08-15 21:48:38 +02:00
|
|
|
if (err) console.warn(err);
|
2015-08-15 21:55:20 +02:00
|
|
|
handle(req, res, next, databaseEntry);
|
2015-08-15 21:48:38 +02:00
|
|
|
});
|
|
|
|
}
|
|
|
|
else {
|
2016-06-18 15:26:06 +02:00
|
|
|
index.find({$or : [{id : search}, {name : search}, {first_name : search}, {last_name : search}, {username: search}]}, (err, databaseEntry) => {
|
2015-08-15 21:48:38 +02:00
|
|
|
if (err) console.warn(err);
|
2015-08-15 21:55:20 +02:00
|
|
|
handle(req, res, next, databaseEntry);
|
2015-08-15 21:48:38 +02:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
2015-06-13 15:30:52 +02:00
|
|
|
|
2015-08-16 01:37:27 +02:00
|
|
|
/**
|
|
|
|
* Function for handling a lookup request after it has(n't) found matches.
|
|
|
|
* @param {Object} req - Request object supplied by Express.
|
|
|
|
* @param {Object} res - Response object supplied by Express.
|
|
|
|
* @param {Function} next - Next function supplied by Express.
|
|
|
|
* @param {Array} databaseEntry - The search query given by the user.
|
|
|
|
*/
|
2015-08-15 21:55:20 +02:00
|
|
|
function handle(req, res, next, databaseEntry) {
|
2015-08-15 21:48:38 +02:00
|
|
|
if ((req.easter || {}).type == 'RIP') {
|
2016-06-18 15:26:06 +02:00
|
|
|
require('./auth').is(req, res, () => {
|
2015-08-15 21:48:38 +02:00
|
|
|
res.render('schedule', req);
|
2015-07-22 16:28:41 +02:00
|
|
|
});
|
2015-08-15 21:48:38 +02:00
|
|
|
}
|
|
|
|
else if (databaseEntry.length == 1) {
|
|
|
|
databaseEntry[0].url = makeUrl(req, databaseEntry[0]);
|
|
|
|
req.match = databaseEntry[0];
|
|
|
|
next();
|
|
|
|
}
|
|
|
|
else if (databaseEntry.length == 0) {
|
2016-06-18 15:26:06 +02:00
|
|
|
require('./auth').is(req, res, () => {
|
2015-08-15 21:48:38 +02:00
|
|
|
res.render('not_found', req);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
req.match = databaseEntry;
|
2016-06-18 15:26:06 +02:00
|
|
|
require('./auth').is(req, res, () => {
|
2015-08-15 21:48:38 +02:00
|
|
|
res.render('list', req);
|
|
|
|
});
|
|
|
|
}
|
2015-06-13 15:30:52 +02:00
|
|
|
}
|
|
|
|
|
2015-08-16 01:37:27 +02:00
|
|
|
/**
|
|
|
|
* Function for doing a lookup via the API.
|
|
|
|
* @param {Object} req - Request object supplied by Express.s.
|
|
|
|
* @param {Function} callback - Callback function needed to return the API call.
|
|
|
|
*/
|
2015-06-27 15:03:50 +02:00
|
|
|
function api(req, callback) {
|
2016-06-18 15:06:51 +02:00
|
|
|
let index = database.collection('index');
|
|
|
|
let query = RegExp(req.query.name, 'i');
|
2015-06-27 15:03:50 +02:00
|
|
|
|
2015-08-17 11:32:56 +02:00
|
|
|
if (!config().localDatabase) {
|
2016-06-18 15:26:06 +02:00
|
|
|
index.find({$or : [{id : query}, {name : query}, {first_name : query}, {last_name : query}, {username: query}, {group: query}]}).toArray((err, databaseEntry) => {
|
2015-08-17 11:32:56 +02:00
|
|
|
if (err) callback({'error': err});
|
|
|
|
else {
|
|
|
|
for (entry of databaseEntry) {entry.url = makeUrl(req, entry)}
|
|
|
|
callback({'data': databaseEntry});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
else {
|
2016-06-18 15:26:06 +02:00
|
|
|
index.find({$or : [{id : query}, {name : query}, {first_name : query}, {last_name : query}, {username: query}, {group: query}]}, (err, databaseEntry) => {
|
2015-08-17 11:32:56 +02:00
|
|
|
if (err) callback({'error': err});
|
|
|
|
else {
|
|
|
|
for (entry of databaseEntry) {entry.url = makeUrl(req, entry)}
|
|
|
|
callback({'data': databaseEntry});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2015-06-27 15:03:50 +02:00
|
|
|
}
|
|
|
|
|
2015-08-16 01:37:27 +02:00
|
|
|
/**
|
|
|
|
* Function for listing all of the students in a group.
|
|
|
|
* @param {Object} req - Request object supplied by Express.
|
|
|
|
* @param {Object} res - Response object supplied by Express.
|
|
|
|
* @param {Function} next - Next function supplied by Express.
|
|
|
|
* @param {String} list - The search (group) query given by the user.
|
|
|
|
*/
|
2015-07-22 12:41:09 +02:00
|
|
|
function list(req, res, next, list) {
|
2016-06-18 15:06:51 +02:00
|
|
|
let index = database.collection('index');
|
|
|
|
let query = RegExp(list, 'i');
|
2015-07-22 12:41:09 +02:00
|
|
|
|
2015-08-17 11:32:56 +02:00
|
|
|
if (!config().localDatabase) {
|
2016-06-18 15:26:06 +02:00
|
|
|
index.find({group: list}).toArray((err, databaseEntry) => {
|
2015-08-17 11:32:56 +02:00
|
|
|
if (err) {req.error = err; next();}
|
|
|
|
else {
|
2016-06-18 15:26:06 +02:00
|
|
|
if (databaseEntry.length < 1) require('./auth').is(req, res, () => {
|
2015-08-17 11:32:56 +02:00
|
|
|
res.render('not_found', req);
|
|
|
|
});
|
|
|
|
req.match = databaseEntry;
|
|
|
|
next();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
else {
|
2016-06-18 15:26:06 +02:00
|
|
|
index.find({group: list}, (err, databaseEntry) => {
|
2015-08-17 11:32:56 +02:00
|
|
|
if (err) {req.error = err; next();}
|
|
|
|
else {
|
2016-06-18 15:26:06 +02:00
|
|
|
if (databaseEntry.length < 1) require('./auth').is(req, res, () => {
|
2015-08-17 11:32:56 +02:00
|
|
|
res.render('not_found', req);
|
|
|
|
});
|
|
|
|
req.match = databaseEntry;
|
|
|
|
next();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2015-07-22 12:41:09 +02:00
|
|
|
}
|
|
|
|
|
2015-08-16 01:37:27 +02:00
|
|
|
/**
|
|
|
|
* Function for making an url based on the found database match.
|
|
|
|
* @param {Object} req - Request object supplied by Express.
|
|
|
|
* @param {Array} databaseEntry - The database object used to create the url.
|
|
|
|
* @return {String} url - The url that was created.
|
|
|
|
*/
|
2015-08-15 21:07:22 +02:00
|
|
|
function makeUrl(req, databaseEntry) {
|
|
|
|
var url = 'http://roosters5.gepro-osi.nl/roosters/rooster.php?school=' + schoolID + '&type=' + databaseEntry.type.charAt(0).toUpperCase() + databaseEntry.type.slice(1) + 'rooster';
|
2015-06-13 15:30:52 +02:00
|
|
|
|
2015-08-15 21:07:22 +02:00
|
|
|
switch (databaseEntry.type) {
|
2015-06-13 15:30:52 +02:00
|
|
|
case 'leerling' :
|
2015-08-15 21:07:22 +02:00
|
|
|
url += '&afdeling=' + databaseEntry.studentcategory + '&leerling=' + databaseEntry.id;
|
2015-06-13 15:30:52 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 'docent' :
|
2015-08-15 21:07:22 +02:00
|
|
|
url += '&docenten=' + databaseEntry.name;
|
2015-06-13 15:30:52 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 'lokaal' :
|
2015-08-15 21:07:22 +02:00
|
|
|
url += '&lokalen=' + databaseEntry.name;
|
2015-06-13 15:30:52 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 'klas' :
|
2015-08-15 21:07:22 +02:00
|
|
|
url += '&klassen=' + databaseEntry.name;
|
2015-06-13 15:30:52 +02:00
|
|
|
break;
|
|
|
|
}
|
2015-07-21 17:01:45 +02:00
|
|
|
|
2015-06-16 15:44:52 +02:00
|
|
|
if (req.query.tab) url += '&tabblad=' + req.query.tab
|
|
|
|
|
2015-06-13 18:22:25 +02:00
|
|
|
return url;
|
2015-06-13 16:01:07 +02:00
|
|
|
}
|
|
|
|
|
2015-08-16 01:37:27 +02:00
|
|
|
/**
|
|
|
|
* Function for checking if the requested search query has an easteregg.
|
|
|
|
* @param {String} search - The user supplied search query.
|
|
|
|
*/
|
2015-06-23 11:36:31 +02:00
|
|
|
function easter(search) {
|
2016-06-18 15:06:51 +02:00
|
|
|
let list = JSON.parse(fs.readFileSync(__dirname + '/eastereggs.json'));
|
2015-06-23 11:36:31 +02:00
|
|
|
|
|
|
|
for (entry of list) {
|
|
|
|
if (entry.easter == search.toLowerCase()) return entry;
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2015-08-16 01:37:27 +02:00
|
|
|
//Export the functions as a module.
|
|
|
|
module.exports = {
|
|
|
|
'get': get,
|
|
|
|
'api': api,
|
|
|
|
'list': list
|
|
|
|
};
|
2015-06-23 11:36:31 +02:00
|
|
|
|
|
|
|
//Testing function, if test is passed in the command line will execute a test.
|
|
|
|
if (process.argv[2] == "test") {
|
2015-08-16 01:37:27 +02:00
|
|
|
console.log(easter('lord of the memeries'));
|
2015-06-23 11:36:31 +02:00
|
|
|
}
|