Form for extended properties of publications

pull/1/head
Jens Pelzetter 2022-07-09 17:21:07 +02:00
parent 6654577ac0
commit 7a887eeb36
11 changed files with 686 additions and 98 deletions

View File

@ -1,7 +1,11 @@
package org.scientificcms.publications.ui.contenttypes;
import org.libreccm.api.Identifier;
import org.libreccm.api.IdentifierParser;
import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.security.AuthorizationRequired;
import org.libreccm.ui.BaseUrl;
import org.librecms.contentsection.AssetRepository;
import org.librecms.ui.contentsections.ContentSectionNotFoundException;
import org.librecms.ui.contentsections.ItemPermissionChecker;
import org.librecms.ui.contentsections.documents.AbstractMvcAuthoringStep;
@ -9,18 +13,24 @@ import org.librecms.ui.contentsections.documents.DocumentNotFoundException;
import org.librecms.ui.contentsections.documents.DocumentUi;
import org.librecms.ui.contentsections.documents.MvcAuthoringSteps;
import org.scientificcms.publications.Publication;
import org.scientificcms.publications.PublicationManager;
import org.scientificcms.publications.PublicationRepository;
import org.scientificcms.publications.Series;
import org.scientificcms.publications.VolumeInSeries;
import org.scientificcms.publications.assets.PublicationAsset;
import org.scientificcms.publications.assets.SeriesAsset;
import org.scientificcms.publications.contenttypes.PublicationItem;
import org.scientificcms.publications.ui.SciPublicationsUiMessageBundle;
import java.util.Arrays;
import java.util.Locale;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.mvc.Models;
import javax.servlet.http.HttpServletRequest;
import javax.transaction.Transactional;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
@ -33,21 +43,39 @@ import javax.ws.rs.PathParam;
* @param <T> Subtype of {@link PublicationAsset}.
* @param <P> Subtype of {@link Publication}
*/
public abstract class AbstractPublicationExtentedPropertiesStep<T extends PublicationItem<P>, P extends Publication>
public abstract class AbstractPublicationExtendedPropertiesStep<T extends PublicationItem<P>, P extends Publication>
extends AbstractMvcAuthoringStep {
@Inject
private AssetRepository assetRepo;
@Inject
private BaseUrl baseUrl;
@Inject
private DocumentUi documentUi;
@Inject
private GlobalizationHelper globalizationHelper;
@Inject
private HttpServletRequest request;
@Inject
private IdentifierParser identifierParser;
@Inject
private ItemPermissionChecker itemPermissionChecker;
@Inject
private Models models;
@Inject
private PublicationExtendedPropertiesStepModel propertiesStepModel;
@Inject
private PublicationManager publicationManager;
@Inject
private PublicationRepository publicationRepo;
@ -142,6 +170,8 @@ public abstract class AbstractPublicationExtentedPropertiesStep<T extends Public
)
);
propertiesStepModel.setEditStepUrlFragment(getEditStepUrlFragment());
propertiesStepModel.setBaseUrl(baseUrl.getBaseUrl(request));
}
@AuthorizationRequired
@ -236,6 +266,182 @@ public abstract class AbstractPublicationExtentedPropertiesStep<T extends Public
}
}
@Transactional(Transactional.TxType.REQUIRED)
public String addSeries(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@FormParam("seriesIdentifier")
final String seriesIdentifier,
@FormParam("volumeOfSeries")
final String volumeOfSeries
) {
try {
init();
} catch (ContentSectionNotFoundException ex) {
return ex.showErrorMessage();
} catch (DocumentNotFoundException ex) {
return ex.showErrorMessage();
}
if (itemPermissionChecker.canEditItem(getDocument())) {
final Identifier identifier = identifierParser.parseIdentifier(
seriesIdentifier
);
final Optional<SeriesAsset> seriesResult;
switch (identifier.getType()) {
case ID:
seriesResult = assetRepo.findById(
Long.parseLong(identifier.getIdentifier()),
SeriesAsset.class
);
break;
case UUID:
seriesResult = assetRepo.findByUuidAndType(
identifier.getIdentifier(),
SeriesAsset.class
);
break;
default:
seriesResult = Optional.empty();
break;
}
if (seriesResult.isEmpty()) {
return showSeriesNotFound(
sectionIdentifier,
documentPath,
seriesIdentifier
);
}
final Series result = seriesResult.get().getSeries();
publicationManager.addSeries(
result,
getPublication(),
volumeOfSeries
);
return buildRedirectPathForStep();
} else {
return documentUi.showAccessDenied(
getContentSection(),
getDocument(),
getLabel()
);
}
}
@Transactional(Transactional.TxType.REQUIRED)
public String editVolumeInSeries(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@PathParam("volumeInSeriesUuid")
final String volumeInSeriesUuid,
@FormParam("volumeInSeries")
final String volumeInSeriesValue
) {
try {
init();
} catch (ContentSectionNotFoundException ex) {
return ex.showErrorMessage();
} catch (DocumentNotFoundException ex) {
return ex.showErrorMessage();
}
if (itemPermissionChecker.canEditItem(getDocument())) {
final Optional<VolumeInSeries> volumeInSeriesResult
= getPublication()
.getSeries()
.stream()
.filter(
volume -> Objects.equals(
volume.getUuid(),
volumeInSeriesUuid
)
)
.findAny();
if (volumeInSeriesResult.isEmpty()) {
return showVolumeInSeriesNotFound(
sectionIdentifier,
documentPath,
volumeInSeriesUuid
);
}
final VolumeInSeries volumeInSeries = volumeInSeriesResult.get();
volumeInSeries.setVolumeOfSeries(volumeInSeriesValue);
publicationRepo.save(getPublication());
return buildRedirectPathForStep();
} else {
return documentUi.showAccessDenied(
getContentSection(),
getDocument(),
getLabel()
);
}
}
@Transactional(Transactional.TxType.REQUIRED)
public String removeVolumeInSeries(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@PathParam("volumeInSeriesUuid")
final String volumeInSeriesUuid
) {
try {
init();
} catch (ContentSectionNotFoundException ex) {
return ex.showErrorMessage();
} catch (DocumentNotFoundException ex) {
return ex.showErrorMessage();
}
if (itemPermissionChecker.canEditItem(getDocument())) {
final Optional<VolumeInSeries> volumeInSeriesResult
= getPublication()
.getSeries()
.stream()
.filter(
volume -> Objects.equals(
volume.getUuid(),
volumeInSeriesUuid
)
)
.findAny();
if (volumeInSeriesResult.isEmpty()) {
return showVolumeInSeriesNotFound(
sectionIdentifier,
documentPath,
volumeInSeriesUuid
);
}
final VolumeInSeries volumeInSeries = volumeInSeriesResult.get();
publicationManager.removeSeries(
volumeInSeries.getSeries(),
getPublication()
);
return buildRedirectPathForStep();
} else {
return documentUi.showAccessDenied(
getContentSection(),
getDocument(),
getLabel()
);
}
}
protected abstract String getEditStepUrlFragment();
protected abstract String getStepTemplatePath();
@ -256,4 +462,22 @@ public abstract class AbstractPublicationExtentedPropertiesStep<T extends Public
return row;
}
private String showSeriesNotFound(
final String sectionIdentifier,
final String documentPath,
final String seriesIdentifier
) {
models.put("seriesNotFound", seriesIdentifier);
return showStep(sectionIdentifier, documentPath);
}
private String showVolumeInSeriesNotFound(
final String sectionIdentifier,
final String documentPath,
final String volumeInSeriesIdentifier
) {
models.put("volumeInSeriesNotFound", volumeInSeriesIdentifier);
return showStep(sectionIdentifier, documentPath);
}
}

