2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								var  R  =  require ( 'ramda' ) , 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    FieldGuide  =  require ( './../models/FieldGuide' ) , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-31 19:10:19 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    resources  =  require ( './resources' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    debug  =  require ( 'debug' ) ( 'freecc:fieldguides' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								exports . returnIndividualFieldGuide  =  function ( req ,  res ,  next )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  var  dashedName  =  req . params . fieldGuideName ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( req . user )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    var  completed  =  req . user . completedFieldGuides ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-09 11:20:17 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    var  uncompletedFieldGuides  =  resources . allFieldGuideIds ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      . filter ( function  ( elem )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-09 23:40:28 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( completed . indexOf ( elem )  ===  - 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          return  elem ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    req . user . uncompletedFieldGuides  =  uncompletedFieldGuides ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // TODO(berks): handle callback properly
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    req . user . save ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-09 11:20:17 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  FieldGuide . find ( 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-31 19:10:19 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    {  dashedName :  new  RegExp ( dashedName ,  'i' )  } , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    function ( err ,  fieldGuideFromMongo )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( err )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  next ( err ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      if  ( fieldGuideFromMongo . length  <  1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        req . flash ( 'errors' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          msg :  "404: We couldn't find a field guide entry with that name. "  + 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          'Please double check the name.' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        return  res . redirect ( '/field-guide' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      var  fieldGuide  =  R . head ( fieldGuideFromMongo ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 01:36:37 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        fieldGuide . name . toLowerCase ( ) . replace ( /\s/g ,  '-' ) . replace ( /\?/g ,  '' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-31 19:10:19 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      if  ( fieldGuide . dashedName  !==  dashedName )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  res . redirect ( '../field-guide/'  +  fieldGuide . dashedName ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      res . render ( 'field-guide/show' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        title :  fieldGuide . name , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        fieldGuideId :  fieldGuide . _id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        description :  fieldGuide . description . join ( '' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								exports . showAllFieldGuides  =  function ( req ,  res )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-23 18:39:30 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  var  allFieldGuideNamesAndIds  =  resources . allFieldGuideNamesAndIds ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-23 18:39:30 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  var  completedFieldGuides  =  [ ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  if  ( req . user  &&  req . user . completedFieldGuides )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-23 18:39:30 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    completedFieldGuides  =  req . user . completedFieldGuides ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-23 18:39:30 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  res . render ( 'field-guide/all-articles' ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    allFieldGuideNamesAndIds :  allFieldGuideNamesAndIds , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    completedFieldGuides :  completedFieldGuides 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								exports . returnNextFieldGuide  =  function ( req ,  res ,  next )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( ! req . user )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-31 19:10:19 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    return  res . redirect ( '/field-guide/how-do-i-use-this-guide' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  var  displayedFieldGuides  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    FieldGuide . find ( { '_id' :  req . user . uncompletedFieldGuides [ 0 ] } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								  displayedFieldGuides . exec ( function ( err ,  fieldGuide )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( err )  {  return  next ( err ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    fieldGuide  =  fieldGuide . pop ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-04-24 13:49:32 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( typeof  fieldGuide  ===  'undefined' )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-09 11:20:17 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      if  ( req . user . completedFieldGuides . length  >  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        req . flash ( 'success' ,  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								          msg :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-05 00:15:38 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            "You've read all our current Field Guide entries. If you have " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            'ideas for other Field Guide articles, please let us know on ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            "<a href='https://github.com/freecodecamp/freecodecamp/issues/new?&body=Please describe your idea for a Field Guide article and include links if possible.'>GitHub</a>." 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								          ] . join ( '' ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-09 11:20:17 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-31 19:10:19 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      return  res . redirect ( '../field-guide/how-do-i-use-this-guide' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-06 11:57:53 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    return  res . redirect ( '../field-guide/'  +  fieldGuide . dashedName ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								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 12:28:14 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    req . user . progressTimestamps . push ( Date . now ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    req . user . uncompletedFieldGuides . splice ( index ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  req . user . save ( function  ( err )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    if  ( err )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  next ( err ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 11:07:40 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    res . send ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-08 17:18:51 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} ;