From 278fd3d0e69e6c2925e0478cc43d9db54c788d56 Mon Sep 17 00:00:00 2001
From: Julian Ophals
Date: Sun, 6 Apr 2025 01:20:23 -0700
Subject: [PATCH 01/12] [story/VSPC-275] almost finished implementing delete
button for default images, fixed cancel button, fixed edit button
---
vspace/.classpath | 12 +-
.../diging/vspace/core/model/IExhibition.java | 6 +
.../vspace/core/model/impl/Exhibition.java | 12 ++
.../vspace/core/services/IImageService.java | 2 +
.../core/services/impl/ImageService.java | 12 ++
.../web/staff/DefaultLinkImageController.java | 66 +++++++-
.../ExhibitionConfigurationController.java | 6 +-
.../WEB-INF/views/staff/exhibit/config.html | 157 +++++++++++++-----
8 files changed, 210 insertions(+), 63 deletions(-)
diff --git a/vspace/.classpath b/vspace/.classpath
index 3aa72561a..94c3284e0 100644
--- a/vspace/.classpath
+++ b/vspace/.classpath
@@ -27,6 +27,7 @@
+
@@ -34,19 +35,10 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/vspace/src/main/java/edu/asu/diging/vspace/core/model/IExhibition.java b/vspace/src/main/java/edu/asu/diging/vspace/core/model/IExhibition.java
index ffa052264..ffe4e1683 100644
--- a/vspace/src/main/java/edu/asu/diging/vspace/core/model/IExhibition.java
+++ b/vspace/src/main/java/edu/asu/diging/vspace/core/model/IExhibition.java
@@ -31,14 +31,20 @@ public interface IExhibition extends IVSpaceElement {
IVSImage getSpaceLinkDefaultImage();
void setSpaceLinkDefaultImage(IVSImage spaceLinkDefaultImage);
+
+ void deleteSpaceLinkDefaultImage();
IVSImage getModuleLinkDefaultImage();
void setModuleLinkDefaultImage(IVSImage moduleLinkDefaultImage);
+
+ void deleteModuleLinkDefaultImage();
IVSImage getExternalLinkDefaultImage();
void setExternalLinkDefaultImage(IVSImage externalLinkDefaultImage);
+
+ void deleteExternalLinkDefaultImage();
List getLanguages();
diff --git a/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Exhibition.java b/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Exhibition.java
index f7c79dfb9..a8434a27d 100644
--- a/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Exhibition.java
+++ b/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Exhibition.java
@@ -144,6 +144,10 @@ public void setSpaceLinkDefaultImage(IVSImage spaceLinkDefaultImage) {
this.spaceLinkDefaultImage = spaceLinkDefaultImage;
}
@Override
+ public void deleteSpaceLinkDefaultImage() {
+ this.spaceLinkDefaultImage = null;
+ }
+ @Override
public IVSImage getModuleLinkDefaultImage() {
return moduleLinkDefaultImage;
}
@@ -152,6 +156,10 @@ public void setModuleLinkDefaultImage(IVSImage moduleLinkDefaultImage) {
this.moduleLinkDefaultImage = moduleLinkDefaultImage;
}
@Override
+ public void deleteModuleLinkDefaultImage() {
+ this.moduleLinkDefaultImage = null;
+ }
+ @Override
public IVSImage getExternalLinkDefaultImage() {
return externalLinkDefaultImage;
}
@@ -160,6 +168,10 @@ public void setExternalLinkDefaultImage(IVSImage externalLinkDefaultImage) {
this.externalLinkDefaultImage = externalLinkDefaultImage;
}
@Override
+ public void deleteExternalLinkDefaultImage() {
+ this.externalLinkDefaultImage = null;
+ }
+ @Override
public boolean isAboutPageConfigured() {
return aboutPageConfigured;
}
diff --git a/vspace/src/main/java/edu/asu/diging/vspace/core/services/IImageService.java b/vspace/src/main/java/edu/asu/diging/vspace/core/services/IImageService.java
index 31cd664b7..ad3a6dbb1 100644
--- a/vspace/src/main/java/edu/asu/diging/vspace/core/services/IImageService.java
+++ b/vspace/src/main/java/edu/asu/diging/vspace/core/services/IImageService.java
@@ -44,6 +44,8 @@ Page getPaginatedImagesBySearchTerm(int pageNo, ImageCategory category,
String searchTerm, String sortedBy, String order);
IVSImage storeImage(byte[] image, String filename);
+
+ void removeImage(String imageId);
byte[] getImageContent(IVSImage image);
}
\ No newline at end of file
diff --git a/vspace/src/main/java/edu/asu/diging/vspace/core/services/impl/ImageService.java b/vspace/src/main/java/edu/asu/diging/vspace/core/services/impl/ImageService.java
index bff23caa6..5a540b61e 100644
--- a/vspace/src/main/java/edu/asu/diging/vspace/core/services/impl/ImageService.java
+++ b/vspace/src/main/java/edu/asu/diging/vspace/core/services/impl/ImageService.java
@@ -305,6 +305,18 @@ public IVSImage storeImage(byte[] image, String filename) {
return storedImage;
}
+ /**
+ * Method to delete an image in the file
+ *
+ *@param imageId - The id of the image to be removed
+ *@return EmptyResultDataAccessException if no image exists with the provided id
+ */
+ @Override
+ public void removeImage(String imageId) {
+
+ imageRepo.deleteById(imageId);
+ }
+
/**
*Method to return content of the image
*
diff --git a/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultLinkImageController.java b/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultLinkImageController.java
index 5660fb415..2a9a01988 100644
--- a/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultLinkImageController.java
+++ b/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultLinkImageController.java
@@ -1,14 +1,15 @@
package edu.asu.diging.vspace.web.staff;
import java.io.IOException;
-import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
+import java.util.function.Supplier;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@@ -26,7 +27,8 @@ public class DefaultLinkImageController {
private final Map> imageSetterMap = Map.of(
"space", Exhibition::setSpaceLinkDefaultImage,
"module", Exhibition::setModuleLinkDefaultImage,
- "external", Exhibition::setExternalLinkDefaultImage);
+ "external", Exhibition::setExternalLinkDefaultImage
+ );
@Autowired
private IExhibitionManager exhibitionManager;
@@ -57,15 +59,61 @@ public String createOrUpdateLinkImage(HttpServletRequest request,
attributes.addAttribute("alertType", "danger");
attributes.addAttribute("message", "Could not save default image");
attributes.addAttribute("showAlert", "true");
- return "redirect:/staff/exhibit/config";
+ } else {
+ setter.accept(exhibition, defaultImage);
+ exhibition = (Exhibition) exhibitionManager.storeExhibition(exhibition);
+ attributes.addAttribute("exhibitId", exhibition.getId());
+ attributes.addAttribute("alertType", "success");
+ attributes.addAttribute("message", "Successfully Saved!");
+ attributes.addAttribute("showAlert", "true");
+ }
+
+ return "redirect:/staff/exhibit/config";
+ }
+
+ @RequestMapping(value = "/staff/exhibit/config/link/defaultImage/{linkType}", method = RequestMethod.DELETE)
+ public String deleteLinkImage(@PathVariable("linkType") String linkType, RedirectAttributes attributes) throws IOException {
+ Exhibition exhibition = (Exhibition) exhibitionManager.getStartExhibition();
+
+ Map> imageGetterMap = Map.of(
+ "space", exhibition::getSpaceLinkDefaultImage,
+ "module", exhibition::getModuleLinkDefaultImage,
+ "external", exhibition::getExternalLinkDefaultImage
+ );
+
+ IVSImage image = imageGetterMap.get(linkType).get();
+ if (image == null) {
+ System.out.println("HERE1");
+ attributes.addAttribute("exhibitId", exhibition.getId());
+ attributes.addAttribute("alertType", "danger");
+ attributes.addAttribute("message", "Could not delete the default image");
+ attributes.addAttribute("showAlert", "true");
+ } else {
+ System.out.println("HERE2");
+ imageService.removeImage(image.getId());
}
- setter.accept(exhibition, defaultImage);
- exhibition = (Exhibition) exhibitionManager.storeExhibition(exhibition);
- attributes.addAttribute("exhibitId", exhibition.getId());
- attributes.addAttribute("alertType", "success");
- attributes.addAttribute("message", "Successfully Saved!");
- attributes.addAttribute("showAlert", "true");
+ Map imageDeleterMap = Map.of(
+ "space", exhibition::deleteSpaceLinkDefaultImage,
+ "module", exhibition::deleteModuleLinkDefaultImage,
+ "external", exhibition::deleteExternalLinkDefaultImage
+ );
+
+ Runnable deleteDefautImageMethod = imageDeleterMap.get(linkType);
+ if (deleteDefautImageMethod == null) {
+ attributes.addAttribute("exhibitId", exhibition.getId());
+ attributes.addAttribute("alertType", "danger");
+ attributes.addAttribute("message", "Could not delete the default image");
+ attributes.addAttribute("showAlert", "true");
+ } else {
+ deleteDefautImageMethod.run();
+ exhibition = (Exhibition) exhibitionManager.storeExhibition(exhibition);
+ attributes.addAttribute("exhibitId", exhibition.getId());
+ attributes.addAttribute("alertType", "success");
+ attributes.addAttribute("message", "Successfully deleted the default image!");
+ attributes.addAttribute("showAlert", "true");
+ }
+
return "redirect:/staff/exhibit/config";
}
}
diff --git a/vspace/src/main/java/edu/asu/diging/vspace/web/staff/ExhibitionConfigurationController.java b/vspace/src/main/java/edu/asu/diging/vspace/web/staff/ExhibitionConfigurationController.java
index f7f63685b..dd09f04a3 100644
--- a/vspace/src/main/java/edu/asu/diging/vspace/web/staff/ExhibitionConfigurationController.java
+++ b/vspace/src/main/java/edu/asu/diging/vspace/web/staff/ExhibitionConfigurationController.java
@@ -76,9 +76,9 @@ public String showExhibitions(Model model) {
model.addAttribute("spacesList", spaceRepo.findAll());
model.addAttribute("languageList", exhibitionLanguageConfig.getExhibitionLanguageList());
model.addAttribute("exhibition", exhibition);
- model.addAttribute("defaultSpaceLinkImage",exhibition.getSpaceLinkDefaultImage());
- model.addAttribute("defaultModuleLinkImage",exhibition.getModuleLinkDefaultImage());
- model.addAttribute("defaultExternalLinkImage",exhibition.getExternalLinkDefaultImage());
+ model.addAttribute("defaultSpaceLinkImage", exhibition.getSpaceLinkDefaultImage());
+ model.addAttribute("defaultModuleLinkImage", exhibition.getModuleLinkDefaultImage());
+ model.addAttribute("defaultExternalLinkImage", exhibition.getExternalLinkDefaultImage());
return "staff/exhibit/config";
}
diff --git a/vspace/src/main/webapp/WEB-INF/views/staff/exhibit/config.html b/vspace/src/main/webapp/WEB-INF/views/staff/exhibit/config.html
index 1481745be..eeae7e0bc 100644
--- a/vspace/src/main/webapp/WEB-INF/views/staff/exhibit/config.html
+++ b/vspace/src/main/webapp/WEB-INF/views/staff/exhibit/config.html
@@ -13,23 +13,38 @@
}
$("#changeBgImgAlert").show();
- $("#cancelSpaceImgBtn").click(function() {
- document.getElementById('spaceLinkImage').value = null;
+ $("#cancelUploadSpaceImgBtn").click(function() {
+ document.getElementById('spaceLinkImageBlock').value = null;
+ closeUploadSpaceLinkImage();
$('#cancelSpaceImgBtn').attr('disabled', true);
});
+
+ $("#changeSpaceLinkImageBtn").click(function() {
+ openUploadSpaceLinkImage();
+ });
- $("#cancelModuleImgBtn").click(function() {
- document.getElementById('moduleLinkImage').value = null;
+ $("#cancelUploadModuleImgBtn").click(function() {
+ document.getElementById('moduleLinkImageBlock').value = null;
+ closeUploadModuleLinkImage();
$('#cancelModuleImgBtn').attr('disabled', true);
});
+
+ $("#changeModuleLinkImageBtn").click(function() {
+ openUploadModuleLinkImage();
+ });
- $("#cancelExternalImgBtn").click(function() {
- document.getElementById('externalLinkImage').value = null;
+ $("#cancelUploadExternalImgBtn").click(function() {
+ document.getElementById('externalLinkImageBlock').value = null;
+ closeUploadExternalLinkImage();
$('#cancelExternalImgBtn').attr('disabled', true);
});
+
+ $("#changeExternalLinkImageBtn").click(function() {
+ openUploadExternalLinkImage();
+ });
//when input's value changes
- $("#spaceLinkImage").change(function() {
+ $("#spaceLinkImageBlock").change(function() {
if ($(this).val()) {
$("#cancelSpaceImgBtn").prop("disabled", false);
} else {
@@ -37,7 +52,7 @@
}
});
- $("#moduleLinkImage").change(function() {
+ $("#moduleLinkImageBlock").change(function() {
if ($(this).val()) {
$("#cancelModuleImgBtn").prop("disabled", false);
} else {
@@ -45,13 +60,31 @@
}
});
- $("#externalLinkImage").change(function() {
+ $("#externalLinkImageBlock").change(function() {
if ($(this).val()) {
$("#cancelExternalImgBtn").prop("disabled", false);
} else {
$("#cancelExternalImgBtn").prop("disabled", true);
}
});
+
+ $(".deleteDefaultLinkImage").click(function() {
+ var linkType = $(this).attr('link-type');
+ var token = [[${_csrf.token}]];
+ $.ajax({
+ url: "[(@{/staff/exhibit/config/link/defaultImage/})]"+linkType,
+ type: 'DELETE',
+ headers:{
+ 'X-CSRF-Token':token
+ },
+ success: function(result) {
+ console.log('SUCCESS!!!!!!');
+ },
+ error: function(data) {
+ console.log('FAILURE!!!!!');
+ }
+ });
+ });
});
function modeChange(modeChosen) {
@@ -68,38 +101,68 @@
var defaultImages = $('#defaultImages');
defaultImages.show();
}
+
+
+ function openUploadSpaceLinkImage() {
+ $("#uploadSpaceLinkImage").css('display', 'block');
+ }
- function defaultLinkModuleImages() {
+ function closeUploadSpaceLinkImage() {
+ $("#uploadSpaceLinkImage").css('display', 'none');
+ }
+
+ function openUploadModuleLinkImage() {
$("#uploadModuleLinkImage").css('display', 'block');
}
- function defaultLinkExternalImages() {
+
+ function closeUploadModuleLinkImage() {
+ $("#uploadModuleLinkImage").css('display', 'none');
+ }
+
+ function openUploadExternalLinkImage() {
$("#uploadExternalLinkImage").css('display', 'block');
}
+
- function openUploadSpaceLinkDefaultImgBlock() {
- $("#uploadSpaceLinkImage").css('display', 'block');
+ function closeUploadExternalLinkImage() {
+ $("#uploadExternalLinkImage").css('display', 'none');
}
+
@@ -157,12 +220,15 @@ Exhibition Configuration
-
-
+
+
-
+
+
@@ -174,7 +240,7 @@
Exhibition Configuration
id="image" class="form-control-file" />
-
@@ -184,11 +250,16 @@
Exhibition Configuration
-
+
-
+
+
@@ -200,7 +271,7 @@
Exhibition Configuration
id="image" class="form-control-file" />
-
@@ -210,12 +281,16 @@
Exhibition Configuration
-
+
-
-
+
+
+
@@ -227,7 +302,7 @@
Exhibition Configuration
id="image" class="form-control-file" />
-
From c435ea7eb893e5532cccb522fe86be4ac61eda2b Mon Sep 17 00:00:00 2001
From: Julian Ophals
Date: Thu, 10 Apr 2025 22:53:40 -0700
Subject: [PATCH 02/12] [story/VSPC-275] in the process of implementing the
disable slider for default images, added file upload constraints
---
.../diging/vspace/core/model/IVSImage.java | 4 +
.../vspace/core/model/impl/Exhibition.java | 6 +-
.../vspace/core/model/impl/VSImage.java | 19 +-
.../web/staff/DefaultImageApiController.java | 17 ++
.../web/staff/DefaultLinkImageController.java | 46 +++-
.../WEB-INF/views/exhibition/space.html | 22 +-
.../WEB-INF/views/staff/exhibit/config.html | 252 ++++++++++++++----
.../WEB-INF/views/staff/spaces/space.html | 2 +-
8 files changed, 303 insertions(+), 65 deletions(-)
diff --git a/vspace/src/main/java/edu/asu/diging/vspace/core/model/IVSImage.java b/vspace/src/main/java/edu/asu/diging/vspace/core/model/IVSImage.java
index 0e055f5d3..e6faf408d 100644
--- a/vspace/src/main/java/edu/asu/diging/vspace/core/model/IVSImage.java
+++ b/vspace/src/main/java/edu/asu/diging/vspace/core/model/IVSImage.java
@@ -23,6 +23,10 @@ public interface IVSImage extends IVSMedia {
void setHeight(int height);
int getHeight();
+
+ boolean getDisableFlag();
+
+ void toggleDisableFlag();
void setCategories(List categories);
diff --git a/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Exhibition.java b/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Exhibition.java
index a8434a27d..bc117b8b9 100644
--- a/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Exhibition.java
+++ b/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Exhibition.java
@@ -48,15 +48,15 @@ public class Exhibition extends VSpaceElement implements IExhibition {
private String customMessage;
- @OneToOne(targetEntity = VSImage.class)
+ @OneToOne(targetEntity = VSImage.class, cascade = CascadeType.ALL, orphanRemoval=true)
@NotFound(action = NotFoundAction.IGNORE)
private IVSImage spaceLinkDefaultImage;
- @OneToOne(targetEntity = VSImage.class)
+ @OneToOne(targetEntity = VSImage.class, cascade = CascadeType.ALL, orphanRemoval=true)
@NotFound(action = NotFoundAction.IGNORE)
private IVSImage moduleLinkDefaultImage;
- @OneToOne(targetEntity = VSImage.class)
+ @OneToOne(targetEntity = VSImage.class, cascade = CascadeType.ALL, orphanRemoval=true)
@NotFound(action = NotFoundAction.IGNORE)
private IVSImage externalLinkDefaultImage;
diff --git a/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/VSImage.java b/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/VSImage.java
index 2287a0fae..5d30ea89b 100644
--- a/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/VSImage.java
+++ b/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/VSImage.java
@@ -8,7 +8,6 @@
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
-import javax.persistence.Inheritance;
import javax.persistence.Lob;
import javax.persistence.OneToMany;
@@ -34,6 +33,8 @@ public class VSImage extends VSMedia implements IVSImage {
private int height;
private int width;
+
+ private Boolean disableFlag = false;
@OneToMany(targetEntity = Tag.class)
private List tags;
@@ -106,6 +107,16 @@ public void setWidth(int width) {
this.width = width;
}
+ @Override
+ public boolean getDisableFlag() {
+ return disableFlag;
+ }
+
+ @Override
+ public void toggleDisableFlag() {
+ disableFlag = !disableFlag;
+ }
+
@Override
public List getTags() {
return tags;
@@ -126,4 +137,10 @@ public void setCategories(List categories) {
this.categories = categories;
}
+ @Override
+ public String toString() {
+ return "VSImage{" +
+ "disableFlag='" + disableFlag +
+ '}';
+ }
}
diff --git a/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultImageApiController.java b/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultImageApiController.java
index e381e257c..5b07939d6 100644
--- a/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultImageApiController.java
+++ b/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultImageApiController.java
@@ -24,6 +24,7 @@ public class DefaultImageApiController {
public static final String API_DEFAULT_MODULE_IMAGE_PATH = "/api/image/default/link/module/";
public static final String API_DEFAULT_EXTERNAL_IMAGE_PATH = "/api/image/default/link/external/";
public static final String API_DEFAULT_SPACE_IMAGE_STATUS = "/api/exhibition/default/link/image/status/";
+ public static final String API_DEFAULT_IMAGE_DISABLE_STATUS = "/api/exhibition/default/link/image/disableStatus/";
@Autowired
private IImageService imageService;
@@ -67,6 +68,21 @@ public ResponseEntity getDefaultImageStatus() {
jsonObj.addProperty("defaultExternalLinkImageFlag", exhibition.getExternalLinkDefaultImage() != null? true : false);
return new ResponseEntity<>(jsonObj.toString(), HttpStatus.OK);
}
+
+ /**
+ * Retrieves the status of default images for exhibition links
+ * @return A JSON response containing flags indicating the availability of default images.
+ */
+ @RequestMapping(value = API_DEFAULT_IMAGE_DISABLE_STATUS, method = RequestMethod.GET)
+ public ResponseEntity getDefaultImageDisableStatus() {
+ IExhibition exhibition = exhibitManager.getStartExhibition();
+
+ JsonObject jsonObj = new JsonObject();
+ jsonObj.addProperty("defaultSpaceImageDisableFlag", exhibition.getSpaceLinkDefaultImage().getDisableFlag());
+ jsonObj.addProperty("defaultModuleImageDisableFlag", exhibition.getModuleLinkDefaultImage().getDisableFlag());
+ jsonObj.addProperty("defaultExternalImageDisableFlag", exhibition.getExternalLinkDefaultImage().getDisableFlag());
+ return new ResponseEntity<>(jsonObj.toString(), HttpStatus.OK);
+ }
private ResponseEntity getResponseWithDefaultHeaders(IVSImage image) {
if(image == null) {
@@ -79,4 +95,5 @@ private ResponseEntity getResponseWithDefaultHeaders(IVSImage image) {
return new ResponseEntity<>(imageContent, headers, HttpStatus.OK);
}
+
}
diff --git a/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultLinkImageController.java b/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultLinkImageController.java
index 2a9a01988..7e13a6f4f 100644
--- a/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultLinkImageController.java
+++ b/vspace/src/main/java/edu/asu/diging/vspace/web/staff/DefaultLinkImageController.java
@@ -83,13 +83,55 @@ public String deleteLinkImage(@PathVariable("linkType") String linkType, Redirec
IVSImage image = imageGetterMap.get(linkType).get();
if (image == null) {
- System.out.println("HERE1");
attributes.addAttribute("exhibitId", exhibition.getId());
attributes.addAttribute("alertType", "danger");
attributes.addAttribute("message", "Could not delete the default image");
attributes.addAttribute("showAlert", "true");
} else {
- System.out.println("HERE2");
+ imageService.removeImage(image.getId());
+ }
+
+ Map imageDeleterMap = Map.of(
+ "space", exhibition::deleteSpaceLinkDefaultImage,
+ "module", exhibition::deleteModuleLinkDefaultImage,
+ "external", exhibition::deleteExternalLinkDefaultImage
+ );
+
+ Runnable deleteDefautImageMethod = imageDeleterMap.get(linkType);
+ if (deleteDefautImageMethod == null) {
+ attributes.addAttribute("exhibitId", exhibition.getId());
+ attributes.addAttribute("alertType", "danger");
+ attributes.addAttribute("message", "Could not delete the default image");
+ attributes.addAttribute("showAlert", "true");
+ } else {
+ deleteDefautImageMethod.run();
+ exhibition = (Exhibition) exhibitionManager.storeExhibition(exhibition);
+ attributes.addAttribute("exhibitId", exhibition.getId());
+ attributes.addAttribute("alertType", "success");
+ attributes.addAttribute("message", "Successfully deleted the default image!");
+ attributes.addAttribute("showAlert", "true");
+ }
+
+ return "redirect:/staff/exhibit/config";
+ }
+
+ @RequestMapping(value = "/staff/exhibit/config/link/defaultImage/{linkType}", method = RequestMethod.PUT)
+ public String disableLinkImage(@PathVariable("linkType") String linkType, RedirectAttributes attributes) throws IOException {
+ Exhibition exhibition = (Exhibition) exhibitionManager.getStartExhibition();
+
+ Map> imageGetterMap = Map.of(
+ "space", exhibition::getSpaceLinkDefaultImage,
+ "module", exhibition::getModuleLinkDefaultImage,
+ "external", exhibition::getExternalLinkDefaultImage
+ );
+
+ IVSImage image = imageGetterMap.get(linkType).get();
+ if (image == null) {
+ attributes.addAttribute("exhibitId", exhibition.getId());
+ attributes.addAttribute("alertType", "danger");
+ attributes.addAttribute("message", "Could not delete the default image");
+ attributes.addAttribute("showAlert", "true");
+ } else {
imageService.removeImage(image.getId());
}
diff --git a/vspace/src/main/webapp/WEB-INF/views/exhibition/space.html b/vspace/src/main/webapp/WEB-INF/views/exhibition/space.html
index 041bf1fed..ed35e04f6 100644
--- a/vspace/src/main/webapp/WEB-INF/views/exhibition/space.html
+++ b/vspace/src/main/webapp/WEB-INF/views/exhibition/space.html
@@ -226,7 +226,11 @@
});
var defaultSpaceImageFlag;
var defaultModuleImageFlag;
- var defaultExternalLinkImageFlag;
+ var defaultExternalLinkImageFlag;
+
+ var defaultSpaceImageDisableFlag;
+ var defaultModuleImageDisableFlag;
+ var defaultExternalImageDisableFlag;
function toggleImgSize(isClicked){
var maxImgWidth = $(window).width();
@@ -392,6 +396,22 @@
});
}
+ function checkDefaultImageDisabled() {
+ $.ajax({
+ url: "[(@{'/api/exhibition/default/link/image/disableStatus/'})]",
+ type: 'GET',
+ cache : false,
+ contentType : false,
+ success: function(data) {
+ if(data.length > 0){
+ defaultSpaceImageDisableFlag = JSON.parse(data).defaultSpaceImageDisableFlag;
+ defaultModuleImageDisableFlag = JSON.parse(data).defaultModuleImageDisableFlag
+ defaultExternalImageDisableFlag = JSON.parse(data).defaultExternalImageDisableFlag;
+ }
+ }
+ });
+ }
+
function drawLinks() {
var spaceLinks = [[${spaceLinks}]];
var moduleLinks = [[${moduleList}]];
diff --git a/vspace/src/main/webapp/WEB-INF/views/staff/exhibit/config.html b/vspace/src/main/webapp/WEB-INF/views/staff/exhibit/config.html
index eeae7e0bc..14ab577ed 100644
--- a/vspace/src/main/webapp/WEB-INF/views/staff/exhibit/config.html
+++ b/vspace/src/main/webapp/WEB-INF/views/staff/exhibit/config.html
@@ -5,6 +5,23 @@
var offlineMessage = $('#offlineMessage');
var spaceParamExihibit = $('#spaceParamExihibit');
var defaultImages = $('#defaultImages');
+ var defaultSpaceLinkImage = [[${defaultSpaceLinkImage}]];
+ var defaultModuleLinkImage = [[${defaultModuleLinkImage}]];
+ var defaultExternalLinkImage = [[${defaultExternalLinkImage}]];
+ /* onsole.log('DEFAULT SPACE DISBLAE FLAG 1: ', [[${defaultSpaceLinkImage.getDisableFlag()}]]);
+ [[${defaultSpaceLinkImage.toggleDisableFlag()}]];
+ console.log('DEFAULT SPACE DISBLAE FLAG 2: ', [[${defaultSpaceLinkImage.getDisableFlag()}]]); */
+ if ([[${defaultSpaceLinkImage}]]==null) {
+ $('#cancelUploadSpaceImgBtn').attr('disabled', true);
+ }
+
+ if ([[${defaultModuleLinkImage}]]==null) {
+ $('#cancelUploadModuleImgBtn').attr('disabled', true);
+ }
+
+ if ([[${defaultExternalLinkImage}]]==null) {
+ $('#cancelUploadExternalImgBtn').attr('disabled', true);
+ }
if ('[(${exhibition})]' != null && '[(${exhibition.mode})]' == 'OFFLINE') {
offlineMessage.show();
@@ -16,55 +33,77 @@
$("#cancelUploadSpaceImgBtn").click(function() {
document.getElementById('spaceLinkImageBlock').value = null;
closeUploadSpaceLinkImage();
- $('#cancelSpaceImgBtn').attr('disabled', true);
+ $('#cancelUploadSpaceImgBtn').attr('disabled', true);
});
$("#changeSpaceLinkImageBtn").click(function() {
openUploadSpaceLinkImage();
});
+
+ $("#disableSpaceImage").change(function() {
+ if ($(this).val()) {
+ console.log('SPACE DISABLE FLAG 1: ', [[${defaultSpaceLinkImage.getDisableFlag()}]]);
+ [[${defaultSpaceLinkImage.toggleDisableFlag()}]];
+ console.log('SPACE DISABLE FLAG 2: ', [[${defaultSpaceLinkImage.getDisableFlag()}]]);
+ }
+ });
$("#cancelUploadModuleImgBtn").click(function() {
document.getElementById('moduleLinkImageBlock').value = null;
closeUploadModuleLinkImage();
- $('#cancelModuleImgBtn').attr('disabled', true);
+ $('#cancelUploadModuleImgBtn').attr('disabled', true);
});
$("#changeModuleLinkImageBtn").click(function() {
openUploadModuleLinkImage();
});
+
+ $("#disableModuleImage").click(function() {
+ if ($(this).val()) {
+ defaultModuleLinkImage.toggleDisableFlag();
+ console.log('MOD DISABLE FLAG: ', defaultModuleLinkImage.getDisableFlag());
+ }
+ });
$("#cancelUploadExternalImgBtn").click(function() {
document.getElementById('externalLinkImageBlock').value = null;
closeUploadExternalLinkImage();
- $('#cancelExternalImgBtn').attr('disabled', true);
+ $('#cancelUploadExternalImgBtn').attr('disabled', true);
});
$("#changeExternalLinkImageBtn").click(function() {
openUploadExternalLinkImage();
});
+
+ $("#disableExternalImage").change(function() {
+ if ($(this).val()) {
+ defaultExternalLinkImage.toggleDisableFlag();
+ console.log('EXT DISABLE FLAG: ', defaultExternalLinkImage.getDisableFlag());
+ }
+ });
//when input's value changes
$("#spaceLinkImageBlock").change(function() {
if ($(this).val()) {
- $("#cancelSpaceImgBtn").prop("disabled", false);
+ $("#cancelUploadSpaceImgBtn").attr("disabled", false);
} else {
- $("#cancelSpaceImgBtn").prop("disabled", true);
+ $("#cancelUploadSpaceImgBtn").attr("disabled", true);
}
});
$("#moduleLinkImageBlock").change(function() {
if ($(this).val()) {
- $("#cancelModuleImgBtn").prop("disabled", false);
+ $("#cancelUploadModuleImgBtn").attr("disabled", false);
} else {
- $("#cancelModuleImgBtn").prop("disabled", true);
+ $("#cancelUploadModuleImgBtn").attr("disabled", true);
}
});
$("#externalLinkImageBlock").change(function() {
if ($(this).val()) {
- $("#cancelExternalImgBtn").prop("disabled", false);
+ $("#cancelUploadExternalImgBtn").attr("disabled", false);
} else {
- $("#cancelExternalImgBtn").prop("disabled", true);
+ $("#cancelUploadExternalImgBtn").attr("disabled", true);
}
});
@@ -78,6 +117,9 @@
'X-CSRF-Token':token
},
success: function(result) {
+ $("#" + linkType + "LinkImageBlock").css('display', 'none');
+ $("#" + linkType + "UploadLinkImage").css('display', 'block');
+
console.log('SUCCESS!!!!!!');
},
error: function(data) {
@@ -104,33 +146,39 @@
function openUploadSpaceLinkImage() {
- $("#uploadSpaceLinkImage").css('display', 'block');
+ $("#spaceUploadLinkImage").css('display', 'block');
}
function closeUploadSpaceLinkImage() {
- $("#uploadSpaceLinkImage").css('display', 'none');
+ $("#spaceUploadLinkImage").css('display', 'none');
}
function openUploadModuleLinkImage() {
- $("#uploadModuleLinkImage").css('display', 'block');
+ $("#moduleUploadLinkImage").css('display', 'block');
}
function closeUploadModuleLinkImage() {
- $("#uploadModuleLinkImage").css('display', 'none');
+ $("#moduleUploadLinkImage").css('display', 'none');
}
function openUploadExternalLinkImage() {
- $("#uploadExternalLinkImage").css('display', 'block');
+ $("#externalUploadLinkImage").css('display', 'block');
}
function closeUploadExternalLinkImage() {
- $("#uploadExternalLinkImage").css('display', 'none');
+ $("#externalUploadLinkImage").css('display', 'none');
}
@@ -221,27 +334,36 @@ Exhibition Configuration
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-