2015-06-13 18:06:17 +02:00
|
|
|
//lookup.js
|
2015-06-14 23:32:57 +02:00
|
|
|
var config = require('./configuration');
|
2015-06-23 11:36:31 +02:00
|
|
|
var fs = require('fs');
|
2015-06-14 23:32:57 +02:00
|
|
|
|
|
|
|
var database = require('mongoskin').db('mongodb://' + config().database);
|
|
|
|
var school_id = config().school_id;
|
2015-06-13 15:30:52 +02:00
|
|
|
|
2015-06-13 18:37:19 +02:00
|
|
|
//Function for looking through the database and finding entries related to the searchterm.
|
2015-06-27 15:03:50 +02:00
|
|
|
function get(req, res, next, search) {
|
2015-06-13 15:30:52 +02:00
|
|
|
var index = database.collection('index');
|
2015-06-23 11:36:31 +02:00
|
|
|
easter(search) ? req.easter = easter(search) : null;
|
|
|
|
easter(search) ? search = easter(search).name : null; //Check if there are any eastereggs matching the search query.
|
2015-06-17 12:25:14 +02:00
|
|
|
search = new RegExp(search, 'i'); //Make regular exeption for ignoring the case (Bram vs BRAM) should return the same.
|
2015-06-23 11:36:31 +02:00
|
|
|
|
2015-07-21 17:01:45 +02:00
|
|
|
index.find({$or : [{id : search}, {name : search}, {first_name : search}, {last_name : search}, {username: search}]}).toArray(function (err, database_entry) {
|
2015-06-13 15:30:52 +02:00
|
|
|
if (err) console.warn(err);
|
|
|
|
|
|
|
|
if (database_entry.length == 1) {
|
2015-06-16 15:44:52 +02:00
|
|
|
database_entry[0].url = make_url(req, database_entry[0]);
|
2015-06-13 18:22:25 +02:00
|
|
|
req.match = database_entry[0];
|
|
|
|
next();
|
2015-06-13 15:30:52 +02:00
|
|
|
}
|
|
|
|
else if (database_entry.length == 0) {
|
2015-06-24 16:32:13 +02:00
|
|
|
res.render('not_found');
|
2015-06-13 15:30:52 +02:00
|
|
|
}
|
|
|
|
else {
|
2015-06-24 16:32:13 +02:00
|
|
|
req.found = database_entry;
|
|
|
|
res.render('multiple_found', req);
|
2015-06-13 15:30:52 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2015-06-27 15:03:50 +02:00
|
|
|
function api(req, callback) {
|
|
|
|
var index = database.collection('index');
|
|
|
|
var query = RegExp(req.query.name, 'i');
|
|
|
|
|
2015-07-21 17:01:45 +02:00
|
|
|
index.find({$or : [{id : query}, {name : query}, {first_name : query}, {last_name : query}, {username: query}]}).toArray(function (err, database_entry) {
|
2015-06-27 15:03:50 +02:00
|
|
|
if (err) callback({'error': err});
|
|
|
|
else {
|
|
|
|
for (entry of database_entry) {entry.url = make_url(req, entry)}
|
|
|
|
callback({'data': database_entry});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2015-06-13 18:37:19 +02:00
|
|
|
//Function for making a link out of the given database_entry.
|
2015-06-16 15:44:52 +02:00
|
|
|
function make_url(req, database_entry) {
|
2015-06-14 23:32:57 +02:00
|
|
|
var url = 'http://roosters5.gepro-osi.nl/roosters/rooster.php?school=' + school_id + '&type=' + database_entry.type.charAt(0).toUpperCase() + database_entry.type.slice(1) + 'rooster';
|
2015-06-13 15:30:52 +02:00
|
|
|
|
|
|
|
switch (database_entry.type) {
|
|
|
|
case 'leerling' :
|
2015-06-13 18:22:25 +02:00
|
|
|
url += '&afdeling=' + database_entry.studentcategory + '&leerling=' + database_entry.id;
|
2015-06-13 15:30:52 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 'docent' :
|
2015-06-13 18:22:25 +02:00
|
|
|
url += '&docenten=' + database_entry.name;
|
2015-06-13 15:30:52 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 'lokaal' :
|
2015-06-13 18:22:25 +02:00
|
|
|
url += '&lokalen=' + database_entry.name;
|
2015-06-13 15:30:52 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 'klas' :
|
2015-06-13 18:22:25 +02:00
|
|
|
url += '&klassen=' + database_entry.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-06-23 11:36:31 +02:00
|
|
|
//Function for checking the given search query for eatereggs.
|
|
|
|
//TODO: add a way to supply a template file for eastereggs.
|
|
|
|
function easter(search) {
|
|
|
|
var list = JSON.parse(fs.readFileSync(__dirname + '/eastereggs.json'));
|
|
|
|
|
|
|
|
for (entry of list) {
|
|
|
|
if (entry.easter == search.toLowerCase()) return entry;
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2015-06-27 15:03:50 +02:00
|
|
|
module.exports = {'get': get, 'api': api};
|
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") {
|
|
|
|
console.log(easter('aardappel'));
|
|
|
|
}
|