diff --git a/controllers/bonfire.js b/controllers/bonfire.js index e36be01ccd..79f3eb4a75 100644 --- a/controllers/bonfire.js +++ b/controllers/bonfire.js @@ -32,7 +32,7 @@ exports.index = function(req, res) { tests: [], challengeSeed: '', cc: req.user ? req.user.bonfiresHash : undefined, - points: req.user ? req.user.points : undefined, + progressTimestamps: req.user ? req.user.progressTimestamps : undefined, verb: resources.randomVerb(), phrase: resources.randomPhrase(), compliments: resources.randomCompliment(), @@ -112,7 +112,7 @@ exports.returnIndividualBonfire = function(req, res, next) { tests: bonfire.tests, challengeSeed: bonfire.challengeSeed, cc: !!req.user, - points: req.user ? req.user.points : undefined, + progressTimestamps: req.user ? req.user.progressTimestamps : undefined, verb: resources.randomVerb(), phrase: resources.randomPhrase(), compliment: resources.randomCompliment(), @@ -179,7 +179,7 @@ exports.testBonfire = function(req, res) { tests: bonfireTests, challengeSeed: bonfireChallengeSeed, cc: req.user ? req.user.bonfiresHash : undefined, - points: req.user ? req.user.points : undefined, + progressTimestamps: req.user ? req.user.progressTimestamps : undefined, verb: resources.randomVerb(), phrase: resources.randomPhrase(), compliment: resources.randomCompliment(), @@ -236,14 +236,14 @@ exports.completedBonfire = function (req, res) { } else { var index = req.user.uncompletedBonfires.indexOf(bonfireHash); if (index > -1) { - req.user.points++; + req.user.progressTimestamps.push(Date.now() / 1000 | 0); req.user.uncompletedBonfires.splice(index, 1) } pairedWith = pairedWith.pop(); index = pairedWith.uncompletedBonfires.indexOf(bonfireHash); if (index > -1) { - pairedWith.points++; + pairedWith.progressTimestamps.push(Date.now() / 1000 | 0); pairedWith.uncompletedBonfires.splice(index, 1); } @@ -285,7 +285,7 @@ exports.completedBonfire = function (req, res) { var index = req.user.uncompletedBonfires.indexOf(bonfireHash); if (index > -1) { - req.user.points++; + req.user.progressTimestamps.push(Date.now() / 1000 | 0); req.user.uncompletedBonfires.splice(index, 1) } diff --git a/controllers/courseware.js b/controllers/courseware.js index 4dcf0e1cb3..94d651467c 100644 --- a/controllers/courseware.js +++ b/controllers/courseware.js @@ -92,7 +92,7 @@ exports.returnIndividualCourseware = function(req, res, next) { tests: courseware.tests, challengeSeed: courseware.challengeSeed, cc: !!req.user, - points: req.user ? req.user.points : undefined, + progressTimestamps: req.user ? req.user.progressTimestamps : undefined, verb: resources.randomVerb(), phrase: resources.randomPhrase(), compliment: resources.randomCompliment(), @@ -111,7 +111,7 @@ exports.returnIndividualCourseware = function(req, res, next) { tests: courseware.tests, challengeSeed: courseware.challengeSeed, cc: !!req.user, - points: req.user ? req.user.points : undefined, + progressTimestamps: req.user ? req.user.progressTimestamps : undefined, verb: resources.randomVerb(), phrase: resources.randomPhrase(), compliment: resources.randomCompliment(), @@ -130,7 +130,7 @@ exports.returnIndividualCourseware = function(req, res, next) { tests: courseware.tests, video: courseware.challengeSeed[0], cc: !!req.user, - points: req.user ? req.user.points : undefined, + progressTimestamps: req.user ? req.user.progressTimestamps : undefined, verb: resources.randomVerb(), phrase: resources.randomPhrase(), compliment: resources.randomCompliment(), @@ -168,7 +168,7 @@ exports.testCourseware = function(req, res) { challengeSeed: coursewareChallengeSeed, challengeEntryPoint: coursewareEntryPoint, cc: req.user ? req.user.coursewaresHash : undefined, - points: req.user ? req.user.points : undefined, + progressTimestamps: req.user ? req.user.progressTimestamps : undefined, verb: resources.randomVerb(), phrase: resources.randomPhrase(), compliment: resources.randomCompliment(), @@ -224,7 +224,7 @@ exports.completedCourseware = function (req, res) { var index = req.user.uncompletedCoursewares.indexOf(coursewareHash); if (index > -1) { - req.user.points++; + req.user.progressTimestamps.push(Date.now() / 1000 | 0); req.user.uncompletedCoursewares.splice(index, 1) } diff --git a/controllers/resources.js b/controllers/resources.js index b8c7be6a4e..f5912f7c80 100644 --- a/controllers/resources.js +++ b/controllers/resources.js @@ -22,33 +22,6 @@ module.exports = { }); }, - 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' @@ -145,6 +118,21 @@ module.exports = { about: function(req, res) { var date1 = new Date("10/15/2014"); var date2 = new Date(); + var progressTimestamps = req.user.progressTimestamps; + var now = Date.now() / 1000 | 0; + if (req.user.pointsNeedMigration) { + var challengesHash = req.user.challengesHash; + for(var key in challengesHash) { + if (challengesHash[key] > 0) { + req.user.progressTimestamps.push(challengesHash[key]); + } + } + req.user.pointsNeedMigration = false; + req.user.save(); + } + if (progressTimestamps[progressTimestamps.length - 1] <= (now - 43200)) { + req.user.progressTimestamps.push(now); + } var timeDiff = Math.abs(date2.getTime() - date1.getTime()); var daysRunning = Math.ceil(timeDiff / (1000 * 3600 * 24)); var announcements = resources.announcements; diff --git a/models/User.js b/models/User.js index 5ad54fd610..09f6a069a3 100644 --- a/models/User.js +++ b/models/User.js @@ -21,7 +21,9 @@ var userSchema = new mongoose.Schema({ type: Number, default: 0 }, + progressTimestamps: { type: Array, default: [] }, challengesCompleted: { type: Array, default: [] }, + pointsNeedMigration: { type: Boolean, default: true }, challengesHash: { 0: { type: Number, diff --git a/views/account/show.jade b/views/account/show.jade index c763656311..b998729f08 100644 --- a/views/account/show.jade +++ b/views/account/show.jade @@ -44,7 +44,7 @@ block content .col-xs-12.col-sm-12.col-md-3.text-center .background-svg.img-center .points-on-top - = "[ " + points + " ]" + = "[ " + progressTimestamps.length + " ]" .row diff --git a/views/partials/navbar.jade b/views/partials/navbar.jade index addf25e823..b4829baadc 100644 --- a/views/partials/navbar.jade +++ b/views/partials/navbar.jade @@ -25,7 +25,7 @@ else li if (user.profile.username) - a(href='/' + user.profile.username) [ #{user.points} ] + a(href='/' + user.profile.username) [ #{user.progressTimestamps.length} ] else a(href='/account') [ #{user.points} ] .hidden-xs