You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.6 KiB
90 lines
2.6 KiB
/**
|
|
*
|
|
* @copyright 2019 Maksud R
|
|
* @package mod_attendance
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*
|
|
*/
|
|
|
|
class attendance_QRCodeRotate {
|
|
|
|
constructor() {
|
|
this.sessionId = 0;
|
|
this.password = "";
|
|
this.qrCodeInstance = "";
|
|
this.qrCodeHTMLElement = "";
|
|
}
|
|
|
|
start(sessionId, qrCodeHTMLElement, textPasswordHTMLElement, timerHTMLElement) {
|
|
this.sessionId = sessionId;
|
|
this.qrCodeHTMLElement = qrCodeHTMLElement;
|
|
this.textPasswordHTMLElement = textPasswordHTMLElement;
|
|
this.timerHTMLElement = timerHTMLElement;
|
|
this.fetchAndRotate();
|
|
}
|
|
|
|
qrCodeSetUp() {
|
|
this.qrCodeInstance = new QRCode(this.qrCodeHTMLElement, {
|
|
text: '',
|
|
width: 328,
|
|
height: 328,
|
|
colorDark : "#000000",
|
|
colorLight : "#ffffff",
|
|
correctLevel : QRCode.CorrectLevel.H
|
|
});
|
|
}
|
|
|
|
changeQRCode(password) {
|
|
var qrcodeurl = document.URL.substr(0,document.URL.lastIndexOf('/')) + '/attendance.php?qrpass=' + password + '&sessid=' + this.sessionId;
|
|
this.qrCodeInstance.clear();
|
|
this.qrCodeInstance.makeCode(qrcodeurl);
|
|
// display new password
|
|
this.textPasswordHTMLElement.innerHTML = '<h2>'+password+'</h2>';
|
|
}
|
|
|
|
updateTimer(timeLeft) {
|
|
this.timerHTMLElement.innerHTML = '<h3>Time left: '+timeLeft+'</h3>';
|
|
}
|
|
|
|
startRotating() {
|
|
var parent = this;
|
|
|
|
setInterval(function() {
|
|
var found = Object.values(parent.password).find(function(element) {
|
|
|
|
if (element.expirytime > Math.round(new Date().getTime() / 1000)) {
|
|
return element;
|
|
}
|
|
});
|
|
|
|
if (found == undefined) {
|
|
location.reload(true);
|
|
} else {
|
|
parent.changeQRCode(found.password);
|
|
parent.updateTimer(found.expirytime - Math.round(new Date().getTime() / 1000));
|
|
|
|
}
|
|
|
|
}, 1000);
|
|
|
|
}
|
|
|
|
fetchAndRotate() {
|
|
var parent = this;
|
|
|
|
fetch('password.php?session='+this.sessionId+'&returnpasswords=1', {
|
|
headers: {
|
|
'Content-Type': 'application/json; charset=utf-8'
|
|
}
|
|
})
|
|
.then((resp) => resp.json()) // Transform the data into json
|
|
.then(function(data) {
|
|
parent.password = data;
|
|
parent.qrCodeSetUp();
|
|
// this.changeQRCode( password );
|
|
parent.startRotating();
|
|
}).catch(err => {
|
|
console.error("Error fetching QR passwords from API.");
|
|
});
|
|
}
|
|
}
|