2014-02-12 05:23:40 -05:00
|
|
|
logger = require('logger-sharelatex')
|
|
|
|
async = require("async")
|
2017-04-03 11:18:30 -04:00
|
|
|
metrics = require('metrics-sharelatex')
|
2014-02-12 05:23:40 -05:00
|
|
|
Settings = require('settings-sharelatex')
|
2017-05-10 10:31:17 -04:00
|
|
|
ObjectId = require('mongoose').Types.ObjectId
|
2014-02-12 05:23:40 -05:00
|
|
|
Project = require('../../models/Project').Project
|
|
|
|
Folder = require('../../models/Folder').Folder
|
|
|
|
ProjectEntityHandler = require('./ProjectEntityHandler')
|
2017-05-19 11:21:02 -04:00
|
|
|
ProjectDetailsHandler = require('./ProjectDetailsHandler')
|
2014-02-12 05:23:40 -05:00
|
|
|
User = require('../../models/User').User
|
|
|
|
fs = require('fs')
|
|
|
|
Path = require "path"
|
|
|
|
_ = require "underscore"
|
|
|
|
|
2017-03-17 10:55:41 -04:00
|
|
|
module.exports = ProjectCreationHandler =
|
|
|
|
|
2014-02-12 05:23:40 -05:00
|
|
|
createBlankProject : (owner_id, projectName, callback = (error, project) ->)->
|
|
|
|
metrics.inc("project-creation")
|
2017-05-19 11:21:02 -04:00
|
|
|
ProjectDetailsHandler.validateProjectName projectName, (error) ->
|
|
|
|
return callback(error) if error?
|
|
|
|
logger.log owner_id:owner_id, projectName:projectName, "creating blank project"
|
|
|
|
rootFolder = new Folder {'name':'rootFolder'}
|
|
|
|
project = new Project
|
|
|
|
owner_ref : new ObjectId(owner_id)
|
|
|
|
name : projectName
|
|
|
|
if Settings.currentImageName?
|
|
|
|
project.imageName = Settings.currentImageName
|
|
|
|
project.rootFolder[0] = rootFolder
|
|
|
|
User.findById owner_id, "ace.spellCheckLanguage", (err, user)->
|
|
|
|
project.spellCheckLanguage = user.ace.spellCheckLanguage
|
|
|
|
project.save (err)->
|
|
|
|
return callback(err) if err?
|
|
|
|
callback err, project
|
2014-02-12 05:23:40 -05:00
|
|
|
|
|
|
|
createBasicProject : (owner_id, projectName, callback = (error, project) ->)->
|
|
|
|
self = @
|
|
|
|
@createBlankProject owner_id, projectName, (error, project)->
|
|
|
|
return callback(error) if error?
|
|
|
|
self._buildTemplate "mainbasic.tex", owner_id, projectName, (error, docLines)->
|
|
|
|
return callback(error) if error?
|
2014-10-15 09:11:02 -04:00
|
|
|
ProjectEntityHandler.addDoc project._id, project.rootFolder[0]._id, "main.tex", docLines, (error, doc)->
|
2016-02-29 08:05:17 -05:00
|
|
|
if error?
|
2016-02-29 12:34:38 -05:00
|
|
|
logger.err err:error, "error adding doc when creating basic project"
|
2016-02-29 08:05:17 -05:00
|
|
|
return callback(error)
|
2014-02-12 05:23:40 -05:00
|
|
|
ProjectEntityHandler.setRootDoc project._id, doc._id, (error) ->
|
|
|
|
callback(error, project)
|
|
|
|
|
|
|
|
createExampleProject: (owner_id, projectName, callback = (error, project) ->)->
|
|
|
|
self = @
|
|
|
|
@createBlankProject owner_id, projectName, (error, project)->
|
|
|
|
return callback(error) if error?
|
|
|
|
async.series [
|
|
|
|
(callback) ->
|
|
|
|
self._buildTemplate "main.tex", owner_id, projectName, (error, docLines)->
|
|
|
|
return callback(error) if error?
|
2014-10-15 09:11:02 -04:00
|
|
|
ProjectEntityHandler.addDoc project._id, project.rootFolder[0]._id, "main.tex", docLines, (error, doc)->
|
2014-02-12 05:23:40 -05:00
|
|
|
return callback(error) if error?
|
|
|
|
ProjectEntityHandler.setRootDoc project._id, doc._id, callback
|
|
|
|
(callback) ->
|
|
|
|
self._buildTemplate "references.bib", owner_id, projectName, (error, docLines)->
|
|
|
|
return callback(error) if error?
|
2014-10-15 09:11:02 -04:00
|
|
|
ProjectEntityHandler.addDoc project._id, project.rootFolder[0]._id, "references.bib", docLines, (error, doc)->
|
2014-02-12 05:23:40 -05:00
|
|
|
callback(error)
|
|
|
|
(callback) ->
|
|
|
|
universePath = Path.resolve(__dirname + "/../../../templates/project_files/universe.jpg")
|
|
|
|
ProjectEntityHandler.addFile project._id, project.rootFolder[0]._id, "universe.jpg", universePath, callback
|
|
|
|
], (error) ->
|
|
|
|
callback(error, project)
|
|
|
|
|
|
|
|
_buildTemplate: (template_name, user_id, project_name, callback = (error, output) ->)->
|
|
|
|
User.findById user_id, "first_name last_name", (error, user)->
|
|
|
|
return callback(error) if error?
|
|
|
|
monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]
|
|
|
|
|
|
|
|
templatePath = Path.resolve(__dirname + "/../../../templates/project_files/#{template_name}")
|
|
|
|
fs.readFile templatePath, (error, template) ->
|
|
|
|
return callback(error) if error?
|
|
|
|
data =
|
|
|
|
project_name: project_name
|
|
|
|
user: user
|
|
|
|
year: new Date().getUTCFullYear()
|
|
|
|
month: monthNames[new Date().getUTCMonth()]
|
|
|
|
output = _.template(template.toString(), data)
|
|
|
|
callback null, output.split("\n")
|
|
|
|
|
2017-03-17 10:55:41 -04:00
|
|
|
metrics.timeAsyncMethod(
|
|
|
|
ProjectCreationHandler, 'createBlankProject',
|
|
|
|
'mongo.ProjectCreationHandler',
|
|
|
|
logger
|
|
|
|
)
|
2014-02-12 05:23:40 -05:00
|
|
|
|
|
|
|
|