From e11d682e17e53de97aa3744724d153819bbafe34 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sun, 14 Mar 2021 21:43:47 +0100 Subject: [PATCH] #419 - added option to delete images --- .../budgetmaster/images/ImageService.java | 3 ++ .../budgetmaster/images/MediaController.java | 23 ++++++++++++ .../resources/languages/base_de.properties | 2 ++ .../resources/languages/base_en.properties | 2 ++ src/main/resources/static/js/accounts.js | 35 +++++++++++++++++++ .../templates/accounts/availableImages.ftl | 4 +++ 6 files changed, 69 insertions(+) diff --git a/src/main/java/de/deadlocker8/budgetmaster/images/ImageService.java b/src/main/java/de/deadlocker8/budgetmaster/images/ImageService.java index 82d368596..9dcaefe5e 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/images/ImageService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/images/ImageService.java @@ -34,6 +34,7 @@ public class ImageService implements Resetable } @Override + @Transactional public void deleteAll() { final List<Image> images = imageRepository.findAll(); @@ -53,6 +54,8 @@ public class ImageService implements Resetable { account.setIcon(null); } + + getRepository().delete(image); } @Override diff --git a/src/main/java/de/deadlocker8/budgetmaster/images/MediaController.java b/src/main/java/de/deadlocker8/budgetmaster/images/MediaController.java index e460496ca..c37e305e7 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/images/MediaController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/images/MediaController.java @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.Optional; @Controller @RequestMapping(Mappings.MEDIA) @@ -61,4 +62,26 @@ public class MediaController extends BaseController return data.toString(); } + + @GetMapping("/deleteImage/{ID}") + @ResponseBody + public String deleteImage(@PathVariable("ID") Integer ID) + { + boolean success = false; + String localizedMessage = Localization.getString("delete.image.error.not.existing", ID); + + Optional<Image> imageOptional = imageService.getRepository().findById(ID); + if(imageOptional.isPresent()) + { + success = true; + localizedMessage = Localization.getString("delete.image.success"); + imageService.deleteImage(imageOptional.get()); + } + + final JsonObject data = new JsonObject(); + data.addProperty("isDeleteSuccessful", success); + data.addProperty("localizedMessage", localizedMessage); + + return data.toString(); + } } diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties index 8a5561f25..bab198ae0 100644 --- a/src/main/resources/languages/base_de.properties +++ b/src/main/resources/languages/base_de.properties @@ -142,6 +142,8 @@ notification.settings.database.import.success=Import erfolgreich: {0} Konten, {1 upload.image.success=Erfolgreich hochgeladen upload.image.error=Fehler: {0} upload.image.error.invalid.extension=Die Dateiendung "{0}" is nicht zugelassen für das Hochladen von Bildern +delete.image.success=Erfolgreich gelöscht +delete.image.error.not.existing=Fehler: Bild mit ID {0} existiert nicht # WARNING warning.text.account.delete=Das Konto "{0}" kann nicht gelöscht werden, da mindestens ein Konto existieren muss. Um dieses Konto zu löschen musst du zuerst ein neues anlegen. diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties index f5c0f58a5..da750082e 100644 --- a/src/main/resources/languages/base_en.properties +++ b/src/main/resources/languages/base_en.properties @@ -142,6 +142,8 @@ notification.settings.database.import.success=Import successful: {0} accounts, { upload.image.success=Upload successful upload.image.error=Error: {0} upload.image.error.invalid.extension=File extension "{0}" is not allowed for image upload +delete.image.success=Successfully deleted +delete.image.error.not.existing=Error: Image with ID {0} does not exist # WARNING warning.text.account.delete=The account "{0}" could not be deleted, because at least one account must exist at all time. You have to create a new account in order to delete this one. diff --git a/src/main/resources/static/js/accounts.js b/src/main/resources/static/js/accounts.js index 7f6ad7e16..807d7345f 100644 --- a/src/main/resources/static/js/accounts.js +++ b/src/main/resources/static/js/accounts.js @@ -84,6 +84,11 @@ function getAvailableImages(callback) selectIcon(this); }); + $('.account-icon-option-delete').click(function() + { + deleteImage(this); + }); + callback(); } }); @@ -135,4 +140,34 @@ function uploadImage() }); } }); +} + +function deleteImage(item) +{ + $.ajax({ + type: 'GET', + url: $(item).attr('data-url'), + data: {}, + success: function(response) + { + let parsedData = JSON.parse(response); + let isUploadSuccessful = parsedData['isDeleteSuccessful'] + M.toast({ + html: parsedData['localizedMessage'], + classes: isUploadSuccessful ? 'green' : 'red' + }); + + getAvailableImages(function() + { + }); + }, + error: function(response) + { + let parsedData = JSON.parse(response); + M.toast({ + html: parsedData['localizedMessage'], + classes: 'red' + }); + } + }); } \ No newline at end of file diff --git a/src/main/resources/templates/accounts/availableImages.ftl b/src/main/resources/templates/accounts/availableImages.ftl index 504abbfbc..edb3539ec 100644 --- a/src/main/resources/templates/accounts/availableImages.ftl +++ b/src/main/resources/templates/accounts/availableImages.ftl @@ -1,3 +1,6 @@ +<#import "/spring.ftl" as s> +<#import "../helpers/header.ftl" as header> + <#list availableImages as image> <@imageOption image 'account-icon'/> </#list> @@ -7,5 +10,6 @@ <div class="${classPrefix}-option"> <img src="${image.getBase64EncodedImage()}" class="${classPrefix}-preview" data-image-id="${image.getID()}"/> </div> + <@header.buttonFlat url="/media/deleteImage/" + image.getID() icon='delete' localizationKey='' classes='no-padding text-default ' + classPrefix + '-option-delete' isDataUrl=true/> </div> </#macro> \ No newline at end of file -- GitLab