diff options
| author | Jules Laplace <jules@okfoc.us> | 2014-09-03 18:46:04 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2014-09-03 18:46:04 -0400 |
| commit | 95f62d72945acbac295f2342fd51cea9337d7cb7 (patch) | |
| tree | 7d2b2a4bacf774e9f673755c088ac76086a106cd | |
| parent | 24029c27aca6b39af70d6db88e7505ecc90646d5 (diff) | |
lastlog
| -rw-r--r-- | public/assets/javascripts/ui/site/ProjectList.js | 2 | ||||
| -rwxr-xr-x | public/assets/stylesheets/app.css | 15 | ||||
| -rw-r--r-- | public/assets/stylesheets/staff.css | 10 | ||||
| -rw-r--r-- | server/lib/auth/index.js | 4 | ||||
| -rw-r--r-- | server/lib/schemas/User.js | 1 | ||||
| -rw-r--r-- | server/lib/views/staff.js | 52 | ||||
| -rw-r--r-- | views/projects/list-projects.ejs | 2 | ||||
| -rw-r--r-- | views/staff/_header.ejs | 1 | ||||
| -rw-r--r-- | views/staff/_users.ejs | 15 | ||||
| -rw-r--r-- | views/staff/_users_recent.ejs | 20 | ||||
| -rw-r--r-- | views/staff/index.ejs | 11 | ||||
| -rw-r--r-- | views/staff/users/index.ejs | 2 |
12 files changed, 115 insertions, 20 deletions
diff --git a/public/assets/javascripts/ui/site/ProjectList.js b/public/assets/javascripts/ui/site/ProjectList.js index d772b20..959aa43 100644 --- a/public/assets/javascripts/ui/site/ProjectList.js +++ b/public/assets/javascripts/ui/site/ProjectList.js @@ -1,7 +1,7 @@ var ProjectList = View.extend({ - el: "#projectList", + el: ".projectList", events: { "mouseenter td.border": 'spinOn', diff --git a/public/assets/stylesheets/app.css b/public/assets/stylesheets/app.css index 5922ab5..25bcf56 100755 --- a/public/assets/stylesheets/app.css +++ b/public/assets/stylesheets/app.css @@ -161,23 +161,25 @@ h5 { text-align:center; } -.page .profile { +.page.profile { color:white; } -.page table { +.page table.profilepage, +.page table.projectList { width: 100%; border-top: 1px solid; margin: 40px 0 0 0; border-spacing: 0; - clear:nboth; + clear: both; } -.page tr { +.page table.profilepage tr, +.page table.projectList tr { height: 400px; } .page table.showcase { height:70vh; } -.page table td.border { +.page table.projectList td.border { position: relative; border-right: 1px solid; } @@ -191,7 +193,8 @@ iframe.embed { z-index: -1; pointer-events: none; } -.page table td { +.page table.profilepage td, +.page table.projectList td { width: 33.3333%; background-size: cover; background-repeat: no-repeat; diff --git a/public/assets/stylesheets/staff.css b/public/assets/stylesheets/staff.css new file mode 100644 index 0000000..0208878 --- /dev/null +++ b/public/assets/stylesheets/staff.css @@ -0,0 +1,10 @@ +* { + font-weight: 300; +} +th, b { + font-weight: bold; +} +#users td { + text-align: left; + padding: 2px 5px; +}
\ No newline at end of file diff --git a/server/lib/auth/index.js b/server/lib/auth/index.js index 99af9b5..c2275ff 100644 --- a/server/lib/auth/index.js +++ b/server/lib/auth/index.js @@ -111,6 +111,7 @@ var auth = { return info ? res.json(info) : res.redirect("/login"); } + user.last_seen = new Date () user.last_ip = util.ip2num( req.ip ) user.save(function(err, data){ if (err) console.err('error setting ip for user') }) @@ -173,7 +174,8 @@ var auth = { email: email, created_ip: util.ip2num( req.ip ), last_ip: util.ip2num( req.ip ), - created_at: new Date () + created_at: new Date (), + last_seen: new Date (), } new User(data).save(function(err, user){ if (err || ! data) { return res.json({ error: err }) } diff --git a/server/lib/schemas/User.js b/server/lib/schemas/User.js index b64f8fc..180a140 100644 --- a/server/lib/schemas/User.js +++ b/server/lib/schemas/User.js @@ -64,6 +64,7 @@ var UserSchema = new mongoose.Schema({ isStaff: { type: Boolean, default: false }, created_at: { type: Date }, updated_at: { type: Date }, + last_seen: { type: Date }, created_ip: { type: Number }, last_ip: { type: Number }, }); diff --git a/server/lib/views/staff.js b/server/lib/views/staff.js index 5dde58d..9643626 100644 --- a/server/lib/views/staff.js +++ b/server/lib/views/staff.js @@ -14,7 +14,7 @@ var User = require('../schemas/User'), var staff = module.exports = { fields: { - user: "_id username displayName created_at updated_at created_ip last_ip", + user: "_id username displayName created_at updated_at last_seen created_ip last_ip", project: "_id name slug created_at updated_at", }, @@ -28,11 +28,15 @@ var staff = module.exports = { middleware: { ensureUsers: function(req, res, next){ + var limit = Math.max( Number(req.params.limit) || 50, 200 ) var offset = Number(req.params.offset) || 0 var sort switch (req.params.sort) { case 'date': - sort = {'date': -1} + sort = {'created_at': -1} + break + case 'lastseen': + sort = {'last_seen': -1} break default: sort = {'username': 1} @@ -42,13 +46,44 @@ var staff = module.exports = { .select(staff.fields.user) .sort(sort) .skip(offset) - .limit(50) + .limit(limit) .exec(function (err, users) { res.locals.users = users.map(staff.helpers.user) next() }) }, + ensureRecentUsers: function(req, res, next){ + var dreq = { params: { sort: 'last_seen', limit: 20, offset: 0 } } + staff.middleware.ensureUsers(dreq, res, next) + }, + + ensureProjects: function(req, res, next){ + var offset = Number(req.params.offset) || 0 + var sort + switch (req.params.sort) { + case 'date': + sort = {'date': -1} + break + default: + sort = {'slug': 1} + break + } + Project.find({}) + .select(staff.fields.project) + .sort(sort) + .skip(offset) + .limit(50) + .exec(function (err, projects) { + res.locals.projects = projects.map(staff.helpers.projects) + next() + }) + }, + + ensureProjectsUsers: function(req, res, next){ + + }, + ensureProfile: function(req, res, next){ var username = req.params.username if (username) { @@ -69,7 +104,6 @@ var staff = module.exports = { }, ensureUsersCount: function(req, res, next){ - if (! res.locals.profile) { return next() } User.count({}, function(err, count){ res.locals.userCount = count || 0 next() @@ -77,7 +111,6 @@ var staff = module.exports = { }, ensureProjectsCount: function(req, res, next){ - if (! res.locals.profile) { return next() } Project.count({}, function(err, count){ res.locals.projectCount = count || 0 next() @@ -136,6 +169,7 @@ var staff = module.exports = { helpers: { user: function(user){ user = user.toObject() + user.last_seen = moment( user.last_seen || user.updated_at || user.created_at ).fromNow() user.created_ip = util.num2ip( user.created_ip ) user.last_ip = util.num2ip( user.last_ip ) return user @@ -151,7 +185,8 @@ var staff = module.exports = { app.get('/staff', middleware.ensureAuthenticated, middleware.ensureIsStaff, - + + staff.middleware.ensureRecentUsers, staff.middleware.ensureUsersCount, staff.middleware.ensureProjectsCount, @@ -180,6 +215,11 @@ var staff = module.exports = { app.get('/staff/projects', middleware.ensureAuthenticated, middleware.ensureIsStaff, + + staff.middleware.ensureProjectsCount, + + staff.middleware.ensureProjects, + staff.middleware.ensureProjectsUsers, staff.projects.index ); diff --git a/views/projects/list-projects.ejs b/views/projects/list-projects.ejs index c78bf9f..c41ae07 100644 --- a/views/projects/list-projects.ejs +++ b/views/projects/list-projects.ejs @@ -1,6 +1,6 @@ [[ if (projects.length) { ]] - <table id="projectList"> + <table class="projectList"> <tr> [[ projects.forEach(function(project, i) { ]] diff --git a/views/staff/_header.ejs b/views/staff/_header.ejs index 9311948..d726b02 100644 --- a/views/staff/_header.ejs +++ b/views/staff/_header.ejs @@ -4,6 +4,7 @@ <title>vvalls | staff</title> [[ include ../partials/meta ]] <link rel="stylesheet" href="/assets/javascripts/vendor/bower_components/jquery-jsonview/dist/jquery.jsonview.css"></script> + <link rel="stylesheet" href="/assets/stylesheets/staff.css"></script> </head> <body class="loading"> <div class="rapper page"> diff --git a/views/staff/_users.ejs b/views/staff/_users.ejs new file mode 100644 index 0000000..ab8c9b3 --- /dev/null +++ b/views/staff/_users.ejs @@ -0,0 +1,15 @@ +<table id="users"> +[[ users.forEach(function(user){ ]] + <tr> + <td> + <a href="/staff/users/[[- user.username ]]">[[- user.username ]]</a> + </td> + <td> + [[- user.displayName ]] + </td> + <td> + [[- user.last_seen ]] + </td> + </tr> +[[ }) ]] +</table> diff --git a/views/staff/_users_recent.ejs b/views/staff/_users_recent.ejs new file mode 100644 index 0000000..ff3fd55 --- /dev/null +++ b/views/staff/_users_recent.ejs @@ -0,0 +1,20 @@ +<table id="users"> + <tr> + <th colspan="4"> + recent users + </th> + </tr> +[[ users.forEach(function(user){ ]] + <tr> + <td> + <a href="/staff/users/[[- user.username ]]">[[- user.username ]]</a> + </td> + <td> + [[- user.displayName ]] + </td> + <td> + [[- user.last_seen ]] + </td> + </tr> +[[ }) ]] +</table> diff --git a/views/staff/index.ejs b/views/staff/index.ejs index fbe67a7..0cb67da 100644 --- a/views/staff/index.ejs +++ b/views/staff/index.ejs @@ -1,10 +1,11 @@ [[ include _header ]] <h1>Staff Area</h1> - <!-- - - recent users - - rooms list - - projects list - --> + +<b>users:</b> [[- userCount ]] +<b>projects:</b> [[- projectCount ]] + +<br> +[[ include _users_recent ]] [[ include _footer ]]
\ No newline at end of file diff --git a/views/staff/users/index.ejs b/views/staff/users/index.ejs index 62c0ae2..fb072d8 100644 --- a/views/staff/users/index.ejs +++ b/views/staff/users/index.ejs @@ -1,4 +1,6 @@ [[ include ../_header ]] <h1>Users</h1> +[[ include _users ]] + [[ include ../_footer ]] |
