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..4f834130 --- /dev/null +++ b/public/static/scripts/add-images.js @@ -0,0 +1,36 @@ +$(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(), + path: $("#image-editor-1").attr("value") + } + }).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..96c51afd --- /dev/null +++ b/routes/api/services/images.js @@ -0,0 +1,45 @@ +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); + + + +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.path).trim(); + var imageName = imagePath.split("/")[4]; + + var imageModel = new model({ + albumname: album, + title: title, + subtitle: subtitle, + img: imageName + }); + 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}",