summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/assets/javascripts/ui/site/LayoutsModal.js10
-rw-r--r--server/lib/api/layouts.js4
-rw-r--r--server/lib/middleware.js60
-rw-r--r--server/lib/schemas/Plan.js2
-rw-r--r--server/lib/schemas/Project.js1
-rw-r--r--server/lib/views/staff.js45
-rw-r--r--views/staff/_nav.ejs1
-rw-r--r--views/staff/plans/_form.ejs6
-rw-r--r--views/staff/projects/index.ejs2
9 files changed, 113 insertions, 18 deletions
diff --git a/public/assets/javascripts/ui/site/LayoutsModal.js b/public/assets/javascripts/ui/site/LayoutsModal.js
index 639d55c..f69b38f 100644
--- a/public/assets/javascripts/ui/site/LayoutsModal.js
+++ b/public/assets/javascripts/ui/site/LayoutsModal.js
@@ -16,13 +16,15 @@ var LayoutsIndex = View.extend({
populate: function(data){
/*
- if (data.layoutCount > data.plan.basic_layout_limit) {
+ if (data.layoutCounts.basic > data.plan.basic_layout_limit) {
}
- if (data.projectCount > data.plan.stock_project_limit) {
+ if (data.layoutCounts.pro > data.plan.pro_layout_limit) {
}
- if (data.projectCount > data.plan.basic_project_limit) {
+ if (data.projectCounts.stock > data.plan.stock_project_limit) {
}
- if (data.projectCount > data.plan.pro_project_limit) {
+ if (data.projectCounts.basic > data.plan.basic_project_limit) {
+ }
+ if (data.projectCounts.pro > data.plan.pro_project_limit) {
}
*/
if (! data.layouts.length) {
diff --git a/server/lib/api/layouts.js b/server/lib/api/layouts.js
index 7e7976c..1c87fae 100644
--- a/server/lib/api/layouts.js
+++ b/server/lib/api/layouts.js
@@ -16,8 +16,8 @@ var layouts = {
layouts: docs,
plan: middleware.plans[ res.locals.user.plan_level || 0 ],
user: res.locals.user,
- layoutCount: res.locals.layoutCount,
- projectCount: res.locals.projectCount,
+ layoutCounts: res.locals.layoutCounts,
+ projectCounts: res.locals.projectCounts,
})
})
},
diff --git a/server/lib/middleware.js b/server/lib/middleware.js
index 9d09a10..fe4dc49 100644
--- a/server/lib/middleware.js
+++ b/server/lib/middleware.js
@@ -60,20 +60,48 @@ var middleware = {
res.locals.ogUrl = "http://vvalls.com/"
res.locals.ogDescription = "3D gallery space, fully customizable"
res.locals.ogAuthor = "VValls"
- res.locals.plans = plans
+ res.locals.plans = middleware.plans
res.locals.opt = {}
next()
},
ensureUserProjectsCount: function(req, res, next){
- Project.count({ user_id: req.user.id }, function(err, count){
- res.locals.projectCount = count || 0
+ var counts = { stock: 0, basic: 0, pro: 0 }
+ res.locals.projectCounts = counts
+ Project.count({ user_id: req.user.id, layout_type: 0 }, function(err, count){
+ res.locals.projectCounts.stock = count || 0
+ if (req.user.plan_level > 0) { return middleware.ensureBasicProjectsCount(req, res, next) }
+ else next()
+ })
+ },
+ ensureBasicProjectsCount: function(req, res, next){
+ Project.count({ user_id: req.user.id, layout_type: 1 }, function(err, count){
+ res.locals.projectCounts.basic = count || 0
+ if (req.user.plan_level > 1) { return middleware.ensureProProjectsCount(req, res, next) }
+ else next()
+ })
+ },
+ ensureProProjectsCount: function(req, res, next){
+ Project.count({ user_id: req.user.id, layout_type: 2 }, function(err, count){
+ res.locals.projectCounts.pro = count || 0
next()
})
},
+
ensureUserLayoutsCount: function(req, res, next){
- Layout.count({ user_id: req.user.id }, function(err, count){
- res.locals.layoutCount = count || 0
+ var counts = { basic: 0, pro: 0 }
+ res.locals.layoutCounts = counts
+ if (req.user.plan_level == 0) { return next() }
+
+ Layout.count({ user_id: req.user.id, layout_type: 1 }, function(err, count){
+ res.locals.layoutCounts.basic = count || 0
+ if (req.user.plan_level > 1) { return middleware.ensureProLayoutsCount(req, res, next) }
+ else next()
+ })
+ },
+ ensureProLayoutsCount: function(req, res, next){
+ Project.count({ user_id: req.user.id, layout_type: 2 }, function(err, count){
+ res.locals.layoutCounts.pro = count || 0
next()
})
},
@@ -100,6 +128,28 @@ var middleware = {
}
},
+ ensureLayout: function (req, res, next) {
+ if (req.params.slug) {
+ Layout.findOne({ slug: req.params.slug }, function(err, layout){
+ if (err) {
+ console.error(err)
+ req.layout = null
+ }
+ else if (! project) {
+ req.layout = null
+ }
+ else {
+ req.layout = layout
+ }
+ next()
+ })
+ }
+ else {
+ req.layout = null
+ next()
+ }
+ },
+
ensureIsCollaborator: function(req, res, next) {
req.isCollaborator = false
req.isOwner = false
diff --git a/server/lib/schemas/Plan.js b/server/lib/schemas/Plan.js
index 8a19b99..388ce69 100644
--- a/server/lib/schemas/Plan.js
+++ b/server/lib/schemas/Plan.js
@@ -31,7 +31,7 @@ var PlanSchema = new mongoose.Schema({
permissions: {
basic_editor: { type: Boolean, default: false },
pro_editor: { type: Boolean, default: false },
- solids: { type: Boolean, default: false },
+ sculpture: { type: Boolean, default: false },
collaborators: { type: Boolean, default: false },
no_logo: { type: Boolean, default: false },
},
diff --git a/server/lib/schemas/Project.js b/server/lib/schemas/Project.js
index e9501fc..855d95a 100644
--- a/server/lib/schemas/Project.js
+++ b/server/lib/schemas/Project.js
@@ -39,6 +39,7 @@ var ProjectSchema = new mongoose.Schema({
created_at: { type: Date },
updated_at: { type: Date },
featured: { type: Boolean, default: false },
+ layout_type: { type: Number, default: 0 },
});
module.exports = exports = mongoose.model('project', ProjectSchema);
diff --git a/server/lib/views/staff.js b/server/lib/views/staff.js
index 19b361d..6c97bbd 100644
--- a/server/lib/views/staff.js
+++ b/server/lib/views/staff.js
@@ -21,7 +21,7 @@ var staff = module.exports = {
plans: "monthly_price yearly_price basic_layout_monthly_price basic_layout_yearly_price " +
"pro_layout_monthly_price pro_layout_yearly_price " +
"basic_layout_limit pro_layout_limit stock_project_limit basic_project_limit pro_project_limit",
- plans_permissions: "basic_editor pro_editor solids collaborators no_logo",
+ plans_permissions: "basic_editor pro_editor sculpture collaborators no_logo",
},
defaults: {
@@ -401,6 +401,13 @@ var staff = module.exports = {
return project
},
+ layout: function(layout){
+ layout = layout.toObject()
+ layout.date = moment( layout.updated_at || layout.created_at ).format("M/DD/YYYY hh:mm a")
+ layout.user = {}
+ return layout
+ },
+
media: function(media){
media = media.toObject()
media.date = moment( media.updated_at || media.created_at ).format("M/DD/YYYY hh:mm a")
@@ -520,7 +527,41 @@ var staff = module.exports = {
staff.projects.feature
);
-
+
+ //
+ // layouts
+
+ app.get('/staff/layouts',
+ middleware.ensureAuthenticated,
+ middleware.ensureIsStaff,
+
+ staff.middleware.ensureLayoutsCount,
+
+ staff.middleware.ensureLayouts,
+ staff.middleware.ensureLayoutsUsers,
+
+ staff.layouts.index
+ );
+ app.get('/staff/layouts/:slug',
+ middleware.ensureAuthenticated,
+ middleware.ensureIsStaff,
+
+ middleware.ensureLayout,
+ staff.middleware.ensureLayout,
+ staff.middleware.ensureLayoutUser,
+
+ staff.layouts.show
+ );
+ app.put('/staff/layouts/:slug/feature',
+ middleware.ensureAuthenticated,
+ middleware.ensureIsStaff,
+
+ middleware.ensureLayout,
+ staff.middleware.ensureLayout,
+
+ staff.layouts.make_stock
+ );
+
//
// media
diff --git a/views/staff/_nav.ejs b/views/staff/_nav.ejs
index a607638..3bb3b08 100644
--- a/views/staff/_nav.ejs
+++ b/views/staff/_nav.ejs
@@ -2,6 +2,7 @@
<a href="/staff">home</a>
<a href="/staff/users">users</a>
<a href="/staff/projects">projects</a>
+ <a href="/staff/layouts">layouts</a>
<a href="/staff/media">media</a>
<a href="/staff/plans">plans</a>
<!-- <a href="/staff/subscriptions">subscriptions</a> -->
diff --git a/views/staff/plans/_form.ejs b/views/staff/plans/_form.ejs
index 61be7e8..85375fa 100644
--- a/views/staff/plans/_form.ejs
+++ b/views/staff/plans/_form.ejs
@@ -124,9 +124,9 @@
</li>
<li>
- <input name="permissions_solids" type="hidden" value="0">
- <input id="plan_permissions_solids" name="permissions_solids" type="checkbox" value="1" [[ if (plan.permissions.solids) { ]]checked[[ } ]]>
- <label for="plan_permissions_solids">3D Objects</label>
+ <input name="permissions_sculpture" type="hidden" value="0">
+ <input id="plan_permissions_sculpture" name="permissions_sculpture" type="checkbox" value="1" [[ if (plan.permissions.sculpture) { ]]checked[[ } ]]>
+ <label for="plan_permissions_sculpture">3D Objects</label>
</li>
<li>
diff --git a/views/staff/projects/index.ejs b/views/staff/projects/index.ejs
index e4ba469..1d309ce 100644
--- a/views/staff/projects/index.ejs
+++ b/views/staff/projects/index.ejs
@@ -7,7 +7,7 @@
<hr>
[[ include ../_pagination ]]
-[[ include ../_projects ]]
+[[ include ../_layouts ]]
[[ include ../_pagination ]]
[[ include ../_footer ]]