From be0cf978f5d611a5c06a872381f17a29392c7ba6 Mon Sep 17 00:00:00 2001 From: Nathan Leniz Date: Tue, 27 Jan 2015 02:51:59 -0500 Subject: [PATCH] Correctly sorting unsolved bonfires --- app.js | 23 +-- controllers/bonfire.js | 18 +-- controllers/resources.js | 303 ++++++++++++++++++++------------------- public/js/main.js | 12 +- 4 files changed, 179 insertions(+), 177 deletions(-) diff --git a/app.js b/app.js index 9c24c7240f..2d089000db 100644 --- a/app.js +++ b/app.js @@ -326,6 +326,17 @@ app.post('/completed-bonfire/', function (req, res) { if (err) { return err; } else { + var index = req.user.uncompletedBonfires.indexOf(bonfireHash); + + if (index > -1) { + req.user.uncompletedBonfires.splice(index,1) + } + + index = pairedWith.uncompletedBonfires.indexOf(bonfireHash); + if (index > -1) { + pairedWith.uncompletedBonfires.splice(index,1) + } + pairedWith = pairedWith.pop(); pairedWith.completedBonfires.push({ _id: bonfireHash, @@ -341,17 +352,8 @@ app.post('/completed-bonfire/', function (req, res) { solution: isSolution }) - var index = req.user.uncompletedBonfires.indexOf(bonfireHash); - - if (index > -1) { - req.user.uncompletedBonfires.splice(index,1) - } - - index = pairedWith.uncompletedBonfires.indexOf(bonfireHash); - if (index > -1) { - req.user.uncompletedBonfires.splice(index,1) - } + debug('saving user with a pair'); req.user.save(); pairedWith.save(); @@ -370,6 +372,7 @@ app.post('/completed-bonfire/', function (req, res) { if (index > -1) { req.user.uncompletedBonfires.splice(index,1) } + debug("Saving user without a pair"); req.user.save(); } }); diff --git a/controllers/bonfire.js b/controllers/bonfire.js index 88d4fe6192..3f7a655453 100644 --- a/controllers/bonfire.js +++ b/controllers/bonfire.js @@ -30,25 +30,19 @@ exports.index = function(req, res) { bonfireHash: 'test' }); - - Bonfire.find({}, null, { sort: { difficulty: 1 } }, function(err, c) { - if (err) { - debug('bonfire err: ', err); - next(err); - } - }); }; exports.returnNextBonfire = function(req, res, next) { - var bonfireNumber; + if (!req.user) { req.user = new User(); - //return res.redirect('/bonfires/meet-bonfire'); } var currentTime = parseInt(+new Date() / 1000) if (currentTime - req.user.lastContentSync > 86400) { req.user.lastContentSync = currentTime; - var completed = req.user.completedBonfires; + var completed = req.user.completedBonfires.map(function(elem) { + return elem._id; + }); // TODO : remove debug statement debug(req.user, 'this is the user'); req.user.uncompletedBonfires = resources.allBonfireIds().filter(function(elem) { @@ -57,6 +51,8 @@ exports.returnNextBonfire = function(req, res, next) { } }); } + debug('These are completed bonfires', completed); + debug('These are uncompleted bonfires', req.user.uncompletedBonfires); var uncompletedBonfires = req.user.uncompletedBonfires; @@ -66,7 +62,7 @@ exports.returnNextBonfire = function(req, res, next) { if (err) { next(err); } - debug('Finding next bonfire for user', bonfire); + nameString = bonfire[0].name.toLowerCase().replace(/\s/g, '-'); return res.redirect('/bonfires/' + nameString); //res.render('bonfire/show', { diff --git a/controllers/resources.js b/controllers/resources.js index ce9c0160e4..61becf46a5 100644 --- a/controllers/resources.js +++ b/controllers/resources.js @@ -6,7 +6,8 @@ var User = require('../models/User'), Challenge = require('./../models/Challenge'), bonfires = require('../seed_data/bonfires.json'); Client = require('node-rest-client').Client, - client = new Client(); + client = new Client(), + debug = require('debug')('freecc:cntr:bonfires'); /** * GET / @@ -14,161 +15,161 @@ var User = require('../models/User'), */ module.exports = { - privacy: function privacy(req, res) { - res.render('resources/privacy', { - title: 'Privacy' - }); - }, - - stats: function stats(req, res) { - var date1 = new Date("10/15/2014"); - var date2 = new Date(); - var timeDiff = Math.abs(date2.getTime() - date1.getTime()); - var daysRunning = Math.ceil(timeDiff / (1000 * 3600 * 24)); - client.get('https://trello.com/1/boards/BA3xVpz9/cards?key=' + secrets.trello.key, function(trello, response) { - var nonprofitProjects = (trello && trello.length) || 15; - User.count({'points': {'$gt': 2}}, function(err, c3) { if (err) { debug('User err: ', err); next(err); } - User.count({'points': {'$gt': 9}}, function(err, c10) { if (err) { debug('User err: ', err); next(err); } - User.count({'points': {'$gt': 29}}, function(err, c30) { if (err) { debug('User err: ', err); next(err); } - User.count({'points': {'$gt': 53}}, function(err, all) { if (err) { debug('User err: ', err); next(err); } - res.render('resources/stats', { - title: 'Free Code Camp Stats:', - daysRunning: daysRunning, - nonprofitProjects: nonprofitProjects, - c3: c3, - c10: c10, - c30: c30, - all: all - }); - }); - }); + privacy: function privacy(req, res) { + res.render('resources/privacy', { + title: 'Privacy' }); - }); - }); - }, + }, - deployAWebsite: function deployAWebsite(req, res) { - res.render('resources/deploy-a-website', { - title: 'Deploy a Dynamic Website in 7 Minutes' - }); - }, - - nonprofitProjectInstructions: function nonprofitProjectInstructions(req, res) { - res.render('resources/nonprofit-project-instructions', { - title: 'Nonprofit Project Instructions' - }); - }, - - gmailShortcuts: function gmailShortcuts(req, res) { - res.render('resources/gmail-shortcuts', { - title: 'These Gmail Shortcuts will save you Hours' - }); - }, - - controlShortcuts: function controlShortcuts(req, res) { - res.render('resources/control-shortcuts', { - title: 'These Control Shortcuts will save you Hours' - }); - }, - - chromebook: function chromebook(req, res) { - res.render('resources/chromebook', { - title: 'Win a Chromebook' - }); - }, - - jqueryExercises: function jqueryExercises(req, res) { - res.render('resources/jquery-exercises', { - title: 'jQuery Exercises' - }); - }, - - livePairProgramming: function(req, res) { - res.render('resources/live-pair-programming', { - title: 'Live Pair Programming' - }); - }, - - javaScriptInYourInbox: function(req, res) { - res.render('resources/javascript-in-your-inbox', { - title: 'JavaScript in your Inbox' - }); - }, - - pairProgramWithTeamViewer: function(req, res) { - Challenge.find({}, null, { sort: { challengeNumber: 1 } }, function(err, c) { - if (err) { - debug('Challenge err: ', err); - next(err); - } - res.render('resources/pair-program-with-team-viewer', { - title: 'Challenge: Pair Program with Team Viewer', - name: 'Pair Program with Team Viewer', - video: '', - time: 30, - steps: steps, - cc: req.user ? req.user.challengesHash : undefined, - points: req.user ? req.user.points : undefined, - challenges: c - }); - }); - }, - - about: function(req, res) { - var date1 = new Date("10/15/2014"); - var date2 = new Date(); - var timeDiff = Math.abs(date2.getTime() - date1.getTime()); - var daysRunning = Math.ceil(timeDiff / (1000 * 3600 * 24)); - client.get('https://trello.com/1/boards/BA3xVpz9/cards?key=' + secrets.trello.key, function(trello, res2) { - client.get('https://www.googleapis.com/blogger/v3/blogs/2421288658305323950/posts?key=' + secrets.blogger.key, function(blogger, res3) { - var nonprofitProjects = trello.length || 15; - var blog = JSON.parse(blogger); - User.count({'points': {'$gt': 2}}, function (err, c3) { - if (err) { - debug('User err: ', err); - next(err); - } - User.count({'points': {'$gt': 9}}, function (err, c10) { - if (err) { - debug('User err: ', err); - next(err); - } - User.count({'points': {'$gt': 29}}, function (err, c30) { - if (err) { - debug('User err: ', err); - next(err); - } - User.count({'points': {'$gt': 53}}, function (err, all) { - if (err) { - debug('User err: ', err); - next(err); - } - res.render('resources/learn-to-code', { - title: 'About Free Code Camp and Our Team of Volunteers', - daysRunning: daysRunning, - nonprofitProjects: nonprofitProjects, - c3: c3, - c10: c10, - c30: c30, - all: all, - blog1Title: blog["items"][0]["title"], - blog1Link: blog["items"][0]["url"], - blog2Title: blog["items"][1]["title"], - blog2Link: blog["items"][1]["url"], - blog3Title: blog["items"][2]["title"], - blog3Link: blog["items"][2]["url"], - blog4Title: blog["items"][3]["title"], - blog4Link: blog["items"][3]["url"], - blog5Title: blog["items"][4]["title"], - blog5Link: blog["items"][4]["url"] + stats: function stats(req, res) { + var date1 = new Date("10/15/2014"); + var date2 = new Date(); + var timeDiff = Math.abs(date2.getTime() - date1.getTime()); + var daysRunning = Math.ceil(timeDiff / (1000 * 3600 * 24)); + client.get('https://trello.com/1/boards/BA3xVpz9/cards?key=' + secrets.trello.key, function(trello, response) { + var nonprofitProjects = (trello && trello.length) || 15; + User.count({'points': {'$gt': 2}}, function(err, c3) { if (err) { debug('User err: ', err); next(err); } + User.count({'points': {'$gt': 9}}, function(err, c10) { if (err) { debug('User err: ', err); next(err); } + User.count({'points': {'$gt': 29}}, function(err, c30) { if (err) { debug('User err: ', err); next(err); } + User.count({'points': {'$gt': 53}}, function(err, all) { if (err) { debug('User err: ', err); next(err); } + res.render('resources/stats', { + title: 'Free Code Camp Stats:', + daysRunning: daysRunning, + nonprofitProjects: nonprofitProjects, + c3: c3, + c10: c10, + c30: c30, + all: all + }); + }); + }); }); - }); }); - }); }); - }); - }); - }, + }, + + deployAWebsite: function deployAWebsite(req, res) { + res.render('resources/deploy-a-website', { + title: 'Deploy a Dynamic Website in 7 Minutes' + }); + }, + + nonprofitProjectInstructions: function nonprofitProjectInstructions(req, res) { + res.render('resources/nonprofit-project-instructions', { + title: 'Nonprofit Project Instructions' + }); + }, + + gmailShortcuts: function gmailShortcuts(req, res) { + res.render('resources/gmail-shortcuts', { + title: 'These Gmail Shortcuts will save you Hours' + }); + }, + + controlShortcuts: function controlShortcuts(req, res) { + res.render('resources/control-shortcuts', { + title: 'These Control Shortcuts will save you Hours' + }); + }, + + chromebook: function chromebook(req, res) { + res.render('resources/chromebook', { + title: 'Win a Chromebook' + }); + }, + + jqueryExercises: function jqueryExercises(req, res) { + res.render('resources/jquery-exercises', { + title: 'jQuery Exercises' + }); + }, + + livePairProgramming: function(req, res) { + res.render('resources/live-pair-programming', { + title: 'Live Pair Programming' + }); + }, + + javaScriptInYourInbox: function(req, res) { + res.render('resources/javascript-in-your-inbox', { + title: 'JavaScript in your Inbox' + }); + }, + + pairProgramWithTeamViewer: function(req, res) { + Challenge.find({}, null, { sort: { challengeNumber: 1 } }, function(err, c) { + if (err) { + debug('Challenge err: ', err); + next(err); + } + res.render('resources/pair-program-with-team-viewer', { + title: 'Challenge: Pair Program with Team Viewer', + name: 'Pair Program with Team Viewer', + video: '', + time: 30, + steps: steps, + cc: req.user ? req.user.challengesHash : undefined, + points: req.user ? req.user.points : undefined, + challenges: c + }); + }); + }, + + about: function(req, res) { + var date1 = new Date("10/15/2014"); + var date2 = new Date(); + var timeDiff = Math.abs(date2.getTime() - date1.getTime()); + var daysRunning = Math.ceil(timeDiff / (1000 * 3600 * 24)); + client.get('https://trello.com/1/boards/BA3xVpz9/cards?key=' + secrets.trello.key, function(trello, res2) { + client.get('https://www.googleapis.com/blogger/v3/blogs/2421288658305323950/posts?key=' + secrets.blogger.key, function(blogger, res3) { + var nonprofitProjects = trello.length || 15; + var blog = JSON.parse(blogger); + User.count({'points': {'$gt': 2}}, function (err, c3) { + if (err) { + debug('User err: ', err); + next(err); + } + User.count({'points': {'$gt': 9}}, function (err, c10) { + if (err) { + debug('User err: ', err); + next(err); + } + User.count({'points': {'$gt': 29}}, function (err, c30) { + if (err) { + debug('User err: ', err); + next(err); + } + User.count({'points': {'$gt': 53}}, function (err, all) { + if (err) { + debug('User err: ', err); + next(err); + } + res.render('resources/learn-to-code', { + title: 'About Free Code Camp and Our Team of Volunteers', + daysRunning: daysRunning, + nonprofitProjects: nonprofitProjects, + c3: c3, + c10: c10, + c30: c30, + all: all, + blog1Title: blog["items"][0]["title"], + blog1Link: blog["items"][0]["url"], + blog2Title: blog["items"][1]["title"], + blog2Link: blog["items"][1]["url"], + blog3Title: blog["items"][2]["title"], + blog3Link: blog["items"][2]["url"], + blog4Title: blog["items"][3]["title"], + blog4Link: blog["items"][3]["url"], + blog5Title: blog["items"][4]["title"], + blog5Link: blog["items"][4]["url"] + }); + }); + }); + }); + }); + }); + }); + }, randomPhrase: function() { var phrases = resources.phrases; diff --git a/public/js/main.js b/public/js/main.js index 5eb045dab9..832f54aecb 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -33,12 +33,15 @@ $(document).ready(function() { } }); + + function completedBonfire(didCompleteWith, bonfireSolution, thisBonfireHash) { $('#complete-bonfire-dialog').modal('show'); // Only post to server if there is an authenticated user if ($('.signup-btn-nav').length < 1) { l = location.pathname.split('/'); cn = l[l.length - 1]; + $.ajax({ type: 'POST', data: { @@ -49,7 +52,7 @@ $(document).ready(function() { } }, url: '/completed-bonfire/' - }); + }) } } @@ -66,15 +69,14 @@ $(document).ready(function() { window.location = '/challenges/' + (parseInt(l[l.length - 1]) + 1); }); - // TODO: refactor this to create meaningful variable names, what the heck i l? $('.next-bonfire-button').on('click', function() { var bonfireSolution = myCodeMirror.getValue(); var thisBonfireHash = passedBonfireHash || null; var didCompleteWith = $('#completed-with').val() || null; - console.log(didCompleteWith); - console.log(bonfireSolution, thisBonfireHash); + completedBonfire(didCompleteWith, bonfireSolution, thisBonfireHash); - window.location = '/bonfires/'; + window.location('/bonfires'); + }); // Bonfire instructions functions