2015-04-09 00:18:51 +00:00
var _ = require ( 'lodash' ) ,
debug = require ( 'debug' ) ( 'freecc:cntr:fieldGuide' ) ,
FieldGuide = require ( './../models/FieldGuide' ) ,
resources = require ( './resources' ) ,
R = require ( 'ramda' ) ;
exports . returnIndividualFieldGuide = function ( req , res , next ) {
var dashedName = req . params . fieldGuideName ;
var fieldGuideName = dashedName . replace ( /\-/g , ' ' ) ;
2015-05-09 18:20:17 +00:00
var completed = req . user . completedFieldGuides ;
var uncompletedFieldGuides = resources . allFieldGuideIds ( ) . filter ( function ( elem ) {
if ( completed . indexOf ( elem ) === - 1 ) {
return elem ;
}
} ) ;
req . user . uncompletedFieldGuides = uncompletedFieldGuides ;
req . user . save ( ) ;
2015-04-24 17:49:32 +00:00
FieldGuide . find ( { 'name' : new RegExp ( fieldGuideName , 'i' ) } , function ( err , fieldGuideFromMongo ) {
2015-04-09 00:18:51 +00:00
if ( err ) {
next ( err ) ;
}
2015-04-24 17:49:32 +00:00
if ( fieldGuideFromMongo . length < 1 ) {
2015-04-09 00:18:51 +00:00
req . flash ( 'errors' , {
msg : "404: We couldn't find a field guide entry with that name. Please double check the name."
} ) ;
return res . redirect ( '/field-guide' ) ;
}
2015-04-25 16:28:14 +00:00
var fieldGuide = R . head ( fieldGuideFromMongo ) ;
2015-04-09 00:18:51 +00:00
var dashedNameFull = fieldGuide . name . toLowerCase ( ) . replace ( /\s/g , '-' ) . replace ( /\?/g , '' ) ;
2015-04-24 17:49:32 +00:00
if ( dashedNameFull !== dashedName ) {
2015-04-09 00:18:51 +00:00
return res . redirect ( '../field-guide/' + dashedNameFull ) ;
}
res . render ( 'field-guide/show' , {
title : fieldGuide . name ,
fieldGuideId : fieldGuide . _id ,
description : fieldGuide . description . join ( '' )
} ) ;
} ) ;
} ;
exports . showAllFieldGuides = function ( req , res ) {
var data = { } ;
data . fieldGuideList = resources . allFieldGuideNames ( ) ;
data . fieldGuideIds = resources . allFieldGuideIds ( ) ;
2015-04-22 22:50:11 +00:00
if ( req . user && req . user . completedFieldGuides ) {
data . completedFieldGuides = req . user . completedFieldGuides ;
} else {
2015-04-24 17:50:48 +00:00
data . completedFieldGuides = [ ] ;
2015-04-22 22:50:11 +00:00
}
2015-04-09 00:18:51 +00:00
res . send ( data ) ;
} ;
exports . returnNextFieldGuide = function ( req , res , next ) {
if ( ! req . user ) {
return res . redirect ( '../field-guide/how-do-i-use-this-guide?' ) ;
}
2015-05-09 18:20:17 +00:00
var displayedFieldGuides = FieldGuide . find ( { '_id' : req . user . uncompletedFieldGuides [ 0 ] } ) ;
2015-04-09 00:18:51 +00:00
displayedFieldGuides . exec ( function ( err , fieldGuide ) {
if ( err ) {
return next ( err ) ;
}
fieldGuide = fieldGuide . pop ( ) ;
2015-04-24 17:49:32 +00:00
if ( typeof fieldGuide === 'undefined' ) {
2015-05-09 18:20:17 +00:00
if ( req . user . completedFieldGuides . length > 0 ) {
req . flash ( 'success' , {
msg : "You've read all our current Field Guide entries. You can contribute to our Field Guide <a href='https://github.com/FreeCodeCamp/freecodecamp/blob/master/seed_data/field-guides.json'>here</a>."
} ) ;
}
2015-04-09 00:18:51 +00:00
return res . redirect ( '../field-guide/how-do-i-use-this-guide?' ) ;
}
var nameString = fieldGuide . name . toLowerCase ( ) . replace ( /\s/g , '-' ) ;
return res . redirect ( '../field-guide/' + nameString ) ;
} ) ;
} ;
exports . completedFieldGuide = function ( req , res , next ) {
var fieldGuideId = req . body . fieldGuideInfo . fieldGuideId ;
req . user . completedFieldGuides . push ( fieldGuideId ) ;
var index = req . user . uncompletedFieldGuides . indexOf ( fieldGuideId ) ;
if ( index > - 1 ) {
2015-04-25 16:28:14 +00:00
req . user . progressTimestamps . push ( Date . now ( ) ) ;
2015-04-09 00:18:51 +00:00
req . user . uncompletedFieldGuides . splice ( index , 1 ) ;
}
req . user . save ( function ( err , user ) {
if ( err ) {
return next ( err ) ;
}
if ( user ) {
res . send ( true ) ;
}
} ) ;
} ;