SHARE
TWEET

Untitled

a guest Jun 8th, 2017 20 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var Teacher = require('./models/teacher');
  2. var Admin = require('./models/admin');
  3. var Student = require('./models/student');
  4.  
  5. module.exports = function(app, passport, upload, fs, globalvars) {
  6.     // show the home page (will also have our login links)
  7.     app.get('/', gotoProfile, function(req, res) {
  8.         res.render('index.ejs');
  9.     });
  10.  
  11.     // PROFILE SECTION =========================
  12.     app.get('/adminprofile', ensureOnlyAdmin, function(req, res) {
  13.         Teacher.
  14.         find().sort({
  15.             name: 1
  16.         }).
  17.         select({
  18.             name: 1,
  19.             username: 1,
  20.             department: 1
  21.         }).
  22.         exec(function(err, teacherdata) {
  23.             Student.
  24.             find().sort({
  25.                 teacher: 1,
  26.                 name: 1
  27.             }).
  28.             select({
  29.                 name: 1,
  30.                 username: 1,
  31.                 teacher: 1,
  32.                 department: 1
  33.             }).
  34.             exec(function(err, studentdata) {
  35.                 for (i = 0; i < studentdata.length; i++) {
  36.                     if (studentdata[i].teacher)
  37.                         studentdata[i].teachername = teacherdata.find(function(teacher) {
  38.                             return teacher.username == studentdata[i].teacher;
  39.                         }).name;
  40.                     studentdata[i].imggood = "Good";
  41.                     if (fs.existsSync(globalvars.imgdbpath + studentdata[i].teacher + "/" + studentdata[i].username) &&
  42.                         fs.readdirSync(globalvars.imgdbpath + studentdata[i].teacher + "/" + studentdata[i].username)
  43.                         .length < globalvars.minimages)
  44.                         studentdata[i].imggood = "Not Enough";
  45.                     if (!fs.existsSync(globalvars.imgdbpath + studentdata[i].teacher + "/" + studentdata[i].username) ||
  46.                         !fs.readdirSync(globalvars.imgdbpath + studentdata[i].teacher + "/" + studentdata[i].username).length)
  47.                         studentdata[i].imggood = "No Images";
  48.                 }
  49.                 res.render('adminprofile.ejs', {
  50.                     greenMessage: req.flash('profileGreenMessage'),
  51.                     redMessage: req.flash('profileRedMessage'),
  52.                     admin: req.user,
  53.                     teacherdata: teacherdata,
  54.                     studentdata: studentdata
  55.                 });
  56.             });
  57.         });
  58.     });
  59.  
  60.     app.get('/teacherprofile', ensureOnlyTeacher, function(req, res) {
  61.         Student.
  62.         find({
  63.             teacher: req.user.username
  64.         }).sort({
  65.             name: 1
  66.         }).
  67.         select({
  68.             name: 1,
  69.             username: 1,
  70.             teacher: 1,
  71.             department: 1
  72.         }).
  73.         exec(function(err, studentdata) {
  74.             for (i = 0; i < studentdata.length; i++) {
  75.                 studentdata[i].imggood = "Good";
  76.                 if (fs.existsSync(globalvars.imgdbpath + studentdata[i].teacher + "/" + studentdata[i].username) &&
  77.                     fs.readdirSync(globalvars.imgdbpath + studentdata[i].teacher + "/" + studentdata[i].username)
  78.                     .length < globalvars.minimages)
  79.                     studentdata[i].imggood = "Not Enough";
  80.                 if (!fs.existsSync(globalvars.imgdbpath + studentdata[i].teacher + "/" + studentdata[i].username) ||
  81.                     !fs.readdirSync(globalvars.imgdbpath + studentdata[i].teacher + "/" + studentdata[i].username).length)
  82.                     studentdata[i].imggood = "No Images";
  83.             }
  84.             res.render('teacherprofile.ejs', {
  85.                 greenMessage: req.flash('profileGreenMessage'),
  86.                 redMessage: req.flash('profileRedMessage'),
  87.                 teacher: req.user,
  88.                 studentdata: studentdata
  89.             });
  90.         });
  91.     });
  92.  
  93.     app.get('/studentprofile', ensureOnlyStudent, function(req, res) {
  94.         res.render('studentprofile.ejs', {
  95.             student: req.user
  96.         });
  97.     });
  98.  
  99.     app.get('/changeteacher', ensureOnlyAdmin, function(req, res) {
  100.         Student.
  101.         find().sort({
  102.             name: 1
  103.         }).
  104.         select({
  105.             name: 1,
  106.             username: 1,
  107.             department: 1,
  108.             teacher: 1
  109.         }).
  110.         exec(function(err, studentdata) {
  111.             Teacher.
  112.             find().
  113.             select({
  114.                 name: 1,
  115.                 username: 1
  116.             }).
  117.             exec(function(err, teacherdata) {
  118.                 for (i = 0; i < studentdata.length; i++) {
  119.                     if (studentdata[i].teacher)
  120.                         studentdata[i].teachername = teacherdata.find(function(teacher) {
  121.                             return teacher.username == studentdata[i].teacher;
  122.                         }).name;
  123.                 }
  124.                 res.render('changeteacher.ejs', {
  125.                     greenMessage: req.flash('greenMessage'),
  126.                     redMessage: req.flash('redMessage'),
  127.                     teacherdata: teacherdata,
  128.                     studentdata: studentdata
  129.                 });
  130.             });
  131.         });
  132.     });
  133.  
  134.     app.get('/changeteacher/:studuname/:fromtuname/:teacheruname', ensureOnlyAdmin, function(req, res) {
  135.         var flag = 0;
  136.         Student.where().update({
  137.             username: req.params.studuname
  138.         }, {
  139.             teacher: req.params.teacheruname
  140.         }, function(err, data) {
  141.  
  142.             if (err)
  143.                 flag = 1;
  144.         });
  145.         if (flag)
  146.             req.flash('redMessage', "Error changing!");
  147.         else {
  148.             if (fs.existsSync(globalvars.imgdbpath + req.params.fromtuname + "/" + req.params.studuname)) {
  149.                 fs.renameSync(globalvars.imgdbpath + req.params.fromtuname + "/" + req.params.studuname,
  150.                     globalvars.imgdbpath + req.params.teacheruname + "/" + req.params.studuname);
  151.             }
  152.             req.flash('greenMessage', "Successfully changed!");
  153.         }
  154.         res.redirect('/changeteacher');
  155.     });
  156.  
  157.     // LOGOUT ==============================
  158.     app.get('/logout', function(req, res) {
  159.         req.logout();
  160.         res.redirect('/');
  161.     });
  162.  
  163.     // LOGIN ===============================
  164.     // show the login form
  165.     app.get('/login', gotoProfile, function(req, res) {
  166.         res.render('login.ejs', {
  167.             redMessage: req.flash('loginRedMessage'),
  168.             greenMessage: req.flash('loginGreenMessage')
  169.         });
  170.     });
  171.  
  172.     // process the login form
  173.     app.post('/login', passport.authenticate('local-login', {
  174.         successRedirect: '/profile', // redirect to the secure adminprofile section
  175.         failureRedirect: '/login', // redirect back to the login page if there is an error
  176.         failureFlash: true // allow flash messages
  177.     }));
  178.  
  179.     app.get('/profile', gotoProfile, function(req, res) {
  180.         res.redirect('/login');
  181.     });
  182.  
  183.     // SIGNUP =================================
  184.     // show the adminsignup form
  185.     app.get('/adminsignup', gotoProfile, function(req, res) { //ADD ensureadmin for production builds
  186.         res.render('adminsignup.ejs', {
  187.             redMessage: req.flash('signupMessage')
  188.         });
  189.     });
  190.     // process the adminsignup form; add isauthenticated for production builds
  191.     app.post('/adminsignup', function(req, res) {
  192.         req.checkBody('name', 'Name is required').notEmpty();
  193.         req.checkBody('username', 'Username is required').notEmpty();
  194.         req.checkBody('password', 'Password is required').notEmpty();
  195.         var errors = req.validationErrors();
  196.         if (errors) {
  197.             for (i in errors) {
  198.                 req.flash('signupMessage', errors[i].msg);
  199.             }
  200.             res.redirect('adminsignup');
  201.         } else {
  202.             if (req.body.username)
  203.                 req.body.username = req.body.username.toLowerCase(); // Use lower-case username to avoid case-sensitive username matching
  204.             Admin.findOne({
  205.                 'username': req.body.username
  206.             }, function(err, admin) {
  207.                 // if there are any errors, return the error
  208.                 if (err)
  209.                     res.redirect('/adminsignup');
  210.                 // check to see if theres already a admin with that username
  211.                 if (admin) {
  212.                     req.flash('signupMessage', 'That username is already taken.');
  213.                     res.redirect('/adminsignup');
  214.                 } else {
  215.                     Teacher.findOne({
  216.                         'username': req.body.username
  217.                     }, function(err, teacher) {
  218.                         // if there are any errors, return the error
  219.                         if (err)
  220.                             res.redirect('/adminsignup');
  221.                         // check to see if theres already a teacher with that username
  222.                         if (teacher) {
  223.                             req.flash('signupMessage', 'That username is already taken.');
  224.                             res.redirect('/adminsignup');
  225.                         } else {
  226.                             Student.findOne({
  227.                                 'username': req.body.username
  228.                             }, function(err, student) {
  229.                                 // if there are any errors, return the error
  230.                                 if (err)
  231.                                     res.redirect('/adminsignup');
  232.                                 // check to see if theres already a student with that username
  233.                                 if (teacher) {
  234.                                     req.flash('signupMessage', 'That username is already taken.');
  235.                                     res.redirect('/adminsignup');
  236.                                 } else {
  237.                                     // create the user
  238.                                     var newAdmin = new Admin();
  239.                                     newAdmin.name = req.body.name;
  240.                                     newAdmin.username = req.body.username;
  241.                                     newAdmin.password = newAdmin.generateHash(req.body.password);
  242.                                     newAdmin.accType = "A";
  243.                                     newAdmin.save(function(err) {
  244.                                         if (err)
  245.                                             res.redirect('/adminsignup');
  246.                                         if (!req.user)
  247.                                             req.flash('loginGreenMessage', 'Account successfully created.');
  248.                                         else
  249.                                             req.flash('profileGreenMessage', 'Account successfully created.');
  250.                                         res.redirect('/login');
  251.                                     });
  252.                                 }
  253.                             });
  254.                         }
  255.                     });
  256.                 }
  257.             });
  258.         }
  259.     });
  260.  
  261.     // show the teachersignup form
  262.     app.get('/teachersignup', function(req, res) {
  263.         res.render('teachersignup.ejs', {
  264.             message: req.flash('signupMessage')
  265.         });
  266.     });
  267.     // process the teachersignup form
  268.     app.post('/teachersignup', function(req, res) {
  269.         if (req.body.username)
  270.             var username = req.body.username.toLowerCase(); // Use lower-case username to avoid case-sensitive username matching
  271.         req.checkBody('name', 'Name is required').notEmpty();
  272.         req.checkBody('username', 'Username is required').notEmpty();
  273.         req.checkBody('password', 'Password is required').notEmpty();
  274.         req.checkBody('department', 'Department is required').notEmpty();
  275.         var errors = req.validationErrors();
  276.         if (errors) {
  277.             for (i in errors) {
  278.                 req.flash('signupMessage', errors[i].msg);
  279.             }
  280.             res.redirect('teachersignup');
  281.         } else {
  282.             Teacher.findOne({
  283.                 'username': req.body.username
  284.             }, function(err, teacher) {
  285.                 // if there are any errors, return the error
  286.                 if (err)
  287.                     res.redirect('/teachersignup');
  288.                 // check to see if theres already a admin with that username
  289.                 if (teacher) {
  290.                     req.flash('signupMessage', 'That username is already taken.');
  291.                     res.redirect('/teachersignup');
  292.                 } else {
  293.                     Admin.findOne({
  294.                         'username': req.body.username
  295.                     }, function(err, admin) {
  296.                         // if there are any errors, return the error
  297.                         if (err)
  298.                             res.redirect('/teachersignup');
  299.                         // check to see if theres already a admin with that username
  300.                         if (admin) {
  301.                             req.flash('signupMessage', 'That username is already taken.');
  302.                             res.redirect('/teachersignup');
  303.                         } else {
  304.                             Student.findOne({
  305.                                 'username': req.body.username
  306.                             }, function(err, student) {
  307.                                 // if there are any errors, return the error
  308.                                 if (err)
  309.                                     res.redirect('/teachersignup');
  310.                                 // check to see if theres already a admin with that username
  311.                                 if (student) {
  312.                                     req.flash('signupMessage', 'That username is already taken.');
  313.                                     res.redirect('/teachersignup');
  314.                                 } else {
  315.                                     // create the user
  316.                                     fs.mkdirSync(globalvars.imgdbpath + req.body.username)
  317.                                     var newTeacher = new Teacher();
  318.                                     newTeacher.name = req.body.name;
  319.                                     newTeacher.department = req.body.department;
  320.                                     newTeacher.username = req.body.username;
  321.                                     newTeacher.password = newTeacher.generateHash(req.body.password);
  322.                                     newTeacher.accType = "T";
  323.                                     newTeacher.save(function(err) {
  324.                                         if (err)
  325.                                             res.redirect('/teachersignup');
  326.                                         req.flash('profileGreenMessage', 'Account successfully created.');
  327.                                         res.redirect('/login');
  328.                                     });
  329.                                 }
  330.                             });
  331.                         }
  332.                     });
  333.                 }
  334.             });
  335.         }
  336.     });
  337.  
  338.     app.get('/teacherremove/:uname', function(req, res) {
  339.         if (req.user) {
  340.             if (req.user.accType == "A" || (req.user.accType == "T" && req.user.username == req.params.uname)) {
  341.                 Student.findOne({
  342.                     teacher: req.params.uname
  343.                 }).exec(function(err, data) {
  344.                     if (data) {
  345.                         req.flash('profileRedMessage', "First, remove all students under the teacher, then delete!");
  346.                         res.redirect('/profile');
  347.                     } else {
  348.                         Teacher.remove({
  349.                             'username': req.params.uname
  350.                         }, function(err, data) {
  351.                             if (err) {
  352.                                 req.flash('profileRedMessage', 'Error deleting!');
  353.                                 res.redirect('/profile');
  354.                             } else {
  355.                                 fs.removeSync(globalvars.imgdbpath + req.params.uname);
  356.                                 req.flash('profileGreenMessage', 'Successfully deleted!');
  357.                                 res.redirect('/profile');
  358.                             }
  359.  
  360.                         });
  361.                     }
  362.                 });
  363.             } else
  364.                 res.redirect('/login');
  365.         } else
  366.             res.redirect('/login');
  367.     });
  368.  
  369.     // show the teachersignup form
  370.     app.get('/studentsignup', ensureTeacherOrAdmin, function(req, res) {
  371.         Teacher.
  372.         find().sort({
  373.             name: 1
  374.         }).
  375.         select({
  376.             name: 1,
  377.             username: 1
  378.         }).
  379.         exec(function(err, teacher) {
  380.             var isTeacher = 0;
  381.             if (req.user.accType == "T") {
  382.                 isTeacher = 1;
  383.             }
  384.             res.render('studentsignup.ejs', {
  385.                 message: req.flash('signupMessage'),
  386.                 teacher: teacher,
  387.                 username: req.user.username,
  388.                 isTeacher: isTeacher
  389.             });
  390.         });
  391.  
  392.     });
  393.  
  394.     // process the studentsignup form
  395.     app.post('/studentsignup', ensureTeacherOrAdmin, function(req, res) {
  396.         upload(req, res, function(err) {
  397.             if (err) {
  398.                 req.flash('signupMessage', 'Upload only images!');
  399.                 res.redirect('/studentsignup');
  400.             } else {
  401.                 if (req.body.username)
  402.                     var username = req.body.username.toLowerCase(); // Use lower-case username to avoid case-sensitive username matching
  403.                 req.checkBody('name', 'Name is required').notEmpty();
  404.                 req.checkBody('username', 'Username is required').notEmpty();
  405.                 req.checkBody('password', 'Password is required').notEmpty();
  406.                 req.checkBody('department', 'Department is required').notEmpty();
  407.                 var errors = req.validationErrors();
  408.                 if (errors) {
  409.                     for (i in errors) {
  410.                         req.flash('signupMessage', errors[i].msg);
  411.                     }
  412.                     res.redirect('studentsignup');
  413.                 } else {
  414.                     Teacher.findOne({
  415.                         'username': req.body.username
  416.                     }, function(err, teacher) {
  417.                         // if there are any errors, return the error
  418.                         if (err)
  419.                             res.redirect('/studentsignup');
  420.                         // check to see if theres already a admin with that username
  421.                         if (teacher) {
  422.                             req.flash('signupMessage', 'That username is already taken.');
  423.                             res.redirect('/studentsignup');
  424.                         } else {
  425.                             Admin.findOne({
  426.                                 'username': req.body.username
  427.                             }, function(err, admin) {
  428.                                 // if there are any errors, return the error
  429.                                 if (err)
  430.                                     res.redirect('/studentsignup');
  431.                                 // check to see if theres already a admin with that username
  432.                                 if (admin) {
  433.                                     req.flash('signupMessage', 'That username is already taken.');
  434.                                     res.redirect('/studentsignup');
  435.                                 } else {
  436.                                     Student.findOne({
  437.                                         'username': req.body.username
  438.                                     }, function(err, student) {
  439.                                         // if there are any errors, return the error
  440.                                         if (err)
  441.                                             res.redirect('/studentsignup');
  442.                                         // check to see if theres already a admin with that username
  443.                                         if (student) {
  444.                                             req.flash('signupMessage', 'That username is already taken.');
  445.                                             res.redirect('/studentsignup');
  446.                                         } else {
  447.                                             if (req.user.accType == "T") {
  448.                                                 req.body.teacher = req.user.username;
  449.                                             }
  450.                                             fs.renameSync(globalvars.tempdir + 'imgtemp/', globalvars.imgdbpath + req.body.teacher + "/" + req.body.username);
  451.                                             fs.mkdirSync(globalvars.tempdir + 'imgtemp/')
  452.                                                 // create the user
  453.                                             var newStudent = new Student();
  454.                                             newStudent.name = req.body.name;
  455.                                             newStudent.department = req.body.department;
  456.                                             newStudent.username = req.body.username;
  457.                                             newStudent.password = newStudent.generateHash(req.body.password);
  458.                                             newStudent.accType = "S";
  459.                                             newStudent.teacher = req.body.teacher;
  460.                                             newStudent.attendance = [];
  461.                                             newStudent.save(function(err) {
  462.                                                 if (err) {
  463.                                                     req.flash('signupMessage', 'DB Error!');
  464.                                                     res.redirect('/studentsignup');
  465.                                                 }
  466.                                                 req.flash('profileGreenMessage', 'Account successfully created.');
  467.                                                 res.redirect('/login');
  468.                                             });
  469.  
  470.                                         }
  471.                                     });
  472.                                 }
  473.                             });
  474.                         }
  475.                     });
  476.                 }
  477.             }
  478.         })
  479.     });
  480.  
  481.     app.get('/viewattendance/:uname', function(req, res) {
  482.         if (req.user) {
  483.             Student.findOne({
  484.                 username: req.params.uname
  485.             }).exec(function(err, stud) {
  486.                 if (err)
  487.                     res.redirect('/profile');
  488.                 if (req.user.accType == "A" || (req.user.accType == "T" && stud.teacher == req.user.username) ||
  489.                     (req.user.accType == "S" && req.user.username == req.params.uname)) {
  490.                     res.render('viewattendance.ejs', {
  491.                         user: req.user,
  492.                         stud: stud,
  493.                         greenMessage: req.flash('greenMessage'),
  494.                         redMessage: req.flash('redMessage')
  495.                     });
  496.                 } else
  497.                     res.redirect('/profile');
  498.             });
  499.         } else
  500.             res.redirect('/');
  501.     });
  502.  
  503.     app.get('/viewwhole', ensureOnlyTeacher, function(req, res) {
  504. console.log('hello');
  505.         if (req.user) {
  506. console.log('hello1');
  507.             Student.find({
  508.     teacher: req.user.username
  509. }).exec(function(err, stud) {
  510.                 if (err)
  511. { console.log('helloerr');
  512.  
  513.                     res.redirect('/profile');
  514.   }        
  515.                     console.log(stud);
  516.                     res.render('viewwhole.ejs', {
  517.                         user: req.user,
  518.                         stud: stud,
  519.                         greenMessage: req.flash('greenMessage'),
  520.                         redMessage: req.flash('redMessage')
  521.                     });
  522.             });
  523.         } else
  524.             res.redirect('/');
  525.     });
  526.  
  527.     app.get('/changeattendance/:uname/:yyyy/:mm/:dd', function(req, res) {
  528.         if (req.user) {
  529.             var d = new Date(req.params.mm + " " + req.params.dd + " " + req.params.yyyy);
  530.             Student.findOne({
  531.                 username: req.params.uname
  532.             }).select({
  533.                 name: 1,
  534.                 username: 1,
  535.                 attendance: {
  536.                     $elemMatch: {
  537.                         date: d
  538.                     }
  539.                 }
  540.             }).exec(function(err, stud) {
  541.                 if (err)
  542.                     res.redirect('/viewattendance/' + req.params.uname);
  543.                 if (req.user.accType == "A" || (req.user.accType == "T" && stud.teacher == req.user.username)) {
  544.                     if (!stud.attendance[0]) {
  545.                         res.redirect('/profile');
  546.                     }
  547.                     res.render('changeattendance.ejs', {
  548.                         stud: stud
  549.                     });
  550.                 }
  551.             });
  552.         } else
  553.             res.redirect('/');
  554.     });
  555.  
  556.     app.post('/changeattendance/:uname/:yyyy/:mm/:dd', ensureTeacherOrAdmin, function(req, res) {
  557.         var d = new Date(req.params.mm + " " + req.params.dd + " " + req.params.yyyy);
  558.         aa = [];
  559.         for (i = 0; i < globalvars.periods; i++) {
  560.             aa[i] = {
  561.                 period: i + 1,
  562.                 absent: eval("req.body.period" + (i + 1))
  563.             };
  564.         }
  565.         Student.findOne({
  566.             username: req.params.uname,
  567.         }).update({
  568.             'attendance.date': d
  569.         }, {
  570.             '$set': {
  571.                 'attendance.$.a': aa
  572.             }
  573.         }, function(err, data) {
  574.             if (!err) {
  575.                 req.flash('greenMessage', "Update Successful");
  576.                 res.redirect('/viewattendance/' + req.params.uname);
  577.             } else {
  578.                 req.flash('redMessage', "Update Unsuccessful");
  579.                 res.redirect('/profile');
  580.             }
  581.         });
  582.     });
  583.  
  584.     app.get('/addattendance/:uname/', ensureTeacherOrAdmin, function(req, res) {
  585.         if (req.user) {
  586.             Student.findOne({
  587.                 username: req.params.uname
  588.             }).select({
  589.                 name: 1,
  590.                 username: 1
  591.             }).exec(function(err, stud) {
  592.                 if (err)
  593.                     res.redirect('/viewattendance/' + req.params.uname);
  594.                 if (req.user.accType == "A" || (req.user.accType == "T" && stud.teacher == req.user.username)) {
  595.                     res.render('addattendance.ejs', {
  596.                         stud: stud,
  597.                         periods: globalvars.periods
  598.                     });
  599.                 }
  600.             });
  601.         } else
  602.             res.redirect('/');
  603.     });
  604.  
  605.     app.post('/addattendance/:uname', ensureTeacherOrAdmin, function(req, res) {
  606.         var d = new Date(req.body.date);
  607.         d = new Date(d.toDateString());
  608.         aa = [];
  609.         for (i = 0; i < globalvars.periods; i++) {
  610.             aa[i] = {
  611.                 period: i + 1,
  612.                 absent: eval("req.body.period" + (i + 1))
  613.             };
  614.         }
  615.         att = {
  616.             date: d,
  617.             a: aa
  618.         }
  619.         Student.findOne({
  620.             username: req.params.uname,
  621.             attendance: {
  622.                 $elemMatch: {
  623.                     date: d
  624.                 }
  625.             }
  626.         }).exec(function(err, data) {
  627.             if (data) {
  628.                 req.flash('redMessage', "Record Exists! Click on Change at corresponding date.");
  629.                 res.redirect('/viewattendance/' + req.params.uname);
  630.             } else {
  631.                 Student.findOne({
  632.                     username: req.params.uname
  633.                 }).exec(function(err, stud) {
  634.                     stud.attendance.push(att);
  635.                     stud.save();
  636.                     req.flash('greenMessage', "Successfully Added");
  637.                     res.redirect('/viewattendance/' + req.params.uname);
  638.                 });
  639.             }
  640.         });
  641.     });
  642.  
  643.     app.post('/addattendancesingle/', function(req, res) {
  644.         if (req.body.secureKey == globalvars.secureKey) {
  645.             confidence = parseFloat(req.body.confidence);
  646.             if (confidence > globalvars.minConfidence) {
  647.                 parsedname = req.body.imagename.split('-');
  648.                 teacher = parsedname[0];
  649.                 datetime = new Date(parsedname[1], parsedname[2] - 1, parsedname[3], parsedname[4], parsedname[5]);
  650.                 student = req.body.student;
  651.                 var d = new Date(parsedname[2] + " " + parsedname[3] + " " + parsedname[1]);
  652.                 ds = d.toDateString()
  653.                 periodtime = []
  654.                 for (i of globalvars.periodtime) {
  655.                     periodtime.push([new Date(ds + ' ' + i[0]), new Date(ds + ' ' + i[1])])
  656.                 }
  657.                 flag = 0;
  658.                 for (let [index, val] of periodtime.entries()) {
  659.                     if (val[0] <= datetime && datetime <= val[1]) {
  660.                         flag = 1;
  661.                         Student.findOne({
  662.                             username: student,
  663.                         }).exec(function(err, stud) {
  664.                             if (err)
  665.                                 res.end("Invalid student username")
  666.                             if (stud.teacher == teacher) {
  667.                                 Student.findOne({
  668.                                     username: student,
  669.                                     attendance: {
  670.                                         $elemMatch: {
  671.                                             date: d
  672.                                         }
  673.                                     }
  674.                                 }).exec(function(err, data) {
  675.                                     if (data) {
  676.                                         for (k of data.attendance) {
  677.                                             if (k.date.toISOString() == d.toISOString()) {
  678.                                                 k.a[index].absent = false;
  679.                                                 data.save();
  680.                                                 res.end("Modified Record")
  681.                                             }
  682.                                         }
  683.                                     } else {
  684.                                         Student.findOne({
  685.                                             username: student
  686.                                         }).exec(function(err, stud1) {
  687.                                             aa = [];
  688.                                             for (i = 0; i < globalvars.periods; i++) {
  689.                                                 aa[i] = {
  690.                                                     period: i + 1,
  691.                                                     absent: true
  692.                                                 };
  693.                                             }
  694.                                             aa[index] = {
  695.                                                 period: index + 1,
  696.                                                 absent: false
  697.                                             }
  698.                                             att = {
  699.                                                 date: d,
  700.                                                 a: aa
  701.                                             }
  702.                                             stud1.attendance.push(att); //TODO
  703.                                             stud1.save();
  704.                                             res.end('Added record');
  705.                                         });
  706.                                     }
  707.                                 });
  708.                             } else
  709.                                 res.end("Data mismatch (Teacher Name doesnt match Student's Class Teacher Name)")
  710.                                 //stud.attendance.push(att);
  711.                                 //stud.save();
  712.                                 //req.flash('greenMessage', "Successfully Added");
  713.                                 //res.redirect('/viewattendance/' + req.params.uname);
  714.                         });
  715.                     }
  716.                 }
  717.                 if (flag == 0)
  718.                     res.end('Image not shot during any valid periods')
  719.             } else
  720.                 res.end("Not enough confidence");
  721.         } else
  722.             res.end("Wrong authentication token, real : " + globalvars.secureKey + ", received : " + req.body.secureKey);
  723.     });
  724.  
  725.     app.get('/viewimages/:teacher', ensureTeacherOrAdmin, function(req, res) {
  726.         require('fs').readdir(globalvars.snapshotprocessed, function(err, files) {
  727.             if (err) {
  728.                 res.end("Error");
  729.             } else {
  730.                 var a = files.filter(function(word) {
  731.                     return word.startsWith(req.params.teacher);
  732.                 })
  733.                 res.render('viewimages.ejs', {
  734.                     a: a
  735.                 })
  736.             }
  737.         });
  738.     });
  739.  
  740.     app.get('/getimage/:name', ensureTeacherOrAdmin, function(req, res, next) {
  741.         var options = {
  742.             root: './',
  743.             dotfiles: 'deny',
  744.             headers: {
  745.                 'x-timestamp': Date.now(),
  746.                 'x-sent': true
  747.             }
  748.         };
  749.         var fileName = globalvars.snapshotprocessed + req.params.name;
  750.         res.sendFile(fileName, options, function(err) {
  751.             if (err) {
  752.                 next(err);
  753.             }
  754.         });
  755.     });
  756.  
  757.     app.get('/viewlog', ensureOnlyAdmin, function(req, res) {
  758.         if (fs.existsSync(globalvars.logs + 'classifier.log')) {
  759.             c = fs.readFileSync(globalvars.logs + 'classifier.log').toString().replace(/\n/g, '<br/>');
  760.             if (fs.existsSync(globalvars.logs + 'train_classifier.log')) {
  761.                 tc = fs.readFileSync(globalvars.logs + 'train_classifier.log').toString().replace(/\n/g, '<br/>');
  762.                 res.render('viewlog.ejs', {
  763.                     tc: tc,
  764.                     c: c
  765.                 })
  766.             } else
  767.                 res.render('viewlog.ejs', {
  768.                     tc: "",
  769.                     c: c
  770.                 })
  771.         }
  772.     });
  773.     app.get('/studentremove/:uname', ensureOnlyAdmin, function(req, res) {
  774.         if (req.user) {
  775.             var flag = 0;
  776.             Student.
  777.             findOne({
  778.                 username: req.params.uname
  779.             }).
  780.             select({
  781.                 teacher: 1
  782.             }).
  783.             exec(function(err, stud) {
  784.                 Student.remove({
  785.                     'username': req.params.uname
  786.                 }, function(err, data) {
  787.                     if (err)
  788.                         var flag = 1;
  789.                 });
  790.                 if (flag)
  791.                     req.flash('profileRedMessage', 'Error deleting!');
  792.                 else
  793.                     req.flash('profileGreenMessage', 'Successfully deleted!');
  794.                 res.redirect('/profile');
  795.             });
  796.         } else
  797.             res.redirect('/login');
  798.     });
  799.  
  800.     app.get('/addimages/:uname', ensureTeacherOrAdmin, function(req, res) {
  801.         Student.findOne({
  802.             username: req.params.uname
  803.         }).select({
  804.             name: 1,
  805.             username: 1,
  806.             teacher: 1
  807.         }).exec(function(err, data) {
  808.             res.render('addimages.ejs', {
  809.                 studdata: data,
  810.                 message: req.flash('redMessage')
  811.             })
  812.         });
  813.     });
  814.  
  815.     app.post('/addimages/:uname', ensureTeacherOrAdmin, function(req, res) {
  816.         upload(req, res, function(err) {
  817.             var fl = 0;
  818.             if (err) {
  819.                 req.flash('redMessage', 'Upload only images!');
  820.                 res.redirect('/addimages/' + req.params.uname);
  821.             } else {
  822.                 fs.removeSync(globalvars.imgdbpath + req.body.teacher + "/" + req.params.uname);
  823.                 fs.renameSync(globalvars.tempdir + 'imgtemp/', globalvars.imgdbpath + req.body.teacher + "/" + req.params.uname);
  824.                 fs.mkdirSync(globalvars.tempdir + 'imgtemp/')
  825.                 req.flash('profileGreenMessage', "Successfully added images");
  826.                 res.redirect('/profile');
  827.             }
  828.         });
  829.     });
  830.  
  831.     app.get('/rebuildclassifiers', ensureOnlyAdmin, function(req, res) {
  832.         var python = require('child_process').spawn(
  833.             'python2',
  834.             // second argument is array of parameters, e.g.:
  835.             ["../facerecog/train_classifier.py", globalvars.imgdbpath, globalvars.classifiers]
  836.         );
  837.         req.flash('profileGreenMessage', 'Training Started, Check log for status!');
  838.         res.redirect('/profile');
  839.     });
  840. };
  841.  
  842. function ensureOnlyAdmin(req, res, next) { //Only admins
  843.     if (req.user)
  844.         if (req.user.accType == "A") {
  845.             return next();
  846.         }
  847.     res.redirect('/login')
  848. }
  849.  
  850. function ensureOnlyTeacher(req, res, next) { //Only teachers
  851.     if (req.user)
  852.         if (req.user.accType == "T") {
  853.             return next();
  854.         }
  855.     res.redirect('/login')
  856. }
  857.  
  858. function ensureTeacherOrAdmin(req, res, next) { //Only teachers and admin
  859.     if (req.user)
  860.         if (req.user.accType == "T" || req.user.accType == "A") {
  861.             return next();
  862.         }
  863.     res.redirect('/login')
  864. }
  865.  
  866. function ensureOnlyStudent(req, res, next) { //Only students
  867.     if (req.user)
  868.         if (req.user.accType == "S") {
  869.             return next();
  870.         }
  871.     res.redirect('/login')
  872. }
  873.  
  874. function gotoProfile(req, res, next) {
  875.     if (req.user) {
  876.         //console.log(req.user.constructor.modelName)
  877.         if (req.user.accType == "A") {
  878.             res.redirect('/adminprofile');
  879.         } else if (req.user.accType == "T") {
  880.             res.redirect('/teacherprofile');
  881.         } else if (req.user.accType == "S") {
  882.             res.redirect('/studentprofile');
  883.         }
  884.     } else
  885.         return next();
  886. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top