summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2014-09-03 18:46:04 -0400
committerJules Laplace <jules@okfoc.us>2014-09-03 18:46:04 -0400
commit95f62d72945acbac295f2342fd51cea9337d7cb7 (patch)
tree7d2b2a4bacf774e9f673755c088ac76086a106cd
parent24029c27aca6b39af70d6db88e7505ecc90646d5 (diff)
lastlog
-rw-r--r--public/assets/javascripts/ui/site/ProjectList.js2
-rwxr-xr-xpublic/assets/stylesheets/app.css15
-rw-r--r--public/assets/stylesheets/staff.css10
-rw-r--r--server/lib/auth/index.js4
-rw-r--r--server/lib/schemas/User.js1
-rw-r--r--server/lib/views/staff.js52
-rw-r--r--views/projects/list-projects.ejs2
-rw-r--r--views/staff/_header.ejs1
-rw-r--r--views/staff/_users.ejs15
-rw-r--r--views/staff/_users_recent.ejs20
-rw-r--r--views/staff/index.ejs11
-rw-r--r--views/staff/users/index.ejs2
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 ]]