diff options
Diffstat (limited to 'server')
| -rw-r--r-- | server/index.js | 1 | ||||
| -rw-r--r-- | server/lib/views/index.js | 123 |
2 files changed, 81 insertions, 43 deletions
diff --git a/server/index.js b/server/index.js index f6636dd..8f66418 100644 --- a/server/index.js +++ b/server/index.js @@ -133,6 +133,7 @@ site.route = function () { app.delete('/api/layout/destroy', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.layouts.destroy) app.get('/api/project', middleware.ensureAuthenticated, api.projects.index) + app.get('/api/project/paginate', views.projectsPaginate) app.get('/api/project/:slug', api.projects.show) app.get('/api/rooms/:slug', api.rooms.show) app.post('/api/project/new', middleware.ensureAuthenticated, api.projects.create) diff --git a/server/lib/views/index.js b/server/lib/views/index.js index 5b1a72e..eacff1f 100644 --- a/server/lib/views/index.js +++ b/server/lib/views/index.js @@ -78,27 +78,16 @@ var views = module.exports = { }, home: function (req, res) { - if (req.user) { - Project.find({ featured: true }) - .sort('-created_at') - .limit(6) - .exec(function(err, projects){ - projects = projects.map(function(project){ - project = project.toObject() - project.date = moment(project.updated_at).format("M/DD/YYYY") - if (! project.colors || project.colors.wall && project.colors.wall[0] == project.colors.wall[1] && project.colors.wall[1] == project.colors.wall[2] && project.colors.wall[2] > 238) { - project.color = [238,238,238] - } else { - project.color = project.colors.wall - } - return project - }) - res.render('home', { projects: projects || [] }) - }) - } - else { - res.send("<html></html>") + // while in development, blank homepage if not logged in + if (! req.user) { + res.send("<html></html>") + return } + views_middleware.fetchProjects({ featured: true }, null, null, function(err, projects){ + res.render('home', { + projects: projects || [] + }) + }) }, docs: function (req, res){ @@ -131,45 +120,93 @@ var views = module.exports = { profile: function (req, res) { var username = req.params.username || (req.user && req.user.username) + var user, isOwnProfile = false if (username) { - User.findOne({ username: username }, function (err, user) { - user ? next(user) : done(err, {}, []) + User.findOne({ username: username }, function (err, profileUser) { + if (profileUser) { + user = profileUser + isOwnProfile = (String(user._id) == (req.user && String(req.user._id))) + next() + } + else { + done(err, []) + } }) } else { done() } - function next(user){ + function next(){ var criteria = { user_id: user._id } - if ( ! (req.user && req.user._id && req.user._id == user._id) ) { + if ( ! isOwnProfile ) { criteria.privacy = false } - Project.find(criteria) - .sort('-created_at') - .exec(function(err, projects){ - projects = projects.map(function(project){ - project = project.toObject() - project.date = moment(project.updated_at).format("M/DD/YYYY") - if (! project.colors || project.colors.wall && project.colors.wall[0] == project.colors.wall[1] && project.colors.wall[1] == project.colors.wall[2] && project.colors.wall[2] > 238) { - project.color = [238,238,238] - } else { - project.color = project.colors.wall - } - return project - }) - done(err, user, projects) - }) + views_middleware.fetchProjects(criteria, null, null, done) } - function done(err, user, projects){ + function done(err, projects){ if (! user) { return res.redirect('/') } res.render('profile', { - isOwnProfile: String(user._id) == (req.user && String(req.user._id)), + isOwnProfile: isOwnProfile, profile: user, projects: projects || [], }) } - } + }, + + projectsPaginate: function(req, res) { + var criteria = {} + var offset = Number(req.query.offset || 0) + var user_id, isOwnProfile + + if (req.query.home) { + criteria.featured = true + criteria.privacy = false + } + else if (req.query.user_id) { + user_id = req.query.user_id + isOwnProfile = (String(user_id) == (req.user && String(req.user._id))) + + criteria.user_id = user_id + if ( ! isOwnProfile ) { + criteria.privacy = false + } + } + else { + res.end("") + return + } + + views_middleware.fetchProjects(criteria, null, offset, function(err, projects){ + res.render('projects/list-projects', { + projects: projects || [] + }) + }) + }, + +} -}
\ No newline at end of file +var views_middleware = { + fetchProjects: function (criteria, limit, offset, next) { + limit = limit || 7 + offset = offset || 0 + Project.find(criteria) + .sort('-created_at') + .skip(offset) + .limit(limit) + .exec(function(err, projects){ + projects = projects.map(function(project){ + project = project.toObject() + project.date = moment(project.updated_at).format("M/D/YYYY") + if (! project.colors || project.colors.wall && project.colors.wall[0] == project.colors.wall[1] && project.colors.wall[1] == project.colors.wall[2] && project.colors.wall[2] > 238) { + project.color = [238,238,238] + } else { + project.color = project.colors.wall + } + return project + }) + next(err, projects) + }) + } +} |
