2016-05-10 09:04:57 -04:00
|
|
|
// Find users that may have incorrect roles based on classroom ownership and membership
|
|
|
|
|
|
|
|
// Usage:
|
|
|
|
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>
|
|
|
|
|
|
|
|
// User buckets
|
|
|
|
// Classroom owner, no role
|
|
|
|
// Classroom owner, student role
|
|
|
|
// Classroom owner, teacher role (GOOD)
|
|
|
|
// Classroom member, no role
|
|
|
|
// Classroom member, teacher role
|
2016-05-10 17:40:41 -04:00
|
|
|
// Classroom member, student role (GOOD)
|
2016-05-10 09:04:57 -04:00
|
|
|
|
|
|
|
'use strict';
|
|
|
|
const scriptStartTime = new Date();
|
|
|
|
|
|
|
|
const classrooms = db.classrooms.find({}, {ownerID: 1, members: 1}).toArray();
|
|
|
|
print(classrooms.length, "classrooms");
|
|
|
|
|
|
|
|
const userIds = [];
|
|
|
|
const teacherIds = {};
|
|
|
|
const studentIds = {};
|
|
|
|
for (var classroom of classrooms) {
|
|
|
|
teacherIds[classroom.ownerID.valueOf()] = true;
|
|
|
|
userIds.push(classroom.ownerID);
|
|
|
|
for (var memberId of classroom.members) {
|
|
|
|
studentIds[memberId.valueOf()] = true;
|
|
|
|
userIds.push(memberId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
print(Object.keys(teacherIds).length, "users own classrooms");
|
|
|
|
print(Object.keys(studentIds).length, "users in classrooms");
|
|
|
|
print(Object.keys(teacherIds).length + Object.keys(studentIds).length, "total");
|
|
|
|
|
|
|
|
const users = db.users.find({$and: [{_id: {$in: userIds}}, {anonymous: false}]}, {email:1, role: 1}).toArray();
|
|
|
|
|
|
|
|
const studentOwnsClassroom = [];
|
|
|
|
const teacherInClassroom = [];
|
|
|
|
const individualInClassroom = [];
|
|
|
|
const individualOwnsClassroom = [];
|
|
|
|
for (var user of users) {
|
|
|
|
const userId = user._id.valueOf();
|
|
|
|
if (!user.email) {
|
|
|
|
printjson(user);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (hasStudentRole(user.role)) {
|
|
|
|
if (teacherIds[userId]) {
|
|
|
|
studentOwnsClassroom.push(user.email);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (hasTeacherRole(user.role)) {
|
|
|
|
if (studentIds[userId]) {
|
|
|
|
teacherInClassroom.push(user.email);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (studentIds[userId]) {
|
|
|
|
individualInClassroom.push(user.email);
|
|
|
|
}
|
|
|
|
else if (teacherIds[userId]) {
|
|
|
|
individualOwnsClassroom.push(user.email);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
print("ERROR?", userId);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
print(studentOwnsClassroom.length, "Students own classroom:");
|
|
|
|
for (var email of studentOwnsClassroom) {
|
|
|
|
print(email);
|
|
|
|
}
|
|
|
|
print(teacherInClassroom.length, "Teachers in classroom:");
|
|
|
|
for (var email of teacherInClassroom) {
|
|
|
|
print(email);
|
|
|
|
}
|
|
|
|
print(individualInClassroom.length, "Individuals in classroom:");
|
|
|
|
for (var email of individualInClassroom) {
|
|
|
|
print(email);
|
|
|
|
}
|
|
|
|
print(individualOwnsClassroom.length, "Individuals own classroom:");
|
|
|
|
for (var email of individualOwnsClassroom) {
|
|
|
|
print(email);
|
|
|
|
}
|
|
|
|
|
|
|
|
print("Script runtime: " + (new Date() - scriptStartTime));
|
|
|
|
|
|
|
|
function hasTeacherRole(role) {
|
|
|
|
return ['teacher', 'technology coordinator', 'advisor', 'principal', 'superintendent', 'parent'].indexOf(role) >= 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
function hasStudentRole(role) {
|
|
|
|
return ['student'].indexOf(role) >= 0;
|
|
|
|
}
|