Bugfixes for the authoring of event

pull/15/head
Jens Pelzetter 2022-02-05 19:52:57 +01:00
parent 257c71e185
commit 53956098fb
17 changed files with 661 additions and 91 deletions

View File

@ -42,8 +42,10 @@ import org.libreccm.l10n.LocalizedString;
import org.librecms.CmsConstants; import org.librecms.CmsConstants;
import org.librecms.contentsection.ContentItem; import org.librecms.contentsection.ContentItem;
import org.librecms.ui.contentsections.documents.MvcAuthoringKit;
import javax.validation.constraints.NotNull; import org.librecms.ui.contenttypes.event.MvcEventCreateStep;
import org.librecms.ui.contenttypes.event.MvcEventInfoStep;
import org.librecms.ui.contenttypes.event.MvcEventPropertiesStep;
import static org.librecms.CmsConstants.DB_SCHEMA; import static org.librecms.CmsConstants.DB_SCHEMA;
@ -77,6 +79,13 @@ import static org.librecms.CmsConstants.DB_SCHEMA;
order = 2 order = 2
) )
}) })
@MvcAuthoringKit(
createStep = MvcEventCreateStep.class,
authoringSteps = {
MvcEventPropertiesStep.class,
MvcEventInfoStep.class
}
)
public class Event extends ContentItem implements Serializable { public class Event extends ContentItem implements Serializable {
private static final long serialVersionUID = -9104886733503414635L; private static final long serialVersionUID = -9104886733503414635L;
@ -94,9 +103,8 @@ public class Event extends ContentItem implements Serializable {
)) ))
private LocalizedString text; private LocalizedString text;
@Column(name = "START_DATE", nullable = false) @Column(name = "START_DATE")
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
@NotNull
private Date startDate; private Date startDate;
@Column(name = "END_DATE") @Column(name = "END_DATE")

View File

@ -25,6 +25,9 @@ import org.librecms.ui.contentsections.documents.relatedinfo.RelatedInfoStepServ
import org.librecms.ui.contenttypes.article.MvcArticlePropertiesStep; import org.librecms.ui.contenttypes.article.MvcArticlePropertiesStep;
import org.librecms.ui.contenttypes.article.MvcArticleTextBodyStep; import org.librecms.ui.contenttypes.article.MvcArticleTextBodyStep;
import org.librecms.ui.contenttypes.article.MvcArticleTextBodyStepResources; import org.librecms.ui.contenttypes.article.MvcArticleTextBodyStepResources;
import org.librecms.ui.contenttypes.event.MvcEventInfoStep;
import org.librecms.ui.contenttypes.event.MvcEventInfoStepResources;
import org.librecms.ui.contenttypes.event.MvcEventPropertiesStep;
import org.librecms.ui.contenttypes.mpa.MpaSectionsResources; import org.librecms.ui.contenttypes.mpa.MpaSectionsResources;
import org.librecms.ui.contenttypes.mpa.MvcMpaPropertiesStep; import org.librecms.ui.contenttypes.mpa.MvcMpaPropertiesStep;
import org.librecms.ui.contenttypes.mpa.MvcMpaSectionsStep; import org.librecms.ui.contenttypes.mpa.MvcMpaSectionsStep;
@ -51,6 +54,8 @@ public class CmsMvcAuthoringSteps implements MvcAuthoringSteps {
RelatedInfoStep.class, RelatedInfoStep.class,
MvcArticlePropertiesStep.class, MvcArticlePropertiesStep.class,
MvcArticleTextBodyStep.class, MvcArticleTextBodyStep.class,
MvcEventPropertiesStep.class,
MvcEventInfoStep.class,
MvcMpaPropertiesStep.class, MvcMpaPropertiesStep.class,
MvcMpaSectionsStep.class MvcMpaSectionsStep.class
); );
@ -61,6 +66,7 @@ public class CmsMvcAuthoringSteps implements MvcAuthoringSteps {
return Set.of( return Set.of(
MediaStepService.class, MediaStepService.class,
MvcArticleTextBodyStepResources.class, MvcArticleTextBodyStepResources.class,
MvcEventInfoStepResources.class,
MpaSectionsResources.class, MpaSectionsResources.class,
RelatedInfoStepService.class RelatedInfoStepService.class
); );

View File

@ -19,6 +19,7 @@
package org.librecms.ui.contenttypes.event; package org.librecms.ui.contenttypes.event;
import org.libreccm.l10n.GlobalizationHelper; import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.l10n.LocalizedString;
import org.libreccm.security.AuthorizationRequired; import org.libreccm.security.AuthorizationRequired;
import org.libreccm.workflow.Workflow; import org.libreccm.workflow.Workflow;
import org.librecms.contentsection.ContentItemManager; import org.librecms.contentsection.ContentItemManager;
@ -26,6 +27,13 @@ import org.librecms.contentsection.ContentItemRepository;
import org.librecms.contenttypes.Event; import org.librecms.contenttypes.Event;
import org.librecms.ui.contentsections.documents.AbstractMvcDocumentCreateStep; import org.librecms.ui.contentsections.documents.AbstractMvcDocumentCreateStep;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Date;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
@ -49,6 +57,8 @@ public class MvcEventCreateStep
private static final String FORM_PARAM_TITLE = "title"; private static final String FORM_PARAM_TITLE = "title";
private static final String FORM_PARAM_STARTDATE = "startDate";
private static final String FORM_PARAM_SUMMARY = "summary"; private static final String FORM_PARAM_SUMMARY = "summary";
private static final String FORM_PARAM_INITIAL_LOCALE = "locale"; private static final String FORM_PARAM_INITIAL_LOCALE = "locale";
@ -83,6 +93,11 @@ public class MvcEventCreateStep
*/ */
private String title; private String title;
/**
* The start date of the event (ISO 8601 string)
*/
private String startDate;
/** /**
* Summary of the event. * Summary of the event.
*/ */
@ -123,6 +138,10 @@ public class MvcEventCreateStep
return title; return title;
} }
public String getStartDate() {
return startDate;
}
public String getSummary() { public String getSummary() {
return summary; return summary;
} }
@ -200,6 +219,37 @@ public class MvcEventCreateStep
} }
title = formParams.get(FORM_PARAM_TITLE)[0]; title = formParams.get(FORM_PARAM_TITLE)[0];
if (!formParams.containsKey(FORM_PARAM_STARTDATE)
|| formParams.get(FORM_PARAM_STARTDATE) == null
|| formParams.get(FORM_PARAM_STARTDATE).length == 0) {
addMessage(
"danger",
globalizationHelper
.getLocalizedTextsUtil(getBundle())
.getText("createstep.startdate.error.missing")
);
return showCreateStep();
}
startDate = formParams.get(FORM_PARAM_STARTDATE)[0];
final DateTimeFormatter isoDateTimeFormatter
= DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneId.systemDefault());
final LocalDateTime startDateTime;
try {
startDateTime = LocalDateTime.parse(
startDate,
isoDateTimeFormatter
);
} catch (DateTimeParseException ex) {
addMessage(
"danger",
globalizationHelper
.getLocalizedTextsUtil(getBundle())
.getText("createstep.startdate.error.malformed")
);
return showCreateStep();
}
if (!formParams.containsKey(FORM_PARAM_SUMMARY) if (!formParams.containsKey(FORM_PARAM_SUMMARY)
|| formParams.get(FORM_PARAM_SUMMARY) == null || formParams.get(FORM_PARAM_SUMMARY) == null
|| formParams.get(FORM_PARAM_SUMMARY).length == 0) { || formParams.get(FORM_PARAM_SUMMARY).length == 0) {
@ -271,6 +321,13 @@ public class MvcEventCreateStep
); );
event.getTitle().putValue(locale, title); event.getTitle().putValue(locale, title);
event.setStartDate(
Date.from(
startDateTime.toInstant(
ZoneId.systemDefault().getRules().getOffset(startDateTime)
)
)
);
event.getDescription().putValue(locale, summary); event.getDescription().putValue(locale, summary);
itemRepo.save(event); itemRepo.save(event);

