quizzer
Version:
Quizzer is a webserver for collaborative writing lab support. Based on a _fail early, fail often? approach to written language, the tool is particularly suited to second-language learners. The workflow (essay - error - quiz - exam) treats mistakes as an o
93 lines (86 loc) • 3.68 kB
JavaScript
(function () {
var scheduleClass = function (config,mailer) {
this.config = config;
this.config.mailer = mailer;
this.config.schedule = require('node-schedule');
var fs = require('fs');
this.config.msgTemplate = fs.readFileSync('commenter-message.txt').toString();
};
scheduleClass.prototype.scheduleAllMail = function (db) {
this.config.db = db;
var config = this.config;
var scheduleMail = this.scheduleMail;
db.all('SELECT adminID,adminKey,name,email,interval FROM admin WHERE email IS NOT NULL AND interval IS NOT NULL AND role=2',[],function(err,rows){
if (err) {return 'Error in scheduler(1)'};
if (rows) {
for (var i=0,ilen=rows.length;i<ilen;i+=1) {
var row = rows[i];
var adminID = row.adminID;
var name = row.name;
var email = row.email;
var adminKey = row.adminKey;
var dow = row.interval;
scheduleMail(config,adminID,name,email,adminKey,dow);
}
}
console.log("Woke up the mail schedulers");
console.log("Done. Ready to shake, rattle and roll!");
});
};
scheduleClass.prototype.scheduleMail = function(config,adminID,name,email,adminKey,dow) {
if (dow && "string" === typeof dow) {
if (dow.match(/^[0-9]+$/)) {
dow = parseInt(dow,10);
} else {
dow = null;
}
}
if (config.admin[adminKey] && config.admin[adminKey].sched) {
var success = config.schedule.cancelJob(config.admin[adminKey].sched);
};
if (!dow) {
return;
}
// var hostname
var hostname = config.proxy_hostname;
// var port
var port = ':' + config.real_port;
var email_account = config.email_account;
var rule = new config.schedule.RecurrenceRule();
rule.dayOfWeek = [dow];
rule.hour = 8;
rule.minute = 5;
rule.dayOfWeek = dow;
var msg = config.msgTemplate;
msg = msg.replace(/@@NAME@@/,name);
msg = msg.replace(/@@HOST_NAME@@/,config.proxy_hostname);
msg = msg.replace(/@@QUIZZER_PATH@@/,config.quizzer_path);
var j = config.schedule.scheduleJob(rule, function(err){
var newAdminKey = config.getRandomKey(8,36);
if (err) {console.log("Error in scheduler "+err)}
config.db.run('UPDATE admin SET adminKey=? WHERE adminID=?',[newAdminKey,adminID],function(err){
if (err) {return 'Error in scheduler(2)'};
delete config.admin[adminKey];
config.admin[newAdminKey] = {name:name,role:2,id:adminID};
config.mailer.sendMail({
text: msg.replace(/@@COMMENTER_KEY@@/,newAdminKey),
from: "Academic Writing Central <" + email_account + ">",
to: email,
subject: 'Quizzer calling'
}, function(err) {
if (err) {
console.log(err);
}
});
});
console.log("Attempting to set adminKey: "+adminKey);
if (config.admin[adminKey]) {
console.log(" succeeded");
config.admin[adminKey].sched = j;
} else {
console.log(" FAILED");
}
});
}
exports.scheduleClass = scheduleClass;
})();