View File

@ -708,7 +708,6 @@ public abstract class AbstractPublicationPropertiesStep<T extends PublicationIte
);
return buildRedirectPathForStep();
} else {
return documentUi.showAccessDenied(
getContentSection(),

View File

@ -20,8 +20,6 @@ import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
/**
@ -31,7 +29,7 @@ import javax.ws.rs.PathParam;
* @param <P> Subtype of {@link PublicationWithPublisher}.
*/
public abstract class AbstractPublicationWithPublisherExtendedPropertiesStep<T extends PublicationWithPublisherItem<P>, P extends PublicationWithPublisher>
extends AbstractPublicationExtentedPropertiesStep<T, P> {
extends AbstractPublicationExtendedPropertiesStep<T, P> {
@Inject
private DocumentUi documentUi;

View File

@ -41,6 +41,11 @@ public class MonographExtendedPropertiesStep extends AbstractPublicationWithPubl
return Monograph.class;
}
@Override
protected String getEditStepUrlFragment() {
return "monograph-extendedproperties";
}
@Override
protected String getStepTemplatePath() {
return "org/scientificcms/contenttypes/ui/monograph/edit-extended-properties.xhtml";
@ -154,4 +159,70 @@ public class MonographExtendedPropertiesStep extends AbstractPublicationWithPubl
);
}
@POST
@Path("/series")
@AuthorizationRequired
@Transactional
@Override
public String addSeries(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@FormParam("seriesIdentifier")
final String seriesIdentifier,
@FormParam("volumeOfSeries")
final String volumeOfSeries
) {
return super.addSeries(
sectionIdentifier,
documentPath,
seriesIdentifier,
volumeOfSeries
);
}
@POST
@Path("/series/{volumeInSeriesUuid}")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String editVolumeInSeries(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@PathParam("volumeInSeriesUuid")
final String volumeInSeriesUuid,
@FormParam("volumeInSeries")
final String volumeInSeriesValue
) {
return super.editVolumeInSeries(
sectionIdentifier,
documentPath,
volumeInSeriesUuid,
volumeInSeriesValue
);
}
@POST
@Path("/series/{seriesUuid}/remove")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String removeVolumeInSeries(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@PathParam("volumeInSeriesUuid")
final String volumeInSeriesUuid
) {
return super.removeVolumeInSeries(
sectionIdentifier,
documentPath,
volumeInSeriesUuid
);
}
}

View File

@ -230,7 +230,7 @@ public class MonographPropertiesStep extends AbstractPublicationWithPublisherPro
@POST
@Path("/authors")
@AuthorizationRequired
@Transactional
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String addAuthor(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
@ -253,7 +253,7 @@ public class MonographPropertiesStep extends AbstractPublicationWithPublisherPro
@POST
@Path("/authors/{authorshipUuid}")
@AuthorizationRequired
@Transactional
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String editAuthorship(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
@ -276,7 +276,7 @@ public class MonographPropertiesStep extends AbstractPublicationWithPublisherPro
@POST
@Path("/authors/{authorshipUuid}/remove")
@AuthorizationRequired
@Transactional
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String removeAuthorship(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)

View File

@ -1,5 +1,7 @@
package org.scientificcms.publications.ui.contenttypes;
import org.scientificcms.publications.assets.SeriesAsset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@ -17,8 +19,10 @@ import javax.inject.Named;
@Named("SciCmsPublicationExtendedPropertiesStepModel")
public class PublicationExtendedPropertiesStepModel {
private String baseUrl;
private String editStepUrlFragment;
private boolean peerReviewed;
private Integer yearFirstPublished;
@ -31,6 +35,14 @@ public class PublicationExtendedPropertiesStepModel {
private Map<String, String> languages;
public String getBaseUrl() {
return baseUrl;
}
protected void setBaseUrl(final String baseUrl) {
this.baseUrl = baseUrl;
}
public boolean isPeerReviewed() {
return peerReviewed;
}
@ -88,7 +100,9 @@ public class PublicationExtendedPropertiesStepModel {
public void setEditStepUrlFragment(final String editStepUrlFragment) {
this.editStepUrlFragment = editStepUrlFragment;
}
public String getSeriesType() {
return SeriesAsset.class.getName();
}
}

View File

@ -11,76 +11,80 @@
<h2>#{authoringStepTitle}</h2>
<div class="text-right">
<button class="btn btn-primary"
data-toggle="modal"
data-target="#extendedproperties-edit-dialog"
type="button">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">#{SciPublicationsUiMessageBundle['publication.editstep.extendedproperties.edit']}</span>
</button>
</div>
<div aria-hidden="true"
aria-labelledby="properties-edit-dialog-title"
class="modal fade"
id="extendedproperties-edit-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@#{SciCmsPublicationExtendedPropertiesStepModel.editStepUrlFragment}/properties"
class="modal-content"
method="post">
<div class="modal-header">
<h4 class="modal-title"
id="properties-edit-dialog-title">
#{SciPublicationsUiMessageBundle['publication.editstep.extendedproperties.edit.title']}
</h4>
<button
aria-label="#{SciPublicationsUiMessageBundle['publication.editstep.extendedproperties.edit.close']}"
class="close"
data-dismiss="modal"
type="button">
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div class="modal-body">
<bootstrap:formCheck
inputId="peer-reviewed"
label="#{SciPublicationsUiMessageBundle['extendedproperties.peerreviewed.label']}"
name="peerReviewed"
value="#{SciCmsPublicationExtendedPropertiesStepModel.peerReviewed}"
/>
<bootstrap:formGroupNumber
help="#{SciPublicationsUiMessageBundle['extendedproperties.yearfirstpublished.help']}"
inputId="year-first-published"
label="#{SciPublicationsUiMessageBundle['extendedproperties.yearfirstpublished.label']}"
name="yearFirstPublished"
value="#{SciCmsPublicationExtendedPropertiesStepModel.yearFirstPublished}"
/>
<bootstrap:formGroupSelect
help="#{SciPublicationsUiMessageBundle['extendedproperties.languageofpublication.help']}"
inputId="language-of-publication"
label="#{SciPublicationsUiMessageBundle['extendedproperties.languageofpublication.label']}"
name="languageOfPublication"
options="#{SciCmsPublicationExtendedPropertiesStepModel.languages}"
selectedOptions="#{List.of(SciCmsPublicationExtendedPropertiesStepModel.languageOfPublication)}"
/>
</div>
<div class="modal-footer">
<button class="btn btn-warning"
<c:if test="#{CmsSelectedDocumentModel.canEdit}">
<div class="text-right">
<button class="btn btn-primary"
data-toggle="modal"
data-target="#extendedproperties-edit-dialog"
type="button">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">#{SciPublicationsUiMessageBundle['publication.editstep.extendedproperties.edit']}</span>
</button>
</div>
<div aria-hidden="true"
aria-labelledby="properties-edit-dialog-title"
class="modal fade"
id="extendedproperties-edit-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@#{SciCmsPublicationExtendedPropertiesStepModel.editStepUrlFragment}/properties"
class="modal-content"
method="post">
<div class="modal-header">
<h4 class="modal-title"
id="properties-edit-dialog-title">
#{SciPublicationsUiMessageBundle['publication.editstep.extendedproperties.edit.title']}
</h4>
<button
aria-label="#{SciPublicationsUiMessageBundle['publication.editstep.extendedproperties.edit.close']}"
class="close"
data-dismiss="modal"
type="button">
#{SciPublicationsUiMessageBundle['publication.editstep.extededproperties.edit.close']}
</button>
<button class="btn btn-success"
type="submit">
#{SciPublicationsUiMessageBundle['publication.editstep.extendedproperties.edit.submit']}
</button>
</div>
</form>
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div class="modal-body">
<bootstrap:formCheck
inputId="peer-reviewed"
label="#{SciPublicationsUiMessageBundle['extendedproperties.peerreviewed.label']}"
name="peerReviewed"
value="#{SciCmsPublicationExtendedPropertiesStepModel.peerReviewed}"
/>
<bootstrap:formGroupNumber
help="#{SciPublicationsUiMessageBundle['extendedproperties.yearfirstpublished.help']}"
inputId="year-first-published"
label="#{SciPublicationsUiMessageBundle['extendedproperties.yearfirstpublished.label']}"
name="yearFirstPublished"
value="#{SciCmsPublicationExtendedPropertiesStepModel.yearFirstPublished}"
/>
<bootstrap:formGroupSelect
help="#{SciPublicationsUiMessageBundle['extendedproperties.languageofpublication.help']}"
inputId="language-of-publication"
label="#{SciPublicationsUiMessageBundle['extendedproperties.languageofpublication.label']}"
name="languageOfPublication"
options="#{SciCmsPublicationExtendedPropertiesStepModel.languages}"
selectedOptions="#{List.of(SciCmsPublicationExtendedPropertiesStepModel.languageOfPublication)}"
/>
<ui:insert name="publicationExtendedPropertiesFormElements" />
</div>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{SciPublicationsUiMessageBundle['publication.editstep.extendedproperties.edit.close']}
</button>
<button class="btn btn-success"
type="submit">
#{SciPublicationsUiMessageBundle['publication.editstep.extendedproperties.edit.submit']}
</button>
</div>
</form>
</div>
</div>
</div>
</c:if>
<dl>
<div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.peerreviewed.label']}</dt>
@ -95,10 +99,128 @@
<dd>#{SciCmsPublicationExtendedPropertiesStepModel.languageOfPublicationDisplayName}</dd>
</div>
<ui:insert name="publicationExtendedProperties" />
<ui:insert name="publicationExtendedPropertiesList" />
</dl>
<!-- series: asset -->
<c:if test="#{CmsSelectedDocumentModel.canEdit}">
<h3>#{SciPublicationsUiMessageBundle['extendedproeprties.volumeinseries.header']}</h3>
<div class="mb-2">
<div class="text-right">
<librecms:assetPickerButton
assetPickerId="series-picker"
buttonIcon="plus-circle"
buttonText="#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.add.label']}"
/>
</div>
</div>
<librecms:assetPicker
actionUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@#{SciCmsPublicationExtendedPropertiesStepModel.editStepUrlFragment}/series"
assetType="#{SciCmsPublicationExtendedPropertiesStepModel.seriesType}"
assetPickerId="series-picker"
baseUrl="#{SciCmsPublicationExtendedPropertiesStepModel.baseUrl}"
contentSection="#{ContentSectionModel.sectionName}"
dialogTitle="#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.add.dialog.title']}"
formParamName="seriesIdentifier"
>
<bootstrap:formGroupText
help="#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.volumeinseries.help']}"
inputId="volume-in-series"
label="#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.volumeinseries.label']}"
name="volumeInSeries"
/>
</librecms:assetPicker>
</c:if>
<c:choose>
<c:when test="#{SciCmsPublicationExtendedPropertiesStepModel.volumeInSeries.isEmpty()}">
<p>#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.none']}</p>
</c:when>
<c:otherwise>
<table id="series-table">
<thead>
<tr>
<th>#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.table.title']}</th>
<th>#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.table.volumeinseries']}</th>
<th colspan="2">#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.table.actions']}</th>
</tr>
</thead>
<tbody>
<c:forEach items="#{SciCmsPublicationExtendedPropertiesStepModel.volumeInSeries}"
var="volume">
<tr id="#{volume.volumeInSeriesUuid}">
<td>#{volume.seriesTitle}</td>
<td>#{volume.volumeInSeries}</td>
<td>
<button class="btn btn-secondary"
data-toggle="modal"
data-target="#volumeinseries-edit-#{volume.volumeInSeriesUuid}"
type="button">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">
#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.edit.label']}
</span>
</button>
<div aria-hidden="true"
aria-labelledby="volumeinseries-edit-#{volume.volumeInSeriesUuid}-title"
class="modal fade"
id="volumeinseries-edit-#{volume.volumeInSeriesUuid}"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@#{SciCmsPublicationExtendedPropertiesStepModel.editStepUrlFragment}/series/#{volume.volumeInSeriesUuid}"
class="modal-content"
method="post">
<div class="modal-header">
<h4 class="modal-title"
id="volumeinseries-edit-#{volume.volumeInSeriesUuid}-title">
#{SciPublicationsUiMessageBundle.getMessage('extendedproperties.volumeinseries.editdialog.title', [volume.seriesTitle, volume.volumeInSeries])}
</h4>
<button aria-label="#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.editdialog.cancel']}"
class="close"
data-dismiss="modal"
type="button">
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div class="modal-body">
<bootstrap:formGroupText
help="#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.volumeinseries.help']}"
inputId="#{volume.volumeInSeriesUuid}-volumeinseries"
label="#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.volumeinseries.label']}"
name="volumeInSeries"
value="#{volume.volumeInSeries}"
/>
</div>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.editdialog.cancel']}
</button>
<button class="btn btn-success"
type="submit">
#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.editdialog.submit']}
</button>
</div>
</form>
</div>
</div>
</td>
<td>
<libreccm:deleteDialog
actionTarget="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@#{SciCmsPublicationExtendedPropertiesStepModel.editStepUrlFragment}/#{volume.volumeInSeriesUuid}/remove"
buttonText="#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.remove.label']}"
cancelLabel="#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.remove.cancel']}"
confirmLabel="#{SciPublicationsUiMessageBundle['extendedproperties.volumeinseries.remove.confirm']}"
dialogId="remove-volumeinseries-#{volume.volumeInSeriesUuid}"
dialogTitle="#{SciPublicationsUiMessageBundle.getMessage('extendedproperties.volumeinseries.remove.title', [volume.seriesTitle, volume.volumeInSeries])}"
message="#{SciPublicationsUiMessageBundle.getMessage('extendedproperties.volumeinseries.remove.message', [volume.seriesTitle, volume.volumeInSeries])}"
/>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</c:otherwise>
</c:choose>
<ui:insert name="publicationExtendedPropertyWidgets"/>

View File

@ -7,23 +7,98 @@
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition template="/WEB-INF/views/org/scientificcms/contenttypes/ui/edit-publication-extended-properties.xhtml">
<ui:define name="publicationExtendedProperties">
<!-- isbn10: String -->
<!-- isbn13: String -->
<!-- volume: int -->
<!-- numberOfVolumes: int -->
<!-- numberOfPages: int -->
<!-- edition: LocalizedString -->
<ui:insert name="publicationWithPublisherExtendedProperties"/>
<ui:define name="publicationExtendedPropertiesList">
<div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.isbn10.label']}</dt>
<dd>#{SciCmsPublicationWithPublisherExtendedPropertiesStep.isbn10}</dd>
</div>
<div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.isbn13.label']}</dt>
<dd>#{SciCmsPublicationWithPublisherExtendedPropertiesStep.isbn13}</dd>
</div>
<div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.volume.label']}</dt>
<dd>#{SciCmsPublicationWithPublisherExtendedPropertiesStep.volume}</dd>
</div>
<div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.numberofvolumes.label']}</dt>
<dd>#{SciCmsPublicationWithPublisherExtendedPropertiesStep.numberOfVolumes}</dd>
</div>
<div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.numberofpages.label']}</dt>
<dd>#{SciCmsPublicationWithPublisherExtendedPropertiesStep.numberOfPages}</dd>
</div>
<ui:insert name="publicationWithPublisherExtendedPropertiesList"/>
</ui:define>
<ui:define name="publicationExtendedPropertiesFormElements">
<bootstrap:formGroupText
help="#{SciPublicationsUiMessageBundle['extendedproperties.isbn10.help']}"
inputId="isbn10"
label="#{SciPublicationsUiMessageBundle['extendedproperties.isbn10.label']}"
name="isbn10"
value="#{SciCmsPublicationWithPublisherExtendedPropertiesStep.isbn10}"
/>
<bootstrap:formGroupText
help="#{SciPublicationsUiMessageBundle['extendedproperties.isbn13.help']}"
inputId="isbn13"
label="#{SciPublicationsUiMessageBundle['extendedproperties.isbn13.label']}"
name="isbn13"
value="#{SciCmsPublicationWithPublisherExtendedPropertiesStep.isbn13}"
/>
<bootstrap:formGroupNumber
help="#{SciPublicationsUiMessageBundle['extendedproeprties.volume.help']}"
inputId="volume"
label="#{SciPublicationsUiMessageBundle['extendedproeprties.volume.label']}"
name="volume"
value="#{SciCmsPublicationWithPublisherExtendedPropertiesStep.volume}"
/>
<bootstrap:formGroupNumber
help="#{SciPublicationsUiMessageBundle['extendedproeprties.numberofvolumes.help']}"
inputId="number-of-volumes"
label="#{SciPublicationsUiMessageBundle['extendedproeprties.numberofvolumes.label']}"
name="numberOfVolumes"
value="#{SciCmsPublicationWithPublisherExtendedPropertiesStep.numberOfVolumes}"
/>
<bootstrap:formGroupNumber
help="#{SciPublicationsUiMessageBundle['extendedproeprties.numberofpages.help']}"
inputId="number-of-pages"
label="#{SciPublicationsUiMessageBundle['extendedproeprties.numberofpages.label']}"
name="numberOfPages"
value="#{SciCmsPublicationWithPublisherExtendedPropertiesStep.numberOfPages}"
/>
<ui:insert name="publicationWithPublisherExtendedPropertiesFormElements"/>
</ui:define>
<ui:define name="publicationExtendedPropertyWidgets">
<libreccm:localizedStringEditor
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@#{SciCmsPublicationExtendedPropertiesStepModel.editStepUrlFragment}/edition/@add"
editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@#{SciCmsPublicationExtendedPropertiesStepModel.editStepUrlFragment}/edition/@edit"
editorId="edition-editor"
hasUnusedLocales="#{SciCmsPublicationWithPublisherExtendedPropertiesStep.unusedEditionLocales.isEmpty()}"
objectIdentifier="#{CmsSelectedDocumentModel.itemPath}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@#{SciCmsPublicationExtendedPropertiesStepModel.editStepUrlFragment}/edition/@remove"
title="#{SciPublicationsUiMessageBundle['extendedproperties.edition.editdialog.title']}"
unusedLocales="#{SciCmsPublicationWithPublisherExtendedPropertiesStep.unusedEditionLocales}"
values="#{SciCmsPublicationWithPublisherExtendedPropertiesStep.editionValues}"
/>
<ui:insert name="publicationWithPublisherExtendedPropertyWidgets" />
</ui:define>
</ui:composition>
</html>

View File

@ -13,7 +13,18 @@
<ui:param name="authoringStepTitle"
value="#{SciPublicationsUiMessageBundle.getMessage('monograph.extendedproperties.header', [SciCmsPublicationPropertiesStepModel.name])}" />
<ui:define name="publicationWithPublisherExtendedProperties">
<ui:param name="editStepUrlFragement"
value="monograph-extendedproperties" />
<ui:define name="publicationWithPublisherExtendedPropertiesList">
</ui:define>
<ui:define name="publicationWithPublisherExtendedPropertiesFormElements">
</ui:define>
<ui:define name="publicationWithPublisherExtendedPropertiesWidgets">
</ui:define>

View File

@ -380,3 +380,40 @@ editsteps.misc.header_edit=Edit miscellaneous information
basicproperties.authors.none=No authors assigned yet.
publicationwithpublisher.publisher.none=No publisher assigned yet.
basicproperties.authors.remove.confirm=Remove
publication.editstep.extendedproperties.edit=Edit extended properties
publication.editstep.extendedproperties.edit.title=Edit extended properties
publication.editstep.extendedproperties.edit.close=Cancel
extendedproperties.peerreviewed.label=Peer reviewed?
extendedproperties.yearfirstpublished.help=The year in which the first edition of the publication was first published.
extendedproperties.yearfirstpublished.label=Year first published
extendedproperties.languageofpublication.help=The language of the publication.
extendedproperties.languageofpublication.label=Language of the publication
publication.editstep.extendedproperties.edit.submit=Save
extendedproeprties.volumeinseries.header=Published as volume in series
extendedproperties.volumeinseries.add.label=Add volume
extendedproperties.volumeinseries.add.dialog.title=Add volume
extendedproperties.volumeinseries.volumeinseries.help=The label of the volume as which the publication was published as part of the series.
extendedproperties.volumeinseries.none=No volumes
extendedproperties.volumeinseries.table.title=Title of the series
extendedproperties.volumeinseries.table.volumeinseries=Volume
extendedproperties.volumeinseries.table.actions=Actions
extendedproperties.volumeinseries.edit.label=Edit
extendedproperties.volumeinseries.editdialog.title=Edit volume {1} of series {0}
extendedproperties.volumeinseries.editdialog.cancel=Cancel
extendedproperties.volumeinseries.editdialog.submit=Save
extendedproperties.volumeinseries.remove.label=Remove
extendedproperties.volumeinseries.remove.cancel=Cancel
extendedproperties.volumeinseries.remove.confirm=Remove
extendedproperties.volumeinseries.remove.title=Confirm removal of volume {1} of series {0}
extendedproperties.volumeinseries.remove.message=Are you sure to remove volume {0} of series {1}?
extendedproperties.isbn10.label=ISBN-10
extendedproperties.isbn13.label=ISBN-13
extendedproperties.volume.label=Volume
extendedproperties.numberofvolumes.label=Number of volumes
extendedproperties.numberofpages.label=Number of pages
extendedproperties.isbn10.help=The ISBN-10 of the publication, if available.
extendedproperties.isbn13.help=The ISBN-13 of the publication.
extendedproeprties.volume.help=The volume of the publication if the publication is part of a multi-volume publication.
extendedproeprties.numberofvolumes.help=Number of volumes of the publication.
extendedproeprties.numberofpages.help=Number of pages
extendedproperties.edition.editdialog.title=Edition

View File

@ -380,3 +380,40 @@ editsteps.misc.header_edit=Weitere Informationen bearbeiten
basicproperties.authors.none=Es wurden noch keine Autoren eingetragen.
publicationwithpublisher.publisher.none=Es wurde noch kein Verlag zugewiesen.
basicproperties.authors.remove.confirm=Entfernen
publication.editstep.extendedproperties.edit=Erweiterte Eigenschaften bearbeiten
publication.editstep.extendedproperties.edit.title=Erweiterte Eigenschaften bearbeiten
publication.editstep.extendedproperties.edit.close=Abbrechen
extendedproperties.peerreviewed.label=Peer reviewed?
extendedproperties.yearfirstpublished.help=Das Jahr, in dem die erste Ausgabe der Publikation erschienen ist.
extendedproperties.yearfirstpublished.label=Ersterscheinungsjahr
extendedproperties.languageofpublication.help=Die Sprache der Publikation.
extendedproperties.languageofpublication.label=Sprache der Publikation
publication.editstep.extendedproperties.edit.submit=Speichern
extendedproeprties.volumeinseries.header=Erschienen als Band der Reihe
extendedproperties.volumeinseries.add.label=Band hinzuf\u00fcgen
extendedproperties.volumeinseries.add.dialog.title=Band hinzuf\u00fcgen
extendedproperties.volumeinseries.volumeinseries.help=Die Bezeichnung des Bandes in dem die Publikation als Teil der Serie ver\u00f6ffentlicht wurde.
extendedproperties.volumeinseries.none=Keine B\u00e4nde.
extendedproperties.volumeinseries.table.title=Titel der Reihe
extendedproperties.volumeinseries.table.volumeinseries=Band
extendedproperties.volumeinseries.table.actions=Aktionen
extendedproperties.volumeinseries.edit.label=Bearbeiten
extendedproperties.volumeinseries.editdialog.title=Band {1} der Reihe {0} bearbeiten
extendedproperties.volumeinseries.editdialog.cancel=Abbrechen
extendedproperties.volumeinseries.editdialog.submit=Speichern
extendedproperties.volumeinseries.remove.label=Entfernen
extendedproperties.volumeinseries.remove.cancel=Abbrechen
extendedproperties.volumeinseries.remove.confirm=Entfernen
extendedproperties.volumeinseries.remove.title=Entfernen des Bandes {1} der Reihe {0} best\u00e4tigen
extendedproperties.volumeinseries.remove.message=Sind Sie sicher, dass sie den Band {1} der Reihe {0} entfernen wollen?
extendedproperties.isbn10.label=ISBN-10
extendedproperties.isbn13.label=ISBN-13
extendedproperties.volume.label=Band
extendedproperties.numberofvolumes.label=Anzahl der B\u00e4nde
extendedproperties.numberofpages.label=Anzahl der Seiten
extendedproperties.isbn10.help=Die ISBN-10 der Publikation.
extendedproperties.isbn13.help=Die ISBN-13 der Publikation.
extendedproeprties.volume.help=Der Band der Publikation, falls die Publikation Teil eines mehrb\u00e4ndiges Werkes ist.
extendedproeprties.numberofvolumes.help=Anzahl der B\u00e4nde des Werkes.
extendedproeprties.numberofpages.help=Anzahl der Seiten
extendedproperties.edition.editdialog.title=Ausgabe