@@ -15,7 +15,7 @@ const admin = require('firebase-admin');
15
15
const functions = require ( 'firebase-functions' ) ;
16
16
const nodemailer = require ( 'nodemailer' ) ;
17
17
const moment = require ( 'moment' ) ;
18
- const url = 'https://testfortls .firebaseio.com/' ;
18
+ const url = 'https://alt-development-42a78-default-rtdb .firebaseio.com/' ;
19
19
20
20
const transporter = nodemailer . createTransport ( {
21
21
host : functions . config ( ) . mailingsystem . host ,
@@ -512,6 +512,7 @@ async function QuizResponseMailer(
512
512
endTime ,
513
513
email ,
514
514
) {
515
+
515
516
const correctAnswer =
516
517
answer === '*'
517
518
? 'N/A'
@@ -609,7 +610,7 @@ async function getAllStudentsforMail(passCode, startTime, endTime) {
609
610
let email = keys [ 'userName' ] ;
610
611
let ID = keys [ 'userID' ] ;
611
612
let name = keys [ 'name' ] === undefined ? 'N/A' : keys [ 'name' ] ;
612
- const val = { Name : name , Email : email , Answer : answer } ;
613
+ const val = { Name : name , Email : email , Answer : answer , responseTime : temp1 - temp } ;
613
614
// if (vlist.includes(ID)) {
614
615
a [ ID ] = val ;
615
616
b . push ( ID ) ;
@@ -631,6 +632,7 @@ async function getAllStudentsforMail(passCode, startTime, endTime) {
631
632
Name : student [ 'name' ] ,
632
633
Email : student [ 'email' ] ,
633
634
Answer : 'N/A' ,
635
+ responseTime :0
634
636
} ;
635
637
final . push ( val ) ;
636
638
}
@@ -1051,6 +1053,199 @@ async function deleteFacultyHelper(facultyID) {
1051
1053
return Promise . all ( coursesToRemove ) ;
1052
1054
}
1053
1055
}
1056
+ function quizHash ( startTime , date ) {
1057
+ return
1058
+ }
1059
+ async function quizResearchLogger (
1060
+ list ,
1061
+ answer ,
1062
+ errorRate ,
1063
+ type ,
1064
+ passCode ,
1065
+ quizNumber ,
1066
+ startTime ,
1067
+ endTime ,
1068
+ email , ) {
1069
+ //
1070
+ curr_time = moment . utc ( )
1071
+ // console.log(curr_time)
1072
+ // console.log(answer)
1073
+ console . log ( list )
1074
+ db_ref = admin
1075
+ . app ( )
1076
+ . database ( url )
1077
+ . ref ( 'InternalDb/Lectures/' )
1078
+ // getting lecture timings
1079
+
1080
+ // finding which class is going on currently
1081
+
1082
+ timings = await db_ref . orderByChild ( 'passCode' ) . equalTo ( passCode ) . once ( 'value' )
1083
+ timings = timings . val ( )
1084
+ if ( ! timings ) { return }
1085
+
1086
+ // console.log(timings)
1087
+ // console.log(curr_time.day())
1088
+ var starTime = null ;
1089
+ var endTime = null ;
1090
+ var lecNo = null ;
1091
+ for ( const [ key , value ] of Object . entries ( timings ) ) {
1092
+ //
1093
+ // console.log(value['day']+' '+curr_time.day())
1094
+ if ( value [ 'day' ] == curr_time . day ( ) ) {
1095
+ console . log ( key , value ) ;
1096
+ startTime = value [ 'startTime' ]
1097
+ endTime = value [ 'endTime' ]
1098
+
1099
+ }
1100
+ }
1101
+ startTime = moment . utc ( curr_time . format ( 'DD/MM/YYYY' ) + ' ' + startTime , 'DD/MM/YYYY HH:mm:ss' )
1102
+ endTime = moment . utc ( curr_time . format ( 'DD/MM/YYYY' ) + ' ' + startTime , 'DD/MM/YYYY HH:mm:ss' )
1103
+ // console.log('func ends')
1104
+ // Making a table : stud_email-starTime-passCode
1105
+ // iterating over all responses
1106
+ await Promise . all ( list . map ( async ( student ) => {
1107
+ // student = list[i]
1108
+ const grade = autoGrader ( student . Answer , answer , errorRate , type )
1109
+
1110
+ // getting reference
1111
+ reference = await admin
1112
+ . app ( )
1113
+ . database ( url )
1114
+ // check if exists
1115
+ db_ref = await admin
1116
+ . app ( )
1117
+ . database ( url )
1118
+ . ref ( 'InternalDb/StudentResearch/' )
1119
+ snapshot = await db_ref . orderByChild ( 'email-startTime-passCode' ) . equalTo ( student . Email + '-' + startTime . format ( 'DD/MM/YYYY HH:mm:ss' ) + '-' + passCode ) . once ( 'value' )
1120
+ if ( ! snapshot . val ( ) ) {
1121
+
1122
+ await db_ref . push ( {
1123
+ 'email' :student . Email ,
1124
+ 'passCode' : passCode ,
1125
+ 'startTime' : startTime . format ( 'DD/MM/YYYY HH:mm:ss' ) ,
1126
+ 'attempted_quizzes' : student . Answer == 'N/A' ?0 :1 ,
1127
+ 'not_attempted_quizzes' :student . Answer == 'N/A' ?1 :0 ,
1128
+ 'correct_quizzes' : grade == '1' ? 1 : 0 ,
1129
+ 'feedbacks_attended' :0 ,
1130
+ 'responseTime' :student . responseTime ,
1131
+ 'email-startTime-passCode' :student . Email + '-' + startTime . format ( 'DD/MM/YYYY HH:mm:ss' ) + '-' + passCode
1132
+ } )
1133
+ }
1134
+ else {
1135
+ entries = Object . entries ( snapshot . val ( ) ) ;
1136
+ [ key , value ] = entries [ 0 ] ;
1137
+
1138
+ await db_ref . child ( key )
1139
+ . update ( { 'attempted_quizzes' :student . Answer == 'N/A' ?value [ 'attempted_quizzes' ] :value [ 'attempted_quizzes' ] + 1 ,
1140
+ 'correct_quizzes' :grade == '1' ?value [ 'correct_quizzes' ] + 1 : value [ 'correct_quizzes' ] ,
1141
+ 'responseTime' :value [ 'responseTime' ] + student . responseTime ,
1142
+ 'not_attempted_quizzes' :student . Answer == 'N/A' ?value [ 'not_attempted_quizzes' ] + 1 :value [ 'not_attempted_quizzes' ] } , ( error ) => { if ( error ) { console . log ( error ) } } )
1143
+ }
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+ } )
1150
+ ) }
1151
+ async function feedbackResearchLogger (
1152
+ passCode ,
1153
+ startTime ,
1154
+ endTime ) {
1155
+ list = await admin
1156
+ . app ( )
1157
+ . database ( url )
1158
+ . ref ( 'InternalDb/FeedbackResponse/' )
1159
+ . orderByChild ( 'passCode' )
1160
+ . equalTo ( passCode )
1161
+ . once ( 'value' )
1162
+ . then ( async snapshot => {
1163
+ let list = [ ] ;
1164
+ snapshot . forEach ( data => {
1165
+ const keys = Object ( data . val ( ) ) ;
1166
+ const temp = moment ( startTime , 'DD/MM/YYYY HH:mm:ss' ) ;
1167
+ const temp1 = moment ( keys [ 'timestamp' ] , 'DD/MM/YYYY HH:mm:ss' ) ;
1168
+ const temp2 = moment ( endTime , 'DD/MM/YYYY HH:mm:ss' ) ;
1169
+
1170
+ // if (temp1 <= temp2 && temp1 >= temp) {
1171
+ // list[keys['responses']] += 1;
1172
+ // }
1173
+
1174
+ if ( temp1 <= temp2 && temp1 >= temp ) {
1175
+ list . push ( { Email :keys [ 'userName' ] } )
1176
+ }
1177
+ } ) ;
1178
+ return list
1179
+ } )
1180
+ console . log ( list )
1181
+
1182
+ curr_time = moment . utc ( )
1183
+ db_ref = admin
1184
+ . app ( )
1185
+ . database ( url )
1186
+ . ref ( 'InternalDb/Lectures/' )
1187
+ timings = await db_ref . orderByChild ( 'passCode' ) . equalTo ( passCode ) . once ( 'value' )
1188
+ timings = timings . val ( )
1189
+ if ( ! timings ) { return }
1190
+
1191
+ console . log ( timings )
1192
+ console . log ( curr_time . day ( ) )
1193
+ var starTime = null ;
1194
+ var endTime = null ;
1195
+ var lecNo = null ;
1196
+ for ( const [ key , value ] of Object . entries ( timings ) ) {
1197
+ //
1198
+ console . log ( value [ 'day' ] + ' ' + curr_time . day ( ) )
1199
+ if ( value [ 'day' ] == curr_time . day ( ) ) {
1200
+ console . log ( key , value ) ;
1201
+ startTime = value [ 'startTime' ]
1202
+ endTime = value [ 'endTime' ]
1203
+
1204
+ }
1205
+ }
1206
+ startTime = moment . utc ( curr_time . format ( 'DD/MM/YYYY' ) + ' ' + startTime , 'DD/MM/YYYY HH:mm:ss' )
1207
+ endTime = moment . utc ( curr_time . format ( 'DD/MM/YYYY' ) + ' ' + startTime , 'DD/MM/YYYY HH:mm:ss' )
1208
+ console . log ( 'func ends' )
1209
+ await Promise . all ( list . map ( async ( student ) => {
1210
+ // student = list[i]
1211
+
1212
+ // getting reference
1213
+ reference = await admin
1214
+ . app ( )
1215
+ . database ( url )
1216
+ // check if exists
1217
+ db_ref = await admin
1218
+ . app ( )
1219
+ . database ( url )
1220
+ . ref ( 'InternalDb/StudentResearch/' )
1221
+ snapshot = await db_ref . orderByChild ( 'email-startTime-passCode' ) . equalTo ( student . Email + '-' + startTime . format ( 'DD/MM/YYYY HH:mm:ss' ) + '-' + passCode ) . once ( 'value' )
1222
+ if ( ! snapshot . val ( ) ) {
1223
+
1224
+ await db_ref . push ( {
1225
+ 'email' :student . Email ,
1226
+ 'passCode' : passCode ,
1227
+ 'startTime' : startTime . format ( 'DD/MM/YYYY HH:mm:ss' ) ,
1228
+ 'attempted_quizzes' : 0 ,
1229
+ 'not_attempted_quizzes' :0 ,
1230
+ 'correct_quizzes' : 0 ,
1231
+ 'feedbacks_attended' :1 ,
1232
+ 'responseTime' :0 ,
1233
+ 'email-startTime-passCode' :student . Email + '-' + startTime . format ( 'DD/MM/YYYY HH:mm:ss' ) + '-' + passCode
1234
+ } )
1235
+ }
1236
+ else {
1237
+ entries = Object . entries ( snapshot . val ( ) ) ;
1238
+ [ key , value ] = entries [ 0 ] ;
1239
+ // console.log(key)
1240
+ // console.log(value)
1241
+ // console.log('Feedback attended by key '+ key)
1242
+ await db_ref . child ( key )
1243
+ . update ( { 'feedbacks_attended' :value [ 'feedbacks_attended' ] + 1 } , ( error ) => { if ( error ) { console . log ( error ) } } )
1244
+
1245
+ }
1246
+ } ) )
1247
+ }
1248
+
1054
1249
1055
1250
exports . mailingSystem = functions . https . onCall ( async ( data , context ) => {
1056
1251
if ( ! context . auth ) {
@@ -1071,12 +1266,21 @@ exports.mailingSystem = functions.https.onCall(async (data, context) => {
1071
1266
. ref ( 'InternalDb/KBC/' + coursequizurl )
1072
1267
. once ( 'value' )
1073
1268
. then ( async snapshot => {
1074
- value = snapshot . val ( ) ;
1269
+ const value = snapshot . val ( ) ;
1075
1270
const data = await getAllStudentsforMail (
1076
1271
passCode ,
1077
1272
value [ 'startTime' ] ,
1078
1273
value [ 'endTime' ] ,
1079
1274
) ;
1275
+ await quizResearchLogger ( data ,
1276
+ value [ 'correctAnswer' ] ,
1277
+ value [ 'errorRate' ] ,
1278
+ value [ 'quizType' ] ,
1279
+ value [ 'passCode' ] ,
1280
+ value [ 'questionCount' ] ,
1281
+ value [ 'startTime' ] ,
1282
+ value [ 'endTime' ] ,
1283
+ email , )
1080
1284
return await QuizResponseMailer (
1081
1285
data ,
1082
1286
value [ 'correctAnswer' ] ,
@@ -1100,7 +1304,7 @@ exports.mailingSystem = functions.https.onCall(async (data, context) => {
1100
1304
. ref ( 'InternalDb/Feedback/' + coursefburl )
1101
1305
. once ( 'value' )
1102
1306
. then ( async snapshot => {
1103
- value = snapshot . val ( ) ;
1307
+ const value = snapshot . val ( ) ;
1104
1308
const keys = Object ( snapshot . val ( ) ) ;
1105
1309
type = '0' ;
1106
1310
if ( 'kind' in keys ) {
@@ -1112,6 +1316,10 @@ exports.mailingSystem = functions.https.onCall(async (data, context) => {
1112
1316
value [ 'endTime' ] ,
1113
1317
type ,
1114
1318
) ;
1319
+ await feedbackResearchLogger (
1320
+ passCode ,
1321
+ value [ 'startTime' ] ,
1322
+ value [ 'endTime' ] )
1115
1323
return await FeedbackResponseMailer (
1116
1324
data ,
1117
1325
passCode ,
0 commit comments