From f7d50162d2622e8b8fb8fd30e59606eb3f94af90 Mon Sep 17 00:00:00 2001 From: Kailash Bhalaki Date: Fri, 19 Oct 2018 18:51:03 +0530 Subject: [PATCH 1/2] portals: Add album feature for uploading images. --- forms/add-images.js | 46 +++++++++++++++++++++++++ public/static/scripts/add-images.js | 35 +++++++++++++++++++ routes/api/index.js | 1 + routes/api/services/images.js | 53 +++++++++++++++++++++++++++++ routes/components/addimages.js | 45 ++++++++++++++++++++++++ routes/components/index.js | 2 +- views/add-images/album.jade | 10 ++++++ views/add-images/home.jade | 2 ++ views/mixins/img-upload.jade | 3 +- 9 files changed, 195 insertions(+), 2 deletions(-) create mode 100644 forms/add-images.js create mode 100644 public/static/scripts/add-images.js create mode 100644 routes/api/services/images.js create mode 100644 routes/components/addimages.js create mode 100644 views/add-images/album.jade create mode 100644 views/add-images/home.jade diff --git a/forms/add-images.js b/forms/add-images.js new file mode 100644 index 00000000..b7cfe354 --- /dev/null +++ b/forms/add-images.js @@ -0,0 +1,46 @@ +var fields = []; +fields.push({ + label: "Album Name", + name:"album-name", + placeholder: "E.g: FOB,SPONS", + editable: true, + type: "select", + options: ["FOB", "SPONSORS"], + value: "", + typeahead: false, + none: true, +}); +fields.push({ + label: "Image", + name:"image", + editable: true, + type: "image", + required: true, + value: "", + typeahead: false, + none: true, + width: 800, + height: 400, + id: 1 +}); +fields.push({ + label: "Title", + name:"title", + editable: true, + type: "textarea", + required: false, + value: "", + typeahead: false, + none: true +}); +fields.push({ + label: "Sub-title", + name:"subtitle", + editable: true, + type: "textarea", + required: false, + value: "", + typeahead: false, + none: true +}); +module.exports = fields; \ No newline at end of file diff --git a/public/static/scripts/add-images.js b/public/static/scripts/add-images.js new file mode 100644 index 00000000..1c2ba467 --- /dev/null +++ b/public/static/scripts/add-images.js @@ -0,0 +1,35 @@ +$(document).ready(function() { + $("#submit-button").on('click', function() { + if(!$("#field-image").val()) { + swal({ + title: "Please fill image", + type: "error" + }); + } else { + $.ajax({ + type: 'POST', + url: '/api/images', + data: { + album: $('#field-album-name').val(), + title: $('#field-title').val(), + subtitle: $('#field-subtitle').val() || "", + image: $("#field-image").val() + } + }).done(function (data) { + swal({ + title: "Successful", + type: "success", + confirmButtonText: "OK", + }); + }).fail(function (err) { + swal({ + title: "Some error occurred", + text: JSON.stringify(err), + type: "error", + confirmButtonText: "OK", + }); + }); + } + }); + +}); \ No newline at end of file diff --git a/routes/api/index.js b/routes/api/index.js index 9bc166cf..0bbe56b3 100644 --- a/routes/api/index.js +++ b/routes/api/index.js @@ -11,6 +11,7 @@ services.push(require('./services/accomm')); services.push(require('./services/bodies')); services.push(require('./services/feed')); services.push(require('./services/news')); +services.push(require('./services/images')); services.forEach(function (service) { router.use(service.route, constructor(service.model, service.router, service.permission)); diff --git a/routes/api/services/images.js b/routes/api/services/images.js new file mode 100644 index 00000000..54bc70f3 --- /dev/null +++ b/routes/api/services/images.js @@ -0,0 +1,53 @@ +var express = require("express"); +var router = express.Router(); +var mongoose = require('mongoose'); +var Schema = mongoose.Schema; +var fs = require("fs"); + +var imageSchema = new Schema({ + albumname: String, + title: String, + subtitle: String, + img: String +}); +var model = mongoose.model('images', imageSchema); +var images = []; // stores image names as string. + + + +router.post("/", function(req, res, next) { + var album = (req.body.album).trim(); + var title = (req.body.title).trim(); + var subtitle = (req.body.subtitle).trim(); + var imagePath = (req.body.image).trim(); + + fs.readdir("public/static/data/images", function(err, files) { + files.forEach(file => { + if(file.search(/.png|.jpg|.jpeg/) != -1) { + images.push(file); + } + }); + var latestImage = images[images.length -1]; + var imageModel = new model({ + albumname: album, + title: title, + subtitle: subtitle, + img: latestImage + }); + imageModel.save(); + return res.json(req.body); + }); +}); +var permission = { + read_one: 0, + read_all: 0, + insert: 1, + update: 2, + delete: 2 +}; +module.exports = { + route: '/images', + router: router, + model: model, + permission: permission +}; \ No newline at end of file diff --git a/routes/components/addimages.js b/routes/components/addimages.js new file mode 100644 index 00000000..f9406fcb --- /dev/null +++ b/routes/components/addimages.js @@ -0,0 +1,45 @@ +var express = require('express'); +var router = express.Router(); +var fq = require('fuzzquire'); +var middleware = fq("authentication").middleware; +var fields = fq("forms/add-images"); + +var applyStateChanges = function (req, superuser) { + req.stateparams.title = { + text: 'Images', + route: '/images', + }; + if (superuser) + req.stateparams.submenu = [{ + route: "/addimages/new", + label: "Add new images for an album", + } + ]; + return req; +}; +router.get("/", middleware.authenticate, middleware.elevate, function(req, res, next) { + if(req.user.privilege.level == 2) { + req = applyStateChanges(req, true); + req.stateparams.pagetitle = 'Add Images for Album.'; + res.renderState('add-images/home', { + user: req.user, + title: 'Add Images for Album.' + }); + } else if (req.user.privilege.level == 1) { + req = applyStateChanges(req, false); + res.redirect('/'); + } +}); +router.get("/new", middleware.authenticate, middleware.elevate, function(req, res, next) { + if(req.user.privilege.level == 2) { + res.renderState('add-images/album', { + user:req.user, + title: 'Add Images for Album', + fields: fields + }); + } else if( req.user.privilege.level == 1) { + req = applyStateChanges(req, false); + res.redirect('/'); + } +}); +module.exports = router; \ No newline at end of file diff --git a/routes/components/index.js b/routes/components/index.js index 17bf7ad6..185a65ae 100644 --- a/routes/components/index.js +++ b/routes/components/index.js @@ -14,7 +14,7 @@ router.get('/', function (req, res, next) { }); router.use('/', fq('components/custom')); -let routes = ['events', 'dashboard', 'portals', 'about', 'ca', 'login']; +let routes = ['events', 'dashboard', 'portals', 'about', 'ca', 'login', 'addimages']; routes.forEach(elem => { router.use(`/${elem}`, fq(`components/${elem}`)); }); diff --git a/views/add-images/album.jade b/views/add-images/album.jade new file mode 100644 index 00000000..9d8090b8 --- /dev/null +++ b/views/add-images/album.jade @@ -0,0 +1,10 @@ +include ../mixins/form +script(type="text/javascript" src="/static/lib/jquery.uploadPreview.min.js") +.immersive-wrapper + #add-images-album-wrapper + - var form = { fields: fields, method: "PUT", action: "/api/users/me"}; + +formMixin(form) + #submit-button + button Submit +script(src="/static/scripts/add-images.js") + \ No newline at end of file diff --git a/views/add-images/home.jade b/views/add-images/home.jade new file mode 100644 index 00000000..0dc4a499 --- /dev/null +++ b/views/add-images/home.jade @@ -0,0 +1,2 @@ +.immersive-wrapper + | Hi this is hello code. \ No newline at end of file diff --git a/views/mixins/img-upload.jade b/views/mixins/img-upload.jade index 0fa342d9..32410a3d 100644 --- a/views/mixins/img-upload.jade +++ b/views/mixins/img-upload.jade @@ -4,9 +4,10 @@ mixin imgUpload(data) input(type="file" required=data.required id="field-#{data.name}" name="field-#{data.name}" class="cropit-image-input") div(class="cropit-preview", id="cropit-preview-#{data.id}") div.status - i.icon-check.response(id="export-img-#{data.id}") + i.icon-check.response(id="export-img-#{data.id}") label(for="field-#{data.name}" id="label-#{data.name}") i.icon-add_a_photo + script(src="/static/scripts/image-upload-mixin.js") script. imgCropInit({ input: "field-#{data.name}", From 6eec30f6960466773e0cd1c8e1f24571b2483955 Mon Sep 17 00:00:00 2001 From: Kailash Bhalaki Date: Tue, 25 Dec 2018 23:40:59 +0530 Subject: [PATCH 2/2] album-feature: Use image-upload-mixin for the name of the image. --- public/static/scripts/add-images.js | 3 ++- routes/api/services/images.js | 14 +++----------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/public/static/scripts/add-images.js b/public/static/scripts/add-images.js index 1c2ba467..4f834130 100644 --- a/public/static/scripts/add-images.js +++ b/public/static/scripts/add-images.js @@ -13,7 +13,8 @@ $(document).ready(function() { album: $('#field-album-name').val(), title: $('#field-title').val(), subtitle: $('#field-subtitle').val() || "", - image: $("#field-image").val() + image: $("#field-image").val(), + path: $("#image-editor-1").attr("value") } }).done(function (data) { swal({ diff --git a/routes/api/services/images.js b/routes/api/services/images.js index 54bc70f3..96c51afd 100644 --- a/routes/api/services/images.js +++ b/routes/api/services/images.js @@ -11,7 +11,6 @@ var imageSchema = new Schema({ img: String }); var model = mongoose.model('images', imageSchema); -var images = []; // stores image names as string. @@ -19,24 +18,17 @@ router.post("/", function(req, res, next) { var album = (req.body.album).trim(); var title = (req.body.title).trim(); var subtitle = (req.body.subtitle).trim(); - var imagePath = (req.body.image).trim(); + var imagePath = (req.body.path).trim(); + var imageName = imagePath.split("/")[4]; - fs.readdir("public/static/data/images", function(err, files) { - files.forEach(file => { - if(file.search(/.png|.jpg|.jpeg/) != -1) { - images.push(file); - } - }); - var latestImage = images[images.length -1]; var imageModel = new model({ albumname: album, title: title, subtitle: subtitle, - img: latestImage + img: imageName }); imageModel.save(); return res.json(req.body); - }); }); var permission = { read_one: 0,