diff --git a/vspace/pom.xml b/vspace/pom.xml
index c453493ef..d1a8788c9 100644
--- a/vspace/pom.xml
+++ b/vspace/pom.xml
@@ -359,13 +359,13 @@
commons-io
commons-io
- 2.14.0
+ 2.19.0
org.apache.tika
tika-core
- 1.28.3
+ 3.1.0
com.fasterxml.jackson.datatype
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..a8bec1173 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();
@@ -52,4 +58,10 @@ public interface IExhibition extends IVSpaceElement {
void setCustomMessage(String customMessage);
+ void disableSpaceLinkDefaultImage();
+
+ void disableModuleLinkDefaultImage();
+
+ void disableExternalLinkDefaultImage();
+
}
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..8956f0ff0 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
@@ -4,25 +4,29 @@
public interface IVSImage extends IVSMedia {
- String getFilename();
+ String getFilename();
- void setFilename(String filename);
+ void setFilename(String filename);
- String getParentPath();
+ String getParentPath();
- void setParentPath(String parentPath);
+ void setParentPath(String parentPath);
- void setFileType(String fileType);
+ void setFileType(String fileType);
- String getFileType();
+ String getFileType();
- void setWidth(int width);
+ void setWidth(int width);
- int getWidth();
+ int getWidth();
- void setHeight(int height);
+ void setHeight(int height);
- int getHeight();
+ 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 f7c79dfb9..f86f83060 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;
@@ -139,30 +139,67 @@ public void setCustomMessage(String customMessage) {
public IVSImage getSpaceLinkDefaultImage() {
return spaceLinkDefaultImage;
}
+
@Override
public void setSpaceLinkDefaultImage(IVSImage spaceLinkDefaultImage) {
this.spaceLinkDefaultImage = spaceLinkDefaultImage;
}
+
+ @Override
+ public void deleteSpaceLinkDefaultImage() {
+ this.spaceLinkDefaultImage = null;
+ }
+
+ @Override
+ public void disableSpaceLinkDefaultImage() {
+ this.spaceLinkDefaultImage.toggleDisableFlag();
+ }
+
@Override
public IVSImage getModuleLinkDefaultImage() {
return moduleLinkDefaultImage;
}
+
@Override
public void setModuleLinkDefaultImage(IVSImage moduleLinkDefaultImage) {
this.moduleLinkDefaultImage = moduleLinkDefaultImage;
}
+
+ @Override
+ public void deleteModuleLinkDefaultImage() {
+ this.moduleLinkDefaultImage = null;
+ }
+
+ @Override
+ public void disableModuleLinkDefaultImage() {
+ this.moduleLinkDefaultImage.toggleDisableFlag();
+ }
+
@Override
public IVSImage getExternalLinkDefaultImage() {
return externalLinkDefaultImage;
}
+
@Override
public void setExternalLinkDefaultImage(IVSImage externalLinkDefaultImage) {
this.externalLinkDefaultImage = externalLinkDefaultImage;
}
+
+ @Override
+ public void deleteExternalLinkDefaultImage() {
+ this.externalLinkDefaultImage = null;
+ }
+
+ @Override
+ public void disableExternalLinkDefaultImage() {
+ this.externalLinkDefaultImage.toggleDisableFlag();
+ }
+
@Override
public boolean isAboutPageConfigured() {
return aboutPageConfigured;
}
+
@Override
public void setAboutPageConfigured(boolean aboutPageConfigured) {
this.aboutPageConfigured = aboutPageConfigured;
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..8729d44fe 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
@@ -2,13 +2,13 @@
import java.util.List;
+import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.EnumType;
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 +34,9 @@ public class VSImage extends VSMedia implements IVSImage {
private int height;
private int width;
+
+ @Column(name = "disableFlag", nullable = false)
+ private boolean disableFlag = false;
@OneToMany(targetEntity = Tag.class)
private List tags;
@@ -106,6 +109,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 +139,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/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..b749ed2a2 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
@@ -271,7 +271,6 @@ public void removeCategory(IVSImage image, ImageCategory category) {
*/
@Override
public IVSImage storeImage(byte[] image, String filename) {
-
IVSImage storedImage = null;
if (image != null && image.length > 0) {
Tika tika = new Tika();
@@ -305,6 +304,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/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 5660fb415..74e0a7be1 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,20 +1,26 @@
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.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
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;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+import com.google.gson.JsonObject;
+
+import edu.asu.diging.vspace.core.model.IExhibition;
import edu.asu.diging.vspace.core.model.IVSImage;
import edu.asu.diging.vspace.core.model.impl.Exhibition;
import edu.asu.diging.vspace.core.services.IExhibitionManager;
@@ -23,10 +29,11 @@
@Controller
public class DefaultLinkImageController {
- private final Map> imageSetterMap = Map.of(
- "space", Exhibition::setSpaceLinkDefaultImage,
- "module", Exhibition::setModuleLinkDefaultImage,
- "external", Exhibition::setExternalLinkDefaultImage);
+ private final Map> imageSetterMap = Map.of(
+ "space", IExhibition::setSpaceLinkDefaultImage,
+ "module", IExhibition::setModuleLinkDefaultImage,
+ "external", IExhibition::setExternalLinkDefaultImage
+ );
@Autowired
private IExhibitionManager exhibitionManager;
@@ -51,21 +58,118 @@ public String createOrUpdateLinkImage(HttpServletRequest request,
Exhibition exhibition = (Exhibition) exhibitionManager.getStartExhibition();
IVSImage defaultImage = imageService.storeImage(image.getBytes(), image.getOriginalFilename());
- BiConsumer setter = imageSetterMap.get(linkType);
+ BiConsumer setter = imageSetterMap.get(linkType);
if(setter == null) {
attributes.addAttribute("exhibitId", exhibition.getId());
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";
+ }
+
+ /**
+ * To delete the default link images.
+ *
+ * @param linkType - the type of the link for which the default image must be deleted
+ * @param attributes - the RedirectAttributes object to add flash attributes
+ * @return - a RedirectView to the exhibition configuration page
+ * @throws IOException if an input or output error occurs
+ */
+ @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) {
+ attributes.addAttribute("exhibitId", exhibition.getId());
+ attributes.addAttribute("alertType", "danger");
+ attributes.addAttribute("message", "Could not retrieve the default image prior to deleting");
+ attributes.addAttribute("showAlert", "true");
+ } else {
+ 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";
}
+
+ /**
+ * To disable the default link images.
+ *
+ * @param linkType - the type of the link for which the default image must be disabled
+ * @param attributes - the RedirectAttributes object to add flash attributes
+ * @return - a RedirectView to the exhibition configuration page
+ * @throws IOException if an input or output error occurs
+ */
+ @RequestMapping(value = "/staff/exhibit/config/link/defaultImage/{linkType}", method = RequestMethod.PUT)
+ public ResponseEntity disableLinkImage(@PathVariable("linkType") String linkType, RedirectAttributes attributes) throws IOException {
+ Exhibition exhibition = (Exhibition) exhibitionManager.getStartExhibition();
+ JsonObject jsonObj = new JsonObject();
+
+ Map> imageGetterMap = Map.of(
+ "space", exhibition::getSpaceLinkDefaultImage,
+ "module", exhibition::getModuleLinkDefaultImage,
+ "external", exhibition::getExternalLinkDefaultImage
+ );
+
+ IVSImage image = imageGetterMap.get(linkType).get();
+ if (image == null) {
+ String errorMessage = "Could not retrieve the default image prior to disabling";
+ return ResponseEntity.badRequest().body(errorMessage);
+ }
+
+ Map imageDisablerMap = Map.of(
+ "space", exhibition::disableSpaceLinkDefaultImage,
+ "module", exhibition::disableModuleLinkDefaultImage,
+ "external", exhibition::disableExternalLinkDefaultImage
+ );
+
+ Runnable disableDefautImageMethod = imageDisablerMap.get(linkType);
+ if (disableDefautImageMethod == null) {
+ String errorMessage = "Could not disable the default image";
+ return ResponseEntity.badRequest().body(errorMessage);
+ } else {
+ disableDefautImageMethod.run();
+ exhibitionManager.storeExhibition(exhibition);
+ jsonObj.addProperty("defaultImageDisableFlag", image.getDisableFlag());
+ }
+
+ return new ResponseEntity<>(jsonObj.toString(), HttpStatus.OK);
+
+ }
}
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 4e6a1c6db..f5541886e 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
@@ -1,10 +1,7 @@
package edu.asu.diging.vspace.web.staff;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
@@ -12,8 +9,6 @@
import org.javers.common.collections.Arrays;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
@@ -21,7 +16,6 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.view.RedirectView;
@@ -31,10 +25,8 @@
import edu.asu.diging.vspace.core.model.ExhibitionModes;
import edu.asu.diging.vspace.core.model.IExhibition;
import edu.asu.diging.vspace.core.model.ISpace;
-import edu.asu.diging.vspace.core.model.IVSImage;
import edu.asu.diging.vspace.core.model.impl.Exhibition;
import edu.asu.diging.vspace.core.services.IExhibitionManager;
-import edu.asu.diging.vspace.core.services.IImageService;
import edu.asu.diging.vspace.core.services.ISpaceManager;
import edu.asu.diging.vspace.web.staff.forms.ExhibitionConfigurationForm;
import edu.asu.diging.vspace.core.services.impl.ExhibitionManager;
@@ -54,9 +46,6 @@ public class ExhibitionConfigurationController {
@Autowired
private ExhibitionFactory exhibitFactory;
- @Autowired
- private IImageService imageService;
-
@Autowired
private ExhibitionLanguageConfig exhibitionLanguageConfig;
@@ -80,9 +69,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/exhibition/space.html b/vspace/src/main/webapp/WEB-INF/views/exhibition/space.html
index 041bf1fed..fc92c978c 100644
--- a/vspace/src/main/webapp/WEB-INF/views/exhibition/space.html
+++ b/vspace/src/main/webapp/WEB-INF/views/exhibition/space.html
@@ -218,6 +218,7 @@
$(function () {
$('[data-toggle="tooltip"]').tooltip()
checkDefaultImage();
+ checkDefaultImageDisabled()
const textBlock = document.getElementsByClassName("textBlock");
const color = textBlock.style.borderColor;
textBlock.addEventListener('focus-visible', function(e) {
@@ -226,7 +227,11 @@
});
var defaultSpaceImageFlag;
var defaultModuleImageFlag;
- var defaultExternalLinkImageFlag;
+ var defaultExternalLinkImageFlag;
+
+ var defaultSpaceImageDisableFlag;
+ var defaultModuleImageDisableFlag;
+ var defaultExternalImageDisableFlag;
function toggleImgSize(isClicked){
var maxImgWidth = $(window).width();
@@ -370,9 +375,11 @@
$(".Info_cz_Class").remove();
drawLinks();
checkDefaultImage();
+ checkDefaultImageDisabled()
});
drawLinks();
checkDefaultImage();
+ checkDefaultImageDisabled()
toggleImgSize(false);
});
@@ -392,6 +399,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}]];
@@ -420,7 +443,7 @@
var spaceImageURL = [[@{/api/image/}]]+link.image.id;
linkDisplay = $('
');
}
- else if(defaultSpaceImageFlag === true) {
+ else if(defaultSpaceImageFlag === true && defaultSpaceImageDisableFlag === false) {
var defaultSpaceLinkImageURL = [[@{/api/image/default/link/space/}]];
linkDisplay = $('
'+link.link.name+' ');
}
@@ -450,17 +473,18 @@
var posY = $("#space").position().top;
var moduleLink = $('');
var moduleLinkURL = null;
+ console.log('defaultModuleImageDisableFlag: ', defaultModuleImageDisableFlag);
if(isExhPreview=== true){
moduleLinkURL = [[@{|/preview/${previewId}/${space?.id}/module/|}]]+link.link.module.id;
} else{
moduleLinkURL = [[@{|/exhibit/${space?.id}/module/|}]]+link.link.module.id;
}
moduleLink.attr("href", moduleLinkURL);
- var linkDisplay = $(''+link.link.name+'
');
+ var linkDisplay = $(''+link.link.name+'
');
if(link.type=="IMAGE" && link.image != null){
var moduleImageURL = [[@{/api/image/}]]+link.image.id;
linkDisplay = $('
');
- } else if(defaultModuleImageFlag === true){
+ } else if(defaultModuleImageFlag === true && defaultModuleImageDisableFlag === false){
var defaultModuleURL = [[@{/api/image/default/link/module/}]];
linkDisplay = $('
'+link.link.name+' ');
}
@@ -502,7 +526,7 @@
var extImageURL = [[@{/api/image/}]]+link.image.id;
linkDisplay = $('
');
}
- else if(defaultExternalLinkImageFlag === true){
+ else if(defaultExternalLinkImageFlag === true && defaultExternalImageDisableFlag === false){
var defaultExternalLinkURL = [[@{/api/image/default/link/external/}]];
linkDisplay = $('
'+link.externalLink.name+' ');
}
@@ -651,19 +675,19 @@
[[${module.link.name}]]
+ th:href="@{'/exhibit/'+${space?.id}+'/module/'+${module.link.module?.id}}">
[[${module.link.name}]]
[[${module.link.module.name}]]
+ th:href="@{'/exhibit/'+${space?.id}+'/module/'+${module.link.module?.id}}">
[[${module.link.module.name}]]
[[${module.link.name}]]
+ th:href="@{'/preview/'+${previewId}+'/'+${space?.id}+'/module/'+${module.link.module?.id}}">
[[${module.link.name}]]
[[${module.link.module.name}]]
+ th:href="@{'/preview/'+${previewId}+'/'+${space?.id}+'/module/'+${module.link.module?.id}}">
[[${module.link.module.name}]]
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 acf032389..bb0e06efc 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
@@ -9,6 +9,37 @@
var spaceParamExihibit = $('#spaceParamExihibit');
var defaultImages = $('#defaultImages');
+ // Disable the cancel button if there is nothing to cancel, set intial position for disable slider
+ if ([[${defaultSpaceLinkImage}]]==null) {
+ $('#spaceCancelBtn').attr('disabled', true);
+ } else {
+ if ([[${defaultSpaceLinkImage?.getDisableFlag()}]]) {
+ $('#disableSpaceLinkImage').prop('checked', false);
+ } else {
+ $('#disableSpaceLinkImage').prop('checked', true);
+ }
+ }
+
+ if ([[${defaultModuleLinkImage}]]==null) {
+ $('#moduleCancelBtn').attr('disabled', true);
+ } else {
+ if ([[${defaultModuleLinkImage?.getDisableFlag()}]]) {
+ $('#disableModuleLinkImage').prop('checked', false);
+ } else {
+ $('#disableModuleLinkImage').prop('checked', true);
+ }
+ }
+
+ if ([[${defaultExternalLinkImage}]]==null) {
+ $('#externalCancelBtn').attr('disabled', true);
+ } else {
+ if ([[${defaultExternalLinkImage?.getDisableFlag()}]]) {
+ $('#disableExternalLinkImage').prop('checked', false);
+ } else {
+ $('#disableExternalLinkImage').prop('checked', true);
+ }
+ }
+
if ('[(${exhibition})]' != null && '[(${exhibition.mode})]' == 'OFFLINE') {
offlineMessage.show();
} else {
@@ -16,45 +47,96 @@
}
$("#changeBgImgAlert").show();
- $("#cancelSpaceImgBtn").click(function() {
- document.getElementById('spaceLinkImage').value = null;
- $('#cancelSpaceImgBtn').attr('disabled', true);
+ $("#spaceCancelBtn").click(function() {
+ document.getElementById('spaceLinkImageBlock').value = null;
+ closeUploadSpaceLinkImage();
+ $('#spaceCancelBtn').attr('disabled', true);
+ });
+
+ $("#changeSpaceLinkImageBtn").click(function() {
+ openUploadSpaceLinkImage();
});
- $("#cancelModuleImgBtn").click(function() {
- document.getElementById('moduleLinkImage').value = null;
- $('#cancelModuleImgBtn').attr('disabled', true);
+ $("#moduleCancelBtn").click(function() {
+ document.getElementById('moduleLinkImageBlock').value = null;
+ closeUploadModuleLinkImage();
+ $('#moduleCancelBtn').attr('disabled', true);
+ });
+
+ $("#changeModuleLinkImageBtn").click(function() {
+ openUploadModuleLinkImage();
});
- $("#cancelExternalImgBtn").click(function() {
- document.getElementById('externalLinkImage').value = null;
- $('#cancelExternalImgBtn').attr('disabled', true);
+ $("#externalCancelBtn").click(function() {
+ document.getElementById('externalLinkImageBlock').value = null;
+ closeUploadExternalLinkImage();
+ $('#externalCancelBtn').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);
+ $("#spaceCancelBtn").attr("disabled", false);
} else {
- $("#cancelSpaceImgBtn").prop("disabled", true);
+ $("#spaceCancelBtn").attr("disabled", true);
}
});
- $("#moduleLinkImage").change(function() {
+ $("#moduleLinkImageBlock").change(function() {
if ($(this).val()) {
- $("#cancelModuleImgBtn").prop("disabled", false);
+ $("#moduleCancelBtn").attr("disabled", false);
} else {
- $("#cancelModuleImgBtn").prop("disabled", true);
+ $("#moduleCancelBtn").attr("disabled", true);
}
});
- $("#externalLinkImage").change(function() {
+ $("#externalLinkImageBlock").change(function() {
if ($(this).val()) {
- $("#cancelExternalImgBtn").prop("disabled", false);
+ $("#externalCancelBtn").attr("disabled", false);
} else {
- $("#cancelExternalImgBtn").prop("disabled", true);
+ $("#externalCancelBtn").attr("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) {
+ $("#" + linkType + "LinkImageBlock").css('display', 'none');
+ $("#" + linkType + "UploadLinkImage").css('display', 'block');
+ $("#" + linkType + "CancelBtn").attr("disabled", true);
+ },
+ error: function(data) {
+ }
+ });
+ });
+
+ $(".disableDefaultLinkImage").click(function() {
+ var linkType = $(this).attr('link-type');
+ var token = [[${_csrf.token}]];
+ $.ajax({
+ dataType: 'json',
+ url: "[(@{/staff/exhibit/config/link/defaultImage/})]"+linkType,
+ type: 'PUT',
+ headers:{
+ 'X-CSRF-Token':token
+ },
+ success: function(result) {
+ },
+ error: function(data) {
+ }
+ });
+ });
});
function modeChange(modeChosen) {
@@ -71,38 +153,141 @@
var defaultImages = $('#defaultImages');
defaultImages.show();
}
+
+
+ function openUploadSpaceLinkImage() {
+ $("#spaceUploadLinkImage").css('display', 'block');
+ }
- function defaultLinkModuleImages() {
- $("#uploadModuleLinkImage").css('display', 'block');
+ function closeUploadSpaceLinkImage() {
+ $("#spaceUploadLinkImage").css('display', 'none');
}
- function defaultLinkExternalImages() {
- $("#uploadExternalLinkImage").css('display', 'block');
+ function openUploadModuleLinkImage() {
+ $("#moduleUploadLinkImage").css('display', 'block');
}
- function openUploadSpaceLinkDefaultImgBlock() {
- $("#uploadSpaceLinkImage").css('display', 'block');
+
+ function closeUploadModuleLinkImage() {
+ $("#moduleUploadLinkImage").css('display', 'none');
}
+
+ function openUploadExternalLinkImage() {
+ $("#externalUploadLinkImage").css('display', 'block');
+ }
+
+
+ function closeUploadExternalLinkImage() {
+ $("#externalUploadLinkImage").css('display', 'none');
+ }
+
@@ -161,25 +346,37 @@ Exhibition Configuration
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-