aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHumairAK <humair88@hotmail.com>2016-08-26 07:30:05 +0000
committerHumairAK <humair88@hotmail.com>2016-08-26 07:30:05 +0000
commit7deb83c56e680769ccc72527d719dbc411c20469 (patch)
tree31946e8abebba07528432632ef6b853506e288fc
parentb1b2a1b16961d75fe92cac2d829fab829e4cf060 (diff)
added mail receiver function, need to add script client side to fill inbox for user profile
-rw-r--r--node_simple.js27
-rw-r--r--routes/user.js123
-rw-r--r--test/data/messages.json0
-rw-r--r--views/user_profile_alt.hbs8
4 files changed, 125 insertions, 33 deletions
diff --git a/node_simple.js b/node_simple.js
index 360125e..7ff70c6 100644
--- a/node_simple.js
+++ b/node_simple.js
@@ -1365,3 +1365,30 @@ exports.removeToken = function(token, callback) {
});
};
+
+
+/**
+ * Check if the user with the given username has mail.
+ * If the user does, then send the mail that falls within the specified page range.
+ *
+ * @param {object} username object
+ * @param {function} callback of the form (<boolean1>, <boolean2>, <array of objects>, <string>)
+ * - callback(error, success, mail, message)
+ * */
+exports.getMail = function (username, callback) {
+
+ var mail = db.collection('mail');
+
+ mail.find({receiver: username}).toArray(function (err, data) {
+ if (err) {
+ callback(false, true, null, 'Error: could not retrieve inbox messages.');
+ } else if (!data) {
+ callback(false, false, null, 'No inbox.');
+ } else {
+ // Mail retrieved
+ callback(true, false, data, 'Retrieved inbox');
+ }
+
+ });
+
+};
diff --git a/routes/user.js b/routes/user.js
index e76b052..bd5efb9 100644
--- a/routes/user.js
+++ b/routes/user.js
@@ -13,13 +13,11 @@ var pass = require('../config/passport');
var csrfProtection = csrf();
router.use(csrfProtection); // router is protected
-
router.get('/logout', loggedIn, function (req, res, next) {
req.logout();
res.redirect('/');
});
-
/** Render/GET user_profile page. */
router.get('/user_profile', loggedIn, isUser, function(req, res, next) {
@@ -64,6 +62,7 @@ router.get('/user_profile', loggedIn, isUser, function(req, res, next) {
function getMail(){
return new Promise(function(resolve, reject) {
+ // We assume that the messages stored in data are sorted by date
dbFile.checkMailbox(req.user.user_name, function(success, error, data, message){
if (success) {
inbox = data;
@@ -97,32 +96,33 @@ router.get('/user_profile', loggedIn, isUser, function(req, res, next) {
function getFollows(){
return new Promise(function(resolve, reject) {
dbFile.retrieveFollows(req.user.user_name, function(success, data){
- req.user.examfollows = [];
- req.user.followerCount = data.length;
- if(success && data.length){
- var count = 1;
- data.forEach(function(item){
- dbFile.get_exam_byID(item, function(success, error, data){
- if(success){
- req.user.examfollows.push(data);
- if(count == req.user.followerCount ){
- resolve(1);
- }else{
- count++;
- }
- }else{
+
+ // Add a new attribute to users, examFollows & followerCount
+ req.user.examfollows = [];
+ req.user.followerCount = data.length;
+ if(success && data.length){
+ var count = 1;
+ data.forEach(function(item){
+ dbFile.get_exam_byID(item, function(success, error, data){
+ if(success){
+ req.user.examfollows.push(data);
+ if(count == req.user.followerCount ){
resolve(1);
+ }else{
+ count++;
}
- })
- });
-
- } else if(success && !data.length){
- resolve(1);
- }
- else{ //error
- error = data;
- resolve(1);
- }
+ }else{
+ resolve(1);
+ }
+ })
+ });
+ } else if(success && !data.length){
+ resolve(1);
+ }
+ else{ //error
+ error = data;
+ resolve(1);
+ }
});
});
@@ -134,6 +134,77 @@ router.get('/user_profile', loggedIn, isUser, function(req, res, next) {
});
+/**
+ * Serve mail messages for page pageNum with messageCount messages as a JSON object
+ */
+router.get('/user_profile/inbox/:messageCount/:pageNum', loggedIn, isUser, function(req, res, next) {
+
+ req.session.messages = null;
+ var inbox = [];
+ var error = null;
+ var pageNum = parseInt(req.params.pageNum);
+ var messageCount = parseInt(req.params.messageCount);
+
+ function getMail(){
+ return new Promise(function(resolve, reject) {
+
+ // We assume that the messages stored in data are sorted by date
+ dbFile.checkMailbox(req.user.user_name,
+ function(success, error, data, message){
+
+ if (success) {
+ inbox = data;
+ req.user.messages = inbox.length; // Give user message length
+ console.log("Success: " + message);
+
+ resolve(1);
+ } else if (error) {
+ // Need to redirect to an error page instead.
+ console.log("Error: " + message);
+ resolve(1);
+ }
+ });
+ });
+ }
+
+
+ getMail().then(function (data) {
+
+ var mail = [];
+ var index = (pageNum - 1) * messageCount;
+ var indexMax = index + messageCount;
+ var inboxLength = inbox.length;
+ var count = 0;
+
+ /* Testing Purposes
+ var notification = "index = " + index + "\n" +
+ "indexMax = " + indexMax + "\n" +
+ "inboxLength = " + inbox.length + "\n";
+ console.log(notification); */
+
+ // Find the 10 messages situated at page num in inbox, store in mail
+ if(index >= inboxLength){
+ res.writeHead(400, {"Content-Type": "application/json"});
+ console.log("Specified index is out of bounds");
+ }else if (inboxLength <= messageCount) {
+ res.writeHead(200, {"Content-Type": "application/json"});
+ mail = inbox;
+ }else {
+ res.writeHead(200, {"Content-Type": "application/json"});
+ while((index < inboxLength) && (index < indexMax)){
+ mail.push(inbox[index]);
+ index++;
+ count++;
+ console.log("in while: " + count);
+ }
+ }
+
+ // return mail JSON object :: JSON.stringify({json});
+ var mailJSON = JSON.stringify(mail);
+ res.end(mailJSON);
+ });
+});
+
router.get('/resetPassword', loggedOut, function(req, res, next) {
res.render('reset_password', {csrfToken: req.csrfToken(), success: req.session.success, errors: req.session.errors});
req.session.errors = null;
diff --git a/test/data/messages.json b/test/data/messages.json
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/data/messages.json
diff --git a/views/user_profile_alt.hbs b/views/user_profile_alt.hbs
index 5c797d7..8ca5597 100644
--- a/views/user_profile_alt.hbs
+++ b/views/user_profile_alt.hbs
@@ -122,6 +122,7 @@
<p>[PlaceHolder]</p>
</section>
+ <!-- Inbox page -->
<section class="u-profile" id="profile-inbox">
<h4>Inbox </h4>
@@ -132,13 +133,6 @@
</article>
-
-
-
- <!-- Pages -->
-
-
-
</div>
</div>