diff --git a/common/models/user.json b/common/models/user.json index d0d8bed6e8..647a64836d 100644 --- a/common/models/user.json +++ b/common/models/user.json @@ -157,6 +157,9 @@ "rand": { "type": "number", "index": true + }, + "tshirtVote": { + "type": "number" } }, "validations": [], diff --git a/server/boot/user.js b/server/boot/user.js index 33a80c5c62..881928f9fb 100644 --- a/server/boot/user.js +++ b/server/boot/user.js @@ -76,6 +76,8 @@ module.exports = function(app) { ); router.get('/account/unlink/:provider', getOauthUnlink); router.get('/account', getAccount); + router.get('/vote1', vote1); + router.get('/vote2', vote1); // Ensure this is the last route! router.get('/:username', returnUser); @@ -332,4 +334,36 @@ module.exports = function(app) { }); }); } + + function vote1(req, res) { + if (req.user) { + req.user.tshirtVote = 1; + req.user.save(function (err) { + if (err) { + return next(err); + } + req.flash('success', {msg: 'Thanks for voting!'}); + res.redirect('/map'); + }); + } else { + req.flash('error', {msg: 'You must be signed in to vote.'}); + res.redirect('/map'); + } + } + + function vote2(req, res) { + if (req.user) { + req.user.tshirtVote = 2; + req.user.save(function (err) { + if (err) { + return next(err); + } + req.flash('success', {msg: 'Thanks for voting!'}); + res.redirect('/map'); + }); + } else { + req.flash('error', {msg: 'You must be signed in to vote.'}); + res.redirect('/map'); + } + } }; diff --git a/server/views/challengeMap/show.jade b/server/views/challengeMap/show.jade index 05d591b010..35ec5886c5 100644 --- a/server/views/challengeMap/show.jade +++ b/server/views/challengeMap/show.jade @@ -17,7 +17,32 @@ block content | since we launched   span.text-primary #{daysRunning}   | days ago. - a.btn.btn-lg.signup-btn.btn-block(href="https://www.facebook.com/sharer/sharer.php?u=http://freecodecamp.com" target='_blank') Share our open source community on Facebook and help us grow. + .spacer + if (user && !user.tshirtVote && user.progressTimestamps.length > 5) + h3.text-center Vote for the T-shirt design you like the most. + h4.text-center We'll announce the winning design on Saturday's Summit on Twitch.tv, and it will become our community's first official t-shirt. + .row + .col-xs-6 + a(href="http://i.imgur.com/LlXGa5y.png" data-lightbox="img-enlarge") + img.img-responsive(src='http://i.imgur.com/LlXGa5y.png' alt="t-shirt option 1 women's") + .col-xs-6 + a(href="http://i.imgur.com/aefwnnv.png" data-lightbox="img-enlarge") + img.img-responsive(src='http://i.imgur.com/aefwnnv.png' alt="t-shirt option 2 women's") + .button-spacer + .row + .col-xs-6 + a(href="http://i.imgur.com/aYH0aqf.png" data-lightbox="img-enlarge") + img.img-responsive(src='http://i.imgur.com/aYH0aqf.png' alt="t-shirt option 1 men's") + .col-xs-6 + a(href="http://i.imgur.com/v9KlV4g.png" data-lightbox="img-enlarge") + img.img-responsive(src='http://i.imgur.com/v9KlV4g.png' alt="t-shirt option 2 men's") + .button-spacer + .row + .col-xs-6 + a.button.btn.btn-block.btn-primary(href='/vote1') Vote for Design 1 + .col-xs-6 + a.button.btn.btn-block.btn-primary(href='/vote2') Vote for Design 2 + .spacer .row .col-xs-12.col-sm-8.col-sm-offset-2 h3 800 Hours of Practice: