Bugfixes for create and edit steps of person asset.

pull/10/head
Jens Pelzetter 2021-06-01 21:14:40 +02:00
parent 07af86a955
commit b46634f5ec
9 changed files with 230 additions and 194 deletions

View File

@ -18,6 +18,7 @@
*/
package org.librecms.ui.contentsections.assets;
import java.util.HashSet;
import java.util.Set;
@ -34,6 +35,7 @@ public class CmsAssetEditSteps implements MvcAssetEditSteps {
classes.add(BookmarkEditStep.class);
classes.add(FileAssetEditStep.class);
classes.add(LegalMetadataEditStep.class);
classes.add(PersonEditStep.class);
classes.add(PostalAddressEditStep.class);
classes.add(SideNoteEditStep.class);

View File

@ -27,8 +27,10 @@ import org.librecms.contentsection.AssetRepository;
import org.librecms.ui.contentsections.AssetPermissionsChecker;
import org.librecms.ui.contentsections.ContentSectionNotFoundException;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Optional;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
@ -92,10 +94,17 @@ public class PersonEditStep extends AbstractContactableEntityEditStep {
if (getAsset() instanceof Person) {
editStepModel.setBirthdate(
DateTimeFormatter
.ofLocalizedDate(FormatStyle.SHORT)
.withLocale(globalizationHelper.getNegotiatedLocale())
.format(getPerson().getBirthdate())
Optional
.ofNullable(getPerson().getBirthdate())
.map(
birthdate -> birthdate.format(
DateTimeFormatter
.ofLocalizedDate(FormatStyle.SHORT)
.withLocale(
globalizationHelper.getNegotiatedLocale()
)
.withZone(ZoneId.systemDefault())))
.orElse("")
);
editStepModel.setPersonNames(getPerson().getPersonNames());
} else {

View File

@ -40,10 +40,10 @@
</cc:interface>
<cc:implementation>
<div class="ccm-cms-asset-picker"
<!-- <div class="ccm-cms-asset-picker"
data-assettype="#{cc.attrs.assetType}"
data-contentsection="#{cc.attrs.contentSection}">
<div aria-hidden="true"
data-contentsection="#{cc.attrs.contentSection}">-->
<!-- <div aria-hidden="true"
aria-labelledby="#{cc.attrs.assetPickerId}-dialog-title"
class="modal fade"
id="#{cc.attrs.assetPickerId}-dialog"
@ -126,18 +126,18 @@
</tbody>
</table>
</form>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{CmsAssetsStepsDefaultMessagesBundle['assetpicker.close']}
</button>
</form>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{CmsAssetsStepsDefaultMessagesBundle['assetpicker.close']}
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>-->
<!--</div>-->
</cc:implementation>

View File

@ -70,6 +70,7 @@
</form>
</div>
</div>
<table>
<thead>
<tr>
@ -198,7 +199,7 @@
</c:forEach>
</tbody>
</table>
<h3>#{CmsAssetsStepsDefaultMessagesBundle['contactable.postaladdress.title']}</h3>
<librecms:assetPicker
@ -210,15 +211,15 @@
/>
<c:choose>
<c:when test="#{CmsContactableEditStepModel.postalAddress == null}">
<div class="text-right">
<!-- <div class="text-right">
<librecms:assetPickerButton
assetPickerId="postaladdress-picker"
/>
</div>
<p>#{CmsAssetsStepsDefaultMessagesBundle['contactable.postaladdress.none']}</p>
<p>#{CmsAssetsStepsDefaultMessagesBundle['contactable.postaladdress.none']}</p>-->
</c:when>
<c:otherwise>
<div class="text-right">
<!-- <div class="text-right">
<librecms:assetPickerButton
assetPickerId="postaladdress-picker"
/>
@ -295,7 +296,7 @@
<dd>#{CmsContactableEditStepModel.postalAddressCountry}) (#{CmsContactableEditStepModel.postalAddress.isoCountryCode})</dd>
</div>
</dl>
</dl>-->
</c:otherwise>
</c:choose>

View File

@ -10,14 +10,14 @@
<div class="container">
<h1>#{CmsAssetsStepsDefaultMessagesBundle["person.createform.title"]}</h1>
<c:forEach items="#{CmsBookmarkCreateStep.messages.entrySet()}"
<c:forEach items="#{CmsPersonCreateStep.messages.entrySet()}"
var="message">
<div class="alert alert-#{message.key}" role="alert">
#{message.value}
</div>
</c:forEach>
<form action="#{mvc.basePath}/#{CmsPersonCreateStep.contentSectionLabel}/assets/#{CmsPersonCreateStep.folderPath}@create/#{CmsPersonCreateStep.assetType}"
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assets/#{CmsPersonCreateStep.folderPath}@create/#{CmsPersonCreateStep.assetType}"
method="post">
<bootstrap:formGroupText
help="#{CmsAssetsStepsDefaultMessagesBundle['createform.name.help']}"
@ -26,7 +26,7 @@
name="name"
pattern="^([a-zA-Z0-9_-]*)$"
required="true"
value="#{CmsBookmarkCreateStep.name}"
value="#{CmsPersonCreateStep.name}"
/>
<bootstrap:formGroupSelect
@ -34,9 +34,9 @@
inputId="locale"
label="#{CmsAssetsStepsDefaultMessagesBundle['createform.initial_locale.label']}"
name="locale"
options="#{CmsBookmarkCreateStep.availableLocales}"
options="#{CmsPersonCreateStep.availableLocales}"
required="true"
selectedOptions="#{[CmsBookmarkCreateStep.initialLocale]}"
selectedOptions="#{[CmsPersonCreateStep.initialLocale]}"
/>
<bootstrap:formGroupText
@ -48,7 +48,7 @@
/>
<a class="btn btn-warning"
href="#{mvc.basePath}/#{CmsBookmarkCreateStep.contentSectionLabel}/assetfolders/#{CmsBookmarkCreateStep.folderPath}">
href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assetfolders/#{CmPersonCreateStep.folderPath}">
#{CmsAssetsStepsDefaultMessagesBundle['createform.cancel']}
</a>
<button class="btn btn-success"

View File

@ -85,167 +85,176 @@
</form>
</div>
</div>
<table>
<thead>
<tr>
<th>#{CmsAssetsStepsDefaultMessagesBundle['person.personnames.col.prefix']}</th>
<th>#{CmsAssetsStepsDefaultMessagesBundle['person.personnames.col.surname']}</th>
<th>#{CmsAssetsStepsDefaultMessagesBundle['person.personnames.col.givenname']}</th>
<th>#{CmsAssetsStepsDefaultMessagesBundle['person.personnames.col.suffix']}</th>
<th>#{CmsAssetsStepsDefaultMessagesBundle['person.personnames.col.actions']}</th>
</tr>
</thead>
<tbody>
<c:forEach items="#{CmsPersonEditStepModel.personNames}"
var="personName">
<tr>
<td>#{personName.prefix}</td>
<td>#{personName.surname}</td>
<td>#{personName.givenName}</td>
<td>#{personName.suffix}</td>
<td>
<button class="btn btn-primary"
data-toggle="modal"
data-target="#personname-edit-dialog-#{personName.hashCode()}"
type="button">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">#{CmsAssetsStepsDefaultMessagesBundle['person.personname.edit']}</span>
</button>
<div aria-hidden="true"
aria-lablledby="personname-edit-dialog-#{personName.hashCode()}-title"
class="modal fade"
id="personname-edit-dialog-#{personName.hashCode()}"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/asset/#{CmsSelectedAssetModel.assetPath}/@person-edit/personnames/@edit"
class="modal-content"
method="post">
<div class="modal-header">
<h4 id="personname-edit-dialog-#{personName.hashCode()}-title">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.edit.dialog.title']}
</h4>
<button
aria-label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.edit.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div class="modal-body">
<bootstrap:formGroupText
help="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.prefix.help']}"
inputId="prefix"
label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.prefix.label']}"
name="prefix"
value="#{personName.prefix}" />
<bootstrap:formGroupText
help="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.surname.help']}"
inputId="surname"
label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.surname.label']}"
name="surname"
value="#{personName.surname}" />
<bootstrap:formGroupText
help="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.givenname.help']}"
inputId="givenName"
label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.givenname.label']}"
name="givenName"
value="#{personName.givenName}" />
<bootstrap:formGroupText
help="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.suffix.help']}"
inputId="suffix"
label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.suffix.label']}"
name="suffix"
value="#{personName.suffix}" />
</div>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.edit.dialog.close']}
</button>
<button class="btn btn-success"
type="submit">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.edit.dialog.submit']}
</button>
</div>
</form>
</div>
</div>
<button class="btn btn-danger"
data-toggle="modal"
data-target="#personname-remove-dialog-#{personName.hashCode()}"
type="button">
<bootstrap:svgIcon icon="x-circle" />
<span class="sr-only">#{CmsAssetsStepsDefaultMessagesBundle['person.personname.remove']}</span>
</button>
<div aria-hidden="true"
aria-lablledby="personname-remove-dialog-#{personName.hashCode()}-title"
class="modal fade"
id="personname-remove-dialog-#{personName.hashCode()}"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/asset/#{CmsSelectedAssetModel.assetPath}/@person-edit/personnames/@remove"
class="modal-content"
method="post">
<div class="modal-header">
<h4 id="personname-edit-dialog-#{personName.hashCode()}-title">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.remove.dialog.title']}
</h4>
<button
aria-label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.remove.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div class="modal-body">
<input name="confirmed"
type="hidden"
value="true"/>
<p>
#{CmsAssetsStepsDefaultMessagesBundle.getMessage('person.personname.remove.dialog.message', [personName.prefix, personName.surname, personName.givenName, personName.suffix])}
</p>
<dl>
<div>
<dt>person.personname.prefix.label</dt>
<dd>#{personName.prefix}</dd>
<c:choose>
<c:when test="#{CmsPersonEditStepModel.personNames.isEmpty()}">
<p>
#{CmsAssetStepsDefaultStepsMessageBundle['person.personnames.none']}
</p>
</c:when>
<c:otherwise>
<table>
<thead>
<tr>
<th>#{CmsAssetsStepsDefaultMessagesBundle['person.personname.prefix.label']}</th>
<th>#{CmsAssetsStepsDefaultMessagesBundle['person.personname.surname.label']}</th>
<th>#{CmsAssetsStepsDefaultMessagesBundle['person.personname.givenname.label']}</th>
<th>#{CmsAssetsStepsDefaultMessagesBundle['person.personname.suffix.label']}</th>
<th>#{CmsAssetsStepsDefaultMessagesBundle['person.personnames.col.actions']}</th>
</tr>
</thead>
<tbody>
<c:forEach items="#{CmsPersonEditStepModel.personNames}"
var="personName">
<tr>
<td>#{personName.prefix}</td>
<td>#{personName.surname}</td>
<td>#{personName.givenName}</td>
<td>#{personName.suffix}</td>
<td>
<button class="btn btn-primary"
data-toggle="modal"
data-target="#personname-edit-dialog-#{personName.hashCode()}"
type="button">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">#{CmsAssetsStepsDefaultMessagesBundle['person.personname.edit']}</span>
</button>
<div aria-hidden="true"
aria-lablledby="personname-edit-dialog-#{personName.hashCode()}-title"
class="modal fade"
id="personname-edit-dialog-#{personName.hashCode()}"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/asset/#{CmsSelectedAssetModel.assetPath}/@person-edit/personnames/@edit"
class="modal-content"
method="post">
<div class="modal-header">
<h4 id="personname-edit-dialog-#{personName.hashCode()}-title">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.edit.dialog.title']}
</h4>
<button
aria-label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.edit.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div>
<dt>person.personname.surname.label</dt>
<dd>#{personName.surname}</dd>
<div class="modal-body">
<bootstrap:formGroupText
help="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.prefix.help']}"
inputId="prefix"
label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.prefix.label']}"
name="prefix"
value="#{personName.prefix}" />
<bootstrap:formGroupText
help="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.surname.help']}"
inputId="surname"
label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.surname.label']}"
name="surname"
value="#{personName.surname}" />
<bootstrap:formGroupText
help="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.givenname.help']}"
inputId="givenName"
label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.givenname.label']}"
name="givenName"
value="#{personName.givenName}" />
<bootstrap:formGroupText
help="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.suffix.help']}"
inputId="suffix"
label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.suffix.label']}"
name="suffix"
value="#{personName.suffix}" />
</div>
<div>
<dt>person.personname.givename.label</dt>
<dd>#{personName.givenName}</dd>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.edit.dialog.close']}
</button>
<button class="btn btn-success"
type="submit">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.edit.dialog.submit']}
</button>
</div>
<div>
<dt>person.personname.suffix.label</dt>
<dd>#{personName.suffix}</dd>
</div>
</dl>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.remove.dialog.close']}
</button>
<button class="btn btn-success"
type="submit">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.remove.dialog.submit']}
</button>
</div>
<button class="btn btn-danger"
data-toggle="modal"
data-target="#personname-remove-dialog-#{personName.hashCode()}"
type="button">
<bootstrap:svgIcon icon="x-circle" />
<span class="sr-only">#{CmsAssetsStepsDefaultMessagesBundle['person.personname.remove']}</span>
</button>
<div aria-hidden="true"
aria-lablledby="personname-remove-dialog-#{personName.hashCode()}-title"
class="modal fade"
id="personname-remove-dialog-#{personName.hashCode()}"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/asset/#{CmsSelectedAssetModel.assetPath}/@person-edit/personnames/@remove"
class="modal-content"
method="post">
<div class="modal-header">
<h4 id="personname-edit-dialog-#{personName.hashCode()}-title">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.remove.dialog.title']}
</h4>
<button
aria-label="#{CmsAssetsStepsDefaultMessagesBundle['person.personname.remove.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div class="modal-body">
<input name="confirmed"
type="hidden"
value="true"/>
<p>
#{CmsAssetsStepsDefaultMessagesBundle.getMessage('person.personname.remove.dialog.message', [personName.prefix, personName.surname, personName.givenName, personName.suffix])}
</p>
<dl>
<div>
<dt>#{CmsAssetsStepsDefaultMessagesBundle['person.personname.prefix.label']}</dt>
<dd>#{personName.prefix}</dd>
</div>
<div>
<dt>#{CmsAssetsStepsDefaultMessagesBundle['person.personname.surname.label']}</dt>
<dd>#{personName.surname}</dd>
</div>
<div>
<dt>#{CmsAssetsStepsDefaultMessagesBundle['person.personname.givename.label']}</dt>
<dd>#{personName.givenName}</dd>
</div>
<div>
<dt>#{CmsAssetsStepsDefaultMessagesBundle['person.personname.suffix.label']}</dt>
<dd>#{personName.suffix}</dd>
</div>
</dl>
</div>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.remove.dialog.close']}
</button>
<button class="btn btn-success"
type="submit">
#{CmsAssetsStepsDefaultMessagesBundle['person.personname.remove.dialog.submit']}
</button>
</div>
</form>
</div>
</form>
</div>
</div>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</c:otherwise>
</c:choose>
<ui:include src="../edit-contactable.xhtml">
<ui:param name="actionBaseUrl"
@ -255,7 +264,7 @@
<ui:param name="postalAddressAction"
value="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assets/#{CmsSelectedAssetModel.assetPath}/@person-edit/postaladdress" />
</ui:include>
</ui:define>
</ui:composition>

View File

@ -263,3 +263,8 @@ person.personname.remove.dialog.title=Remove Person Name
person.personname.remove.dialog.close=Cancel
person.personname.remove.dialog.message=Are you sure to remove the following person name: {0} {1} {2} {3}?
person.personname.remove.dialog.submit=Remove name
person.label=Person
person.description=Contact information of a person
person.createform.title=Create new Person
person.personnames.col.actions=Actions
person.personnames.none=No person names yet.

View File

@ -263,3 +263,8 @@ person.personname.remove.dialog.title=Namen entfernen
person.personname.remove.dialog.close=Abbrechen
person.personname.remove.dialog.message=Sind Sie sicher, dass Sie den folgenden Namen entfernen wollen: {0} {1} {2} {3}?
person.personname.remove.dialog.submit=Namen entfernen
person.label=Person
person.description=Kontaktinformationen einer Person
person.createform.title=Neue Person anlegen
person.personnames.col.actions=Aktionen
person.personnames.none=Noch keine Personennamen vorhanden.

View File

@ -64,7 +64,6 @@ import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
/**
* Tests for the {@link AssetRepository}.
*
@ -277,19 +276,25 @@ public class AssetRepositoryIT {
"datasets/org/librecms/contentsection/AssetRepositoryTest/data.xml")
public void findAssetByUuidAndType() {
final Optional<Asset> asset = shiro
final Optional<? extends Asset> asset = shiro
.getSystemUser()
.execute(() -> {
.execute(
() -> {
return assetRepo
.findByUuidAndType("4635589f-b87a-46d9-979e-6af14af063e5",
Image.class);
.findByUuidAndType(
"4635589f-b87a-46d9-979e-6af14af063e5",
Image.class
);
});
final Optional<Asset> none = shiro
final Optional<? extends Asset> none = shiro
.getSystemUser()
.execute(() -> {
.execute(
() -> {
return assetRepo
.findByUuidAndType("4635589f-b87a-46d9-979e-6af14af063e5",
FileAsset.class);
.findByUuidAndType(
"4635589f-b87a-46d9-979e-6af14af063e5",
FileAsset.class
);
});
assertThat(asset.isPresent(), is(true));