2015-03-30 13:48:54 -07:00
var _ = require ( 'lodash' ) ,
debug = require ( 'debug' ) ( 'freecc:cntr:wiki' ) ,
Wiki = require ( './../models/Wiki' ) ,
resources = require ( './resources' ) ,
R = require ( 'ramda' ) ;
exports . returnIndividualWiki = function ( req , res , next ) {
var dashedName = req . params . wikiName ;
var wikiName = dashedName . replace ( /\-/g , ' ' ) ;
Wiki . find ( { 'name' : new RegExp ( wikiName , 'i' ) } , function ( err , wiki ) {
if ( err ) {
next ( err ) ;
}
if ( wiki . length < 1 ) {
req . flash ( 'errors' , {
msg : "404: We couldn't find a wiki entry with that name. Please double check the name."
} ) ;
return res . redirect ( '/wiki' ) ;
}
wiki = wiki . pop ( ) ;
2015-03-30 18:02:50 -07:00
var dashedNameFull = wiki . name . toLowerCase ( ) . replace ( /\s/g , '-' ) . replace ( /\?/g , '' ) ;
2015-03-30 13:48:54 -07:00
if ( dashedNameFull != dashedName ) {
return res . redirect ( '../wiki/' + dashedNameFull ) ;
}
res . render ( 'wiki/show' , {
title : wiki . name ,
2015-04-05 16:44:07 -07:00
wikiId : wiki . _id ,
2015-03-30 13:48:54 -07:00
description : wiki . description . join ( '' )
} ) ;
} ) ;
} ;
exports . showAllWikis = function ( req , res ) {
2015-03-30 15:55:00 -07:00
var data = { } ;
2015-03-30 13:48:54 -07:00
data . wikiList = resources . allWikiNames ( ) ;
2015-04-07 22:33:49 -07:00
data . wikiIds = resources . allWikiIds ( ) ;
data . completedWikis = req . user . completedWikis ;
2015-03-30 13:48:54 -07:00
res . send ( data ) ;
} ;
2015-03-30 18:02:50 -07:00
2015-04-05 16:44:07 -07:00
exports . returnNextWiki = function ( req , res , next ) {
if ( ! req . user ) {
2015-04-07 22:33:49 -07:00
return res . redirect ( '../wiki/how-do-i-use-this-guide?' ) ;
2015-04-05 16:44:07 -07:00
}
2015-03-30 18:02:50 -07:00
2015-04-05 16:44:07 -07:00
var completed = req . user . completedWikis ;
2015-03-30 18:02:50 -07:00
2015-04-05 16:44:07 -07:00
req . user . uncompletedWikis = resources . allWikiIds ( ) . filter ( function ( elem ) {
if ( completed . indexOf ( elem ) === - 1 ) {
return elem ;
}
} ) ;
req . user . save ( ) ;
2015-03-30 18:02:50 -07:00
2015-04-05 16:44:07 -07:00
var uncompletedWikis = req . user . uncompletedWikis ;
2015-03-30 18:02:50 -07:00
2015-04-05 16:44:07 -07:00
var displayedWikis = Wiki . find ( { '_id' : uncompletedWikis [ 0 ] } ) ;
displayedWikis . exec ( function ( err , wiki ) {
if ( err ) {
return next ( err ) ;
}
wiki = wiki . pop ( ) ;
if ( wiki === undefined ) {
2015-04-05 17:35:08 -07:00
req . flash ( 'success' , {
msg : "You've read all our current Wiki entries. You can contribute to our Wiki <a href='https://github.com/FreeCodeCamp/freecodecamp/blob/nonprofit-show/seed_data/wikis.json'>here</a>."
2015-04-05 16:44:07 -07:00
} ) ;
2015-04-07 22:33:49 -07:00
return res . redirect ( '../wiki/how-do-i-use-this-guide?' ) ;
2015-04-05 16:44:07 -07:00
}
var nameString = wiki . name . toLowerCase ( ) . replace ( /\s/g , '-' ) ;
return res . redirect ( '../wiki/' + nameString ) ;
} ) ;
} ;
exports . completedWiki = function ( req , res , next ) {
debug ( 'params in completedWiki' , req . params ) ;
var wikiId = req . body . wikiInfo . wikiId ;
req . user . completedWikis . push ( wikiId ) ;
var index = req . user . uncompletedWikis . indexOf ( wikiId ) ;
if ( index > - 1 ) {
req . user . progressTimestamps . push ( Date . now ( ) || 0 ) ;
req . user . uncompletedWikis . splice ( index , 1 ) ;
}
req . user . save ( function ( err , user ) {
if ( err ) {
return next ( err ) ;
}
if ( user ) {
res . send ( true ) ;
}
} ) ;
2015-03-30 18:02:50 -07:00
} ;