app.controller('ImageModalCtrl', function($scope, $http, Upload) { $scope.currentImages = [] // Image upload function $scope.uploadImage = function(file, model, id, index, item = null) { // return $scope.fileInfo = { file: file } if ($scope.fileInfo.file) { $scope.fileInfo.loading = true; var fileName = $scope.fileInfo.file.name; fileName = fileName.replace('#', ''); fileName = fileName.replace('+', ''); fileName = fileName.replace(' ', '_'); if (id) { url = '/filecontroller/uploadImage/' + model + '/' + id; if (index !== undefined) { url += '/' + index; } } else { url = '/filecontroller/uploadImage' } url += '?name=' + encodeURI(fileName); Upload.upload({ url: url, data: { file: $scope.fileInfo.file, }, }).then(function (response) { if (response.data.status) { if (id) { $scope.currentImages = response.data.data; $scope.gotUploadImages(model, id, index, item); } else { if (index == undefined) { index = $scope.currentImages.length; } $scope.currentImages[index] = response.data.data[0]; if (item) { if (item.images == undefined || !angular.isArray(item.images)) { item.images = []; } item.images[index] = response.data.data[0].path; } } alertify.success('De afbeelding is succesvol opgeslagen'); } else { alertify.error('De afbeelding kon niet worden opgeslagen'); } }, function (response) { if (response.status > 0) $scope.errorMsg = response.status + ': ' + response.data; }, function (evt) { if (Math.min(100, parseInt(100.0 * evt.loaded / evt.total)) < 100) { alertify.message('De afbeelding wordt opgeslagen'); } $scope.fileInfo.file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total)); }); } } $scope.gotUploadImages = function (model, id, index, item) { if (index === undefined) { if (!$scope.currentImages) { $scope.currentImages = []; } index = $scope.currentImages.length; } if (model === 'hotels' && item) { // Add the hotel image to the list item.images = $scope.getImagePaths($scope.currentImages); } } $scope.deleteImage = function(model, id, index, path, item = null) { if (id && model) { // Delete the image var req = { method: 'POST', url: '/filecontroller/deleteImage', data: { index: index, id: id, model: model, path: path, } } $http(req).then(function(response) { // Success? Set the options if (response.status && response.data.status) { // OK $scope.getImages(model, id, item); alertify.success('De afbeelding is succesvol verwijderd'); } else { // Error swal({ title: 'Error', text: response.data.message, icon: 'warning', }); } }); } else { $scope.currentImages.splice(index, 1); item.images.splice(index, 1); alertify.success('De afbeelding is succesvol verwijderd'); } } $scope.getImagePaths = function(arrImages) { let imagePaths = []; if (Array.isArray(arrImages)) { arrImages.forEach(function(image) { if (typeof image === 'object' && image['path']) { imagePaths.push(image['path']); } else if (typeof image === 'string' && image) { imagePaths.push(image); } }); } return imagePaths; } $scope.getImages = function(model, id, item = null) { $scope.isLoading = true; if (model && id) { var req = { method: 'POST', url: '/filecontroller/getImages/' + model + '/' + id, } $http(req).then(function(response) { // Success? Set the options if (response.status && response.data.status) { // OK $scope.currentImages = response.data.data; if (item) { item.images = $scope.getImagePaths(response.data.data); } else { console.warning('getImages: No item given.'); } } else { // Error swal({ title: 'Error', text: response.data.message, icon: 'warning', }); } delete $scope.isLoading; }, function(error) { delete $scope.isLoading; }); } else { $scope.currentImages = []; angular.forEach(item.images, function(imagePath) { $scope.currentImages.push({path: imagePath}) }); delete $scope.isLoading; } } $scope.$on('showImageModal', function(event, value) { $scope.cardModel = value.model; $scope.currentImages = []; $scope.cardSubjectId = value.id; $scope.cardItem = value.item $scope.uploadImageMessage = null; if (value.item) { $scope.getImages(value.model, value.id, value.item); } else { $scope.getImages(value.model, value.id); } $('#imageModal').modal('show'); }) /* $scope.$on('getImages', function(event, value) { $scope.getImages(value.model, value.id, value.item) })*/ $scope.$on('getImages', function(event, value) { $scope.getImages(value.model, value.id, value.item) $scope.$emit('pingBack', value.item); }) })