Bugfixes for RelatedInfoStep
parent
30320485d4
commit
80cf9143ee
|
|
@ -21,6 +21,7 @@ package org.librecms.ui.contentsections.assets;
|
||||||
import org.libreccm.api.Identifier;
|
import org.libreccm.api.Identifier;
|
||||||
import org.libreccm.api.IdentifierParser;
|
import org.libreccm.api.IdentifierParser;
|
||||||
import org.libreccm.security.AuthorizationRequired;
|
import org.libreccm.security.AuthorizationRequired;
|
||||||
|
import org.libreccm.ui.BaseUrl;
|
||||||
import org.librecms.assets.ExternalAudioAsset;
|
import org.librecms.assets.ExternalAudioAsset;
|
||||||
import org.librecms.assets.LegalMetadata;
|
import org.librecms.assets.LegalMetadata;
|
||||||
import org.librecms.contentsection.AssetRepository;
|
import org.librecms.contentsection.AssetRepository;
|
||||||
|
|
@ -69,6 +70,9 @@ public class ExternalAudioAssetEditStep extends BookmarkEditStep {
|
||||||
@Inject
|
@Inject
|
||||||
private AssetUi assetUi;
|
private AssetUi assetUi;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private BaseUrl baseUrl;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ExternalAudioAssetEditStepModel editStepModel;
|
private ExternalAudioAssetEditStepModel editStepModel;
|
||||||
|
|
||||||
|
|
@ -80,7 +84,7 @@ public class ExternalAudioAssetEditStep extends BookmarkEditStep {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Models models;
|
private Models models;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<? extends MvcAssetEditStep> getStepClass() {
|
public Class<? extends MvcAssetEditStep> getStepClass() {
|
||||||
return ExternalAudioAssetEditStep.class;
|
return ExternalAudioAssetEditStep.class;
|
||||||
|
|
@ -96,16 +100,7 @@ public class ExternalAudioAssetEditStep extends BookmarkEditStep {
|
||||||
getExternalAudioAsset().getLegalMetadata()
|
getExternalAudioAsset().getLegalMetadata()
|
||||||
);
|
);
|
||||||
|
|
||||||
final StringBuilder baseUrlBuilder = new StringBuilder();
|
editStepModel.setBaseUrl(baseUrl.getBaseUrl(request));
|
||||||
editStepModel.setBaseUrl(
|
|
||||||
baseUrlBuilder
|
|
||||||
.append(request.getScheme())
|
|
||||||
.append("://")
|
|
||||||
.append(request.getServerName())
|
|
||||||
.append(addServerPortToBaseUrl())
|
|
||||||
.append(addContextPathToBaseUrl())
|
|
||||||
.toString()
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
throw new AssetNotFoundException(
|
throw new AssetNotFoundException(
|
||||||
assetUi.showAssetNotFound(
|
assetUi.showAssetNotFound(
|
||||||
|
|
@ -229,21 +224,4 @@ public class ExternalAudioAssetEditStep extends BookmarkEditStep {
|
||||||
return "org/librecms/ui/contentsection/assets/external-audio-asset/legal-metadata-not-found.xhtml";
|
return "org/librecms/ui/contentsection/assets/external-audio-asset/legal-metadata-not-found.xhtml";
|
||||||
}
|
}
|
||||||
|
|
||||||
private String addServerPortToBaseUrl() {
|
|
||||||
if (request.getServerPort() == 80 || request.getServerPort() == 443) {
|
|
||||||
return "";
|
|
||||||
} else {
|
|
||||||
return String.format(":%d", request.getServerPort());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String addContextPathToBaseUrl() {
|
|
||||||
if (request.getServletContext().getContextPath() == null
|
|
||||||
|| request.getServletContext().getContextPath().isEmpty()) {
|
|
||||||
return "/";
|
|
||||||
} else {
|
|
||||||
return request.getServletContext().getContextPath();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,6 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.librecms.ui.contentsections.documents.ItemAttachmentDto;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A data transfer object used by the template for the listing of the
|
* A data transfer object used by the template for the listing of the
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
* MA 02110-1301 USA
|
* MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
package org.librecms.ui.contentsections.documents;
|
package org.librecms.ui.contentsections.documents.relatedinfo;
|
||||||
|
|
||||||
import org.libreccm.l10n.GlobalizationHelper;
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
import org.librecms.contentsection.ItemAttachment;
|
import org.librecms.contentsection.ItemAttachment;
|
||||||
|
|
@ -49,6 +49,11 @@ public class ItemAttachmentDto {
|
||||||
*/
|
*/
|
||||||
private String assetType;
|
private String assetType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The UUID of the attachment asset.
|
||||||
|
*/
|
||||||
|
private String assetUuid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The title of the asset assigned to an content item. This value is
|
* The title of the asset assigned to an content item. This value is
|
||||||
* determined from the title of the asset using {@link GlobalizationHelper#getValueFromLocalizedString(org.libreccm.l10n.LocalizedString)
|
* determined from the title of the asset using {@link GlobalizationHelper#getValueFromLocalizedString(org.libreccm.l10n.LocalizedString)
|
||||||
|
|
@ -106,8 +111,16 @@ public class ItemAttachmentDto {
|
||||||
return internalLink;
|
return internalLink;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLink(final boolean internalLink) {
|
public void setInternalLink(final boolean internalLink) {
|
||||||
this.internalLink = internalLink;
|
this.internalLink = internalLink;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getAssetUuid() {
|
||||||
|
return assetUuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssetUuid(final String assetUuid) {
|
||||||
|
this.assetUuid = assetUuid;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -42,6 +42,8 @@ import javax.inject.Named;
|
||||||
@Named("CmsLinkDetailsModel")
|
@Named("CmsLinkDetailsModel")
|
||||||
public class LinkDetailsModel {
|
public class LinkDetailsModel {
|
||||||
|
|
||||||
|
private String baseUrl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The identifier of the {@link AttachmentList} of the link.
|
* The identifier of the {@link AttachmentList} of the link.
|
||||||
*/
|
*/
|
||||||
|
|
@ -64,6 +66,8 @@ public class LinkDetailsModel {
|
||||||
|
|
||||||
private String linkType;
|
private String linkType;
|
||||||
|
|
||||||
|
private Map<String, String> linkTypes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The UUID of the target item of the link.
|
* The UUID of the target item of the link.
|
||||||
*/
|
*/
|
||||||
|
|
@ -87,6 +91,14 @@ public class LinkDetailsModel {
|
||||||
*/
|
*/
|
||||||
private String targetItemTitle;
|
private String targetItemTitle;
|
||||||
|
|
||||||
|
public String getBaseUrl() {
|
||||||
|
return baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBaseUrl(final String baseUrl) {
|
||||||
|
this.baseUrl = baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
public String getListIdentifier() {
|
public String getListIdentifier() {
|
||||||
return listIdentifier;
|
return listIdentifier;
|
||||||
}
|
}
|
||||||
|
|
@ -216,4 +228,12 @@ public class LinkDetailsModel {
|
||||||
this.targetItemTitle = targetItemTitle;
|
this.targetItemTitle = targetItemTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getLinkTypes() {
|
||||||
|
return Collections.unmodifiableMap(linkTypes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLinkTypes(final Map<String, String> linkTypes) {
|
||||||
|
this.linkTypes = new HashMap<>(linkTypes);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,9 @@ import org.librecms.ui.contentsections.ContentSectionNotFoundException;
|
||||||
import org.libreccm.api.Identifier;
|
import org.libreccm.api.Identifier;
|
||||||
import org.libreccm.api.IdentifierParser;
|
import org.libreccm.api.IdentifierParser;
|
||||||
import org.libreccm.l10n.GlobalizationHelper;
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
|
import org.libreccm.l10n.LocalizedTextsUtil;
|
||||||
import org.libreccm.security.PermissionChecker;
|
import org.libreccm.security.PermissionChecker;
|
||||||
import org.librecms.assets.AssetTypeInfo;
|
import org.libreccm.ui.BaseUrl;
|
||||||
import org.librecms.assets.AssetTypesManager;
|
import org.librecms.assets.AssetTypesManager;
|
||||||
import org.librecms.assets.RelatedLink;
|
import org.librecms.assets.RelatedLink;
|
||||||
import org.librecms.contentsection.Asset;
|
import org.librecms.contentsection.Asset;
|
||||||
|
|
@ -58,14 +59,17 @@ import org.librecms.ui.contentsections.documents.AbstractMvcAuthoringStep;
|
||||||
import org.librecms.ui.contentsections.documents.DefaultAuthoringStepConstants;
|
import org.librecms.ui.contentsections.documents.DefaultAuthoringStepConstants;
|
||||||
import org.librecms.ui.contentsections.documents.DocumentNotFoundException;
|
import org.librecms.ui.contentsections.documents.DocumentNotFoundException;
|
||||||
import org.librecms.ui.contentsections.documents.DocumentUi;
|
import org.librecms.ui.contentsections.documents.DocumentUi;
|
||||||
import org.librecms.ui.contentsections.documents.ItemAttachmentDto;
|
|
||||||
import org.librecms.ui.contentsections.documents.MvcAuthoringStepDef;
|
import org.librecms.ui.contentsections.documents.MvcAuthoringStepDef;
|
||||||
import org.librecms.ui.contentsections.documents.MvcAuthoringSteps;
|
import org.librecms.ui.contentsections.documents.MvcAuthoringSteps;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.ws.rs.core.Context;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authoring step for managing the {@link AttachmentList} and
|
* Authoring step for managing the {@link AttachmentList} and
|
||||||
* {@link ItemAttachment}s assigned to a {@link ContentItem}.
|
* {@link ItemAttachment}s assigned to a {@link ContentItem}.
|
||||||
|
|
@ -129,9 +133,15 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
|
||||||
@Inject
|
@Inject
|
||||||
private AttachmentListRepository listRepo;
|
private AttachmentListRepository listRepo;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private BaseUrl baseUrl;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private DocumentUi documentUi;
|
private DocumentUi documentUi;
|
||||||
|
|
||||||
|
@Context
|
||||||
|
private HttpServletRequest request;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Model for the details view of an internal {@link RelatedLink}.
|
* Model for the details view of an internal {@link RelatedLink}.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1139,7 +1149,7 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
|
||||||
link.getBookmark().getDisplayName()
|
link.getBookmark().getDisplayName()
|
||||||
);
|
);
|
||||||
linkDetailsModel.setBookmarkUuid(link.getBookmark().getUuid());
|
linkDetailsModel.setBookmarkUuid(link.getBookmark().getUuid());
|
||||||
} else if (link.getTargetItem() != null){
|
} else if (link.getTargetItem() != null) {
|
||||||
linkDetailsModel.setLinkType("internal");
|
linkDetailsModel.setLinkType("internal");
|
||||||
linkDetailsModel.setTargetItemName(
|
linkDetailsModel.setTargetItemName(
|
||||||
link.getTargetItem().getDisplayName()
|
link.getTargetItem().getDisplayName()
|
||||||
|
|
@ -1153,9 +1163,28 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
|
||||||
link.getTargetItem().getUuid()
|
link.getTargetItem().getUuid()
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
linkDetailsModel.setLinkType("");
|
linkDetailsModel.setLinkType("--none--");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
linkDetailsModel.setBaseUrl(baseUrl.getBaseUrl(request));
|
||||||
|
|
||||||
|
final LocalizedTextsUtil textsUtil = globalizationHelper
|
||||||
|
.getLocalizedTextsUtil(DefaultAuthoringStepConstants.BUNDLE);
|
||||||
|
final Map<String, String> linkTypes = new LinkedHashMap<>();
|
||||||
|
linkTypes.put(
|
||||||
|
"--none--",
|
||||||
|
textsUtil.getText("relatedinfo.links.type.none_selected")
|
||||||
|
);
|
||||||
|
linkTypes.put(
|
||||||
|
"external",
|
||||||
|
textsUtil.getText("relatedinfo.links.type.external")
|
||||||
|
);
|
||||||
|
linkTypes.put(
|
||||||
|
"internal",
|
||||||
|
textsUtil.getText("relatedinfo.links.type.internal")
|
||||||
|
);
|
||||||
|
linkDetailsModel.setLinkTypes(linkTypes);
|
||||||
|
|
||||||
linkDetailsModel.setTitle(
|
linkDetailsModel.setTitle(
|
||||||
link
|
link
|
||||||
.getTitle()
|
.getTitle()
|
||||||
|
|
@ -1352,7 +1381,11 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
|
||||||
assetRepo.save(link);
|
assetRepo.save(link);
|
||||||
|
|
||||||
return buildRedirectPathForStep(
|
return buildRedirectPathForStep(
|
||||||
String.format("/attachmentlists/%s/@details", list.getName())
|
String.format(
|
||||||
|
"/attachmentlists/%s/links/%s/@details",
|
||||||
|
list.getName(),
|
||||||
|
link.getUuid()
|
||||||
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return documentUi.showAccessDenied(
|
return documentUi.showAccessDenied(
|
||||||
|
|
@ -1435,7 +1468,11 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
|
||||||
assetRepo.save(link);
|
assetRepo.save(link);
|
||||||
|
|
||||||
return buildRedirectPathForStep(
|
return buildRedirectPathForStep(
|
||||||
String.format("/attachmentlists/%s/@details", list.getName())
|
String.format(
|
||||||
|
"/attachmentlists/%s/links/%s/@details",
|
||||||
|
list.getName(),
|
||||||
|
link.getUuid()
|
||||||
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return documentUi.showAccessDenied(
|
return documentUi.showAccessDenied(
|
||||||
|
|
@ -1516,7 +1553,11 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
|
||||||
assetRepo.save(link);
|
assetRepo.save(link);
|
||||||
|
|
||||||
return buildRedirectPathForStep(
|
return buildRedirectPathForStep(
|
||||||
String.format("/attachmentlists/%s/@details", list.getName())
|
String.format(
|
||||||
|
"/attachmentlists/%s/links/%s/@details",
|
||||||
|
list.getName(),
|
||||||
|
link.getUuid()
|
||||||
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return documentUi.showAccessDenied(
|
return documentUi.showAccessDenied(
|
||||||
|
|
@ -1945,25 +1986,39 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
|
||||||
final ItemAttachment<?> itemAttachment
|
final ItemAttachment<?> itemAttachment
|
||||||
) {
|
) {
|
||||||
final ItemAttachmentDto dto = new ItemAttachmentDto();
|
final ItemAttachmentDto dto = new ItemAttachmentDto();
|
||||||
final AssetTypeInfo assetTypeInfo = assetTypesManager
|
|
||||||
.getAssetTypeInfo(itemAttachment.getAsset().getClass());
|
|
||||||
dto.setAssetType(
|
dto.setAssetType(
|
||||||
globalizationHelper
|
Optional
|
||||||
.getLocalizedTextsUtil(assetTypeInfo.getLabelBundle())
|
.ofNullable(itemAttachment.getAsset())
|
||||||
.getText(assetTypeInfo.getLabelKey())
|
.map(Asset::getClass)
|
||||||
|
.map(clazz -> assetTypesManager.getAssetTypeInfo(clazz))
|
||||||
|
.map(
|
||||||
|
info -> globalizationHelper.getLocalizedTextsUtil(
|
||||||
|
info.getLabelBundle()).getText(info.getLabelKey())
|
||||||
|
).orElse("")
|
||||||
|
);
|
||||||
|
dto.setAssetUuid(
|
||||||
|
Optional
|
||||||
|
.ofNullable(itemAttachment.getAsset())
|
||||||
|
.map(Asset::getUuid)
|
||||||
|
.orElse(null)
|
||||||
);
|
);
|
||||||
dto.setAttachmentId(itemAttachment.getAttachmentId());
|
dto.setAttachmentId(itemAttachment.getAttachmentId());
|
||||||
dto.setLink(
|
dto.setInternalLink(
|
||||||
itemAttachment.getAsset() instanceof RelatedLink
|
itemAttachment.getAsset() != null
|
||||||
|
&& itemAttachment.getAsset() instanceof RelatedLink
|
||||||
&& ((RelatedLink) itemAttachment.getAsset()).getTargetItem()
|
&& ((RelatedLink) itemAttachment.getAsset()).getTargetItem()
|
||||||
!= null
|
!= null
|
||||||
);
|
);
|
||||||
dto.setSortKey(itemAttachment.getSortKey());
|
dto.setSortKey(itemAttachment.getSortKey());
|
||||||
dto.setTitle(
|
dto.setTitle(
|
||||||
globalizationHelper
|
Optional
|
||||||
.getValueFromLocalizedString(
|
.ofNullable(itemAttachment.getAsset())
|
||||||
itemAttachment.getAsset().getTitle()
|
.map(
|
||||||
|
asset -> globalizationHelper.getValueFromLocalizedString(
|
||||||
|
asset.getTitle()
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
.orElse("")
|
||||||
);
|
);
|
||||||
dto.setUuid(itemAttachment.getUuid());
|
dto.setUuid(itemAttachment.getUuid());
|
||||||
return dto;
|
return dto;
|
||||||
|
|
|
||||||
|
|
@ -24,14 +24,14 @@
|
||||||
addDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add_dialog.title']}"
|
addDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add_dialog.title']}"
|
||||||
addDialogValueHelp="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add.value.help']}"
|
addDialogValueHelp="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add.value.help']}"
|
||||||
addDialogValueLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add.value.label']}"
|
addDialogValueLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add.value.label']}"
|
||||||
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@authoringSteps/relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@add"
|
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@add"
|
||||||
editButtonLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.button_label']}"
|
editButtonLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.button_label']}"
|
||||||
editDialogCancelLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.cancel']}"
|
editDialogCancelLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.cancel']}"
|
||||||
editDialogSubmitLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.submit']}"
|
editDialogSubmitLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.submit']}"
|
||||||
editDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit_dialog.title']}"
|
editDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit_dialog.title']}"
|
||||||
editDialogValueHelp="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.value.help']}"
|
editDialogValueHelp="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.value.help']}"
|
||||||
editDialogValueLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.value.label']}"
|
editDialogValueLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.value.label']}"
|
||||||
editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@authoringSteps/relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@edit"
|
editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@edit"
|
||||||
editorId="link-title-editor"
|
editorId="link-title-editor"
|
||||||
hasUnusedLocales="#{!CmsLinkDetailsModel.unusedTitleLocales.isEmpty()}"
|
hasUnusedLocales="#{!CmsLinkDetailsModel.unusedTitleLocales.isEmpty()}"
|
||||||
headingLevel="3"
|
headingLevel="3"
|
||||||
|
|
@ -41,49 +41,23 @@
|
||||||
removeDialogSubmitLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.submit']}"
|
removeDialogSubmitLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.submit']}"
|
||||||
removeDialogText="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.text']}"
|
removeDialogText="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.text']}"
|
||||||
removeDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.title']}"
|
removeDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.title']}"
|
||||||
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@authoringSteps/relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@remove"
|
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@remove"
|
||||||
title="#{CmsDefaultStepsMessageBundle['relatedinfo.link.details.title_editor.title']}"
|
title="#{CmsDefaultStepsMessageBundle['relatedinfo.link.details.title_editor.title']}"
|
||||||
unusedLocales="#{CmsLinkDetailsModel.unusedTitleLocales}"
|
unusedLocales="#{CmsLinkDetailsModel.unusedTitleLocales}"
|
||||||
values="#{CmsLinkDetailsModel.title}"
|
values="#{CmsLinkDetailsModel.title}"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<form>
|
<form>
|
||||||
<fieldset aria-describedby="linktype-help"
|
<bootstrap:formGroupSelect
|
||||||
class="form-group">
|
help="#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.help']}"
|
||||||
<div class="row">
|
inputId="link-type-select"
|
||||||
<legend class="col-form-label col-sm-2 pt-0">#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.label']}</legend>
|
label="#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.label']}"
|
||||||
<div class="col-sm-10">
|
name="linkType"
|
||||||
<div class="form-check">
|
options="#{CmsLinkDetailsModel.linkTypes}"
|
||||||
<input
|
selectedOptions="#{[CmsLinkDetailsModel.linkType]}"
|
||||||
checked="#{'internal'.equals(selectedType)}"
|
/>
|
||||||
class="form-check-input link-type-select"
|
|
||||||
id="linktype-internal"
|
|
||||||
name="linkType"
|
|
||||||
type="radio"
|
|
||||||
value="internal"
|
|
||||||
/>
|
|
||||||
<label for="linktype-internal">#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.internal']}</label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input
|
|
||||||
checked="#{'external'.equals(selectedType)}"
|
|
||||||
class="form-check-input link-type-select"
|
|
||||||
id="linktype-internal"
|
|
||||||
name="linkType"
|
|
||||||
type="radio"
|
|
||||||
value="external"
|
|
||||||
/>
|
|
||||||
<label for="linktype-internal">#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.external']}</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<small class="form-text text-muted"
|
|
||||||
id="linktype-help">
|
|
||||||
#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.help']}
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<h3>#{CmsDefaultStepsMessageBundle['relatedinfo.link.details.title.target']}</h3>
|
<h3>#{CmsDefaultStepsMessageBundle['relatedinfo.link.details.title.target']}</h3>
|
||||||
|
|
||||||
<div class="d-none relatedlink-target"
|
<div class="d-none relatedlink-target"
|
||||||
|
|
@ -101,7 +75,7 @@
|
||||||
actionUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/details/@set-target-bookmark"
|
actionUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/details/@set-target-bookmark"
|
||||||
assetType="#{CmsLinkDetailsModel.bookmarkType}"
|
assetType="#{CmsLinkDetailsModel.bookmarkType}"
|
||||||
assetPickerId="bookmark-picker"
|
assetPickerId="bookmark-picker"
|
||||||
baseUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo-service"
|
baseUrl="#{CmsLinkDetailsModel.baseUrl}"
|
||||||
contentSection="#{CmsLinkDetailsModel.sectionName}"
|
contentSection="#{CmsLinkDetailsModel.sectionName}"
|
||||||
formParamName="bookmarkIdentifier"
|
formParamName="bookmarkIdentifier"
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -446,7 +446,7 @@
|
||||||
var="attachment">
|
var="attachment">
|
||||||
<li class="cms-attachment list-group-item mb-3 d-flex justify-content-between"
|
<li class="cms-attachment list-group-item mb-3 d-flex justify-content-between"
|
||||||
data-id="#{attachment.uuid}">
|
data-id="#{attachment.uuid}">
|
||||||
<div class="cms-attachment-label">#{attachment.name}</div>
|
<div class="cms-attachment-label">#{attachment.title}</div>
|
||||||
<div class="cms-attachment-buttons">
|
<div class="cms-attachment-buttons">
|
||||||
<button class="btn btn-secondary cms-sort-handle"
|
<button class="btn btn-secondary cms-sort-handle"
|
||||||
type="button">
|
type="button">
|
||||||
|
|
@ -459,7 +459,7 @@
|
||||||
<span class="sr-only">#{CmsDefaultStepsMessageBundle['relatedinfo.attachments.info.button']}"</span>
|
<span class="sr-only">#{CmsDefaultStepsMessageBundle['relatedinfo.attachments.info.button']}"</span>
|
||||||
</button>
|
</button>
|
||||||
<a class="btn btn-primary"
|
<a class="btn btn-primary"
|
||||||
href="#"
|
href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{list.name}/links/#{attachment.assetUuid}/@details"
|
||||||
type="button">
|
type="button">
|
||||||
<bootstrap:svgIcon icon="pen" />
|
<bootstrap:svgIcon icon="pen" />
|
||||||
<span class="sr-only">#{CmsDefaultStepsMessageBundle['relatedinfo.attachments.edit.button']}"</span>
|
<span class="sr-only">#{CmsDefaultStepsMessageBundle['relatedinfo.attachments.edit.button']}"</span>
|
||||||
|
|
|
||||||
|
|
@ -204,3 +204,4 @@ relatedinfo.links.type.external=External link
|
||||||
relatedinfo.links.type.help=The type of the link. Internal links are linked with another document (content item). External links link to an URL.
|
relatedinfo.links.type.help=The type of the link. Internal links are linked with another document (content item). External links link to an URL.
|
||||||
relatedinfo.link.details.title.target=Target of the related link
|
relatedinfo.link.details.title.target=Target of the related link
|
||||||
relatedinfo.link.details.title.target.select_bookmark=Select bookmark
|
relatedinfo.link.details.title.target.select_bookmark=Select bookmark
|
||||||
|
relatedinfo.links.type.none_selected=Please select a link type.
|
||||||
|
|
|
||||||
|
|
@ -204,3 +204,4 @@ relatedinfo.links.type.external=Externener Link
|
||||||
relatedinfo.links.type.help=Der Typ des Links. Interne Links verweisen auf ein anderes Dokument (Content Item). Externe Links verweisen auf eine URL.
|
relatedinfo.links.type.help=Der Typ des Links. Interne Links verweisen auf ein anderes Dokument (Content Item). Externe Links verweisen auf eine URL.
|
||||||
relatedinfo.link.details.title.target=Ziel des weiterf\u00fchrenden Links
|
relatedinfo.link.details.title.target=Ziel des weiterf\u00fchrenden Links
|
||||||
relatedinfo.link.details.title.target.select_bookmark=Lesezeichen ausw\u00e4hlen
|
relatedinfo.link.details.title.target.select_bookmark=Lesezeichen ausw\u00e4hlen
|
||||||
|
relatedinfo.links.type.none_selected=Bitte w\u00e4hlen Sie einen Link-Typ aus.
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,81 @@
|
||||||
document.addEventListener("DOMContentLoaded", function(event) {
|
document.addEventListener("DOMContentLoaded", function (event) {
|
||||||
|
const elem = document.querySelector("#link-type-select");
|
||||||
|
if (elem) {
|
||||||
|
const linkTypeSelect: HTMLSelectElement = elem as HTMLSelectElement;
|
||||||
|
const preSelected = linkTypeSelect.options.item(
|
||||||
|
linkTypeSelect.selectedIndex
|
||||||
|
);
|
||||||
|
if (preSelected) {
|
||||||
|
const value = preSelected.value;
|
||||||
|
if (value != "--none--") {
|
||||||
|
enableLinkTypeInputs(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
linkTypeSelect.addEventListener("input", function (event) {
|
||||||
|
const target = event.currentTarget as HTMLSelectElement;
|
||||||
|
const selected = target.options.item(
|
||||||
|
linkTypeSelect.selectedIndex
|
||||||
|
);
|
||||||
|
if (selected) {
|
||||||
|
const value = selected.value;
|
||||||
|
if (value == "--none--") {
|
||||||
|
const types = document.querySelectorAll(
|
||||||
|
".relatedlink-target"
|
||||||
|
);
|
||||||
|
for (let j = 0; j < types.length; j++) {
|
||||||
|
types[j].classList.add("d-none");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
enableLinkTypeInputs(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const linkTypes = document.querySelectorAll(".link-type-select");
|
const linkTypes = document.querySelectorAll(".link-type-select");
|
||||||
|
|
||||||
for(let i = 0; i < linkTypes.length; i++) {
|
for (let i = 0; i < linkTypes.length; i++) {
|
||||||
if (linkTypes[i].getAttribute("selected") === "selected") {
|
if (linkTypes[i].getAttribute("selected") === "selected") {
|
||||||
const selectedTypeElem = document.querySelector(
|
const selectedTypeElem = document.querySelector(
|
||||||
`#relatedlink-target-${linkTypes[i].getAttribute("value")}`
|
`#relatedlink-target-${linkTypes[i].getAttribute("value")}`
|
||||||
);
|
);
|
||||||
if (selectedTypeElem) {
|
if (selectedTypeElem) {
|
||||||
const types = document.querySelectorAll(".relatedlink-target");
|
const types = document.querySelectorAll(".relatedlink-target");
|
||||||
for(let j = 0; j < types.length; j++) {
|
for (let j = 0; j < types.length; j++) {
|
||||||
types[j].classList.add("d-none");
|
types[j].classList.add("d-none");
|
||||||
}
|
}
|
||||||
selectedTypeElem.classList.remove("d-none");
|
selectedTypeElem.classList.remove("d-none");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
linkTypes[i].addEventListener("input", function(event) {
|
linkTypes[i].addEventListener("input", function (event) {
|
||||||
const target = event.currentTarget as HTMLElement;
|
const target = event.currentTarget as HTMLElement;
|
||||||
const value = target.getAttribute("value");
|
const value = target.getAttribute("value");
|
||||||
|
|
||||||
const selectedTypeElem = document.querySelector(
|
const selectedTypeElem = document.querySelector(
|
||||||
`#relatedlink-target-${value}`
|
`#relatedlink-target-${value}`
|
||||||
);
|
);
|
||||||
if (selectedTypeElem) {
|
if (selectedTypeElem) {
|
||||||
const types = document.querySelectorAll(".relatedlink-target");
|
const types = document.querySelectorAll(".relatedlink-target");
|
||||||
for(let j = 0; j < types.length; j++) {
|
for (let j = 0; j < types.length; j++) {
|
||||||
types[j].classList.add("d-none");
|
types[j].classList.add("d-none");
|
||||||
}
|
}
|
||||||
selectedTypeElem.classList.remove("d-none");
|
selectedTypeElem.classList.remove("d-none");
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function enableLinkTypeInputs(selectedLinkType: string): void {
|
||||||
|
const selectedTypeElem = document.querySelector(
|
||||||
|
`#relatedlink-target-${selectedLinkType}`
|
||||||
|
);
|
||||||
|
if (selectedTypeElem) {
|
||||||
|
const types = document.querySelectorAll(".relatedlink-target");
|
||||||
|
for (let j = 0; j < types.length; j++) {
|
||||||
|
types[j].classList.add("d-none");
|
||||||
|
}
|
||||||
|
selectedTypeElem.classList.remove("d-none");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
package org.libreccm.ui;
|
||||||
|
|
||||||
|
import javax.enterprise.context.RequestScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.ws.rs.core.Context;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
@RequestScoped
|
||||||
|
public class BaseUrl {
|
||||||
|
|
||||||
|
public String getBaseUrl(final HttpServletRequest request) {
|
||||||
|
final StringBuilder baseUrlBuilder = new StringBuilder();
|
||||||
|
return baseUrlBuilder
|
||||||
|
.append(request.getScheme())
|
||||||
|
.append("://")
|
||||||
|
.append(request.getServerName())
|
||||||
|
.append(addServerPortToBaseUrl(request))
|
||||||
|
.append(addContextPathToBaseUrl(request))
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String addServerPortToBaseUrl(final HttpServletRequest request) {
|
||||||
|
if (request.getServerPort() == 80 || request.getServerPort() == 443) {
|
||||||
|
return "";
|
||||||
|
} else {
|
||||||
|
return String.format(":%d", request.getServerPort());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String addContextPathToBaseUrl(final HttpServletRequest request) {
|
||||||
|
if (request.getServletContext().getContextPath() == null
|
||||||
|
|| request.getServletContext().getContextPath().isEmpty()) {
|
||||||
|
return "/";
|
||||||
|
} else {
|
||||||
|
return request.getServletContext().getContextPath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue