Statusmeldungen hinzugefügt; Reservierungen funktionabel; kleine Bugfixes
This commit is contained in:
@@ -1,20 +1,20 @@
|
||||
var admins = {
|
||||
"Richard Reis": {
|
||||
pwd: "secret",
|
||||
rights: {
|
||||
1: true,
|
||||
2: true,
|
||||
3: true
|
||||
}
|
||||
},
|
||||
"Ursula Ulstein": {
|
||||
pwd: "ultimativ",
|
||||
rights: {
|
||||
1: true,
|
||||
2: true,
|
||||
3: false
|
||||
}
|
||||
},
|
||||
var fs = require('fs');
|
||||
|
||||
var admins = {};
|
||||
|
||||
var FILENAME = false;
|
||||
|
||||
module.exports.init = function(userfile) {
|
||||
FILENAME = userfile;
|
||||
module.exports.loadFile();
|
||||
}
|
||||
|
||||
module.exports.loadFile = function() {
|
||||
if (!FILENAME) throw "No file for user JSON specified";
|
||||
fs.readFile(FILENAME, 'utf8', function(err, data) {
|
||||
if (err) throw err;
|
||||
admins = JSON.parse(data);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports.AdminRight = {
|
||||
|
||||
@@ -8,7 +8,28 @@ var menuJSON = {
|
||||
var REGEX_CREATE = /^[fd]-[0-9]+-new$/;
|
||||
var REGEX_UPDATE = /^[fd]-[0-9]+-[0-9]+$/;
|
||||
var REGEX_DELETE = /^[fd]-[0-9]+-[0-9]+-del$/;
|
||||
var REGEX_FLOAT = /^(\-|\+)?([0-9]+(\.[0-9]+)?)$/;
|
||||
|
||||
var REGEX_FLOAT = /^([0-9]+(\.[0-9]+)?)$/;
|
||||
|
||||
var LANG = {};
|
||||
LANG["ACTIONS"] = {
|
||||
1: "Das Ertellen des Menüeintrags",
|
||||
2: "Das Aktualisieren der Informationen",
|
||||
3: "Das Löschen des Menüeintrags"
|
||||
};
|
||||
LANG["ERROR_MESSAGES"] = {
|
||||
1: "Das Feld \"Name\" darf nicht leer sein.",
|
||||
2: "Das Feld \"Beschreibung\" darf nicht leer sein.",
|
||||
4: "Das Feld \"Preis\" darf nicht leer und muss eine positive Zahl sein.",
|
||||
8: "Beim Verarbeiten der Anfrage ist ein interner Fehler aufgetreten."
|
||||
};
|
||||
LANG["MESSAGES"] = {
|
||||
"success": "%action% war erfolgreich.",
|
||||
"failure": "%action% konnte nicht durchgeführt werden."
|
||||
};
|
||||
LANG["INTERNAL"] = {
|
||||
"noinput": "No input file for menu JSON specified!"
|
||||
};
|
||||
|
||||
var FILENAME = false;
|
||||
|
||||
@@ -18,7 +39,7 @@ module.exports.init = function(menufile) {
|
||||
}
|
||||
|
||||
module.exports.loadFile = function() {
|
||||
if (!FILENAME) throw "No file for menu JSON specified";
|
||||
if (!FILENAME) throw LANG["MESSAGES"]["noinput"];
|
||||
fs.readFile(FILENAME, 'utf8', function(err, data) {
|
||||
if (err) throw err;
|
||||
menuJSON = JSON.parse(data);
|
||||
@@ -26,7 +47,7 @@ module.exports.loadFile = function() {
|
||||
}
|
||||
|
||||
module.exports.saveJSON = function() {
|
||||
if (!FILENAME) throw "No file for menu JSON specified";
|
||||
if (!FILENAME) throw LANG["MESSAGES"]["noinput"];
|
||||
fs.writeFile(FILENAME, JSON.stringify(menuJSON, null, 4), function(err) {
|
||||
if(err) {
|
||||
console.log(err);
|
||||
@@ -50,6 +71,36 @@ module.exports.ErrorCode = {
|
||||
NOFLOAT_PRICE: 4,
|
||||
WRONG_ACTION: 8
|
||||
}
|
||||
module.exports.ErrorCode["MAX"] = sum(module.exports.ErrorCode);
|
||||
|
||||
module.exports.getStatusMessage = function(errorCode, action, nametag) {
|
||||
if (action) {
|
||||
var position = splitNameTag(nametag, action);
|
||||
if (!errorCode) {
|
||||
return {
|
||||
type: "success",
|
||||
message: LANG["MESSAGES"]["success"].replace("%action%", LANG["ACTIONS"][action]),
|
||||
reasons: null,
|
||||
anchor: menuJSON[position.category][position.section]["anchor"]
|
||||
}
|
||||
} else {
|
||||
var reasons = [];
|
||||
for (var i = 1; i < module.exports.ErrorCode["MAX"]; i=i*2) {
|
||||
if (errorCode & i) { // bit-wise comparing
|
||||
reasons.push(LANG["ERROR_MESSAGES"][i]);
|
||||
}
|
||||
}
|
||||
return {
|
||||
type: "danger",
|
||||
message: LANG["MESSAGES"]["failure"].replace("%action%", LANG["ACTIONS"][action]),
|
||||
reasons: reasons,
|
||||
anchor: menuJSON[position.category][position.section]["anchor"]
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.determineAction = function(nametag) {
|
||||
if (nametag && REGEX_CREATE.test(nametag)) { // new
|
||||
@@ -136,6 +187,16 @@ var filterFloat = function(value) {
|
||||
return NaN;
|
||||
}
|
||||
|
||||
function sum(obj) {
|
||||
var sum = 0;
|
||||
for(var el in obj) {
|
||||
if(obj.hasOwnProperty(el)) {
|
||||
sum += parseFloat(obj[el]);
|
||||
}
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
var splitNameTag = function(nametag, action) {
|
||||
if (action) { // create, update & delete
|
||||
var splitArr = nametag.split("-");
|
||||
|
||||
272
modules/reservation.js
Normal file
272
modules/reservation.js
Normal file
@@ -0,0 +1,272 @@
|
||||
var fs = require('fs');
|
||||
|
||||
var reservationJSON = {
|
||||
"items": []
|
||||
};
|
||||
|
||||
var REGEX_CREATE = /^new$/;
|
||||
var REGEX_UPDATE = /^[0-9]+$/;
|
||||
var REGEX_DELETE = /^[0-9]+-del$/;
|
||||
var REGEX_SHOW = /^[0-9]+-edit$/;
|
||||
var REGEX_READ = /^[0-9]+-read$/;
|
||||
|
||||
var REGEX_INT = /^(\-|\+)?([0-9]+)$/;
|
||||
var REGEX_EMAIL = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
||||
var REGEX_TIME = /^(([01][0-9]|2[0-4]):[0-5][0-9])$/;
|
||||
var REGEX_DATE = /^(([0-2][0-9]|3[01]).(0[0-9]|1[012]).[0-9]{4})$/;
|
||||
|
||||
var LANG = {};
|
||||
LANG["ACTIONS"] = {
|
||||
1: "Das Reservieren",
|
||||
2: "Das Aktualisieren der Informationen",
|
||||
3: "Das Löschen der Reservierung",
|
||||
4: "Das Anzeigen der Inforationen",
|
||||
5: "Das Setzen des Gelesen-Status"
|
||||
};
|
||||
LANG["ERROR_MESSAGES"] = {
|
||||
1: "Das Feld \"Name\" darf nicht leer sein.",
|
||||
2: "Das Feld \"Kommentar\" darf nicht leer sein.",
|
||||
4: "Das Feld \"Anzahl der Personen\" darf nicht leer und muss eine ganze, positive Zahl sein.",
|
||||
8: "Das Feld \"Datum\" darf nicht leer sein und muss einem gültigen Datum im Format TT.MM.JJJJ entsprechen.",
|
||||
16: "Das Feld \"Uhrzeit\" darf nicht leer sein und muss einer gültigen Uhrzeit im Format HH:MM entsprechen.",
|
||||
32: "Das Feld \"E-Mail\" darf nicht leer und muss eine gültige E-Mail-Adresse sein.",
|
||||
64: "Beim Verarbeiten der Anfrage ist ein interner Fehler aufgetreten."
|
||||
};
|
||||
LANG["MESSAGES"] = {
|
||||
"success": "%action% war erfolgreich.",
|
||||
"failure": "%action% konnte nicht durchgeführt werden."
|
||||
};
|
||||
LANG["INTERNAL"] = {
|
||||
"noinput": "No input file for reservation JSON specified!"
|
||||
};
|
||||
|
||||
var FILENAME = false;
|
||||
|
||||
module.exports.init = function(reservationfile) {
|
||||
FILENAME = reservationfile;
|
||||
module.exports.loadFile();
|
||||
}
|
||||
|
||||
module.exports.loadFile = function() {
|
||||
if (!FILENAME) throw LANG["MESSAGES"]["noinput"];
|
||||
fs.readFile(FILENAME, 'utf8', function(err, data) {
|
||||
if (err) throw err;
|
||||
reservationJSON = JSON.parse(data);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports.saveJSON = function() {
|
||||
if (!FILENAME) throw LANG["MESSAGES"]["noinput"];
|
||||
fs.writeFile(FILENAME, JSON.stringify(reservationJSON, null, 4), function(err) {
|
||||
if(err) {
|
||||
console.log(err);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
module.exports.MenuAction = {
|
||||
ERROR: 0,
|
||||
CREATE: 1,
|
||||
UPDATE: 2,
|
||||
DELETE: 3,
|
||||
SHOW: 4,
|
||||
READ: 5
|
||||
}
|
||||
|
||||
module.exports.ErrorCode = {
|
||||
SUCCESS: 0,
|
||||
NOSTRING_NAME: 1,
|
||||
NOSTRING_DESC: 2,
|
||||
NONUMBER_PERS: 4,
|
||||
NODATE_DATE: 8,
|
||||
NOTIME_TIME: 16,
|
||||
NOEMAIL_MAIL: 32,
|
||||
WRONG_ACTION: 64
|
||||
}
|
||||
module.exports.ErrorCode["MAX"] = sum(module.exports.ErrorCode);
|
||||
|
||||
module.exports.getStatusMessage = function(errorCode, action) {
|
||||
if (action) {
|
||||
if (!errorCode) {
|
||||
return {
|
||||
type: "success",
|
||||
message: LANG["MESSAGES"]["success"].replace("%action%", LANG["ACTIONS"][action]),
|
||||
reasons: null
|
||||
}
|
||||
} else {
|
||||
var reasons = [];
|
||||
for (var i = 1; i < module.exports.ErrorCode["MAX"]; i=i*2) {
|
||||
if (errorCode & i) { // bit-wise comparing
|
||||
reasons.push(LANG["ERROR_MESSAGES"][i]);
|
||||
}
|
||||
}
|
||||
return {
|
||||
type: "danger",
|
||||
message: LANG["MESSAGES"]["failure"].replace("%action%", LANG["ACTIONS"][action]),
|
||||
reasons: reasons
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.determineAction = function(nametag) {
|
||||
if (nametag && REGEX_CREATE.test(nametag)) { // new
|
||||
return module.exports.MenuAction.CREATE;
|
||||
} else if (nametag && REGEX_UPDATE.test(nametag)) { // update
|
||||
return module.exports.MenuAction.UPDATE;
|
||||
} else if (nametag && REGEX_DELETE.test(nametag)) { // delete
|
||||
return module.exports.MenuAction.DELETE;
|
||||
} else if (nametag && REGEX_SHOW.test(nametag)) { // show
|
||||
return module.exports.MenuAction.SHOW;
|
||||
} else if (nametag && REGEX_READ.test(nametag)) { // read
|
||||
return module.exports.MenuAction.READ;
|
||||
}
|
||||
return module.exports.MenuAction.ERROR;
|
||||
}
|
||||
|
||||
module.exports.checkValidity = function(name, desc, person, email, date, time) {
|
||||
var errorCode = 0;
|
||||
|
||||
if (!name || !(typeof name === 'string' || name instanceof String))
|
||||
errorCode += module.exports.ErrorCode.NOSTRING_NAME;
|
||||
if (!desc || !(typeof desc === 'string' || desc instanceof String))
|
||||
errorCode += module.exports.ErrorCode.NOSTRING_DESC;
|
||||
if (isNaN(filterInt(person)))
|
||||
errorCode += module.exports.ErrorCode.NONUMBER_PERS;
|
||||
if (!REGEX_EMAIL.test(email))
|
||||
errorCode += module.exports.ErrorCode.NOEMAIL_MAIL;
|
||||
if (!REGEX_DATE.test(date))
|
||||
errorCode += module.exports.ErrorCode.NODATE_DATE;
|
||||
if (!REGEX_TIME.test(time))
|
||||
errorCode += module.exports.ErrorCode.NOTIME_TIME;
|
||||
|
||||
return errorCode;
|
||||
}
|
||||
|
||||
module.exports.addValue = function(name, desc, person, email, date, time, nametag) {
|
||||
var errorCode = module.exports.checkValidity(name, desc, person, email, date, time);
|
||||
var action = module.exports.determineAction(nametag);
|
||||
if (action !== module.exports.MenuAction.CREATE) {
|
||||
errorCode += module.exports.ErrorCode.WRONG_ACTION;
|
||||
}
|
||||
if (!errorCode) {
|
||||
person = filterInt(person);
|
||||
reservationJSON["items"].push({
|
||||
name: name,
|
||||
desc: desc,
|
||||
email: email,
|
||||
person: person,
|
||||
time: time,
|
||||
date: date,
|
||||
read: false
|
||||
});
|
||||
module.exports.saveJSON();
|
||||
}
|
||||
return errorCode;
|
||||
}
|
||||
|
||||
module.exports.updateValue = function(name, desc, person, email, date, time, nametag) {
|
||||
var errorCode = module.exports.checkValidity(name, desc, person, email, date, time);
|
||||
var action = module.exports.determineAction(nametag);
|
||||
if (action !== module.exports.MenuAction.UPDATE) {
|
||||
errorCode += module.exports.ErrorCode.WRONG_ACTION;
|
||||
}
|
||||
if (!errorCode) {
|
||||
person = filterInt(person);
|
||||
var position = splitNameTag(nametag, action);
|
||||
reservationJSON["items"][position.id] = {
|
||||
name: name,
|
||||
desc: desc,
|
||||
email: email,
|
||||
person: person,
|
||||
time: time,
|
||||
date: date,
|
||||
read: true
|
||||
};
|
||||
module.exports.saveJSON();
|
||||
}
|
||||
return errorCode;
|
||||
}
|
||||
|
||||
module.exports.deleteValue = function(nametag) {
|
||||
var errorCode = module.exports.ErrorCode.SUCCESS;
|
||||
var action = module.exports.determineAction(nametag);
|
||||
if (action !== module.exports.MenuAction.DELETE) {
|
||||
errorCode += module.exports.ErrorCode.WRONG_ACTION;
|
||||
}
|
||||
if (!errorCode) {
|
||||
var position = splitNameTag(nametag, action);
|
||||
reservationJSON["items"].splice(position.id, 1);
|
||||
module.exports.saveJSON();
|
||||
}
|
||||
return errorCode;
|
||||
}
|
||||
|
||||
module.exports.showValue = function(nametag) {
|
||||
var errorCode = module.exports.ErrorCode.SUCCESS;
|
||||
var action = module.exports.determineAction(nametag);
|
||||
if (action !== module.exports.MenuAction.SHOW) {
|
||||
errorCode += module.exports.ErrorCode.WRONG_ACTION;
|
||||
}
|
||||
if (!errorCode) {
|
||||
var position = splitNameTag(nametag, action);
|
||||
result = reservationJSON["items"][position.id];
|
||||
result.id = position.id;
|
||||
return result;
|
||||
}
|
||||
return errorCode;
|
||||
}
|
||||
|
||||
module.exports.readValue = function(nametag) {
|
||||
var errorCode = module.exports.ErrorCode.SUCCESS;
|
||||
var action = module.exports.determineAction(nametag);
|
||||
if (action !== module.exports.MenuAction.READ) {
|
||||
errorCode += module.exports.ErrorCode.WRONG_ACTION;
|
||||
}
|
||||
if (!errorCode) {
|
||||
var position = splitNameTag(nametag, action);
|
||||
reservationJSON["items"][position.id]["read"] = !reservationJSON["items"][position.id]["read"];
|
||||
module.exports.saveJSON();
|
||||
}
|
||||
return errorCode;
|
||||
}
|
||||
|
||||
module.exports.getJSON = function() {
|
||||
return reservationJSON;
|
||||
}
|
||||
|
||||
var filterInt = function(value) {
|
||||
if(REGEX_INT.test(value))
|
||||
return Number(value);
|
||||
return NaN;
|
||||
}
|
||||
|
||||
function sum(obj) {
|
||||
var sum = 0;
|
||||
for(var el in obj) {
|
||||
if(obj.hasOwnProperty(el)) {
|
||||
sum += parseFloat(obj[el]);
|
||||
}
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
var splitNameTag = function(nametag, action) {
|
||||
if (action) { // create, update, show, read & delete
|
||||
var splitArr = nametag.split("-");
|
||||
var result = {};
|
||||
result.type = action;
|
||||
if (action == module.exports.MenuAction.CREATE) { // create
|
||||
result.id = null;
|
||||
} else { // update, show, read & delete
|
||||
result.id = parseInt(splitArr[0]);
|
||||
}
|
||||
return result;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user