View File

@ -25,6 +25,7 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Named; import javax.inject.Named;
@ -48,29 +49,50 @@ class MvcEventInfoStepEventDateModel {
private String selectedLocale; private String selectedLocale;
public Map<String, String> getEventDateValues() { public Map<String, String> getEventDateValues() {
return Collections.unmodifiableMap(eventDateValues); return Optional
.ofNullable(eventDateValues)
.map(Collections::unmodifiableMap)
.orElse(Collections.emptyMap());
} }
protected void setEventDateValues( protected void setEventDateValues(
final Map<String, String> eventDateValues final Map<String, String> eventDateValues
) { ) {
this.eventDateValues = new HashMap<>(eventDateValues); this.eventDateValues = Optional
.ofNullable(eventDateValues)
.map(values -> new HashMap<>(values))
.map(values -> (Map<String, String>) values)
.orElse(Collections.emptyMap());
} }
public List<CmsEditorLocaleVariantRow> getVariants() { public List<CmsEditorLocaleVariantRow> getVariants() {
return Collections.unmodifiableList(variants); return Optional
.ofNullable(variants)
.map(Collections::unmodifiableList)
.orElse(Collections.emptyList());
} }
protected void setVariants(final List<CmsEditorLocaleVariantRow> variants) { protected void setVariants(final List<CmsEditorLocaleVariantRow> variants) {
this.variants = new ArrayList<>(variants); this.variants = Optional
.ofNullable(variants)
.map(list -> new ArrayList<>(list))
.map(list -> (List<CmsEditorLocaleVariantRow>) list)
.orElse(Collections.emptyList());
} }
public List<String> getUnusedLocales() { public List<String> getUnusedLocales() {
return Collections.unmodifiableList(unusedLocales); return Optional
.ofNullable(unusedLocales)
.map(Collections::unmodifiableList)
.orElse(Collections.emptyList());
} }
protected void setUnusedLocales(final List<String> unusedLocales) { protected void setUnusedLocales(final List<String> unusedLocales) {
this.unusedLocales = new ArrayList<>(unusedLocales); this.unusedLocales = Optional
.ofNullable(unusedLocales)
.map(list -> new ArrayList<>(list))
.map(list -> (List<String>) list)
.orElse(Collections.emptyList());
} }
public String getSelectedLocale() { public String getSelectedLocale() {

View File

@ -25,6 +25,7 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Named; import javax.inject.Named;
@ -37,7 +38,7 @@ import javax.inject.Named;
@Named("CmsEventInfoStepEventType") @Named("CmsEventInfoStepEventType")
public class MvcEventInfoStepEventTypeModel { public class MvcEventInfoStepEventTypeModel {
private boolean canEdit; private boolean canEdit;
private Map<String, String> eventTypeValues; private Map<String, String> eventTypeValues;
@ -48,27 +49,50 @@ public class MvcEventInfoStepEventTypeModel {
private String selectedLocale; private String selectedLocale;
public Map<String, String> getEventTypeValues() { public Map<String, String> getEventTypeValues() {
return Collections.unmodifiableMap(eventTypeValues); return Optional
.ofNullable(eventTypeValues)
.map(Collections::unmodifiableMap)
.orElse(Collections.emptyMap());
} }
protected void setEventTypeValues(final Map<String, String> eventTypeValues) { protected void setEventTypeValues(
this.eventTypeValues = new HashMap<>(eventTypeValues); final Map<String, String> eventTypeValues
) {
this.eventTypeValues = Optional
.ofNullable(eventTypeValues)
.map(values -> new HashMap<>(values))
.map(values -> (Map<String, String>) values)
.orElse(Collections.emptyMap());
} }
public List<CmsEditorLocaleVariantRow> getVariants() { public List<CmsEditorLocaleVariantRow> getVariants() {
return Collections.unmodifiableList(variants); return Optional
.ofNullable(variants)
.map(Collections::unmodifiableList)
.orElse(Collections.emptyList());
} }
protected void setVariants(final List<CmsEditorLocaleVariantRow> variants) { protected void setVariants(final List<CmsEditorLocaleVariantRow> variants) {
this.variants = new ArrayList<>(variants); this.variants = Optional
.ofNullable(variants)
.map(list -> new ArrayList<>(list))
.map(list -> (List<CmsEditorLocaleVariantRow>) list)
.orElse(Collections.emptyList());
} }
public List<String> getUnusedLocales() { public List<String> getUnusedLocales() {
return Collections.unmodifiableList(unusedLocales); return Optional
.ofNullable(unusedLocales)
.map(Collections::unmodifiableList)
.orElse(Collections.emptyList());
} }
protected void setUnusedLocales(final List<String> unusedLocales) { protected void setUnusedLocales(final List<String> unusedLocales) {
this.unusedLocales = new ArrayList<>(unusedLocales); this.unusedLocales = Optional
.ofNullable(unusedLocales)
.map(list -> new ArrayList<>(list))
.map(list -> (List<String>) list)
.orElse(Collections.emptyList());
} }
public String getSelectedLocale() { public String getSelectedLocale() {

View File

@ -25,6 +25,7 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Named; import javax.inject.Named;
@ -48,27 +49,48 @@ public class MvcEventInfoStepLocationModel {
private String selectedLocale; private String selectedLocale;
public Map<String, String> getLocationValues() { public Map<String, String> getLocationValues() {
return Collections.unmodifiableMap(locationValues); return Optional
.ofNullable(locationValues)
.map(Collections::unmodifiableMap)
.orElse(Collections.emptyMap());
} }
protected void setLocationValues(final Map<String, String> locationValues) { protected void setLocationValues(final Map<String, String> locationValues) {
this.locationValues = new HashMap<>(locationValues); this.locationValues = Optional
.ofNullable(locationValues)
.map(values -> new HashMap<>(values))
.map(values -> (Map<String, String>) values)
.orElse(Collections.emptyMap());
} }
public List<CmsEditorLocaleVariantRow> getVariants() { public List<CmsEditorLocaleVariantRow> getVariants() {
return Collections.unmodifiableList(variants); return Optional
.ofNullable(variants)
.map(Collections::unmodifiableList)
.orElse(Collections.emptyList());
} }
protected void setVariants(final List<CmsEditorLocaleVariantRow> variants) { protected void setVariants(final List<CmsEditorLocaleVariantRow> variants) {
this.variants = new ArrayList<>(variants); this.variants = Optional
.ofNullable(variants)
.map(list -> new ArrayList<>(list))
.map(list -> (List<CmsEditorLocaleVariantRow>) list)
.orElse(Collections.emptyList());
} }
public List<String> getUnusedLocales() { public List<String> getUnusedLocales() {
return Collections.unmodifiableList(unusedLocales); return Optional
.ofNullable(unusedLocales)
.map(Collections::unmodifiableList)
.orElse(Collections.emptyList());
} }
protected void setUnusedLocales(final List<String> unusedLocales) { protected void setUnusedLocales(final List<String> unusedLocales) {
this.unusedLocales = new ArrayList<>(unusedLocales); this.unusedLocales = Optional
.ofNullable(unusedLocales)
.map(list -> new ArrayList<>(list))
.map(list -> (List<String>) list)
.orElse(Collections.emptyList());
} }
public String getSelectedLocale() { public String getSelectedLocale() {

View File

@ -25,6 +25,7 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Named; import javax.inject.Named;
@ -37,7 +38,7 @@ import javax.inject.Named;
@Named("CmsEventInfoStepMainContributor") @Named("CmsEventInfoStepMainContributor")
public class MvcEventInfoStepMainContributorModel { public class MvcEventInfoStepMainContributorModel {
private boolean canEdit; private boolean canEdit;
private Map<String, String> contributorValues; private Map<String, String> contributorValues;
@ -48,29 +49,50 @@ public class MvcEventInfoStepMainContributorModel {
private String selectedLocale; private String selectedLocale;
public Map<String, String> getContributorValues() { public Map<String, String> getContributorValues() {
return Collections.unmodifiableMap(contributorValues); return Optional
.ofNullable(contributorValues)
.map(Collections::unmodifiableMap)
.orElse(Collections.emptyMap());
} }
protected void setContributorValues( protected void setContributorValues(
final Map<String, String> contributorValues final Map<String, String> contributorValues
) { ) {
this.contributorValues = new HashMap<>(contributorValues); this.contributorValues = Optional
.ofNullable(contributorValues)
.map(values -> new HashMap<>(values))
.map(values -> (Map<String, String>) values)
.orElse(Collections.emptyMap());
} }
public List<CmsEditorLocaleVariantRow> getVariants() { public List<CmsEditorLocaleVariantRow> getVariants() {
return Collections.unmodifiableList(variants); return Optional
.ofNullable(variants)
.map(Collections::unmodifiableList)
.orElse(Collections.emptyList());
} }
protected void setVariants(final List<CmsEditorLocaleVariantRow> variants) { protected void setVariants(final List<CmsEditorLocaleVariantRow> variants) {
this.variants = new ArrayList<>(variants); this.variants = Optional
.ofNullable(variants)
.map(list -> new ArrayList<>(list))
.map(list -> (List<CmsEditorLocaleVariantRow>) list)
.orElse(Collections.emptyList());
} }
public List<String> getUnusedLocales() { public List<String> getUnusedLocales() {
return Collections.unmodifiableList(unusedLocales); return Optional
.ofNullable(unusedLocales)
.map(Collections::unmodifiableList)
.orElse(Collections.emptyList());
} }
protected void setUnusedLocales(final List<String> unusedLocales) { protected void setUnusedLocales(final List<String> unusedLocales) {
this.unusedLocales = new ArrayList<>(unusedLocales); this.unusedLocales = Optional
.ofNullable(unusedLocales)
.map(list -> new ArrayList<>(list))
.map(list -> (List<String>) list)
.orElse(Collections.emptyList());
} }
public String getSelectedLocale() { public String getSelectedLocale() {

View File

@ -176,24 +176,55 @@ public class MvcEventPropertiesStep extends AbstractMvcAuthoringStep {
); );
final Event event = (Event) getDocument(); final Event event = (Event) getDocument();
final DateTimeFormatter isoDateFormatter
= DateTimeFormatter.ISO_LOCAL_DATE.withZone(ZoneId.systemDefault());
final DateTimeFormatter isoTimeFormatter
= DateTimeFormatter.ISO_TIME.withZone(ZoneId.systemDefault());
final DateTimeFormatter isoDateTimeFormatter final DateTimeFormatter isoDateTimeFormatter
= DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneId.systemDefault()); = DateTimeFormatter.ISO_LOCAL_DATE_TIME
.withZone(ZoneId.systemDefault());
eventPropertiesStepModel.setStartDate( eventPropertiesStepModel.setStartDateTime(
Optional Optional
.ofNullable(event.getStartDate()) .ofNullable(event.getStartDate())
.map(startDate -> startDate.toInstant()) .map(startDate -> startDate.toInstant())
.map(startDate -> isoDateTimeFormatter.format(startDate)) .map(startDate -> isoDateTimeFormatter.format(startDate))
.orElse("") .orElse("")
); );
eventPropertiesStepModel.setFormattedStartDateTime(
Optional
.ofNullable(event.getStartDate())
.map(startDate -> startDate.toInstant())
.map(
startDate -> String.format(
"%s %s",
isoDateFormatter.format(startDate),
isoTimeFormatter.format(startDate)
)
)
.orElse("")
);
eventPropertiesStepModel.setEndDate( eventPropertiesStepModel.setEndDateTime(
Optional Optional
.ofNullable(event.getEndDate()) .ofNullable(event.getEndDate())
.map(endDate -> endDate.toInstant()) .map(endDate -> endDate.toInstant())
.map(endDate -> isoDateTimeFormatter.format(endDate)) .map(endDate -> isoDateTimeFormatter.format(endDate))
.orElse("") .orElse("")
); );
eventPropertiesStepModel.setFormattedEndDateTime(
Optional
.ofNullable(event.getEndDate())
.map(endDate -> endDate.toInstant())
.map(
endDate -> String.format(
"%s %s",
isoDateFormatter.format(endDate),
isoTimeFormatter.format(endDate)
)
)
.orElse("")
);
eventPropertiesStepModel.setMapLink(event.getMapLink()); eventPropertiesStepModel.setMapLink(event.getMapLink());
} }
@ -278,10 +309,10 @@ public class MvcEventPropertiesStep extends AbstractMvcAuthoringStep {
} }
@POST @POST
@Path("/eventproperties") @Path("/eventdatetime")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public String updateEventProperties( public String updateEventDateTime(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM) @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier, final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME) @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
@ -289,11 +320,7 @@ public class MvcEventPropertiesStep extends AbstractMvcAuthoringStep {
@FormParam("startDateTime") @FormParam("startDateTime")
final String startDateTime, final String startDateTime,
@FormParam("endDateTime") @FormParam("endDateTime")
final String endDateTime, final String endDateTime
@FormParam("timeZone")
final String timeZone,
@FormParam("mapLink")
final String mapLink
) { ) {
try { try {
init(); init();
@ -307,7 +334,7 @@ public class MvcEventPropertiesStep extends AbstractMvcAuthoringStep {
final Event event = (Event) getDocument(); final Event event = (Event) getDocument();
final DateTimeFormatter isoDateTimeFormatter final DateTimeFormatter isoDateTimeFormatter
= DateTimeFormatter.ISO_DATE_TIME = DateTimeFormatter.ISO_DATE_TIME
.withZone(ZoneId.of(timeZone)); .withZone(ZoneId.systemDefault());
event.setStartDate( event.setStartDate(
Date.from( Date.from(
ZonedDateTime.parse( ZonedDateTime.parse(
@ -325,6 +352,42 @@ public class MvcEventPropertiesStep extends AbstractMvcAuthoringStep {
).toInstant() ).toInstant()
) )
); );
itemRepo.save(event);
return buildRedirectPathForStep();
} else {
return documentUi.showAccessDenied(
getContentSection(),
getDocument(),
getLabel()
);
}
}
@POST
@Path("/maplink")
@AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED)
public String updateMapLink(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
@FormParam("mapLink")
final String mapLink
) {
try {
init();
} catch (ContentSectionNotFoundException ex) {
return ex.showErrorMessage();
} catch (DocumentNotFoundException ex) {
return ex.showErrorMessage();
}
if (itemPermissionChecker.canEditItem(getDocument())) {
final Event event = (Event) getDocument();
event.setMapLink(mapLink); event.setMapLink(mapLink);
itemRepo.save(event); itemRepo.save(event);

View File

@ -45,9 +45,13 @@ public class MvcEventPropertiesStepModel {
private List<String> unusedDescriptionLocales; private List<String> unusedDescriptionLocales;
private String startDate; private String startDateTime;
private String endDate; private String formattedStartDateTime;
private String endDateTime;
private String formattedEndDateTime;
private String mapLink; private String mapLink;
@ -97,20 +101,44 @@ public class MvcEventPropertiesStepModel {
); );
} }
public String getStartDate() { public String getStartDateTime() {
return startDate; return startDateTime;
} }
public void setStartDate(final String startDate) { public void setStartDateTime(final String startDateTime) {
this.startDate = startDate; this.startDateTime = startDateTime;
} }
public String getEndDate() { public String getFormattedStartDateTime() {
return endDate; return formattedStartDateTime;
} }
public void setEndDate(final String endDate) { public void setFormattedStartDateTime(final String formattedStartDateTime) {
this.endDate = endDate; this.formattedStartDateTime = formattedStartDateTime;
}
public boolean getHasStartDate() {
return !startDateTime.isBlank();
}
public String getEndDateTime() {
return endDateTime;
}
public void setEndDateTime(final String endDateTime) {
this.endDateTime = endDateTime;
}
public String getFormattedEndDateTime() {
return formattedEndDateTime;
}
public void setFormattedEndDateTime(final String formattedEndDateTime) {
this.formattedEndDateTime = formattedEndDateTime;
}
public boolean getHasEndDate() {
return !endDateTime.isBlank();
} }
public String getMapLink() { public String getMapLink() {
@ -121,4 +149,8 @@ public class MvcEventPropertiesStepModel {
this.mapLink = mapLink; this.mapLink = mapLink;
} }
public boolean getHasMapLink() {
return !mapLink.isBlank();
}
} }

View File

@ -47,6 +47,14 @@
required="true" required="true"
/> />
<bootstrap:formGroupDateTime
help="#{CmsEventMessageBundle['createform.startdate.help']}"
inputId="startDate"
label="#{CmsEventMessageBundle['createform.startdate.label']}"
name="startDate"
required="true"
/>
<bootstrap:formGroupTextarea <bootstrap:formGroupTextarea
cols="80" cols="80"
help="#{CmsEventMessageBundle['createform.summary.help']}" help="#{CmsEventMessageBundle['createform.summary.help']}"

View File

@ -12,7 +12,7 @@
<ui:define name="authoringStep"> <ui:define name="authoringStep">
<h2>#{CmsEventMessageBundle.getMessage('basicproperties.header', [CmsEventPropertiesStep.name])}</h2> <h2>#{CmsEventMessageBundle.getMessage('basicproperties.header', [CmsEventPropertiesStep.name])}</h2>
<h3>#{CmsEventPropertiesStep.getMessage('basicproperties.name.header')}</h3> <h3>#{CmsEventMessageBundle['basicproperties.name.header']}</h3>
<div class="d-flex"> <div class="d-flex">
<pre class="mr-2">#{CmsEventPropertiesStep.name}</pre> <pre class="mr-2">#{CmsEventPropertiesStep.name}</pre>
<c:if test="#{CmsSelectedDocumentModel.canEdit}"> <c:if test="#{CmsSelectedDocumentModel.canEdit}">
@ -41,7 +41,7 @@
<div class="modal-header"> <div class="modal-header">
<h4 class="modal-title" <h4 class="modal-title"
id="name-edit-dialog-title"> id="name-edit-dialog-title">
#{CmsEventMessageBundle['basicproperties.name.-edit.title']} #{CmsEventMessageBundle['basicproperties.name.edit.title']}
</h4> </h4>
<button aria-label="#{CmsEventMessageBundle['basicproperties.name.edit.close']}" <button aria-label="#{CmsEventMessageBundle['basicproperties.name.edit.close']}"
class="close" class="close"
@ -110,6 +110,84 @@
/> />
<div class="d-flex">
<h3 class="mr-2">#{CmsEventMessageBundle['basicproperties.eventdatetime.header']}</h3>
<button class="btn btn-primary btn-sm"
data-toggle="modal"
data-target="#eventdatetime-edit-dialog"
type="button">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">
#{CmsEventMessageBundle['basicproperties.eventdatetime.edit']}
</span>
</button>
</div>
<dl>
<dt>#{CmsEventMessageBundle['basicproperties.startdate']}</dt>
<dd>
#{CmsEventPropertiesStep.hasStartDate ? CmsEventPropertiesStep.formattedStartDateTime : CmsEventMessageBundle['basicproperties.startdate.none']}
</dd>
<dt>#{CmsEventMessageBundle['basicproperties.enddate']}</dt>
<dd>
#{CmsEventPropertiesStep.hasEndDate ? CmsEventPropertiesStep.formattedEndDateTime : CmsEventMessageBundle['basicproperties.enddate.none']}
</dd>
</dl>
<div aria-hidden="true"
aria-labelledby="eventdatetime-edit-dialog-title"
class="modal fade"
id="eventdatetime-edit-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-basicproperties/eventdatetime"
class="modal-content"
method="post">
<div class="modal-header">
<h4 class="modal-title"
id="eventdatetime-edit-dialog-title">
#{CmsEventMessageBundle['basicproperties.eventdatetime.edit.dialog.title']}
</h4>
<button aria-label="#{CmsEventMessageBundle['basicproperties.eventdatetime.edit.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
<bootstrap:svgIcon icon="x" />
</button>
</div>
<div class="modal-body">
<bootstrap:formGroupDateTime
help="#{CmsEventMessageBundle['basicproperties.eventdatetime.edit.dialog.startdate.help']}"
inputId="startDateTime"
label="#{CmsEventMessageBundle['basicproperties.eventdatetime.edit.dialog.startdate.label']}"
name="startDateTime"
required="true"
value="#{CmsEventPropertiesStep.startDateTime}"
/>
<bootstrap:formGroupDateTime
help="#{CmsEventMessageBundle['basicproperties.eventdatetime.edit.dialog.enddate.help']}"
inputId="endDateTime"
label="#{CmsEventMessageBundle['basicproperties.eventdatetime.edit.dialog.enddate.label']}"
name="endDateTime"
required="true"
value="#{CmsEventPropertiesStep.endDateTime}"
/>
</div>
<div class="modal-footer">
<button class="btn btn-warning"
data-dismiss="modal"
type="button">
#{CmsEventMessageBundle['basicproperties.eventdatetime.edit.dialog.close']}
</button>
<button class="btn btn-success"
type="submit">
#{CmsEventMessageBundle['basicproperties.eventdatetime.edit.dialog.submit']}
</button>
</div>
</form>
</div>
</div>
<libreccm:localizedStringEditor <libreccm:localizedStringEditor
addButtonLabel="#{CmsEventMessageBundle['basicproperties.description.add']}" addButtonLabel="#{CmsEventMessageBundle['basicproperties.description.add']}"
addDialogCancelLabel="#{CmsEventMessageBundle['basicproperties.description.add.cancel']}" addDialogCancelLabel="#{CmsEventMessageBundle['basicproperties.description.add.cancel']}"

View File

@ -0,0 +1,86 @@
<!DOCTYPE html [<!ENTITY times '&#215;'>]>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:libreccm="http://xmlns.jcp.org/jsf/composite/components/libreccm"
xmlns:librecms="http://xmlns.jcp.org/jsf/composite/components/librecms"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition template="/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml">
<ui:param name="authoringStep"
value="/libreccm/@contentsections/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info" />
<ui:define name="authoringStep">
<h2>#{CmsEventMessageBundle['eventinfo_step.header']}</h2>
<librecms:cmsEditorVariants
addButtonLabel="#{CmsEventMessageBundle['eventdate.editor.add_variant']}"
addDialogLocaleSelectHelp="#{CmsAdminMessages['text.editor.add.locale.help']}"
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventdate/add"
canEdit="#{CmsSelectedDocumentModel.canEdit}"
editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventdate/edit"
hasUnusedLocales="#{!CmsEventInfoStepEventDate.unusedLocales.isEmpty()}"
headingLevel="3"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventdate/remove"
sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/edit-source"
title="#{CmsEventMessageBundle['eventdate.editor.header']}"
unusedLocales="#{CmsEventInfoStepEventDate.unusedLocales}"
variants="#{CmsEventInfoStepEventDate.variants}"
viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/view"
/>
<librecms:cmsEditorVariants
addButtonLabel="#{CmsEventMessageBundle['location.editor.add_variant']}"
addDialogLocaleSelectHelp="#{CmsAdminMessages['text.editor.add.locale.help']}"
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/location/add"
canEdit="#{CmsSelectedDocumentModel.canEdit}"
editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/location/edit"
hasUnusedLocales="#{!CmsEventInfoStepLocation.unusedLocales.isEmpty()}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/location/remove"
sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/edit-source"
title="#{CmsEventMessageBundle['location.editor.header']}"
unusedLocales="#{CmsEventInfoStepLocation.unusedLocales}"
variants="#{CmsEventInfoStepLocation.variants}"
viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/view"
/>
<librecms:cmsEditorVariants
addButtonLabel="#{CmsEventMessageBundle['main_contributor.editor.add_variant']}"
addDialogLocaleSelectHelp="#{CmsAdminMessages['text.editor.add.locale.help']}"
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/main-contributor/add"
canEdit="#{CmsSelectedDocumentModel.canEdit}"
editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/main-contributor/edit"
hasUnusedLocales="#{!CmsEventInfoStepMainContributor.unusedLocales.isEmpty()}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/main-contributor/remove"
sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/edit-source"
title="#{CmsEventMessageBundle['main_contributor.editor.header']}"
unusedLocales="#{CmsEventInfoStepMainContributor.unusedLocales}"
variants="#{CmsEventInfoStepMainContributor.variants}"
viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/view"
/>
<librecms:cmsEditorVariants
addButtonLabel="#{CmsEventMessageBundle['eventtype.editor.add_variant']}"
addDialogLocaleSelectHelp="#{CmsAdminMessages['text.editor.add.locale.help']}"
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventtype/add"
canEdit="#{CmsSelectedDocumentModel.canEdit}"
editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventtype/edit"
hasUnusedLocales="#{!CmsEventInfoStepEventType.unusedLocales.isEmpty()}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventtype/remove"
sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/edit-source"
title="#{CmsEventMessageBundle['eventtype.editor.header']}"
unusedLocales="#{CmsEventInfoStepEventType.unusedLocales}"
variants="#{CmsEventInfoStepEventType.variants}"
viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/view"
/>
</ui:define>
<ui:define name="scripts">
<script src="#{request.contextPath}/assets/@content-sections/cms-editor.js"></script>
</ui:define>
</ui:composition>
</html>

View File

@ -35,12 +35,12 @@
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/location/add" addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/location/add"
canEdit="#{CmsSelectedDocumentModel.canEdit}" canEdit="#{CmsSelectedDocumentModel.canEdit}"
editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/location/edit" editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/location/edit"
hasUnusedLocales="#{!CmsEventInfoStepEventDate.unusedLocales.isEmpty()}" hasUnusedLocales="#{!CmsEventInfoStepLocation.unusedLocales.isEmpty()}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/location/remove" removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/location/remove"
sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/edit-source" sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/edit-source"
title="#{CmsEventMessageBundle['location.editor.header']}" title="#{CmsEventMessageBundle['location.editor.header']}"
unusedLocales="#{CmsEventInfoStepEventDate.unusedLocales}" unusedLocales="#{CmsEventInfoStepLocation.unusedLocales}"
variants="#{CmsEventInfoStepEventDate.variants}" variants="#{CmsEventInfoStepLocation.variants}"
viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/view" viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/view"
/> />
@ -50,12 +50,12 @@
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/main-contributor/add" addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/main-contributor/add"
canEdit="#{CmsSelectedDocumentModel.canEdit}" canEdit="#{CmsSelectedDocumentModel.canEdit}"
editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/main-contributor/edit" editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/main-contributor/edit"
hasUnusedLocales="#{!CmsEventInfoStepEventDate.unusedLocales.isEmpty()}" hasUnusedLocales="#{!CmsEventInfoStepMainContributor.unusedLocales.isEmpty()}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/main-contributor/remove" removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/main-contributor/remove"
sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/edit-source" sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/edit-source"
title="#{CmsEventMessageBundle['main_contributor.editor.header']}" title="#{CmsEventMessageBundle['main_contributor.editor.header']}"
unusedLocales="#{CmsEventInfoStepEventDate.unusedLocales}" unusedLocales="#{CmsEventInfoStepMainContributor.unusedLocales}"
variants="#{CmsEventInfoStepEventDate.variants}" variants="#{CmsEventInfoStepMainContributor.variants}"
viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/view" viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/view"
/> />
@ -65,12 +65,12 @@
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventtype/add" addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventtype/add"
canEdit="#{CmsSelectedDocumentModel.canEdit}" canEdit="#{CmsSelectedDocumentModel.canEdit}"
editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventtype/edit" editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventtype/edit"
hasUnusedLocales="#{!CmsEventInfoStepEventDate.unusedLocales.isEmpty()}" hasUnusedLocales="#{!CmsEventInfoStepEventType.unusedLocales.isEmpty()}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventtype/remove" removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/eventtype/remove"
sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/edit-source" sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/edit-source"
title="#{CmsEventMessageBundle['eventtype.editor.header']}" title="#{CmsEventMessageBundle['eventtype.editor.header']}"
unusedLocales="#{CmsEventInfoStepEventDate.unusedLocales}" unusedLocales="#{CmsEventInfoStepEventType.unusedLocales}"
variants="#{CmsEventInfoStepEventDate.variants}" variants="#{CmsEventInfoStepEventType.variants}"
viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/view" viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@event-info/view"
/> />

View File

@ -0,0 +1 @@
alter table ccm_cms.events alter COLUMN start_date drop not null;

View File

@ -0,0 +1 @@
alter table ccm_cms.events alter COLUMN start_date drop not null;

View File

@ -1,5 +1,5 @@
authoringsteps.basicproperties.description=General properties of an event, for example the begin and end date. authoringsteps.basicproperties.description=General properties of an event, for example the start and end of the event.
authoringsteps.basicproperties.label=Basic Properties authoringsteps.basicproperties.label=Basic Properties
authoringsteps.info.description=Extended information about the event, for example about the location. authoringsteps.info.description=Extended information about the event, for example about the location.
authoringstep.info.label=Event Info authoringstep.info.label=Event Info
@ -44,3 +44,73 @@ eventinfo_step.main_contributor.header.edit=Edit information about the organizer
eventinfo_step.location.editor.header=Informatio about the location of the event eventinfo_step.location.editor.header=Informatio about the location of the event
eventinfo_step.location.header.edit=Edit information about the location of event {0} for language {1} eventinfo_step.location.header.edit=Edit information about the location of event {0} for language {1}
eventinfo_step.main_contributor.editor.header=Information about the organizier of the event eventinfo_step.main_contributor.editor.header=Information about the organizier of the event
createform.initial_locale.label=Initial Locale
createform.summary.label=Summary
createform.workflow.help=The workflow to use for the new event.
basicproperties.eventdatetime.header=Start and End of the Event
basicproperties.startdate=Start of the event
basicproperties.enddate=End of the event
createform.startdate.help=Date and time of the start of the event.
createform.startdate.label=Start of the event
createstep.startdate.error.missing=The start of event set.
basicproperties.startdate.edit=Edit start of event
basicproperties.enddate.edit=Edit end of event
basicproperties.eventdatetime.edit=Edit
createstep.startdate.error.malformed=The date/time for the start of the event is malformed.
basicproperties.header=Edit basic properties of event {0}
basicproperties.name.header=Name
basicproperties.name.edit=Edit name
basicproperties.description.header=Description
basicproperties.name.edit.close=Cancel
basicproperties.name.edit.title=Edit name of event
basicproperties.name.help=The name of the event. Can only contain the letters a to z and A to Z, numbers, the underscore ("_") and the dash ("-").
basicproperties.name.label=Name
basicproperties.name.edit.submit=Update name of event
basicproperties.title.add=Add locale
basicproperties.title.add.cancel=Cancel
basicproperties.title.add.locale.help=The language to add.
basicproperties.title.add.locale.label=Locale
basicproperties.title.add.submit=Add locale
basicproperties.title.add.header=Add title locale
basicproperties.title.add.value.help=The localized title of the event.
basicproperties.title.add.value.label=Title
basicproperties.title.edit=Edit
basicproperties.title.edit.cancel=Cancel
basicproperties.title.edit.submit=Save
basicproperties.title.edit.header=Edit title
basicproperties.title.edit.value.help=The localized title of the event.
basicproperties.title.edit.value.label=Title
basicproperties.title.remove=Remove
basicproperties.title.remove.cancel=Cancel
basicproperties.title.remove.submit=Remove
basicproperties.title.remove.text=Are you sure to remove the localized title for the folloing locale?
basicproperties.title.remove.header=Remove localized title
basicproperties.title.header=Title
basicproperties.description.add=Add localized description
basicproperties.description.add.cancel=Cancel
basicproperties.description.add.locale.help=The locale of the localized description.
basicproperties.description.add.locale.label=Locale
basicproperties.description.add.submit=Add localized description
basicproperties.description.add.header=Add localized description
basicproperties.description.add.value.help=The localized description.
basicproperties.description.add.value.label=Description
basicproperties.description.edit=Edit
basicproperties.description.edit.cancel=Cancel
basicproperties.description.edit.submit=Submit
basicproperties.description.edit.header=Edit localized description
basicproperties.description.edit.value.help=The localized description.
basicproperties.description.edit.value.label=Description
basicproperties.description.remove=Remove
basicproperties.description.remove.cancel=Cancel
basicproperties.description.remove.submit=Remove localized description
basicproperties.description.remove.text=Are you sure to remove the localized description for this locale?
basicproperties.description.remove.header=Remove localized description
basicproperties.startdate.none=Start of event is missing.
basicproperties.enddate.none=End of event is missing
basicproperties.eventdatetime.edit.dialog.title=Edit start and end of the event
basicproperties.eventdatetime.edit.dialog.close=Cancel
basicproperties.eventdatetime.edit.dialog.startdate.help=Start of the event (date and time).
basicproperties.eventdatetime.edit.dialog.startdate.label=Start
basicproperties.eventdatetime.edit.dialog.enddate.help=The end of the event (date and time)
basicproperties.eventdatetime.edit.dialog.enddate.label=End
basicproperties.eventdatetime.edit.dialog.submit=Submit

View File

@ -14,7 +14,7 @@ createstep.workflow.error.not_available=Der ausgew\u00e4hlte Arbeitsablauf ist n
createform.title=Eine neue Veranstaltung anlegen createform.title=Eine neue Veranstaltung anlegen
createform.name.help=Der Name der neuen Veranstaltung. Darf nur die Buchstaben a bis z, A bis Z, Ziffern, den Bindestrich ("-") und den Unterstrich ("_") enthalten. createform.name.help=Der Name der neuen Veranstaltung. Darf nur die Buchstaben a bis z, A bis Z, Ziffern, den Bindestrich ("-") und den Unterstrich ("_") enthalten.
createform.name.label=Name createform.name.label=Name
createform.initial_locale.help=Die initiale Sprache der neuen Veranstaltung. Alle lokalisierbaren Angaben in diesem Formular werden f\u00fcr diese Sprache angelegt. createform.initial_locale.help=Initiale Sprache
createform.title.help=Der Titel der neuen Veranstaltung. createform.title.help=Der Titel der neuen Veranstaltung.
createform.title.label=Titel createform.title.label=Titel
createform.summary.help=Eine kurze Zusammenfassung der neuen Veranstaltung. createform.summary.help=Eine kurze Zusammenfassung der neuen Veranstaltung.
@ -44,3 +44,73 @@ eventinfo_step.main_contributor.header.edit=Informationen \u00fcber den Veransta
eventinfo_step.location.editor.header=Informationen \u00fcber den Ort der Veranstaltung eventinfo_step.location.editor.header=Informationen \u00fcber den Ort der Veranstaltung
eventinfo_step.location.header.edit=Informationen \u00fcber den Ort der Veranstaltung {0} f\u00fcr Sprache {1} bearbeiten eventinfo_step.location.header.edit=Informationen \u00fcber den Ort der Veranstaltung {0} f\u00fcr Sprache {1} bearbeiten
eventinfo_step.main_contributor.editor.header=Informationen \u00fcber den Veranstalter eventinfo_step.main_contributor.editor.header=Informationen \u00fcber den Veranstalter
createform.initial_locale.label=Initial Locale
createform.summary.label=Zusammenfassung
createform.workflow.help=Der Arbeitsablauf, der f\u00fcr die neue Veranstaltung verwendet wird.
basicproperties.eventdatetime.header=Beginn und Ende der Veranstaltung
basicproperties.startdate=Beginn der Veranstaltung
basicproperties.enddate=Ende der Veranstaltung
createform.startdate.help=Datum und Uhrzeit des Beginns der Veranstaltung.
createform.startdate.label=Beginn der Veranstaltung
createstep.startdate.error.missing=Der Beginn der Veranstaltugn wurde nicht angegeben.
basicproperties.startdate.edit=Beginn der Veranstaltung bearbeiten
basicproperties.enddate.edit=Ende der Veranstaltung bearbeiten
basicproperties.eventdatetime.edit=Bearbeiten
createstep.startdate.error.malformed=Der Zeitpunkt f\u00fcr den Beginn der Veranstaltung ist keine valide Datums-/Zeitangabe.
basicproperties.header=Basiseigenschaften der Veranstaltung {0} bearbeiten
basicproperties.name.header=Name
basicproperties.name.edit=Name bearbeiten
basicproperties.description.header=Beschreibung
basicproperties.name.edit.close=Abbrechen
basicproperties.name.edit.title=Name der Veranstaltung bearbeiten
basicproperties.name.help=Der Name der Veranstaltung. Darf nur die Buchstaben a bis z, A bis Z, Ziffern, den Bindestrich ("-") und den Unterstrich ("_") enthalten.
basicproperties.name.label=Name
basicproperties.name.edit.submit=Name der Veranstaltung aktualisieren
basicproperties.title.add=Sprache hinzuf\u00fcgen
basicproperties.title.add.cancel=Abbrechen
basicproperties.title.add.locale.help=Die Sprache, die hinzugef\u00fcgt wird.
basicproperties.title.add.locale.label=Sprache
basicproperties.title.add.submit=Sprache hinzuf\u00fcgen
basicproperties.title.add.header=Titel f\u00fcr Sprache hinzuf\u00fcgen
basicproperties.title.add.value.help=Der lokalisierte Titel der Veranstaltung.
basicproperties.title.add.value.label=Titel
basicproperties.title.edit=Bearbeiten
basicproperties.title.edit.cancel=Abbrechen
basicproperties.title.edit.submit=Speichern
basicproperties.title.edit.header=Titel bearbeiten
basicproperties.title.edit.value.help=Der lokalisierte Titel der Veranstaltung.
basicproperties.title.edit.value.label=Titel
basicproperties.title.remove=Entfernen
basicproperties.title.remove.cancel=Abbrechen
basicproperties.title.remove.submit=Entfernen
basicproperties.title.remove.text=Sind Sie sicher, dass den lokalisierten Titel f\u00fcr diese Sprache entfernen wollen?
basicproperties.title.remove.header=Lokalisierten Titel entfernen
basicproperties.title.header=Titel
basicproperties.description.add=Lokalisierte Beschreibung hinzuf\u00fcgen
basicproperties.description.add.cancel=Abbrechen
basicproperties.description.add.locale.help=Die Sprache der lokalisierten Beschreibung.
basicproperties.description.add.locale.label=Sprache
basicproperties.description.add.submit=Lokalisierte Beschreibung hinzuf\u00fcgen
basicproperties.description.add.header=Lokalisierte Beschreibung hinzuf\u00fcgen
basicproperties.description.add.value.help=Die lokalisierte Beschreibung.
basicproperties.description.add.value.label=Beschreibung
basicproperties.description.edit=Bearbeiten
basicproperties.description.edit.cancel=Abbrechen
basicproperties.description.edit.submit=Speichern
basicproperties.description.edit.header=Lokalisierte Beschreibung bearbeiten
basicproperties.description.edit.value.help=Die lokalisierte Beschreibung.
basicproperties.description.edit.value.label=Beschreibung
basicproperties.description.remove=Entfernen
basicproperties.description.remove.cancel=Abbrechen
basicproperties.description.remove.submit=Lokalisierte Beschreibung entfernen
basicproperties.description.remove.text=Sind Sie sicher, dass Sie die lokalisierte Beschreibung f\u00fcr diese Sprache entfernen wollen?
basicproperties.description.remove.header=Lokalisierte Beschreibung entfernen
basicproperties.startdate.none=Es wurde keine Begin angegeben.
basicproperties.enddate.none=Es wurde keine Ende der Veranstaltung angegeben.
basicproperties.eventdatetime.edit.dialog.title=Beginn und Ende der Veranstaltung bearbeiten
basicproperties.eventdatetime.edit.dialog.close=Abbrechen
basicproperties.eventdatetime.edit.dialog.startdate.help=Beginn und Ende der Veranstaltung (Datum und Uhrzeit)
basicproperties.eventdatetime.edit.dialog.startdate.label=Beginn
basicproperties.eventdatetime.edit.dialog.enddate.help=Ende der Veranstaltung (Datum und Uhrzeit)
basicproperties.eventdatetime.edit.dialog.enddate.label=Ende
basicproperties.eventdatetime.edit.dialog.submit=Speichern