mirror of
https://github.com/overleaf/overleaf.git
synced 2025-03-22 02:04:31 +00:00
Send project owner details to client
This commit is contained in:
parent
9c5f63817e
commit
65a1f03768
3 changed files with 81 additions and 38 deletions
|
@ -14,7 +14,7 @@ _ = require("underscore")
|
|||
Settings = require("settings-sharelatex")
|
||||
SecurityManager = require("../../managers/SecurityManager")
|
||||
|
||||
module.exports =
|
||||
module.exports = ProjectController =
|
||||
|
||||
deleteProject: (req, res) ->
|
||||
project_id = req.params.Project_id
|
||||
|
@ -92,15 +92,23 @@ module.exports =
|
|||
tags: (cb)->
|
||||
TagsHandler.getAllTags user_id, cb
|
||||
projects: (cb)->
|
||||
Project.findAllUsersProjects user_id, 'name lastUpdated publicAccesLevel archived', cb
|
||||
Project.findAllUsersProjects user_id, 'name lastUpdated publicAccesLevel archived owner_ref', cb
|
||||
}, (err, results)->
|
||||
if err?
|
||||
logger.err err:err, "error getting data for project list page"
|
||||
return res.send 500
|
||||
return next(err)
|
||||
logger.log results:results, user_id:user_id, "rendering project list"
|
||||
viewModel = _buildListViewModel results.projects[0], results.projects[1], results.projects[2], results.tags[0], results.tags[1]
|
||||
res.render 'project/list', viewModel
|
||||
timer.done()
|
||||
tags = results.tags[0]
|
||||
projects = ProjectController._buildProjectList results.projects[0], results.projects[1], results.projects[2]
|
||||
ProjectController._injectProjectOwners projects, (error, projects) ->
|
||||
return next(error) if error?
|
||||
res.render 'project/list', {
|
||||
title:'Your Projects'
|
||||
priority_title: true
|
||||
projects: projects
|
||||
tags: tags
|
||||
}
|
||||
timer.done()
|
||||
|
||||
loadEditor: (req, res, next)->
|
||||
timer = new metrics.Timer("load-editor")
|
||||
|
@ -179,6 +187,49 @@ module.exports =
|
|||
languages: Settings.languages
|
||||
timer.done()
|
||||
|
||||
_buildProjectList: (ownedProjects, sharedProjects, readOnlyProjects)->
|
||||
projects = []
|
||||
for project in ownedProjects
|
||||
projects.push ProjectController._buildProjectViewModel(project, "owner")
|
||||
for project in sharedProjects
|
||||
projects.push ProjectController._buildProjectViewModel(project, "readWrite")
|
||||
for project in readOnlyProjects
|
||||
projects.push ProjectController._buildProjectViewModel(project, "readOnly")
|
||||
|
||||
return projects
|
||||
|
||||
_buildProjectViewModel: (project, accessLevel) ->
|
||||
{
|
||||
id: project._id
|
||||
name: project.name
|
||||
lastUpdated: project.lastUpdated
|
||||
publicAccessLevel: project.publicAccesLevel
|
||||
accessLevel: accessLevel
|
||||
archived: !!project.archived
|
||||
owner_ref: project.owner_ref
|
||||
}
|
||||
|
||||
_injectProjectOwners: (projects, callback = (error, projects) ->) ->
|
||||
users = {}
|
||||
for project in projects
|
||||
if project.owner_ref?
|
||||
users[project.owner_ref.toString()] = true
|
||||
|
||||
jobs = []
|
||||
for user_id, _ of users
|
||||
do (user_id) ->
|
||||
jobs.push (callback) ->
|
||||
User.findById user_id, "first_name last_name", (error, user) ->
|
||||
return callback(error) if error?
|
||||
users[user_id] = user
|
||||
callback()
|
||||
|
||||
async.series jobs, (error) ->
|
||||
for project in projects
|
||||
if project.owner_ref?
|
||||
project.owner = users[project.owner_ref.toString()]
|
||||
callback null, projects
|
||||
|
||||
defaultSettingsForAnonymousUser = (user_id)->
|
||||
id : user_id
|
||||
ace:
|
||||
|
@ -195,28 +246,3 @@ defaultSettingsForAnonymousUser = (user_id)->
|
|||
dropbox: false
|
||||
trackChanges: false
|
||||
|
||||
_buildListViewModel = (ownedProjects, sharedProjects, readOnlyProjects, tags, tagsGroupedByProject)->
|
||||
projects = []
|
||||
for project in ownedProjects
|
||||
projects.push _buildProjectViewModel(project, "owner")
|
||||
for project in sharedProjects
|
||||
projects.push _buildProjectViewModel(project, "readWrite")
|
||||
for project in readOnlyProjects
|
||||
projects.push _buildProjectViewModel(project, "readOnly")
|
||||
|
||||
return {
|
||||
title:'Your Projects'
|
||||
priority_title: true
|
||||
projects: JSON.stringify(projects)
|
||||
tags: JSON.stringify(tags)
|
||||
projectTabActive: true
|
||||
}
|
||||
|
||||
_buildProjectViewModel = (project, accessLevel) ->
|
||||
{
|
||||
id: project._id
|
||||
name: project.name
|
||||
lastUpdated: project.lastUpdated
|
||||
publicAccessLevel: project.publicAccesLevel
|
||||
accessLevel: accessLevel
|
||||
}
|
||||
|
|
|
@ -3,8 +3,8 @@ extends ../layout
|
|||
block scripts
|
||||
script(type="text/javascript").
|
||||
window.data = {
|
||||
projects: !{projects},
|
||||
tags: !{tags}
|
||||
projects: !{JSON.stringify(projects)},
|
||||
tags: !{JSON.stringify(tags)}
|
||||
};
|
||||
|
||||
script(src=jsPath+'libs/fineuploader.js')
|
||||
|
|
|
@ -125,9 +125,19 @@ describe "ProjectController", ->
|
|||
|
||||
beforeEach ->
|
||||
@tags = [{name:1, project_ids:["1","2","3"]}, {name:2, project_ids:["a","1"]}, {name:3, project_ids:["a", "b", "c", "d"]}]
|
||||
@projects = [{lastUpdated:1, _id:1}, {lastUpdated:2, _id:2}]
|
||||
@collabertions = [{lastUpdated:5, _id:5}]
|
||||
@readOnly = [{lastUpdated:3, _id:3}]
|
||||
@projects = [{lastUpdated:1, _id:1, owner_ref: "user-1"}, {lastUpdated:2, _id:2, owner_ref: "user-2"}]
|
||||
@collabertions = [{lastUpdated:5, _id:5, owner_ref: "user-1"}]
|
||||
@readOnly = [{lastUpdated:3, _id:3, owner_ref: "user-1"}]
|
||||
|
||||
@users =
|
||||
'user-1':
|
||||
first_name: 'James'
|
||||
'user-2':
|
||||
first_name: 'Henry'
|
||||
@UserModel.findById = (id, fields, callback) =>
|
||||
fields.should.equal 'first_name last_name'
|
||||
callback null, @users[id]
|
||||
|
||||
@SubscriptionLocator.getUsersSubscription.callsArgWith(1, null, {})
|
||||
@TagsHandler.getAllTags.callsArgWith(1, null, @tags, {})
|
||||
@ProjectModel.findAllUsersProjects.callsArgWith(2, null, @projects, @collabertions, @readOnly)
|
||||
|
@ -140,13 +150,20 @@ describe "ProjectController", ->
|
|||
|
||||
it "should send the tags", (done)->
|
||||
@res.render = (pageName, opts)=>
|
||||
JSON.parse(opts.tags).length.should.equal @tags.length
|
||||
opts.tags.length.should.equal @tags.length
|
||||
done()
|
||||
@ProjectController.projectListPage @req, @res
|
||||
|
||||
it "should send the projects", (done)->
|
||||
@res.render = (pageName, opts)=>
|
||||
JSON.parse(opts.projects).length.should.equal (@projects.length + @collabertions.length + @readOnly.length)
|
||||
opts.projects.length.should.equal (@projects.length + @collabertions.length + @readOnly.length)
|
||||
done()
|
||||
@ProjectController.projectListPage @req, @res
|
||||
|
||||
it "should inject the users", (done) ->
|
||||
@res.render = (pageName, opts)=>
|
||||
opts.projects[0].owner.should.equal (@users[@projects[0].owner_ref])
|
||||
opts.projects[1].owner.should.equal (@users[@projects[1].owner_ref])
|
||||
done()
|
||||
@ProjectController.projectListPage @req, @res
|
||||
|
||||
|
|
Loading…
Reference in a new issue