summaryrefslogtreecommitdiff
path: root/server/lib
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2014-09-04 13:50:40 -0400
committerJules Laplace <jules@okfoc.us>2014-09-04 13:50:40 -0400
commitb2164f9f6001dcac952a3d2b301f1425fdb3cbe9 (patch)
treeeb69107c324d46133cee95196eb807ab59c549c1 /server/lib
parent95f62d72945acbac295f2342fd51cea9337d7cb7 (diff)
admin users views
Diffstat (limited to 'server/lib')
-rw-r--r--server/lib/api/projects.js2
-rw-r--r--server/lib/util.js4
-rw-r--r--server/lib/views/staff.js70
3 files changed, 55 insertions, 21 deletions
diff --git a/server/lib/api/projects.js b/server/lib/api/projects.js
index 2a5beff..da41b48 100644
--- a/server/lib/api/projects.js
+++ b/server/lib/api/projects.js
@@ -41,6 +41,7 @@ var projects = {
data.media = JSON.parse(data.media)
data.colors = JSON.parse(data.colors)
data.startPosition = JSON.parse(data.startPosition)
+ data.created_at = new Date ()
upload.put("projects", req.files.thumbnail, {
unacceptable: function(err){
@@ -72,6 +73,7 @@ var projects = {
data.name = util.sanitize(data.name)
data.slug = util.slugify(data.name)
data.description = util.sanitize(data.description)
+ data.updated_at = new Date ()
if (req.files.thumbnail) {
upload.put("projects", req.files.thumbnail, {
diff --git a/server/lib/util.js b/server/lib/util.js
index 6d43750..791d3e2 100644
--- a/server/lib/util.js
+++ b/server/lib/util.js
@@ -8,7 +8,6 @@ var nonAlphanumerics = new RegExp('[^-_a-zA-Z0-9]', 'g')
var consecutiveDashes = new RegExp("-+", 'g')
var entities = new RegExp("[<>&]", 'g')
-
var util = {}
util.trim = function (s){ return (s || "").replace(whitespaceHead,"").replace(whitespaceTail,"") }
@@ -19,6 +18,9 @@ util.slugify = function (s){
util.sanitize = function (s){
return (s || "").replace(entities, "")
}
+util.escape = function (s){
+ return (s || "").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")
+}
util.capitalize = function (s) {
return (s || "").split(" ").map(util.capitalizeWord).join(" ");
}
diff --git a/server/lib/views/staff.js b/server/lib/views/staff.js
index 9643626..cf43081 100644
--- a/server/lib/views/staff.js
+++ b/server/lib/views/staff.js
@@ -15,7 +15,7 @@ var staff = module.exports = {
fields: {
user: "_id username displayName created_at updated_at last_seen created_ip last_ip",
- project: "_id name slug created_at updated_at",
+ project: "_id name slug user_id privacy created_at updated_at",
},
defaults: {
@@ -35,9 +35,10 @@ var staff = module.exports = {
case 'date':
sort = {'created_at': -1}
break
- case 'lastseen':
+ case 'last_seen':
sort = {'last_seen': -1}
break
+ case 'username':
default:
sort = {'username': 1}
break
@@ -63,7 +64,7 @@ var staff = module.exports = {
var sort
switch (req.params.sort) {
case 'date':
- sort = {'date': -1}
+ sort = {'created_at': -1}
break
default:
sort = {'slug': 1}
@@ -75,13 +76,34 @@ var staff = module.exports = {
.skip(offset)
.limit(50)
.exec(function (err, projects) {
- res.locals.projects = projects.map(staff.helpers.projects)
+ res.locals.projects = projects.map(staff.helpers.project)
next()
})
},
+
+ ensureRecentProjects: function(req, res, next){
+ var dreq = { params: { sort: 'created_at', limit: 20, offset: 0 } }
+ staff.middleware.ensureProjects(dreq, res, next)
+ },
ensureProjectsUsers: function(req, res, next){
-
+ if (! res.locals.projects || ! res.locals.projects.length) { return next() }
+ var dedupe = {}, user_ids
+ res.locals.projects.forEach(function(project){
+ dedupe[ project.user_id ] = dedupe[ project.user_id ] || []
+ dedupe[ project.user_id ].push(project)
+ })
+ user_ids = _.keys(dedupe)
+ User.find({ _id: user_ids })
+ .select(staff.fields.user)
+ .exec(function (err, users) {
+ users.forEach(function(user){
+ dedupe[user._id].forEach(function(project){
+ project.user = user
+ })
+ })
+ next()
+ })
},
ensureProfile: function(req, res, next){
@@ -116,7 +138,7 @@ var staff = module.exports = {
next()
})
},
-
+
ensureProfileProjectCount: function(req, res, next){
if (! res.locals.profile) { return next() }
Project.count({ user_id: res.locals.profile._id}, function(err, count){
@@ -177,6 +199,8 @@ var staff = module.exports = {
project: function(project){
project = project.toObject()
+ project.date = moment( project.updated_at || project.created_at ).format("M/DD/YYYY H:MM")
+ project.user = {}
return project
}
},
@@ -234,23 +258,19 @@ var staff = module.exports = {
staff.projects.show
);
-// app.post('/staff/bless',
-// middleware.ensureAuthenticated,
-// views.staff.bless
-// );
+
+ app.put('/staff/users/:username/bless',
+ middleware.ensureAuthenticated,
+ middleware.ensureIsStaff,
+
+ staff.users.bless
+ );
},
index: function(req, res){
res.render('staff/index')
},
-
- bless: function(req, res){
- req.user.isStaff = true
- req.user.save(function(){
- res.redirect("/staff")
- })
- },
-
+
// /staff/users/
// /staff/users/:username
users: {
@@ -259,12 +279,20 @@ var staff = module.exports = {
},
show: function(req, res){
if (res.locals.profile) {
- res.render('staff/users/show')
+ res.render('staff/users/show', {
+ profileJSON: util.escape( JSON.stringify( res.locals.profile ) )
+ })
}
else {
res.render('staff/users/show_404')
}
},
+ bless: function(req, res){
+ res.locals.profile.isStaff = req.body.isStaff
+ res.locals.profile.save(function(){
+ res.redirect("/staff")
+ })
+ },
},
// /staff/projects/
@@ -275,7 +303,9 @@ var staff = module.exports = {
},
show: function(req, res){
if (res.locals.project) {
- res.render('staff/projects/show')
+ res.render('staff/projects/show', {
+ projectJSON: util.escape( JSON.stringify( res.locals.profile ) )
+ })
}
else {
res.render('staff/projects/show_404')