aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHumairAK <humair88@hotmail.com>2016-07-23 04:12:11 +0000
committerHumairAK <humair88@hotmail.com>2016-07-23 04:12:11 +0000
commit0ccf1dc1b80fe2dff8f98538ffac673c6b326a57 (patch)
tree82a55e2b940dbe56b2f1308fbee86a07abe82294
parent297b50e415b9db833128fa9b9574a35b7ca453d6 (diff)
Added admin cpanel functionality, added serverCallback in parameters for some database queries.
-rw-r--r--assets/css/style.css8
-rw-r--r--assets/js/script.js45
-rw-r--r--node_simple.js14
-rw-r--r--routes/admin.js48
-rw-r--r--routes/index.js21
-rw-r--r--routes/user.js2
-rw-r--r--views/admin.hbs284
7 files changed, 304 insertions, 118 deletions
diff --git a/assets/css/style.css b/assets/css/style.css
index eba03be..7b1538c 100644
--- a/assets/css/style.css
+++ b/assets/css/style.css
@@ -451,3 +451,11 @@ section.exam-info em {
background: #80cca0;
padding: 5px;
}
+/** Admin C-Panel **/
+.cpnl-details{
+ text-align: left;
+}
+
+.cpnl-container{
+ padding: 4%;
+} \ No newline at end of file
diff --git a/assets/js/script.js b/assets/js/script.js
index e752f0c..59fb358 100644
--- a/assets/js/script.js
+++ b/assets/js/script.js
@@ -49,6 +49,51 @@ function main(){
}
});
+ // ********* Admin Panel Scripts *********** //
+ var adminOptions = [
+ $("#cpnl-addExam"),
+ $("#cpnl-addCourse"),
+ $("#cpnl-removeExam"),
+ $("#cpnl-removeCourse"),
+ $("#cpnl-removeUser")];
+
+ function hideCpnlPages(){
+ adminOptions.forEach(function(item){
+ item.hide();
+ });
+ }
+
+ hideCpnlPages();
+
+ // Show General page
+ adminOptions[0].show();
+ $('.cpnl-page').bind('click', function(e){
+
+ e.preventDefault();
+ hideCpnlPages();
+
+ /* Each case will need to be changed to call a handler for fetching data
+ * from server*/
+ switch($(this).text()) {
+ case "Add Exam":
+ $("#cpnl-addExam").show();
+ break;
+ case "Add Course":
+ $("#cpnl-addCourse").show();
+ break;
+ case "Remove Exam":
+ $("#cpnl-removeExam").show();
+ break;
+ case "Remove Course":
+ $("#cpnl-removeCourse").show();
+ break;
+ case "Remove User":
+ $("#cpnl-removeUser").show();
+ break;
+ default:
+ console.log("Error: User page not found");
+ }
+ });
// --- nav scripts ---
diff --git a/node_simple.js b/node_simple.js
index cd6d06f..cf06e61 100644
--- a/node_simple.js
+++ b/node_simple.js
@@ -112,11 +112,11 @@ exports.add_user = function (fields, callbackUser) {
};
// find out if this user already exists by checking their email
- exports.find_user( fields[0], function (result) {
+ exports.find_user( fields[0] ,callbackUser, function (result, callbackUser) {
if (result == false) {
// find out if the user_name is taken
- exports.find_user_name( fields[1], function (docs) {
+ exports.find_user_name( fields[1], callbackUser, function (docs) {
if (docs == false) { // if not ...
// continue
console.log("user name is valid");
@@ -682,7 +682,7 @@ exports.find_course = function (course_code, callback) {
* Params: fields - an array of format ["course_code", year, "term", "type"]
*
* */
-exports.remove_exam = function (fields) {
+exports.remove_exam = function (fields, serverCallback) {
var course_code = fields[0];
var year = fields[1];
@@ -707,10 +707,14 @@ exports.remove_exam = function (fields) {
if (err) throw err;
else {
if (docs.deletedCount == 1) {
- console.log("exam was removed");
+ serverCallback(true, "Exam was removed successfully");
+ db.close();
+ //console.log("exam was removed");
}
else if (docs.deletedCount == 0) {
- console.log("No such exam was found");
+ serverCallback(false, "No such exam was found");
+ db.close();
+ //console.log("No such exam was found");
}
}
}
diff --git a/routes/admin.js b/routes/admin.js
index 9952218..35b208b 100644
--- a/routes/admin.js
+++ b/routes/admin.js
@@ -12,7 +12,7 @@ router.get('/', function(req,res){
});
/* Adds exam from front-end */
-router.post('/update/exam', function(req,res){
+router.post('/add/exam', function(req,res){
var course_code = req.body.course_code,
year = req.body.year,
type = req.body.type,
@@ -27,8 +27,8 @@ router.post('/update/exam', function(req,res){
var fields = [
course_code, // String
year, // Int
- type, // String; Needs to be added to database code
term, // String
+ type, // String
instructors, // Array of strings
page_count, // Int
questions_count, // Int
@@ -43,11 +43,11 @@ router.post('/update/exam', function(req,res){
}
console.log(statusMessage);
});
- res.redirect('/');
+ res.redirect('/admin');
});
/* Adds course from front-end */
-router.post('/update/course', function(req,res){
+router.post('/add/course', function(req,res){
var course_code = req.body.course_code,
title = req.body.title;
@@ -59,8 +59,46 @@ router.post('/update/course', function(req,res){
}
console.log("Status message: " + statusMessage)
});
- res.redirect('/');
+ res.redirect('/admin');
});
+router.post('/remove/exam', function(req,res){
+ var course_code = req.body.course_code,
+ year = req.body.year,
+ term = req.body.term,
+ type = req.body.type,
+ campus = req.body.campus;
+
+ var fields = [course_code, year, term, type];
+ console.log(fields);
+ dbFile.remove_exam(fields,
+ function(examRemoved, statusMessage){
+ if(examRemoved){
+ console.log("Success.");
+ } else {
+ console.log("Failed.");
+ }
+ console.log(statusMessage);
+ });
+
+ res.redirect('/admin');
+});
+
+
+
+/* Takes an input string delimited by commas, will split by comma and trim white
+ * spaces. Consider callback.
+ */
+function parseStringArray(input){
+ var list = input.split(',');
+ var parsedList = [];
+ list.forEach(function(word){
+ if (word != ""){
+ parsedList.push(word.trim());
+ }
+ });
+ return parsedList;
+}
+
module.exports = router;
diff --git a/routes/index.js b/routes/index.js
index 30189da..ac8e9a8 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -19,11 +19,11 @@ router.get('/user_solutions', function(req, res, next) {
res.render('user_solutions');
});
-/* Render/GET questions page */
+/* Render/GET questions page
router.get('/questions', function(req, res, next) {
res.render('questions');
});
-
+*/
//EXAMPLE EXPECTED DATA GIVEN BELOW:
/*[ {courseCode: 'CSC240',
@@ -86,8 +86,9 @@ router.get('/search', function(req, res, next) {
router.get('/questions/:exam_id', function (req,res) {
console.log(req.params.exam_id);
dbFile.get_exam_info_by_ID(req.params.exam_id, function (questions) {
- res.render('questions', {query: questions});
console.log(questions);
+ res.render('questions', {query: questions});
+
});
});
@@ -144,18 +145,4 @@ function toProperCase(string) {
return string.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
-/* Takes an input string delimited by commas, will split by comma and trim white
- * spaces. Consider callback.
- */
-function parseStringArray(input){
- var list = input.split(',');
- var parsedList = [];
- list.forEach(function(word){
- if (word != ""){
- parsedList.push(word.trim());
- }
- });
- return parsedList;
-}
-
module.exports = router; \ No newline at end of file
diff --git a/routes/user.js b/routes/user.js
index 698c4f8..39b41d2 100644
--- a/routes/user.js
+++ b/routes/user.js
@@ -56,7 +56,7 @@ router.post('/signup', loggedOut, function(req, res, next) {
if (errors) {
req.session.errors = errors;
req.session.success = false;
- res.redirect('/signup');
+ res.redirect('/user/signup');
} else {
console.log("GOT SUCCESS");
passport.authenticate('local_signup', {
diff --git a/views/admin.hbs b/views/admin.hbs
index da33f41..36a3210 100644
--- a/views/admin.hbs
+++ b/views/admin.hbs
@@ -1,102 +1,206 @@
<main id="solutions-main">
-<div class="row signup">
- <div class="col-md-3 col-md-offset-1 admin-form">
- <h4>Add Exam</h4>
- <form action="/admin/update/exam" method="post">
- <div class="form-group">
- Course Code: <input type="text"
- class="form-control"
- placeholder="course code"
- name="course_code">
- </div>
- <div class="form-group">
- Year of Exam:
- <input type="text"
- class="form-control"
- placeholder="year"
- name="year">
- </div>
- <div class="form-group">
- Term: <input type="text"
- class="form-control"
- placeholder="term"
- name="term">
- </div>
- <div class="form-group">
- Type of test:
- <input type="radio" name="type" value="Midterm"> Midterm
- <input type="radio" name="type" value="Final"> Final
- </div>
- <div class="form-group">
- List all instructors separated by comma:
- <input type="text"
- class="form-control"
- placeholder="instructor1,instructor2,.."
- name="instructors">
- </div>
- <div class="form-group">
- Page Count:
- <input type="text"
- class="form-control"
- placeholder="page count"
- name="page_count">
- </div>
- <div class="form-group">
- Questions count:
- <input type="text"
- class="form-control"
- placeholder="questions count"
- name="questions_count">
+<div class="container">
+<div class="row">
+<!-- Admin control Panel --->
+<div class="col-xs-12 col-sm-12 col-md-8 col-md-offset-2 col-xs-offset-0 col-sm-offset-0 toppad cpnl-details">
+
+ <!-- Admin Control Panel Menu -->
+ <nav class="navbar navbar-custom">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle"
+ data-toggle="collapse" data-target="#profile-nav">
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
</div>
- <div class="form-group">
- Questions Seperated by Comma
- <input type="text"
- class="form-control"
- placeholder="q1,q2,q3,.."
- name="questions_list">
+ <div class="collapse navbar-collapse" id="profile-nav">
+ <ul class="nav navbar-nav " >
+ <li><a href="#" class="cpnl-page">Add Exam</a></li>
+ <li><a href="#" class="cpnl-page">Add Course</a></li>
+ <li><a href="#" class="cpnl-page">Remove Exam</a></li>
+ <li><a href="#" class="cpnl-page">Remove Course</a></li>
+ <li><a href="#" class="cpnl-page">Remove User</a></li>
+ </ul>
</div>
+ </div>
+ </nav>
- <div class="form-group">
- Upload Date:
- <input type="text"
- class="form-control"
- placeholder="yyyy-mm-dd"
- name="upload_date">
- </div>
- <div class="form-group">
- Your username:
- <input type="text"
- class="form-control"
- placeholder="uploader"
- name="uploaded_by">
+ <!-- Admin Control Panel Pages -->
+ <div class="rounded">
+ <div class="panel panel-info rounded">
+ <div class="panel-heading">
+ <h3 class="panel-title">Admin Panel</h3>
</div>
+ <div class="panel-body">
- <input type="hidden" name="_csrf" value="{{ csrfToken }}">
- <button type="submit" class="btn btn-primary">Submit</button>
- </form>
- </div>
+ <!--- Add Exam --->
+ <div class="row cpnl-container" id="cpnl-addExam">
+ <h4>Add Exam</h4>
+ <form action="/admin/add/exam" method="post">
+ <div class="form-group">
+ Course Code: <input type="text"
+ class="form-control"
+ placeholder="course code"
+ name="course_code">
+ </div>
+ <div class="form-group">
+ Year of Exam:
+ <input type="text"
+ class="form-control"
+ placeholder="year"
+ name="year">
+ </div>
+ <div class="form-group">
+ Term:
+ <input type="radio" name="term" value="Fall"> Fall
+ <input type="radio" name="term" value="Winter"> Winter
+ <input type="radio" name="term" value="Summer"> Summer
+ </div>
+ <div class="form-group">
+ Type of test:
+ <input type="radio" name="type" value="Midterm"> Midterm
+ <input type="radio" name="type" value="Final"> Final
+ </div>
+ <div class="form-group">
+ List all instructors separated by comma:
+ <input type="text"
+ class="form-control"
+ placeholder="instructor1,instructor2,.."
+ name="instructors">
+ </div>
+ <div class="form-group">
+ Page Count:
+ <input type="text"
+ class="form-control"
+ placeholder="page count"
+ name="page_count">
+ </div>
+ <div class="form-group">
+ Questions count:
+ <input type="text"
+ class="form-control"
+ placeholder="questions count"
+ name="questions_count">
+ </div>
+ <div class="form-group">
+ Questions Seperated by Comma
+ <input type="text"
+ class="form-control"
+ placeholder="q1,q2,q3,.."
+ name="questions_list">
+ </div>
- <div class="col-md-3 admin-form">
- <h4>Add Course</h4>
- <form action="/admin/update/course" method="post">
- <div class="form-group">
- Course Code: <input type="text"
- class="form-control"
- placeholder="e.g. CSC240"
- name="course_code">
- </div>
- <div class="form-group">
- Title: <input type="text"
- class="form-control"
- placeholder="e.g. Theory of Computation"
- name="title">
- </div>
- <input type="hidden" name="_csrf" value="{{ csrfToken }}">
- <button type="submit" class="btn btn-primary">Submit</button>
- </form>
+ <div class="form-group">
+ Upload Date:
+ <input type="text"
+ class="form-control"
+ placeholder="yyyy-mm-dd"
+ name="upload_date">
+ </div>
+ <div class="form-group">
+ Your username:
+ <input type="text"
+ class="form-control"
+ placeholder="uploader"
+ name="uploaded_by">
+ </div>
- </div>
+ <input type="hidden" name="_csrf" value="{{ csrfToken }}">
+ <button type="submit" class="btn btn-primary">Submit</button>
+ </form>
+ </div>
+
+ <!--- Add Course --->
+ <div class="row cpnl-container" id="cpnl-addCourse">
+ <h4>Add Course</h4>
+ <form action="/admin/add/course" method="post">
+ <div class="form-group">
+ Course Code: <input type="text"
+ class="form-control"
+ placeholder="e.g. CSC240"
+ name="course_code">
+ </div>
+ <div class="form-group">
+ Title: <input type="text"
+ class="form-control"
+ placeholder="e.g. Theory of Computation"
+ name="title">
+ </div>
+ <input type="hidden" name="_csrf" value="{{ csrfToken }}">
+ <button type="submit" class="btn btn-primary">Submit</button>
+ </form>
+ </div>
+
+ <!--- Remove Exam --->
+ <div class="row cpnl-container" id="cpnl-removeExam">
+ <h4>Remove Exam</h4>
+ <form action="/admin/remove/exam" method="post">
+ <div class="form-group">
+ Course Code: <input type="text"
+ class="form-control"
+ placeholder="e.g. CSC240"
+ name="course_code">
+ </div>
+ <div class="form-group">
+ Year: <input type="text"
+ class="form-control"
+ placeholder="e.g. 2015"
+ name="year">
+ </div>
+ <div class="form-group">
+ Term:
+ <input type="radio" name="term" value="Fall"> Fall
+ <input type="radio" name="term" value="Winter"> Winter
+ <input type="radio" name="term" value="Summer"> Summer
+ </div>
+ <div class="form-group">
+ Type of test:
+ <input type="radio" name="type" value="Midterm"> Midterm
+ <input type="radio" name="type" value="Final"> Final
+ </div>
+
+ <div class="form-group">
+ <p> Campus: </p>
+ <input type="radio" name="campus" value="StGeorge"> St. George
+ <input type="radio" name="campus" value="Scarborough"> Scarborough
+ <input type="radio" name="campus" value="Mississauga"> Mississauga
+ </div>
+
+
+ <input type="hidden" name="_csrf" value="{{ csrfToken }}">
+ <button type="submit" class="btn btn-primary">Submit</button>
+ </form>
+ </div>
+
+ <!--- Remove Course --->
+ <div class="row cpnl-container" id="cpnl-removeCourse">
+ <h4>Remove Course</h4>
+ Pending. Need required database functionality.
+ </div>
+
+ <!--- Remove User --->
+ <div class="row cpnl-container" id="cpnl-removeUser">
+ <h4>Remove User</h4>
+ Pending. Need required database functionality.
+ </div>
+
+
+ <!-- Date, Edit, Logout (new row) -->
+ <div class="col-md-12 prf-sign-off">
+ <p class=" text-info"> July 4 2016 </p>
+ <a href="#">Logout</a>
+ <br>
+
+ </div>
+ </div>
+ </div>
+ </div>
+
+</div>
+</div>
</div>
</main> \ No newline at end of file