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; package org.scientificcms.publications.ui.contenttypes;
import org.libreccm.api.Identifier;
import org.libreccm.api.IdentifierParser;
import org.libreccm.l10n.GlobalizationHelper; import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.security.AuthorizationRequired; 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.ContentSectionNotFoundException;
import org.librecms.ui.contentsections.ItemPermissionChecker; import org.librecms.ui.contentsections.ItemPermissionChecker;
import org.librecms.ui.contentsections.documents.AbstractMvcAuthoringStep; 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.DocumentUi;
import org.librecms.ui.contentsections.documents.MvcAuthoringSteps; import org.librecms.ui.contentsections.documents.MvcAuthoringSteps;
import org.scientificcms.publications.Publication; import org.scientificcms.publications.Publication;
import org.scientificcms.publications.PublicationManager;
import org.scientificcms.publications.PublicationRepository; import org.scientificcms.publications.PublicationRepository;
import org.scientificcms.publications.Series;
import org.scientificcms.publications.VolumeInSeries; import org.scientificcms.publications.VolumeInSeries;
import org.scientificcms.publications.assets.PublicationAsset; import org.scientificcms.publications.assets.PublicationAsset;
import org.scientificcms.publications.assets.SeriesAsset;
import org.scientificcms.publications.contenttypes.PublicationItem; import org.scientificcms.publications.contenttypes.PublicationItem;
import org.scientificcms.publications.ui.SciPublicationsUiMessageBundle; import org.scientificcms.publications.ui.SciPublicationsUiMessageBundle;
import java.util.Arrays; import java.util.Arrays;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.inject.Inject; import javax.inject.Inject;
import javax.mvc.Models;
import javax.servlet.http.HttpServletRequest;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import javax.ws.rs.FormParam; import javax.ws.rs.FormParam;
import javax.ws.rs.POST; import javax.ws.rs.POST;
@ -33,21 +43,39 @@ import javax.ws.rs.PathParam;
* @param <T> Subtype of {@link PublicationAsset}. * @param <T> Subtype of {@link PublicationAsset}.
* @param <P> Subtype of {@link Publication} * @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 { extends AbstractMvcAuthoringStep {
@Inject
private AssetRepository assetRepo;
@Inject
private BaseUrl baseUrl;
@Inject @Inject
private DocumentUi documentUi; private DocumentUi documentUi;
@Inject @Inject
private GlobalizationHelper globalizationHelper; private GlobalizationHelper globalizationHelper;
@Inject
private HttpServletRequest request;
@Inject
private IdentifierParser identifierParser;
@Inject @Inject
private ItemPermissionChecker itemPermissionChecker; private ItemPermissionChecker itemPermissionChecker;
@Inject
private Models models;
@Inject @Inject
private PublicationExtendedPropertiesStepModel propertiesStepModel; private PublicationExtendedPropertiesStepModel propertiesStepModel;
@Inject
private PublicationManager publicationManager;
@Inject @Inject
private PublicationRepository publicationRepo; private PublicationRepository publicationRepo;
@ -142,6 +170,8 @@ public abstract class AbstractPublicationExtentedPropertiesStep<T extends Public
) )
); );
propertiesStepModel.setEditStepUrlFragment(getEditStepUrlFragment()); propertiesStepModel.setEditStepUrlFragment(getEditStepUrlFragment());
propertiesStepModel.setBaseUrl(baseUrl.getBaseUrl(request));
} }
@AuthorizationRequired @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 getEditStepUrlFragment();
protected abstract String getStepTemplatePath(); protected abstract String getStepTemplatePath();
@ -256,4 +462,22 @@ public abstract class AbstractPublicationExtentedPropertiesStep<T extends Public
return row; 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(); return buildRedirectPathForStep();
} else { } else {
return documentUi.showAccessDenied( return documentUi.showAccessDenied(
getContentSection(), getContentSection(),

View File

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

View File

@ -41,6 +41,11 @@ public class MonographExtendedPropertiesStep extends AbstractPublicationWithPubl
return Monograph.class; return Monograph.class;
} }
@Override
protected String getEditStepUrlFragment() {
return "monograph-extendedproperties";
}
@Override @Override
protected String getStepTemplatePath() { protected String getStepTemplatePath() {
return "org/scientificcms/contenttypes/ui/monograph/edit-extended-properties.xhtml"; 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 @POST
@Path("/authors") @Path("/authors")
@AuthorizationRequired @AuthorizationRequired
@Transactional @Transactional(Transactional.TxType.REQUIRED)
@Override @Override
public String addAuthor( public String addAuthor(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM) @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
@ -253,7 +253,7 @@ public class MonographPropertiesStep extends AbstractPublicationWithPublisherPro
@POST @POST
@Path("/authors/{authorshipUuid}") @Path("/authors/{authorshipUuid}")
@AuthorizationRequired @AuthorizationRequired
@Transactional @Transactional(Transactional.TxType.REQUIRED)
@Override @Override
public String editAuthorship( public String editAuthorship(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM) @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
@ -276,7 +276,7 @@ public class MonographPropertiesStep extends AbstractPublicationWithPublisherPro
@POST @POST
@Path("/authors/{authorshipUuid}/remove") @Path("/authors/{authorshipUuid}/remove")
@AuthorizationRequired @AuthorizationRequired
@Transactional @Transactional(Transactional.TxType.REQUIRED)
@Override @Override
public String removeAuthorship( public String removeAuthorship(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM) @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)

View File

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

View File

@ -11,6 +11,7 @@
<h2>#{authoringStepTitle}</h2> <h2>#{authoringStepTitle}</h2>
<c:if test="#{CmsSelectedDocumentModel.canEdit}">
<div class="text-right"> <div class="text-right">
<button class="btn btn-primary" <button class="btn btn-primary"
data-toggle="modal" data-toggle="modal"
@ -66,12 +67,14 @@
options="#{SciCmsPublicationExtendedPropertiesStepModel.languages}" options="#{SciCmsPublicationExtendedPropertiesStepModel.languages}"
selectedOptions="#{List.of(SciCmsPublicationExtendedPropertiesStepModel.languageOfPublication)}" selectedOptions="#{List.of(SciCmsPublicationExtendedPropertiesStepModel.languageOfPublication)}"
/> />
<ui:insert name="publicationExtendedPropertiesFormElements" />
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-warning" <button class="btn btn-warning"
data-dismiss="modal" data-dismiss="modal"
type="button"> type="button">
#{SciPublicationsUiMessageBundle['publication.editstep.extededproperties.edit.close']} #{SciPublicationsUiMessageBundle['publication.editstep.extendedproperties.edit.close']}
</button> </button>
<button class="btn btn-success" <button class="btn btn-success"
type="submit"> type="submit">
@ -81,6 +84,7 @@
</form> </form>
</div> </div>
</div> </div>
</c:if>
<dl> <dl>
<div> <div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.peerreviewed.label']}</dt> <dt>#{SciPublicationsUiMessageBundle['extendedproperties.peerreviewed.label']}</dt>
@ -95,10 +99,128 @@
<dd>#{SciCmsPublicationExtendedPropertiesStepModel.languageOfPublicationDisplayName}</dd> <dd>#{SciCmsPublicationExtendedPropertiesStepModel.languageOfPublicationDisplayName}</dd>
</div> </div>
<ui:insert name="publicationExtendedProperties" /> <ui:insert name="publicationExtendedPropertiesList" />
</dl> </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"/> <ui:insert name="publicationExtendedPropertyWidgets"/>

View File

@ -7,22 +7,97 @@
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition template="/WEB-INF/views/org/scientificcms/contenttypes/ui/edit-publication-extended-properties.xhtml"> <ui:composition template="/WEB-INF/views/org/scientificcms/contenttypes/ui/edit-publication-extended-properties.xhtml">
<ui:define name="publicationExtendedProperties"> <ui:define name="publicationExtendedPropertiesList">
<!-- isbn10: String --> <div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.isbn10.label']}</dt>
<dd>#{SciCmsPublicationWithPublisherExtendedPropertiesStep.isbn10}</dd>
</div>
<!-- isbn13: String --> <div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.isbn13.label']}</dt>
<dd>#{SciCmsPublicationWithPublisherExtendedPropertiesStep.isbn13}</dd>
</div>
<!-- volume: int --> <div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.volume.label']}</dt>
<dd>#{SciCmsPublicationWithPublisherExtendedPropertiesStep.volume}</dd>
</div>
<!-- numberOfVolumes: int --> <div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.numberofvolumes.label']}</dt>
<dd>#{SciCmsPublicationWithPublisherExtendedPropertiesStep.numberOfVolumes}</dd>
</div>
<!-- numberOfPages: int --> <div>
<dt>#{SciPublicationsUiMessageBundle['extendedproperties.numberofpages.label']}</dt>
<dd>#{SciCmsPublicationWithPublisherExtendedPropertiesStep.numberOfPages}</dd>
</div>
<!-- edition: LocalizedString --> <ui:insert name="publicationWithPublisherExtendedPropertiesList"/>
<ui:insert name="publicationWithPublisherExtendedProperties"/> </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:define>
</ui:composition> </ui:composition>

View File

@ -13,7 +13,18 @@
<ui:param name="authoringStepTitle" <ui:param name="authoringStepTitle"
value="#{SciPublicationsUiMessageBundle.getMessage('monograph.extendedproperties.header', [SciCmsPublicationPropertiesStepModel.name])}" /> 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> </ui:define>

View File

@ -380,3 +380,40 @@ editsteps.misc.header_edit=Edit miscellaneous information
basicproperties.authors.none=No authors assigned yet. basicproperties.authors.none=No authors assigned yet.
publicationwithpublisher.publisher.none=No publisher assigned yet. publicationwithpublisher.publisher.none=No publisher assigned yet.
basicproperties.authors.remove.confirm=Remove 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. basicproperties.authors.none=Es wurden noch keine Autoren eingetragen.
publicationwithpublisher.publisher.none=Es wurde noch kein Verlag zugewiesen. publicationwithpublisher.publisher.none=Es wurde noch kein Verlag zugewiesen.
basicproperties.authors.remove.confirm=Entfernen 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