Skip to content
Snippets Groups Projects
Commit 9b852d87 authored by Quentin Bramas's avatar Quentin Bramas
Browse files

allow reseting the starting time of a user

parent 4e02aeee
No related merge requests found
Pipeline #356081 passed with stages
in 4 minutes and 19 seconds
......@@ -26,6 +26,8 @@ Usage:
- To list users: python admin.py list-users
- To list classes: python admin.py list-classes
- To export results: python admin.py export-results
- To set user starting time: python admin.py set-user-starting-time CLASS_KEY USERNAME TIME
The format of time is YYYY-MM-DDTHH:MM or "now" or "0"
Options:
- -v : print more information
......@@ -37,7 +39,7 @@ python admin.py list-users --url-to <KEY>
"""
import os, sys
import os, sys, re
from datetime import datetime
import json
......@@ -70,6 +72,7 @@ action can be
- create-super-user USERNAME
- list-classes
- export-results CLASS_KEY
- set-user-starting-time CLASS_KEY USERNAME TIME
- help <------------ to display the full help
'''
......@@ -82,7 +85,14 @@ if action == 'help':
print(full_help)
exit(0)
if action not in ['list-users', 'create-users', 'create-super-user', 'list-classes', 'export-results', 'delete-users', 'help']:
if action not in ['list-users',
'create-users',
'create-super-user',
'list-classes',
'export-results',
'delete-users',
'set-user-starting-time',
'help']:
print('Invalid action.\n'+usage, file=sys.stderr)
exit(1)
......@@ -155,6 +165,8 @@ def sudo_result(data):
elif action == 'delete-users':
print(data)
elif action == 'set-user-starting-time':
print(data)
elif action == 'export-results':
# print csv
print('username,started,lastAnswerDate,answers')
......@@ -253,6 +265,33 @@ def connected_as(data):
sio.disconnect()
exit(1)
sio.emit('sudo', ('export-results', sys.argv[2]))
elif action == 'set-user-starting-time':
if len(sys.argv) < 5:
print('Usage: python3 admin.py set-user-starting-time <classKey> <username> <time>', file=sys.stderr)
print('the format of time is YYYY-MM-DDTHH:MM "now" or "0"', file=sys.stderr)
sio.disconnect()
exit(1)
if sys.argv[4] == 'now':
start_time = datetime.now().timestamp()*1_000
elif sys.argv[4] == '0':
start_time = 0
elif re.match(r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$", sys.argv[4]):
dt_object = datetime.strptime(sys.argv[4], "%Y-%m-%dT%H:%M")
start_time = dt_object.timestamp()*1_000
else:
print('Invalid time format', file=sys.stderr)
print('the format of time is YYYY-MM-DDTHH:MM or "now" or "0"', file=sys.stderr)
sio.disconnect()
exit(1)
sio.emit('sudo', ('set-user-starting-time', {
"classKey": sys.argv[2],
"username": sys.argv[3],
"startingTime": start_time
}))
else:
print('Invalid action', file=sys.stderr)
sio.disconnect()
exit(1)
printv('connecting to '+API_URL+'...')
......
......@@ -461,6 +461,28 @@ io.on('connection', function (socket) {
socket.emit('sudo-result', classes);
return;
}
if (cmd === 'set-user-starting-time') {
if (!options.classKey) {
socket.emit('sudo-error', 'no classKey given');
return;
}
if (!options.username) {
socket.emit('sudo-error', 'no username given');
return;
}
if (options.startingTime === undefined) {
socket.emit('sudo-error', 'no startingTime given');
return;
}
const cla = await db.Classes.get(options.classKey);
if (!cla) {
socket.emit('sudo-error', 'unknown class');
return;
}
let ok = cla.setUserStartingTime(options.username, options.startingTime);
socket.emit('sudo-result', ok);
}
if (cmd === 'export-results') {
let classes = await db.Classes.getAll({ owner_id: socket.user.id });
let classe = classes.filter(c => c.info.classKey === options);
......
......@@ -205,6 +205,15 @@ X no\n';
}
setUserStartingTime(username, startingTime) {
if (this.info.userInfo[username]) {
this.info.userInfo[username].startOfflineTime = startingTime;
this.save();
return true;
}
return false;
}
connectAdmin(socket) {
let self = this;
self.disconnectPreviousClass(socket);
......@@ -398,6 +407,9 @@ X no\n';
}
self.info.userInfo[socket.user.name].startOfflineTime = Date.now();
socket.emit('parsedSlides', self.info.slides);
if (self.info.answers[socket.id]) {
socket.emit('userAnswers', self.info.answers[socket.id]);
}
socket.emit('offlineStartedTime', 0);
self.save();
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment