2016-05-10 06:04:57 -07: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 14:40:41 -07:00
// Classroom member, student role (GOOD)
2016-05-10 06:04:57 -07: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 ;
}