aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornanalelfe <nargiza.nosirova@mail.utoronto.ca>2016-07-25 11:04:14 +0000
committernanalelfe <nargiza.nosirova@mail.utoronto.ca>2016-07-25 11:04:14 +0000
commit9f1b0d9f1c807e02a415b5b8a2509dc6445f08b3 (patch)
tree5fd3a0687e68c92bd4aac964acd949fbfd666f8d
parentbca90452150c6a128f88765d04481a0235059af3 (diff)
parentc7bec051d61d66925d68be8661aaf52b011dedac (diff)
merged
-rw-r--r--assets/css/creative.css7
-rw-r--r--assets/css/style.css2
-rw-r--r--node_simple.js3
-rw-r--r--routes/admin.js72
-rw-r--r--routes/index.js1
-rw-r--r--routes/user.js122
-rw-r--r--views/admin.hbs12
-rw-r--r--views/user_profile_alt.hbs3
-rw-r--r--views/user_solutions.hbs180
9 files changed, 214 insertions, 188 deletions
diff --git a/assets/css/creative.css b/assets/css/creative.css
index 54e1cbb..45f388b 100644
--- a/assets/css/creative.css
+++ b/assets/css/creative.css
@@ -376,5 +376,12 @@ header .header-content .header-content-inner hr {
background-color: #d9edf7;
color: #3170a6;
}
+/******************Alert Changes**************/
+.custom-Alert{
+ text-align: center;
+ margin: 30px 12% 30px 12%;
+ box-shadow: 2px 4px 5px 0 rgba(0,0,0,0.1);
+}
+
/********************************************/
diff --git a/assets/css/style.css b/assets/css/style.css
index d9bf06b..eb683b1 100644
--- a/assets/css/style.css
+++ b/assets/css/style.css
@@ -51,7 +51,7 @@ main .search h2{
box-sizing: border-box;
background: white url('../images/search_icon.png') no-repeat 9px 9px;
background-size: 20px 20px;
- padding: 12px 20px 12px 40px;
+ padding: 0;
}
.search input, .search button.search-button {
diff --git a/node_simple.js b/node_simple.js
index 2eab34c..165eb22 100644
--- a/node_simple.js
+++ b/node_simple.js
@@ -330,7 +330,6 @@ exports.retrieve_userComments_history = function (username, callback) {
// get a connection
mongoFactory.getConnection(uri).then(function (db) {
- console.log("for Each here");
var solutions = db.collection('solutions');
var exams = db.collection('exams');
var mylist = [];
@@ -367,9 +366,7 @@ exports.retrieve_userComments_history = function (username, callback) {
});
function doCall() {
- console.log("Am i inside the doCall()");
callback(true, mylist);
- console.log("IN NODE SIMPLE: " + mylist);
}
diff --git a/routes/admin.js b/routes/admin.js
index 027722d..24c5910 100644
--- a/routes/admin.js
+++ b/routes/admin.js
@@ -9,7 +9,9 @@ var csrfProtection = csrf();
router.use(csrfProtection); // router is protected
router.get('/', isAdmin, function(req,res){
+ console.log(req.session.messages);
res.render('admin', {csrfToken: req.csrfToken()});
+ req.session.messages = null;
});
/* Adds exam from front-end */
@@ -36,15 +38,16 @@ router.post('/add/exam', function(req,res){
upload_date, // String
uploaded_by]; // String
- dbFile.add_exam(fields, questions_list, function(examAdded, statusMessage){
+ dbFile.add_exam(fields, questions_list, function(examAdded, statusMsg){
if(examAdded){
- console.log("Success!");
+ req.session.messages = {success : statusMsg};
}else{
- console.log("Failed!");
+ req.session.messages = {error : statusMsg};
}
- console.log(statusMessage);
+ console.log(statusMsg);
+ res.redirect('/admin');
});
- res.redirect('/admin');
+
});
/* Adds course from front-end */
@@ -52,15 +55,16 @@ router.post('/add/course', function(req,res){
var course_code = req.body.course_code,
title = req.body.title;
- dbFile.add_course(course_code, title, function(courseAdded, statusMessage){
+ dbFile.add_course(course_code, title, function(courseAdded, statusMsg){
if(courseAdded){
- console.log("Success!");
+ req.session.messages = {success : statusMsg};
}else{
- console.log("Failure!");
+ req.session.messages = {error : statusMsg};
}
- console.log("Status message: " + statusMessage)
+ console.log(statusMsg);
+ res.redirect('/admin');
});
- res.redirect('/admin');
+
});
/* Add a new admin, redirect to admin panel */
@@ -72,18 +76,16 @@ router.post('/add/admin', function(req,res){
password: passport_file.encryptPassword(req.body.password)
};
- dbFile.addAdmin(admin_data, function(success, error, message){
+ dbFile.addAdmin(admin_data, function(success, error, statusMsg){
if(success){
- console.log("Success!");
- }else if(error){
- console.log("Error!");
+ req.session.messages = {success : statusMsg};
}else{
- console.log("Admin already exists.");
+ req.session.messages = {error : statusMsg};
}
- console.log(message);
+ console.log(statusMsg);
+ res.redirect('/admin');
});
- res.redirect('/admin');
});
/* Remove an exam route, redirect to admin panel */
@@ -95,48 +97,46 @@ router.post('/remove/exam', function(req,res){
campus = req.body.campus;
var fields = [course_code, year, term, type];
- console.log(fields);
- dbFile.remove_exam(fields,
- function(examRemoved, statusMessage){
+
+ dbFile.remove_exam(fields, function(examRemoved, statusMsg){
if(examRemoved){
- console.log("Success.");
+ req.session.messages = {success : statusMsg};
} else {
- console.log("Failed.");
+ req.session.messages = {error : statusMsg};
}
- console.log(statusMessage);
+ console.log(statusMsg);
+ res.redirect('/admin');
});
-
- res.redirect('/admin');
});
/* Remove a course route, redirect to admin panel */
router.post('/remove/course', function(req,res){
var course_code = req.body.course_code;
- dbFile.remove_course(course_code, function(courseRemoved, statusMessage){
+ dbFile.remove_course(course_code, function(courseRemoved, statusMsg){
if(courseRemoved){
- console.log("Success.");
+ req.session.messages = {success : statusMsg};
} else {
- console.log("Failed.");
+ req.session.messages = {error : statusMsg};
}
- console.log(statusMessage);
+ console.log(statusMsg);
+ res.redirect('/admin');
});
-
- res.redirect('/admin');
});
/* Remove a user route, redirect to admin panel */
router.post('/remove/user', function(req,res){
var username = req.body.username;
- dbFile.remove_user(username, function(userRemoved, statusMessage){
+ dbFile.remove_user(username, function(userRemoved, statusMsg){
if(userRemoved){
- console.log("Success.");
+ req.session.messages = {success : statusMsg};
} else {
- console.log("Failed.");
+ req.session.messages = {error : statusMsg};
}
- console.log(statusMessage);
+ console.log(statusMsg);
+ res.redirect('/admin');
});
- res.redirect('/admin');
+
});
diff --git a/routes/index.js b/routes/index.js
index 283b196..6218dd1 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -201,6 +201,7 @@ router.get('/solutions/:exam_id/:q_num', function (req, res) {
soln.commentCount = soln.comments.length;
});
res.render('user_solutions', {query: solutions, examID: examID, qID: qID, csrfToken: req.csrfToken()});
+ req.session.messages = null;
});
});
diff --git a/routes/user.js b/routes/user.js
index b0b2d47..e3340e0 100644
--- a/routes/user.js
+++ b/routes/user.js
@@ -26,7 +26,6 @@ router.get('/user_profile', loggedIn, isUser, function(req, res, next) {
var comments = [];
var inbox = [];
function getComments() {
- console.log('in getComments');
return new Promise(function(resolve, reject) {
dbFile.retrieve_userComments_history(req.user.user_name, function (success, object) {
if (!success) {
@@ -58,7 +57,6 @@ router.get('/user_profile', loggedIn, isUser, function(req, res, next) {
});
}
function getMail(){
- console.log('ing getMail');
return new Promise(function(resolve, reject) {
dbFile.checkMailbox(req.user.user_name, function(success, error, data, message){
@@ -98,60 +96,6 @@ router.get('/user_profile', loggedIn, isUser, function(req, res, next) {
//res.render('user_profile_alt', {comments : comments, inbox: inbox, csrfToken: req.csrfToken()});
});
-/* Adds a solution into the database, redirect to exam/question/solution page */
-router.post('/submit_solution/:examID/:qID', function(req,res){
- // Get required fields from body
- // Populate this data
- /* var Data = {
- exam_id: fields[0],
- q_id: fields[1],
- text: fields[2],
- votes: 0,
- comments: [],
- author: fields[3]
- };*/
-
- var examID = req.params.examID;
- var qID = req.params.qID;
-
- var text = req.body.solution,
- votes = 0,
- comments = [],
- author = req.user.user_name;
-
- var fields = [examID, qID, text, author];
- console.log(fields);
- // Add to database
- dbFile.add_solution(fields, function(addedSolution, statusMsg){
- if(addedSolution){
- console.log("Success!");
- }else{
- console.log("Failed to add solution!");
- }
- console.log(statusMsg);
-
- //Redirect to solutions page again
- res.redirect('/solutions/' + examID + '/' + qID);
-
- });
-
-});
-
-/* Routed here from Solutions page (add solution button)
-* Renders add_solution page for response.*/
-router.get('/add_solution/:examID/:qID', function (req, res, next) {
- var examID = req.params.examID;
- var qID = req.params.qID;
-
- // Must be a logged in user to access
- if(req.isAuthenticated()){
- res.render('add_solutions', {csrfToken: req.csrfToken(), examID: examID, qID: qID});
- } else {
- res.redirect('/'); // Change this to go back to the solutions page
- }
-
-});
-
router.get('/signup', loggedOut, function(req, res, next) {
res.render('signup', {csrfToken: req.csrfToken(), success: req.session.success, errors: req.session.errors});
req.session.errors = null;
@@ -241,7 +185,7 @@ router.post('/user_profile/send_message', loggedIn, function(req, res, next) {
date: current_date
};
- console.log(mail_data);
+ //console.log(mail_data);
dbFile.sendMail(mail_data, function(success, error, message) {
if ((!success && !error) || (error)) {
req.session.messages = {error : message};
@@ -259,6 +203,59 @@ router.post('/user_profile/send_message', loggedIn, function(req, res, next) {
});
+/* Adds a solution into the database, redirect to exam/question/solution page */
+router.post('/submit_solution/:examID/:qID', function(req,res){
+ // Get required fields from body
+ // Populate this data
+ /* var Data = {
+ exam_id: fields[0],
+ q_id: fields[1],
+ text: fields[2],
+ votes: 0,
+ comments: [],
+ author: fields[3]
+ };*/
+
+ var examID = req.params.examID;
+ var qID = req.params.qID;
+
+ var text = req.body.solution,
+ votes = 0,
+ comments = [],
+ author = req.user.user_name;
+
+ var fields = [examID, qID, text, author];
+ console.log(fields);
+ // Add to database
+ dbFile.add_solution(fields, function(addedSolution, statusMsg){
+ if(addedSolution){
+ req.session.messages = {success : statusMsg};
+ }else{
+ req.session.messages = {error : statusMsg};
+ }
+ //Redirect to solutions page again
+ res.redirect('/solutions/' + examID + '/' + qID);
+
+ });
+
+});
+
+/* Routed here from Solutions page (add solution button)
+ * Renders add_solution page for response.*/
+router.get('/add_solution/:examID/:qID', function (req, res, next) {
+ var examID = req.params.examID;
+ var qID = req.params.qID;
+
+ // Must be a logged in user to access
+ if(req.isAuthenticated()){
+ res.render('add_solutions', {csrfToken: req.csrfToken(), examID: examID, qID: qID});
+ } else {
+ var message = "Must be logged in to add a solution!";
+ req.session.messages = {error : message};
+ res.redirect('/solutions/' + examID + '/' + qID);
+ }
+
+});
// Authentication check in code
router.post('/comment/submit/:examID/:qID/:solID', function(req, res, next){
@@ -270,18 +267,19 @@ router.post('/comment/submit/:examID/:qID/:solID', function(req, res, next){
// Must be a logged in user to access
var fields = [comment, username];
if(req.isAuthenticated()){
- dbFile.add_comment(solutionID, fields, function(commentAdded, statusMessage){
+ dbFile.add_comment(solutionID, fields, function(commentAdded, statusMsg){
if(commentAdded){
- console.log("Success!");
+ req.session.messages = {success : statusMsg};
} else{
- console.log("Failed to add comment!");
+ req.session.messages = {error : statusMsg};
}
- console.log(statusMessage);
res.redirect('/solutions/' + examID + '/' + qID);
});
} else { //User not logged in
- res.redirect('/'); // Change this to go back to the solutions page with "need to be logged in msg"
+ var message = "Must be logged in to comment!";
+ req.session.messages = {error : message};
+ res.redirect('/solutions/' + examID + '/' + qID);
}
});
diff --git a/views/admin.hbs b/views/admin.hbs
index b821dc3..12c2ba9 100644
--- a/views/admin.hbs
+++ b/views/admin.hbs
@@ -3,6 +3,18 @@
<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">
+ {{# if messages.success }}
+ <section class="alert alert-success custom-Alert">
+ <!-- Change those to banners later -->
+ <h4>{{ messages.success }}</h4>
+ </section>
+ {{ else }}
+ {{# if messages.error }}
+ <section class="alert alert-danger custom-Alert">
+ <h4>{{ messages.error }}</h4>
+ </section>
+ {{/if}}
+ {{/if}}
<!-- Admin Control Panel Menu -->
<nav class="navbar navbar-custom">
diff --git a/views/user_profile_alt.hbs b/views/user_profile_alt.hbs
index c97c77c..7297b63 100644
--- a/views/user_profile_alt.hbs
+++ b/views/user_profile_alt.hbs
@@ -3,8 +3,7 @@
<div class="row">
<!-- User Profile details -->
-<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 col-xs-offset-0
-col-sm-offset-0 col-md-offset-3 col-lg-offset-3 toppad prf-details">
+<div class="col-xs-12 col-sm-12 col-md-8 col-md-offset-2 col-xs-offset-0 col-sm-offset-0 toppad prf-details">
<!-- User Profile Menu -->
<nav class="navbar navbar-custom">
diff --git a/views/user_solutions.hbs b/views/user_solutions.hbs
index b00b098..fac0301 100644
--- a/views/user_solutions.hbs
+++ b/views/user_solutions.hbs
@@ -1,103 +1,115 @@
<main id="solutions-main">
<div class='search solutions-container container'>
<div>
+ {{# if messages.success }}
+ <section class="alert alert-success custom-Alert">
+ <!-- Change those to banners later -->
+ <h4>{{ messages.success }}</h4>
+ </section>
+ {{ else }}
+ {{# if messages.error }}
+ <section class="alert alert-danger custom-Alert">
+ <h4>{{ messages.error }}</h4>
+ </section>
+ {{/if}}
+ {{/if}}
-<!-- Add Solution button and path -->
-<div class="row top-sol">
- <a href="/user/add_solution/{{examID}}/{{qID}}">
- <button class="col-xs-4 col-sm-2 col-md-2 col-lg-2
- col-xs-offset-4 col-sm-offset-5 col-md-offset-2
- col-lg-offset-2 rounded" id="add-solution">
- <h3>Add a solution</h3>
- </button>
- </a>
- <!-- Replace p below with breadcrumbs later -->
- <p class="col-xs-12 col-sm-12 col-md-6 show-path">
- CSC148 > Winter 2015 > Question 1
- </p>
-</div>
+ <!-- Add Solution button and path -->
+ <div class="row top-sol">
+ <a href="/user/add_solution/{{examID}}/{{qID}}">
+ <button class="col-xs-4 col-sm-2 col-md-2 col-lg-2
+ col-xs-offset-4 col-sm-offset-5 col-md-offset-2
+ col-lg-offset-2 rounded" id="add-solution">
+ <h3>Add a solution</h3>
+ </button>
+ </a>
-<!-- Solution 1 Example -->
-{{#each query}}
- <div class="row">
- <section id="sol-" class="col-md-10 col-md-offset-1 rounded">
- <div class="post-info">
- <div class="">
- <img class="img-responsive img-circle user-image" src="/assets/images/misc/user1.jpeg">
- <p class="username">{{this.author}}</p>
- </div>
+ <!-- Replace p below with breadcrumbs later -->
+ <p class="col-xs-12 col-sm-12 col-md-6 show-path">
+ CSC148 > Winter 2015 > Question 1
+ </p>
+ </div>
- <div class="pull-right">
- <div class="voting">
- <form action="/user/solution/vote/{{../examID}}/{{../qID}}/{{this._id}}" method="post">
- <input type="hidden" name="vote" value="up"/>
- <button class="upvote" type="submit"><img src="/assets/images/up_arrow.png"></button>
- <input type="hidden" name="_csrf" value="{{../csrfToken }}">
- </form>
- <form action="/user/solution/vote/{{../examID}}/{{../qID}}/{{this._id}}" method="post">
- <input type="hidden" name="vote" value="down"/>
- <button class="downvote"><img src="/assets/images/down_arrow.png"></button>
- <input type="hidden" name="_csrf" value="{{../csrfToken }}">
- </form>
- <p class="num-votes">{{this.votes}}</p>
+ <!-- Solution 1 Example -->
+ {{#each query}}
+ <div class="row">
+ <section id="sol-" class="col-md-10 col-md-offset-1 rounded">
+ <div class="post-info">
+ <div class="">
+ <img class="img-responsive img-circle user-image" src="/assets/images/misc/user1.jpeg">
+ <p class="username">{{this.author}}</p>
</div>
- </div>
- </div>
- <div class="user-sol">
- <h3>Solution</h3>
- <p>{{this.text}}</p>
- </div>
+ <div class="pull-right">
+ <div class="voting">
+ <form action="/user/solution/vote/{{../examID}}/{{../qID}}/{{this._id}}" method="post">
+ <input type="hidden" name="vote" value="up"/>
+ <button class="upvote" type="submit"><img src="/assets/images/up_arrow.png"></button>
+ <input type="hidden" name="_csrf" value="{{../csrfToken }}">
+ </form>
+ <form action="/user/solution/vote/{{../examID}}/{{../qID}}/{{this._id}}" method="post">
+ <input type="hidden" name="vote" value="down"/>
+ <button class="downvote"><img src="/assets/images/down_arrow.png"></button>
+ <input type="hidden" name="_csrf" value="{{../csrfToken }}">
+ </form>
+ <p class="num-votes">{{this.votes}}</p>
+ </div>
+ </div>
+ </div>
- <div class="comments">
- <h3>
- <a data-toggle="collapse" href="#com{{@index}}">
- <span>
- {{this.commentCount}}
- </span>
- comments
- <span class="caret"></span>
- </a>
- </h3>
+ <div class="user-sol">
+ <h3>Solution</h3>
+ <p>{{this.text}}</p>
+ </div>
- <div id="com{{@index}}" class="panel-collapse collapse">
- <ul class="list-group">
- {{#each this.comments}}
- <li class="list-group-item">
- <img src="/assets/images/misc/user3.jpeg"
- class="img-responsive img-circle comment-user-img">
- <p class="comment-username">
- <a href="/user_profile">
- {{this.by}}
- </a>
- , {{this.date}}
- </p>
- <p class="user-comment">{{this.text}}</p>
- </li>
- {{/each}}
+ <div class="comments">
+ <h3>
+ <a data-toggle="collapse" href="#com{{@index}}">
+ <span>
+ {{this.commentCount}}
+ </span>
+ comments
+ <span class="caret"></span>
+ </a>
+ </h3>
- <form action="/user/comment/submit/{{../examID}}/{{../qID}}/{{this._id}}" method="post">
- <div class="form-group">
- <textarea type="text"
- class="form-control"
- placeholder="Enter comment"
- name="comment">
+ <div id="com{{@index}}" class="panel-collapse collapse">
+ <ul class="list-group">
+ {{#each this.comments}}
+ <li class="list-group-item">
+ <img src="/assets/images/misc/user3.jpeg"
+ class="img-responsive img-circle comment-user-img">
+ <p class="comment-username">
+ <a href="/user_profile">
+ {{this.by}}
+ </a>
+ , {{this.date}}
+ </p>
+ <p class="user-comment">{{this.text}}</p>
+ </li>
+ {{/each}}
- </textarea>
- </div>
- <input type="hidden" name="_csrf" value="{{../csrfToken }}">
- <button type="submit" class="btn btn-primary">Submit</button>
- </form>
+ <form action="/user/comment/submit/{{../examID}}/{{../qID}}/{{this._id}}" method="post">
+ <div class="form-group">
+ <textarea type="text"
+ class="form-control"
+ placeholder="Enter comment"
+ name="comment">
- </ul>
- </div>
+ </textarea>
+ </div>
+ <input type="hidden" name="_csrf" value="{{../csrfToken }}">
+ <button type="submit" class="btn btn-primary">Submit</button>
+ </form>
- </div>
- </section>
- </div>
-{{/each}}
+ </ul>
+ </div>
+ </div>
+ </section>
+ </div>
+ {{/each}}
</div>
</div>