diff options
| author | Jules Laplace <jules@okfoc.us> | 2014-09-04 17:52:48 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2014-09-04 17:52:48 -0400 |
| commit | 415dad29407362a76fde6d07d8b100285a84518d (patch) | |
| tree | f858d4f7201dc6031d6cd54a7da25808b44a48ec | |
| parent | 8bf2ead240f5daeac98b3a92c81f37b77fd4ddbd (diff) | |
media api
| -rw-r--r-- | public/assets/img/profile.png | bin | 0 -> 9320 bytes | |||
| -rw-r--r-- | public/assets/javascripts/ui/site/StaffView.js | 33 | ||||
| -rw-r--r-- | public/assets/stylesheets/staff.css | 4 | ||||
| -rw-r--r-- | server/lib/views/staff.js | 141 | ||||
| -rw-r--r-- | views/staff/_media.ejs | 1 | ||||
| -rw-r--r-- | views/staff/_stats.ejs | 4 | ||||
| -rw-r--r-- | views/staff/_users.ejs | 2 | ||||
| -rw-r--r-- | views/staff/_users_recent.ejs | 6 | ||||
| -rw-r--r-- | views/staff/index.ejs | 1 | ||||
| -rw-r--r-- | views/staff/media/index.ejs | 16 | ||||
| -rw-r--r-- | views/staff/media/show.ejs | 14 | ||||
| -rw-r--r-- | views/staff/media/show_404.ejs | 14 | ||||
| -rw-r--r-- | views/staff/projects/index.ejs | 2 | ||||
| -rw-r--r-- | views/staff/projects/show.ejs | 1 | ||||
| -rw-r--r-- | views/staff/projects/show_404.ejs | 2 | ||||
| -rw-r--r-- | views/staff/users/index.ejs | 2 | ||||
| -rw-r--r-- | views/staff/users/show.ejs | 26 | ||||
| -rw-r--r-- | views/staff/users/show_404.ejs | 1 |
18 files changed, 230 insertions, 40 deletions
diff --git a/public/assets/img/profile.png b/public/assets/img/profile.png Binary files differnew file mode 100644 index 0000000..bde68e0 --- /dev/null +++ b/public/assets/img/profile.png diff --git a/public/assets/javascripts/ui/site/StaffView.js b/public/assets/javascripts/ui/site/StaffView.js index 8f677cb..fd173e5 100644 --- a/public/assets/javascripts/ui/site/StaffView.js +++ b/public/assets/javascripts/ui/site/StaffView.js @@ -7,7 +7,7 @@ var StaffView = View.extend({ initialize: function() { this.$toggleStaff = $("#toggle-staff") - if (this.$toggleStaff.data().isstaff) { + if (this.$toggleStaff.length && this.$toggleStaff.data().isstaff) { this.$toggleStaff.html("Is Staff") } }, @@ -22,20 +22,23 @@ var StaffView = View.extend({ toggleStaff: function(){ var state = ! this.$toggleStaff.data().isstaff - $.ajax({ - type: "put", - dataType: "json", - url: window.location.href + "/bless", - data: { - state: state, - _csrf: $("#_csrf").val(), - }, - success: function(data){ - this.$toggleStaff.data("isstaff", data.state) - this.$toggleStaff.html(data.state ? "Is Staff" : "Make Staff") - $("#is-staff").html(data.state ? "yes" : "no") - }.bind(this) - }) + var verb = state ? "promote this user to staff?" : "remove this user from staff?" + ConfirmModal.confirm("Are you sure you want to " + verb, function(){ + $.ajax({ + type: "put", + dataType: "json", + url: window.location.href + "/bless", + data: { + state: state, + _csrf: $("#_csrf").val(), + }, + success: function(data){ + this.$toggleStaff.data("isstaff", data.state) + this.$toggleStaff.html(data.state ? "Is Staff" : "Make Staff") + $("#is-staff").html(data.state ? "yes" : "no") + }.bind(this) + }) + }.bind(this)) }, }) diff --git a/public/assets/stylesheets/staff.css b/public/assets/stylesheets/staff.css index 9b9226f..02510a3 100644 --- a/public/assets/stylesheets/staff.css +++ b/public/assets/stylesheets/staff.css @@ -78,6 +78,10 @@ h2 { display: inline-block; background-size: cover; } +#actions button { + float: none; + width: auto; +} iframe.embed { position: static; width: 100%; diff --git a/server/lib/views/staff.js b/server/lib/views/staff.js index b78fd5a..b9fe78a 100644 --- a/server/lib/views/staff.js +++ b/server/lib/views/staff.js @@ -28,10 +28,10 @@ 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 limit = Math.max( Number(req.query.limit) || 50, 200 ) + var offset = Number(req.query.offset) || 0 var sort - switch (req.params.sort) { + switch (req.query.sort) { case 'date': sort = {'created_at': -1} break @@ -60,9 +60,10 @@ var staff = module.exports = { }, ensureProjects: function(req, res, next){ - var offset = Number(req.params.offset) || 0 + var limit = Math.max( Number(req.query.limit) || 50, 200 ) + var offset = Number(req.query.offset) || 0 var sort - switch (req.params.sort) { + switch (req.query.sort) { case 'date': sort = {'created_at': -1} break @@ -74,13 +75,34 @@ var staff = module.exports = { .select(staff.fields.project) .sort(sort) .skip(offset) - .limit(50) + .limit(limit) .exec(function (err, projects) { res.locals.projects = projects.map(staff.helpers.project) next() }) }, + ensureMedia: function(req, res, next){ + var limit = Math.max( Number(req.query.limit) || 50, 200 ) + var offset = Number(req.query.offset) || 0 + var sort + switch (req.query.sort) { + default: + case 'date': + sort = {'created_at': -1} + break + } + Media.find({}) + // .select(staff.fields.media) + .sort(sort) + .skip(offset) + .limit(limit) + .exec(function (err, media) { + res.locals.media = media.map(staff.helpers.media) + next() + }) + }, + ensureRecentProjects: function(req, res, next){ var dreq = { params: { sort: 'created_at', limit: 20, offset: 0 } } staff.middleware.ensureProjects(dreq, res, next) @@ -88,18 +110,32 @@ var staff = module.exports = { ensureProjectsUsers: function(req, res, next){ if (! res.locals.projects || ! res.locals.projects.length) { return next() } + staff.middleware.ensureObjectsUsers(res.locals.projects, next) + }, + + ensureMediaUsers: function(req, res, next){ + if (! res.locals.media || ! res.locals.media.length) { return next() } + staff.middleware.ensureObjectsUsers(res.locals.media, next) + }, + + ensureMediaUser: function(req, res, next){ + if (! res.locals.media) { return next() } + staff.middleware.ensureObjectsUsers([ res.locals.media ], next) + }, + + ensureObjectsUsers: function(objects, 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) + objects.forEach(function(obj){ + dedupe[ obj.user_id ] = dedupe[ obj.user_id ] || [] + dedupe[ obj.user_id ].push(obj) }) 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 + dedupe[user._id].forEach(function(obj){ + obj.user = user }) }) next() @@ -125,6 +161,25 @@ var staff = module.exports = { } }, + ensureSingleMedia: function(req, res, next){ + var id = req.params.id + if (id) { + Media.findOne({ _id: id }, function (err, id) { + if (media) { + res.locals.media = req.method == "GET" ? staff.helpers.media(media) : media + } + else { + res.locals.media = null + } + next() + }) + } + else { + res.locals.media = null + next() + } + }, + ensureUsersCount: function(req, res, next){ User.count({}, function(err, count){ res.locals.userCount = count || 0 @@ -138,6 +193,13 @@ var staff = module.exports = { next() }) }, + + ensureMediaCount: function(req, res, next){ + Media.count({}, function(err, count){ + res.locals.mediaCount = count || 0 + next() + }) + }, ensureProfileProjectCount: function(req, res, next){ if (! res.locals.profile) { return next() } @@ -202,7 +264,14 @@ var staff = module.exports = { project.date = moment( project.updated_at || project.created_at ).format("M/DD/YYYY H:MM") project.user = {} return project - } + }, + + media: function(media){ + media = media.toObject() + media.date = moment( media.updated_at || media.created_at ).format("M/DD/YYYY H:MM") + media.user = {} + return media + } }, route: function(app){ @@ -213,9 +282,14 @@ var staff = module.exports = { staff.middleware.ensureRecentUsers, staff.middleware.ensureUsersCount, staff.middleware.ensureProjectsCount, + staff.middleware.ensureMediaCount, staff.index ); + + // + // users + app.get('/staff/users', middleware.ensureAuthenticated, middleware.ensureIsStaff, @@ -244,6 +318,10 @@ var staff = module.exports = { staff.users.bless ); + + // + // projects + app.get('/staff/projects', middleware.ensureAuthenticated, middleware.ensureIsStaff, @@ -266,6 +344,28 @@ var staff = module.exports = { staff.projects.show ); + + // + // media + + app.get('/staff/media', + middleware.ensureAuthenticated, + middleware.ensureIsStaff, + + staff.middleware.ensureMedia, + staff.middleware.ensureMediaUsers, + + staff.media.index + ); + app.get('/staff/media/:id', + middleware.ensureAuthenticated, + middleware.ensureIsStaff, + + staff.middleware.ensureSingleMedia, + staff.middleware.ensureMediaUser, + + staff.media.show + ); }, @@ -316,5 +416,22 @@ var staff = module.exports = { } }, }, + + media: { + index: function(req, res){ + res.render('staff/media/index') + }, + show: function(req, res){ + if (res.locals.project) { + res.render('staff/media/show', { + mediaJSON: util.escape( JSON.stringify( res.locals.media ) ), + mediaUserJSON: util.escape( JSON.stringify( res.locals.mediaUser ) ), + }) + } + else { + res.render('staff/media/show_404') + } + }, + } }
\ No newline at end of file diff --git a/views/staff/_media.ejs b/views/staff/_media.ejs new file mode 100644 index 0000000..27949aa --- /dev/null +++ b/views/staff/_media.ejs @@ -0,0 +1 @@ +media
\ No newline at end of file diff --git a/views/staff/_stats.ejs b/views/staff/_stats.ejs index 6439ab9..d1ad96f 100644 --- a/views/staff/_stats.ejs +++ b/views/staff/_stats.ejs @@ -10,4 +10,8 @@ <td><a href="/staff/projects">projects</a></td> <td>[[- projectCount ]]</td> </tr> + <tr> + <td><a href="/staff/media">media</a></td> + <td>[[- mediaCount ]]</td> + </tr> </table> diff --git a/views/staff/_users.ejs b/views/staff/_users.ejs index 344ee0c..d46058f 100644 --- a/views/staff/_users.ejs +++ b/views/staff/_users.ejs @@ -11,7 +11,7 @@ [[- user.displayName ]] </td> <td class="editLinks"> - <a href="/staff/users/[[- user.username ]]">[view profile]</a> + <a href="/profile/[[- user.username ]]">[view profile]</a> </td> <td> [[- user.last_seen ]] diff --git a/views/staff/_users_recent.ejs b/views/staff/_users_recent.ejs index e55fe28..b452c08 100644 --- a/views/staff/_users_recent.ejs +++ b/views/staff/_users_recent.ejs @@ -7,15 +7,13 @@ [[ users.forEach(function(user){ ]] <tr> <td> - [[ if (user.photo) { ]] - <a href="/staff/users/[[- user.username ]]"><div style="background-image:url([[- user.photo ]])" class="avatar"></div></a> - [[ } ]] + <a href="/staff/users/[[- user.username ]]"><div style="background-image:url([[- user.photo || '/assets/img/profile.png' ]])" class="avatar"></div></a> </td> <td> <a href="/staff/users/[[- user.username ]]">[[- user.username ]]</a> </td> <td class="editLinks"> - <a href="/staff/users/[[- user.username ]]">[view profile]</a> + <a href="/profile/[[- user.username ]]">[view profile]</a> </td> <td> [[- user.displayName ]] diff --git a/views/staff/index.ejs b/views/staff/index.ejs index 842e086..f721339 100644 --- a/views/staff/index.ejs +++ b/views/staff/index.ejs @@ -5,6 +5,7 @@ <nav> <a href="/staff/users">users</a> <a href="/staff/projects">projects</a> + <a href="/staff/media">media</a> </nav> <hr> diff --git a/views/staff/media/index.ejs b/views/staff/media/index.ejs new file mode 100644 index 0000000..76aaafb --- /dev/null +++ b/views/staff/media/index.ejs @@ -0,0 +1,16 @@ +[[ include ../_header ]] + + <h1>Media</h1> + + <nav> + <a href="/staff">home</a> + <a href="/staff/users">users</a> + <a href="/staff/projects">projects</a> + <a href="/staff/media">media</a> + </nav> + + <hr> + +[[ include ../_media ]] + +[[ include ../_footer ]] diff --git a/views/staff/media/show.ejs b/views/staff/media/show.ejs new file mode 100644 index 0000000..43afe14 --- /dev/null +++ b/views/staff/media/show.ejs @@ -0,0 +1,14 @@ +[[ include ../_header ]] + + <h1>Media [[- media.type ]]</h1> + + <nav> + <a href="/staff">home</a> + <a href="/staff/users">users</a> + <a href="/staff/projects">projects</a> + <a href="/staff/media">media</a> + </nav> + + <hr> + +[[ include ../_footer ]] diff --git a/views/staff/media/show_404.ejs b/views/staff/media/show_404.ejs new file mode 100644 index 0000000..f07cef2 --- /dev/null +++ b/views/staff/media/show_404.ejs @@ -0,0 +1,14 @@ +[[ include ../_header ]] + + <h1>Media not found</h1> + + <nav> + <a href="/staff">home</a> + <a href="/staff/users">users</a> + <a href="/staff/projects">projects</a> + <a href="/staff/media">media</a> + </nav> + + <hr> + +[[ include ../_footer ]] diff --git a/views/staff/projects/index.ejs b/views/staff/projects/index.ejs index a5a9308..a6fad6b 100644 --- a/views/staff/projects/index.ejs +++ b/views/staff/projects/index.ejs @@ -1,10 +1,12 @@ [[ include ../_header ]] + <h1>Projects</h1> <nav> <a href="/staff">home</a> <a href="/staff/users">users</a> <a href="/staff/projects">projects</a> + <a href="/staff/media">media</a> </nav> <hr> diff --git a/views/staff/projects/show.ejs b/views/staff/projects/show.ejs index 23e96b2..0fdb00b 100644 --- a/views/staff/projects/show.ejs +++ b/views/staff/projects/show.ejs @@ -6,6 +6,7 @@ <a href="/staff">home</a> <a href="/staff/users">users</a> <a href="/staff/projects">projects</a> + <a href="/staff/media">media</a> </nav> <hr> diff --git a/views/staff/projects/show_404.ejs b/views/staff/projects/show_404.ejs index 193333f..70320c0 100644 --- a/views/staff/projects/show_404.ejs +++ b/views/staff/projects/show_404.ejs @@ -1,10 +1,12 @@ [[ include ../_header ]] + <h1>Project not found</h1> <nav> <a href="/staff">home</a> <a href="/staff/users">users</a> <a href="/staff/projects">projects</a> + <a href="/staff/media">media</a> </nav> <hr> diff --git a/views/staff/users/index.ejs b/views/staff/users/index.ejs index ad92fc3..8c56565 100644 --- a/views/staff/users/index.ejs +++ b/views/staff/users/index.ejs @@ -1,10 +1,12 @@ [[ include ../_header ]] + <h1>Users</h1> <nav> <a href="/staff">home</a> <a href="/staff/users">users</a> <a href="/staff/projects">projects</a> + <a href="/staff/media">media</a> </nav> <hr> diff --git a/views/staff/users/show.ejs b/views/staff/users/show.ejs index 2315043..afcd761 100644 --- a/views/staff/users/show.ejs +++ b/views/staff/users/show.ejs @@ -5,6 +5,7 @@ <a href="/staff">home</a> <a href="/staff/users">users</a> <a href="/staff/projects">projects</a> + <a href="/staff/media">media</a> </nav> <hr> @@ -21,7 +22,7 @@ [[- profile.displayName ]] </td> <td class="editLinks"> - <a href="/staff/users/[[- profile.username ]]">[view profile]</a> + <a href="/profile/[[- profile.username ]]">[view profile]</a> </td> </tr> </table> @@ -45,6 +46,22 @@ </tr> <tr> <th> + projects + </th> + <td> + [[- profile.projectCount ]] + </td> + </tr> + <tr> + <th> + media + </th> + <td> + [[- profile.mediaCount ]] + </td> + </tr> + <tr> + <th> ip addresses </th> <td> @@ -77,10 +94,3 @@ </div> [[ include ../_footer ]] -<style> -#actions button { - float: none; - width: auto; -} -} -</style>
\ No newline at end of file diff --git a/views/staff/users/show_404.ejs b/views/staff/users/show_404.ejs index 3fd20a8..bcd0271 100644 --- a/views/staff/users/show_404.ejs +++ b/views/staff/users/show_404.ejs @@ -5,6 +5,7 @@ <a href="/staff">home</a> <a href="/staff/users">users</a> <a href="/staff/projects">projects</a> + <a href="/staff/media">media</a> </nav> <hr> |
