Add reset progress option to user settings

pull/10824/head
dhcodes 2016-09-20 12:43:34 -05:00
parent 549cfc305f
commit e543693d18
3 changed files with 73 additions and 0 deletions

View File

@ -258,6 +258,15 @@ export class Settings extends React.Component {
>
Delete my Free Code Camp account
</Button>
<Button
block={ true }
bsSize='lg'
bsStyle='danger'
className='btn-link-social'
href='/reset-my-progress'
>
Reset all of my progress and brownie points
</Button>
</Col>
</Row>
</div>

View File

@ -183,6 +183,16 @@ module.exports = function(app) {
sendNonUserToMap,
getAccount
);
router.get(
'/reset-my-progress',
sendNonUserToMap,
showResetProgress
);
api.post(
'/account/resetprogress',
ifNoUser401,
postResetProgress
);
// Ensure these are the last routes!
api.get(
@ -450,6 +460,35 @@ module.exports = function(app) {
});
}
function showResetProgress(req, res) {
return res.render('account/reset-progress', { title: 'Reset My Progress!'
});
}
function postResetProgress(req, res, next) {
User.findById(req.user.id, function(err, user) {
if (err) { return next(err); }
return user.updateAttributes({
progressTimestamps: [{
timestamp: Date.now()
}],
currentStreak: 0,
longestStreak: 0,
currentChallengeId: '',
isBackEndCert: false,
isFullStackCert: false,
isDataVisCert: false,
isFrontEndCert: false,
challengeMap: {},
challegesCompleted: []
}, function(err) {
if (err) { return next(err); }
req.flash('info', { msg: 'You\'ve successfully reset your progress.' });
return res.redirect('/');
});
});
}
function getReset(req, res) {
if (!req.accessToken) {
req.flash('errors', { msg: 'access token invalid' });

View File

@ -0,0 +1,25 @@
extends ../layout
block content
include ../partials/flyer
#modal-dialog.modal.animated.wobble
.modal-dialog
.modal-content
.modal-header
a.close(href='/settings', data-dismiss='modal', aria-hidden='true') ×
h3 You don't really want to reset your progress, do you?
.modal-body
p This will really delete all of your progress and brownie points.
p We won't be able to recover any of it for you later, even if you change your mind.
.modal-footer
a.btn.btn-success.btn-block(href='/settings', data-dismiss='modal', aria-hidden='true')
| Nevermind, I don't want to delete all of my progress and brownie points
.spacer
form(action='/account/resetprogress', method='POST')
input(type='hidden', name='_csrf', value=_csrf)
button.btn.btn-danger.btn-block(type='submit')
| I am 100% sure I want to reset all of my progress and brownie points
script.
document.addEventListener('DOMContentLoaded', function() {
const modal$ = document.getElementById('modal-dialog');
modal$.classList.add('show');
});